@@ -322,7 +322,7 @@ discard block |
||
| 322 | 322 | * est dans une autre table et construit la jointure dessus |
| 323 | 323 | * - liste (table, champ, fonction) idem, mais en passant un |
| 324 | 324 | * nom de fonction qui s'occupera de créer la jointure. |
| 325 | - * @return array |
|
| 325 | + * @return string[] |
|
| 326 | 326 | * Liste (nom du champ alias, nom du champ). Le nom du champ alias |
| 327 | 327 | * est une expression pour le SELECT de la boucle du style "mots.titre AS titre_mot" |
| 328 | 328 | **/ |
@@ -500,7 +500,7 @@ discard block |
||
| 500 | 500 | * Nom de la balise |
| 501 | 501 | * @param Champ $p |
| 502 | 502 | * AST au niveau de la balise |
| 503 | - * @return string |
|
| 503 | + * @return Champ |
|
| 504 | 504 | * Code PHP pour d'exécution de la balise et de ses filtres |
| 505 | 505 | **/ |
| 506 | 506 | function calculer_balise_DEFAUT_dist($nom, $p) { |
@@ -784,6 +784,9 @@ discard block |
||
| 784 | 784 | // - deux etoiles => pas de securite non plus ! |
| 785 | 785 | // |
| 786 | 786 | // http://code.spip.net/@applique_filtres |
| 787 | +/** |
|
| 788 | + * @param Champ $p |
|
| 789 | + */ |
|
| 787 | 790 | function applique_filtres($p) { |
| 788 | 791 | |
| 789 | 792 | // Traitements standards (cf. supra) |
@@ -858,6 +861,9 @@ discard block |
||
| 858 | 861 | |
| 859 | 862 | // Filtres et,ou,oui,non,sinon,xou,xor,and,or,not,yes |
| 860 | 863 | // et comparateurs |
| 864 | +/** |
|
| 865 | + * @param string $arg |
|
| 866 | + */ |
|
| 861 | 867 | function filtre_logique($fonc, $code, $arg) { |
| 862 | 868 | |
| 863 | 869 | switch (true) { |
@@ -881,6 +887,9 @@ discard block |
||
| 881 | 887 | } |
| 882 | 888 | |
| 883 | 889 | // http://code.spip.net/@compose_filtres_args |
| 890 | +/** |
|
| 891 | + * @param string $sep |
|
| 892 | + */ |
|
| 884 | 893 | function compose_filtres_args($p, $args, $sep) { |
| 885 | 894 | $arglist = ""; |
| 886 | 895 | foreach ($args as $arg) { |
@@ -928,6 +937,11 @@ discard block |
||
| 928 | 937 | // |
| 929 | 938 | |
| 930 | 939 | // http://code.spip.net/@rindex_pile |
| 940 | +/** |
|
| 941 | + * @param Champ $p |
|
| 942 | + * @param string $champ |
|
| 943 | + * @param string $motif |
|
| 944 | + */ |
|
| 931 | 945 | function rindex_pile($p, $champ, $motif) { |
| 932 | 946 | $n = 0; |
| 933 | 947 | $b = $p->id_boucle; |
@@ -957,7 +971,7 @@ discard block |
||
| 957 | 971 | |
| 958 | 972 | /** |
| 959 | 973 | * Retourne le nom de la balise indiquée pour les messages d’erreurs |
| 960 | - * @param Pile $p Description de la balise |
|
| 974 | + * @param Champ $p Description de la balise |
|
| 961 | 975 | * @param string $champ Nom du champ |
| 962 | 976 | * @return string Nom de la balise, avec indication de boucle explicite si présent. |
| 963 | 977 | */ |
@@ -16,7 +16,7 @@ discard block |
||
| 16 | 16 | * @package SPIP\Core\Compilateur\References |
| 17 | 17 | **/ |
| 18 | 18 | if (!defined('_ECRIRE_INC_VERSION')) { |
| 19 | - return; |
|
| 19 | + return; |
|
| 20 | 20 | } |
| 21 | 21 | |
| 22 | 22 | /** |
@@ -41,14 +41,14 @@ discard block |
||
| 41 | 41 | * - '' si une référence explicite incorrecte est envoyée |
| 42 | 42 | */ |
| 43 | 43 | function index_boucle($p) { |
| 44 | - if (strlen($p->nom_boucle)) { |
|
| 45 | - // retourne l’index explicite demandé s’il existe |
|
| 46 | - if (!empty($p->boucles[$p->nom_boucle])) { |
|
| 47 | - return $p->nom_boucle; |
|
| 48 | - } |
|
| 49 | - return ''; |
|
| 50 | - } |
|
| 51 | - return $p->id_boucle; |
|
| 44 | + if (strlen($p->nom_boucle)) { |
|
| 45 | + // retourne l’index explicite demandé s’il existe |
|
| 46 | + if (!empty($p->boucles[$p->nom_boucle])) { |
|
| 47 | + return $p->nom_boucle; |
|
| 48 | + } |
|
| 49 | + return ''; |
|
| 50 | + } |
|
| 51 | + return $p->id_boucle; |
|
| 52 | 52 | } |
| 53 | 53 | |
| 54 | 54 | |
@@ -71,17 +71,17 @@ discard block |
||
| 71 | 71 | * - '' si une référence explicite incorrecte est envoyée |
| 72 | 72 | */ |
| 73 | 73 | function index_boucle_mere($p) { |
| 74 | - if (strlen($p->nom_boucle)) { |
|
| 75 | - // retourne l’index explicite demandé s’il existe |
|
| 76 | - if (!empty($p->boucles[$p->nom_boucle])) { |
|
| 77 | - return $p->nom_boucle; |
|
| 78 | - } |
|
| 79 | - return ''; |
|
| 80 | - } |
|
| 81 | - if (!empty($p->descr['id_mere'])) { |
|
| 82 | - return $p->descr['id_mere']; |
|
| 83 | - } |
|
| 84 | - return ''; |
|
| 74 | + if (strlen($p->nom_boucle)) { |
|
| 75 | + // retourne l’index explicite demandé s’il existe |
|
| 76 | + if (!empty($p->boucles[$p->nom_boucle])) { |
|
| 77 | + return $p->nom_boucle; |
|
| 78 | + } |
|
| 79 | + return ''; |
|
| 80 | + } |
|
| 81 | + if (!empty($p->descr['id_mere'])) { |
|
| 82 | + return $p->descr['id_mere']; |
|
| 83 | + } |
|
| 84 | + return ''; |
|
| 85 | 85 | } |
| 86 | 86 | |
| 87 | 87 | /** |
@@ -115,69 +115,69 @@ discard block |
||
| 115 | 115 | * Code PHP pour obtenir le champ SQL |
| 116 | 116 | */ |
| 117 | 117 | function index_pile( |
| 118 | - $idb, |
|
| 119 | - $nom_champ, |
|
| 120 | - &$boucles, |
|
| 121 | - $explicite = '', |
|
| 122 | - $defaut = null, |
|
| 123 | - $remonte_pile = true, |
|
| 124 | - $select = true |
|
| 118 | + $idb, |
|
| 119 | + $nom_champ, |
|
| 120 | + &$boucles, |
|
| 121 | + $explicite = '', |
|
| 122 | + $defaut = null, |
|
| 123 | + $remonte_pile = true, |
|
| 124 | + $select = true |
|
| 125 | 125 | ) { |
| 126 | - if (!is_string($defaut)) { |
|
| 127 | - $defaut = '@$Pile[0][\'' . strtolower($nom_champ) . '\']'; |
|
| 128 | - } |
|
| 129 | - |
|
| 130 | - $i = 0; |
|
| 131 | - if (strlen($explicite)) { |
|
| 132 | - // Recherche d'un champ dans un etage superieur |
|
| 133 | - while (($idb !== $explicite) && ($idb !== '')) { |
|
| 134 | - # spip_log("Cherchexpl: $nom_champ '$explicite' '$idb' '$i'"); |
|
| 135 | - $i++; |
|
| 136 | - $idb = $boucles[$idb]->id_parent; |
|
| 137 | - } |
|
| 138 | - } |
|
| 139 | - |
|
| 140 | - # spip_log("Cherche: $nom_champ a partir de '$idb'"); |
|
| 141 | - $nom_champ = strtolower($nom_champ); |
|
| 142 | - $conditionnel = array(); |
|
| 143 | - // attention: entre la boucle nommee 0, "" et le tableau vide, |
|
| 144 | - // il y a incoherences qu'il vaut mieux eviter |
|
| 145 | - while (isset($boucles[$idb])) { |
|
| 146 | - $joker = true; |
|
| 147 | - // modifie $joker si tous les champs sont autorisés. |
|
| 148 | - // $t = le select pour le champ, si on l'a trouvé (ou si joker) |
|
| 149 | - // $c = le nom du champ demandé |
|
| 150 | - list($t, $c) = index_tables_en_pile($idb, $nom_champ, $boucles, $joker); |
|
| 151 | - if ($t) { |
|
| 152 | - if ($select and !in_array($t, $boucles[$idb]->select)) { |
|
| 153 | - $boucles[$idb]->select[] = $t; |
|
| 154 | - } |
|
| 155 | - $champ = '$Pile[$SP' . ($i ? "-$i" : "") . '][\'' . $c . '\']'; |
|
| 156 | - if (!$joker) { |
|
| 157 | - return index_compose($conditionnel, $champ); |
|
| 158 | - } |
|
| 159 | - |
|
| 160 | - // tant que l'on trouve des tables avec joker, on continue |
|
| 161 | - // avec la boucle parente et on conditionne à l'exécution |
|
| 162 | - // la présence du champ. Si le champ existe à l'exécution |
|
| 163 | - // dans une boucle, il est pris, sinon on le cherche dans le parent... |
|
| 164 | - $conditionnel[] = "isset($champ)?$champ"; |
|
| 165 | - } |
|
| 166 | - |
|
| 167 | - if ($remonte_pile) { |
|
| 168 | - # spip_log("On remonte vers $i"); |
|
| 169 | - // Sinon on remonte d'un cran |
|
| 170 | - $idb = $boucles[$idb]->id_parent; |
|
| 171 | - $i++; |
|
| 172 | - } else { |
|
| 173 | - $idb = null; |
|
| 174 | - } |
|
| 175 | - } |
|
| 176 | - |
|
| 177 | - # spip_log("Pas vu $nom_champ"); |
|
| 178 | - // esperons qu'il y sera |
|
| 179 | - // ou qu'on a fourni une valeur par "defaut" plus pertinent |
|
| 180 | - return index_compose($conditionnel, $defaut); |
|
| 126 | + if (!is_string($defaut)) { |
|
| 127 | + $defaut = '@$Pile[0][\'' . strtolower($nom_champ) . '\']'; |
|
| 128 | + } |
|
| 129 | + |
|
| 130 | + $i = 0; |
|
| 131 | + if (strlen($explicite)) { |
|
| 132 | + // Recherche d'un champ dans un etage superieur |
|
| 133 | + while (($idb !== $explicite) && ($idb !== '')) { |
|
| 134 | + # spip_log("Cherchexpl: $nom_champ '$explicite' '$idb' '$i'"); |
|
| 135 | + $i++; |
|
| 136 | + $idb = $boucles[$idb]->id_parent; |
|
| 137 | + } |
|
| 138 | + } |
|
| 139 | + |
|
| 140 | + # spip_log("Cherche: $nom_champ a partir de '$idb'"); |
|
| 141 | + $nom_champ = strtolower($nom_champ); |
|
| 142 | + $conditionnel = array(); |
|
| 143 | + // attention: entre la boucle nommee 0, "" et le tableau vide, |
|
| 144 | + // il y a incoherences qu'il vaut mieux eviter |
|
| 145 | + while (isset($boucles[$idb])) { |
|
| 146 | + $joker = true; |
|
| 147 | + // modifie $joker si tous les champs sont autorisés. |
|
| 148 | + // $t = le select pour le champ, si on l'a trouvé (ou si joker) |
|
| 149 | + // $c = le nom du champ demandé |
|
| 150 | + list($t, $c) = index_tables_en_pile($idb, $nom_champ, $boucles, $joker); |
|
| 151 | + if ($t) { |
|
| 152 | + if ($select and !in_array($t, $boucles[$idb]->select)) { |
|
| 153 | + $boucles[$idb]->select[] = $t; |
|
| 154 | + } |
|
| 155 | + $champ = '$Pile[$SP' . ($i ? "-$i" : "") . '][\'' . $c . '\']'; |
|
| 156 | + if (!$joker) { |
|
| 157 | + return index_compose($conditionnel, $champ); |
|
| 158 | + } |
|
| 159 | + |
|
| 160 | + // tant que l'on trouve des tables avec joker, on continue |
|
| 161 | + // avec la boucle parente et on conditionne à l'exécution |
|
| 162 | + // la présence du champ. Si le champ existe à l'exécution |
|
| 163 | + // dans une boucle, il est pris, sinon on le cherche dans le parent... |
|
| 164 | + $conditionnel[] = "isset($champ)?$champ"; |
|
| 165 | + } |
|
| 166 | + |
|
| 167 | + if ($remonte_pile) { |
|
| 168 | + # spip_log("On remonte vers $i"); |
|
| 169 | + // Sinon on remonte d'un cran |
|
| 170 | + $idb = $boucles[$idb]->id_parent; |
|
| 171 | + $i++; |
|
| 172 | + } else { |
|
| 173 | + $idb = null; |
|
| 174 | + } |
|
| 175 | + } |
|
| 176 | + |
|
| 177 | + # spip_log("Pas vu $nom_champ"); |
|
| 178 | + // esperons qu'il y sera |
|
| 179 | + // ou qu'on a fourni une valeur par "defaut" plus pertinent |
|
| 180 | + return index_compose($conditionnel, $defaut); |
|
| 181 | 181 | } |
| 182 | 182 | |
| 183 | 183 | /** |
@@ -191,12 +191,12 @@ discard block |
||
| 191 | 191 | * @return string Code PHP complet de recherche d'un champ |
| 192 | 192 | */ |
| 193 | 193 | function index_compose($conditionnel, $defaut) { |
| 194 | - while ($c = array_pop($conditionnel)) { |
|
| 195 | - // si on passe defaut = '', ne pas générer d'erreur de compilation. |
|
| 196 | - $defaut = "($c:(" . ($defaut ? $defaut : "''") . "))"; |
|
| 197 | - } |
|
| 194 | + while ($c = array_pop($conditionnel)) { |
|
| 195 | + // si on passe defaut = '', ne pas générer d'erreur de compilation. |
|
| 196 | + $defaut = "($c:(" . ($defaut ? $defaut : "''") . "))"; |
|
| 197 | + } |
|
| 198 | 198 | |
| 199 | - return $defaut; |
|
| 199 | + return $defaut; |
|
| 200 | 200 | } |
| 201 | 201 | |
| 202 | 202 | /** |
@@ -232,74 +232,74 @@ discard block |
||
| 232 | 232 | **/ |
| 233 | 233 | function index_tables_en_pile($idb, $nom_champ, &$boucles, &$joker) { |
| 234 | 234 | |
| 235 | - $r = $boucles[$idb]->type_requete; |
|
| 236 | - // boucle recursive, c'est foutu... |
|
| 237 | - if ($r == TYPE_RECURSIF) { |
|
| 238 | - return array(); |
|
| 239 | - } |
|
| 240 | - if (!$r) { |
|
| 241 | - $joker = false; // indiquer a l'appelant |
|
| 242 | - # continuer pour chercher l'erreur suivante |
|
| 243 | - return array("'#" . $r . ':' . $nom_champ . "'", ''); |
|
| 244 | - } |
|
| 245 | - |
|
| 246 | - $desc = $boucles[$idb]->show; |
|
| 247 | - // le nom du champ est il une exception de la table ? un alias ? |
|
| 248 | - $excep = isset($GLOBALS['exceptions_des_tables'][$r]) ? $GLOBALS['exceptions_des_tables'][$r] : ''; |
|
| 249 | - if ($excep) { |
|
| 250 | - $excep = isset($excep[$nom_champ]) ? $excep[$nom_champ] : ''; |
|
| 251 | - } |
|
| 252 | - if ($excep) { |
|
| 253 | - $joker = false; // indiquer a l'appelant |
|
| 254 | - return index_exception($boucles[$idb], $desc, $nom_champ, $excep); |
|
| 255 | - } // pas d'alias. Le champ existe t'il ? |
|
| 256 | - else { |
|
| 257 | - // le champ est réellement présent, on le prend. |
|
| 258 | - if (isset($desc['field'][$nom_champ])) { |
|
| 259 | - $t = $boucles[$idb]->id_table; |
|
| 260 | - $joker = false; // indiquer a l'appelant |
|
| 261 | - return array("$t.$nom_champ", $nom_champ); |
|
| 262 | - } |
|
| 263 | - // Tous les champs sont-ils acceptés ? |
|
| 264 | - // Si oui, on retourne le champ, et on lève le flag joker |
|
| 265 | - // C'est le cas des itérateurs DATA qui acceptent tout |
|
| 266 | - // et testent la présence du champ à l'exécution et non à la compilation |
|
| 267 | - // car ils ne connaissent pas ici leurs contenus. |
|
| 268 | - elseif (/*$joker AND */ |
|
| 269 | - isset($desc['field']['*']) |
|
| 270 | - ) { |
|
| 271 | - $joker = true; // indiquer a l'appelant |
|
| 272 | - return array($nom_champ, $nom_champ); |
|
| 273 | - } |
|
| 274 | - // pas d'alias, pas de champ, pas de joker... |
|
| 275 | - // tenter via une jointure... |
|
| 276 | - else { |
|
| 277 | - $joker = false; // indiquer a l'appelant |
|
| 278 | - // regarder si le champ est deja dans une jointure existante |
|
| 279 | - // sinon, si il y a des joitures explicites, la construire |
|
| 280 | - if (!$t = trouver_champ_exterieur($nom_champ, $boucles[$idb]->from, $boucles[$idb])) { |
|
| 281 | - if ($boucles[$idb]->jointures_explicites) { |
|
| 282 | - // [todo] Ne pas lancer que lorsque il y a des jointures explicites !!!! |
|
| 283 | - // fonctionnel, il suffit d'utiliser $boucles[$idb]->jointures au lieu de jointures_explicites |
|
| 284 | - // mais est-ce ce qu'on veut ? |
|
| 285 | - $jointures = preg_split("/\s+/", $boucles[$idb]->jointures_explicites); |
|
| 286 | - if ($cle = trouver_jointure_champ($nom_champ, $boucles[$idb], $jointures)) { |
|
| 287 | - $t = trouver_champ_exterieur($nom_champ, $boucles[$idb]->from, $boucles[$idb]); |
|
| 288 | - } |
|
| 289 | - } |
|
| 290 | - } |
|
| 291 | - if ($t) { |
|
| 292 | - // si on a trouvé une jointure possible, on fait comme |
|
| 293 | - // si c'était une exception pour le champ demandé |
|
| 294 | - return index_exception($boucles[$idb], |
|
| 295 | - $desc, |
|
| 296 | - $nom_champ, |
|
| 297 | - array($t[1]['id_table'], reset($t[2]))); |
|
| 298 | - } |
|
| 299 | - |
|
| 300 | - return array('', ''); |
|
| 301 | - } |
|
| 302 | - } |
|
| 235 | + $r = $boucles[$idb]->type_requete; |
|
| 236 | + // boucle recursive, c'est foutu... |
|
| 237 | + if ($r == TYPE_RECURSIF) { |
|
| 238 | + return array(); |
|
| 239 | + } |
|
| 240 | + if (!$r) { |
|
| 241 | + $joker = false; // indiquer a l'appelant |
|
| 242 | + # continuer pour chercher l'erreur suivante |
|
| 243 | + return array("'#" . $r . ':' . $nom_champ . "'", ''); |
|
| 244 | + } |
|
| 245 | + |
|
| 246 | + $desc = $boucles[$idb]->show; |
|
| 247 | + // le nom du champ est il une exception de la table ? un alias ? |
|
| 248 | + $excep = isset($GLOBALS['exceptions_des_tables'][$r]) ? $GLOBALS['exceptions_des_tables'][$r] : ''; |
|
| 249 | + if ($excep) { |
|
| 250 | + $excep = isset($excep[$nom_champ]) ? $excep[$nom_champ] : ''; |
|
| 251 | + } |
|
| 252 | + if ($excep) { |
|
| 253 | + $joker = false; // indiquer a l'appelant |
|
| 254 | + return index_exception($boucles[$idb], $desc, $nom_champ, $excep); |
|
| 255 | + } // pas d'alias. Le champ existe t'il ? |
|
| 256 | + else { |
|
| 257 | + // le champ est réellement présent, on le prend. |
|
| 258 | + if (isset($desc['field'][$nom_champ])) { |
|
| 259 | + $t = $boucles[$idb]->id_table; |
|
| 260 | + $joker = false; // indiquer a l'appelant |
|
| 261 | + return array("$t.$nom_champ", $nom_champ); |
|
| 262 | + } |
|
| 263 | + // Tous les champs sont-ils acceptés ? |
|
| 264 | + // Si oui, on retourne le champ, et on lève le flag joker |
|
| 265 | + // C'est le cas des itérateurs DATA qui acceptent tout |
|
| 266 | + // et testent la présence du champ à l'exécution et non à la compilation |
|
| 267 | + // car ils ne connaissent pas ici leurs contenus. |
|
| 268 | + elseif (/*$joker AND */ |
|
| 269 | + isset($desc['field']['*']) |
|
| 270 | + ) { |
|
| 271 | + $joker = true; // indiquer a l'appelant |
|
| 272 | + return array($nom_champ, $nom_champ); |
|
| 273 | + } |
|
| 274 | + // pas d'alias, pas de champ, pas de joker... |
|
| 275 | + // tenter via une jointure... |
|
| 276 | + else { |
|
| 277 | + $joker = false; // indiquer a l'appelant |
|
| 278 | + // regarder si le champ est deja dans une jointure existante |
|
| 279 | + // sinon, si il y a des joitures explicites, la construire |
|
| 280 | + if (!$t = trouver_champ_exterieur($nom_champ, $boucles[$idb]->from, $boucles[$idb])) { |
|
| 281 | + if ($boucles[$idb]->jointures_explicites) { |
|
| 282 | + // [todo] Ne pas lancer que lorsque il y a des jointures explicites !!!! |
|
| 283 | + // fonctionnel, il suffit d'utiliser $boucles[$idb]->jointures au lieu de jointures_explicites |
|
| 284 | + // mais est-ce ce qu'on veut ? |
|
| 285 | + $jointures = preg_split("/\s+/", $boucles[$idb]->jointures_explicites); |
|
| 286 | + if ($cle = trouver_jointure_champ($nom_champ, $boucles[$idb], $jointures)) { |
|
| 287 | + $t = trouver_champ_exterieur($nom_champ, $boucles[$idb]->from, $boucles[$idb]); |
|
| 288 | + } |
|
| 289 | + } |
|
| 290 | + } |
|
| 291 | + if ($t) { |
|
| 292 | + // si on a trouvé une jointure possible, on fait comme |
|
| 293 | + // si c'était une exception pour le champ demandé |
|
| 294 | + return index_exception($boucles[$idb], |
|
| 295 | + $desc, |
|
| 296 | + $nom_champ, |
|
| 297 | + array($t[1]['id_table'], reset($t[2]))); |
|
| 298 | + } |
|
| 299 | + |
|
| 300 | + return array('', ''); |
|
| 301 | + } |
|
| 302 | + } |
|
| 303 | 303 | } |
| 304 | 304 | |
| 305 | 305 | |
@@ -327,52 +327,52 @@ discard block |
||
| 327 | 327 | * est une expression pour le SELECT de la boucle du style "mots.titre AS titre_mot" |
| 328 | 328 | **/ |
| 329 | 329 | function index_exception(&$boucle, $desc, $nom_champ, $excep) { |
| 330 | - static $trouver_table; |
|
| 331 | - if (!$trouver_table) { |
|
| 332 | - $trouver_table = charger_fonction('trouver_table', 'base'); |
|
| 333 | - } |
|
| 334 | - |
|
| 335 | - if (is_array($excep)) { |
|
| 336 | - // permettre aux plugins de gerer eux meme des jointures derogatoire ingerables |
|
| 337 | - $t = null; |
|
| 338 | - if (count($excep) == 3) { |
|
| 339 | - $index_exception_derogatoire = array_pop($excep); |
|
| 340 | - $t = $index_exception_derogatoire($boucle, $desc, $nom_champ, $excep); |
|
| 341 | - } |
|
| 342 | - if ($t == null) { |
|
| 343 | - list($e, $x) = $excep; #PHP4 affecte de gauche a droite |
|
| 344 | - $excep = $x; #PHP5 de droite a gauche ! |
|
| 345 | - $j = $trouver_table($e, $boucle->sql_serveur); |
|
| 346 | - if (!$j) { |
|
| 347 | - return array('', ''); |
|
| 348 | - } |
|
| 349 | - $e = $j['table']; |
|
| 350 | - if (!$t = array_search($e, $boucle->from)) { |
|
| 351 | - $k = $j['key']['PRIMARY KEY']; |
|
| 352 | - if (strpos($k, ',')) { |
|
| 353 | - $l = (preg_split('/\s*,\s*/', $k)); |
|
| 354 | - $k = $desc['key']['PRIMARY KEY']; |
|
| 355 | - if (!in_array($k, $l)) { |
|
| 356 | - spip_log("jointure impossible $e " . join(',', $l)); |
|
| 357 | - |
|
| 358 | - return array('', ''); |
|
| 359 | - } |
|
| 360 | - } |
|
| 361 | - $k = array($boucle->id_table, array($e), $k); |
|
| 362 | - fabrique_jointures($boucle, array($k)); |
|
| 363 | - $t = array_search($e, $boucle->from); |
|
| 364 | - } |
|
| 365 | - } |
|
| 366 | - } else { |
|
| 367 | - $t = $boucle->id_table; |
|
| 368 | - } |
|
| 369 | - // demander a SQL de gerer le synonyme |
|
| 370 | - // ca permet que excep soit dynamique (Cedric, 2/3/06) |
|
| 371 | - if ($excep != $nom_champ) { |
|
| 372 | - $excep .= ' AS ' . $nom_champ; |
|
| 373 | - } |
|
| 374 | - |
|
| 375 | - return array("$t.$excep", $nom_champ); |
|
| 330 | + static $trouver_table; |
|
| 331 | + if (!$trouver_table) { |
|
| 332 | + $trouver_table = charger_fonction('trouver_table', 'base'); |
|
| 333 | + } |
|
| 334 | + |
|
| 335 | + if (is_array($excep)) { |
|
| 336 | + // permettre aux plugins de gerer eux meme des jointures derogatoire ingerables |
|
| 337 | + $t = null; |
|
| 338 | + if (count($excep) == 3) { |
|
| 339 | + $index_exception_derogatoire = array_pop($excep); |
|
| 340 | + $t = $index_exception_derogatoire($boucle, $desc, $nom_champ, $excep); |
|
| 341 | + } |
|
| 342 | + if ($t == null) { |
|
| 343 | + list($e, $x) = $excep; #PHP4 affecte de gauche a droite |
|
| 344 | + $excep = $x; #PHP5 de droite a gauche ! |
|
| 345 | + $j = $trouver_table($e, $boucle->sql_serveur); |
|
| 346 | + if (!$j) { |
|
| 347 | + return array('', ''); |
|
| 348 | + } |
|
| 349 | + $e = $j['table']; |
|
| 350 | + if (!$t = array_search($e, $boucle->from)) { |
|
| 351 | + $k = $j['key']['PRIMARY KEY']; |
|
| 352 | + if (strpos($k, ',')) { |
|
| 353 | + $l = (preg_split('/\s*,\s*/', $k)); |
|
| 354 | + $k = $desc['key']['PRIMARY KEY']; |
|
| 355 | + if (!in_array($k, $l)) { |
|
| 356 | + spip_log("jointure impossible $e " . join(',', $l)); |
|
| 357 | + |
|
| 358 | + return array('', ''); |
|
| 359 | + } |
|
| 360 | + } |
|
| 361 | + $k = array($boucle->id_table, array($e), $k); |
|
| 362 | + fabrique_jointures($boucle, array($k)); |
|
| 363 | + $t = array_search($e, $boucle->from); |
|
| 364 | + } |
|
| 365 | + } |
|
| 366 | + } else { |
|
| 367 | + $t = $boucle->id_table; |
|
| 368 | + } |
|
| 369 | + // demander a SQL de gerer le synonyme |
|
| 370 | + // ca permet que excep soit dynamique (Cedric, 2/3/06) |
|
| 371 | + if ($excep != $nom_champ) { |
|
| 372 | + $excep .= ' AS ' . $nom_champ; |
|
| 373 | + } |
|
| 374 | + |
|
| 375 | + return array("$t.$excep", $nom_champ); |
|
| 376 | 376 | } |
| 377 | 377 | |
| 378 | 378 | /** |
@@ -397,7 +397,7 @@ discard block |
||
| 397 | 397 | * Code PHP pour retrouver le champ |
| 398 | 398 | */ |
| 399 | 399 | function champ_sql($champ, $p, $defaut = null, $remonte_pile = true) { |
| 400 | - return index_pile($p->id_boucle, $champ, $p->boucles, $p->nom_boucle, $defaut, $remonte_pile); |
|
| 400 | + return index_pile($p->id_boucle, $champ, $p->boucles, $p->nom_boucle, $defaut, $remonte_pile); |
|
| 401 | 401 | } |
| 402 | 402 | |
| 403 | 403 | |
@@ -417,9 +417,9 @@ discard block |
||
| 417 | 417 | * Code PHP pour d'exécution de la balise et de ses filtres |
| 418 | 418 | **/ |
| 419 | 419 | function calculer_champ($p) { |
| 420 | - $p = calculer_balise($p->nom_champ, $p); |
|
| 420 | + $p = calculer_balise($p->nom_champ, $p); |
|
| 421 | 421 | |
| 422 | - return applique_filtres($p); |
|
| 422 | + return applique_filtres($p); |
|
| 423 | 423 | } |
| 424 | 424 | |
| 425 | 425 | |
@@ -456,28 +456,28 @@ discard block |
||
| 456 | 456 | **/ |
| 457 | 457 | function calculer_balise($nom, $p) { |
| 458 | 458 | |
| 459 | - // S'agit-t-il d'une balise_XXXX[_dist]() ? |
|
| 460 | - if ($f = charger_fonction($nom, 'balise', true)) { |
|
| 461 | - $p->balise_calculee = true; |
|
| 462 | - $res = $f($p); |
|
| 463 | - if ($res !== null and is_object($res)) { |
|
| 464 | - return $res; |
|
| 465 | - } |
|
| 466 | - } |
|
| 467 | - |
|
| 468 | - // Certaines des balises comportant un _ sont generiques |
|
| 469 | - if ($f = strpos($nom, '_') |
|
| 470 | - and $f = charger_fonction(substr($nom, 0, $f + 1), 'balise', true) |
|
| 471 | - ) { |
|
| 472 | - $res = $f($p); |
|
| 473 | - if ($res !== null and is_object($res)) { |
|
| 474 | - return $res; |
|
| 475 | - } |
|
| 476 | - } |
|
| 477 | - |
|
| 478 | - $f = charger_fonction('DEFAUT', 'calculer_balise'); |
|
| 479 | - |
|
| 480 | - return $f($nom, $p); |
|
| 459 | + // S'agit-t-il d'une balise_XXXX[_dist]() ? |
|
| 460 | + if ($f = charger_fonction($nom, 'balise', true)) { |
|
| 461 | + $p->balise_calculee = true; |
|
| 462 | + $res = $f($p); |
|
| 463 | + if ($res !== null and is_object($res)) { |
|
| 464 | + return $res; |
|
| 465 | + } |
|
| 466 | + } |
|
| 467 | + |
|
| 468 | + // Certaines des balises comportant un _ sont generiques |
|
| 469 | + if ($f = strpos($nom, '_') |
|
| 470 | + and $f = charger_fonction(substr($nom, 0, $f + 1), 'balise', true) |
|
| 471 | + ) { |
|
| 472 | + $res = $f($p); |
|
| 473 | + if ($res !== null and is_object($res)) { |
|
| 474 | + return $res; |
|
| 475 | + } |
|
| 476 | + } |
|
| 477 | + |
|
| 478 | + $f = charger_fonction('DEFAUT', 'calculer_balise'); |
|
| 479 | + |
|
| 480 | + return $f($nom, $p); |
|
| 481 | 481 | } |
| 482 | 482 | |
| 483 | 483 | |
@@ -505,36 +505,36 @@ discard block |
||
| 505 | 505 | **/ |
| 506 | 506 | function calculer_balise_DEFAUT_dist($nom, $p) { |
| 507 | 507 | |
| 508 | - // ca pourrait etre un champ SQL homonyme, |
|
| 509 | - $p->code = index_pile($p->id_boucle, $nom, $p->boucles, $p->nom_boucle); |
|
| 510 | - |
|
| 511 | - // compatibilite: depuis qu'on accepte #BALISE{ses_args} sans [(...)] autour |
|
| 512 | - // il faut recracher {...} quand ce n'est finalement pas des args |
|
| 513 | - if ($p->fonctions and (!$p->fonctions[0][0]) and $p->fonctions[0][1]) { |
|
| 514 | - $code = addslashes($p->fonctions[0][1]); |
|
| 515 | - $p->code .= " . '$code'"; |
|
| 516 | - } |
|
| 517 | - |
|
| 518 | - // ne pas passer le filtre securite sur les id_xxx |
|
| 519 | - if (strpos($nom, 'ID_') === 0) { |
|
| 520 | - $p->interdire_scripts = false; |
|
| 521 | - } |
|
| 522 | - |
|
| 523 | - // Compatibilite ascendante avec les couleurs html (#FEFEFE) : |
|
| 524 | - // SI le champ SQL n'est pas trouve |
|
| 525 | - // ET si la balise a une forme de couleur |
|
| 526 | - // ET s'il n'y a ni filtre ni etoile |
|
| 527 | - // ALORS retourner la couleur. |
|
| 528 | - // Ca permet si l'on veut vraiment de recuperer [(#ACCEDE*)] |
|
| 529 | - if (preg_match("/^[A-F]{1,6}$/i", $nom) |
|
| 530 | - and !$p->etoile |
|
| 531 | - and !$p->fonctions |
|
| 532 | - ) { |
|
| 533 | - $p->code = "'#$nom'"; |
|
| 534 | - $p->interdire_scripts = false; |
|
| 535 | - } |
|
| 536 | - |
|
| 537 | - return $p; |
|
| 508 | + // ca pourrait etre un champ SQL homonyme, |
|
| 509 | + $p->code = index_pile($p->id_boucle, $nom, $p->boucles, $p->nom_boucle); |
|
| 510 | + |
|
| 511 | + // compatibilite: depuis qu'on accepte #BALISE{ses_args} sans [(...)] autour |
|
| 512 | + // il faut recracher {...} quand ce n'est finalement pas des args |
|
| 513 | + if ($p->fonctions and (!$p->fonctions[0][0]) and $p->fonctions[0][1]) { |
|
| 514 | + $code = addslashes($p->fonctions[0][1]); |
|
| 515 | + $p->code .= " . '$code'"; |
|
| 516 | + } |
|
| 517 | + |
|
| 518 | + // ne pas passer le filtre securite sur les id_xxx |
|
| 519 | + if (strpos($nom, 'ID_') === 0) { |
|
| 520 | + $p->interdire_scripts = false; |
|
| 521 | + } |
|
| 522 | + |
|
| 523 | + // Compatibilite ascendante avec les couleurs html (#FEFEFE) : |
|
| 524 | + // SI le champ SQL n'est pas trouve |
|
| 525 | + // ET si la balise a une forme de couleur |
|
| 526 | + // ET s'il n'y a ni filtre ni etoile |
|
| 527 | + // ALORS retourner la couleur. |
|
| 528 | + // Ca permet si l'on veut vraiment de recuperer [(#ACCEDE*)] |
|
| 529 | + if (preg_match("/^[A-F]{1,6}$/i", $nom) |
|
| 530 | + and !$p->etoile |
|
| 531 | + and !$p->fonctions |
|
| 532 | + ) { |
|
| 533 | + $p->code = "'#$nom'"; |
|
| 534 | + $p->interdire_scripts = false; |
|
| 535 | + } |
|
| 536 | + |
|
| 537 | + return $p; |
|
| 538 | 538 | } |
| 539 | 539 | |
| 540 | 540 | |
@@ -577,36 +577,36 @@ discard block |
||
| 577 | 577 | **/ |
| 578 | 578 | function calculer_balise_dynamique($p, $nom, $l, $supp = array()) { |
| 579 | 579 | |
| 580 | - if (!balise_distante_interdite($p)) { |
|
| 581 | - $p->code = "''"; |
|
| 582 | - |
|
| 583 | - return $p; |
|
| 584 | - } |
|
| 585 | - // compatibilite: depuis qu'on accepte #BALISE{ses_args} sans [(...)] autour |
|
| 586 | - // il faut recracher {...} quand ce n'est finalement pas des args |
|
| 587 | - if ($p->fonctions and (!$p->fonctions[0][0]) and $p->fonctions[0][1]) { |
|
| 588 | - $p->fonctions = null; |
|
| 589 | - } |
|
| 590 | - |
|
| 591 | - if ($p->param and ($c = $p->param[0])) { |
|
| 592 | - // liste d'arguments commence toujours par la chaine vide |
|
| 593 | - array_shift($c); |
|
| 594 | - // construire la liste d'arguments comme pour un filtre |
|
| 595 | - $param = compose_filtres_args($p, $c, ','); |
|
| 596 | - } else { |
|
| 597 | - $param = ""; |
|
| 598 | - } |
|
| 599 | - $collecte = collecter_balise_dynamique($l, $p, $nom); |
|
| 600 | - |
|
| 601 | - $p->code = sprintf(CODE_EXECUTER_BALISE, $nom, |
|
| 602 | - join(',', $collecte), |
|
| 603 | - ($collecte ? $param : substr($param, 1)), # virer la virgule |
|
| 604 | - memoriser_contexte_compil($p), |
|
| 605 | - (!$supp ? '' : (', ' . join(',', $supp)))); |
|
| 606 | - |
|
| 607 | - $p->interdire_scripts = false; |
|
| 608 | - |
|
| 609 | - return $p; |
|
| 580 | + if (!balise_distante_interdite($p)) { |
|
| 581 | + $p->code = "''"; |
|
| 582 | + |
|
| 583 | + return $p; |
|
| 584 | + } |
|
| 585 | + // compatibilite: depuis qu'on accepte #BALISE{ses_args} sans [(...)] autour |
|
| 586 | + // il faut recracher {...} quand ce n'est finalement pas des args |
|
| 587 | + if ($p->fonctions and (!$p->fonctions[0][0]) and $p->fonctions[0][1]) { |
|
| 588 | + $p->fonctions = null; |
|
| 589 | + } |
|
| 590 | + |
|
| 591 | + if ($p->param and ($c = $p->param[0])) { |
|
| 592 | + // liste d'arguments commence toujours par la chaine vide |
|
| 593 | + array_shift($c); |
|
| 594 | + // construire la liste d'arguments comme pour un filtre |
|
| 595 | + $param = compose_filtres_args($p, $c, ','); |
|
| 596 | + } else { |
|
| 597 | + $param = ""; |
|
| 598 | + } |
|
| 599 | + $collecte = collecter_balise_dynamique($l, $p, $nom); |
|
| 600 | + |
|
| 601 | + $p->code = sprintf(CODE_EXECUTER_BALISE, $nom, |
|
| 602 | + join(',', $collecte), |
|
| 603 | + ($collecte ? $param : substr($param, 1)), # virer la virgule |
|
| 604 | + memoriser_contexte_compil($p), |
|
| 605 | + (!$supp ? '' : (', ' . join(',', $supp)))); |
|
| 606 | + |
|
| 607 | + $p->interdire_scripts = false; |
|
| 608 | + |
|
| 609 | + return $p; |
|
| 610 | 610 | } |
| 611 | 611 | |
| 612 | 612 | |
@@ -636,13 +636,13 @@ discard block |
||
| 636 | 636 | * Liste des codes PHP d'éxecution des balises collectées |
| 637 | 637 | **/ |
| 638 | 638 | function collecter_balise_dynamique($l, &$p, $nom) { |
| 639 | - $args = array(); |
|
| 640 | - foreach ($l as $c) { |
|
| 641 | - $x = calculer_balise($c, $p); |
|
| 642 | - $args[] = $x->code; |
|
| 643 | - } |
|
| 639 | + $args = array(); |
|
| 640 | + foreach ($l as $c) { |
|
| 641 | + $x = calculer_balise($c, $p); |
|
| 642 | + $args[] = $x->code; |
|
| 643 | + } |
|
| 644 | 644 | |
| 645 | - return $args; |
|
| 645 | + return $args; |
|
| 646 | 646 | } |
| 647 | 647 | |
| 648 | 648 | |
@@ -657,20 +657,20 @@ discard block |
||
| 657 | 657 | * Nom de la connexion |
| 658 | 658 | **/ |
| 659 | 659 | function trouver_nom_serveur_distant($p) { |
| 660 | - $nom = $p->id_boucle; |
|
| 661 | - if ($nom |
|
| 662 | - and isset($p->boucles[$nom]) |
|
| 663 | - ) { |
|
| 664 | - $s = $p->boucles[$nom]->sql_serveur; |
|
| 665 | - if (strlen($s) |
|
| 666 | - and strlen($serveur = strtolower($s)) |
|
| 667 | - and !in_array($serveur, $GLOBALS['exception_des_connect']) |
|
| 668 | - ) { |
|
| 669 | - return $serveur; |
|
| 670 | - } |
|
| 671 | - } |
|
| 672 | - |
|
| 673 | - return ""; |
|
| 660 | + $nom = $p->id_boucle; |
|
| 661 | + if ($nom |
|
| 662 | + and isset($p->boucles[$nom]) |
|
| 663 | + ) { |
|
| 664 | + $s = $p->boucles[$nom]->sql_serveur; |
|
| 665 | + if (strlen($s) |
|
| 666 | + and strlen($serveur = strtolower($s)) |
|
| 667 | + and !in_array($serveur, $GLOBALS['exception_des_connect']) |
|
| 668 | + ) { |
|
| 669 | + return $serveur; |
|
| 670 | + } |
|
| 671 | + } |
|
| 672 | + |
|
| 673 | + return ""; |
|
| 674 | 674 | } |
| 675 | 675 | |
| 676 | 676 | |
@@ -694,15 +694,15 @@ discard block |
||
| 694 | 694 | * - false : La balise est interdite car le serveur est distant |
| 695 | 695 | **/ |
| 696 | 696 | function balise_distante_interdite($p) { |
| 697 | - $nom = $p->id_boucle; |
|
| 697 | + $nom = $p->id_boucle; |
|
| 698 | 698 | |
| 699 | - if ($nom and trouver_nom_serveur_distant($p)) { |
|
| 700 | - spip_log($nom . ':' . $p->nom_champ . ' ' . _T('zbug_distant_interdit')); |
|
| 699 | + if ($nom and trouver_nom_serveur_distant($p)) { |
|
| 700 | + spip_log($nom . ':' . $p->nom_champ . ' ' . _T('zbug_distant_interdit')); |
|
| 701 | 701 | |
| 702 | - return false; |
|
| 703 | - } |
|
| 702 | + return false; |
|
| 703 | + } |
|
| 704 | 704 | |
| 705 | - return true; |
|
| 705 | + return true; |
|
| 706 | 706 | } |
| 707 | 707 | |
| 708 | 708 | |
@@ -713,67 +713,67 @@ discard block |
||
| 713 | 713 | // http://code.spip.net/@champs_traitements |
| 714 | 714 | function champs_traitements($p) { |
| 715 | 715 | |
| 716 | - if (isset($GLOBALS['table_des_traitements'][$p->nom_champ])) { |
|
| 717 | - $ps = $GLOBALS['table_des_traitements'][$p->nom_champ]; |
|
| 718 | - } else { |
|
| 719 | - // quand on utilise un traitement catch-all * |
|
| 720 | - // celui-ci ne s'applique pas sur les balises calculees qui peuvent gerer |
|
| 721 | - // leur propre securite |
|
| 722 | - if (!$p->balise_calculee) { |
|
| 723 | - $ps = $GLOBALS['table_des_traitements']['*']; |
|
| 724 | - } else { |
|
| 725 | - $ps = false; |
|
| 726 | - } |
|
| 727 | - } |
|
| 728 | - |
|
| 729 | - if (is_array($ps)) { |
|
| 730 | - // Recuperer le type de boucle (articles, DATA) et la table SQL sur laquelle elle porte |
|
| 731 | - $idb = index_boucle($p); |
|
| 732 | - // mais on peut aussi etre hors boucle. Se mefier. |
|
| 733 | - $type_requete = isset($p->boucles[$idb]->type_requete) ? $p->boucles[$idb]->type_requete : false; |
|
| 734 | - $table_sql = isset($p->boucles[$idb]->show['table_sql']) ? $p->boucles[$idb]->show['table_sql'] : false; |
|
| 735 | - |
|
| 736 | - // le traitement peut n'etre defini que pour une table en particulier "spip_articles" |
|
| 737 | - if ($table_sql and isset($ps[$table_sql])) { |
|
| 738 | - $ps = $ps[$table_sql]; |
|
| 739 | - } // ou pour une boucle en particulier "DATA","articles" |
|
| 740 | - elseif ($type_requete and isset($ps[$type_requete])) { |
|
| 741 | - $ps = $ps[$type_requete]; |
|
| 742 | - } // ou pour indiferrement quelle que soit la boucle |
|
| 743 | - elseif (isset($ps[0])) { |
|
| 744 | - $ps = $ps[0]; |
|
| 745 | - } else { |
|
| 746 | - $ps = false; |
|
| 747 | - } |
|
| 748 | - } |
|
| 749 | - |
|
| 750 | - if (!$ps) { |
|
| 751 | - return $p->code; |
|
| 752 | - } |
|
| 753 | - |
|
| 754 | - // Si une boucle DOCUMENTS{doublons} est presente dans le squelette, |
|
| 755 | - // ou si in INCLURE contient {doublons} |
|
| 756 | - // on insere une fonction de remplissage du tableau des doublons |
|
| 757 | - // dans les filtres propre() ou typo() |
|
| 758 | - // (qui traitent les raccourcis <docXX> referencant les docs) |
|
| 759 | - |
|
| 760 | - if (isset($p->descr['documents']) |
|
| 761 | - and |
|
| 762 | - $p->descr['documents'] |
|
| 763 | - and ( |
|
| 764 | - (strpos($ps, 'propre') !== false) |
|
| 765 | - or |
|
| 766 | - (strpos($ps, 'typo') !== false) |
|
| 767 | - ) |
|
| 768 | - ) { |
|
| 769 | - $ps = 'traiter_doublons_documents($doublons, ' . $ps . ')'; |
|
| 770 | - } |
|
| 771 | - |
|
| 772 | - // La protection des champs par |safehtml est assuree par les extensions |
|
| 773 | - // dans la declaration des traitements des champs sensibles |
|
| 774 | - |
|
| 775 | - // Remplacer enfin le placeholder %s par le vrai code de la balise |
|
| 776 | - return str_replace('%s', $p->code, $ps); |
|
| 716 | + if (isset($GLOBALS['table_des_traitements'][$p->nom_champ])) { |
|
| 717 | + $ps = $GLOBALS['table_des_traitements'][$p->nom_champ]; |
|
| 718 | + } else { |
|
| 719 | + // quand on utilise un traitement catch-all * |
|
| 720 | + // celui-ci ne s'applique pas sur les balises calculees qui peuvent gerer |
|
| 721 | + // leur propre securite |
|
| 722 | + if (!$p->balise_calculee) { |
|
| 723 | + $ps = $GLOBALS['table_des_traitements']['*']; |
|
| 724 | + } else { |
|
| 725 | + $ps = false; |
|
| 726 | + } |
|
| 727 | + } |
|
| 728 | + |
|
| 729 | + if (is_array($ps)) { |
|
| 730 | + // Recuperer le type de boucle (articles, DATA) et la table SQL sur laquelle elle porte |
|
| 731 | + $idb = index_boucle($p); |
|
| 732 | + // mais on peut aussi etre hors boucle. Se mefier. |
|
| 733 | + $type_requete = isset($p->boucles[$idb]->type_requete) ? $p->boucles[$idb]->type_requete : false; |
|
| 734 | + $table_sql = isset($p->boucles[$idb]->show['table_sql']) ? $p->boucles[$idb]->show['table_sql'] : false; |
|
| 735 | + |
|
| 736 | + // le traitement peut n'etre defini que pour une table en particulier "spip_articles" |
|
| 737 | + if ($table_sql and isset($ps[$table_sql])) { |
|
| 738 | + $ps = $ps[$table_sql]; |
|
| 739 | + } // ou pour une boucle en particulier "DATA","articles" |
|
| 740 | + elseif ($type_requete and isset($ps[$type_requete])) { |
|
| 741 | + $ps = $ps[$type_requete]; |
|
| 742 | + } // ou pour indiferrement quelle que soit la boucle |
|
| 743 | + elseif (isset($ps[0])) { |
|
| 744 | + $ps = $ps[0]; |
|
| 745 | + } else { |
|
| 746 | + $ps = false; |
|
| 747 | + } |
|
| 748 | + } |
|
| 749 | + |
|
| 750 | + if (!$ps) { |
|
| 751 | + return $p->code; |
|
| 752 | + } |
|
| 753 | + |
|
| 754 | + // Si une boucle DOCUMENTS{doublons} est presente dans le squelette, |
|
| 755 | + // ou si in INCLURE contient {doublons} |
|
| 756 | + // on insere une fonction de remplissage du tableau des doublons |
|
| 757 | + // dans les filtres propre() ou typo() |
|
| 758 | + // (qui traitent les raccourcis <docXX> referencant les docs) |
|
| 759 | + |
|
| 760 | + if (isset($p->descr['documents']) |
|
| 761 | + and |
|
| 762 | + $p->descr['documents'] |
|
| 763 | + and ( |
|
| 764 | + (strpos($ps, 'propre') !== false) |
|
| 765 | + or |
|
| 766 | + (strpos($ps, 'typo') !== false) |
|
| 767 | + ) |
|
| 768 | + ) { |
|
| 769 | + $ps = 'traiter_doublons_documents($doublons, ' . $ps . ')'; |
|
| 770 | + } |
|
| 771 | + |
|
| 772 | + // La protection des champs par |safehtml est assuree par les extensions |
|
| 773 | + // dans la declaration des traitements des champs sensibles |
|
| 774 | + |
|
| 775 | + // Remplacer enfin le placeholder %s par le vrai code de la balise |
|
| 776 | + return str_replace('%s', $p->code, $ps); |
|
| 777 | 777 | } |
| 778 | 778 | |
| 779 | 779 | |
@@ -786,109 +786,109 @@ discard block |
||
| 786 | 786 | // http://code.spip.net/@applique_filtres |
| 787 | 787 | function applique_filtres($p) { |
| 788 | 788 | |
| 789 | - // Traitements standards (cf. supra) |
|
| 790 | - if ($p->etoile == '') { |
|
| 791 | - $code = champs_traitements($p); |
|
| 792 | - } else { |
|
| 793 | - $code = $p->code; |
|
| 794 | - } |
|
| 789 | + // Traitements standards (cf. supra) |
|
| 790 | + if ($p->etoile == '') { |
|
| 791 | + $code = champs_traitements($p); |
|
| 792 | + } else { |
|
| 793 | + $code = $p->code; |
|
| 794 | + } |
|
| 795 | 795 | |
| 796 | - // Appliquer les filtres perso |
|
| 797 | - if ($p->param) { |
|
| 798 | - $code = compose_filtres($p, $code); |
|
| 799 | - } |
|
| 796 | + // Appliquer les filtres perso |
|
| 797 | + if ($p->param) { |
|
| 798 | + $code = compose_filtres($p, $code); |
|
| 799 | + } |
|
| 800 | 800 | |
| 801 | - // S'il y a un lien avec la session, ajouter un code qui levera |
|
| 802 | - // un drapeau dans la structure d'invalidation $Cache |
|
| 803 | - if (isset($p->descr['session'])) { |
|
| 804 | - $code = "invalideur_session(\$Cache, $code)"; |
|
| 805 | - } |
|
| 801 | + // S'il y a un lien avec la session, ajouter un code qui levera |
|
| 802 | + // un drapeau dans la structure d'invalidation $Cache |
|
| 803 | + if (isset($p->descr['session'])) { |
|
| 804 | + $code = "invalideur_session(\$Cache, $code)"; |
|
| 805 | + } |
|
| 806 | 806 | |
| 807 | - $code = sandbox_composer_interdire_scripts($code, $p); |
|
| 807 | + $code = sandbox_composer_interdire_scripts($code, $p); |
|
| 808 | 808 | |
| 809 | - return $code; |
|
| 809 | + return $code; |
|
| 810 | 810 | } |
| 811 | 811 | |
| 812 | 812 | // Cf. function pipeline dans ecrire/inc_utils.php |
| 813 | 813 | // http://code.spip.net/@compose_filtres |
| 814 | 814 | function compose_filtres(&$p, $code) { |
| 815 | 815 | |
| 816 | - $image_miette = false; |
|
| 817 | - foreach ($p->param as $filtre) { |
|
| 818 | - $fonc = array_shift($filtre); |
|
| 819 | - if (!$fonc) { |
|
| 820 | - continue; |
|
| 821 | - } // normalement qu'au premier tour. |
|
| 822 | - $is_filtre_image = ((substr($fonc, 0, 6) == 'image_') and $fonc != 'image_graver'); |
|
| 823 | - if ($image_miette and !$is_filtre_image) { |
|
| 824 | - // il faut graver maintenant car apres le filtre en cours |
|
| 825 | - // on est pas sur d'avoir encore le nom du fichier dans le pipe |
|
| 826 | - $code = "filtrer('image_graver', $code)"; |
|
| 827 | - $image_miette = false; |
|
| 828 | - } |
|
| 829 | - // recuperer les arguments du filtre, |
|
| 830 | - // a separer par "," ou ":" dans le cas du filtre "?{a,b}" |
|
| 831 | - if ($fonc !== '?') { |
|
| 832 | - $sep = ','; |
|
| 833 | - } else { |
|
| 834 | - $sep = ':'; |
|
| 835 | - // |?{a,b} *doit* avoir exactement 2 arguments ; on les force |
|
| 836 | - if (count($filtre) != 2) { |
|
| 837 | - $filtre = array(isset($filtre[0]) ? $filtre[0] : "", isset($filtre[1]) ? $filtre[1] : ""); |
|
| 838 | - } |
|
| 839 | - } |
|
| 840 | - $arglist = compose_filtres_args($p, $filtre, $sep); |
|
| 841 | - $logique = filtre_logique($fonc, $code, substr($arglist, 1)); |
|
| 842 | - if ($logique) { |
|
| 843 | - $code = $logique; |
|
| 844 | - } else { |
|
| 845 | - $code = sandbox_composer_filtre($fonc, $code, $arglist, $p); |
|
| 846 | - if ($is_filtre_image) { |
|
| 847 | - $image_miette = true; |
|
| 848 | - } |
|
| 849 | - } |
|
| 850 | - } |
|
| 851 | - // ramasser les images intermediaires inutiles et graver l'image finale |
|
| 852 | - if ($image_miette) { |
|
| 853 | - $code = "filtrer('image_graver',$code)"; |
|
| 854 | - } |
|
| 855 | - |
|
| 856 | - return $code; |
|
| 816 | + $image_miette = false; |
|
| 817 | + foreach ($p->param as $filtre) { |
|
| 818 | + $fonc = array_shift($filtre); |
|
| 819 | + if (!$fonc) { |
|
| 820 | + continue; |
|
| 821 | + } // normalement qu'au premier tour. |
|
| 822 | + $is_filtre_image = ((substr($fonc, 0, 6) == 'image_') and $fonc != 'image_graver'); |
|
| 823 | + if ($image_miette and !$is_filtre_image) { |
|
| 824 | + // il faut graver maintenant car apres le filtre en cours |
|
| 825 | + // on est pas sur d'avoir encore le nom du fichier dans le pipe |
|
| 826 | + $code = "filtrer('image_graver', $code)"; |
|
| 827 | + $image_miette = false; |
|
| 828 | + } |
|
| 829 | + // recuperer les arguments du filtre, |
|
| 830 | + // a separer par "," ou ":" dans le cas du filtre "?{a,b}" |
|
| 831 | + if ($fonc !== '?') { |
|
| 832 | + $sep = ','; |
|
| 833 | + } else { |
|
| 834 | + $sep = ':'; |
|
| 835 | + // |?{a,b} *doit* avoir exactement 2 arguments ; on les force |
|
| 836 | + if (count($filtre) != 2) { |
|
| 837 | + $filtre = array(isset($filtre[0]) ? $filtre[0] : "", isset($filtre[1]) ? $filtre[1] : ""); |
|
| 838 | + } |
|
| 839 | + } |
|
| 840 | + $arglist = compose_filtres_args($p, $filtre, $sep); |
|
| 841 | + $logique = filtre_logique($fonc, $code, substr($arglist, 1)); |
|
| 842 | + if ($logique) { |
|
| 843 | + $code = $logique; |
|
| 844 | + } else { |
|
| 845 | + $code = sandbox_composer_filtre($fonc, $code, $arglist, $p); |
|
| 846 | + if ($is_filtre_image) { |
|
| 847 | + $image_miette = true; |
|
| 848 | + } |
|
| 849 | + } |
|
| 850 | + } |
|
| 851 | + // ramasser les images intermediaires inutiles et graver l'image finale |
|
| 852 | + if ($image_miette) { |
|
| 853 | + $code = "filtrer('image_graver',$code)"; |
|
| 854 | + } |
|
| 855 | + |
|
| 856 | + return $code; |
|
| 857 | 857 | } |
| 858 | 858 | |
| 859 | 859 | // Filtres et,ou,oui,non,sinon,xou,xor,and,or,not,yes |
| 860 | 860 | // et comparateurs |
| 861 | 861 | function filtre_logique($fonc, $code, $arg) { |
| 862 | 862 | |
| 863 | - switch (true) { |
|
| 864 | - case in_array($fonc, $GLOBALS['table_criteres_infixes']): |
|
| 865 | - return "($code $fonc $arg)"; |
|
| 866 | - case ($fonc == 'and') or ($fonc == 'et'): |
|
| 867 | - return "((($code) AND ($arg)) ?' ' :'')"; |
|
| 868 | - case ($fonc == 'or') or ($fonc == 'ou'): |
|
| 869 | - return "((($code) OR ($arg)) ?' ' :'')"; |
|
| 870 | - case ($fonc == 'xor') or ($fonc == 'xou'): |
|
| 871 | - return "((($code) XOR ($arg)) ?' ' :'')"; |
|
| 872 | - case ($fonc == 'sinon'): |
|
| 873 | - return "(((\$a = $code) OR (is_string(\$a) AND strlen(\$a))) ? \$a : $arg)"; |
|
| 874 | - case ($fonc == 'not') or ($fonc == 'non'): |
|
| 875 | - return "(($code) ?'' :' ')"; |
|
| 876 | - case ($fonc == 'yes') or ($fonc == 'oui'): |
|
| 877 | - return "(($code) ?' ' :'')"; |
|
| 878 | - } |
|
| 879 | - |
|
| 880 | - return ''; |
|
| 863 | + switch (true) { |
|
| 864 | + case in_array($fonc, $GLOBALS['table_criteres_infixes']): |
|
| 865 | + return "($code $fonc $arg)"; |
|
| 866 | + case ($fonc == 'and') or ($fonc == 'et'): |
|
| 867 | + return "((($code) AND ($arg)) ?' ' :'')"; |
|
| 868 | + case ($fonc == 'or') or ($fonc == 'ou'): |
|
| 869 | + return "((($code) OR ($arg)) ?' ' :'')"; |
|
| 870 | + case ($fonc == 'xor') or ($fonc == 'xou'): |
|
| 871 | + return "((($code) XOR ($arg)) ?' ' :'')"; |
|
| 872 | + case ($fonc == 'sinon'): |
|
| 873 | + return "(((\$a = $code) OR (is_string(\$a) AND strlen(\$a))) ? \$a : $arg)"; |
|
| 874 | + case ($fonc == 'not') or ($fonc == 'non'): |
|
| 875 | + return "(($code) ?'' :' ')"; |
|
| 876 | + case ($fonc == 'yes') or ($fonc == 'oui'): |
|
| 877 | + return "(($code) ?' ' :'')"; |
|
| 878 | + } |
|
| 879 | + |
|
| 880 | + return ''; |
|
| 881 | 881 | } |
| 882 | 882 | |
| 883 | 883 | // http://code.spip.net/@compose_filtres_args |
| 884 | 884 | function compose_filtres_args($p, $args, $sep) { |
| 885 | - $arglist = ""; |
|
| 886 | - foreach ($args as $arg) { |
|
| 887 | - $arglist .= $sep . |
|
| 888 | - calculer_liste($arg, $p->descr, $p->boucles, $p->id_boucle); |
|
| 889 | - } |
|
| 885 | + $arglist = ""; |
|
| 886 | + foreach ($args as $arg) { |
|
| 887 | + $arglist .= $sep . |
|
| 888 | + calculer_liste($arg, $p->descr, $p->boucles, $p->id_boucle); |
|
| 889 | + } |
|
| 890 | 890 | |
| 891 | - return $arglist; |
|
| 891 | + return $arglist; |
|
| 892 | 892 | } |
| 893 | 893 | |
| 894 | 894 | |
@@ -906,15 +906,15 @@ discard block |
||
| 906 | 906 | **/ |
| 907 | 907 | function calculer_argument_precedent($idb, $nom_champ, &$boucles, $defaut = null) { |
| 908 | 908 | |
| 909 | - // si recursif, forcer l'extraction du champ SQL mais ignorer le code |
|
| 910 | - if ($boucles[$idb]->externe) { |
|
| 911 | - index_pile($idb, $nom_champ, $boucles, '', $defaut); |
|
| 912 | - // retourner $Pile[$SP] et pas $Pile[0] si recursion en 1ere boucle |
|
| 913 | - // on ignore le defaut fourni dans ce cas |
|
| 914 | - $defaut = "@\$Pile[\$SP]['$nom_champ']"; |
|
| 915 | - } |
|
| 909 | + // si recursif, forcer l'extraction du champ SQL mais ignorer le code |
|
| 910 | + if ($boucles[$idb]->externe) { |
|
| 911 | + index_pile($idb, $nom_champ, $boucles, '', $defaut); |
|
| 912 | + // retourner $Pile[$SP] et pas $Pile[0] si recursion en 1ere boucle |
|
| 913 | + // on ignore le defaut fourni dans ce cas |
|
| 914 | + $defaut = "@\$Pile[\$SP]['$nom_champ']"; |
|
| 915 | + } |
|
| 916 | 916 | |
| 917 | - return index_pile($boucles[$idb]->id_parent, $nom_champ, $boucles, '', $defaut); |
|
| 917 | + return index_pile($boucles[$idb]->id_parent, $nom_champ, $boucles, '', $defaut); |
|
| 918 | 918 | } |
| 919 | 919 | |
| 920 | 920 | // |
@@ -929,30 +929,30 @@ discard block |
||
| 929 | 929 | |
| 930 | 930 | // http://code.spip.net/@rindex_pile |
| 931 | 931 | function rindex_pile($p, $champ, $motif) { |
| 932 | - $n = 0; |
|
| 933 | - $b = $p->id_boucle; |
|
| 934 | - $p->code = ''; |
|
| 935 | - while ($b != '') { |
|
| 936 | - foreach ($p->boucles[$b]->criteres as $critere) { |
|
| 937 | - if ($critere->op == $motif) { |
|
| 938 | - $p->code = '$Pile[$SP' . (($n == 0) ? "" : "-$n") . |
|
| 939 | - "]['$champ']"; |
|
| 940 | - $b = ''; |
|
| 941 | - break 2; |
|
| 942 | - } |
|
| 943 | - } |
|
| 944 | - $n++; |
|
| 945 | - $b = $p->boucles[$b]->id_parent; |
|
| 946 | - } |
|
| 947 | - |
|
| 948 | - // si on est hors d'une boucle de {recherche}, cette balise est vide |
|
| 949 | - if (!$p->code) { |
|
| 950 | - $p->code = "''"; |
|
| 951 | - } |
|
| 952 | - |
|
| 953 | - $p->interdire_scripts = false; |
|
| 954 | - |
|
| 955 | - return $p; |
|
| 932 | + $n = 0; |
|
| 933 | + $b = $p->id_boucle; |
|
| 934 | + $p->code = ''; |
|
| 935 | + while ($b != '') { |
|
| 936 | + foreach ($p->boucles[$b]->criteres as $critere) { |
|
| 937 | + if ($critere->op == $motif) { |
|
| 938 | + $p->code = '$Pile[$SP' . (($n == 0) ? "" : "-$n") . |
|
| 939 | + "]['$champ']"; |
|
| 940 | + $b = ''; |
|
| 941 | + break 2; |
|
| 942 | + } |
|
| 943 | + } |
|
| 944 | + $n++; |
|
| 945 | + $b = $p->boucles[$b]->id_parent; |
|
| 946 | + } |
|
| 947 | + |
|
| 948 | + // si on est hors d'une boucle de {recherche}, cette balise est vide |
|
| 949 | + if (!$p->code) { |
|
| 950 | + $p->code = "''"; |
|
| 951 | + } |
|
| 952 | + |
|
| 953 | + $p->interdire_scripts = false; |
|
| 954 | + |
|
| 955 | + return $p; |
|
| 956 | 956 | } |
| 957 | 957 | |
| 958 | 958 | /** |
@@ -962,7 +962,7 @@ discard block |
||
| 962 | 962 | * @return string Nom de la balise, avec indication de boucle explicite si présent. |
| 963 | 963 | */ |
| 964 | 964 | function zbug_presenter_champ($p, $champ = "") { |
| 965 | - $balise = $champ ? $champ : $p->nom_champ; |
|
| 966 | - $explicite = $explicite = $p->nom_boucle ? $p->nom_boucle . ':' : ''; |
|
| 967 | - return "#{$explicite}{$balise}"; |
|
| 965 | + $balise = $champ ? $champ : $p->nom_champ; |
|
| 966 | + $explicite = $explicite = $p->nom_boucle ? $p->nom_boucle . ':' : ''; |
|
| 967 | + return "#{$explicite}{$balise}"; |
|
| 968 | 968 | } |
| 969 | 969 | \ No newline at end of file |
@@ -124,7 +124,7 @@ discard block |
||
| 124 | 124 | $select = true |
| 125 | 125 | ) { |
| 126 | 126 | if (!is_string($defaut)) { |
| 127 | - $defaut = '@$Pile[0][\'' . strtolower($nom_champ) . '\']'; |
|
| 127 | + $defaut = '@$Pile[0][\''.strtolower($nom_champ).'\']'; |
|
| 128 | 128 | } |
| 129 | 129 | |
| 130 | 130 | $i = 0; |
@@ -152,7 +152,7 @@ discard block |
||
| 152 | 152 | if ($select and !in_array($t, $boucles[$idb]->select)) { |
| 153 | 153 | $boucles[$idb]->select[] = $t; |
| 154 | 154 | } |
| 155 | - $champ = '$Pile[$SP' . ($i ? "-$i" : "") . '][\'' . $c . '\']'; |
|
| 155 | + $champ = '$Pile[$SP'.($i ? "-$i" : "").'][\''.$c.'\']'; |
|
| 156 | 156 | if (!$joker) { |
| 157 | 157 | return index_compose($conditionnel, $champ); |
| 158 | 158 | } |
@@ -193,7 +193,7 @@ discard block |
||
| 193 | 193 | function index_compose($conditionnel, $defaut) { |
| 194 | 194 | while ($c = array_pop($conditionnel)) { |
| 195 | 195 | // si on passe defaut = '', ne pas générer d'erreur de compilation. |
| 196 | - $defaut = "($c:(" . ($defaut ? $defaut : "''") . "))"; |
|
| 196 | + $defaut = "($c:(".($defaut ? $defaut : "''")."))"; |
|
| 197 | 197 | } |
| 198 | 198 | |
| 199 | 199 | return $defaut; |
@@ -240,7 +240,7 @@ discard block |
||
| 240 | 240 | if (!$r) { |
| 241 | 241 | $joker = false; // indiquer a l'appelant |
| 242 | 242 | # continuer pour chercher l'erreur suivante |
| 243 | - return array("'#" . $r . ':' . $nom_champ . "'", ''); |
|
| 243 | + return array("'#".$r.':'.$nom_champ."'", ''); |
|
| 244 | 244 | } |
| 245 | 245 | |
| 246 | 246 | $desc = $boucles[$idb]->show; |
@@ -340,8 +340,8 @@ discard block |
||
| 340 | 340 | $t = $index_exception_derogatoire($boucle, $desc, $nom_champ, $excep); |
| 341 | 341 | } |
| 342 | 342 | if ($t == null) { |
| 343 | - list($e, $x) = $excep; #PHP4 affecte de gauche a droite |
|
| 344 | - $excep = $x; #PHP5 de droite a gauche ! |
|
| 343 | + list($e, $x) = $excep; #PHP4 affecte de gauche a droite |
|
| 344 | + $excep = $x; #PHP5 de droite a gauche ! |
|
| 345 | 345 | $j = $trouver_table($e, $boucle->sql_serveur); |
| 346 | 346 | if (!$j) { |
| 347 | 347 | return array('', ''); |
@@ -353,7 +353,7 @@ discard block |
||
| 353 | 353 | $l = (preg_split('/\s*,\s*/', $k)); |
| 354 | 354 | $k = $desc['key']['PRIMARY KEY']; |
| 355 | 355 | if (!in_array($k, $l)) { |
| 356 | - spip_log("jointure impossible $e " . join(',', $l)); |
|
| 356 | + spip_log("jointure impossible $e ".join(',', $l)); |
|
| 357 | 357 | |
| 358 | 358 | return array('', ''); |
| 359 | 359 | } |
@@ -369,7 +369,7 @@ discard block |
||
| 369 | 369 | // demander a SQL de gerer le synonyme |
| 370 | 370 | // ca permet que excep soit dynamique (Cedric, 2/3/06) |
| 371 | 371 | if ($excep != $nom_champ) { |
| 372 | - $excep .= ' AS ' . $nom_champ; |
|
| 372 | + $excep .= ' AS '.$nom_champ; |
|
| 373 | 373 | } |
| 374 | 374 | |
| 375 | 375 | return array("$t.$excep", $nom_champ); |
@@ -602,7 +602,7 @@ discard block |
||
| 602 | 602 | join(',', $collecte), |
| 603 | 603 | ($collecte ? $param : substr($param, 1)), # virer la virgule |
| 604 | 604 | memoriser_contexte_compil($p), |
| 605 | - (!$supp ? '' : (', ' . join(',', $supp)))); |
|
| 605 | + (!$supp ? '' : (', '.join(',', $supp)))); |
|
| 606 | 606 | |
| 607 | 607 | $p->interdire_scripts = false; |
| 608 | 608 | |
@@ -697,7 +697,7 @@ discard block |
||
| 697 | 697 | $nom = $p->id_boucle; |
| 698 | 698 | |
| 699 | 699 | if ($nom and trouver_nom_serveur_distant($p)) { |
| 700 | - spip_log($nom . ':' . $p->nom_champ . ' ' . _T('zbug_distant_interdit')); |
|
| 700 | + spip_log($nom.':'.$p->nom_champ.' '._T('zbug_distant_interdit')); |
|
| 701 | 701 | |
| 702 | 702 | return false; |
| 703 | 703 | } |
@@ -766,7 +766,7 @@ discard block |
||
| 766 | 766 | (strpos($ps, 'typo') !== false) |
| 767 | 767 | ) |
| 768 | 768 | ) { |
| 769 | - $ps = 'traiter_doublons_documents($doublons, ' . $ps . ')'; |
|
| 769 | + $ps = 'traiter_doublons_documents($doublons, '.$ps.')'; |
|
| 770 | 770 | } |
| 771 | 771 | |
| 772 | 772 | // La protection des champs par |safehtml est assuree par les extensions |
@@ -884,7 +884,7 @@ discard block |
||
| 884 | 884 | function compose_filtres_args($p, $args, $sep) { |
| 885 | 885 | $arglist = ""; |
| 886 | 886 | foreach ($args as $arg) { |
| 887 | - $arglist .= $sep . |
|
| 887 | + $arglist .= $sep. |
|
| 888 | 888 | calculer_liste($arg, $p->descr, $p->boucles, $p->id_boucle); |
| 889 | 889 | } |
| 890 | 890 | |
@@ -935,7 +935,7 @@ discard block |
||
| 935 | 935 | while ($b != '') { |
| 936 | 936 | foreach ($p->boucles[$b]->criteres as $critere) { |
| 937 | 937 | if ($critere->op == $motif) { |
| 938 | - $p->code = '$Pile[$SP' . (($n == 0) ? "" : "-$n") . |
|
| 938 | + $p->code = '$Pile[$SP'.(($n == 0) ? "" : "-$n"). |
|
| 939 | 939 | "]['$champ']"; |
| 940 | 940 | $b = ''; |
| 941 | 941 | break 2; |
@@ -963,6 +963,6 @@ discard block |
||
| 963 | 963 | */ |
| 964 | 964 | function zbug_presenter_champ($p, $champ = "") { |
| 965 | 965 | $balise = $champ ? $champ : $p->nom_champ; |
| 966 | - $explicite = $explicite = $p->nom_boucle ? $p->nom_boucle . ':' : ''; |
|
| 966 | + $explicite = $explicite = $p->nom_boucle ? $p->nom_boucle.':' : ''; |
|
| 967 | 967 | return "#{$explicite}{$balise}"; |
| 968 | 968 | } |
| 969 | 969 | \ No newline at end of file |
@@ -26,7 +26,7 @@ discard block |
||
| 26 | 26 | **/ |
| 27 | 27 | |
| 28 | 28 | if (!defined('_ECRIRE_INC_VERSION')) { |
| 29 | - return; |
|
| 29 | + return; |
|
| 30 | 30 | } |
| 31 | 31 | |
| 32 | 32 | /** |
@@ -48,14 +48,14 @@ discard block |
||
| 48 | 48 | * Code PHP si cet argument est présent, sinon null |
| 49 | 49 | **/ |
| 50 | 50 | function interprete_argument_balise($n, $p) { |
| 51 | - if (($p->param) && (!$p->param[0][0]) && (count($p->param[0]) > $n)) { |
|
| 52 | - return calculer_liste($p->param[0][$n], |
|
| 53 | - $p->descr, |
|
| 54 | - $p->boucles, |
|
| 55 | - $p->id_boucle); |
|
| 56 | - } else { |
|
| 57 | - return null; |
|
| 58 | - } |
|
| 51 | + if (($p->param) && (!$p->param[0][0]) && (count($p->param[0]) > $n)) { |
|
| 52 | + return calculer_liste($p->param[0][$n], |
|
| 53 | + $p->descr, |
|
| 54 | + $p->boucles, |
|
| 55 | + $p->id_boucle); |
|
| 56 | + } else { |
|
| 57 | + return null; |
|
| 58 | + } |
|
| 59 | 59 | } |
| 60 | 60 | |
| 61 | 61 | |
@@ -75,10 +75,10 @@ discard block |
||
| 75 | 75 | * Pile complétée par le code à générer |
| 76 | 76 | **/ |
| 77 | 77 | function balise_NOM_SITE_SPIP_dist($p) { |
| 78 | - $p->code = "\$GLOBALS['meta']['nom_site']"; |
|
| 78 | + $p->code = "\$GLOBALS['meta']['nom_site']"; |
|
| 79 | 79 | |
| 80 | - #$p->interdire_scripts = true; |
|
| 81 | - return $p; |
|
| 80 | + #$p->interdire_scripts = true; |
|
| 81 | + return $p; |
|
| 82 | 82 | } |
| 83 | 83 | |
| 84 | 84 | /** |
@@ -94,10 +94,10 @@ discard block |
||
| 94 | 94 | * Pile complétée par le code à générer |
| 95 | 95 | **/ |
| 96 | 96 | function balise_EMAIL_WEBMASTER_dist($p) { |
| 97 | - $p->code = "\$GLOBALS['meta']['email_webmaster']"; |
|
| 97 | + $p->code = "\$GLOBALS['meta']['email_webmaster']"; |
|
| 98 | 98 | |
| 99 | - #$p->interdire_scripts = true; |
|
| 100 | - return $p; |
|
| 99 | + #$p->interdire_scripts = true; |
|
| 100 | + return $p; |
|
| 101 | 101 | } |
| 102 | 102 | |
| 103 | 103 | /** |
@@ -113,10 +113,10 @@ discard block |
||
| 113 | 113 | * Pile complétée par le code à générer |
| 114 | 114 | **/ |
| 115 | 115 | function balise_DESCRIPTIF_SITE_SPIP_dist($p) { |
| 116 | - $p->code = "\$GLOBALS['meta']['descriptif_site']"; |
|
| 116 | + $p->code = "\$GLOBALS['meta']['descriptif_site']"; |
|
| 117 | 117 | |
| 118 | - #$p->interdire_scripts = true; |
|
| 119 | - return $p; |
|
| 118 | + #$p->interdire_scripts = true; |
|
| 119 | + return $p; |
|
| 120 | 120 | } |
| 121 | 121 | |
| 122 | 122 | |
@@ -137,10 +137,10 @@ discard block |
||
| 137 | 137 | * Pile complétée par le code à générer |
| 138 | 138 | **/ |
| 139 | 139 | function balise_CHARSET_dist($p) { |
| 140 | - $p->code = "\$GLOBALS['meta']['charset']"; |
|
| 140 | + $p->code = "\$GLOBALS['meta']['charset']"; |
|
| 141 | 141 | |
| 142 | - #$p->interdire_scripts = true; |
|
| 143 | - return $p; |
|
| 142 | + #$p->interdire_scripts = true; |
|
| 143 | + return $p; |
|
| 144 | 144 | } |
| 145 | 145 | |
| 146 | 146 | /** |
@@ -165,11 +165,11 @@ discard block |
||
| 165 | 165 | * Pile complétée par le code à générer |
| 166 | 166 | **/ |
| 167 | 167 | function balise_LANG_LEFT_dist($p) { |
| 168 | - $_lang = champ_sql('lang', $p); |
|
| 169 | - $p->code = "lang_dir($_lang, 'left','right')"; |
|
| 170 | - $p->interdire_scripts = false; |
|
| 168 | + $_lang = champ_sql('lang', $p); |
|
| 169 | + $p->code = "lang_dir($_lang, 'left','right')"; |
|
| 170 | + $p->interdire_scripts = false; |
|
| 171 | 171 | |
| 172 | - return $p; |
|
| 172 | + return $p; |
|
| 173 | 173 | } |
| 174 | 174 | |
| 175 | 175 | /** |
@@ -189,11 +189,11 @@ discard block |
||
| 189 | 189 | * Pile complétée par le code à générer |
| 190 | 190 | **/ |
| 191 | 191 | function balise_LANG_RIGHT_dist($p) { |
| 192 | - $_lang = champ_sql('lang', $p); |
|
| 193 | - $p->code = "lang_dir($_lang, 'right','left')"; |
|
| 194 | - $p->interdire_scripts = false; |
|
| 192 | + $_lang = champ_sql('lang', $p); |
|
| 193 | + $p->code = "lang_dir($_lang, 'right','left')"; |
|
| 194 | + $p->interdire_scripts = false; |
|
| 195 | 195 | |
| 196 | - return $p; |
|
| 196 | + return $p; |
|
| 197 | 197 | } |
| 198 | 198 | |
| 199 | 199 | /** |
@@ -218,11 +218,11 @@ discard block |
||
| 218 | 218 | * Pile complétée par le code à générer |
| 219 | 219 | **/ |
| 220 | 220 | function balise_LANG_DIR_dist($p) { |
| 221 | - $_lang = champ_sql('lang', $p); |
|
| 222 | - $p->code = "lang_dir($_lang, 'ltr','rtl')"; |
|
| 223 | - $p->interdire_scripts = false; |
|
| 221 | + $_lang = champ_sql('lang', $p); |
|
| 222 | + $p->code = "lang_dir($_lang, 'ltr','rtl')"; |
|
| 223 | + $p->interdire_scripts = false; |
|
| 224 | 224 | |
| 225 | - return $p; |
|
| 225 | + return $p; |
|
| 226 | 226 | } |
| 227 | 227 | |
| 228 | 228 | |
@@ -239,10 +239,10 @@ discard block |
||
| 239 | 239 | * Pile complétée par le code à générer |
| 240 | 240 | **/ |
| 241 | 241 | function balise_PUCE_dist($p) { |
| 242 | - $p->code = "definir_puce()"; |
|
| 243 | - $p->interdire_scripts = false; |
|
| 242 | + $p->code = "definir_puce()"; |
|
| 243 | + $p->interdire_scripts = false; |
|
| 244 | 244 | |
| 245 | - return $p; |
|
| 245 | + return $p; |
|
| 246 | 246 | } |
| 247 | 247 | |
| 248 | 248 | |
@@ -266,12 +266,12 @@ discard block |
||
| 266 | 266 | * Pile completée du code PHP d'exécution de la balise |
| 267 | 267 | */ |
| 268 | 268 | function balise_DATE_dist($p) { |
| 269 | - $d = champ_sql('date', $p); |
|
| 269 | + $d = champ_sql('date', $p); |
|
| 270 | 270 | # if ($d === "@\$Pile[0]['date']") |
| 271 | 271 | # $d = "isset(\$Pile[0]['date']) ? $d : time()"; |
| 272 | - $p->code = $d; |
|
| 272 | + $p->code = $d; |
|
| 273 | 273 | |
| 274 | - return $p; |
|
| 274 | + return $p; |
|
| 275 | 275 | } |
| 276 | 276 | |
| 277 | 277 | |
@@ -291,13 +291,13 @@ discard block |
||
| 291 | 291 | * Pile completée du code PHP d'exécution de la balise |
| 292 | 292 | */ |
| 293 | 293 | function balise_DATE_REDAC_dist($p) { |
| 294 | - $d = champ_sql('date_redac', $p); |
|
| 294 | + $d = champ_sql('date_redac', $p); |
|
| 295 | 295 | # if ($d === "@\$Pile[0]['date_redac']") |
| 296 | 296 | # $d = "isset(\$Pile[0]['date_redac']) ? $d : time()"; |
| 297 | - $p->code = $d; |
|
| 298 | - $p->interdire_scripts = false; |
|
| 297 | + $p->code = $d; |
|
| 298 | + $p->interdire_scripts = false; |
|
| 299 | 299 | |
| 300 | - return $p; |
|
| 300 | + return $p; |
|
| 301 | 301 | } |
| 302 | 302 | |
| 303 | 303 | /** |
@@ -316,10 +316,10 @@ discard block |
||
| 316 | 316 | * Pile completée du code PHP d'exécution de la balise |
| 317 | 317 | */ |
| 318 | 318 | function balise_DATE_MODIF_dist($p) { |
| 319 | - $p->code = champ_sql('date_modif', $p); |
|
| 320 | - $p->interdire_scripts = false; |
|
| 319 | + $p->code = champ_sql('date_modif', $p); |
|
| 320 | + $p->interdire_scripts = false; |
|
| 321 | 321 | |
| 322 | - return $p; |
|
| 322 | + return $p; |
|
| 323 | 323 | } |
| 324 | 324 | |
| 325 | 325 | /** |
@@ -337,13 +337,13 @@ discard block |
||
| 337 | 337 | * Pile completée du code PHP d'exécution de la balise |
| 338 | 338 | */ |
| 339 | 339 | function balise_DATE_NOUVEAUTES_dist($p) { |
| 340 | - $p->code = "((\$GLOBALS['meta']['quoi_de_neuf'] == 'oui' |
|
| 340 | + $p->code = "((\$GLOBALS['meta']['quoi_de_neuf'] == 'oui' |
|
| 341 | 341 | AND isset(\$GLOBALS['meta']['dernier_envoi_neuf'])) ? |
| 342 | 342 | \$GLOBALS['meta']['dernier_envoi_neuf'] : |
| 343 | 343 | \"'0000-00-00'\")"; |
| 344 | - $p->interdire_scripts = false; |
|
| 344 | + $p->interdire_scripts = false; |
|
| 345 | 345 | |
| 346 | - return $p; |
|
| 346 | + return $p; |
|
| 347 | 347 | } |
| 348 | 348 | |
| 349 | 349 | |
@@ -362,11 +362,11 @@ discard block |
||
| 362 | 362 | * Pile completée du code PHP d'exécution de la balise |
| 363 | 363 | */ |
| 364 | 364 | function balise_DOSSIER_SQUELETTE_dist($p) { |
| 365 | - $code = substr(addslashes(dirname($p->descr['sourcefile'])), strlen(_DIR_RACINE)); |
|
| 366 | - $p->code = "_DIR_RACINE . '$code'" . |
|
| 367 | - $p->interdire_scripts = false; |
|
| 365 | + $code = substr(addslashes(dirname($p->descr['sourcefile'])), strlen(_DIR_RACINE)); |
|
| 366 | + $p->code = "_DIR_RACINE . '$code'" . |
|
| 367 | + $p->interdire_scripts = false; |
|
| 368 | 368 | |
| 369 | - return $p; |
|
| 369 | + return $p; |
|
| 370 | 370 | } |
| 371 | 371 | |
| 372 | 372 | /** |
@@ -381,11 +381,11 @@ discard block |
||
| 381 | 381 | * Pile completée du code PHP d'exécution de la balise |
| 382 | 382 | */ |
| 383 | 383 | function balise_SQUELETTE_dist($p) { |
| 384 | - $code = addslashes($p->descr['sourcefile']); |
|
| 385 | - $p->code = "'$code'" . |
|
| 386 | - $p->interdire_scripts = false; |
|
| 384 | + $code = addslashes($p->descr['sourcefile']); |
|
| 385 | + $p->code = "'$code'" . |
|
| 386 | + $p->interdire_scripts = false; |
|
| 387 | 387 | |
| 388 | - return $p; |
|
| 388 | + return $p; |
|
| 389 | 389 | } |
| 390 | 390 | |
| 391 | 391 | /** |
@@ -404,10 +404,10 @@ discard block |
||
| 404 | 404 | * Pile completée du code PHP d'exécution de la balise |
| 405 | 405 | */ |
| 406 | 406 | function balise_SPIP_VERSION_dist($p) { |
| 407 | - $p->code = "spip_version()"; |
|
| 408 | - $p->interdire_scripts = false; |
|
| 407 | + $p->code = "spip_version()"; |
|
| 408 | + $p->interdire_scripts = false; |
|
| 409 | 409 | |
| 410 | - return $p; |
|
| 410 | + return $p; |
|
| 411 | 411 | } |
| 412 | 412 | |
| 413 | 413 | |
@@ -433,18 +433,18 @@ discard block |
||
| 433 | 433 | * Pile complétée par le code à générer |
| 434 | 434 | **/ |
| 435 | 435 | function balise_NOM_SITE_dist($p) { |
| 436 | - if (!$p->etoile) { |
|
| 437 | - $p->code = "supprimer_numero(calculer_url(" . |
|
| 438 | - champ_sql('url_site', $p) . "," . |
|
| 439 | - champ_sql('nom_site', $p) . |
|
| 440 | - ", 'titre', \$connect, false))"; |
|
| 441 | - } else { |
|
| 442 | - $p->code = champ_sql('nom_site', $p); |
|
| 443 | - } |
|
| 436 | + if (!$p->etoile) { |
|
| 437 | + $p->code = "supprimer_numero(calculer_url(" . |
|
| 438 | + champ_sql('url_site', $p) . "," . |
|
| 439 | + champ_sql('nom_site', $p) . |
|
| 440 | + ", 'titre', \$connect, false))"; |
|
| 441 | + } else { |
|
| 442 | + $p->code = champ_sql('nom_site', $p); |
|
| 443 | + } |
|
| 444 | 444 | |
| 445 | - $p->interdire_scripts = true; |
|
| 445 | + $p->interdire_scripts = true; |
|
| 446 | 446 | |
| 447 | - return $p; |
|
| 447 | + return $p; |
|
| 448 | 448 | } |
| 449 | 449 | |
| 450 | 450 | |
@@ -461,11 +461,11 @@ discard block |
||
| 461 | 461 | * Pile complétée par le code à générer |
| 462 | 462 | **/ |
| 463 | 463 | function balise_NOTES_dist($p) { |
| 464 | - // Recuperer les notes |
|
| 465 | - $p->code = 'calculer_notes()'; |
|
| 464 | + // Recuperer les notes |
|
| 465 | + $p->code = 'calculer_notes()'; |
|
| 466 | 466 | |
| 467 | - #$p->interdire_scripts = true; |
|
| 468 | - return $p; |
|
| 467 | + #$p->interdire_scripts = true; |
|
| 468 | + return $p; |
|
| 469 | 469 | } |
| 470 | 470 | |
| 471 | 471 | |
@@ -487,10 +487,10 @@ discard block |
||
| 487 | 487 | * Pile complétée par le code à générer |
| 488 | 488 | **/ |
| 489 | 489 | function balise_RECHERCHE_dist($p) { |
| 490 | - $p->code = 'entites_html(_request("recherche"))'; |
|
| 491 | - $p->interdire_scripts = false; |
|
| 490 | + $p->code = 'entites_html(_request("recherche"))'; |
|
| 491 | + $p->interdire_scripts = false; |
|
| 492 | 492 | |
| 493 | - return $p; |
|
| 493 | + return $p; |
|
| 494 | 494 | } |
| 495 | 495 | |
| 496 | 496 | |
@@ -508,17 +508,17 @@ discard block |
||
| 508 | 508 | * Pile complétée par le code à générer |
| 509 | 509 | **/ |
| 510 | 510 | function balise_COMPTEUR_BOUCLE_dist($p) { |
| 511 | - $b = index_boucle_mere($p); |
|
| 512 | - if ($b === '') { |
|
| 513 | - $msg = array('zbug_champ_hors_boucle', array('champ' => zbug_presenter_champ($p))); |
|
| 514 | - erreur_squelette($msg, $p); |
|
| 515 | - } else { |
|
| 516 | - $p->code = "\$Numrows['$b']['compteur_boucle']"; |
|
| 517 | - $p->boucles[$b]->cptrows = true; |
|
| 518 | - $p->interdire_scripts = false; |
|
| 511 | + $b = index_boucle_mere($p); |
|
| 512 | + if ($b === '') { |
|
| 513 | + $msg = array('zbug_champ_hors_boucle', array('champ' => zbug_presenter_champ($p))); |
|
| 514 | + erreur_squelette($msg, $p); |
|
| 515 | + } else { |
|
| 516 | + $p->code = "\$Numrows['$b']['compteur_boucle']"; |
|
| 517 | + $p->boucles[$b]->cptrows = true; |
|
| 518 | + $p->interdire_scripts = false; |
|
| 519 | 519 | |
| 520 | - return $p; |
|
| 521 | - } |
|
| 520 | + return $p; |
|
| 521 | + } |
|
| 522 | 522 | } |
| 523 | 523 | |
| 524 | 524 | /** |
@@ -536,17 +536,17 @@ discard block |
||
| 536 | 536 | * Pile complétée par le code à générer |
| 537 | 537 | **/ |
| 538 | 538 | function balise_TOTAL_BOUCLE_dist($p) { |
| 539 | - $b = index_boucle_mere($p); |
|
| 540 | - if ($b === '') { |
|
| 541 | - $msg = array('zbug_champ_hors_boucle', array('champ' => zbug_presenter_champ($p))); |
|
| 542 | - erreur_squelette($msg, $p); |
|
| 543 | - } else { |
|
| 544 | - $p->code = "\$Numrows['$b']['total']"; |
|
| 545 | - $p->boucles[$b]->numrows = true; |
|
| 546 | - $p->interdire_scripts = false; |
|
| 547 | - } |
|
| 539 | + $b = index_boucle_mere($p); |
|
| 540 | + if ($b === '') { |
|
| 541 | + $msg = array('zbug_champ_hors_boucle', array('champ' => zbug_presenter_champ($p))); |
|
| 542 | + erreur_squelette($msg, $p); |
|
| 543 | + } else { |
|
| 544 | + $p->code = "\$Numrows['$b']['total']"; |
|
| 545 | + $p->boucles[$b]->numrows = true; |
|
| 546 | + $p->interdire_scripts = false; |
|
| 547 | + } |
|
| 548 | 548 | |
| 549 | - return $p; |
|
| 549 | + return $p; |
|
| 550 | 550 | } |
| 551 | 551 | |
| 552 | 552 | |
@@ -566,7 +566,7 @@ discard block |
||
| 566 | 566 | * Pile complétée par le code à générer |
| 567 | 567 | **/ |
| 568 | 568 | function balise_POINTS_dist($p) { |
| 569 | - return rindex_pile($p, 'points', 'recherche'); |
|
| 569 | + return rindex_pile($p, 'points', 'recherche'); |
|
| 570 | 570 | } |
| 571 | 571 | |
| 572 | 572 | |
@@ -587,12 +587,12 @@ discard block |
||
| 587 | 587 | * Pile complétée par le code à générer |
| 588 | 588 | **/ |
| 589 | 589 | function balise_POPULARITE_ABSOLUE_dist($p) { |
| 590 | - $p->code = 'ceil(' . |
|
| 591 | - champ_sql('popularite', $p) . |
|
| 592 | - ')'; |
|
| 593 | - $p->interdire_scripts = false; |
|
| 590 | + $p->code = 'ceil(' . |
|
| 591 | + champ_sql('popularite', $p) . |
|
| 592 | + ')'; |
|
| 593 | + $p->interdire_scripts = false; |
|
| 594 | 594 | |
| 595 | - return $p; |
|
| 595 | + return $p; |
|
| 596 | 596 | } |
| 597 | 597 | |
| 598 | 598 | /** |
@@ -612,10 +612,10 @@ discard block |
||
| 612 | 612 | * Pile complétée par le code à générer |
| 613 | 613 | **/ |
| 614 | 614 | function balise_POPULARITE_SITE_dist($p) { |
| 615 | - $p->code = 'ceil($GLOBALS["meta"][\'popularite_total\'])'; |
|
| 616 | - $p->interdire_scripts = false; |
|
| 615 | + $p->code = 'ceil($GLOBALS["meta"][\'popularite_total\'])'; |
|
| 616 | + $p->interdire_scripts = false; |
|
| 617 | 617 | |
| 618 | - return $p; |
|
| 618 | + return $p; |
|
| 619 | 619 | } |
| 620 | 620 | |
| 621 | 621 | /** |
@@ -636,10 +636,10 @@ discard block |
||
| 636 | 636 | * Pile complétée par le code à générer |
| 637 | 637 | **/ |
| 638 | 638 | function balise_POPULARITE_MAX_dist($p) { |
| 639 | - $p->code = 'ceil($GLOBALS["meta"][\'popularite_max\'])'; |
|
| 640 | - $p->interdire_scripts = false; |
|
| 639 | + $p->code = 'ceil($GLOBALS["meta"][\'popularite_max\'])'; |
|
| 640 | + $p->interdire_scripts = false; |
|
| 641 | 641 | |
| 642 | - return $p; |
|
| 642 | + return $p; |
|
| 643 | 643 | } |
| 644 | 644 | |
| 645 | 645 | |
@@ -665,14 +665,14 @@ discard block |
||
| 665 | 665 | * Pile complétée par le code à générer |
| 666 | 666 | **/ |
| 667 | 667 | function balise_VALEUR_dist($p) { |
| 668 | - $b = $p->nom_boucle ? $p->nom_boucle : $p->id_boucle; |
|
| 669 | - $p->code = index_pile($p->id_boucle, 'valeur', $p->boucles, $b);; |
|
| 670 | - if (($v = interprete_argument_balise(1, $p)) !== null) { |
|
| 671 | - $p->code = 'table_valeur(' . $p->code . ', ' . $v . ')'; |
|
| 672 | - } |
|
| 673 | - $p->interdire_scripts = true; |
|
| 668 | + $b = $p->nom_boucle ? $p->nom_boucle : $p->id_boucle; |
|
| 669 | + $p->code = index_pile($p->id_boucle, 'valeur', $p->boucles, $b);; |
|
| 670 | + if (($v = interprete_argument_balise(1, $p)) !== null) { |
|
| 671 | + $p->code = 'table_valeur(' . $p->code . ', ' . $v . ')'; |
|
| 672 | + } |
|
| 673 | + $p->interdire_scripts = true; |
|
| 674 | 674 | |
| 675 | - return $p; |
|
| 675 | + return $p; |
|
| 676 | 676 | } |
| 677 | 677 | |
| 678 | 678 | /** |
@@ -701,17 +701,17 @@ discard block |
||
| 701 | 701 | * Pile complétée par le code à générer |
| 702 | 702 | **/ |
| 703 | 703 | function balise_EXPOSE_dist($p) { |
| 704 | - $on = "'on'"; |
|
| 705 | - $off = "''"; |
|
| 706 | - if (($v = interprete_argument_balise(1, $p)) !== null) { |
|
| 707 | - $on = $v; |
|
| 708 | - if (($v = interprete_argument_balise(2, $p)) !== null) { |
|
| 709 | - $off = $v; |
|
| 710 | - } |
|
| 704 | + $on = "'on'"; |
|
| 705 | + $off = "''"; |
|
| 706 | + if (($v = interprete_argument_balise(1, $p)) !== null) { |
|
| 707 | + $on = $v; |
|
| 708 | + if (($v = interprete_argument_balise(2, $p)) !== null) { |
|
| 709 | + $off = $v; |
|
| 710 | + } |
|
| 711 | 711 | |
| 712 | - } |
|
| 712 | + } |
|
| 713 | 713 | |
| 714 | - return calculer_balise_expose($p, $on, $off); |
|
| 714 | + return calculer_balise_expose($p, $on, $off); |
|
| 715 | 715 | } |
| 716 | 716 | |
| 717 | 717 | /** |
@@ -729,36 +729,36 @@ discard block |
||
| 729 | 729 | * Pile complétée par le code à générer |
| 730 | 730 | **/ |
| 731 | 731 | function calculer_balise_expose($p, $on, $off) { |
| 732 | - $b = index_boucle($p); |
|
| 733 | - if (empty($p->boucles[$b]->primary)) { |
|
| 734 | - $msg = array('zbug_champ_hors_boucle', array('champ' => zbug_presenter_champ($p))); |
|
| 735 | - erreur_squelette($msg, $p); |
|
| 736 | - } else { |
|
| 732 | + $b = index_boucle($p); |
|
| 733 | + if (empty($p->boucles[$b]->primary)) { |
|
| 734 | + $msg = array('zbug_champ_hors_boucle', array('champ' => zbug_presenter_champ($p))); |
|
| 735 | + erreur_squelette($msg, $p); |
|
| 736 | + } else { |
|
| 737 | 737 | |
| 738 | - $key = $p->boucles[$b]->primary; |
|
| 739 | - $type = $p->boucles[$p->id_boucle]->primary; |
|
| 740 | - $desc = $p->boucles[$b]->show; |
|
| 741 | - $connect = sql_quote($p->boucles[$b]->sql_serveur); |
|
| 738 | + $key = $p->boucles[$b]->primary; |
|
| 739 | + $type = $p->boucles[$p->id_boucle]->primary; |
|
| 740 | + $desc = $p->boucles[$b]->show; |
|
| 741 | + $connect = sql_quote($p->boucles[$b]->sql_serveur); |
|
| 742 | 742 | |
| 743 | - // Ne pas utiliser champ_sql, on jongle avec le nom boucle explicite |
|
| 744 | - $c = index_pile($p->id_boucle, $type, $p->boucles); |
|
| 743 | + // Ne pas utiliser champ_sql, on jongle avec le nom boucle explicite |
|
| 744 | + $c = index_pile($p->id_boucle, $type, $p->boucles); |
|
| 745 | 745 | |
| 746 | - if (isset($desc['field']['id_parent'])) { |
|
| 747 | - $parent = 0; // pour if (!$parent) dans calculer_expose |
|
| 748 | - } elseif (isset($desc['field']['id_rubrique'])) { |
|
| 749 | - $parent = index_pile($p->id_boucle, 'id_rubrique', $p->boucles, $b); |
|
| 750 | - } elseif (isset($desc['field']['id_groupe'])) { |
|
| 751 | - $parent = index_pile($p->id_boucle, 'id_groupe', $p->boucles, $b); |
|
| 752 | - } else { |
|
| 753 | - $parent = "''"; |
|
| 754 | - } |
|
| 746 | + if (isset($desc['field']['id_parent'])) { |
|
| 747 | + $parent = 0; // pour if (!$parent) dans calculer_expose |
|
| 748 | + } elseif (isset($desc['field']['id_rubrique'])) { |
|
| 749 | + $parent = index_pile($p->id_boucle, 'id_rubrique', $p->boucles, $b); |
|
| 750 | + } elseif (isset($desc['field']['id_groupe'])) { |
|
| 751 | + $parent = index_pile($p->id_boucle, 'id_groupe', $p->boucles, $b); |
|
| 752 | + } else { |
|
| 753 | + $parent = "''"; |
|
| 754 | + } |
|
| 755 | 755 | |
| 756 | - $p->code = "(calcul_exposer($c, '$type', \$Pile[0], $parent, '$key', $connect) ? $on : $off)"; |
|
| 757 | - } |
|
| 756 | + $p->code = "(calcul_exposer($c, '$type', \$Pile[0], $parent, '$key', $connect) ? $on : $off)"; |
|
| 757 | + } |
|
| 758 | 758 | |
| 759 | - $p->interdire_scripts = false; |
|
| 759 | + $p->interdire_scripts = false; |
|
| 760 | 760 | |
| 761 | - return $p; |
|
| 761 | + return $p; |
|
| 762 | 762 | } |
| 763 | 763 | |
| 764 | 764 | |
@@ -796,47 +796,47 @@ discard block |
||
| 796 | 796 | **/ |
| 797 | 797 | function balise_INTRODUCTION_dist($p) { |
| 798 | 798 | |
| 799 | - $type = $p->type_requete; |
|
| 800 | - |
|
| 801 | - $_texte = champ_sql('texte', $p); |
|
| 802 | - $trouver_table = charger_fonction('trouver_table', 'base'); |
|
| 803 | - $desc = $trouver_table(table_objet_sql($type)); |
|
| 804 | - $_descriptif = "''"; |
|
| 805 | - if ($desc and isset($desc['field']['descriptif'])) { |
|
| 806 | - // notamment articles et rubriques mais aussi tout nouvel objet concerne |
|
| 807 | - $_descriptif = champ_sql('descriptif', $p); |
|
| 808 | - } |
|
| 809 | - |
|
| 810 | - // notamment les articles mais aussi tout nouvel objet concerne |
|
| 811 | - if ($desc and isset($desc['field']['chapo'])) { |
|
| 812 | - $_chapo = champ_sql('chapo', $p); |
|
| 813 | - $_texte = "(strlen($_descriptif)) |
|
| 799 | + $type = $p->type_requete; |
|
| 800 | + |
|
| 801 | + $_texte = champ_sql('texte', $p); |
|
| 802 | + $trouver_table = charger_fonction('trouver_table', 'base'); |
|
| 803 | + $desc = $trouver_table(table_objet_sql($type)); |
|
| 804 | + $_descriptif = "''"; |
|
| 805 | + if ($desc and isset($desc['field']['descriptif'])) { |
|
| 806 | + // notamment articles et rubriques mais aussi tout nouvel objet concerne |
|
| 807 | + $_descriptif = champ_sql('descriptif', $p); |
|
| 808 | + } |
|
| 809 | + |
|
| 810 | + // notamment les articles mais aussi tout nouvel objet concerne |
|
| 811 | + if ($desc and isset($desc['field']['chapo'])) { |
|
| 812 | + $_chapo = champ_sql('chapo', $p); |
|
| 813 | + $_texte = "(strlen($_descriptif)) |
|
| 814 | 814 | ? '' |
| 815 | 815 | : $_chapo . \"\\n\\n\" . $_texte"; |
| 816 | - } |
|
| 816 | + } |
|
| 817 | 817 | |
| 818 | - // longueur en parametre, ou valeur par defaut |
|
| 819 | - $longueur_defaut = objet_info($type, 'introduction_longueur'); |
|
| 820 | - if (!$longueur_defaut) { |
|
| 821 | - $longueur_defaut = 600; |
|
| 822 | - } |
|
| 818 | + // longueur en parametre, ou valeur par defaut |
|
| 819 | + $longueur_defaut = objet_info($type, 'introduction_longueur'); |
|
| 820 | + if (!$longueur_defaut) { |
|
| 821 | + $longueur_defaut = 600; |
|
| 822 | + } |
|
| 823 | 823 | |
| 824 | - $_suite = 'null'; |
|
| 825 | - $_longueur = $longueur_defaut; |
|
| 826 | - if (($v = interprete_argument_balise(1, $p)) !== null) { |
|
| 827 | - $_longueur = 'is_numeric(' . $v . ')?intval(' . $v . '):' . $longueur_defaut; |
|
| 828 | - $_suite = '!is_numeric(' . $v . ')?' . $v . ':null'; |
|
| 829 | - } |
|
| 830 | - if (($v2 = interprete_argument_balise(2, $p)) !== null) { |
|
| 831 | - $_suite = $v2; |
|
| 832 | - } |
|
| 824 | + $_suite = 'null'; |
|
| 825 | + $_longueur = $longueur_defaut; |
|
| 826 | + if (($v = interprete_argument_balise(1, $p)) !== null) { |
|
| 827 | + $_longueur = 'is_numeric(' . $v . ')?intval(' . $v . '):' . $longueur_defaut; |
|
| 828 | + $_suite = '!is_numeric(' . $v . ')?' . $v . ':null'; |
|
| 829 | + } |
|
| 830 | + if (($v2 = interprete_argument_balise(2, $p)) !== null) { |
|
| 831 | + $_suite = $v2; |
|
| 832 | + } |
|
| 833 | 833 | |
| 834 | - $f = chercher_filtre('introduction'); |
|
| 835 | - $p->code = "$f($_descriptif, $_texte, $_longueur, \$connect, $_suite)"; |
|
| 834 | + $f = chercher_filtre('introduction'); |
|
| 835 | + $p->code = "$f($_descriptif, $_texte, $_longueur, \$connect, $_suite)"; |
|
| 836 | 836 | |
| 837 | - #$p->interdire_scripts = true; |
|
| 838 | - $p->etoile = '*'; // propre est deja fait dans le calcul de l'intro |
|
| 839 | - return $p; |
|
| 837 | + #$p->interdire_scripts = true; |
|
| 838 | + $p->etoile = '*'; // propre est deja fait dans le calcul de l'intro |
|
| 839 | + return $p; |
|
| 840 | 840 | } |
| 841 | 841 | |
| 842 | 842 | |
@@ -856,15 +856,15 @@ discard block |
||
| 856 | 856 | * Pile complétée par le code à générer |
| 857 | 857 | **/ |
| 858 | 858 | function balise_LANG_dist($p) { |
| 859 | - $_lang = champ_sql('lang', $p); |
|
| 860 | - if (!$p->etoile) { |
|
| 861 | - $p->code = "spip_htmlentities($_lang ? $_lang : \$GLOBALS['spip_lang'])"; |
|
| 862 | - } else { |
|
| 863 | - $p->code = "spip_htmlentities($_lang)"; |
|
| 864 | - } |
|
| 865 | - $p->interdire_scripts = false; |
|
| 859 | + $_lang = champ_sql('lang', $p); |
|
| 860 | + if (!$p->etoile) { |
|
| 861 | + $p->code = "spip_htmlentities($_lang ? $_lang : \$GLOBALS['spip_lang'])"; |
|
| 862 | + } else { |
|
| 863 | + $p->code = "spip_htmlentities($_lang)"; |
|
| 864 | + } |
|
| 865 | + $p->interdire_scripts = false; |
|
| 866 | 866 | |
| 867 | - return $p; |
|
| 867 | + return $p; |
|
| 868 | 868 | } |
| 869 | 869 | |
| 870 | 870 | /** |
@@ -886,44 +886,44 @@ discard block |
||
| 886 | 886 | * Pile complétée par le code à générer |
| 887 | 887 | */ |
| 888 | 888 | function balise_LESAUTEURS_dist($p) { |
| 889 | - // Cherche le champ 'lesauteurs' dans la pile |
|
| 890 | - $_lesauteurs = champ_sql('lesauteurs', $p, false); |
|
| 891 | - |
|
| 892 | - // Si le champ n'existe pas (cas de spip_articles), on applique |
|
| 893 | - // le modele lesauteurs.html en passant id_article dans le contexte; |
|
| 894 | - // dans le cas contraire on prend le champ 'lesauteurs' |
|
| 895 | - // (cf extension sites/) |
|
| 896 | - if ($_lesauteurs |
|
| 897 | - and $_lesauteurs != '@$Pile[0][\'lesauteurs\']' |
|
| 898 | - ) { |
|
| 899 | - $p->code = "safehtml($_lesauteurs)"; |
|
| 900 | - // $p->interdire_scripts = true; |
|
| 901 | - } else { |
|
| 902 | - if (!$p->id_boucle) { |
|
| 903 | - $connect = ''; |
|
| 904 | - $objet = 'article'; |
|
| 905 | - $id_table_objet = 'id_article'; |
|
| 906 | - } else { |
|
| 907 | - $b = $p->nom_boucle ? $p->nom_boucle : $p->id_boucle; |
|
| 908 | - $connect = $p->boucles[$b]->sql_serveur; |
|
| 909 | - $type_boucle = $p->boucles[$b]->type_requete; |
|
| 910 | - $objet = objet_type($type_boucle); |
|
| 911 | - $id_table_objet = id_table_objet($type_boucle); |
|
| 912 | - } |
|
| 913 | - $c = memoriser_contexte_compil($p); |
|
| 914 | - |
|
| 915 | - $p->code = sprintf(CODE_RECUPERER_FOND, "'modeles/lesauteurs'", |
|
| 916 | - "array('objet'=>'" . $objet . |
|
| 917 | - "','id_objet' => " . champ_sql($id_table_objet, $p) . |
|
| 918 | - ",'$id_table_objet' => " . champ_sql($id_table_objet, $p) . |
|
| 919 | - ($objet == 'article' ? "" : ",'id_article' => " . champ_sql('id_article', $p)) . |
|
| 920 | - ")", |
|
| 921 | - "'trim'=>true, 'compil'=>array($c)", |
|
| 922 | - _q($connect)); |
|
| 923 | - $p->interdire_scripts = false; // securite apposee par recuperer_fond() |
|
| 924 | - } |
|
| 925 | - |
|
| 926 | - return $p; |
|
| 889 | + // Cherche le champ 'lesauteurs' dans la pile |
|
| 890 | + $_lesauteurs = champ_sql('lesauteurs', $p, false); |
|
| 891 | + |
|
| 892 | + // Si le champ n'existe pas (cas de spip_articles), on applique |
|
| 893 | + // le modele lesauteurs.html en passant id_article dans le contexte; |
|
| 894 | + // dans le cas contraire on prend le champ 'lesauteurs' |
|
| 895 | + // (cf extension sites/) |
|
| 896 | + if ($_lesauteurs |
|
| 897 | + and $_lesauteurs != '@$Pile[0][\'lesauteurs\']' |
|
| 898 | + ) { |
|
| 899 | + $p->code = "safehtml($_lesauteurs)"; |
|
| 900 | + // $p->interdire_scripts = true; |
|
| 901 | + } else { |
|
| 902 | + if (!$p->id_boucle) { |
|
| 903 | + $connect = ''; |
|
| 904 | + $objet = 'article'; |
|
| 905 | + $id_table_objet = 'id_article'; |
|
| 906 | + } else { |
|
| 907 | + $b = $p->nom_boucle ? $p->nom_boucle : $p->id_boucle; |
|
| 908 | + $connect = $p->boucles[$b]->sql_serveur; |
|
| 909 | + $type_boucle = $p->boucles[$b]->type_requete; |
|
| 910 | + $objet = objet_type($type_boucle); |
|
| 911 | + $id_table_objet = id_table_objet($type_boucle); |
|
| 912 | + } |
|
| 913 | + $c = memoriser_contexte_compil($p); |
|
| 914 | + |
|
| 915 | + $p->code = sprintf(CODE_RECUPERER_FOND, "'modeles/lesauteurs'", |
|
| 916 | + "array('objet'=>'" . $objet . |
|
| 917 | + "','id_objet' => " . champ_sql($id_table_objet, $p) . |
|
| 918 | + ",'$id_table_objet' => " . champ_sql($id_table_objet, $p) . |
|
| 919 | + ($objet == 'article' ? "" : ",'id_article' => " . champ_sql('id_article', $p)) . |
|
| 920 | + ")", |
|
| 921 | + "'trim'=>true, 'compil'=>array($c)", |
|
| 922 | + _q($connect)); |
|
| 923 | + $p->interdire_scripts = false; // securite apposee par recuperer_fond() |
|
| 924 | + } |
|
| 925 | + |
|
| 926 | + return $p; |
|
| 927 | 927 | } |
| 928 | 928 | |
| 929 | 929 | |
@@ -950,75 +950,75 @@ discard block |
||
| 950 | 950 | * Pile complétée par le code à générer |
| 951 | 951 | */ |
| 952 | 952 | function balise_RANG_dist($p) { |
| 953 | - $b = index_boucle($p); |
|
| 954 | - if ($b === '') { |
|
| 955 | - $msg = array( |
|
| 956 | - 'zbug_champ_hors_boucle', |
|
| 957 | - array('champ' => '#RANG') |
|
| 958 | - ); |
|
| 959 | - erreur_squelette($msg, $p); |
|
| 960 | - } else { |
|
| 961 | - // chercher d'abord un champ sql rang (mais pas dans le env : defaut '' si on trouve pas de champ sql) |
|
| 962 | - // dans la boucle immediatement englobante uniquement |
|
| 963 | - // sinon on compose le champ calcule |
|
| 964 | - $_rang = champ_sql('rang', $p, '', false); |
|
| 965 | - |
|
| 966 | - // si pas trouve de champ sql rang : |
|
| 967 | - if (!$_rang or $_rang == "''") { |
|
| 968 | - $boucle = &$p->boucles[$b]; |
|
| 969 | - |
|
| 970 | - // on gere le cas ou #RANG est une extraction du numero dans le titre |
|
| 971 | - $trouver_table = charger_fonction('trouver_table', 'base'); |
|
| 972 | - $desc = $trouver_table($boucle->id_table); |
|
| 973 | - $_titre = ''; # où extraire le numero ? |
|
| 953 | + $b = index_boucle($p); |
|
| 954 | + if ($b === '') { |
|
| 955 | + $msg = array( |
|
| 956 | + 'zbug_champ_hors_boucle', |
|
| 957 | + array('champ' => '#RANG') |
|
| 958 | + ); |
|
| 959 | + erreur_squelette($msg, $p); |
|
| 960 | + } else { |
|
| 961 | + // chercher d'abord un champ sql rang (mais pas dans le env : defaut '' si on trouve pas de champ sql) |
|
| 962 | + // dans la boucle immediatement englobante uniquement |
|
| 963 | + // sinon on compose le champ calcule |
|
| 964 | + $_rang = champ_sql('rang', $p, '', false); |
|
| 965 | + |
|
| 966 | + // si pas trouve de champ sql rang : |
|
| 967 | + if (!$_rang or $_rang == "''") { |
|
| 968 | + $boucle = &$p->boucles[$b]; |
|
| 969 | + |
|
| 970 | + // on gere le cas ou #RANG est une extraction du numero dans le titre |
|
| 971 | + $trouver_table = charger_fonction('trouver_table', 'base'); |
|
| 972 | + $desc = $trouver_table($boucle->id_table); |
|
| 973 | + $_titre = ''; # où extraire le numero ? |
|
| 974 | 974 | |
| 975 | - if (isset($desc['titre'])) { |
|
| 976 | - $t = $desc['titre']; |
|
| 977 | - if ( |
|
| 978 | - // Soit on trouve avec la déclaration de la lang AVANT |
|
| 979 | - preg_match(';(?:lang\s*,)\s*(.*?titre)\s*(,|$);', $t, $m) |
|
| 980 | - // Soit on prend depuis le début |
|
| 981 | - or preg_match(';^(.*?titre)\s*(,|$);', $t, $m) |
|
| 982 | - ) { |
|
| 983 | - $m = preg_replace(',as\s+titre$,i', '', $m[1]); |
|
| 984 | - $m = trim($m); |
|
| 985 | - if ($m != "''") { |
|
| 986 | - if (!preg_match(",\W,", $m)) { |
|
| 987 | - $m = $boucle->id_table . ".$m"; |
|
| 988 | - } |
|
| 975 | + if (isset($desc['titre'])) { |
|
| 976 | + $t = $desc['titre']; |
|
| 977 | + if ( |
|
| 978 | + // Soit on trouve avec la déclaration de la lang AVANT |
|
| 979 | + preg_match(';(?:lang\s*,)\s*(.*?titre)\s*(,|$);', $t, $m) |
|
| 980 | + // Soit on prend depuis le début |
|
| 981 | + or preg_match(';^(.*?titre)\s*(,|$);', $t, $m) |
|
| 982 | + ) { |
|
| 983 | + $m = preg_replace(',as\s+titre$,i', '', $m[1]); |
|
| 984 | + $m = trim($m); |
|
| 985 | + if ($m != "''") { |
|
| 986 | + if (!preg_match(",\W,", $m)) { |
|
| 987 | + $m = $boucle->id_table . ".$m"; |
|
| 988 | + } |
|
| 989 | 989 | |
| 990 | - $m .= " AS titre_rang"; |
|
| 991 | - |
|
| 992 | - $boucle->select[] = $m; |
|
| 993 | - $_titre = '$Pile[$SP][\'titre_rang\']'; |
|
| 994 | - } |
|
| 995 | - } |
|
| 996 | - } |
|
| 997 | - |
|
| 998 | - // si on n'a rien trouvé, on utilise le champ titre classique |
|
| 999 | - if (!$_titre) { |
|
| 1000 | - $_titre = champ_sql('titre', $p); |
|
| 1001 | - } |
|
| 1002 | - |
|
| 1003 | - // et on recupere aussi les infos de liaison si on est en train d'editer les liens justement |
|
| 1004 | - // cas des formulaires xxx_lies utilises par #FORMULAIRE_EDITER_LIENS |
|
| 1005 | - $type_boucle = $boucle->type_requete; |
|
| 1006 | - $objet = objet_type($type_boucle); |
|
| 1007 | - $id_table_objet = id_table_objet($type_boucle); |
|
| 1008 | - $_primary = champ_sql($id_table_objet, $p, '', false); |
|
| 1009 | - $_env = '$Pile[0]'; |
|
| 1010 | - |
|
| 1011 | - if (!$_titre) {$_titre = "''";} |
|
| 1012 | - if (!$_primary) {$_primary = "''";} |
|
| 1013 | - $_rang = "calculer_rang_smart($_titre, '$objet', $_primary, $_env)"; |
|
| 1014 | - |
|
| 1015 | - } |
|
| 990 | + $m .= " AS titre_rang"; |
|
| 991 | + |
|
| 992 | + $boucle->select[] = $m; |
|
| 993 | + $_titre = '$Pile[$SP][\'titre_rang\']'; |
|
| 994 | + } |
|
| 995 | + } |
|
| 996 | + } |
|
| 997 | + |
|
| 998 | + // si on n'a rien trouvé, on utilise le champ titre classique |
|
| 999 | + if (!$_titre) { |
|
| 1000 | + $_titre = champ_sql('titre', $p); |
|
| 1001 | + } |
|
| 1002 | + |
|
| 1003 | + // et on recupere aussi les infos de liaison si on est en train d'editer les liens justement |
|
| 1004 | + // cas des formulaires xxx_lies utilises par #FORMULAIRE_EDITER_LIENS |
|
| 1005 | + $type_boucle = $boucle->type_requete; |
|
| 1006 | + $objet = objet_type($type_boucle); |
|
| 1007 | + $id_table_objet = id_table_objet($type_boucle); |
|
| 1008 | + $_primary = champ_sql($id_table_objet, $p, '', false); |
|
| 1009 | + $_env = '$Pile[0]'; |
|
| 1010 | + |
|
| 1011 | + if (!$_titre) {$_titre = "''";} |
|
| 1012 | + if (!$_primary) {$_primary = "''";} |
|
| 1013 | + $_rang = "calculer_rang_smart($_titre, '$objet', $_primary, $_env)"; |
|
| 1014 | + |
|
| 1015 | + } |
|
| 1016 | 1016 | |
| 1017 | - $p->code = $_rang; |
|
| 1018 | - $p->interdire_scripts = false; |
|
| 1019 | - } |
|
| 1017 | + $p->code = $_rang; |
|
| 1018 | + $p->interdire_scripts = false; |
|
| 1019 | + } |
|
| 1020 | 1020 | |
| 1021 | - return $p; |
|
| 1021 | + return $p; |
|
| 1022 | 1022 | } |
| 1023 | 1023 | |
| 1024 | 1024 | |
@@ -1040,12 +1040,12 @@ discard block |
||
| 1040 | 1040 | * Pile complétée par le code à générer |
| 1041 | 1041 | **/ |
| 1042 | 1042 | function balise_POPULARITE_dist($p) { |
| 1043 | - $_popularite = champ_sql('popularite', $p); |
|
| 1044 | - $p->code = "(ceil(min(100, 100 * $_popularite |
|
| 1043 | + $_popularite = champ_sql('popularite', $p); |
|
| 1044 | + $p->code = "(ceil(min(100, 100 * $_popularite |
|
| 1045 | 1045 | / max(1 , 0 + \$GLOBALS['meta']['popularite_max']))))"; |
| 1046 | - $p->interdire_scripts = false; |
|
| 1046 | + $p->interdire_scripts = false; |
|
| 1047 | 1047 | |
| 1048 | - return $p; |
|
| 1048 | + return $p; |
|
| 1049 | 1049 | } |
| 1050 | 1050 | |
| 1051 | 1051 | /** |
@@ -1092,65 +1092,65 @@ discard block |
||
| 1092 | 1092 | * Pile complétée par le code à générer |
| 1093 | 1093 | */ |
| 1094 | 1094 | function balise_PAGINATION_dist($p, $liste = 'true') { |
| 1095 | - $b = index_boucle_mere($p); |
|
| 1096 | - |
|
| 1097 | - // s'il n'y a pas de nom de boucle, on ne peut pas paginer |
|
| 1098 | - if ($b === '') { |
|
| 1099 | - $msg = array( |
|
| 1100 | - 'zbug_champ_hors_boucle', |
|
| 1101 | - array('champ' => $liste ? 'PAGINATION' : 'ANCRE_PAGINATION') |
|
| 1102 | - ); |
|
| 1103 | - erreur_squelette($msg, $p); |
|
| 1104 | - |
|
| 1105 | - return $p; |
|
| 1106 | - } |
|
| 1107 | - |
|
| 1108 | - // s'il n'y a pas de mode_partie, c'est qu'on se trouve |
|
| 1109 | - // dans un boucle recursive ou qu'on a oublie le critere {pagination} |
|
| 1110 | - if (!$p->boucles[$b]->mode_partie) { |
|
| 1111 | - if (!$p->boucles[$b]->table_optionnelle) { |
|
| 1112 | - $msg = array( |
|
| 1113 | - 'zbug_pagination_sans_critere', |
|
| 1114 | - array('champ' => '#PAGINATION') |
|
| 1115 | - ); |
|
| 1116 | - erreur_squelette($msg, $p); |
|
| 1117 | - } |
|
| 1118 | - |
|
| 1119 | - return $p; |
|
| 1120 | - } |
|
| 1121 | - |
|
| 1122 | - // a priori true |
|
| 1123 | - // si false, le compilo va bloquer sur des syntaxes avec un filtre sans argument qui suit la balise |
|
| 1124 | - // si true, les arguments simples (sans truc=chose) vont degager |
|
| 1125 | - $_contexte = argumenter_inclure($p->param, true, $p, $p->boucles, $p->id_boucle, false, false); |
|
| 1126 | - if (count($_contexte)) { |
|
| 1127 | - $key = key($_contexte); |
|
| 1128 | - if (is_numeric($key)) { |
|
| 1129 | - array_shift($_contexte); |
|
| 1130 | - $__modele = interprete_argument_balise(1, $p); |
|
| 1131 | - } |
|
| 1132 | - } |
|
| 1133 | - |
|
| 1134 | - if (count($_contexte)) { |
|
| 1135 | - $code_contexte = implode(',', $_contexte); |
|
| 1136 | - } else { |
|
| 1137 | - $code_contexte = ''; |
|
| 1138 | - } |
|
| 1139 | - |
|
| 1140 | - $connect = $p->boucles[$b]->sql_serveur; |
|
| 1141 | - $pas = $p->boucles[$b]->total_parties; |
|
| 1142 | - $f_pagination = chercher_filtre('pagination'); |
|
| 1143 | - $type = $p->boucles[$b]->modificateur['debut_nom']; |
|
| 1144 | - $modif = ($type[0] !== "'") ? "'debut'.$type" |
|
| 1145 | - : ("'debut" . substr($type, 1)); |
|
| 1146 | - |
|
| 1147 | - $p->code = sprintf(CODE_PAGINATION, $f_pagination, $b, $type, $modif, $pas, $liste, |
|
| 1148 | - ((isset($__modele) and $__modele) ? $__modele : "''"), _q($connect), $code_contexte); |
|
| 1149 | - |
|
| 1150 | - $p->boucles[$b]->numrows = true; |
|
| 1151 | - $p->interdire_scripts = false; |
|
| 1152 | - |
|
| 1153 | - return $p; |
|
| 1095 | + $b = index_boucle_mere($p); |
|
| 1096 | + |
|
| 1097 | + // s'il n'y a pas de nom de boucle, on ne peut pas paginer |
|
| 1098 | + if ($b === '') { |
|
| 1099 | + $msg = array( |
|
| 1100 | + 'zbug_champ_hors_boucle', |
|
| 1101 | + array('champ' => $liste ? 'PAGINATION' : 'ANCRE_PAGINATION') |
|
| 1102 | + ); |
|
| 1103 | + erreur_squelette($msg, $p); |
|
| 1104 | + |
|
| 1105 | + return $p; |
|
| 1106 | + } |
|
| 1107 | + |
|
| 1108 | + // s'il n'y a pas de mode_partie, c'est qu'on se trouve |
|
| 1109 | + // dans un boucle recursive ou qu'on a oublie le critere {pagination} |
|
| 1110 | + if (!$p->boucles[$b]->mode_partie) { |
|
| 1111 | + if (!$p->boucles[$b]->table_optionnelle) { |
|
| 1112 | + $msg = array( |
|
| 1113 | + 'zbug_pagination_sans_critere', |
|
| 1114 | + array('champ' => '#PAGINATION') |
|
| 1115 | + ); |
|
| 1116 | + erreur_squelette($msg, $p); |
|
| 1117 | + } |
|
| 1118 | + |
|
| 1119 | + return $p; |
|
| 1120 | + } |
|
| 1121 | + |
|
| 1122 | + // a priori true |
|
| 1123 | + // si false, le compilo va bloquer sur des syntaxes avec un filtre sans argument qui suit la balise |
|
| 1124 | + // si true, les arguments simples (sans truc=chose) vont degager |
|
| 1125 | + $_contexte = argumenter_inclure($p->param, true, $p, $p->boucles, $p->id_boucle, false, false); |
|
| 1126 | + if (count($_contexte)) { |
|
| 1127 | + $key = key($_contexte); |
|
| 1128 | + if (is_numeric($key)) { |
|
| 1129 | + array_shift($_contexte); |
|
| 1130 | + $__modele = interprete_argument_balise(1, $p); |
|
| 1131 | + } |
|
| 1132 | + } |
|
| 1133 | + |
|
| 1134 | + if (count($_contexte)) { |
|
| 1135 | + $code_contexte = implode(',', $_contexte); |
|
| 1136 | + } else { |
|
| 1137 | + $code_contexte = ''; |
|
| 1138 | + } |
|
| 1139 | + |
|
| 1140 | + $connect = $p->boucles[$b]->sql_serveur; |
|
| 1141 | + $pas = $p->boucles[$b]->total_parties; |
|
| 1142 | + $f_pagination = chercher_filtre('pagination'); |
|
| 1143 | + $type = $p->boucles[$b]->modificateur['debut_nom']; |
|
| 1144 | + $modif = ($type[0] !== "'") ? "'debut'.$type" |
|
| 1145 | + : ("'debut" . substr($type, 1)); |
|
| 1146 | + |
|
| 1147 | + $p->code = sprintf(CODE_PAGINATION, $f_pagination, $b, $type, $modif, $pas, $liste, |
|
| 1148 | + ((isset($__modele) and $__modele) ? $__modele : "''"), _q($connect), $code_contexte); |
|
| 1149 | + |
|
| 1150 | + $p->boucles[$b]->numrows = true; |
|
| 1151 | + $p->interdire_scripts = false; |
|
| 1152 | + |
|
| 1153 | + return $p; |
|
| 1154 | 1154 | } |
| 1155 | 1155 | |
| 1156 | 1156 | |
@@ -1177,11 +1177,11 @@ discard block |
||
| 1177 | 1177 | * Pile complétée par le code à générer |
| 1178 | 1178 | **/ |
| 1179 | 1179 | function balise_ANCRE_PAGINATION_dist($p) { |
| 1180 | - if ($f = charger_fonction('PAGINATION', 'balise', true)) { |
|
| 1181 | - return $f($p, $liste = 'false'); |
|
| 1182 | - } else { |
|
| 1183 | - return null; |
|
| 1184 | - } // ou une erreur ? |
|
| 1180 | + if ($f = charger_fonction('PAGINATION', 'balise', true)) { |
|
| 1181 | + return $f($p, $liste = 'false'); |
|
| 1182 | + } else { |
|
| 1183 | + return null; |
|
| 1184 | + } // ou une erreur ? |
|
| 1185 | 1185 | } |
| 1186 | 1186 | |
| 1187 | 1187 | |
@@ -1202,18 +1202,18 @@ discard block |
||
| 1202 | 1202 | * Pile complétée par le code à générer |
| 1203 | 1203 | **/ |
| 1204 | 1204 | function balise_GRAND_TOTAL_dist($p) { |
| 1205 | - $b = index_boucle_mere($p); |
|
| 1206 | - if ($b === '') { |
|
| 1207 | - $msg = array('zbug_champ_hors_boucle', array('champ' => zbug_presenter_champ($p))); |
|
| 1208 | - erreur_squelette($msg, $p); |
|
| 1209 | - } else { |
|
| 1210 | - $p->code = "(isset(\$Numrows['$b']['grand_total']) |
|
| 1205 | + $b = index_boucle_mere($p); |
|
| 1206 | + if ($b === '') { |
|
| 1207 | + $msg = array('zbug_champ_hors_boucle', array('champ' => zbug_presenter_champ($p))); |
|
| 1208 | + erreur_squelette($msg, $p); |
|
| 1209 | + } else { |
|
| 1210 | + $p->code = "(isset(\$Numrows['$b']['grand_total']) |
|
| 1211 | 1211 | ? \$Numrows['$b']['grand_total'] : \$Numrows['$b']['total'])"; |
| 1212 | - $p->boucles[$b]->numrows = true; |
|
| 1213 | - $p->interdire_scripts = false; |
|
| 1214 | - } |
|
| 1212 | + $p->boucles[$b]->numrows = true; |
|
| 1213 | + $p->interdire_scripts = false; |
|
| 1214 | + } |
|
| 1215 | 1215 | |
| 1216 | - return $p; |
|
| 1216 | + return $p; |
|
| 1217 | 1217 | } |
| 1218 | 1218 | |
| 1219 | 1219 | |
@@ -1241,10 +1241,10 @@ discard block |
||
| 1241 | 1241 | * Pile complétée par le code à générer |
| 1242 | 1242 | **/ |
| 1243 | 1243 | function balise_SELF_dist($p) { |
| 1244 | - $p->code = 'self()'; |
|
| 1245 | - $p->interdire_scripts = false; |
|
| 1244 | + $p->code = 'self()'; |
|
| 1245 | + $p->interdire_scripts = false; |
|
| 1246 | 1246 | |
| 1247 | - return $p; |
|
| 1247 | + return $p; |
|
| 1248 | 1248 | } |
| 1249 | 1249 | |
| 1250 | 1250 | |
@@ -1271,17 +1271,17 @@ discard block |
||
| 1271 | 1271 | * Pile complétée par le code à générer |
| 1272 | 1272 | **/ |
| 1273 | 1273 | function balise_CHEMIN_dist($p) { |
| 1274 | - $arg = interprete_argument_balise(1, $p); |
|
| 1275 | - if (!$arg) { |
|
| 1276 | - $msg = array('zbug_balise_sans_argument', array('balise' => ' CHEMIN')); |
|
| 1277 | - erreur_squelette($msg, $p); |
|
| 1278 | - } else { |
|
| 1279 | - $p->code = 'find_in_path(' . $arg . ')'; |
|
| 1280 | - } |
|
| 1274 | + $arg = interprete_argument_balise(1, $p); |
|
| 1275 | + if (!$arg) { |
|
| 1276 | + $msg = array('zbug_balise_sans_argument', array('balise' => ' CHEMIN')); |
|
| 1277 | + erreur_squelette($msg, $p); |
|
| 1278 | + } else { |
|
| 1279 | + $p->code = 'find_in_path(' . $arg . ')'; |
|
| 1280 | + } |
|
| 1281 | 1281 | |
| 1282 | - $p->interdire_scripts = false; |
|
| 1282 | + $p->interdire_scripts = false; |
|
| 1283 | 1283 | |
| 1284 | - return $p; |
|
| 1284 | + return $p; |
|
| 1285 | 1285 | } |
| 1286 | 1286 | |
| 1287 | 1287 | /** |
@@ -1306,16 +1306,16 @@ discard block |
||
| 1306 | 1306 | * Pile complétée par le code à générer |
| 1307 | 1307 | **/ |
| 1308 | 1308 | function balise_CHEMIN_IMAGE_dist($p) { |
| 1309 | - $arg = interprete_argument_balise(1, $p); |
|
| 1310 | - if (!$arg) { |
|
| 1311 | - $msg = array('zbug_balise_sans_argument', array('balise' => ' CHEMIN_IMAGE')); |
|
| 1312 | - erreur_squelette($msg, $p); |
|
| 1313 | - } else { |
|
| 1314 | - $p->code = 'chemin_image(' . $arg . ')'; |
|
| 1315 | - } |
|
| 1309 | + $arg = interprete_argument_balise(1, $p); |
|
| 1310 | + if (!$arg) { |
|
| 1311 | + $msg = array('zbug_balise_sans_argument', array('balise' => ' CHEMIN_IMAGE')); |
|
| 1312 | + erreur_squelette($msg, $p); |
|
| 1313 | + } else { |
|
| 1314 | + $p->code = 'chemin_image(' . $arg . ')'; |
|
| 1315 | + } |
|
| 1316 | 1316 | |
| 1317 | - #$p->interdire_scripts = true; |
|
| 1318 | - return $p; |
|
| 1317 | + #$p->interdire_scripts = true; |
|
| 1318 | + return $p; |
|
| 1319 | 1319 | } |
| 1320 | 1320 | |
| 1321 | 1321 | |
@@ -1353,36 +1353,36 @@ discard block |
||
| 1353 | 1353 | **/ |
| 1354 | 1354 | function balise_ENV_dist($p, $src = null) { |
| 1355 | 1355 | |
| 1356 | - // cle du tableau desiree |
|
| 1357 | - $_nom = interprete_argument_balise(1, $p); |
|
| 1358 | - // valeur par defaut |
|
| 1359 | - $_sinon = interprete_argument_balise(2, $p); |
|
| 1356 | + // cle du tableau desiree |
|
| 1357 | + $_nom = interprete_argument_balise(1, $p); |
|
| 1358 | + // valeur par defaut |
|
| 1359 | + $_sinon = interprete_argument_balise(2, $p); |
|
| 1360 | 1360 | |
| 1361 | - // $src est un tableau de donnees sources eventuellement transmis |
|
| 1362 | - // en absence, on utilise l'environnement du squelette $Pile[0] |
|
| 1361 | + // $src est un tableau de donnees sources eventuellement transmis |
|
| 1362 | + // en absence, on utilise l'environnement du squelette $Pile[0] |
|
| 1363 | 1363 | |
| 1364 | - if (!$_nom) { |
|
| 1365 | - // cas de #ENV sans argument : on retourne le serialize() du tableau |
|
| 1366 | - // une belle fonction [(#ENV|affiche_env)] serait pratique |
|
| 1367 | - if ($src) { |
|
| 1368 | - $p->code = '(is_array($a = (' . $src . ')) ? serialize($a) : "")'; |
|
| 1369 | - } else { |
|
| 1370 | - $p->code = '@serialize($Pile[0])'; |
|
| 1371 | - } |
|
| 1372 | - } else { |
|
| 1373 | - if (!$src) { |
|
| 1374 | - $src = '@$Pile[0]'; |
|
| 1375 | - } |
|
| 1376 | - if ($_sinon) { |
|
| 1377 | - $p->code = "sinon(table_valeur($src, (string)$_nom, null), $_sinon)"; |
|
| 1378 | - } else { |
|
| 1379 | - $p->code = "table_valeur($src, (string)$_nom, null)"; |
|
| 1380 | - } |
|
| 1381 | - } |
|
| 1364 | + if (!$_nom) { |
|
| 1365 | + // cas de #ENV sans argument : on retourne le serialize() du tableau |
|
| 1366 | + // une belle fonction [(#ENV|affiche_env)] serait pratique |
|
| 1367 | + if ($src) { |
|
| 1368 | + $p->code = '(is_array($a = (' . $src . ')) ? serialize($a) : "")'; |
|
| 1369 | + } else { |
|
| 1370 | + $p->code = '@serialize($Pile[0])'; |
|
| 1371 | + } |
|
| 1372 | + } else { |
|
| 1373 | + if (!$src) { |
|
| 1374 | + $src = '@$Pile[0]'; |
|
| 1375 | + } |
|
| 1376 | + if ($_sinon) { |
|
| 1377 | + $p->code = "sinon(table_valeur($src, (string)$_nom, null), $_sinon)"; |
|
| 1378 | + } else { |
|
| 1379 | + $p->code = "table_valeur($src, (string)$_nom, null)"; |
|
| 1380 | + } |
|
| 1381 | + } |
|
| 1382 | 1382 | |
| 1383 | - #$p->interdire_scripts = true; |
|
| 1383 | + #$p->interdire_scripts = true; |
|
| 1384 | 1384 | |
| 1385 | - return $p; |
|
| 1385 | + return $p; |
|
| 1386 | 1386 | } |
| 1387 | 1387 | |
| 1388 | 1388 | /** |
@@ -1412,16 +1412,16 @@ discard block |
||
| 1412 | 1412 | * Pile completée du code PHP d'exécution de la balise |
| 1413 | 1413 | */ |
| 1414 | 1414 | function balise_CONFIG_dist($p) { |
| 1415 | - if (!$arg = interprete_argument_balise(1, $p)) { |
|
| 1416 | - $arg = "''"; |
|
| 1417 | - } |
|
| 1418 | - $_sinon = interprete_argument_balise(2, $p); |
|
| 1419 | - $_unserialize = sinon(interprete_argument_balise(3, $p), "false"); |
|
| 1415 | + if (!$arg = interprete_argument_balise(1, $p)) { |
|
| 1416 | + $arg = "''"; |
|
| 1417 | + } |
|
| 1418 | + $_sinon = interprete_argument_balise(2, $p); |
|
| 1419 | + $_unserialize = sinon(interprete_argument_balise(3, $p), "false"); |
|
| 1420 | 1420 | |
| 1421 | - $p->code = '(include_spip(\'inc/config\')?lire_config(' . $arg . ',' . |
|
| 1422 | - ($_sinon && $_sinon != "''" ? $_sinon : 'null') . ',' . $_unserialize . "):'')"; |
|
| 1421 | + $p->code = '(include_spip(\'inc/config\')?lire_config(' . $arg . ',' . |
|
| 1422 | + ($_sinon && $_sinon != "''" ? $_sinon : 'null') . ',' . $_unserialize . "):'')"; |
|
| 1423 | 1423 | |
| 1424 | - return $p; |
|
| 1424 | + return $p; |
|
| 1425 | 1425 | } |
| 1426 | 1426 | |
| 1427 | 1427 | |
@@ -1444,10 +1444,10 @@ discard block |
||
| 1444 | 1444 | * Pile completée du code PHP d'exécution de la balise |
| 1445 | 1445 | */ |
| 1446 | 1446 | function balise_CONNECT_dist($p) { |
| 1447 | - $p->code = '($connect ? $connect : NULL)'; |
|
| 1448 | - $p->interdire_scripts = false; |
|
| 1447 | + $p->code = '($connect ? $connect : NULL)'; |
|
| 1448 | + $p->interdire_scripts = false; |
|
| 1449 | 1449 | |
| 1450 | - return $p; |
|
| 1450 | + return $p; |
|
| 1451 | 1451 | } |
| 1452 | 1452 | |
| 1453 | 1453 | |
@@ -1475,15 +1475,15 @@ discard block |
||
| 1475 | 1475 | * Pile completée du code PHP d'exécution de la balise |
| 1476 | 1476 | **/ |
| 1477 | 1477 | function balise_SESSION_dist($p) { |
| 1478 | - $p->descr['session'] = true; |
|
| 1478 | + $p->descr['session'] = true; |
|
| 1479 | 1479 | |
| 1480 | - $f = function_exists('balise_ENV') |
|
| 1481 | - ? 'balise_ENV' |
|
| 1482 | - : 'balise_ENV_dist'; |
|
| 1480 | + $f = function_exists('balise_ENV') |
|
| 1481 | + ? 'balise_ENV' |
|
| 1482 | + : 'balise_ENV_dist'; |
|
| 1483 | 1483 | |
| 1484 | - $p = $f($p, '$GLOBALS["visiteur_session"]'); |
|
| 1484 | + $p = $f($p, '$GLOBALS["visiteur_session"]'); |
|
| 1485 | 1485 | |
| 1486 | - return $p; |
|
| 1486 | + return $p; |
|
| 1487 | 1487 | } |
| 1488 | 1488 | |
| 1489 | 1489 | |
@@ -1506,18 +1506,18 @@ discard block |
||
| 1506 | 1506 | * Pile completée du code PHP d'exécution de la balise |
| 1507 | 1507 | **/ |
| 1508 | 1508 | function balise_SESSION_SET_dist($p) { |
| 1509 | - $_nom = interprete_argument_balise(1, $p); |
|
| 1510 | - $_val = interprete_argument_balise(2, $p); |
|
| 1511 | - if (!$_nom or !$_val) { |
|
| 1512 | - $err_b_s_a = array('zbug_balise_sans_argument', array('balise' => 'SESSION_SET')); |
|
| 1513 | - erreur_squelette($err_b_s_a, $p); |
|
| 1514 | - } else { |
|
| 1515 | - $p->code = '(include_spip("inc/session") AND session_set(' . $_nom . ',' . $_val . '))'; |
|
| 1516 | - } |
|
| 1509 | + $_nom = interprete_argument_balise(1, $p); |
|
| 1510 | + $_val = interprete_argument_balise(2, $p); |
|
| 1511 | + if (!$_nom or !$_val) { |
|
| 1512 | + $err_b_s_a = array('zbug_balise_sans_argument', array('balise' => 'SESSION_SET')); |
|
| 1513 | + erreur_squelette($err_b_s_a, $p); |
|
| 1514 | + } else { |
|
| 1515 | + $p->code = '(include_spip("inc/session") AND session_set(' . $_nom . ',' . $_val . '))'; |
|
| 1516 | + } |
|
| 1517 | 1517 | |
| 1518 | - $p->interdire_scripts = false; |
|
| 1518 | + $p->interdire_scripts = false; |
|
| 1519 | 1519 | |
| 1520 | - return $p; |
|
| 1520 | + return $p; |
|
| 1521 | 1521 | } |
| 1522 | 1522 | |
| 1523 | 1523 | |
@@ -1548,25 +1548,25 @@ discard block |
||
| 1548 | 1548 | * Pile completée du code PHP d'exécution de la balise |
| 1549 | 1549 | **/ |
| 1550 | 1550 | function balise_EVAL_dist($p) { |
| 1551 | - $php = interprete_argument_balise(1, $p); |
|
| 1552 | - if ($php) { |
|
| 1553 | - # optimisation sur les #EVAL{une expression sans #BALISE} |
|
| 1554 | - # attention au commentaire "// x signes" qui precede |
|
| 1555 | - if (preg_match(",^([[:space:]]*//[^\n]*\n)'([^']+)'$,ms", |
|
| 1556 | - $php, $r)) { |
|
| 1557 | - $p->code = /* $r[1]. */ |
|
| 1558 | - '(' . $r[2] . ')'; |
|
| 1559 | - } else { |
|
| 1560 | - $p->code = "eval('return '.$php.';')"; |
|
| 1561 | - } |
|
| 1562 | - } else { |
|
| 1563 | - $msg = array('zbug_balise_sans_argument', array('balise' => ' EVAL')); |
|
| 1564 | - erreur_squelette($msg, $p); |
|
| 1565 | - } |
|
| 1551 | + $php = interprete_argument_balise(1, $p); |
|
| 1552 | + if ($php) { |
|
| 1553 | + # optimisation sur les #EVAL{une expression sans #BALISE} |
|
| 1554 | + # attention au commentaire "// x signes" qui precede |
|
| 1555 | + if (preg_match(",^([[:space:]]*//[^\n]*\n)'([^']+)'$,ms", |
|
| 1556 | + $php, $r)) { |
|
| 1557 | + $p->code = /* $r[1]. */ |
|
| 1558 | + '(' . $r[2] . ')'; |
|
| 1559 | + } else { |
|
| 1560 | + $p->code = "eval('return '.$php.';')"; |
|
| 1561 | + } |
|
| 1562 | + } else { |
|
| 1563 | + $msg = array('zbug_balise_sans_argument', array('balise' => ' EVAL')); |
|
| 1564 | + erreur_squelette($msg, $p); |
|
| 1565 | + } |
|
| 1566 | 1566 | |
| 1567 | - #$p->interdire_scripts = true; |
|
| 1567 | + #$p->interdire_scripts = true; |
|
| 1568 | 1568 | |
| 1569 | - return $p; |
|
| 1569 | + return $p; |
|
| 1570 | 1570 | } |
| 1571 | 1571 | |
| 1572 | 1572 | |
@@ -1596,18 +1596,18 @@ discard block |
||
| 1596 | 1596 | **/ |
| 1597 | 1597 | function balise_CHAMP_SQL_dist($p) { |
| 1598 | 1598 | |
| 1599 | - if ($p->param |
|
| 1600 | - and isset($p->param[0][1][0]) |
|
| 1601 | - and $champ = ($p->param[0][1][0]->texte) |
|
| 1602 | - ) { |
|
| 1603 | - $p->code = champ_sql($champ, $p); |
|
| 1604 | - } else { |
|
| 1605 | - $err_b_s_a = array('zbug_balise_sans_argument', array('balise' => ' CHAMP_SQL')); |
|
| 1606 | - erreur_squelette($err_b_s_a, $p); |
|
| 1607 | - } |
|
| 1599 | + if ($p->param |
|
| 1600 | + and isset($p->param[0][1][0]) |
|
| 1601 | + and $champ = ($p->param[0][1][0]->texte) |
|
| 1602 | + ) { |
|
| 1603 | + $p->code = champ_sql($champ, $p); |
|
| 1604 | + } else { |
|
| 1605 | + $err_b_s_a = array('zbug_balise_sans_argument', array('balise' => ' CHAMP_SQL')); |
|
| 1606 | + erreur_squelette($err_b_s_a, $p); |
|
| 1607 | + } |
|
| 1608 | 1608 | |
| 1609 | - #$p->interdire_scripts = true; |
|
| 1610 | - return $p; |
|
| 1609 | + #$p->interdire_scripts = true; |
|
| 1610 | + return $p; |
|
| 1611 | 1611 | } |
| 1612 | 1612 | |
| 1613 | 1613 | /** |
@@ -1633,13 +1633,13 @@ discard block |
||
| 1633 | 1633 | * Pile complétée par le code à générer |
| 1634 | 1634 | **/ |
| 1635 | 1635 | function balise_VAL_dist($p) { |
| 1636 | - $p->code = interprete_argument_balise(1, $p); |
|
| 1637 | - if (!strlen($p->code)) { |
|
| 1638 | - $p->code = "''"; |
|
| 1639 | - } |
|
| 1640 | - $p->interdire_scripts = false; |
|
| 1636 | + $p->code = interprete_argument_balise(1, $p); |
|
| 1637 | + if (!strlen($p->code)) { |
|
| 1638 | + $p->code = "''"; |
|
| 1639 | + } |
|
| 1640 | + $p->interdire_scripts = false; |
|
| 1641 | 1641 | |
| 1642 | - return $p; |
|
| 1642 | + return $p; |
|
| 1643 | 1643 | } |
| 1644 | 1644 | |
| 1645 | 1645 | /** |
@@ -1685,10 +1685,10 @@ discard block |
||
| 1685 | 1685 | * Pile complétée par le code à générer |
| 1686 | 1686 | **/ |
| 1687 | 1687 | function balise_REM_dist($p) { |
| 1688 | - $p->code = "''"; |
|
| 1689 | - $p->interdire_scripts = false; |
|
| 1688 | + $p->code = "''"; |
|
| 1689 | + $p->interdire_scripts = false; |
|
| 1690 | 1690 | |
| 1691 | - return $p; |
|
| 1691 | + return $p; |
|
| 1692 | 1692 | } |
| 1693 | 1693 | |
| 1694 | 1694 | |
@@ -1712,18 +1712,18 @@ discard block |
||
| 1712 | 1712 | **/ |
| 1713 | 1713 | function balise_HTTP_HEADER_dist($p) { |
| 1714 | 1714 | |
| 1715 | - $header = interprete_argument_balise(1, $p); |
|
| 1716 | - if (!$header) { |
|
| 1717 | - $err_b_s_a = array('zbug_balise_sans_argument', array('balise' => 'HTTP_HEADER')); |
|
| 1718 | - erreur_squelette($err_b_s_a, $p); |
|
| 1719 | - } else { |
|
| 1720 | - $p->code = "'<'.'?php header(' . _q(" |
|
| 1721 | - . $header |
|
| 1722 | - . ") . '); ?'.'>'"; |
|
| 1723 | - } |
|
| 1724 | - $p->interdire_scripts = false; |
|
| 1715 | + $header = interprete_argument_balise(1, $p); |
|
| 1716 | + if (!$header) { |
|
| 1717 | + $err_b_s_a = array('zbug_balise_sans_argument', array('balise' => 'HTTP_HEADER')); |
|
| 1718 | + erreur_squelette($err_b_s_a, $p); |
|
| 1719 | + } else { |
|
| 1720 | + $p->code = "'<'.'?php header(' . _q(" |
|
| 1721 | + . $header |
|
| 1722 | + . ") . '); ?'.'>'"; |
|
| 1723 | + } |
|
| 1724 | + $p->interdire_scripts = false; |
|
| 1725 | 1725 | |
| 1726 | - return $p; |
|
| 1726 | + return $p; |
|
| 1727 | 1727 | } |
| 1728 | 1728 | |
| 1729 | 1729 | |
@@ -1748,20 +1748,20 @@ discard block |
||
| 1748 | 1748 | * Pile complétée par le code à générer |
| 1749 | 1749 | **/ |
| 1750 | 1750 | function balise_FILTRE_dist($p) { |
| 1751 | - if ($p->param) { |
|
| 1752 | - $args = array(); |
|
| 1753 | - foreach ($p->param as $i => $ignore) { |
|
| 1754 | - $args[] = interprete_argument_balise($i + 1, $p); |
|
| 1755 | - } |
|
| 1756 | - $p->code = "'<' . '" |
|
| 1757 | - . '?php header("X-Spip-Filtre: \'.' |
|
| 1758 | - . join('.\'|\'.', $args) |
|
| 1759 | - . " . '\"); ?'.'>'"; |
|
| 1751 | + if ($p->param) { |
|
| 1752 | + $args = array(); |
|
| 1753 | + foreach ($p->param as $i => $ignore) { |
|
| 1754 | + $args[] = interprete_argument_balise($i + 1, $p); |
|
| 1755 | + } |
|
| 1756 | + $p->code = "'<' . '" |
|
| 1757 | + . '?php header("X-Spip-Filtre: \'.' |
|
| 1758 | + . join('.\'|\'.', $args) |
|
| 1759 | + . " . '\"); ?'.'>'"; |
|
| 1760 | 1760 | |
| 1761 | - $p->interdire_scripts = false; |
|
| 1761 | + $p->interdire_scripts = false; |
|
| 1762 | 1762 | |
| 1763 | - return $p; |
|
| 1764 | - } |
|
| 1763 | + return $p; |
|
| 1764 | + } |
|
| 1765 | 1765 | } |
| 1766 | 1766 | |
| 1767 | 1767 | |
@@ -1797,53 +1797,53 @@ discard block |
||
| 1797 | 1797 | **/ |
| 1798 | 1798 | function balise_CACHE_dist($p) { |
| 1799 | 1799 | |
| 1800 | - if ($p->param) { |
|
| 1801 | - $duree = valeur_numerique($p->param[0][1][0]->texte); |
|
| 1802 | - |
|
| 1803 | - // noter la duree du cache dans un entete proprietaire |
|
| 1804 | - |
|
| 1805 | - $code = "'<'.'" . '?php header("X-Spip-Cache: ' |
|
| 1806 | - . $duree |
|
| 1807 | - . '"); ?' . "'.'>'"; |
|
| 1808 | - |
|
| 1809 | - // Remplir le header Cache-Control |
|
| 1810 | - // cas #CACHE{0} |
|
| 1811 | - if ($duree == 0) { |
|
| 1812 | - $code .= ".'<'.'" |
|
| 1813 | - . '?php header("Cache-Control: no-cache, must-revalidate"); ?' |
|
| 1814 | - . "'.'><'.'" |
|
| 1815 | - . '?php header("Pragma: no-cache"); ?' |
|
| 1816 | - . "'.'>'"; |
|
| 1817 | - } |
|
| 1818 | - |
|
| 1819 | - // recuperer les parametres suivants |
|
| 1820 | - $i = 1; |
|
| 1821 | - while (isset($p->param[0][++$i])) { |
|
| 1822 | - $pa = ($p->param[0][$i][0]->texte); |
|
| 1823 | - |
|
| 1824 | - if ($pa == 'cache-client' |
|
| 1825 | - and $duree > 0 |
|
| 1826 | - ) { |
|
| 1827 | - $code .= ".'<'.'" . '?php header("Cache-Control: max-age=' |
|
| 1828 | - . $duree |
|
| 1829 | - . '"); ?' . "'.'>'"; |
|
| 1830 | - // il semble logique, si on cache-client, de ne pas invalider |
|
| 1831 | - $pa = 'statique'; |
|
| 1832 | - } |
|
| 1833 | - |
|
| 1834 | - if ($pa == 'statique' |
|
| 1835 | - and $duree > 0 |
|
| 1836 | - ) { |
|
| 1837 | - $code .= ".'<'.'" . '?php header("X-Spip-Statique: oui"); ?' . "'.'>'"; |
|
| 1838 | - } |
|
| 1839 | - } |
|
| 1840 | - } else { |
|
| 1841 | - $code = "''"; |
|
| 1842 | - } |
|
| 1843 | - $p->code = $code; |
|
| 1844 | - $p->interdire_scripts = false; |
|
| 1845 | - |
|
| 1846 | - return $p; |
|
| 1800 | + if ($p->param) { |
|
| 1801 | + $duree = valeur_numerique($p->param[0][1][0]->texte); |
|
| 1802 | + |
|
| 1803 | + // noter la duree du cache dans un entete proprietaire |
|
| 1804 | + |
|
| 1805 | + $code = "'<'.'" . '?php header("X-Spip-Cache: ' |
|
| 1806 | + . $duree |
|
| 1807 | + . '"); ?' . "'.'>'"; |
|
| 1808 | + |
|
| 1809 | + // Remplir le header Cache-Control |
|
| 1810 | + // cas #CACHE{0} |
|
| 1811 | + if ($duree == 0) { |
|
| 1812 | + $code .= ".'<'.'" |
|
| 1813 | + . '?php header("Cache-Control: no-cache, must-revalidate"); ?' |
|
| 1814 | + . "'.'><'.'" |
|
| 1815 | + . '?php header("Pragma: no-cache"); ?' |
|
| 1816 | + . "'.'>'"; |
|
| 1817 | + } |
|
| 1818 | + |
|
| 1819 | + // recuperer les parametres suivants |
|
| 1820 | + $i = 1; |
|
| 1821 | + while (isset($p->param[0][++$i])) { |
|
| 1822 | + $pa = ($p->param[0][$i][0]->texte); |
|
| 1823 | + |
|
| 1824 | + if ($pa == 'cache-client' |
|
| 1825 | + and $duree > 0 |
|
| 1826 | + ) { |
|
| 1827 | + $code .= ".'<'.'" . '?php header("Cache-Control: max-age=' |
|
| 1828 | + . $duree |
|
| 1829 | + . '"); ?' . "'.'>'"; |
|
| 1830 | + // il semble logique, si on cache-client, de ne pas invalider |
|
| 1831 | + $pa = 'statique'; |
|
| 1832 | + } |
|
| 1833 | + |
|
| 1834 | + if ($pa == 'statique' |
|
| 1835 | + and $duree > 0 |
|
| 1836 | + ) { |
|
| 1837 | + $code .= ".'<'.'" . '?php header("X-Spip-Statique: oui"); ?' . "'.'>'"; |
|
| 1838 | + } |
|
| 1839 | + } |
|
| 1840 | + } else { |
|
| 1841 | + $code = "''"; |
|
| 1842 | + } |
|
| 1843 | + $p->code = $code; |
|
| 1844 | + $p->interdire_scripts = false; |
|
| 1845 | + |
|
| 1846 | + return $p; |
|
| 1847 | 1847 | } |
| 1848 | 1848 | |
| 1849 | 1849 | |
@@ -1875,13 +1875,13 @@ discard block |
||
| 1875 | 1875 | * Pile complétée par le code à générer |
| 1876 | 1876 | */ |
| 1877 | 1877 | function balise_INSERT_HEAD_dist($p) { |
| 1878 | - $p->code = "'<'.'" |
|
| 1879 | - . '?php header("X-Spip-Filtre: insert_head_css_conditionnel"); ?' |
|
| 1880 | - . "'.'>'"; |
|
| 1881 | - $p->code .= ". pipeline('insert_head','<!-- insert_head -->')"; |
|
| 1882 | - $p->interdire_scripts = false; |
|
| 1878 | + $p->code = "'<'.'" |
|
| 1879 | + . '?php header("X-Spip-Filtre: insert_head_css_conditionnel"); ?' |
|
| 1880 | + . "'.'>'"; |
|
| 1881 | + $p->code .= ". pipeline('insert_head','<!-- insert_head -->')"; |
|
| 1882 | + $p->interdire_scripts = false; |
|
| 1883 | 1883 | |
| 1884 | - return $p; |
|
| 1884 | + return $p; |
|
| 1885 | 1885 | } |
| 1886 | 1886 | |
| 1887 | 1887 | /** |
@@ -1899,10 +1899,10 @@ discard block |
||
| 1899 | 1899 | * Pile complétée par le code à générer |
| 1900 | 1900 | */ |
| 1901 | 1901 | function balise_INSERT_HEAD_CSS_dist($p) { |
| 1902 | - $p->code = "pipeline('insert_head_css','<!-- insert_head_css -->')"; |
|
| 1903 | - $p->interdire_scripts = false; |
|
| 1902 | + $p->code = "pipeline('insert_head_css','<!-- insert_head_css -->')"; |
|
| 1903 | + $p->interdire_scripts = false; |
|
| 1904 | 1904 | |
| 1905 | - return $p; |
|
| 1905 | + return $p; |
|
| 1906 | 1906 | } |
| 1907 | 1907 | |
| 1908 | 1908 | /** |
@@ -1917,11 +1917,11 @@ discard block |
||
| 1917 | 1917 | * Pile complétée par le code à générer |
| 1918 | 1918 | **/ |
| 1919 | 1919 | function balise_INCLUDE_dist($p) { |
| 1920 | - if (function_exists('balise_INCLURE')) { |
|
| 1921 | - return balise_INCLURE($p); |
|
| 1922 | - } else { |
|
| 1923 | - return balise_INCLURE_dist($p); |
|
| 1924 | - } |
|
| 1920 | + if (function_exists('balise_INCLURE')) { |
|
| 1921 | + return balise_INCLURE($p); |
|
| 1922 | + } else { |
|
| 1923 | + return balise_INCLURE_dist($p); |
|
| 1924 | + } |
|
| 1925 | 1925 | } |
| 1926 | 1926 | |
| 1927 | 1927 | /** |
@@ -1955,68 +1955,68 @@ discard block |
||
| 1955 | 1955 | * Pile complétée par le code à générer |
| 1956 | 1956 | **/ |
| 1957 | 1957 | function balise_INCLURE_dist($p) { |
| 1958 | - $id_boucle = $p->id_boucle; |
|
| 1959 | - // la lang n'est pas passe de facon automatique par argumenter |
|
| 1960 | - // mais le sera pas recuperer_fond, sauf si etoile=>true est passe |
|
| 1961 | - // en option |
|
| 1962 | - |
|
| 1963 | - $_contexte = argumenter_inclure($p->param, true, $p, $p->boucles, $id_boucle, false, false); |
|
| 1964 | - |
|
| 1965 | - // erreur de syntaxe = fond absent |
|
| 1966 | - // (2 messages d'erreur SPIP pour le prix d'un, mais pas d'erreur PHP |
|
| 1967 | - if (!$_contexte) { |
|
| 1968 | - $contexte = array(); |
|
| 1969 | - } |
|
| 1970 | - |
|
| 1971 | - if (isset($_contexte['fond'])) { |
|
| 1972 | - |
|
| 1973 | - $f = $_contexte['fond']; |
|
| 1974 | - // toujours vrai : |
|
| 1975 | - if (preg_match('/^.fond.\s*=>(.*)$/s', $f, $r)) { |
|
| 1976 | - $f = $r[1]; |
|
| 1977 | - unset($_contexte['fond']); |
|
| 1978 | - } else { |
|
| 1979 | - spip_log("compilation de #INCLURE a revoir"); |
|
| 1980 | - } |
|
| 1981 | - |
|
| 1982 | - // #INCLURE{doublons} |
|
| 1983 | - if (isset($_contexte['doublons'])) { |
|
| 1984 | - $_contexte['doublons'] = "'doublons' => \$doublons"; |
|
| 1985 | - } |
|
| 1986 | - |
|
| 1987 | - // Critere d'inclusion {env} (et {self} pour compatibilite ascendante) |
|
| 1988 | - $flag_env = false; |
|
| 1989 | - if (isset($_contexte['env']) or isset($_contexte['self'])) { |
|
| 1990 | - $flag_env = true; |
|
| 1991 | - unset($_contexte['env']); |
|
| 1992 | - } |
|
| 1993 | - |
|
| 1994 | - $_options = array(); |
|
| 1995 | - if (isset($_contexte['ajax'])) { |
|
| 1996 | - $_options[] = preg_replace(",=>(.*)$,ims", '=> ($v=(\\1))?$v:true', $_contexte['ajax']); |
|
| 1997 | - unset($_contexte['ajax']); |
|
| 1998 | - } |
|
| 1999 | - if ($p->etoile) { |
|
| 2000 | - $_options[] = "'etoile'=>true"; |
|
| 2001 | - } |
|
| 2002 | - $_options[] = "'compil'=>array(" . memoriser_contexte_compil($p) . ")"; |
|
| 2003 | - |
|
| 2004 | - $_l = 'array(' . join(",\n\t", $_contexte) . ')'; |
|
| 2005 | - if ($flag_env) { |
|
| 2006 | - $_l = "array_merge(\$Pile[0],$_l)"; |
|
| 2007 | - } |
|
| 2008 | - |
|
| 2009 | - $p->code = sprintf(CODE_RECUPERER_FOND, $f, $_l, join(',', $_options), "_request('connect')"); |
|
| 2010 | - |
|
| 2011 | - } elseif (!isset($_contexte[1])) { |
|
| 2012 | - $msg = array('zbug_balise_sans_argument', array('balise' => ' INCLURE')); |
|
| 2013 | - erreur_squelette($msg, $p); |
|
| 2014 | - } else { |
|
| 2015 | - $p->code = 'charge_scripts(' . $_contexte[1] . ',false)'; |
|
| 2016 | - } |
|
| 2017 | - |
|
| 2018 | - $p->interdire_scripts = false; // la securite est assuree par recuperer_fond |
|
| 2019 | - return $p; |
|
| 1958 | + $id_boucle = $p->id_boucle; |
|
| 1959 | + // la lang n'est pas passe de facon automatique par argumenter |
|
| 1960 | + // mais le sera pas recuperer_fond, sauf si etoile=>true est passe |
|
| 1961 | + // en option |
|
| 1962 | + |
|
| 1963 | + $_contexte = argumenter_inclure($p->param, true, $p, $p->boucles, $id_boucle, false, false); |
|
| 1964 | + |
|
| 1965 | + // erreur de syntaxe = fond absent |
|
| 1966 | + // (2 messages d'erreur SPIP pour le prix d'un, mais pas d'erreur PHP |
|
| 1967 | + if (!$_contexte) { |
|
| 1968 | + $contexte = array(); |
|
| 1969 | + } |
|
| 1970 | + |
|
| 1971 | + if (isset($_contexte['fond'])) { |
|
| 1972 | + |
|
| 1973 | + $f = $_contexte['fond']; |
|
| 1974 | + // toujours vrai : |
|
| 1975 | + if (preg_match('/^.fond.\s*=>(.*)$/s', $f, $r)) { |
|
| 1976 | + $f = $r[1]; |
|
| 1977 | + unset($_contexte['fond']); |
|
| 1978 | + } else { |
|
| 1979 | + spip_log("compilation de #INCLURE a revoir"); |
|
| 1980 | + } |
|
| 1981 | + |
|
| 1982 | + // #INCLURE{doublons} |
|
| 1983 | + if (isset($_contexte['doublons'])) { |
|
| 1984 | + $_contexte['doublons'] = "'doublons' => \$doublons"; |
|
| 1985 | + } |
|
| 1986 | + |
|
| 1987 | + // Critere d'inclusion {env} (et {self} pour compatibilite ascendante) |
|
| 1988 | + $flag_env = false; |
|
| 1989 | + if (isset($_contexte['env']) or isset($_contexte['self'])) { |
|
| 1990 | + $flag_env = true; |
|
| 1991 | + unset($_contexte['env']); |
|
| 1992 | + } |
|
| 1993 | + |
|
| 1994 | + $_options = array(); |
|
| 1995 | + if (isset($_contexte['ajax'])) { |
|
| 1996 | + $_options[] = preg_replace(",=>(.*)$,ims", '=> ($v=(\\1))?$v:true', $_contexte['ajax']); |
|
| 1997 | + unset($_contexte['ajax']); |
|
| 1998 | + } |
|
| 1999 | + if ($p->etoile) { |
|
| 2000 | + $_options[] = "'etoile'=>true"; |
|
| 2001 | + } |
|
| 2002 | + $_options[] = "'compil'=>array(" . memoriser_contexte_compil($p) . ")"; |
|
| 2003 | + |
|
| 2004 | + $_l = 'array(' . join(",\n\t", $_contexte) . ')'; |
|
| 2005 | + if ($flag_env) { |
|
| 2006 | + $_l = "array_merge(\$Pile[0],$_l)"; |
|
| 2007 | + } |
|
| 2008 | + |
|
| 2009 | + $p->code = sprintf(CODE_RECUPERER_FOND, $f, $_l, join(',', $_options), "_request('connect')"); |
|
| 2010 | + |
|
| 2011 | + } elseif (!isset($_contexte[1])) { |
|
| 2012 | + $msg = array('zbug_balise_sans_argument', array('balise' => ' INCLURE')); |
|
| 2013 | + erreur_squelette($msg, $p); |
|
| 2014 | + } else { |
|
| 2015 | + $p->code = 'charge_scripts(' . $_contexte[1] . ',false)'; |
|
| 2016 | + } |
|
| 2017 | + |
|
| 2018 | + $p->interdire_scripts = false; // la securite est assuree par recuperer_fond |
|
| 2019 | + return $p; |
|
| 2020 | 2020 | } |
| 2021 | 2021 | |
| 2022 | 2022 | |
@@ -2044,69 +2044,69 @@ discard block |
||
| 2044 | 2044 | **/ |
| 2045 | 2045 | function balise_MODELE_dist($p) { |
| 2046 | 2046 | |
| 2047 | - $_contexte = argumenter_inclure($p->param, true, $p, $p->boucles, $p->id_boucle, false); |
|
| 2048 | - |
|
| 2049 | - // erreur de syntaxe = fond absent |
|
| 2050 | - // (2 messages d'erreur SPIP pour le prix d'un, mais pas d'erreur PHP |
|
| 2051 | - if (!$_contexte) { |
|
| 2052 | - $_contexte = array(); |
|
| 2053 | - } |
|
| 2054 | - |
|
| 2055 | - if (!isset($_contexte[1])) { |
|
| 2056 | - $msg = array('zbug_balise_sans_argument', array('balise' => ' MODELE')); |
|
| 2057 | - erreur_squelette($msg, $p); |
|
| 2058 | - } else { |
|
| 2059 | - $nom = $_contexte[1]; |
|
| 2060 | - unset($_contexte[1]); |
|
| 2061 | - |
|
| 2062 | - if (preg_match("/^\s*'[^']*'/s", $nom)) { |
|
| 2063 | - $nom = "'modeles/" . substr($nom, 1); |
|
| 2064 | - } else { |
|
| 2065 | - $nom = "'modeles/' . $nom"; |
|
| 2066 | - } |
|
| 2067 | - |
|
| 2068 | - $flag_env = false; |
|
| 2069 | - if (isset($_contexte['env'])) { |
|
| 2070 | - $flag_env = true; |
|
| 2071 | - unset($_contexte['env']); |
|
| 2072 | - } |
|
| 2073 | - |
|
| 2074 | - // Incoherence dans la syntaxe du contexte. A revoir. |
|
| 2075 | - // Reserver la cle primaire de la boucle courante si elle existe |
|
| 2076 | - if (isset($p->boucles[$p->id_boucle]->primary)) { |
|
| 2077 | - $primary = $p->boucles[$p->id_boucle]->primary; |
|
| 2078 | - if (!strpos($primary, ',')) { |
|
| 2079 | - $id = champ_sql($primary, $p); |
|
| 2080 | - $_contexte[] = "'$primary'=>" . $id; |
|
| 2081 | - $_contexte[] = "'id'=>" . $id; |
|
| 2082 | - } |
|
| 2083 | - } |
|
| 2084 | - $_contexte[] = "'recurs'=>(++\$recurs)"; |
|
| 2085 | - $connect = ''; |
|
| 2086 | - if (isset($p->boucles[$p->id_boucle])) { |
|
| 2087 | - $connect = $p->boucles[$p->id_boucle]->sql_serveur; |
|
| 2088 | - } |
|
| 2089 | - |
|
| 2090 | - $_options = memoriser_contexte_compil($p); |
|
| 2091 | - $_options = "'compil'=>array($_options), 'trim'=>true"; |
|
| 2092 | - if (isset($_contexte['ajax'])) { |
|
| 2093 | - $_options .= ", " . preg_replace(",=>(.*)$,ims", '=> ($v=(\\1))?$v:true', $_contexte['ajax']); |
|
| 2094 | - unset($_contexte['ajax']); |
|
| 2095 | - } |
|
| 2096 | - |
|
| 2097 | - $_l = 'array(' . join(",\n\t", $_contexte) . ')'; |
|
| 2098 | - if ($flag_env) { |
|
| 2099 | - $_l = "array_merge(\$Pile[0],$_l)"; |
|
| 2100 | - } |
|
| 2101 | - |
|
| 2102 | - $page = sprintf(CODE_RECUPERER_FOND, $nom, $_l, $_options, _q($connect)); |
|
| 2103 | - |
|
| 2104 | - $p->code = "\n\t(((\$recurs=(isset(\$Pile[0]['recurs'])?\$Pile[0]['recurs']:0))>=5)? '' :\n\t$page)\n"; |
|
| 2105 | - |
|
| 2106 | - $p->interdire_scripts = false; // securite assuree par le squelette |
|
| 2107 | - } |
|
| 2108 | - |
|
| 2109 | - return $p; |
|
| 2047 | + $_contexte = argumenter_inclure($p->param, true, $p, $p->boucles, $p->id_boucle, false); |
|
| 2048 | + |
|
| 2049 | + // erreur de syntaxe = fond absent |
|
| 2050 | + // (2 messages d'erreur SPIP pour le prix d'un, mais pas d'erreur PHP |
|
| 2051 | + if (!$_contexte) { |
|
| 2052 | + $_contexte = array(); |
|
| 2053 | + } |
|
| 2054 | + |
|
| 2055 | + if (!isset($_contexte[1])) { |
|
| 2056 | + $msg = array('zbug_balise_sans_argument', array('balise' => ' MODELE')); |
|
| 2057 | + erreur_squelette($msg, $p); |
|
| 2058 | + } else { |
|
| 2059 | + $nom = $_contexte[1]; |
|
| 2060 | + unset($_contexte[1]); |
|
| 2061 | + |
|
| 2062 | + if (preg_match("/^\s*'[^']*'/s", $nom)) { |
|
| 2063 | + $nom = "'modeles/" . substr($nom, 1); |
|
| 2064 | + } else { |
|
| 2065 | + $nom = "'modeles/' . $nom"; |
|
| 2066 | + } |
|
| 2067 | + |
|
| 2068 | + $flag_env = false; |
|
| 2069 | + if (isset($_contexte['env'])) { |
|
| 2070 | + $flag_env = true; |
|
| 2071 | + unset($_contexte['env']); |
|
| 2072 | + } |
|
| 2073 | + |
|
| 2074 | + // Incoherence dans la syntaxe du contexte. A revoir. |
|
| 2075 | + // Reserver la cle primaire de la boucle courante si elle existe |
|
| 2076 | + if (isset($p->boucles[$p->id_boucle]->primary)) { |
|
| 2077 | + $primary = $p->boucles[$p->id_boucle]->primary; |
|
| 2078 | + if (!strpos($primary, ',')) { |
|
| 2079 | + $id = champ_sql($primary, $p); |
|
| 2080 | + $_contexte[] = "'$primary'=>" . $id; |
|
| 2081 | + $_contexte[] = "'id'=>" . $id; |
|
| 2082 | + } |
|
| 2083 | + } |
|
| 2084 | + $_contexte[] = "'recurs'=>(++\$recurs)"; |
|
| 2085 | + $connect = ''; |
|
| 2086 | + if (isset($p->boucles[$p->id_boucle])) { |
|
| 2087 | + $connect = $p->boucles[$p->id_boucle]->sql_serveur; |
|
| 2088 | + } |
|
| 2089 | + |
|
| 2090 | + $_options = memoriser_contexte_compil($p); |
|
| 2091 | + $_options = "'compil'=>array($_options), 'trim'=>true"; |
|
| 2092 | + if (isset($_contexte['ajax'])) { |
|
| 2093 | + $_options .= ", " . preg_replace(",=>(.*)$,ims", '=> ($v=(\\1))?$v:true', $_contexte['ajax']); |
|
| 2094 | + unset($_contexte['ajax']); |
|
| 2095 | + } |
|
| 2096 | + |
|
| 2097 | + $_l = 'array(' . join(",\n\t", $_contexte) . ')'; |
|
| 2098 | + if ($flag_env) { |
|
| 2099 | + $_l = "array_merge(\$Pile[0],$_l)"; |
|
| 2100 | + } |
|
| 2101 | + |
|
| 2102 | + $page = sprintf(CODE_RECUPERER_FOND, $nom, $_l, $_options, _q($connect)); |
|
| 2103 | + |
|
| 2104 | + $p->code = "\n\t(((\$recurs=(isset(\$Pile[0]['recurs'])?\$Pile[0]['recurs']:0))>=5)? '' :\n\t$page)\n"; |
|
| 2105 | + |
|
| 2106 | + $p->interdire_scripts = false; // securite assuree par le squelette |
|
| 2107 | + } |
|
| 2108 | + |
|
| 2109 | + return $p; |
|
| 2110 | 2110 | } |
| 2111 | 2111 | |
| 2112 | 2112 | |
@@ -2130,21 +2130,21 @@ discard block |
||
| 2130 | 2130 | * Pile complétée par le code à générer |
| 2131 | 2131 | **/ |
| 2132 | 2132 | function balise_SET_dist($p) { |
| 2133 | - $_nom = interprete_argument_balise(1, $p); |
|
| 2134 | - $_val = interprete_argument_balise(2, $p); |
|
| 2133 | + $_nom = interprete_argument_balise(1, $p); |
|
| 2134 | + $_val = interprete_argument_balise(2, $p); |
|
| 2135 | 2135 | |
| 2136 | - if (!$_nom or !$_val) { |
|
| 2137 | - $err_b_s_a = array('zbug_balise_sans_argument', array('balise' => 'SET')); |
|
| 2138 | - erreur_squelette($err_b_s_a, $p); |
|
| 2139 | - } |
|
| 2140 | - // affectation $_zzz inutile, mais permet de contourner un bug OpCode cache sous PHP 5.5.4 |
|
| 2141 | - // cf https://bugs.php.net/bug.php?id=65845 |
|
| 2142 | - else { |
|
| 2143 | - $p->code = "vide(\$Pile['vars'][\$_zzz=(string)$_nom] = $_val)"; |
|
| 2144 | - } |
|
| 2136 | + if (!$_nom or !$_val) { |
|
| 2137 | + $err_b_s_a = array('zbug_balise_sans_argument', array('balise' => 'SET')); |
|
| 2138 | + erreur_squelette($err_b_s_a, $p); |
|
| 2139 | + } |
|
| 2140 | + // affectation $_zzz inutile, mais permet de contourner un bug OpCode cache sous PHP 5.5.4 |
|
| 2141 | + // cf https://bugs.php.net/bug.php?id=65845 |
|
| 2142 | + else { |
|
| 2143 | + $p->code = "vide(\$Pile['vars'][\$_zzz=(string)$_nom] = $_val)"; |
|
| 2144 | + } |
|
| 2145 | 2145 | |
| 2146 | - $p->interdire_scripts = false; // la balise ne renvoie rien |
|
| 2147 | - return $p; |
|
| 2146 | + $p->interdire_scripts = false; // la balise ne renvoie rien |
|
| 2147 | + return $p; |
|
| 2148 | 2148 | } |
| 2149 | 2149 | |
| 2150 | 2150 | |
@@ -2174,12 +2174,12 @@ discard block |
||
| 2174 | 2174 | * Pile complétée par le code à générer |
| 2175 | 2175 | **/ |
| 2176 | 2176 | function balise_GET_dist($p) { |
| 2177 | - $p->interdire_scripts = false; // le contenu vient de #SET, donc il est de confiance |
|
| 2178 | - if (function_exists('balise_ENV')) { |
|
| 2179 | - return balise_ENV($p, '$Pile["vars"]'); |
|
| 2180 | - } else { |
|
| 2181 | - return balise_ENV_dist($p, '$Pile["vars"]'); |
|
| 2182 | - } |
|
| 2177 | + $p->interdire_scripts = false; // le contenu vient de #SET, donc il est de confiance |
|
| 2178 | + if (function_exists('balise_ENV')) { |
|
| 2179 | + return balise_ENV($p, '$Pile["vars"]'); |
|
| 2180 | + } else { |
|
| 2181 | + return balise_ENV_dist($p, '$Pile["vars"]'); |
|
| 2182 | + } |
|
| 2183 | 2183 | } |
| 2184 | 2184 | |
| 2185 | 2185 | |
@@ -2202,22 +2202,22 @@ discard block |
||
| 2202 | 2202 | * Pile complétée par le code à générer |
| 2203 | 2203 | **/ |
| 2204 | 2204 | function balise_DOUBLONS_dist($p) { |
| 2205 | - if ($type = interprete_argument_balise(1, $p)) { |
|
| 2206 | - if ($famille = interprete_argument_balise(2, $p)) { |
|
| 2207 | - $type .= '.' . $famille; |
|
| 2208 | - } |
|
| 2209 | - $p->code = '(isset($doublons[' . $type . ']) ? $doublons[' . $type . '] : "")'; |
|
| 2210 | - if (!$p->etoile) { |
|
| 2211 | - $p->code = 'array_filter(array_map("intval",explode(",",' |
|
| 2212 | - . $p->code . ')))'; |
|
| 2213 | - } |
|
| 2214 | - } else { |
|
| 2215 | - $p->code = '$doublons'; |
|
| 2216 | - } |
|
| 2205 | + if ($type = interprete_argument_balise(1, $p)) { |
|
| 2206 | + if ($famille = interprete_argument_balise(2, $p)) { |
|
| 2207 | + $type .= '.' . $famille; |
|
| 2208 | + } |
|
| 2209 | + $p->code = '(isset($doublons[' . $type . ']) ? $doublons[' . $type . '] : "")'; |
|
| 2210 | + if (!$p->etoile) { |
|
| 2211 | + $p->code = 'array_filter(array_map("intval",explode(",",' |
|
| 2212 | + . $p->code . ')))'; |
|
| 2213 | + } |
|
| 2214 | + } else { |
|
| 2215 | + $p->code = '$doublons'; |
|
| 2216 | + } |
|
| 2217 | 2217 | |
| 2218 | - $p->interdire_scripts = false; |
|
| 2218 | + $p->interdire_scripts = false; |
|
| 2219 | 2219 | |
| 2220 | - return $p; |
|
| 2220 | + return $p; |
|
| 2221 | 2221 | } |
| 2222 | 2222 | |
| 2223 | 2223 | |
@@ -2240,18 +2240,18 @@ discard block |
||
| 2240 | 2240 | * Pile complétée par le code à générer |
| 2241 | 2241 | **/ |
| 2242 | 2242 | function balise_PIPELINE_dist($p) { |
| 2243 | - $_pipe = interprete_argument_balise(1, $p); |
|
| 2244 | - if (!$_pipe) { |
|
| 2245 | - $err_b_s_a = array('zbug_balise_sans_argument', array('balise' => 'PIPELINE')); |
|
| 2246 | - erreur_squelette($err_b_s_a, $p); |
|
| 2247 | - } else { |
|
| 2248 | - $_flux = interprete_argument_balise(2, $p); |
|
| 2249 | - $_flux = $_flux ? $_flux : "''"; |
|
| 2250 | - $p->code = "pipeline( $_pipe , $_flux )"; |
|
| 2251 | - $p->interdire_scripts = false; |
|
| 2252 | - } |
|
| 2243 | + $_pipe = interprete_argument_balise(1, $p); |
|
| 2244 | + if (!$_pipe) { |
|
| 2245 | + $err_b_s_a = array('zbug_balise_sans_argument', array('balise' => 'PIPELINE')); |
|
| 2246 | + erreur_squelette($err_b_s_a, $p); |
|
| 2247 | + } else { |
|
| 2248 | + $_flux = interprete_argument_balise(2, $p); |
|
| 2249 | + $_flux = $_flux ? $_flux : "''"; |
|
| 2250 | + $p->code = "pipeline( $_pipe , $_flux )"; |
|
| 2251 | + $p->interdire_scripts = false; |
|
| 2252 | + } |
|
| 2253 | 2253 | |
| 2254 | - return $p; |
|
| 2254 | + return $p; |
|
| 2255 | 2255 | } |
| 2256 | 2256 | |
| 2257 | 2257 | |
@@ -2276,10 +2276,10 @@ discard block |
||
| 2276 | 2276 | * Pile complétée par le code à générer |
| 2277 | 2277 | **/ |
| 2278 | 2278 | function balise_EDIT_dist($p) { |
| 2279 | - $p->code = "''"; |
|
| 2280 | - $p->interdire_scripts = false; |
|
| 2279 | + $p->code = "''"; |
|
| 2280 | + $p->interdire_scripts = false; |
|
| 2281 | 2281 | |
| 2282 | - return $p; |
|
| 2282 | + return $p; |
|
| 2283 | 2283 | } |
| 2284 | 2284 | |
| 2285 | 2285 | |
@@ -2302,11 +2302,11 @@ discard block |
||
| 2302 | 2302 | * Pile complétée par le code à générer |
| 2303 | 2303 | **/ |
| 2304 | 2304 | function balise_TOTAL_UNIQUE_dist($p) { |
| 2305 | - $_famille = interprete_argument_balise(1, $p); |
|
| 2306 | - $_famille = $_famille ? $_famille : "''"; |
|
| 2307 | - $p->code = "unique('', $_famille, true)"; |
|
| 2305 | + $_famille = interprete_argument_balise(1, $p); |
|
| 2306 | + $_famille = $_famille ? $_famille : "''"; |
|
| 2307 | + $p->code = "unique('', $_famille, true)"; |
|
| 2308 | 2308 | |
| 2309 | - return $p; |
|
| 2309 | + return $p; |
|
| 2310 | 2310 | } |
| 2311 | 2311 | |
| 2312 | 2312 | /** |
@@ -2329,19 +2329,19 @@ discard block |
||
| 2329 | 2329 | * Pile complétée par le code à générer |
| 2330 | 2330 | **/ |
| 2331 | 2331 | function balise_ARRAY_dist($p) { |
| 2332 | - $_code = array(); |
|
| 2333 | - $n = 1; |
|
| 2334 | - do { |
|
| 2335 | - $_key = interprete_argument_balise($n++, $p); |
|
| 2336 | - $_val = interprete_argument_balise($n++, $p); |
|
| 2337 | - if ($_key and $_val) { |
|
| 2338 | - $_code[] = "$_key => $_val"; |
|
| 2339 | - } |
|
| 2340 | - } while ($_key && $_val); |
|
| 2341 | - $p->code = 'array(' . join(', ', $_code) . ')'; |
|
| 2342 | - $p->interdire_scripts = false; |
|
| 2332 | + $_code = array(); |
|
| 2333 | + $n = 1; |
|
| 2334 | + do { |
|
| 2335 | + $_key = interprete_argument_balise($n++, $p); |
|
| 2336 | + $_val = interprete_argument_balise($n++, $p); |
|
| 2337 | + if ($_key and $_val) { |
|
| 2338 | + $_code[] = "$_key => $_val"; |
|
| 2339 | + } |
|
| 2340 | + } while ($_key && $_val); |
|
| 2341 | + $p->code = 'array(' . join(', ', $_code) . ')'; |
|
| 2342 | + $p->interdire_scripts = false; |
|
| 2343 | 2343 | |
| 2344 | - return $p; |
|
| 2344 | + return $p; |
|
| 2345 | 2345 | } |
| 2346 | 2346 | |
| 2347 | 2347 | /** |
@@ -2360,15 +2360,15 @@ discard block |
||
| 2360 | 2360 | * Pile complétée par le code à générer |
| 2361 | 2361 | */ |
| 2362 | 2362 | function balise_LISTE_dist($p) { |
| 2363 | - $_code = array(); |
|
| 2364 | - $n = 1; |
|
| 2365 | - while ($_val = interprete_argument_balise($n++, $p)) { |
|
| 2366 | - $_code[] = $_val; |
|
| 2367 | - } |
|
| 2368 | - $p->code = 'array(' . join(', ', $_code) . ')'; |
|
| 2369 | - $p->interdire_scripts = false; |
|
| 2363 | + $_code = array(); |
|
| 2364 | + $n = 1; |
|
| 2365 | + while ($_val = interprete_argument_balise($n++, $p)) { |
|
| 2366 | + $_code[] = $_val; |
|
| 2367 | + } |
|
| 2368 | + $p->code = 'array(' . join(', ', $_code) . ')'; |
|
| 2369 | + $p->interdire_scripts = false; |
|
| 2370 | 2370 | |
| 2371 | - return $p; |
|
| 2371 | + return $p; |
|
| 2372 | 2372 | } |
| 2373 | 2373 | |
| 2374 | 2374 | |
@@ -2402,19 +2402,19 @@ discard block |
||
| 2402 | 2402 | * Pile complétée par le code à générer |
| 2403 | 2403 | **/ |
| 2404 | 2404 | function balise_AUTORISER_dist($p) { |
| 2405 | - $_code = array(); |
|
| 2406 | - $p->descr['session'] = true; // faire un cache par session |
|
| 2405 | + $_code = array(); |
|
| 2406 | + $p->descr['session'] = true; // faire un cache par session |
|
| 2407 | 2407 | |
| 2408 | - $n = 1; |
|
| 2409 | - while ($_v = interprete_argument_balise($n++, $p)) { |
|
| 2410 | - $_code[] = $_v; |
|
| 2411 | - } |
|
| 2408 | + $n = 1; |
|
| 2409 | + while ($_v = interprete_argument_balise($n++, $p)) { |
|
| 2410 | + $_code[] = $_v; |
|
| 2411 | + } |
|
| 2412 | 2412 | |
| 2413 | - $p->code = '((function_exists("autoriser")||include_spip("inc/autoriser"))&&autoriser(' . join(', ', |
|
| 2414 | - $_code) . ')?" ":"")'; |
|
| 2415 | - $p->interdire_scripts = false; |
|
| 2413 | + $p->code = '((function_exists("autoriser")||include_spip("inc/autoriser"))&&autoriser(' . join(', ', |
|
| 2414 | + $_code) . ')?" ":"")'; |
|
| 2415 | + $p->interdire_scripts = false; |
|
| 2416 | 2416 | |
| 2417 | - return $p; |
|
| 2417 | + return $p; |
|
| 2418 | 2418 | } |
| 2419 | 2419 | |
| 2420 | 2420 | |
@@ -2438,15 +2438,15 @@ discard block |
||
| 2438 | 2438 | * Pile complétée par le code à générer |
| 2439 | 2439 | **/ |
| 2440 | 2440 | function balise_PLUGIN_dist($p) { |
| 2441 | - $plugin = interprete_argument_balise(1, $p); |
|
| 2442 | - $plugin = isset($plugin) ? str_replace('\'', '"', $plugin) : '""'; |
|
| 2443 | - $type_info = interprete_argument_balise(2, $p); |
|
| 2444 | - $type_info = isset($type_info) ? str_replace('\'', '"', $type_info) : '"est_actif"'; |
|
| 2441 | + $plugin = interprete_argument_balise(1, $p); |
|
| 2442 | + $plugin = isset($plugin) ? str_replace('\'', '"', $plugin) : '""'; |
|
| 2443 | + $type_info = interprete_argument_balise(2, $p); |
|
| 2444 | + $type_info = isset($type_info) ? str_replace('\'', '"', $type_info) : '"est_actif"'; |
|
| 2445 | 2445 | |
| 2446 | - $f = chercher_filtre('info_plugin'); |
|
| 2447 | - $p->code = $f . '(' . $plugin . ', ' . $type_info . ')'; |
|
| 2446 | + $f = chercher_filtre('info_plugin'); |
|
| 2447 | + $p->code = $f . '(' . $plugin . ', ' . $type_info . ')'; |
|
| 2448 | 2448 | |
| 2449 | - return $p; |
|
| 2449 | + return $p; |
|
| 2450 | 2450 | } |
| 2451 | 2451 | |
| 2452 | 2452 | /** |
@@ -2467,11 +2467,11 @@ discard block |
||
| 2467 | 2467 | * Pile complétée par le code à générer |
| 2468 | 2468 | **/ |
| 2469 | 2469 | function balise_AIDER_dist($p) { |
| 2470 | - $_motif = interprete_argument_balise(1, $p); |
|
| 2471 | - $s = "'" . addslashes($p->descr['sourcefile']) . "'"; |
|
| 2472 | - $p->code = "((\$aider=charger_fonction('aide','inc',true))?\$aider($_motif,$s, \$Pile[0]):'')"; |
|
| 2470 | + $_motif = interprete_argument_balise(1, $p); |
|
| 2471 | + $s = "'" . addslashes($p->descr['sourcefile']) . "'"; |
|
| 2472 | + $p->code = "((\$aider=charger_fonction('aide','inc',true))?\$aider($_motif,$s, \$Pile[0]):'')"; |
|
| 2473 | 2473 | |
| 2474 | - return $p; |
|
| 2474 | + return $p; |
|
| 2475 | 2475 | } |
| 2476 | 2476 | |
| 2477 | 2477 | /** |
@@ -2497,16 +2497,16 @@ discard block |
||
| 2497 | 2497 | * Pile complétée par le code à générer |
| 2498 | 2498 | **/ |
| 2499 | 2499 | function balise_ACTION_FORMULAIRE($p) { |
| 2500 | - if (!$_url = interprete_argument_balise(1, $p)) { |
|
| 2501 | - $_url = "@\$Pile[0]['action']"; |
|
| 2502 | - } |
|
| 2503 | - if (!$_form = interprete_argument_balise(2, $p)) { |
|
| 2504 | - $_form = "@\$Pile[0]['form']"; |
|
| 2505 | - } |
|
| 2506 | - |
|
| 2507 | - // envoyer le nom du formulaire que l'on traite |
|
| 2508 | - // transmettre les eventuels args de la balise formulaire |
|
| 2509 | - $p->code = " '<div>' . |
|
| 2500 | + if (!$_url = interprete_argument_balise(1, $p)) { |
|
| 2501 | + $_url = "@\$Pile[0]['action']"; |
|
| 2502 | + } |
|
| 2503 | + if (!$_form = interprete_argument_balise(2, $p)) { |
|
| 2504 | + $_form = "@\$Pile[0]['form']"; |
|
| 2505 | + } |
|
| 2506 | + |
|
| 2507 | + // envoyer le nom du formulaire que l'on traite |
|
| 2508 | + // transmettre les eventuels args de la balise formulaire |
|
| 2509 | + $p->code = " '<div>' . |
|
| 2510 | 2510 | form_hidden($_url) . |
| 2511 | 2511 | '<input name=\'formulaire_action\' type=\'hidden\' |
| 2512 | 2512 | value=\'' . $_form . '\' />' . |
@@ -2515,9 +2515,9 @@ discard block |
||
| 2515 | 2515 | (!empty(\$Pile[0]['_hidden']) ? @\$Pile[0]['_hidden'] : '') . |
| 2516 | 2516 | '</div>'"; |
| 2517 | 2517 | |
| 2518 | - $p->interdire_scripts = false; |
|
| 2518 | + $p->interdire_scripts = false; |
|
| 2519 | 2519 | |
| 2520 | - return $p; |
|
| 2520 | + return $p; |
|
| 2521 | 2521 | } |
| 2522 | 2522 | |
| 2523 | 2523 | |
@@ -2547,25 +2547,25 @@ discard block |
||
| 2547 | 2547 | */ |
| 2548 | 2548 | function balise_BOUTON_ACTION_dist($p) { |
| 2549 | 2549 | |
| 2550 | - $args = array(); |
|
| 2551 | - for ($k = 1; $k <= 6; $k++) { |
|
| 2552 | - $_a = interprete_argument_balise($k, $p); |
|
| 2553 | - if (!$_a) { |
|
| 2554 | - $_a = "''"; |
|
| 2555 | - } |
|
| 2556 | - $args[] = $_a; |
|
| 2557 | - } |
|
| 2558 | - // supprimer les args vides |
|
| 2559 | - while (end($args) == "''" and count($args) > 2) { |
|
| 2560 | - array_pop($args); |
|
| 2561 | - } |
|
| 2562 | - $args = implode(",", $args); |
|
| 2550 | + $args = array(); |
|
| 2551 | + for ($k = 1; $k <= 6; $k++) { |
|
| 2552 | + $_a = interprete_argument_balise($k, $p); |
|
| 2553 | + if (!$_a) { |
|
| 2554 | + $_a = "''"; |
|
| 2555 | + } |
|
| 2556 | + $args[] = $_a; |
|
| 2557 | + } |
|
| 2558 | + // supprimer les args vides |
|
| 2559 | + while (end($args) == "''" and count($args) > 2) { |
|
| 2560 | + array_pop($args); |
|
| 2561 | + } |
|
| 2562 | + $args = implode(",", $args); |
|
| 2563 | 2563 | |
| 2564 | - $bouton_action = chercher_filtre("bouton_action"); |
|
| 2565 | - $p->code = "$bouton_action($args)"; |
|
| 2566 | - $p->interdire_scripts = false; |
|
| 2564 | + $bouton_action = chercher_filtre("bouton_action"); |
|
| 2565 | + $p->code = "$bouton_action($args)"; |
|
| 2566 | + $p->interdire_scripts = false; |
|
| 2567 | 2567 | |
| 2568 | - return $p; |
|
| 2568 | + return $p; |
|
| 2569 | 2569 | } |
| 2570 | 2570 | |
| 2571 | 2571 | |
@@ -2584,10 +2584,10 @@ discard block |
||
| 2584 | 2584 | * Pile complétée par le code à générer |
| 2585 | 2585 | */ |
| 2586 | 2586 | function balise_SLOGAN_SITE_SPIP_dist($p) { |
| 2587 | - $p->code = "\$GLOBALS['meta']['slogan_site']"; |
|
| 2587 | + $p->code = "\$GLOBALS['meta']['slogan_site']"; |
|
| 2588 | 2588 | |
| 2589 | - #$p->interdire_scripts = true; |
|
| 2590 | - return $p; |
|
| 2589 | + #$p->interdire_scripts = true; |
|
| 2590 | + return $p; |
|
| 2591 | 2591 | } |
| 2592 | 2592 | |
| 2593 | 2593 | |
@@ -2611,10 +2611,10 @@ discard block |
||
| 2611 | 2611 | * Pile complétée par le code à générer |
| 2612 | 2612 | */ |
| 2613 | 2613 | function balise_HTML5_dist($p) { |
| 2614 | - $p->code = html5_permis() ? "' '" : "''"; |
|
| 2615 | - $p->interdire_scripts = false; |
|
| 2614 | + $p->code = html5_permis() ? "' '" : "''"; |
|
| 2615 | + $p->interdire_scripts = false; |
|
| 2616 | 2616 | |
| 2617 | - return $p; |
|
| 2617 | + return $p; |
|
| 2618 | 2618 | } |
| 2619 | 2619 | |
| 2620 | 2620 | |
@@ -2640,61 +2640,61 @@ discard block |
||
| 2640 | 2640 | * Pile complétée par le code à générer |
| 2641 | 2641 | */ |
| 2642 | 2642 | function balise_TRI_dist($p, $liste = 'true') { |
| 2643 | - $b = index_boucle_mere($p); |
|
| 2644 | - // s'il n'y a pas de nom de boucle, on ne peut pas trier |
|
| 2645 | - if ($b === '') { |
|
| 2646 | - $msg = array('zbug_champ_hors_boucle', array('champ' => zbug_presenter_champ($p))); |
|
| 2647 | - erreur_squelette($msg, $p); |
|
| 2648 | - $p->code = "''"; |
|
| 2643 | + $b = index_boucle_mere($p); |
|
| 2644 | + // s'il n'y a pas de nom de boucle, on ne peut pas trier |
|
| 2645 | + if ($b === '') { |
|
| 2646 | + $msg = array('zbug_champ_hors_boucle', array('champ' => zbug_presenter_champ($p))); |
|
| 2647 | + erreur_squelette($msg, $p); |
|
| 2648 | + $p->code = "''"; |
|
| 2649 | 2649 | |
| 2650 | - return $p; |
|
| 2651 | - } |
|
| 2652 | - $boucle = $p->boucles[$b]; |
|
| 2650 | + return $p; |
|
| 2651 | + } |
|
| 2652 | + $boucle = $p->boucles[$b]; |
|
| 2653 | 2653 | |
| 2654 | - // s'il n'y a pas de tri_champ, c'est qu'on se trouve |
|
| 2655 | - // dans un boucle recursive ou qu'on a oublie le critere {tri} |
|
| 2656 | - if (!isset($boucle->modificateur['tri_champ'])) { |
|
| 2657 | - $msg = array('zbug_champ_hors_critere', array( |
|
| 2658 | - 'champ' => zbug_presenter_champ($p), |
|
| 2659 | - 'critere' => 'tri' |
|
| 2660 | - )); |
|
| 2661 | - erreur_squelette($msg, $p); |
|
| 2662 | - $p->code = "''"; |
|
| 2654 | + // s'il n'y a pas de tri_champ, c'est qu'on se trouve |
|
| 2655 | + // dans un boucle recursive ou qu'on a oublie le critere {tri} |
|
| 2656 | + if (!isset($boucle->modificateur['tri_champ'])) { |
|
| 2657 | + $msg = array('zbug_champ_hors_critere', array( |
|
| 2658 | + 'champ' => zbug_presenter_champ($p), |
|
| 2659 | + 'critere' => 'tri' |
|
| 2660 | + )); |
|
| 2661 | + erreur_squelette($msg, $p); |
|
| 2662 | + $p->code = "''"; |
|
| 2663 | 2663 | |
| 2664 | - return $p; |
|
| 2665 | - } |
|
| 2664 | + return $p; |
|
| 2665 | + } |
|
| 2666 | 2666 | |
| 2667 | - $_champ = interprete_argument_balise(1, $p); |
|
| 2668 | - // si pas de champ, renvoyer le critere de tri utilise |
|
| 2669 | - if (!$_champ) { |
|
| 2670 | - $p->code = $boucle->modificateur['tri_champ']; |
|
| 2667 | + $_champ = interprete_argument_balise(1, $p); |
|
| 2668 | + // si pas de champ, renvoyer le critere de tri utilise |
|
| 2669 | + if (!$_champ) { |
|
| 2670 | + $p->code = $boucle->modificateur['tri_champ']; |
|
| 2671 | 2671 | |
| 2672 | - return $p; |
|
| 2673 | - } |
|
| 2674 | - // forcer la jointure si besoin, et si le champ est statique |
|
| 2675 | - if (preg_match(",^'([\w.]+)'$,i", $_champ, $m)) { |
|
| 2676 | - index_pile($b, $m[1], $p->boucles, '', null, true, false); |
|
| 2677 | - } |
|
| 2672 | + return $p; |
|
| 2673 | + } |
|
| 2674 | + // forcer la jointure si besoin, et si le champ est statique |
|
| 2675 | + if (preg_match(",^'([\w.]+)'$,i", $_champ, $m)) { |
|
| 2676 | + index_pile($b, $m[1], $p->boucles, '', null, true, false); |
|
| 2677 | + } |
|
| 2678 | 2678 | |
| 2679 | - $_libelle = interprete_argument_balise(2, $p); |
|
| 2680 | - $_libelle = $_libelle ? $_libelle : $_champ; |
|
| 2679 | + $_libelle = interprete_argument_balise(2, $p); |
|
| 2680 | + $_libelle = $_libelle ? $_libelle : $_champ; |
|
| 2681 | 2681 | |
| 2682 | - $_class = interprete_argument_balise(3, $p); |
|
| 2683 | - // si champ = ">" c'est un lien vers le tri croissant : de gauche a droite ==> 1 |
|
| 2684 | - // si champ = "<" c'est un lien vers le tri decroissant : (sens inverse) == -1 |
|
| 2685 | - $_issens = "in_array($_champ,array('>','<'))"; |
|
| 2686 | - $_sens = "(strpos('< >',$_champ)-1)"; |
|
| 2682 | + $_class = interprete_argument_balise(3, $p); |
|
| 2683 | + // si champ = ">" c'est un lien vers le tri croissant : de gauche a droite ==> 1 |
|
| 2684 | + // si champ = "<" c'est un lien vers le tri decroissant : (sens inverse) == -1 |
|
| 2685 | + $_issens = "in_array($_champ,array('>','<'))"; |
|
| 2686 | + $_sens = "(strpos('< >',$_champ)-1)"; |
|
| 2687 | 2687 | |
| 2688 | - $_variable = "((\$s=$_issens)?'sens':'tri')." . $boucle->modificateur['tri_nom']; |
|
| 2689 | - $_url = "parametre_url(self(),$_variable,\$s?$_sens:$_champ)"; |
|
| 2690 | - $_url = "parametre_url($_url,'var_memotri',strncmp(" . $boucle->modificateur['tri_nom'] . ",'session',7)==0?$_variable:'')"; |
|
| 2691 | - $_on = "\$s?(" . $boucle->modificateur['tri_sens'] . "==$_sens" . '):(' . $boucle->modificateur['tri_champ'] . "==$_champ)"; |
|
| 2688 | + $_variable = "((\$s=$_issens)?'sens':'tri')." . $boucle->modificateur['tri_nom']; |
|
| 2689 | + $_url = "parametre_url(self(),$_variable,\$s?$_sens:$_champ)"; |
|
| 2690 | + $_url = "parametre_url($_url,'var_memotri',strncmp(" . $boucle->modificateur['tri_nom'] . ",'session',7)==0?$_variable:'')"; |
|
| 2691 | + $_on = "\$s?(" . $boucle->modificateur['tri_sens'] . "==$_sens" . '):(' . $boucle->modificateur['tri_champ'] . "==$_champ)"; |
|
| 2692 | 2692 | |
| 2693 | - $p->code = "lien_ou_expose($_url,$_libelle,$_on" . ($_class ? ",$_class" : "") . ")"; |
|
| 2694 | - //$p->code = "''"; |
|
| 2695 | - $p->interdire_scripts = false; |
|
| 2693 | + $p->code = "lien_ou_expose($_url,$_libelle,$_on" . ($_class ? ",$_class" : "") . ")"; |
|
| 2694 | + //$p->code = "''"; |
|
| 2695 | + $p->interdire_scripts = false; |
|
| 2696 | 2696 | |
| 2697 | - return $p; |
|
| 2697 | + return $p; |
|
| 2698 | 2698 | } |
| 2699 | 2699 | |
| 2700 | 2700 | |
@@ -2715,22 +2715,22 @@ discard block |
||
| 2715 | 2715 | * Pile complétée par le code à générer |
| 2716 | 2716 | */ |
| 2717 | 2717 | function balise_SAUTER_dist($p) { |
| 2718 | - $id_boucle = $p->id_boucle; |
|
| 2718 | + $id_boucle = $p->id_boucle; |
|
| 2719 | 2719 | |
| 2720 | - if (empty($p->boucles[$id_boucle])) { |
|
| 2721 | - $msg = array('zbug_champ_hors_boucle', array('champ' => '#SAUTER')); |
|
| 2722 | - erreur_squelette($msg, $p); |
|
| 2723 | - } else { |
|
| 2724 | - $boucle = $p->boucles[$id_boucle]; |
|
| 2725 | - $_saut = interprete_argument_balise(1, $p); |
|
| 2726 | - $_compteur = "\$Numrows['$id_boucle']['compteur_boucle']"; |
|
| 2727 | - $_total = "\$Numrows['$id_boucle']['total']"; |
|
| 2720 | + if (empty($p->boucles[$id_boucle])) { |
|
| 2721 | + $msg = array('zbug_champ_hors_boucle', array('champ' => '#SAUTER')); |
|
| 2722 | + erreur_squelette($msg, $p); |
|
| 2723 | + } else { |
|
| 2724 | + $boucle = $p->boucles[$id_boucle]; |
|
| 2725 | + $_saut = interprete_argument_balise(1, $p); |
|
| 2726 | + $_compteur = "\$Numrows['$id_boucle']['compteur_boucle']"; |
|
| 2727 | + $_total = "\$Numrows['$id_boucle']['total']"; |
|
| 2728 | 2728 | |
| 2729 | - $p->code = "vide($_compteur=\$iter->skip($_saut,$_total))"; |
|
| 2730 | - } |
|
| 2731 | - $p->interdire_scripts = false; |
|
| 2729 | + $p->code = "vide($_compteur=\$iter->skip($_saut,$_total))"; |
|
| 2730 | + } |
|
| 2731 | + $p->interdire_scripts = false; |
|
| 2732 | 2732 | |
| 2733 | - return $p; |
|
| 2733 | + return $p; |
|
| 2734 | 2734 | } |
| 2735 | 2735 | |
| 2736 | 2736 | |
@@ -2752,22 +2752,22 @@ discard block |
||
| 2752 | 2752 | * Pile complétée par le code à générer |
| 2753 | 2753 | */ |
| 2754 | 2754 | function balise_PUBLIE_dist($p) { |
| 2755 | - if (!$_type = interprete_argument_balise(1, $p)) { |
|
| 2756 | - $_type = _q($p->type_requete); |
|
| 2757 | - $_id = champ_sql($p->boucles[$p->id_boucle]->primary, $p); |
|
| 2758 | - } else { |
|
| 2759 | - $_id = interprete_argument_balise(2, $p); |
|
| 2760 | - } |
|
| 2755 | + if (!$_type = interprete_argument_balise(1, $p)) { |
|
| 2756 | + $_type = _q($p->type_requete); |
|
| 2757 | + $_id = champ_sql($p->boucles[$p->id_boucle]->primary, $p); |
|
| 2758 | + } else { |
|
| 2759 | + $_id = interprete_argument_balise(2, $p); |
|
| 2760 | + } |
|
| 2761 | 2761 | |
| 2762 | - $connect = ''; |
|
| 2763 | - if (isset($p->boucles[$p->id_boucle])) { |
|
| 2764 | - $connect = $p->boucles[$p->id_boucle]->sql_serveur; |
|
| 2765 | - } |
|
| 2762 | + $connect = ''; |
|
| 2763 | + if (isset($p->boucles[$p->id_boucle])) { |
|
| 2764 | + $connect = $p->boucles[$p->id_boucle]->sql_serveur; |
|
| 2765 | + } |
|
| 2766 | 2766 | |
| 2767 | - $p->code = "(objet_test_si_publie(" . $_type . ",intval(" . $_id . ")," . _q($connect) . ")?' ':'')"; |
|
| 2768 | - $p->interdire_scripts = false; |
|
| 2767 | + $p->code = "(objet_test_si_publie(" . $_type . ",intval(" . $_id . ")," . _q($connect) . ")?' ':'')"; |
|
| 2768 | + $p->interdire_scripts = false; |
|
| 2769 | 2769 | |
| 2770 | - return $p; |
|
| 2770 | + return $p; |
|
| 2771 | 2771 | } |
| 2772 | 2772 | |
| 2773 | 2773 | /** |
@@ -2796,12 +2796,12 @@ discard block |
||
| 2796 | 2796 | * Pile complétée par le code à générer |
| 2797 | 2797 | */ |
| 2798 | 2798 | function balise_PRODUIRE_dist($p) { |
| 2799 | - $balise_inclure = charger_fonction('INCLURE', 'balise'); |
|
| 2800 | - $p = $balise_inclure($p); |
|
| 2799 | + $balise_inclure = charger_fonction('INCLURE', 'balise'); |
|
| 2800 | + $p = $balise_inclure($p); |
|
| 2801 | 2801 | |
| 2802 | - $p->code = str_replace('recuperer_fond(', 'produire_fond_statique(', $p->code); |
|
| 2802 | + $p->code = str_replace('recuperer_fond(', 'produire_fond_statique(', $p->code); |
|
| 2803 | 2803 | |
| 2804 | - return $p; |
|
| 2804 | + return $p; |
|
| 2805 | 2805 | } |
| 2806 | 2806 | |
| 2807 | 2807 | /** |
@@ -2820,13 +2820,13 @@ discard block |
||
| 2820 | 2820 | * Pile complétée par le code à générer |
| 2821 | 2821 | */ |
| 2822 | 2822 | function balise_LARGEUR_ECRAN_dist($p) { |
| 2823 | - $_class = interprete_argument_balise(1, $p); |
|
| 2824 | - if (!$_class) { |
|
| 2825 | - $_class = 'null'; |
|
| 2826 | - } |
|
| 2827 | - $p->code = "(is_string($_class)?vide(\$GLOBALS['largeur_ecran']=$_class):(isset(\$GLOBALS['largeur_ecran'])?\$GLOBALS['largeur_ecran']:''))"; |
|
| 2823 | + $_class = interprete_argument_balise(1, $p); |
|
| 2824 | + if (!$_class) { |
|
| 2825 | + $_class = 'null'; |
|
| 2826 | + } |
|
| 2827 | + $p->code = "(is_string($_class)?vide(\$GLOBALS['largeur_ecran']=$_class):(isset(\$GLOBALS['largeur_ecran'])?\$GLOBALS['largeur_ecran']:''))"; |
|
| 2828 | 2828 | |
| 2829 | - return $p; |
|
| 2829 | + return $p; |
|
| 2830 | 2830 | } |
| 2831 | 2831 | |
| 2832 | 2832 | |
@@ -2842,14 +2842,14 @@ discard block |
||
| 2842 | 2842 | * Pile complétée par le code à générer |
| 2843 | 2843 | **/ |
| 2844 | 2844 | function balise_CONST_dist($p) { |
| 2845 | - $_const = interprete_argument_balise(1, $p); |
|
| 2846 | - if (!strlen($_const)) { |
|
| 2847 | - $p->code = "''"; |
|
| 2848 | - } |
|
| 2849 | - else { |
|
| 2850 | - $p->code = "(defined($_const)?constant($_const):'')"; |
|
| 2851 | - } |
|
| 2852 | - $p->interdire_scripts = false; |
|
| 2853 | - |
|
| 2854 | - return $p; |
|
| 2845 | + $_const = interprete_argument_balise(1, $p); |
|
| 2846 | + if (!strlen($_const)) { |
|
| 2847 | + $p->code = "''"; |
|
| 2848 | + } |
|
| 2849 | + else { |
|
| 2850 | + $p->code = "(defined($_const)?constant($_const):'')"; |
|
| 2851 | + } |
|
| 2852 | + $p->interdire_scripts = false; |
|
| 2853 | + |
|
| 2854 | + return $p; |
|
| 2855 | 2855 | } |
@@ -363,7 +363,7 @@ discard block |
||
| 363 | 363 | */ |
| 364 | 364 | function balise_DOSSIER_SQUELETTE_dist($p) { |
| 365 | 365 | $code = substr(addslashes(dirname($p->descr['sourcefile'])), strlen(_DIR_RACINE)); |
| 366 | - $p->code = "_DIR_RACINE . '$code'" . |
|
| 366 | + $p->code = "_DIR_RACINE . '$code'". |
|
| 367 | 367 | $p->interdire_scripts = false; |
| 368 | 368 | |
| 369 | 369 | return $p; |
@@ -382,7 +382,7 @@ discard block |
||
| 382 | 382 | */ |
| 383 | 383 | function balise_SQUELETTE_dist($p) { |
| 384 | 384 | $code = addslashes($p->descr['sourcefile']); |
| 385 | - $p->code = "'$code'" . |
|
| 385 | + $p->code = "'$code'". |
|
| 386 | 386 | $p->interdire_scripts = false; |
| 387 | 387 | |
| 388 | 388 | return $p; |
@@ -434,9 +434,9 @@ discard block |
||
| 434 | 434 | **/ |
| 435 | 435 | function balise_NOM_SITE_dist($p) { |
| 436 | 436 | if (!$p->etoile) { |
| 437 | - $p->code = "supprimer_numero(calculer_url(" . |
|
| 438 | - champ_sql('url_site', $p) . "," . |
|
| 439 | - champ_sql('nom_site', $p) . |
|
| 437 | + $p->code = "supprimer_numero(calculer_url(". |
|
| 438 | + champ_sql('url_site', $p).",". |
|
| 439 | + champ_sql('nom_site', $p). |
|
| 440 | 440 | ", 'titre', \$connect, false))"; |
| 441 | 441 | } else { |
| 442 | 442 | $p->code = champ_sql('nom_site', $p); |
@@ -587,8 +587,8 @@ discard block |
||
| 587 | 587 | * Pile complétée par le code à générer |
| 588 | 588 | **/ |
| 589 | 589 | function balise_POPULARITE_ABSOLUE_dist($p) { |
| 590 | - $p->code = 'ceil(' . |
|
| 591 | - champ_sql('popularite', $p) . |
|
| 590 | + $p->code = 'ceil('. |
|
| 591 | + champ_sql('popularite', $p). |
|
| 592 | 592 | ')'; |
| 593 | 593 | $p->interdire_scripts = false; |
| 594 | 594 | |
@@ -666,9 +666,9 @@ discard block |
||
| 666 | 666 | **/ |
| 667 | 667 | function balise_VALEUR_dist($p) { |
| 668 | 668 | $b = $p->nom_boucle ? $p->nom_boucle : $p->id_boucle; |
| 669 | - $p->code = index_pile($p->id_boucle, 'valeur', $p->boucles, $b);; |
|
| 669 | + $p->code = index_pile($p->id_boucle, 'valeur', $p->boucles, $b); ; |
|
| 670 | 670 | if (($v = interprete_argument_balise(1, $p)) !== null) { |
| 671 | - $p->code = 'table_valeur(' . $p->code . ', ' . $v . ')'; |
|
| 671 | + $p->code = 'table_valeur('.$p->code.', '.$v.')'; |
|
| 672 | 672 | } |
| 673 | 673 | $p->interdire_scripts = true; |
| 674 | 674 | |
@@ -824,8 +824,8 @@ discard block |
||
| 824 | 824 | $_suite = 'null'; |
| 825 | 825 | $_longueur = $longueur_defaut; |
| 826 | 826 | if (($v = interprete_argument_balise(1, $p)) !== null) { |
| 827 | - $_longueur = 'is_numeric(' . $v . ')?intval(' . $v . '):' . $longueur_defaut; |
|
| 828 | - $_suite = '!is_numeric(' . $v . ')?' . $v . ':null'; |
|
| 827 | + $_longueur = 'is_numeric('.$v.')?intval('.$v.'):'.$longueur_defaut; |
|
| 828 | + $_suite = '!is_numeric('.$v.')?'.$v.':null'; |
|
| 829 | 829 | } |
| 830 | 830 | if (($v2 = interprete_argument_balise(2, $p)) !== null) { |
| 831 | 831 | $_suite = $v2; |
@@ -913,10 +913,10 @@ discard block |
||
| 913 | 913 | $c = memoriser_contexte_compil($p); |
| 914 | 914 | |
| 915 | 915 | $p->code = sprintf(CODE_RECUPERER_FOND, "'modeles/lesauteurs'", |
| 916 | - "array('objet'=>'" . $objet . |
|
| 917 | - "','id_objet' => " . champ_sql($id_table_objet, $p) . |
|
| 918 | - ",'$id_table_objet' => " . champ_sql($id_table_objet, $p) . |
|
| 919 | - ($objet == 'article' ? "" : ",'id_article' => " . champ_sql('id_article', $p)) . |
|
| 916 | + "array('objet'=>'".$objet. |
|
| 917 | + "','id_objet' => ".champ_sql($id_table_objet, $p). |
|
| 918 | + ",'$id_table_objet' => ".champ_sql($id_table_objet, $p). |
|
| 919 | + ($objet == 'article' ? "" : ",'id_article' => ".champ_sql('id_article', $p)). |
|
| 920 | 920 | ")", |
| 921 | 921 | "'trim'=>true, 'compil'=>array($c)", |
| 922 | 922 | _q($connect)); |
@@ -984,7 +984,7 @@ discard block |
||
| 984 | 984 | $m = trim($m); |
| 985 | 985 | if ($m != "''") { |
| 986 | 986 | if (!preg_match(",\W,", $m)) { |
| 987 | - $m = $boucle->id_table . ".$m"; |
|
| 987 | + $m = $boucle->id_table.".$m"; |
|
| 988 | 988 | } |
| 989 | 989 | |
| 990 | 990 | $m .= " AS titre_rang"; |
@@ -1008,8 +1008,8 @@ discard block |
||
| 1008 | 1008 | $_primary = champ_sql($id_table_objet, $p, '', false); |
| 1009 | 1009 | $_env = '$Pile[0]'; |
| 1010 | 1010 | |
| 1011 | - if (!$_titre) {$_titre = "''";} |
|
| 1012 | - if (!$_primary) {$_primary = "''";} |
|
| 1011 | + if (!$_titre) {$_titre = "''"; } |
|
| 1012 | + if (!$_primary) {$_primary = "''"; } |
|
| 1013 | 1013 | $_rang = "calculer_rang_smart($_titre, '$objet', $_primary, $_env)"; |
| 1014 | 1014 | |
| 1015 | 1015 | } |
@@ -1142,7 +1142,7 @@ discard block |
||
| 1142 | 1142 | $f_pagination = chercher_filtre('pagination'); |
| 1143 | 1143 | $type = $p->boucles[$b]->modificateur['debut_nom']; |
| 1144 | 1144 | $modif = ($type[0] !== "'") ? "'debut'.$type" |
| 1145 | - : ("'debut" . substr($type, 1)); |
|
| 1145 | + : ("'debut".substr($type, 1)); |
|
| 1146 | 1146 | |
| 1147 | 1147 | $p->code = sprintf(CODE_PAGINATION, $f_pagination, $b, $type, $modif, $pas, $liste, |
| 1148 | 1148 | ((isset($__modele) and $__modele) ? $__modele : "''"), _q($connect), $code_contexte); |
@@ -1276,7 +1276,7 @@ discard block |
||
| 1276 | 1276 | $msg = array('zbug_balise_sans_argument', array('balise' => ' CHEMIN')); |
| 1277 | 1277 | erreur_squelette($msg, $p); |
| 1278 | 1278 | } else { |
| 1279 | - $p->code = 'find_in_path(' . $arg . ')'; |
|
| 1279 | + $p->code = 'find_in_path('.$arg.')'; |
|
| 1280 | 1280 | } |
| 1281 | 1281 | |
| 1282 | 1282 | $p->interdire_scripts = false; |
@@ -1311,7 +1311,7 @@ discard block |
||
| 1311 | 1311 | $msg = array('zbug_balise_sans_argument', array('balise' => ' CHEMIN_IMAGE')); |
| 1312 | 1312 | erreur_squelette($msg, $p); |
| 1313 | 1313 | } else { |
| 1314 | - $p->code = 'chemin_image(' . $arg . ')'; |
|
| 1314 | + $p->code = 'chemin_image('.$arg.')'; |
|
| 1315 | 1315 | } |
| 1316 | 1316 | |
| 1317 | 1317 | #$p->interdire_scripts = true; |
@@ -1365,7 +1365,7 @@ discard block |
||
| 1365 | 1365 | // cas de #ENV sans argument : on retourne le serialize() du tableau |
| 1366 | 1366 | // une belle fonction [(#ENV|affiche_env)] serait pratique |
| 1367 | 1367 | if ($src) { |
| 1368 | - $p->code = '(is_array($a = (' . $src . ')) ? serialize($a) : "")'; |
|
| 1368 | + $p->code = '(is_array($a = ('.$src.')) ? serialize($a) : "")'; |
|
| 1369 | 1369 | } else { |
| 1370 | 1370 | $p->code = '@serialize($Pile[0])'; |
| 1371 | 1371 | } |
@@ -1418,8 +1418,8 @@ discard block |
||
| 1418 | 1418 | $_sinon = interprete_argument_balise(2, $p); |
| 1419 | 1419 | $_unserialize = sinon(interprete_argument_balise(3, $p), "false"); |
| 1420 | 1420 | |
| 1421 | - $p->code = '(include_spip(\'inc/config\')?lire_config(' . $arg . ',' . |
|
| 1422 | - ($_sinon && $_sinon != "''" ? $_sinon : 'null') . ',' . $_unserialize . "):'')"; |
|
| 1421 | + $p->code = '(include_spip(\'inc/config\')?lire_config('.$arg.','. |
|
| 1422 | + ($_sinon && $_sinon != "''" ? $_sinon : 'null').','.$_unserialize."):'')"; |
|
| 1423 | 1423 | |
| 1424 | 1424 | return $p; |
| 1425 | 1425 | } |
@@ -1512,7 +1512,7 @@ discard block |
||
| 1512 | 1512 | $err_b_s_a = array('zbug_balise_sans_argument', array('balise' => 'SESSION_SET')); |
| 1513 | 1513 | erreur_squelette($err_b_s_a, $p); |
| 1514 | 1514 | } else { |
| 1515 | - $p->code = '(include_spip("inc/session") AND session_set(' . $_nom . ',' . $_val . '))'; |
|
| 1515 | + $p->code = '(include_spip("inc/session") AND session_set('.$_nom.','.$_val.'))'; |
|
| 1516 | 1516 | } |
| 1517 | 1517 | |
| 1518 | 1518 | $p->interdire_scripts = false; |
@@ -1555,7 +1555,7 @@ discard block |
||
| 1555 | 1555 | if (preg_match(",^([[:space:]]*//[^\n]*\n)'([^']+)'$,ms", |
| 1556 | 1556 | $php, $r)) { |
| 1557 | 1557 | $p->code = /* $r[1]. */ |
| 1558 | - '(' . $r[2] . ')'; |
|
| 1558 | + '('.$r[2].')'; |
|
| 1559 | 1559 | } else { |
| 1560 | 1560 | $p->code = "eval('return '.$php.';')"; |
| 1561 | 1561 | } |
@@ -1802,9 +1802,9 @@ discard block |
||
| 1802 | 1802 | |
| 1803 | 1803 | // noter la duree du cache dans un entete proprietaire |
| 1804 | 1804 | |
| 1805 | - $code = "'<'.'" . '?php header("X-Spip-Cache: ' |
|
| 1805 | + $code = "'<'.'".'?php header("X-Spip-Cache: ' |
|
| 1806 | 1806 | . $duree |
| 1807 | - . '"); ?' . "'.'>'"; |
|
| 1807 | + . '"); ?'."'.'>'"; |
|
| 1808 | 1808 | |
| 1809 | 1809 | // Remplir le header Cache-Control |
| 1810 | 1810 | // cas #CACHE{0} |
@@ -1824,9 +1824,9 @@ discard block |
||
| 1824 | 1824 | if ($pa == 'cache-client' |
| 1825 | 1825 | and $duree > 0 |
| 1826 | 1826 | ) { |
| 1827 | - $code .= ".'<'.'" . '?php header("Cache-Control: max-age=' |
|
| 1827 | + $code .= ".'<'.'".'?php header("Cache-Control: max-age=' |
|
| 1828 | 1828 | . $duree |
| 1829 | - . '"); ?' . "'.'>'"; |
|
| 1829 | + . '"); ?'."'.'>'"; |
|
| 1830 | 1830 | // il semble logique, si on cache-client, de ne pas invalider |
| 1831 | 1831 | $pa = 'statique'; |
| 1832 | 1832 | } |
@@ -1834,7 +1834,7 @@ discard block |
||
| 1834 | 1834 | if ($pa == 'statique' |
| 1835 | 1835 | and $duree > 0 |
| 1836 | 1836 | ) { |
| 1837 | - $code .= ".'<'.'" . '?php header("X-Spip-Statique: oui"); ?' . "'.'>'"; |
|
| 1837 | + $code .= ".'<'.'".'?php header("X-Spip-Statique: oui"); ?'."'.'>'"; |
|
| 1838 | 1838 | } |
| 1839 | 1839 | } |
| 1840 | 1840 | } else { |
@@ -1999,9 +1999,9 @@ discard block |
||
| 1999 | 1999 | if ($p->etoile) { |
| 2000 | 2000 | $_options[] = "'etoile'=>true"; |
| 2001 | 2001 | } |
| 2002 | - $_options[] = "'compil'=>array(" . memoriser_contexte_compil($p) . ")"; |
|
| 2002 | + $_options[] = "'compil'=>array(".memoriser_contexte_compil($p).")"; |
|
| 2003 | 2003 | |
| 2004 | - $_l = 'array(' . join(",\n\t", $_contexte) . ')'; |
|
| 2004 | + $_l = 'array('.join(",\n\t", $_contexte).')'; |
|
| 2005 | 2005 | if ($flag_env) { |
| 2006 | 2006 | $_l = "array_merge(\$Pile[0],$_l)"; |
| 2007 | 2007 | } |
@@ -2012,7 +2012,7 @@ discard block |
||
| 2012 | 2012 | $msg = array('zbug_balise_sans_argument', array('balise' => ' INCLURE')); |
| 2013 | 2013 | erreur_squelette($msg, $p); |
| 2014 | 2014 | } else { |
| 2015 | - $p->code = 'charge_scripts(' . $_contexte[1] . ',false)'; |
|
| 2015 | + $p->code = 'charge_scripts('.$_contexte[1].',false)'; |
|
| 2016 | 2016 | } |
| 2017 | 2017 | |
| 2018 | 2018 | $p->interdire_scripts = false; // la securite est assuree par recuperer_fond |
@@ -2060,7 +2060,7 @@ discard block |
||
| 2060 | 2060 | unset($_contexte[1]); |
| 2061 | 2061 | |
| 2062 | 2062 | if (preg_match("/^\s*'[^']*'/s", $nom)) { |
| 2063 | - $nom = "'modeles/" . substr($nom, 1); |
|
| 2063 | + $nom = "'modeles/".substr($nom, 1); |
|
| 2064 | 2064 | } else { |
| 2065 | 2065 | $nom = "'modeles/' . $nom"; |
| 2066 | 2066 | } |
@@ -2077,8 +2077,8 @@ discard block |
||
| 2077 | 2077 | $primary = $p->boucles[$p->id_boucle]->primary; |
| 2078 | 2078 | if (!strpos($primary, ',')) { |
| 2079 | 2079 | $id = champ_sql($primary, $p); |
| 2080 | - $_contexte[] = "'$primary'=>" . $id; |
|
| 2081 | - $_contexte[] = "'id'=>" . $id; |
|
| 2080 | + $_contexte[] = "'$primary'=>".$id; |
|
| 2081 | + $_contexte[] = "'id'=>".$id; |
|
| 2082 | 2082 | } |
| 2083 | 2083 | } |
| 2084 | 2084 | $_contexte[] = "'recurs'=>(++\$recurs)"; |
@@ -2090,11 +2090,11 @@ discard block |
||
| 2090 | 2090 | $_options = memoriser_contexte_compil($p); |
| 2091 | 2091 | $_options = "'compil'=>array($_options), 'trim'=>true"; |
| 2092 | 2092 | if (isset($_contexte['ajax'])) { |
| 2093 | - $_options .= ", " . preg_replace(",=>(.*)$,ims", '=> ($v=(\\1))?$v:true', $_contexte['ajax']); |
|
| 2093 | + $_options .= ", ".preg_replace(",=>(.*)$,ims", '=> ($v=(\\1))?$v:true', $_contexte['ajax']); |
|
| 2094 | 2094 | unset($_contexte['ajax']); |
| 2095 | 2095 | } |
| 2096 | 2096 | |
| 2097 | - $_l = 'array(' . join(",\n\t", $_contexte) . ')'; |
|
| 2097 | + $_l = 'array('.join(",\n\t", $_contexte).')'; |
|
| 2098 | 2098 | if ($flag_env) { |
| 2099 | 2099 | $_l = "array_merge(\$Pile[0],$_l)"; |
| 2100 | 2100 | } |
@@ -2204,12 +2204,12 @@ discard block |
||
| 2204 | 2204 | function balise_DOUBLONS_dist($p) { |
| 2205 | 2205 | if ($type = interprete_argument_balise(1, $p)) { |
| 2206 | 2206 | if ($famille = interprete_argument_balise(2, $p)) { |
| 2207 | - $type .= '.' . $famille; |
|
| 2207 | + $type .= '.'.$famille; |
|
| 2208 | 2208 | } |
| 2209 | - $p->code = '(isset($doublons[' . $type . ']) ? $doublons[' . $type . '] : "")'; |
|
| 2209 | + $p->code = '(isset($doublons['.$type.']) ? $doublons['.$type.'] : "")'; |
|
| 2210 | 2210 | if (!$p->etoile) { |
| 2211 | 2211 | $p->code = 'array_filter(array_map("intval",explode(",",' |
| 2212 | - . $p->code . ')))'; |
|
| 2212 | + . $p->code.')))'; |
|
| 2213 | 2213 | } |
| 2214 | 2214 | } else { |
| 2215 | 2215 | $p->code = '$doublons'; |
@@ -2338,7 +2338,7 @@ discard block |
||
| 2338 | 2338 | $_code[] = "$_key => $_val"; |
| 2339 | 2339 | } |
| 2340 | 2340 | } while ($_key && $_val); |
| 2341 | - $p->code = 'array(' . join(', ', $_code) . ')'; |
|
| 2341 | + $p->code = 'array('.join(', ', $_code).')'; |
|
| 2342 | 2342 | $p->interdire_scripts = false; |
| 2343 | 2343 | |
| 2344 | 2344 | return $p; |
@@ -2365,7 +2365,7 @@ discard block |
||
| 2365 | 2365 | while ($_val = interprete_argument_balise($n++, $p)) { |
| 2366 | 2366 | $_code[] = $_val; |
| 2367 | 2367 | } |
| 2368 | - $p->code = 'array(' . join(', ', $_code) . ')'; |
|
| 2368 | + $p->code = 'array('.join(', ', $_code).')'; |
|
| 2369 | 2369 | $p->interdire_scripts = false; |
| 2370 | 2370 | |
| 2371 | 2371 | return $p; |
@@ -2410,8 +2410,8 @@ discard block |
||
| 2410 | 2410 | $_code[] = $_v; |
| 2411 | 2411 | } |
| 2412 | 2412 | |
| 2413 | - $p->code = '((function_exists("autoriser")||include_spip("inc/autoriser"))&&autoriser(' . join(', ', |
|
| 2414 | - $_code) . ')?" ":"")'; |
|
| 2413 | + $p->code = '((function_exists("autoriser")||include_spip("inc/autoriser"))&&autoriser('.join(', ', |
|
| 2414 | + $_code).')?" ":"")'; |
|
| 2415 | 2415 | $p->interdire_scripts = false; |
| 2416 | 2416 | |
| 2417 | 2417 | return $p; |
@@ -2444,7 +2444,7 @@ discard block |
||
| 2444 | 2444 | $type_info = isset($type_info) ? str_replace('\'', '"', $type_info) : '"est_actif"'; |
| 2445 | 2445 | |
| 2446 | 2446 | $f = chercher_filtre('info_plugin'); |
| 2447 | - $p->code = $f . '(' . $plugin . ', ' . $type_info . ')'; |
|
| 2447 | + $p->code = $f.'('.$plugin.', '.$type_info.')'; |
|
| 2448 | 2448 | |
| 2449 | 2449 | return $p; |
| 2450 | 2450 | } |
@@ -2468,7 +2468,7 @@ discard block |
||
| 2468 | 2468 | **/ |
| 2469 | 2469 | function balise_AIDER_dist($p) { |
| 2470 | 2470 | $_motif = interprete_argument_balise(1, $p); |
| 2471 | - $s = "'" . addslashes($p->descr['sourcefile']) . "'"; |
|
| 2471 | + $s = "'".addslashes($p->descr['sourcefile'])."'"; |
|
| 2472 | 2472 | $p->code = "((\$aider=charger_fonction('aide','inc',true))?\$aider($_motif,$s, \$Pile[0]):'')"; |
| 2473 | 2473 | |
| 2474 | 2474 | return $p; |
@@ -2685,12 +2685,12 @@ discard block |
||
| 2685 | 2685 | $_issens = "in_array($_champ,array('>','<'))"; |
| 2686 | 2686 | $_sens = "(strpos('< >',$_champ)-1)"; |
| 2687 | 2687 | |
| 2688 | - $_variable = "((\$s=$_issens)?'sens':'tri')." . $boucle->modificateur['tri_nom']; |
|
| 2688 | + $_variable = "((\$s=$_issens)?'sens':'tri').".$boucle->modificateur['tri_nom']; |
|
| 2689 | 2689 | $_url = "parametre_url(self(),$_variable,\$s?$_sens:$_champ)"; |
| 2690 | - $_url = "parametre_url($_url,'var_memotri',strncmp(" . $boucle->modificateur['tri_nom'] . ",'session',7)==0?$_variable:'')"; |
|
| 2691 | - $_on = "\$s?(" . $boucle->modificateur['tri_sens'] . "==$_sens" . '):(' . $boucle->modificateur['tri_champ'] . "==$_champ)"; |
|
| 2690 | + $_url = "parametre_url($_url,'var_memotri',strncmp(".$boucle->modificateur['tri_nom'].",'session',7)==0?$_variable:'')"; |
|
| 2691 | + $_on = "\$s?(".$boucle->modificateur['tri_sens']."==$_sens".'):('.$boucle->modificateur['tri_champ']."==$_champ)"; |
|
| 2692 | 2692 | |
| 2693 | - $p->code = "lien_ou_expose($_url,$_libelle,$_on" . ($_class ? ",$_class" : "") . ")"; |
|
| 2693 | + $p->code = "lien_ou_expose($_url,$_libelle,$_on".($_class ? ",$_class" : "").")"; |
|
| 2694 | 2694 | //$p->code = "''"; |
| 2695 | 2695 | $p->interdire_scripts = false; |
| 2696 | 2696 | |
@@ -2764,7 +2764,7 @@ discard block |
||
| 2764 | 2764 | $connect = $p->boucles[$p->id_boucle]->sql_serveur; |
| 2765 | 2765 | } |
| 2766 | 2766 | |
| 2767 | - $p->code = "(objet_test_si_publie(" . $_type . ",intval(" . $_id . ")," . _q($connect) . ")?' ':'')"; |
|
| 2767 | + $p->code = "(objet_test_si_publie(".$_type.",intval(".$_id."),"._q($connect).")?' ':'')"; |
|
| 2768 | 2768 | $p->interdire_scripts = false; |
| 2769 | 2769 | |
| 2770 | 2770 | return $p; |
@@ -20,7 +20,7 @@ discard block |
||
| 20 | 20 | **/ |
| 21 | 21 | |
| 22 | 22 | if (!defined('_ECRIRE_INC_VERSION')) { |
| 23 | - return; |
|
| 23 | + return; |
|
| 24 | 24 | } |
| 25 | 25 | |
| 26 | 26 | /** Début de la partie principale d'une boucle */ |
@@ -61,83 +61,83 @@ discard block |
||
| 61 | 61 | // http://code.spip.net/@phraser_inclure |
| 62 | 62 | function phraser_inclure($texte, $ligne, $result) { |
| 63 | 63 | |
| 64 | - while (preg_match(BALISE_INCLURE, $texte, $match)) { |
|
| 65 | - $match = array_pad($match, 3, null); |
|
| 66 | - $p = strpos($texte, $match[0]); |
|
| 67 | - $debut = substr($texte, 0, $p); |
|
| 68 | - if ($p) { |
|
| 69 | - $result = phraser_idiomes($debut, $ligne, $result); |
|
| 70 | - } |
|
| 71 | - $ligne += substr_count($debut, "\n"); |
|
| 72 | - $champ = new Inclure; |
|
| 73 | - $champ->ligne = $ligne; |
|
| 74 | - $ligne += substr_count($match[0], "\n"); |
|
| 75 | - $fichier = $match[2]; |
|
| 76 | - # assurer ici la migration .php3 => .php |
|
| 77 | - # et de l'ancienne syntaxe INCLURE(page.php3) devenue surperflue |
|
| 78 | - if ($fichier and preg_match(',^(.*[.]php)3$,', $fichier, $r)) { |
|
| 79 | - $fichier = $r[1]; |
|
| 80 | - } |
|
| 81 | - $champ->texte = ($fichier !== 'page.php') ? $fichier : ''; |
|
| 82 | - $texte = substr($texte, $p + strlen($match[0])); |
|
| 83 | - // on assimile {var=val} a une liste de un argument sans fonction |
|
| 84 | - phraser_args($texte, "/>", "", $result, $champ); |
|
| 85 | - if (!$champ->texte or count($champ->param) > 1) { |
|
| 86 | - if (!function_exists('normaliser_inclure')) { |
|
| 87 | - include_spip('public/normaliser'); |
|
| 88 | - } |
|
| 89 | - normaliser_inclure($champ); |
|
| 90 | - } |
|
| 91 | - $texte = substr($champ->apres, strpos($champ->apres, '>') + 1); |
|
| 92 | - $champ->apres = ""; |
|
| 93 | - $texte = preg_replace(',^</INCLU[DR]E>,', '', $texte); |
|
| 94 | - $result[] = $champ; |
|
| 95 | - } |
|
| 96 | - |
|
| 97 | - return (($texte === "") ? $result : phraser_idiomes($texte, $ligne, $result)); |
|
| 64 | + while (preg_match(BALISE_INCLURE, $texte, $match)) { |
|
| 65 | + $match = array_pad($match, 3, null); |
|
| 66 | + $p = strpos($texte, $match[0]); |
|
| 67 | + $debut = substr($texte, 0, $p); |
|
| 68 | + if ($p) { |
|
| 69 | + $result = phraser_idiomes($debut, $ligne, $result); |
|
| 70 | + } |
|
| 71 | + $ligne += substr_count($debut, "\n"); |
|
| 72 | + $champ = new Inclure; |
|
| 73 | + $champ->ligne = $ligne; |
|
| 74 | + $ligne += substr_count($match[0], "\n"); |
|
| 75 | + $fichier = $match[2]; |
|
| 76 | + # assurer ici la migration .php3 => .php |
|
| 77 | + # et de l'ancienne syntaxe INCLURE(page.php3) devenue surperflue |
|
| 78 | + if ($fichier and preg_match(',^(.*[.]php)3$,', $fichier, $r)) { |
|
| 79 | + $fichier = $r[1]; |
|
| 80 | + } |
|
| 81 | + $champ->texte = ($fichier !== 'page.php') ? $fichier : ''; |
|
| 82 | + $texte = substr($texte, $p + strlen($match[0])); |
|
| 83 | + // on assimile {var=val} a une liste de un argument sans fonction |
|
| 84 | + phraser_args($texte, "/>", "", $result, $champ); |
|
| 85 | + if (!$champ->texte or count($champ->param) > 1) { |
|
| 86 | + if (!function_exists('normaliser_inclure')) { |
|
| 87 | + include_spip('public/normaliser'); |
|
| 88 | + } |
|
| 89 | + normaliser_inclure($champ); |
|
| 90 | + } |
|
| 91 | + $texte = substr($champ->apres, strpos($champ->apres, '>') + 1); |
|
| 92 | + $champ->apres = ""; |
|
| 93 | + $texte = preg_replace(',^</INCLU[DR]E>,', '', $texte); |
|
| 94 | + $result[] = $champ; |
|
| 95 | + } |
|
| 96 | + |
|
| 97 | + return (($texte === "") ? $result : phraser_idiomes($texte, $ligne, $result)); |
|
| 98 | 98 | } |
| 99 | 99 | |
| 100 | 100 | // http://code.spip.net/@phraser_polyglotte |
| 101 | 101 | function phraser_polyglotte($texte, $ligne, $result) { |
| 102 | 102 | |
| 103 | - if (preg_match_all(BALISE_POLYGLOTTE, $texte, $m, PREG_SET_ORDER)) { |
|
| 104 | - foreach ($m as $match) { |
|
| 105 | - $p = strpos($texte, $match[0]); |
|
| 106 | - $debut = substr($texte, 0, $p); |
|
| 107 | - if ($p) { |
|
| 108 | - $champ = new Texte; |
|
| 109 | - $champ->texte = $debut; |
|
| 110 | - $champ->ligne = $ligne; |
|
| 111 | - $result[] = $champ; |
|
| 112 | - $ligne += substr_count($champ->texte, "\n"); |
|
| 113 | - } |
|
| 114 | - |
|
| 115 | - $champ = new Polyglotte; |
|
| 116 | - $champ->ligne = $ligne; |
|
| 117 | - $ligne += substr_count($match[0], "\n"); |
|
| 118 | - $lang = ''; |
|
| 119 | - $bloc = $match[1]; |
|
| 120 | - $texte = substr($texte, $p + strlen($match[0])); |
|
| 121 | - while (preg_match("/^[[:space:]]*([^[{]*)[[:space:]]*[[{]([a-z_]+)[]}](.*)$/si", $bloc, $regs)) { |
|
| 122 | - $trad = $regs[1]; |
|
| 123 | - if ($trad or $lang) { |
|
| 124 | - $champ->traductions[$lang] = $trad; |
|
| 125 | - } |
|
| 126 | - $lang = $regs[2]; |
|
| 127 | - $bloc = $regs[3]; |
|
| 128 | - } |
|
| 129 | - $champ->traductions[$lang] = $bloc; |
|
| 130 | - $result[] = $champ; |
|
| 131 | - } |
|
| 132 | - } |
|
| 133 | - if ($texte !== "") { |
|
| 134 | - $champ = new Texte; |
|
| 135 | - $champ->texte = $texte; |
|
| 136 | - $champ->ligne = $ligne; |
|
| 137 | - $result[] = $champ; |
|
| 138 | - } |
|
| 139 | - |
|
| 140 | - return $result; |
|
| 103 | + if (preg_match_all(BALISE_POLYGLOTTE, $texte, $m, PREG_SET_ORDER)) { |
|
| 104 | + foreach ($m as $match) { |
|
| 105 | + $p = strpos($texte, $match[0]); |
|
| 106 | + $debut = substr($texte, 0, $p); |
|
| 107 | + if ($p) { |
|
| 108 | + $champ = new Texte; |
|
| 109 | + $champ->texte = $debut; |
|
| 110 | + $champ->ligne = $ligne; |
|
| 111 | + $result[] = $champ; |
|
| 112 | + $ligne += substr_count($champ->texte, "\n"); |
|
| 113 | + } |
|
| 114 | + |
|
| 115 | + $champ = new Polyglotte; |
|
| 116 | + $champ->ligne = $ligne; |
|
| 117 | + $ligne += substr_count($match[0], "\n"); |
|
| 118 | + $lang = ''; |
|
| 119 | + $bloc = $match[1]; |
|
| 120 | + $texte = substr($texte, $p + strlen($match[0])); |
|
| 121 | + while (preg_match("/^[[:space:]]*([^[{]*)[[:space:]]*[[{]([a-z_]+)[]}](.*)$/si", $bloc, $regs)) { |
|
| 122 | + $trad = $regs[1]; |
|
| 123 | + if ($trad or $lang) { |
|
| 124 | + $champ->traductions[$lang] = $trad; |
|
| 125 | + } |
|
| 126 | + $lang = $regs[2]; |
|
| 127 | + $bloc = $regs[3]; |
|
| 128 | + } |
|
| 129 | + $champ->traductions[$lang] = $bloc; |
|
| 130 | + $result[] = $champ; |
|
| 131 | + } |
|
| 132 | + } |
|
| 133 | + if ($texte !== "") { |
|
| 134 | + $champ = new Texte; |
|
| 135 | + $champ->texte = $texte; |
|
| 136 | + $champ->ligne = $ligne; |
|
| 137 | + $result[] = $champ; |
|
| 138 | + } |
|
| 139 | + |
|
| 140 | + return $result; |
|
| 141 | 141 | } |
| 142 | 142 | |
| 143 | 143 | |
@@ -159,41 +159,41 @@ discard block |
||
| 159 | 159 | * @return array |
| 160 | 160 | **/ |
| 161 | 161 | function phraser_idiomes($texte, $ligne, $result) { |
| 162 | - while (preg_match(BALISE_IDIOMES, $texte, $match)) { |
|
| 163 | - $match = array_pad($match, 8, null); |
|
| 164 | - $p = strpos($texte, $match[0]); |
|
| 165 | - $ko = (!$match[3] && ($match[5][0] !== '=')); |
|
| 166 | - $debut = substr($texte, 0, $p + ($ko ? strlen($match[0]) : 0)); |
|
| 167 | - if ($debut) { |
|
| 168 | - $result = phraser_champs($debut, $ligne, $result); |
|
| 169 | - } |
|
| 170 | - $texte = substr($texte, $p + strlen($match[0])); |
|
| 171 | - $ligne += substr_count($debut, "\n"); |
|
| 172 | - if ($ko) { |
|
| 173 | - continue; |
|
| 174 | - } // faux idiome |
|
| 175 | - $champ = new Idiome; |
|
| 176 | - $champ->ligne = $ligne; |
|
| 177 | - $ligne += substr_count($match[0], "\n"); |
|
| 178 | - // Stocker les arguments de la balise de traduction |
|
| 179 | - $args = array(); |
|
| 180 | - $largs = $match[5]; |
|
| 181 | - while (preg_match(BALISE_IDIOMES_ARGS, $largs, $r)) { |
|
| 182 | - $args[$r[1]] = phraser_champs($r[2], 0, array()); |
|
| 183 | - $largs = substr($largs, strlen($r[0])); |
|
| 184 | - } |
|
| 185 | - $champ->arg = $args; |
|
| 186 | - $champ->nom_champ = strtolower($match[3]); |
|
| 187 | - $champ->module = $match[2]; |
|
| 188 | - // pas d'imbrication pour les filtres sur langue |
|
| 189 | - phraser_args($match[7], ":", '', array(), $champ); |
|
| 190 | - $result[] = $champ; |
|
| 191 | - } |
|
| 192 | - if ($texte !== "") { |
|
| 193 | - $result = phraser_champs($texte, $ligne, $result); |
|
| 194 | - } |
|
| 195 | - |
|
| 196 | - return $result; |
|
| 162 | + while (preg_match(BALISE_IDIOMES, $texte, $match)) { |
|
| 163 | + $match = array_pad($match, 8, null); |
|
| 164 | + $p = strpos($texte, $match[0]); |
|
| 165 | + $ko = (!$match[3] && ($match[5][0] !== '=')); |
|
| 166 | + $debut = substr($texte, 0, $p + ($ko ? strlen($match[0]) : 0)); |
|
| 167 | + if ($debut) { |
|
| 168 | + $result = phraser_champs($debut, $ligne, $result); |
|
| 169 | + } |
|
| 170 | + $texte = substr($texte, $p + strlen($match[0])); |
|
| 171 | + $ligne += substr_count($debut, "\n"); |
|
| 172 | + if ($ko) { |
|
| 173 | + continue; |
|
| 174 | + } // faux idiome |
|
| 175 | + $champ = new Idiome; |
|
| 176 | + $champ->ligne = $ligne; |
|
| 177 | + $ligne += substr_count($match[0], "\n"); |
|
| 178 | + // Stocker les arguments de la balise de traduction |
|
| 179 | + $args = array(); |
|
| 180 | + $largs = $match[5]; |
|
| 181 | + while (preg_match(BALISE_IDIOMES_ARGS, $largs, $r)) { |
|
| 182 | + $args[$r[1]] = phraser_champs($r[2], 0, array()); |
|
| 183 | + $largs = substr($largs, strlen($r[0])); |
|
| 184 | + } |
|
| 185 | + $champ->arg = $args; |
|
| 186 | + $champ->nom_champ = strtolower($match[3]); |
|
| 187 | + $champ->module = $match[2]; |
|
| 188 | + // pas d'imbrication pour les filtres sur langue |
|
| 189 | + phraser_args($match[7], ":", '', array(), $champ); |
|
| 190 | + $result[] = $champ; |
|
| 191 | + } |
|
| 192 | + if ($texte !== "") { |
|
| 193 | + $result = phraser_champs($texte, $ligne, $result); |
|
| 194 | + } |
|
| 195 | + |
|
| 196 | + return $result; |
|
| 197 | 197 | } |
| 198 | 198 | |
| 199 | 199 | /** |
@@ -211,47 +211,47 @@ discard block |
||
| 211 | 211 | * @return array |
| 212 | 212 | **/ |
| 213 | 213 | function phraser_champs($texte, $ligne, $result) { |
| 214 | - while (preg_match("/" . NOM_DE_CHAMP . "/S", $texte, $match)) { |
|
| 215 | - $p = strpos($texte, $match[0]); |
|
| 216 | - // texte après la balise |
|
| 217 | - $suite = substr($texte, $p + strlen($match[0])); |
|
| 218 | - |
|
| 219 | - $debut = substr($texte, 0, $p); |
|
| 220 | - if ($p) { |
|
| 221 | - $result = phraser_polyglotte($debut, $ligne, $result); |
|
| 222 | - } |
|
| 223 | - $ligne += substr_count($debut, "\n"); |
|
| 224 | - $champ = new Champ; |
|
| 225 | - $champ->ligne = $ligne; |
|
| 226 | - $ligne += substr_count($match[0], "\n"); |
|
| 227 | - $champ->nom_boucle = $match[2]; |
|
| 228 | - $champ->nom_champ = $match[3]; |
|
| 229 | - $champ->etoile = $match[5]; |
|
| 230 | - |
|
| 231 | - if ($suite and $suite[0] == '{') { |
|
| 232 | - phraser_arg($suite, '', array(), $champ); |
|
| 233 | - // ce ltrim est une ereur de conception |
|
| 234 | - // mais on le conserve par souci de compatibilite |
|
| 235 | - $texte = ltrim($suite); |
|
| 236 | - // Il faudrait le normaliser dans l'arbre de syntaxe abstraite |
|
| 237 | - // pour faire sauter ce cas particulier a la decompilation. |
|
| 238 | - /* Ce qui suit est malheureusement incomplet pour cela: |
|
| 214 | + while (preg_match("/" . NOM_DE_CHAMP . "/S", $texte, $match)) { |
|
| 215 | + $p = strpos($texte, $match[0]); |
|
| 216 | + // texte après la balise |
|
| 217 | + $suite = substr($texte, $p + strlen($match[0])); |
|
| 218 | + |
|
| 219 | + $debut = substr($texte, 0, $p); |
|
| 220 | + if ($p) { |
|
| 221 | + $result = phraser_polyglotte($debut, $ligne, $result); |
|
| 222 | + } |
|
| 223 | + $ligne += substr_count($debut, "\n"); |
|
| 224 | + $champ = new Champ; |
|
| 225 | + $champ->ligne = $ligne; |
|
| 226 | + $ligne += substr_count($match[0], "\n"); |
|
| 227 | + $champ->nom_boucle = $match[2]; |
|
| 228 | + $champ->nom_champ = $match[3]; |
|
| 229 | + $champ->etoile = $match[5]; |
|
| 230 | + |
|
| 231 | + if ($suite and $suite[0] == '{') { |
|
| 232 | + phraser_arg($suite, '', array(), $champ); |
|
| 233 | + // ce ltrim est une ereur de conception |
|
| 234 | + // mais on le conserve par souci de compatibilite |
|
| 235 | + $texte = ltrim($suite); |
|
| 236 | + // Il faudrait le normaliser dans l'arbre de syntaxe abstraite |
|
| 237 | + // pour faire sauter ce cas particulier a la decompilation. |
|
| 238 | + /* Ce qui suit est malheureusement incomplet pour cela: |
|
| 239 | 239 | if ($n = (strlen($suite) - strlen($texte))) { |
| 240 | 240 | $champ->apres = array(new Texte); |
| 241 | 241 | $champ->apres[0]->texte = substr($suite,0,$n); |
| 242 | 242 | } |
| 243 | 243 | */ |
| 244 | - } else { |
|
| 245 | - $texte = $suite; |
|
| 246 | - } |
|
| 247 | - phraser_vieux($champ); |
|
| 248 | - $result[] = $champ; |
|
| 249 | - } |
|
| 250 | - if ($texte !== "") { |
|
| 251 | - $result = phraser_polyglotte($texte, $ligne, $result); |
|
| 252 | - } |
|
| 253 | - |
|
| 254 | - return $result; |
|
| 244 | + } else { |
|
| 245 | + $texte = $suite; |
|
| 246 | + } |
|
| 247 | + phraser_vieux($champ); |
|
| 248 | + $result[] = $champ; |
|
| 249 | + } |
|
| 250 | + if ($texte !== "") { |
|
| 251 | + $result = phraser_polyglotte($texte, $ligne, $result); |
|
| 252 | + } |
|
| 253 | + |
|
| 254 | + return $result; |
|
| 255 | 255 | } |
| 256 | 256 | |
| 257 | 257 | // Gestion des imbrications: |
@@ -261,15 +261,15 @@ discard block |
||
| 261 | 261 | |
| 262 | 262 | // http://code.spip.net/@phraser_champs_etendus |
| 263 | 263 | function phraser_champs_etendus($texte, $ligne, $result) { |
| 264 | - if ($texte === "") { |
|
| 265 | - return $result; |
|
| 266 | - } |
|
| 267 | - $sep = '##'; |
|
| 268 | - while (strpos($texte, $sep) !== false) { |
|
| 269 | - $sep .= '#'; |
|
| 270 | - } |
|
| 271 | - |
|
| 272 | - return array_merge($result, phraser_champs_interieurs($texte, $ligne, $sep, array())); |
|
| 264 | + if ($texte === "") { |
|
| 265 | + return $result; |
|
| 266 | + } |
|
| 267 | + $sep = '##'; |
|
| 268 | + while (strpos($texte, $sep) !== false) { |
|
| 269 | + $sep .= '#'; |
|
| 270 | + } |
|
| 271 | + |
|
| 272 | + return array_merge($result, phraser_champs_interieurs($texte, $ligne, $sep, array())); |
|
| 273 | 273 | } |
| 274 | 274 | |
| 275 | 275 | // Analyse les filtres d'un champ etendu et affecte le resultat |
@@ -280,270 +280,270 @@ discard block |
||
| 280 | 280 | |
| 281 | 281 | // http://code.spip.net/@phraser_args |
| 282 | 282 | function phraser_args($texte, $fin, $sep, $result, &$pointeur_champ) { |
| 283 | - $texte = ltrim($texte); |
|
| 284 | - while (($texte !== "") && strpos($fin, $texte[0]) === false) { |
|
| 285 | - $result = phraser_arg($texte, $sep, $result, $pointeur_champ); |
|
| 286 | - $texte = ltrim($texte); |
|
| 287 | - } |
|
| 283 | + $texte = ltrim($texte); |
|
| 284 | + while (($texte !== "") && strpos($fin, $texte[0]) === false) { |
|
| 285 | + $result = phraser_arg($texte, $sep, $result, $pointeur_champ); |
|
| 286 | + $texte = ltrim($texte); |
|
| 287 | + } |
|
| 288 | 288 | # mettre ici la suite du texte, |
| 289 | 289 | # notamment pour que l'appelant vire le caractere fermant si besoin |
| 290 | - $pointeur_champ->apres = $texte; |
|
| 290 | + $pointeur_champ->apres = $texte; |
|
| 291 | 291 | |
| 292 | - return $result; |
|
| 292 | + return $result; |
|
| 293 | 293 | } |
| 294 | 294 | |
| 295 | 295 | // http://code.spip.net/@phraser_arg |
| 296 | 296 | function phraser_arg(&$texte, $sep, $result, &$pointeur_champ) { |
| 297 | - preg_match(",^(\|?[^}{)|]*)(.*)$,ms", $texte, $match); |
|
| 298 | - $suite = ltrim($match[2]); |
|
| 299 | - $fonc = trim($match[1]); |
|
| 300 | - if ($fonc && $fonc[0] == "|") { |
|
| 301 | - $fonc = ltrim(substr($fonc, 1)); |
|
| 302 | - } |
|
| 303 | - $res = array($fonc); |
|
| 304 | - $err_f = ''; |
|
| 305 | - // cas du filtre sans argument ou du critere / |
|
| 306 | - if (($suite && ($suite[0] != '{')) || ($fonc && $fonc[0] == '/')) { |
|
| 307 | - // si pas d'argument, alors il faut une fonction ou un double | |
|
| 308 | - if (!$match[1]) { |
|
| 309 | - $err_f = array('zbug_erreur_filtre', array('filtre' => $texte)); |
|
| 310 | - erreur_squelette($err_f, $pointeur_champ); |
|
| 311 | - $texte = ''; |
|
| 312 | - } else { |
|
| 313 | - $texte = $suite; |
|
| 314 | - } |
|
| 315 | - if ($err_f) { |
|
| 316 | - $pointeur_champ->param = false; |
|
| 317 | - } elseif ($fonc !== '') { |
|
| 318 | - $pointeur_champ->param[] = $res; |
|
| 319 | - } |
|
| 320 | - // pour les balises avec faux filtres qui boudent ce dur larbeur |
|
| 321 | - $pointeur_champ->fonctions[] = array($fonc, ''); |
|
| 322 | - |
|
| 323 | - return $result; |
|
| 324 | - } |
|
| 325 | - $args = ltrim(substr($suite, 1)); // virer le '(' initial |
|
| 326 | - $collecte = array(); |
|
| 327 | - while ($args && $args[0] != '}') { |
|
| 328 | - if ($args[0] == '"') { |
|
| 329 | - preg_match('/^(")([^"]*)(")(.*)$/ms', $args, $regs); |
|
| 330 | - } elseif ($args[0] == "'") { |
|
| 331 | - preg_match("/^(')([^']*)(')(.*)$/ms", $args, $regs); |
|
| 332 | - } else { |
|
| 333 | - preg_match("/^([[:space:]]*)([^,([{}]*([(\[{][^])}]*[])}])?[^,}]*)([,}].*)$/ms", $args, $regs); |
|
| 334 | - if (!strlen($regs[2])) { |
|
| 335 | - $err_f = array('zbug_erreur_filtre', array('filtre' => $args)); |
|
| 336 | - erreur_squelette($err_f, $pointeur_champ); |
|
| 337 | - $champ = new Texte; |
|
| 338 | - $champ->apres = $champ->avant = $args = ""; |
|
| 339 | - break; |
|
| 340 | - } |
|
| 341 | - } |
|
| 342 | - $arg = $regs[2]; |
|
| 343 | - if (trim($regs[1])) { |
|
| 344 | - $champ = new Texte; |
|
| 345 | - $champ->texte = $arg; |
|
| 346 | - $champ->apres = $champ->avant = $regs[1]; |
|
| 347 | - $result[] = $champ; |
|
| 348 | - $collecte[] = $champ; |
|
| 349 | - $args = ltrim($regs[count($regs) - 1]); |
|
| 350 | - } else { |
|
| 351 | - if (!preg_match("/" . NOM_DE_CHAMP . "([{|])/", $arg, $r)) { |
|
| 352 | - // 0 est un aveu d'impuissance. A completer |
|
| 353 | - $arg = phraser_champs_exterieurs($arg, 0, $sep, $result); |
|
| 354 | - |
|
| 355 | - $args = ltrim($regs[count($regs) - 1]); |
|
| 356 | - $collecte = array_merge($collecte, $arg); |
|
| 357 | - $result = array_merge($result, $arg); |
|
| 358 | - } else { |
|
| 359 | - $n = strpos($args, $r[0]); |
|
| 360 | - $pred = substr($args, 0, $n); |
|
| 361 | - $par = ',}'; |
|
| 362 | - if (preg_match('/^(.*)\($/', $pred, $m)) { |
|
| 363 | - $pred = $m[1]; |
|
| 364 | - $par = ')'; |
|
| 365 | - } |
|
| 366 | - if ($pred) { |
|
| 367 | - $champ = new Texte; |
|
| 368 | - $champ->texte = $pred; |
|
| 369 | - $champ->apres = $champ->avant = ""; |
|
| 370 | - $result[] = $champ; |
|
| 371 | - $collecte[] = $champ; |
|
| 372 | - } |
|
| 373 | - $rec = substr($args, $n + strlen($r[0]) - 1); |
|
| 374 | - $champ = new Champ; |
|
| 375 | - $champ->nom_boucle = $r[2]; |
|
| 376 | - $champ->nom_champ = $r[3]; |
|
| 377 | - $champ->etoile = $r[5]; |
|
| 378 | - $next = $r[6]; |
|
| 379 | - while ($next == '{') { |
|
| 380 | - phraser_arg($rec, $sep, array(), $champ); |
|
| 381 | - $args = ltrim($rec); |
|
| 382 | - $next = isset($args[0]) ? $args[0] : ''; |
|
| 383 | - } |
|
| 384 | - while ($next == '|') { |
|
| 385 | - phraser_args($rec, $par, $sep, array(), $champ); |
|
| 386 | - $args = $champ->apres; |
|
| 387 | - $champ->apres = ''; |
|
| 388 | - $next = isset($args[0]) ? $args[0] : ''; |
|
| 389 | - } |
|
| 390 | - // Si erreur de syntaxe dans un sous-argument, propager. |
|
| 391 | - if ($champ->param === false) { |
|
| 392 | - $err_f = true; |
|
| 393 | - } else { |
|
| 394 | - phraser_vieux($champ); |
|
| 395 | - } |
|
| 396 | - if ($par == ')') { |
|
| 397 | - $args = substr($args, 1); |
|
| 398 | - } |
|
| 399 | - $collecte[] = $champ; |
|
| 400 | - $result[] = $champ; |
|
| 401 | - } |
|
| 402 | - } |
|
| 403 | - if (isset($args[0]) and $args[0] == ',') { |
|
| 404 | - $args = ltrim(substr($args, 1)); |
|
| 405 | - if ($collecte) { |
|
| 406 | - $res[] = $collecte; |
|
| 407 | - $collecte = array(); |
|
| 408 | - } |
|
| 409 | - } |
|
| 410 | - } |
|
| 411 | - if ($collecte) { |
|
| 412 | - $res[] = $collecte; |
|
| 413 | - $collecte = array(); |
|
| 414 | - } |
|
| 415 | - $texte = substr($args, 1); |
|
| 416 | - $source = substr($suite, 0, strlen($suite) - strlen($texte)); |
|
| 417 | - // propager les erreurs, et ignorer les param vides |
|
| 418 | - if ($pointeur_champ->param !== false) { |
|
| 419 | - if ($err_f) { |
|
| 420 | - $pointeur_champ->param = false; |
|
| 421 | - } elseif ($fonc !== '' || count($res) > 1) { |
|
| 422 | - $pointeur_champ->param[] = $res; |
|
| 423 | - } |
|
| 424 | - } |
|
| 425 | - // pour les balises avec faux filtres qui boudent ce dur larbeur |
|
| 426 | - $pointeur_champ->fonctions[] = array($fonc, $source); |
|
| 427 | - |
|
| 428 | - return $result; |
|
| 297 | + preg_match(",^(\|?[^}{)|]*)(.*)$,ms", $texte, $match); |
|
| 298 | + $suite = ltrim($match[2]); |
|
| 299 | + $fonc = trim($match[1]); |
|
| 300 | + if ($fonc && $fonc[0] == "|") { |
|
| 301 | + $fonc = ltrim(substr($fonc, 1)); |
|
| 302 | + } |
|
| 303 | + $res = array($fonc); |
|
| 304 | + $err_f = ''; |
|
| 305 | + // cas du filtre sans argument ou du critere / |
|
| 306 | + if (($suite && ($suite[0] != '{')) || ($fonc && $fonc[0] == '/')) { |
|
| 307 | + // si pas d'argument, alors il faut une fonction ou un double | |
|
| 308 | + if (!$match[1]) { |
|
| 309 | + $err_f = array('zbug_erreur_filtre', array('filtre' => $texte)); |
|
| 310 | + erreur_squelette($err_f, $pointeur_champ); |
|
| 311 | + $texte = ''; |
|
| 312 | + } else { |
|
| 313 | + $texte = $suite; |
|
| 314 | + } |
|
| 315 | + if ($err_f) { |
|
| 316 | + $pointeur_champ->param = false; |
|
| 317 | + } elseif ($fonc !== '') { |
|
| 318 | + $pointeur_champ->param[] = $res; |
|
| 319 | + } |
|
| 320 | + // pour les balises avec faux filtres qui boudent ce dur larbeur |
|
| 321 | + $pointeur_champ->fonctions[] = array($fonc, ''); |
|
| 322 | + |
|
| 323 | + return $result; |
|
| 324 | + } |
|
| 325 | + $args = ltrim(substr($suite, 1)); // virer le '(' initial |
|
| 326 | + $collecte = array(); |
|
| 327 | + while ($args && $args[0] != '}') { |
|
| 328 | + if ($args[0] == '"') { |
|
| 329 | + preg_match('/^(")([^"]*)(")(.*)$/ms', $args, $regs); |
|
| 330 | + } elseif ($args[0] == "'") { |
|
| 331 | + preg_match("/^(')([^']*)(')(.*)$/ms", $args, $regs); |
|
| 332 | + } else { |
|
| 333 | + preg_match("/^([[:space:]]*)([^,([{}]*([(\[{][^])}]*[])}])?[^,}]*)([,}].*)$/ms", $args, $regs); |
|
| 334 | + if (!strlen($regs[2])) { |
|
| 335 | + $err_f = array('zbug_erreur_filtre', array('filtre' => $args)); |
|
| 336 | + erreur_squelette($err_f, $pointeur_champ); |
|
| 337 | + $champ = new Texte; |
|
| 338 | + $champ->apres = $champ->avant = $args = ""; |
|
| 339 | + break; |
|
| 340 | + } |
|
| 341 | + } |
|
| 342 | + $arg = $regs[2]; |
|
| 343 | + if (trim($regs[1])) { |
|
| 344 | + $champ = new Texte; |
|
| 345 | + $champ->texte = $arg; |
|
| 346 | + $champ->apres = $champ->avant = $regs[1]; |
|
| 347 | + $result[] = $champ; |
|
| 348 | + $collecte[] = $champ; |
|
| 349 | + $args = ltrim($regs[count($regs) - 1]); |
|
| 350 | + } else { |
|
| 351 | + if (!preg_match("/" . NOM_DE_CHAMP . "([{|])/", $arg, $r)) { |
|
| 352 | + // 0 est un aveu d'impuissance. A completer |
|
| 353 | + $arg = phraser_champs_exterieurs($arg, 0, $sep, $result); |
|
| 354 | + |
|
| 355 | + $args = ltrim($regs[count($regs) - 1]); |
|
| 356 | + $collecte = array_merge($collecte, $arg); |
|
| 357 | + $result = array_merge($result, $arg); |
|
| 358 | + } else { |
|
| 359 | + $n = strpos($args, $r[0]); |
|
| 360 | + $pred = substr($args, 0, $n); |
|
| 361 | + $par = ',}'; |
|
| 362 | + if (preg_match('/^(.*)\($/', $pred, $m)) { |
|
| 363 | + $pred = $m[1]; |
|
| 364 | + $par = ')'; |
|
| 365 | + } |
|
| 366 | + if ($pred) { |
|
| 367 | + $champ = new Texte; |
|
| 368 | + $champ->texte = $pred; |
|
| 369 | + $champ->apres = $champ->avant = ""; |
|
| 370 | + $result[] = $champ; |
|
| 371 | + $collecte[] = $champ; |
|
| 372 | + } |
|
| 373 | + $rec = substr($args, $n + strlen($r[0]) - 1); |
|
| 374 | + $champ = new Champ; |
|
| 375 | + $champ->nom_boucle = $r[2]; |
|
| 376 | + $champ->nom_champ = $r[3]; |
|
| 377 | + $champ->etoile = $r[5]; |
|
| 378 | + $next = $r[6]; |
|
| 379 | + while ($next == '{') { |
|
| 380 | + phraser_arg($rec, $sep, array(), $champ); |
|
| 381 | + $args = ltrim($rec); |
|
| 382 | + $next = isset($args[0]) ? $args[0] : ''; |
|
| 383 | + } |
|
| 384 | + while ($next == '|') { |
|
| 385 | + phraser_args($rec, $par, $sep, array(), $champ); |
|
| 386 | + $args = $champ->apres; |
|
| 387 | + $champ->apres = ''; |
|
| 388 | + $next = isset($args[0]) ? $args[0] : ''; |
|
| 389 | + } |
|
| 390 | + // Si erreur de syntaxe dans un sous-argument, propager. |
|
| 391 | + if ($champ->param === false) { |
|
| 392 | + $err_f = true; |
|
| 393 | + } else { |
|
| 394 | + phraser_vieux($champ); |
|
| 395 | + } |
|
| 396 | + if ($par == ')') { |
|
| 397 | + $args = substr($args, 1); |
|
| 398 | + } |
|
| 399 | + $collecte[] = $champ; |
|
| 400 | + $result[] = $champ; |
|
| 401 | + } |
|
| 402 | + } |
|
| 403 | + if (isset($args[0]) and $args[0] == ',') { |
|
| 404 | + $args = ltrim(substr($args, 1)); |
|
| 405 | + if ($collecte) { |
|
| 406 | + $res[] = $collecte; |
|
| 407 | + $collecte = array(); |
|
| 408 | + } |
|
| 409 | + } |
|
| 410 | + } |
|
| 411 | + if ($collecte) { |
|
| 412 | + $res[] = $collecte; |
|
| 413 | + $collecte = array(); |
|
| 414 | + } |
|
| 415 | + $texte = substr($args, 1); |
|
| 416 | + $source = substr($suite, 0, strlen($suite) - strlen($texte)); |
|
| 417 | + // propager les erreurs, et ignorer les param vides |
|
| 418 | + if ($pointeur_champ->param !== false) { |
|
| 419 | + if ($err_f) { |
|
| 420 | + $pointeur_champ->param = false; |
|
| 421 | + } elseif ($fonc !== '' || count($res) > 1) { |
|
| 422 | + $pointeur_champ->param[] = $res; |
|
| 423 | + } |
|
| 424 | + } |
|
| 425 | + // pour les balises avec faux filtres qui boudent ce dur larbeur |
|
| 426 | + $pointeur_champ->fonctions[] = array($fonc, $source); |
|
| 427 | + |
|
| 428 | + return $result; |
|
| 429 | 429 | } |
| 430 | 430 | |
| 431 | 431 | |
| 432 | 432 | // http://code.spip.net/@phraser_champs_exterieurs |
| 433 | 433 | function phraser_champs_exterieurs($texte, $ligne, $sep, $nested) { |
| 434 | - $res = array(); |
|
| 435 | - while (($p = strpos($texte, "%$sep")) !== false) { |
|
| 436 | - if (!preg_match(',^%' . preg_quote($sep) . '([0-9]+)@,', substr($texte, $p), $m)) { |
|
| 437 | - break; |
|
| 438 | - } |
|
| 439 | - $debut = substr($texte, 0, $p); |
|
| 440 | - $texte = substr($texte, $p + strlen($m[0])); |
|
| 441 | - if ($p) { |
|
| 442 | - $res = phraser_inclure($debut, $ligne, $res); |
|
| 443 | - } |
|
| 444 | - $ligne += substr_count($debut, "\n"); |
|
| 445 | - $res[] = $nested[$m[1]]; |
|
| 446 | - } |
|
| 447 | - |
|
| 448 | - return (($texte === '') ? $res : phraser_inclure($texte, $ligne, $res)); |
|
| 434 | + $res = array(); |
|
| 435 | + while (($p = strpos($texte, "%$sep")) !== false) { |
|
| 436 | + if (!preg_match(',^%' . preg_quote($sep) . '([0-9]+)@,', substr($texte, $p), $m)) { |
|
| 437 | + break; |
|
| 438 | + } |
|
| 439 | + $debut = substr($texte, 0, $p); |
|
| 440 | + $texte = substr($texte, $p + strlen($m[0])); |
|
| 441 | + if ($p) { |
|
| 442 | + $res = phraser_inclure($debut, $ligne, $res); |
|
| 443 | + } |
|
| 444 | + $ligne += substr_count($debut, "\n"); |
|
| 445 | + $res[] = $nested[$m[1]]; |
|
| 446 | + } |
|
| 447 | + |
|
| 448 | + return (($texte === '') ? $res : phraser_inclure($texte, $ligne, $res)); |
|
| 449 | 449 | } |
| 450 | 450 | |
| 451 | 451 | // http://code.spip.net/@phraser_champs_interieurs |
| 452 | 452 | function phraser_champs_interieurs($texte, $ligne, $sep, $result) { |
| 453 | - $i = 0; // en fait count($result) |
|
| 454 | - $x = ""; |
|
| 455 | - |
|
| 456 | - while (true) { |
|
| 457 | - $j = $i; |
|
| 458 | - $n = $ligne; |
|
| 459 | - while (preg_match(CHAMP_ETENDU, $texte, $match)) { |
|
| 460 | - $p = strpos($texte, $match[0]); |
|
| 461 | - $debut = substr($texte, 0, $p); |
|
| 462 | - if ($p) { |
|
| 463 | - $result[$i] = $debut; |
|
| 464 | - $i++; |
|
| 465 | - } |
|
| 466 | - $nom = $match[4]; |
|
| 467 | - $champ = new Champ; |
|
| 468 | - // ca ne marche pas encore en cas de champ imbrique |
|
| 469 | - $champ->ligne = $x ? 0 : ($n + substr_count($debut, "\n")); |
|
| 470 | - $champ->nom_boucle = $match[3]; |
|
| 471 | - $champ->nom_champ = $nom; |
|
| 472 | - $champ->etoile = $match[6]; |
|
| 473 | - // phraser_args indiquera ou commence apres |
|
| 474 | - $result = phraser_args($match[7], ")", $sep, $result, $champ); |
|
| 475 | - phraser_vieux($champ); |
|
| 476 | - $champ->avant = |
|
| 477 | - phraser_champs_exterieurs($match[1], $n, $sep, $result); |
|
| 478 | - $debut = substr($champ->apres, 1); |
|
| 479 | - if (!empty($debut)) { |
|
| 480 | - $n += substr_count(substr($texte, 0, strpos($texte, $debut)), "\n"); |
|
| 481 | - } |
|
| 482 | - $champ->apres = phraser_champs_exterieurs($debut, $n, $sep, $result); |
|
| 483 | - |
|
| 484 | - $result[$i] = $champ; |
|
| 485 | - $i++; |
|
| 486 | - $texte = substr($texte, $p + strlen($match[0])); |
|
| 487 | - } |
|
| 488 | - if ($texte !== "") { |
|
| 489 | - $result[$i] = $texte; |
|
| 490 | - $i++; |
|
| 491 | - } |
|
| 492 | - $x = ''; |
|
| 493 | - |
|
| 494 | - while ($j < $i) { |
|
| 495 | - $z = $result[$j]; |
|
| 496 | - // j'aurais besoin de connaitre le nombre de lignes... |
|
| 497 | - if (is_object($z)) { |
|
| 498 | - $x .= "%$sep$j@"; |
|
| 499 | - } else { |
|
| 500 | - $x .= $z; |
|
| 501 | - } |
|
| 502 | - $j++; |
|
| 503 | - } |
|
| 504 | - if (preg_match(CHAMP_ETENDU, $x)) { |
|
| 505 | - $texte = $x; |
|
| 506 | - } else { |
|
| 507 | - return phraser_champs_exterieurs($x, $ligne, $sep, $result); |
|
| 508 | - } |
|
| 509 | - } |
|
| 453 | + $i = 0; // en fait count($result) |
|
| 454 | + $x = ""; |
|
| 455 | + |
|
| 456 | + while (true) { |
|
| 457 | + $j = $i; |
|
| 458 | + $n = $ligne; |
|
| 459 | + while (preg_match(CHAMP_ETENDU, $texte, $match)) { |
|
| 460 | + $p = strpos($texte, $match[0]); |
|
| 461 | + $debut = substr($texte, 0, $p); |
|
| 462 | + if ($p) { |
|
| 463 | + $result[$i] = $debut; |
|
| 464 | + $i++; |
|
| 465 | + } |
|
| 466 | + $nom = $match[4]; |
|
| 467 | + $champ = new Champ; |
|
| 468 | + // ca ne marche pas encore en cas de champ imbrique |
|
| 469 | + $champ->ligne = $x ? 0 : ($n + substr_count($debut, "\n")); |
|
| 470 | + $champ->nom_boucle = $match[3]; |
|
| 471 | + $champ->nom_champ = $nom; |
|
| 472 | + $champ->etoile = $match[6]; |
|
| 473 | + // phraser_args indiquera ou commence apres |
|
| 474 | + $result = phraser_args($match[7], ")", $sep, $result, $champ); |
|
| 475 | + phraser_vieux($champ); |
|
| 476 | + $champ->avant = |
|
| 477 | + phraser_champs_exterieurs($match[1], $n, $sep, $result); |
|
| 478 | + $debut = substr($champ->apres, 1); |
|
| 479 | + if (!empty($debut)) { |
|
| 480 | + $n += substr_count(substr($texte, 0, strpos($texte, $debut)), "\n"); |
|
| 481 | + } |
|
| 482 | + $champ->apres = phraser_champs_exterieurs($debut, $n, $sep, $result); |
|
| 483 | + |
|
| 484 | + $result[$i] = $champ; |
|
| 485 | + $i++; |
|
| 486 | + $texte = substr($texte, $p + strlen($match[0])); |
|
| 487 | + } |
|
| 488 | + if ($texte !== "") { |
|
| 489 | + $result[$i] = $texte; |
|
| 490 | + $i++; |
|
| 491 | + } |
|
| 492 | + $x = ''; |
|
| 493 | + |
|
| 494 | + while ($j < $i) { |
|
| 495 | + $z = $result[$j]; |
|
| 496 | + // j'aurais besoin de connaitre le nombre de lignes... |
|
| 497 | + if (is_object($z)) { |
|
| 498 | + $x .= "%$sep$j@"; |
|
| 499 | + } else { |
|
| 500 | + $x .= $z; |
|
| 501 | + } |
|
| 502 | + $j++; |
|
| 503 | + } |
|
| 504 | + if (preg_match(CHAMP_ETENDU, $x)) { |
|
| 505 | + $texte = $x; |
|
| 506 | + } else { |
|
| 507 | + return phraser_champs_exterieurs($x, $ligne, $sep, $result); |
|
| 508 | + } |
|
| 509 | + } |
|
| 510 | 510 | } |
| 511 | 511 | |
| 512 | 512 | function phraser_vieux(&$champ) { |
| 513 | - $nom = $champ->nom_champ; |
|
| 514 | - if ($nom == 'EMBED_DOCUMENT') { |
|
| 515 | - if (!function_exists('phraser_vieux_emb')) { |
|
| 516 | - include_spip('public/normaliser'); |
|
| 517 | - } |
|
| 518 | - phraser_vieux_emb($champ); |
|
| 519 | - } elseif ($nom == 'EXPOSER') { |
|
| 520 | - if (!function_exists('phraser_vieux_exposer')) { |
|
| 521 | - include_spip('public/normaliser'); |
|
| 522 | - } |
|
| 523 | - phraser_vieux_exposer($champ); |
|
| 524 | - } elseif ($champ->param) { |
|
| 525 | - if ($nom == 'FORMULAIRE_RECHERCHE') { |
|
| 526 | - if (!function_exists('phraser_vieux_recherche')) { |
|
| 527 | - include_spip('public/normaliser'); |
|
| 528 | - } |
|
| 529 | - phraser_vieux_recherche($champ); |
|
| 530 | - } elseif (preg_match(",^LOGO_[A-Z]+,", $nom)) { |
|
| 531 | - if (!function_exists('phraser_vieux_logos')) { |
|
| 532 | - include_spip('public/normaliser'); |
|
| 533 | - } |
|
| 534 | - phraser_vieux_logos($champ); |
|
| 535 | - } elseif ($nom == 'MODELE') { |
|
| 536 | - if (!function_exists('phraser_vieux_modele')) { |
|
| 537 | - include_spip('public/normaliser'); |
|
| 538 | - } |
|
| 539 | - phraser_vieux_modele($champ); |
|
| 540 | - } elseif ($nom == 'INCLURE' or $nom == 'INCLUDE') { |
|
| 541 | - if (!function_exists('phraser_vieux_inclu')) { |
|
| 542 | - include_spip('public/normaliser'); |
|
| 543 | - } |
|
| 544 | - phraser_vieux_inclu($champ); |
|
| 545 | - } |
|
| 546 | - } |
|
| 513 | + $nom = $champ->nom_champ; |
|
| 514 | + if ($nom == 'EMBED_DOCUMENT') { |
|
| 515 | + if (!function_exists('phraser_vieux_emb')) { |
|
| 516 | + include_spip('public/normaliser'); |
|
| 517 | + } |
|
| 518 | + phraser_vieux_emb($champ); |
|
| 519 | + } elseif ($nom == 'EXPOSER') { |
|
| 520 | + if (!function_exists('phraser_vieux_exposer')) { |
|
| 521 | + include_spip('public/normaliser'); |
|
| 522 | + } |
|
| 523 | + phraser_vieux_exposer($champ); |
|
| 524 | + } elseif ($champ->param) { |
|
| 525 | + if ($nom == 'FORMULAIRE_RECHERCHE') { |
|
| 526 | + if (!function_exists('phraser_vieux_recherche')) { |
|
| 527 | + include_spip('public/normaliser'); |
|
| 528 | + } |
|
| 529 | + phraser_vieux_recherche($champ); |
|
| 530 | + } elseif (preg_match(",^LOGO_[A-Z]+,", $nom)) { |
|
| 531 | + if (!function_exists('phraser_vieux_logos')) { |
|
| 532 | + include_spip('public/normaliser'); |
|
| 533 | + } |
|
| 534 | + phraser_vieux_logos($champ); |
|
| 535 | + } elseif ($nom == 'MODELE') { |
|
| 536 | + if (!function_exists('phraser_vieux_modele')) { |
|
| 537 | + include_spip('public/normaliser'); |
|
| 538 | + } |
|
| 539 | + phraser_vieux_modele($champ); |
|
| 540 | + } elseif ($nom == 'INCLURE' or $nom == 'INCLUDE') { |
|
| 541 | + if (!function_exists('phraser_vieux_inclu')) { |
|
| 542 | + include_spip('public/normaliser'); |
|
| 543 | + } |
|
| 544 | + phraser_vieux_inclu($champ); |
|
| 545 | + } |
|
| 546 | + } |
|
| 547 | 547 | } |
| 548 | 548 | |
| 549 | 549 | |
@@ -571,373 +571,373 @@ discard block |
||
| 571 | 571 | **/ |
| 572 | 572 | function phraser_criteres($params, &$result) { |
| 573 | 573 | |
| 574 | - $err_ci = ''; // indiquera s'il y a eu une erreur |
|
| 575 | - $args = array(); |
|
| 576 | - $type = $result->type_requete; |
|
| 577 | - $doublons = array(); |
|
| 578 | - foreach ($params as $v) { |
|
| 579 | - $var = $v[1][0]; |
|
| 580 | - $param = ($var->type != 'texte') ? "" : $var->texte; |
|
| 581 | - if ((count($v) > 2) && (!preg_match(",[^A-Za-z]IN[^A-Za-z],i", $param))) { |
|
| 582 | - // plus d'un argument et pas le critere IN: |
|
| 583 | - // detecter comme on peut si c'est le critere implicite LIMIT debut, fin |
|
| 584 | - if ($var->type != 'texte' |
|
| 585 | - or preg_match("/^(n|n-|(n-)?\d+)$/S", $param) |
|
| 586 | - ) { |
|
| 587 | - $op = ','; |
|
| 588 | - $not = ""; |
|
| 589 | - $cond = false; |
|
| 590 | - } else { |
|
| 591 | - // Le debut du premier argument est l'operateur |
|
| 592 | - preg_match("/^([!]?)([a-zA-Z][a-zA-Z0-9_]*)[[:space:]]*(\??)[[:space:]]*(.*)$/ms", $param, $m); |
|
| 593 | - $op = $m[2]; |
|
| 594 | - $not = $m[1]; |
|
| 595 | - $cond = $m[3]; |
|
| 596 | - // virer le premier argument, |
|
| 597 | - // et mettre son reliquat eventuel |
|
| 598 | - // Recopier pour ne pas alterer le texte source |
|
| 599 | - // utile au debusqueur |
|
| 600 | - if ($m[4]) { |
|
| 601 | - // une maniere tres sale de supprimer les "' autour de {critere "xxx","yyy"} |
|
| 602 | - if (preg_match(',^(["\'])(.*)\1$,', $m[4])) { |
|
| 603 | - $c = null; |
|
| 604 | - eval('$c = ' . $m[4] . ';'); |
|
| 605 | - if (isset($c)) { |
|
| 606 | - $m[4] = $c; |
|
| 607 | - } |
|
| 608 | - } |
|
| 609 | - $texte = new Texte; |
|
| 610 | - $texte->texte = $m[4]; |
|
| 611 | - $v[1][0] = $texte; |
|
| 612 | - } else { |
|
| 613 | - array_shift($v[1]); |
|
| 614 | - } |
|
| 615 | - } |
|
| 616 | - array_shift($v); // $v[O] est vide |
|
| 617 | - $crit = new Critere; |
|
| 618 | - $crit->op = $op; |
|
| 619 | - $crit->not = $not; |
|
| 620 | - $crit->cond = $cond; |
|
| 621 | - $crit->exclus = ""; |
|
| 622 | - $crit->param = $v; |
|
| 623 | - $args[] = $crit; |
|
| 624 | - } else { |
|
| 625 | - if ($var->type != 'texte') { |
|
| 626 | - // cas 1 seul arg ne commencant pas par du texte brut: |
|
| 627 | - // erreur ou critere infixe "/" |
|
| 628 | - if (($v[1][1]->type != 'texte') || (trim($v[1][1]->texte) != '/')) { |
|
| 629 | - $err_ci = array( |
|
| 630 | - 'zbug_critere_inconnu', |
|
| 631 | - array('critere' => $var->nom_champ) |
|
| 632 | - ); |
|
| 633 | - erreur_squelette($err_ci, $result); |
|
| 634 | - } else { |
|
| 635 | - $crit = new Critere; |
|
| 636 | - $crit->op = '/'; |
|
| 637 | - $crit->not = ""; |
|
| 638 | - $crit->exclus = ""; |
|
| 639 | - $crit->param = array(array($v[1][0]), array($v[1][2])); |
|
| 640 | - $args[] = $crit; |
|
| 641 | - } |
|
| 642 | - } else { |
|
| 643 | - // traiter qq lexemes particuliers pour faciliter la suite |
|
| 644 | - // les separateurs |
|
| 645 | - if ($var->apres) { |
|
| 646 | - $result->separateur[] = $param; |
|
| 647 | - } elseif (($param == 'tout') or ($param == 'tous')) { |
|
| 648 | - $result->modificateur['tout'] = true; |
|
| 649 | - } elseif ($param == 'plat') { |
|
| 650 | - $result->modificateur['plat'] = true; |
|
| 651 | - } |
|
| 652 | - |
|
| 653 | - // Boucle hierarchie, analyser le critere id_rubrique |
|
| 654 | - // et les autres critères {id_x} pour forcer {tout} sur |
|
| 655 | - // ceux-ci pour avoir la rubrique mere... |
|
| 656 | - // Les autres critères de la boucle hierarchie doivent être |
|
| 657 | - // traités normalement. |
|
| 658 | - elseif (strcasecmp($type, 'hierarchie') == 0 |
|
| 659 | - and !preg_match(",^id_rubrique\b,", $param) |
|
| 660 | - and preg_match(",^id_\w+\s*$,", $param) |
|
| 661 | - ) { |
|
| 662 | - $result->modificateur['tout'] = true; |
|
| 663 | - } elseif (strcasecmp($type, 'hierarchie') == 0 and $param == "id_rubrique") { |
|
| 664 | - // rien a faire sur {id_rubrique} tout seul |
|
| 665 | - } else { |
|
| 666 | - // pas d'emplacement statique, faut un dynamique |
|
| 667 | - // mais il y a 2 cas qui ont les 2 ! |
|
| 668 | - if (($param == 'unique') || (preg_match(',^!?doublons *,', $param))) { |
|
| 669 | - // cette variable sera inseree dans le code |
|
| 670 | - // et son nom sert d'indicateur des maintenant |
|
| 671 | - $result->doublons = '$doublons_index'; |
|
| 672 | - if ($param == 'unique') { |
|
| 673 | - $param = 'doublons'; |
|
| 674 | - } |
|
| 675 | - } elseif ($param == 'recherche') { |
|
| 676 | - // meme chose (a cause de #nom_de_boucle:URL_*) |
|
| 677 | - $result->hash = ' '; |
|
| 678 | - } |
|
| 679 | - |
|
| 680 | - if (preg_match(',^ *([0-9-]+) *(/) *(.+) *$,', $param, $m)) { |
|
| 681 | - $crit = phraser_critere_infixe($m[1], $m[3], $v, '/', '', ''); |
|
| 682 | - } elseif (preg_match(',^([!]?)(' . CHAMP_SQL_PLUS_FONC . |
|
| 683 | - ')[[:space:]]*(\??)(!?)(<=?|>=?|==?|\b(?:IN|LIKE)\b)(.*)$,is', $param, $m)) { |
|
| 684 | - $a2 = trim($m[8]); |
|
| 685 | - if ($a2 and ($a2[0] == "'" or $a2[0] == '"') and ($a2[0] == substr($a2, -1))) { |
|
| 686 | - $a2 = substr($a2, 1, -1); |
|
| 687 | - } |
|
| 688 | - $crit = phraser_critere_infixe($m[2], $a2, $v, |
|
| 689 | - (($m[2] == 'lang_select') ? $m[2] : $m[7]), |
|
| 690 | - $m[6], $m[5]); |
|
| 691 | - $crit->exclus = $m[1]; |
|
| 692 | - } elseif (preg_match("/^([!]?)\s*(" . |
|
| 693 | - CHAMP_SQL_PLUS_FONC . |
|
| 694 | - ")\s*(\??)(.*)$/is", $param, $m)) { |
|
| 695 | - // contient aussi les comparaisons implicites ! |
|
| 696 | - // Comme ci-dessus: |
|
| 697 | - // le premier arg contient l'operateur |
|
| 698 | - array_shift($v); |
|
| 699 | - if ($m[6]) { |
|
| 700 | - $v[0][0] = new Texte; |
|
| 701 | - $v[0][0]->texte = $m[6]; |
|
| 702 | - } else { |
|
| 703 | - array_shift($v[0]); |
|
| 704 | - if (!$v[0]) { |
|
| 705 | - array_shift($v); |
|
| 706 | - } |
|
| 707 | - } |
|
| 708 | - $crit = new Critere; |
|
| 709 | - $crit->op = $m[2]; |
|
| 710 | - $crit->param = $v; |
|
| 711 | - $crit->not = $m[1]; |
|
| 712 | - $crit->cond = $m[5]; |
|
| 713 | - } else { |
|
| 714 | - $err_ci = array( |
|
| 715 | - 'zbug_critere_inconnu', |
|
| 716 | - array('critere' => $param) |
|
| 717 | - ); |
|
| 718 | - erreur_squelette($err_ci, $result); |
|
| 719 | - } |
|
| 720 | - |
|
| 721 | - if ((!preg_match(',^!?doublons *,', $param)) || $crit->not) { |
|
| 722 | - $args[] = $crit; |
|
| 723 | - } else { |
|
| 724 | - $doublons[] = $crit; |
|
| 725 | - } |
|
| 726 | - } |
|
| 727 | - } |
|
| 728 | - } |
|
| 729 | - } |
|
| 730 | - |
|
| 731 | - // les doublons non nies doivent etre le dernier critere |
|
| 732 | - // pour que la variable $doublon_index ait la bonne valeur |
|
| 733 | - // cf critere_doublon |
|
| 734 | - if ($doublons) { |
|
| 735 | - $args = array_merge($args, $doublons); |
|
| 736 | - } |
|
| 737 | - |
|
| 738 | - // Si erreur, laisser la chaine dans ce champ pour le HTTP 503 |
|
| 739 | - if (!$err_ci) { |
|
| 740 | - $result->criteres = $args; |
|
| 741 | - } |
|
| 574 | + $err_ci = ''; // indiquera s'il y a eu une erreur |
|
| 575 | + $args = array(); |
|
| 576 | + $type = $result->type_requete; |
|
| 577 | + $doublons = array(); |
|
| 578 | + foreach ($params as $v) { |
|
| 579 | + $var = $v[1][0]; |
|
| 580 | + $param = ($var->type != 'texte') ? "" : $var->texte; |
|
| 581 | + if ((count($v) > 2) && (!preg_match(",[^A-Za-z]IN[^A-Za-z],i", $param))) { |
|
| 582 | + // plus d'un argument et pas le critere IN: |
|
| 583 | + // detecter comme on peut si c'est le critere implicite LIMIT debut, fin |
|
| 584 | + if ($var->type != 'texte' |
|
| 585 | + or preg_match("/^(n|n-|(n-)?\d+)$/S", $param) |
|
| 586 | + ) { |
|
| 587 | + $op = ','; |
|
| 588 | + $not = ""; |
|
| 589 | + $cond = false; |
|
| 590 | + } else { |
|
| 591 | + // Le debut du premier argument est l'operateur |
|
| 592 | + preg_match("/^([!]?)([a-zA-Z][a-zA-Z0-9_]*)[[:space:]]*(\??)[[:space:]]*(.*)$/ms", $param, $m); |
|
| 593 | + $op = $m[2]; |
|
| 594 | + $not = $m[1]; |
|
| 595 | + $cond = $m[3]; |
|
| 596 | + // virer le premier argument, |
|
| 597 | + // et mettre son reliquat eventuel |
|
| 598 | + // Recopier pour ne pas alterer le texte source |
|
| 599 | + // utile au debusqueur |
|
| 600 | + if ($m[4]) { |
|
| 601 | + // une maniere tres sale de supprimer les "' autour de {critere "xxx","yyy"} |
|
| 602 | + if (preg_match(',^(["\'])(.*)\1$,', $m[4])) { |
|
| 603 | + $c = null; |
|
| 604 | + eval('$c = ' . $m[4] . ';'); |
|
| 605 | + if (isset($c)) { |
|
| 606 | + $m[4] = $c; |
|
| 607 | + } |
|
| 608 | + } |
|
| 609 | + $texte = new Texte; |
|
| 610 | + $texte->texte = $m[4]; |
|
| 611 | + $v[1][0] = $texte; |
|
| 612 | + } else { |
|
| 613 | + array_shift($v[1]); |
|
| 614 | + } |
|
| 615 | + } |
|
| 616 | + array_shift($v); // $v[O] est vide |
|
| 617 | + $crit = new Critere; |
|
| 618 | + $crit->op = $op; |
|
| 619 | + $crit->not = $not; |
|
| 620 | + $crit->cond = $cond; |
|
| 621 | + $crit->exclus = ""; |
|
| 622 | + $crit->param = $v; |
|
| 623 | + $args[] = $crit; |
|
| 624 | + } else { |
|
| 625 | + if ($var->type != 'texte') { |
|
| 626 | + // cas 1 seul arg ne commencant pas par du texte brut: |
|
| 627 | + // erreur ou critere infixe "/" |
|
| 628 | + if (($v[1][1]->type != 'texte') || (trim($v[1][1]->texte) != '/')) { |
|
| 629 | + $err_ci = array( |
|
| 630 | + 'zbug_critere_inconnu', |
|
| 631 | + array('critere' => $var->nom_champ) |
|
| 632 | + ); |
|
| 633 | + erreur_squelette($err_ci, $result); |
|
| 634 | + } else { |
|
| 635 | + $crit = new Critere; |
|
| 636 | + $crit->op = '/'; |
|
| 637 | + $crit->not = ""; |
|
| 638 | + $crit->exclus = ""; |
|
| 639 | + $crit->param = array(array($v[1][0]), array($v[1][2])); |
|
| 640 | + $args[] = $crit; |
|
| 641 | + } |
|
| 642 | + } else { |
|
| 643 | + // traiter qq lexemes particuliers pour faciliter la suite |
|
| 644 | + // les separateurs |
|
| 645 | + if ($var->apres) { |
|
| 646 | + $result->separateur[] = $param; |
|
| 647 | + } elseif (($param == 'tout') or ($param == 'tous')) { |
|
| 648 | + $result->modificateur['tout'] = true; |
|
| 649 | + } elseif ($param == 'plat') { |
|
| 650 | + $result->modificateur['plat'] = true; |
|
| 651 | + } |
|
| 652 | + |
|
| 653 | + // Boucle hierarchie, analyser le critere id_rubrique |
|
| 654 | + // et les autres critères {id_x} pour forcer {tout} sur |
|
| 655 | + // ceux-ci pour avoir la rubrique mere... |
|
| 656 | + // Les autres critères de la boucle hierarchie doivent être |
|
| 657 | + // traités normalement. |
|
| 658 | + elseif (strcasecmp($type, 'hierarchie') == 0 |
|
| 659 | + and !preg_match(",^id_rubrique\b,", $param) |
|
| 660 | + and preg_match(",^id_\w+\s*$,", $param) |
|
| 661 | + ) { |
|
| 662 | + $result->modificateur['tout'] = true; |
|
| 663 | + } elseif (strcasecmp($type, 'hierarchie') == 0 and $param == "id_rubrique") { |
|
| 664 | + // rien a faire sur {id_rubrique} tout seul |
|
| 665 | + } else { |
|
| 666 | + // pas d'emplacement statique, faut un dynamique |
|
| 667 | + // mais il y a 2 cas qui ont les 2 ! |
|
| 668 | + if (($param == 'unique') || (preg_match(',^!?doublons *,', $param))) { |
|
| 669 | + // cette variable sera inseree dans le code |
|
| 670 | + // et son nom sert d'indicateur des maintenant |
|
| 671 | + $result->doublons = '$doublons_index'; |
|
| 672 | + if ($param == 'unique') { |
|
| 673 | + $param = 'doublons'; |
|
| 674 | + } |
|
| 675 | + } elseif ($param == 'recherche') { |
|
| 676 | + // meme chose (a cause de #nom_de_boucle:URL_*) |
|
| 677 | + $result->hash = ' '; |
|
| 678 | + } |
|
| 679 | + |
|
| 680 | + if (preg_match(',^ *([0-9-]+) *(/) *(.+) *$,', $param, $m)) { |
|
| 681 | + $crit = phraser_critere_infixe($m[1], $m[3], $v, '/', '', ''); |
|
| 682 | + } elseif (preg_match(',^([!]?)(' . CHAMP_SQL_PLUS_FONC . |
|
| 683 | + ')[[:space:]]*(\??)(!?)(<=?|>=?|==?|\b(?:IN|LIKE)\b)(.*)$,is', $param, $m)) { |
|
| 684 | + $a2 = trim($m[8]); |
|
| 685 | + if ($a2 and ($a2[0] == "'" or $a2[0] == '"') and ($a2[0] == substr($a2, -1))) { |
|
| 686 | + $a2 = substr($a2, 1, -1); |
|
| 687 | + } |
|
| 688 | + $crit = phraser_critere_infixe($m[2], $a2, $v, |
|
| 689 | + (($m[2] == 'lang_select') ? $m[2] : $m[7]), |
|
| 690 | + $m[6], $m[5]); |
|
| 691 | + $crit->exclus = $m[1]; |
|
| 692 | + } elseif (preg_match("/^([!]?)\s*(" . |
|
| 693 | + CHAMP_SQL_PLUS_FONC . |
|
| 694 | + ")\s*(\??)(.*)$/is", $param, $m)) { |
|
| 695 | + // contient aussi les comparaisons implicites ! |
|
| 696 | + // Comme ci-dessus: |
|
| 697 | + // le premier arg contient l'operateur |
|
| 698 | + array_shift($v); |
|
| 699 | + if ($m[6]) { |
|
| 700 | + $v[0][0] = new Texte; |
|
| 701 | + $v[0][0]->texte = $m[6]; |
|
| 702 | + } else { |
|
| 703 | + array_shift($v[0]); |
|
| 704 | + if (!$v[0]) { |
|
| 705 | + array_shift($v); |
|
| 706 | + } |
|
| 707 | + } |
|
| 708 | + $crit = new Critere; |
|
| 709 | + $crit->op = $m[2]; |
|
| 710 | + $crit->param = $v; |
|
| 711 | + $crit->not = $m[1]; |
|
| 712 | + $crit->cond = $m[5]; |
|
| 713 | + } else { |
|
| 714 | + $err_ci = array( |
|
| 715 | + 'zbug_critere_inconnu', |
|
| 716 | + array('critere' => $param) |
|
| 717 | + ); |
|
| 718 | + erreur_squelette($err_ci, $result); |
|
| 719 | + } |
|
| 720 | + |
|
| 721 | + if ((!preg_match(',^!?doublons *,', $param)) || $crit->not) { |
|
| 722 | + $args[] = $crit; |
|
| 723 | + } else { |
|
| 724 | + $doublons[] = $crit; |
|
| 725 | + } |
|
| 726 | + } |
|
| 727 | + } |
|
| 728 | + } |
|
| 729 | + } |
|
| 730 | + |
|
| 731 | + // les doublons non nies doivent etre le dernier critere |
|
| 732 | + // pour que la variable $doublon_index ait la bonne valeur |
|
| 733 | + // cf critere_doublon |
|
| 734 | + if ($doublons) { |
|
| 735 | + $args = array_merge($args, $doublons); |
|
| 736 | + } |
|
| 737 | + |
|
| 738 | + // Si erreur, laisser la chaine dans ce champ pour le HTTP 503 |
|
| 739 | + if (!$err_ci) { |
|
| 740 | + $result->criteres = $args; |
|
| 741 | + } |
|
| 742 | 742 | } |
| 743 | 743 | |
| 744 | 744 | // http://code.spip.net/@phraser_critere_infixe |
| 745 | 745 | function phraser_critere_infixe($arg1, $arg2, $args, $op, $not, $cond) { |
| 746 | - $args[0] = new Texte; |
|
| 747 | - $args[0]->texte = $arg1; |
|
| 748 | - $args[0] = array($args[0]); |
|
| 749 | - $args[1][0] = new Texte; |
|
| 750 | - $args[1][0]->texte = $arg2; |
|
| 751 | - $crit = new Critere; |
|
| 752 | - $crit->op = $op; |
|
| 753 | - $crit->not = $not; |
|
| 754 | - $crit->cond = $cond; |
|
| 755 | - $crit->param = $args; |
|
| 756 | - |
|
| 757 | - return $crit; |
|
| 746 | + $args[0] = new Texte; |
|
| 747 | + $args[0]->texte = $arg1; |
|
| 748 | + $args[0] = array($args[0]); |
|
| 749 | + $args[1][0] = new Texte; |
|
| 750 | + $args[1][0]->texte = $arg2; |
|
| 751 | + $crit = new Critere; |
|
| 752 | + $crit->op = $op; |
|
| 753 | + $crit->not = $not; |
|
| 754 | + $crit->cond = $cond; |
|
| 755 | + $crit->param = $args; |
|
| 756 | + |
|
| 757 | + return $crit; |
|
| 758 | 758 | } |
| 759 | 759 | |
| 760 | 760 | function public_phraser_html_dist($texte, $id_parent, &$boucles, $descr, $ligne = 1) { |
| 761 | 761 | |
| 762 | - $all_res = array(); |
|
| 762 | + $all_res = array(); |
|
| 763 | 763 | |
| 764 | - while (($pos_boucle = strpos($texte, BALISE_BOUCLE)) !== false) { |
|
| 764 | + while (($pos_boucle = strpos($texte, BALISE_BOUCLE)) !== false) { |
|
| 765 | 765 | |
| 766 | - $err_b = ''; // indiquera s'il y a eu une erreur |
|
| 767 | - $result = new Boucle; |
|
| 768 | - $result->id_parent = $id_parent; |
|
| 769 | - $result->descr = $descr; |
|
| 766 | + $err_b = ''; // indiquera s'il y a eu une erreur |
|
| 767 | + $result = new Boucle; |
|
| 768 | + $result->id_parent = $id_parent; |
|
| 769 | + $result->descr = $descr; |
|
| 770 | 770 | # attention: reperer la premiere des 2 balises: pre_boucle ou boucle |
| 771 | 771 | |
| 772 | - if (!preg_match("," . BALISE_PRE_BOUCLE . '[0-9_],', $texte, $r) |
|
| 773 | - or ($n = strpos($texte, $r[0])) === false |
|
| 774 | - or ($n > $pos_boucle) |
|
| 775 | - ) { |
|
| 776 | - $debut = substr($texte, 0, $pos_boucle); |
|
| 777 | - $milieu = substr($texte, $pos_boucle); |
|
| 778 | - $k = strpos($milieu, '('); |
|
| 779 | - $id_boucle = trim(substr($milieu, |
|
| 780 | - strlen(BALISE_BOUCLE), |
|
| 781 | - $k - strlen(BALISE_BOUCLE))); |
|
| 782 | - $milieu = substr($milieu, $k); |
|
| 783 | - |
|
| 784 | - } else { |
|
| 785 | - $debut = substr($texte, 0, $n); |
|
| 786 | - $milieu = substr($texte, $n); |
|
| 787 | - $k = strpos($milieu, '>'); |
|
| 788 | - $id_boucle = substr($milieu, |
|
| 789 | - strlen(BALISE_PRE_BOUCLE), |
|
| 790 | - $k - strlen(BALISE_PRE_BOUCLE)); |
|
| 791 | - |
|
| 792 | - if (!preg_match("," . BALISE_BOUCLE . $id_boucle . "[[:space:]]*\(,", $milieu, $r)) { |
|
| 793 | - $err_b = array('zbug_erreur_boucle_syntaxe', array('id' => $id_boucle)); |
|
| 794 | - erreur_squelette($err_b, $result); |
|
| 795 | - $texte = substr($texte, $n + 1); |
|
| 796 | - continue; |
|
| 797 | - } else { |
|
| 798 | - $pos_boucle = $n; |
|
| 799 | - $n = strpos($milieu, $r[0]); |
|
| 800 | - $result->avant = substr($milieu, $k + 1, $n - $k - 1); |
|
| 801 | - $milieu = substr($milieu, $n + strlen($id_boucle) + strlen(BALISE_BOUCLE)); |
|
| 802 | - } |
|
| 803 | - } |
|
| 804 | - $result->id_boucle = $id_boucle; |
|
| 805 | - |
|
| 806 | - preg_match(SPEC_BOUCLE, $milieu, $match); |
|
| 807 | - $result->type_requete = $match[0]; |
|
| 808 | - $milieu = substr($milieu, strlen($match[0])); |
|
| 809 | - $type = $match[1]; |
|
| 810 | - $jointures = trim($match[2]); |
|
| 811 | - $table_optionnelle = ($match[3]); |
|
| 812 | - if ($jointures) { |
|
| 813 | - // on affecte pas ici les jointures explicites, mais dans la compilation |
|
| 814 | - // ou elles seront completees des jointures declarees |
|
| 815 | - $result->jointures_explicites = $jointures; |
|
| 816 | - } |
|
| 817 | - |
|
| 818 | - if ($table_optionnelle) { |
|
| 819 | - $result->table_optionnelle = $type; |
|
| 820 | - } |
|
| 821 | - |
|
| 822 | - // 1ere passe sur les criteres, vu comme des arguments sans fct |
|
| 823 | - // Resultat mis dans result->param |
|
| 824 | - phraser_args($milieu, "/>", "", $all_res, $result); |
|
| 825 | - |
|
| 826 | - // En 2e passe result->criteres contiendra un tableau |
|
| 827 | - // pour l'instant on met le source (chaine) : |
|
| 828 | - // si elle reste ici au final, c'est qu'elle contient une erreur |
|
| 829 | - $result->criteres = substr($milieu, 0, @strpos($milieu, $result->apres)); |
|
| 830 | - $milieu = $result->apres; |
|
| 831 | - $result->apres = ""; |
|
| 832 | - |
|
| 833 | - // |
|
| 834 | - // Recuperer la fin : |
|
| 835 | - // |
|
| 836 | - if ($milieu[0] === '/') { |
|
| 837 | - $suite = substr($milieu, 2); |
|
| 838 | - $milieu = ''; |
|
| 839 | - } else { |
|
| 840 | - $milieu = substr($milieu, 1); |
|
| 841 | - $s = BALISE_FIN_BOUCLE . $id_boucle . ">"; |
|
| 842 | - $p = strpos($milieu, $s); |
|
| 843 | - if ($p === false) { |
|
| 844 | - $err_b = array( |
|
| 845 | - 'zbug_erreur_boucle_fermant', |
|
| 846 | - array('id' => $id_boucle) |
|
| 847 | - ); |
|
| 848 | - erreur_squelette($err_b, $result); |
|
| 849 | - } |
|
| 850 | - |
|
| 851 | - $suite = substr($milieu, $p + strlen($s)); |
|
| 852 | - $milieu = substr($milieu, 0, $p); |
|
| 853 | - } |
|
| 854 | - |
|
| 855 | - $result->milieu = $milieu; |
|
| 856 | - |
|
| 857 | - // |
|
| 858 | - // 1. Recuperer la partie conditionnelle apres |
|
| 859 | - // |
|
| 860 | - $s = BALISE_POST_BOUCLE . $id_boucle . ">"; |
|
| 861 | - $p = strpos($suite, $s); |
|
| 862 | - if ($p !== false) { |
|
| 863 | - $result->apres = substr($suite, 0, $p); |
|
| 864 | - $suite = substr($suite, $p + strlen($s)); |
|
| 865 | - } |
|
| 866 | - |
|
| 867 | - // |
|
| 868 | - // 2. Recuperer la partie alternative |
|
| 869 | - // |
|
| 870 | - $s = BALISE_ALT_BOUCLE . $id_boucle . ">"; |
|
| 871 | - $p = strpos($suite, $s); |
|
| 872 | - if ($p !== false) { |
|
| 873 | - $result->altern = substr($suite, 0, $p); |
|
| 874 | - $suite = substr($suite, $p + strlen($s)); |
|
| 875 | - } |
|
| 876 | - $result->ligne = $ligne + substr_count($debut, "\n"); |
|
| 877 | - $m = substr_count($milieu, "\n"); |
|
| 878 | - $b = substr_count($result->avant, "\n"); |
|
| 879 | - $a = substr_count($result->apres, "\n"); |
|
| 880 | - |
|
| 881 | - if ($p = strpos($type, ':')) { |
|
| 882 | - $result->sql_serveur = substr($type, 0, $p); |
|
| 883 | - $type = substr($type, $p + 1); |
|
| 884 | - } |
|
| 885 | - $soustype = strtolower($type); |
|
| 886 | - |
|
| 887 | - if (!isset($GLOBALS["table_des_tables"][$soustype])) { |
|
| 888 | - $soustype = $type; |
|
| 889 | - } |
|
| 890 | - |
|
| 891 | - $result->type_requete = $soustype; |
|
| 892 | - // Lancer la 2e passe sur les criteres si la 1ere etait bonne |
|
| 893 | - if (!is_array($result->param)) { |
|
| 894 | - $err_b = true; |
|
| 895 | - } else { |
|
| 896 | - phraser_criteres($result->param, $result); |
|
| 897 | - if (strncasecmp($soustype, TYPE_RECURSIF, strlen(TYPE_RECURSIF)) == 0) { |
|
| 898 | - $result->type_requete = TYPE_RECURSIF; |
|
| 899 | - $args = $result->param; |
|
| 900 | - array_unshift($args, |
|
| 901 | - substr($type, strlen(TYPE_RECURSIF))); |
|
| 902 | - $result->param = $args; |
|
| 903 | - } |
|
| 904 | - } |
|
| 905 | - |
|
| 906 | - $descr['id_mere_contexte'] = $id_boucle; |
|
| 907 | - $result->milieu = public_phraser_html_dist($milieu, $id_boucle, $boucles, $descr, $result->ligne + $b); |
|
| 908 | - // reserver la place dans la pile des boucles pour compiler ensuite dans le bon ordre |
|
| 909 | - // ie les boucles qui apparaissent dans les partie conditionnelles doivent etre compilees apres cette boucle |
|
| 910 | - $boucles[$id_boucle] = null; |
|
| 911 | - $result->avant = public_phraser_html_dist($result->avant, $id_parent, $boucles, $descr, $result->ligne); |
|
| 912 | - $result->apres = public_phraser_html_dist($result->apres, $id_parent, $boucles, $descr, $result->ligne + $b + $m); |
|
| 913 | - $result->altern = public_phraser_html_dist($result->altern, $id_parent, $boucles, $descr, $result->ligne + $a + $m + $b); |
|
| 914 | - |
|
| 915 | - // Prevenir le generateur de code que le squelette est faux |
|
| 916 | - if ($err_b) { |
|
| 917 | - $result->type_requete = false; |
|
| 918 | - } |
|
| 919 | - |
|
| 920 | - // Verifier qu'il n'y a pas double definition |
|
| 921 | - // apres analyse des sous-parties (pas avant). |
|
| 922 | - |
|
| 923 | - if (!empty($boucles[$id_boucle])) { |
|
| 924 | - $err_b_d = array( |
|
| 925 | - 'zbug_erreur_boucle_double', |
|
| 926 | - array('id' => $id_boucle) |
|
| 927 | - ); |
|
| 928 | - erreur_squelette($err_b_d, $result); |
|
| 929 | - // Prevenir le generateur de code que le squelette est faux |
|
| 930 | - $boucles[$id_boucle]->type_requete = false; |
|
| 931 | - } else { |
|
| 932 | - $boucles[$id_boucle] = $result; |
|
| 933 | - } |
|
| 934 | - $all_res = phraser_champs_etendus($debut, $ligne, $all_res); |
|
| 935 | - $all_res[] = &$boucles[$id_boucle]; |
|
| 936 | - if (!empty($suite)) { |
|
| 937 | - $ligne += substr_count(substr($texte, 0, strpos($texte, $suite)), "\n"); |
|
| 938 | - } |
|
| 939 | - $texte = $suite; |
|
| 940 | - } |
|
| 941 | - |
|
| 942 | - return phraser_champs_etendus($texte, $ligne, $all_res); |
|
| 772 | + if (!preg_match("," . BALISE_PRE_BOUCLE . '[0-9_],', $texte, $r) |
|
| 773 | + or ($n = strpos($texte, $r[0])) === false |
|
| 774 | + or ($n > $pos_boucle) |
|
| 775 | + ) { |
|
| 776 | + $debut = substr($texte, 0, $pos_boucle); |
|
| 777 | + $milieu = substr($texte, $pos_boucle); |
|
| 778 | + $k = strpos($milieu, '('); |
|
| 779 | + $id_boucle = trim(substr($milieu, |
|
| 780 | + strlen(BALISE_BOUCLE), |
|
| 781 | + $k - strlen(BALISE_BOUCLE))); |
|
| 782 | + $milieu = substr($milieu, $k); |
|
| 783 | + |
|
| 784 | + } else { |
|
| 785 | + $debut = substr($texte, 0, $n); |
|
| 786 | + $milieu = substr($texte, $n); |
|
| 787 | + $k = strpos($milieu, '>'); |
|
| 788 | + $id_boucle = substr($milieu, |
|
| 789 | + strlen(BALISE_PRE_BOUCLE), |
|
| 790 | + $k - strlen(BALISE_PRE_BOUCLE)); |
|
| 791 | + |
|
| 792 | + if (!preg_match("," . BALISE_BOUCLE . $id_boucle . "[[:space:]]*\(,", $milieu, $r)) { |
|
| 793 | + $err_b = array('zbug_erreur_boucle_syntaxe', array('id' => $id_boucle)); |
|
| 794 | + erreur_squelette($err_b, $result); |
|
| 795 | + $texte = substr($texte, $n + 1); |
|
| 796 | + continue; |
|
| 797 | + } else { |
|
| 798 | + $pos_boucle = $n; |
|
| 799 | + $n = strpos($milieu, $r[0]); |
|
| 800 | + $result->avant = substr($milieu, $k + 1, $n - $k - 1); |
|
| 801 | + $milieu = substr($milieu, $n + strlen($id_boucle) + strlen(BALISE_BOUCLE)); |
|
| 802 | + } |
|
| 803 | + } |
|
| 804 | + $result->id_boucle = $id_boucle; |
|
| 805 | + |
|
| 806 | + preg_match(SPEC_BOUCLE, $milieu, $match); |
|
| 807 | + $result->type_requete = $match[0]; |
|
| 808 | + $milieu = substr($milieu, strlen($match[0])); |
|
| 809 | + $type = $match[1]; |
|
| 810 | + $jointures = trim($match[2]); |
|
| 811 | + $table_optionnelle = ($match[3]); |
|
| 812 | + if ($jointures) { |
|
| 813 | + // on affecte pas ici les jointures explicites, mais dans la compilation |
|
| 814 | + // ou elles seront completees des jointures declarees |
|
| 815 | + $result->jointures_explicites = $jointures; |
|
| 816 | + } |
|
| 817 | + |
|
| 818 | + if ($table_optionnelle) { |
|
| 819 | + $result->table_optionnelle = $type; |
|
| 820 | + } |
|
| 821 | + |
|
| 822 | + // 1ere passe sur les criteres, vu comme des arguments sans fct |
|
| 823 | + // Resultat mis dans result->param |
|
| 824 | + phraser_args($milieu, "/>", "", $all_res, $result); |
|
| 825 | + |
|
| 826 | + // En 2e passe result->criteres contiendra un tableau |
|
| 827 | + // pour l'instant on met le source (chaine) : |
|
| 828 | + // si elle reste ici au final, c'est qu'elle contient une erreur |
|
| 829 | + $result->criteres = substr($milieu, 0, @strpos($milieu, $result->apres)); |
|
| 830 | + $milieu = $result->apres; |
|
| 831 | + $result->apres = ""; |
|
| 832 | + |
|
| 833 | + // |
|
| 834 | + // Recuperer la fin : |
|
| 835 | + // |
|
| 836 | + if ($milieu[0] === '/') { |
|
| 837 | + $suite = substr($milieu, 2); |
|
| 838 | + $milieu = ''; |
|
| 839 | + } else { |
|
| 840 | + $milieu = substr($milieu, 1); |
|
| 841 | + $s = BALISE_FIN_BOUCLE . $id_boucle . ">"; |
|
| 842 | + $p = strpos($milieu, $s); |
|
| 843 | + if ($p === false) { |
|
| 844 | + $err_b = array( |
|
| 845 | + 'zbug_erreur_boucle_fermant', |
|
| 846 | + array('id' => $id_boucle) |
|
| 847 | + ); |
|
| 848 | + erreur_squelette($err_b, $result); |
|
| 849 | + } |
|
| 850 | + |
|
| 851 | + $suite = substr($milieu, $p + strlen($s)); |
|
| 852 | + $milieu = substr($milieu, 0, $p); |
|
| 853 | + } |
|
| 854 | + |
|
| 855 | + $result->milieu = $milieu; |
|
| 856 | + |
|
| 857 | + // |
|
| 858 | + // 1. Recuperer la partie conditionnelle apres |
|
| 859 | + // |
|
| 860 | + $s = BALISE_POST_BOUCLE . $id_boucle . ">"; |
|
| 861 | + $p = strpos($suite, $s); |
|
| 862 | + if ($p !== false) { |
|
| 863 | + $result->apres = substr($suite, 0, $p); |
|
| 864 | + $suite = substr($suite, $p + strlen($s)); |
|
| 865 | + } |
|
| 866 | + |
|
| 867 | + // |
|
| 868 | + // 2. Recuperer la partie alternative |
|
| 869 | + // |
|
| 870 | + $s = BALISE_ALT_BOUCLE . $id_boucle . ">"; |
|
| 871 | + $p = strpos($suite, $s); |
|
| 872 | + if ($p !== false) { |
|
| 873 | + $result->altern = substr($suite, 0, $p); |
|
| 874 | + $suite = substr($suite, $p + strlen($s)); |
|
| 875 | + } |
|
| 876 | + $result->ligne = $ligne + substr_count($debut, "\n"); |
|
| 877 | + $m = substr_count($milieu, "\n"); |
|
| 878 | + $b = substr_count($result->avant, "\n"); |
|
| 879 | + $a = substr_count($result->apres, "\n"); |
|
| 880 | + |
|
| 881 | + if ($p = strpos($type, ':')) { |
|
| 882 | + $result->sql_serveur = substr($type, 0, $p); |
|
| 883 | + $type = substr($type, $p + 1); |
|
| 884 | + } |
|
| 885 | + $soustype = strtolower($type); |
|
| 886 | + |
|
| 887 | + if (!isset($GLOBALS["table_des_tables"][$soustype])) { |
|
| 888 | + $soustype = $type; |
|
| 889 | + } |
|
| 890 | + |
|
| 891 | + $result->type_requete = $soustype; |
|
| 892 | + // Lancer la 2e passe sur les criteres si la 1ere etait bonne |
|
| 893 | + if (!is_array($result->param)) { |
|
| 894 | + $err_b = true; |
|
| 895 | + } else { |
|
| 896 | + phraser_criteres($result->param, $result); |
|
| 897 | + if (strncasecmp($soustype, TYPE_RECURSIF, strlen(TYPE_RECURSIF)) == 0) { |
|
| 898 | + $result->type_requete = TYPE_RECURSIF; |
|
| 899 | + $args = $result->param; |
|
| 900 | + array_unshift($args, |
|
| 901 | + substr($type, strlen(TYPE_RECURSIF))); |
|
| 902 | + $result->param = $args; |
|
| 903 | + } |
|
| 904 | + } |
|
| 905 | + |
|
| 906 | + $descr['id_mere_contexte'] = $id_boucle; |
|
| 907 | + $result->milieu = public_phraser_html_dist($milieu, $id_boucle, $boucles, $descr, $result->ligne + $b); |
|
| 908 | + // reserver la place dans la pile des boucles pour compiler ensuite dans le bon ordre |
|
| 909 | + // ie les boucles qui apparaissent dans les partie conditionnelles doivent etre compilees apres cette boucle |
|
| 910 | + $boucles[$id_boucle] = null; |
|
| 911 | + $result->avant = public_phraser_html_dist($result->avant, $id_parent, $boucles, $descr, $result->ligne); |
|
| 912 | + $result->apres = public_phraser_html_dist($result->apres, $id_parent, $boucles, $descr, $result->ligne + $b + $m); |
|
| 913 | + $result->altern = public_phraser_html_dist($result->altern, $id_parent, $boucles, $descr, $result->ligne + $a + $m + $b); |
|
| 914 | + |
|
| 915 | + // Prevenir le generateur de code que le squelette est faux |
|
| 916 | + if ($err_b) { |
|
| 917 | + $result->type_requete = false; |
|
| 918 | + } |
|
| 919 | + |
|
| 920 | + // Verifier qu'il n'y a pas double definition |
|
| 921 | + // apres analyse des sous-parties (pas avant). |
|
| 922 | + |
|
| 923 | + if (!empty($boucles[$id_boucle])) { |
|
| 924 | + $err_b_d = array( |
|
| 925 | + 'zbug_erreur_boucle_double', |
|
| 926 | + array('id' => $id_boucle) |
|
| 927 | + ); |
|
| 928 | + erreur_squelette($err_b_d, $result); |
|
| 929 | + // Prevenir le generateur de code que le squelette est faux |
|
| 930 | + $boucles[$id_boucle]->type_requete = false; |
|
| 931 | + } else { |
|
| 932 | + $boucles[$id_boucle] = $result; |
|
| 933 | + } |
|
| 934 | + $all_res = phraser_champs_etendus($debut, $ligne, $all_res); |
|
| 935 | + $all_res[] = &$boucles[$id_boucle]; |
|
| 936 | + if (!empty($suite)) { |
|
| 937 | + $ligne += substr_count(substr($texte, 0, strpos($texte, $suite)), "\n"); |
|
| 938 | + } |
|
| 939 | + $texte = $suite; |
|
| 940 | + } |
|
| 941 | + |
|
| 942 | + return phraser_champs_etendus($texte, $ligne, $all_res); |
|
| 943 | 943 | } |
@@ -17,7 +17,7 @@ discard block |
||
| 17 | 17 | **/ |
| 18 | 18 | |
| 19 | 19 | if (!defined('_ECRIRE_INC_VERSION')) { |
| 20 | - return; |
|
| 20 | + return; |
|
| 21 | 21 | } |
| 22 | 22 | |
| 23 | 23 | /** |
@@ -43,14 +43,14 @@ discard block |
||
| 43 | 43 | **/ |
| 44 | 44 | function critere_racine_dist($idb, &$boucles, $crit) { |
| 45 | 45 | |
| 46 | - $not = $crit->not; |
|
| 47 | - $boucle = &$boucles[$idb]; |
|
| 48 | - $id_parent = isset($GLOBALS['exceptions_des_tables'][$boucle->id_table]['id_parent']) ? |
|
| 49 | - $GLOBALS['exceptions_des_tables'][$boucle->id_table]['id_parent'] : |
|
| 50 | - 'id_parent'; |
|
| 46 | + $not = $crit->not; |
|
| 47 | + $boucle = &$boucles[$idb]; |
|
| 48 | + $id_parent = isset($GLOBALS['exceptions_des_tables'][$boucle->id_table]['id_parent']) ? |
|
| 49 | + $GLOBALS['exceptions_des_tables'][$boucle->id_table]['id_parent'] : |
|
| 50 | + 'id_parent'; |
|
| 51 | 51 | |
| 52 | - $c = array("'='", "'$boucle->id_table." . "$id_parent'", 0); |
|
| 53 | - $boucle->where[] = ($crit->not ? array("'NOT'", $c) : $c); |
|
| 52 | + $c = array("'='", "'$boucle->id_table." . "$id_parent'", 0); |
|
| 53 | + $boucle->where[] = ($crit->not ? array("'NOT'", $c) : $c); |
|
| 54 | 54 | } |
| 55 | 55 | |
| 56 | 56 | |
@@ -67,15 +67,15 @@ discard block |
||
| 67 | 67 | * @return void |
| 68 | 68 | **/ |
| 69 | 69 | function critere_exclus_dist($idb, &$boucles, $crit) { |
| 70 | - $not = $crit->not; |
|
| 71 | - $boucle = &$boucles[$idb]; |
|
| 72 | - $id = $boucle->primary; |
|
| 73 | - |
|
| 74 | - if ($not or !$id) { |
|
| 75 | - return (array('zbug_critere_inconnu', array('critere' => $not . $crit->op))); |
|
| 76 | - } |
|
| 77 | - $arg = kwote(calculer_argument_precedent($idb, $id, $boucles)); |
|
| 78 | - $boucle->where[] = array("'!='", "'$boucle->id_table." . "$id'", $arg); |
|
| 70 | + $not = $crit->not; |
|
| 71 | + $boucle = &$boucles[$idb]; |
|
| 72 | + $id = $boucle->primary; |
|
| 73 | + |
|
| 74 | + if ($not or !$id) { |
|
| 75 | + return (array('zbug_critere_inconnu', array('critere' => $not . $crit->op))); |
|
| 76 | + } |
|
| 77 | + $arg = kwote(calculer_argument_precedent($idb, $id, $boucles)); |
|
| 78 | + $boucle->where[] = array("'!='", "'$boucle->id_table." . "$id'", $arg); |
|
| 79 | 79 | } |
| 80 | 80 | |
| 81 | 81 | |
@@ -95,73 +95,73 @@ discard block |
||
| 95 | 95 | * @return void |
| 96 | 96 | **/ |
| 97 | 97 | function critere_doublons_dist($idb, &$boucles, $crit) { |
| 98 | - $boucle = &$boucles[$idb]; |
|
| 99 | - $primary = $boucle->primary; |
|
| 100 | - |
|
| 101 | - // la table nécessite une clé primaire, non composée |
|
| 102 | - if (!$primary or strpos($primary, ',')) { |
|
| 103 | - return (array('zbug_doublon_sur_table_sans_cle_primaire')); |
|
| 104 | - } |
|
| 105 | - |
|
| 106 | - $not = ($crit->not ? '' : 'NOT'); |
|
| 107 | - |
|
| 108 | - // le doublon s'applique sur un type de boucle (article) |
|
| 109 | - $nom = "'" . $boucle->type_requete . "'"; |
|
| 110 | - |
|
| 111 | - // compléter le nom avec un nom précisé {doublons nom} |
|
| 112 | - // on obtient $nom = "'article' . 'nom'" |
|
| 113 | - if (isset($crit->param[0])) { |
|
| 114 | - $nom .= "." . calculer_liste($crit->param[0], $idb, $boucles, $boucles[$idb]->id_parent); |
|
| 115 | - } |
|
| 116 | - |
|
| 117 | - // code qui déclarera l'index du stockage de nos doublons (pour éviter une notice PHP) |
|
| 118 | - $init_comment = "\n\n\t// Initialise le(s) critère(s) doublons\n"; |
|
| 119 | - $init_code = "\tif (!isset(\$doublons[\$d = $nom])) { \$doublons[\$d] = ''; }\n"; |
|
| 120 | - |
|
| 121 | - // on crée un sql_in avec la clé primaire de la table |
|
| 122 | - // et la collection des doublons déjà emmagasinés dans le tableau |
|
| 123 | - // $doublons et son index, ici $nom |
|
| 124 | - |
|
| 125 | - // debut du code "sql_in('articles.id_article', " |
|
| 126 | - $debut_in = "sql_in('" . $boucle->id_table . '.' . $primary . "', "; |
|
| 127 | - // lecture des données du doublon "$doublons[$doublon_index[] = " |
|
| 128 | - // Attention : boucle->doublons désigne une variable qu'on affecte |
|
| 129 | - $debut_doub = '$doublons[' . (!$not ? '' : ($boucle->doublons . "[]= ")); |
|
| 130 | - |
|
| 131 | - // le debut complet du code des doublons |
|
| 132 | - $debut_doub = $debut_in . $debut_doub; |
|
| 133 | - |
|
| 134 | - // nom du doublon "('article' . 'nom')]" |
|
| 135 | - $fin_doub = "($nom)]"; |
|
| 136 | - |
|
| 137 | - // si on trouve un autre critère doublon, |
|
| 138 | - // on fusionne pour avoir un seul IN, et on s'en va ! |
|
| 139 | - foreach ($boucle->where as $k => $w) { |
|
| 140 | - if (strpos($w[0], $debut_doub) === 0) { |
|
| 141 | - // fusionner le sql_in (du where) |
|
| 142 | - $boucle->where[$k][0] = $debut_doub . $fin_doub . ' . ' . substr($w[0], strlen($debut_in)); |
|
| 143 | - // fusionner l'initialisation (du hash) pour faire plus joli |
|
| 144 | - $x = strpos($boucle->hash, $init_comment); |
|
| 145 | - $len = strlen($init_comment); |
|
| 146 | - $boucle->hash = |
|
| 147 | - substr($boucle->hash, 0, $x + $len) . $init_code . substr($boucle->hash, $x + $len); |
|
| 148 | - |
|
| 149 | - return; |
|
| 150 | - } |
|
| 151 | - } |
|
| 152 | - |
|
| 153 | - // mettre l'ensemble dans un tableau pour que ce ne soit pas vu comme une constante |
|
| 154 | - $boucle->where[] = array($debut_doub . $fin_doub . ", '" . $not . "')"); |
|
| 155 | - |
|
| 156 | - // déclarer le doublon s'il n'existe pas encore |
|
| 157 | - $boucle->hash .= $init_comment . $init_code; |
|
| 158 | - |
|
| 159 | - |
|
| 160 | - # la ligne suivante avait l'intention d'eviter une collecte deja faite |
|
| 161 | - # mais elle fait planter une boucle a 2 critere doublons: |
|
| 162 | - # {!doublons A}{doublons B} |
|
| 163 | - # (de http://article.gmane.org/gmane.comp.web.spip.devel/31034) |
|
| 164 | - # if ($crit->not) $boucle->doublons = ""; |
|
| 98 | + $boucle = &$boucles[$idb]; |
|
| 99 | + $primary = $boucle->primary; |
|
| 100 | + |
|
| 101 | + // la table nécessite une clé primaire, non composée |
|
| 102 | + if (!$primary or strpos($primary, ',')) { |
|
| 103 | + return (array('zbug_doublon_sur_table_sans_cle_primaire')); |
|
| 104 | + } |
|
| 105 | + |
|
| 106 | + $not = ($crit->not ? '' : 'NOT'); |
|
| 107 | + |
|
| 108 | + // le doublon s'applique sur un type de boucle (article) |
|
| 109 | + $nom = "'" . $boucle->type_requete . "'"; |
|
| 110 | + |
|
| 111 | + // compléter le nom avec un nom précisé {doublons nom} |
|
| 112 | + // on obtient $nom = "'article' . 'nom'" |
|
| 113 | + if (isset($crit->param[0])) { |
|
| 114 | + $nom .= "." . calculer_liste($crit->param[0], $idb, $boucles, $boucles[$idb]->id_parent); |
|
| 115 | + } |
|
| 116 | + |
|
| 117 | + // code qui déclarera l'index du stockage de nos doublons (pour éviter une notice PHP) |
|
| 118 | + $init_comment = "\n\n\t// Initialise le(s) critère(s) doublons\n"; |
|
| 119 | + $init_code = "\tif (!isset(\$doublons[\$d = $nom])) { \$doublons[\$d] = ''; }\n"; |
|
| 120 | + |
|
| 121 | + // on crée un sql_in avec la clé primaire de la table |
|
| 122 | + // et la collection des doublons déjà emmagasinés dans le tableau |
|
| 123 | + // $doublons et son index, ici $nom |
|
| 124 | + |
|
| 125 | + // debut du code "sql_in('articles.id_article', " |
|
| 126 | + $debut_in = "sql_in('" . $boucle->id_table . '.' . $primary . "', "; |
|
| 127 | + // lecture des données du doublon "$doublons[$doublon_index[] = " |
|
| 128 | + // Attention : boucle->doublons désigne une variable qu'on affecte |
|
| 129 | + $debut_doub = '$doublons[' . (!$not ? '' : ($boucle->doublons . "[]= ")); |
|
| 130 | + |
|
| 131 | + // le debut complet du code des doublons |
|
| 132 | + $debut_doub = $debut_in . $debut_doub; |
|
| 133 | + |
|
| 134 | + // nom du doublon "('article' . 'nom')]" |
|
| 135 | + $fin_doub = "($nom)]"; |
|
| 136 | + |
|
| 137 | + // si on trouve un autre critère doublon, |
|
| 138 | + // on fusionne pour avoir un seul IN, et on s'en va ! |
|
| 139 | + foreach ($boucle->where as $k => $w) { |
|
| 140 | + if (strpos($w[0], $debut_doub) === 0) { |
|
| 141 | + // fusionner le sql_in (du where) |
|
| 142 | + $boucle->where[$k][0] = $debut_doub . $fin_doub . ' . ' . substr($w[0], strlen($debut_in)); |
|
| 143 | + // fusionner l'initialisation (du hash) pour faire plus joli |
|
| 144 | + $x = strpos($boucle->hash, $init_comment); |
|
| 145 | + $len = strlen($init_comment); |
|
| 146 | + $boucle->hash = |
|
| 147 | + substr($boucle->hash, 0, $x + $len) . $init_code . substr($boucle->hash, $x + $len); |
|
| 148 | + |
|
| 149 | + return; |
|
| 150 | + } |
|
| 151 | + } |
|
| 152 | + |
|
| 153 | + // mettre l'ensemble dans un tableau pour que ce ne soit pas vu comme une constante |
|
| 154 | + $boucle->where[] = array($debut_doub . $fin_doub . ", '" . $not . "')"); |
|
| 155 | + |
|
| 156 | + // déclarer le doublon s'il n'existe pas encore |
|
| 157 | + $boucle->hash .= $init_comment . $init_code; |
|
| 158 | + |
|
| 159 | + |
|
| 160 | + # la ligne suivante avait l'intention d'eviter une collecte deja faite |
|
| 161 | + # mais elle fait planter une boucle a 2 critere doublons: |
|
| 162 | + # {!doublons A}{doublons B} |
|
| 163 | + # (de http://article.gmane.org/gmane.comp.web.spip.devel/31034) |
|
| 164 | + # if ($crit->not) $boucle->doublons = ""; |
|
| 165 | 165 | } |
| 166 | 166 | |
| 167 | 167 | |
@@ -182,14 +182,14 @@ discard block |
||
| 182 | 182 | * @return void |
| 183 | 183 | **/ |
| 184 | 184 | function critere_lang_select_dist($idb, &$boucles, $crit) { |
| 185 | - if (!isset($crit->param[1][0]) or !($param = $crit->param[1][0]->texte)) { |
|
| 186 | - $param = 'oui'; |
|
| 187 | - } |
|
| 188 | - if ($crit->not) { |
|
| 189 | - $param = ($param == 'oui') ? 'non' : 'oui'; |
|
| 190 | - } |
|
| 191 | - $boucle = &$boucles[$idb]; |
|
| 192 | - $boucle->lang_select = $param; |
|
| 185 | + if (!isset($crit->param[1][0]) or !($param = $crit->param[1][0]->texte)) { |
|
| 186 | + $param = 'oui'; |
|
| 187 | + } |
|
| 188 | + if ($crit->not) { |
|
| 189 | + $param = ($param == 'oui') ? 'non' : 'oui'; |
|
| 190 | + } |
|
| 191 | + $boucle = &$boucles[$idb]; |
|
| 192 | + $boucle->lang_select = $param; |
|
| 193 | 193 | } |
| 194 | 194 | |
| 195 | 195 | |
@@ -211,18 +211,18 @@ discard block |
||
| 211 | 211 | * @return void |
| 212 | 212 | **/ |
| 213 | 213 | function critere_debut_dist($idb, &$boucles, $crit) { |
| 214 | - list($un, $deux) = $crit->param; |
|
| 215 | - $un = $un[0]->texte; |
|
| 216 | - $deux = $deux[0]->texte; |
|
| 217 | - if ($deux) { |
|
| 218 | - $boucles[$idb]->limit = 'intval($Pile[0]["debut' . |
|
| 219 | - $un . |
|
| 220 | - '"]) . ",' . |
|
| 221 | - $deux . |
|
| 222 | - '"'; |
|
| 223 | - } else { |
|
| 224 | - calculer_critere_DEFAUT_dist($idb, $boucles, $crit); |
|
| 225 | - } |
|
| 214 | + list($un, $deux) = $crit->param; |
|
| 215 | + $un = $un[0]->texte; |
|
| 216 | + $deux = $deux[0]->texte; |
|
| 217 | + if ($deux) { |
|
| 218 | + $boucles[$idb]->limit = 'intval($Pile[0]["debut' . |
|
| 219 | + $un . |
|
| 220 | + '"]) . ",' . |
|
| 221 | + $deux . |
|
| 222 | + '"'; |
|
| 223 | + } else { |
|
| 224 | + calculer_critere_DEFAUT_dist($idb, $boucles, $crit); |
|
| 225 | + } |
|
| 226 | 226 | } |
| 227 | 227 | |
| 228 | 228 | |
@@ -256,57 +256,57 @@ discard block |
||
| 256 | 256 | **/ |
| 257 | 257 | function critere_pagination_dist($idb, &$boucles, $crit) { |
| 258 | 258 | |
| 259 | - $boucle = &$boucles[$idb]; |
|
| 260 | - // definition de la taille de la page |
|
| 261 | - $pas = !isset($crit->param[0][0]) ? "''" |
|
| 262 | - : calculer_liste(array($crit->param[0][0]), $idb, $boucles, $boucle->id_parent); |
|
| 263 | - |
|
| 264 | - if (!preg_match(_CODE_QUOTE, $pas, $r)) { |
|
| 265 | - $pas = "((\$a = intval($pas)) ? \$a : 10)"; |
|
| 266 | - } else { |
|
| 267 | - $r = intval($r[2]); |
|
| 268 | - $pas = strval($r ? $r : 10); |
|
| 269 | - } |
|
| 270 | - |
|
| 271 | - // Calcul du nommage de la pagination si il existe. |
|
| 272 | - // La nouvelle syntaxe {pagination 20, nom} est prise en compte et privilégiée mais on reste |
|
| 273 | - // compatible avec l'ancienne car certains cas fonctionnent correctement |
|
| 274 | - $type = "'$idb'"; |
|
| 275 | - // Calcul d'un nommage spécifique de la pagination si précisé. |
|
| 276 | - // Syntaxe {pagination 20, nom} |
|
| 277 | - if (isset($crit->param[0][1])) { |
|
| 278 | - $type = calculer_liste(array($crit->param[0][1]), $idb, $boucles, $boucle->id_parent); |
|
| 279 | - } // Ancienne syntaxe {pagination 20 nom} pour compatibilité |
|
| 280 | - elseif (isset($crit->param[1][0])) { |
|
| 281 | - $type = calculer_liste(array($crit->param[1][0]), $idb, $boucles, $boucle->id_parent); |
|
| 282 | - } |
|
| 283 | - |
|
| 284 | - $debut = ($type[0] !== "'") ? "'debut'.$type" : ("'debut" . substr($type, 1)); |
|
| 285 | - $boucle->modificateur['debut_nom'] = $type; |
|
| 286 | - $partie = |
|
| 287 | - // tester si le numero de page demande est de la forme '@yyy' |
|
| 288 | - 'isset($Pile[0][' . $debut . ']) ? $Pile[0][' . $debut . '] : _request(' . $debut . ");\n" |
|
| 289 | - . "\tif(substr(\$debut_boucle,0,1)=='@'){\n" |
|
| 290 | - . "\t\t" . '$debut_boucle = $Pile[0][' . $debut . '] = quete_debut_pagination(\'' . $boucle->primary . '\',$Pile[0][\'@' . $boucle->primary . '\'] = substr($debut_boucle,1),' . $pas . ',$iter);' . "\n" |
|
| 291 | - . "\t\t" . '$iter->seek(0);' . "\n" |
|
| 292 | - . "\t}\n" |
|
| 293 | - . "\t" . '$debut_boucle = intval($debut_boucle)'; |
|
| 294 | - |
|
| 295 | - $boucle->hash .= ' |
|
| 259 | + $boucle = &$boucles[$idb]; |
|
| 260 | + // definition de la taille de la page |
|
| 261 | + $pas = !isset($crit->param[0][0]) ? "''" |
|
| 262 | + : calculer_liste(array($crit->param[0][0]), $idb, $boucles, $boucle->id_parent); |
|
| 263 | + |
|
| 264 | + if (!preg_match(_CODE_QUOTE, $pas, $r)) { |
|
| 265 | + $pas = "((\$a = intval($pas)) ? \$a : 10)"; |
|
| 266 | + } else { |
|
| 267 | + $r = intval($r[2]); |
|
| 268 | + $pas = strval($r ? $r : 10); |
|
| 269 | + } |
|
| 270 | + |
|
| 271 | + // Calcul du nommage de la pagination si il existe. |
|
| 272 | + // La nouvelle syntaxe {pagination 20, nom} est prise en compte et privilégiée mais on reste |
|
| 273 | + // compatible avec l'ancienne car certains cas fonctionnent correctement |
|
| 274 | + $type = "'$idb'"; |
|
| 275 | + // Calcul d'un nommage spécifique de la pagination si précisé. |
|
| 276 | + // Syntaxe {pagination 20, nom} |
|
| 277 | + if (isset($crit->param[0][1])) { |
|
| 278 | + $type = calculer_liste(array($crit->param[0][1]), $idb, $boucles, $boucle->id_parent); |
|
| 279 | + } // Ancienne syntaxe {pagination 20 nom} pour compatibilité |
|
| 280 | + elseif (isset($crit->param[1][0])) { |
|
| 281 | + $type = calculer_liste(array($crit->param[1][0]), $idb, $boucles, $boucle->id_parent); |
|
| 282 | + } |
|
| 283 | + |
|
| 284 | + $debut = ($type[0] !== "'") ? "'debut'.$type" : ("'debut" . substr($type, 1)); |
|
| 285 | + $boucle->modificateur['debut_nom'] = $type; |
|
| 286 | + $partie = |
|
| 287 | + // tester si le numero de page demande est de la forme '@yyy' |
|
| 288 | + 'isset($Pile[0][' . $debut . ']) ? $Pile[0][' . $debut . '] : _request(' . $debut . ");\n" |
|
| 289 | + . "\tif(substr(\$debut_boucle,0,1)=='@'){\n" |
|
| 290 | + . "\t\t" . '$debut_boucle = $Pile[0][' . $debut . '] = quete_debut_pagination(\'' . $boucle->primary . '\',$Pile[0][\'@' . $boucle->primary . '\'] = substr($debut_boucle,1),' . $pas . ',$iter);' . "\n" |
|
| 291 | + . "\t\t" . '$iter->seek(0);' . "\n" |
|
| 292 | + . "\t}\n" |
|
| 293 | + . "\t" . '$debut_boucle = intval($debut_boucle)'; |
|
| 294 | + |
|
| 295 | + $boucle->hash .= ' |
|
| 296 | 296 | $command[\'pagination\'] = array((isset($Pile[0][' . $debut . ']) ? $Pile[0][' . $debut . '] : null), ' . $pas . ');'; |
| 297 | 297 | |
| 298 | - $boucle->total_parties = $pas; |
|
| 299 | - calculer_parties($boucles, $idb, $partie, 'p+'); |
|
| 300 | - // ajouter la cle primaire dans le select pour pouvoir gerer la pagination referencee par @id |
|
| 301 | - // sauf si pas de primaire, ou si primaire composee |
|
| 302 | - // dans ce cas, on ne sait pas gerer une pagination indirecte |
|
| 303 | - $t = $boucle->id_table . '.' . $boucle->primary; |
|
| 304 | - if ($boucle->primary |
|
| 305 | - and !preg_match('/[,\s]/', $boucle->primary) |
|
| 306 | - and !in_array($t, $boucle->select) |
|
| 307 | - ) { |
|
| 308 | - $boucle->select[] = $t; |
|
| 309 | - } |
|
| 298 | + $boucle->total_parties = $pas; |
|
| 299 | + calculer_parties($boucles, $idb, $partie, 'p+'); |
|
| 300 | + // ajouter la cle primaire dans le select pour pouvoir gerer la pagination referencee par @id |
|
| 301 | + // sauf si pas de primaire, ou si primaire composee |
|
| 302 | + // dans ce cas, on ne sait pas gerer une pagination indirecte |
|
| 303 | + $t = $boucle->id_table . '.' . $boucle->primary; |
|
| 304 | + if ($boucle->primary |
|
| 305 | + and !preg_match('/[,\s]/', $boucle->primary) |
|
| 306 | + and !in_array($t, $boucle->select) |
|
| 307 | + ) { |
|
| 308 | + $boucle->select[] = $t; |
|
| 309 | + } |
|
| 310 | 310 | } |
| 311 | 311 | |
| 312 | 312 | |
@@ -328,24 +328,24 @@ discard block |
||
| 328 | 328 | **/ |
| 329 | 329 | function critere_recherche_dist($idb, &$boucles, $crit) { |
| 330 | 330 | |
| 331 | - $boucle = &$boucles[$idb]; |
|
| 331 | + $boucle = &$boucles[$idb]; |
|
| 332 | 332 | |
| 333 | - if (!$boucle->primary or strpos($boucle->primary, ',')) { |
|
| 334 | - erreur_squelette(_T('zbug_critere_sur_table_sans_cle_primaire', array('critere' => 'recherche')), $boucle); |
|
| 333 | + if (!$boucle->primary or strpos($boucle->primary, ',')) { |
|
| 334 | + erreur_squelette(_T('zbug_critere_sur_table_sans_cle_primaire', array('critere' => 'recherche')), $boucle); |
|
| 335 | 335 | |
| 336 | - return; |
|
| 337 | - } |
|
| 336 | + return; |
|
| 337 | + } |
|
| 338 | 338 | |
| 339 | - if (isset($crit->param[0])) { |
|
| 340 | - $quoi = calculer_liste($crit->param[0], $idb, $boucles, $boucles[$idb]->id_parent); |
|
| 341 | - } else { |
|
| 342 | - $quoi = '(isset($Pile[0]["recherche"])?$Pile[0]["recherche"]:(isset($GLOBALS["recherche"])?$GLOBALS["recherche"]:""))'; |
|
| 343 | - } |
|
| 339 | + if (isset($crit->param[0])) { |
|
| 340 | + $quoi = calculer_liste($crit->param[0], $idb, $boucles, $boucles[$idb]->id_parent); |
|
| 341 | + } else { |
|
| 342 | + $quoi = '(isset($Pile[0]["recherche"])?$Pile[0]["recherche"]:(isset($GLOBALS["recherche"])?$GLOBALS["recherche"]:""))'; |
|
| 343 | + } |
|
| 344 | 344 | |
| 345 | - $_modificateur = var_export($boucle->modificateur, true); |
|
| 346 | - $boucle->hash .= ' |
|
| 345 | + $_modificateur = var_export($boucle->modificateur, true); |
|
| 346 | + $boucle->hash .= ' |
|
| 347 | 347 | // RECHERCHE' |
| 348 | - . ($crit->cond ? ' |
|
| 348 | + . ($crit->cond ? ' |
|
| 349 | 349 | if (!strlen(' . $quoi . ')){ |
| 350 | 350 | list($rech_select, $rech_where) = array("0 as points",""); |
| 351 | 351 | } else' : '') . ' |
@@ -356,21 +356,21 @@ discard block |
||
| 356 | 356 | '; |
| 357 | 357 | |
| 358 | 358 | |
| 359 | - $t = $boucle->id_table . '.' . $boucle->primary; |
|
| 360 | - if (!in_array($t, $boucles[$idb]->select)) { |
|
| 361 | - $boucle->select[] = $t; |
|
| 362 | - } # pour postgres, neuneu ici |
|
| 363 | - // jointure uniquement sur le serveur principal |
|
| 364 | - // (on ne peut joindre une table d'un serveur distant avec la table des resultats du serveur principal) |
|
| 365 | - if (!$boucle->sql_serveur) { |
|
| 366 | - $boucle->join['resultats'] = array("'" . $boucle->id_table . "'", "'id'", "'" . $boucle->primary . "'"); |
|
| 367 | - $boucle->from['resultats'] = 'spip_resultats'; |
|
| 368 | - } |
|
| 369 | - $boucle->select[] = '$rech_select'; |
|
| 370 | - //$boucle->where[]= "\$rech_where?'resultats.id=".$boucle->id_table.".".$boucle->primary."':''"; |
|
| 371 | - |
|
| 372 | - // et la recherche trouve |
|
| 373 | - $boucle->where[] = '$rech_where?$rech_where:\'\''; |
|
| 359 | + $t = $boucle->id_table . '.' . $boucle->primary; |
|
| 360 | + if (!in_array($t, $boucles[$idb]->select)) { |
|
| 361 | + $boucle->select[] = $t; |
|
| 362 | + } # pour postgres, neuneu ici |
|
| 363 | + // jointure uniquement sur le serveur principal |
|
| 364 | + // (on ne peut joindre une table d'un serveur distant avec la table des resultats du serveur principal) |
|
| 365 | + if (!$boucle->sql_serveur) { |
|
| 366 | + $boucle->join['resultats'] = array("'" . $boucle->id_table . "'", "'id'", "'" . $boucle->primary . "'"); |
|
| 367 | + $boucle->from['resultats'] = 'spip_resultats'; |
|
| 368 | + } |
|
| 369 | + $boucle->select[] = '$rech_select'; |
|
| 370 | + //$boucle->where[]= "\$rech_where?'resultats.id=".$boucle->id_table.".".$boucle->primary."':''"; |
|
| 371 | + |
|
| 372 | + // et la recherche trouve |
|
| 373 | + $boucle->where[] = '$rech_where?$rech_where:\'\''; |
|
| 374 | 374 | } |
| 375 | 375 | |
| 376 | 376 | /** |
@@ -387,25 +387,25 @@ discard block |
||
| 387 | 387 | * @return void |
| 388 | 388 | **/ |
| 389 | 389 | function critere_traduction_dist($idb, &$boucles, $crit) { |
| 390 | - $boucle = &$boucles[$idb]; |
|
| 391 | - $prim = $boucle->primary; |
|
| 392 | - $table = $boucle->id_table; |
|
| 393 | - $arg = kwote(calculer_argument_precedent($idb, 'id_trad', $boucles)); |
|
| 394 | - $dprim = kwote(calculer_argument_precedent($idb, $prim, $boucles)); |
|
| 395 | - $boucle->where[] = |
|
| 396 | - array( |
|
| 397 | - "'OR'", |
|
| 398 | - array( |
|
| 399 | - "'AND'", |
|
| 400 | - array("'='", "'$table.id_trad'", 0), |
|
| 401 | - array("'='", "'$table.$prim'", $dprim) |
|
| 402 | - ), |
|
| 403 | - array( |
|
| 404 | - "'AND'", |
|
| 405 | - array("'>'", "'$table.id_trad'", 0), |
|
| 406 | - array("'='", "'$table.id_trad'", $arg) |
|
| 407 | - ) |
|
| 408 | - ); |
|
| 390 | + $boucle = &$boucles[$idb]; |
|
| 391 | + $prim = $boucle->primary; |
|
| 392 | + $table = $boucle->id_table; |
|
| 393 | + $arg = kwote(calculer_argument_precedent($idb, 'id_trad', $boucles)); |
|
| 394 | + $dprim = kwote(calculer_argument_precedent($idb, $prim, $boucles)); |
|
| 395 | + $boucle->where[] = |
|
| 396 | + array( |
|
| 397 | + "'OR'", |
|
| 398 | + array( |
|
| 399 | + "'AND'", |
|
| 400 | + array("'='", "'$table.id_trad'", 0), |
|
| 401 | + array("'='", "'$table.$prim'", $dprim) |
|
| 402 | + ), |
|
| 403 | + array( |
|
| 404 | + "'AND'", |
|
| 405 | + array("'>'", "'$table.id_trad'", 0), |
|
| 406 | + array("'='", "'$table.id_trad'", $arg) |
|
| 407 | + ) |
|
| 408 | + ); |
|
| 409 | 409 | } |
| 410 | 410 | |
| 411 | 411 | |
@@ -423,17 +423,17 @@ discard block |
||
| 423 | 423 | * @return void |
| 424 | 424 | **/ |
| 425 | 425 | function critere_origine_traduction_dist($idb, &$boucles, $crit) { |
| 426 | - $boucle = &$boucles[$idb]; |
|
| 427 | - $prim = $boucle->primary; |
|
| 428 | - $table = $boucle->id_table; |
|
| 429 | - |
|
| 430 | - $c = |
|
| 431 | - array( |
|
| 432 | - "'OR'", |
|
| 433 | - array("'='", "'$table." . "id_trad'", "'$table.$prim'"), |
|
| 434 | - array("'='", "'$table.id_trad'", "'0'") |
|
| 435 | - ); |
|
| 436 | - $boucle->where[] = ($crit->not ? array("'NOT'", $c) : $c); |
|
| 426 | + $boucle = &$boucles[$idb]; |
|
| 427 | + $prim = $boucle->primary; |
|
| 428 | + $table = $boucle->id_table; |
|
| 429 | + |
|
| 430 | + $c = |
|
| 431 | + array( |
|
| 432 | + "'OR'", |
|
| 433 | + array("'='", "'$table." . "id_trad'", "'$table.$prim'"), |
|
| 434 | + array("'='", "'$table.id_trad'", "'0'") |
|
| 435 | + ); |
|
| 436 | + $boucle->where[] = ($crit->not ? array("'NOT'", $c) : $c); |
|
| 437 | 437 | } |
| 438 | 438 | |
| 439 | 439 | |
@@ -450,20 +450,20 @@ discard block |
||
| 450 | 450 | **/ |
| 451 | 451 | function critere_meme_parent_dist($idb, &$boucles, $crit) { |
| 452 | 452 | |
| 453 | - $boucle = &$boucles[$idb]; |
|
| 454 | - $arg = kwote(calculer_argument_precedent($idb, 'id_parent', $boucles)); |
|
| 455 | - $id_parent = isset($GLOBALS['exceptions_des_tables'][$boucle->id_table]['id_parent']) ? |
|
| 456 | - $GLOBALS['exceptions_des_tables'][$boucle->id_table]['id_parent'] : |
|
| 457 | - 'id_parent'; |
|
| 458 | - $mparent = $boucle->id_table . '.' . $id_parent; |
|
| 453 | + $boucle = &$boucles[$idb]; |
|
| 454 | + $arg = kwote(calculer_argument_precedent($idb, 'id_parent', $boucles)); |
|
| 455 | + $id_parent = isset($GLOBALS['exceptions_des_tables'][$boucle->id_table]['id_parent']) ? |
|
| 456 | + $GLOBALS['exceptions_des_tables'][$boucle->id_table]['id_parent'] : |
|
| 457 | + 'id_parent'; |
|
| 458 | + $mparent = $boucle->id_table . '.' . $id_parent; |
|
| 459 | 459 | |
| 460 | - if ($boucle->type_requete == 'rubriques' or isset($GLOBALS['exceptions_des_tables'][$boucle->id_table]['id_parent'])) { |
|
| 461 | - $boucle->where[] = array("'='", "'$mparent'", $arg); |
|
| 460 | + if ($boucle->type_requete == 'rubriques' or isset($GLOBALS['exceptions_des_tables'][$boucle->id_table]['id_parent'])) { |
|
| 461 | + $boucle->where[] = array("'='", "'$mparent'", $arg); |
|
| 462 | 462 | |
| 463 | - } // le cas FORUMS est gere dans le plugin forum, dans la fonction critere_FORUMS_meme_parent_dist() |
|
| 464 | - else { |
|
| 465 | - return (array('zbug_critere_inconnu', array('critere' => $crit->op . ' ' . $boucle->type_requete))); |
|
| 466 | - } |
|
| 463 | + } // le cas FORUMS est gere dans le plugin forum, dans la fonction critere_FORUMS_meme_parent_dist() |
|
| 464 | + else { |
|
| 465 | + return (array('zbug_critere_inconnu', array('critere' => $crit->op . ' ' . $boucle->type_requete))); |
|
| 466 | + } |
|
| 467 | 467 | } |
| 468 | 468 | |
| 469 | 469 | |
@@ -494,37 +494,37 @@ discard block |
||
| 494 | 494 | **/ |
| 495 | 495 | function critere_branche_dist($idb, &$boucles, $crit) { |
| 496 | 496 | |
| 497 | - $not = $crit->not; |
|
| 498 | - $boucle = &$boucles[$idb]; |
|
| 499 | - // prendre en priorite un identifiant en parametre {branche XX} |
|
| 500 | - if (isset($crit->param[0])) { |
|
| 501 | - $arg = calculer_liste($crit->param[0], $idb, $boucles, $boucles[$idb]->id_parent); |
|
| 502 | - // sinon on le prend chez une boucle parente |
|
| 503 | - } else { |
|
| 504 | - $arg = kwote(calculer_argument_precedent($idb, 'id_rubrique', $boucles), $boucle->sql_serveur, 'int NOT NULL'); |
|
| 505 | - } |
|
| 506 | - |
|
| 507 | - //Trouver une jointure |
|
| 508 | - $champ = "id_rubrique"; |
|
| 509 | - $desc = $boucle->show; |
|
| 510 | - //Seulement si necessaire |
|
| 511 | - if (!array_key_exists($champ, $desc['field'])) { |
|
| 512 | - $cle = trouver_jointure_champ($champ, $boucle); |
|
| 513 | - $trouver_table = charger_fonction("trouver_table", "base"); |
|
| 514 | - $desc = $trouver_table($boucle->from[$cle]); |
|
| 515 | - if (count(trouver_champs_decomposes($champ, $desc)) > 1) { |
|
| 516 | - $decompose = decompose_champ_id_objet($champ); |
|
| 517 | - $champ = array_shift($decompose); |
|
| 518 | - $boucle->where[] = array("'='", _q($cle . "." . reset($decompose)), '"' . sql_quote(end($decompose)) . '"'); |
|
| 519 | - } |
|
| 520 | - } else { |
|
| 521 | - $cle = $boucle->id_table; |
|
| 522 | - } |
|
| 523 | - |
|
| 524 | - $c = "sql_in('$cle" . ".$champ', calcul_branche_in($arg)" |
|
| 525 | - . ($not ? ", 'NOT'" : '') . ")"; |
|
| 526 | - $boucle->where[] = !$crit->cond ? $c : |
|
| 527 | - ("($arg ? $c : " . ($not ? "'0=1'" : "'1=1'") . ')'); |
|
| 497 | + $not = $crit->not; |
|
| 498 | + $boucle = &$boucles[$idb]; |
|
| 499 | + // prendre en priorite un identifiant en parametre {branche XX} |
|
| 500 | + if (isset($crit->param[0])) { |
|
| 501 | + $arg = calculer_liste($crit->param[0], $idb, $boucles, $boucles[$idb]->id_parent); |
|
| 502 | + // sinon on le prend chez une boucle parente |
|
| 503 | + } else { |
|
| 504 | + $arg = kwote(calculer_argument_precedent($idb, 'id_rubrique', $boucles), $boucle->sql_serveur, 'int NOT NULL'); |
|
| 505 | + } |
|
| 506 | + |
|
| 507 | + //Trouver une jointure |
|
| 508 | + $champ = "id_rubrique"; |
|
| 509 | + $desc = $boucle->show; |
|
| 510 | + //Seulement si necessaire |
|
| 511 | + if (!array_key_exists($champ, $desc['field'])) { |
|
| 512 | + $cle = trouver_jointure_champ($champ, $boucle); |
|
| 513 | + $trouver_table = charger_fonction("trouver_table", "base"); |
|
| 514 | + $desc = $trouver_table($boucle->from[$cle]); |
|
| 515 | + if (count(trouver_champs_decomposes($champ, $desc)) > 1) { |
|
| 516 | + $decompose = decompose_champ_id_objet($champ); |
|
| 517 | + $champ = array_shift($decompose); |
|
| 518 | + $boucle->where[] = array("'='", _q($cle . "." . reset($decompose)), '"' . sql_quote(end($decompose)) . '"'); |
|
| 519 | + } |
|
| 520 | + } else { |
|
| 521 | + $cle = $boucle->id_table; |
|
| 522 | + } |
|
| 523 | + |
|
| 524 | + $c = "sql_in('$cle" . ".$champ', calcul_branche_in($arg)" |
|
| 525 | + . ($not ? ", 'NOT'" : '') . ")"; |
|
| 526 | + $boucle->where[] = !$crit->cond ? $c : |
|
| 527 | + ("($arg ? $c : " . ($not ? "'0=1'" : "'1=1'") . ')'); |
|
| 528 | 528 | } |
| 529 | 529 | |
| 530 | 530 | /** |
@@ -540,15 +540,15 @@ discard block |
||
| 540 | 540 | **/ |
| 541 | 541 | function critere_logo_dist($idb, &$boucles, $crit) { |
| 542 | 542 | |
| 543 | - $boucle = &$boucles[$idb]; |
|
| 544 | - $not = ($crit->not ? 'NOT' : ''); |
|
| 545 | - $serveur = $boucle->sql_serveur; |
|
| 543 | + $boucle = &$boucles[$idb]; |
|
| 544 | + $not = ($crit->not ? 'NOT' : ''); |
|
| 545 | + $serveur = $boucle->sql_serveur; |
|
| 546 | 546 | |
| 547 | - $c = "sql_in('" . |
|
| 548 | - $boucle->id_table . '.' . $boucle->primary |
|
| 549 | - . "', lister_objets_avec_logos('" . $boucle->primary . "'), '$not', '$serveur')"; |
|
| 547 | + $c = "sql_in('" . |
|
| 548 | + $boucle->id_table . '.' . $boucle->primary |
|
| 549 | + . "', lister_objets_avec_logos('" . $boucle->primary . "'), '$not', '$serveur')"; |
|
| 550 | 550 | |
| 551 | - $boucle->where[] = $c; |
|
| 551 | + $boucle->where[] = $c; |
|
| 552 | 552 | } |
| 553 | 553 | |
| 554 | 554 | |
@@ -570,31 +570,31 @@ discard block |
||
| 570 | 570 | * @return void |
| 571 | 571 | **/ |
| 572 | 572 | function critere_fusion_dist($idb, &$boucles, $crit) { |
| 573 | - if ($t = isset($crit->param[0])) { |
|
| 574 | - $t = $crit->param[0]; |
|
| 575 | - if ($t[0]->type == 'texte') { |
|
| 576 | - $t = $t[0]->texte; |
|
| 577 | - if (preg_match("/^(.*)\.(.*)$/", $t, $r)) { |
|
| 578 | - $t = table_objet_sql($r[1]); |
|
| 579 | - $t = array_search($t, $boucles[$idb]->from); |
|
| 580 | - if ($t) { |
|
| 581 | - $t .= '.' . $r[2]; |
|
| 582 | - } |
|
| 583 | - } |
|
| 584 | - } else { |
|
| 585 | - $t = '".' |
|
| 586 | - . calculer_critere_arg_dynamique($idb, $boucles, $t) |
|
| 587 | - . '."'; |
|
| 588 | - } |
|
| 589 | - } |
|
| 590 | - if ($t) { |
|
| 591 | - $boucles[$idb]->group[] = $t; |
|
| 592 | - if (!in_array($t, $boucles[$idb]->select)) { |
|
| 593 | - $boucles[$idb]->select[] = $t; |
|
| 594 | - } |
|
| 595 | - } else { |
|
| 596 | - return (array('zbug_critere_inconnu', array('critere' => $crit->op . ' ?'))); |
|
| 597 | - } |
|
| 573 | + if ($t = isset($crit->param[0])) { |
|
| 574 | + $t = $crit->param[0]; |
|
| 575 | + if ($t[0]->type == 'texte') { |
|
| 576 | + $t = $t[0]->texte; |
|
| 577 | + if (preg_match("/^(.*)\.(.*)$/", $t, $r)) { |
|
| 578 | + $t = table_objet_sql($r[1]); |
|
| 579 | + $t = array_search($t, $boucles[$idb]->from); |
|
| 580 | + if ($t) { |
|
| 581 | + $t .= '.' . $r[2]; |
|
| 582 | + } |
|
| 583 | + } |
|
| 584 | + } else { |
|
| 585 | + $t = '".' |
|
| 586 | + . calculer_critere_arg_dynamique($idb, $boucles, $t) |
|
| 587 | + . '."'; |
|
| 588 | + } |
|
| 589 | + } |
|
| 590 | + if ($t) { |
|
| 591 | + $boucles[$idb]->group[] = $t; |
|
| 592 | + if (!in_array($t, $boucles[$idb]->select)) { |
|
| 593 | + $boucles[$idb]->select[] = $t; |
|
| 594 | + } |
|
| 595 | + } else { |
|
| 596 | + return (array('zbug_critere_inconnu', array('critere' => $crit->op . ' ?'))); |
|
| 597 | + } |
|
| 598 | 598 | } |
| 599 | 599 | |
| 600 | 600 | /** |
@@ -631,45 +631,45 @@ discard block |
||
| 631 | 631 | * @param Critere $crit Paramètres du critère dans cette boucle |
| 632 | 632 | */ |
| 633 | 633 | function critere_collecte_dist($idb, &$boucles, $crit) { |
| 634 | - if (isset($crit->param[0])) { |
|
| 635 | - $_coll = calculer_liste($crit->param[0], $idb, $boucles, $boucles[$idb]->id_parent); |
|
| 636 | - $boucle = $boucles[$idb]; |
|
| 637 | - $boucle->modificateur['collate'] = "($_coll ?' COLLATE '.$_coll:'')"; |
|
| 638 | - $n = count($boucle->order); |
|
| 639 | - if ($n && (strpos($boucle->order[$n - 1], 'COLLATE') === false)) { |
|
| 640 | - // l'instruction COLLATE doit être placée avant ASC ou DESC |
|
| 641 | - // notamment lors de l'utilisation `{!par xxx}{collate yyy}` |
|
| 642 | - if ( |
|
| 643 | - (false !== $i = strpos($boucle->order[$n - 1], 'ASC')) |
|
| 644 | - OR (false !== $i = strpos($boucle->order[$n - 1], 'DESC')) |
|
| 645 | - ) { |
|
| 646 | - $boucle->order[$n - 1] = substr_replace($boucle->order[$n - 1], "' . " . $boucle->modificateur['collate'] . " . ' ", $i, 0); |
|
| 647 | - } else { |
|
| 648 | - $boucle->order[$n - 1] .= " . " . $boucle->modificateur['collate']; |
|
| 649 | - } |
|
| 650 | - } |
|
| 651 | - } else { |
|
| 652 | - return (array('zbug_critere_inconnu', array('critere' => $crit->op . " " . count($boucles[$idb]->order)))); |
|
| 653 | - } |
|
| 634 | + if (isset($crit->param[0])) { |
|
| 635 | + $_coll = calculer_liste($crit->param[0], $idb, $boucles, $boucles[$idb]->id_parent); |
|
| 636 | + $boucle = $boucles[$idb]; |
|
| 637 | + $boucle->modificateur['collate'] = "($_coll ?' COLLATE '.$_coll:'')"; |
|
| 638 | + $n = count($boucle->order); |
|
| 639 | + if ($n && (strpos($boucle->order[$n - 1], 'COLLATE') === false)) { |
|
| 640 | + // l'instruction COLLATE doit être placée avant ASC ou DESC |
|
| 641 | + // notamment lors de l'utilisation `{!par xxx}{collate yyy}` |
|
| 642 | + if ( |
|
| 643 | + (false !== $i = strpos($boucle->order[$n - 1], 'ASC')) |
|
| 644 | + OR (false !== $i = strpos($boucle->order[$n - 1], 'DESC')) |
|
| 645 | + ) { |
|
| 646 | + $boucle->order[$n - 1] = substr_replace($boucle->order[$n - 1], "' . " . $boucle->modificateur['collate'] . " . ' ", $i, 0); |
|
| 647 | + } else { |
|
| 648 | + $boucle->order[$n - 1] .= " . " . $boucle->modificateur['collate']; |
|
| 649 | + } |
|
| 650 | + } |
|
| 651 | + } else { |
|
| 652 | + return (array('zbug_critere_inconnu', array('critere' => $crit->op . " " . count($boucles[$idb]->order)))); |
|
| 653 | + } |
|
| 654 | 654 | } |
| 655 | 655 | |
| 656 | 656 | // http://code.spip.net/@calculer_critere_arg_dynamique |
| 657 | 657 | function calculer_critere_arg_dynamique($idb, &$boucles, $crit, $suffix = '') { |
| 658 | - $boucle = $boucles[$idb]; |
|
| 659 | - $alt = "('" . $boucle->id_table . '.\' . $x' . $suffix . ')'; |
|
| 660 | - $var = '$champs_' . $idb; |
|
| 661 | - $desc = (strpos($boucle->in, "static $var =") !== false); |
|
| 662 | - if (!$desc) { |
|
| 663 | - $desc = $boucle->show['field']; |
|
| 664 | - $desc = implode(',', array_map('_q', array_keys($desc))); |
|
| 665 | - $boucles[$idb]->in .= "\n\tstatic $var = array(" . $desc . ");"; |
|
| 666 | - } |
|
| 667 | - if ($desc) { |
|
| 668 | - $alt = "(in_array(\$x, $var) ? $alt :(\$x$suffix))"; |
|
| 669 | - } |
|
| 670 | - $arg = calculer_liste($crit, $idb, $boucles, $boucle->id_parent); |
|
| 671 | - |
|
| 672 | - return "((\$x = preg_replace(\"/\\W/\",'', $arg)) ? $alt : '')"; |
|
| 658 | + $boucle = $boucles[$idb]; |
|
| 659 | + $alt = "('" . $boucle->id_table . '.\' . $x' . $suffix . ')'; |
|
| 660 | + $var = '$champs_' . $idb; |
|
| 661 | + $desc = (strpos($boucle->in, "static $var =") !== false); |
|
| 662 | + if (!$desc) { |
|
| 663 | + $desc = $boucle->show['field']; |
|
| 664 | + $desc = implode(',', array_map('_q', array_keys($desc))); |
|
| 665 | + $boucles[$idb]->in .= "\n\tstatic $var = array(" . $desc . ");"; |
|
| 666 | + } |
|
| 667 | + if ($desc) { |
|
| 668 | + $alt = "(in_array(\$x, $var) ? $alt :(\$x$suffix))"; |
|
| 669 | + } |
|
| 670 | + $arg = calculer_liste($crit, $idb, $boucles, $boucle->id_parent); |
|
| 671 | + |
|
| 672 | + return "((\$x = preg_replace(\"/\\W/\",'', $arg)) ? $alt : '')"; |
|
| 673 | 673 | } |
| 674 | 674 | |
| 675 | 675 | /** |
@@ -708,7 +708,7 @@ discard block |
||
| 708 | 708 | * @param Critere $crit Paramètres du critère dans cette boucle |
| 709 | 709 | */ |
| 710 | 710 | function critere_par_dist($idb, &$boucles, $crit) { |
| 711 | - return critere_parinverse($idb, $boucles, $crit); |
|
| 711 | + return critere_parinverse($idb, $boucles, $crit); |
|
| 712 | 712 | } |
| 713 | 713 | |
| 714 | 714 | /** |
@@ -730,93 +730,93 @@ discard block |
||
| 730 | 730 | * @param Critere $crit Paramètres du critère dans cette boucle |
| 731 | 731 | */ |
| 732 | 732 | function critere_parinverse($idb, &$boucles, $crit) { |
| 733 | - $boucle = &$boucles[$idb]; |
|
| 734 | - |
|
| 735 | - $sens = $collecte = ''; |
|
| 736 | - if ($crit->not) { |
|
| 737 | - $sens = " . ' DESC'"; |
|
| 738 | - } |
|
| 739 | - if (isset($boucle->modificateur['collate'])) { |
|
| 740 | - $collecte = ' . ' . $boucle->modificateur['collate']; |
|
| 741 | - } |
|
| 742 | - |
|
| 743 | - // Pour chaque paramètre du critère |
|
| 744 | - foreach ($crit->param as $tri) { |
|
| 745 | - $order = $fct = ''; |
|
| 746 | - // tris specifiés dynamiquement {par #ENV{tri}} |
|
| 747 | - if ($tri[0]->type != 'texte') { |
|
| 748 | - // calculer le order dynamique qui verifie les champs |
|
| 749 | - $order = calculer_critere_arg_dynamique($idb, $boucles, $tri, $sens); |
|
| 750 | - // ajouter 'hasard' comme possibilité de tri dynamique |
|
| 751 | - calculer_critere_par_hasard($idb, $boucles, $crit); |
|
| 752 | - } |
|
| 753 | - // tris textuels {par titre} |
|
| 754 | - else { |
|
| 755 | - $par = array_shift($tri); |
|
| 756 | - $par = $par->texte; |
|
| 757 | - |
|
| 758 | - // tris de la forme {par expression champ} tel que {par num titre} ou {par multi titre} |
|
| 759 | - if (preg_match(",^(\w+)[\s]+(.*)$,", $par, $m)) { |
|
| 760 | - $expression = trim($m[1]); |
|
| 761 | - $champ = trim($m[2]); |
|
| 762 | - if (function_exists($f = 'calculer_critere_par_expression_' . $expression)) { |
|
| 763 | - $order = $f($idb, $boucles, $crit, $tri, $champ); |
|
| 764 | - } else { |
|
| 765 | - return array('zbug_critere_inconnu', array('critere' => $crit->op . " $par")); |
|
| 766 | - } |
|
| 767 | - |
|
| 768 | - // tris de la forme {par champ} ou {par FONCTION(champ)} |
|
| 769 | - } elseif (preg_match(",^" . CHAMP_SQL_PLUS_FONC . '$,is', $par, $match)) { |
|
| 770 | - // {par FONCTION(champ)} |
|
| 771 | - if (count($match) > 2) { |
|
| 772 | - $par = substr($match[2], 1, -1); |
|
| 773 | - $fct = $match[1]; |
|
| 774 | - } |
|
| 775 | - // quelques cas spécifiques {par hasard}, {par date} |
|
| 776 | - if ($par == 'hasard') { |
|
| 777 | - $order = calculer_critere_par_hasard($idb, $boucles, $crit); |
|
| 778 | - } elseif ($par == 'date' and !empty($boucle->show['date'])) { |
|
| 779 | - $order = "'" . $boucle->id_table . "." . $boucle->show['date'] . "'"; |
|
| 780 | - } else { |
|
| 781 | - // cas général {par champ}, {par table.champ}, ... |
|
| 782 | - $order = calculer_critere_par_champ($idb, $boucles, $crit, $par); |
|
| 783 | - } |
|
| 784 | - } |
|
| 785 | - |
|
| 786 | - // on ne sait pas traiter… |
|
| 787 | - else { |
|
| 788 | - return array('zbug_critere_inconnu', array('critere' => $crit->op . " $par")); |
|
| 789 | - } |
|
| 790 | - |
|
| 791 | - // En cas d'erreur de squelette retournée par une fonction |
|
| 792 | - if (is_array($order)) { |
|
| 793 | - return $order; |
|
| 794 | - } |
|
| 795 | - } |
|
| 796 | - |
|
| 797 | - if (preg_match('/^\'([^"]*)\'$/', $order, $m)) { |
|
| 798 | - $t = $m[1]; |
|
| 799 | - if (strpos($t, '.') and !in_array($t, $boucle->select)) { |
|
| 800 | - $boucle->select[] = $t; |
|
| 801 | - } |
|
| 802 | - } else { |
|
| 803 | - $sens = ''; |
|
| 804 | - } |
|
| 805 | - |
|
| 806 | - if ($fct) { |
|
| 807 | - if (preg_match("/^\s*'(.*)'\s*$/", $order, $r)) { |
|
| 808 | - $order = "'$fct(" . $r[1] . ")'"; |
|
| 809 | - } else { |
|
| 810 | - $order = "'$fct(' . $order . ')'"; |
|
| 811 | - } |
|
| 812 | - } |
|
| 813 | - $t = $order . $collecte . $sens; |
|
| 814 | - if (preg_match("/^(.*)'\s*\.\s*'([^']*')$/", $t, $r)) { |
|
| 815 | - $t = $r[1] . $r[2]; |
|
| 816 | - } |
|
| 817 | - |
|
| 818 | - $boucle->order[] = $t; |
|
| 819 | - } |
|
| 733 | + $boucle = &$boucles[$idb]; |
|
| 734 | + |
|
| 735 | + $sens = $collecte = ''; |
|
| 736 | + if ($crit->not) { |
|
| 737 | + $sens = " . ' DESC'"; |
|
| 738 | + } |
|
| 739 | + if (isset($boucle->modificateur['collate'])) { |
|
| 740 | + $collecte = ' . ' . $boucle->modificateur['collate']; |
|
| 741 | + } |
|
| 742 | + |
|
| 743 | + // Pour chaque paramètre du critère |
|
| 744 | + foreach ($crit->param as $tri) { |
|
| 745 | + $order = $fct = ''; |
|
| 746 | + // tris specifiés dynamiquement {par #ENV{tri}} |
|
| 747 | + if ($tri[0]->type != 'texte') { |
|
| 748 | + // calculer le order dynamique qui verifie les champs |
|
| 749 | + $order = calculer_critere_arg_dynamique($idb, $boucles, $tri, $sens); |
|
| 750 | + // ajouter 'hasard' comme possibilité de tri dynamique |
|
| 751 | + calculer_critere_par_hasard($idb, $boucles, $crit); |
|
| 752 | + } |
|
| 753 | + // tris textuels {par titre} |
|
| 754 | + else { |
|
| 755 | + $par = array_shift($tri); |
|
| 756 | + $par = $par->texte; |
|
| 757 | + |
|
| 758 | + // tris de la forme {par expression champ} tel que {par num titre} ou {par multi titre} |
|
| 759 | + if (preg_match(",^(\w+)[\s]+(.*)$,", $par, $m)) { |
|
| 760 | + $expression = trim($m[1]); |
|
| 761 | + $champ = trim($m[2]); |
|
| 762 | + if (function_exists($f = 'calculer_critere_par_expression_' . $expression)) { |
|
| 763 | + $order = $f($idb, $boucles, $crit, $tri, $champ); |
|
| 764 | + } else { |
|
| 765 | + return array('zbug_critere_inconnu', array('critere' => $crit->op . " $par")); |
|
| 766 | + } |
|
| 767 | + |
|
| 768 | + // tris de la forme {par champ} ou {par FONCTION(champ)} |
|
| 769 | + } elseif (preg_match(",^" . CHAMP_SQL_PLUS_FONC . '$,is', $par, $match)) { |
|
| 770 | + // {par FONCTION(champ)} |
|
| 771 | + if (count($match) > 2) { |
|
| 772 | + $par = substr($match[2], 1, -1); |
|
| 773 | + $fct = $match[1]; |
|
| 774 | + } |
|
| 775 | + // quelques cas spécifiques {par hasard}, {par date} |
|
| 776 | + if ($par == 'hasard') { |
|
| 777 | + $order = calculer_critere_par_hasard($idb, $boucles, $crit); |
|
| 778 | + } elseif ($par == 'date' and !empty($boucle->show['date'])) { |
|
| 779 | + $order = "'" . $boucle->id_table . "." . $boucle->show['date'] . "'"; |
|
| 780 | + } else { |
|
| 781 | + // cas général {par champ}, {par table.champ}, ... |
|
| 782 | + $order = calculer_critere_par_champ($idb, $boucles, $crit, $par); |
|
| 783 | + } |
|
| 784 | + } |
|
| 785 | + |
|
| 786 | + // on ne sait pas traiter… |
|
| 787 | + else { |
|
| 788 | + return array('zbug_critere_inconnu', array('critere' => $crit->op . " $par")); |
|
| 789 | + } |
|
| 790 | + |
|
| 791 | + // En cas d'erreur de squelette retournée par une fonction |
|
| 792 | + if (is_array($order)) { |
|
| 793 | + return $order; |
|
| 794 | + } |
|
| 795 | + } |
|
| 796 | + |
|
| 797 | + if (preg_match('/^\'([^"]*)\'$/', $order, $m)) { |
|
| 798 | + $t = $m[1]; |
|
| 799 | + if (strpos($t, '.') and !in_array($t, $boucle->select)) { |
|
| 800 | + $boucle->select[] = $t; |
|
| 801 | + } |
|
| 802 | + } else { |
|
| 803 | + $sens = ''; |
|
| 804 | + } |
|
| 805 | + |
|
| 806 | + if ($fct) { |
|
| 807 | + if (preg_match("/^\s*'(.*)'\s*$/", $order, $r)) { |
|
| 808 | + $order = "'$fct(" . $r[1] . ")'"; |
|
| 809 | + } else { |
|
| 810 | + $order = "'$fct(' . $order . ')'"; |
|
| 811 | + } |
|
| 812 | + } |
|
| 813 | + $t = $order . $collecte . $sens; |
|
| 814 | + if (preg_match("/^(.*)'\s*\.\s*'([^']*')$/", $t, $r)) { |
|
| 815 | + $t = $r[1] . $r[2]; |
|
| 816 | + } |
|
| 817 | + |
|
| 818 | + $boucle->order[] = $t; |
|
| 819 | + } |
|
| 820 | 820 | } |
| 821 | 821 | |
| 822 | 822 | /** |
@@ -830,13 +830,13 @@ discard block |
||
| 830 | 830 | * @return string Clause pour le Order by |
| 831 | 831 | */ |
| 832 | 832 | function calculer_critere_par_hasard($idb, &$boucles, $crit) { |
| 833 | - $boucle = &$boucles[$idb]; |
|
| 834 | - // Si ce n'est fait, ajouter un champ 'hasard' dans le select |
|
| 835 | - $parha = "rand() AS hasard"; |
|
| 836 | - if (!in_array($parha, $boucle->select)) { |
|
| 837 | - $boucle->select[] = $parha; |
|
| 838 | - } |
|
| 839 | - return "'hasard'"; |
|
| 833 | + $boucle = &$boucles[$idb]; |
|
| 834 | + // Si ce n'est fait, ajouter un champ 'hasard' dans le select |
|
| 835 | + $parha = "rand() AS hasard"; |
|
| 836 | + if (!in_array($parha, $boucle->select)) { |
|
| 837 | + $boucle->select[] = $parha; |
|
| 838 | + } |
|
| 839 | + return "'hasard'"; |
|
| 840 | 840 | } |
| 841 | 841 | |
| 842 | 842 | /** |
@@ -860,20 +860,20 @@ discard block |
||
| 860 | 860 | * @return string Clause pour le Order by |
| 861 | 861 | */ |
| 862 | 862 | function calculer_critere_par_expression_num($idb, &$boucles, $crit, $tri, $champ) { |
| 863 | - $_champ = calculer_critere_par_champ($idb, $boucles, $crit, $champ, true); |
|
| 864 | - if (is_array($_champ)) { |
|
| 865 | - return array('zbug_critere_inconnu', array('critere' => $crit->op . " num $champ")); |
|
| 866 | - } |
|
| 867 | - $boucle = &$boucles[$idb]; |
|
| 868 | - $texte = '0+' . $_champ; |
|
| 869 | - $suite = calculer_liste($tri, $idb, $boucles, $boucle->id_parent); |
|
| 870 | - if ($suite !== "''") { |
|
| 871 | - $texte = "\" . ((\$x = $suite) ? ('$texte' . \$x) : '0')" . " . \""; |
|
| 872 | - } |
|
| 873 | - $as = 'num' . ($boucle->order ? count($boucle->order) : ""); |
|
| 874 | - $boucle->select[] = $texte . " AS $as"; |
|
| 875 | - $order = "'$as'"; |
|
| 876 | - return $order; |
|
| 863 | + $_champ = calculer_critere_par_champ($idb, $boucles, $crit, $champ, true); |
|
| 864 | + if (is_array($_champ)) { |
|
| 865 | + return array('zbug_critere_inconnu', array('critere' => $crit->op . " num $champ")); |
|
| 866 | + } |
|
| 867 | + $boucle = &$boucles[$idb]; |
|
| 868 | + $texte = '0+' . $_champ; |
|
| 869 | + $suite = calculer_liste($tri, $idb, $boucles, $boucle->id_parent); |
|
| 870 | + if ($suite !== "''") { |
|
| 871 | + $texte = "\" . ((\$x = $suite) ? ('$texte' . \$x) : '0')" . " . \""; |
|
| 872 | + } |
|
| 873 | + $as = 'num' . ($boucle->order ? count($boucle->order) : ""); |
|
| 874 | + $boucle->select[] = $texte . " AS $as"; |
|
| 875 | + $order = "'$as'"; |
|
| 876 | + return $order; |
|
| 877 | 877 | } |
| 878 | 878 | |
| 879 | 879 | /** |
@@ -894,20 +894,20 @@ discard block |
||
| 894 | 894 | * @return string Clause pour le Order by |
| 895 | 895 | */ |
| 896 | 896 | function calculer_critere_par_expression_sinum($idb, &$boucles, $crit, $tri, $champ) { |
| 897 | - $_champ = calculer_critere_par_champ($idb, $boucles, $crit, $champ, true); |
|
| 898 | - if (is_array($_champ)) { |
|
| 899 | - return array('zbug_critere_inconnu', array('critere' => $crit->op . " sinum $champ")); |
|
| 900 | - } |
|
| 901 | - $boucle = &$boucles[$idb]; |
|
| 902 | - $texte = '0+' . $_champ; |
|
| 903 | - $suite = calculer_liste($tri, $idb, $boucles, $boucle->id_parent); |
|
| 904 | - if ($suite !== "''") { |
|
| 905 | - $texte = "\" . ((\$x = $suite) ? ('$texte' . \$x) : '0')" . " . \""; |
|
| 906 | - } |
|
| 907 | - $as = 'sinum' . ($boucle->order ? count($boucle->order) : ""); |
|
| 908 | - $boucle->select[] = 'CASE (' . $texte . ') WHEN 0 THEN 1 ELSE 0 END AS ' . $as; |
|
| 909 | - $order = "'$as'"; |
|
| 910 | - return $order; |
|
| 897 | + $_champ = calculer_critere_par_champ($idb, $boucles, $crit, $champ, true); |
|
| 898 | + if (is_array($_champ)) { |
|
| 899 | + return array('zbug_critere_inconnu', array('critere' => $crit->op . " sinum $champ")); |
|
| 900 | + } |
|
| 901 | + $boucle = &$boucles[$idb]; |
|
| 902 | + $texte = '0+' . $_champ; |
|
| 903 | + $suite = calculer_liste($tri, $idb, $boucles, $boucle->id_parent); |
|
| 904 | + if ($suite !== "''") { |
|
| 905 | + $texte = "\" . ((\$x = $suite) ? ('$texte' . \$x) : '0')" . " . \""; |
|
| 906 | + } |
|
| 907 | + $as = 'sinum' . ($boucle->order ? count($boucle->order) : ""); |
|
| 908 | + $boucle->select[] = 'CASE (' . $texte . ') WHEN 0 THEN 1 ELSE 0 END AS ' . $as; |
|
| 909 | + $order = "'$as'"; |
|
| 910 | + return $order; |
|
| 911 | 911 | } |
| 912 | 912 | |
| 913 | 913 | |
@@ -927,14 +927,14 @@ discard block |
||
| 927 | 927 | * @return string Clause pour le Order by |
| 928 | 928 | */ |
| 929 | 929 | function calculer_critere_par_expression_multi($idb, &$boucles, $crit, $tri, $champ) { |
| 930 | - $_champ = calculer_critere_par_champ($idb, $boucles, $crit, $champ, true); |
|
| 931 | - if (is_array($_champ)) { |
|
| 932 | - return array('zbug_critere_inconnu', array('critere' => $crit->op . " multi $champ")); |
|
| 933 | - } |
|
| 934 | - $boucle = &$boucles[$idb]; |
|
| 935 | - $boucle->select[] = "\".sql_multi('" . $_champ . "', \$GLOBALS['spip_lang']).\""; |
|
| 936 | - $order = "'multi'"; |
|
| 937 | - return $order; |
|
| 930 | + $_champ = calculer_critere_par_champ($idb, $boucles, $crit, $champ, true); |
|
| 931 | + if (is_array($_champ)) { |
|
| 932 | + return array('zbug_critere_inconnu', array('critere' => $crit->op . " multi $champ")); |
|
| 933 | + } |
|
| 934 | + $boucle = &$boucles[$idb]; |
|
| 935 | + $boucle->select[] = "\".sql_multi('" . $_champ . "', \$GLOBALS['spip_lang']).\""; |
|
| 936 | + $order = "'multi'"; |
|
| 937 | + return $order; |
|
| 938 | 938 | } |
| 939 | 939 | |
| 940 | 940 | /** |
@@ -953,56 +953,56 @@ discard block |
||
| 953 | 953 | * @return array|string |
| 954 | 954 | */ |
| 955 | 955 | function calculer_critere_par_champ($idb, &$boucles, $crit, $par, $raw = false) { |
| 956 | - $boucle = &$boucles[$idb]; |
|
| 957 | - $desc = $boucle->show; |
|
| 958 | - |
|
| 959 | - // le champ existe dans la table, pas de souci (le plus commun) |
|
| 960 | - if (isset($desc['field'][$par])) { |
|
| 961 | - $par = $boucle->id_table . "." . $par; |
|
| 962 | - } |
|
| 963 | - // le champ est peut être une jointure |
|
| 964 | - else { |
|
| 965 | - $table = $table_alias = false; // toutes les tables de jointure possibles |
|
| 966 | - $champ = $par; |
|
| 967 | - |
|
| 968 | - // le champ demandé est une exception de jointure {par titre_mot} |
|
| 969 | - if (isset($GLOBALS['exceptions_des_jointures'][$par])) { |
|
| 970 | - list($table, $champ) = $GLOBALS['exceptions_des_jointures'][$par]; |
|
| 971 | - } // la table de jointure est explicitement indiquée {par truc.muche} |
|
| 972 | - elseif (preg_match("/^([^,]*)\.(.*)$/", $par, $r)) { |
|
| 973 | - list(, $table, $champ) = $r; |
|
| 974 | - $table_alias = $table; // c'est peut-être un alias de table {par L1.titre} |
|
| 975 | - $table = table_objet_sql($table); |
|
| 976 | - } |
|
| 977 | - |
|
| 978 | - // Si on connait la table d'arrivée, on la demande donc explicitement |
|
| 979 | - // Sinon on cherche le champ dans les tables possibles de jointures |
|
| 980 | - // Si la table est déjà dans le from, on la réutilise. |
|
| 981 | - if ($infos = chercher_champ_dans_tables($champ, $boucle->from, $boucle->sql_serveur, $table)) { |
|
| 982 | - $par = $infos['alias'] . "." . $champ; |
|
| 983 | - } elseif ( |
|
| 984 | - $boucle->jointures_explicites |
|
| 985 | - and $alias = trouver_jointure_champ($champ, $boucle, explode(' ', $boucle->jointures_explicites), false, $table) |
|
| 986 | - ) { |
|
| 987 | - $par = $alias . "." . $champ; |
|
| 988 | - } elseif ($alias = trouver_jointure_champ($champ, $boucle, $boucle->jointures, false, $table)) { |
|
| 989 | - $par = $alias . "." . $champ; |
|
| 990 | - // en spécifiant directement l'alias {par L2.titre} (situation hasardeuse tout de même) |
|
| 991 | - } elseif ( |
|
| 992 | - $table_alias |
|
| 993 | - and isset($boucle->from[$table_alias]) |
|
| 994 | - and $infos = chercher_champ_dans_tables($champ, $boucle->from, $boucle->sql_serveur, $boucle->from[$table_alias]) |
|
| 995 | - ) { |
|
| 996 | - $par = $infos['alias'] . "." . $champ; |
|
| 997 | - } elseif ($table) { |
|
| 998 | - // On avait table + champ, mais on ne les a pas trouvés |
|
| 999 | - return array('zbug_critere_inconnu', array('critere' => $crit->op . " $par")); |
|
| 1000 | - } else { |
|
| 1001 | - // Sinon tant pis, ca doit etre un champ synthetise (cf points) |
|
| 1002 | - } |
|
| 1003 | - } |
|
| 1004 | - |
|
| 1005 | - return $raw ? $par : "'$par'"; |
|
| 956 | + $boucle = &$boucles[$idb]; |
|
| 957 | + $desc = $boucle->show; |
|
| 958 | + |
|
| 959 | + // le champ existe dans la table, pas de souci (le plus commun) |
|
| 960 | + if (isset($desc['field'][$par])) { |
|
| 961 | + $par = $boucle->id_table . "." . $par; |
|
| 962 | + } |
|
| 963 | + // le champ est peut être une jointure |
|
| 964 | + else { |
|
| 965 | + $table = $table_alias = false; // toutes les tables de jointure possibles |
|
| 966 | + $champ = $par; |
|
| 967 | + |
|
| 968 | + // le champ demandé est une exception de jointure {par titre_mot} |
|
| 969 | + if (isset($GLOBALS['exceptions_des_jointures'][$par])) { |
|
| 970 | + list($table, $champ) = $GLOBALS['exceptions_des_jointures'][$par]; |
|
| 971 | + } // la table de jointure est explicitement indiquée {par truc.muche} |
|
| 972 | + elseif (preg_match("/^([^,]*)\.(.*)$/", $par, $r)) { |
|
| 973 | + list(, $table, $champ) = $r; |
|
| 974 | + $table_alias = $table; // c'est peut-être un alias de table {par L1.titre} |
|
| 975 | + $table = table_objet_sql($table); |
|
| 976 | + } |
|
| 977 | + |
|
| 978 | + // Si on connait la table d'arrivée, on la demande donc explicitement |
|
| 979 | + // Sinon on cherche le champ dans les tables possibles de jointures |
|
| 980 | + // Si la table est déjà dans le from, on la réutilise. |
|
| 981 | + if ($infos = chercher_champ_dans_tables($champ, $boucle->from, $boucle->sql_serveur, $table)) { |
|
| 982 | + $par = $infos['alias'] . "." . $champ; |
|
| 983 | + } elseif ( |
|
| 984 | + $boucle->jointures_explicites |
|
| 985 | + and $alias = trouver_jointure_champ($champ, $boucle, explode(' ', $boucle->jointures_explicites), false, $table) |
|
| 986 | + ) { |
|
| 987 | + $par = $alias . "." . $champ; |
|
| 988 | + } elseif ($alias = trouver_jointure_champ($champ, $boucle, $boucle->jointures, false, $table)) { |
|
| 989 | + $par = $alias . "." . $champ; |
|
| 990 | + // en spécifiant directement l'alias {par L2.titre} (situation hasardeuse tout de même) |
|
| 991 | + } elseif ( |
|
| 992 | + $table_alias |
|
| 993 | + and isset($boucle->from[$table_alias]) |
|
| 994 | + and $infos = chercher_champ_dans_tables($champ, $boucle->from, $boucle->sql_serveur, $boucle->from[$table_alias]) |
|
| 995 | + ) { |
|
| 996 | + $par = $infos['alias'] . "." . $champ; |
|
| 997 | + } elseif ($table) { |
|
| 998 | + // On avait table + champ, mais on ne les a pas trouvés |
|
| 999 | + return array('zbug_critere_inconnu', array('critere' => $crit->op . " $par")); |
|
| 1000 | + } else { |
|
| 1001 | + // Sinon tant pis, ca doit etre un champ synthetise (cf points) |
|
| 1002 | + } |
|
| 1003 | + } |
|
| 1004 | + |
|
| 1005 | + return $raw ? $par : "'$par'"; |
|
| 1006 | 1006 | } |
| 1007 | 1007 | |
| 1008 | 1008 | /** |
@@ -1016,11 +1016,11 @@ discard block |
||
| 1016 | 1016 | * @return string Champ pour le compilateur si trouvé, tel que "'alias.champ'", sinon vide. |
| 1017 | 1017 | */ |
| 1018 | 1018 | function critere_par_joint($table, $champ, &$boucle) { |
| 1019 | - $t = array_search($table, $boucle->from); |
|
| 1020 | - if (!$t) { |
|
| 1021 | - $t = trouver_jointure_champ($champ, $boucle); |
|
| 1022 | - } |
|
| 1023 | - return !$t ? '' : ("'" . $t . '.' . $champ . "'"); |
|
| 1019 | + $t = array_search($table, $boucle->from); |
|
| 1020 | + if (!$t) { |
|
| 1021 | + $t = trouver_jointure_champ($champ, $boucle); |
|
| 1022 | + } |
|
| 1023 | + return !$t ? '' : ("'" . $t . '.' . $champ . "'"); |
|
| 1024 | 1024 | } |
| 1025 | 1025 | |
| 1026 | 1026 | /** |
@@ -1045,143 +1045,143 @@ discard block |
||
| 1045 | 1045 | */ |
| 1046 | 1046 | function critere_inverse_dist($idb, &$boucles, $crit) { |
| 1047 | 1047 | |
| 1048 | - $boucle = &$boucles[$idb]; |
|
| 1049 | - // Classement par ordre inverse |
|
| 1050 | - if ($crit->not) { |
|
| 1051 | - critere_parinverse($idb, $boucles, $crit); |
|
| 1052 | - } else { |
|
| 1053 | - $order = "' DESC'"; |
|
| 1054 | - // Classement par ordre inverse fonction eventuelle de #ENV{...} |
|
| 1055 | - if (isset($crit->param[0])) { |
|
| 1056 | - $critere = calculer_liste($crit->param[0], $idb, $boucles, $boucles[$idb]->id_parent); |
|
| 1057 | - $order = "(($critere)?' DESC':'')"; |
|
| 1058 | - } |
|
| 1059 | - |
|
| 1060 | - $n = count($boucle->order); |
|
| 1061 | - if (!$n) { |
|
| 1062 | - if (isset($boucle->default_order[0])) { |
|
| 1063 | - $boucle->default_order[0] .= ' . " DESC"'; |
|
| 1064 | - } else { |
|
| 1065 | - $boucle->default_order[] = ' DESC'; |
|
| 1066 | - } |
|
| 1067 | - } else { |
|
| 1068 | - $t = $boucle->order[$n - 1] . " . $order"; |
|
| 1069 | - if (preg_match("/^(.*)'\s*\.\s*'([^']*')$/", $t, $r)) { |
|
| 1070 | - $t = $r[1] . $r[2]; |
|
| 1071 | - } |
|
| 1072 | - $boucle->order[$n - 1] = $t; |
|
| 1073 | - } |
|
| 1074 | - } |
|
| 1048 | + $boucle = &$boucles[$idb]; |
|
| 1049 | + // Classement par ordre inverse |
|
| 1050 | + if ($crit->not) { |
|
| 1051 | + critere_parinverse($idb, $boucles, $crit); |
|
| 1052 | + } else { |
|
| 1053 | + $order = "' DESC'"; |
|
| 1054 | + // Classement par ordre inverse fonction eventuelle de #ENV{...} |
|
| 1055 | + if (isset($crit->param[0])) { |
|
| 1056 | + $critere = calculer_liste($crit->param[0], $idb, $boucles, $boucles[$idb]->id_parent); |
|
| 1057 | + $order = "(($critere)?' DESC':'')"; |
|
| 1058 | + } |
|
| 1059 | + |
|
| 1060 | + $n = count($boucle->order); |
|
| 1061 | + if (!$n) { |
|
| 1062 | + if (isset($boucle->default_order[0])) { |
|
| 1063 | + $boucle->default_order[0] .= ' . " DESC"'; |
|
| 1064 | + } else { |
|
| 1065 | + $boucle->default_order[] = ' DESC'; |
|
| 1066 | + } |
|
| 1067 | + } else { |
|
| 1068 | + $t = $boucle->order[$n - 1] . " . $order"; |
|
| 1069 | + if (preg_match("/^(.*)'\s*\.\s*'([^']*')$/", $t, $r)) { |
|
| 1070 | + $t = $r[1] . $r[2]; |
|
| 1071 | + } |
|
| 1072 | + $boucle->order[$n - 1] = $t; |
|
| 1073 | + } |
|
| 1074 | + } |
|
| 1075 | 1075 | } |
| 1076 | 1076 | |
| 1077 | 1077 | // http://code.spip.net/@critere_agenda_dist |
| 1078 | 1078 | function critere_agenda_dist($idb, &$boucles, $crit) { |
| 1079 | - $params = $crit->param; |
|
| 1080 | - |
|
| 1081 | - if (count($params) < 1) { |
|
| 1082 | - return array('zbug_critere_inconnu', array('critere' => $crit->op . " ?")); |
|
| 1083 | - } |
|
| 1084 | - |
|
| 1085 | - $boucle = &$boucles[$idb]; |
|
| 1086 | - $parent = $boucle->id_parent; |
|
| 1087 | - $fields = $boucle->show['field']; |
|
| 1088 | - |
|
| 1089 | - $date = array_shift($params); |
|
| 1090 | - $type = array_shift($params); |
|
| 1091 | - |
|
| 1092 | - // la valeur $type doit etre connue a la compilation |
|
| 1093 | - // donc etre forcement reduite a un litteral unique dans le source |
|
| 1094 | - $type = is_object($type[0]) ? $type[0]->texte : null; |
|
| 1095 | - |
|
| 1096 | - // La valeur date doit designer un champ de la table SQL. |
|
| 1097 | - // Si c'est un litteral unique dans le source, verifier a la compil, |
|
| 1098 | - // sinon synthetiser le test de verif pour execution ulterieure |
|
| 1099 | - // On prendra arbitrairement le premier champ si test negatif. |
|
| 1100 | - if ((count($date) == 1) and ($date[0]->type == 'texte')) { |
|
| 1101 | - $date = $date[0]->texte; |
|
| 1102 | - if (!isset($fields[$date])) { |
|
| 1103 | - return array('zbug_critere_inconnu', array('critere' => $crit->op . " " . $date)); |
|
| 1104 | - } |
|
| 1105 | - } else { |
|
| 1106 | - $a = calculer_liste($date, $idb, $boucles, $parent); |
|
| 1107 | - $noms = array_keys($fields); |
|
| 1108 | - $defaut = $noms[0]; |
|
| 1109 | - $noms = join(" ", $noms); |
|
| 1110 | - # bien laisser 2 espaces avant $nom pour que strpos<>0 |
|
| 1111 | - $cond = "(\$a=strval($a))AND\nstrpos(\" $noms \",\" \$a \")"; |
|
| 1112 | - $date = "'.(($cond)\n?\$a:\"$defaut\").'"; |
|
| 1113 | - } |
|
| 1114 | - $annee = $params ? array_shift($params) : ""; |
|
| 1115 | - $annee = "\n" . 'sprintf("%04d", ($x = ' . |
|
| 1116 | - calculer_liste($annee, $idb, $boucles, $parent) . |
|
| 1117 | - ') ? $x : date("Y"))'; |
|
| 1118 | - |
|
| 1119 | - $mois = $params ? array_shift($params) : ""; |
|
| 1120 | - $mois = "\n" . 'sprintf("%02d", ($x = ' . |
|
| 1121 | - calculer_liste($mois, $idb, $boucles, $parent) . |
|
| 1122 | - ') ? $x : date("m"))'; |
|
| 1123 | - |
|
| 1124 | - $jour = $params ? array_shift($params) : ""; |
|
| 1125 | - $jour = "\n" . 'sprintf("%02d", ($x = ' . |
|
| 1126 | - calculer_liste($jour, $idb, $boucles, $parent) . |
|
| 1127 | - ') ? $x : date("d"))'; |
|
| 1128 | - |
|
| 1129 | - $annee2 = $params ? array_shift($params) : ""; |
|
| 1130 | - $annee2 = "\n" . 'sprintf("%04d", ($x = ' . |
|
| 1131 | - calculer_liste($annee2, $idb, $boucles, $parent) . |
|
| 1132 | - ') ? $x : date("Y"))'; |
|
| 1133 | - |
|
| 1134 | - $mois2 = $params ? array_shift($params) : ""; |
|
| 1135 | - $mois2 = "\n" . 'sprintf("%02d", ($x = ' . |
|
| 1136 | - calculer_liste($mois2, $idb, $boucles, $parent) . |
|
| 1137 | - ') ? $x : date("m"))'; |
|
| 1138 | - |
|
| 1139 | - $jour2 = $params ? array_shift($params) : ""; |
|
| 1140 | - $jour2 = "\n" . 'sprintf("%02d", ($x = ' . |
|
| 1141 | - calculer_liste($jour2, $idb, $boucles, $parent) . |
|
| 1142 | - ') ? $x : date("d"))'; |
|
| 1143 | - |
|
| 1144 | - $date = $boucle->id_table . ".$date"; |
|
| 1145 | - |
|
| 1146 | - $quote_end = ",'" . $boucle->sql_serveur . "','text'"; |
|
| 1147 | - if ($type == 'jour') { |
|
| 1148 | - $boucle->where[] = array( |
|
| 1149 | - "'='", |
|
| 1150 | - "'DATE_FORMAT($date, \'%Y%m%d\')'", |
|
| 1151 | - ("sql_quote($annee . $mois . $jour$quote_end)") |
|
| 1152 | - ); |
|
| 1153 | - } elseif ($type == 'mois') { |
|
| 1154 | - $boucle->where[] = array( |
|
| 1155 | - "'='", |
|
| 1156 | - "'DATE_FORMAT($date, \'%Y%m\')'", |
|
| 1157 | - ("sql_quote($annee . $mois$quote_end)") |
|
| 1158 | - ); |
|
| 1159 | - } elseif ($type == 'semaine') { |
|
| 1160 | - $boucle->where[] = array( |
|
| 1161 | - "'AND'", |
|
| 1162 | - array( |
|
| 1163 | - "'>='", |
|
| 1164 | - "'DATE_FORMAT($date, \'%Y%m%d\')'", |
|
| 1165 | - ("date_debut_semaine($annee, $mois, $jour)") |
|
| 1166 | - ), |
|
| 1167 | - array( |
|
| 1168 | - "'<='", |
|
| 1169 | - "'DATE_FORMAT($date, \'%Y%m%d\')'", |
|
| 1170 | - ("date_fin_semaine($annee, $mois, $jour)") |
|
| 1171 | - ) |
|
| 1172 | - ); |
|
| 1173 | - } elseif (count($crit->param) > 2) { |
|
| 1174 | - $boucle->where[] = array( |
|
| 1175 | - "'AND'", |
|
| 1176 | - array( |
|
| 1177 | - "'>='", |
|
| 1178 | - "'DATE_FORMAT($date, \'%Y%m%d\')'", |
|
| 1179 | - ("sql_quote($annee . $mois . $jour$quote_end)") |
|
| 1180 | - ), |
|
| 1181 | - array("'<='", "'DATE_FORMAT($date, \'%Y%m%d\')'", ("sql_quote($annee2 . $mois2 . $jour2$quote_end)")) |
|
| 1182 | - ); |
|
| 1183 | - } |
|
| 1184 | - // sinon on prend tout |
|
| 1079 | + $params = $crit->param; |
|
| 1080 | + |
|
| 1081 | + if (count($params) < 1) { |
|
| 1082 | + return array('zbug_critere_inconnu', array('critere' => $crit->op . " ?")); |
|
| 1083 | + } |
|
| 1084 | + |
|
| 1085 | + $boucle = &$boucles[$idb]; |
|
| 1086 | + $parent = $boucle->id_parent; |
|
| 1087 | + $fields = $boucle->show['field']; |
|
| 1088 | + |
|
| 1089 | + $date = array_shift($params); |
|
| 1090 | + $type = array_shift($params); |
|
| 1091 | + |
|
| 1092 | + // la valeur $type doit etre connue a la compilation |
|
| 1093 | + // donc etre forcement reduite a un litteral unique dans le source |
|
| 1094 | + $type = is_object($type[0]) ? $type[0]->texte : null; |
|
| 1095 | + |
|
| 1096 | + // La valeur date doit designer un champ de la table SQL. |
|
| 1097 | + // Si c'est un litteral unique dans le source, verifier a la compil, |
|
| 1098 | + // sinon synthetiser le test de verif pour execution ulterieure |
|
| 1099 | + // On prendra arbitrairement le premier champ si test negatif. |
|
| 1100 | + if ((count($date) == 1) and ($date[0]->type == 'texte')) { |
|
| 1101 | + $date = $date[0]->texte; |
|
| 1102 | + if (!isset($fields[$date])) { |
|
| 1103 | + return array('zbug_critere_inconnu', array('critere' => $crit->op . " " . $date)); |
|
| 1104 | + } |
|
| 1105 | + } else { |
|
| 1106 | + $a = calculer_liste($date, $idb, $boucles, $parent); |
|
| 1107 | + $noms = array_keys($fields); |
|
| 1108 | + $defaut = $noms[0]; |
|
| 1109 | + $noms = join(" ", $noms); |
|
| 1110 | + # bien laisser 2 espaces avant $nom pour que strpos<>0 |
|
| 1111 | + $cond = "(\$a=strval($a))AND\nstrpos(\" $noms \",\" \$a \")"; |
|
| 1112 | + $date = "'.(($cond)\n?\$a:\"$defaut\").'"; |
|
| 1113 | + } |
|
| 1114 | + $annee = $params ? array_shift($params) : ""; |
|
| 1115 | + $annee = "\n" . 'sprintf("%04d", ($x = ' . |
|
| 1116 | + calculer_liste($annee, $idb, $boucles, $parent) . |
|
| 1117 | + ') ? $x : date("Y"))'; |
|
| 1118 | + |
|
| 1119 | + $mois = $params ? array_shift($params) : ""; |
|
| 1120 | + $mois = "\n" . 'sprintf("%02d", ($x = ' . |
|
| 1121 | + calculer_liste($mois, $idb, $boucles, $parent) . |
|
| 1122 | + ') ? $x : date("m"))'; |
|
| 1123 | + |
|
| 1124 | + $jour = $params ? array_shift($params) : ""; |
|
| 1125 | + $jour = "\n" . 'sprintf("%02d", ($x = ' . |
|
| 1126 | + calculer_liste($jour, $idb, $boucles, $parent) . |
|
| 1127 | + ') ? $x : date("d"))'; |
|
| 1128 | + |
|
| 1129 | + $annee2 = $params ? array_shift($params) : ""; |
|
| 1130 | + $annee2 = "\n" . 'sprintf("%04d", ($x = ' . |
|
| 1131 | + calculer_liste($annee2, $idb, $boucles, $parent) . |
|
| 1132 | + ') ? $x : date("Y"))'; |
|
| 1133 | + |
|
| 1134 | + $mois2 = $params ? array_shift($params) : ""; |
|
| 1135 | + $mois2 = "\n" . 'sprintf("%02d", ($x = ' . |
|
| 1136 | + calculer_liste($mois2, $idb, $boucles, $parent) . |
|
| 1137 | + ') ? $x : date("m"))'; |
|
| 1138 | + |
|
| 1139 | + $jour2 = $params ? array_shift($params) : ""; |
|
| 1140 | + $jour2 = "\n" . 'sprintf("%02d", ($x = ' . |
|
| 1141 | + calculer_liste($jour2, $idb, $boucles, $parent) . |
|
| 1142 | + ') ? $x : date("d"))'; |
|
| 1143 | + |
|
| 1144 | + $date = $boucle->id_table . ".$date"; |
|
| 1145 | + |
|
| 1146 | + $quote_end = ",'" . $boucle->sql_serveur . "','text'"; |
|
| 1147 | + if ($type == 'jour') { |
|
| 1148 | + $boucle->where[] = array( |
|
| 1149 | + "'='", |
|
| 1150 | + "'DATE_FORMAT($date, \'%Y%m%d\')'", |
|
| 1151 | + ("sql_quote($annee . $mois . $jour$quote_end)") |
|
| 1152 | + ); |
|
| 1153 | + } elseif ($type == 'mois') { |
|
| 1154 | + $boucle->where[] = array( |
|
| 1155 | + "'='", |
|
| 1156 | + "'DATE_FORMAT($date, \'%Y%m\')'", |
|
| 1157 | + ("sql_quote($annee . $mois$quote_end)") |
|
| 1158 | + ); |
|
| 1159 | + } elseif ($type == 'semaine') { |
|
| 1160 | + $boucle->where[] = array( |
|
| 1161 | + "'AND'", |
|
| 1162 | + array( |
|
| 1163 | + "'>='", |
|
| 1164 | + "'DATE_FORMAT($date, \'%Y%m%d\')'", |
|
| 1165 | + ("date_debut_semaine($annee, $mois, $jour)") |
|
| 1166 | + ), |
|
| 1167 | + array( |
|
| 1168 | + "'<='", |
|
| 1169 | + "'DATE_FORMAT($date, \'%Y%m%d\')'", |
|
| 1170 | + ("date_fin_semaine($annee, $mois, $jour)") |
|
| 1171 | + ) |
|
| 1172 | + ); |
|
| 1173 | + } elseif (count($crit->param) > 2) { |
|
| 1174 | + $boucle->where[] = array( |
|
| 1175 | + "'AND'", |
|
| 1176 | + array( |
|
| 1177 | + "'>='", |
|
| 1178 | + "'DATE_FORMAT($date, \'%Y%m%d\')'", |
|
| 1179 | + ("sql_quote($annee . $mois . $jour$quote_end)") |
|
| 1180 | + ), |
|
| 1181 | + array("'<='", "'DATE_FORMAT($date, \'%Y%m%d\')'", ("sql_quote($annee2 . $mois2 . $jour2$quote_end)")) |
|
| 1182 | + ); |
|
| 1183 | + } |
|
| 1184 | + // sinon on prend tout |
|
| 1185 | 1185 | } |
| 1186 | 1186 | |
| 1187 | 1187 | |
@@ -1206,33 +1206,33 @@ discard block |
||
| 1206 | 1206 | * @return void |
| 1207 | 1207 | **/ |
| 1208 | 1208 | function calculer_critere_parties($idb, &$boucles, $crit) { |
| 1209 | - $boucle = &$boucles[$idb]; |
|
| 1210 | - $a1 = $crit->param[0]; |
|
| 1211 | - $a2 = $crit->param[1]; |
|
| 1212 | - $op = $crit->op; |
|
| 1213 | - |
|
| 1214 | - list($a11, $a12) = calculer_critere_parties_aux($idb, $boucles, $a1); |
|
| 1215 | - list($a21, $a22) = calculer_critere_parties_aux($idb, $boucles, $a2); |
|
| 1216 | - |
|
| 1217 | - if (($op == ',') && (is_numeric($a11) && (is_numeric($a21)))) { |
|
| 1218 | - $boucle->limit = $a11 . ',' . $a21; |
|
| 1219 | - } else { |
|
| 1220 | - // 3 dans {1/3}, {2,3} ou {1,n-3} |
|
| 1221 | - $boucle->total_parties = ($a21 != 'n') ? $a21 : $a22; |
|
| 1222 | - // 2 dans {2/3}, {2,5}, {n-2,1} |
|
| 1223 | - $partie = ($a11 != 'n') ? $a11 : $a12; |
|
| 1224 | - $mode = (($op == '/') ? '/' : |
|
| 1225 | - (($a11 == 'n') ? '-' : '+') . (($a21 == 'n') ? '-' : '+')); |
|
| 1226 | - // cas simple {0,#ENV{truc}} compilons le en LIMIT : |
|
| 1227 | - if ($a11 !== 'n' and $a21 !== 'n' and $mode == "++" and $op == ',') { |
|
| 1228 | - $boucle->limit = |
|
| 1229 | - (is_numeric($a11) ? "'$a11'" : $a11) |
|
| 1230 | - . ".','." |
|
| 1231 | - . (is_numeric($a21) ? "'$a21'" : $a21); |
|
| 1232 | - } else { |
|
| 1233 | - calculer_parties($boucles, $idb, $partie, $mode); |
|
| 1234 | - } |
|
| 1235 | - } |
|
| 1209 | + $boucle = &$boucles[$idb]; |
|
| 1210 | + $a1 = $crit->param[0]; |
|
| 1211 | + $a2 = $crit->param[1]; |
|
| 1212 | + $op = $crit->op; |
|
| 1213 | + |
|
| 1214 | + list($a11, $a12) = calculer_critere_parties_aux($idb, $boucles, $a1); |
|
| 1215 | + list($a21, $a22) = calculer_critere_parties_aux($idb, $boucles, $a2); |
|
| 1216 | + |
|
| 1217 | + if (($op == ',') && (is_numeric($a11) && (is_numeric($a21)))) { |
|
| 1218 | + $boucle->limit = $a11 . ',' . $a21; |
|
| 1219 | + } else { |
|
| 1220 | + // 3 dans {1/3}, {2,3} ou {1,n-3} |
|
| 1221 | + $boucle->total_parties = ($a21 != 'n') ? $a21 : $a22; |
|
| 1222 | + // 2 dans {2/3}, {2,5}, {n-2,1} |
|
| 1223 | + $partie = ($a11 != 'n') ? $a11 : $a12; |
|
| 1224 | + $mode = (($op == '/') ? '/' : |
|
| 1225 | + (($a11 == 'n') ? '-' : '+') . (($a21 == 'n') ? '-' : '+')); |
|
| 1226 | + // cas simple {0,#ENV{truc}} compilons le en LIMIT : |
|
| 1227 | + if ($a11 !== 'n' and $a21 !== 'n' and $mode == "++" and $op == ',') { |
|
| 1228 | + $boucle->limit = |
|
| 1229 | + (is_numeric($a11) ? "'$a11'" : $a11) |
|
| 1230 | + . ".','." |
|
| 1231 | + . (is_numeric($a21) ? "'$a21'" : $a21); |
|
| 1232 | + } else { |
|
| 1233 | + calculer_parties($boucles, $idb, $partie, $mode); |
|
| 1234 | + } |
|
| 1235 | + } |
|
| 1236 | 1236 | } |
| 1237 | 1237 | |
| 1238 | 1238 | /** |
@@ -1260,63 +1260,63 @@ discard block |
||
| 1260 | 1260 | * @return void |
| 1261 | 1261 | **/ |
| 1262 | 1262 | function calculer_parties(&$boucles, $id_boucle, $debut, $mode) { |
| 1263 | - $total_parties = $boucles[$id_boucle]->total_parties; |
|
| 1264 | - |
|
| 1265 | - preg_match(",([+-/p])([+-/])?,", $mode, $regs); |
|
| 1266 | - list(, $op1, $op2) = array_pad($regs, 3, null); |
|
| 1267 | - $nombre_boucle = "\$Numrows['$id_boucle']['total']"; |
|
| 1268 | - // {1/3} |
|
| 1269 | - if ($op1 == '/') { |
|
| 1270 | - $pmoins1 = is_numeric($debut) ? ($debut - 1) : "($debut-1)"; |
|
| 1271 | - $totpos = is_numeric($total_parties) ? ($total_parties) : |
|
| 1272 | - "($total_parties ? $total_parties : 1)"; |
|
| 1273 | - $fin = "ceil(($nombre_boucle * $debut )/$totpos) - 1"; |
|
| 1274 | - $debut = !$pmoins1 ? 0 : "ceil(($nombre_boucle * $pmoins1)/$totpos);"; |
|
| 1275 | - } else { |
|
| 1276 | - // cas {n-1,x} |
|
| 1277 | - if ($op1 == '-') { |
|
| 1278 | - $debut = "$nombre_boucle - $debut;"; |
|
| 1279 | - } |
|
| 1280 | - |
|
| 1281 | - // cas {x,n-1} |
|
| 1282 | - if ($op2 == '-') { |
|
| 1283 | - $fin = '$debut_boucle + ' . $nombre_boucle . ' - ' |
|
| 1284 | - . (is_numeric($total_parties) ? ($total_parties + 1) : |
|
| 1285 | - ($total_parties . ' - 1')); |
|
| 1286 | - } else { |
|
| 1287 | - // {x,1} ou {pagination} |
|
| 1288 | - $fin = '$debut_boucle' |
|
| 1289 | - . (is_numeric($total_parties) ? |
|
| 1290 | - (($total_parties == 1) ? "" : (' + ' . ($total_parties - 1))) : |
|
| 1291 | - ('+' . $total_parties . ' - 1')); |
|
| 1292 | - } |
|
| 1293 | - |
|
| 1294 | - // {pagination}, gerer le debut_xx=-1 pour tout voir |
|
| 1295 | - if ($op1 == 'p') { |
|
| 1296 | - $debut .= ";\n \$debut_boucle = ((\$tout=(\$debut_boucle == -1))?0:(\$debut_boucle))"; |
|
| 1297 | - $debut .= ";\n \$debut_boucle = max(0,min(\$debut_boucle,floor(($nombre_boucle-1)/($total_parties))*($total_parties)))"; |
|
| 1298 | - $fin = "(\$tout ? $nombre_boucle : $fin)"; |
|
| 1299 | - } |
|
| 1300 | - } |
|
| 1301 | - |
|
| 1302 | - // Notes : |
|
| 1303 | - // $debut_boucle et $fin_boucle sont les indices SQL du premier |
|
| 1304 | - // et du dernier demandes dans la boucle : 0 pour le premier, |
|
| 1305 | - // n-1 pour le dernier ; donc total_boucle = 1 + debut - fin |
|
| 1306 | - // Utiliser min pour rabattre $fin_boucle sur total_boucle. |
|
| 1307 | - |
|
| 1308 | - $boucles[$id_boucle]->mode_partie = "\n\t" |
|
| 1309 | - . '$debut_boucle = ' . $debut . ";\n " |
|
| 1310 | - . "\$debut_boucle = intval(\$debut_boucle);\n " |
|
| 1311 | - . '$fin_boucle = min(' . $fin . ", \$Numrows['$id_boucle']['total'] - 1);\n " |
|
| 1312 | - . '$Numrows[\'' . $id_boucle . "']['grand_total'] = \$Numrows['$id_boucle']['total'];\n " |
|
| 1313 | - . '$Numrows[\'' . $id_boucle . '\']["total"] = max(0,$fin_boucle - $debut_boucle + 1);' |
|
| 1314 | - . "\n\tif (\$debut_boucle>0" |
|
| 1315 | - . " AND \$debut_boucle < \$Numrows['$id_boucle']['grand_total']" |
|
| 1316 | - . " AND \$iter->seek(\$debut_boucle,'continue'))" |
|
| 1317 | - . "\n\t\t\$Numrows['$id_boucle']['compteur_boucle'] = \$debut_boucle;\n\t"; |
|
| 1318 | - |
|
| 1319 | - $boucles[$id_boucle]->partie = " |
|
| 1263 | + $total_parties = $boucles[$id_boucle]->total_parties; |
|
| 1264 | + |
|
| 1265 | + preg_match(",([+-/p])([+-/])?,", $mode, $regs); |
|
| 1266 | + list(, $op1, $op2) = array_pad($regs, 3, null); |
|
| 1267 | + $nombre_boucle = "\$Numrows['$id_boucle']['total']"; |
|
| 1268 | + // {1/3} |
|
| 1269 | + if ($op1 == '/') { |
|
| 1270 | + $pmoins1 = is_numeric($debut) ? ($debut - 1) : "($debut-1)"; |
|
| 1271 | + $totpos = is_numeric($total_parties) ? ($total_parties) : |
|
| 1272 | + "($total_parties ? $total_parties : 1)"; |
|
| 1273 | + $fin = "ceil(($nombre_boucle * $debut )/$totpos) - 1"; |
|
| 1274 | + $debut = !$pmoins1 ? 0 : "ceil(($nombre_boucle * $pmoins1)/$totpos);"; |
|
| 1275 | + } else { |
|
| 1276 | + // cas {n-1,x} |
|
| 1277 | + if ($op1 == '-') { |
|
| 1278 | + $debut = "$nombre_boucle - $debut;"; |
|
| 1279 | + } |
|
| 1280 | + |
|
| 1281 | + // cas {x,n-1} |
|
| 1282 | + if ($op2 == '-') { |
|
| 1283 | + $fin = '$debut_boucle + ' . $nombre_boucle . ' - ' |
|
| 1284 | + . (is_numeric($total_parties) ? ($total_parties + 1) : |
|
| 1285 | + ($total_parties . ' - 1')); |
|
| 1286 | + } else { |
|
| 1287 | + // {x,1} ou {pagination} |
|
| 1288 | + $fin = '$debut_boucle' |
|
| 1289 | + . (is_numeric($total_parties) ? |
|
| 1290 | + (($total_parties == 1) ? "" : (' + ' . ($total_parties - 1))) : |
|
| 1291 | + ('+' . $total_parties . ' - 1')); |
|
| 1292 | + } |
|
| 1293 | + |
|
| 1294 | + // {pagination}, gerer le debut_xx=-1 pour tout voir |
|
| 1295 | + if ($op1 == 'p') { |
|
| 1296 | + $debut .= ";\n \$debut_boucle = ((\$tout=(\$debut_boucle == -1))?0:(\$debut_boucle))"; |
|
| 1297 | + $debut .= ";\n \$debut_boucle = max(0,min(\$debut_boucle,floor(($nombre_boucle-1)/($total_parties))*($total_parties)))"; |
|
| 1298 | + $fin = "(\$tout ? $nombre_boucle : $fin)"; |
|
| 1299 | + } |
|
| 1300 | + } |
|
| 1301 | + |
|
| 1302 | + // Notes : |
|
| 1303 | + // $debut_boucle et $fin_boucle sont les indices SQL du premier |
|
| 1304 | + // et du dernier demandes dans la boucle : 0 pour le premier, |
|
| 1305 | + // n-1 pour le dernier ; donc total_boucle = 1 + debut - fin |
|
| 1306 | + // Utiliser min pour rabattre $fin_boucle sur total_boucle. |
|
| 1307 | + |
|
| 1308 | + $boucles[$id_boucle]->mode_partie = "\n\t" |
|
| 1309 | + . '$debut_boucle = ' . $debut . ";\n " |
|
| 1310 | + . "\$debut_boucle = intval(\$debut_boucle);\n " |
|
| 1311 | + . '$fin_boucle = min(' . $fin . ", \$Numrows['$id_boucle']['total'] - 1);\n " |
|
| 1312 | + . '$Numrows[\'' . $id_boucle . "']['grand_total'] = \$Numrows['$id_boucle']['total'];\n " |
|
| 1313 | + . '$Numrows[\'' . $id_boucle . '\']["total"] = max(0,$fin_boucle - $debut_boucle + 1);' |
|
| 1314 | + . "\n\tif (\$debut_boucle>0" |
|
| 1315 | + . " AND \$debut_boucle < \$Numrows['$id_boucle']['grand_total']" |
|
| 1316 | + . " AND \$iter->seek(\$debut_boucle,'continue'))" |
|
| 1317 | + . "\n\t\t\$Numrows['$id_boucle']['compteur_boucle'] = \$debut_boucle;\n\t"; |
|
| 1318 | + |
|
| 1319 | + $boucles[$id_boucle]->partie = " |
|
| 1320 | 1320 | if (\$Numrows['$id_boucle']['compteur_boucle'] <= \$debut_boucle) continue; |
| 1321 | 1321 | if (\$Numrows['$id_boucle']['compteur_boucle']-1 > \$fin_boucle) break;"; |
| 1322 | 1322 | } |
@@ -1333,26 +1333,26 @@ discard block |
||
| 1333 | 1333 | * @return array Valeur de l'élément (peut être une expression PHP), Nombre soustrait |
| 1334 | 1334 | **/ |
| 1335 | 1335 | function calculer_critere_parties_aux($idb, &$boucles, $param) { |
| 1336 | - if ($param[0]->type != 'texte') { |
|
| 1337 | - $a1 = calculer_liste(array($param[0]), $idb, $boucles, $boucles[$idb]->id_parent); |
|
| 1338 | - if (isset($param[1]->texte)) { |
|
| 1339 | - preg_match(',^ *(-([0-9]+))? *$,', $param[1]->texte, $m); |
|
| 1340 | - |
|
| 1341 | - return array("intval($a1)", ((isset($m[2]) and $m[2]) ? $m[2] : 0)); |
|
| 1342 | - } else { |
|
| 1343 | - return array("intval($a1)", 0); |
|
| 1344 | - } |
|
| 1345 | - } else { |
|
| 1346 | - preg_match(',^ *(([0-9]+)|n) *(- *([0-9]+)? *)?$,', $param[0]->texte, $m); |
|
| 1347 | - $a1 = $m[1]; |
|
| 1348 | - if (empty($m[3])) { |
|
| 1349 | - return array($a1, 0); |
|
| 1350 | - } elseif (!empty($m[4])) { |
|
| 1351 | - return array($a1, $m[4]); |
|
| 1352 | - } else { |
|
| 1353 | - return array($a1, calculer_liste(array($param[1]), $idb, $boucles, $boucles[$idb]->id_parent)); |
|
| 1354 | - } |
|
| 1355 | - } |
|
| 1336 | + if ($param[0]->type != 'texte') { |
|
| 1337 | + $a1 = calculer_liste(array($param[0]), $idb, $boucles, $boucles[$idb]->id_parent); |
|
| 1338 | + if (isset($param[1]->texte)) { |
|
| 1339 | + preg_match(',^ *(-([0-9]+))? *$,', $param[1]->texte, $m); |
|
| 1340 | + |
|
| 1341 | + return array("intval($a1)", ((isset($m[2]) and $m[2]) ? $m[2] : 0)); |
|
| 1342 | + } else { |
|
| 1343 | + return array("intval($a1)", 0); |
|
| 1344 | + } |
|
| 1345 | + } else { |
|
| 1346 | + preg_match(',^ *(([0-9]+)|n) *(- *([0-9]+)? *)?$,', $param[0]->texte, $m); |
|
| 1347 | + $a1 = $m[1]; |
|
| 1348 | + if (empty($m[3])) { |
|
| 1349 | + return array($a1, 0); |
|
| 1350 | + } elseif (!empty($m[4])) { |
|
| 1351 | + return array($a1, $m[4]); |
|
| 1352 | + } else { |
|
| 1353 | + return array($a1, calculer_liste(array($param[1]), $idb, $boucles, $boucles[$idb]->id_parent)); |
|
| 1354 | + } |
|
| 1355 | + } |
|
| 1356 | 1356 | } |
| 1357 | 1357 | |
| 1358 | 1358 | |
@@ -1379,47 +1379,47 @@ discard block |
||
| 1379 | 1379 | * array : Erreur sur un des critères |
| 1380 | 1380 | **/ |
| 1381 | 1381 | function calculer_criteres($idb, &$boucles) { |
| 1382 | - $msg = ''; |
|
| 1383 | - $boucle = $boucles[$idb]; |
|
| 1384 | - $table = strtoupper($boucle->type_requete); |
|
| 1385 | - $serveur = strtolower($boucle->sql_serveur); |
|
| 1386 | - |
|
| 1387 | - $defaut = charger_fonction('DEFAUT', 'calculer_critere'); |
|
| 1388 | - // s'il y avait une erreur de syntaxe, propager cette info |
|
| 1389 | - if (!is_array($boucle->criteres)) { |
|
| 1390 | - return array(); |
|
| 1391 | - } |
|
| 1392 | - |
|
| 1393 | - foreach ($boucle->criteres as $crit) { |
|
| 1394 | - $critere = $crit->op; |
|
| 1395 | - // critere personnalise ? |
|
| 1396 | - if ( |
|
| 1397 | - (!$serveur or |
|
| 1398 | - ((!function_exists($f = "critere_" . $serveur . "_" . $table . "_" . $critere)) |
|
| 1399 | - and (!function_exists($f = $f . "_dist")) |
|
| 1400 | - and (!function_exists($f = "critere_" . $serveur . "_" . $critere)) |
|
| 1401 | - and (!function_exists($f = $f . "_dist")) |
|
| 1402 | - ) |
|
| 1403 | - ) |
|
| 1404 | - and (!function_exists($f = "critere_" . $table . "_" . $critere)) |
|
| 1405 | - and (!function_exists($f = $f . "_dist")) |
|
| 1406 | - and (!function_exists($f = "critere_" . $critere)) |
|
| 1407 | - and (!function_exists($f = $f . "_dist")) |
|
| 1408 | - ) { |
|
| 1409 | - // fonction critere standard |
|
| 1410 | - $f = $defaut; |
|
| 1411 | - } |
|
| 1412 | - // compile le critere |
|
| 1413 | - $res = $f($idb, $boucles, $crit); |
|
| 1414 | - |
|
| 1415 | - // Gestion centralisee des erreurs pour pouvoir propager |
|
| 1416 | - if (is_array($res)) { |
|
| 1417 | - $msg = $res; |
|
| 1418 | - erreur_squelette($msg, $boucle); |
|
| 1419 | - } |
|
| 1420 | - } |
|
| 1421 | - |
|
| 1422 | - return $msg; |
|
| 1382 | + $msg = ''; |
|
| 1383 | + $boucle = $boucles[$idb]; |
|
| 1384 | + $table = strtoupper($boucle->type_requete); |
|
| 1385 | + $serveur = strtolower($boucle->sql_serveur); |
|
| 1386 | + |
|
| 1387 | + $defaut = charger_fonction('DEFAUT', 'calculer_critere'); |
|
| 1388 | + // s'il y avait une erreur de syntaxe, propager cette info |
|
| 1389 | + if (!is_array($boucle->criteres)) { |
|
| 1390 | + return array(); |
|
| 1391 | + } |
|
| 1392 | + |
|
| 1393 | + foreach ($boucle->criteres as $crit) { |
|
| 1394 | + $critere = $crit->op; |
|
| 1395 | + // critere personnalise ? |
|
| 1396 | + if ( |
|
| 1397 | + (!$serveur or |
|
| 1398 | + ((!function_exists($f = "critere_" . $serveur . "_" . $table . "_" . $critere)) |
|
| 1399 | + and (!function_exists($f = $f . "_dist")) |
|
| 1400 | + and (!function_exists($f = "critere_" . $serveur . "_" . $critere)) |
|
| 1401 | + and (!function_exists($f = $f . "_dist")) |
|
| 1402 | + ) |
|
| 1403 | + ) |
|
| 1404 | + and (!function_exists($f = "critere_" . $table . "_" . $critere)) |
|
| 1405 | + and (!function_exists($f = $f . "_dist")) |
|
| 1406 | + and (!function_exists($f = "critere_" . $critere)) |
|
| 1407 | + and (!function_exists($f = $f . "_dist")) |
|
| 1408 | + ) { |
|
| 1409 | + // fonction critere standard |
|
| 1410 | + $f = $defaut; |
|
| 1411 | + } |
|
| 1412 | + // compile le critere |
|
| 1413 | + $res = $f($idb, $boucles, $crit); |
|
| 1414 | + |
|
| 1415 | + // Gestion centralisee des erreurs pour pouvoir propager |
|
| 1416 | + if (is_array($res)) { |
|
| 1417 | + $msg = $res; |
|
| 1418 | + erreur_squelette($msg, $boucle); |
|
| 1419 | + } |
|
| 1420 | + } |
|
| 1421 | + |
|
| 1422 | + return $msg; |
|
| 1423 | 1423 | } |
| 1424 | 1424 | |
| 1425 | 1425 | /** |
@@ -1436,11 +1436,11 @@ discard block |
||
| 1436 | 1436 | * @return string Code compilé rééchappé |
| 1437 | 1437 | */ |
| 1438 | 1438 | function kwote($lisp, $serveur = '', $type = '') { |
| 1439 | - if (preg_match(_CODE_QUOTE, $lisp, $r)) { |
|
| 1440 | - return $r[1] . "\"" . sql_quote(str_replace(array("\\'", "\\\\"), array("'", "\\"), $r[2]), $serveur, $type) . "\""; |
|
| 1441 | - } else { |
|
| 1442 | - return "sql_quote($lisp, '$serveur', '" . str_replace("'", "\\'", $type) . "')"; |
|
| 1443 | - } |
|
| 1439 | + if (preg_match(_CODE_QUOTE, $lisp, $r)) { |
|
| 1440 | + return $r[1] . "\"" . sql_quote(str_replace(array("\\'", "\\\\"), array("'", "\\"), $r[2]), $serveur, $type) . "\""; |
|
| 1441 | + } else { |
|
| 1442 | + return "sql_quote($lisp, '$serveur', '" . str_replace("'", "\\'", $type) . "')"; |
|
| 1443 | + } |
|
| 1444 | 1444 | } |
| 1445 | 1445 | |
| 1446 | 1446 | |
@@ -1459,85 +1459,85 @@ discard block |
||
| 1459 | 1459 | * @return void |
| 1460 | 1460 | **/ |
| 1461 | 1461 | function critere_IN_dist($idb, &$boucles, $crit) { |
| 1462 | - $r = calculer_critere_infixe($idb, $boucles, $crit); |
|
| 1463 | - if (!$r) { |
|
| 1464 | - return (array('zbug_critere_inconnu', array('critere' => $crit->op . " ?"))); |
|
| 1465 | - } |
|
| 1466 | - list($arg, $op, $val, $col, $where_complement) = $r; |
|
| 1467 | - |
|
| 1468 | - $in = critere_IN_cas($idb, $boucles, $crit->not ? 'NOT' : ($crit->exclus ? 'exclus' : ''), $arg, $op, $val, $col); |
|
| 1469 | - |
|
| 1470 | - // inserer la condition; exemple: {id_mot ?IN (66, 62, 64)} |
|
| 1471 | - $where = $in; |
|
| 1472 | - if ($crit->cond) { |
|
| 1473 | - $pred = calculer_argument_precedent($idb, $col, $boucles); |
|
| 1474 | - $where = array("'?'", $pred, $where, "''"); |
|
| 1475 | - if ($where_complement) // condition annexe du type "AND (objet='article')" |
|
| 1476 | - { |
|
| 1477 | - $where_complement = array("'?'", $pred, $where_complement, "''"); |
|
| 1478 | - } |
|
| 1479 | - } |
|
| 1480 | - if ($crit->exclus) { |
|
| 1481 | - if (!preg_match(",^L[0-9]+[.],", $arg)) { |
|
| 1482 | - $where = array("'NOT'", $where); |
|
| 1483 | - } else |
|
| 1484 | - // un not sur un critere de jointure se traduit comme un NOT IN avec une sous requete |
|
| 1485 | - // c'est une sous requete identique a la requete principale sous la forme (SELF,$select,$where) avec $select et $where qui surchargent |
|
| 1486 | - { |
|
| 1487 | - $where = array( |
|
| 1488 | - "'NOT'", |
|
| 1489 | - array( |
|
| 1490 | - "'IN'", |
|
| 1491 | - "'" . $boucles[$idb]->id_table . "." . $boucles[$idb]->primary . "'", |
|
| 1492 | - array("'SELF'", "'" . $boucles[$idb]->id_table . "." . $boucles[$idb]->primary . "'", $where) |
|
| 1493 | - ) |
|
| 1494 | - ); |
|
| 1495 | - } |
|
| 1496 | - } |
|
| 1497 | - |
|
| 1498 | - $boucles[$idb]->where[] = $where; |
|
| 1499 | - if ($where_complement) // condition annexe du type "AND (objet='article')" |
|
| 1500 | - { |
|
| 1501 | - $boucles[$idb]->where[] = $where_complement; |
|
| 1502 | - } |
|
| 1462 | + $r = calculer_critere_infixe($idb, $boucles, $crit); |
|
| 1463 | + if (!$r) { |
|
| 1464 | + return (array('zbug_critere_inconnu', array('critere' => $crit->op . " ?"))); |
|
| 1465 | + } |
|
| 1466 | + list($arg, $op, $val, $col, $where_complement) = $r; |
|
| 1467 | + |
|
| 1468 | + $in = critere_IN_cas($idb, $boucles, $crit->not ? 'NOT' : ($crit->exclus ? 'exclus' : ''), $arg, $op, $val, $col); |
|
| 1469 | + |
|
| 1470 | + // inserer la condition; exemple: {id_mot ?IN (66, 62, 64)} |
|
| 1471 | + $where = $in; |
|
| 1472 | + if ($crit->cond) { |
|
| 1473 | + $pred = calculer_argument_precedent($idb, $col, $boucles); |
|
| 1474 | + $where = array("'?'", $pred, $where, "''"); |
|
| 1475 | + if ($where_complement) // condition annexe du type "AND (objet='article')" |
|
| 1476 | + { |
|
| 1477 | + $where_complement = array("'?'", $pred, $where_complement, "''"); |
|
| 1478 | + } |
|
| 1479 | + } |
|
| 1480 | + if ($crit->exclus) { |
|
| 1481 | + if (!preg_match(",^L[0-9]+[.],", $arg)) { |
|
| 1482 | + $where = array("'NOT'", $where); |
|
| 1483 | + } else |
|
| 1484 | + // un not sur un critere de jointure se traduit comme un NOT IN avec une sous requete |
|
| 1485 | + // c'est une sous requete identique a la requete principale sous la forme (SELF,$select,$where) avec $select et $where qui surchargent |
|
| 1486 | + { |
|
| 1487 | + $where = array( |
|
| 1488 | + "'NOT'", |
|
| 1489 | + array( |
|
| 1490 | + "'IN'", |
|
| 1491 | + "'" . $boucles[$idb]->id_table . "." . $boucles[$idb]->primary . "'", |
|
| 1492 | + array("'SELF'", "'" . $boucles[$idb]->id_table . "." . $boucles[$idb]->primary . "'", $where) |
|
| 1493 | + ) |
|
| 1494 | + ); |
|
| 1495 | + } |
|
| 1496 | + } |
|
| 1497 | + |
|
| 1498 | + $boucles[$idb]->where[] = $where; |
|
| 1499 | + if ($where_complement) // condition annexe du type "AND (objet='article')" |
|
| 1500 | + { |
|
| 1501 | + $boucles[$idb]->where[] = $where_complement; |
|
| 1502 | + } |
|
| 1503 | 1503 | } |
| 1504 | 1504 | |
| 1505 | 1505 | // http://code.spip.net/@critere_IN_cas |
| 1506 | 1506 | function critere_IN_cas($idb, &$boucles, $crit2, $arg, $op, $val, $col) { |
| 1507 | - static $num = array(); |
|
| 1508 | - $descr = $boucles[$idb]->descr; |
|
| 1509 | - $cpt = &$num[$descr['nom']][$descr['gram']][$idb]; |
|
| 1510 | - |
|
| 1511 | - $var = '$in' . $cpt++; |
|
| 1512 | - $x = "\n\t$var = array();"; |
|
| 1513 | - foreach ($val as $k => $v) { |
|
| 1514 | - if (preg_match(",^(\n//.*\n)?'(.*)'$,", $v, $r)) { |
|
| 1515 | - // optimiser le traitement des constantes |
|
| 1516 | - if (is_numeric($r[2])) { |
|
| 1517 | - $x .= "\n\t$var" . "[]= $r[2];"; |
|
| 1518 | - } else { |
|
| 1519 | - $x .= "\n\t$var" . "[]= " . sql_quote($r[2]) . ";"; |
|
| 1520 | - } |
|
| 1521 | - } else { |
|
| 1522 | - // Pour permettre de passer des tableaux de valeurs |
|
| 1523 | - // on repere l'utilisation brute de #ENV**{X}, |
|
| 1524 | - // c'est-a-dire sa traduction en ($PILE[0][X]). |
|
| 1525 | - // et on deballe mais en rajoutant l'anti XSS |
|
| 1526 | - $x .= "\n\tif (!(is_array(\$a = ($v))))\n\t\t$var" . "[]= \$a;\n\telse $var = array_merge($var, \$a);"; |
|
| 1527 | - } |
|
| 1528 | - } |
|
| 1529 | - |
|
| 1530 | - $boucles[$idb]->in .= $x; |
|
| 1531 | - |
|
| 1532 | - // inserer le tri par defaut selon les ordres du IN ... |
|
| 1533 | - // avec une ecriture de type FIELD qui degrade les performances (du meme ordre qu'un regexp) |
|
| 1534 | - // et que l'on limite donc strictement aux cas necessaires : |
|
| 1535 | - // si ce n'est pas un !IN, et si il n'y a pas d'autre order dans la boucle |
|
| 1536 | - if (!$crit2) { |
|
| 1537 | - $boucles[$idb]->default_order[] = "((!\$zqv=sql_quote($var) OR \$zqv===\"''\") ? 0 : ('FIELD($arg,' . \$zqv . ')'))"; |
|
| 1538 | - } |
|
| 1539 | - |
|
| 1540 | - return "sql_in('$arg', $var" . ($crit2 == 'NOT' ? ",'NOT'" : "") . ")"; |
|
| 1507 | + static $num = array(); |
|
| 1508 | + $descr = $boucles[$idb]->descr; |
|
| 1509 | + $cpt = &$num[$descr['nom']][$descr['gram']][$idb]; |
|
| 1510 | + |
|
| 1511 | + $var = '$in' . $cpt++; |
|
| 1512 | + $x = "\n\t$var = array();"; |
|
| 1513 | + foreach ($val as $k => $v) { |
|
| 1514 | + if (preg_match(",^(\n//.*\n)?'(.*)'$,", $v, $r)) { |
|
| 1515 | + // optimiser le traitement des constantes |
|
| 1516 | + if (is_numeric($r[2])) { |
|
| 1517 | + $x .= "\n\t$var" . "[]= $r[2];"; |
|
| 1518 | + } else { |
|
| 1519 | + $x .= "\n\t$var" . "[]= " . sql_quote($r[2]) . ";"; |
|
| 1520 | + } |
|
| 1521 | + } else { |
|
| 1522 | + // Pour permettre de passer des tableaux de valeurs |
|
| 1523 | + // on repere l'utilisation brute de #ENV**{X}, |
|
| 1524 | + // c'est-a-dire sa traduction en ($PILE[0][X]). |
|
| 1525 | + // et on deballe mais en rajoutant l'anti XSS |
|
| 1526 | + $x .= "\n\tif (!(is_array(\$a = ($v))))\n\t\t$var" . "[]= \$a;\n\telse $var = array_merge($var, \$a);"; |
|
| 1527 | + } |
|
| 1528 | + } |
|
| 1529 | + |
|
| 1530 | + $boucles[$idb]->in .= $x; |
|
| 1531 | + |
|
| 1532 | + // inserer le tri par defaut selon les ordres du IN ... |
|
| 1533 | + // avec une ecriture de type FIELD qui degrade les performances (du meme ordre qu'un regexp) |
|
| 1534 | + // et que l'on limite donc strictement aux cas necessaires : |
|
| 1535 | + // si ce n'est pas un !IN, et si il n'y a pas d'autre order dans la boucle |
|
| 1536 | + if (!$crit2) { |
|
| 1537 | + $boucles[$idb]->default_order[] = "((!\$zqv=sql_quote($var) OR \$zqv===\"''\") ? 0 : ('FIELD($arg,' . \$zqv . ')'))"; |
|
| 1538 | + } |
|
| 1539 | + |
|
| 1540 | + return "sql_in('$arg', $var" . ($crit2 == 'NOT' ? ",'NOT'" : "") . ")"; |
|
| 1541 | 1541 | } |
| 1542 | 1542 | |
| 1543 | 1543 | /** |
@@ -1553,22 +1553,22 @@ discard block |
||
| 1553 | 1553 | * @return void |
| 1554 | 1554 | */ |
| 1555 | 1555 | function critere_where_dist($idb, &$boucles, $crit) { |
| 1556 | - $boucle = &$boucles[$idb]; |
|
| 1557 | - if (isset($crit->param[0])) { |
|
| 1558 | - $_where = calculer_liste($crit->param[0], $idb, $boucles, $boucle->id_parent); |
|
| 1559 | - } else { |
|
| 1560 | - $_where = '@$Pile[0]["where"]'; |
|
| 1561 | - } |
|
| 1562 | - |
|
| 1563 | - if ($crit->cond) { |
|
| 1564 | - $_where = "(($_where) ? ($_where) : '')"; |
|
| 1565 | - } |
|
| 1566 | - |
|
| 1567 | - if ($crit->not) { |
|
| 1568 | - $_where = "array('NOT',$_where)"; |
|
| 1569 | - } |
|
| 1570 | - |
|
| 1571 | - $boucle->where[] = $_where; |
|
| 1556 | + $boucle = &$boucles[$idb]; |
|
| 1557 | + if (isset($crit->param[0])) { |
|
| 1558 | + $_where = calculer_liste($crit->param[0], $idb, $boucles, $boucle->id_parent); |
|
| 1559 | + } else { |
|
| 1560 | + $_where = '@$Pile[0]["where"]'; |
|
| 1561 | + } |
|
| 1562 | + |
|
| 1563 | + if ($crit->cond) { |
|
| 1564 | + $_where = "(($_where) ? ($_where) : '')"; |
|
| 1565 | + } |
|
| 1566 | + |
|
| 1567 | + if ($crit->not) { |
|
| 1568 | + $_where = "array('NOT',$_where)"; |
|
| 1569 | + } |
|
| 1570 | + |
|
| 1571 | + $boucle->where[] = $_where; |
|
| 1572 | 1572 | } |
| 1573 | 1573 | |
| 1574 | 1574 | /** |
@@ -1596,31 +1596,31 @@ discard block |
||
| 1596 | 1596 | * @return void |
| 1597 | 1597 | */ |
| 1598 | 1598 | function critere_id__dist($idb, &$boucles, $crit) { |
| 1599 | - /** @var Boucle $boucle */ |
|
| 1600 | - $boucle = $boucles[$idb]; |
|
| 1601 | - |
|
| 1602 | - $champs = lister_champs_id_conditionnel( |
|
| 1603 | - $boucle->show['table'], |
|
| 1604 | - $boucle->show, |
|
| 1605 | - $boucle->sql_serveur |
|
| 1606 | - ); |
|
| 1607 | - |
|
| 1608 | - // ne pas tenir compte des critères identiques déjà présents. |
|
| 1609 | - if (!empty($boucle->modificateur['criteres'])) { |
|
| 1610 | - $champs = array_diff($champs, array_keys($boucle->modificateur['criteres'])); |
|
| 1611 | - } |
|
| 1612 | - // nous aider en mode debug. |
|
| 1613 | - $boucle->debug[] = "id_ : " . implode(', ', $champs); |
|
| 1614 | - $boucle->modificateur['id_'] = $champs; |
|
| 1615 | - |
|
| 1616 | - // créer un critère {id_xxx?} de chaque champ retenu |
|
| 1617 | - foreach ($champs as $champ) { |
|
| 1618 | - $critere_id_table = new Critere; |
|
| 1619 | - $critere_id_table->op = $champ; |
|
| 1620 | - $critere_id_table->cond = '?'; |
|
| 1621 | - $critere_id_table->ligne = $crit->ligne; |
|
| 1622 | - calculer_critere_DEFAUT_dist($idb, $boucles, $critere_id_table); |
|
| 1623 | - } |
|
| 1599 | + /** @var Boucle $boucle */ |
|
| 1600 | + $boucle = $boucles[$idb]; |
|
| 1601 | + |
|
| 1602 | + $champs = lister_champs_id_conditionnel( |
|
| 1603 | + $boucle->show['table'], |
|
| 1604 | + $boucle->show, |
|
| 1605 | + $boucle->sql_serveur |
|
| 1606 | + ); |
|
| 1607 | + |
|
| 1608 | + // ne pas tenir compte des critères identiques déjà présents. |
|
| 1609 | + if (!empty($boucle->modificateur['criteres'])) { |
|
| 1610 | + $champs = array_diff($champs, array_keys($boucle->modificateur['criteres'])); |
|
| 1611 | + } |
|
| 1612 | + // nous aider en mode debug. |
|
| 1613 | + $boucle->debug[] = "id_ : " . implode(', ', $champs); |
|
| 1614 | + $boucle->modificateur['id_'] = $champs; |
|
| 1615 | + |
|
| 1616 | + // créer un critère {id_xxx?} de chaque champ retenu |
|
| 1617 | + foreach ($champs as $champ) { |
|
| 1618 | + $critere_id_table = new Critere; |
|
| 1619 | + $critere_id_table->op = $champ; |
|
| 1620 | + $critere_id_table->cond = '?'; |
|
| 1621 | + $critere_id_table->ligne = $crit->ligne; |
|
| 1622 | + calculer_critere_DEFAUT_dist($idb, $boucles, $critere_id_table); |
|
| 1623 | + } |
|
| 1624 | 1624 | } |
| 1625 | 1625 | |
| 1626 | 1626 | /** |
@@ -1640,79 +1640,79 @@ discard block |
||
| 1640 | 1640 | * @return array Liste de nom de champs (tel que id_article, id_mot, id_parent ...) |
| 1641 | 1641 | */ |
| 1642 | 1642 | function lister_champs_id_conditionnel($table, $desc = null, $serveur = '') { |
| 1643 | - // calculer la description de la table |
|
| 1644 | - if (!is_array($desc)) { |
|
| 1645 | - $desc = description_table($table, $serveur); |
|
| 1646 | - } |
|
| 1647 | - if (!$desc) { |
|
| 1648 | - return []; |
|
| 1649 | - } |
|
| 1650 | - |
|
| 1651 | - // Les champs id_xx de la table demandée |
|
| 1652 | - $champs = array_filter( |
|
| 1653 | - array_keys($desc['field']), |
|
| 1654 | - function($champ){ |
|
| 1655 | - return |
|
| 1656 | - strpos($champ, 'id_') === 0 |
|
| 1657 | - or (in_array($champ, array('objet'))); |
|
| 1658 | - } |
|
| 1659 | - ); |
|
| 1660 | - |
|
| 1661 | - // Si le champ id_rubrique appartient à la liste et si id_secteur n'est pas inclus on le rajoute. |
|
| 1662 | - if ( |
|
| 1663 | - in_array('id_rubrique', $champs) |
|
| 1664 | - and !in_array('id_secteur', $champs) |
|
| 1665 | - ) { |
|
| 1666 | - $champs[] = 'id_secteur'; |
|
| 1667 | - } |
|
| 1668 | - |
|
| 1669 | - // On ne fera pas mieux pour les tables d’un autre serveur |
|
| 1670 | - if ($serveur) { |
|
| 1671 | - return $champs; |
|
| 1672 | - } |
|
| 1673 | - |
|
| 1674 | - $primary = false; |
|
| 1675 | - $associable = false; |
|
| 1676 | - include_spip('action/editer_liens'); |
|
| 1677 | - |
|
| 1678 | - if (isset($desc['type'])) { |
|
| 1679 | - $primary = id_table_objet($desc['type']); |
|
| 1680 | - $associable = objet_associable($desc['type']); |
|
| 1681 | - } |
|
| 1682 | - if (isset($desc['field']['id_objet']) and isset($desc['field']['objet'])) { |
|
| 1683 | - $associable = true; |
|
| 1684 | - } |
|
| 1685 | - |
|
| 1686 | - // liste de toutes les tables principales, sauf la notre |
|
| 1687 | - $tables = lister_tables_objets_sql(); |
|
| 1688 | - unset($tables[$table]); |
|
| 1689 | - |
|
| 1690 | - foreach ($tables as $_table => $_desc) { |
|
| 1691 | - if ( |
|
| 1692 | - $associable |
|
| 1693 | - or ($primary and in_array($primary, array_keys($_desc['field']))) |
|
| 1694 | - or objet_associable($_desc['type']) |
|
| 1695 | - ) { |
|
| 1696 | - $champs[] = id_table_objet($_table); |
|
| 1697 | - } |
|
| 1698 | - } |
|
| 1699 | - $champs = array_values(array_unique($champs)); |
|
| 1700 | - |
|
| 1701 | - // Exclusions de certains id |
|
| 1702 | - $exclusions = pipeline( |
|
| 1703 | - 'exclure_id_conditionnel', |
|
| 1704 | - array( |
|
| 1705 | - 'args' => array( |
|
| 1706 | - 'table' => $table, |
|
| 1707 | - 'id_table_objet' => $primary, |
|
| 1708 | - 'associable' => $associable, |
|
| 1709 | - ), |
|
| 1710 | - 'data' => array(), |
|
| 1711 | - ) |
|
| 1712 | - ); |
|
| 1713 | - $champs = array_diff($champs, $exclusions); |
|
| 1714 | - |
|
| 1715 | - return $champs; |
|
| 1643 | + // calculer la description de la table |
|
| 1644 | + if (!is_array($desc)) { |
|
| 1645 | + $desc = description_table($table, $serveur); |
|
| 1646 | + } |
|
| 1647 | + if (!$desc) { |
|
| 1648 | + return []; |
|
| 1649 | + } |
|
| 1650 | + |
|
| 1651 | + // Les champs id_xx de la table demandée |
|
| 1652 | + $champs = array_filter( |
|
| 1653 | + array_keys($desc['field']), |
|
| 1654 | + function($champ){ |
|
| 1655 | + return |
|
| 1656 | + strpos($champ, 'id_') === 0 |
|
| 1657 | + or (in_array($champ, array('objet'))); |
|
| 1658 | + } |
|
| 1659 | + ); |
|
| 1660 | + |
|
| 1661 | + // Si le champ id_rubrique appartient à la liste et si id_secteur n'est pas inclus on le rajoute. |
|
| 1662 | + if ( |
|
| 1663 | + in_array('id_rubrique', $champs) |
|
| 1664 | + and !in_array('id_secteur', $champs) |
|
| 1665 | + ) { |
|
| 1666 | + $champs[] = 'id_secteur'; |
|
| 1667 | + } |
|
| 1668 | + |
|
| 1669 | + // On ne fera pas mieux pour les tables d’un autre serveur |
|
| 1670 | + if ($serveur) { |
|
| 1671 | + return $champs; |
|
| 1672 | + } |
|
| 1673 | + |
|
| 1674 | + $primary = false; |
|
| 1675 | + $associable = false; |
|
| 1676 | + include_spip('action/editer_liens'); |
|
| 1677 | + |
|
| 1678 | + if (isset($desc['type'])) { |
|
| 1679 | + $primary = id_table_objet($desc['type']); |
|
| 1680 | + $associable = objet_associable($desc['type']); |
|
| 1681 | + } |
|
| 1682 | + if (isset($desc['field']['id_objet']) and isset($desc['field']['objet'])) { |
|
| 1683 | + $associable = true; |
|
| 1684 | + } |
|
| 1685 | + |
|
| 1686 | + // liste de toutes les tables principales, sauf la notre |
|
| 1687 | + $tables = lister_tables_objets_sql(); |
|
| 1688 | + unset($tables[$table]); |
|
| 1689 | + |
|
| 1690 | + foreach ($tables as $_table => $_desc) { |
|
| 1691 | + if ( |
|
| 1692 | + $associable |
|
| 1693 | + or ($primary and in_array($primary, array_keys($_desc['field']))) |
|
| 1694 | + or objet_associable($_desc['type']) |
|
| 1695 | + ) { |
|
| 1696 | + $champs[] = id_table_objet($_table); |
|
| 1697 | + } |
|
| 1698 | + } |
|
| 1699 | + $champs = array_values(array_unique($champs)); |
|
| 1700 | + |
|
| 1701 | + // Exclusions de certains id |
|
| 1702 | + $exclusions = pipeline( |
|
| 1703 | + 'exclure_id_conditionnel', |
|
| 1704 | + array( |
|
| 1705 | + 'args' => array( |
|
| 1706 | + 'table' => $table, |
|
| 1707 | + 'id_table_objet' => $primary, |
|
| 1708 | + 'associable' => $associable, |
|
| 1709 | + ), |
|
| 1710 | + 'data' => array(), |
|
| 1711 | + ) |
|
| 1712 | + ); |
|
| 1713 | + $champs = array_diff($champs, $exclusions); |
|
| 1714 | + |
|
| 1715 | + return $champs; |
|
| 1716 | 1716 | } |
| 1717 | 1717 | |
| 1718 | 1718 | /** |
@@ -1767,27 +1767,27 @@ discard block |
||
| 1767 | 1767 | * @return void |
| 1768 | 1768 | */ |
| 1769 | 1769 | function critere_tri_dist($idb, &$boucles, $crit) { |
| 1770 | - $boucle = &$boucles[$idb]; |
|
| 1771 | - |
|
| 1772 | - // definition du champ par defaut |
|
| 1773 | - $_champ_defaut = !isset($crit->param[0][0]) ? "''" |
|
| 1774 | - : calculer_liste(array($crit->param[0][0]), $idb, $boucles, $boucle->id_parent); |
|
| 1775 | - $_sens_defaut = !isset($crit->param[1][0]) ? "1" |
|
| 1776 | - : calculer_liste(array($crit->param[1][0]), $idb, $boucles, $boucle->id_parent); |
|
| 1777 | - $_variable = !isset($crit->param[2][0]) ? "'$idb'" |
|
| 1778 | - : calculer_liste(array($crit->param[2][0]), $idb, $boucles, $boucle->id_parent); |
|
| 1779 | - |
|
| 1780 | - $_tri = "((\$t=(isset(\$Pile[0]['tri'.$_variable]))?\$Pile[0]['tri'.$_variable]:((strncmp($_variable,'session',7)==0 AND session_get('tri'.$_variable))?session_get('tri'.$_variable):$_champ_defaut))?tri_protege_champ(\$t):'')"; |
|
| 1781 | - |
|
| 1782 | - $_sens_defaut = "(is_array(\$s=$_sens_defaut)?(isset(\$s[\$st=$_tri])?\$s[\$st]:reset(\$s)):\$s)"; |
|
| 1783 | - $_sens = "((intval(\$t=(isset(\$Pile[0]['sens'.$_variable]))?\$Pile[0]['sens'.$_variable]:((strncmp($_variable,'session',7)==0 AND session_get('sens'.$_variable))?session_get('sens'.$_variable):$_sens_defaut))==-1 OR \$t=='inverse')?-1:1)"; |
|
| 1784 | - |
|
| 1785 | - $boucle->modificateur['tri_champ'] = $_tri; |
|
| 1786 | - $boucle->modificateur['tri_sens'] = $_sens; |
|
| 1787 | - $boucle->modificateur['tri_nom'] = $_variable; |
|
| 1788 | - // faut il inserer un test sur l'existence de $tri parmi les champs de la table ? |
|
| 1789 | - // evite des erreurs sql, mais peut empecher des tri sur jointure ... |
|
| 1790 | - $boucle->hash .= " |
|
| 1770 | + $boucle = &$boucles[$idb]; |
|
| 1771 | + |
|
| 1772 | + // definition du champ par defaut |
|
| 1773 | + $_champ_defaut = !isset($crit->param[0][0]) ? "''" |
|
| 1774 | + : calculer_liste(array($crit->param[0][0]), $idb, $boucles, $boucle->id_parent); |
|
| 1775 | + $_sens_defaut = !isset($crit->param[1][0]) ? "1" |
|
| 1776 | + : calculer_liste(array($crit->param[1][0]), $idb, $boucles, $boucle->id_parent); |
|
| 1777 | + $_variable = !isset($crit->param[2][0]) ? "'$idb'" |
|
| 1778 | + : calculer_liste(array($crit->param[2][0]), $idb, $boucles, $boucle->id_parent); |
|
| 1779 | + |
|
| 1780 | + $_tri = "((\$t=(isset(\$Pile[0]['tri'.$_variable]))?\$Pile[0]['tri'.$_variable]:((strncmp($_variable,'session',7)==0 AND session_get('tri'.$_variable))?session_get('tri'.$_variable):$_champ_defaut))?tri_protege_champ(\$t):'')"; |
|
| 1781 | + |
|
| 1782 | + $_sens_defaut = "(is_array(\$s=$_sens_defaut)?(isset(\$s[\$st=$_tri])?\$s[\$st]:reset(\$s)):\$s)"; |
|
| 1783 | + $_sens = "((intval(\$t=(isset(\$Pile[0]['sens'.$_variable]))?\$Pile[0]['sens'.$_variable]:((strncmp($_variable,'session',7)==0 AND session_get('sens'.$_variable))?session_get('sens'.$_variable):$_sens_defaut))==-1 OR \$t=='inverse')?-1:1)"; |
|
| 1784 | + |
|
| 1785 | + $boucle->modificateur['tri_champ'] = $_tri; |
|
| 1786 | + $boucle->modificateur['tri_sens'] = $_sens; |
|
| 1787 | + $boucle->modificateur['tri_nom'] = $_variable; |
|
| 1788 | + // faut il inserer un test sur l'existence de $tri parmi les champs de la table ? |
|
| 1789 | + // evite des erreurs sql, mais peut empecher des tri sur jointure ... |
|
| 1790 | + $boucle->hash .= " |
|
| 1791 | 1791 | \$senstri = ''; |
| 1792 | 1792 | \$tri = $_tri; |
| 1793 | 1793 | if (\$tri){ |
@@ -1795,8 +1795,8 @@ discard block |
||
| 1795 | 1795 | \$senstri = (\$senstri<0)?' DESC':''; |
| 1796 | 1796 | }; |
| 1797 | 1797 | "; |
| 1798 | - $boucle->select[] = "\".tri_champ_select(\$tri).\""; |
|
| 1799 | - $boucle->order[] = "tri_champ_order(\$tri,\$command['from']).\$senstri"; |
|
| 1798 | + $boucle->select[] = "\".tri_champ_select(\$tri).\""; |
|
| 1799 | + $boucle->order[] = "tri_champ_order(\$tri,\$command['from']).\$senstri"; |
|
| 1800 | 1800 | } |
| 1801 | 1801 | |
| 1802 | 1802 | # Criteres de comparaison |
@@ -1813,20 +1813,20 @@ discard block |
||
| 1813 | 1813 | * @return void |
| 1814 | 1814 | **/ |
| 1815 | 1815 | function calculer_critere_DEFAUT_dist($idb, &$boucles, $crit) { |
| 1816 | - // double cas particulier {0,1} et {1/2} repere a l'analyse lexicale |
|
| 1817 | - if (($crit->op == ",") or ($crit->op == '/')) { |
|
| 1818 | - return calculer_critere_parties($idb, $boucles, $crit); |
|
| 1819 | - } |
|
| 1820 | - |
|
| 1821 | - $r = calculer_critere_infixe($idb, $boucles, $crit); |
|
| 1822 | - if (!$r) { |
|
| 1823 | - # // on produit une erreur seulement si le critere n'a pas de '?' |
|
| 1824 | - # if (!$crit->cond) { |
|
| 1825 | - return (array('zbug_critere_inconnu', array('critere' => $crit->op))); |
|
| 1826 | - # } |
|
| 1827 | - } else { |
|
| 1828 | - calculer_critere_DEFAUT_args($idb, $boucles, $crit, $r); |
|
| 1829 | - } |
|
| 1816 | + // double cas particulier {0,1} et {1/2} repere a l'analyse lexicale |
|
| 1817 | + if (($crit->op == ",") or ($crit->op == '/')) { |
|
| 1818 | + return calculer_critere_parties($idb, $boucles, $crit); |
|
| 1819 | + } |
|
| 1820 | + |
|
| 1821 | + $r = calculer_critere_infixe($idb, $boucles, $crit); |
|
| 1822 | + if (!$r) { |
|
| 1823 | + # // on produit une erreur seulement si le critere n'a pas de '?' |
|
| 1824 | + # if (!$crit->cond) { |
|
| 1825 | + return (array('zbug_critere_inconnu', array('critere' => $crit->op))); |
|
| 1826 | + # } |
|
| 1827 | + } else { |
|
| 1828 | + calculer_critere_DEFAUT_args($idb, $boucles, $crit, $r); |
|
| 1829 | + } |
|
| 1830 | 1830 | } |
| 1831 | 1831 | |
| 1832 | 1832 | |
@@ -1846,63 +1846,63 @@ discard block |
||
| 1846 | 1846 | * @return void |
| 1847 | 1847 | **/ |
| 1848 | 1848 | function calculer_critere_DEFAUT_args($idb, &$boucles, $crit, $args) { |
| 1849 | - list($arg, $op, $val, $col, $where_complement) = $args; |
|
| 1850 | - |
|
| 1851 | - $where = array("'$op'", "'$arg'", $val[0]); |
|
| 1852 | - |
|
| 1853 | - // inserer la negation (cf !...) |
|
| 1854 | - |
|
| 1855 | - if ($crit->not) { |
|
| 1856 | - $where = array("'NOT'", $where); |
|
| 1857 | - } |
|
| 1858 | - if ($crit->exclus) { |
|
| 1859 | - if (!preg_match(",^L[0-9]+[.],", $arg)) { |
|
| 1860 | - $where = array("'NOT'", $where); |
|
| 1861 | - } else |
|
| 1862 | - // un not sur un critere de jointure se traduit comme un NOT IN avec une sous requete |
|
| 1863 | - // c'est une sous requete identique a la requete principale sous la forme (SELF,$select,$where) avec $select et $where qui surchargent |
|
| 1864 | - { |
|
| 1865 | - $where = array( |
|
| 1866 | - "'NOT'", |
|
| 1867 | - array( |
|
| 1868 | - "'IN'", |
|
| 1869 | - "'" . $boucles[$idb]->id_table . "." . $boucles[$idb]->primary . "'", |
|
| 1870 | - array("'SELF'", "'" . $boucles[$idb]->id_table . "." . $boucles[$idb]->primary . "'", $where) |
|
| 1871 | - ) |
|
| 1872 | - ); |
|
| 1873 | - } |
|
| 1874 | - } |
|
| 1875 | - |
|
| 1876 | - // inserer la condition (cf {lang?}) |
|
| 1877 | - // traiter a part la date, elle est mise d'office par SPIP, |
|
| 1878 | - if ($crit->cond) { |
|
| 1879 | - $pred = calculer_argument_precedent($idb, $col, $boucles); |
|
| 1880 | - if ($col == "date" or $col == "date_redac") { |
|
| 1881 | - if ($pred == "\$Pile[0]['" . $col . "']") { |
|
| 1882 | - $pred = "(\$Pile[0]['{$col}_default']?'':$pred)"; |
|
| 1883 | - } |
|
| 1884 | - } |
|
| 1885 | - |
|
| 1886 | - if ($op == '=' and !$crit->not) { |
|
| 1887 | - $where = array( |
|
| 1888 | - "'?'", |
|
| 1889 | - "(is_array($pred))", |
|
| 1890 | - critere_IN_cas($idb, $boucles, 'COND', $arg, $op, array($pred), $col), |
|
| 1891 | - $where |
|
| 1892 | - ); |
|
| 1893 | - } |
|
| 1894 | - $where = array("'?'", "!(is_array($pred)?count($pred):strlen($pred))", "''", $where); |
|
| 1895 | - if ($where_complement) // condition annexe du type "AND (objet='article')" |
|
| 1896 | - { |
|
| 1897 | - $where_complement = array("'?'", "!(is_array($pred)?count($pred):strlen($pred))", "''", $where_complement); |
|
| 1898 | - } |
|
| 1899 | - } |
|
| 1900 | - |
|
| 1901 | - $boucles[$idb]->where[] = $where; |
|
| 1902 | - if ($where_complement) // condition annexe du type "AND (objet='article')" |
|
| 1903 | - { |
|
| 1904 | - $boucles[$idb]->where[] = $where_complement; |
|
| 1905 | - } |
|
| 1849 | + list($arg, $op, $val, $col, $where_complement) = $args; |
|
| 1850 | + |
|
| 1851 | + $where = array("'$op'", "'$arg'", $val[0]); |
|
| 1852 | + |
|
| 1853 | + // inserer la negation (cf !...) |
|
| 1854 | + |
|
| 1855 | + if ($crit->not) { |
|
| 1856 | + $where = array("'NOT'", $where); |
|
| 1857 | + } |
|
| 1858 | + if ($crit->exclus) { |
|
| 1859 | + if (!preg_match(",^L[0-9]+[.],", $arg)) { |
|
| 1860 | + $where = array("'NOT'", $where); |
|
| 1861 | + } else |
|
| 1862 | + // un not sur un critere de jointure se traduit comme un NOT IN avec une sous requete |
|
| 1863 | + // c'est une sous requete identique a la requete principale sous la forme (SELF,$select,$where) avec $select et $where qui surchargent |
|
| 1864 | + { |
|
| 1865 | + $where = array( |
|
| 1866 | + "'NOT'", |
|
| 1867 | + array( |
|
| 1868 | + "'IN'", |
|
| 1869 | + "'" . $boucles[$idb]->id_table . "." . $boucles[$idb]->primary . "'", |
|
| 1870 | + array("'SELF'", "'" . $boucles[$idb]->id_table . "." . $boucles[$idb]->primary . "'", $where) |
|
| 1871 | + ) |
|
| 1872 | + ); |
|
| 1873 | + } |
|
| 1874 | + } |
|
| 1875 | + |
|
| 1876 | + // inserer la condition (cf {lang?}) |
|
| 1877 | + // traiter a part la date, elle est mise d'office par SPIP, |
|
| 1878 | + if ($crit->cond) { |
|
| 1879 | + $pred = calculer_argument_precedent($idb, $col, $boucles); |
|
| 1880 | + if ($col == "date" or $col == "date_redac") { |
|
| 1881 | + if ($pred == "\$Pile[0]['" . $col . "']") { |
|
| 1882 | + $pred = "(\$Pile[0]['{$col}_default']?'':$pred)"; |
|
| 1883 | + } |
|
| 1884 | + } |
|
| 1885 | + |
|
| 1886 | + if ($op == '=' and !$crit->not) { |
|
| 1887 | + $where = array( |
|
| 1888 | + "'?'", |
|
| 1889 | + "(is_array($pred))", |
|
| 1890 | + critere_IN_cas($idb, $boucles, 'COND', $arg, $op, array($pred), $col), |
|
| 1891 | + $where |
|
| 1892 | + ); |
|
| 1893 | + } |
|
| 1894 | + $where = array("'?'", "!(is_array($pred)?count($pred):strlen($pred))", "''", $where); |
|
| 1895 | + if ($where_complement) // condition annexe du type "AND (objet='article')" |
|
| 1896 | + { |
|
| 1897 | + $where_complement = array("'?'", "!(is_array($pred)?count($pred):strlen($pred))", "''", $where_complement); |
|
| 1898 | + } |
|
| 1899 | + } |
|
| 1900 | + |
|
| 1901 | + $boucles[$idb]->where[] = $where; |
|
| 1902 | + if ($where_complement) // condition annexe du type "AND (objet='article')" |
|
| 1903 | + { |
|
| 1904 | + $boucles[$idb]->where[] = $where_complement; |
|
| 1905 | + } |
|
| 1906 | 1906 | } |
| 1907 | 1907 | |
| 1908 | 1908 | |
@@ -1943,167 +1943,167 @@ discard block |
||
| 1943 | 1943 | **/ |
| 1944 | 1944 | function calculer_critere_infixe($idb, &$boucles, $crit) { |
| 1945 | 1945 | |
| 1946 | - $boucle = &$boucles[$idb]; |
|
| 1947 | - $type = $boucle->type_requete; |
|
| 1948 | - $table = $boucle->id_table; |
|
| 1949 | - $desc = $boucle->show; |
|
| 1950 | - $col_vraie = null; |
|
| 1951 | - |
|
| 1952 | - list($fct, $col, $op, $val, $args_sql) = |
|
| 1953 | - calculer_critere_infixe_ops($idb, $boucles, $crit); |
|
| 1954 | - |
|
| 1955 | - $col_alias = $col; |
|
| 1956 | - $where_complement = false; |
|
| 1957 | - |
|
| 1958 | - // Cas particulier : id_enfant => utiliser la colonne id_objet |
|
| 1959 | - if ($col == 'id_enfant') { |
|
| 1960 | - $col = $boucle->primary; |
|
| 1961 | - } |
|
| 1962 | - |
|
| 1963 | - // Cas particulier : id_parent => verifier les exceptions de tables |
|
| 1964 | - if ((in_array($col, array('id_parent', 'id_secteur')) and isset($GLOBALS['exceptions_des_tables'][$table][$col])) |
|
| 1965 | - or (isset($GLOBALS['exceptions_des_tables'][$table][$col]) and is_string($GLOBALS['exceptions_des_tables'][$table][$col])) |
|
| 1966 | - ) { |
|
| 1967 | - $col = $GLOBALS['exceptions_des_tables'][$table][$col]; |
|
| 1968 | - } // et possibilite de gerer un critere secteur sur des tables de plugins (ie forums) |
|
| 1969 | - else { |
|
| 1970 | - if (($col == 'id_secteur') and ($critere_secteur = charger_fonction("critere_secteur_$type", "public", true))) { |
|
| 1971 | - $table = $critere_secteur($idb, $boucles, $val, $crit); |
|
| 1972 | - } |
|
| 1973 | - |
|
| 1974 | - // cas id_article=xx qui se mappe en id_objet=xx AND objet=article |
|
| 1975 | - // sauf si exception declaree : sauter cette etape |
|
| 1976 | - else { |
|
| 1977 | - if ( |
|
| 1978 | - !isset($GLOBALS['exceptions_des_jointures'][table_objet_sql($table)][$col]) |
|
| 1979 | - and !isset($GLOBALS['exceptions_des_jointures'][$col]) |
|
| 1980 | - and count(trouver_champs_decomposes($col, $desc)) > 1 |
|
| 1981 | - ) { |
|
| 1982 | - $e = decompose_champ_id_objet($col); |
|
| 1983 | - $col = array_shift($e); |
|
| 1984 | - $where_complement = primary_doublee($e, $table); |
|
| 1985 | - } // Cas particulier : expressions de date |
|
| 1986 | - else { |
|
| 1987 | - if ($c = calculer_critere_infixe_date($idb, $boucles, $col)) { |
|
| 1988 | - list($col, $col_vraie) = $c; |
|
| 1989 | - $table = ''; |
|
| 1990 | - } // table explicitée {mots.titre} |
|
| 1991 | - else { |
|
| 1992 | - if (preg_match('/^(.*)\.(.*)$/', $col, $r)) { |
|
| 1993 | - list(, $table, $col) = $r; |
|
| 1994 | - $col_alias = $col; |
|
| 1995 | - |
|
| 1996 | - $trouver_table = charger_fonction('trouver_table', 'base'); |
|
| 1997 | - if ($desc = $trouver_table($table, $boucle->sql_serveur) |
|
| 1998 | - and isset($desc['field'][$col]) |
|
| 1999 | - and $cle = array_search($desc['table'], $boucle->from) |
|
| 2000 | - ) { |
|
| 2001 | - $table = $cle; |
|
| 2002 | - } else { |
|
| 2003 | - $table = trouver_jointure_champ($col, $boucle, array($table), ($crit->cond or $op != '=')); |
|
| 2004 | - } |
|
| 2005 | - #$table = calculer_critere_externe_init($boucle, array($table), $col, $desc, ($crit->cond OR $op!='='), true); |
|
| 2006 | - if (!$table) { |
|
| 2007 | - return ''; |
|
| 2008 | - } |
|
| 2009 | - } |
|
| 2010 | - // si le champ n'est pas trouvé dans la table, |
|
| 2011 | - // on cherche si une jointure peut l'obtenir |
|
| 2012 | - elseif (@!array_key_exists($col, $desc['field'])) { |
|
| 2013 | - // Champ joker * des iterateurs DATA qui accepte tout |
|
| 2014 | - if (@array_key_exists('*', $desc['field'])) { |
|
| 2015 | - $desc['field'][$col_vraie ? $col_vraie : $col] = ''; // on veut pas de cast INT par defaut car le type peut etre n'importe quoi dans les boucles DATA |
|
| 2016 | - } |
|
| 2017 | - else { |
|
| 2018 | - $r = calculer_critere_infixe_externe($boucle, $crit, $op, $desc, $col, $col_alias, $table); |
|
| 2019 | - if (!$r) { |
|
| 2020 | - return ''; |
|
| 2021 | - } |
|
| 2022 | - list($col, $col_alias, $table, $where_complement, $desc) = $r; |
|
| 2023 | - } |
|
| 2024 | - } |
|
| 2025 | - } |
|
| 2026 | - } |
|
| 2027 | - } |
|
| 2028 | - } |
|
| 2029 | - |
|
| 2030 | - $col_vraie = ($col_vraie ? $col_vraie : $col); |
|
| 2031 | - // Dans tous les cas, |
|
| 2032 | - // virer les guillemets eventuels autour d'un int (qui sont refuses par certains SQL) |
|
| 2033 | - // et passer dans sql_quote avec le type si connu |
|
| 2034 | - // et int sinon si la valeur est numerique |
|
| 2035 | - // sinon introduire le vrai type du champ si connu dans le sql_quote (ou int NOT NULL sinon) |
|
| 2036 | - // Ne pas utiliser intval, PHP tronquant les Bigint de SQL |
|
| 2037 | - if ($op == '=' or in_array($op, $GLOBALS['table_criteres_infixes'])) { |
|
| 2038 | - $type_cast_quote = (isset($desc['field'][$col_vraie]) ? $desc['field'][$col_vraie] : 'int NOT NULL'); |
|
| 2039 | - // defaire le quote des int et les passer dans sql_quote avec le bon type de champ si on le connait, int sinon |
|
| 2040 | - // prendre en compte le debug ou la valeur arrive avec un commentaire PHP en debut |
|
| 2041 | - if (preg_match(",^\\A(\s*//.*?$\s*)?\"'(-?\d+)'\"\\z,ms", $val[0], $r)) { |
|
| 2042 | - $val[0] = $r[1] . '"' . sql_quote($r[2], $boucle->sql_serveur, $type_cast_quote) . '"'; |
|
| 2043 | - } |
|
| 2044 | - // sinon expliciter les |
|
| 2045 | - // sql_quote(truc) en sql_quote(truc,'',type) |
|
| 2046 | - // sql_quote(truc,serveur) en sql_quote(truc,serveur,type) |
|
| 2047 | - // sql_quote(truc,serveur,'') en sql_quote(truc,serveur,type) |
|
| 2048 | - // sans toucher aux |
|
| 2049 | - // sql_quote(truc,'','varchar(10) DEFAULT \'oui\' COLLATE NOCASE') |
|
| 2050 | - // sql_quote(truc,'','varchar') |
|
| 2051 | - elseif (preg_match('/\Asql_quote[(](.*?)(,[^)]*?)?(,[^)]*(?:\(\d+\)[^)]*)?)?[)]\s*\z/ms', $val[0], $r) |
|
| 2052 | - // si pas deja un type |
|
| 2053 | - and (!isset($r[3]) or !$r[3] or !trim($r[3],", '")) |
|
| 2054 | - ) { |
|
| 2055 | - $r = $r[1] |
|
| 2056 | - . ((isset($r[2]) and $r[2]) ? $r[2] : ",''") |
|
| 2057 | - . ",'" . addslashes($type_cast_quote) . "'"; |
|
| 2058 | - $val[0] = "sql_quote($r)"; |
|
| 2059 | - } |
|
| 2060 | - elseif(strpos($val[0], '@@defaultcast@@') !== false |
|
| 2061 | - and preg_match("/'@@defaultcast@@'\s*\)\s*\z/ms", $val[0], $r)) { |
|
| 2062 | - $val[0] = substr($val[0], 0, -strlen($r[0])) . "'" . addslashes($type_cast_quote) . "')"; |
|
| 2063 | - } |
|
| 2064 | - } |
|
| 2065 | - |
|
| 2066 | - if(strpos($val[0], '@@defaultcast@@') !== false |
|
| 2067 | - and preg_match("/'@@defaultcast@@'\s*\)\s*\z/ms", $val[0], $r)) { |
|
| 2068 | - $val[0] = substr($val[0], 0, -strlen($r[0])) . "'char')"; |
|
| 2069 | - } |
|
| 2070 | - |
|
| 2071 | - // Indicateur pour permettre aux fonctionx boucle_X de modifier |
|
| 2072 | - // leurs requetes par defaut, notamment le champ statut |
|
| 2073 | - // Ne pas confondre champs de la table principale et des jointures |
|
| 2074 | - if ($table === $boucle->id_table) { |
|
| 2075 | - $boucles[$idb]->modificateur['criteres'][$col_vraie] = true; |
|
| 2076 | - if ($col_alias != $col_vraie) { |
|
| 2077 | - $boucles[$idb]->modificateur['criteres'][$col_alias] = true; |
|
| 2078 | - } |
|
| 2079 | - } |
|
| 2080 | - |
|
| 2081 | - // ajout pour le cas special d'une condition sur le champ statut: |
|
| 2082 | - // il faut alors interdire a la fonction de boucle |
|
| 2083 | - // de mettre ses propres criteres de statut |
|
| 2084 | - // http://www.spip.net/@statut (a documenter) |
|
| 2085 | - // garde pour compatibilite avec code des plugins anterieurs, mais redondant avec la ligne precedente |
|
| 2086 | - if ($col == 'statut') { |
|
| 2087 | - $boucles[$idb]->statut = true; |
|
| 2088 | - } |
|
| 2089 | - |
|
| 2090 | - // inserer le nom de la table SQL devant le nom du champ |
|
| 2091 | - if ($table) { |
|
| 2092 | - if ($col[0] == "`") { |
|
| 2093 | - $arg = "$table." . substr($col, 1, -1); |
|
| 2094 | - } else { |
|
| 2095 | - $arg = "$table.$col"; |
|
| 2096 | - } |
|
| 2097 | - } else { |
|
| 2098 | - $arg = $col; |
|
| 2099 | - } |
|
| 2100 | - |
|
| 2101 | - // inserer la fonction SQL |
|
| 2102 | - if ($fct) { |
|
| 2103 | - $arg = "$fct($arg$args_sql)"; |
|
| 2104 | - } |
|
| 2105 | - |
|
| 2106 | - return array($arg, $op, $val, $col_alias, $where_complement); |
|
| 1946 | + $boucle = &$boucles[$idb]; |
|
| 1947 | + $type = $boucle->type_requete; |
|
| 1948 | + $table = $boucle->id_table; |
|
| 1949 | + $desc = $boucle->show; |
|
| 1950 | + $col_vraie = null; |
|
| 1951 | + |
|
| 1952 | + list($fct, $col, $op, $val, $args_sql) = |
|
| 1953 | + calculer_critere_infixe_ops($idb, $boucles, $crit); |
|
| 1954 | + |
|
| 1955 | + $col_alias = $col; |
|
| 1956 | + $where_complement = false; |
|
| 1957 | + |
|
| 1958 | + // Cas particulier : id_enfant => utiliser la colonne id_objet |
|
| 1959 | + if ($col == 'id_enfant') { |
|
| 1960 | + $col = $boucle->primary; |
|
| 1961 | + } |
|
| 1962 | + |
|
| 1963 | + // Cas particulier : id_parent => verifier les exceptions de tables |
|
| 1964 | + if ((in_array($col, array('id_parent', 'id_secteur')) and isset($GLOBALS['exceptions_des_tables'][$table][$col])) |
|
| 1965 | + or (isset($GLOBALS['exceptions_des_tables'][$table][$col]) and is_string($GLOBALS['exceptions_des_tables'][$table][$col])) |
|
| 1966 | + ) { |
|
| 1967 | + $col = $GLOBALS['exceptions_des_tables'][$table][$col]; |
|
| 1968 | + } // et possibilite de gerer un critere secteur sur des tables de plugins (ie forums) |
|
| 1969 | + else { |
|
| 1970 | + if (($col == 'id_secteur') and ($critere_secteur = charger_fonction("critere_secteur_$type", "public", true))) { |
|
| 1971 | + $table = $critere_secteur($idb, $boucles, $val, $crit); |
|
| 1972 | + } |
|
| 1973 | + |
|
| 1974 | + // cas id_article=xx qui se mappe en id_objet=xx AND objet=article |
|
| 1975 | + // sauf si exception declaree : sauter cette etape |
|
| 1976 | + else { |
|
| 1977 | + if ( |
|
| 1978 | + !isset($GLOBALS['exceptions_des_jointures'][table_objet_sql($table)][$col]) |
|
| 1979 | + and !isset($GLOBALS['exceptions_des_jointures'][$col]) |
|
| 1980 | + and count(trouver_champs_decomposes($col, $desc)) > 1 |
|
| 1981 | + ) { |
|
| 1982 | + $e = decompose_champ_id_objet($col); |
|
| 1983 | + $col = array_shift($e); |
|
| 1984 | + $where_complement = primary_doublee($e, $table); |
|
| 1985 | + } // Cas particulier : expressions de date |
|
| 1986 | + else { |
|
| 1987 | + if ($c = calculer_critere_infixe_date($idb, $boucles, $col)) { |
|
| 1988 | + list($col, $col_vraie) = $c; |
|
| 1989 | + $table = ''; |
|
| 1990 | + } // table explicitée {mots.titre} |
|
| 1991 | + else { |
|
| 1992 | + if (preg_match('/^(.*)\.(.*)$/', $col, $r)) { |
|
| 1993 | + list(, $table, $col) = $r; |
|
| 1994 | + $col_alias = $col; |
|
| 1995 | + |
|
| 1996 | + $trouver_table = charger_fonction('trouver_table', 'base'); |
|
| 1997 | + if ($desc = $trouver_table($table, $boucle->sql_serveur) |
|
| 1998 | + and isset($desc['field'][$col]) |
|
| 1999 | + and $cle = array_search($desc['table'], $boucle->from) |
|
| 2000 | + ) { |
|
| 2001 | + $table = $cle; |
|
| 2002 | + } else { |
|
| 2003 | + $table = trouver_jointure_champ($col, $boucle, array($table), ($crit->cond or $op != '=')); |
|
| 2004 | + } |
|
| 2005 | + #$table = calculer_critere_externe_init($boucle, array($table), $col, $desc, ($crit->cond OR $op!='='), true); |
|
| 2006 | + if (!$table) { |
|
| 2007 | + return ''; |
|
| 2008 | + } |
|
| 2009 | + } |
|
| 2010 | + // si le champ n'est pas trouvé dans la table, |
|
| 2011 | + // on cherche si une jointure peut l'obtenir |
|
| 2012 | + elseif (@!array_key_exists($col, $desc['field'])) { |
|
| 2013 | + // Champ joker * des iterateurs DATA qui accepte tout |
|
| 2014 | + if (@array_key_exists('*', $desc['field'])) { |
|
| 2015 | + $desc['field'][$col_vraie ? $col_vraie : $col] = ''; // on veut pas de cast INT par defaut car le type peut etre n'importe quoi dans les boucles DATA |
|
| 2016 | + } |
|
| 2017 | + else { |
|
| 2018 | + $r = calculer_critere_infixe_externe($boucle, $crit, $op, $desc, $col, $col_alias, $table); |
|
| 2019 | + if (!$r) { |
|
| 2020 | + return ''; |
|
| 2021 | + } |
|
| 2022 | + list($col, $col_alias, $table, $where_complement, $desc) = $r; |
|
| 2023 | + } |
|
| 2024 | + } |
|
| 2025 | + } |
|
| 2026 | + } |
|
| 2027 | + } |
|
| 2028 | + } |
|
| 2029 | + |
|
| 2030 | + $col_vraie = ($col_vraie ? $col_vraie : $col); |
|
| 2031 | + // Dans tous les cas, |
|
| 2032 | + // virer les guillemets eventuels autour d'un int (qui sont refuses par certains SQL) |
|
| 2033 | + // et passer dans sql_quote avec le type si connu |
|
| 2034 | + // et int sinon si la valeur est numerique |
|
| 2035 | + // sinon introduire le vrai type du champ si connu dans le sql_quote (ou int NOT NULL sinon) |
|
| 2036 | + // Ne pas utiliser intval, PHP tronquant les Bigint de SQL |
|
| 2037 | + if ($op == '=' or in_array($op, $GLOBALS['table_criteres_infixes'])) { |
|
| 2038 | + $type_cast_quote = (isset($desc['field'][$col_vraie]) ? $desc['field'][$col_vraie] : 'int NOT NULL'); |
|
| 2039 | + // defaire le quote des int et les passer dans sql_quote avec le bon type de champ si on le connait, int sinon |
|
| 2040 | + // prendre en compte le debug ou la valeur arrive avec un commentaire PHP en debut |
|
| 2041 | + if (preg_match(",^\\A(\s*//.*?$\s*)?\"'(-?\d+)'\"\\z,ms", $val[0], $r)) { |
|
| 2042 | + $val[0] = $r[1] . '"' . sql_quote($r[2], $boucle->sql_serveur, $type_cast_quote) . '"'; |
|
| 2043 | + } |
|
| 2044 | + // sinon expliciter les |
|
| 2045 | + // sql_quote(truc) en sql_quote(truc,'',type) |
|
| 2046 | + // sql_quote(truc,serveur) en sql_quote(truc,serveur,type) |
|
| 2047 | + // sql_quote(truc,serveur,'') en sql_quote(truc,serveur,type) |
|
| 2048 | + // sans toucher aux |
|
| 2049 | + // sql_quote(truc,'','varchar(10) DEFAULT \'oui\' COLLATE NOCASE') |
|
| 2050 | + // sql_quote(truc,'','varchar') |
|
| 2051 | + elseif (preg_match('/\Asql_quote[(](.*?)(,[^)]*?)?(,[^)]*(?:\(\d+\)[^)]*)?)?[)]\s*\z/ms', $val[0], $r) |
|
| 2052 | + // si pas deja un type |
|
| 2053 | + and (!isset($r[3]) or !$r[3] or !trim($r[3],", '")) |
|
| 2054 | + ) { |
|
| 2055 | + $r = $r[1] |
|
| 2056 | + . ((isset($r[2]) and $r[2]) ? $r[2] : ",''") |
|
| 2057 | + . ",'" . addslashes($type_cast_quote) . "'"; |
|
| 2058 | + $val[0] = "sql_quote($r)"; |
|
| 2059 | + } |
|
| 2060 | + elseif(strpos($val[0], '@@defaultcast@@') !== false |
|
| 2061 | + and preg_match("/'@@defaultcast@@'\s*\)\s*\z/ms", $val[0], $r)) { |
|
| 2062 | + $val[0] = substr($val[0], 0, -strlen($r[0])) . "'" . addslashes($type_cast_quote) . "')"; |
|
| 2063 | + } |
|
| 2064 | + } |
|
| 2065 | + |
|
| 2066 | + if(strpos($val[0], '@@defaultcast@@') !== false |
|
| 2067 | + and preg_match("/'@@defaultcast@@'\s*\)\s*\z/ms", $val[0], $r)) { |
|
| 2068 | + $val[0] = substr($val[0], 0, -strlen($r[0])) . "'char')"; |
|
| 2069 | + } |
|
| 2070 | + |
|
| 2071 | + // Indicateur pour permettre aux fonctionx boucle_X de modifier |
|
| 2072 | + // leurs requetes par defaut, notamment le champ statut |
|
| 2073 | + // Ne pas confondre champs de la table principale et des jointures |
|
| 2074 | + if ($table === $boucle->id_table) { |
|
| 2075 | + $boucles[$idb]->modificateur['criteres'][$col_vraie] = true; |
|
| 2076 | + if ($col_alias != $col_vraie) { |
|
| 2077 | + $boucles[$idb]->modificateur['criteres'][$col_alias] = true; |
|
| 2078 | + } |
|
| 2079 | + } |
|
| 2080 | + |
|
| 2081 | + // ajout pour le cas special d'une condition sur le champ statut: |
|
| 2082 | + // il faut alors interdire a la fonction de boucle |
|
| 2083 | + // de mettre ses propres criteres de statut |
|
| 2084 | + // http://www.spip.net/@statut (a documenter) |
|
| 2085 | + // garde pour compatibilite avec code des plugins anterieurs, mais redondant avec la ligne precedente |
|
| 2086 | + if ($col == 'statut') { |
|
| 2087 | + $boucles[$idb]->statut = true; |
|
| 2088 | + } |
|
| 2089 | + |
|
| 2090 | + // inserer le nom de la table SQL devant le nom du champ |
|
| 2091 | + if ($table) { |
|
| 2092 | + if ($col[0] == "`") { |
|
| 2093 | + $arg = "$table." . substr($col, 1, -1); |
|
| 2094 | + } else { |
|
| 2095 | + $arg = "$table.$col"; |
|
| 2096 | + } |
|
| 2097 | + } else { |
|
| 2098 | + $arg = $col; |
|
| 2099 | + } |
|
| 2100 | + |
|
| 2101 | + // inserer la fonction SQL |
|
| 2102 | + if ($fct) { |
|
| 2103 | + $arg = "$fct($arg$args_sql)"; |
|
| 2104 | + } |
|
| 2105 | + |
|
| 2106 | + return array($arg, $op, $val, $col_alias, $where_complement); |
|
| 2107 | 2107 | } |
| 2108 | 2108 | |
| 2109 | 2109 | |
@@ -2132,77 +2132,77 @@ discard block |
||
| 2132 | 2132 | **/ |
| 2133 | 2133 | function calculer_critere_infixe_externe($boucle, $crit, $op, $desc, $col, $col_alias, $table) { |
| 2134 | 2134 | |
| 2135 | - $where = ''; |
|
| 2136 | - |
|
| 2137 | - $calculer_critere_externe = 'calculer_critere_externe_init'; |
|
| 2138 | - // gestion par les plugins des jointures tordues |
|
| 2139 | - // pas automatiques mais necessaires |
|
| 2140 | - $table_sql = table_objet_sql($table); |
|
| 2141 | - if (isset($GLOBALS['exceptions_des_jointures'][$table_sql]) |
|
| 2142 | - and is_array($GLOBALS['exceptions_des_jointures'][$table_sql]) |
|
| 2143 | - and |
|
| 2144 | - ( |
|
| 2145 | - isset($GLOBALS['exceptions_des_jointures'][$table_sql][$col]) |
|
| 2146 | - or |
|
| 2147 | - isset($GLOBALS['exceptions_des_jointures'][$table_sql]['']) |
|
| 2148 | - ) |
|
| 2149 | - ) { |
|
| 2150 | - $t = $GLOBALS['exceptions_des_jointures'][$table_sql]; |
|
| 2151 | - $index = isset($t[$col]) |
|
| 2152 | - ? $t[$col] : (isset($t['']) ? $t[''] : array()); |
|
| 2153 | - |
|
| 2154 | - if (count($index) == 3) { |
|
| 2155 | - list($t, $col, $calculer_critere_externe) = $index; |
|
| 2156 | - } elseif (count($index) == 2) { |
|
| 2157 | - list($t, $col) = $t[$col]; |
|
| 2158 | - } elseif (count($index) == 1) { |
|
| 2159 | - list($calculer_critere_externe) = $index; |
|
| 2160 | - $t = $table; |
|
| 2161 | - } else { |
|
| 2162 | - $t = ''; |
|
| 2163 | - } // jointure non declaree. La trouver. |
|
| 2164 | - } elseif (isset($GLOBALS['exceptions_des_jointures'][$col])) { |
|
| 2165 | - list($t, $col) = $GLOBALS['exceptions_des_jointures'][$col]; |
|
| 2166 | - } else { |
|
| 2167 | - $t = ''; |
|
| 2168 | - } // jointure non declaree. La trouver. |
|
| 2169 | - |
|
| 2170 | - // ici on construit le from pour fournir $col en piochant dans les jointures |
|
| 2171 | - |
|
| 2172 | - // si des jointures explicites sont fournies, on cherche d'abord dans celles ci |
|
| 2173 | - // permet de forcer une table de lien quand il y a ambiguite |
|
| 2174 | - // <BOUCLE_(DOCUMENTS documents_liens){id_mot}> |
|
| 2175 | - // alors que <BOUCLE_(DOCUMENTS){id_mot}> produit la meme chose que <BOUCLE_(DOCUMENTS mots_liens){id_mot}> |
|
| 2176 | - $table = ""; |
|
| 2177 | - if ($boucle->jointures_explicites) { |
|
| 2178 | - $jointures_explicites = explode(' ', $boucle->jointures_explicites); |
|
| 2179 | - $table = $calculer_critere_externe($boucle, $jointures_explicites, $col, $desc, ($crit->cond or $op != '='), $t); |
|
| 2180 | - } |
|
| 2181 | - |
|
| 2182 | - // et sinon on cherche parmi toutes les jointures declarees |
|
| 2183 | - if (!$table) { |
|
| 2184 | - $table = $calculer_critere_externe($boucle, $boucle->jointures, $col, $desc, ($crit->cond or $op != '='), $t); |
|
| 2185 | - } |
|
| 2186 | - |
|
| 2187 | - if (!$table) { |
|
| 2188 | - return ''; |
|
| 2189 | - } |
|
| 2190 | - |
|
| 2191 | - // il ne reste plus qu'a trouver le champ dans les from |
|
| 2192 | - list($nom, $desc, $cle) = trouver_champ_exterieur($col, $boucle->from, $boucle); |
|
| 2193 | - |
|
| 2194 | - if (count($cle) > 1 or reset($cle) !== $col) { |
|
| 2195 | - $col_alias = $col; // id_article devient juste le nom d'origine |
|
| 2196 | - if (count($cle) > 1 and reset($cle) == 'id_objet') { |
|
| 2197 | - $e = decompose_champ_id_objet($col); |
|
| 2198 | - $col = array_shift($e); |
|
| 2199 | - $where = primary_doublee($e, $table); |
|
| 2200 | - } else { |
|
| 2201 | - $col = reset($cle); |
|
| 2202 | - } |
|
| 2203 | - } |
|
| 2204 | - |
|
| 2205 | - return array($col, $col_alias, $table, $where, $desc); |
|
| 2135 | + $where = ''; |
|
| 2136 | + |
|
| 2137 | + $calculer_critere_externe = 'calculer_critere_externe_init'; |
|
| 2138 | + // gestion par les plugins des jointures tordues |
|
| 2139 | + // pas automatiques mais necessaires |
|
| 2140 | + $table_sql = table_objet_sql($table); |
|
| 2141 | + if (isset($GLOBALS['exceptions_des_jointures'][$table_sql]) |
|
| 2142 | + and is_array($GLOBALS['exceptions_des_jointures'][$table_sql]) |
|
| 2143 | + and |
|
| 2144 | + ( |
|
| 2145 | + isset($GLOBALS['exceptions_des_jointures'][$table_sql][$col]) |
|
| 2146 | + or |
|
| 2147 | + isset($GLOBALS['exceptions_des_jointures'][$table_sql]['']) |
|
| 2148 | + ) |
|
| 2149 | + ) { |
|
| 2150 | + $t = $GLOBALS['exceptions_des_jointures'][$table_sql]; |
|
| 2151 | + $index = isset($t[$col]) |
|
| 2152 | + ? $t[$col] : (isset($t['']) ? $t[''] : array()); |
|
| 2153 | + |
|
| 2154 | + if (count($index) == 3) { |
|
| 2155 | + list($t, $col, $calculer_critere_externe) = $index; |
|
| 2156 | + } elseif (count($index) == 2) { |
|
| 2157 | + list($t, $col) = $t[$col]; |
|
| 2158 | + } elseif (count($index) == 1) { |
|
| 2159 | + list($calculer_critere_externe) = $index; |
|
| 2160 | + $t = $table; |
|
| 2161 | + } else { |
|
| 2162 | + $t = ''; |
|
| 2163 | + } // jointure non declaree. La trouver. |
|
| 2164 | + } elseif (isset($GLOBALS['exceptions_des_jointures'][$col])) { |
|
| 2165 | + list($t, $col) = $GLOBALS['exceptions_des_jointures'][$col]; |
|
| 2166 | + } else { |
|
| 2167 | + $t = ''; |
|
| 2168 | + } // jointure non declaree. La trouver. |
|
| 2169 | + |
|
| 2170 | + // ici on construit le from pour fournir $col en piochant dans les jointures |
|
| 2171 | + |
|
| 2172 | + // si des jointures explicites sont fournies, on cherche d'abord dans celles ci |
|
| 2173 | + // permet de forcer une table de lien quand il y a ambiguite |
|
| 2174 | + // <BOUCLE_(DOCUMENTS documents_liens){id_mot}> |
|
| 2175 | + // alors que <BOUCLE_(DOCUMENTS){id_mot}> produit la meme chose que <BOUCLE_(DOCUMENTS mots_liens){id_mot}> |
|
| 2176 | + $table = ""; |
|
| 2177 | + if ($boucle->jointures_explicites) { |
|
| 2178 | + $jointures_explicites = explode(' ', $boucle->jointures_explicites); |
|
| 2179 | + $table = $calculer_critere_externe($boucle, $jointures_explicites, $col, $desc, ($crit->cond or $op != '='), $t); |
|
| 2180 | + } |
|
| 2181 | + |
|
| 2182 | + // et sinon on cherche parmi toutes les jointures declarees |
|
| 2183 | + if (!$table) { |
|
| 2184 | + $table = $calculer_critere_externe($boucle, $boucle->jointures, $col, $desc, ($crit->cond or $op != '='), $t); |
|
| 2185 | + } |
|
| 2186 | + |
|
| 2187 | + if (!$table) { |
|
| 2188 | + return ''; |
|
| 2189 | + } |
|
| 2190 | + |
|
| 2191 | + // il ne reste plus qu'a trouver le champ dans les from |
|
| 2192 | + list($nom, $desc, $cle) = trouver_champ_exterieur($col, $boucle->from, $boucle); |
|
| 2193 | + |
|
| 2194 | + if (count($cle) > 1 or reset($cle) !== $col) { |
|
| 2195 | + $col_alias = $col; // id_article devient juste le nom d'origine |
|
| 2196 | + if (count($cle) > 1 and reset($cle) == 'id_objet') { |
|
| 2197 | + $e = decompose_champ_id_objet($col); |
|
| 2198 | + $col = array_shift($e); |
|
| 2199 | + $where = primary_doublee($e, $table); |
|
| 2200 | + } else { |
|
| 2201 | + $col = reset($cle); |
|
| 2202 | + } |
|
| 2203 | + } |
|
| 2204 | + |
|
| 2205 | + return array($col, $col_alias, $table, $where, $desc); |
|
| 2206 | 2206 | } |
| 2207 | 2207 | |
| 2208 | 2208 | |
@@ -2223,10 +2223,10 @@ discard block |
||
| 2223 | 2223 | * - valeur |
| 2224 | 2224 | **/ |
| 2225 | 2225 | function primary_doublee($decompose, $table) { |
| 2226 | - $e1 = reset($decompose); |
|
| 2227 | - $e2 = "sql_quote('" . end($decompose) . "')"; |
|
| 2226 | + $e1 = reset($decompose); |
|
| 2227 | + $e2 = "sql_quote('" . end($decompose) . "')"; |
|
| 2228 | 2228 | |
| 2229 | - return array("'='", "'$table." . $e1 . "'", $e2); |
|
| 2229 | + return array("'='", "'$table." . $e1 . "'", $e2); |
|
| 2230 | 2230 | } |
| 2231 | 2231 | |
| 2232 | 2232 | /** |
@@ -2257,56 +2257,56 @@ discard block |
||
| 2257 | 2257 | * Vide sinon. |
| 2258 | 2258 | */ |
| 2259 | 2259 | function calculer_critere_externe_init(&$boucle, $joints, $col, $desc, $cond, $checkarrivee = false) { |
| 2260 | - // si on demande un truc du genre spip_mots |
|
| 2261 | - // avec aussi spip_mots_liens dans les jointures dispo |
|
| 2262 | - // et qu'on est la |
|
| 2263 | - // il faut privilegier la jointure directe en 2 etapes spip_mots_liens, spip_mots |
|
| 2264 | - if ($checkarrivee |
|
| 2265 | - and is_string($checkarrivee) |
|
| 2266 | - and $a = table_objet($checkarrivee) |
|
| 2267 | - and in_array($a . '_liens', $joints) |
|
| 2268 | - ) { |
|
| 2269 | - if ($res = calculer_lien_externe_init($boucle, $joints, $col, $desc, $cond, $checkarrivee)) { |
|
| 2270 | - return $res; |
|
| 2271 | - } |
|
| 2272 | - } |
|
| 2273 | - foreach ($joints as $joint) { |
|
| 2274 | - if ($arrivee = trouver_champ_exterieur($col, array($joint), $boucle, $checkarrivee)) { |
|
| 2275 | - // alias de table dans le from |
|
| 2276 | - $t = array_search($arrivee[0], $boucle->from); |
|
| 2277 | - // recuperer la cle id_xx eventuellement decomposee en (id_objet,objet) |
|
| 2278 | - $cols = $arrivee[2]; |
|
| 2279 | - // mais on ignore la 3eme cle si presente qui correspond alors au point de depart |
|
| 2280 | - if (count($cols) > 2) { |
|
| 2281 | - array_pop($cols); |
|
| 2282 | - } |
|
| 2283 | - if ($t) { |
|
| 2284 | - // la table est déjà dans le FROM, on vérifie si le champ est utilisé. |
|
| 2285 | - $joindre = false; |
|
| 2286 | - foreach ($cols as $col) { |
|
| 2287 | - $c = '/\b' . $t . ".$col" . '\b/'; |
|
| 2288 | - if (trouver_champ($c, $boucle->where)) { |
|
| 2289 | - $joindre = true; |
|
| 2290 | - } else { |
|
| 2291 | - // mais ca peut etre dans le FIELD pour le Having |
|
| 2292 | - $c = "/FIELD.$t" . ".$col,/"; |
|
| 2293 | - if (trouver_champ($c, $boucle->select)) { |
|
| 2294 | - $joindre = true; |
|
| 2295 | - } |
|
| 2296 | - } |
|
| 2297 | - } |
|
| 2298 | - if (!$joindre) { |
|
| 2299 | - return $t; |
|
| 2300 | - } |
|
| 2301 | - } |
|
| 2302 | - array_pop($arrivee); |
|
| 2303 | - if ($res = calculer_jointure($boucle, array($boucle->id_table, $desc), $arrivee, $cols, $cond, 1)) { |
|
| 2304 | - return $res; |
|
| 2305 | - } |
|
| 2306 | - } |
|
| 2307 | - } |
|
| 2308 | - |
|
| 2309 | - return ''; |
|
| 2260 | + // si on demande un truc du genre spip_mots |
|
| 2261 | + // avec aussi spip_mots_liens dans les jointures dispo |
|
| 2262 | + // et qu'on est la |
|
| 2263 | + // il faut privilegier la jointure directe en 2 etapes spip_mots_liens, spip_mots |
|
| 2264 | + if ($checkarrivee |
|
| 2265 | + and is_string($checkarrivee) |
|
| 2266 | + and $a = table_objet($checkarrivee) |
|
| 2267 | + and in_array($a . '_liens', $joints) |
|
| 2268 | + ) { |
|
| 2269 | + if ($res = calculer_lien_externe_init($boucle, $joints, $col, $desc, $cond, $checkarrivee)) { |
|
| 2270 | + return $res; |
|
| 2271 | + } |
|
| 2272 | + } |
|
| 2273 | + foreach ($joints as $joint) { |
|
| 2274 | + if ($arrivee = trouver_champ_exterieur($col, array($joint), $boucle, $checkarrivee)) { |
|
| 2275 | + // alias de table dans le from |
|
| 2276 | + $t = array_search($arrivee[0], $boucle->from); |
|
| 2277 | + // recuperer la cle id_xx eventuellement decomposee en (id_objet,objet) |
|
| 2278 | + $cols = $arrivee[2]; |
|
| 2279 | + // mais on ignore la 3eme cle si presente qui correspond alors au point de depart |
|
| 2280 | + if (count($cols) > 2) { |
|
| 2281 | + array_pop($cols); |
|
| 2282 | + } |
|
| 2283 | + if ($t) { |
|
| 2284 | + // la table est déjà dans le FROM, on vérifie si le champ est utilisé. |
|
| 2285 | + $joindre = false; |
|
| 2286 | + foreach ($cols as $col) { |
|
| 2287 | + $c = '/\b' . $t . ".$col" . '\b/'; |
|
| 2288 | + if (trouver_champ($c, $boucle->where)) { |
|
| 2289 | + $joindre = true; |
|
| 2290 | + } else { |
|
| 2291 | + // mais ca peut etre dans le FIELD pour le Having |
|
| 2292 | + $c = "/FIELD.$t" . ".$col,/"; |
|
| 2293 | + if (trouver_champ($c, $boucle->select)) { |
|
| 2294 | + $joindre = true; |
|
| 2295 | + } |
|
| 2296 | + } |
|
| 2297 | + } |
|
| 2298 | + if (!$joindre) { |
|
| 2299 | + return $t; |
|
| 2300 | + } |
|
| 2301 | + } |
|
| 2302 | + array_pop($arrivee); |
|
| 2303 | + if ($res = calculer_jointure($boucle, array($boucle->id_table, $desc), $arrivee, $cols, $cond, 1)) { |
|
| 2304 | + return $res; |
|
| 2305 | + } |
|
| 2306 | + } |
|
| 2307 | + } |
|
| 2308 | + |
|
| 2309 | + return ''; |
|
| 2310 | 2310 | |
| 2311 | 2311 | } |
| 2312 | 2312 | |
@@ -2333,29 +2333,29 @@ discard block |
||
| 2333 | 2333 | * Alias de la table de jointure (Lx) |
| 2334 | 2334 | */ |
| 2335 | 2335 | function calculer_lien_externe_init(&$boucle, $joints, $col, $desc, $cond, $checkarrivee = false) { |
| 2336 | - $primary_arrivee = id_table_objet($checkarrivee); |
|
| 2337 | - |
|
| 2338 | - // [FIXME] $checkarrivee peut-il arriver avec false ???? |
|
| 2339 | - $intermediaire = trouver_champ_exterieur($primary_arrivee, $joints, $boucle, $checkarrivee . "_liens"); |
|
| 2340 | - $arrivee = trouver_champ_exterieur($col, $joints, $boucle, $checkarrivee); |
|
| 2341 | - |
|
| 2342 | - if (!$intermediaire or !$arrivee) { |
|
| 2343 | - return ''; |
|
| 2344 | - } |
|
| 2345 | - array_pop($intermediaire); // enlever la cle en 3eme argument |
|
| 2346 | - array_pop($arrivee); // enlever la cle en 3eme argument |
|
| 2347 | - |
|
| 2348 | - $res = fabrique_jointures($boucle, |
|
| 2349 | - array( |
|
| 2350 | - array( |
|
| 2351 | - $boucle->id_table, |
|
| 2352 | - $intermediaire, |
|
| 2353 | - array(id_table_objet($desc['table_objet']), 'id_objet', 'objet', $desc['type']) |
|
| 2354 | - ), |
|
| 2355 | - array(reset($intermediaire), $arrivee, $primary_arrivee) |
|
| 2356 | - ), $cond, $desc, $boucle->id_table, array($col)); |
|
| 2357 | - |
|
| 2358 | - return $res; |
|
| 2336 | + $primary_arrivee = id_table_objet($checkarrivee); |
|
| 2337 | + |
|
| 2338 | + // [FIXME] $checkarrivee peut-il arriver avec false ???? |
|
| 2339 | + $intermediaire = trouver_champ_exterieur($primary_arrivee, $joints, $boucle, $checkarrivee . "_liens"); |
|
| 2340 | + $arrivee = trouver_champ_exterieur($col, $joints, $boucle, $checkarrivee); |
|
| 2341 | + |
|
| 2342 | + if (!$intermediaire or !$arrivee) { |
|
| 2343 | + return ''; |
|
| 2344 | + } |
|
| 2345 | + array_pop($intermediaire); // enlever la cle en 3eme argument |
|
| 2346 | + array_pop($arrivee); // enlever la cle en 3eme argument |
|
| 2347 | + |
|
| 2348 | + $res = fabrique_jointures($boucle, |
|
| 2349 | + array( |
|
| 2350 | + array( |
|
| 2351 | + $boucle->id_table, |
|
| 2352 | + $intermediaire, |
|
| 2353 | + array(id_table_objet($desc['table_objet']), 'id_objet', 'objet', $desc['type']) |
|
| 2354 | + ), |
|
| 2355 | + array(reset($intermediaire), $arrivee, $primary_arrivee) |
|
| 2356 | + ), $cond, $desc, $boucle->id_table, array($col)); |
|
| 2357 | + |
|
| 2358 | + return $res; |
|
| 2359 | 2359 | } |
| 2360 | 2360 | |
| 2361 | 2361 | |
@@ -2372,17 +2372,17 @@ discard block |
||
| 2372 | 2372 | * false sinon. |
| 2373 | 2373 | **/ |
| 2374 | 2374 | function trouver_champ($champ, $where) { |
| 2375 | - if (!is_array($where)) { |
|
| 2376 | - return preg_match($champ, $where); |
|
| 2377 | - } else { |
|
| 2378 | - foreach ($where as $clause) { |
|
| 2379 | - if (trouver_champ($champ, $clause)) { |
|
| 2380 | - return true; |
|
| 2381 | - } |
|
| 2382 | - } |
|
| 2383 | - |
|
| 2384 | - return false; |
|
| 2385 | - } |
|
| 2375 | + if (!is_array($where)) { |
|
| 2376 | + return preg_match($champ, $where); |
|
| 2377 | + } else { |
|
| 2378 | + foreach ($where as $clause) { |
|
| 2379 | + if (trouver_champ($champ, $clause)) { |
|
| 2380 | + return true; |
|
| 2381 | + } |
|
| 2382 | + } |
|
| 2383 | + |
|
| 2384 | + return false; |
|
| 2385 | + } |
|
| 2386 | 2386 | } |
| 2387 | 2387 | |
| 2388 | 2388 | |
@@ -2408,128 +2408,128 @@ discard block |
||
| 2408 | 2408 | * - string $args_sql Suite des arguments du critère. ? |
| 2409 | 2409 | **/ |
| 2410 | 2410 | function calculer_critere_infixe_ops($idb, &$boucles, $crit) { |
| 2411 | - // cas d'une valeur comparee a elle-meme ou son referent |
|
| 2412 | - if (count($crit->param) == 0) { |
|
| 2413 | - $op = '='; |
|
| 2414 | - $col = $val = $crit->op; |
|
| 2415 | - if (preg_match('/^(.*)\.(.*)$/', $col, $r)) { |
|
| 2416 | - $val = $r[2]; |
|
| 2417 | - } |
|
| 2418 | - // Cas special {lang} : aller chercher $GLOBALS['spip_lang'] |
|
| 2419 | - if ($val == 'lang') { |
|
| 2420 | - $val = array(kwote('$GLOBALS[\'spip_lang\']')); |
|
| 2421 | - } else { |
|
| 2422 | - $defaut = null; |
|
| 2423 | - if ($val == 'id_parent') { |
|
| 2424 | - // Si id_parent, comparer l'id_parent avec l'id_objet |
|
| 2425 | - // de la boucle superieure.... faudrait verifier qu'il existe |
|
| 2426 | - // pour eviter l'erreur SQL |
|
| 2427 | - $val = $boucles[$idb]->primary; |
|
| 2428 | - // mais si pas de boucle superieure, prendre id_parent dans l'env |
|
| 2429 | - $defaut = "@\$Pile[0]['id_parent']"; |
|
| 2430 | - } elseif ($val == 'id_enfant') { |
|
| 2431 | - // Si id_enfant, comparer l'id_objet avec l'id_parent |
|
| 2432 | - // de la boucle superieure |
|
| 2433 | - $val = 'id_parent'; |
|
| 2434 | - } elseif ($crit->cond and ($col == "date" or $col == "date_redac")) { |
|
| 2435 | - // un critere conditionnel sur date est traite a part |
|
| 2436 | - // car la date est mise d'office par SPIP, |
|
| 2437 | - $defaut = "(\$Pile[0]['{$col}_default']?'':\$Pile[0]['" . $col . "'])"; |
|
| 2438 | - } |
|
| 2439 | - |
|
| 2440 | - $val = calculer_argument_precedent($idb, $val, $boucles, $defaut); |
|
| 2441 | - $val = array(kwote($val)); |
|
| 2442 | - } |
|
| 2443 | - } else { |
|
| 2444 | - // comparaison explicite |
|
| 2445 | - // le phraseur impose que le premier param soit du texte |
|
| 2446 | - $params = $crit->param; |
|
| 2447 | - $op = $crit->op; |
|
| 2448 | - if ($op == '==') { |
|
| 2449 | - $op = 'REGEXP'; |
|
| 2450 | - } |
|
| 2451 | - $col = array_shift($params); |
|
| 2452 | - $col = $col[0]->texte; |
|
| 2453 | - |
|
| 2454 | - $val = array(); |
|
| 2455 | - $parent = $boucles[$idb]->id_parent; |
|
| 2456 | - |
|
| 2457 | - // Dans le cas {x=='#DATE'} etc, defaire le travail du phraseur, |
|
| 2458 | - // celui ne sachant pas ce qu'est un critere infixe |
|
| 2459 | - // et a fortiori son 2e operande qu'entoure " ou ' |
|
| 2460 | - if (count($params) == 1 |
|
| 2461 | - and count($params[0]) == 3 |
|
| 2462 | - and $params[0][0]->type == 'texte' |
|
| 2463 | - and $params[0][2]->type == 'texte' |
|
| 2464 | - and ($p = $params[0][0]->texte) == $params[0][2]->texte |
|
| 2465 | - and (($p == "'") or ($p == '"')) |
|
| 2466 | - and $params[0][1]->type == 'champ' |
|
| 2467 | - ) { |
|
| 2468 | - $val[] = "$p\\$p#" . $params[0][1]->nom_champ . "\\$p$p"; |
|
| 2469 | - } else { |
|
| 2470 | - foreach ((($op != 'IN') ? $params : calculer_vieux_in($params)) as $p) { |
|
| 2471 | - $a = calculer_liste($p, $idb, $boucles, $parent); |
|
| 2472 | - if (strcasecmp($op, 'IN') == 0) { |
|
| 2473 | - $val[] = $a; |
|
| 2474 | - } else { |
|
| 2475 | - $val[] = kwote($a, $boucles[$idb]->sql_serveur, '@@defaultcast@@'); |
|
| 2476 | - } // toujours quoter en char ici |
|
| 2477 | - } |
|
| 2478 | - } |
|
| 2479 | - } |
|
| 2480 | - |
|
| 2481 | - $fct = $args_sql = ''; |
|
| 2482 | - // fonction SQL ? |
|
| 2483 | - // chercher FONCTION(champ) tel que CONCAT(titre,descriptif) |
|
| 2484 | - if (preg_match('/^(.*)' . SQL_ARGS . '$/', $col, $m)) { |
|
| 2485 | - $fct = $m[1]; |
|
| 2486 | - preg_match('/^\(([^,]*)(.*)\)$/', $m[2], $a); |
|
| 2487 | - $col = $a[1]; |
|
| 2488 | - if (preg_match('/^(\S*)(\s+AS\s+.*)$/i', $col, $m)) { |
|
| 2489 | - $col = $m[1]; |
|
| 2490 | - $args_sql = $m[2]; |
|
| 2491 | - } |
|
| 2492 | - $args_sql .= $a[2]; |
|
| 2493 | - } |
|
| 2494 | - |
|
| 2495 | - return array($fct, $col, $op, $val, $args_sql); |
|
| 2411 | + // cas d'une valeur comparee a elle-meme ou son referent |
|
| 2412 | + if (count($crit->param) == 0) { |
|
| 2413 | + $op = '='; |
|
| 2414 | + $col = $val = $crit->op; |
|
| 2415 | + if (preg_match('/^(.*)\.(.*)$/', $col, $r)) { |
|
| 2416 | + $val = $r[2]; |
|
| 2417 | + } |
|
| 2418 | + // Cas special {lang} : aller chercher $GLOBALS['spip_lang'] |
|
| 2419 | + if ($val == 'lang') { |
|
| 2420 | + $val = array(kwote('$GLOBALS[\'spip_lang\']')); |
|
| 2421 | + } else { |
|
| 2422 | + $defaut = null; |
|
| 2423 | + if ($val == 'id_parent') { |
|
| 2424 | + // Si id_parent, comparer l'id_parent avec l'id_objet |
|
| 2425 | + // de la boucle superieure.... faudrait verifier qu'il existe |
|
| 2426 | + // pour eviter l'erreur SQL |
|
| 2427 | + $val = $boucles[$idb]->primary; |
|
| 2428 | + // mais si pas de boucle superieure, prendre id_parent dans l'env |
|
| 2429 | + $defaut = "@\$Pile[0]['id_parent']"; |
|
| 2430 | + } elseif ($val == 'id_enfant') { |
|
| 2431 | + // Si id_enfant, comparer l'id_objet avec l'id_parent |
|
| 2432 | + // de la boucle superieure |
|
| 2433 | + $val = 'id_parent'; |
|
| 2434 | + } elseif ($crit->cond and ($col == "date" or $col == "date_redac")) { |
|
| 2435 | + // un critere conditionnel sur date est traite a part |
|
| 2436 | + // car la date est mise d'office par SPIP, |
|
| 2437 | + $defaut = "(\$Pile[0]['{$col}_default']?'':\$Pile[0]['" . $col . "'])"; |
|
| 2438 | + } |
|
| 2439 | + |
|
| 2440 | + $val = calculer_argument_precedent($idb, $val, $boucles, $defaut); |
|
| 2441 | + $val = array(kwote($val)); |
|
| 2442 | + } |
|
| 2443 | + } else { |
|
| 2444 | + // comparaison explicite |
|
| 2445 | + // le phraseur impose que le premier param soit du texte |
|
| 2446 | + $params = $crit->param; |
|
| 2447 | + $op = $crit->op; |
|
| 2448 | + if ($op == '==') { |
|
| 2449 | + $op = 'REGEXP'; |
|
| 2450 | + } |
|
| 2451 | + $col = array_shift($params); |
|
| 2452 | + $col = $col[0]->texte; |
|
| 2453 | + |
|
| 2454 | + $val = array(); |
|
| 2455 | + $parent = $boucles[$idb]->id_parent; |
|
| 2456 | + |
|
| 2457 | + // Dans le cas {x=='#DATE'} etc, defaire le travail du phraseur, |
|
| 2458 | + // celui ne sachant pas ce qu'est un critere infixe |
|
| 2459 | + // et a fortiori son 2e operande qu'entoure " ou ' |
|
| 2460 | + if (count($params) == 1 |
|
| 2461 | + and count($params[0]) == 3 |
|
| 2462 | + and $params[0][0]->type == 'texte' |
|
| 2463 | + and $params[0][2]->type == 'texte' |
|
| 2464 | + and ($p = $params[0][0]->texte) == $params[0][2]->texte |
|
| 2465 | + and (($p == "'") or ($p == '"')) |
|
| 2466 | + and $params[0][1]->type == 'champ' |
|
| 2467 | + ) { |
|
| 2468 | + $val[] = "$p\\$p#" . $params[0][1]->nom_champ . "\\$p$p"; |
|
| 2469 | + } else { |
|
| 2470 | + foreach ((($op != 'IN') ? $params : calculer_vieux_in($params)) as $p) { |
|
| 2471 | + $a = calculer_liste($p, $idb, $boucles, $parent); |
|
| 2472 | + if (strcasecmp($op, 'IN') == 0) { |
|
| 2473 | + $val[] = $a; |
|
| 2474 | + } else { |
|
| 2475 | + $val[] = kwote($a, $boucles[$idb]->sql_serveur, '@@defaultcast@@'); |
|
| 2476 | + } // toujours quoter en char ici |
|
| 2477 | + } |
|
| 2478 | + } |
|
| 2479 | + } |
|
| 2480 | + |
|
| 2481 | + $fct = $args_sql = ''; |
|
| 2482 | + // fonction SQL ? |
|
| 2483 | + // chercher FONCTION(champ) tel que CONCAT(titre,descriptif) |
|
| 2484 | + if (preg_match('/^(.*)' . SQL_ARGS . '$/', $col, $m)) { |
|
| 2485 | + $fct = $m[1]; |
|
| 2486 | + preg_match('/^\(([^,]*)(.*)\)$/', $m[2], $a); |
|
| 2487 | + $col = $a[1]; |
|
| 2488 | + if (preg_match('/^(\S*)(\s+AS\s+.*)$/i', $col, $m)) { |
|
| 2489 | + $col = $m[1]; |
|
| 2490 | + $args_sql = $m[2]; |
|
| 2491 | + } |
|
| 2492 | + $args_sql .= $a[2]; |
|
| 2493 | + } |
|
| 2494 | + |
|
| 2495 | + return array($fct, $col, $op, $val, $args_sql); |
|
| 2496 | 2496 | } |
| 2497 | 2497 | |
| 2498 | 2498 | // compatibilite ancienne version |
| 2499 | 2499 | |
| 2500 | 2500 | // http://code.spip.net/@calculer_vieux_in |
| 2501 | 2501 | function calculer_vieux_in($params) { |
| 2502 | - $deb = $params[0][0]; |
|
| 2503 | - $k = count($params) - 1; |
|
| 2504 | - $last = $params[$k]; |
|
| 2505 | - $j = count($last) - 1; |
|
| 2506 | - $last = $last[$j]; |
|
| 2507 | - $n = isset($last->texte) ? strlen($last->texte) : 0; |
|
| 2508 | - |
|
| 2509 | - if (!((isset($deb->texte[0]) and $deb->texte[0] == '(') |
|
| 2510 | - && (isset($last->texte[$n - 1]) and $last->texte[$n - 1] == ')')) |
|
| 2511 | - ) { |
|
| 2512 | - return $params; |
|
| 2513 | - } |
|
| 2514 | - $params[0][0]->texte = substr($deb->texte, 1); |
|
| 2515 | - // attention, on peut avoir k=0,j=0 ==> recalculer |
|
| 2516 | - $last = $params[$k][$j]; |
|
| 2517 | - $n = strlen($last->texte); |
|
| 2518 | - $params[$k][$j]->texte = substr($last->texte, 0, $n - 1); |
|
| 2519 | - $newp = array(); |
|
| 2520 | - foreach ($params as $v) { |
|
| 2521 | - if ($v[0]->type != 'texte') { |
|
| 2522 | - $newp[] = $v; |
|
| 2523 | - } else { |
|
| 2524 | - foreach (explode(',', $v[0]->texte) as $x) { |
|
| 2525 | - $t = new Texte; |
|
| 2526 | - $t->texte = $x; |
|
| 2527 | - $newp[] = array($t); |
|
| 2528 | - } |
|
| 2529 | - } |
|
| 2530 | - } |
|
| 2531 | - |
|
| 2532 | - return $newp; |
|
| 2502 | + $deb = $params[0][0]; |
|
| 2503 | + $k = count($params) - 1; |
|
| 2504 | + $last = $params[$k]; |
|
| 2505 | + $j = count($last) - 1; |
|
| 2506 | + $last = $last[$j]; |
|
| 2507 | + $n = isset($last->texte) ? strlen($last->texte) : 0; |
|
| 2508 | + |
|
| 2509 | + if (!((isset($deb->texte[0]) and $deb->texte[0] == '(') |
|
| 2510 | + && (isset($last->texte[$n - 1]) and $last->texte[$n - 1] == ')')) |
|
| 2511 | + ) { |
|
| 2512 | + return $params; |
|
| 2513 | + } |
|
| 2514 | + $params[0][0]->texte = substr($deb->texte, 1); |
|
| 2515 | + // attention, on peut avoir k=0,j=0 ==> recalculer |
|
| 2516 | + $last = $params[$k][$j]; |
|
| 2517 | + $n = strlen($last->texte); |
|
| 2518 | + $params[$k][$j]->texte = substr($last->texte, 0, $n - 1); |
|
| 2519 | + $newp = array(); |
|
| 2520 | + foreach ($params as $v) { |
|
| 2521 | + if ($v[0]->type != 'texte') { |
|
| 2522 | + $newp[] = $v; |
|
| 2523 | + } else { |
|
| 2524 | + foreach (explode(',', $v[0]->texte) as $x) { |
|
| 2525 | + $t = new Texte; |
|
| 2526 | + $t->texte = $x; |
|
| 2527 | + $newp[] = array($t); |
|
| 2528 | + } |
|
| 2529 | + } |
|
| 2530 | + } |
|
| 2531 | + |
|
| 2532 | + return $newp; |
|
| 2533 | 2533 | } |
| 2534 | 2534 | |
| 2535 | 2535 | /** |
@@ -2548,89 +2548,89 @@ discard block |
||
| 2548 | 2548 | * - nom de la colonne de date (si le calcul n'est pas relatif) |
| 2549 | 2549 | **/ |
| 2550 | 2550 | function calculer_critere_infixe_date($idb, &$boucles, $col) { |
| 2551 | - if (!preg_match(",^((age|jour|mois|annee)_relatif|date|mois|annee|jour|heure|age)(_[a-z]+)?$,", $col, $regs)) { |
|
| 2552 | - return ''; |
|
| 2553 | - } |
|
| 2554 | - |
|
| 2555 | - $boucle = $boucles[$idb]; |
|
| 2556 | - $table = $boucle->show; |
|
| 2557 | - |
|
| 2558 | - // si c'est une colonne de la table, ne rien faire |
|
| 2559 | - if (isset($table['field'][$col])) { |
|
| 2560 | - return ''; |
|
| 2561 | - } |
|
| 2562 | - |
|
| 2563 | - if (!$table['date'] && !isset($GLOBALS['table_date'][$table['id_table']])) { |
|
| 2564 | - return ''; |
|
| 2565 | - } |
|
| 2566 | - $pred = $date_orig = isset($GLOBALS['table_date'][$table['id_table']]) ? $GLOBALS['table_date'][$table['id_table']] : $table['date']; |
|
| 2567 | - |
|
| 2568 | - $col = $regs[1]; |
|
| 2569 | - if (isset($regs[3]) and $suite = $regs[3]) { |
|
| 2570 | - # Recherche de l'existence du champ date_xxxx, |
|
| 2571 | - # si oui choisir ce champ, sinon choisir xxxx |
|
| 2572 | - |
|
| 2573 | - if (isset($table['field']["date$suite"])) { |
|
| 2574 | - $date_orig = 'date' . $suite; |
|
| 2575 | - } else { |
|
| 2576 | - $date_orig = substr($suite, 1); |
|
| 2577 | - } |
|
| 2578 | - $pred = $date_orig; |
|
| 2579 | - } else { |
|
| 2580 | - if (isset($regs[2]) and $rel = $regs[2]) { |
|
| 2581 | - $pred = 'date'; |
|
| 2582 | - } |
|
| 2583 | - } |
|
| 2584 | - |
|
| 2585 | - $date_compare = "\"' . normaliser_date(" . |
|
| 2586 | - calculer_argument_precedent($idb, $pred, $boucles) . |
|
| 2587 | - ") . '\""; |
|
| 2588 | - |
|
| 2589 | - $col_vraie = $date_orig; |
|
| 2590 | - $date_orig = $boucle->id_table . '.' . $date_orig; |
|
| 2591 | - |
|
| 2592 | - switch ($col) { |
|
| 2593 | - case 'date': |
|
| 2594 | - $col = $date_orig; |
|
| 2595 | - break; |
|
| 2596 | - case 'jour': |
|
| 2597 | - $col = "DAYOFMONTH($date_orig)"; |
|
| 2598 | - break; |
|
| 2599 | - case 'mois': |
|
| 2600 | - $col = "MONTH($date_orig)"; |
|
| 2601 | - break; |
|
| 2602 | - case 'annee': |
|
| 2603 | - $col = "YEAR($date_orig)"; |
|
| 2604 | - break; |
|
| 2605 | - case 'heure': |
|
| 2606 | - $col = "DATE_FORMAT($date_orig, \\'%H:%i\\')"; |
|
| 2607 | - break; |
|
| 2608 | - case 'age': |
|
| 2609 | - $col = calculer_param_date("NOW()", $date_orig); |
|
| 2610 | - $col_vraie = "";// comparer a un int (par defaut) |
|
| 2611 | - break; |
|
| 2612 | - case 'age_relatif': |
|
| 2613 | - $col = calculer_param_date($date_compare, $date_orig); |
|
| 2614 | - $col_vraie = "";// comparer a un int (par defaut) |
|
| 2615 | - break; |
|
| 2616 | - case 'jour_relatif': |
|
| 2617 | - $col = "(TO_DAYS(" . $date_compare . ")-TO_DAYS(" . $date_orig . "))"; |
|
| 2618 | - $col_vraie = "";// comparer a un int (par defaut) |
|
| 2619 | - break; |
|
| 2620 | - case 'mois_relatif': |
|
| 2621 | - $col = "MONTH(" . $date_compare . ")-MONTH(" . |
|
| 2622 | - $date_orig . ")+12*(YEAR(" . $date_compare . |
|
| 2623 | - ")-YEAR(" . $date_orig . "))"; |
|
| 2624 | - $col_vraie = "";// comparer a un int (par defaut) |
|
| 2625 | - break; |
|
| 2626 | - case 'annee_relatif': |
|
| 2627 | - $col = "YEAR(" . $date_compare . ")-YEAR(" . |
|
| 2628 | - $date_orig . ")"; |
|
| 2629 | - $col_vraie = "";// comparer a un int (par defaut) |
|
| 2630 | - break; |
|
| 2631 | - } |
|
| 2632 | - |
|
| 2633 | - return array($col, $col_vraie); |
|
| 2551 | + if (!preg_match(",^((age|jour|mois|annee)_relatif|date|mois|annee|jour|heure|age)(_[a-z]+)?$,", $col, $regs)) { |
|
| 2552 | + return ''; |
|
| 2553 | + } |
|
| 2554 | + |
|
| 2555 | + $boucle = $boucles[$idb]; |
|
| 2556 | + $table = $boucle->show; |
|
| 2557 | + |
|
| 2558 | + // si c'est une colonne de la table, ne rien faire |
|
| 2559 | + if (isset($table['field'][$col])) { |
|
| 2560 | + return ''; |
|
| 2561 | + } |
|
| 2562 | + |
|
| 2563 | + if (!$table['date'] && !isset($GLOBALS['table_date'][$table['id_table']])) { |
|
| 2564 | + return ''; |
|
| 2565 | + } |
|
| 2566 | + $pred = $date_orig = isset($GLOBALS['table_date'][$table['id_table']]) ? $GLOBALS['table_date'][$table['id_table']] : $table['date']; |
|
| 2567 | + |
|
| 2568 | + $col = $regs[1]; |
|
| 2569 | + if (isset($regs[3]) and $suite = $regs[3]) { |
|
| 2570 | + # Recherche de l'existence du champ date_xxxx, |
|
| 2571 | + # si oui choisir ce champ, sinon choisir xxxx |
|
| 2572 | + |
|
| 2573 | + if (isset($table['field']["date$suite"])) { |
|
| 2574 | + $date_orig = 'date' . $suite; |
|
| 2575 | + } else { |
|
| 2576 | + $date_orig = substr($suite, 1); |
|
| 2577 | + } |
|
| 2578 | + $pred = $date_orig; |
|
| 2579 | + } else { |
|
| 2580 | + if (isset($regs[2]) and $rel = $regs[2]) { |
|
| 2581 | + $pred = 'date'; |
|
| 2582 | + } |
|
| 2583 | + } |
|
| 2584 | + |
|
| 2585 | + $date_compare = "\"' . normaliser_date(" . |
|
| 2586 | + calculer_argument_precedent($idb, $pred, $boucles) . |
|
| 2587 | + ") . '\""; |
|
| 2588 | + |
|
| 2589 | + $col_vraie = $date_orig; |
|
| 2590 | + $date_orig = $boucle->id_table . '.' . $date_orig; |
|
| 2591 | + |
|
| 2592 | + switch ($col) { |
|
| 2593 | + case 'date': |
|
| 2594 | + $col = $date_orig; |
|
| 2595 | + break; |
|
| 2596 | + case 'jour': |
|
| 2597 | + $col = "DAYOFMONTH($date_orig)"; |
|
| 2598 | + break; |
|
| 2599 | + case 'mois': |
|
| 2600 | + $col = "MONTH($date_orig)"; |
|
| 2601 | + break; |
|
| 2602 | + case 'annee': |
|
| 2603 | + $col = "YEAR($date_orig)"; |
|
| 2604 | + break; |
|
| 2605 | + case 'heure': |
|
| 2606 | + $col = "DATE_FORMAT($date_orig, \\'%H:%i\\')"; |
|
| 2607 | + break; |
|
| 2608 | + case 'age': |
|
| 2609 | + $col = calculer_param_date("NOW()", $date_orig); |
|
| 2610 | + $col_vraie = "";// comparer a un int (par defaut) |
|
| 2611 | + break; |
|
| 2612 | + case 'age_relatif': |
|
| 2613 | + $col = calculer_param_date($date_compare, $date_orig); |
|
| 2614 | + $col_vraie = "";// comparer a un int (par defaut) |
|
| 2615 | + break; |
|
| 2616 | + case 'jour_relatif': |
|
| 2617 | + $col = "(TO_DAYS(" . $date_compare . ")-TO_DAYS(" . $date_orig . "))"; |
|
| 2618 | + $col_vraie = "";// comparer a un int (par defaut) |
|
| 2619 | + break; |
|
| 2620 | + case 'mois_relatif': |
|
| 2621 | + $col = "MONTH(" . $date_compare . ")-MONTH(" . |
|
| 2622 | + $date_orig . ")+12*(YEAR(" . $date_compare . |
|
| 2623 | + ")-YEAR(" . $date_orig . "))"; |
|
| 2624 | + $col_vraie = "";// comparer a un int (par defaut) |
|
| 2625 | + break; |
|
| 2626 | + case 'annee_relatif': |
|
| 2627 | + $col = "YEAR(" . $date_compare . ")-YEAR(" . |
|
| 2628 | + $date_orig . ")"; |
|
| 2629 | + $col_vraie = "";// comparer a un int (par defaut) |
|
| 2630 | + break; |
|
| 2631 | + } |
|
| 2632 | + |
|
| 2633 | + return array($col, $col_vraie); |
|
| 2634 | 2634 | } |
| 2635 | 2635 | |
| 2636 | 2636 | /** |
@@ -2649,16 +2649,16 @@ discard block |
||
| 2649 | 2649 | * de colonne SQL et une date. |
| 2650 | 2650 | **/ |
| 2651 | 2651 | function calculer_param_date($date_compare, $date_orig) { |
| 2652 | - if (preg_match(",'\" *\.(.*)\. *\"',", $date_compare, $r)) { |
|
| 2653 | - $init = "'\" . (\$x = $r[1]) . \"'"; |
|
| 2654 | - $date_compare = '\'$x\''; |
|
| 2655 | - } else { |
|
| 2656 | - $init = $date_compare; |
|
| 2657 | - } |
|
| 2658 | - |
|
| 2659 | - return |
|
| 2660 | - // optimisation : mais prevoir le support SQLite avant |
|
| 2661 | - "TIMESTAMPDIFF(HOUR,$date_orig,$init)/24"; |
|
| 2652 | + if (preg_match(",'\" *\.(.*)\. *\"',", $date_compare, $r)) { |
|
| 2653 | + $init = "'\" . (\$x = $r[1]) . \"'"; |
|
| 2654 | + $date_compare = '\'$x\''; |
|
| 2655 | + } else { |
|
| 2656 | + $init = $date_compare; |
|
| 2657 | + } |
|
| 2658 | + |
|
| 2659 | + return |
|
| 2660 | + // optimisation : mais prevoir le support SQLite avant |
|
| 2661 | + "TIMESTAMPDIFF(HOUR,$date_orig,$init)/24"; |
|
| 2662 | 2662 | } |
| 2663 | 2663 | |
| 2664 | 2664 | /** |
@@ -2676,18 +2676,18 @@ discard block |
||
| 2676 | 2676 | * @param Critere $crit Paramètres du critère dans cette boucle |
| 2677 | 2677 | */ |
| 2678 | 2678 | function critere_DATA_source_dist($idb, &$boucles, $crit) { |
| 2679 | - $boucle = &$boucles[$idb]; |
|
| 2679 | + $boucle = &$boucles[$idb]; |
|
| 2680 | 2680 | |
| 2681 | - $args = array(); |
|
| 2682 | - foreach ($crit->param as &$param) { |
|
| 2683 | - array_push($args, |
|
| 2684 | - calculer_liste($param, $idb, $boucles, $boucles[$idb]->id_parent)); |
|
| 2685 | - } |
|
| 2681 | + $args = array(); |
|
| 2682 | + foreach ($crit->param as &$param) { |
|
| 2683 | + array_push($args, |
|
| 2684 | + calculer_liste($param, $idb, $boucles, $boucles[$idb]->id_parent)); |
|
| 2685 | + } |
|
| 2686 | 2686 | |
| 2687 | - $boucle->hash .= ' |
|
| 2687 | + $boucle->hash .= ' |
|
| 2688 | 2688 | $command[\'sourcemode\'] = ' . array_shift($args) . ";\n"; |
| 2689 | 2689 | |
| 2690 | - $boucle->hash .= ' |
|
| 2690 | + $boucle->hash .= ' |
|
| 2691 | 2691 | $command[\'source\'] = array(' . join(', ', $args) . ");\n"; |
| 2692 | 2692 | } |
| 2693 | 2693 | |
@@ -2704,8 +2704,8 @@ discard block |
||
| 2704 | 2704 | * @param Critere $crit Paramètres du critère dans cette boucle |
| 2705 | 2705 | */ |
| 2706 | 2706 | function critere_DATA_datasource_dist($idb, &$boucles, $crit) { |
| 2707 | - $boucle = &$boucles[$idb]; |
|
| 2708 | - $boucle->hash .= ' |
|
| 2707 | + $boucle = &$boucles[$idb]; |
|
| 2708 | + $boucle->hash .= ' |
|
| 2709 | 2709 | $command[\'source\'] = array(' . calculer_liste($crit->param[0], $idb, $boucles, $boucles[$idb]->id_parent) . '); |
| 2710 | 2710 | $command[\'sourcemode\'] = ' . calculer_liste($crit->param[1], $idb, $boucles, $boucles[$idb]->id_parent) . ';'; |
| 2711 | 2711 | } |
@@ -2725,8 +2725,8 @@ discard block |
||
| 2725 | 2725 | * @param Critere $crit Paramètres du critère dans cette boucle |
| 2726 | 2726 | */ |
| 2727 | 2727 | function critere_DATA_datacache_dist($idb, &$boucles, $crit) { |
| 2728 | - $boucle = &$boucles[$idb]; |
|
| 2729 | - $boucle->hash .= ' |
|
| 2728 | + $boucle = &$boucles[$idb]; |
|
| 2729 | + $boucle->hash .= ' |
|
| 2730 | 2730 | $command[\'datacache\'] = ' . calculer_liste($crit->param[0], $idb, $boucles, $boucles[$idb]->id_parent) . ';'; |
| 2731 | 2731 | } |
| 2732 | 2732 | |
@@ -2742,12 +2742,12 @@ discard block |
||
| 2742 | 2742 | * @param Critere $crit Paramètres du critère dans cette boucle |
| 2743 | 2743 | */ |
| 2744 | 2744 | function critere_php_args_dist($idb, &$boucles, $crit) { |
| 2745 | - $boucle = &$boucles[$idb]; |
|
| 2746 | - $boucle->hash .= '$command[\'args\']=array();'; |
|
| 2747 | - foreach ($crit->param as $param) { |
|
| 2748 | - $boucle->hash .= ' |
|
| 2745 | + $boucle = &$boucles[$idb]; |
|
| 2746 | + $boucle->hash .= '$command[\'args\']=array();'; |
|
| 2747 | + foreach ($crit->param as $param) { |
|
| 2748 | + $boucle->hash .= ' |
|
| 2749 | 2749 | $command[\'args\'][] = ' . calculer_liste($param, $idb, $boucles, $boucles[$idb]->id_parent) . ';'; |
| 2750 | - } |
|
| 2750 | + } |
|
| 2751 | 2751 | } |
| 2752 | 2752 | |
| 2753 | 2753 | /** |
@@ -2764,12 +2764,12 @@ discard block |
||
| 2764 | 2764 | * @param Critere $crit Paramètres du critère dans cette boucle |
| 2765 | 2765 | */ |
| 2766 | 2766 | function critere_DATA_liste_dist($idb, &$boucles, $crit) { |
| 2767 | - $boucle = &$boucles[$idb]; |
|
| 2768 | - $boucle->hash .= "\n\t" . '$command[\'liste\'] = array();' . "\n"; |
|
| 2769 | - foreach ($crit->param as $param) { |
|
| 2770 | - $boucle->hash .= "\t" . '$command[\'liste\'][] = ' . calculer_liste($param, $idb, $boucles, |
|
| 2771 | - $boucles[$idb]->id_parent) . ";\n"; |
|
| 2772 | - } |
|
| 2767 | + $boucle = &$boucles[$idb]; |
|
| 2768 | + $boucle->hash .= "\n\t" . '$command[\'liste\'] = array();' . "\n"; |
|
| 2769 | + foreach ($crit->param as $param) { |
|
| 2770 | + $boucle->hash .= "\t" . '$command[\'liste\'][] = ' . calculer_liste($param, $idb, $boucles, |
|
| 2771 | + $boucles[$idb]->id_parent) . ";\n"; |
|
| 2772 | + } |
|
| 2773 | 2773 | } |
| 2774 | 2774 | |
| 2775 | 2775 | /** |
@@ -2794,12 +2794,12 @@ discard block |
||
| 2794 | 2794 | * @param Critere $crit Paramètres du critère dans cette boucle |
| 2795 | 2795 | */ |
| 2796 | 2796 | function critere_DATA_enum_dist($idb, &$boucles, $crit) { |
| 2797 | - $boucle = &$boucles[$idb]; |
|
| 2798 | - $boucle->hash .= "\n\t" . '$command[\'enum\'] = array();' . "\n"; |
|
| 2799 | - foreach ($crit->param as $param) { |
|
| 2800 | - $boucle->hash .= "\t" . '$command[\'enum\'][] = ' . calculer_liste($param, $idb, $boucles, |
|
| 2801 | - $boucles[$idb]->id_parent) . ";\n"; |
|
| 2802 | - } |
|
| 2797 | + $boucle = &$boucles[$idb]; |
|
| 2798 | + $boucle->hash .= "\n\t" . '$command[\'enum\'] = array();' . "\n"; |
|
| 2799 | + foreach ($crit->param as $param) { |
|
| 2800 | + $boucle->hash .= "\t" . '$command[\'enum\'][] = ' . calculer_liste($param, $idb, $boucles, |
|
| 2801 | + $boucles[$idb]->id_parent) . ";\n"; |
|
| 2802 | + } |
|
| 2803 | 2803 | } |
| 2804 | 2804 | |
| 2805 | 2805 | /** |
@@ -2814,11 +2814,11 @@ discard block |
||
| 2814 | 2814 | * @param Critere $crit Paramètres du critère dans cette boucle |
| 2815 | 2815 | */ |
| 2816 | 2816 | function critere_DATA_datapath_dist($idb, &$boucles, $crit) { |
| 2817 | - $boucle = &$boucles[$idb]; |
|
| 2818 | - foreach ($crit->param as $param) { |
|
| 2819 | - $boucle->hash .= ' |
|
| 2817 | + $boucle = &$boucles[$idb]; |
|
| 2818 | + foreach ($crit->param as $param) { |
|
| 2819 | + $boucle->hash .= ' |
|
| 2820 | 2820 | $command[\'datapath\'][] = ' . calculer_liste($param, $idb, $boucles, $boucles[$idb]->id_parent) . ';'; |
| 2821 | - } |
|
| 2821 | + } |
|
| 2822 | 2822 | } |
| 2823 | 2823 | |
| 2824 | 2824 | |
@@ -2850,20 +2850,20 @@ discard block |
||
| 2850 | 2850 | * @param Critere $crit Paramètres du critère dans cette boucle |
| 2851 | 2851 | */ |
| 2852 | 2852 | function critere_si_dist($idb, &$boucles, $crit) { |
| 2853 | - $boucle = &$boucles[$idb]; |
|
| 2854 | - // il faut initialiser 1 fois le tableau a chaque appel de la boucle |
|
| 2855 | - // (par exemple lorsque notre boucle est appelee dans une autre boucle) |
|
| 2856 | - // mais ne pas l'initialiser n fois si il y a n criteres {si } dans la boucle ! |
|
| 2857 | - $boucle->hash .= "\n\tif (!isset(\$si_init)) { \$command['si'] = array(); \$si_init = true; }\n"; |
|
| 2858 | - if ($crit->param) { |
|
| 2859 | - foreach ($crit->param as $param) { |
|
| 2860 | - $boucle->hash .= "\t\$command['si'][] = " |
|
| 2861 | - . calculer_liste($param, $idb, $boucles, $boucles[$idb]->id_parent) . ";\n"; |
|
| 2862 | - } |
|
| 2863 | - // interdire {si 0} aussi ! |
|
| 2864 | - } else { |
|
| 2865 | - $boucle->hash .= '$command[\'si\'][] = 0;'; |
|
| 2866 | - } |
|
| 2853 | + $boucle = &$boucles[$idb]; |
|
| 2854 | + // il faut initialiser 1 fois le tableau a chaque appel de la boucle |
|
| 2855 | + // (par exemple lorsque notre boucle est appelee dans une autre boucle) |
|
| 2856 | + // mais ne pas l'initialiser n fois si il y a n criteres {si } dans la boucle ! |
|
| 2857 | + $boucle->hash .= "\n\tif (!isset(\$si_init)) { \$command['si'] = array(); \$si_init = true; }\n"; |
|
| 2858 | + if ($crit->param) { |
|
| 2859 | + foreach ($crit->param as $param) { |
|
| 2860 | + $boucle->hash .= "\t\$command['si'][] = " |
|
| 2861 | + . calculer_liste($param, $idb, $boucles, $boucles[$idb]->id_parent) . ";\n"; |
|
| 2862 | + } |
|
| 2863 | + // interdire {si 0} aussi ! |
|
| 2864 | + } else { |
|
| 2865 | + $boucle->hash .= '$command[\'si\'][] = 0;'; |
|
| 2866 | + } |
|
| 2867 | 2867 | } |
| 2868 | 2868 | |
| 2869 | 2869 | /** |
@@ -2879,8 +2879,8 @@ discard block |
||
| 2879 | 2879 | * @param Critere $crit Paramètres du critère dans cette boucle |
| 2880 | 2880 | */ |
| 2881 | 2881 | function critere_POUR_tableau_dist($idb, &$boucles, $crit) { |
| 2882 | - $boucle = &$boucles[$idb]; |
|
| 2883 | - $boucle->hash .= ' |
|
| 2882 | + $boucle = &$boucles[$idb]; |
|
| 2883 | + $boucle->hash .= ' |
|
| 2884 | 2884 | $command[\'source\'] = array(' . calculer_liste($crit->param[0], $idb, $boucles, $boucles[$idb]->id_parent) . '); |
| 2885 | 2885 | $command[\'sourcemode\'] = \'table\';'; |
| 2886 | 2886 | } |
@@ -2901,29 +2901,29 @@ discard block |
||
| 2901 | 2901 | */ |
| 2902 | 2902 | function critere_noeud_dist($idb, &$boucles, $crit) { |
| 2903 | 2903 | |
| 2904 | - $not = $crit->not; |
|
| 2905 | - $boucle = &$boucles[$idb]; |
|
| 2906 | - $primary = $boucle->primary; |
|
| 2904 | + $not = $crit->not; |
|
| 2905 | + $boucle = &$boucles[$idb]; |
|
| 2906 | + $primary = $boucle->primary; |
|
| 2907 | 2907 | |
| 2908 | - if (!$primary or strpos($primary, ',')) { |
|
| 2909 | - erreur_squelette(_T('zbug_doublon_sur_table_sans_cle_primaire'), $boucle); |
|
| 2908 | + if (!$primary or strpos($primary, ',')) { |
|
| 2909 | + erreur_squelette(_T('zbug_doublon_sur_table_sans_cle_primaire'), $boucle); |
|
| 2910 | 2910 | |
| 2911 | - return; |
|
| 2912 | - } |
|
| 2913 | - $table = $boucle->type_requete; |
|
| 2914 | - $table_sql = table_objet_sql(objet_type($table)); |
|
| 2911 | + return; |
|
| 2912 | + } |
|
| 2913 | + $table = $boucle->type_requete; |
|
| 2914 | + $table_sql = table_objet_sql(objet_type($table)); |
|
| 2915 | 2915 | |
| 2916 | - $id_parent = isset($GLOBALS['exceptions_des_tables'][$boucle->id_table]['id_parent']) ? |
|
| 2917 | - $GLOBALS['exceptions_des_tables'][$boucle->id_table]['id_parent'] : |
|
| 2918 | - 'id_parent'; |
|
| 2916 | + $id_parent = isset($GLOBALS['exceptions_des_tables'][$boucle->id_table]['id_parent']) ? |
|
| 2917 | + $GLOBALS['exceptions_des_tables'][$boucle->id_table]['id_parent'] : |
|
| 2918 | + 'id_parent'; |
|
| 2919 | 2919 | |
| 2920 | - $in = "IN"; |
|
| 2921 | - $where = array("'IN'", "'$boucle->id_table." . "$primary'", "'('.sql_get_select('$id_parent', '$table_sql').')'"); |
|
| 2922 | - if ($not) { |
|
| 2923 | - $where = array("'NOT'", $where); |
|
| 2924 | - } |
|
| 2920 | + $in = "IN"; |
|
| 2921 | + $where = array("'IN'", "'$boucle->id_table." . "$primary'", "'('.sql_get_select('$id_parent', '$table_sql').')'"); |
|
| 2922 | + if ($not) { |
|
| 2923 | + $where = array("'NOT'", $where); |
|
| 2924 | + } |
|
| 2925 | 2925 | |
| 2926 | - $boucle->where[] = $where; |
|
| 2926 | + $boucle->where[] = $where; |
|
| 2927 | 2927 | } |
| 2928 | 2928 | |
| 2929 | 2929 | /** |
@@ -2939,8 +2939,8 @@ discard block |
||
| 2939 | 2939 | * @param Critere $crit Paramètres du critère dans cette boucle |
| 2940 | 2940 | */ |
| 2941 | 2941 | function critere_feuille_dist($idb, &$boucles, $crit) { |
| 2942 | - $not = $crit->not; |
|
| 2943 | - $crit->not = $not ? false : true; |
|
| 2944 | - critere_noeud_dist($idb, $boucles, $crit); |
|
| 2945 | - $crit->not = $not; |
|
| 2942 | + $not = $crit->not; |
|
| 2943 | + $crit->not = $not ? false : true; |
|
| 2944 | + critere_noeud_dist($idb, $boucles, $crit); |
|
| 2945 | + $crit->not = $not; |
|
| 2946 | 2946 | } |
@@ -46,10 +46,9 @@ discard block |
||
| 46 | 46 | $not = $crit->not; |
| 47 | 47 | $boucle = &$boucles[$idb]; |
| 48 | 48 | $id_parent = isset($GLOBALS['exceptions_des_tables'][$boucle->id_table]['id_parent']) ? |
| 49 | - $GLOBALS['exceptions_des_tables'][$boucle->id_table]['id_parent'] : |
|
| 50 | - 'id_parent'; |
|
| 49 | + $GLOBALS['exceptions_des_tables'][$boucle->id_table]['id_parent'] : 'id_parent'; |
|
| 51 | 50 | |
| 52 | - $c = array("'='", "'$boucle->id_table." . "$id_parent'", 0); |
|
| 51 | + $c = array("'='", "'$boucle->id_table."."$id_parent'", 0); |
|
| 53 | 52 | $boucle->where[] = ($crit->not ? array("'NOT'", $c) : $c); |
| 54 | 53 | } |
| 55 | 54 | |
@@ -72,10 +71,10 @@ discard block |
||
| 72 | 71 | $id = $boucle->primary; |
| 73 | 72 | |
| 74 | 73 | if ($not or !$id) { |
| 75 | - return (array('zbug_critere_inconnu', array('critere' => $not . $crit->op))); |
|
| 74 | + return (array('zbug_critere_inconnu', array('critere' => $not.$crit->op))); |
|
| 76 | 75 | } |
| 77 | 76 | $arg = kwote(calculer_argument_precedent($idb, $id, $boucles)); |
| 78 | - $boucle->where[] = array("'!='", "'$boucle->id_table." . "$id'", $arg); |
|
| 77 | + $boucle->where[] = array("'!='", "'$boucle->id_table."."$id'", $arg); |
|
| 79 | 78 | } |
| 80 | 79 | |
| 81 | 80 | |
@@ -106,12 +105,12 @@ discard block |
||
| 106 | 105 | $not = ($crit->not ? '' : 'NOT'); |
| 107 | 106 | |
| 108 | 107 | // le doublon s'applique sur un type de boucle (article) |
| 109 | - $nom = "'" . $boucle->type_requete . "'"; |
|
| 108 | + $nom = "'".$boucle->type_requete."'"; |
|
| 110 | 109 | |
| 111 | 110 | // compléter le nom avec un nom précisé {doublons nom} |
| 112 | 111 | // on obtient $nom = "'article' . 'nom'" |
| 113 | 112 | if (isset($crit->param[0])) { |
| 114 | - $nom .= "." . calculer_liste($crit->param[0], $idb, $boucles, $boucles[$idb]->id_parent); |
|
| 113 | + $nom .= ".".calculer_liste($crit->param[0], $idb, $boucles, $boucles[$idb]->id_parent); |
|
| 115 | 114 | } |
| 116 | 115 | |
| 117 | 116 | // code qui déclarera l'index du stockage de nos doublons (pour éviter une notice PHP) |
@@ -123,13 +122,13 @@ discard block |
||
| 123 | 122 | // $doublons et son index, ici $nom |
| 124 | 123 | |
| 125 | 124 | // debut du code "sql_in('articles.id_article', " |
| 126 | - $debut_in = "sql_in('" . $boucle->id_table . '.' . $primary . "', "; |
|
| 125 | + $debut_in = "sql_in('".$boucle->id_table.'.'.$primary."', "; |
|
| 127 | 126 | // lecture des données du doublon "$doublons[$doublon_index[] = " |
| 128 | 127 | // Attention : boucle->doublons désigne une variable qu'on affecte |
| 129 | - $debut_doub = '$doublons[' . (!$not ? '' : ($boucle->doublons . "[]= ")); |
|
| 128 | + $debut_doub = '$doublons['.(!$not ? '' : ($boucle->doublons."[]= ")); |
|
| 130 | 129 | |
| 131 | 130 | // le debut complet du code des doublons |
| 132 | - $debut_doub = $debut_in . $debut_doub; |
|
| 131 | + $debut_doub = $debut_in.$debut_doub; |
|
| 133 | 132 | |
| 134 | 133 | // nom du doublon "('article' . 'nom')]" |
| 135 | 134 | $fin_doub = "($nom)]"; |
@@ -139,22 +138,22 @@ discard block |
||
| 139 | 138 | foreach ($boucle->where as $k => $w) { |
| 140 | 139 | if (strpos($w[0], $debut_doub) === 0) { |
| 141 | 140 | // fusionner le sql_in (du where) |
| 142 | - $boucle->where[$k][0] = $debut_doub . $fin_doub . ' . ' . substr($w[0], strlen($debut_in)); |
|
| 141 | + $boucle->where[$k][0] = $debut_doub.$fin_doub.' . '.substr($w[0], strlen($debut_in)); |
|
| 143 | 142 | // fusionner l'initialisation (du hash) pour faire plus joli |
| 144 | 143 | $x = strpos($boucle->hash, $init_comment); |
| 145 | 144 | $len = strlen($init_comment); |
| 146 | 145 | $boucle->hash = |
| 147 | - substr($boucle->hash, 0, $x + $len) . $init_code . substr($boucle->hash, $x + $len); |
|
| 146 | + substr($boucle->hash, 0, $x + $len).$init_code.substr($boucle->hash, $x + $len); |
|
| 148 | 147 | |
| 149 | 148 | return; |
| 150 | 149 | } |
| 151 | 150 | } |
| 152 | 151 | |
| 153 | 152 | // mettre l'ensemble dans un tableau pour que ce ne soit pas vu comme une constante |
| 154 | - $boucle->where[] = array($debut_doub . $fin_doub . ", '" . $not . "')"); |
|
| 153 | + $boucle->where[] = array($debut_doub.$fin_doub.", '".$not."')"); |
|
| 155 | 154 | |
| 156 | 155 | // déclarer le doublon s'il n'existe pas encore |
| 157 | - $boucle->hash .= $init_comment . $init_code; |
|
| 156 | + $boucle->hash .= $init_comment.$init_code; |
|
| 158 | 157 | |
| 159 | 158 | |
| 160 | 159 | # la ligne suivante avait l'intention d'eviter une collecte deja faite |
@@ -215,10 +214,10 @@ discard block |
||
| 215 | 214 | $un = $un[0]->texte; |
| 216 | 215 | $deux = $deux[0]->texte; |
| 217 | 216 | if ($deux) { |
| 218 | - $boucles[$idb]->limit = 'intval($Pile[0]["debut' . |
|
| 219 | - $un . |
|
| 220 | - '"]) . ",' . |
|
| 221 | - $deux . |
|
| 217 | + $boucles[$idb]->limit = 'intval($Pile[0]["debut'. |
|
| 218 | + $un. |
|
| 219 | + '"]) . ",'. |
|
| 220 | + $deux. |
|
| 222 | 221 | '"'; |
| 223 | 222 | } else { |
| 224 | 223 | calculer_critere_DEFAUT_dist($idb, $boucles, $crit); |
@@ -281,26 +280,26 @@ discard block |
||
| 281 | 280 | $type = calculer_liste(array($crit->param[1][0]), $idb, $boucles, $boucle->id_parent); |
| 282 | 281 | } |
| 283 | 282 | |
| 284 | - $debut = ($type[0] !== "'") ? "'debut'.$type" : ("'debut" . substr($type, 1)); |
|
| 283 | + $debut = ($type[0] !== "'") ? "'debut'.$type" : ("'debut".substr($type, 1)); |
|
| 285 | 284 | $boucle->modificateur['debut_nom'] = $type; |
| 286 | 285 | $partie = |
| 287 | 286 | // tester si le numero de page demande est de la forme '@yyy' |
| 288 | - 'isset($Pile[0][' . $debut . ']) ? $Pile[0][' . $debut . '] : _request(' . $debut . ");\n" |
|
| 287 | + 'isset($Pile[0]['.$debut.']) ? $Pile[0]['.$debut.'] : _request('.$debut.");\n" |
|
| 289 | 288 | . "\tif(substr(\$debut_boucle,0,1)=='@'){\n" |
| 290 | - . "\t\t" . '$debut_boucle = $Pile[0][' . $debut . '] = quete_debut_pagination(\'' . $boucle->primary . '\',$Pile[0][\'@' . $boucle->primary . '\'] = substr($debut_boucle,1),' . $pas . ',$iter);' . "\n" |
|
| 291 | - . "\t\t" . '$iter->seek(0);' . "\n" |
|
| 289 | + . "\t\t".'$debut_boucle = $Pile[0]['.$debut.'] = quete_debut_pagination(\''.$boucle->primary.'\',$Pile[0][\'@'.$boucle->primary.'\'] = substr($debut_boucle,1),'.$pas.',$iter);'."\n" |
|
| 290 | + . "\t\t".'$iter->seek(0);'."\n" |
|
| 292 | 291 | . "\t}\n" |
| 293 | - . "\t" . '$debut_boucle = intval($debut_boucle)'; |
|
| 292 | + . "\t".'$debut_boucle = intval($debut_boucle)'; |
|
| 294 | 293 | |
| 295 | 294 | $boucle->hash .= ' |
| 296 | - $command[\'pagination\'] = array((isset($Pile[0][' . $debut . ']) ? $Pile[0][' . $debut . '] : null), ' . $pas . ');'; |
|
| 295 | + $command[\'pagination\'] = array((isset($Pile[0][' . $debut.']) ? $Pile[0]['.$debut.'] : null), '.$pas.');'; |
|
| 297 | 296 | |
| 298 | 297 | $boucle->total_parties = $pas; |
| 299 | 298 | calculer_parties($boucles, $idb, $partie, 'p+'); |
| 300 | 299 | // ajouter la cle primaire dans le select pour pouvoir gerer la pagination referencee par @id |
| 301 | 300 | // sauf si pas de primaire, ou si primaire composee |
| 302 | 301 | // dans ce cas, on ne sait pas gerer une pagination indirecte |
| 303 | - $t = $boucle->id_table . '.' . $boucle->primary; |
|
| 302 | + $t = $boucle->id_table.'.'.$boucle->primary; |
|
| 304 | 303 | if ($boucle->primary |
| 305 | 304 | and !preg_match('/[,\s]/', $boucle->primary) |
| 306 | 305 | and !in_array($t, $boucle->select) |
@@ -346,24 +345,24 @@ discard block |
||
| 346 | 345 | $boucle->hash .= ' |
| 347 | 346 | // RECHERCHE' |
| 348 | 347 | . ($crit->cond ? ' |
| 349 | - if (!strlen(' . $quoi . ')){ |
|
| 348 | + if (!strlen(' . $quoi.')){ |
|
| 350 | 349 | list($rech_select, $rech_where) = array("0 as points",""); |
| 351 | - } else' : '') . ' |
|
| 350 | + } else' : '').' |
|
| 352 | 351 | { |
| 353 | 352 | $prepare_recherche = charger_fonction(\'prepare_recherche\', \'inc\'); |
| 354 | - list($rech_select, $rech_where) = $prepare_recherche(' . $quoi . ', "' . $boucle->id_table . '", "' . $crit->cond . '","' . $boucle->sql_serveur . '",' . $_modificateur . ',"' . $boucle->primary . '"); |
|
| 353 | + list($rech_select, $rech_where) = $prepare_recherche(' . $quoi.', "'.$boucle->id_table.'", "'.$crit->cond.'","'.$boucle->sql_serveur.'",'.$_modificateur.',"'.$boucle->primary.'"); |
|
| 355 | 354 | } |
| 356 | 355 | '; |
| 357 | 356 | |
| 358 | 357 | |
| 359 | - $t = $boucle->id_table . '.' . $boucle->primary; |
|
| 358 | + $t = $boucle->id_table.'.'.$boucle->primary; |
|
| 360 | 359 | if (!in_array($t, $boucles[$idb]->select)) { |
| 361 | 360 | $boucle->select[] = $t; |
| 362 | 361 | } # pour postgres, neuneu ici |
| 363 | 362 | // jointure uniquement sur le serveur principal |
| 364 | 363 | // (on ne peut joindre une table d'un serveur distant avec la table des resultats du serveur principal) |
| 365 | 364 | if (!$boucle->sql_serveur) { |
| 366 | - $boucle->join['resultats'] = array("'" . $boucle->id_table . "'", "'id'", "'" . $boucle->primary . "'"); |
|
| 365 | + $boucle->join['resultats'] = array("'".$boucle->id_table."'", "'id'", "'".$boucle->primary."'"); |
|
| 367 | 366 | $boucle->from['resultats'] = 'spip_resultats'; |
| 368 | 367 | } |
| 369 | 368 | $boucle->select[] = '$rech_select'; |
@@ -430,7 +429,7 @@ discard block |
||
| 430 | 429 | $c = |
| 431 | 430 | array( |
| 432 | 431 | "'OR'", |
| 433 | - array("'='", "'$table." . "id_trad'", "'$table.$prim'"), |
|
| 432 | + array("'='", "'$table."."id_trad'", "'$table.$prim'"), |
|
| 434 | 433 | array("'='", "'$table.id_trad'", "'0'") |
| 435 | 434 | ); |
| 436 | 435 | $boucle->where[] = ($crit->not ? array("'NOT'", $c) : $c); |
@@ -453,16 +452,15 @@ discard block |
||
| 453 | 452 | $boucle = &$boucles[$idb]; |
| 454 | 453 | $arg = kwote(calculer_argument_precedent($idb, 'id_parent', $boucles)); |
| 455 | 454 | $id_parent = isset($GLOBALS['exceptions_des_tables'][$boucle->id_table]['id_parent']) ? |
| 456 | - $GLOBALS['exceptions_des_tables'][$boucle->id_table]['id_parent'] : |
|
| 457 | - 'id_parent'; |
|
| 458 | - $mparent = $boucle->id_table . '.' . $id_parent; |
|
| 455 | + $GLOBALS['exceptions_des_tables'][$boucle->id_table]['id_parent'] : 'id_parent'; |
|
| 456 | + $mparent = $boucle->id_table.'.'.$id_parent; |
|
| 459 | 457 | |
| 460 | 458 | if ($boucle->type_requete == 'rubriques' or isset($GLOBALS['exceptions_des_tables'][$boucle->id_table]['id_parent'])) { |
| 461 | 459 | $boucle->where[] = array("'='", "'$mparent'", $arg); |
| 462 | 460 | |
| 463 | 461 | } // le cas FORUMS est gere dans le plugin forum, dans la fonction critere_FORUMS_meme_parent_dist() |
| 464 | 462 | else { |
| 465 | - return (array('zbug_critere_inconnu', array('critere' => $crit->op . ' ' . $boucle->type_requete))); |
|
| 463 | + return (array('zbug_critere_inconnu', array('critere' => $crit->op.' '.$boucle->type_requete))); |
|
| 466 | 464 | } |
| 467 | 465 | } |
| 468 | 466 | |
@@ -515,16 +513,15 @@ discard block |
||
| 515 | 513 | if (count(trouver_champs_decomposes($champ, $desc)) > 1) { |
| 516 | 514 | $decompose = decompose_champ_id_objet($champ); |
| 517 | 515 | $champ = array_shift($decompose); |
| 518 | - $boucle->where[] = array("'='", _q($cle . "." . reset($decompose)), '"' . sql_quote(end($decompose)) . '"'); |
|
| 516 | + $boucle->where[] = array("'='", _q($cle.".".reset($decompose)), '"'.sql_quote(end($decompose)).'"'); |
|
| 519 | 517 | } |
| 520 | 518 | } else { |
| 521 | 519 | $cle = $boucle->id_table; |
| 522 | 520 | } |
| 523 | 521 | |
| 524 | - $c = "sql_in('$cle" . ".$champ', calcul_branche_in($arg)" |
|
| 525 | - . ($not ? ", 'NOT'" : '') . ")"; |
|
| 526 | - $boucle->where[] = !$crit->cond ? $c : |
|
| 527 | - ("($arg ? $c : " . ($not ? "'0=1'" : "'1=1'") . ')'); |
|
| 522 | + $c = "sql_in('$cle".".$champ', calcul_branche_in($arg)" |
|
| 523 | + . ($not ? ", 'NOT'" : '').")"; |
|
| 524 | + $boucle->where[] = !$crit->cond ? $c : ("($arg ? $c : ".($not ? "'0=1'" : "'1=1'").')'); |
|
| 528 | 525 | } |
| 529 | 526 | |
| 530 | 527 | /** |
@@ -544,9 +541,9 @@ discard block |
||
| 544 | 541 | $not = ($crit->not ? 'NOT' : ''); |
| 545 | 542 | $serveur = $boucle->sql_serveur; |
| 546 | 543 | |
| 547 | - $c = "sql_in('" . |
|
| 548 | - $boucle->id_table . '.' . $boucle->primary |
|
| 549 | - . "', lister_objets_avec_logos('" . $boucle->primary . "'), '$not', '$serveur')"; |
|
| 544 | + $c = "sql_in('". |
|
| 545 | + $boucle->id_table.'.'.$boucle->primary |
|
| 546 | + . "', lister_objets_avec_logos('".$boucle->primary."'), '$not', '$serveur')"; |
|
| 550 | 547 | |
| 551 | 548 | $boucle->where[] = $c; |
| 552 | 549 | } |
@@ -578,7 +575,7 @@ discard block |
||
| 578 | 575 | $t = table_objet_sql($r[1]); |
| 579 | 576 | $t = array_search($t, $boucles[$idb]->from); |
| 580 | 577 | if ($t) { |
| 581 | - $t .= '.' . $r[2]; |
|
| 578 | + $t .= '.'.$r[2]; |
|
| 582 | 579 | } |
| 583 | 580 | } |
| 584 | 581 | } else { |
@@ -593,7 +590,7 @@ discard block |
||
| 593 | 590 | $boucles[$idb]->select[] = $t; |
| 594 | 591 | } |
| 595 | 592 | } else { |
| 596 | - return (array('zbug_critere_inconnu', array('critere' => $crit->op . ' ?'))); |
|
| 593 | + return (array('zbug_critere_inconnu', array('critere' => $crit->op.' ?'))); |
|
| 597 | 594 | } |
| 598 | 595 | } |
| 599 | 596 | |
@@ -643,26 +640,26 @@ discard block |
||
| 643 | 640 | (false !== $i = strpos($boucle->order[$n - 1], 'ASC')) |
| 644 | 641 | OR (false !== $i = strpos($boucle->order[$n - 1], 'DESC')) |
| 645 | 642 | ) { |
| 646 | - $boucle->order[$n - 1] = substr_replace($boucle->order[$n - 1], "' . " . $boucle->modificateur['collate'] . " . ' ", $i, 0); |
|
| 643 | + $boucle->order[$n - 1] = substr_replace($boucle->order[$n - 1], "' . ".$boucle->modificateur['collate']." . ' ", $i, 0); |
|
| 647 | 644 | } else { |
| 648 | - $boucle->order[$n - 1] .= " . " . $boucle->modificateur['collate']; |
|
| 645 | + $boucle->order[$n - 1] .= " . ".$boucle->modificateur['collate']; |
|
| 649 | 646 | } |
| 650 | 647 | } |
| 651 | 648 | } else { |
| 652 | - return (array('zbug_critere_inconnu', array('critere' => $crit->op . " " . count($boucles[$idb]->order)))); |
|
| 649 | + return (array('zbug_critere_inconnu', array('critere' => $crit->op." ".count($boucles[$idb]->order)))); |
|
| 653 | 650 | } |
| 654 | 651 | } |
| 655 | 652 | |
| 656 | 653 | // http://code.spip.net/@calculer_critere_arg_dynamique |
| 657 | 654 | function calculer_critere_arg_dynamique($idb, &$boucles, $crit, $suffix = '') { |
| 658 | 655 | $boucle = $boucles[$idb]; |
| 659 | - $alt = "('" . $boucle->id_table . '.\' . $x' . $suffix . ')'; |
|
| 660 | - $var = '$champs_' . $idb; |
|
| 656 | + $alt = "('".$boucle->id_table.'.\' . $x'.$suffix.')'; |
|
| 657 | + $var = '$champs_'.$idb; |
|
| 661 | 658 | $desc = (strpos($boucle->in, "static $var =") !== false); |
| 662 | 659 | if (!$desc) { |
| 663 | 660 | $desc = $boucle->show['field']; |
| 664 | 661 | $desc = implode(',', array_map('_q', array_keys($desc))); |
| 665 | - $boucles[$idb]->in .= "\n\tstatic $var = array(" . $desc . ");"; |
|
| 662 | + $boucles[$idb]->in .= "\n\tstatic $var = array(".$desc.");"; |
|
| 666 | 663 | } |
| 667 | 664 | if ($desc) { |
| 668 | 665 | $alt = "(in_array(\$x, $var) ? $alt :(\$x$suffix))"; |
@@ -737,7 +734,7 @@ discard block |
||
| 737 | 734 | $sens = " . ' DESC'"; |
| 738 | 735 | } |
| 739 | 736 | if (isset($boucle->modificateur['collate'])) { |
| 740 | - $collecte = ' . ' . $boucle->modificateur['collate']; |
|
| 737 | + $collecte = ' . '.$boucle->modificateur['collate']; |
|
| 741 | 738 | } |
| 742 | 739 | |
| 743 | 740 | // Pour chaque paramètre du critère |
@@ -759,14 +756,14 @@ discard block |
||
| 759 | 756 | if (preg_match(",^(\w+)[\s]+(.*)$,", $par, $m)) { |
| 760 | 757 | $expression = trim($m[1]); |
| 761 | 758 | $champ = trim($m[2]); |
| 762 | - if (function_exists($f = 'calculer_critere_par_expression_' . $expression)) { |
|
| 759 | + if (function_exists($f = 'calculer_critere_par_expression_'.$expression)) { |
|
| 763 | 760 | $order = $f($idb, $boucles, $crit, $tri, $champ); |
| 764 | 761 | } else { |
| 765 | - return array('zbug_critere_inconnu', array('critere' => $crit->op . " $par")); |
|
| 762 | + return array('zbug_critere_inconnu', array('critere' => $crit->op." $par")); |
|
| 766 | 763 | } |
| 767 | 764 | |
| 768 | 765 | // tris de la forme {par champ} ou {par FONCTION(champ)} |
| 769 | - } elseif (preg_match(",^" . CHAMP_SQL_PLUS_FONC . '$,is', $par, $match)) { |
|
| 766 | + } elseif (preg_match(",^".CHAMP_SQL_PLUS_FONC.'$,is', $par, $match)) { |
|
| 770 | 767 | // {par FONCTION(champ)} |
| 771 | 768 | if (count($match) > 2) { |
| 772 | 769 | $par = substr($match[2], 1, -1); |
@@ -776,7 +773,7 @@ discard block |
||
| 776 | 773 | if ($par == 'hasard') { |
| 777 | 774 | $order = calculer_critere_par_hasard($idb, $boucles, $crit); |
| 778 | 775 | } elseif ($par == 'date' and !empty($boucle->show['date'])) { |
| 779 | - $order = "'" . $boucle->id_table . "." . $boucle->show['date'] . "'"; |
|
| 776 | + $order = "'".$boucle->id_table.".".$boucle->show['date']."'"; |
|
| 780 | 777 | } else { |
| 781 | 778 | // cas général {par champ}, {par table.champ}, ... |
| 782 | 779 | $order = calculer_critere_par_champ($idb, $boucles, $crit, $par); |
@@ -785,7 +782,7 @@ discard block |
||
| 785 | 782 | |
| 786 | 783 | // on ne sait pas traiter… |
| 787 | 784 | else { |
| 788 | - return array('zbug_critere_inconnu', array('critere' => $crit->op . " $par")); |
|
| 785 | + return array('zbug_critere_inconnu', array('critere' => $crit->op." $par")); |
|
| 789 | 786 | } |
| 790 | 787 | |
| 791 | 788 | // En cas d'erreur de squelette retournée par une fonction |
@@ -805,14 +802,14 @@ discard block |
||
| 805 | 802 | |
| 806 | 803 | if ($fct) { |
| 807 | 804 | if (preg_match("/^\s*'(.*)'\s*$/", $order, $r)) { |
| 808 | - $order = "'$fct(" . $r[1] . ")'"; |
|
| 805 | + $order = "'$fct(".$r[1].")'"; |
|
| 809 | 806 | } else { |
| 810 | 807 | $order = "'$fct(' . $order . ')'"; |
| 811 | 808 | } |
| 812 | 809 | } |
| 813 | - $t = $order . $collecte . $sens; |
|
| 810 | + $t = $order.$collecte.$sens; |
|
| 814 | 811 | if (preg_match("/^(.*)'\s*\.\s*'([^']*')$/", $t, $r)) { |
| 815 | - $t = $r[1] . $r[2]; |
|
| 812 | + $t = $r[1].$r[2]; |
|
| 816 | 813 | } |
| 817 | 814 | |
| 818 | 815 | $boucle->order[] = $t; |
@@ -862,16 +859,16 @@ discard block |
||
| 862 | 859 | function calculer_critere_par_expression_num($idb, &$boucles, $crit, $tri, $champ) { |
| 863 | 860 | $_champ = calculer_critere_par_champ($idb, $boucles, $crit, $champ, true); |
| 864 | 861 | if (is_array($_champ)) { |
| 865 | - return array('zbug_critere_inconnu', array('critere' => $crit->op . " num $champ")); |
|
| 862 | + return array('zbug_critere_inconnu', array('critere' => $crit->op." num $champ")); |
|
| 866 | 863 | } |
| 867 | 864 | $boucle = &$boucles[$idb]; |
| 868 | - $texte = '0+' . $_champ; |
|
| 865 | + $texte = '0+'.$_champ; |
|
| 869 | 866 | $suite = calculer_liste($tri, $idb, $boucles, $boucle->id_parent); |
| 870 | 867 | if ($suite !== "''") { |
| 871 | - $texte = "\" . ((\$x = $suite) ? ('$texte' . \$x) : '0')" . " . \""; |
|
| 868 | + $texte = "\" . ((\$x = $suite) ? ('$texte' . \$x) : '0')"." . \""; |
|
| 872 | 869 | } |
| 873 | - $as = 'num' . ($boucle->order ? count($boucle->order) : ""); |
|
| 874 | - $boucle->select[] = $texte . " AS $as"; |
|
| 870 | + $as = 'num'.($boucle->order ? count($boucle->order) : ""); |
|
| 871 | + $boucle->select[] = $texte." AS $as"; |
|
| 875 | 872 | $order = "'$as'"; |
| 876 | 873 | return $order; |
| 877 | 874 | } |
@@ -896,16 +893,16 @@ discard block |
||
| 896 | 893 | function calculer_critere_par_expression_sinum($idb, &$boucles, $crit, $tri, $champ) { |
| 897 | 894 | $_champ = calculer_critere_par_champ($idb, $boucles, $crit, $champ, true); |
| 898 | 895 | if (is_array($_champ)) { |
| 899 | - return array('zbug_critere_inconnu', array('critere' => $crit->op . " sinum $champ")); |
|
| 896 | + return array('zbug_critere_inconnu', array('critere' => $crit->op." sinum $champ")); |
|
| 900 | 897 | } |
| 901 | 898 | $boucle = &$boucles[$idb]; |
| 902 | - $texte = '0+' . $_champ; |
|
| 899 | + $texte = '0+'.$_champ; |
|
| 903 | 900 | $suite = calculer_liste($tri, $idb, $boucles, $boucle->id_parent); |
| 904 | 901 | if ($suite !== "''") { |
| 905 | - $texte = "\" . ((\$x = $suite) ? ('$texte' . \$x) : '0')" . " . \""; |
|
| 902 | + $texte = "\" . ((\$x = $suite) ? ('$texte' . \$x) : '0')"." . \""; |
|
| 906 | 903 | } |
| 907 | - $as = 'sinum' . ($boucle->order ? count($boucle->order) : ""); |
|
| 908 | - $boucle->select[] = 'CASE (' . $texte . ') WHEN 0 THEN 1 ELSE 0 END AS ' . $as; |
|
| 904 | + $as = 'sinum'.($boucle->order ? count($boucle->order) : ""); |
|
| 905 | + $boucle->select[] = 'CASE ('.$texte.') WHEN 0 THEN 1 ELSE 0 END AS '.$as; |
|
| 909 | 906 | $order = "'$as'"; |
| 910 | 907 | return $order; |
| 911 | 908 | } |
@@ -929,10 +926,10 @@ discard block |
||
| 929 | 926 | function calculer_critere_par_expression_multi($idb, &$boucles, $crit, $tri, $champ) { |
| 930 | 927 | $_champ = calculer_critere_par_champ($idb, $boucles, $crit, $champ, true); |
| 931 | 928 | if (is_array($_champ)) { |
| 932 | - return array('zbug_critere_inconnu', array('critere' => $crit->op . " multi $champ")); |
|
| 929 | + return array('zbug_critere_inconnu', array('critere' => $crit->op." multi $champ")); |
|
| 933 | 930 | } |
| 934 | 931 | $boucle = &$boucles[$idb]; |
| 935 | - $boucle->select[] = "\".sql_multi('" . $_champ . "', \$GLOBALS['spip_lang']).\""; |
|
| 932 | + $boucle->select[] = "\".sql_multi('".$_champ."', \$GLOBALS['spip_lang']).\""; |
|
| 936 | 933 | $order = "'multi'"; |
| 937 | 934 | return $order; |
| 938 | 935 | } |
@@ -952,13 +949,13 @@ discard block |
||
| 952 | 949 | * @param bool $raw Retourne le champ pour le compilateur ("'alias.champ'") ou brut ('alias.champ') |
| 953 | 950 | * @return array|string |
| 954 | 951 | */ |
| 955 | -function calculer_critere_par_champ($idb, &$boucles, $crit, $par, $raw = false) { |
|
| 952 | +function calculer_critere_par_champ($idb, &$boucles, $crit, $par, $raw = false) { |
|
| 956 | 953 | $boucle = &$boucles[$idb]; |
| 957 | 954 | $desc = $boucle->show; |
| 958 | 955 | |
| 959 | 956 | // le champ existe dans la table, pas de souci (le plus commun) |
| 960 | 957 | if (isset($desc['field'][$par])) { |
| 961 | - $par = $boucle->id_table . "." . $par; |
|
| 958 | + $par = $boucle->id_table.".".$par; |
|
| 962 | 959 | } |
| 963 | 960 | // le champ est peut être une jointure |
| 964 | 961 | else { |
@@ -979,24 +976,24 @@ discard block |
||
| 979 | 976 | // Sinon on cherche le champ dans les tables possibles de jointures |
| 980 | 977 | // Si la table est déjà dans le from, on la réutilise. |
| 981 | 978 | if ($infos = chercher_champ_dans_tables($champ, $boucle->from, $boucle->sql_serveur, $table)) { |
| 982 | - $par = $infos['alias'] . "." . $champ; |
|
| 979 | + $par = $infos['alias'].".".$champ; |
|
| 983 | 980 | } elseif ( |
| 984 | 981 | $boucle->jointures_explicites |
| 985 | 982 | and $alias = trouver_jointure_champ($champ, $boucle, explode(' ', $boucle->jointures_explicites), false, $table) |
| 986 | 983 | ) { |
| 987 | - $par = $alias . "." . $champ; |
|
| 984 | + $par = $alias.".".$champ; |
|
| 988 | 985 | } elseif ($alias = trouver_jointure_champ($champ, $boucle, $boucle->jointures, false, $table)) { |
| 989 | - $par = $alias . "." . $champ; |
|
| 986 | + $par = $alias.".".$champ; |
|
| 990 | 987 | // en spécifiant directement l'alias {par L2.titre} (situation hasardeuse tout de même) |
| 991 | 988 | } elseif ( |
| 992 | 989 | $table_alias |
| 993 | 990 | and isset($boucle->from[$table_alias]) |
| 994 | 991 | and $infos = chercher_champ_dans_tables($champ, $boucle->from, $boucle->sql_serveur, $boucle->from[$table_alias]) |
| 995 | 992 | ) { |
| 996 | - $par = $infos['alias'] . "." . $champ; |
|
| 993 | + $par = $infos['alias'].".".$champ; |
|
| 997 | 994 | } elseif ($table) { |
| 998 | 995 | // On avait table + champ, mais on ne les a pas trouvés |
| 999 | - return array('zbug_critere_inconnu', array('critere' => $crit->op . " $par")); |
|
| 996 | + return array('zbug_critere_inconnu', array('critere' => $crit->op." $par")); |
|
| 1000 | 997 | } else { |
| 1001 | 998 | // Sinon tant pis, ca doit etre un champ synthetise (cf points) |
| 1002 | 999 | } |
@@ -1020,7 +1017,7 @@ discard block |
||
| 1020 | 1017 | if (!$t) { |
| 1021 | 1018 | $t = trouver_jointure_champ($champ, $boucle); |
| 1022 | 1019 | } |
| 1023 | - return !$t ? '' : ("'" . $t . '.' . $champ . "'"); |
|
| 1020 | + return !$t ? '' : ("'".$t.'.'.$champ."'"); |
|
| 1024 | 1021 | } |
| 1025 | 1022 | |
| 1026 | 1023 | /** |
@@ -1065,9 +1062,9 @@ discard block |
||
| 1065 | 1062 | $boucle->default_order[] = ' DESC'; |
| 1066 | 1063 | } |
| 1067 | 1064 | } else { |
| 1068 | - $t = $boucle->order[$n - 1] . " . $order"; |
|
| 1065 | + $t = $boucle->order[$n - 1]." . $order"; |
|
| 1069 | 1066 | if (preg_match("/^(.*)'\s*\.\s*'([^']*')$/", $t, $r)) { |
| 1070 | - $t = $r[1] . $r[2]; |
|
| 1067 | + $t = $r[1].$r[2]; |
|
| 1071 | 1068 | } |
| 1072 | 1069 | $boucle->order[$n - 1] = $t; |
| 1073 | 1070 | } |
@@ -1079,7 +1076,7 @@ discard block |
||
| 1079 | 1076 | $params = $crit->param; |
| 1080 | 1077 | |
| 1081 | 1078 | if (count($params) < 1) { |
| 1082 | - return array('zbug_critere_inconnu', array('critere' => $crit->op . " ?")); |
|
| 1079 | + return array('zbug_critere_inconnu', array('critere' => $crit->op." ?")); |
|
| 1083 | 1080 | } |
| 1084 | 1081 | |
| 1085 | 1082 | $boucle = &$boucles[$idb]; |
@@ -1100,7 +1097,7 @@ discard block |
||
| 1100 | 1097 | if ((count($date) == 1) and ($date[0]->type == 'texte')) { |
| 1101 | 1098 | $date = $date[0]->texte; |
| 1102 | 1099 | if (!isset($fields[$date])) { |
| 1103 | - return array('zbug_critere_inconnu', array('critere' => $crit->op . " " . $date)); |
|
| 1100 | + return array('zbug_critere_inconnu', array('critere' => $crit->op." ".$date)); |
|
| 1104 | 1101 | } |
| 1105 | 1102 | } else { |
| 1106 | 1103 | $a = calculer_liste($date, $idb, $boucles, $parent); |
@@ -1112,38 +1109,38 @@ discard block |
||
| 1112 | 1109 | $date = "'.(($cond)\n?\$a:\"$defaut\").'"; |
| 1113 | 1110 | } |
| 1114 | 1111 | $annee = $params ? array_shift($params) : ""; |
| 1115 | - $annee = "\n" . 'sprintf("%04d", ($x = ' . |
|
| 1116 | - calculer_liste($annee, $idb, $boucles, $parent) . |
|
| 1112 | + $annee = "\n".'sprintf("%04d", ($x = '. |
|
| 1113 | + calculer_liste($annee, $idb, $boucles, $parent). |
|
| 1117 | 1114 | ') ? $x : date("Y"))'; |
| 1118 | 1115 | |
| 1119 | 1116 | $mois = $params ? array_shift($params) : ""; |
| 1120 | - $mois = "\n" . 'sprintf("%02d", ($x = ' . |
|
| 1121 | - calculer_liste($mois, $idb, $boucles, $parent) . |
|
| 1117 | + $mois = "\n".'sprintf("%02d", ($x = '. |
|
| 1118 | + calculer_liste($mois, $idb, $boucles, $parent). |
|
| 1122 | 1119 | ') ? $x : date("m"))'; |
| 1123 | 1120 | |
| 1124 | 1121 | $jour = $params ? array_shift($params) : ""; |
| 1125 | - $jour = "\n" . 'sprintf("%02d", ($x = ' . |
|
| 1126 | - calculer_liste($jour, $idb, $boucles, $parent) . |
|
| 1122 | + $jour = "\n".'sprintf("%02d", ($x = '. |
|
| 1123 | + calculer_liste($jour, $idb, $boucles, $parent). |
|
| 1127 | 1124 | ') ? $x : date("d"))'; |
| 1128 | 1125 | |
| 1129 | 1126 | $annee2 = $params ? array_shift($params) : ""; |
| 1130 | - $annee2 = "\n" . 'sprintf("%04d", ($x = ' . |
|
| 1131 | - calculer_liste($annee2, $idb, $boucles, $parent) . |
|
| 1127 | + $annee2 = "\n".'sprintf("%04d", ($x = '. |
|
| 1128 | + calculer_liste($annee2, $idb, $boucles, $parent). |
|
| 1132 | 1129 | ') ? $x : date("Y"))'; |
| 1133 | 1130 | |
| 1134 | 1131 | $mois2 = $params ? array_shift($params) : ""; |
| 1135 | - $mois2 = "\n" . 'sprintf("%02d", ($x = ' . |
|
| 1136 | - calculer_liste($mois2, $idb, $boucles, $parent) . |
|
| 1132 | + $mois2 = "\n".'sprintf("%02d", ($x = '. |
|
| 1133 | + calculer_liste($mois2, $idb, $boucles, $parent). |
|
| 1137 | 1134 | ') ? $x : date("m"))'; |
| 1138 | 1135 | |
| 1139 | 1136 | $jour2 = $params ? array_shift($params) : ""; |
| 1140 | - $jour2 = "\n" . 'sprintf("%02d", ($x = ' . |
|
| 1141 | - calculer_liste($jour2, $idb, $boucles, $parent) . |
|
| 1137 | + $jour2 = "\n".'sprintf("%02d", ($x = '. |
|
| 1138 | + calculer_liste($jour2, $idb, $boucles, $parent). |
|
| 1142 | 1139 | ') ? $x : date("d"))'; |
| 1143 | 1140 | |
| 1144 | - $date = $boucle->id_table . ".$date"; |
|
| 1141 | + $date = $boucle->id_table.".$date"; |
|
| 1145 | 1142 | |
| 1146 | - $quote_end = ",'" . $boucle->sql_serveur . "','text'"; |
|
| 1143 | + $quote_end = ",'".$boucle->sql_serveur."','text'"; |
|
| 1147 | 1144 | if ($type == 'jour') { |
| 1148 | 1145 | $boucle->where[] = array( |
| 1149 | 1146 | "'='", |
@@ -1215,14 +1212,13 @@ discard block |
||
| 1215 | 1212 | list($a21, $a22) = calculer_critere_parties_aux($idb, $boucles, $a2); |
| 1216 | 1213 | |
| 1217 | 1214 | if (($op == ',') && (is_numeric($a11) && (is_numeric($a21)))) { |
| 1218 | - $boucle->limit = $a11 . ',' . $a21; |
|
| 1215 | + $boucle->limit = $a11.','.$a21; |
|
| 1219 | 1216 | } else { |
| 1220 | 1217 | // 3 dans {1/3}, {2,3} ou {1,n-3} |
| 1221 | 1218 | $boucle->total_parties = ($a21 != 'n') ? $a21 : $a22; |
| 1222 | 1219 | // 2 dans {2/3}, {2,5}, {n-2,1} |
| 1223 | 1220 | $partie = ($a11 != 'n') ? $a11 : $a12; |
| 1224 | - $mode = (($op == '/') ? '/' : |
|
| 1225 | - (($a11 == 'n') ? '-' : '+') . (($a21 == 'n') ? '-' : '+')); |
|
| 1221 | + $mode = (($op == '/') ? '/' : (($a11 == 'n') ? '-' : '+').(($a21 == 'n') ? '-' : '+')); |
|
| 1226 | 1222 | // cas simple {0,#ENV{truc}} compilons le en LIMIT : |
| 1227 | 1223 | if ($a11 !== 'n' and $a21 !== 'n' and $mode == "++" and $op == ',') { |
| 1228 | 1224 | $boucle->limit = |
@@ -1268,8 +1264,7 @@ discard block |
||
| 1268 | 1264 | // {1/3} |
| 1269 | 1265 | if ($op1 == '/') { |
| 1270 | 1266 | $pmoins1 = is_numeric($debut) ? ($debut - 1) : "($debut-1)"; |
| 1271 | - $totpos = is_numeric($total_parties) ? ($total_parties) : |
|
| 1272 | - "($total_parties ? $total_parties : 1)"; |
|
| 1267 | + $totpos = is_numeric($total_parties) ? ($total_parties) : "($total_parties ? $total_parties : 1)"; |
|
| 1273 | 1268 | $fin = "ceil(($nombre_boucle * $debut )/$totpos) - 1"; |
| 1274 | 1269 | $debut = !$pmoins1 ? 0 : "ceil(($nombre_boucle * $pmoins1)/$totpos);"; |
| 1275 | 1270 | } else { |
@@ -1280,15 +1275,13 @@ discard block |
||
| 1280 | 1275 | |
| 1281 | 1276 | // cas {x,n-1} |
| 1282 | 1277 | if ($op2 == '-') { |
| 1283 | - $fin = '$debut_boucle + ' . $nombre_boucle . ' - ' |
|
| 1284 | - . (is_numeric($total_parties) ? ($total_parties + 1) : |
|
| 1285 | - ($total_parties . ' - 1')); |
|
| 1278 | + $fin = '$debut_boucle + '.$nombre_boucle.' - ' |
|
| 1279 | + . (is_numeric($total_parties) ? ($total_parties + 1) : ($total_parties.' - 1')); |
|
| 1286 | 1280 | } else { |
| 1287 | 1281 | // {x,1} ou {pagination} |
| 1288 | 1282 | $fin = '$debut_boucle' |
| 1289 | 1283 | . (is_numeric($total_parties) ? |
| 1290 | - (($total_parties == 1) ? "" : (' + ' . ($total_parties - 1))) : |
|
| 1291 | - ('+' . $total_parties . ' - 1')); |
|
| 1284 | + (($total_parties == 1) ? "" : (' + '.($total_parties - 1))) : ('+'.$total_parties.' - 1')); |
|
| 1292 | 1285 | } |
| 1293 | 1286 | |
| 1294 | 1287 | // {pagination}, gerer le debut_xx=-1 pour tout voir |
@@ -1306,11 +1299,11 @@ discard block |
||
| 1306 | 1299 | // Utiliser min pour rabattre $fin_boucle sur total_boucle. |
| 1307 | 1300 | |
| 1308 | 1301 | $boucles[$id_boucle]->mode_partie = "\n\t" |
| 1309 | - . '$debut_boucle = ' . $debut . ";\n " |
|
| 1302 | + . '$debut_boucle = '.$debut.";\n " |
|
| 1310 | 1303 | . "\$debut_boucle = intval(\$debut_boucle);\n " |
| 1311 | - . '$fin_boucle = min(' . $fin . ", \$Numrows['$id_boucle']['total'] - 1);\n " |
|
| 1312 | - . '$Numrows[\'' . $id_boucle . "']['grand_total'] = \$Numrows['$id_boucle']['total'];\n " |
|
| 1313 | - . '$Numrows[\'' . $id_boucle . '\']["total"] = max(0,$fin_boucle - $debut_boucle + 1);' |
|
| 1304 | + . '$fin_boucle = min('.$fin.", \$Numrows['$id_boucle']['total'] - 1);\n " |
|
| 1305 | + . '$Numrows[\''.$id_boucle."']['grand_total'] = \$Numrows['$id_boucle']['total'];\n " |
|
| 1306 | + . '$Numrows[\''.$id_boucle.'\']["total"] = max(0,$fin_boucle - $debut_boucle + 1);' |
|
| 1314 | 1307 | . "\n\tif (\$debut_boucle>0" |
| 1315 | 1308 | . " AND \$debut_boucle < \$Numrows['$id_boucle']['grand_total']" |
| 1316 | 1309 | . " AND \$iter->seek(\$debut_boucle,'continue'))" |
@@ -1395,16 +1388,16 @@ discard block |
||
| 1395 | 1388 | // critere personnalise ? |
| 1396 | 1389 | if ( |
| 1397 | 1390 | (!$serveur or |
| 1398 | - ((!function_exists($f = "critere_" . $serveur . "_" . $table . "_" . $critere)) |
|
| 1399 | - and (!function_exists($f = $f . "_dist")) |
|
| 1400 | - and (!function_exists($f = "critere_" . $serveur . "_" . $critere)) |
|
| 1401 | - and (!function_exists($f = $f . "_dist")) |
|
| 1391 | + ((!function_exists($f = "critere_".$serveur."_".$table."_".$critere)) |
|
| 1392 | + and (!function_exists($f = $f."_dist")) |
|
| 1393 | + and (!function_exists($f = "critere_".$serveur."_".$critere)) |
|
| 1394 | + and (!function_exists($f = $f."_dist")) |
|
| 1402 | 1395 | ) |
| 1403 | 1396 | ) |
| 1404 | - and (!function_exists($f = "critere_" . $table . "_" . $critere)) |
|
| 1405 | - and (!function_exists($f = $f . "_dist")) |
|
| 1406 | - and (!function_exists($f = "critere_" . $critere)) |
|
| 1407 | - and (!function_exists($f = $f . "_dist")) |
|
| 1397 | + and (!function_exists($f = "critere_".$table."_".$critere)) |
|
| 1398 | + and (!function_exists($f = $f."_dist")) |
|
| 1399 | + and (!function_exists($f = "critere_".$critere)) |
|
| 1400 | + and (!function_exists($f = $f."_dist")) |
|
| 1408 | 1401 | ) { |
| 1409 | 1402 | // fonction critere standard |
| 1410 | 1403 | $f = $defaut; |
@@ -1437,9 +1430,9 @@ discard block |
||
| 1437 | 1430 | */ |
| 1438 | 1431 | function kwote($lisp, $serveur = '', $type = '') { |
| 1439 | 1432 | if (preg_match(_CODE_QUOTE, $lisp, $r)) { |
| 1440 | - return $r[1] . "\"" . sql_quote(str_replace(array("\\'", "\\\\"), array("'", "\\"), $r[2]), $serveur, $type) . "\""; |
|
| 1433 | + return $r[1]."\"".sql_quote(str_replace(array("\\'", "\\\\"), array("'", "\\"), $r[2]), $serveur, $type)."\""; |
|
| 1441 | 1434 | } else { |
| 1442 | - return "sql_quote($lisp, '$serveur', '" . str_replace("'", "\\'", $type) . "')"; |
|
| 1435 | + return "sql_quote($lisp, '$serveur', '".str_replace("'", "\\'", $type)."')"; |
|
| 1443 | 1436 | } |
| 1444 | 1437 | } |
| 1445 | 1438 | |
@@ -1461,7 +1454,7 @@ discard block |
||
| 1461 | 1454 | function critere_IN_dist($idb, &$boucles, $crit) { |
| 1462 | 1455 | $r = calculer_critere_infixe($idb, $boucles, $crit); |
| 1463 | 1456 | if (!$r) { |
| 1464 | - return (array('zbug_critere_inconnu', array('critere' => $crit->op . " ?"))); |
|
| 1457 | + return (array('zbug_critere_inconnu', array('critere' => $crit->op." ?"))); |
|
| 1465 | 1458 | } |
| 1466 | 1459 | list($arg, $op, $val, $col, $where_complement) = $r; |
| 1467 | 1460 | |
@@ -1488,8 +1481,8 @@ discard block |
||
| 1488 | 1481 | "'NOT'", |
| 1489 | 1482 | array( |
| 1490 | 1483 | "'IN'", |
| 1491 | - "'" . $boucles[$idb]->id_table . "." . $boucles[$idb]->primary . "'", |
|
| 1492 | - array("'SELF'", "'" . $boucles[$idb]->id_table . "." . $boucles[$idb]->primary . "'", $where) |
|
| 1484 | + "'".$boucles[$idb]->id_table.".".$boucles[$idb]->primary."'", |
|
| 1485 | + array("'SELF'", "'".$boucles[$idb]->id_table.".".$boucles[$idb]->primary."'", $where) |
|
| 1493 | 1486 | ) |
| 1494 | 1487 | ); |
| 1495 | 1488 | } |
@@ -1508,22 +1501,22 @@ discard block |
||
| 1508 | 1501 | $descr = $boucles[$idb]->descr; |
| 1509 | 1502 | $cpt = &$num[$descr['nom']][$descr['gram']][$idb]; |
| 1510 | 1503 | |
| 1511 | - $var = '$in' . $cpt++; |
|
| 1504 | + $var = '$in'.$cpt++; |
|
| 1512 | 1505 | $x = "\n\t$var = array();"; |
| 1513 | 1506 | foreach ($val as $k => $v) { |
| 1514 | 1507 | if (preg_match(",^(\n//.*\n)?'(.*)'$,", $v, $r)) { |
| 1515 | 1508 | // optimiser le traitement des constantes |
| 1516 | 1509 | if (is_numeric($r[2])) { |
| 1517 | - $x .= "\n\t$var" . "[]= $r[2];"; |
|
| 1510 | + $x .= "\n\t$var"."[]= $r[2];"; |
|
| 1518 | 1511 | } else { |
| 1519 | - $x .= "\n\t$var" . "[]= " . sql_quote($r[2]) . ";"; |
|
| 1512 | + $x .= "\n\t$var"."[]= ".sql_quote($r[2]).";"; |
|
| 1520 | 1513 | } |
| 1521 | 1514 | } else { |
| 1522 | 1515 | // Pour permettre de passer des tableaux de valeurs |
| 1523 | 1516 | // on repere l'utilisation brute de #ENV**{X}, |
| 1524 | 1517 | // c'est-a-dire sa traduction en ($PILE[0][X]). |
| 1525 | 1518 | // et on deballe mais en rajoutant l'anti XSS |
| 1526 | - $x .= "\n\tif (!(is_array(\$a = ($v))))\n\t\t$var" . "[]= \$a;\n\telse $var = array_merge($var, \$a);"; |
|
| 1519 | + $x .= "\n\tif (!(is_array(\$a = ($v))))\n\t\t$var"."[]= \$a;\n\telse $var = array_merge($var, \$a);"; |
|
| 1527 | 1520 | } |
| 1528 | 1521 | } |
| 1529 | 1522 | |
@@ -1537,7 +1530,7 @@ discard block |
||
| 1537 | 1530 | $boucles[$idb]->default_order[] = "((!\$zqv=sql_quote($var) OR \$zqv===\"''\") ? 0 : ('FIELD($arg,' . \$zqv . ')'))"; |
| 1538 | 1531 | } |
| 1539 | 1532 | |
| 1540 | - return "sql_in('$arg', $var" . ($crit2 == 'NOT' ? ",'NOT'" : "") . ")"; |
|
| 1533 | + return "sql_in('$arg', $var".($crit2 == 'NOT' ? ",'NOT'" : "").")"; |
|
| 1541 | 1534 | } |
| 1542 | 1535 | |
| 1543 | 1536 | /** |
@@ -1610,7 +1603,7 @@ discard block |
||
| 1610 | 1603 | $champs = array_diff($champs, array_keys($boucle->modificateur['criteres'])); |
| 1611 | 1604 | } |
| 1612 | 1605 | // nous aider en mode debug. |
| 1613 | - $boucle->debug[] = "id_ : " . implode(', ', $champs); |
|
| 1606 | + $boucle->debug[] = "id_ : ".implode(', ', $champs); |
|
| 1614 | 1607 | $boucle->modificateur['id_'] = $champs; |
| 1615 | 1608 | |
| 1616 | 1609 | // créer un critère {id_xxx?} de chaque champ retenu |
@@ -1651,7 +1644,7 @@ discard block |
||
| 1651 | 1644 | // Les champs id_xx de la table demandée |
| 1652 | 1645 | $champs = array_filter( |
| 1653 | 1646 | array_keys($desc['field']), |
| 1654 | - function($champ){ |
|
| 1647 | + function($champ) { |
|
| 1655 | 1648 | return |
| 1656 | 1649 | strpos($champ, 'id_') === 0 |
| 1657 | 1650 | or (in_array($champ, array('objet'))); |
@@ -1866,8 +1859,8 @@ discard block |
||
| 1866 | 1859 | "'NOT'", |
| 1867 | 1860 | array( |
| 1868 | 1861 | "'IN'", |
| 1869 | - "'" . $boucles[$idb]->id_table . "." . $boucles[$idb]->primary . "'", |
|
| 1870 | - array("'SELF'", "'" . $boucles[$idb]->id_table . "." . $boucles[$idb]->primary . "'", $where) |
|
| 1862 | + "'".$boucles[$idb]->id_table.".".$boucles[$idb]->primary."'", |
|
| 1863 | + array("'SELF'", "'".$boucles[$idb]->id_table.".".$boucles[$idb]->primary."'", $where) |
|
| 1871 | 1864 | ) |
| 1872 | 1865 | ); |
| 1873 | 1866 | } |
@@ -1878,7 +1871,7 @@ discard block |
||
| 1878 | 1871 | if ($crit->cond) { |
| 1879 | 1872 | $pred = calculer_argument_precedent($idb, $col, $boucles); |
| 1880 | 1873 | if ($col == "date" or $col == "date_redac") { |
| 1881 | - if ($pred == "\$Pile[0]['" . $col . "']") { |
|
| 1874 | + if ($pred == "\$Pile[0]['".$col."']") { |
|
| 1882 | 1875 | $pred = "(\$Pile[0]['{$col}_default']?'':$pred)"; |
| 1883 | 1876 | } |
| 1884 | 1877 | } |
@@ -2039,7 +2032,7 @@ discard block |
||
| 2039 | 2032 | // defaire le quote des int et les passer dans sql_quote avec le bon type de champ si on le connait, int sinon |
| 2040 | 2033 | // prendre en compte le debug ou la valeur arrive avec un commentaire PHP en debut |
| 2041 | 2034 | if (preg_match(",^\\A(\s*//.*?$\s*)?\"'(-?\d+)'\"\\z,ms", $val[0], $r)) { |
| 2042 | - $val[0] = $r[1] . '"' . sql_quote($r[2], $boucle->sql_serveur, $type_cast_quote) . '"'; |
|
| 2035 | + $val[0] = $r[1].'"'.sql_quote($r[2], $boucle->sql_serveur, $type_cast_quote).'"'; |
|
| 2043 | 2036 | } |
| 2044 | 2037 | // sinon expliciter les |
| 2045 | 2038 | // sql_quote(truc) en sql_quote(truc,'',type) |
@@ -2050,22 +2043,22 @@ discard block |
||
| 2050 | 2043 | // sql_quote(truc,'','varchar') |
| 2051 | 2044 | elseif (preg_match('/\Asql_quote[(](.*?)(,[^)]*?)?(,[^)]*(?:\(\d+\)[^)]*)?)?[)]\s*\z/ms', $val[0], $r) |
| 2052 | 2045 | // si pas deja un type |
| 2053 | - and (!isset($r[3]) or !$r[3] or !trim($r[3],", '")) |
|
| 2046 | + and (!isset($r[3]) or !$r[3] or !trim($r[3], ", '")) |
|
| 2054 | 2047 | ) { |
| 2055 | 2048 | $r = $r[1] |
| 2056 | 2049 | . ((isset($r[2]) and $r[2]) ? $r[2] : ",''") |
| 2057 | - . ",'" . addslashes($type_cast_quote) . "'"; |
|
| 2050 | + . ",'".addslashes($type_cast_quote)."'"; |
|
| 2058 | 2051 | $val[0] = "sql_quote($r)"; |
| 2059 | 2052 | } |
| 2060 | - elseif(strpos($val[0], '@@defaultcast@@') !== false |
|
| 2053 | + elseif (strpos($val[0], '@@defaultcast@@') !== false |
|
| 2061 | 2054 | and preg_match("/'@@defaultcast@@'\s*\)\s*\z/ms", $val[0], $r)) { |
| 2062 | - $val[0] = substr($val[0], 0, -strlen($r[0])) . "'" . addslashes($type_cast_quote) . "')"; |
|
| 2055 | + $val[0] = substr($val[0], 0, -strlen($r[0]))."'".addslashes($type_cast_quote)."')"; |
|
| 2063 | 2056 | } |
| 2064 | 2057 | } |
| 2065 | 2058 | |
| 2066 | - if(strpos($val[0], '@@defaultcast@@') !== false |
|
| 2059 | + if (strpos($val[0], '@@defaultcast@@') !== false |
|
| 2067 | 2060 | and preg_match("/'@@defaultcast@@'\s*\)\s*\z/ms", $val[0], $r)) { |
| 2068 | - $val[0] = substr($val[0], 0, -strlen($r[0])) . "'char')"; |
|
| 2061 | + $val[0] = substr($val[0], 0, -strlen($r[0]))."'char')"; |
|
| 2069 | 2062 | } |
| 2070 | 2063 | |
| 2071 | 2064 | // Indicateur pour permettre aux fonctionx boucle_X de modifier |
@@ -2090,7 +2083,7 @@ discard block |
||
| 2090 | 2083 | // inserer le nom de la table SQL devant le nom du champ |
| 2091 | 2084 | if ($table) { |
| 2092 | 2085 | if ($col[0] == "`") { |
| 2093 | - $arg = "$table." . substr($col, 1, -1); |
|
| 2086 | + $arg = "$table.".substr($col, 1, -1); |
|
| 2094 | 2087 | } else { |
| 2095 | 2088 | $arg = "$table.$col"; |
| 2096 | 2089 | } |
@@ -2224,9 +2217,9 @@ discard block |
||
| 2224 | 2217 | **/ |
| 2225 | 2218 | function primary_doublee($decompose, $table) { |
| 2226 | 2219 | $e1 = reset($decompose); |
| 2227 | - $e2 = "sql_quote('" . end($decompose) . "')"; |
|
| 2220 | + $e2 = "sql_quote('".end($decompose)."')"; |
|
| 2228 | 2221 | |
| 2229 | - return array("'='", "'$table." . $e1 . "'", $e2); |
|
| 2222 | + return array("'='", "'$table.".$e1."'", $e2); |
|
| 2230 | 2223 | } |
| 2231 | 2224 | |
| 2232 | 2225 | /** |
@@ -2264,7 +2257,7 @@ discard block |
||
| 2264 | 2257 | if ($checkarrivee |
| 2265 | 2258 | and is_string($checkarrivee) |
| 2266 | 2259 | and $a = table_objet($checkarrivee) |
| 2267 | - and in_array($a . '_liens', $joints) |
|
| 2260 | + and in_array($a.'_liens', $joints) |
|
| 2268 | 2261 | ) { |
| 2269 | 2262 | if ($res = calculer_lien_externe_init($boucle, $joints, $col, $desc, $cond, $checkarrivee)) { |
| 2270 | 2263 | return $res; |
@@ -2284,12 +2277,12 @@ discard block |
||
| 2284 | 2277 | // la table est déjà dans le FROM, on vérifie si le champ est utilisé. |
| 2285 | 2278 | $joindre = false; |
| 2286 | 2279 | foreach ($cols as $col) { |
| 2287 | - $c = '/\b' . $t . ".$col" . '\b/'; |
|
| 2280 | + $c = '/\b'.$t.".$col".'\b/'; |
|
| 2288 | 2281 | if (trouver_champ($c, $boucle->where)) { |
| 2289 | 2282 | $joindre = true; |
| 2290 | 2283 | } else { |
| 2291 | 2284 | // mais ca peut etre dans le FIELD pour le Having |
| 2292 | - $c = "/FIELD.$t" . ".$col,/"; |
|
| 2285 | + $c = "/FIELD.$t".".$col,/"; |
|
| 2293 | 2286 | if (trouver_champ($c, $boucle->select)) { |
| 2294 | 2287 | $joindre = true; |
| 2295 | 2288 | } |
@@ -2336,7 +2329,7 @@ discard block |
||
| 2336 | 2329 | $primary_arrivee = id_table_objet($checkarrivee); |
| 2337 | 2330 | |
| 2338 | 2331 | // [FIXME] $checkarrivee peut-il arriver avec false ???? |
| 2339 | - $intermediaire = trouver_champ_exterieur($primary_arrivee, $joints, $boucle, $checkarrivee . "_liens"); |
|
| 2332 | + $intermediaire = trouver_champ_exterieur($primary_arrivee, $joints, $boucle, $checkarrivee."_liens"); |
|
| 2340 | 2333 | $arrivee = trouver_champ_exterieur($col, $joints, $boucle, $checkarrivee); |
| 2341 | 2334 | |
| 2342 | 2335 | if (!$intermediaire or !$arrivee) { |
@@ -2434,7 +2427,7 @@ discard block |
||
| 2434 | 2427 | } elseif ($crit->cond and ($col == "date" or $col == "date_redac")) { |
| 2435 | 2428 | // un critere conditionnel sur date est traite a part |
| 2436 | 2429 | // car la date est mise d'office par SPIP, |
| 2437 | - $defaut = "(\$Pile[0]['{$col}_default']?'':\$Pile[0]['" . $col . "'])"; |
|
| 2430 | + $defaut = "(\$Pile[0]['{$col}_default']?'':\$Pile[0]['".$col."'])"; |
|
| 2438 | 2431 | } |
| 2439 | 2432 | |
| 2440 | 2433 | $val = calculer_argument_precedent($idb, $val, $boucles, $defaut); |
@@ -2465,7 +2458,7 @@ discard block |
||
| 2465 | 2458 | and (($p == "'") or ($p == '"')) |
| 2466 | 2459 | and $params[0][1]->type == 'champ' |
| 2467 | 2460 | ) { |
| 2468 | - $val[] = "$p\\$p#" . $params[0][1]->nom_champ . "\\$p$p"; |
|
| 2461 | + $val[] = "$p\\$p#".$params[0][1]->nom_champ."\\$p$p"; |
|
| 2469 | 2462 | } else { |
| 2470 | 2463 | foreach ((($op != 'IN') ? $params : calculer_vieux_in($params)) as $p) { |
| 2471 | 2464 | $a = calculer_liste($p, $idb, $boucles, $parent); |
@@ -2481,7 +2474,7 @@ discard block |
||
| 2481 | 2474 | $fct = $args_sql = ''; |
| 2482 | 2475 | // fonction SQL ? |
| 2483 | 2476 | // chercher FONCTION(champ) tel que CONCAT(titre,descriptif) |
| 2484 | - if (preg_match('/^(.*)' . SQL_ARGS . '$/', $col, $m)) { |
|
| 2477 | + if (preg_match('/^(.*)'.SQL_ARGS.'$/', $col, $m)) { |
|
| 2485 | 2478 | $fct = $m[1]; |
| 2486 | 2479 | preg_match('/^\(([^,]*)(.*)\)$/', $m[2], $a); |
| 2487 | 2480 | $col = $a[1]; |
@@ -2571,7 +2564,7 @@ discard block |
||
| 2571 | 2564 | # si oui choisir ce champ, sinon choisir xxxx |
| 2572 | 2565 | |
| 2573 | 2566 | if (isset($table['field']["date$suite"])) { |
| 2574 | - $date_orig = 'date' . $suite; |
|
| 2567 | + $date_orig = 'date'.$suite; |
|
| 2575 | 2568 | } else { |
| 2576 | 2569 | $date_orig = substr($suite, 1); |
| 2577 | 2570 | } |
@@ -2582,12 +2575,12 @@ discard block |
||
| 2582 | 2575 | } |
| 2583 | 2576 | } |
| 2584 | 2577 | |
| 2585 | - $date_compare = "\"' . normaliser_date(" . |
|
| 2586 | - calculer_argument_precedent($idb, $pred, $boucles) . |
|
| 2578 | + $date_compare = "\"' . normaliser_date(". |
|
| 2579 | + calculer_argument_precedent($idb, $pred, $boucles). |
|
| 2587 | 2580 | ") . '\""; |
| 2588 | 2581 | |
| 2589 | 2582 | $col_vraie = $date_orig; |
| 2590 | - $date_orig = $boucle->id_table . '.' . $date_orig; |
|
| 2583 | + $date_orig = $boucle->id_table.'.'.$date_orig; |
|
| 2591 | 2584 | |
| 2592 | 2585 | switch ($col) { |
| 2593 | 2586 | case 'date': |
@@ -2607,26 +2600,26 @@ discard block |
||
| 2607 | 2600 | break; |
| 2608 | 2601 | case 'age': |
| 2609 | 2602 | $col = calculer_param_date("NOW()", $date_orig); |
| 2610 | - $col_vraie = "";// comparer a un int (par defaut) |
|
| 2603 | + $col_vraie = ""; // comparer a un int (par defaut) |
|
| 2611 | 2604 | break; |
| 2612 | 2605 | case 'age_relatif': |
| 2613 | 2606 | $col = calculer_param_date($date_compare, $date_orig); |
| 2614 | - $col_vraie = "";// comparer a un int (par defaut) |
|
| 2607 | + $col_vraie = ""; // comparer a un int (par defaut) |
|
| 2615 | 2608 | break; |
| 2616 | 2609 | case 'jour_relatif': |
| 2617 | - $col = "(TO_DAYS(" . $date_compare . ")-TO_DAYS(" . $date_orig . "))"; |
|
| 2618 | - $col_vraie = "";// comparer a un int (par defaut) |
|
| 2610 | + $col = "(TO_DAYS(".$date_compare.")-TO_DAYS(".$date_orig."))"; |
|
| 2611 | + $col_vraie = ""; // comparer a un int (par defaut) |
|
| 2619 | 2612 | break; |
| 2620 | 2613 | case 'mois_relatif': |
| 2621 | - $col = "MONTH(" . $date_compare . ")-MONTH(" . |
|
| 2622 | - $date_orig . ")+12*(YEAR(" . $date_compare . |
|
| 2623 | - ")-YEAR(" . $date_orig . "))"; |
|
| 2624 | - $col_vraie = "";// comparer a un int (par defaut) |
|
| 2614 | + $col = "MONTH(".$date_compare.")-MONTH(". |
|
| 2615 | + $date_orig.")+12*(YEAR(".$date_compare. |
|
| 2616 | + ")-YEAR(".$date_orig."))"; |
|
| 2617 | + $col_vraie = ""; // comparer a un int (par defaut) |
|
| 2625 | 2618 | break; |
| 2626 | 2619 | case 'annee_relatif': |
| 2627 | - $col = "YEAR(" . $date_compare . ")-YEAR(" . |
|
| 2628 | - $date_orig . ")"; |
|
| 2629 | - $col_vraie = "";// comparer a un int (par defaut) |
|
| 2620 | + $col = "YEAR(".$date_compare.")-YEAR(". |
|
| 2621 | + $date_orig.")"; |
|
| 2622 | + $col_vraie = ""; // comparer a un int (par defaut) |
|
| 2630 | 2623 | break; |
| 2631 | 2624 | } |
| 2632 | 2625 | |
@@ -2685,10 +2678,10 @@ discard block |
||
| 2685 | 2678 | } |
| 2686 | 2679 | |
| 2687 | 2680 | $boucle->hash .= ' |
| 2688 | - $command[\'sourcemode\'] = ' . array_shift($args) . ";\n"; |
|
| 2681 | + $command[\'sourcemode\'] = ' . array_shift($args).";\n"; |
|
| 2689 | 2682 | |
| 2690 | 2683 | $boucle->hash .= ' |
| 2691 | - $command[\'source\'] = array(' . join(', ', $args) . ");\n"; |
|
| 2684 | + $command[\'source\'] = array(' . join(', ', $args).");\n"; |
|
| 2692 | 2685 | } |
| 2693 | 2686 | |
| 2694 | 2687 | |
@@ -2706,8 +2699,8 @@ discard block |
||
| 2706 | 2699 | function critere_DATA_datasource_dist($idb, &$boucles, $crit) { |
| 2707 | 2700 | $boucle = &$boucles[$idb]; |
| 2708 | 2701 | $boucle->hash .= ' |
| 2709 | - $command[\'source\'] = array(' . calculer_liste($crit->param[0], $idb, $boucles, $boucles[$idb]->id_parent) . '); |
|
| 2710 | - $command[\'sourcemode\'] = ' . calculer_liste($crit->param[1], $idb, $boucles, $boucles[$idb]->id_parent) . ';'; |
|
| 2702 | + $command[\'source\'] = array(' . calculer_liste($crit->param[0], $idb, $boucles, $boucles[$idb]->id_parent).'); |
|
| 2703 | + $command[\'sourcemode\'] = ' . calculer_liste($crit->param[1], $idb, $boucles, $boucles[$idb]->id_parent).';'; |
|
| 2711 | 2704 | } |
| 2712 | 2705 | |
| 2713 | 2706 | |
@@ -2727,7 +2720,7 @@ discard block |
||
| 2727 | 2720 | function critere_DATA_datacache_dist($idb, &$boucles, $crit) { |
| 2728 | 2721 | $boucle = &$boucles[$idb]; |
| 2729 | 2722 | $boucle->hash .= ' |
| 2730 | - $command[\'datacache\'] = ' . calculer_liste($crit->param[0], $idb, $boucles, $boucles[$idb]->id_parent) . ';'; |
|
| 2723 | + $command[\'datacache\'] = ' . calculer_liste($crit->param[0], $idb, $boucles, $boucles[$idb]->id_parent).';'; |
|
| 2731 | 2724 | } |
| 2732 | 2725 | |
| 2733 | 2726 | |
@@ -2746,7 +2739,7 @@ discard block |
||
| 2746 | 2739 | $boucle->hash .= '$command[\'args\']=array();'; |
| 2747 | 2740 | foreach ($crit->param as $param) { |
| 2748 | 2741 | $boucle->hash .= ' |
| 2749 | - $command[\'args\'][] = ' . calculer_liste($param, $idb, $boucles, $boucles[$idb]->id_parent) . ';'; |
|
| 2742 | + $command[\'args\'][] = ' . calculer_liste($param, $idb, $boucles, $boucles[$idb]->id_parent).';'; |
|
| 2750 | 2743 | } |
| 2751 | 2744 | } |
| 2752 | 2745 | |
@@ -2765,10 +2758,10 @@ discard block |
||
| 2765 | 2758 | */ |
| 2766 | 2759 | function critere_DATA_liste_dist($idb, &$boucles, $crit) { |
| 2767 | 2760 | $boucle = &$boucles[$idb]; |
| 2768 | - $boucle->hash .= "\n\t" . '$command[\'liste\'] = array();' . "\n"; |
|
| 2761 | + $boucle->hash .= "\n\t".'$command[\'liste\'] = array();'."\n"; |
|
| 2769 | 2762 | foreach ($crit->param as $param) { |
| 2770 | - $boucle->hash .= "\t" . '$command[\'liste\'][] = ' . calculer_liste($param, $idb, $boucles, |
|
| 2771 | - $boucles[$idb]->id_parent) . ";\n"; |
|
| 2763 | + $boucle->hash .= "\t".'$command[\'liste\'][] = '.calculer_liste($param, $idb, $boucles, |
|
| 2764 | + $boucles[$idb]->id_parent).";\n"; |
|
| 2772 | 2765 | } |
| 2773 | 2766 | } |
| 2774 | 2767 | |
@@ -2795,10 +2788,10 @@ discard block |
||
| 2795 | 2788 | */ |
| 2796 | 2789 | function critere_DATA_enum_dist($idb, &$boucles, $crit) { |
| 2797 | 2790 | $boucle = &$boucles[$idb]; |
| 2798 | - $boucle->hash .= "\n\t" . '$command[\'enum\'] = array();' . "\n"; |
|
| 2791 | + $boucle->hash .= "\n\t".'$command[\'enum\'] = array();'."\n"; |
|
| 2799 | 2792 | foreach ($crit->param as $param) { |
| 2800 | - $boucle->hash .= "\t" . '$command[\'enum\'][] = ' . calculer_liste($param, $idb, $boucles, |
|
| 2801 | - $boucles[$idb]->id_parent) . ";\n"; |
|
| 2793 | + $boucle->hash .= "\t".'$command[\'enum\'][] = '.calculer_liste($param, $idb, $boucles, |
|
| 2794 | + $boucles[$idb]->id_parent).";\n"; |
|
| 2802 | 2795 | } |
| 2803 | 2796 | } |
| 2804 | 2797 | |
@@ -2817,7 +2810,7 @@ discard block |
||
| 2817 | 2810 | $boucle = &$boucles[$idb]; |
| 2818 | 2811 | foreach ($crit->param as $param) { |
| 2819 | 2812 | $boucle->hash .= ' |
| 2820 | - $command[\'datapath\'][] = ' . calculer_liste($param, $idb, $boucles, $boucles[$idb]->id_parent) . ';'; |
|
| 2813 | + $command[\'datapath\'][] = ' . calculer_liste($param, $idb, $boucles, $boucles[$idb]->id_parent).';'; |
|
| 2821 | 2814 | } |
| 2822 | 2815 | } |
| 2823 | 2816 | |
@@ -2858,7 +2851,7 @@ discard block |
||
| 2858 | 2851 | if ($crit->param) { |
| 2859 | 2852 | foreach ($crit->param as $param) { |
| 2860 | 2853 | $boucle->hash .= "\t\$command['si'][] = " |
| 2861 | - . calculer_liste($param, $idb, $boucles, $boucles[$idb]->id_parent) . ";\n"; |
|
| 2854 | + . calculer_liste($param, $idb, $boucles, $boucles[$idb]->id_parent).";\n"; |
|
| 2862 | 2855 | } |
| 2863 | 2856 | // interdire {si 0} aussi ! |
| 2864 | 2857 | } else { |
@@ -2881,7 +2874,7 @@ discard block |
||
| 2881 | 2874 | function critere_POUR_tableau_dist($idb, &$boucles, $crit) { |
| 2882 | 2875 | $boucle = &$boucles[$idb]; |
| 2883 | 2876 | $boucle->hash .= ' |
| 2884 | - $command[\'source\'] = array(' . calculer_liste($crit->param[0], $idb, $boucles, $boucles[$idb]->id_parent) . '); |
|
| 2877 | + $command[\'source\'] = array(' . calculer_liste($crit->param[0], $idb, $boucles, $boucles[$idb]->id_parent).'); |
|
| 2885 | 2878 | $command[\'sourcemode\'] = \'table\';'; |
| 2886 | 2879 | } |
| 2887 | 2880 | |
@@ -2914,11 +2907,10 @@ discard block |
||
| 2914 | 2907 | $table_sql = table_objet_sql(objet_type($table)); |
| 2915 | 2908 | |
| 2916 | 2909 | $id_parent = isset($GLOBALS['exceptions_des_tables'][$boucle->id_table]['id_parent']) ? |
| 2917 | - $GLOBALS['exceptions_des_tables'][$boucle->id_table]['id_parent'] : |
|
| 2918 | - 'id_parent'; |
|
| 2910 | + $GLOBALS['exceptions_des_tables'][$boucle->id_table]['id_parent'] : 'id_parent'; |
|
| 2919 | 2911 | |
| 2920 | 2912 | $in = "IN"; |
| 2921 | - $where = array("'IN'", "'$boucle->id_table." . "$primary'", "'('.sql_get_select('$id_parent', '$table_sql').')'"); |
|
| 2913 | + $where = array("'IN'", "'$boucle->id_table."."$primary'", "'('.sql_get_select('$id_parent', '$table_sql').')'"); |
|
| 2922 | 2914 | if ($not) { |
| 2923 | 2915 | $where = array("'NOT'", $where); |
| 2924 | 2916 | } |
@@ -18,7 +18,7 @@ discard block |
||
| 18 | 18 | **/ |
| 19 | 19 | |
| 20 | 20 | if (!defined('_ECRIRE_INC_VERSION')) { |
| 21 | - return; |
|
| 21 | + return; |
|
| 22 | 22 | } |
| 23 | 23 | |
| 24 | 24 | /** Repérer un code ne calculant rien, meme avec commentaire */ |
@@ -60,91 +60,91 @@ discard block |
||
| 60 | 60 | |
| 61 | 61 | // http://code.spip.net/@argumenter_inclure |
| 62 | 62 | function argumenter_inclure( |
| 63 | - $params, |
|
| 64 | - $rejet_filtres, |
|
| 65 | - $p, |
|
| 66 | - &$boucles, |
|
| 67 | - $id_boucle, |
|
| 68 | - $echap = true, |
|
| 69 | - $lang = '', |
|
| 70 | - $fond1 = false |
|
| 63 | + $params, |
|
| 64 | + $rejet_filtres, |
|
| 65 | + $p, |
|
| 66 | + &$boucles, |
|
| 67 | + $id_boucle, |
|
| 68 | + $echap = true, |
|
| 69 | + $lang = '', |
|
| 70 | + $fond1 = false |
|
| 71 | 71 | ) { |
| 72 | - $l = array(); |
|
| 73 | - $erreur_p_i_i = ''; |
|
| 74 | - if (!is_array($params)) { |
|
| 75 | - return $l; |
|
| 76 | - } |
|
| 77 | - foreach ($params as $k => $couple) { |
|
| 78 | - // la liste d'arguments d'inclusion peut se terminer par un filtre |
|
| 79 | - $filtre = array_shift($couple); |
|
| 80 | - if ($filtre) { |
|
| 81 | - break; |
|
| 82 | - } |
|
| 83 | - foreach ($couple as $n => $val) { |
|
| 84 | - $var = $val[0]; |
|
| 85 | - if ($var->type != 'texte') { |
|
| 86 | - if ($n or $k or $fond1) { |
|
| 87 | - $erreur_p_i_i = array( |
|
| 88 | - 'zbug_parametres_inclus_incorrects', |
|
| 89 | - array('param' => $var->nom_champ) |
|
| 90 | - ); |
|
| 91 | - erreur_squelette($erreur_p_i_i, $p); |
|
| 92 | - break; |
|
| 93 | - } else { |
|
| 94 | - $l[1] = calculer_liste($val, $p->descr, $boucles, $id_boucle); |
|
| 95 | - } |
|
| 96 | - } else { |
|
| 97 | - preg_match(",^([^=]*)(=?)(.*)$,m", $var->texte, $m); |
|
| 98 | - $m = array_pad($m, 3, null); |
|
| 99 | - $var = $m[1]; |
|
| 100 | - $auto = false;; |
|
| 101 | - if ($m[2]) { |
|
| 102 | - $v = $m[3]; |
|
| 103 | - if (preg_match(',^[\'"](.*)[\'"]$,', $v, $m)) { |
|
| 104 | - $v = $m[1]; |
|
| 105 | - } |
|
| 106 | - $val[0] = new Texte; |
|
| 107 | - $val[0]->texte = $v; |
|
| 108 | - } elseif ($k or $n or $fond1) { |
|
| 109 | - $auto = true; |
|
| 110 | - } else { |
|
| 111 | - $var = 1; |
|
| 112 | - } |
|
| 113 | - |
|
| 114 | - if ($var == 'lang') { |
|
| 115 | - $lang = !$auto |
|
| 116 | - ? calculer_liste($val, $p->descr, $boucles, $id_boucle) |
|
| 117 | - : '$GLOBALS["spip_lang"]'; |
|
| 118 | - } else { |
|
| 119 | - $val = $auto |
|
| 120 | - ? index_pile($id_boucle, $var, $boucles) |
|
| 121 | - : calculer_liste($val, $p->descr, $boucles, $id_boucle); |
|
| 122 | - if ($var !== 1) { |
|
| 123 | - $val = ($echap ? "\'$var\' => ' . argumenter_squelette(" : "'$var' => ") |
|
| 124 | - . $val . ($echap ? ") . '" : " "); |
|
| 125 | - } else { |
|
| 126 | - $val = $echap ? "'.$val.'" : $val; |
|
| 127 | - } |
|
| 128 | - $l[$var] = $val; |
|
| 129 | - } |
|
| 130 | - } |
|
| 131 | - } |
|
| 132 | - } |
|
| 133 | - if ($erreur_p_i_i) { |
|
| 134 | - return false; |
|
| 135 | - } |
|
| 136 | - // Cas particulier de la langue : si {lang=xx} est definie, on |
|
| 137 | - // la passe, sinon on passe la langue courante au moment du calcul |
|
| 138 | - // sauf si on n'en veut pas |
|
| 139 | - if ($lang === false) { |
|
| 140 | - return $l; |
|
| 141 | - } |
|
| 142 | - if (!$lang) { |
|
| 143 | - $lang = '$GLOBALS["spip_lang"]'; |
|
| 144 | - } |
|
| 145 | - $l['lang'] = ($echap ? "\'lang\' => ' . argumenter_squelette(" : "'lang' => ") . $lang . ($echap ? ") . '" : " "); |
|
| 146 | - |
|
| 147 | - return $l; |
|
| 72 | + $l = array(); |
|
| 73 | + $erreur_p_i_i = ''; |
|
| 74 | + if (!is_array($params)) { |
|
| 75 | + return $l; |
|
| 76 | + } |
|
| 77 | + foreach ($params as $k => $couple) { |
|
| 78 | + // la liste d'arguments d'inclusion peut se terminer par un filtre |
|
| 79 | + $filtre = array_shift($couple); |
|
| 80 | + if ($filtre) { |
|
| 81 | + break; |
|
| 82 | + } |
|
| 83 | + foreach ($couple as $n => $val) { |
|
| 84 | + $var = $val[0]; |
|
| 85 | + if ($var->type != 'texte') { |
|
| 86 | + if ($n or $k or $fond1) { |
|
| 87 | + $erreur_p_i_i = array( |
|
| 88 | + 'zbug_parametres_inclus_incorrects', |
|
| 89 | + array('param' => $var->nom_champ) |
|
| 90 | + ); |
|
| 91 | + erreur_squelette($erreur_p_i_i, $p); |
|
| 92 | + break; |
|
| 93 | + } else { |
|
| 94 | + $l[1] = calculer_liste($val, $p->descr, $boucles, $id_boucle); |
|
| 95 | + } |
|
| 96 | + } else { |
|
| 97 | + preg_match(",^([^=]*)(=?)(.*)$,m", $var->texte, $m); |
|
| 98 | + $m = array_pad($m, 3, null); |
|
| 99 | + $var = $m[1]; |
|
| 100 | + $auto = false;; |
|
| 101 | + if ($m[2]) { |
|
| 102 | + $v = $m[3]; |
|
| 103 | + if (preg_match(',^[\'"](.*)[\'"]$,', $v, $m)) { |
|
| 104 | + $v = $m[1]; |
|
| 105 | + } |
|
| 106 | + $val[0] = new Texte; |
|
| 107 | + $val[0]->texte = $v; |
|
| 108 | + } elseif ($k or $n or $fond1) { |
|
| 109 | + $auto = true; |
|
| 110 | + } else { |
|
| 111 | + $var = 1; |
|
| 112 | + } |
|
| 113 | + |
|
| 114 | + if ($var == 'lang') { |
|
| 115 | + $lang = !$auto |
|
| 116 | + ? calculer_liste($val, $p->descr, $boucles, $id_boucle) |
|
| 117 | + : '$GLOBALS["spip_lang"]'; |
|
| 118 | + } else { |
|
| 119 | + $val = $auto |
|
| 120 | + ? index_pile($id_boucle, $var, $boucles) |
|
| 121 | + : calculer_liste($val, $p->descr, $boucles, $id_boucle); |
|
| 122 | + if ($var !== 1) { |
|
| 123 | + $val = ($echap ? "\'$var\' => ' . argumenter_squelette(" : "'$var' => ") |
|
| 124 | + . $val . ($echap ? ") . '" : " "); |
|
| 125 | + } else { |
|
| 126 | + $val = $echap ? "'.$val.'" : $val; |
|
| 127 | + } |
|
| 128 | + $l[$var] = $val; |
|
| 129 | + } |
|
| 130 | + } |
|
| 131 | + } |
|
| 132 | + } |
|
| 133 | + if ($erreur_p_i_i) { |
|
| 134 | + return false; |
|
| 135 | + } |
|
| 136 | + // Cas particulier de la langue : si {lang=xx} est definie, on |
|
| 137 | + // la passe, sinon on passe la langue courante au moment du calcul |
|
| 138 | + // sauf si on n'en veut pas |
|
| 139 | + if ($lang === false) { |
|
| 140 | + return $l; |
|
| 141 | + } |
|
| 142 | + if (!$lang) { |
|
| 143 | + $lang = '$GLOBALS["spip_lang"]'; |
|
| 144 | + } |
|
| 145 | + $l['lang'] = ($echap ? "\'lang\' => ' . argumenter_squelette(" : "'lang' => ") . $lang . ($echap ? ") . '" : " "); |
|
| 146 | + |
|
| 147 | + return $l; |
|
| 148 | 148 | } |
| 149 | 149 | |
| 150 | 150 | /** |
@@ -168,71 +168,71 @@ discard block |
||
| 168 | 168 | **/ |
| 169 | 169 | function calculer_inclure($p, &$boucles, $id_boucle) { |
| 170 | 170 | |
| 171 | - $_contexte = argumenter_inclure($p->param, false, $p, $boucles, $id_boucle, true, '', true); |
|
| 172 | - if (is_string($p->texte)) { |
|
| 173 | - $fichier = $p->texte; |
|
| 174 | - $code = "\"".str_replace('"','\"',$fichier)."\""; |
|
| 175 | - |
|
| 176 | - } else { |
|
| 177 | - $code = calculer_liste($p->texte, $p->descr, $boucles, $id_boucle); |
|
| 178 | - if ($code and preg_match("/^'([^']*)'/s", $code, $r)) { |
|
| 179 | - $fichier = $r[1]; |
|
| 180 | - } else { |
|
| 181 | - $fichier = ''; |
|
| 182 | - } |
|
| 183 | - } |
|
| 184 | - if (!$code or $code === '""') { |
|
| 185 | - $erreur_p_i_i = array( |
|
| 186 | - 'zbug_parametres_inclus_incorrects', |
|
| 187 | - array('param' => $code) |
|
| 188 | - ); |
|
| 189 | - erreur_squelette($erreur_p_i_i, $p); |
|
| 190 | - |
|
| 191 | - return false; |
|
| 192 | - } |
|
| 193 | - $compil = texte_script(memoriser_contexte_compil($p)); |
|
| 194 | - |
|
| 195 | - if (is_array($_contexte)) { |
|
| 196 | - // Critere d'inclusion {env} (et {self} pour compatibilite ascendante) |
|
| 197 | - if ($env = (isset($_contexte['env']) || isset($_contexte['self']))) { |
|
| 198 | - unset($_contexte['env']); |
|
| 199 | - } |
|
| 200 | - |
|
| 201 | - // noter les doublons dans l'appel a public.php |
|
| 202 | - if (isset($_contexte['doublons'])) { |
|
| 203 | - $_contexte['doublons'] = "\\'doublons\\' => '.var_export(\$doublons,true).'"; |
|
| 204 | - } |
|
| 205 | - |
|
| 206 | - if ($ajax = isset($_contexte['ajax'])) { |
|
| 207 | - $ajax = preg_replace(",=>(.*)$,ims", '=> ($v=(\\1))?$v:true', $_contexte['ajax']); |
|
| 208 | - unset($_contexte['ajax']); |
|
| 209 | - } |
|
| 210 | - |
|
| 211 | - $_contexte = join(",\n\t", $_contexte); |
|
| 212 | - } else { |
|
| 213 | - return false; |
|
| 214 | - } // j'aurais voulu toucher le fond ... |
|
| 215 | - |
|
| 216 | - $contexte = 'array(' . $_contexte . ')'; |
|
| 217 | - |
|
| 218 | - if ($env) { |
|
| 219 | - $contexte = "array_merge('.var_export(\$Pile[0],1).',$contexte)"; |
|
| 220 | - } |
|
| 221 | - |
|
| 222 | - // s'il y a une extension .php, ce n'est pas un squelette |
|
| 223 | - if ($fichier and preg_match('/^.+[.]php$/s', $fichier)) { |
|
| 224 | - $code = sandbox_composer_inclure_php($fichier, $p, $contexte); |
|
| 225 | - } else { |
|
| 226 | - $_options[] = "\"compil\"=>array($compil)"; |
|
| 227 | - if ($ajax) { |
|
| 228 | - $_options[] = $ajax; |
|
| 229 | - } |
|
| 230 | - $code = " ' . argumenter_squelette($code) . '"; |
|
| 231 | - $code = "echo " . sprintf(CODE_RECUPERER_FOND, $code, $contexte, implode(',', $_options), |
|
| 232 | - "_request(\"connect\")") . ';'; |
|
| 233 | - } |
|
| 234 | - |
|
| 235 | - return "\n'<'.'" . "?php " . $code . "\n?'." . "'>'"; |
|
| 171 | + $_contexte = argumenter_inclure($p->param, false, $p, $boucles, $id_boucle, true, '', true); |
|
| 172 | + if (is_string($p->texte)) { |
|
| 173 | + $fichier = $p->texte; |
|
| 174 | + $code = "\"".str_replace('"','\"',$fichier)."\""; |
|
| 175 | + |
|
| 176 | + } else { |
|
| 177 | + $code = calculer_liste($p->texte, $p->descr, $boucles, $id_boucle); |
|
| 178 | + if ($code and preg_match("/^'([^']*)'/s", $code, $r)) { |
|
| 179 | + $fichier = $r[1]; |
|
| 180 | + } else { |
|
| 181 | + $fichier = ''; |
|
| 182 | + } |
|
| 183 | + } |
|
| 184 | + if (!$code or $code === '""') { |
|
| 185 | + $erreur_p_i_i = array( |
|
| 186 | + 'zbug_parametres_inclus_incorrects', |
|
| 187 | + array('param' => $code) |
|
| 188 | + ); |
|
| 189 | + erreur_squelette($erreur_p_i_i, $p); |
|
| 190 | + |
|
| 191 | + return false; |
|
| 192 | + } |
|
| 193 | + $compil = texte_script(memoriser_contexte_compil($p)); |
|
| 194 | + |
|
| 195 | + if (is_array($_contexte)) { |
|
| 196 | + // Critere d'inclusion {env} (et {self} pour compatibilite ascendante) |
|
| 197 | + if ($env = (isset($_contexte['env']) || isset($_contexte['self']))) { |
|
| 198 | + unset($_contexte['env']); |
|
| 199 | + } |
|
| 200 | + |
|
| 201 | + // noter les doublons dans l'appel a public.php |
|
| 202 | + if (isset($_contexte['doublons'])) { |
|
| 203 | + $_contexte['doublons'] = "\\'doublons\\' => '.var_export(\$doublons,true).'"; |
|
| 204 | + } |
|
| 205 | + |
|
| 206 | + if ($ajax = isset($_contexte['ajax'])) { |
|
| 207 | + $ajax = preg_replace(",=>(.*)$,ims", '=> ($v=(\\1))?$v:true', $_contexte['ajax']); |
|
| 208 | + unset($_contexte['ajax']); |
|
| 209 | + } |
|
| 210 | + |
|
| 211 | + $_contexte = join(",\n\t", $_contexte); |
|
| 212 | + } else { |
|
| 213 | + return false; |
|
| 214 | + } // j'aurais voulu toucher le fond ... |
|
| 215 | + |
|
| 216 | + $contexte = 'array(' . $_contexte . ')'; |
|
| 217 | + |
|
| 218 | + if ($env) { |
|
| 219 | + $contexte = "array_merge('.var_export(\$Pile[0],1).',$contexte)"; |
|
| 220 | + } |
|
| 221 | + |
|
| 222 | + // s'il y a une extension .php, ce n'est pas un squelette |
|
| 223 | + if ($fichier and preg_match('/^.+[.]php$/s', $fichier)) { |
|
| 224 | + $code = sandbox_composer_inclure_php($fichier, $p, $contexte); |
|
| 225 | + } else { |
|
| 226 | + $_options[] = "\"compil\"=>array($compil)"; |
|
| 227 | + if ($ajax) { |
|
| 228 | + $_options[] = $ajax; |
|
| 229 | + } |
|
| 230 | + $code = " ' . argumenter_squelette($code) . '"; |
|
| 231 | + $code = "echo " . sprintf(CODE_RECUPERER_FOND, $code, $contexte, implode(',', $_options), |
|
| 232 | + "_request(\"connect\")") . ';'; |
|
| 233 | + } |
|
| 234 | + |
|
| 235 | + return "\n'<'.'" . "?php " . $code . "\n?'." . "'>'"; |
|
| 236 | 236 | } |
| 237 | 237 | |
| 238 | 238 | |
@@ -250,7 +250,7 @@ discard block |
||
| 250 | 250 | * true pour ne tester que le cas publie et ignorer l'eventuel var_mode=preview de la page |
| 251 | 251 | */ |
| 252 | 252 | function instituer_boucle(&$boucle, $echapper = true, $ignore_previsu = false) { |
| 253 | - /* |
|
| 253 | + /* |
|
| 254 | 254 | $show['statut'][] = array( |
| 255 | 255 | 'champ'=>'statut', // champ de la table sur lequel porte le filtrage par le statut |
| 256 | 256 | 'publie'=>'publie', // valeur ou liste de valeurs, qui definissent l'objet comme publie. |
@@ -274,71 +274,71 @@ discard block |
||
| 274 | 274 | champstatut est alors le champ statut sur la tablen |
| 275 | 275 | dans les jointures, clen peut etre un tableau pour une jointure complexe : array('id_objet','id_article','objet','article') |
| 276 | 276 | */ |
| 277 | - $id_table = $boucle->id_table; |
|
| 278 | - $show = $boucle->show; |
|
| 279 | - if (isset($show['statut']) and $show['statut']) { |
|
| 280 | - foreach ($show['statut'] as $k => $s) { |
|
| 281 | - // Restreindre aux elements publies si pas de {statut} ou autre dans les criteres |
|
| 282 | - $filtrer = true; |
|
| 283 | - if (isset($s['exception'])) { |
|
| 284 | - foreach (is_array($s['exception']) ? $s['exception'] : array($s['exception']) as $m) { |
|
| 285 | - if (isset($boucle->modificateur[$m]) or isset($boucle->modificateur['criteres'][$m])) { |
|
| 286 | - $filtrer = false; |
|
| 287 | - break; |
|
| 288 | - } |
|
| 289 | - } |
|
| 290 | - } |
|
| 291 | - |
|
| 292 | - if ($filtrer) { |
|
| 293 | - if (is_array($s['champ'])) { |
|
| 294 | - $statut = preg_replace(',\W,', '', array_pop($s['champ'])); // securite |
|
| 295 | - $jointures = array(); |
|
| 296 | - // indiquer la description de chaque table dans le tableau de jointures, |
|
| 297 | - // ce qui permet d'eviter certains GROUP BY inutiles. |
|
| 298 | - $trouver_table = charger_fonction('trouver_table', 'base'); |
|
| 299 | - foreach ($s['champ'] as $j) { |
|
| 300 | - $id = reset($j); |
|
| 301 | - $def = $trouver_table($id); |
|
| 302 | - $jointures[] = array('', array($id, $def), end($j)); |
|
| 303 | - } |
|
| 304 | - $jointures[0][0] = $id_table; |
|
| 305 | - if (!array_search($id, $boucle->from)) { |
|
| 306 | - include_spip('public/jointures'); |
|
| 307 | - fabrique_jointures($boucle, $jointures, true, $boucle->show, $id_table, '', $echapper); |
|
| 308 | - } |
|
| 309 | - // trouver l'alias de la table d'arrivee qui porte le statut |
|
| 310 | - $id = array_search($id, $boucle->from); |
|
| 311 | - } else { |
|
| 312 | - $id = $id_table; |
|
| 313 | - $statut = preg_replace(',\W,', '', $s['champ']); // securite |
|
| 314 | - } |
|
| 315 | - $mstatut = $id . '.' . $statut; |
|
| 316 | - |
|
| 317 | - $arg_ignore_previsu = ($ignore_previsu ? ",true" : ''); |
|
| 318 | - include_spip('public/quete'); |
|
| 319 | - if (isset($s['post_date']) and $s['post_date'] |
|
| 320 | - and $GLOBALS['meta']["post_dates"] == 'non' |
|
| 321 | - ) { |
|
| 322 | - $date = $id . '.' . preg_replace(',\W,', '', $s['post_date']); // securite |
|
| 323 | - array_unshift($boucle->where, |
|
| 324 | - $echapper ? |
|
| 325 | - "\nquete_condition_postdates('$date'," . _q($boucle->sql_serveur) . "$arg_ignore_previsu)" |
|
| 326 | - : |
|
| 327 | - quete_condition_postdates($date, $boucle->sql_serveur, $ignore_previsu) |
|
| 328 | - ); |
|
| 329 | - } |
|
| 330 | - array_unshift($boucle->where, |
|
| 331 | - $echapper ? |
|
| 332 | - "\nquete_condition_statut('$mstatut'," |
|
| 333 | - . _q($s['previsu']) . "," |
|
| 334 | - . _q($s['publie']) . "," |
|
| 335 | - . _q($boucle->sql_serveur) . "$arg_ignore_previsu)" |
|
| 336 | - : |
|
| 337 | - quete_condition_statut($mstatut, $s['previsu'], $s['publie'], $boucle->sql_serveur, $ignore_previsu) |
|
| 338 | - ); |
|
| 339 | - } |
|
| 340 | - } |
|
| 341 | - } |
|
| 277 | + $id_table = $boucle->id_table; |
|
| 278 | + $show = $boucle->show; |
|
| 279 | + if (isset($show['statut']) and $show['statut']) { |
|
| 280 | + foreach ($show['statut'] as $k => $s) { |
|
| 281 | + // Restreindre aux elements publies si pas de {statut} ou autre dans les criteres |
|
| 282 | + $filtrer = true; |
|
| 283 | + if (isset($s['exception'])) { |
|
| 284 | + foreach (is_array($s['exception']) ? $s['exception'] : array($s['exception']) as $m) { |
|
| 285 | + if (isset($boucle->modificateur[$m]) or isset($boucle->modificateur['criteres'][$m])) { |
|
| 286 | + $filtrer = false; |
|
| 287 | + break; |
|
| 288 | + } |
|
| 289 | + } |
|
| 290 | + } |
|
| 291 | + |
|
| 292 | + if ($filtrer) { |
|
| 293 | + if (is_array($s['champ'])) { |
|
| 294 | + $statut = preg_replace(',\W,', '', array_pop($s['champ'])); // securite |
|
| 295 | + $jointures = array(); |
|
| 296 | + // indiquer la description de chaque table dans le tableau de jointures, |
|
| 297 | + // ce qui permet d'eviter certains GROUP BY inutiles. |
|
| 298 | + $trouver_table = charger_fonction('trouver_table', 'base'); |
|
| 299 | + foreach ($s['champ'] as $j) { |
|
| 300 | + $id = reset($j); |
|
| 301 | + $def = $trouver_table($id); |
|
| 302 | + $jointures[] = array('', array($id, $def), end($j)); |
|
| 303 | + } |
|
| 304 | + $jointures[0][0] = $id_table; |
|
| 305 | + if (!array_search($id, $boucle->from)) { |
|
| 306 | + include_spip('public/jointures'); |
|
| 307 | + fabrique_jointures($boucle, $jointures, true, $boucle->show, $id_table, '', $echapper); |
|
| 308 | + } |
|
| 309 | + // trouver l'alias de la table d'arrivee qui porte le statut |
|
| 310 | + $id = array_search($id, $boucle->from); |
|
| 311 | + } else { |
|
| 312 | + $id = $id_table; |
|
| 313 | + $statut = preg_replace(',\W,', '', $s['champ']); // securite |
|
| 314 | + } |
|
| 315 | + $mstatut = $id . '.' . $statut; |
|
| 316 | + |
|
| 317 | + $arg_ignore_previsu = ($ignore_previsu ? ",true" : ''); |
|
| 318 | + include_spip('public/quete'); |
|
| 319 | + if (isset($s['post_date']) and $s['post_date'] |
|
| 320 | + and $GLOBALS['meta']["post_dates"] == 'non' |
|
| 321 | + ) { |
|
| 322 | + $date = $id . '.' . preg_replace(',\W,', '', $s['post_date']); // securite |
|
| 323 | + array_unshift($boucle->where, |
|
| 324 | + $echapper ? |
|
| 325 | + "\nquete_condition_postdates('$date'," . _q($boucle->sql_serveur) . "$arg_ignore_previsu)" |
|
| 326 | + : |
|
| 327 | + quete_condition_postdates($date, $boucle->sql_serveur, $ignore_previsu) |
|
| 328 | + ); |
|
| 329 | + } |
|
| 330 | + array_unshift($boucle->where, |
|
| 331 | + $echapper ? |
|
| 332 | + "\nquete_condition_statut('$mstatut'," |
|
| 333 | + . _q($s['previsu']) . "," |
|
| 334 | + . _q($s['publie']) . "," |
|
| 335 | + . _q($boucle->sql_serveur) . "$arg_ignore_previsu)" |
|
| 336 | + : |
|
| 337 | + quete_condition_statut($mstatut, $s['previsu'], $s['publie'], $boucle->sql_serveur, $ignore_previsu) |
|
| 338 | + ); |
|
| 339 | + } |
|
| 340 | + } |
|
| 341 | + } |
|
| 342 | 342 | } |
| 343 | 343 | |
| 344 | 344 | /** |
@@ -357,23 +357,23 @@ discard block |
||
| 357 | 357 | */ |
| 358 | 358 | function calculer_boucle($id_boucle, &$boucles) { |
| 359 | 359 | |
| 360 | - $boucle = &$boucles[$id_boucle]; |
|
| 361 | - instituer_boucle($boucle); |
|
| 362 | - $boucles[$id_boucle] = pipeline('post_boucle', $boucles[$id_boucle]); |
|
| 363 | - |
|
| 364 | - // en mode debug memoriser les premiers passages dans la boucle, |
|
| 365 | - // mais pas tous, sinon ca pete. |
|
| 366 | - if (_request('var_mode_affiche') != 'resultat') { |
|
| 367 | - $trace = ''; |
|
| 368 | - } else { |
|
| 369 | - $trace = $boucles[$id_boucle]->descr['nom'] . $id_boucle; |
|
| 370 | - $trace = "if (count(@\$GLOBALS['debug_objets']['resultat']['$trace'])<3) |
|
| 360 | + $boucle = &$boucles[$id_boucle]; |
|
| 361 | + instituer_boucle($boucle); |
|
| 362 | + $boucles[$id_boucle] = pipeline('post_boucle', $boucles[$id_boucle]); |
|
| 363 | + |
|
| 364 | + // en mode debug memoriser les premiers passages dans la boucle, |
|
| 365 | + // mais pas tous, sinon ca pete. |
|
| 366 | + if (_request('var_mode_affiche') != 'resultat') { |
|
| 367 | + $trace = ''; |
|
| 368 | + } else { |
|
| 369 | + $trace = $boucles[$id_boucle]->descr['nom'] . $id_boucle; |
|
| 370 | + $trace = "if (count(@\$GLOBALS['debug_objets']['resultat']['$trace'])<3) |
|
| 371 | 371 | \$GLOBALS['debug_objets']['resultat']['$trace'][] = \$t0;"; |
| 372 | - } |
|
| 372 | + } |
|
| 373 | 373 | |
| 374 | - return ($boucles[$id_boucle]->type_requete == TYPE_RECURSIF) |
|
| 375 | - ? calculer_boucle_rec($id_boucle, $boucles, $trace) |
|
| 376 | - : calculer_boucle_nonrec($id_boucle, $boucles, $trace); |
|
| 374 | + return ($boucles[$id_boucle]->type_requete == TYPE_RECURSIF) |
|
| 375 | + ? calculer_boucle_rec($id_boucle, $boucles, $trace) |
|
| 376 | + : calculer_boucle_nonrec($id_boucle, $boucles, $trace); |
|
| 377 | 377 | } |
| 378 | 378 | |
| 379 | 379 | |
@@ -396,15 +396,15 @@ discard block |
||
| 396 | 396 | * Code PHP compilé de la boucle récursive |
| 397 | 397 | **/ |
| 398 | 398 | function calculer_boucle_rec($id_boucle, &$boucles, $trace) { |
| 399 | - $nom = $boucles[$id_boucle]->param[0]; |
|
| 400 | - |
|
| 401 | - return |
|
| 402 | - // Numrows[$nom] peut ne pas être encore defini |
|
| 403 | - "\n\t\$save_numrows = (isset(\$Numrows['$nom']) ? \$Numrows['$nom'] : array());" |
|
| 404 | - . "\n\t\$t0 = " . $boucles[$id_boucle]->return . ";" |
|
| 405 | - . "\n\t\$Numrows['$nom'] = (\$save_numrows);" |
|
| 406 | - . $trace |
|
| 407 | - . "\n\treturn \$t0;"; |
|
| 399 | + $nom = $boucles[$id_boucle]->param[0]; |
|
| 400 | + |
|
| 401 | + return |
|
| 402 | + // Numrows[$nom] peut ne pas être encore defini |
|
| 403 | + "\n\t\$save_numrows = (isset(\$Numrows['$nom']) ? \$Numrows['$nom'] : array());" |
|
| 404 | + . "\n\t\$t0 = " . $boucles[$id_boucle]->return . ";" |
|
| 405 | + . "\n\t\$Numrows['$nom'] = (\$save_numrows);" |
|
| 406 | + . $trace |
|
| 407 | + . "\n\treturn \$t0;"; |
|
| 408 | 408 | } |
| 409 | 409 | |
| 410 | 410 | /** |
@@ -458,169 +458,169 @@ discard block |
||
| 458 | 458 | **/ |
| 459 | 459 | function calculer_boucle_nonrec($id_boucle, &$boucles, $trace) { |
| 460 | 460 | |
| 461 | - $boucle = &$boucles[$id_boucle]; |
|
| 462 | - $return = $boucle->return; |
|
| 463 | - $type_boucle = $boucle->type_requete; |
|
| 464 | - $primary = $boucle->primary; |
|
| 465 | - $constant = preg_match(CODE_MONOTONE, str_replace("\\'", '', $return)); |
|
| 466 | - $flag_cpt = $boucle->mode_partie || $boucle->cptrows; |
|
| 467 | - $corps = ''; |
|
| 468 | - |
|
| 469 | - // faudrait expanser le foreach a la compil, car y en a souvent qu'un |
|
| 470 | - // et puis faire un [] plutot qu'un "','." |
|
| 471 | - if ($boucle->doublons) { |
|
| 472 | - $corps .= "\n\t\t\tforeach(" . $boucle->doublons . ' as $k) $doublons[$k] .= "," . ' . |
|
| 473 | - index_pile($id_boucle, $primary, $boucles) |
|
| 474 | - . "; // doublons\n"; |
|
| 475 | - } |
|
| 476 | - |
|
| 477 | - // La boucle doit-elle selectionner la langue ? |
|
| 478 | - // - par defaut, les boucles suivantes le font |
|
| 479 | - // (sauf si forcer_lang==true ou si le titre contient <multi>). |
|
| 480 | - // - a moins d'une demande explicite via {!lang_select} |
|
| 481 | - if (!$constant && $boucle->lang_select != 'non' && |
|
| 482 | - (($boucle->lang_select == 'oui') || |
|
| 483 | - in_array($type_boucle, array( |
|
| 484 | - 'articles', |
|
| 485 | - 'rubriques', |
|
| 486 | - 'hierarchie', |
|
| 487 | - 'breves' |
|
| 488 | - ))) |
|
| 489 | - ) { |
|
| 490 | - // Memoriser la langue avant la boucle et la restituer apres |
|
| 491 | - // afin que le corps de boucle affecte la globale directement |
|
| 492 | - $init_lang = "lang_select(\$GLOBALS['spip_lang']);\n\t"; |
|
| 493 | - $fin_lang = "lang_select();\n\t"; |
|
| 494 | - $fin_lang_select_public = "\n\t\tlang_select();"; |
|
| 495 | - |
|
| 496 | - $corps .= |
|
| 497 | - "\n\t\tlang_select_public(" |
|
| 498 | - . index_pile($id_boucle, 'lang', $boucles) |
|
| 499 | - . ", '" . $boucle->lang_select . "'" |
|
| 500 | - . (in_array($type_boucle, array( |
|
| 501 | - 'articles', |
|
| 502 | - 'rubriques', |
|
| 503 | - 'hierarchie', |
|
| 504 | - 'breves' |
|
| 505 | - )) ? ', ' . index_pile($id_boucle, 'titre', $boucles) : '') |
|
| 506 | - . ');'; |
|
| 507 | - } else { |
|
| 508 | - $init_lang = ''; |
|
| 509 | - $fin_lang = ''; |
|
| 510 | - $fin_lang_select_public = ''; |
|
| 511 | - // sortir les appels au traducteur (invariants de boucle) |
|
| 512 | - if (strpos($return, '?php') === false |
|
| 513 | - and preg_match_all("/\W(_T[(]'[^']*'[)])/", $return, $r) |
|
| 514 | - ) { |
|
| 515 | - $i = 1; |
|
| 516 | - foreach ($r[1] as $t) { |
|
| 517 | - $init_lang .= "\n\t\$l$i = $t;"; |
|
| 518 | - $return = str_replace($t, "\$l$i", $return); |
|
| 519 | - $i++; |
|
| 520 | - } |
|
| 521 | - } |
|
| 522 | - } |
|
| 523 | - |
|
| 524 | - // gestion optimale des separateurs et des boucles constantes |
|
| 525 | - if (count($boucle->separateur)) { |
|
| 526 | - $code_sep = ("'" . str_replace("'", "\'", join('', $boucle->separateur)) . "'"); |
|
| 527 | - } |
|
| 528 | - |
|
| 529 | - $corps .= |
|
| 530 | - ((!$boucle->separateur) ? |
|
| 531 | - (($constant && !$corps && !$flag_cpt) ? $return : |
|
| 532 | - (($return === "''") ? '' : |
|
| 533 | - ("\n\t\t" . '$t0 .= ' . $return . ";"))) : |
|
| 534 | - ("\n\t\t\$t1 " . |
|
| 535 | - ((strpos($return, '$t1.') === 0) ? |
|
| 536 | - (".=" . substr($return, 4)) : |
|
| 537 | - ('= ' . $return)) . |
|
| 538 | - ";\n\t\t" . |
|
| 539 | - '$t0 .= ((strlen($t1) && strlen($t0)) ? ' . $code_sep . " : '') . \$t1;")); |
|
| 540 | - |
|
| 541 | - // Calculer les invalideurs si c'est une boucle non constante et si on |
|
| 542 | - // souhaite invalider ces elements |
|
| 543 | - if (!$constant and $primary) { |
|
| 544 | - include_spip('inc/invalideur'); |
|
| 545 | - $corps = calcul_invalideurs($corps, $primary,$boucles, $id_boucle); |
|
| 546 | - } |
|
| 547 | - |
|
| 548 | - // gerer le compteur de boucle |
|
| 549 | - // avec ou sans son utilisation par les criteres {1/3} {1,4} {n-2,1}... |
|
| 550 | - |
|
| 551 | - if ($boucle->partie or $boucle->cptrows) { |
|
| 552 | - $corps = "\n\t\t\$Numrows['$id_boucle']['compteur_boucle']++;" |
|
| 553 | - . $boucle->partie |
|
| 554 | - . $corps; |
|
| 555 | - } |
|
| 556 | - |
|
| 557 | - // depiler la lang de la boucle si besoin |
|
| 558 | - $corps .= $fin_lang_select_public; |
|
| 559 | - |
|
| 560 | - // si le corps est une constante, ne pas appeler le serveur N fois! |
|
| 561 | - |
|
| 562 | - if (preg_match(CODE_MONOTONE, str_replace("\\'", '', $corps), $r)) { |
|
| 563 | - if (!isset($r[2]) or (!$r[2])) { |
|
| 564 | - if (!$boucle->numrows) { |
|
| 565 | - return "\n\t\$t0 = '';"; |
|
| 566 | - } else { |
|
| 567 | - $corps = ""; |
|
| 568 | - } |
|
| 569 | - } else { |
|
| 570 | - $boucle->numrows = true; |
|
| 571 | - $corps = "\n\t\$t0 = str_repeat($corps, \$Numrows['$id_boucle']['total']);"; |
|
| 572 | - } |
|
| 573 | - } else { |
|
| 574 | - $corps = "while (\$Pile[\$SP]=\$iter->fetch()) {\n$corps\n }"; |
|
| 575 | - } |
|
| 576 | - |
|
| 577 | - $count = ''; |
|
| 578 | - if (!$boucle->select) { |
|
| 579 | - if (!$boucle->numrows or $boucle->limit or $boucle->mode_partie or $boucle->group) { |
|
| 580 | - $count = '1'; |
|
| 581 | - } else { |
|
| 582 | - $count = 'count(*)'; |
|
| 583 | - } |
|
| 584 | - $boucles[$id_boucle]->select[] = $count; |
|
| 585 | - } |
|
| 586 | - |
|
| 587 | - if ($flag_cpt) { |
|
| 588 | - $nums = "\n\t// COMPTEUR\n\t" |
|
| 589 | - . "\$Numrows['$id_boucle']['compteur_boucle'] = 0;\n\t"; |
|
| 590 | - } else { |
|
| 591 | - $nums = ''; |
|
| 592 | - } |
|
| 593 | - |
|
| 594 | - if ($boucle->numrows or $boucle->mode_partie) { |
|
| 595 | - $nums .= "\$Numrows['$id_boucle']['total'] = @intval(\$iter->count());" |
|
| 596 | - . $boucle->mode_partie |
|
| 597 | - . "\n\t"; |
|
| 598 | - } |
|
| 599 | - |
|
| 600 | - // Ne calculer la requete que maintenant |
|
| 601 | - // car ce qui precede appelle index_pile qui influe dessus |
|
| 602 | - |
|
| 603 | - $init = (($init = $boucles[$id_boucle]->doublons) |
|
| 604 | - ? ("\n\t$init = array();") : '') |
|
| 605 | - . calculer_requete_sql($boucles[$id_boucle]); |
|
| 606 | - |
|
| 607 | - $contexte = memoriser_contexte_compil($boucle); |
|
| 608 | - |
|
| 609 | - $a = sprintf(CODE_CORPS_BOUCLE, |
|
| 610 | - $init, |
|
| 611 | - $boucle->iterateur, |
|
| 612 | - "\$command", |
|
| 613 | - $contexte, |
|
| 614 | - $nums, |
|
| 615 | - $init_lang, |
|
| 616 | - $corps, |
|
| 617 | - $fin_lang, |
|
| 618 | - $trace, |
|
| 619 | - 'BOUCLE' . $id_boucle . ' @ ' . ($boucle->descr['sourcefile']) |
|
| 620 | - ); |
|
| 461 | + $boucle = &$boucles[$id_boucle]; |
|
| 462 | + $return = $boucle->return; |
|
| 463 | + $type_boucle = $boucle->type_requete; |
|
| 464 | + $primary = $boucle->primary; |
|
| 465 | + $constant = preg_match(CODE_MONOTONE, str_replace("\\'", '', $return)); |
|
| 466 | + $flag_cpt = $boucle->mode_partie || $boucle->cptrows; |
|
| 467 | + $corps = ''; |
|
| 468 | + |
|
| 469 | + // faudrait expanser le foreach a la compil, car y en a souvent qu'un |
|
| 470 | + // et puis faire un [] plutot qu'un "','." |
|
| 471 | + if ($boucle->doublons) { |
|
| 472 | + $corps .= "\n\t\t\tforeach(" . $boucle->doublons . ' as $k) $doublons[$k] .= "," . ' . |
|
| 473 | + index_pile($id_boucle, $primary, $boucles) |
|
| 474 | + . "; // doublons\n"; |
|
| 475 | + } |
|
| 476 | + |
|
| 477 | + // La boucle doit-elle selectionner la langue ? |
|
| 478 | + // - par defaut, les boucles suivantes le font |
|
| 479 | + // (sauf si forcer_lang==true ou si le titre contient <multi>). |
|
| 480 | + // - a moins d'une demande explicite via {!lang_select} |
|
| 481 | + if (!$constant && $boucle->lang_select != 'non' && |
|
| 482 | + (($boucle->lang_select == 'oui') || |
|
| 483 | + in_array($type_boucle, array( |
|
| 484 | + 'articles', |
|
| 485 | + 'rubriques', |
|
| 486 | + 'hierarchie', |
|
| 487 | + 'breves' |
|
| 488 | + ))) |
|
| 489 | + ) { |
|
| 490 | + // Memoriser la langue avant la boucle et la restituer apres |
|
| 491 | + // afin que le corps de boucle affecte la globale directement |
|
| 492 | + $init_lang = "lang_select(\$GLOBALS['spip_lang']);\n\t"; |
|
| 493 | + $fin_lang = "lang_select();\n\t"; |
|
| 494 | + $fin_lang_select_public = "\n\t\tlang_select();"; |
|
| 495 | + |
|
| 496 | + $corps .= |
|
| 497 | + "\n\t\tlang_select_public(" |
|
| 498 | + . index_pile($id_boucle, 'lang', $boucles) |
|
| 499 | + . ", '" . $boucle->lang_select . "'" |
|
| 500 | + . (in_array($type_boucle, array( |
|
| 501 | + 'articles', |
|
| 502 | + 'rubriques', |
|
| 503 | + 'hierarchie', |
|
| 504 | + 'breves' |
|
| 505 | + )) ? ', ' . index_pile($id_boucle, 'titre', $boucles) : '') |
|
| 506 | + . ');'; |
|
| 507 | + } else { |
|
| 508 | + $init_lang = ''; |
|
| 509 | + $fin_lang = ''; |
|
| 510 | + $fin_lang_select_public = ''; |
|
| 511 | + // sortir les appels au traducteur (invariants de boucle) |
|
| 512 | + if (strpos($return, '?php') === false |
|
| 513 | + and preg_match_all("/\W(_T[(]'[^']*'[)])/", $return, $r) |
|
| 514 | + ) { |
|
| 515 | + $i = 1; |
|
| 516 | + foreach ($r[1] as $t) { |
|
| 517 | + $init_lang .= "\n\t\$l$i = $t;"; |
|
| 518 | + $return = str_replace($t, "\$l$i", $return); |
|
| 519 | + $i++; |
|
| 520 | + } |
|
| 521 | + } |
|
| 522 | + } |
|
| 523 | + |
|
| 524 | + // gestion optimale des separateurs et des boucles constantes |
|
| 525 | + if (count($boucle->separateur)) { |
|
| 526 | + $code_sep = ("'" . str_replace("'", "\'", join('', $boucle->separateur)) . "'"); |
|
| 527 | + } |
|
| 528 | + |
|
| 529 | + $corps .= |
|
| 530 | + ((!$boucle->separateur) ? |
|
| 531 | + (($constant && !$corps && !$flag_cpt) ? $return : |
|
| 532 | + (($return === "''") ? '' : |
|
| 533 | + ("\n\t\t" . '$t0 .= ' . $return . ";"))) : |
|
| 534 | + ("\n\t\t\$t1 " . |
|
| 535 | + ((strpos($return, '$t1.') === 0) ? |
|
| 536 | + (".=" . substr($return, 4)) : |
|
| 537 | + ('= ' . $return)) . |
|
| 538 | + ";\n\t\t" . |
|
| 539 | + '$t0 .= ((strlen($t1) && strlen($t0)) ? ' . $code_sep . " : '') . \$t1;")); |
|
| 540 | + |
|
| 541 | + // Calculer les invalideurs si c'est une boucle non constante et si on |
|
| 542 | + // souhaite invalider ces elements |
|
| 543 | + if (!$constant and $primary) { |
|
| 544 | + include_spip('inc/invalideur'); |
|
| 545 | + $corps = calcul_invalideurs($corps, $primary,$boucles, $id_boucle); |
|
| 546 | + } |
|
| 547 | + |
|
| 548 | + // gerer le compteur de boucle |
|
| 549 | + // avec ou sans son utilisation par les criteres {1/3} {1,4} {n-2,1}... |
|
| 550 | + |
|
| 551 | + if ($boucle->partie or $boucle->cptrows) { |
|
| 552 | + $corps = "\n\t\t\$Numrows['$id_boucle']['compteur_boucle']++;" |
|
| 553 | + . $boucle->partie |
|
| 554 | + . $corps; |
|
| 555 | + } |
|
| 556 | + |
|
| 557 | + // depiler la lang de la boucle si besoin |
|
| 558 | + $corps .= $fin_lang_select_public; |
|
| 559 | + |
|
| 560 | + // si le corps est une constante, ne pas appeler le serveur N fois! |
|
| 561 | + |
|
| 562 | + if (preg_match(CODE_MONOTONE, str_replace("\\'", '', $corps), $r)) { |
|
| 563 | + if (!isset($r[2]) or (!$r[2])) { |
|
| 564 | + if (!$boucle->numrows) { |
|
| 565 | + return "\n\t\$t0 = '';"; |
|
| 566 | + } else { |
|
| 567 | + $corps = ""; |
|
| 568 | + } |
|
| 569 | + } else { |
|
| 570 | + $boucle->numrows = true; |
|
| 571 | + $corps = "\n\t\$t0 = str_repeat($corps, \$Numrows['$id_boucle']['total']);"; |
|
| 572 | + } |
|
| 573 | + } else { |
|
| 574 | + $corps = "while (\$Pile[\$SP]=\$iter->fetch()) {\n$corps\n }"; |
|
| 575 | + } |
|
| 576 | + |
|
| 577 | + $count = ''; |
|
| 578 | + if (!$boucle->select) { |
|
| 579 | + if (!$boucle->numrows or $boucle->limit or $boucle->mode_partie or $boucle->group) { |
|
| 580 | + $count = '1'; |
|
| 581 | + } else { |
|
| 582 | + $count = 'count(*)'; |
|
| 583 | + } |
|
| 584 | + $boucles[$id_boucle]->select[] = $count; |
|
| 585 | + } |
|
| 586 | + |
|
| 587 | + if ($flag_cpt) { |
|
| 588 | + $nums = "\n\t// COMPTEUR\n\t" |
|
| 589 | + . "\$Numrows['$id_boucle']['compteur_boucle'] = 0;\n\t"; |
|
| 590 | + } else { |
|
| 591 | + $nums = ''; |
|
| 592 | + } |
|
| 593 | + |
|
| 594 | + if ($boucle->numrows or $boucle->mode_partie) { |
|
| 595 | + $nums .= "\$Numrows['$id_boucle']['total'] = @intval(\$iter->count());" |
|
| 596 | + . $boucle->mode_partie |
|
| 597 | + . "\n\t"; |
|
| 598 | + } |
|
| 599 | + |
|
| 600 | + // Ne calculer la requete que maintenant |
|
| 601 | + // car ce qui precede appelle index_pile qui influe dessus |
|
| 602 | + |
|
| 603 | + $init = (($init = $boucles[$id_boucle]->doublons) |
|
| 604 | + ? ("\n\t$init = array();") : '') |
|
| 605 | + . calculer_requete_sql($boucles[$id_boucle]); |
|
| 606 | + |
|
| 607 | + $contexte = memoriser_contexte_compil($boucle); |
|
| 608 | + |
|
| 609 | + $a = sprintf(CODE_CORPS_BOUCLE, |
|
| 610 | + $init, |
|
| 611 | + $boucle->iterateur, |
|
| 612 | + "\$command", |
|
| 613 | + $contexte, |
|
| 614 | + $nums, |
|
| 615 | + $init_lang, |
|
| 616 | + $corps, |
|
| 617 | + $fin_lang, |
|
| 618 | + $trace, |
|
| 619 | + 'BOUCLE' . $id_boucle . ' @ ' . ($boucle->descr['sourcefile']) |
|
| 620 | + ); |
|
| 621 | 621 | |
| 622 | 622 | # var_dump($a);exit; |
| 623 | - return $a; |
|
| 623 | + return $a; |
|
| 624 | 624 | } |
| 625 | 625 | |
| 626 | 626 | |
@@ -636,43 +636,43 @@ discard block |
||
| 636 | 636 | * Code PHP compilé définissant les informations de requête |
| 637 | 637 | **/ |
| 638 | 638 | function calculer_requete_sql($boucle) { |
| 639 | - $init = array(); |
|
| 640 | - $init[] = calculer_dec('table', "'" . $boucle->id_table . "'"); |
|
| 641 | - $init[] = calculer_dec('id', "'" . $boucle->id_boucle . "'"); |
|
| 642 | - # En absence de champ c'est un decompte : |
|
| 643 | - $init[] = calculer_dec('from', calculer_from($boucle)); |
|
| 644 | - $init[] = calculer_dec('type', calculer_from_type($boucle)); |
|
| 645 | - $init[] = calculer_dec('groupby', |
|
| 646 | - 'array(' . (($g = join("\",\n\t\t\"", $boucle->group)) ? '"' . $g . '"' : '') . ")"); |
|
| 647 | - $init[] = calculer_dec('select', 'array("' . join("\",\n\t\t\"", $boucle->select) . "\")"); |
|
| 648 | - $init[] = calculer_dec('orderby', 'array(' . calculer_order($boucle) . ")"); |
|
| 649 | - $init[] = calculer_dec('where', calculer_dump_array($boucle->where)); |
|
| 650 | - $init[] = calculer_dec('join', calculer_dump_join($boucle->join)); |
|
| 651 | - $init[] = calculer_dec('limit', |
|
| 652 | - (strpos($boucle->limit, 'intval') === false ? |
|
| 653 | - "'" . $boucle->limit . "'" |
|
| 654 | - : |
|
| 655 | - $boucle->limit)); |
|
| 656 | - $init[] = calculer_dec('having', calculer_dump_array($boucle->having)); |
|
| 657 | - $s = $d = ""; |
|
| 658 | - // l'index 0 de $i indique si l'affectation est statique (contenu) |
|
| 659 | - // ou recalculée à chaque passage (vide) |
|
| 660 | - foreach ($init as $i) { |
|
| 661 | - if (reset($i)) { |
|
| 662 | - $s .= "\n\t\t" . end($i); |
|
| 663 | - } # statique |
|
| 664 | - else { |
|
| 665 | - $d .= "\n\t" . end($i); |
|
| 666 | - } # dynamique |
|
| 667 | - } |
|
| 668 | - |
|
| 669 | - return ($boucle->hierarchie ? "\n\t$boucle->hierarchie" : '') |
|
| 670 | - . $boucle->in |
|
| 671 | - . $boucle->hash |
|
| 672 | - . "\n\t" . 'if (!isset($command[\'table\'])) {' |
|
| 673 | - . $s |
|
| 674 | - . "\n\t}" |
|
| 675 | - . $d; |
|
| 639 | + $init = array(); |
|
| 640 | + $init[] = calculer_dec('table', "'" . $boucle->id_table . "'"); |
|
| 641 | + $init[] = calculer_dec('id', "'" . $boucle->id_boucle . "'"); |
|
| 642 | + # En absence de champ c'est un decompte : |
|
| 643 | + $init[] = calculer_dec('from', calculer_from($boucle)); |
|
| 644 | + $init[] = calculer_dec('type', calculer_from_type($boucle)); |
|
| 645 | + $init[] = calculer_dec('groupby', |
|
| 646 | + 'array(' . (($g = join("\",\n\t\t\"", $boucle->group)) ? '"' . $g . '"' : '') . ")"); |
|
| 647 | + $init[] = calculer_dec('select', 'array("' . join("\",\n\t\t\"", $boucle->select) . "\")"); |
|
| 648 | + $init[] = calculer_dec('orderby', 'array(' . calculer_order($boucle) . ")"); |
|
| 649 | + $init[] = calculer_dec('where', calculer_dump_array($boucle->where)); |
|
| 650 | + $init[] = calculer_dec('join', calculer_dump_join($boucle->join)); |
|
| 651 | + $init[] = calculer_dec('limit', |
|
| 652 | + (strpos($boucle->limit, 'intval') === false ? |
|
| 653 | + "'" . $boucle->limit . "'" |
|
| 654 | + : |
|
| 655 | + $boucle->limit)); |
|
| 656 | + $init[] = calculer_dec('having', calculer_dump_array($boucle->having)); |
|
| 657 | + $s = $d = ""; |
|
| 658 | + // l'index 0 de $i indique si l'affectation est statique (contenu) |
|
| 659 | + // ou recalculée à chaque passage (vide) |
|
| 660 | + foreach ($init as $i) { |
|
| 661 | + if (reset($i)) { |
|
| 662 | + $s .= "\n\t\t" . end($i); |
|
| 663 | + } # statique |
|
| 664 | + else { |
|
| 665 | + $d .= "\n\t" . end($i); |
|
| 666 | + } # dynamique |
|
| 667 | + } |
|
| 668 | + |
|
| 669 | + return ($boucle->hierarchie ? "\n\t$boucle->hierarchie" : '') |
|
| 670 | + . $boucle->in |
|
| 671 | + . $boucle->hash |
|
| 672 | + . "\n\t" . 'if (!isset($command[\'table\'])) {' |
|
| 673 | + . $s |
|
| 674 | + . "\n\t}" |
|
| 675 | + . $d; |
|
| 676 | 676 | } |
| 677 | 677 | |
| 678 | 678 | /** |
@@ -690,13 +690,13 @@ discard block |
||
| 690 | 690 | * qui peut être utilisé pour la production d'un tableau array() |
| 691 | 691 | **/ |
| 692 | 692 | function memoriser_contexte_compil($p) { |
| 693 | - return join(',', array( |
|
| 694 | - _q(isset($p->descr['sourcefile']) ? $p->descr['sourcefile'] : ''), |
|
| 695 | - _q(isset($p->descr['nom']) ? $p->descr['nom'] : ''), |
|
| 696 | - _q(isset($p->id_boucle) ? $p->id_boucle : null), |
|
| 697 | - intval($p->ligne), |
|
| 698 | - '$GLOBALS[\'spip_lang\']' |
|
| 699 | - )); |
|
| 693 | + return join(',', array( |
|
| 694 | + _q(isset($p->descr['sourcefile']) ? $p->descr['sourcefile'] : ''), |
|
| 695 | + _q(isset($p->descr['nom']) ? $p->descr['nom'] : ''), |
|
| 696 | + _q(isset($p->id_boucle) ? $p->id_boucle : null), |
|
| 697 | + intval($p->ligne), |
|
| 698 | + '$GLOBALS[\'spip_lang\']' |
|
| 699 | + )); |
|
| 700 | 700 | } |
| 701 | 701 | |
| 702 | 702 | /** |
@@ -714,19 +714,19 @@ discard block |
||
| 714 | 714 | * Objet Contexte |
| 715 | 715 | **/ |
| 716 | 716 | function reconstruire_contexte_compil($context_compil) { |
| 717 | - if (!is_array($context_compil)) { |
|
| 718 | - return $context_compil; |
|
| 719 | - } |
|
| 720 | - $p = new Contexte; |
|
| 721 | - $p->descr = array( |
|
| 722 | - 'sourcefile' => $context_compil[0], |
|
| 723 | - 'nom' => $context_compil[1] |
|
| 724 | - ); |
|
| 725 | - $p->id_boucle = $context_compil[2]; |
|
| 726 | - $p->ligne = $context_compil[3]; |
|
| 727 | - $p->lang = $context_compil[4]; |
|
| 728 | - |
|
| 729 | - return $p; |
|
| 717 | + if (!is_array($context_compil)) { |
|
| 718 | + return $context_compil; |
|
| 719 | + } |
|
| 720 | + $p = new Contexte; |
|
| 721 | + $p->descr = array( |
|
| 722 | + 'sourcefile' => $context_compil[0], |
|
| 723 | + 'nom' => $context_compil[1] |
|
| 724 | + ); |
|
| 725 | + $p->id_boucle = $context_compil[2]; |
|
| 726 | + $p->ligne = $context_compil[3]; |
|
| 727 | + $p->lang = $context_compil[4]; |
|
| 728 | + |
|
| 729 | + return $p; |
|
| 730 | 730 | } |
| 731 | 731 | |
| 732 | 732 | /** |
@@ -752,12 +752,12 @@ discard block |
||
| 752 | 752 | * - index 1 : Code de l'affectation |
| 753 | 753 | **/ |
| 754 | 754 | function calculer_dec($nom, $val) { |
| 755 | - $static = 'if (!isset($command[\'' . $nom . '\'])) '; |
|
| 756 | - // si une variable apparait dans le calcul de la clause |
|
| 757 | - // il faut la re-evaluer a chaque passage |
|
| 758 | - if ( |
|
| 759 | - strpos($val, '$') !== false |
|
| 760 | - /* |
|
| 755 | + $static = 'if (!isset($command[\'' . $nom . '\'])) '; |
|
| 756 | + // si une variable apparait dans le calcul de la clause |
|
| 757 | + // il faut la re-evaluer a chaque passage |
|
| 758 | + if ( |
|
| 759 | + strpos($val, '$') !== false |
|
| 760 | + /* |
|
| 761 | 761 | OR strpos($val, 'sql_') !== false |
| 762 | 762 | OR ( |
| 763 | 763 | $test = str_replace(array("array(",'\"',"\'"),array("","",""),$val) // supprimer les array( et les echappements de guillemets |
@@ -765,11 +765,11 @@ discard block |
||
| 765 | 765 | AND $test = preg_replace(",'[^']*',UimsS","",$test) // supprimer les chaines qui peuvent contenir des fonctions SQL qui ne genent pas |
| 766 | 766 | AND preg_match(",\w+\s*\(,UimsS",$test,$regs) // tester la presence de fonctions restantes |
| 767 | 767 | )*/ |
| 768 | - ) { |
|
| 769 | - $static = ""; |
|
| 770 | - } |
|
| 768 | + ) { |
|
| 769 | + $static = ""; |
|
| 770 | + } |
|
| 771 | 771 | |
| 772 | - return array($static, '$command[\'' . $nom . '\'] = ' . $val . ';'); |
|
| 772 | + return array($static, '$command[\'' . $nom . '\'] = ' . $val . ';'); |
|
| 773 | 773 | } |
| 774 | 774 | |
| 775 | 775 | /** |
@@ -789,32 +789,32 @@ discard block |
||
| 789 | 789 | * Expression PHP décrivant un texte ou un tableau |
| 790 | 790 | **/ |
| 791 | 791 | function calculer_dump_array($a) { |
| 792 | - if (!is_array($a)) { |
|
| 793 | - return $a; |
|
| 794 | - } |
|
| 795 | - $res = ""; |
|
| 796 | - if ($a and $a[0] == "'?'") { |
|
| 797 | - return ("(" . calculer_dump_array($a[1]) . |
|
| 798 | - " ? " . calculer_dump_array($a[2]) . |
|
| 799 | - " : " . calculer_dump_array($a[3]) . |
|
| 800 | - ")"); |
|
| 801 | - } else { |
|
| 802 | - foreach ($a as $v) { |
|
| 803 | - $res .= ", " . calculer_dump_array($v); |
|
| 804 | - } |
|
| 805 | - |
|
| 806 | - return "\n\t\t\tarray(" . substr($res, 2) . ')'; |
|
| 807 | - } |
|
| 792 | + if (!is_array($a)) { |
|
| 793 | + return $a; |
|
| 794 | + } |
|
| 795 | + $res = ""; |
|
| 796 | + if ($a and $a[0] == "'?'") { |
|
| 797 | + return ("(" . calculer_dump_array($a[1]) . |
|
| 798 | + " ? " . calculer_dump_array($a[2]) . |
|
| 799 | + " : " . calculer_dump_array($a[3]) . |
|
| 800 | + ")"); |
|
| 801 | + } else { |
|
| 802 | + foreach ($a as $v) { |
|
| 803 | + $res .= ", " . calculer_dump_array($v); |
|
| 804 | + } |
|
| 805 | + |
|
| 806 | + return "\n\t\t\tarray(" . substr($res, 2) . ')'; |
|
| 807 | + } |
|
| 808 | 808 | } |
| 809 | 809 | |
| 810 | 810 | // http://code.spip.net/@calculer_dump_join |
| 811 | 811 | function calculer_dump_join($a) { |
| 812 | - $res = ""; |
|
| 813 | - foreach ($a as $k => $v) { |
|
| 814 | - $res .= ", '$k' => array(" . implode(',', $v) . ")"; |
|
| 815 | - } |
|
| 812 | + $res = ""; |
|
| 813 | + foreach ($a as $k => $v) { |
|
| 814 | + $res .= ", '$k' => array(" . implode(',', $v) . ")"; |
|
| 815 | + } |
|
| 816 | 816 | |
| 817 | - return 'array(' . substr($res, 2) . ')'; |
|
| 817 | + return 'array(' . substr($res, 2) . ')'; |
|
| 818 | 818 | } |
| 819 | 819 | |
| 820 | 820 | /** |
@@ -826,12 +826,12 @@ discard block |
||
| 826 | 826 | * Code PHP construisant un tableau des alias et noms des tables du FROM |
| 827 | 827 | **/ |
| 828 | 828 | function calculer_from(&$boucle) { |
| 829 | - $res = ""; |
|
| 830 | - foreach ($boucle->from as $k => $v) { |
|
| 831 | - $res .= ",'$k' => '$v'"; |
|
| 832 | - } |
|
| 829 | + $res = ""; |
|
| 830 | + foreach ($boucle->from as $k => $v) { |
|
| 831 | + $res .= ",'$k' => '$v'"; |
|
| 832 | + } |
|
| 833 | 833 | |
| 834 | - return 'array(' . substr($res, 1) . ')'; |
|
| 834 | + return 'array(' . substr($res, 1) . ')'; |
|
| 835 | 835 | } |
| 836 | 836 | |
| 837 | 837 | /** |
@@ -844,30 +844,30 @@ discard block |
||
| 844 | 844 | * Code PHP construisant un tableau des alias et type de jointure du FROM |
| 845 | 845 | **/ |
| 846 | 846 | function calculer_from_type(&$boucle) { |
| 847 | - $res = ""; |
|
| 848 | - foreach ($boucle->from_type as $k => $v) { |
|
| 849 | - $res .= ",'$k' => '$v'"; |
|
| 850 | - } |
|
| 847 | + $res = ""; |
|
| 848 | + foreach ($boucle->from_type as $k => $v) { |
|
| 849 | + $res .= ",'$k' => '$v'"; |
|
| 850 | + } |
|
| 851 | 851 | |
| 852 | - return 'array(' . substr($res, 1) . ')'; |
|
| 852 | + return 'array(' . substr($res, 1) . ')'; |
|
| 853 | 853 | } |
| 854 | 854 | |
| 855 | 855 | // http://code.spip.net/@calculer_order |
| 856 | 856 | function calculer_order(&$boucle) { |
| 857 | - if (!$order = $boucle->order |
|
| 858 | - and !$order = $boucle->default_order |
|
| 859 | - ) { |
|
| 860 | - $order = array(); |
|
| 861 | - } |
|
| 857 | + if (!$order = $boucle->order |
|
| 858 | + and !$order = $boucle->default_order |
|
| 859 | + ) { |
|
| 860 | + $order = array(); |
|
| 861 | + } |
|
| 862 | 862 | |
| 863 | - /*if (isset($boucle->modificateur['collate'])){ |
|
| 863 | + /*if (isset($boucle->modificateur['collate'])){ |
|
| 864 | 864 | $col = "." . $boucle->modificateur['collate']; |
| 865 | 865 | foreach($order as $k=>$o) |
| 866 | 866 | if (strpos($order[$k],'COLLATE')===false) |
| 867 | 867 | $order[$k].= $col; |
| 868 | 868 | }*/ |
| 869 | 869 | |
| 870 | - return join(', ', $order); |
|
| 870 | + return join(', ', $order); |
|
| 871 | 871 | } |
| 872 | 872 | |
| 873 | 873 | // Production du code PHP a partir de la sequence livree par le phraseur |
@@ -877,59 +877,59 @@ discard block |
||
| 877 | 877 | |
| 878 | 878 | // http://code.spip.net/@calculer_liste |
| 879 | 879 | function calculer_liste($tableau, $descr, &$boucles, $id_boucle = '') { |
| 880 | - if (!$tableau) { |
|
| 881 | - return "''"; |
|
| 882 | - } |
|
| 883 | - if (is_string($descr)) { |
|
| 884 | - if (isset($boucles[$descr])) { |
|
| 885 | - $idb = $descr; |
|
| 886 | - $descr = []; |
|
| 887 | - if (isset($boucles[$idb]->descr['id_mere_contexte'])) { |
|
| 888 | - $descr['id_mere'] = $boucles[$idb]->descr['id_mere_contexte']; |
|
| 889 | - } |
|
| 890 | - if (isset($boucles[$idb]->descr['sourcefile'])) { |
|
| 891 | - $descr['sourcefile'] = $boucles[$idb]->descr['sourcefile']; |
|
| 892 | - } |
|
| 893 | - } |
|
| 894 | - else { |
|
| 895 | - $descr = array(); |
|
| 896 | - } |
|
| 897 | - } |
|
| 898 | - if (!isset($descr['niv'])) { |
|
| 899 | - $descr['niv'] = 0; |
|
| 900 | - } |
|
| 901 | - $codes = compile_cas($tableau, $descr, $boucles, $id_boucle); |
|
| 902 | - if ($codes === false) { |
|
| 903 | - return false; |
|
| 904 | - } |
|
| 905 | - $n = count($codes); |
|
| 906 | - if (!$n) { |
|
| 907 | - return "''"; |
|
| 908 | - } |
|
| 909 | - $tab = str_repeat("\t", $descr['niv']); |
|
| 910 | - if (_request('var_mode_affiche') != 'validation') { |
|
| 911 | - if ($n == 1) { |
|
| 912 | - return $codes[0]; |
|
| 913 | - } else { |
|
| 914 | - $res = ''; |
|
| 915 | - foreach ($codes as $code) { |
|
| 916 | - if (!preg_match("/^'[^']*'$/", $code) |
|
| 917 | - or substr($res, -1, 1) !== "'" |
|
| 918 | - ) { |
|
| 919 | - $res .= " .\n$tab$code"; |
|
| 920 | - } else { |
|
| 921 | - $res = substr($res, 0, -1) . substr($code, 1); |
|
| 922 | - } |
|
| 923 | - } |
|
| 924 | - |
|
| 925 | - return '(' . substr($res, 2 + $descr['niv']) . ')'; |
|
| 926 | - } |
|
| 927 | - } else { |
|
| 928 | - $nom = $descr['nom'] . $id_boucle . ($descr['niv'] ? $descr['niv'] : ''); |
|
| 929 | - |
|
| 930 | - return "join('', array_map('array_shift', \$GLOBALS['debug_objets']['sequence']['$nom'] = array(" . join(" ,\n$tab", |
|
| 931 | - $codes) . ")))"; |
|
| 932 | - } |
|
| 880 | + if (!$tableau) { |
|
| 881 | + return "''"; |
|
| 882 | + } |
|
| 883 | + if (is_string($descr)) { |
|
| 884 | + if (isset($boucles[$descr])) { |
|
| 885 | + $idb = $descr; |
|
| 886 | + $descr = []; |
|
| 887 | + if (isset($boucles[$idb]->descr['id_mere_contexte'])) { |
|
| 888 | + $descr['id_mere'] = $boucles[$idb]->descr['id_mere_contexte']; |
|
| 889 | + } |
|
| 890 | + if (isset($boucles[$idb]->descr['sourcefile'])) { |
|
| 891 | + $descr['sourcefile'] = $boucles[$idb]->descr['sourcefile']; |
|
| 892 | + } |
|
| 893 | + } |
|
| 894 | + else { |
|
| 895 | + $descr = array(); |
|
| 896 | + } |
|
| 897 | + } |
|
| 898 | + if (!isset($descr['niv'])) { |
|
| 899 | + $descr['niv'] = 0; |
|
| 900 | + } |
|
| 901 | + $codes = compile_cas($tableau, $descr, $boucles, $id_boucle); |
|
| 902 | + if ($codes === false) { |
|
| 903 | + return false; |
|
| 904 | + } |
|
| 905 | + $n = count($codes); |
|
| 906 | + if (!$n) { |
|
| 907 | + return "''"; |
|
| 908 | + } |
|
| 909 | + $tab = str_repeat("\t", $descr['niv']); |
|
| 910 | + if (_request('var_mode_affiche') != 'validation') { |
|
| 911 | + if ($n == 1) { |
|
| 912 | + return $codes[0]; |
|
| 913 | + } else { |
|
| 914 | + $res = ''; |
|
| 915 | + foreach ($codes as $code) { |
|
| 916 | + if (!preg_match("/^'[^']*'$/", $code) |
|
| 917 | + or substr($res, -1, 1) !== "'" |
|
| 918 | + ) { |
|
| 919 | + $res .= " .\n$tab$code"; |
|
| 920 | + } else { |
|
| 921 | + $res = substr($res, 0, -1) . substr($code, 1); |
|
| 922 | + } |
|
| 923 | + } |
|
| 924 | + |
|
| 925 | + return '(' . substr($res, 2 + $descr['niv']) . ')'; |
|
| 926 | + } |
|
| 927 | + } else { |
|
| 928 | + $nom = $descr['nom'] . $id_boucle . ($descr['niv'] ? $descr['niv'] : ''); |
|
| 929 | + |
|
| 930 | + return "join('', array_map('array_shift', \$GLOBALS['debug_objets']['sequence']['$nom'] = array(" . join(" ,\n$tab", |
|
| 931 | + $codes) . ")))"; |
|
| 932 | + } |
|
| 933 | 933 | } |
| 934 | 934 | |
| 935 | 935 | define('_REGEXP_COND_VIDE_NONVIDE', "/^[(](.*)[?]\s*''\s*:\s*('[^']+')\s*[)]$/"); |
@@ -939,186 +939,186 @@ discard block |
||
| 939 | 939 | // http://code.spip.net/@compile_cas |
| 940 | 940 | function compile_cas($tableau, $descr, &$boucles, $id_boucle) { |
| 941 | 941 | |
| 942 | - $codes = array(); |
|
| 943 | - // cas de la boucle recursive |
|
| 944 | - if (is_array($id_boucle)) { |
|
| 945 | - $id_boucle = $id_boucle[0]; |
|
| 946 | - } |
|
| 947 | - $type = !$id_boucle ? '' : $boucles[$id_boucle]->type_requete; |
|
| 948 | - $tab = str_repeat("\t", ++$descr['niv']); |
|
| 949 | - $mode = _request('var_mode_affiche'); |
|
| 950 | - $err_e_c = ''; |
|
| 951 | - // chaque commentaire introduit dans le code doit commencer |
|
| 952 | - // par un caractere distinguant le cas, pour exploitation par debug. |
|
| 953 | - foreach ($tableau as $p) { |
|
| 954 | - |
|
| 955 | - switch ($p->type) { |
|
| 956 | - // texte seul |
|
| 957 | - case 'texte': |
|
| 958 | - $code = sandbox_composer_texte($p->texte, $p); |
|
| 959 | - $commentaire = strlen($p->texte) . " signes"; |
|
| 960 | - $avant = ''; |
|
| 961 | - $apres = ''; |
|
| 962 | - $altern = "''"; |
|
| 963 | - break; |
|
| 964 | - |
|
| 965 | - case 'polyglotte': |
|
| 966 | - $code = ""; |
|
| 967 | - foreach ($p->traductions as $k => $v) { |
|
| 968 | - $code .= ",'" . |
|
| 969 | - str_replace(array("\\", "'"), array("\\\\", "\\'"), $k) . |
|
| 970 | - "' => '" . |
|
| 971 | - str_replace(array("\\", "'"), array("\\\\", "\\'"), $v) . |
|
| 972 | - "'"; |
|
| 973 | - } |
|
| 974 | - $code = "choisir_traduction(array(" . |
|
| 975 | - substr($code, 1) . |
|
| 976 | - "))"; |
|
| 977 | - $commentaire = '&'; |
|
| 978 | - $avant = ''; |
|
| 979 | - $apres = ''; |
|
| 980 | - $altern = "''"; |
|
| 981 | - break; |
|
| 982 | - |
|
| 983 | - // inclure |
|
| 984 | - case 'include': |
|
| 985 | - $p->descr = $descr; |
|
| 986 | - $code = calculer_inclure($p, $boucles, $id_boucle); |
|
| 987 | - if ($code === false) { |
|
| 988 | - $err_e_c = true; |
|
| 989 | - $code = "''"; |
|
| 990 | - } else { |
|
| 991 | - $commentaire = '<INCLURE ' . addslashes(str_replace("\n", ' ', $code)) . '>'; |
|
| 992 | - $avant = ''; |
|
| 993 | - $apres = ''; |
|
| 994 | - $altern = "''"; |
|
| 995 | - } |
|
| 996 | - break; |
|
| 997 | - |
|
| 998 | - // boucle |
|
| 999 | - case TYPE_RECURSIF: |
|
| 1000 | - $nom = $p->id_boucle; |
|
| 1001 | - $newdescr = $descr; |
|
| 1002 | - $newdescr['id_mere'] = $nom; |
|
| 1003 | - $newdescr['niv']++; |
|
| 1004 | - $avant = calculer_liste($p->avant, |
|
| 1005 | - $newdescr, $boucles, $id_boucle); |
|
| 1006 | - $apres = calculer_liste($p->apres, |
|
| 1007 | - $newdescr, $boucles, $id_boucle); |
|
| 1008 | - $newdescr['niv']--; |
|
| 1009 | - $altern = calculer_liste($p->altern, |
|
| 1010 | - $newdescr, $boucles, $id_boucle); |
|
| 1011 | - if (($avant === false) or ($apres === false) or ($altern === false)) { |
|
| 1012 | - $err_e_c = true; |
|
| 1013 | - $code = "''"; |
|
| 1014 | - } else { |
|
| 1015 | - $code = 'BOUCLE' . |
|
| 1016 | - str_replace("-", "_", $nom) . $descr['nom'] . |
|
| 1017 | - '($Cache, $Pile, $doublons, $Numrows, $SP)'; |
|
| 1018 | - $commentaire = "?$nom"; |
|
| 1019 | - if (!$boucles[$nom]->milieu |
|
| 1020 | - and $boucles[$nom]->type_requete <> TYPE_RECURSIF |
|
| 1021 | - ) { |
|
| 1022 | - if ($altern != "''") { |
|
| 1023 | - $code .= "\n. $altern"; |
|
| 1024 | - } |
|
| 1025 | - if ($avant <> "''" or $apres <> "''") { |
|
| 1026 | - spip_log("boucle $nom toujours vide, code superflu dans $descr[sourcefile]"); |
|
| 1027 | - } |
|
| 1028 | - $avant = $apres = $altern = "''"; |
|
| 1029 | - } else { |
|
| 1030 | - if ($altern != "''") { |
|
| 1031 | - $altern = "($altern)"; |
|
| 1032 | - } |
|
| 1033 | - } |
|
| 1034 | - } |
|
| 1035 | - break; |
|
| 1036 | - |
|
| 1037 | - case 'idiome': |
|
| 1038 | - $l = array(); |
|
| 1039 | - $code = ''; |
|
| 1040 | - foreach ($p->arg as $k => $v) { |
|
| 1041 | - $_v = calculer_liste($v, $descr, $boucles, $id_boucle); |
|
| 1042 | - if ($k) { |
|
| 1043 | - $l[] = _q($k) . ' => ' . $_v; |
|
| 1044 | - } else { |
|
| 1045 | - $code = $_v; |
|
| 1046 | - } |
|
| 1047 | - } |
|
| 1048 | - // Si le module n'est pas fourni, l'expliciter sauf si calculé |
|
| 1049 | - if ($p->module) { |
|
| 1050 | - $m = $p->module . ':' . $p->nom_champ; |
|
| 1051 | - } elseif ($p->nom_champ) { |
|
| 1052 | - $m = MODULES_IDIOMES . ':' . $p->nom_champ; |
|
| 1053 | - } else { |
|
| 1054 | - $m = ''; |
|
| 1055 | - } |
|
| 1056 | - |
|
| 1057 | - $code = (!$code ? "'$m'" : |
|
| 1058 | - ($m ? "'$m' . $code" : |
|
| 1059 | - ("(strpos(\$x=$code, ':') ? \$x : ('" . MODULES_IDIOMES . ":' . \$x))"))) |
|
| 1060 | - . (!$l ? '' : (", array(" . implode(",\n", $l) . ")")); |
|
| 1061 | - $code = "_T($code)"; |
|
| 1062 | - if ($p->param) { |
|
| 1063 | - $p->id_boucle = $id_boucle; |
|
| 1064 | - $p->boucles = &$boucles; |
|
| 1065 | - $code = compose_filtres($p, $code); |
|
| 1066 | - } |
|
| 1067 | - $commentaire = ":"; |
|
| 1068 | - $avant = ''; |
|
| 1069 | - $apres = ''; |
|
| 1070 | - $altern = "''"; |
|
| 1071 | - break; |
|
| 1072 | - |
|
| 1073 | - case 'champ': |
|
| 1074 | - |
|
| 1075 | - // cette structure pourrait etre completee des le phrase' (a faire) |
|
| 1076 | - $p->id_boucle = $id_boucle; |
|
| 1077 | - $p->boucles = &$boucles; |
|
| 1078 | - $p->descr = $descr; |
|
| 1079 | - #$p->interdire_scripts = true; |
|
| 1080 | - $p->type_requete = $type; |
|
| 1081 | - |
|
| 1082 | - $code = calculer_champ($p); |
|
| 1083 | - $commentaire = '#' . $p->nom_champ . $p->etoile; |
|
| 1084 | - $avant = calculer_liste($p->avant, |
|
| 1085 | - $descr, $boucles, $id_boucle); |
|
| 1086 | - $apres = calculer_liste($p->apres, |
|
| 1087 | - $descr, $boucles, $id_boucle); |
|
| 1088 | - $altern = "''"; |
|
| 1089 | - // Si la valeur est destinee a une comparaison a '' |
|
| 1090 | - // forcer la conversion en une chaine par strval |
|
| 1091 | - // si ca peut etre autre chose qu'une chaine |
|
| 1092 | - if (($avant != "''" or $apres != "''") |
|
| 1093 | - and $code[0] != "'" |
|
| 942 | + $codes = array(); |
|
| 943 | + // cas de la boucle recursive |
|
| 944 | + if (is_array($id_boucle)) { |
|
| 945 | + $id_boucle = $id_boucle[0]; |
|
| 946 | + } |
|
| 947 | + $type = !$id_boucle ? '' : $boucles[$id_boucle]->type_requete; |
|
| 948 | + $tab = str_repeat("\t", ++$descr['niv']); |
|
| 949 | + $mode = _request('var_mode_affiche'); |
|
| 950 | + $err_e_c = ''; |
|
| 951 | + // chaque commentaire introduit dans le code doit commencer |
|
| 952 | + // par un caractere distinguant le cas, pour exploitation par debug. |
|
| 953 | + foreach ($tableau as $p) { |
|
| 954 | + |
|
| 955 | + switch ($p->type) { |
|
| 956 | + // texte seul |
|
| 957 | + case 'texte': |
|
| 958 | + $code = sandbox_composer_texte($p->texte, $p); |
|
| 959 | + $commentaire = strlen($p->texte) . " signes"; |
|
| 960 | + $avant = ''; |
|
| 961 | + $apres = ''; |
|
| 962 | + $altern = "''"; |
|
| 963 | + break; |
|
| 964 | + |
|
| 965 | + case 'polyglotte': |
|
| 966 | + $code = ""; |
|
| 967 | + foreach ($p->traductions as $k => $v) { |
|
| 968 | + $code .= ",'" . |
|
| 969 | + str_replace(array("\\", "'"), array("\\\\", "\\'"), $k) . |
|
| 970 | + "' => '" . |
|
| 971 | + str_replace(array("\\", "'"), array("\\\\", "\\'"), $v) . |
|
| 972 | + "'"; |
|
| 973 | + } |
|
| 974 | + $code = "choisir_traduction(array(" . |
|
| 975 | + substr($code, 1) . |
|
| 976 | + "))"; |
|
| 977 | + $commentaire = '&'; |
|
| 978 | + $avant = ''; |
|
| 979 | + $apres = ''; |
|
| 980 | + $altern = "''"; |
|
| 981 | + break; |
|
| 982 | + |
|
| 983 | + // inclure |
|
| 984 | + case 'include': |
|
| 985 | + $p->descr = $descr; |
|
| 986 | + $code = calculer_inclure($p, $boucles, $id_boucle); |
|
| 987 | + if ($code === false) { |
|
| 988 | + $err_e_c = true; |
|
| 989 | + $code = "''"; |
|
| 990 | + } else { |
|
| 991 | + $commentaire = '<INCLURE ' . addslashes(str_replace("\n", ' ', $code)) . '>'; |
|
| 992 | + $avant = ''; |
|
| 993 | + $apres = ''; |
|
| 994 | + $altern = "''"; |
|
| 995 | + } |
|
| 996 | + break; |
|
| 997 | + |
|
| 998 | + // boucle |
|
| 999 | + case TYPE_RECURSIF: |
|
| 1000 | + $nom = $p->id_boucle; |
|
| 1001 | + $newdescr = $descr; |
|
| 1002 | + $newdescr['id_mere'] = $nom; |
|
| 1003 | + $newdescr['niv']++; |
|
| 1004 | + $avant = calculer_liste($p->avant, |
|
| 1005 | + $newdescr, $boucles, $id_boucle); |
|
| 1006 | + $apres = calculer_liste($p->apres, |
|
| 1007 | + $newdescr, $boucles, $id_boucle); |
|
| 1008 | + $newdescr['niv']--; |
|
| 1009 | + $altern = calculer_liste($p->altern, |
|
| 1010 | + $newdescr, $boucles, $id_boucle); |
|
| 1011 | + if (($avant === false) or ($apres === false) or ($altern === false)) { |
|
| 1012 | + $err_e_c = true; |
|
| 1013 | + $code = "''"; |
|
| 1014 | + } else { |
|
| 1015 | + $code = 'BOUCLE' . |
|
| 1016 | + str_replace("-", "_", $nom) . $descr['nom'] . |
|
| 1017 | + '($Cache, $Pile, $doublons, $Numrows, $SP)'; |
|
| 1018 | + $commentaire = "?$nom"; |
|
| 1019 | + if (!$boucles[$nom]->milieu |
|
| 1020 | + and $boucles[$nom]->type_requete <> TYPE_RECURSIF |
|
| 1021 | + ) { |
|
| 1022 | + if ($altern != "''") { |
|
| 1023 | + $code .= "\n. $altern"; |
|
| 1024 | + } |
|
| 1025 | + if ($avant <> "''" or $apres <> "''") { |
|
| 1026 | + spip_log("boucle $nom toujours vide, code superflu dans $descr[sourcefile]"); |
|
| 1027 | + } |
|
| 1028 | + $avant = $apres = $altern = "''"; |
|
| 1029 | + } else { |
|
| 1030 | + if ($altern != "''") { |
|
| 1031 | + $altern = "($altern)"; |
|
| 1032 | + } |
|
| 1033 | + } |
|
| 1034 | + } |
|
| 1035 | + break; |
|
| 1036 | + |
|
| 1037 | + case 'idiome': |
|
| 1038 | + $l = array(); |
|
| 1039 | + $code = ''; |
|
| 1040 | + foreach ($p->arg as $k => $v) { |
|
| 1041 | + $_v = calculer_liste($v, $descr, $boucles, $id_boucle); |
|
| 1042 | + if ($k) { |
|
| 1043 | + $l[] = _q($k) . ' => ' . $_v; |
|
| 1044 | + } else { |
|
| 1045 | + $code = $_v; |
|
| 1046 | + } |
|
| 1047 | + } |
|
| 1048 | + // Si le module n'est pas fourni, l'expliciter sauf si calculé |
|
| 1049 | + if ($p->module) { |
|
| 1050 | + $m = $p->module . ':' . $p->nom_champ; |
|
| 1051 | + } elseif ($p->nom_champ) { |
|
| 1052 | + $m = MODULES_IDIOMES . ':' . $p->nom_champ; |
|
| 1053 | + } else { |
|
| 1054 | + $m = ''; |
|
| 1055 | + } |
|
| 1056 | + |
|
| 1057 | + $code = (!$code ? "'$m'" : |
|
| 1058 | + ($m ? "'$m' . $code" : |
|
| 1059 | + ("(strpos(\$x=$code, ':') ? \$x : ('" . MODULES_IDIOMES . ":' . \$x))"))) |
|
| 1060 | + . (!$l ? '' : (", array(" . implode(",\n", $l) . ")")); |
|
| 1061 | + $code = "_T($code)"; |
|
| 1062 | + if ($p->param) { |
|
| 1063 | + $p->id_boucle = $id_boucle; |
|
| 1064 | + $p->boucles = &$boucles; |
|
| 1065 | + $code = compose_filtres($p, $code); |
|
| 1066 | + } |
|
| 1067 | + $commentaire = ":"; |
|
| 1068 | + $avant = ''; |
|
| 1069 | + $apres = ''; |
|
| 1070 | + $altern = "''"; |
|
| 1071 | + break; |
|
| 1072 | + |
|
| 1073 | + case 'champ': |
|
| 1074 | + |
|
| 1075 | + // cette structure pourrait etre completee des le phrase' (a faire) |
|
| 1076 | + $p->id_boucle = $id_boucle; |
|
| 1077 | + $p->boucles = &$boucles; |
|
| 1078 | + $p->descr = $descr; |
|
| 1079 | + #$p->interdire_scripts = true; |
|
| 1080 | + $p->type_requete = $type; |
|
| 1081 | + |
|
| 1082 | + $code = calculer_champ($p); |
|
| 1083 | + $commentaire = '#' . $p->nom_champ . $p->etoile; |
|
| 1084 | + $avant = calculer_liste($p->avant, |
|
| 1085 | + $descr, $boucles, $id_boucle); |
|
| 1086 | + $apres = calculer_liste($p->apres, |
|
| 1087 | + $descr, $boucles, $id_boucle); |
|
| 1088 | + $altern = "''"; |
|
| 1089 | + // Si la valeur est destinee a une comparaison a '' |
|
| 1090 | + // forcer la conversion en une chaine par strval |
|
| 1091 | + // si ca peut etre autre chose qu'une chaine |
|
| 1092 | + if (($avant != "''" or $apres != "''") |
|
| 1093 | + and $code[0] != "'" |
|
| 1094 | 1094 | # AND (strpos($code,'interdire_scripts') !== 0) |
| 1095 | - and !preg_match(_REGEXP_COND_VIDE_NONVIDE, $code) |
|
| 1096 | - and !preg_match(_REGEXP_COND_NONVIDE_VIDE, $code) |
|
| 1097 | - and !preg_match(_REGEXP_CONCAT_NON_VIDE, $code) |
|
| 1098 | - ) { |
|
| 1099 | - $code = "strval($code)"; |
|
| 1100 | - } |
|
| 1101 | - break; |
|
| 1102 | - |
|
| 1103 | - default: |
|
| 1104 | - // Erreur de construction de l'arbre de syntaxe abstraite |
|
| 1105 | - $code = "''"; |
|
| 1106 | - $p->descr = $descr; |
|
| 1107 | - $err_e_c = _T('zbug_erreur_compilation'); |
|
| 1108 | - erreur_squelette($err_e_c, $p); |
|
| 1109 | - } // switch |
|
| 1110 | - |
|
| 1111 | - if ($code != "''") { |
|
| 1112 | - $code = compile_retour($code, $avant, $apres, $altern, $tab, $descr['niv']); |
|
| 1113 | - $codes[] = (($mode == 'validation') ? |
|
| 1114 | - "array($code, '$commentaire', " . $p->ligne . ")" |
|
| 1115 | - : (($mode == 'code') ? |
|
| 1116 | - "\n// $commentaire\n$code" : |
|
| 1117 | - $code)); |
|
| 1118 | - } |
|
| 1119 | - } // foreach |
|
| 1120 | - |
|
| 1121 | - return $err_e_c ? false : $codes; |
|
| 1095 | + and !preg_match(_REGEXP_COND_VIDE_NONVIDE, $code) |
|
| 1096 | + and !preg_match(_REGEXP_COND_NONVIDE_VIDE, $code) |
|
| 1097 | + and !preg_match(_REGEXP_CONCAT_NON_VIDE, $code) |
|
| 1098 | + ) { |
|
| 1099 | + $code = "strval($code)"; |
|
| 1100 | + } |
|
| 1101 | + break; |
|
| 1102 | + |
|
| 1103 | + default: |
|
| 1104 | + // Erreur de construction de l'arbre de syntaxe abstraite |
|
| 1105 | + $code = "''"; |
|
| 1106 | + $p->descr = $descr; |
|
| 1107 | + $err_e_c = _T('zbug_erreur_compilation'); |
|
| 1108 | + erreur_squelette($err_e_c, $p); |
|
| 1109 | + } // switch |
|
| 1110 | + |
|
| 1111 | + if ($code != "''") { |
|
| 1112 | + $code = compile_retour($code, $avant, $apres, $altern, $tab, $descr['niv']); |
|
| 1113 | + $codes[] = (($mode == 'validation') ? |
|
| 1114 | + "array($code, '$commentaire', " . $p->ligne . ")" |
|
| 1115 | + : (($mode == 'code') ? |
|
| 1116 | + "\n// $commentaire\n$code" : |
|
| 1117 | + $code)); |
|
| 1118 | + } |
|
| 1119 | + } // foreach |
|
| 1120 | + |
|
| 1121 | + return $err_e_c ? false : $codes; |
|
| 1122 | 1122 | } |
| 1123 | 1123 | |
| 1124 | 1124 | // production d'une expression conditionnelle ((v=EXP) ? (p . v .s) : a) |
@@ -1127,56 +1127,56 @@ discard block |
||
| 1127 | 1127 | |
| 1128 | 1128 | // http://code.spip.net/@compile_retour |
| 1129 | 1129 | function compile_retour($code, $avant, $apres, $altern, $tab, $n) { |
| 1130 | - if ($avant == "''") { |
|
| 1131 | - $avant = ''; |
|
| 1132 | - } |
|
| 1133 | - if ($apres == "''") { |
|
| 1134 | - $apres = ''; |
|
| 1135 | - } |
|
| 1136 | - if (!$avant and !$apres and ($altern === "''")) { |
|
| 1137 | - return $code; |
|
| 1138 | - } |
|
| 1139 | - |
|
| 1140 | - if (preg_match(_REGEXP_CONCAT_NON_VIDE, $code)) { |
|
| 1141 | - $t = $code; |
|
| 1142 | - $cond = ''; |
|
| 1143 | - } elseif (preg_match(_REGEXP_COND_VIDE_NONVIDE, $code, $r)) { |
|
| 1144 | - $t = $r[2]; |
|
| 1145 | - $cond = '!' . $r[1]; |
|
| 1146 | - } else { |
|
| 1147 | - if (preg_match(_REGEXP_COND_NONVIDE_VIDE, $code, $r)) { |
|
| 1148 | - $t = $r[2]; |
|
| 1149 | - $cond = $r[1]; |
|
| 1150 | - } else { |
|
| 1151 | - $t = '$t' . $n; |
|
| 1152 | - $cond = "($t = $code)!==''"; |
|
| 1153 | - } |
|
| 1154 | - } |
|
| 1155 | - |
|
| 1156 | - $res = (!$avant ? "" : "$avant . ") . |
|
| 1157 | - $t . |
|
| 1158 | - (!$apres ? "" : " . $apres"); |
|
| 1159 | - |
|
| 1160 | - if ($res !== $t) { |
|
| 1161 | - $res = "($res)"; |
|
| 1162 | - } |
|
| 1163 | - |
|
| 1164 | - return !$cond ? $res : "($cond ?\n\t$tab$res :\n\t$tab$altern)"; |
|
| 1130 | + if ($avant == "''") { |
|
| 1131 | + $avant = ''; |
|
| 1132 | + } |
|
| 1133 | + if ($apres == "''") { |
|
| 1134 | + $apres = ''; |
|
| 1135 | + } |
|
| 1136 | + if (!$avant and !$apres and ($altern === "''")) { |
|
| 1137 | + return $code; |
|
| 1138 | + } |
|
| 1139 | + |
|
| 1140 | + if (preg_match(_REGEXP_CONCAT_NON_VIDE, $code)) { |
|
| 1141 | + $t = $code; |
|
| 1142 | + $cond = ''; |
|
| 1143 | + } elseif (preg_match(_REGEXP_COND_VIDE_NONVIDE, $code, $r)) { |
|
| 1144 | + $t = $r[2]; |
|
| 1145 | + $cond = '!' . $r[1]; |
|
| 1146 | + } else { |
|
| 1147 | + if (preg_match(_REGEXP_COND_NONVIDE_VIDE, $code, $r)) { |
|
| 1148 | + $t = $r[2]; |
|
| 1149 | + $cond = $r[1]; |
|
| 1150 | + } else { |
|
| 1151 | + $t = '$t' . $n; |
|
| 1152 | + $cond = "($t = $code)!==''"; |
|
| 1153 | + } |
|
| 1154 | + } |
|
| 1155 | + |
|
| 1156 | + $res = (!$avant ? "" : "$avant . ") . |
|
| 1157 | + $t . |
|
| 1158 | + (!$apres ? "" : " . $apres"); |
|
| 1159 | + |
|
| 1160 | + if ($res !== $t) { |
|
| 1161 | + $res = "($res)"; |
|
| 1162 | + } |
|
| 1163 | + |
|
| 1164 | + return !$cond ? $res : "($cond ?\n\t$tab$res :\n\t$tab$altern)"; |
|
| 1165 | 1165 | } |
| 1166 | 1166 | |
| 1167 | 1167 | |
| 1168 | 1168 | function compile_inclure_doublons($lexemes) { |
| 1169 | - foreach ($lexemes as $v) { |
|
| 1170 | - if ($v->type === 'include' and $v->param) { |
|
| 1171 | - foreach ($v->param as $r) { |
|
| 1172 | - if (trim($r[0]) === 'doublons') { |
|
| 1173 | - return true; |
|
| 1174 | - } |
|
| 1175 | - } |
|
| 1176 | - } |
|
| 1177 | - } |
|
| 1178 | - |
|
| 1179 | - return false; |
|
| 1169 | + foreach ($lexemes as $v) { |
|
| 1170 | + if ($v->type === 'include' and $v->param) { |
|
| 1171 | + foreach ($v->param as $r) { |
|
| 1172 | + if (trim($r[0]) === 'doublons') { |
|
| 1173 | + return true; |
|
| 1174 | + } |
|
| 1175 | + } |
|
| 1176 | + } |
|
| 1177 | + } |
|
| 1178 | + |
|
| 1179 | + return false; |
|
| 1180 | 1180 | } |
| 1181 | 1181 | |
| 1182 | 1182 | // Prend en argument le texte d'un squelette, le nom de son fichier d'origine, |
@@ -1196,348 +1196,348 @@ discard block |
||
| 1196 | 1196 | |
| 1197 | 1197 | // http://code.spip.net/@public_compiler_dist |
| 1198 | 1198 | function public_compiler_dist($squelette, $nom, $gram, $sourcefile, $connect = '') { |
| 1199 | - // Pre-traitement : reperer le charset du squelette, et le convertir |
|
| 1200 | - // Bonus : supprime le BOM |
|
| 1201 | - include_spip('inc/charsets'); |
|
| 1202 | - $squelette = transcoder_page($squelette); |
|
| 1203 | - |
|
| 1204 | - // rendre inertes les echappements de #[](){}<> |
|
| 1205 | - $i = 0; |
|
| 1206 | - while (false !== strpos($squelette, $inerte = '-INERTE' . $i)) { |
|
| 1207 | - $i++; |
|
| 1208 | - } |
|
| 1209 | - $squelette = preg_replace_callback(',\\\\([#[()\]{}<>]),', |
|
| 1210 | - function($a) use ($inerte) { |
|
| 1211 | - return "$inerte-" . ord($a[1]) . '-'; |
|
| 1212 | - }, |
|
| 1213 | - $squelette, |
|
| 1214 | - -1, |
|
| 1215 | - $esc |
|
| 1216 | - ); |
|
| 1217 | - |
|
| 1218 | - $descr = array( |
|
| 1219 | - 'nom' => $nom, |
|
| 1220 | - 'gram' => $gram, |
|
| 1221 | - 'sourcefile' => $sourcefile, |
|
| 1222 | - 'squelette' => $squelette |
|
| 1223 | - ); |
|
| 1224 | - |
|
| 1225 | - // Phraser le squelette, selon sa grammaire |
|
| 1226 | - |
|
| 1227 | - $boucles = array(); |
|
| 1228 | - $f = charger_fonction('phraser_' . $gram, 'public'); |
|
| 1229 | - |
|
| 1230 | - $squelette = $f($squelette, '', $boucles, $descr); |
|
| 1231 | - |
|
| 1232 | - $boucles = compiler_squelette($squelette, $boucles, $nom, $descr, $sourcefile, $connect); |
|
| 1233 | - |
|
| 1234 | - // restituer les echappements |
|
| 1235 | - if ($esc) { |
|
| 1236 | - foreach ($boucles as $i => $boucle) { |
|
| 1237 | - $boucles[$i]->return = preg_replace_callback( |
|
| 1238 | - ",$inerte-(\d+)-,", |
|
| 1239 | - function($a) { |
|
| 1240 | - return chr($a[1]); |
|
| 1241 | - }, |
|
| 1242 | - $boucle->return |
|
| 1243 | - ); |
|
| 1244 | - $boucles[$i]->descr['squelette'] = preg_replace_callback( |
|
| 1245 | - ",$inerte-(\d+)-,", |
|
| 1246 | - function($a) { |
|
| 1247 | - return "\\\\" . chr($a[1]); |
|
| 1248 | - }, |
|
| 1249 | - $boucle->descr['squelette'] |
|
| 1250 | - ); |
|
| 1251 | - } |
|
| 1252 | - } |
|
| 1253 | - |
|
| 1254 | - $debug = ($boucles and defined('_VAR_MODE') and _VAR_MODE == 'debug'); |
|
| 1255 | - if ($debug) { |
|
| 1256 | - include_spip('public/decompiler'); |
|
| 1257 | - foreach ($boucles as $id => $boucle) { |
|
| 1258 | - if ($id) { |
|
| 1259 | - $decomp = "\n/* BOUCLE " . |
|
| 1260 | - $boucle->type_requete . |
|
| 1261 | - " " . |
|
| 1262 | - str_replace('*/', '* /', public_decompiler($boucle, $gram, 0, 'criteres')) . |
|
| 1263 | - ($boucle->debug ? "\n *\n * " . implode("\n * ", $boucle->debug) . "\n" : '') . |
|
| 1264 | - " */\n"; |
|
| 1265 | - } else { |
|
| 1266 | - $decomp = ("\n/*\n" . |
|
| 1267 | - str_replace('*/', '* /', public_decompiler($squelette, $gram)) |
|
| 1268 | - . "\n*/"); |
|
| 1269 | - } |
|
| 1270 | - $boucles[$id]->return = $decomp . $boucle->return; |
|
| 1271 | - $GLOBALS['debug_objets']['code'][$nom . $id] = $boucle->return; |
|
| 1272 | - } |
|
| 1273 | - } |
|
| 1274 | - |
|
| 1275 | - return $boucles; |
|
| 1199 | + // Pre-traitement : reperer le charset du squelette, et le convertir |
|
| 1200 | + // Bonus : supprime le BOM |
|
| 1201 | + include_spip('inc/charsets'); |
|
| 1202 | + $squelette = transcoder_page($squelette); |
|
| 1203 | + |
|
| 1204 | + // rendre inertes les echappements de #[](){}<> |
|
| 1205 | + $i = 0; |
|
| 1206 | + while (false !== strpos($squelette, $inerte = '-INERTE' . $i)) { |
|
| 1207 | + $i++; |
|
| 1208 | + } |
|
| 1209 | + $squelette = preg_replace_callback(',\\\\([#[()\]{}<>]),', |
|
| 1210 | + function($a) use ($inerte) { |
|
| 1211 | + return "$inerte-" . ord($a[1]) . '-'; |
|
| 1212 | + }, |
|
| 1213 | + $squelette, |
|
| 1214 | + -1, |
|
| 1215 | + $esc |
|
| 1216 | + ); |
|
| 1217 | + |
|
| 1218 | + $descr = array( |
|
| 1219 | + 'nom' => $nom, |
|
| 1220 | + 'gram' => $gram, |
|
| 1221 | + 'sourcefile' => $sourcefile, |
|
| 1222 | + 'squelette' => $squelette |
|
| 1223 | + ); |
|
| 1224 | + |
|
| 1225 | + // Phraser le squelette, selon sa grammaire |
|
| 1226 | + |
|
| 1227 | + $boucles = array(); |
|
| 1228 | + $f = charger_fonction('phraser_' . $gram, 'public'); |
|
| 1229 | + |
|
| 1230 | + $squelette = $f($squelette, '', $boucles, $descr); |
|
| 1231 | + |
|
| 1232 | + $boucles = compiler_squelette($squelette, $boucles, $nom, $descr, $sourcefile, $connect); |
|
| 1233 | + |
|
| 1234 | + // restituer les echappements |
|
| 1235 | + if ($esc) { |
|
| 1236 | + foreach ($boucles as $i => $boucle) { |
|
| 1237 | + $boucles[$i]->return = preg_replace_callback( |
|
| 1238 | + ",$inerte-(\d+)-,", |
|
| 1239 | + function($a) { |
|
| 1240 | + return chr($a[1]); |
|
| 1241 | + }, |
|
| 1242 | + $boucle->return |
|
| 1243 | + ); |
|
| 1244 | + $boucles[$i]->descr['squelette'] = preg_replace_callback( |
|
| 1245 | + ",$inerte-(\d+)-,", |
|
| 1246 | + function($a) { |
|
| 1247 | + return "\\\\" . chr($a[1]); |
|
| 1248 | + }, |
|
| 1249 | + $boucle->descr['squelette'] |
|
| 1250 | + ); |
|
| 1251 | + } |
|
| 1252 | + } |
|
| 1253 | + |
|
| 1254 | + $debug = ($boucles and defined('_VAR_MODE') and _VAR_MODE == 'debug'); |
|
| 1255 | + if ($debug) { |
|
| 1256 | + include_spip('public/decompiler'); |
|
| 1257 | + foreach ($boucles as $id => $boucle) { |
|
| 1258 | + if ($id) { |
|
| 1259 | + $decomp = "\n/* BOUCLE " . |
|
| 1260 | + $boucle->type_requete . |
|
| 1261 | + " " . |
|
| 1262 | + str_replace('*/', '* /', public_decompiler($boucle, $gram, 0, 'criteres')) . |
|
| 1263 | + ($boucle->debug ? "\n *\n * " . implode("\n * ", $boucle->debug) . "\n" : '') . |
|
| 1264 | + " */\n"; |
|
| 1265 | + } else { |
|
| 1266 | + $decomp = ("\n/*\n" . |
|
| 1267 | + str_replace('*/', '* /', public_decompiler($squelette, $gram)) |
|
| 1268 | + . "\n*/"); |
|
| 1269 | + } |
|
| 1270 | + $boucles[$id]->return = $decomp . $boucle->return; |
|
| 1271 | + $GLOBALS['debug_objets']['code'][$nom . $id] = $boucle->return; |
|
| 1272 | + } |
|
| 1273 | + } |
|
| 1274 | + |
|
| 1275 | + return $boucles; |
|
| 1276 | 1276 | } |
| 1277 | 1277 | |
| 1278 | 1278 | // Point d'entree pour arbre de syntaxe abstraite fourni en premier argument |
| 1279 | 1279 | // Autres specifications comme ci-dessus |
| 1280 | 1280 | |
| 1281 | 1281 | function compiler_squelette($squelette, $boucles, $nom, $descr, $sourcefile, $connect = '') { |
| 1282 | - static $trouver_table; |
|
| 1283 | - spip_timer('calcul_skel'); |
|
| 1284 | - |
|
| 1285 | - if (defined('_VAR_MODE') and _VAR_MODE == 'debug') { |
|
| 1286 | - $GLOBALS['debug_objets']['squelette'][$nom] = $descr['squelette']; |
|
| 1287 | - $GLOBALS['debug_objets']['sourcefile'][$nom] = $sourcefile; |
|
| 1288 | - |
|
| 1289 | - if (!isset($GLOBALS['debug_objets']['principal'])) { |
|
| 1290 | - $GLOBALS['debug_objets']['principal'] = $nom; |
|
| 1291 | - } |
|
| 1292 | - } |
|
| 1293 | - foreach ($boucles as $id => $boucle) { |
|
| 1294 | - $GLOBALS['debug_objets']['boucle'][$nom . $id] = $boucle; |
|
| 1295 | - } |
|
| 1296 | - $descr['documents'] = compile_inclure_doublons($squelette); |
|
| 1297 | - |
|
| 1298 | - // Demander la description des tables une fois pour toutes |
|
| 1299 | - if (!$trouver_table) { |
|
| 1300 | - $trouver_table = charger_fonction('trouver_table', 'base'); |
|
| 1301 | - } |
|
| 1302 | - |
|
| 1303 | - // reperer si les doublons sont demandes |
|
| 1304 | - // pour un inclure ou une boucle document |
|
| 1305 | - // c'est utile a la fonction champs_traitements |
|
| 1306 | - foreach ($boucles as $id => $boucle) { |
|
| 1307 | - if (!($type = $boucle->type_requete)) { |
|
| 1308 | - continue; |
|
| 1309 | - } |
|
| 1310 | - if (!$descr['documents'] and ( |
|
| 1311 | - (($type == 'documents') and $boucle->doublons) or |
|
| 1312 | - compile_inclure_doublons($boucle->avant) or |
|
| 1313 | - compile_inclure_doublons($boucle->apres) or |
|
| 1314 | - compile_inclure_doublons($boucle->milieu) or |
|
| 1315 | - compile_inclure_doublons($boucle->altern)) |
|
| 1316 | - ) { |
|
| 1317 | - $descr['documents'] = true; |
|
| 1318 | - } |
|
| 1319 | - if ($type != TYPE_RECURSIF) { |
|
| 1320 | - if (!$boucles[$id]->sql_serveur and $connect) { |
|
| 1321 | - $boucles[$id]->sql_serveur = $connect; |
|
| 1322 | - } |
|
| 1323 | - |
|
| 1324 | - // chercher dans les iterateurs du repertoire iterateur/ |
|
| 1325 | - if ($g = charger_fonction( |
|
| 1326 | - preg_replace('/\W/', '_', $boucle->type_requete), 'iterateur', true) |
|
| 1327 | - ) { |
|
| 1328 | - $boucles[$id] = $g($boucle); |
|
| 1329 | - |
|
| 1330 | - // sinon, en cas de requeteur d'un type predefini, |
|
| 1331 | - // utiliser les informations donnees par le requeteur |
|
| 1332 | - // cas "php:xx" et "data:xx". |
|
| 1333 | - } else { |
|
| 1334 | - if ($boucle->sql_serveur and $requeteur = charger_fonction($boucle->sql_serveur, 'requeteur', true)) { |
|
| 1335 | - $requeteur($boucles, $boucle, $id); |
|
| 1336 | - |
|
| 1337 | - // utiliser la description des champs transmis |
|
| 1338 | - } else { |
|
| 1339 | - $show = $trouver_table($type, $boucles[$id]->sql_serveur); |
|
| 1340 | - // si la table n'existe pas avec le connecteur par defaut, |
|
| 1341 | - // c'est peut etre une table qui necessite son connecteur dedie fourni |
|
| 1342 | - // permet une ecriture allegee (GEO) -> (geo:GEO) |
|
| 1343 | - if (!$show |
|
| 1344 | - and $show = $trouver_table($type, strtolower($type)) |
|
| 1345 | - ) { |
|
| 1346 | - $boucles[$id]->sql_serveur = strtolower($type); |
|
| 1347 | - } |
|
| 1348 | - if ($show) { |
|
| 1349 | - $boucles[$id]->show = $show; |
|
| 1350 | - // recopie les infos les plus importantes |
|
| 1351 | - $boucles[$id]->primary = isset($show['key']["PRIMARY KEY"]) ? $show['key']["PRIMARY KEY"] : ''; |
|
| 1352 | - $boucles[$id]->id_table = $x = preg_replace(",^spip_,", "", $show['id_table']); |
|
| 1353 | - $boucles[$id]->from[$x] = $nom_table = $show['table']; |
|
| 1354 | - $boucles[$id]->iterateur = 'SQL'; |
|
| 1355 | - |
|
| 1356 | - if (empty($boucles[$id]->descr)) { |
|
| 1357 | - $boucles[$id]->descr = &$descr; |
|
| 1358 | - } |
|
| 1359 | - if ((!$boucles[$id]->jointures) |
|
| 1360 | - and is_array($show['tables_jointures']) |
|
| 1361 | - and count($x = $show['tables_jointures']) |
|
| 1362 | - ) { |
|
| 1363 | - $boucles[$id]->jointures = $x; |
|
| 1364 | - } |
|
| 1365 | - if ($boucles[$id]->jointures_explicites) { |
|
| 1366 | - $jointures = preg_split("/\s+/", $boucles[$id]->jointures_explicites); |
|
| 1367 | - while ($j = array_pop($jointures)) { |
|
| 1368 | - array_unshift($boucles[$id]->jointures, $j); |
|
| 1369 | - } |
|
| 1370 | - } |
|
| 1371 | - } else { |
|
| 1372 | - // Pas une erreur si la table est optionnelle |
|
| 1373 | - if ($boucles[$id]->table_optionnelle) { |
|
| 1374 | - $boucles[$id]->type_requete = ''; |
|
| 1375 | - } else { |
|
| 1376 | - $boucles[$id]->type_requete = false; |
|
| 1377 | - $boucle = $boucles[$id]; |
|
| 1378 | - $x = (!$boucle->sql_serveur ? '' : |
|
| 1379 | - ($boucle->sql_serveur . ":")) . |
|
| 1380 | - $type; |
|
| 1381 | - $msg = array( |
|
| 1382 | - 'zbug_table_inconnue', |
|
| 1383 | - array('table' => $x) |
|
| 1384 | - ); |
|
| 1385 | - erreur_squelette($msg, $boucle); |
|
| 1386 | - } |
|
| 1387 | - } |
|
| 1388 | - } |
|
| 1389 | - } |
|
| 1390 | - } |
|
| 1391 | - } |
|
| 1392 | - |
|
| 1393 | - // Commencer par reperer les boucles appelees explicitement |
|
| 1394 | - // car elles indexent les arguments de maniere derogatoire |
|
| 1395 | - foreach ($boucles as $id => $boucle) { |
|
| 1396 | - if ($boucle->type_requete == TYPE_RECURSIF and $boucle->param) { |
|
| 1397 | - $boucles[$id]->descr = &$descr; |
|
| 1398 | - $rec = &$boucles[$boucle->param[0]]; |
|
| 1399 | - if (!$rec) { |
|
| 1400 | - $msg = array( |
|
| 1401 | - 'zbug_boucle_recursive_undef', |
|
| 1402 | - array('nom' => $boucle->param[0]) |
|
| 1403 | - ); |
|
| 1404 | - erreur_squelette($msg, $boucle); |
|
| 1405 | - $boucles[$id]->type_requete = false; |
|
| 1406 | - } else { |
|
| 1407 | - $rec->externe = $id; |
|
| 1408 | - $descr['id_mere'] = $id; |
|
| 1409 | - $boucles[$id]->return = |
|
| 1410 | - calculer_liste(array($rec), |
|
| 1411 | - $descr, |
|
| 1412 | - $boucles, |
|
| 1413 | - $boucle->param); |
|
| 1414 | - } |
|
| 1415 | - } |
|
| 1416 | - } |
|
| 1417 | - foreach ($boucles as $id => $boucle) { |
|
| 1418 | - $id = strval($id); // attention au type dans index_pile |
|
| 1419 | - $type = $boucle->type_requete; |
|
| 1420 | - if ($type and $type != TYPE_RECURSIF) { |
|
| 1421 | - $res = ''; |
|
| 1422 | - if ($boucle->param) { |
|
| 1423 | - // retourne un tableau en cas d'erreur |
|
| 1424 | - $res = calculer_criteres($id, $boucles); |
|
| 1425 | - } |
|
| 1426 | - $descr['id_mere'] = $id; |
|
| 1427 | - $boucles[$id]->return = |
|
| 1428 | - calculer_liste($boucle->milieu, |
|
| 1429 | - $descr, |
|
| 1430 | - $boucles, |
|
| 1431 | - $id); |
|
| 1432 | - // Si les criteres se sont mal compiles |
|
| 1433 | - // ne pas tenter d'assembler le code final |
|
| 1434 | - // (mais compiler le corps pour detection d'erreurs) |
|
| 1435 | - if (is_array($res)) { |
|
| 1436 | - $boucles[$id]->type_requete = false; |
|
| 1437 | - } |
|
| 1438 | - } |
|
| 1439 | - } |
|
| 1440 | - |
|
| 1441 | - // idem pour la racine |
|
| 1442 | - $descr['id_mere'] = ''; |
|
| 1443 | - $corps = calculer_liste($squelette, $descr, $boucles); |
|
| 1444 | - |
|
| 1445 | - |
|
| 1446 | - // Calcul du corps de toutes les fonctions PHP, |
|
| 1447 | - // en particulier les requetes SQL et TOTAL_BOUCLE |
|
| 1448 | - // de'terminables seulement maintenant |
|
| 1449 | - |
|
| 1450 | - foreach ($boucles as $id => $boucle) { |
|
| 1451 | - $boucle = $boucles[$id] = pipeline('pre_boucle', $boucle); |
|
| 1452 | - if ($boucle->return === false) { |
|
| 1453 | - $corps = false; |
|
| 1454 | - continue; |
|
| 1455 | - } |
|
| 1456 | - // appeler la fonction de definition de la boucle |
|
| 1457 | - |
|
| 1458 | - if ($req = $boucle->type_requete) { |
|
| 1459 | - // boucle personnalisée ? |
|
| 1460 | - $table = strtoupper($boucle->type_requete); |
|
| 1461 | - $serveur = strtolower($boucle->sql_serveur); |
|
| 1462 | - if ( |
|
| 1463 | - // fonction de boucle avec serveur & table |
|
| 1464 | - (!$serveur or |
|
| 1465 | - ((!function_exists($f = "boucle_" . $serveur . "_" . $table)) |
|
| 1466 | - and (!function_exists($f = $f . "_dist")) |
|
| 1467 | - ) |
|
| 1468 | - ) |
|
| 1469 | - // fonction de boucle avec table |
|
| 1470 | - and (!function_exists($f = "boucle_" . $table)) |
|
| 1471 | - and (!function_exists($f = $f . "_dist")) |
|
| 1472 | - ) { |
|
| 1473 | - // fonction de boucle standard |
|
| 1474 | - if (!function_exists($f = 'boucle_DEFAUT')) { |
|
| 1475 | - $f = 'boucle_DEFAUT_dist'; |
|
| 1476 | - } |
|
| 1477 | - } |
|
| 1478 | - |
|
| 1479 | - $req = "\n\n\tstatic \$command = array();\n\t" . |
|
| 1480 | - "static \$connect;\n\t" . |
|
| 1481 | - "\$command['connect'] = \$connect = " . |
|
| 1482 | - _q($boucle->sql_serveur) . |
|
| 1483 | - ";" . |
|
| 1484 | - $f($id, $boucles); |
|
| 1485 | - } else { |
|
| 1486 | - $req = ("\n\treturn '';"); |
|
| 1487 | - } |
|
| 1488 | - |
|
| 1489 | - $boucles[$id]->return = |
|
| 1490 | - "\n\nfunction BOUCLE" . strtr($id, "-", "_") . $nom . |
|
| 1491 | - '(&$Cache, &$Pile, &$doublons, &$Numrows, $SP) {' . |
|
| 1492 | - $req . |
|
| 1493 | - "\n}\n"; |
|
| 1494 | - } |
|
| 1495 | - |
|
| 1496 | - // Au final, si le corps ou un critere au moins s'est mal compile |
|
| 1497 | - // retourner False, sinon inserer leur decompilation |
|
| 1498 | - if (is_bool($corps)) { |
|
| 1499 | - return false; |
|
| 1500 | - } |
|
| 1501 | - |
|
| 1502 | - $principal = "\nfunction " . $nom . '($Cache, $Pile, $doublons = array(), $Numrows = array(), $SP = 0) { |
|
| 1282 | + static $trouver_table; |
|
| 1283 | + spip_timer('calcul_skel'); |
|
| 1284 | + |
|
| 1285 | + if (defined('_VAR_MODE') and _VAR_MODE == 'debug') { |
|
| 1286 | + $GLOBALS['debug_objets']['squelette'][$nom] = $descr['squelette']; |
|
| 1287 | + $GLOBALS['debug_objets']['sourcefile'][$nom] = $sourcefile; |
|
| 1288 | + |
|
| 1289 | + if (!isset($GLOBALS['debug_objets']['principal'])) { |
|
| 1290 | + $GLOBALS['debug_objets']['principal'] = $nom; |
|
| 1291 | + } |
|
| 1292 | + } |
|
| 1293 | + foreach ($boucles as $id => $boucle) { |
|
| 1294 | + $GLOBALS['debug_objets']['boucle'][$nom . $id] = $boucle; |
|
| 1295 | + } |
|
| 1296 | + $descr['documents'] = compile_inclure_doublons($squelette); |
|
| 1297 | + |
|
| 1298 | + // Demander la description des tables une fois pour toutes |
|
| 1299 | + if (!$trouver_table) { |
|
| 1300 | + $trouver_table = charger_fonction('trouver_table', 'base'); |
|
| 1301 | + } |
|
| 1302 | + |
|
| 1303 | + // reperer si les doublons sont demandes |
|
| 1304 | + // pour un inclure ou une boucle document |
|
| 1305 | + // c'est utile a la fonction champs_traitements |
|
| 1306 | + foreach ($boucles as $id => $boucle) { |
|
| 1307 | + if (!($type = $boucle->type_requete)) { |
|
| 1308 | + continue; |
|
| 1309 | + } |
|
| 1310 | + if (!$descr['documents'] and ( |
|
| 1311 | + (($type == 'documents') and $boucle->doublons) or |
|
| 1312 | + compile_inclure_doublons($boucle->avant) or |
|
| 1313 | + compile_inclure_doublons($boucle->apres) or |
|
| 1314 | + compile_inclure_doublons($boucle->milieu) or |
|
| 1315 | + compile_inclure_doublons($boucle->altern)) |
|
| 1316 | + ) { |
|
| 1317 | + $descr['documents'] = true; |
|
| 1318 | + } |
|
| 1319 | + if ($type != TYPE_RECURSIF) { |
|
| 1320 | + if (!$boucles[$id]->sql_serveur and $connect) { |
|
| 1321 | + $boucles[$id]->sql_serveur = $connect; |
|
| 1322 | + } |
|
| 1323 | + |
|
| 1324 | + // chercher dans les iterateurs du repertoire iterateur/ |
|
| 1325 | + if ($g = charger_fonction( |
|
| 1326 | + preg_replace('/\W/', '_', $boucle->type_requete), 'iterateur', true) |
|
| 1327 | + ) { |
|
| 1328 | + $boucles[$id] = $g($boucle); |
|
| 1329 | + |
|
| 1330 | + // sinon, en cas de requeteur d'un type predefini, |
|
| 1331 | + // utiliser les informations donnees par le requeteur |
|
| 1332 | + // cas "php:xx" et "data:xx". |
|
| 1333 | + } else { |
|
| 1334 | + if ($boucle->sql_serveur and $requeteur = charger_fonction($boucle->sql_serveur, 'requeteur', true)) { |
|
| 1335 | + $requeteur($boucles, $boucle, $id); |
|
| 1336 | + |
|
| 1337 | + // utiliser la description des champs transmis |
|
| 1338 | + } else { |
|
| 1339 | + $show = $trouver_table($type, $boucles[$id]->sql_serveur); |
|
| 1340 | + // si la table n'existe pas avec le connecteur par defaut, |
|
| 1341 | + // c'est peut etre une table qui necessite son connecteur dedie fourni |
|
| 1342 | + // permet une ecriture allegee (GEO) -> (geo:GEO) |
|
| 1343 | + if (!$show |
|
| 1344 | + and $show = $trouver_table($type, strtolower($type)) |
|
| 1345 | + ) { |
|
| 1346 | + $boucles[$id]->sql_serveur = strtolower($type); |
|
| 1347 | + } |
|
| 1348 | + if ($show) { |
|
| 1349 | + $boucles[$id]->show = $show; |
|
| 1350 | + // recopie les infos les plus importantes |
|
| 1351 | + $boucles[$id]->primary = isset($show['key']["PRIMARY KEY"]) ? $show['key']["PRIMARY KEY"] : ''; |
|
| 1352 | + $boucles[$id]->id_table = $x = preg_replace(",^spip_,", "", $show['id_table']); |
|
| 1353 | + $boucles[$id]->from[$x] = $nom_table = $show['table']; |
|
| 1354 | + $boucles[$id]->iterateur = 'SQL'; |
|
| 1355 | + |
|
| 1356 | + if (empty($boucles[$id]->descr)) { |
|
| 1357 | + $boucles[$id]->descr = &$descr; |
|
| 1358 | + } |
|
| 1359 | + if ((!$boucles[$id]->jointures) |
|
| 1360 | + and is_array($show['tables_jointures']) |
|
| 1361 | + and count($x = $show['tables_jointures']) |
|
| 1362 | + ) { |
|
| 1363 | + $boucles[$id]->jointures = $x; |
|
| 1364 | + } |
|
| 1365 | + if ($boucles[$id]->jointures_explicites) { |
|
| 1366 | + $jointures = preg_split("/\s+/", $boucles[$id]->jointures_explicites); |
|
| 1367 | + while ($j = array_pop($jointures)) { |
|
| 1368 | + array_unshift($boucles[$id]->jointures, $j); |
|
| 1369 | + } |
|
| 1370 | + } |
|
| 1371 | + } else { |
|
| 1372 | + // Pas une erreur si la table est optionnelle |
|
| 1373 | + if ($boucles[$id]->table_optionnelle) { |
|
| 1374 | + $boucles[$id]->type_requete = ''; |
|
| 1375 | + } else { |
|
| 1376 | + $boucles[$id]->type_requete = false; |
|
| 1377 | + $boucle = $boucles[$id]; |
|
| 1378 | + $x = (!$boucle->sql_serveur ? '' : |
|
| 1379 | + ($boucle->sql_serveur . ":")) . |
|
| 1380 | + $type; |
|
| 1381 | + $msg = array( |
|
| 1382 | + 'zbug_table_inconnue', |
|
| 1383 | + array('table' => $x) |
|
| 1384 | + ); |
|
| 1385 | + erreur_squelette($msg, $boucle); |
|
| 1386 | + } |
|
| 1387 | + } |
|
| 1388 | + } |
|
| 1389 | + } |
|
| 1390 | + } |
|
| 1391 | + } |
|
| 1392 | + |
|
| 1393 | + // Commencer par reperer les boucles appelees explicitement |
|
| 1394 | + // car elles indexent les arguments de maniere derogatoire |
|
| 1395 | + foreach ($boucles as $id => $boucle) { |
|
| 1396 | + if ($boucle->type_requete == TYPE_RECURSIF and $boucle->param) { |
|
| 1397 | + $boucles[$id]->descr = &$descr; |
|
| 1398 | + $rec = &$boucles[$boucle->param[0]]; |
|
| 1399 | + if (!$rec) { |
|
| 1400 | + $msg = array( |
|
| 1401 | + 'zbug_boucle_recursive_undef', |
|
| 1402 | + array('nom' => $boucle->param[0]) |
|
| 1403 | + ); |
|
| 1404 | + erreur_squelette($msg, $boucle); |
|
| 1405 | + $boucles[$id]->type_requete = false; |
|
| 1406 | + } else { |
|
| 1407 | + $rec->externe = $id; |
|
| 1408 | + $descr['id_mere'] = $id; |
|
| 1409 | + $boucles[$id]->return = |
|
| 1410 | + calculer_liste(array($rec), |
|
| 1411 | + $descr, |
|
| 1412 | + $boucles, |
|
| 1413 | + $boucle->param); |
|
| 1414 | + } |
|
| 1415 | + } |
|
| 1416 | + } |
|
| 1417 | + foreach ($boucles as $id => $boucle) { |
|
| 1418 | + $id = strval($id); // attention au type dans index_pile |
|
| 1419 | + $type = $boucle->type_requete; |
|
| 1420 | + if ($type and $type != TYPE_RECURSIF) { |
|
| 1421 | + $res = ''; |
|
| 1422 | + if ($boucle->param) { |
|
| 1423 | + // retourne un tableau en cas d'erreur |
|
| 1424 | + $res = calculer_criteres($id, $boucles); |
|
| 1425 | + } |
|
| 1426 | + $descr['id_mere'] = $id; |
|
| 1427 | + $boucles[$id]->return = |
|
| 1428 | + calculer_liste($boucle->milieu, |
|
| 1429 | + $descr, |
|
| 1430 | + $boucles, |
|
| 1431 | + $id); |
|
| 1432 | + // Si les criteres se sont mal compiles |
|
| 1433 | + // ne pas tenter d'assembler le code final |
|
| 1434 | + // (mais compiler le corps pour detection d'erreurs) |
|
| 1435 | + if (is_array($res)) { |
|
| 1436 | + $boucles[$id]->type_requete = false; |
|
| 1437 | + } |
|
| 1438 | + } |
|
| 1439 | + } |
|
| 1440 | + |
|
| 1441 | + // idem pour la racine |
|
| 1442 | + $descr['id_mere'] = ''; |
|
| 1443 | + $corps = calculer_liste($squelette, $descr, $boucles); |
|
| 1444 | + |
|
| 1445 | + |
|
| 1446 | + // Calcul du corps de toutes les fonctions PHP, |
|
| 1447 | + // en particulier les requetes SQL et TOTAL_BOUCLE |
|
| 1448 | + // de'terminables seulement maintenant |
|
| 1449 | + |
|
| 1450 | + foreach ($boucles as $id => $boucle) { |
|
| 1451 | + $boucle = $boucles[$id] = pipeline('pre_boucle', $boucle); |
|
| 1452 | + if ($boucle->return === false) { |
|
| 1453 | + $corps = false; |
|
| 1454 | + continue; |
|
| 1455 | + } |
|
| 1456 | + // appeler la fonction de definition de la boucle |
|
| 1457 | + |
|
| 1458 | + if ($req = $boucle->type_requete) { |
|
| 1459 | + // boucle personnalisée ? |
|
| 1460 | + $table = strtoupper($boucle->type_requete); |
|
| 1461 | + $serveur = strtolower($boucle->sql_serveur); |
|
| 1462 | + if ( |
|
| 1463 | + // fonction de boucle avec serveur & table |
|
| 1464 | + (!$serveur or |
|
| 1465 | + ((!function_exists($f = "boucle_" . $serveur . "_" . $table)) |
|
| 1466 | + and (!function_exists($f = $f . "_dist")) |
|
| 1467 | + ) |
|
| 1468 | + ) |
|
| 1469 | + // fonction de boucle avec table |
|
| 1470 | + and (!function_exists($f = "boucle_" . $table)) |
|
| 1471 | + and (!function_exists($f = $f . "_dist")) |
|
| 1472 | + ) { |
|
| 1473 | + // fonction de boucle standard |
|
| 1474 | + if (!function_exists($f = 'boucle_DEFAUT')) { |
|
| 1475 | + $f = 'boucle_DEFAUT_dist'; |
|
| 1476 | + } |
|
| 1477 | + } |
|
| 1478 | + |
|
| 1479 | + $req = "\n\n\tstatic \$command = array();\n\t" . |
|
| 1480 | + "static \$connect;\n\t" . |
|
| 1481 | + "\$command['connect'] = \$connect = " . |
|
| 1482 | + _q($boucle->sql_serveur) . |
|
| 1483 | + ";" . |
|
| 1484 | + $f($id, $boucles); |
|
| 1485 | + } else { |
|
| 1486 | + $req = ("\n\treturn '';"); |
|
| 1487 | + } |
|
| 1488 | + |
|
| 1489 | + $boucles[$id]->return = |
|
| 1490 | + "\n\nfunction BOUCLE" . strtr($id, "-", "_") . $nom . |
|
| 1491 | + '(&$Cache, &$Pile, &$doublons, &$Numrows, $SP) {' . |
|
| 1492 | + $req . |
|
| 1493 | + "\n}\n"; |
|
| 1494 | + } |
|
| 1495 | + |
|
| 1496 | + // Au final, si le corps ou un critere au moins s'est mal compile |
|
| 1497 | + // retourner False, sinon inserer leur decompilation |
|
| 1498 | + if (is_bool($corps)) { |
|
| 1499 | + return false; |
|
| 1500 | + } |
|
| 1501 | + |
|
| 1502 | + $principal = "\nfunction " . $nom . '($Cache, $Pile, $doublons = array(), $Numrows = array(), $SP = 0) { |
|
| 1503 | 1503 | ' |
| 1504 | - // reporter de maniere securisee les doublons inclus |
|
| 1505 | - . ' |
|
| 1504 | + // reporter de maniere securisee les doublons inclus |
|
| 1505 | + . ' |
|
| 1506 | 1506 | if (isset($Pile[0]["doublons"]) AND is_array($Pile[0]["doublons"])) |
| 1507 | 1507 | $doublons = nettoyer_env_doublons($Pile[0]["doublons"]); |
| 1508 | 1508 | |
| 1509 | 1509 | $connect = ' . |
| 1510 | - _q($connect) . '; |
|
| 1510 | + _q($connect) . '; |
|
| 1511 | 1511 | $page = ' . |
| 1512 | - // ATTENTION, le calcul de l'expression $corps affectera $Cache |
|
| 1513 | - // c'est pourquoi on l'affecte a la variable auxiliaire $page. |
|
| 1514 | - // avant de referencer $Cache |
|
| 1515 | - $corps . "; |
|
| 1512 | + // ATTENTION, le calcul de l'expression $corps affectera $Cache |
|
| 1513 | + // c'est pourquoi on l'affecte a la variable auxiliaire $page. |
|
| 1514 | + // avant de referencer $Cache |
|
| 1515 | + $corps . "; |
|
| 1516 | 1516 | |
| 1517 | 1517 | return analyse_resultat_skel(" . var_export($nom, true) |
| 1518 | - . ", \$Cache, \$page, " . var_export($sourcefile, true) . "); |
|
| 1518 | + . ", \$Cache, \$page, " . var_export($sourcefile, true) . "); |
|
| 1519 | 1519 | }"; |
| 1520 | 1520 | |
| 1521 | - $secondes = spip_timer('calcul_skel'); |
|
| 1522 | - spip_log("COMPIL ($secondes) [$sourcefile] $nom.php"); |
|
| 1523 | - // $connect n'est pas sûr : on nettoie |
|
| 1524 | - $connect = preg_replace(',[^\w],', '', $connect); |
|
| 1521 | + $secondes = spip_timer('calcul_skel'); |
|
| 1522 | + spip_log("COMPIL ($secondes) [$sourcefile] $nom.php"); |
|
| 1523 | + // $connect n'est pas sûr : on nettoie |
|
| 1524 | + $connect = preg_replace(',[^\w],', '', $connect); |
|
| 1525 | 1525 | |
| 1526 | - // Assimiler la fct principale a une boucle anonyme, pour retourner un resultat simple |
|
| 1527 | - $code = new Boucle; |
|
| 1528 | - $code->descr = $descr; |
|
| 1529 | - $code->return = ' |
|
| 1526 | + // Assimiler la fct principale a une boucle anonyme, pour retourner un resultat simple |
|
| 1527 | + $code = new Boucle; |
|
| 1528 | + $code->descr = $descr; |
|
| 1529 | + $code->return = ' |
|
| 1530 | 1530 | // |
| 1531 | 1531 | // Fonction principale du squelette ' . |
| 1532 | - $sourcefile . |
|
| 1533 | - ($connect ? " pour $connect" : '') . |
|
| 1534 | - (!CODE_COMMENTE ? '' : "\n// Temps de compilation total: $secondes") . |
|
| 1535 | - "\n//\n" . |
|
| 1536 | - $principal; |
|
| 1532 | + $sourcefile . |
|
| 1533 | + ($connect ? " pour $connect" : '') . |
|
| 1534 | + (!CODE_COMMENTE ? '' : "\n// Temps de compilation total: $secondes") . |
|
| 1535 | + "\n//\n" . |
|
| 1536 | + $principal; |
|
| 1537 | 1537 | |
| 1538 | - $boucles[''] = $code; |
|
| 1538 | + $boucles[''] = $code; |
|
| 1539 | 1539 | |
| 1540 | - return $boucles; |
|
| 1540 | + return $boucles; |
|
| 1541 | 1541 | } |
| 1542 | 1542 | |
| 1543 | 1543 | |
@@ -1554,18 +1554,18 @@ discard block |
||
| 1554 | 1554 | * |
| 1555 | 1555 | **/ |
| 1556 | 1556 | function requeteur_php_dist(&$boucles, &$boucle, &$id) { |
| 1557 | - if (class_exists($boucle->type_requete)) { |
|
| 1558 | - $g = charger_fonction('php', 'iterateur'); |
|
| 1559 | - $boucles[$id] = $g($boucle, $boucle->type_requete); |
|
| 1560 | - } else { |
|
| 1561 | - $x = $boucle->type_requete; |
|
| 1562 | - $boucle->type_requete = false; |
|
| 1563 | - $msg = array( |
|
| 1564 | - 'zbug_iterateur_inconnu', |
|
| 1565 | - array('iterateur' => $x) |
|
| 1566 | - ); |
|
| 1567 | - erreur_squelette($msg, $boucle); |
|
| 1568 | - } |
|
| 1557 | + if (class_exists($boucle->type_requete)) { |
|
| 1558 | + $g = charger_fonction('php', 'iterateur'); |
|
| 1559 | + $boucles[$id] = $g($boucle, $boucle->type_requete); |
|
| 1560 | + } else { |
|
| 1561 | + $x = $boucle->type_requete; |
|
| 1562 | + $boucle->type_requete = false; |
|
| 1563 | + $msg = array( |
|
| 1564 | + 'zbug_iterateur_inconnu', |
|
| 1565 | + array('iterateur' => $x) |
|
| 1566 | + ); |
|
| 1567 | + erreur_squelette($msg, $boucle); |
|
| 1568 | + } |
|
| 1569 | 1569 | } |
| 1570 | 1570 | |
| 1571 | 1571 | |
@@ -1583,23 +1583,23 @@ discard block |
||
| 1583 | 1583 | * |
| 1584 | 1584 | **/ |
| 1585 | 1585 | function requeteur_data_dist(&$boucles, &$boucle, &$id) { |
| 1586 | - include_spip('iterateur/data'); |
|
| 1587 | - if ($h = charger_fonction($boucle->type_requete . '_to_array', 'inc', true)) { |
|
| 1588 | - $g = charger_fonction('data', 'iterateur'); |
|
| 1589 | - $boucles[$id] = $g($boucle); |
|
| 1590 | - // from[0] stocke le type de data (rss, yql, ...) |
|
| 1591 | - $boucles[$id]->from[] = $boucle->type_requete; |
|
| 1592 | - |
|
| 1593 | - } else { |
|
| 1594 | - $x = $boucle->type_requete; |
|
| 1595 | - $boucle->type_requete = false; |
|
| 1596 | - $msg = array( |
|
| 1597 | - 'zbug_requeteur_inconnu', |
|
| 1598 | - array( |
|
| 1599 | - 'requeteur' => 'data', |
|
| 1600 | - 'type' => $x |
|
| 1601 | - ) |
|
| 1602 | - ); |
|
| 1603 | - erreur_squelette($msg, $boucle); |
|
| 1604 | - } |
|
| 1586 | + include_spip('iterateur/data'); |
|
| 1587 | + if ($h = charger_fonction($boucle->type_requete . '_to_array', 'inc', true)) { |
|
| 1588 | + $g = charger_fonction('data', 'iterateur'); |
|
| 1589 | + $boucles[$id] = $g($boucle); |
|
| 1590 | + // from[0] stocke le type de data (rss, yql, ...) |
|
| 1591 | + $boucles[$id]->from[] = $boucle->type_requete; |
|
| 1592 | + |
|
| 1593 | + } else { |
|
| 1594 | + $x = $boucle->type_requete; |
|
| 1595 | + $boucle->type_requete = false; |
|
| 1596 | + $msg = array( |
|
| 1597 | + 'zbug_requeteur_inconnu', |
|
| 1598 | + array( |
|
| 1599 | + 'requeteur' => 'data', |
|
| 1600 | + 'type' => $x |
|
| 1601 | + ) |
|
| 1602 | + ); |
|
| 1603 | + erreur_squelette($msg, $boucle); |
|
| 1604 | + } |
|
| 1605 | 1605 | } |
@@ -890,8 +890,7 @@ |
||
| 890 | 890 | if (isset($boucles[$idb]->descr['sourcefile'])) { |
| 891 | 891 | $descr['sourcefile'] = $boucles[$idb]->descr['sourcefile']; |
| 892 | 892 | } |
| 893 | - } |
|
| 894 | - else { |
|
| 893 | + } else { |
|
| 895 | 894 | $descr = array(); |
| 896 | 895 | } |
| 897 | 896 | } |
@@ -2,252 +2,252 @@ discard block |
||
| 2 | 2 | // This is a SPIP language file -- Ceci est un fichier langue de SPIP |
| 3 | 3 | // Fichier source, a modifier dans https://git.spip.net/spip/spip.git |
| 4 | 4 | if (!defined('_ECRIRE_INC_VERSION')) { |
| 5 | - return; |
|
| 5 | + return; |
|
| 6 | 6 | } |
| 7 | 7 | |
| 8 | 8 | $GLOBALS[$GLOBALS['idx_lang']] = array( |
| 9 | 9 | |
| 10 | - // 0 |
|
| 11 | - '0_URL' => 'http://listes.rezo.net/mailman/listinfo/spip-dev', |
|
| 12 | - '0_langue' => 'Français [fr]', |
|
| 13 | - '0_liste' => '[email protected]', |
|
| 14 | - '0_mainteneur' => '[email protected]', |
|
| 10 | + // 0 |
|
| 11 | + '0_URL' => 'http://listes.rezo.net/mailman/listinfo/spip-dev', |
|
| 12 | + '0_langue' => 'Français [fr]', |
|
| 13 | + '0_liste' => '[email protected]', |
|
| 14 | + '0_mainteneur' => '[email protected]', |
|
| 15 | 15 | |
| 16 | - // A |
|
| 17 | - 'access_interface_graphique' => 'Retour à l’interface graphique complète', |
|
| 18 | - 'access_mode_texte' => 'Afficher l’interface textuelle simplifiée', |
|
| 19 | - 'admin_debug' => 'debug', |
|
| 20 | - 'admin_modifier_article' => 'Modifier cet article', |
|
| 21 | - 'admin_modifier_auteur' => 'Modifier cet auteur', |
|
| 22 | - 'admin_modifier_breve' => 'Modifier cette brève', |
|
| 23 | - 'admin_modifier_mot' => 'Modifier ce mot-clé', |
|
| 24 | - 'admin_modifier_rubrique' => 'Modifier cette rubrique', |
|
| 25 | - 'admin_recalculer' => 'Recalculer cette page', |
|
| 26 | - 'afficher_calendrier' => 'Afficher le calendrier', |
|
| 27 | - 'afficher_trad' => 'afficher les traductions', |
|
| 28 | - 'alerte_maj_impossible' => '<b>Alerte !</b> La mise à jour de la base SQL vers la version @version@ est impossible, peut-être à cause d’un problème de droit de modification sur la base de données. Veuillez contacter votre hébergeur.', |
|
| 29 | - 'alerte_modif_info_concourante' => 'ATTENTION : Cette information a été modifiée par ailleurs. La valeur actuelle est :', |
|
| 30 | - 'analyse_xml' => 'Analyse XML', |
|
| 31 | - 'annuler' => 'Annuler', |
|
| 32 | - 'antispam_champ_vide' => 'Veuillez laisser ce champ vide :', |
|
| 33 | - 'articles_recents' => 'Articles les plus récents', |
|
| 34 | - 'avis_1_erreur_saisie' => 'Il y a 1 erreur dans votre saisie, veuillez vérifier les informations.', |
|
| 35 | - 'avis_archive_incorrect' => 'le fichier archive n’est pas un fichier SPIP', |
|
| 36 | - 'avis_archive_invalide' => 'le fichier archive n’est pas valide', |
|
| 37 | - 'avis_attention' => 'ATTENTION !', |
|
| 38 | - 'avis_champ_incorrect_type_objet' => 'Nom de champ incorrect @name@ pour objet de type @type@', |
|
| 39 | - 'avis_colonne_inexistante' => 'La colonne @col@ n’existe pas', |
|
| 40 | - 'avis_erreur' => 'Erreur : voir ci-dessous', |
|
| 41 | - 'avis_erreur_connexion' => 'Erreur de connexion', |
|
| 42 | - 'avis_erreur_cookie' => 'problème de cookie', |
|
| 43 | - 'avis_erreur_fonction_contexte' => 'Erreur de programmation. Cette fonction ne doit pas être appelée dans ce contexte.', |
|
| 44 | - 'avis_erreur_mysql' => 'Erreur SQL', |
|
| 45 | - 'avis_erreur_sauvegarde' => 'Erreur dans la sauvegarde (@type@ @id_objet@) !', |
|
| 46 | - 'avis_erreur_visiteur' => 'Problème d’accès à l’espace privé', |
|
| 47 | - 'avis_nb_erreurs_saisie' => 'Il y a @nb@ erreurs dans votre saisie, veuillez vérifier les informations.', |
|
| 16 | + // A |
|
| 17 | + 'access_interface_graphique' => 'Retour à l’interface graphique complète', |
|
| 18 | + 'access_mode_texte' => 'Afficher l’interface textuelle simplifiée', |
|
| 19 | + 'admin_debug' => 'debug', |
|
| 20 | + 'admin_modifier_article' => 'Modifier cet article', |
|
| 21 | + 'admin_modifier_auteur' => 'Modifier cet auteur', |
|
| 22 | + 'admin_modifier_breve' => 'Modifier cette brève', |
|
| 23 | + 'admin_modifier_mot' => 'Modifier ce mot-clé', |
|
| 24 | + 'admin_modifier_rubrique' => 'Modifier cette rubrique', |
|
| 25 | + 'admin_recalculer' => 'Recalculer cette page', |
|
| 26 | + 'afficher_calendrier' => 'Afficher le calendrier', |
|
| 27 | + 'afficher_trad' => 'afficher les traductions', |
|
| 28 | + 'alerte_maj_impossible' => '<b>Alerte !</b> La mise à jour de la base SQL vers la version @version@ est impossible, peut-être à cause d’un problème de droit de modification sur la base de données. Veuillez contacter votre hébergeur.', |
|
| 29 | + 'alerte_modif_info_concourante' => 'ATTENTION : Cette information a été modifiée par ailleurs. La valeur actuelle est :', |
|
| 30 | + 'analyse_xml' => 'Analyse XML', |
|
| 31 | + 'annuler' => 'Annuler', |
|
| 32 | + 'antispam_champ_vide' => 'Veuillez laisser ce champ vide :', |
|
| 33 | + 'articles_recents' => 'Articles les plus récents', |
|
| 34 | + 'avis_1_erreur_saisie' => 'Il y a 1 erreur dans votre saisie, veuillez vérifier les informations.', |
|
| 35 | + 'avis_archive_incorrect' => 'le fichier archive n’est pas un fichier SPIP', |
|
| 36 | + 'avis_archive_invalide' => 'le fichier archive n’est pas valide', |
|
| 37 | + 'avis_attention' => 'ATTENTION !', |
|
| 38 | + 'avis_champ_incorrect_type_objet' => 'Nom de champ incorrect @name@ pour objet de type @type@', |
|
| 39 | + 'avis_colonne_inexistante' => 'La colonne @col@ n’existe pas', |
|
| 40 | + 'avis_erreur' => 'Erreur : voir ci-dessous', |
|
| 41 | + 'avis_erreur_connexion' => 'Erreur de connexion', |
|
| 42 | + 'avis_erreur_cookie' => 'problème de cookie', |
|
| 43 | + 'avis_erreur_fonction_contexte' => 'Erreur de programmation. Cette fonction ne doit pas être appelée dans ce contexte.', |
|
| 44 | + 'avis_erreur_mysql' => 'Erreur SQL', |
|
| 45 | + 'avis_erreur_sauvegarde' => 'Erreur dans la sauvegarde (@type@ @id_objet@) !', |
|
| 46 | + 'avis_erreur_visiteur' => 'Problème d’accès à l’espace privé', |
|
| 47 | + 'avis_nb_erreurs_saisie' => 'Il y a @nb@ erreurs dans votre saisie, veuillez vérifier les informations.', |
|
| 48 | 48 | |
| 49 | - // B |
|
| 50 | - 'barre_a_accent_grave' => 'Insérer un A accent grave majuscule', |
|
| 51 | - 'barre_aide' => 'Utilisez les raccourcis typographiques pour enrichir votre mise en page', |
|
| 52 | - 'barre_e_accent_aigu' => 'Insérer un E accent aigu majuscule', |
|
| 53 | - 'barre_eo' => 'Insérer un E dans l’O', |
|
| 54 | - 'barre_eo_maj' => 'Insérer un E dans l’O majuscule', |
|
| 55 | - 'barre_euro' => 'Insérer le symbole €', |
|
| 56 | - 'barre_gras' => 'Mettre en {{gras}}', |
|
| 57 | - 'barre_guillemets' => 'Entourer de « guillemets »', |
|
| 58 | - 'barre_guillemets_simples' => 'Entourer de “guillemets de second niveau”', |
|
| 59 | - 'barre_intertitre' => 'Transformer en {{{intertitre}}}', |
|
| 60 | - 'barre_italic' => 'Mettre en {italique}', |
|
| 61 | - 'barre_lien' => 'Transformer en [lien hypertexte->http://...]', |
|
| 62 | - 'barre_lien_input' => 'Veuillez indiquer l’adresse de votre lien (vous pouvez indiquer une adresse Web sous la forme http://www.monsite/com ou simplement indiquer le numéro d’un article de ce site.', |
|
| 63 | - 'barre_note' => 'Transformer en [[Note de bas de page]]', |
|
| 64 | - 'barre_paragraphe' => 'Créer un paragraphe', |
|
| 65 | - 'barre_quote' => '<quote>Citer un message</quote>', |
|
| 66 | - 'bouton_changer' => 'Changer', |
|
| 67 | - 'bouton_chercher' => 'Chercher', |
|
| 68 | - 'bouton_choisir' => 'Choisir', |
|
| 69 | - 'bouton_deplacer' => 'Déplacer', |
|
| 70 | - 'bouton_download' => 'Télécharger', |
|
| 71 | - 'bouton_enregistrer' => 'Enregistrer', |
|
| 72 | - 'bouton_radio_desactiver_messagerie_interne' => 'Désactiver la messagerie interne', |
|
| 73 | - 'bouton_radio_envoi_annonces' => 'Envoyer les annonces éditoriales', |
|
| 74 | - 'bouton_radio_non_envoi_annonces' => 'Ne pas envoyer d’annonces', |
|
| 75 | - 'bouton_radio_non_envoi_liste_nouveautes' => 'Ne pas envoyer la liste des nouveautés', |
|
| 76 | - 'bouton_recharger_page' => 'recharger cette page', |
|
| 77 | - 'bouton_telecharger' => 'Télécharger', |
|
| 78 | - 'bouton_upload' => 'Téléverser', |
|
| 79 | - 'bouton_valider' => 'Valider', |
|
| 49 | + // B |
|
| 50 | + 'barre_a_accent_grave' => 'Insérer un A accent grave majuscule', |
|
| 51 | + 'barre_aide' => 'Utilisez les raccourcis typographiques pour enrichir votre mise en page', |
|
| 52 | + 'barre_e_accent_aigu' => 'Insérer un E accent aigu majuscule', |
|
| 53 | + 'barre_eo' => 'Insérer un E dans l’O', |
|
| 54 | + 'barre_eo_maj' => 'Insérer un E dans l’O majuscule', |
|
| 55 | + 'barre_euro' => 'Insérer le symbole €', |
|
| 56 | + 'barre_gras' => 'Mettre en {{gras}}', |
|
| 57 | + 'barre_guillemets' => 'Entourer de « guillemets »', |
|
| 58 | + 'barre_guillemets_simples' => 'Entourer de “guillemets de second niveau”', |
|
| 59 | + 'barre_intertitre' => 'Transformer en {{{intertitre}}}', |
|
| 60 | + 'barre_italic' => 'Mettre en {italique}', |
|
| 61 | + 'barre_lien' => 'Transformer en [lien hypertexte->http://...]', |
|
| 62 | + 'barre_lien_input' => 'Veuillez indiquer l’adresse de votre lien (vous pouvez indiquer une adresse Web sous la forme http://www.monsite/com ou simplement indiquer le numéro d’un article de ce site.', |
|
| 63 | + 'barre_note' => 'Transformer en [[Note de bas de page]]', |
|
| 64 | + 'barre_paragraphe' => 'Créer un paragraphe', |
|
| 65 | + 'barre_quote' => '<quote>Citer un message</quote>', |
|
| 66 | + 'bouton_changer' => 'Changer', |
|
| 67 | + 'bouton_chercher' => 'Chercher', |
|
| 68 | + 'bouton_choisir' => 'Choisir', |
|
| 69 | + 'bouton_deplacer' => 'Déplacer', |
|
| 70 | + 'bouton_download' => 'Télécharger', |
|
| 71 | + 'bouton_enregistrer' => 'Enregistrer', |
|
| 72 | + 'bouton_radio_desactiver_messagerie_interne' => 'Désactiver la messagerie interne', |
|
| 73 | + 'bouton_radio_envoi_annonces' => 'Envoyer les annonces éditoriales', |
|
| 74 | + 'bouton_radio_non_envoi_annonces' => 'Ne pas envoyer d’annonces', |
|
| 75 | + 'bouton_radio_non_envoi_liste_nouveautes' => 'Ne pas envoyer la liste des nouveautés', |
|
| 76 | + 'bouton_recharger_page' => 'recharger cette page', |
|
| 77 | + 'bouton_telecharger' => 'Télécharger', |
|
| 78 | + 'bouton_upload' => 'Téléverser', |
|
| 79 | + 'bouton_valider' => 'Valider', |
|
| 80 | 80 | |
| 81 | - // C |
|
| 82 | - 'cal_apresmidi' => 'après-midi', |
|
| 83 | - 'cal_jour_entier' => 'jour entier', |
|
| 84 | - 'cal_matin' => 'matin', |
|
| 85 | - 'cal_par_jour' => 'calendrier par jour', |
|
| 86 | - 'cal_par_mois' => 'calendrier par mois', |
|
| 87 | - 'cal_par_semaine' => 'calendrier par semaine', |
|
| 88 | - 'choix_couleur_interface' => 'couleur ', |
|
| 89 | - 'choix_interface' => 'choix de l’interface', |
|
| 90 | - 'colonne' => 'Colonne', |
|
| 91 | - 'confirm_changer_statut' => 'Attention, vous avez demandé à changer le statut de cet élément. Souhaitez-vous continuer ?', |
|
| 92 | - 'correcte' => 'correcte', # chaine utilisée dans le debugueur : "validation .. impossible" ou "validation .. correcte" |
|
| 81 | + // C |
|
| 82 | + 'cal_apresmidi' => 'après-midi', |
|
| 83 | + 'cal_jour_entier' => 'jour entier', |
|
| 84 | + 'cal_matin' => 'matin', |
|
| 85 | + 'cal_par_jour' => 'calendrier par jour', |
|
| 86 | + 'cal_par_mois' => 'calendrier par mois', |
|
| 87 | + 'cal_par_semaine' => 'calendrier par semaine', |
|
| 88 | + 'choix_couleur_interface' => 'couleur ', |
|
| 89 | + 'choix_interface' => 'choix de l’interface', |
|
| 90 | + 'colonne' => 'Colonne', |
|
| 91 | + 'confirm_changer_statut' => 'Attention, vous avez demandé à changer le statut de cet élément. Souhaitez-vous continuer ?', |
|
| 92 | + 'correcte' => 'correcte', # chaine utilisée dans le debugueur : "validation .. impossible" ou "validation .. correcte" |
|
| 93 | 93 | |
| 94 | - // D |
|
| 95 | - 'date_aujourdhui' => 'aujourd’hui', |
|
| 96 | - 'date_avant_jc' => 'av. J.C.', |
|
| 97 | - 'date_dans' => 'dans @delai@', |
|
| 98 | - 'date_de_mois_1' => '@j@ @nommois@', |
|
| 99 | - 'date_de_mois_10' => '@j@ @nommois@', |
|
| 100 | - 'date_de_mois_11' => '@j@ @nommois@', |
|
| 101 | - 'date_de_mois_12' => '@j@ @nommois@', |
|
| 102 | - 'date_de_mois_2' => '@j@ @nommois@', |
|
| 103 | - 'date_de_mois_3' => '@j@ @nommois@', |
|
| 104 | - 'date_de_mois_4' => '@j@ @nommois@', |
|
| 105 | - 'date_de_mois_5' => '@j@ @nommois@', |
|
| 106 | - 'date_de_mois_6' => '@j@ @nommois@', |
|
| 107 | - 'date_de_mois_7' => '@j@ @nommois@', |
|
| 108 | - 'date_de_mois_8' => '@j@ @nommois@', |
|
| 109 | - 'date_de_mois_9' => '@j@ @nommois@', |
|
| 110 | - 'date_demain' => 'demain', |
|
| 111 | - 'date_fmt_heures_minutes' => '@h@h@m@min', |
|
| 112 | - 'date_fmt_heures_minutes_court' => '@h@h@m@', |
|
| 113 | - 'date_fmt_jour' => '@nomjour@ @jour@', |
|
| 114 | - 'date_fmt_jour_heure' => '@jour@ à @heure@', |
|
| 115 | - 'date_fmt_jour_heure_debut_fin' => '@jour@ de @heure_debut@ à @heure_fin@', |
|
| 116 | - 'date_fmt_jour_heure_debut_fin_abbr' => '@dtstart@@jour@ de @heure_debut@@dtabbr@ à @dtend@@heure_fin@@dtabbr@', |
|
| 117 | - 'date_fmt_jour_mois' => '@jour@ @nommois@', |
|
| 118 | - 'date_fmt_jour_mois_annee' => '@jour@ @nommois@ @annee@', |
|
| 119 | - 'date_fmt_mois_annee' => '@nommois@ @annee@', |
|
| 120 | - 'date_fmt_nomjour' => '@nomjour@ @date@', |
|
| 121 | - 'date_fmt_nomjour_date' => 'le @nomjour@ @date@', |
|
| 122 | - 'date_fmt_periode' => 'Du @date_debut@ au @date_fin@', |
|
| 123 | - 'date_fmt_periode_abbr' => 'Du @dtart@@date_debut@@dtabbr@ au @dtend@@date_fin@@dtabbr@', |
|
| 124 | - 'date_fmt_periode_from' => 'Du', |
|
| 125 | - 'date_fmt_periode_to' => 'au', |
|
| 126 | - 'date_fmt_saison_annee' => '@saison@ @annee@', |
|
| 127 | - 'date_heures' => 'heures', |
|
| 128 | - 'date_hier' => 'hier', |
|
| 129 | - 'date_il_y_a' => 'il y a @delai@', |
|
| 130 | - 'date_jnum1' => '1er', |
|
| 131 | - 'date_jnum10' => '10', |
|
| 132 | - 'date_jnum11' => '11', |
|
| 133 | - 'date_jnum12' => '12', |
|
| 134 | - 'date_jnum13' => '13', |
|
| 135 | - 'date_jnum14' => '14', |
|
| 136 | - 'date_jnum15' => '15', |
|
| 137 | - 'date_jnum16' => '16', |
|
| 138 | - 'date_jnum17' => '17', |
|
| 139 | - 'date_jnum18' => '18', |
|
| 140 | - 'date_jnum19' => '19', |
|
| 141 | - 'date_jnum2' => '2', |
|
| 142 | - 'date_jnum20' => '20', |
|
| 143 | - 'date_jnum21' => '21', |
|
| 144 | - 'date_jnum22' => '22', |
|
| 145 | - 'date_jnum23' => '23', |
|
| 146 | - 'date_jnum24' => '24', |
|
| 147 | - 'date_jnum25' => '25', |
|
| 148 | - 'date_jnum26' => '26', |
|
| 149 | - 'date_jnum27' => '27', |
|
| 150 | - 'date_jnum28' => '28', |
|
| 151 | - 'date_jnum29' => '29', |
|
| 152 | - 'date_jnum3' => '3', |
|
| 153 | - 'date_jnum30' => '30', |
|
| 154 | - 'date_jnum31' => '31', |
|
| 155 | - 'date_jnum4' => '4', |
|
| 156 | - 'date_jnum5' => '5', |
|
| 157 | - 'date_jnum6' => '6', |
|
| 158 | - 'date_jnum7' => '7', |
|
| 159 | - 'date_jnum8' => '8', |
|
| 160 | - 'date_jnum9' => '9', |
|
| 161 | - 'date_jour_1' => 'dimanche', |
|
| 162 | - 'date_jour_1_abbr' => 'dim.', |
|
| 163 | - 'date_jour_1_initiale' => 'd.', |
|
| 164 | - 'date_jour_2' => 'lundi', |
|
| 165 | - 'date_jour_2_abbr' => 'lun.', |
|
| 166 | - 'date_jour_2_initiale' => 'l.', |
|
| 167 | - 'date_jour_3' => 'mardi', |
|
| 168 | - 'date_jour_3_abbr' => 'mar.', |
|
| 169 | - 'date_jour_3_initiale' => 'm.', |
|
| 170 | - 'date_jour_4' => 'mercredi', |
|
| 171 | - 'date_jour_4_abbr' => 'mer.', |
|
| 172 | - 'date_jour_4_initiale' => 'm.', |
|
| 173 | - 'date_jour_5' => 'jeudi', |
|
| 174 | - 'date_jour_5_abbr' => 'jeu.', |
|
| 175 | - 'date_jour_5_initiale' => 'j.', |
|
| 176 | - 'date_jour_6' => 'vendredi', |
|
| 177 | - 'date_jour_6_abbr' => 'ven.', |
|
| 178 | - 'date_jour_6_initiale' => 'v.', |
|
| 179 | - 'date_jour_7' => 'samedi', |
|
| 180 | - 'date_jour_7_abbr' => 'sam.', |
|
| 181 | - 'date_jour_7_initiale' => 's.', |
|
| 182 | - 'date_jours' => 'jours', |
|
| 183 | - 'date_minutes' => 'minutes', |
|
| 184 | - 'date_mois' => 'mois', |
|
| 185 | - 'date_mois_1' => 'janvier', |
|
| 186 | - 'date_mois_10' => 'octobre', |
|
| 187 | - 'date_mois_10_abbr' => 'oct.', |
|
| 188 | - 'date_mois_11' => 'novembre', |
|
| 189 | - 'date_mois_11_abbr' => 'nov.', |
|
| 190 | - 'date_mois_12' => 'décembre', |
|
| 191 | - 'date_mois_12_abbr' => 'déc.', |
|
| 192 | - 'date_mois_1_abbr' => 'janv.', |
|
| 193 | - 'date_mois_2' => 'février', |
|
| 194 | - 'date_mois_2_abbr' => 'févr.', |
|
| 195 | - 'date_mois_3' => 'mars', |
|
| 196 | - 'date_mois_3_abbr' => 'mars', |
|
| 197 | - 'date_mois_4' => 'avril', |
|
| 198 | - 'date_mois_4_abbr' => 'avr.', |
|
| 199 | - 'date_mois_5' => 'mai', |
|
| 200 | - 'date_mois_5_abbr' => 'mai', |
|
| 201 | - 'date_mois_6' => 'juin', |
|
| 202 | - 'date_mois_6_abbr' => 'juin', |
|
| 203 | - 'date_mois_7' => 'juillet', |
|
| 204 | - 'date_mois_7_abbr' => 'juil.', |
|
| 205 | - 'date_mois_8' => 'août', |
|
| 206 | - 'date_mois_8_abbr' => 'août', |
|
| 207 | - 'date_mois_9' => 'septembre', |
|
| 208 | - 'date_mois_9_abbr' => 'sept.', |
|
| 209 | - 'date_saison_1' => 'hiver', |
|
| 210 | - 'date_saison_2' => 'printemps', |
|
| 211 | - 'date_saison_3' => 'été', |
|
| 212 | - 'date_saison_4' => 'automne', |
|
| 213 | - 'date_secondes' => 'secondes', |
|
| 214 | - 'date_semaines' => 'semaines', |
|
| 215 | - 'date_un_mois' => 'mois', |
|
| 216 | - 'date_une_heure' => 'heure', |
|
| 217 | - 'date_une_minute' => 'minute', |
|
| 218 | - 'date_une_seconde' => 'seconde', |
|
| 219 | - 'date_une_semaine' => 'semaine', |
|
| 220 | - 'dirs_commencer' => ' afin de commencer réellement l’installation', |
|
| 221 | - 'dirs_preliminaire' => 'Préliminaire : <b>Régler les droits d’accès</b>', |
|
| 222 | - 'dirs_probleme_droits' => 'Problème de droits d’accès', |
|
| 223 | - 'dirs_repertoires_absents' => '<p><b>Les répertoires suivants n’ont pas été trouvés :</b></p><ul>@bad_dirs@</ul> |
|
| 94 | + // D |
|
| 95 | + 'date_aujourdhui' => 'aujourd’hui', |
|
| 96 | + 'date_avant_jc' => 'av. J.C.', |
|
| 97 | + 'date_dans' => 'dans @delai@', |
|
| 98 | + 'date_de_mois_1' => '@j@ @nommois@', |
|
| 99 | + 'date_de_mois_10' => '@j@ @nommois@', |
|
| 100 | + 'date_de_mois_11' => '@j@ @nommois@', |
|
| 101 | + 'date_de_mois_12' => '@j@ @nommois@', |
|
| 102 | + 'date_de_mois_2' => '@j@ @nommois@', |
|
| 103 | + 'date_de_mois_3' => '@j@ @nommois@', |
|
| 104 | + 'date_de_mois_4' => '@j@ @nommois@', |
|
| 105 | + 'date_de_mois_5' => '@j@ @nommois@', |
|
| 106 | + 'date_de_mois_6' => '@j@ @nommois@', |
|
| 107 | + 'date_de_mois_7' => '@j@ @nommois@', |
|
| 108 | + 'date_de_mois_8' => '@j@ @nommois@', |
|
| 109 | + 'date_de_mois_9' => '@j@ @nommois@', |
|
| 110 | + 'date_demain' => 'demain', |
|
| 111 | + 'date_fmt_heures_minutes' => '@h@h@m@min', |
|
| 112 | + 'date_fmt_heures_minutes_court' => '@h@h@m@', |
|
| 113 | + 'date_fmt_jour' => '@nomjour@ @jour@', |
|
| 114 | + 'date_fmt_jour_heure' => '@jour@ à @heure@', |
|
| 115 | + 'date_fmt_jour_heure_debut_fin' => '@jour@ de @heure_debut@ à @heure_fin@', |
|
| 116 | + 'date_fmt_jour_heure_debut_fin_abbr' => '@dtstart@@jour@ de @heure_debut@@dtabbr@ à @dtend@@heure_fin@@dtabbr@', |
|
| 117 | + 'date_fmt_jour_mois' => '@jour@ @nommois@', |
|
| 118 | + 'date_fmt_jour_mois_annee' => '@jour@ @nommois@ @annee@', |
|
| 119 | + 'date_fmt_mois_annee' => '@nommois@ @annee@', |
|
| 120 | + 'date_fmt_nomjour' => '@nomjour@ @date@', |
|
| 121 | + 'date_fmt_nomjour_date' => 'le @nomjour@ @date@', |
|
| 122 | + 'date_fmt_periode' => 'Du @date_debut@ au @date_fin@', |
|
| 123 | + 'date_fmt_periode_abbr' => 'Du @dtart@@date_debut@@dtabbr@ au @dtend@@date_fin@@dtabbr@', |
|
| 124 | + 'date_fmt_periode_from' => 'Du', |
|
| 125 | + 'date_fmt_periode_to' => 'au', |
|
| 126 | + 'date_fmt_saison_annee' => '@saison@ @annee@', |
|
| 127 | + 'date_heures' => 'heures', |
|
| 128 | + 'date_hier' => 'hier', |
|
| 129 | + 'date_il_y_a' => 'il y a @delai@', |
|
| 130 | + 'date_jnum1' => '1er', |
|
| 131 | + 'date_jnum10' => '10', |
|
| 132 | + 'date_jnum11' => '11', |
|
| 133 | + 'date_jnum12' => '12', |
|
| 134 | + 'date_jnum13' => '13', |
|
| 135 | + 'date_jnum14' => '14', |
|
| 136 | + 'date_jnum15' => '15', |
|
| 137 | + 'date_jnum16' => '16', |
|
| 138 | + 'date_jnum17' => '17', |
|
| 139 | + 'date_jnum18' => '18', |
|
| 140 | + 'date_jnum19' => '19', |
|
| 141 | + 'date_jnum2' => '2', |
|
| 142 | + 'date_jnum20' => '20', |
|
| 143 | + 'date_jnum21' => '21', |
|
| 144 | + 'date_jnum22' => '22', |
|
| 145 | + 'date_jnum23' => '23', |
|
| 146 | + 'date_jnum24' => '24', |
|
| 147 | + 'date_jnum25' => '25', |
|
| 148 | + 'date_jnum26' => '26', |
|
| 149 | + 'date_jnum27' => '27', |
|
| 150 | + 'date_jnum28' => '28', |
|
| 151 | + 'date_jnum29' => '29', |
|
| 152 | + 'date_jnum3' => '3', |
|
| 153 | + 'date_jnum30' => '30', |
|
| 154 | + 'date_jnum31' => '31', |
|
| 155 | + 'date_jnum4' => '4', |
|
| 156 | + 'date_jnum5' => '5', |
|
| 157 | + 'date_jnum6' => '6', |
|
| 158 | + 'date_jnum7' => '7', |
|
| 159 | + 'date_jnum8' => '8', |
|
| 160 | + 'date_jnum9' => '9', |
|
| 161 | + 'date_jour_1' => 'dimanche', |
|
| 162 | + 'date_jour_1_abbr' => 'dim.', |
|
| 163 | + 'date_jour_1_initiale' => 'd.', |
|
| 164 | + 'date_jour_2' => 'lundi', |
|
| 165 | + 'date_jour_2_abbr' => 'lun.', |
|
| 166 | + 'date_jour_2_initiale' => 'l.', |
|
| 167 | + 'date_jour_3' => 'mardi', |
|
| 168 | + 'date_jour_3_abbr' => 'mar.', |
|
| 169 | + 'date_jour_3_initiale' => 'm.', |
|
| 170 | + 'date_jour_4' => 'mercredi', |
|
| 171 | + 'date_jour_4_abbr' => 'mer.', |
|
| 172 | + 'date_jour_4_initiale' => 'm.', |
|
| 173 | + 'date_jour_5' => 'jeudi', |
|
| 174 | + 'date_jour_5_abbr' => 'jeu.', |
|
| 175 | + 'date_jour_5_initiale' => 'j.', |
|
| 176 | + 'date_jour_6' => 'vendredi', |
|
| 177 | + 'date_jour_6_abbr' => 'ven.', |
|
| 178 | + 'date_jour_6_initiale' => 'v.', |
|
| 179 | + 'date_jour_7' => 'samedi', |
|
| 180 | + 'date_jour_7_abbr' => 'sam.', |
|
| 181 | + 'date_jour_7_initiale' => 's.', |
|
| 182 | + 'date_jours' => 'jours', |
|
| 183 | + 'date_minutes' => 'minutes', |
|
| 184 | + 'date_mois' => 'mois', |
|
| 185 | + 'date_mois_1' => 'janvier', |
|
| 186 | + 'date_mois_10' => 'octobre', |
|
| 187 | + 'date_mois_10_abbr' => 'oct.', |
|
| 188 | + 'date_mois_11' => 'novembre', |
|
| 189 | + 'date_mois_11_abbr' => 'nov.', |
|
| 190 | + 'date_mois_12' => 'décembre', |
|
| 191 | + 'date_mois_12_abbr' => 'déc.', |
|
| 192 | + 'date_mois_1_abbr' => 'janv.', |
|
| 193 | + 'date_mois_2' => 'février', |
|
| 194 | + 'date_mois_2_abbr' => 'févr.', |
|
| 195 | + 'date_mois_3' => 'mars', |
|
| 196 | + 'date_mois_3_abbr' => 'mars', |
|
| 197 | + 'date_mois_4' => 'avril', |
|
| 198 | + 'date_mois_4_abbr' => 'avr.', |
|
| 199 | + 'date_mois_5' => 'mai', |
|
| 200 | + 'date_mois_5_abbr' => 'mai', |
|
| 201 | + 'date_mois_6' => 'juin', |
|
| 202 | + 'date_mois_6_abbr' => 'juin', |
|
| 203 | + 'date_mois_7' => 'juillet', |
|
| 204 | + 'date_mois_7_abbr' => 'juil.', |
|
| 205 | + 'date_mois_8' => 'août', |
|
| 206 | + 'date_mois_8_abbr' => 'août', |
|
| 207 | + 'date_mois_9' => 'septembre', |
|
| 208 | + 'date_mois_9_abbr' => 'sept.', |
|
| 209 | + 'date_saison_1' => 'hiver', |
|
| 210 | + 'date_saison_2' => 'printemps', |
|
| 211 | + 'date_saison_3' => 'été', |
|
| 212 | + 'date_saison_4' => 'automne', |
|
| 213 | + 'date_secondes' => 'secondes', |
|
| 214 | + 'date_semaines' => 'semaines', |
|
| 215 | + 'date_un_mois' => 'mois', |
|
| 216 | + 'date_une_heure' => 'heure', |
|
| 217 | + 'date_une_minute' => 'minute', |
|
| 218 | + 'date_une_seconde' => 'seconde', |
|
| 219 | + 'date_une_semaine' => 'semaine', |
|
| 220 | + 'dirs_commencer' => ' afin de commencer réellement l’installation', |
|
| 221 | + 'dirs_preliminaire' => 'Préliminaire : <b>Régler les droits d’accès</b>', |
|
| 222 | + 'dirs_probleme_droits' => 'Problème de droits d’accès', |
|
| 223 | + 'dirs_repertoires_absents' => '<p><b>Les répertoires suivants n’ont pas été trouvés :</b></p><ul>@bad_dirs@</ul> |
|
| 224 | 224 | <p>Il est probable que cela soit dû à un problème de mauvaise mise en majuscules ou minuscules. |
| 225 | 225 | Vérifiez que les minuscules et majuscules de ces répertoires concordent bien avec ce qui est affiché |
| 226 | 226 | ci-dessus ; si ce n’est pas le cas, renommez les répertoires avec votre logiciel FTP de façon à corriger l’erreur.</p> |
| 227 | 227 | <p>Une fois cette manipulation effectuée, vous pourrez ', |
| 228 | - 'dirs_repertoires_suivants' => '<p><b>Les répertoires suivants ne sont pas accessibles en écriture :</b></p> <ul>@bad_dirs@</ul> |
|
| 228 | + 'dirs_repertoires_suivants' => '<p><b>Les répertoires suivants ne sont pas accessibles en écriture :</b></p> <ul>@bad_dirs@</ul> |
|
| 229 | 229 | <p>Pour y remédier, utilisez votre client FTP afin de régler les droits d’accès de chacun |
| 230 | 230 | de ces répertoires. La procédure est expliquée en détail dans le guide d’installation.</p> |
| 231 | 231 | <p>Une fois cette manipulation effectuée, vous pourrez ', |
| 232 | - 'double_occurrence' => 'Double occurrence de @balise@', |
|
| 232 | + 'double_occurrence' => 'Double occurrence de @balise@', |
|
| 233 | 233 | |
| 234 | - // E |
|
| 235 | - 'en_cours' => 'en cours', |
|
| 236 | - 'envoi_via_le_site' => 'Envoi via le site', |
|
| 237 | - 'erreur' => 'Erreur', |
|
| 238 | - 'erreur_balise_non_fermee' => 'dernière balise non refermée :', |
|
| 239 | - 'erreur_technique_ajaxform' => 'Oups. Une erreur inattendue a empêché de soumettre le formulaire. Vous pouvez essayer à nouveau.', |
|
| 240 | - 'erreur_technique_enregistrement_champs' => 'Une erreur technique a empêché l’enregistrement correct du champ @champs@.', |
|
| 241 | - 'erreur_technique_enregistrement_impossible' => 'Une erreur technique a empêché l’enregistrement.', |
|
| 242 | - 'erreur_texte' => 'erreur(s)', |
|
| 243 | - 'etape' => 'Étape', |
|
| 234 | + // E |
|
| 235 | + 'en_cours' => 'en cours', |
|
| 236 | + 'envoi_via_le_site' => 'Envoi via le site', |
|
| 237 | + 'erreur' => 'Erreur', |
|
| 238 | + 'erreur_balise_non_fermee' => 'dernière balise non refermée :', |
|
| 239 | + 'erreur_technique_ajaxform' => 'Oups. Une erreur inattendue a empêché de soumettre le formulaire. Vous pouvez essayer à nouveau.', |
|
| 240 | + 'erreur_technique_enregistrement_champs' => 'Une erreur technique a empêché l’enregistrement correct du champ @champs@.', |
|
| 241 | + 'erreur_technique_enregistrement_impossible' => 'Une erreur technique a empêché l’enregistrement.', |
|
| 242 | + 'erreur_texte' => 'erreur(s)', |
|
| 243 | + 'etape' => 'Étape', |
|
| 244 | 244 | |
| 245 | - // F |
|
| 246 | - 'fichier_introuvable' => 'Fichier @fichier@ introuvable', |
|
| 247 | - 'form_auteur_confirmation' => 'Confirmez votre adresse email', |
|
| 248 | - 'form_auteur_email_modifie' => 'Votre adresse email a été modifiée.', |
|
| 249 | - 'form_auteur_envoi_mail_confirmation' => 'Un courrier électronique de confirmation vient d’être envoyé à @email@. Vous devrez visiter l’adresse Web mentionnée dans ce courrier pour valider votre adresse mail.', |
|
| 250 | - 'form_auteur_mail_confirmation' => 'Bonjour, |
|
| 245 | + // F |
|
| 246 | + 'fichier_introuvable' => 'Fichier @fichier@ introuvable', |
|
| 247 | + 'form_auteur_confirmation' => 'Confirmez votre adresse email', |
|
| 248 | + 'form_auteur_email_modifie' => 'Votre adresse email a été modifiée.', |
|
| 249 | + 'form_auteur_envoi_mail_confirmation' => 'Un courrier électronique de confirmation vient d’être envoyé à @email@. Vous devrez visiter l’adresse Web mentionnée dans ce courrier pour valider votre adresse mail.', |
|
| 250 | + 'form_auteur_mail_confirmation' => 'Bonjour, |
|
| 251 | 251 | |
| 252 | 252 | Vous avez demandé à changer votre adresse email. |
| 253 | 253 | Pour confirmer votre nouvelle adresse, il suffit de vous connecter à |
@@ -256,337 +256,337 @@ discard block |
||
| 256 | 256 | |
| 257 | 257 | @url@ |
| 258 | 258 | ', |
| 259 | - 'form_deja_inscrit' => 'Vous êtes déjà inscrit.', |
|
| 260 | - 'form_email_non_valide' => 'Votre adresse email n’est pas valide.', |
|
| 261 | - 'form_forum_access_refuse' => 'Vous n’avez plus accès à ce site.', |
|
| 262 | - 'form_forum_bonjour' => 'Bonjour @nom@,', |
|
| 263 | - 'form_forum_confirmer_email' => 'Pour confirmer votre adresse email, rendez-vous à cette adresse : @url_confirm@', |
|
| 264 | - 'form_forum_email_deja_enregistre' => 'Cette adresse email est déjà enregistrée, vous pouvez donc utiliser votre mot de passe habituel.', |
|
| 265 | - 'form_forum_identifiant_mail' => 'Votre nouvel identifiant vient de vous être envoyé par email.', |
|
| 266 | - 'form_forum_identifiants' => 'Identifiants personnels', |
|
| 267 | - 'form_forum_indiquer_nom_email' => 'Indiquez ici votre nom et votre adresse email. Votre identifiant personnel vous parviendra rapidement, par courrier électronique.', |
|
| 268 | - 'form_forum_login' => 'login :', |
|
| 269 | - 'form_forum_message_auto' => '(ceci est un message automatique)', |
|
| 270 | - 'form_forum_pass' => 'mot de passe :', |
|
| 271 | - 'form_forum_probleme_mail' => 'Problème de mail : l’identifiant ne peut pas être envoyé.', |
|
| 272 | - 'form_forum_voici1' => 'Voici vos identifiants pour pouvoir participer à la vie du site "@nom_site_spip@" (@adresse_site@) :', |
|
| 273 | - 'form_forum_voici2' => 'Voici vos identifiants pour proposer des articles sur |
|
| 259 | + 'form_deja_inscrit' => 'Vous êtes déjà inscrit.', |
|
| 260 | + 'form_email_non_valide' => 'Votre adresse email n’est pas valide.', |
|
| 261 | + 'form_forum_access_refuse' => 'Vous n’avez plus accès à ce site.', |
|
| 262 | + 'form_forum_bonjour' => 'Bonjour @nom@,', |
|
| 263 | + 'form_forum_confirmer_email' => 'Pour confirmer votre adresse email, rendez-vous à cette adresse : @url_confirm@', |
|
| 264 | + 'form_forum_email_deja_enregistre' => 'Cette adresse email est déjà enregistrée, vous pouvez donc utiliser votre mot de passe habituel.', |
|
| 265 | + 'form_forum_identifiant_mail' => 'Votre nouvel identifiant vient de vous être envoyé par email.', |
|
| 266 | + 'form_forum_identifiants' => 'Identifiants personnels', |
|
| 267 | + 'form_forum_indiquer_nom_email' => 'Indiquez ici votre nom et votre adresse email. Votre identifiant personnel vous parviendra rapidement, par courrier électronique.', |
|
| 268 | + 'form_forum_login' => 'login :', |
|
| 269 | + 'form_forum_message_auto' => '(ceci est un message automatique)', |
|
| 270 | + 'form_forum_pass' => 'mot de passe :', |
|
| 271 | + 'form_forum_probleme_mail' => 'Problème de mail : l’identifiant ne peut pas être envoyé.', |
|
| 272 | + 'form_forum_voici1' => 'Voici vos identifiants pour pouvoir participer à la vie du site "@nom_site_spip@" (@adresse_site@) :', |
|
| 273 | + 'form_forum_voici2' => 'Voici vos identifiants pour proposer des articles sur |
|
| 274 | 274 | le site "@nom_site_spip@" (@adresse_login@) :', |
| 275 | - 'form_indiquer_email' => 'Veuillez indiquer votre adresse email.', |
|
| 276 | - 'form_indiquer_nom' => 'Veuillez indiquer votre nom.', |
|
| 277 | - 'form_indiquer_nom_site' => 'Veuillez indiquer le nom de votre site.', |
|
| 278 | - 'form_pet_deja_enregistre' => 'Ce site est déjà enregistré', |
|
| 279 | - 'form_pet_signature_pasprise' => 'Votre signature n’est pas prise en compte.', |
|
| 280 | - 'form_prop_confirmer_envoi' => 'Confirmer l’envoi', |
|
| 281 | - 'form_prop_description' => 'Description/commentaire', |
|
| 282 | - 'form_prop_enregistre' => 'Votre proposition est enregistrée, elle apparaîtra en ligne après validation par les responsables de ce site.', |
|
| 283 | - 'form_prop_envoyer' => 'Envoyer un message', |
|
| 284 | - 'form_prop_indiquer_email' => 'Veuillez indiquer une adresse email valide', |
|
| 285 | - 'form_prop_indiquer_nom_site' => 'Veuillez indiquer le nom du site.', |
|
| 286 | - 'form_prop_indiquer_sujet' => 'Veuillez indiquer un sujet', |
|
| 287 | - 'form_prop_message_envoye' => 'Message envoyé', |
|
| 288 | - 'form_prop_non_enregistre' => 'Votre proposition n’a pas été enregistrée.', |
|
| 289 | - 'form_prop_sujet' => 'Sujet', |
|
| 290 | - 'form_prop_url_site' => 'Adresse URL du site', |
|
| 291 | - 'format_date_incorrecte' => 'La date ou son format est incorrect', |
|
| 292 | - 'format_heure_incorrecte' => 'L’heure ou son format est incorrect', |
|
| 293 | - 'forum_non_inscrit' => 'Vous n’êtes pas inscrit, ou l’adresse ou le mot de passe sont erronés.', |
|
| 294 | - 'forum_par_auteur' => 'par @auteur@', |
|
| 295 | - 'forum_titre_erreur' => 'Erreur...', |
|
| 275 | + 'form_indiquer_email' => 'Veuillez indiquer votre adresse email.', |
|
| 276 | + 'form_indiquer_nom' => 'Veuillez indiquer votre nom.', |
|
| 277 | + 'form_indiquer_nom_site' => 'Veuillez indiquer le nom de votre site.', |
|
| 278 | + 'form_pet_deja_enregistre' => 'Ce site est déjà enregistré', |
|
| 279 | + 'form_pet_signature_pasprise' => 'Votre signature n’est pas prise en compte.', |
|
| 280 | + 'form_prop_confirmer_envoi' => 'Confirmer l’envoi', |
|
| 281 | + 'form_prop_description' => 'Description/commentaire', |
|
| 282 | + 'form_prop_enregistre' => 'Votre proposition est enregistrée, elle apparaîtra en ligne après validation par les responsables de ce site.', |
|
| 283 | + 'form_prop_envoyer' => 'Envoyer un message', |
|
| 284 | + 'form_prop_indiquer_email' => 'Veuillez indiquer une adresse email valide', |
|
| 285 | + 'form_prop_indiquer_nom_site' => 'Veuillez indiquer le nom du site.', |
|
| 286 | + 'form_prop_indiquer_sujet' => 'Veuillez indiquer un sujet', |
|
| 287 | + 'form_prop_message_envoye' => 'Message envoyé', |
|
| 288 | + 'form_prop_non_enregistre' => 'Votre proposition n’a pas été enregistrée.', |
|
| 289 | + 'form_prop_sujet' => 'Sujet', |
|
| 290 | + 'form_prop_url_site' => 'Adresse URL du site', |
|
| 291 | + 'format_date_incorrecte' => 'La date ou son format est incorrect', |
|
| 292 | + 'format_heure_incorrecte' => 'L’heure ou son format est incorrect', |
|
| 293 | + 'forum_non_inscrit' => 'Vous n’êtes pas inscrit, ou l’adresse ou le mot de passe sont erronés.', |
|
| 294 | + 'forum_par_auteur' => 'par @auteur@', |
|
| 295 | + 'forum_titre_erreur' => 'Erreur...', |
|
| 296 | 296 | |
| 297 | - // I |
|
| 298 | - 'ical_texte_rss_articles' => 'Le fichier « backend » des articles de ce site se trouve à l’adresse :', |
|
| 299 | - 'ical_texte_rss_articles2' => 'Vous pouvez également obtenir des fichiers « backend » pour les articles de chaque rubrique du site :', |
|
| 300 | - 'ical_texte_rss_breves' => 'Il existe de plus un fichier contenant les brèves du site. En précisant un numéro de rubrique, vous obtiendrez uniquement les brèves de cette rubrique.', |
|
| 301 | - 'icone_a_suivre' => 'À suivre', |
|
| 302 | - 'icone_admin_site' => 'Administration du site', |
|
| 303 | - 'icone_agenda' => 'Agenda', |
|
| 304 | - 'icone_aide_ligne' => 'Aide', |
|
| 305 | - 'icone_articles' => 'Articles', |
|
| 306 | - 'icone_auteurs' => 'Auteurs', |
|
| 307 | - 'icone_brouteur' => 'Navigation rapide', |
|
| 308 | - 'icone_configuration_site' => 'Configuration', |
|
| 309 | - 'icone_configurer_site' => 'Configurer votre site', |
|
| 310 | - 'icone_creer_nouvel_auteur' => 'Créer un nouvel auteur', |
|
| 311 | - 'icone_creer_rubrique' => 'Créer une rubrique', |
|
| 312 | - 'icone_creer_sous_rubrique' => 'Créer une sous-rubrique', |
|
| 313 | - 'icone_deconnecter' => 'Se déconnecter', |
|
| 314 | - 'icone_discussions' => 'Discussions', |
|
| 315 | - 'icone_doc_rubrique' => 'Documents des rubriques', |
|
| 316 | - 'icone_ecrire_article' => 'Écrire un nouvel article', |
|
| 317 | - 'icone_edition_site' => 'Édition', |
|
| 318 | - 'icone_gestion_langues' => 'Gestion des langues', |
|
| 319 | - 'icone_informations_personnelles' => 'Informations personnelles', |
|
| 320 | - 'icone_interface_complet' => 'interface complète', |
|
| 321 | - 'icone_interface_simple' => 'Interface simplifiée', |
|
| 322 | - 'icone_maintenance_site' => 'Maintenance du site', |
|
| 323 | - 'icone_messagerie_personnelle' => 'Messagerie personnelle', |
|
| 324 | - 'icone_repartition_debut' => 'Afficher la répartition depuis le début', |
|
| 325 | - 'icone_rubriques' => 'Rubriques', |
|
| 326 | - 'icone_sauver_site' => 'Sauvegarde du site', |
|
| 327 | - 'icone_site_entier' => 'Tout le site', |
|
| 328 | - 'icone_sites_references' => 'Sites référencés', |
|
| 329 | - 'icone_statistiques' => 'Statistiques du site', |
|
| 330 | - 'icone_suivi_activite' => 'Suivre la vie du site', |
|
| 331 | - 'icone_suivi_actualite' => 'Évolution du site', |
|
| 332 | - 'icone_suivi_pettions' => 'Suivre/gérer les pétitions', |
|
| 333 | - 'icone_suivi_revisions' => 'Modifications des articles', |
|
| 334 | - 'icone_supprimer_document' => 'Supprimer ce document', |
|
| 335 | - 'icone_supprimer_image' => 'Supprimer cette image', |
|
| 336 | - 'icone_tous_articles' => 'Tous vos articles', |
|
| 337 | - 'icone_tous_auteur' => 'Tous les auteurs', |
|
| 338 | - 'icone_tous_visiteur' => 'Tous les visiteurs', |
|
| 339 | - 'icone_visiter_site' => 'Voir le site public', |
|
| 340 | - 'icone_voir_en_ligne' => 'Voir en ligne', |
|
| 341 | - 'img_indisponible' => 'image indisponible', |
|
| 342 | - 'impossible' => 'impossible', |
|
| 343 | - 'info_a_suivre' => 'À SUIVRE »', |
|
| 344 | - 'info_acces_interdit' => 'Accès interdit', |
|
| 345 | - 'info_acces_refuse' => 'Accès refusé', |
|
| 346 | - 'info_action' => 'Action : @action@', |
|
| 347 | - 'info_administrer_rubriques' => 'Vous pouvez administrer cette rubrique et ses sous-rubriques', |
|
| 348 | - 'info_adresse_non_indiquee' => 'Vous n’avez pas indiqué d’adresse à tester !', |
|
| 349 | - 'info_aide' => 'AIDE :', |
|
| 350 | - 'info_ajouter_mot' => 'Ajouter ce mot', |
|
| 351 | - 'info_annonce' => 'ANNONCE', |
|
| 352 | - 'info_annonces_generales' => 'Annonces générales :', |
|
| 353 | - 'info_article_propose' => 'Article proposé', |
|
| 354 | - 'info_article_publie' => 'Article publié', |
|
| 355 | - 'info_article_redaction' => 'Article en cours de rédaction', |
|
| 356 | - 'info_article_refuse' => 'Article refusé', |
|
| 357 | - 'info_article_supprime' => 'Article supprimé', |
|
| 358 | - 'info_articles' => 'Articles', |
|
| 359 | - 'info_articles_a_valider' => 'Les articles à valider', |
|
| 360 | - 'info_articles_nb' => '@nb@ articles', |
|
| 361 | - 'info_articles_proposes' => 'Articles proposés', |
|
| 362 | - 'info_articles_un' => '1 article', |
|
| 363 | - 'info_auteurs_nombre' => 'auteur(s) :', |
|
| 364 | - 'info_authentification_ftp' => 'Authentification (par FTP).', |
|
| 365 | - 'info_breves_2' => 'brèves', |
|
| 366 | - 'info_breves_nb' => '@nb@ brèves', |
|
| 367 | - 'info_breves_un' => '1 brève', |
|
| 368 | - 'info_connexion_refusee' => 'Connexion refusée', |
|
| 369 | - 'info_contact_developpeur' => 'Veuillez contacter un développeur.', |
|
| 370 | - 'info_contenance' => 'Ce site contient :', |
|
| 371 | - 'info_contribution' => 'contributions', |
|
| 372 | - 'info_copyright' => '@spip@ est un logiciel libre distribué @lien_gpl@.', |
|
| 373 | - 'info_copyright_doc' => 'Pour plus d’informations, voir le site <a href="@spipnet@">@spipnet_affiche@</a>.', |
|
| 374 | - 'info_copyright_gpl' => 'sous licence GPL', |
|
| 375 | - 'info_cours_edition' => 'En cours de rédaction', |
|
| 376 | - 'info_creer_repertoire' => 'Veuillez créer un fichier ou un répertoire nommé :', |
|
| 377 | - 'info_creer_repertoire_2' => 'à l’intérieur du sous-répertoire <b>@repertoire@</b>, puis :', |
|
| 378 | - 'info_creer_vignette' => 'création automatique de la vignette', |
|
| 379 | - 'info_creerdansrubrique_non_autorise' => 'Vous n’avez pas de droits suffisants pour créer un contenu dans cette rubrique', |
|
| 380 | - 'info_deplier' => 'Déplier', |
|
| 381 | - 'info_descriptif_nombre' => 'descriptif(s) :', |
|
| 382 | - 'info_description' => 'Description :', |
|
| 383 | - 'info_description_2' => 'Description :', |
|
| 384 | - 'info_dimension' => 'Dimensions :', |
|
| 385 | - 'info_documents_nb' => '@nb@ documents', |
|
| 386 | - 'info_documents_un' => '1 document', |
|
| 387 | - 'info_ecire_message_prive' => 'Écrire un message privé', |
|
| 388 | - 'info_email_invalide' => 'Adresse email invalide.', |
|
| 389 | - 'info_en_cours_validation' => 'Vos articles en cours de rédaction', |
|
| 390 | - 'info_en_ligne' => 'Actuellement en ligne :', |
|
| 391 | - 'info_envoyer_message_prive' => 'Envoyer un message privé à cet auteur', |
|
| 392 | - 'info_erreur_requete' => 'Erreur dans la requête :', |
|
| 393 | - 'info_erreur_squelette2' => 'Aucun squelette <b>@fichier@</b> n’est disponible...', |
|
| 394 | - 'info_erreur_systeme' => 'Erreur système (errno @errsys@)', |
|
| 395 | - 'info_erreur_systeme2' => 'Le disque dur est peut-être plein, ou la base de données endommagée.<br /> |
|
| 297 | + // I |
|
| 298 | + 'ical_texte_rss_articles' => 'Le fichier « backend » des articles de ce site se trouve à l’adresse :', |
|
| 299 | + 'ical_texte_rss_articles2' => 'Vous pouvez également obtenir des fichiers « backend » pour les articles de chaque rubrique du site :', |
|
| 300 | + 'ical_texte_rss_breves' => 'Il existe de plus un fichier contenant les brèves du site. En précisant un numéro de rubrique, vous obtiendrez uniquement les brèves de cette rubrique.', |
|
| 301 | + 'icone_a_suivre' => 'À suivre', |
|
| 302 | + 'icone_admin_site' => 'Administration du site', |
|
| 303 | + 'icone_agenda' => 'Agenda', |
|
| 304 | + 'icone_aide_ligne' => 'Aide', |
|
| 305 | + 'icone_articles' => 'Articles', |
|
| 306 | + 'icone_auteurs' => 'Auteurs', |
|
| 307 | + 'icone_brouteur' => 'Navigation rapide', |
|
| 308 | + 'icone_configuration_site' => 'Configuration', |
|
| 309 | + 'icone_configurer_site' => 'Configurer votre site', |
|
| 310 | + 'icone_creer_nouvel_auteur' => 'Créer un nouvel auteur', |
|
| 311 | + 'icone_creer_rubrique' => 'Créer une rubrique', |
|
| 312 | + 'icone_creer_sous_rubrique' => 'Créer une sous-rubrique', |
|
| 313 | + 'icone_deconnecter' => 'Se déconnecter', |
|
| 314 | + 'icone_discussions' => 'Discussions', |
|
| 315 | + 'icone_doc_rubrique' => 'Documents des rubriques', |
|
| 316 | + 'icone_ecrire_article' => 'Écrire un nouvel article', |
|
| 317 | + 'icone_edition_site' => 'Édition', |
|
| 318 | + 'icone_gestion_langues' => 'Gestion des langues', |
|
| 319 | + 'icone_informations_personnelles' => 'Informations personnelles', |
|
| 320 | + 'icone_interface_complet' => 'interface complète', |
|
| 321 | + 'icone_interface_simple' => 'Interface simplifiée', |
|
| 322 | + 'icone_maintenance_site' => 'Maintenance du site', |
|
| 323 | + 'icone_messagerie_personnelle' => 'Messagerie personnelle', |
|
| 324 | + 'icone_repartition_debut' => 'Afficher la répartition depuis le début', |
|
| 325 | + 'icone_rubriques' => 'Rubriques', |
|
| 326 | + 'icone_sauver_site' => 'Sauvegarde du site', |
|
| 327 | + 'icone_site_entier' => 'Tout le site', |
|
| 328 | + 'icone_sites_references' => 'Sites référencés', |
|
| 329 | + 'icone_statistiques' => 'Statistiques du site', |
|
| 330 | + 'icone_suivi_activite' => 'Suivre la vie du site', |
|
| 331 | + 'icone_suivi_actualite' => 'Évolution du site', |
|
| 332 | + 'icone_suivi_pettions' => 'Suivre/gérer les pétitions', |
|
| 333 | + 'icone_suivi_revisions' => 'Modifications des articles', |
|
| 334 | + 'icone_supprimer_document' => 'Supprimer ce document', |
|
| 335 | + 'icone_supprimer_image' => 'Supprimer cette image', |
|
| 336 | + 'icone_tous_articles' => 'Tous vos articles', |
|
| 337 | + 'icone_tous_auteur' => 'Tous les auteurs', |
|
| 338 | + 'icone_tous_visiteur' => 'Tous les visiteurs', |
|
| 339 | + 'icone_visiter_site' => 'Voir le site public', |
|
| 340 | + 'icone_voir_en_ligne' => 'Voir en ligne', |
|
| 341 | + 'img_indisponible' => 'image indisponible', |
|
| 342 | + 'impossible' => 'impossible', |
|
| 343 | + 'info_a_suivre' => 'À SUIVRE »', |
|
| 344 | + 'info_acces_interdit' => 'Accès interdit', |
|
| 345 | + 'info_acces_refuse' => 'Accès refusé', |
|
| 346 | + 'info_action' => 'Action : @action@', |
|
| 347 | + 'info_administrer_rubriques' => 'Vous pouvez administrer cette rubrique et ses sous-rubriques', |
|
| 348 | + 'info_adresse_non_indiquee' => 'Vous n’avez pas indiqué d’adresse à tester !', |
|
| 349 | + 'info_aide' => 'AIDE :', |
|
| 350 | + 'info_ajouter_mot' => 'Ajouter ce mot', |
|
| 351 | + 'info_annonce' => 'ANNONCE', |
|
| 352 | + 'info_annonces_generales' => 'Annonces générales :', |
|
| 353 | + 'info_article_propose' => 'Article proposé', |
|
| 354 | + 'info_article_publie' => 'Article publié', |
|
| 355 | + 'info_article_redaction' => 'Article en cours de rédaction', |
|
| 356 | + 'info_article_refuse' => 'Article refusé', |
|
| 357 | + 'info_article_supprime' => 'Article supprimé', |
|
| 358 | + 'info_articles' => 'Articles', |
|
| 359 | + 'info_articles_a_valider' => 'Les articles à valider', |
|
| 360 | + 'info_articles_nb' => '@nb@ articles', |
|
| 361 | + 'info_articles_proposes' => 'Articles proposés', |
|
| 362 | + 'info_articles_un' => '1 article', |
|
| 363 | + 'info_auteurs_nombre' => 'auteur(s) :', |
|
| 364 | + 'info_authentification_ftp' => 'Authentification (par FTP).', |
|
| 365 | + 'info_breves_2' => 'brèves', |
|
| 366 | + 'info_breves_nb' => '@nb@ brèves', |
|
| 367 | + 'info_breves_un' => '1 brève', |
|
| 368 | + 'info_connexion_refusee' => 'Connexion refusée', |
|
| 369 | + 'info_contact_developpeur' => 'Veuillez contacter un développeur.', |
|
| 370 | + 'info_contenance' => 'Ce site contient :', |
|
| 371 | + 'info_contribution' => 'contributions', |
|
| 372 | + 'info_copyright' => '@spip@ est un logiciel libre distribué @lien_gpl@.', |
|
| 373 | + 'info_copyright_doc' => 'Pour plus d’informations, voir le site <a href="@spipnet@">@spipnet_affiche@</a>.', |
|
| 374 | + 'info_copyright_gpl' => 'sous licence GPL', |
|
| 375 | + 'info_cours_edition' => 'En cours de rédaction', |
|
| 376 | + 'info_creer_repertoire' => 'Veuillez créer un fichier ou un répertoire nommé :', |
|
| 377 | + 'info_creer_repertoire_2' => 'à l’intérieur du sous-répertoire <b>@repertoire@</b>, puis :', |
|
| 378 | + 'info_creer_vignette' => 'création automatique de la vignette', |
|
| 379 | + 'info_creerdansrubrique_non_autorise' => 'Vous n’avez pas de droits suffisants pour créer un contenu dans cette rubrique', |
|
| 380 | + 'info_deplier' => 'Déplier', |
|
| 381 | + 'info_descriptif_nombre' => 'descriptif(s) :', |
|
| 382 | + 'info_description' => 'Description :', |
|
| 383 | + 'info_description_2' => 'Description :', |
|
| 384 | + 'info_dimension' => 'Dimensions :', |
|
| 385 | + 'info_documents_nb' => '@nb@ documents', |
|
| 386 | + 'info_documents_un' => '1 document', |
|
| 387 | + 'info_ecire_message_prive' => 'Écrire un message privé', |
|
| 388 | + 'info_email_invalide' => 'Adresse email invalide.', |
|
| 389 | + 'info_en_cours_validation' => 'Vos articles en cours de rédaction', |
|
| 390 | + 'info_en_ligne' => 'Actuellement en ligne :', |
|
| 391 | + 'info_envoyer_message_prive' => 'Envoyer un message privé à cet auteur', |
|
| 392 | + 'info_erreur_requete' => 'Erreur dans la requête :', |
|
| 393 | + 'info_erreur_squelette2' => 'Aucun squelette <b>@fichier@</b> n’est disponible...', |
|
| 394 | + 'info_erreur_systeme' => 'Erreur système (errno @errsys@)', |
|
| 395 | + 'info_erreur_systeme2' => 'Le disque dur est peut-être plein, ou la base de données endommagée.<br /> |
|
| 396 | 396 | <span style="color:red;">Essayez de <a href=\'@script@\'>réparer la base</a>, ou contactez votre hébergeur.</span>', |
| 397 | - 'info_fini' => 'C’est fini !', |
|
| 398 | - 'info_format_image' => 'Formats d’images pouvant être utilisées pour créer des vignettes : @gd_formats@.', |
|
| 399 | - 'info_format_non_defini' => 'format non défini', |
|
| 400 | - 'info_grand_ecran' => 'Grand écran', |
|
| 401 | - 'info_image_aide' => 'AIDE', |
|
| 402 | - 'info_image_process_titre' => 'Méthode de fabrication des vignettes', |
|
| 403 | - 'info_impossible_lire_page' => '<b>Erreur !</b> Impossible de lire la page <tt><html>@test_proxy@</html></tt> à travers le proxy ', |
|
| 404 | - 'info_installation_systeme_publication' => 'Installation du système de publication...', |
|
| 405 | - 'info_installer_documents' => 'Vous pouvez installer automatiquement tous les documents contenus dans le dossier @upload@.', |
|
| 406 | - 'info_installer_ftp' => 'En tant qu’administrateur, vous pouvez installer (par FTP) des fichiers dans le dossier @upload@ pour ensuite les sélectionner directement ici.', |
|
| 407 | - 'info_installer_images' => 'Vous pouvez installer des images aux formats JPEG, GIF et PNG.', |
|
| 408 | - 'info_installer_images_dossier' => 'Installer des images dans le dossier @upload@ pour pouvoir les sélectionner ici.', |
|
| 409 | - 'info_interface_complete' => 'interface complète', |
|
| 410 | - 'info_interface_simple' => 'Interface simplifiée', |
|
| 411 | - 'info_joindre_document_article' => 'Vous pouvez joindre à cet article des documents de type', |
|
| 412 | - 'info_joindre_document_rubrique' => 'Vous pouvez ajouter dans cette rubrique des documents de type', |
|
| 413 | - 'info_joindre_documents_article' => 'Vous pouvez joindre à votre article des documents de type :', |
|
| 414 | - 'info_l_article' => 'l’article', |
|
| 415 | - 'info_la_breve' => 'la brève', |
|
| 416 | - 'info_la_rubrique' => 'la rubrique', |
|
| 417 | - 'info_langue_principale' => 'Langue principale du site', |
|
| 418 | - 'info_largeur_vignette' => '@largeur_vignette@ × @hauteur_vignette@ pixels', |
|
| 419 | - 'info_les_auteurs_1' => 'par @les_auteurs@', |
|
| 420 | - 'info_logo_format_interdit' => 'Seuls les logos aux formats @formats@ sont autorisés.', |
|
| 421 | - 'info_logo_max_poids' => 'Les logos doivent obligatoirement faire moins de @maxi@ (ce fichier fait @actuel@).', |
|
| 422 | - 'info_mail_fournisseur' => '[email protected]', |
|
| 423 | - 'info_message_2' => 'MESSAGE', |
|
| 424 | - 'info_message_supprime' => 'MESSAGE SUPPRIMÉ', |
|
| 425 | - 'info_messages_nb' => '@nb@ messages', |
|
| 426 | - 'info_messages_un' => '1 message', |
|
| 427 | - 'info_mise_en_ligne' => 'Date de mise en ligne :', |
|
| 428 | - 'info_modification_parametres_securite' => 'modifications des paramètres de sécurité', |
|
| 429 | - 'info_mois_courant' => 'Dans le courant du mois :', |
|
| 430 | - 'info_mot_cle_ajoute' => 'Le mot-clé suivant a été ajouté à', |
|
| 431 | - 'info_multi_herit' => 'Langue par défaut', |
|
| 432 | - 'info_multi_langues_soulignees' => 'Les <u>langues soulignées</u> bénéficient d’une traduction totale ou partielle des textes de l’interface. Si vous sélectionnez ces langues, de nombreux éléments du site public (dates, formulaires) seront automatiquement traduits. Pour les langues non soulignées, ces éléments apparaîtront dans la langue principale du site.', |
|
| 433 | - 'info_multilinguisme' => 'Multilinguisme', |
|
| 434 | - 'info_nom_non_utilisateurs_connectes' => 'Votre nom n’apparaît pas dans la liste des utilisateurs connectés.', |
|
| 435 | - 'info_nom_utilisateurs_connectes' => 'Votre nom apparaît dans la liste des utilisateurs connectés.', |
|
| 436 | - 'info_nombre_en_ligne' => 'Actuellement en ligne :', |
|
| 437 | - 'info_non_resultat' => 'Aucun résultat pour "@cherche_mot@"', |
|
| 438 | - 'info_non_utilisation_messagerie' => 'Vous n’utilisez pas la messagerie interne de ce site.', |
|
| 439 | - 'info_nouveau_message' => 'VOUS AVEZ UN NOUVEAU MESSAGE', |
|
| 440 | - 'info_nouveaux_messages' => 'VOUS AVEZ @total_messages@ NOUVEAUX MESSAGES', |
|
| 441 | - 'info_numero_abbreviation' => 'N° ', |
|
| 442 | - 'info_obligatoire' => 'Cette information est obligatoire', |
|
| 443 | - 'info_pense_bete' => 'PENSE-BÊTE', |
|
| 444 | - 'info_petit_ecran' => 'Petit écran', |
|
| 445 | - 'info_petition_close' => 'Pétition close', |
|
| 446 | - 'info_pixels' => 'pixels', |
|
| 447 | - 'info_plusieurs_mots_trouves' => 'Plusieurs mots-clés trouvés pour "@cherche_mot@" :', |
|
| 448 | - 'info_portfolio_automatique' => 'Portfolio automatique :', |
|
| 449 | - 'info_premier_resultat' => '[@debut_limit@ premiers résultats sur @total@]', |
|
| 450 | - 'info_premier_resultat_sur' => '[@debut_limit@ premiers résultats sur @total@]', |
|
| 451 | - 'info_propose_1' => '[@nom_site_spip@] Propose : @titre@', |
|
| 452 | - 'info_propose_2' => 'Article proposé |
|
| 397 | + 'info_fini' => 'C’est fini !', |
|
| 398 | + 'info_format_image' => 'Formats d’images pouvant être utilisées pour créer des vignettes : @gd_formats@.', |
|
| 399 | + 'info_format_non_defini' => 'format non défini', |
|
| 400 | + 'info_grand_ecran' => 'Grand écran', |
|
| 401 | + 'info_image_aide' => 'AIDE', |
|
| 402 | + 'info_image_process_titre' => 'Méthode de fabrication des vignettes', |
|
| 403 | + 'info_impossible_lire_page' => '<b>Erreur !</b> Impossible de lire la page <tt><html>@test_proxy@</html></tt> à travers le proxy ', |
|
| 404 | + 'info_installation_systeme_publication' => 'Installation du système de publication...', |
|
| 405 | + 'info_installer_documents' => 'Vous pouvez installer automatiquement tous les documents contenus dans le dossier @upload@.', |
|
| 406 | + 'info_installer_ftp' => 'En tant qu’administrateur, vous pouvez installer (par FTP) des fichiers dans le dossier @upload@ pour ensuite les sélectionner directement ici.', |
|
| 407 | + 'info_installer_images' => 'Vous pouvez installer des images aux formats JPEG, GIF et PNG.', |
|
| 408 | + 'info_installer_images_dossier' => 'Installer des images dans le dossier @upload@ pour pouvoir les sélectionner ici.', |
|
| 409 | + 'info_interface_complete' => 'interface complète', |
|
| 410 | + 'info_interface_simple' => 'Interface simplifiée', |
|
| 411 | + 'info_joindre_document_article' => 'Vous pouvez joindre à cet article des documents de type', |
|
| 412 | + 'info_joindre_document_rubrique' => 'Vous pouvez ajouter dans cette rubrique des documents de type', |
|
| 413 | + 'info_joindre_documents_article' => 'Vous pouvez joindre à votre article des documents de type :', |
|
| 414 | + 'info_l_article' => 'l’article', |
|
| 415 | + 'info_la_breve' => 'la brève', |
|
| 416 | + 'info_la_rubrique' => 'la rubrique', |
|
| 417 | + 'info_langue_principale' => 'Langue principale du site', |
|
| 418 | + 'info_largeur_vignette' => '@largeur_vignette@ × @hauteur_vignette@ pixels', |
|
| 419 | + 'info_les_auteurs_1' => 'par @les_auteurs@', |
|
| 420 | + 'info_logo_format_interdit' => 'Seuls les logos aux formats @formats@ sont autorisés.', |
|
| 421 | + 'info_logo_max_poids' => 'Les logos doivent obligatoirement faire moins de @maxi@ (ce fichier fait @actuel@).', |
|
| 422 | + 'info_mail_fournisseur' => '[email protected]', |
|
| 423 | + 'info_message_2' => 'MESSAGE', |
|
| 424 | + 'info_message_supprime' => 'MESSAGE SUPPRIMÉ', |
|
| 425 | + 'info_messages_nb' => '@nb@ messages', |
|
| 426 | + 'info_messages_un' => '1 message', |
|
| 427 | + 'info_mise_en_ligne' => 'Date de mise en ligne :', |
|
| 428 | + 'info_modification_parametres_securite' => 'modifications des paramètres de sécurité', |
|
| 429 | + 'info_mois_courant' => 'Dans le courant du mois :', |
|
| 430 | + 'info_mot_cle_ajoute' => 'Le mot-clé suivant a été ajouté à', |
|
| 431 | + 'info_multi_herit' => 'Langue par défaut', |
|
| 432 | + 'info_multi_langues_soulignees' => 'Les <u>langues soulignées</u> bénéficient d’une traduction totale ou partielle des textes de l’interface. Si vous sélectionnez ces langues, de nombreux éléments du site public (dates, formulaires) seront automatiquement traduits. Pour les langues non soulignées, ces éléments apparaîtront dans la langue principale du site.', |
|
| 433 | + 'info_multilinguisme' => 'Multilinguisme', |
|
| 434 | + 'info_nom_non_utilisateurs_connectes' => 'Votre nom n’apparaît pas dans la liste des utilisateurs connectés.', |
|
| 435 | + 'info_nom_utilisateurs_connectes' => 'Votre nom apparaît dans la liste des utilisateurs connectés.', |
|
| 436 | + 'info_nombre_en_ligne' => 'Actuellement en ligne :', |
|
| 437 | + 'info_non_resultat' => 'Aucun résultat pour "@cherche_mot@"', |
|
| 438 | + 'info_non_utilisation_messagerie' => 'Vous n’utilisez pas la messagerie interne de ce site.', |
|
| 439 | + 'info_nouveau_message' => 'VOUS AVEZ UN NOUVEAU MESSAGE', |
|
| 440 | + 'info_nouveaux_messages' => 'VOUS AVEZ @total_messages@ NOUVEAUX MESSAGES', |
|
| 441 | + 'info_numero_abbreviation' => 'N° ', |
|
| 442 | + 'info_obligatoire' => 'Cette information est obligatoire', |
|
| 443 | + 'info_pense_bete' => 'PENSE-BÊTE', |
|
| 444 | + 'info_petit_ecran' => 'Petit écran', |
|
| 445 | + 'info_petition_close' => 'Pétition close', |
|
| 446 | + 'info_pixels' => 'pixels', |
|
| 447 | + 'info_plusieurs_mots_trouves' => 'Plusieurs mots-clés trouvés pour "@cherche_mot@" :', |
|
| 448 | + 'info_portfolio_automatique' => 'Portfolio automatique :', |
|
| 449 | + 'info_premier_resultat' => '[@debut_limit@ premiers résultats sur @total@]', |
|
| 450 | + 'info_premier_resultat_sur' => '[@debut_limit@ premiers résultats sur @total@]', |
|
| 451 | + 'info_propose_1' => '[@nom_site_spip@] Propose : @titre@', |
|
| 452 | + 'info_propose_2' => 'Article proposé |
|
| 453 | 453 | ---------------', |
| 454 | - 'info_propose_3' => 'L’article "@titre@" est proposé à la publication.', |
|
| 455 | - 'info_propose_4' => 'Vous êtes invité à venir le consulter et à donner votre opinion', |
|
| 456 | - 'info_propose_5' => 'dans le forum qui lui est attaché. Il est disponible à l’adresse :', |
|
| 457 | - 'info_publie_01' => 'L’article "@titre@" a été validé par @connect_nom@.', |
|
| 458 | - 'info_publie_1' => '[@nom_site_spip@] PUBLIE : @titre@', |
|
| 459 | - 'info_publie_2' => 'Article publié |
|
| 454 | + 'info_propose_3' => 'L’article "@titre@" est proposé à la publication.', |
|
| 455 | + 'info_propose_4' => 'Vous êtes invité à venir le consulter et à donner votre opinion', |
|
| 456 | + 'info_propose_5' => 'dans le forum qui lui est attaché. Il est disponible à l’adresse :', |
|
| 457 | + 'info_publie_01' => 'L’article "@titre@" a été validé par @connect_nom@.', |
|
| 458 | + 'info_publie_1' => '[@nom_site_spip@] PUBLIE : @titre@', |
|
| 459 | + 'info_publie_2' => 'Article publié |
|
| 460 | 460 | --------------', |
| 461 | - 'info_rechercher' => 'Rechercher', |
|
| 462 | - 'info_rechercher_02' => 'Rechercher :', |
|
| 463 | - 'info_remplacer_vignette' => 'Remplacer la vignette par défaut par un logo personnalisé :', |
|
| 464 | - 'info_rubriques_nb' => '@nb@ rubriques', |
|
| 465 | - 'info_rubriques_un' => '1 rubrique', |
|
| 466 | - 'info_sans_titre_2' => 'sans titre', |
|
| 467 | - 'info_selectionner_fichier' => 'Vous pouvez sélectionner un fichier du dossier @upload@', |
|
| 468 | - 'info_selectionner_fichier_2' => 'Sélectionner un fichier :', |
|
| 469 | - 'info_sites_nb' => '@nb@ sites', |
|
| 470 | - 'info_sites_un' => '1 site', |
|
| 471 | - 'info_supprimer_vignette' => 'supprimer la vignette', |
|
| 472 | - 'info_symbole_bleu' => 'Le symbole <b>bleu</b> indique un <b>pense-bête</b> : c’est-à-dire un message à votre usage personnel.', |
|
| 473 | - 'info_symbole_jaune' => 'Le symbole <b>jaune</b> indique une <b>annonce à tous les rédacteurs</b> : modifiable par tous les administrateurs, et visible par tous les rédacteurs.', |
|
| 474 | - 'info_symbole_vert' => 'Le symbole <b>vert</b> indique les <b>messages échangés avec d’autres utilisateurs</b> du site.', |
|
| 475 | - 'info_telecharger_nouveau_logo' => 'Télécharger un nouveau logo :', |
|
| 476 | - 'info_telecharger_ordinateur' => 'Télécharger depuis votre ordinateur :', |
|
| 477 | - 'info_tous_resultats_enregistres' => '[tous les résultats sont enregistrés]', |
|
| 478 | - 'info_tout_afficher' => 'Tout afficher', |
|
| 479 | - 'info_travaux_texte' => 'Ce site n’est pas encore configuré. Revenez plus tard...', |
|
| 480 | - 'info_travaux_titre' => 'Site en travaux', |
|
| 481 | - 'info_trop_resultat' => 'Trop de résultats pour "@cherche_mot@" ; veuillez affiner la recherche.', |
|
| 482 | - 'info_utilisation_messagerie_interne' => 'Vous utilisez la messagerie interne de ce site.', |
|
| 483 | - 'info_valider_lien' => 'valider ce lien', |
|
| 484 | - 'info_verifier_image' => ', veuillez vérifier que vos images ont été transférées correctement.', |
|
| 485 | - 'info_vignette_defaut' => 'Vignette par défaut', |
|
| 486 | - 'info_vignette_personnalisee' => 'Vignette personnalisée', |
|
| 487 | - 'info_visite' => 'visite :', |
|
| 488 | - 'info_vos_rendez_vous' => 'Vos rendez-vous à venir', |
|
| 489 | - 'infos_vos_pense_bete' => 'Vos pense-bêtes', |
|
| 461 | + 'info_rechercher' => 'Rechercher', |
|
| 462 | + 'info_rechercher_02' => 'Rechercher :', |
|
| 463 | + 'info_remplacer_vignette' => 'Remplacer la vignette par défaut par un logo personnalisé :', |
|
| 464 | + 'info_rubriques_nb' => '@nb@ rubriques', |
|
| 465 | + 'info_rubriques_un' => '1 rubrique', |
|
| 466 | + 'info_sans_titre_2' => 'sans titre', |
|
| 467 | + 'info_selectionner_fichier' => 'Vous pouvez sélectionner un fichier du dossier @upload@', |
|
| 468 | + 'info_selectionner_fichier_2' => 'Sélectionner un fichier :', |
|
| 469 | + 'info_sites_nb' => '@nb@ sites', |
|
| 470 | + 'info_sites_un' => '1 site', |
|
| 471 | + 'info_supprimer_vignette' => 'supprimer la vignette', |
|
| 472 | + 'info_symbole_bleu' => 'Le symbole <b>bleu</b> indique un <b>pense-bête</b> : c’est-à-dire un message à votre usage personnel.', |
|
| 473 | + 'info_symbole_jaune' => 'Le symbole <b>jaune</b> indique une <b>annonce à tous les rédacteurs</b> : modifiable par tous les administrateurs, et visible par tous les rédacteurs.', |
|
| 474 | + 'info_symbole_vert' => 'Le symbole <b>vert</b> indique les <b>messages échangés avec d’autres utilisateurs</b> du site.', |
|
| 475 | + 'info_telecharger_nouveau_logo' => 'Télécharger un nouveau logo :', |
|
| 476 | + 'info_telecharger_ordinateur' => 'Télécharger depuis votre ordinateur :', |
|
| 477 | + 'info_tous_resultats_enregistres' => '[tous les résultats sont enregistrés]', |
|
| 478 | + 'info_tout_afficher' => 'Tout afficher', |
|
| 479 | + 'info_travaux_texte' => 'Ce site n’est pas encore configuré. Revenez plus tard...', |
|
| 480 | + 'info_travaux_titre' => 'Site en travaux', |
|
| 481 | + 'info_trop_resultat' => 'Trop de résultats pour "@cherche_mot@" ; veuillez affiner la recherche.', |
|
| 482 | + 'info_utilisation_messagerie_interne' => 'Vous utilisez la messagerie interne de ce site.', |
|
| 483 | + 'info_valider_lien' => 'valider ce lien', |
|
| 484 | + 'info_verifier_image' => ', veuillez vérifier que vos images ont été transférées correctement.', |
|
| 485 | + 'info_vignette_defaut' => 'Vignette par défaut', |
|
| 486 | + 'info_vignette_personnalisee' => 'Vignette personnalisée', |
|
| 487 | + 'info_visite' => 'visite :', |
|
| 488 | + 'info_vos_rendez_vous' => 'Vos rendez-vous à venir', |
|
| 489 | + 'infos_vos_pense_bete' => 'Vos pense-bêtes', |
|
| 490 | 490 | |
| 491 | - // L |
|
| 492 | - 'label_ajout_id_rapide' => 'Ajout rapide', |
|
| 493 | - 'label_poids_fichier' => 'Taille', |
|
| 494 | - 'lien_afficher_icones_seuls' => 'Afficher uniquement les icones', |
|
| 495 | - 'lien_afficher_texte_icones' => 'Afficher les icones et le texte', |
|
| 496 | - 'lien_afficher_texte_seul' => 'Afficher uniquement le texte', |
|
| 497 | - 'lien_liberer' => 'libérer', |
|
| 498 | - 'lien_liberer_tous' => 'Tout libérer', |
|
| 499 | - 'lien_nouvea_pense_bete' => 'NOUVEAU PENSE-BÊTE', |
|
| 500 | - 'lien_nouveau_message' => 'NOUVEAU MESSAGE', |
|
| 501 | - 'lien_nouvelle_annonce' => 'NOUVELLE ANNONCE', |
|
| 502 | - 'lien_petitions' => 'PÉTITION', |
|
| 503 | - 'lien_popularite' => 'popularité : @popularite@%', |
|
| 504 | - 'lien_racine_site' => 'RACINE DU SITE', |
|
| 505 | - 'lien_reessayer' => 'réessayer', |
|
| 506 | - 'lien_repondre_message' => 'Répondre à ce message', |
|
| 507 | - 'lien_supprimer' => 'supprimer', |
|
| 508 | - 'lien_tout_afficher' => 'Tout afficher', |
|
| 509 | - 'lien_visite_site' => 'visiter ce site', |
|
| 510 | - 'lien_visites' => '@visites@ visites', |
|
| 511 | - 'lien_voir_auteur' => 'Voir cet auteur', |
|
| 512 | - 'ligne' => 'Ligne', |
|
| 513 | - 'login' => 'Connexion', |
|
| 514 | - 'login_acces_prive' => 'accès à l’espace privé', |
|
| 515 | - 'login_autre_identifiant' => 'se connecter sous un autre identifiant', |
|
| 516 | - 'login_cookie_accepte' => 'Veuillez régler votre navigateur pour qu’il les accepte (au moins pour ce site).', |
|
| 517 | - 'login_cookie_oblige' => 'Pour vous identifier de façon sûre sur ce site, vous devez accepter les cookies.', |
|
| 518 | - 'login_deconnexion_ok' => 'Déconnexion effectuée.', |
|
| 519 | - 'login_erreur_pass' => 'Erreur de mot de passe.', |
|
| 520 | - 'login_espace_prive' => 'espace privé', |
|
| 521 | - 'login_identifiant_inconnu' => 'L’identifiant « @login@ » est inconnu.', |
|
| 522 | - 'login_login' => 'Login :', |
|
| 523 | - 'login_login2' => 'Login ou adresse email :', |
|
| 524 | - 'login_login_pass_incorrect' => '(Login ou mot de passe incorrect.)', |
|
| 525 | - 'login_motpasseoublie' => 'mot de passe oublié ?', |
|
| 526 | - 'login_non_securise' => 'Attention, ce formulaire n’est pas sécurisé. |
|
| 491 | + // L |
|
| 492 | + 'label_ajout_id_rapide' => 'Ajout rapide', |
|
| 493 | + 'label_poids_fichier' => 'Taille', |
|
| 494 | + 'lien_afficher_icones_seuls' => 'Afficher uniquement les icones', |
|
| 495 | + 'lien_afficher_texte_icones' => 'Afficher les icones et le texte', |
|
| 496 | + 'lien_afficher_texte_seul' => 'Afficher uniquement le texte', |
|
| 497 | + 'lien_liberer' => 'libérer', |
|
| 498 | + 'lien_liberer_tous' => 'Tout libérer', |
|
| 499 | + 'lien_nouvea_pense_bete' => 'NOUVEAU PENSE-BÊTE', |
|
| 500 | + 'lien_nouveau_message' => 'NOUVEAU MESSAGE', |
|
| 501 | + 'lien_nouvelle_annonce' => 'NOUVELLE ANNONCE', |
|
| 502 | + 'lien_petitions' => 'PÉTITION', |
|
| 503 | + 'lien_popularite' => 'popularité : @popularite@%', |
|
| 504 | + 'lien_racine_site' => 'RACINE DU SITE', |
|
| 505 | + 'lien_reessayer' => 'réessayer', |
|
| 506 | + 'lien_repondre_message' => 'Répondre à ce message', |
|
| 507 | + 'lien_supprimer' => 'supprimer', |
|
| 508 | + 'lien_tout_afficher' => 'Tout afficher', |
|
| 509 | + 'lien_visite_site' => 'visiter ce site', |
|
| 510 | + 'lien_visites' => '@visites@ visites', |
|
| 511 | + 'lien_voir_auteur' => 'Voir cet auteur', |
|
| 512 | + 'ligne' => 'Ligne', |
|
| 513 | + 'login' => 'Connexion', |
|
| 514 | + 'login_acces_prive' => 'accès à l’espace privé', |
|
| 515 | + 'login_autre_identifiant' => 'se connecter sous un autre identifiant', |
|
| 516 | + 'login_cookie_accepte' => 'Veuillez régler votre navigateur pour qu’il les accepte (au moins pour ce site).', |
|
| 517 | + 'login_cookie_oblige' => 'Pour vous identifier de façon sûre sur ce site, vous devez accepter les cookies.', |
|
| 518 | + 'login_deconnexion_ok' => 'Déconnexion effectuée.', |
|
| 519 | + 'login_erreur_pass' => 'Erreur de mot de passe.', |
|
| 520 | + 'login_espace_prive' => 'espace privé', |
|
| 521 | + 'login_identifiant_inconnu' => 'L’identifiant « @login@ » est inconnu.', |
|
| 522 | + 'login_login' => 'Login :', |
|
| 523 | + 'login_login2' => 'Login ou adresse email :', |
|
| 524 | + 'login_login_pass_incorrect' => '(Login ou mot de passe incorrect.)', |
|
| 525 | + 'login_motpasseoublie' => 'mot de passe oublié ?', |
|
| 526 | + 'login_non_securise' => 'Attention, ce formulaire n’est pas sécurisé. |
|
| 527 | 527 | Si vous ne voulez pas que votre mot de passe puisse être |
| 528 | 528 | intercepté sur le réseau, veuillez activer Javascript |
| 529 | 529 | dans votre navigateur et', |
| 530 | - 'login_nouvelle_tentative' => 'Nouvelle tentative', |
|
| 531 | - 'login_par_ici' => 'Vous êtes enregistré... par ici...', |
|
| 532 | - 'login_pass2' => 'Mot de passe :', |
|
| 533 | - 'login_preferez_refuser' => '<b>Si vous préférez refuser les cookies</b>, une autre méthode de connexion (moins sécurisée) est à votre disposition :', |
|
| 534 | - 'login_recharger' => 'recharger cette page', |
|
| 535 | - 'login_rester_identifie' => 'Rester identifié quelques jours', |
|
| 536 | - 'login_retour_public' => 'Retour au site public', |
|
| 537 | - 'login_retour_site' => 'Retour au site public', |
|
| 538 | - 'login_retoursitepublic' => 'retour au site public', |
|
| 539 | - 'login_sans_cookie' => 'Identification sans cookie', |
|
| 540 | - 'login_securise' => 'Login sécurisé', |
|
| 541 | - 'login_sinscrire' => 's’inscrire', |
|
| 542 | - 'login_test_navigateur' => 'test navigateur/reconnexion', |
|
| 543 | - 'login_verifiez_navigateur' => '(Vérifiez toutefois que votre navigateur n’a pas mémorisé votre mot de passe...)', |
|
| 530 | + 'login_nouvelle_tentative' => 'Nouvelle tentative', |
|
| 531 | + 'login_par_ici' => 'Vous êtes enregistré... par ici...', |
|
| 532 | + 'login_pass2' => 'Mot de passe :', |
|
| 533 | + 'login_preferez_refuser' => '<b>Si vous préférez refuser les cookies</b>, une autre méthode de connexion (moins sécurisée) est à votre disposition :', |
|
| 534 | + 'login_recharger' => 'recharger cette page', |
|
| 535 | + 'login_rester_identifie' => 'Rester identifié quelques jours', |
|
| 536 | + 'login_retour_public' => 'Retour au site public', |
|
| 537 | + 'login_retour_site' => 'Retour au site public', |
|
| 538 | + 'login_retoursitepublic' => 'retour au site public', |
|
| 539 | + 'login_sans_cookie' => 'Identification sans cookie', |
|
| 540 | + 'login_securise' => 'Login sécurisé', |
|
| 541 | + 'login_sinscrire' => 's’inscrire', |
|
| 542 | + 'login_test_navigateur' => 'test navigateur/reconnexion', |
|
| 543 | + 'login_verifiez_navigateur' => '(Vérifiez toutefois que votre navigateur n’a pas mémorisé votre mot de passe...)', |
|
| 544 | 544 | |
| 545 | - // M |
|
| 546 | - 'masquer_colonne' => 'Masquer cette colonne', |
|
| 547 | - 'masquer_trad' => 'masquer les traductions', |
|
| 548 | - 'message_nouveaux_identifiants_echec' => 'Impossible de générer de nouveaux identifiants.', |
|
| 549 | - 'message_nouveaux_identifiants_echec_envoi' => 'Les nouveaux identifiants de connexion n’ont pas pu être envoyés.', |
|
| 550 | - 'message_nouveaux_identifiants_ok' => 'Les nouveaux identifiants de connexion ont été envoyés à @email@.', |
|
| 551 | - 'module_fichiers_langues' => 'Fichiers de langue', |
|
| 545 | + // M |
|
| 546 | + 'masquer_colonne' => 'Masquer cette colonne', |
|
| 547 | + 'masquer_trad' => 'masquer les traductions', |
|
| 548 | + 'message_nouveaux_identifiants_echec' => 'Impossible de générer de nouveaux identifiants.', |
|
| 549 | + 'message_nouveaux_identifiants_echec_envoi' => 'Les nouveaux identifiants de connexion n’ont pas pu être envoyés.', |
|
| 550 | + 'message_nouveaux_identifiants_ok' => 'Les nouveaux identifiants de connexion ont été envoyés à @email@.', |
|
| 551 | + 'module_fichiers_langues' => 'Fichiers de langue', |
|
| 552 | 552 | |
| 553 | - // N |
|
| 554 | - 'navigateur_pas_redirige' => 'Si votre navigateur n’est pas redirigé, cliquez ici pour continuer.', |
|
| 555 | - 'numero' => 'Numéro', |
|
| 553 | + // N |
|
| 554 | + 'navigateur_pas_redirige' => 'Si votre navigateur n’est pas redirigé, cliquez ici pour continuer.', |
|
| 555 | + 'numero' => 'Numéro', |
|
| 556 | 556 | |
| 557 | - // O |
|
| 558 | - 'occurence' => 'Occurrence', |
|
| 559 | - 'onglet_affacer_base' => 'Effacer la base', |
|
| 560 | - 'onglet_auteur' => 'L’auteur', |
|
| 561 | - 'onglet_contenu_site' => 'Contenu du site', |
|
| 562 | - 'onglet_evolution_visite_mod' => 'Évolution', |
|
| 563 | - 'onglet_fonctions_avances' => 'Fonctions avancées', |
|
| 564 | - 'onglet_informations_personnelles' => 'Informations personnelles', |
|
| 565 | - 'onglet_interactivite' => 'Interactivité', |
|
| 566 | - 'onglet_messagerie' => 'Messagerie', |
|
| 567 | - 'onglet_repartition_rubrique' => 'Répartition par rubriques', |
|
| 568 | - 'onglet_save_restaur_base' => 'Sauvegarder/restaurer la base', |
|
| 569 | - 'onglet_vider_cache' => 'Vider le cache', |
|
| 557 | + // O |
|
| 558 | + 'occurence' => 'Occurrence', |
|
| 559 | + 'onglet_affacer_base' => 'Effacer la base', |
|
| 560 | + 'onglet_auteur' => 'L’auteur', |
|
| 561 | + 'onglet_contenu_site' => 'Contenu du site', |
|
| 562 | + 'onglet_evolution_visite_mod' => 'Évolution', |
|
| 563 | + 'onglet_fonctions_avances' => 'Fonctions avancées', |
|
| 564 | + 'onglet_informations_personnelles' => 'Informations personnelles', |
|
| 565 | + 'onglet_interactivite' => 'Interactivité', |
|
| 566 | + 'onglet_messagerie' => 'Messagerie', |
|
| 567 | + 'onglet_repartition_rubrique' => 'Répartition par rubriques', |
|
| 568 | + 'onglet_save_restaur_base' => 'Sauvegarder/restaurer la base', |
|
| 569 | + 'onglet_vider_cache' => 'Vider le cache', |
|
| 570 | 570 | |
| 571 | - // P |
|
| 572 | - 'pass_choix_pass' => 'Veuillez choisir votre nouveau mot de passe :', |
|
| 573 | - 'pass_erreur' => 'Erreur', |
|
| 574 | - 'pass_erreur_acces_refuse' => '<b>Erreur :</b> vous n’avez plus accès à ce site.', |
|
| 575 | - 'pass_erreur_code_inconnu' => '<b>Erreur :</b> ce code ne correspond à aucun des visiteurs ayant accès à ce site.', |
|
| 576 | - 'pass_erreur_non_enregistre' => '<b>Erreur :</b> l’adresse <tt>@email_oubli@</tt> n’est pas enregistrée sur ce site.', |
|
| 577 | - 'pass_erreur_non_valide' => '<b>Erreur :</b> cet email <tt>@email_oubli@</tt> n’est pas valide !', |
|
| 578 | - 'pass_erreur_probleme_technique' => '<b>Erreur :</b> à cause d’un problème technique, l’email ne peut pas être envoyé.', |
|
| 579 | - 'pass_espace_prive_bla' => 'L’espace privé de ce site est ouvert aux |
|
| 571 | + // P |
|
| 572 | + 'pass_choix_pass' => 'Veuillez choisir votre nouveau mot de passe :', |
|
| 573 | + 'pass_erreur' => 'Erreur', |
|
| 574 | + 'pass_erreur_acces_refuse' => '<b>Erreur :</b> vous n’avez plus accès à ce site.', |
|
| 575 | + 'pass_erreur_code_inconnu' => '<b>Erreur :</b> ce code ne correspond à aucun des visiteurs ayant accès à ce site.', |
|
| 576 | + 'pass_erreur_non_enregistre' => '<b>Erreur :</b> l’adresse <tt>@email_oubli@</tt> n’est pas enregistrée sur ce site.', |
|
| 577 | + 'pass_erreur_non_valide' => '<b>Erreur :</b> cet email <tt>@email_oubli@</tt> n’est pas valide !', |
|
| 578 | + 'pass_erreur_probleme_technique' => '<b>Erreur :</b> à cause d’un problème technique, l’email ne peut pas être envoyé.', |
|
| 579 | + 'pass_espace_prive_bla' => 'L’espace privé de ce site est ouvert aux |
|
| 580 | 580 | visiteurs, après inscription. Une fois enregistré, |
| 581 | 581 | vous pourrez consulter les articles en cours de rédaction, |
| 582 | 582 | proposer des articles et participer à tous les forums.', |
| 583 | - 'pass_forum_bla' => 'Vous avez demandé à intervenir sur un forum |
|
| 583 | + 'pass_forum_bla' => 'Vous avez demandé à intervenir sur un forum |
|
| 584 | 584 | réservé aux visiteurs enregistrés.', |
| 585 | - 'pass_indiquez_cidessous' => 'Indiquez ci-dessous l’adresse email sous laquelle vous |
|
| 585 | + 'pass_indiquez_cidessous' => 'Indiquez ci-dessous l’adresse email sous laquelle vous |
|
| 586 | 586 | vous êtes précédemment enregistré. Vous |
| 587 | 587 | recevrez un email vous indiquant la marche à suivre pour |
| 588 | 588 | récupérer votre accès.', |
| 589 | - 'pass_mail_passcookie' => '(ceci est un message automatique) |
|
| 589 | + 'pass_mail_passcookie' => '(ceci est un message automatique) |
|
| 590 | 590 | Pour retrouver votre accès au site |
| 591 | 591 | @nom_site_spip@ (@adresse_site@) |
| 592 | 592 | |
@@ -598,145 +598,145 @@ discard block |
||
| 598 | 598 | et vous reconnecter au site. |
| 599 | 599 | |
| 600 | 600 | ', |
| 601 | - 'pass_mot_oublie' => 'Mot de passe oublié', |
|
| 602 | - 'pass_nouveau_enregistre' => 'Votre nouveau mot de passe a été enregistré.', |
|
| 603 | - 'pass_nouveau_pass' => 'Nouveau mot de passe', |
|
| 604 | - 'pass_ok' => 'OK', |
|
| 605 | - 'pass_oubli_mot' => 'Oubli du mot de passe', |
|
| 606 | - 'pass_procedure_changer' => 'Pour modifier votre mot de passe, merci d’indiquer l’adresse email associée à votre compte.', |
|
| 607 | - 'pass_quitter_fenetre' => 'Quitter cette fenêtre', |
|
| 608 | - 'pass_rappel_login' => 'Rappel : votre identifiant (login) est « @login@ ».', |
|
| 609 | - 'pass_recevoir_mail' => 'Un lien de réinitialisation de votre mot de passe vous a été envoyé sur votre adresse email (si celle-ci est valide).', |
|
| 610 | - 'pass_retour_public' => 'Retour sur le site public', |
|
| 611 | - 'pass_rien_a_faire_ici' => 'Rien à faire ici.', |
|
| 612 | - 'pass_vousinscrire' => 'Vous inscrire sur ce site', |
|
| 613 | - 'precedent' => 'précédent', |
|
| 614 | - 'previsualisation' => 'Prévisualisation', |
|
| 615 | - 'previsualiser' => 'Prévisualiser', |
|
| 601 | + 'pass_mot_oublie' => 'Mot de passe oublié', |
|
| 602 | + 'pass_nouveau_enregistre' => 'Votre nouveau mot de passe a été enregistré.', |
|
| 603 | + 'pass_nouveau_pass' => 'Nouveau mot de passe', |
|
| 604 | + 'pass_ok' => 'OK', |
|
| 605 | + 'pass_oubli_mot' => 'Oubli du mot de passe', |
|
| 606 | + 'pass_procedure_changer' => 'Pour modifier votre mot de passe, merci d’indiquer l’adresse email associée à votre compte.', |
|
| 607 | + 'pass_quitter_fenetre' => 'Quitter cette fenêtre', |
|
| 608 | + 'pass_rappel_login' => 'Rappel : votre identifiant (login) est « @login@ ».', |
|
| 609 | + 'pass_recevoir_mail' => 'Un lien de réinitialisation de votre mot de passe vous a été envoyé sur votre adresse email (si celle-ci est valide).', |
|
| 610 | + 'pass_retour_public' => 'Retour sur le site public', |
|
| 611 | + 'pass_rien_a_faire_ici' => 'Rien à faire ici.', |
|
| 612 | + 'pass_vousinscrire' => 'Vous inscrire sur ce site', |
|
| 613 | + 'precedent' => 'précédent', |
|
| 614 | + 'previsualisation' => 'Prévisualisation', |
|
| 615 | + 'previsualiser' => 'Prévisualiser', |
|
| 616 | 616 | |
| 617 | - // R |
|
| 618 | - 'retour' => 'Retour', |
|
| 617 | + // R |
|
| 618 | + 'retour' => 'Retour', |
|
| 619 | 619 | |
| 620 | - // S |
|
| 621 | - 'spip_conforme_dtd' => 'SPIP considère ce document comme conforme à son DOCTYPE :', |
|
| 622 | - 'squelette' => 'squelette', |
|
| 623 | - 'squelette_inclus_ligne' => 'squelette inclus, ligne', |
|
| 624 | - 'squelette_ligne' => 'squelette, ligne', |
|
| 625 | - 'stats_visites_et_popularite' => '@visites@ visites ; popularité : @popularite@', |
|
| 626 | - 'suivant' => 'suivant', |
|
| 620 | + // S |
|
| 621 | + 'spip_conforme_dtd' => 'SPIP considère ce document comme conforme à son DOCTYPE :', |
|
| 622 | + 'squelette' => 'squelette', |
|
| 623 | + 'squelette_inclus_ligne' => 'squelette inclus, ligne', |
|
| 624 | + 'squelette_ligne' => 'squelette, ligne', |
|
| 625 | + 'stats_visites_et_popularite' => '@visites@ visites ; popularité : @popularite@', |
|
| 626 | + 'suivant' => 'suivant', |
|
| 627 | 627 | |
| 628 | - // T |
|
| 629 | - 'taille_go' => '@taille@ Go', |
|
| 630 | - 'taille_ko' => '@taille@ ko', |
|
| 631 | - 'taille_mo' => '@taille@ Mo', |
|
| 632 | - 'taille_octets' => '@taille@ octets', |
|
| 633 | - 'texte_actualite_site_1' => 'Quand vous serez familiarisé(e) avec l’interface, vous pourrez cliquer sur « ', |
|
| 634 | - 'texte_actualite_site_2' => 'interface complète', |
|
| 635 | - 'texte_actualite_site_3' => ' » pour ouvrir plus de possibilités.', |
|
| 636 | - 'texte_creation_automatique_vignette' => 'La création automatique de vignettes de prévisualisation est activée sur ce site. Si vous installez à partir de ce formulaire des images au(x) format(s) @gd_formats@, elles seront accompagnées d’une vignette d’une taille maximale de @taille_preview@ pixels.', |
|
| 637 | - 'texte_documents_associes' => 'Les documents suivants sont associés à l’article, |
|
| 628 | + // T |
|
| 629 | + 'taille_go' => '@taille@ Go', |
|
| 630 | + 'taille_ko' => '@taille@ ko', |
|
| 631 | + 'taille_mo' => '@taille@ Mo', |
|
| 632 | + 'taille_octets' => '@taille@ octets', |
|
| 633 | + 'texte_actualite_site_1' => 'Quand vous serez familiarisé(e) avec l’interface, vous pourrez cliquer sur « ', |
|
| 634 | + 'texte_actualite_site_2' => 'interface complète', |
|
| 635 | + 'texte_actualite_site_3' => ' » pour ouvrir plus de possibilités.', |
|
| 636 | + 'texte_creation_automatique_vignette' => 'La création automatique de vignettes de prévisualisation est activée sur ce site. Si vous installez à partir de ce formulaire des images au(x) format(s) @gd_formats@, elles seront accompagnées d’une vignette d’une taille maximale de @taille_preview@ pixels.', |
|
| 637 | + 'texte_documents_associes' => 'Les documents suivants sont associés à l’article, |
|
| 638 | 638 | mais ils n’y ont pas été directement |
| 639 | 639 | insérés. Selon la mise en page du site public, |
| 640 | 640 | ils pourront apparaître sous forme de documents joints.', |
| 641 | - 'texte_erreur_mise_niveau_base' => 'Erreur de base de données lors de la mise à niveau. |
|
| 641 | + 'texte_erreur_mise_niveau_base' => 'Erreur de base de données lors de la mise à niveau. |
|
| 642 | 642 | L’image <b>@fichier@</b> n’est pas passée (article @id_article@). |
| 643 | 643 | Notez bien cette référence, réessayez la mise à |
| 644 | 644 | niveau, et enfin vérifiez que les images apparaissent |
| 645 | 645 | toujours dans les articles.', |
| 646 | - 'texte_erreur_visiteur' => 'Vous avez tenté d’accéder à l’espace privé avec un login qui ne le permet pas.', |
|
| 647 | - 'texte_inc_auth_1' => 'Vous êtes identifié sous le |
|
| 646 | + 'texte_erreur_visiteur' => 'Vous avez tenté d’accéder à l’espace privé avec un login qui ne le permet pas.', |
|
| 647 | + 'texte_inc_auth_1' => 'Vous êtes identifié sous le |
|
| 648 | 648 | login <b>@auth_login@</b>, mais celui-ci n’existe pas/plus dans la base. |
| 649 | 649 | Essayez de vous', |
| 650 | - 'texte_inc_auth_2' => 'reconnecter', |
|
| 651 | - 'texte_inc_auth_3' => ', après avoir éventuellement quitté puis |
|
| 650 | + 'texte_inc_auth_2' => 'reconnecter', |
|
| 651 | + 'texte_inc_auth_3' => ', après avoir éventuellement quitté puis |
|
| 652 | 652 | redémarré votre navigateur.', |
| 653 | - 'texte_inc_config' => 'Les modifications effectuées dans ces pages influent notablement sur le |
|
| 653 | + 'texte_inc_config' => 'Les modifications effectuées dans ces pages influent notablement sur le |
|
| 654 | 654 | fonctionnement de votre site. Nous vous recommandons de ne pas y intervenir tant que vous n’êtes pas |
| 655 | 655 | familier du fonctionnement du système SPIP. <br /><br /><b>Plus |
| 656 | 656 | généralement, il est fortement conseillé |
| 657 | 657 | de laisser la charge de ces pages au webmestre principal de votre site.</b>', |
| 658 | - 'texte_inc_meta_1' => 'Le système a rencontré une erreur lors de l’écriture du fichier <code>@fichier@</code>. Veuillez, en tant qu’administrateur du site,', |
|
| 659 | - 'texte_inc_meta_2' => 'vérifier les droits d’écriture', |
|
| 660 | - 'texte_inc_meta_3' => 'sur le répertoire <code>@repertoire@</code>.', |
|
| 661 | - 'texte_statut_en_cours_redaction' => 'en cours de rédaction', |
|
| 662 | - 'texte_statut_poubelle' => 'à la poubelle', |
|
| 663 | - 'texte_statut_propose_evaluation' => 'proposé à l’évaluation', |
|
| 664 | - 'texte_statut_publie' => 'publié en ligne', |
|
| 665 | - 'texte_statut_refuse' => 'refusé', |
|
| 666 | - 'titre_ajouter_mot_cle' => 'AJOUTER UN MOT-CLÉ :', |
|
| 667 | - 'titre_cadre_raccourcis' => 'RACCOURCIS :', |
|
| 668 | - 'titre_changer_couleur_interface' => 'Changer la couleur de l’interface', |
|
| 669 | - 'titre_image_admin_article' => 'Vous pouvez administrer cet article', |
|
| 670 | - 'titre_image_administrateur' => 'Administrateur', |
|
| 671 | - 'titre_image_aide' => 'De l’aide sur cet élément', |
|
| 672 | - 'titre_image_auteur_supprime' => 'Auteur supprimé', |
|
| 673 | - 'titre_image_redacteur' => 'Rédacteur sans accès', |
|
| 674 | - 'titre_image_redacteur_02' => 'Rédacteur', |
|
| 675 | - 'titre_image_selecteur' => 'Afficher la liste', |
|
| 676 | - 'titre_image_visiteur' => 'Visiteur', |
|
| 677 | - 'titre_joindre_document' => 'JOINDRE UN DOCUMENT', |
|
| 678 | - 'titre_mots_cles' => 'MOTS-CLÉS', |
|
| 679 | - 'titre_probleme_technique' => 'Attention : un problème technique (serveur SQL) empêche l’accès à cette partie du site. Merci de votre compréhension.', |
|
| 680 | - 'titre_publier_document' => 'PUBLIER UN DOCUMENT DANS CETTE RUBRIQUE', |
|
| 681 | - 'titre_signatures_attente' => 'Signatures en attente de validation', |
|
| 682 | - 'titre_signatures_confirmees' => 'Signatures confirmées', |
|
| 683 | - 'titre_statistiques' => 'Statistiques du site', |
|
| 684 | - 'titre_titre_document' => 'Titre du document :', |
|
| 685 | - 'todo' => 'à venir', |
|
| 686 | - 'trad_definir_reference' => 'Choisir "@titre@" comme référence des traductions', |
|
| 687 | - 'trad_reference' => '(référence des traductions)', |
|
| 658 | + 'texte_inc_meta_1' => 'Le système a rencontré une erreur lors de l’écriture du fichier <code>@fichier@</code>. Veuillez, en tant qu’administrateur du site,', |
|
| 659 | + 'texte_inc_meta_2' => 'vérifier les droits d’écriture', |
|
| 660 | + 'texte_inc_meta_3' => 'sur le répertoire <code>@repertoire@</code>.', |
|
| 661 | + 'texte_statut_en_cours_redaction' => 'en cours de rédaction', |
|
| 662 | + 'texte_statut_poubelle' => 'à la poubelle', |
|
| 663 | + 'texte_statut_propose_evaluation' => 'proposé à l’évaluation', |
|
| 664 | + 'texte_statut_publie' => 'publié en ligne', |
|
| 665 | + 'texte_statut_refuse' => 'refusé', |
|
| 666 | + 'titre_ajouter_mot_cle' => 'AJOUTER UN MOT-CLÉ :', |
|
| 667 | + 'titre_cadre_raccourcis' => 'RACCOURCIS :', |
|
| 668 | + 'titre_changer_couleur_interface' => 'Changer la couleur de l’interface', |
|
| 669 | + 'titre_image_admin_article' => 'Vous pouvez administrer cet article', |
|
| 670 | + 'titre_image_administrateur' => 'Administrateur', |
|
| 671 | + 'titre_image_aide' => 'De l’aide sur cet élément', |
|
| 672 | + 'titre_image_auteur_supprime' => 'Auteur supprimé', |
|
| 673 | + 'titre_image_redacteur' => 'Rédacteur sans accès', |
|
| 674 | + 'titre_image_redacteur_02' => 'Rédacteur', |
|
| 675 | + 'titre_image_selecteur' => 'Afficher la liste', |
|
| 676 | + 'titre_image_visiteur' => 'Visiteur', |
|
| 677 | + 'titre_joindre_document' => 'JOINDRE UN DOCUMENT', |
|
| 678 | + 'titre_mots_cles' => 'MOTS-CLÉS', |
|
| 679 | + 'titre_probleme_technique' => 'Attention : un problème technique (serveur SQL) empêche l’accès à cette partie du site. Merci de votre compréhension.', |
|
| 680 | + 'titre_publier_document' => 'PUBLIER UN DOCUMENT DANS CETTE RUBRIQUE', |
|
| 681 | + 'titre_signatures_attente' => 'Signatures en attente de validation', |
|
| 682 | + 'titre_signatures_confirmees' => 'Signatures confirmées', |
|
| 683 | + 'titre_statistiques' => 'Statistiques du site', |
|
| 684 | + 'titre_titre_document' => 'Titre du document :', |
|
| 685 | + 'todo' => 'à venir', |
|
| 686 | + 'trad_definir_reference' => 'Choisir "@titre@" comme référence des traductions', |
|
| 687 | + 'trad_reference' => '(référence des traductions)', |
|
| 688 | 688 | |
| 689 | - // U |
|
| 690 | - 'upload_limit' => 'Ce fichier est trop gros pour le serveur ; la taille maximum autorisée en <i>upload</i> est de @max@.', |
|
| 689 | + // U |
|
| 690 | + 'upload_limit' => 'Ce fichier est trop gros pour le serveur ; la taille maximum autorisée en <i>upload</i> est de @max@.', |
|
| 691 | 691 | |
| 692 | - // Z |
|
| 693 | - 'zbug_balise_b_aval' => ' : balise B en aval', |
|
| 694 | - 'zbug_balise_inexistante' => 'Balise @balise@ mal déclarée pour @from@', |
|
| 695 | - 'zbug_balise_sans_argument' => 'Argument manquant dans la balise @balise@', |
|
| 696 | - 'zbug_boucle' => 'boucle', |
|
| 697 | - 'zbug_boucle_recursive_undef' => 'Boucle récursive non définie : @nom@', |
|
| 698 | - 'zbug_calcul' => 'calcul', |
|
| 699 | - 'zbug_champ_hors_boucle' => 'Champ @champ@ hors boucle', |
|
| 700 | - 'zbug_champ_hors_critere' => 'Champ @champ@ hors critère @critere@', |
|
| 701 | - 'zbug_champ_hors_motif' => 'Champ @champ@ hors d’un contexte @motif@', |
|
| 702 | - 'zbug_code' => 'code', |
|
| 703 | - 'zbug_critere_inconnu' => 'Critère inconnu @critere@', |
|
| 704 | - 'zbug_critere_sur_table_sans_cle_primaire' => '{@critere@} sur une table sans clef primaire atomique', |
|
| 705 | - 'zbug_distant_interdit' => 'Externe interdit', # Contexte : une base de données "externe", pas gérée par SPIP, mais que SPIP 1.8 sait utiliser dans ses boucles -- seul problèmes certaines manipulations sont interdites sur ces bases-là. |
|
| 706 | - 'zbug_doublon_table_sans_cle_primaire' => 'Doublons sur une table sans clef primaire atomique', |
|
| 707 | - 'zbug_doublon_table_sans_index' => 'Doublons sur une table sans index', |
|
| 708 | - 'zbug_erreur_boucle_double' => 'Double définition de la boucle @id@', |
|
| 709 | - 'zbug_erreur_boucle_fermant' => 'Boucle @id@ non fermée', |
|
| 710 | - 'zbug_erreur_boucle_syntaxe' => 'Syntaxe de la boucle @id@ incorrecte', |
|
| 711 | - 'zbug_erreur_compilation' => 'Erreur de compilation', |
|
| 712 | - 'zbug_erreur_execution_page' => 'Erreur d’exécution', |
|
| 713 | - 'zbug_erreur_filtre' => 'Filtre @filtre@ non défini', |
|
| 714 | - 'zbug_erreur_meme_parent' => 'Le critère {meme_parent} ne s’applique qu’aux boucles (FORUMS) ou (RUBRIQUES)', |
|
| 715 | - 'zbug_erreur_squelette' => 'Erreur(s) dans le squelette', |
|
| 716 | - 'zbug_hors_compilation' => 'Hors Compilation', |
|
| 717 | - 'zbug_info_erreur_squelette' => 'Erreur sur le site', |
|
| 718 | - 'zbug_inversion_ordre_inexistant' => 'Inversion d’un ordre inexistant', |
|
| 719 | - 'zbug_pagination_sans_critere' => 'Balise #PAGINATION sans critère {pagination} ou employé dans une boucle récursive', |
|
| 720 | - 'zbug_parametres_inclus_incorrects' => 'Paramètre d’inclusion incorrect : @param@', |
|
| 721 | - 'zbug_profile' => 'Temps de calcul : @time@', |
|
| 722 | - 'zbug_resultat' => 'résultat', |
|
| 723 | - 'zbug_serveur_indefini' => 'Serveur SQL indéfini', |
|
| 724 | - 'zbug_statistiques' => 'Statistiques des requêtes SQL classées par durée', |
|
| 725 | - 'zbug_table_inconnue' => 'Table SQL « @table@ » inconnue', |
|
| 726 | - 'zxml_connus_attributs' => 'attributs connus', |
|
| 727 | - 'zxml_de' => 'de', |
|
| 728 | - 'zxml_inconnu_attribut' => 'attribut inconnu', |
|
| 729 | - 'zxml_inconnu_balise' => 'balise inconnue', |
|
| 730 | - 'zxml_inconnu_entite' => 'entité inconnue', |
|
| 731 | - 'zxml_inconnu_id' => 'ID inconnu', |
|
| 732 | - 'zxml_mais_de' => 'mais de', |
|
| 733 | - 'zxml_non_conforme' => 'n’est pas conforme au motif', |
|
| 734 | - 'zxml_non_fils' => 'n’est pas un fils de', |
|
| 735 | - 'zxml_nonvide_balise' => 'balise non vide', |
|
| 736 | - 'zxml_obligatoire_attribut' => 'attribut obligatoire mais absent dans', |
|
| 737 | - 'zxml_succession_fils_incorrecte' => 'succession des fils incorrecte', |
|
| 738 | - 'zxml_survoler' => 'survoler pour voir les corrects', |
|
| 739 | - 'zxml_valeur_attribut' => 'valeur de l’attribut', |
|
| 740 | - 'zxml_vide_balise' => 'balise vide', |
|
| 741 | - 'zxml_vu' => 'vu auparavant' |
|
| 692 | + // Z |
|
| 693 | + 'zbug_balise_b_aval' => ' : balise B en aval', |
|
| 694 | + 'zbug_balise_inexistante' => 'Balise @balise@ mal déclarée pour @from@', |
|
| 695 | + 'zbug_balise_sans_argument' => 'Argument manquant dans la balise @balise@', |
|
| 696 | + 'zbug_boucle' => 'boucle', |
|
| 697 | + 'zbug_boucle_recursive_undef' => 'Boucle récursive non définie : @nom@', |
|
| 698 | + 'zbug_calcul' => 'calcul', |
|
| 699 | + 'zbug_champ_hors_boucle' => 'Champ @champ@ hors boucle', |
|
| 700 | + 'zbug_champ_hors_critere' => 'Champ @champ@ hors critère @critere@', |
|
| 701 | + 'zbug_champ_hors_motif' => 'Champ @champ@ hors d’un contexte @motif@', |
|
| 702 | + 'zbug_code' => 'code', |
|
| 703 | + 'zbug_critere_inconnu' => 'Critère inconnu @critere@', |
|
| 704 | + 'zbug_critere_sur_table_sans_cle_primaire' => '{@critere@} sur une table sans clef primaire atomique', |
|
| 705 | + 'zbug_distant_interdit' => 'Externe interdit', # Contexte : une base de données "externe", pas gérée par SPIP, mais que SPIP 1.8 sait utiliser dans ses boucles -- seul problèmes certaines manipulations sont interdites sur ces bases-là. |
|
| 706 | + 'zbug_doublon_table_sans_cle_primaire' => 'Doublons sur une table sans clef primaire atomique', |
|
| 707 | + 'zbug_doublon_table_sans_index' => 'Doublons sur une table sans index', |
|
| 708 | + 'zbug_erreur_boucle_double' => 'Double définition de la boucle @id@', |
|
| 709 | + 'zbug_erreur_boucle_fermant' => 'Boucle @id@ non fermée', |
|
| 710 | + 'zbug_erreur_boucle_syntaxe' => 'Syntaxe de la boucle @id@ incorrecte', |
|
| 711 | + 'zbug_erreur_compilation' => 'Erreur de compilation', |
|
| 712 | + 'zbug_erreur_execution_page' => 'Erreur d’exécution', |
|
| 713 | + 'zbug_erreur_filtre' => 'Filtre @filtre@ non défini', |
|
| 714 | + 'zbug_erreur_meme_parent' => 'Le critère {meme_parent} ne s’applique qu’aux boucles (FORUMS) ou (RUBRIQUES)', |
|
| 715 | + 'zbug_erreur_squelette' => 'Erreur(s) dans le squelette', |
|
| 716 | + 'zbug_hors_compilation' => 'Hors Compilation', |
|
| 717 | + 'zbug_info_erreur_squelette' => 'Erreur sur le site', |
|
| 718 | + 'zbug_inversion_ordre_inexistant' => 'Inversion d’un ordre inexistant', |
|
| 719 | + 'zbug_pagination_sans_critere' => 'Balise #PAGINATION sans critère {pagination} ou employé dans une boucle récursive', |
|
| 720 | + 'zbug_parametres_inclus_incorrects' => 'Paramètre d’inclusion incorrect : @param@', |
|
| 721 | + 'zbug_profile' => 'Temps de calcul : @time@', |
|
| 722 | + 'zbug_resultat' => 'résultat', |
|
| 723 | + 'zbug_serveur_indefini' => 'Serveur SQL indéfini', |
|
| 724 | + 'zbug_statistiques' => 'Statistiques des requêtes SQL classées par durée', |
|
| 725 | + 'zbug_table_inconnue' => 'Table SQL « @table@ » inconnue', |
|
| 726 | + 'zxml_connus_attributs' => 'attributs connus', |
|
| 727 | + 'zxml_de' => 'de', |
|
| 728 | + 'zxml_inconnu_attribut' => 'attribut inconnu', |
|
| 729 | + 'zxml_inconnu_balise' => 'balise inconnue', |
|
| 730 | + 'zxml_inconnu_entite' => 'entité inconnue', |
|
| 731 | + 'zxml_inconnu_id' => 'ID inconnu', |
|
| 732 | + 'zxml_mais_de' => 'mais de', |
|
| 733 | + 'zxml_non_conforme' => 'n’est pas conforme au motif', |
|
| 734 | + 'zxml_non_fils' => 'n’est pas un fils de', |
|
| 735 | + 'zxml_nonvide_balise' => 'balise non vide', |
|
| 736 | + 'zxml_obligatoire_attribut' => 'attribut obligatoire mais absent dans', |
|
| 737 | + 'zxml_succession_fils_incorrecte' => 'succession des fils incorrecte', |
|
| 738 | + 'zxml_survoler' => 'survoler pour voir les corrects', |
|
| 739 | + 'zxml_valeur_attribut' => 'valeur de l’attribut', |
|
| 740 | + 'zxml_vide_balise' => 'balise vide', |
|
| 741 | + 'zxml_vu' => 'vu auparavant' |
|
| 742 | 742 | ); |