PageRenderTime 44ms CodeModel.GetById 14ms RepoModel.GetById 0ms app.codeStats 0ms

/_plugins_/assoc/inc/assoc_panel.php

https://bitbucket.org/pombredanne/spip-zone-treemap
PHP | 273 lines | 190 code | 48 blank | 35 comment | 13 complexity | f57c57711bcb47dcd422f33fc03c40ad MD5 | raw file
  1. <?php
  2. // suppression d'une association
  3. function delete_association(){
  4. $cle = $_POST['cle'];
  5. $id = $_POST['id'];
  6. spip_query("DELETE FROM `association` WHERE `cle` = $cle and `id`=$id");
  7. }
  8. /*
  9. * Modele pour les diferents type de panneaux
  10. *
  11. */
  12. abstract class assoc_panel{
  13. private $nom;
  14. private $les_widgets;
  15. private $css_jss;
  16. private $autre_dir="";
  17. private $autre_js="";
  18. private $autre_css="";
  19. /*
  20. * Le constructeur est chargé de construire le html
  21. * plus exactement il recupere les 'widget'
  22. * chargé de donnee des possibilite de recherche par exemple
  23. */
  24. function __construct($nom="",$dir="",$js="",$css=""){
  25. $this->nom = $nom;
  26. $this->autre_dir = $dir;
  27. $this->autre_js = $js;
  28. $this->autre_css = $css;
  29. }
  30. function get_panel(){
  31. // On recupere les widgets
  32. $this->les_widgets = $this->widgets();
  33. // On recupere la/les css et le(s) js
  34. $this->css_jss = $this->css_js();
  35. // On construit le panel
  36. return $this->do_panel();
  37. }
  38. // on va recuperer la css en chargeant le dossier
  39. // css approprie en l'englobant dans des balises styles
  40. function css_js(){
  41. $nom = $this->nom;
  42. $rep = 'assoc';
  43. if ($this->autre_dir !="") $rep = $this->autre_dir;
  44. $fichier = dirname (__FILE__)."/../../../plugins/assoc/css/assoc.css";
  45. $open = fopen($fichier, "r");
  46. $retour = fread($open, filesize($fichier) );
  47. $css = "<style id='style_assoc_panel'>".$retour."</style>";
  48. fclose($open);
  49. /* On test si on demande un autre js */
  50. $file = $nom;
  51. if ($this->autre_css !="") $file = $this->autre_css;
  52. $fichier = dirname (__FILE__)."/../../../plugins/$rep/css/$file.css";
  53. if(file_exists($fichier)){
  54. $open = fopen($fichier, "r");
  55. $retour .= fread($open, filesize($fichier) );
  56. fclose($open);
  57. $css .= "<style id='style_assoc_panel'>".$retour."</style>";
  58. }
  59. /* On test si on demande un autre js */
  60. $file = $nom;
  61. if ($this->autre_js !="") $file = $this->autre_js;
  62. $fichier = dirname (__FILE__)."/../../../plugins/$rep/js/$file.js";
  63. if(file_exists($fichier)){
  64. $open = fopen($fichier, "r");
  65. $retour = fread($open, filesize($fichier) );
  66. fclose($open);
  67. $js = "<script id='js_assoc_panel'>".$retour."</script>";
  68. }
  69. return $css.$js;
  70. }
  71. // fonction qui va construire le panneau
  72. // il va egalement recuperer les widgets
  73. function do_panel(){
  74. // on recupêre les style globaux
  75. $css_js = $this->css_jss;
  76. $zone = $this->zone;
  77. $recherche = $this->les_widgets['panel_recherche'];
  78. $assoc = $this->les_widgets['panel_assoc'];
  79. // On va recuperer la taille de chaque element
  80. $a = $this->les_widgets['taille'];
  81. $taille = explode(",",$a);
  82. $large = $taille[0];
  83. $haut = $taille[1];
  84. $haut_insert = $taille[3];
  85. // la recherche
  86. $large_recherche = $taille[2];
  87. $haut_recherche = $haut-16-$haut_insert;
  88. // les resultats
  89. $large_resultat = 100 - $large_recherche;
  90. $haut_resultat = $haut - 16 - $haut_insert;
  91. $style = '
  92. <style type="text/css">
  93. #panel_conteneur {width : '.$large.'px ; height : '.$haut.'px }
  94. #panel_recherche { width : '.$large_recherche.'% ; height : '.$haut_recherche.'px}
  95. #panel_resultat { width : '.$large_resultat.'% ; height : '.$haut_resultat.'px ; }
  96. #panel_assoc { height : '.$haut_insert.'px ; }
  97. </style>
  98. ';
  99. $retour ="
  100. <div id='panel_conteneur'>
  101. <div id='panel_relative'>
  102. <div id='panel_haut' class='pb' onclick='class_assoc.close()'><span id='fermer_panel' />Fermer</div>
  103. <div id='panel_recherche' class='pb'>$recherche</div>
  104. <div id='panel_resultat' class='pb'></div>
  105. <div id='panel_assoc' class='pb'>$assoc</div>
  106. </div>
  107. $css_js
  108. $style
  109. </div>
  110. ";
  111. return $retour;
  112. }
  113. function get_pagination(){
  114. return "<p id='pagination'>
  115. <span class='btn-nav' id='retour5' onclick='class_assoc.pagination(-5)'> </span>
  116. <span class='btn-nav' id='retour1' onclick='class_assoc.pagination(-1)'></span>
  117. <span>page</span>
  118. <span class='btn-nav' id='avance1' onclick='class_assoc.pagination(1)'></span>
  119. <span class='btn-nav' id='avance5' onclick='class_assoc.pagination(5)'> </span>
  120. </p>";
  121. }
  122. // insertion d'une association
  123. function add(){
  124. include_spip("inc/filtres");
  125. // on securise certaine donne avant l'insertion en base
  126. $titre = "";
  127. $descriptif = "";
  128. if (isset($_POST['titre']))$titre = trim(corriger_caracteres($_POST['titre']));
  129. if (isset($_POST['descriptif']))$descriptif = trim(corriger_caracteres($_POST['descriptif']));
  130. if (strlen($titre)>150)$titre ="";
  131. if (strlen($descriptif)>255)$descriptif ="";
  132. // on recupere les autres donnees
  133. $id = $_POST['id'];
  134. $id_lien = $_POST['id_lien'];
  135. $type_id = trim(corriger_caracteres($_POST['type_id']));
  136. $type_lien = trim(corriger_caracteres($_POST['type_lien']));
  137. if (strlen($type_id)>20)return;
  138. if (strlen($type_lien)>20)return;
  139. // on test que le lien n'existe pas deja
  140. // prevoir les tests ci lien deja existant
  141. $nb = sql_select("'cle'", "association", "id=$id and id_lien=$id_lien and type_id='$type_id' and type_lien='$type_lien'");
  142. if (sql_count($nb) >=1) return;
  143. // on envoi la requete
  144. // id id_lien type_id type_lien titre descriptif type
  145. $tab = array("id"=>$id, "id_lien"=> $id_lien, "type_id"=> $type_id, "type_lien"=>$type_lien,
  146. "titre"=>$titre, "descriptif"=> $descriptif);
  147. sql_insertq("association",$tab);
  148. }
  149. // recherche
  150. abstract function find();
  151. // On va passer nos sympathique widget
  152. abstract function widgets();
  153. }
  154. class panel_article extends assoc_panel {
  155. public function find(){
  156. /* On va recuperer l'ensemble des parametres venant de la recherche */
  157. $debut = $_POST["debut"];
  158. $fin = $_POST["fin"];
  159. $page = $_POST["page"] * 10;
  160. $rub = $_POST["rubrique"];
  161. $tab = array ("rubrique" => $rub , "debut" => $debut ,"fin" => $fin ,"page" => $page );
  162. $xml = new SimpleXMLElement(recuperer_fond("fonds/recherche/article",$tab));
  163. // on recupere le nbre d'article
  164. // s'il n'y en a pas on affiche pas de resultat
  165. $taille = count($xml->article);
  166. if ($taille==0) return "Aucun résultat pour votre recherche d'article ";
  167. $pagin = $this->get_pagination();
  168. $pagin = str_replace("page",$_POST["page"],$pagin);
  169. $retour = "$pagin<table><tr><td width='100'><strong>Date</strong></td><td width='180'><strong>Titre</strong></td><td width='190'><strong>texte</strong></td><td width='90'><strong>Rub</strong></td><td width='60'></td></tr>";
  170. for($i=0; $i <$taille;$i++){
  171. $id = $xml->article[$i]->id;
  172. $retour .= "<tr>";
  173. $retour .= "<td>".$xml->article[$i]->date."</td>";
  174. $retour .= "<td class='titre' value='$id'>".$xml->article[$i]->titre."</td>";
  175. $retour .= "<td>".$xml->article[$i]->texte."</td>";
  176. $retour .= "<td>".$xml->article[$i]->rubrique."</td>";
  177. $retour .= "<td class='preselect' onclick='class_assoc.associer($id)'>associer</td>";
  178. $retour .= "</tr>";
  179. }
  180. echo $retour."</table>";
  181. }
  182. public function widgets(){
  183. $tab["panel_recherche"] = recuperer_fond("fonds/panel_recherche/panel_article");
  184. $tab["panel_assoc"] = "<fieldset>
  185. <legend>Associer</legend>
  186. <p id='titre_art'></p>
  187. <input type='button' value='Associer' onclick='class_assoc.associer()' />
  188. </fieldset>
  189. ";
  190. // Pour la taille :
  191. // largeur du panneau global en px
  192. // hauteur du panneau global en px
  193. // largeur de la zone de recherche en %
  194. // hauteur de la zone de insertion en px
  195. $tab["taille"] = '950,550,23,60';
  196. return $tab;
  197. }
  198. }
  199. class panel_rubrique extends assoc_panel {
  200. public function find(){
  201. }
  202. public function widgets(){
  203. $tab["panel_recherche"] = recuperer_fond("fonds/panel_recherche/panel_rubrique");
  204. $tab["panel_assoc"] = "";
  205. $tab["taille"] = '400,300,100,0';
  206. return $tab;
  207. }
  208. }
  209. ?>