PageRenderTime 48ms CodeModel.GetById 19ms RepoModel.GetById 0ms app.codeStats 0ms

/_plugins_/COG/trunk/cog_fonctions.php

https://bitbucket.org/pombredanne/spip-zone-treemap
PHP | 327 lines | 223 code | 74 blank | 30 comment | 26 complexity | 44e46695358375dc13b26b608565b202 MD5 | raw file
  1. <?php
  2. /*
  3. * Plugin COG
  4. * (c) 2009 Guillaume Wauquier
  5. * Distribue sous licence GPL
  6. *
  7. */
  8. /**
  9. * Retrouver le nom du dossier ou sont stockees les compositions
  10. * reglage par defaut, ou valeur personalisee via cfg
  11. *
  12. * @return string
  13. */
  14. function cog_chemin_donnee(){
  15. $config_chemin = 'base/donnee/';
  16. if (isset($GLOBALS['meta']['cog'])){
  17. $config = unserialize($GLOBALS['meta']['cog']);
  18. $config_chemin = rtrim($config['chemin_donnee'],'/').'/';
  19. }
  20. return $config_chemin;
  21. }
  22. // Critere {communes} : "l'article est lie a tous les communes demandes"
  23. function critere_communes_dist($idb, &$boucles, $crit,$id_ou_titre=false) {
  24. $boucle = &$boucles[$idb];
  25. if (isset($crit->param[0][0])) {
  26. $score = calculer_liste(array($crit->param[0][0]), array(), $boucles, $boucles[$idb]->id_parent);
  27. } else{
  28. $score = "'100%'";
  29. }
  30. if (isset($crit->param[0][1])){
  31. $quoi = calculer_liste(array($crit->param[0][1]), array(), $boucles, $boucles[$idb]->id_parent);
  32. }
  33. else{
  34. $quoi = '@$Pile[0]["communes"]';
  35. }
  36. $boucle->hash .= '
  37. // {COMMUNES}
  38. $prepare_communes = charger_fonction(\'prepare_communes\', \'inc\');
  39. $communes_where = $prepare_communes('.$quoi.', "'.$boucle->id_table.'", "'.$crit->cond.'", '.$score.', "' . $boucle->sql_serveur . '","'.$id_ou_titre.'");
  40. ';
  41. $t = $boucle->id_table . '.' . $boucle->primary;
  42. if (!in_array($t, $boucles[$idb]->select))
  43. $boucle->select[]= $t; # pour postgres, neuneu ici
  44. $boucle->where[] = "\n\t\t".'$communes_where';
  45. }
  46. function critere_communes_selon_id_dist($idb, &$boucles, $crit){
  47. critere_communes_dist($idb, $boucles, $crit,'id');
  48. }
  49. function critere_communes_selon_code_dist($idb, &$boucles, $crit){
  50. critere_communes_dist($idb, $boucles, $crit,'code');
  51. }
  52. function inc_prepare_communes_dist($communes, $table='articles', $cond=false, $score, $serveur='',$id_ou_code=false) {
  53. $score = trim($score);
  54. if (!is_array($communes)
  55. OR !$communes = array_filter($communes)) {
  56. // traiter le cas {mots?}
  57. if ($cond)
  58. return '';
  59. else
  60. // {mots} mais pas de mot dans l'url
  61. return '0=1';
  62. }
  63. $_table = str_replace('spip_', '', table_objet_sql($table));
  64. $_id_table = id_table_objet($table);
  65. $where = array();
  66. //selon le cas, on sélèctionne sur les titres ou sur les id
  67. if (!$id_ou_titre){
  68. foreach($communes as $commune) {
  69. if (preg_match(',^[1-9][0-9]*$,', $commune))
  70. $id_cog_commune = $commune;
  71. else
  72. $id_cog_commune = sql_getfetsel('id_cog_commune', 'spip_cog_communes', 'nom='.sql_quote($commune));
  73. $where[] = 'id_cog_commune='.sql_quote($id_cog_commune);
  74. }
  75. }
  76. elseif($id_ou_titre == 'id'){
  77. foreach($communes as $commune) {
  78. $where[] = 'id_cog_commune='.sql_quote($id_cog_commune);
  79. }
  80. }
  81. elseif($id_ou_titre == 'code'){
  82. foreach($communes as $commune) {
  83. $id_cog_commune = sql_getfetsel('id_cog_commune', 'spip_cog_communes', 'code='.sql_quote($commune));
  84. $where[] = 'id_cog_commune='.sql_quote($id_cog_commune);
  85. }
  86. }
  87. // on analyse la jointure spip_mots_$_table
  88. // sans regarder spip_mots ni les groupes
  89. // (=> faire attention si on utilise les mots techniques)
  90. // si on a un % dans le score, c'est que c'est un %age
  91. if (substr($score,-1)=='%'){
  92. $score = str_replace('%','',$score);
  93. $having = ' HAVING SUM(1) >= '.ceil($score/100 * count($where)) ;
  94. }
  95. elseif ((0 < $score) and ($score < 1)){
  96. $having = ' HAVING SUM(1) >= '.ceil($score * count($where)) ;
  97. }
  98. else{
  99. $having = ' HAVING SUM(1) >= '. $score;
  100. }
  101. $wh = "$_table.$_id_table IN (
  102. SELECT id_objet FROM spip_cog_communes_liens WHERE objet=".sql_quote(substr($_table, 0, -1))." AND "
  103. . join(' OR ', $where)
  104. . ' GROUP BY id_objet'
  105. . $having
  106. . "\n\t)";
  107. return $wh;
  108. }
  109. // Critere {departements} : "l'article est lie a tous les departements demandes"
  110. function critere_departements_dist($idb, &$boucles, $crit,$id_ou_titre=false) {
  111. $boucle = &$boucles[$idb];
  112. if (isset($crit->param[0][0])) {
  113. $score = calculer_liste(array($crit->param[0][0]), array(), $boucles, $boucles[$idb]->id_parent);
  114. } else{
  115. $score = "'100%'";
  116. }
  117. if (isset($crit->param[0][1])){
  118. $quoi = calculer_liste(array($crit->param[0][1]), array(), $boucles, $boucles[$idb]->id_parent);
  119. }
  120. else{
  121. $quoi = '@$Pile[0]["departements"]';
  122. }
  123. $boucle->hash .= '
  124. // {departementS}
  125. $prepare_departements = charger_fonction(\'prepare_departements\', \'inc\');
  126. $departements_where = $prepare_departements('.$quoi.', "'.$boucle->id_table.'", "'.$crit->cond.'", '.$score.', "' . $boucle->sql_serveur . '","'.$id_ou_titre.'");
  127. ';
  128. $t = $boucle->id_table . '.' . $boucle->primary;
  129. if (!in_array($t, $boucles[$idb]->select))
  130. $boucle->select[]= $t; # pour postgres, neuneu ici
  131. $boucle->where[] = "\n\t\t".'$departements_where';
  132. }
  133. function critere_departements_selon_id_dist($idb, &$boucles, $crit){
  134. critere_departements_dist($idb, $boucles, $crit,'id');
  135. }
  136. function critere_departements_selon_code_dist($idb, &$boucles, $crit){
  137. critere_departements_dist($idb, $boucles, $crit,'code');
  138. }
  139. function inc_prepare_departements_dist($departements, $table='articles', $cond=false, $score, $serveur='',$id_ou_code=false) {
  140. $score = trim($score);
  141. if (!is_array($departements)
  142. OR !$departements = array_filter($departements)) {
  143. // traiter le cas {mots?}
  144. if ($cond)
  145. return '';
  146. else
  147. // {mots} mais pas de mot dans l'url
  148. return '0=1';
  149. }
  150. $_table = str_replace('spip_', '', table_objet_sql($table));
  151. $_id_table = id_table_objet($table);
  152. $where = array();
  153. foreach($departements as $departement) {
  154. $where[] = 'departement = '.sql_quote($departement);
  155. }
  156. // on analyse la jointure spip_mots_$_table
  157. // sans regarder spip_mots ni les groupes
  158. // (=> faire attention si on utilise les mots techniques)
  159. // si on a un % dans le score, c'est que c'est un %age
  160. $having=' HAVING COUNT( DISTINCT concat( id_objet,\'-\', departement ) ) >=';
  161. if (substr($score,-1)=='%'){
  162. $score = str_replace('%','',$score);
  163. $having .= ceil($score/100 * count($where)) ;
  164. }
  165. elseif ((0 < $score) and ($score < 1)){
  166. $having .= ceil($score * count($where)) ;
  167. }
  168. else{
  169. $having .= $score;
  170. }
  171. $wh = "$_table.$_id_table IN (
  172. SELECT id_objet FROM spip_cog_communes_liens l left join spip_cog_communes com on com.id_cog_commune=l.id_cog_commune where objet=".sql_quote(substr($_table, 0, -1))." AND "
  173. .'('. join(' OR ', $where).')'
  174. . ' GROUP BY id_objet'
  175. . $having
  176. . "\n\t)";
  177. return $wh;
  178. }
  179. include_spip("cog_config");
  180. function balise_COG_TABLE($p)
  181. {
  182. $p->code = "cog_config_tab_table()";
  183. return $p;
  184. }
  185. function cog_recherche_commune($nom_ville,$code_departement="")
  186. {
  187. $where='';
  188. if (!empty($code_departement))
  189. $where = 'and departement='.sql_quote($code_departement);
  190. $items=sql_allfetsel('distinct id_cog_commune as id,trim(concat(MID(article,2,LENGTH(article_majuscule)-2),concat(\' \',nom))) as label','spip_cog_communes','nom_majuscule like '.sql_quote(strtoupper($nom_ville).'%').' or concat(MID(article_majuscule,2,LENGTH(article_majuscule)-2),concat(\' \',nom_majuscule)) like '.sql_quote(strtoupper($nom_ville).'%').$where);
  191. return $items;
  192. }
  193. function cog_formulaire_recherche_commune($id_cog_commune,$nom_ville,$code_departement="")
  194. {
  195. if(intval($id_cog_commune)!=0)
  196. {
  197. $item=sql_fetsel('distinct id_cog_commune as id_cog_commune,trim(concat(MID(article,2,LENGTH(article_majuscule)-2),concat(\' \',nom))) as label,code,departement','spip_cog_communes','id_cog_commune='.intval($where));
  198. }
  199. else
  200. {
  201. $item=cog_recherche_commune_strict($nom_ville,$code_departement);
  202. }
  203. if(isset($item['id_cog_commune'])) {
  204. return $item;
  205. }
  206. else {
  207. $erreurs='La commune de "'.$nom_ville.'" est introuvable';
  208. }
  209. }
  210. function cog_recherche_id_commune_strict($nom_ville,$code_departement="")
  211. {
  212. $cog_commune=cog_recherche_commune_strict($nom_ville,$code_departement);
  213. if(isset($cog_commune['id_cog_commune']))
  214. return $cog_commune['id_cog_commune'];
  215. return null;
  216. }
  217. function cog_recherche_commune_strict($nom_ville,$code_departement="")
  218. {
  219. $where='';
  220. if (!empty($code_departement))
  221. $where = 'and departement='.sql_quote($code_departement);
  222. $item=sql_fetsel('distinct id_cog_commune as id_cog_commune,trim(concat(MID(article,2,LENGTH(article_majuscule)-2),concat(\' \',nom))) as label,code,departement','spip_cog_communes','nom_majuscule = '.sql_quote(strtoupper($nom_ville)).' or concat(MID(article_majuscule,2,LENGTH(article_majuscule)-2),concat(\' \',nom_majuscule)) = '.sql_quote(strtoupper($nom_ville)).$where);
  223. return $item;
  224. }
  225. function get_nom_commune($id_cog_commune)
  226. {
  227. return sql_getfetsel('trim(concat(MID(article,2,LENGTH(article_majuscule)-2),concat(\' \',nom))) as nom_commune', 'spip_cog_communes','id_cog_commune = '.sql_quote($id_cog_commune));
  228. }
  229. ////////////////////////////////////////
  230. // Pour l'espace privé en version 2.1
  231. ///////////////////////////////////////
  232. function filtre_cog_bloc_des_raccourcis($bloc,$titre=""){
  233. global $spip_display;
  234. if($titre=='')
  235. $titre=_T('titre_cadre_raccourcis');
  236. include_spip('inc/presentation');
  237. return "\n"
  238. . creer_colonne_droite('',true)
  239. . debut_cadre_enfonce('',true)
  240. . (($spip_display != 4)
  241. ? ("\n<div style='font-size: x-small' class='verdana1'><b>"
  242. .$titre
  243. ."</b>")
  244. : ( "<h3>".$titre."</h3><ul>"))
  245. . $bloc
  246. . (($spip_display != 4) ? "</div>" : "</ul>")
  247. . fin_cadre_enfonce(true);
  248. }
  249. function filtre_cog_icone_horizontale($lien, $texte="", $fond = "", $fonction = "", $javascript='') {
  250. include_spip('inc/presentation');
  251. return icone_horizontale($texte, $lien, $fond, $fonction, false, $javascript);
  252. }
  253. ?>