@@ -16,7 +16,7 @@ discard block |
||
| 16 | 16 | * @package SPIP\Core\Presentation |
| 17 | 17 | **/ |
| 18 | 18 | if (!defined('_ECRIRE_INC_VERSION')) { |
| 19 | - return; |
|
| 19 | + return; |
|
| 20 | 20 | } |
| 21 | 21 | |
| 22 | 22 | include_spip('inc/presentation_mini'); |
@@ -31,141 +31,141 @@ discard block |
||
| 31 | 31 | include_spip('inc/filtres_alertes'); |
| 32 | 32 | |
| 33 | 33 | function debut_cadre($style, $icone = '', $fonction = '', $titre = '', $id = '', $class = '', $padding = true) { |
| 34 | - $fond = null; |
|
| 35 | - $style_mapping = [ |
|
| 36 | - 'r' => 'simple', |
|
| 37 | - 'e' => 'raccourcis', |
|
| 38 | - 'couleur' => 'basic highlight', |
|
| 39 | - 'couleur-foncee' => 'basic highlight', |
|
| 40 | - 'trait-couleur' => 'important', |
|
| 41 | - 'alerte' => 'notice', |
|
| 42 | - 'info' => 'info', |
|
| 43 | - 'sous_rub' => 'simple sous-rub' |
|
| 44 | - ]; |
|
| 45 | - $style_titre_mapping = ['couleur' => 'topper', 'trait-couleur' => 'section']; |
|
| 46 | - $c = $style_mapping[$style] ?? 'simple'; |
|
| 47 | - $class = $c . ($class ? " $class" : ''); |
|
| 48 | - if (!$padding) { |
|
| 49 | - $class .= ($class ? ' ' : '') . 'no-padding'; |
|
| 50 | - } |
|
| 51 | - |
|
| 52 | - //($id?"id='$id' ":"") |
|
| 53 | - if (strlen($icone) > 1) { |
|
| 54 | - if ($icone_renommer = charger_fonction('icone_renommer', 'inc', true)) { |
|
| 55 | - [$fond, $fonction] = $icone_renommer($icone, $fonction); |
|
| 56 | - } |
|
| 57 | - $size = 24; |
|
| 58 | - if (preg_match('/-([0-9]{1,3})[.](gif|png)$/i', $fond, $match)) { |
|
| 59 | - $size = $match[1]; |
|
| 60 | - } |
|
| 61 | - if ($fonction) { |
|
| 62 | - // 2 images pour composer l'icone : le fond (article) en background, |
|
| 63 | - // la fonction (new) en image |
|
| 64 | - $icone = http_img_pack($fonction, '', "class='cadre-icone' width='$size' height='$size'\n" . |
|
| 65 | - http_style_background($fond, 'no-repeat center center', $size)); |
|
| 66 | - } else { |
|
| 67 | - $icone = http_img_pack($fond, '', "class='cadre-icone' width='$size' height='$size'"); |
|
| 68 | - } |
|
| 69 | - $titre = $icone . $titre; |
|
| 70 | - } |
|
| 71 | - |
|
| 72 | - return boite_ouvrir($titre, $class, $style_titre_mapping[$style] ?? '', $id); |
|
| 34 | + $fond = null; |
|
| 35 | + $style_mapping = [ |
|
| 36 | + 'r' => 'simple', |
|
| 37 | + 'e' => 'raccourcis', |
|
| 38 | + 'couleur' => 'basic highlight', |
|
| 39 | + 'couleur-foncee' => 'basic highlight', |
|
| 40 | + 'trait-couleur' => 'important', |
|
| 41 | + 'alerte' => 'notice', |
|
| 42 | + 'info' => 'info', |
|
| 43 | + 'sous_rub' => 'simple sous-rub' |
|
| 44 | + ]; |
|
| 45 | + $style_titre_mapping = ['couleur' => 'topper', 'trait-couleur' => 'section']; |
|
| 46 | + $c = $style_mapping[$style] ?? 'simple'; |
|
| 47 | + $class = $c . ($class ? " $class" : ''); |
|
| 48 | + if (!$padding) { |
|
| 49 | + $class .= ($class ? ' ' : '') . 'no-padding'; |
|
| 50 | + } |
|
| 51 | + |
|
| 52 | + //($id?"id='$id' ":"") |
|
| 53 | + if (strlen($icone) > 1) { |
|
| 54 | + if ($icone_renommer = charger_fonction('icone_renommer', 'inc', true)) { |
|
| 55 | + [$fond, $fonction] = $icone_renommer($icone, $fonction); |
|
| 56 | + } |
|
| 57 | + $size = 24; |
|
| 58 | + if (preg_match('/-([0-9]{1,3})[.](gif|png)$/i', $fond, $match)) { |
|
| 59 | + $size = $match[1]; |
|
| 60 | + } |
|
| 61 | + if ($fonction) { |
|
| 62 | + // 2 images pour composer l'icone : le fond (article) en background, |
|
| 63 | + // la fonction (new) en image |
|
| 64 | + $icone = http_img_pack($fonction, '', "class='cadre-icone' width='$size' height='$size'\n" . |
|
| 65 | + http_style_background($fond, 'no-repeat center center', $size)); |
|
| 66 | + } else { |
|
| 67 | + $icone = http_img_pack($fond, '', "class='cadre-icone' width='$size' height='$size'"); |
|
| 68 | + } |
|
| 69 | + $titre = $icone . $titre; |
|
| 70 | + } |
|
| 71 | + |
|
| 72 | + return boite_ouvrir($titre, $class, $style_titre_mapping[$style] ?? '', $id); |
|
| 73 | 73 | } |
| 74 | 74 | |
| 75 | 75 | function fin_cadre() { |
| 76 | - return boite_fermer(); |
|
| 76 | + return boite_fermer(); |
|
| 77 | 77 | } |
| 78 | 78 | |
| 79 | 79 | |
| 80 | 80 | function debut_cadre_relief( |
| 81 | - $icone = '', |
|
| 82 | - $dummy = '', |
|
| 83 | - $fonction = '', |
|
| 84 | - $titre = '', |
|
| 85 | - $id = '', |
|
| 86 | - $class = '' |
|
| 81 | + $icone = '', |
|
| 82 | + $dummy = '', |
|
| 83 | + $fonction = '', |
|
| 84 | + $titre = '', |
|
| 85 | + $id = '', |
|
| 86 | + $class = '' |
|
| 87 | 87 | ) { |
| 88 | - return debut_cadre('r', $icone, $fonction, $titre, $id, $class); |
|
| 88 | + return debut_cadre('r', $icone, $fonction, $titre, $id, $class); |
|
| 89 | 89 | } |
| 90 | 90 | |
| 91 | 91 | function fin_cadre_relief() { |
| 92 | - return fin_cadre(); |
|
| 92 | + return fin_cadre(); |
|
| 93 | 93 | } |
| 94 | 94 | |
| 95 | 95 | function debut_cadre_enfonce( |
| 96 | - $icone = '', |
|
| 97 | - $dummy = '', |
|
| 98 | - $fonction = '', |
|
| 99 | - $titre = '', |
|
| 100 | - $id = '', |
|
| 101 | - $class = '' |
|
| 96 | + $icone = '', |
|
| 97 | + $dummy = '', |
|
| 98 | + $fonction = '', |
|
| 99 | + $titre = '', |
|
| 100 | + $id = '', |
|
| 101 | + $class = '' |
|
| 102 | 102 | ) { |
| 103 | - return debut_cadre('e', $icone, $fonction, $titre, $id, $class); |
|
| 103 | + return debut_cadre('e', $icone, $fonction, $titre, $id, $class); |
|
| 104 | 104 | } |
| 105 | 105 | |
| 106 | 106 | function fin_cadre_enfonce() { |
| 107 | - return fin_cadre(); |
|
| 107 | + return fin_cadre(); |
|
| 108 | 108 | } |
| 109 | 109 | |
| 110 | 110 | function debut_cadre_sous_rub( |
| 111 | - $icone = '', |
|
| 112 | - $dummy = '', |
|
| 113 | - $fonction = '', |
|
| 114 | - $titre = '', |
|
| 115 | - $id = '', |
|
| 116 | - $class = '' |
|
| 111 | + $icone = '', |
|
| 112 | + $dummy = '', |
|
| 113 | + $fonction = '', |
|
| 114 | + $titre = '', |
|
| 115 | + $id = '', |
|
| 116 | + $class = '' |
|
| 117 | 117 | ) { |
| 118 | - return debut_cadre('sous_rub', $icone, $fonction, $titre, $id, $class); |
|
| 118 | + return debut_cadre('sous_rub', $icone, $fonction, $titre, $id, $class); |
|
| 119 | 119 | } |
| 120 | 120 | |
| 121 | 121 | function fin_cadre_sous_rub() { |
| 122 | - return fin_cadre(); |
|
| 122 | + return fin_cadre(); |
|
| 123 | 123 | } |
| 124 | 124 | |
| 125 | 125 | function debut_cadre_couleur( |
| 126 | - $icone = '', |
|
| 127 | - $dummy = '', |
|
| 128 | - $fonction = '', |
|
| 129 | - $titre = '', |
|
| 130 | - $id = '', |
|
| 131 | - $class = '' |
|
| 126 | + $icone = '', |
|
| 127 | + $dummy = '', |
|
| 128 | + $fonction = '', |
|
| 129 | + $titre = '', |
|
| 130 | + $id = '', |
|
| 131 | + $class = '' |
|
| 132 | 132 | ) { |
| 133 | - return debut_cadre('couleur', $icone, $fonction, $titre, $id, $class); |
|
| 133 | + return debut_cadre('couleur', $icone, $fonction, $titre, $id, $class); |
|
| 134 | 134 | } |
| 135 | 135 | |
| 136 | 136 | function fin_cadre_couleur() { |
| 137 | - return fin_cadre(); |
|
| 137 | + return fin_cadre(); |
|
| 138 | 138 | } |
| 139 | 139 | |
| 140 | 140 | function debut_cadre_trait_couleur( |
| 141 | - $icone = '', |
|
| 142 | - $dummy = '', |
|
| 143 | - $fonction = '', |
|
| 144 | - $titre = '', |
|
| 145 | - $id = '', |
|
| 146 | - $class = '' |
|
| 141 | + $icone = '', |
|
| 142 | + $dummy = '', |
|
| 143 | + $fonction = '', |
|
| 144 | + $titre = '', |
|
| 145 | + $id = '', |
|
| 146 | + $class = '' |
|
| 147 | 147 | ) { |
| 148 | - return debut_cadre('trait-couleur', $icone, $fonction, $titre, $id, $class); |
|
| 148 | + return debut_cadre('trait-couleur', $icone, $fonction, $titre, $id, $class); |
|
| 149 | 149 | } |
| 150 | 150 | |
| 151 | 151 | function fin_cadre_trait_couleur() { |
| 152 | - return fin_cadre(); |
|
| 152 | + return fin_cadre(); |
|
| 153 | 153 | } |
| 154 | 154 | |
| 155 | 155 | function debut_boite_alerte() { |
| 156 | - return debut_cadre('alerte', '', '', '', '', ''); |
|
| 156 | + return debut_cadre('alerte', '', '', '', '', ''); |
|
| 157 | 157 | } |
| 158 | 158 | |
| 159 | 159 | function fin_boite_alerte() { |
| 160 | - return fin_cadre(); |
|
| 160 | + return fin_cadre(); |
|
| 161 | 161 | } |
| 162 | 162 | |
| 163 | 163 | function debut_boite_info() { |
| 164 | - return debut_cadre('info', '', '', '', '', ''); |
|
| 164 | + return debut_cadre('info', '', '', '', '', ''); |
|
| 165 | 165 | } |
| 166 | 166 | |
| 167 | 167 | function fin_boite_info() { |
| 168 | - return fin_cadre(); |
|
| 168 | + return fin_cadre(); |
|
| 169 | 169 | } |
| 170 | 170 | |
| 171 | 171 | /** |
@@ -176,17 +176,17 @@ discard block |
||
| 176 | 176 | * @return string Code PHP. |
| 177 | 177 | **/ |
| 178 | 178 | function gros_titre( |
| 179 | - $titre, |
|
| 180 | - $ze_logo = '' |
|
| 179 | + $titre, |
|
| 180 | + $ze_logo = '' |
|
| 181 | 181 | ) { |
| 182 | - return "<h1 class = 'grostitre'>" . $ze_logo . ' ' . typo($titre) . "</h1>\n"; |
|
| 182 | + return "<h1 class = 'grostitre'>" . $ze_logo . ' ' . typo($titre) . "</h1>\n"; |
|
| 183 | 183 | } |
| 184 | 184 | |
| 185 | 185 | // La boite des raccourcis |
| 186 | 186 | // Se place a droite si l'ecran est en mode panoramique. |
| 187 | 187 | function bloc_des_raccourcis($bloc) { |
| 188 | - return creer_colonne_droite() |
|
| 189 | - . boite_ouvrir(_T('titre_cadre_raccourcis'), 'raccourcis') . $bloc . boite_fermer(); |
|
| 188 | + return creer_colonne_droite() |
|
| 189 | + . boite_ouvrir(_T('titre_cadre_raccourcis'), 'raccourcis') . $bloc . boite_fermer(); |
|
| 190 | 190 | } |
| 191 | 191 | |
| 192 | 192 | // |
@@ -196,18 +196,18 @@ discard block |
||
| 196 | 196 | // Fonctions onglets |
| 197 | 197 | // @param string $sous_classe prend la valeur second pour definir les onglet de deuxieme niveau |
| 198 | 198 | function debut_onglet($classe = 'barre_onglet') { |
| 199 | - return "<div class = '$classe clearfix'><ul>\n"; |
|
| 199 | + return "<div class = '$classe clearfix'><ul>\n"; |
|
| 200 | 200 | } |
| 201 | 201 | |
| 202 | 202 | function fin_onglet() { |
| 203 | - return "</ul></div>\n"; |
|
| 203 | + return "</ul></div>\n"; |
|
| 204 | 204 | } |
| 205 | 205 | |
| 206 | 206 | function onglet($texte, $lien, $onglet_ref, $onglet, $icone = '') { |
| 207 | - return '<li>' |
|
| 208 | - . ($icone ? http_img_pack($icone, '', " class='cadre-icone'") : '') |
|
| 209 | - . lien_ou_expose($lien, $texte, $onglet == $onglet_ref) |
|
| 210 | - . '</li>'; |
|
| 207 | + return '<li>' |
|
| 208 | + . ($icone ? http_img_pack($icone, '', " class='cadre-icone'") : '') |
|
| 209 | + . lien_ou_expose($lien, $texte, $onglet == $onglet_ref) |
|
| 210 | + . '</li>'; |
|
| 211 | 211 | } |
| 212 | 212 | |
| 213 | 213 | /** |
@@ -239,14 +239,14 @@ discard block |
||
| 239 | 239 | * Code HTML du lien |
| 240 | 240 | **/ |
| 241 | 241 | function icone_verticale($texte, $lien, $fond, $fonction = '', $align = '', $javascript = '') { |
| 242 | - // cas d'ajax_action_auteur: faut defaire le boulot |
|
| 243 | - // (il faudrait fusionner avec le cas $javascript) |
|
| 244 | - if (preg_match(",^<a\shref='([^']*)'([^>]*)>(.*)</a>$,i", $lien, $r)) { |
|
| 245 | - [$x, $lien, $atts, $texte] = $r; |
|
| 246 | - $javascript .= $atts; |
|
| 247 | - } |
|
| 248 | - |
|
| 249 | - return icone_base($lien, $texte, $fond, $fonction, "verticale $align", $javascript); |
|
| 242 | + // cas d'ajax_action_auteur: faut defaire le boulot |
|
| 243 | + // (il faudrait fusionner avec le cas $javascript) |
|
| 244 | + if (preg_match(",^<a\shref='([^']*)'([^>]*)>(.*)</a>$,i", $lien, $r)) { |
|
| 245 | + [$x, $lien, $atts, $texte] = $r; |
|
| 246 | + $javascript .= $atts; |
|
| 247 | + } |
|
| 248 | + |
|
| 249 | + return icone_base($lien, $texte, $fond, $fonction, "verticale $align", $javascript); |
|
| 250 | 250 | } |
| 251 | 251 | |
| 252 | 252 | /** |
@@ -271,15 +271,15 @@ discard block |
||
| 271 | 271 | * Code HTML du lien |
| 272 | 272 | **/ |
| 273 | 273 | function icone_horizontale($texte, $lien, $fond, $fonction = '', $dummy = '', $javascript = '') { |
| 274 | - $retour = ''; |
|
| 275 | - // cas d'ajax_action_auteur: faut defaire le boulot |
|
| 276 | - // (il faudrait fusionner avec le cas $javascript) |
|
| 277 | - if (preg_match(",^<a\shref='([^']*)'([^>]*)>(.*)</a>$,i", $lien, $r)) { |
|
| 278 | - [$x, $lien, $atts, $texte] = $r; |
|
| 279 | - $javascript .= $atts; |
|
| 280 | - } |
|
| 274 | + $retour = ''; |
|
| 275 | + // cas d'ajax_action_auteur: faut defaire le boulot |
|
| 276 | + // (il faudrait fusionner avec le cas $javascript) |
|
| 277 | + if (preg_match(",^<a\shref='([^']*)'([^>]*)>(.*)</a>$,i", $lien, $r)) { |
|
| 278 | + [$x, $lien, $atts, $texte] = $r; |
|
| 279 | + $javascript .= $atts; |
|
| 280 | + } |
|
| 281 | 281 | |
| 282 | - $retour = icone_base($lien, $texte, $fond, $fonction, 'horizontale', $javascript); |
|
| 282 | + $retour = icone_base($lien, $texte, $fond, $fonction, 'horizontale', $javascript); |
|
| 283 | 283 | |
| 284 | - return $retour; |
|
| 284 | + return $retour; |
|
| 285 | 285 | } |
@@ -44,9 +44,9 @@ discard block |
||
| 44 | 44 | ]; |
| 45 | 45 | $style_titre_mapping = ['couleur' => 'topper', 'trait-couleur' => 'section']; |
| 46 | 46 | $c = $style_mapping[$style] ?? 'simple'; |
| 47 | - $class = $c . ($class ? " $class" : ''); |
|
| 47 | + $class = $c.($class ? " $class" : ''); |
|
| 48 | 48 | if (!$padding) { |
| 49 | - $class .= ($class ? ' ' : '') . 'no-padding'; |
|
| 49 | + $class .= ($class ? ' ' : '').'no-padding'; |
|
| 50 | 50 | } |
| 51 | 51 | |
| 52 | 52 | //($id?"id='$id' ":"") |
@@ -61,12 +61,12 @@ discard block |
||
| 61 | 61 | if ($fonction) { |
| 62 | 62 | // 2 images pour composer l'icone : le fond (article) en background, |
| 63 | 63 | // la fonction (new) en image |
| 64 | - $icone = http_img_pack($fonction, '', "class='cadre-icone' width='$size' height='$size'\n" . |
|
| 64 | + $icone = http_img_pack($fonction, '', "class='cadre-icone' width='$size' height='$size'\n". |
|
| 65 | 65 | http_style_background($fond, 'no-repeat center center', $size)); |
| 66 | 66 | } else { |
| 67 | 67 | $icone = http_img_pack($fond, '', "class='cadre-icone' width='$size' height='$size'"); |
| 68 | 68 | } |
| 69 | - $titre = $icone . $titre; |
|
| 69 | + $titre = $icone.$titre; |
|
| 70 | 70 | } |
| 71 | 71 | |
| 72 | 72 | return boite_ouvrir($titre, $class, $style_titre_mapping[$style] ?? '', $id); |
@@ -179,14 +179,14 @@ discard block |
||
| 179 | 179 | $titre, |
| 180 | 180 | $ze_logo = '' |
| 181 | 181 | ) { |
| 182 | - return "<h1 class = 'grostitre'>" . $ze_logo . ' ' . typo($titre) . "</h1>\n"; |
|
| 182 | + return "<h1 class = 'grostitre'>".$ze_logo.' '.typo($titre)."</h1>\n"; |
|
| 183 | 183 | } |
| 184 | 184 | |
| 185 | 185 | // La boite des raccourcis |
| 186 | 186 | // Se place a droite si l'ecran est en mode panoramique. |
| 187 | 187 | function bloc_des_raccourcis($bloc) { |
| 188 | 188 | return creer_colonne_droite() |
| 189 | - . boite_ouvrir(_T('titre_cadre_raccourcis'), 'raccourcis') . $bloc . boite_fermer(); |
|
| 189 | + . boite_ouvrir(_T('titre_cadre_raccourcis'), 'raccourcis').$bloc.boite_fermer(); |
|
| 190 | 190 | } |
| 191 | 191 | |
| 192 | 192 | // |
@@ -203,7 +203,7 @@ discard block |
||
| 203 | 203 | ) { |
| 204 | 204 | $r = nettoyer_url_page($url, $contexte); |
| 205 | 205 | if ($r) { |
| 206 | - [$contexte, $type, , , $suite] = $r; |
|
| 206 | + [$contexte, $type,,, $suite] = $r; |
|
| 207 | 207 | $_id = id_table_objet($type); |
| 208 | 208 | $id_objet = $contexte[$_id]; |
| 209 | 209 | $url_propre = generer_objet_url($id_objet, $type); |
@@ -274,9 +274,9 @@ discard block |
||
| 274 | 274 | */ |
| 275 | 275 | function nettoyer_url_page($url, $contexte = []) { |
| 276 | 276 | $url_objets = urls_liste_objets(); |
| 277 | - $raccourci_url_page_html = ',^(?:[^?]*/)?(' . $url_objets . ')([0-9]+)(?:\.html)?([?&].*)?$,'; |
|
| 278 | - $raccourci_url_page_id = ',^(?:[^?]*/)?(' . $url_objets . ')\.php3?[?]id_\1=([0-9]+)([?&].*)?$,'; |
|
| 279 | - $raccourci_url_page_spip = ',^(?:[^?]*/)?(?:spip[.]php)?[?](' . $url_objets . ')([0-9]+)=?(&.*)?$,'; |
|
| 277 | + $raccourci_url_page_html = ',^(?:[^?]*/)?('.$url_objets.')([0-9]+)(?:\.html)?([?&].*)?$,'; |
|
| 278 | + $raccourci_url_page_id = ',^(?:[^?]*/)?('.$url_objets.')\.php3?[?]id_\1=([0-9]+)([?&].*)?$,'; |
|
| 279 | + $raccourci_url_page_spip = ',^(?:[^?]*/)?(?:spip[.]php)?[?]('.$url_objets.')([0-9]+)=?(&.*)?$,'; |
|
| 280 | 280 | |
| 281 | 281 | if ( |
| 282 | 282 | preg_match($raccourci_url_page_html, $url, $regs) |
@@ -314,11 +314,11 @@ discard block |
||
| 314 | 314 | $id = intval($id); |
| 315 | 315 | if (!isset($furls[$objet])) { |
| 316 | 316 | if ( |
| 317 | - function_exists($f = 'generer_' . $objet . '_url_ecrire') |
|
| 317 | + function_exists($f = 'generer_'.$objet.'_url_ecrire') |
|
| 318 | 318 | // ou definie par un plugin |
| 319 | 319 | or $f = charger_fonction($f, 'urls', true) |
| 320 | 320 | // deprecated |
| 321 | - or function_exists($f = 'generer_url_ecrire_' . $objet) or $f = charger_fonction($f, 'urls', true) |
|
| 321 | + or function_exists($f = 'generer_url_ecrire_'.$objet) or $f = charger_fonction($f, 'urls', true) |
|
| 322 | 322 | ) { |
| 323 | 323 | $furls[$objet] = $f; |
| 324 | 324 | } else { |
@@ -336,12 +336,12 @@ discard block |
||
| 336 | 336 | if ($public or $connect) { |
| 337 | 337 | return generer_objet_url_absolue($id, $objet, $args, $ancre, $public, '', $connect); |
| 338 | 338 | } |
| 339 | - $a = id_table_objet($objet) . '=' . intval($id); |
|
| 339 | + $a = id_table_objet($objet).'='.intval($id); |
|
| 340 | 340 | if (!function_exists('objet_info')) { |
| 341 | 341 | include_spip('inc/filtres'); |
| 342 | 342 | } |
| 343 | 343 | |
| 344 | - return generer_url_ecrire(objet_info($objet, 'url_voir'), $a . ($args ? "&$args" : '')) . ($ancre ? "#$ancre" : ''); |
|
| 344 | + return generer_url_ecrire(objet_info($objet, 'url_voir'), $a.($args ? "&$args" : '')).($ancre ? "#$ancre" : ''); |
|
| 345 | 345 | } |
| 346 | 346 | |
| 347 | 347 | /** |
@@ -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 | include_spip('base/objets'); |
| 23 | 23 | |
@@ -57,106 +57,106 @@ discard block |
||
| 57 | 57 | * |
| 58 | 58 | */ |
| 59 | 59 | function urls_decoder_url($url, $fond = '', $contexte = [], $assembler = false) { |
| 60 | - static $current_base = null; |
|
| 60 | + static $current_base = null; |
|
| 61 | 61 | |
| 62 | - // les anciennes fonctions modifient directement les globales |
|
| 63 | - // on les sauve avant l'appel, et on les retablit apres ! |
|
| 64 | - $save = [ |
|
| 65 | - $GLOBALS['fond'] ?? null, |
|
| 66 | - $GLOBALS['contexte'] ?? null, |
|
| 67 | - $_SERVER['REDIRECT_url_propre'] ?? null, |
|
| 68 | - $_ENV['url_propre'] ?? null, |
|
| 69 | - $GLOBALS['profondeur_url'] |
|
| 70 | - ]; |
|
| 62 | + // les anciennes fonctions modifient directement les globales |
|
| 63 | + // on les sauve avant l'appel, et on les retablit apres ! |
|
| 64 | + $save = [ |
|
| 65 | + $GLOBALS['fond'] ?? null, |
|
| 66 | + $GLOBALS['contexte'] ?? null, |
|
| 67 | + $_SERVER['REDIRECT_url_propre'] ?? null, |
|
| 68 | + $_ENV['url_propre'] ?? null, |
|
| 69 | + $GLOBALS['profondeur_url'] |
|
| 70 | + ]; |
|
| 71 | 71 | |
| 72 | - if (is_null($current_base)) { |
|
| 73 | - include_spip('inc/filtres_mini'); |
|
| 74 | - // le decodage des urls se fait toujours par rapport au site public |
|
| 75 | - $current_base = url_absolue(_DIR_RACINE ?: './'); |
|
| 76 | - } |
|
| 77 | - if (strncmp($url, $current_base, strlen($current_base)) == 0) { |
|
| 78 | - $url = substr($url, strlen($current_base)); |
|
| 79 | - } |
|
| 72 | + if (is_null($current_base)) { |
|
| 73 | + include_spip('inc/filtres_mini'); |
|
| 74 | + // le decodage des urls se fait toujours par rapport au site public |
|
| 75 | + $current_base = url_absolue(_DIR_RACINE ?: './'); |
|
| 76 | + } |
|
| 77 | + if (strncmp($url, $current_base, strlen($current_base)) == 0) { |
|
| 78 | + $url = substr($url, strlen($current_base)); |
|
| 79 | + } |
|
| 80 | 80 | |
| 81 | - // si on est en train d'assembler la page principale, |
|
| 82 | - // recuperer l'url depuis les globales url propres si fournies |
|
| 83 | - // sinon extraire la bonne portion d'url |
|
| 84 | - if ($assembler) { |
|
| 85 | - if (isset($_SERVER['REDIRECT_url_propre'])) { |
|
| 86 | - $url = $_SERVER['REDIRECT_url_propre']; |
|
| 87 | - } elseif (isset($_ENV['url_propre'])) { |
|
| 88 | - $url = $_ENV['url_propre']; |
|
| 89 | - } else { |
|
| 90 | - $qs = explode('?', $url); |
|
| 91 | - // ne prendre que le segment d'url qui correspond, en fonction de la profondeur calculee |
|
| 92 | - $url = ltrim($qs[0], '/'); |
|
| 93 | - $url = explode('/', $url); |
|
| 94 | - while (count($url) > $GLOBALS['profondeur_url'] + 1) { |
|
| 95 | - array_shift($url); |
|
| 96 | - } |
|
| 97 | - $qs[0] = implode('/', $url); |
|
| 98 | - $url = implode('?', $qs); |
|
| 99 | - } |
|
| 100 | - } |
|
| 81 | + // si on est en train d'assembler la page principale, |
|
| 82 | + // recuperer l'url depuis les globales url propres si fournies |
|
| 83 | + // sinon extraire la bonne portion d'url |
|
| 84 | + if ($assembler) { |
|
| 85 | + if (isset($_SERVER['REDIRECT_url_propre'])) { |
|
| 86 | + $url = $_SERVER['REDIRECT_url_propre']; |
|
| 87 | + } elseif (isset($_ENV['url_propre'])) { |
|
| 88 | + $url = $_ENV['url_propre']; |
|
| 89 | + } else { |
|
| 90 | + $qs = explode('?', $url); |
|
| 91 | + // ne prendre que le segment d'url qui correspond, en fonction de la profondeur calculee |
|
| 92 | + $url = ltrim($qs[0], '/'); |
|
| 93 | + $url = explode('/', $url); |
|
| 94 | + while (count($url) > $GLOBALS['profondeur_url'] + 1) { |
|
| 95 | + array_shift($url); |
|
| 96 | + } |
|
| 97 | + $qs[0] = implode('/', $url); |
|
| 98 | + $url = implode('?', $qs); |
|
| 99 | + } |
|
| 100 | + } |
|
| 101 | 101 | |
| 102 | - unset($_SERVER['REDIRECT_url_propre']); |
|
| 103 | - unset($_ENV['url_propre']); |
|
| 104 | - include_spip('inc/filtres_mini'); |
|
| 105 | - if (strpos($url, '://') === false) { |
|
| 106 | - $GLOBALS['profondeur_url'] = substr_count(ltrim(resolve_path("/$url"), '/'), '/'); |
|
| 107 | - } else { |
|
| 108 | - $GLOBALS['profondeur_url'] = max(0, substr_count($url, '/') - substr_count($current_base, '/')); |
|
| 109 | - } |
|
| 102 | + unset($_SERVER['REDIRECT_url_propre']); |
|
| 103 | + unset($_ENV['url_propre']); |
|
| 104 | + include_spip('inc/filtres_mini'); |
|
| 105 | + if (strpos($url, '://') === false) { |
|
| 106 | + $GLOBALS['profondeur_url'] = substr_count(ltrim(resolve_path("/$url"), '/'), '/'); |
|
| 107 | + } else { |
|
| 108 | + $GLOBALS['profondeur_url'] = max(0, substr_count($url, '/') - substr_count($current_base, '/')); |
|
| 109 | + } |
|
| 110 | 110 | |
| 111 | - $url_redirect = ''; |
|
| 112 | - $decoder = charger_fonction_url('decoder'); |
|
| 113 | - if ($decoder) { |
|
| 114 | - $a = $decoder($url, $fond, $contexte); |
|
| 115 | - if (is_array($a)) { |
|
| 116 | - [$ncontexte, $type, $url_redirect, $nfond] = array_pad($a, 4, null); |
|
| 117 | - $url_redirect ??= ''; |
|
| 118 | - if ($url_redirect === $url) { |
|
| 119 | - $url_redirect = ''; |
|
| 120 | - } // securite pour eviter une redirection infinie |
|
| 121 | - if ($assembler and strlen($url_redirect)) { |
|
| 122 | - spip_log("Redirige $url vers $url_redirect"); |
|
| 123 | - include_spip('inc/headers'); |
|
| 124 | - redirige_par_entete($url_redirect, '', 301); |
|
| 125 | - } |
|
| 126 | - if (isset($nfond)) { |
|
| 127 | - $fond = $nfond; |
|
| 128 | - } else { |
|
| 129 | - if ( |
|
| 130 | - $fond == '' |
|
| 131 | - or $fond == 'type_urls' /* compat avec htaccess 2.0.0 */ |
|
| 132 | - ) { |
|
| 133 | - $fond = $type; |
|
| 134 | - } |
|
| 135 | - } |
|
| 136 | - if (isset($ncontexte)) { |
|
| 137 | - $contexte = $ncontexte; |
|
| 138 | - } |
|
| 139 | - if (defined('_DEFINIR_CONTEXTE_TYPE') and _DEFINIR_CONTEXTE_TYPE) { |
|
| 140 | - $contexte['type'] = $type; |
|
| 141 | - } |
|
| 142 | - if (!defined('_DEFINIR_CONTEXTE_TYPE_PAGE') or _DEFINIR_CONTEXTE_TYPE_PAGE) { |
|
| 143 | - $contexte['type-page'] = $type; |
|
| 144 | - } |
|
| 145 | - } |
|
| 146 | - } |
|
| 111 | + $url_redirect = ''; |
|
| 112 | + $decoder = charger_fonction_url('decoder'); |
|
| 113 | + if ($decoder) { |
|
| 114 | + $a = $decoder($url, $fond, $contexte); |
|
| 115 | + if (is_array($a)) { |
|
| 116 | + [$ncontexte, $type, $url_redirect, $nfond] = array_pad($a, 4, null); |
|
| 117 | + $url_redirect ??= ''; |
|
| 118 | + if ($url_redirect === $url) { |
|
| 119 | + $url_redirect = ''; |
|
| 120 | + } // securite pour eviter une redirection infinie |
|
| 121 | + if ($assembler and strlen($url_redirect)) { |
|
| 122 | + spip_log("Redirige $url vers $url_redirect"); |
|
| 123 | + include_spip('inc/headers'); |
|
| 124 | + redirige_par_entete($url_redirect, '', 301); |
|
| 125 | + } |
|
| 126 | + if (isset($nfond)) { |
|
| 127 | + $fond = $nfond; |
|
| 128 | + } else { |
|
| 129 | + if ( |
|
| 130 | + $fond == '' |
|
| 131 | + or $fond == 'type_urls' /* compat avec htaccess 2.0.0 */ |
|
| 132 | + ) { |
|
| 133 | + $fond = $type; |
|
| 134 | + } |
|
| 135 | + } |
|
| 136 | + if (isset($ncontexte)) { |
|
| 137 | + $contexte = $ncontexte; |
|
| 138 | + } |
|
| 139 | + if (defined('_DEFINIR_CONTEXTE_TYPE') and _DEFINIR_CONTEXTE_TYPE) { |
|
| 140 | + $contexte['type'] = $type; |
|
| 141 | + } |
|
| 142 | + if (!defined('_DEFINIR_CONTEXTE_TYPE_PAGE') or _DEFINIR_CONTEXTE_TYPE_PAGE) { |
|
| 143 | + $contexte['type-page'] = $type; |
|
| 144 | + } |
|
| 145 | + } |
|
| 146 | + } |
|
| 147 | 147 | |
| 148 | - // retablir les globales |
|
| 149 | - [$GLOBALS['fond'], $GLOBALS['contexte'], $_SERVER['REDIRECT_url_propre'], $_ENV['url_propre'], $GLOBALS['profondeur_url']] = $save; |
|
| 148 | + // retablir les globales |
|
| 149 | + [$GLOBALS['fond'], $GLOBALS['contexte'], $_SERVER['REDIRECT_url_propre'], $_ENV['url_propre'], $GLOBALS['profondeur_url']] = $save; |
|
| 150 | 150 | |
| 151 | - // vider les globales url propres qui ne doivent plus etre utilisees en cas |
|
| 152 | - // d'inversion url => objet |
|
| 153 | - // maintenir pour compat ? |
|
| 154 | - #if ($assembler) { |
|
| 155 | - # unset($_SERVER['REDIRECT_url_propre']); |
|
| 156 | - # unset($_ENV['url_propre']); |
|
| 157 | - #} |
|
| 151 | + // vider les globales url propres qui ne doivent plus etre utilisees en cas |
|
| 152 | + // d'inversion url => objet |
|
| 153 | + // maintenir pour compat ? |
|
| 154 | + #if ($assembler) { |
|
| 155 | + # unset($_SERVER['REDIRECT_url_propre']); |
|
| 156 | + # unset($_ENV['url_propre']); |
|
| 157 | + #} |
|
| 158 | 158 | |
| 159 | - return [$fond, $contexte, $url_redirect]; |
|
| 159 | + return [$fond, $contexte, $url_redirect]; |
|
| 160 | 160 | } |
| 161 | 161 | |
| 162 | 162 | /** |
@@ -169,20 +169,20 @@ discard block |
||
| 169 | 169 | * @return array|false|string |
| 170 | 170 | */ |
| 171 | 171 | function urls_transition_retrouver_anciennes_url_propres(string $url_propre, string $entite, array $contexte = []): array { |
| 172 | - if ($url_propre) { |
|
| 173 | - if ($GLOBALS['profondeur_url'] <= 0) { |
|
| 174 | - $urls_anciennes = charger_fonction_url('decoder', 'propres'); |
|
| 175 | - } else { |
|
| 176 | - $urls_anciennes = charger_fonction_url('decoder', 'arbo'); |
|
| 177 | - } |
|
| 172 | + if ($url_propre) { |
|
| 173 | + if ($GLOBALS['profondeur_url'] <= 0) { |
|
| 174 | + $urls_anciennes = charger_fonction_url('decoder', 'propres'); |
|
| 175 | + } else { |
|
| 176 | + $urls_anciennes = charger_fonction_url('decoder', 'arbo'); |
|
| 177 | + } |
|
| 178 | 178 | |
| 179 | - if ($urls_anciennes) { |
|
| 180 | - $urls_anciennes = $urls_anciennes($url_propre, $entite, $contexte); |
|
| 181 | - } |
|
| 182 | - return $urls_anciennes ?: []; |
|
| 183 | - } |
|
| 179 | + if ($urls_anciennes) { |
|
| 180 | + $urls_anciennes = $urls_anciennes($url_propre, $entite, $contexte); |
|
| 181 | + } |
|
| 182 | + return $urls_anciennes ?: []; |
|
| 183 | + } |
|
| 184 | 184 | |
| 185 | - return []; |
|
| 185 | + return []; |
|
| 186 | 186 | } |
| 187 | 187 | |
| 188 | 188 | /** |
@@ -195,41 +195,41 @@ discard block |
||
| 195 | 195 | * @return array|false|string |
| 196 | 196 | */ |
| 197 | 197 | function urls_transition_retrouver_anciennes_url_html(string $url, string $entite, array $contexte = []): array { |
| 198 | - // Migration depuis anciennes URLs ? |
|
| 199 | - // traiter les injections domain.tld/spip.php/n/importe/quoi/rubrique23 |
|
| 200 | - if ( |
|
| 201 | - $url |
|
| 202 | - and $GLOBALS['profondeur_url'] <= 0 |
|
| 203 | - ) { |
|
| 204 | - $r = nettoyer_url_page($url, $contexte); |
|
| 205 | - if ($r) { |
|
| 206 | - [$contexte, $type, , , $suite] = $r; |
|
| 207 | - $_id = id_table_objet($type); |
|
| 208 | - $id_objet = $contexte[$_id]; |
|
| 209 | - $url_propre = generer_objet_url($id_objet, $type); |
|
| 210 | - if ( |
|
| 211 | - strlen($url_propre) |
|
| 212 | - and !strstr($url, (string) $url_propre) |
|
| 213 | - and ( |
|
| 214 | - objet_test_si_publie($type, $id_objet) |
|
| 215 | - or (defined('_VAR_PREVIEW') and _VAR_PREVIEW and autoriser('voir', $type, $id_objet)) |
|
| 216 | - ) |
|
| 217 | - ) { |
|
| 218 | - [, $hash] = array_pad(explode('#', $url_propre), 2, ''); |
|
| 219 | - $args = []; |
|
| 220 | - foreach (array_filter(explode('&', $suite ?? '')) as $fragment) { |
|
| 221 | - if ($fragment != "$_id=$id_objet") { |
|
| 222 | - $args[] = $fragment; |
|
| 223 | - } |
|
| 224 | - } |
|
| 225 | - $url_redirect = generer_objet_url($id_objet, $type, join('&', array_filter($args)), $hash); |
|
| 198 | + // Migration depuis anciennes URLs ? |
|
| 199 | + // traiter les injections domain.tld/spip.php/n/importe/quoi/rubrique23 |
|
| 200 | + if ( |
|
| 201 | + $url |
|
| 202 | + and $GLOBALS['profondeur_url'] <= 0 |
|
| 203 | + ) { |
|
| 204 | + $r = nettoyer_url_page($url, $contexte); |
|
| 205 | + if ($r) { |
|
| 206 | + [$contexte, $type, , , $suite] = $r; |
|
| 207 | + $_id = id_table_objet($type); |
|
| 208 | + $id_objet = $contexte[$_id]; |
|
| 209 | + $url_propre = generer_objet_url($id_objet, $type); |
|
| 210 | + if ( |
|
| 211 | + strlen($url_propre) |
|
| 212 | + and !strstr($url, (string) $url_propre) |
|
| 213 | + and ( |
|
| 214 | + objet_test_si_publie($type, $id_objet) |
|
| 215 | + or (defined('_VAR_PREVIEW') and _VAR_PREVIEW and autoriser('voir', $type, $id_objet)) |
|
| 216 | + ) |
|
| 217 | + ) { |
|
| 218 | + [, $hash] = array_pad(explode('#', $url_propre), 2, ''); |
|
| 219 | + $args = []; |
|
| 220 | + foreach (array_filter(explode('&', $suite ?? '')) as $fragment) { |
|
| 221 | + if ($fragment != "$_id=$id_objet") { |
|
| 222 | + $args[] = $fragment; |
|
| 223 | + } |
|
| 224 | + } |
|
| 225 | + $url_redirect = generer_objet_url($id_objet, $type, join('&', array_filter($args)), $hash); |
|
| 226 | 226 | |
| 227 | - return [$contexte, $type, $url_redirect, $type]; |
|
| 228 | - } |
|
| 229 | - } |
|
| 230 | - } |
|
| 231 | - /* Fin compatibilite anciennes urls */ |
|
| 232 | - return []; |
|
| 227 | + return [$contexte, $type, $url_redirect, $type]; |
|
| 228 | + } |
|
| 229 | + } |
|
| 230 | + } |
|
| 231 | + /* Fin compatibilite anciennes urls */ |
|
| 232 | + return []; |
|
| 233 | 233 | } |
| 234 | 234 | |
| 235 | 235 | /** |
@@ -242,24 +242,24 @@ discard block |
||
| 242 | 242 | * @return string|array |
| 243 | 243 | */ |
| 244 | 244 | function urls_liste_objets($preg = true) { |
| 245 | - static $url_objets = null; |
|
| 246 | - if (is_null($url_objets)) { |
|
| 247 | - $url_objets = []; |
|
| 248 | - // recuperer les tables_objets_sql declarees |
|
| 249 | - $tables_objets = lister_tables_objets_sql(); |
|
| 250 | - foreach ($tables_objets as $t => $infos) { |
|
| 251 | - if ($infos['page']) { |
|
| 252 | - $url_objets[] = $infos['type']; |
|
| 253 | - $url_objets = array_merge($url_objets, $infos['type_surnoms']); |
|
| 254 | - } |
|
| 255 | - } |
|
| 256 | - $url_objets = pipeline('declarer_url_objets', $url_objets); |
|
| 257 | - } |
|
| 258 | - if (!$preg) { |
|
| 259 | - return $url_objets; |
|
| 260 | - } |
|
| 245 | + static $url_objets = null; |
|
| 246 | + if (is_null($url_objets)) { |
|
| 247 | + $url_objets = []; |
|
| 248 | + // recuperer les tables_objets_sql declarees |
|
| 249 | + $tables_objets = lister_tables_objets_sql(); |
|
| 250 | + foreach ($tables_objets as $t => $infos) { |
|
| 251 | + if ($infos['page']) { |
|
| 252 | + $url_objets[] = $infos['type']; |
|
| 253 | + $url_objets = array_merge($url_objets, $infos['type_surnoms']); |
|
| 254 | + } |
|
| 255 | + } |
|
| 256 | + $url_objets = pipeline('declarer_url_objets', $url_objets); |
|
| 257 | + } |
|
| 258 | + if (!$preg) { |
|
| 259 | + return $url_objets; |
|
| 260 | + } |
|
| 261 | 261 | |
| 262 | - return implode('|', array_map('preg_quote', $url_objets)); |
|
| 262 | + return implode('|', array_map('preg_quote', $url_objets)); |
|
| 263 | 263 | } |
| 264 | 264 | |
| 265 | 265 | /** |
@@ -273,26 +273,26 @@ discard block |
||
| 273 | 273 | * @return array |
| 274 | 274 | */ |
| 275 | 275 | function nettoyer_url_page($url, $contexte = []) { |
| 276 | - $url_objets = urls_liste_objets(); |
|
| 277 | - $raccourci_url_page_html = ',^(?:[^?]*/)?(' . $url_objets . ')([0-9]+)(?:\.html)?([?&].*)?$,'; |
|
| 278 | - $raccourci_url_page_id = ',^(?:[^?]*/)?(' . $url_objets . ')\.php3?[?]id_\1=([0-9]+)([?&].*)?$,'; |
|
| 279 | - $raccourci_url_page_spip = ',^(?:[^?]*/)?(?:spip[.]php)?[?](' . $url_objets . ')([0-9]+)=?(&.*)?$,'; |
|
| 276 | + $url_objets = urls_liste_objets(); |
|
| 277 | + $raccourci_url_page_html = ',^(?:[^?]*/)?(' . $url_objets . ')([0-9]+)(?:\.html)?([?&].*)?$,'; |
|
| 278 | + $raccourci_url_page_id = ',^(?:[^?]*/)?(' . $url_objets . ')\.php3?[?]id_\1=([0-9]+)([?&].*)?$,'; |
|
| 279 | + $raccourci_url_page_spip = ',^(?:[^?]*/)?(?:spip[.]php)?[?](' . $url_objets . ')([0-9]+)=?(&.*)?$,'; |
|
| 280 | 280 | |
| 281 | - if ( |
|
| 282 | - preg_match($raccourci_url_page_html, $url, $regs) |
|
| 283 | - or preg_match($raccourci_url_page_id, $url, $regs) |
|
| 284 | - or preg_match($raccourci_url_page_spip, $url, $regs) |
|
| 285 | - ) { |
|
| 286 | - $regs = array_pad($regs, 4, null); |
|
| 287 | - $type = objet_type($regs[1]); |
|
| 288 | - $_id = id_table_objet($type); |
|
| 289 | - $contexte[$_id] = $regs[2]; |
|
| 290 | - $suite = $regs[3]; |
|
| 281 | + if ( |
|
| 282 | + preg_match($raccourci_url_page_html, $url, $regs) |
|
| 283 | + or preg_match($raccourci_url_page_id, $url, $regs) |
|
| 284 | + or preg_match($raccourci_url_page_spip, $url, $regs) |
|
| 285 | + ) { |
|
| 286 | + $regs = array_pad($regs, 4, null); |
|
| 287 | + $type = objet_type($regs[1]); |
|
| 288 | + $_id = id_table_objet($type); |
|
| 289 | + $contexte[$_id] = $regs[2]; |
|
| 290 | + $suite = $regs[3]; |
|
| 291 | 291 | |
| 292 | - return [$contexte, $type, null, $type, $suite]; |
|
| 293 | - } |
|
| 292 | + return [$contexte, $type, null, $type, $suite]; |
|
| 293 | + } |
|
| 294 | 294 | |
| 295 | - return []; |
|
| 295 | + return []; |
|
| 296 | 296 | } |
| 297 | 297 | |
| 298 | 298 | /** |
@@ -310,38 +310,38 @@ discard block |
||
| 310 | 310 | * @return string |
| 311 | 311 | */ |
| 312 | 312 | function generer_objet_url_ecrire($id, string $objet, string $args = '', string $ancre = '', ?bool $public = null, string $connect = ''): string { |
| 313 | - static $furls = []; |
|
| 314 | - $id = intval($id); |
|
| 315 | - if (!isset($furls[$objet])) { |
|
| 316 | - if ( |
|
| 317 | - function_exists($f = 'generer_' . $objet . '_url_ecrire') |
|
| 318 | - // ou definie par un plugin |
|
| 319 | - or $f = charger_fonction($f, 'urls', true) |
|
| 320 | - // deprecated |
|
| 321 | - or function_exists($f = 'generer_url_ecrire_' . $objet) or $f = charger_fonction($f, 'urls', true) |
|
| 322 | - ) { |
|
| 323 | - $furls[$objet] = $f; |
|
| 324 | - } else { |
|
| 325 | - $furls[$objet] = ''; |
|
| 326 | - } |
|
| 327 | - } |
|
| 328 | - if ($furls[$objet]) { |
|
| 329 | - return $furls[$objet]($id, $args, $ancre, $public, $connect); |
|
| 330 | - } |
|
| 331 | - // si pas de flag public fourni |
|
| 332 | - // le calculer en fonction de la declaration de statut |
|
| 333 | - if (is_null($public) and !$connect) { |
|
| 334 | - $public = objet_test_si_publie($objet, $id, $connect); |
|
| 335 | - } |
|
| 336 | - if ($public or $connect) { |
|
| 337 | - return generer_objet_url_absolue($id, $objet, $args, $ancre, $public, '', $connect); |
|
| 338 | - } |
|
| 339 | - $a = id_table_objet($objet) . '=' . intval($id); |
|
| 340 | - if (!function_exists('objet_info')) { |
|
| 341 | - include_spip('inc/filtres'); |
|
| 342 | - } |
|
| 313 | + static $furls = []; |
|
| 314 | + $id = intval($id); |
|
| 315 | + if (!isset($furls[$objet])) { |
|
| 316 | + if ( |
|
| 317 | + function_exists($f = 'generer_' . $objet . '_url_ecrire') |
|
| 318 | + // ou definie par un plugin |
|
| 319 | + or $f = charger_fonction($f, 'urls', true) |
|
| 320 | + // deprecated |
|
| 321 | + or function_exists($f = 'generer_url_ecrire_' . $objet) or $f = charger_fonction($f, 'urls', true) |
|
| 322 | + ) { |
|
| 323 | + $furls[$objet] = $f; |
|
| 324 | + } else { |
|
| 325 | + $furls[$objet] = ''; |
|
| 326 | + } |
|
| 327 | + } |
|
| 328 | + if ($furls[$objet]) { |
|
| 329 | + return $furls[$objet]($id, $args, $ancre, $public, $connect); |
|
| 330 | + } |
|
| 331 | + // si pas de flag public fourni |
|
| 332 | + // le calculer en fonction de la declaration de statut |
|
| 333 | + if (is_null($public) and !$connect) { |
|
| 334 | + $public = objet_test_si_publie($objet, $id, $connect); |
|
| 335 | + } |
|
| 336 | + if ($public or $connect) { |
|
| 337 | + return generer_objet_url_absolue($id, $objet, $args, $ancre, $public, '', $connect); |
|
| 338 | + } |
|
| 339 | + $a = id_table_objet($objet) . '=' . intval($id); |
|
| 340 | + if (!function_exists('objet_info')) { |
|
| 341 | + include_spip('inc/filtres'); |
|
| 342 | + } |
|
| 343 | 343 | |
| 344 | - return generer_url_ecrire(objet_info($objet, 'url_voir'), $a . ($args ? "&$args" : '')) . ($ancre ? "#$ancre" : ''); |
|
| 344 | + return generer_url_ecrire(objet_info($objet, 'url_voir'), $a . ($args ? "&$args" : '')) . ($ancre ? "#$ancre" : ''); |
|
| 345 | 345 | } |
| 346 | 346 | |
| 347 | 347 | /** |
@@ -349,5 +349,5 @@ discard block |
||
| 349 | 349 | * @see generer_objet_url_ecrire |
| 350 | 350 | */ |
| 351 | 351 | function generer_url_ecrire_objet($objet, $id, $args = '', $ancre = '', $public = null, string $connect = '') { |
| 352 | - return generer_objet_url_ecrire($id, $objet, $args, $ancre, $public, $connect); |
|
| 352 | + return generer_objet_url_ecrire($id, $objet, $args, $ancre, $public, $connect); |
|
| 353 | 353 | } |
@@ -2868,8 +2868,7 @@ |
||
| 2868 | 2868 | $_const = interprete_argument_balise(1, $p); |
| 2869 | 2869 | if (!strlen($_const ?? '')) { |
| 2870 | 2870 | $p->code = "''"; |
| 2871 | - } |
|
| 2872 | - else { |
|
| 2871 | + } else { |
|
| 2873 | 2872 | $p->code = "(defined($_const)?constant($_const):'')"; |
| 2874 | 2873 | } |
| 2875 | 2874 | $p->interdire_scripts = false; |
@@ -358,7 +358,7 @@ discard block |
||
| 358 | 358 | */ |
| 359 | 359 | function balise_DOSSIER_SQUELETTE_dist($p) { |
| 360 | 360 | $code = substr(addslashes(dirname($p->descr['sourcefile'])), strlen(_DIR_RACINE)); |
| 361 | - $p->code = "_DIR_RACINE . '$code'" . |
|
| 361 | + $p->code = "_DIR_RACINE . '$code'". |
|
| 362 | 362 | $p->interdire_scripts = false; |
| 363 | 363 | |
| 364 | 364 | return $p; |
@@ -377,7 +377,7 @@ discard block |
||
| 377 | 377 | */ |
| 378 | 378 | function balise_SQUELETTE_dist($p) { |
| 379 | 379 | $code = addslashes($p->descr['sourcefile']); |
| 380 | - $p->code = "'$code'" . |
|
| 380 | + $p->code = "'$code'". |
|
| 381 | 381 | $p->interdire_scripts = false; |
| 382 | 382 | |
| 383 | 383 | return $p; |
@@ -429,9 +429,9 @@ discard block |
||
| 429 | 429 | **/ |
| 430 | 430 | function balise_NOM_SITE_dist($p) { |
| 431 | 431 | if (!$p->etoile) { |
| 432 | - $p->code = 'supprimer_numero(calculer_url(' . |
|
| 433 | - champ_sql('url_site', $p) . ',' . |
|
| 434 | - champ_sql('nom_site', $p) . |
|
| 432 | + $p->code = 'supprimer_numero(calculer_url('. |
|
| 433 | + champ_sql('url_site', $p).','. |
|
| 434 | + champ_sql('nom_site', $p). |
|
| 435 | 435 | ", 'titre', \$connect, false))"; |
| 436 | 436 | } else { |
| 437 | 437 | $p->code = champ_sql('nom_site', $p); |
@@ -582,8 +582,8 @@ discard block |
||
| 582 | 582 | * Pile complétée par le code à générer |
| 583 | 583 | **/ |
| 584 | 584 | function balise_POPULARITE_ABSOLUE_dist($p) { |
| 585 | - $p->code = 'ceil(' . |
|
| 586 | - champ_sql('popularite', $p) . |
|
| 585 | + $p->code = 'ceil('. |
|
| 586 | + champ_sql('popularite', $p). |
|
| 587 | 587 | ')'; |
| 588 | 588 | $p->interdire_scripts = false; |
| 589 | 589 | |
@@ -664,7 +664,7 @@ discard block |
||
| 664 | 664 | $p->code = index_pile($p->id_boucle, 'valeur', $p->boucles, $b); |
| 665 | 665 | ; |
| 666 | 666 | if (($v = interprete_argument_balise(1, $p)) !== null) { |
| 667 | - $p->code = 'table_valeur(' . $p->code . ', ' . $v . ')'; |
|
| 667 | + $p->code = 'table_valeur('.$p->code.', '.$v.')'; |
|
| 668 | 668 | } |
| 669 | 669 | $p->interdire_scripts = true; |
| 670 | 670 | |
@@ -804,16 +804,16 @@ discard block |
||
| 804 | 804 | $trouver_table = charger_fonction('trouver_table', 'base'); |
| 805 | 805 | if ($desc = $trouver_table(table_objet_sql($type_objet))) { |
| 806 | 806 | if (isset($desc['field']['descriptif'])) { |
| 807 | - $_ligne .= "'descriptif' => " . champ_sql('descriptif', $p) . ','; |
|
| 807 | + $_ligne .= "'descriptif' => ".champ_sql('descriptif', $p).','; |
|
| 808 | 808 | } |
| 809 | 809 | if (isset($desc['field']['texte'])) { |
| 810 | - $_ligne .= "'texte' => " . champ_sql('texte', $p) . ','; |
|
| 810 | + $_ligne .= "'texte' => ".champ_sql('texte', $p).','; |
|
| 811 | 811 | } |
| 812 | 812 | if (isset($desc['field']['chapo'])) { |
| 813 | - $_ligne .= "'chapo' => " . champ_sql('chapo', $p) . ','; |
|
| 813 | + $_ligne .= "'chapo' => ".champ_sql('chapo', $p).','; |
|
| 814 | 814 | } |
| 815 | 815 | if (isset($desc['introduction_longueur'])) { |
| 816 | - $_introduction_longueur = "'" . $desc['introduction_longueur'] . "'"; |
|
| 816 | + $_introduction_longueur = "'".$desc['introduction_longueur']."'"; |
|
| 817 | 817 | } |
| 818 | 818 | } |
| 819 | 819 | $_ligne .= ')'; |
@@ -909,10 +909,10 @@ discard block |
||
| 909 | 909 | $p->code = sprintf( |
| 910 | 910 | CODE_RECUPERER_FOND, |
| 911 | 911 | "'modeles/lesauteurs'", |
| 912 | - "array('objet'=>'" . $objet . |
|
| 913 | - "','id_objet' => " . champ_sql($id_table_objet, $p) . |
|
| 914 | - ",'$id_table_objet' => " . champ_sql($id_table_objet, $p) . |
|
| 915 | - ($objet == 'article' ? '' : ",'id_article' => " . champ_sql('id_article', $p)) . |
|
| 912 | + "array('objet'=>'".$objet. |
|
| 913 | + "','id_objet' => ".champ_sql($id_table_objet, $p). |
|
| 914 | + ",'$id_table_objet' => ".champ_sql($id_table_objet, $p). |
|
| 915 | + ($objet == 'article' ? '' : ",'id_article' => ".champ_sql('id_article', $p)). |
|
| 916 | 916 | ')', |
| 917 | 917 | "'trim'=>true, 'compil'=>array($c)", |
| 918 | 918 | _q($connect) |
@@ -981,7 +981,7 @@ discard block |
||
| 981 | 981 | $m = trim($m); |
| 982 | 982 | if ($m != "''") { |
| 983 | 983 | if (!preg_match(',\W,', $m)) { |
| 984 | - $m = $boucle->id_table . ".$m"; |
|
| 984 | + $m = $boucle->id_table.".$m"; |
|
| 985 | 985 | } |
| 986 | 986 | |
| 987 | 987 | $m .= ' AS titre_rang'; |
@@ -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( |
| 1148 | 1148 | CODE_PAGINATION, |
@@ -1285,7 +1285,7 @@ discard block |
||
| 1285 | 1285 | $msg = ['zbug_balise_sans_argument', ['balise' => ' CHEMIN']]; |
| 1286 | 1286 | erreur_squelette($msg, $p); |
| 1287 | 1287 | } else { |
| 1288 | - $p->code = 'find_in_path((string)' . $arg . ')'; |
|
| 1288 | + $p->code = 'find_in_path((string)'.$arg.')'; |
|
| 1289 | 1289 | } |
| 1290 | 1290 | |
| 1291 | 1291 | $p->interdire_scripts = false; |
@@ -1320,7 +1320,7 @@ discard block |
||
| 1320 | 1320 | $msg = ['zbug_balise_sans_argument', ['balise' => ' CHEMIN_IMAGE']]; |
| 1321 | 1321 | erreur_squelette($msg, $p); |
| 1322 | 1322 | } else { |
| 1323 | - $p->code = 'chemin_image((string)' . $arg . ')'; |
|
| 1323 | + $p->code = 'chemin_image((string)'.$arg.')'; |
|
| 1324 | 1324 | } |
| 1325 | 1325 | |
| 1326 | 1326 | $p->interdire_scripts = false; |
@@ -1374,7 +1374,7 @@ discard block |
||
| 1374 | 1374 | // cas de #ENV sans argument : on retourne le serialize() du tableau |
| 1375 | 1375 | // une belle fonction [(#ENV|affiche_env)] serait pratique |
| 1376 | 1376 | if ($src) { |
| 1377 | - $p->code = '(is_array($a = (' . $src . ')) ? serialize($a) : "")'; |
|
| 1377 | + $p->code = '(is_array($a = ('.$src.')) ? serialize($a) : "")'; |
|
| 1378 | 1378 | } else { |
| 1379 | 1379 | $p->code = 'serialize($Pile[0]??[])'; |
| 1380 | 1380 | } |
@@ -1427,8 +1427,8 @@ discard block |
||
| 1427 | 1427 | $_sinon = interprete_argument_balise(2, $p); |
| 1428 | 1428 | $_unserialize = sinon(interprete_argument_balise(3, $p), 'false'); |
| 1429 | 1429 | |
| 1430 | - $p->code = '(include_spip(\'inc/config\')?lire_config(' . $arg . ',' . |
|
| 1431 | - ($_sinon && $_sinon != "''" ? $_sinon : 'null') . ',' . $_unserialize . "):'')"; |
|
| 1430 | + $p->code = '(include_spip(\'inc/config\')?lire_config('.$arg.','. |
|
| 1431 | + ($_sinon && $_sinon != "''" ? $_sinon : 'null').','.$_unserialize."):'')"; |
|
| 1432 | 1432 | |
| 1433 | 1433 | return $p; |
| 1434 | 1434 | } |
@@ -1521,7 +1521,7 @@ discard block |
||
| 1521 | 1521 | $err_b_s_a = ['zbug_balise_sans_argument', ['balise' => 'SESSION_SET']]; |
| 1522 | 1522 | erreur_squelette($err_b_s_a, $p); |
| 1523 | 1523 | } else { |
| 1524 | - $p->code = '(include_spip("inc/session") AND session_set(' . $_nom . ',' . $_val . '))'; |
|
| 1524 | + $p->code = '(include_spip("inc/session") AND session_set('.$_nom.','.$_val.'))'; |
|
| 1525 | 1525 | } |
| 1526 | 1526 | |
| 1527 | 1527 | $p->interdire_scripts = false; |
@@ -1569,7 +1569,7 @@ discard block |
||
| 1569 | 1569 | ) |
| 1570 | 1570 | ) { |
| 1571 | 1571 | $p->code = /* $r[1]. */ |
| 1572 | - '(' . $r[2] . ')'; |
|
| 1572 | + '('.$r[2].')'; |
|
| 1573 | 1573 | } else { |
| 1574 | 1574 | $p->code = "eval('return '.$php.';')"; |
| 1575 | 1575 | } |
@@ -1813,9 +1813,9 @@ discard block |
||
| 1813 | 1813 | |
| 1814 | 1814 | // noter la duree du cache dans un entete proprietaire |
| 1815 | 1815 | |
| 1816 | - $code = "'<'.'" . '?php header("X-Spip-Cache: ' |
|
| 1816 | + $code = "'<'.'".'?php header("X-Spip-Cache: ' |
|
| 1817 | 1817 | . $duree |
| 1818 | - . '"); ?' . "'.'>'"; |
|
| 1818 | + . '"); ?'."'.'>'"; |
|
| 1819 | 1819 | |
| 1820 | 1820 | // Remplir le header Cache-Control |
| 1821 | 1821 | // cas #CACHE{0} |
@@ -1836,9 +1836,9 @@ discard block |
||
| 1836 | 1836 | $pa == 'cache-client' |
| 1837 | 1837 | and $duree > 0 |
| 1838 | 1838 | ) { |
| 1839 | - $code .= ".'<'.'" . '?php header("Cache-Control: max-age=' |
|
| 1839 | + $code .= ".'<'.'".'?php header("Cache-Control: max-age=' |
|
| 1840 | 1840 | . $duree |
| 1841 | - . '"); ?' . "'.'>'"; |
|
| 1841 | + . '"); ?'."'.'>'"; |
|
| 1842 | 1842 | // il semble logique, si on cache-client, de ne pas invalider |
| 1843 | 1843 | $pa = 'statique'; |
| 1844 | 1844 | } |
@@ -1847,7 +1847,7 @@ discard block |
||
| 1847 | 1847 | $pa == 'statique' |
| 1848 | 1848 | and $duree > 0 |
| 1849 | 1849 | ) { |
| 1850 | - $code .= ".'<'.'" . '?php header("X-Spip-Statique: oui"); ?' . "'.'>'"; |
|
| 1850 | + $code .= ".'<'.'".'?php header("X-Spip-Statique: oui"); ?'."'.'>'"; |
|
| 1851 | 1851 | } |
| 1852 | 1852 | } |
| 1853 | 1853 | } else { |
@@ -2011,9 +2011,9 @@ discard block |
||
| 2011 | 2011 | if ($p->etoile) { |
| 2012 | 2012 | $_options[] = "'etoile'=>true"; |
| 2013 | 2013 | } |
| 2014 | - $_options[] = "'compil'=>array(" . memoriser_contexte_compil($p) . ')'; |
|
| 2014 | + $_options[] = "'compil'=>array(".memoriser_contexte_compil($p).')'; |
|
| 2015 | 2015 | |
| 2016 | - $_l = 'array(' . join(",\n\t", $_contexte) . ')'; |
|
| 2016 | + $_l = 'array('.join(",\n\t", $_contexte).')'; |
|
| 2017 | 2017 | if ($flag_env) { |
| 2018 | 2018 | $_l = "array_merge(\$Pile[0],$_l)"; |
| 2019 | 2019 | } |
@@ -2023,7 +2023,7 @@ discard block |
||
| 2023 | 2023 | $msg = ['zbug_balise_sans_argument', ['balise' => ' INCLURE']]; |
| 2024 | 2024 | erreur_squelette($msg, $p); |
| 2025 | 2025 | } else { |
| 2026 | - $p->code = 'charge_scripts(' . $_contexte[1] . ',false)'; |
|
| 2026 | + $p->code = 'charge_scripts('.$_contexte[1].',false)'; |
|
| 2027 | 2027 | } |
| 2028 | 2028 | |
| 2029 | 2029 | $p->interdire_scripts = false; // la securite est assuree par recuperer_fond |
@@ -2071,7 +2071,7 @@ discard block |
||
| 2071 | 2071 | unset($_contexte[1]); |
| 2072 | 2072 | |
| 2073 | 2073 | if (preg_match("/^\s*'[^']*'/s", $nom)) { |
| 2074 | - $nom = "'modeles/" . substr($nom, 1); |
|
| 2074 | + $nom = "'modeles/".substr($nom, 1); |
|
| 2075 | 2075 | } else { |
| 2076 | 2076 | $nom = "'modeles/' . $nom"; |
| 2077 | 2077 | } |
@@ -2088,8 +2088,8 @@ discard block |
||
| 2088 | 2088 | $primary = $p->boucles[$p->id_boucle]->primary; |
| 2089 | 2089 | if (!strpos($primary, ',')) { |
| 2090 | 2090 | $id = champ_sql($primary, $p); |
| 2091 | - $_contexte[] = "'$primary'=>" . $id; |
|
| 2092 | - $_contexte[] = "'id'=>" . $id; |
|
| 2091 | + $_contexte[] = "'$primary'=>".$id; |
|
| 2092 | + $_contexte[] = "'id'=>".$id; |
|
| 2093 | 2093 | } |
| 2094 | 2094 | } |
| 2095 | 2095 | $_contexte[] = "'recurs'=>(++\$recurs)"; |
@@ -2101,11 +2101,11 @@ discard block |
||
| 2101 | 2101 | $_options = memoriser_contexte_compil($p); |
| 2102 | 2102 | $_options = "'compil'=>array($_options), 'trim'=>true"; |
| 2103 | 2103 | if (isset($_contexte['ajax'])) { |
| 2104 | - $_options .= ', ' . preg_replace(',=>(.*)$,ims', '=> ($v=(\\1))?$v:true', $_contexte['ajax']); |
|
| 2104 | + $_options .= ', '.preg_replace(',=>(.*)$,ims', '=> ($v=(\\1))?$v:true', $_contexte['ajax']); |
|
| 2105 | 2105 | unset($_contexte['ajax']); |
| 2106 | 2106 | } |
| 2107 | 2107 | |
| 2108 | - $_l = 'array(' . join(",\n\t", $_contexte) . ')'; |
|
| 2108 | + $_l = 'array('.join(",\n\t", $_contexte).')'; |
|
| 2109 | 2109 | if ($flag_env) { |
| 2110 | 2110 | $_l = "array_merge(\$Pile[0],$_l)"; |
| 2111 | 2111 | } |
@@ -2215,12 +2215,12 @@ discard block |
||
| 2215 | 2215 | function balise_DOUBLONS_dist($p) { |
| 2216 | 2216 | if ($type = interprete_argument_balise(1, $p)) { |
| 2217 | 2217 | if ($famille = interprete_argument_balise(2, $p)) { |
| 2218 | - $type .= '.' . $famille; |
|
| 2218 | + $type .= '.'.$famille; |
|
| 2219 | 2219 | } |
| 2220 | - $p->code = '(isset($doublons[' . $type . ']) ? $doublons[' . $type . '] : "")'; |
|
| 2220 | + $p->code = '(isset($doublons['.$type.']) ? $doublons['.$type.'] : "")'; |
|
| 2221 | 2221 | if (!$p->etoile) { |
| 2222 | 2222 | $p->code = 'array_filter(array_map("intval",explode(",",' |
| 2223 | - . $p->code . ')))'; |
|
| 2223 | + . $p->code.')))'; |
|
| 2224 | 2224 | } |
| 2225 | 2225 | } else { |
| 2226 | 2226 | $p->code = '$doublons'; |
@@ -2349,7 +2349,7 @@ discard block |
||
| 2349 | 2349 | $_code[] = "$_key => $_val"; |
| 2350 | 2350 | } |
| 2351 | 2351 | } while ($_key && $_val); |
| 2352 | - $p->code = 'array(' . join(', ', $_code) . ')'; |
|
| 2352 | + $p->code = 'array('.join(', ', $_code).')'; |
|
| 2353 | 2353 | $p->interdire_scripts = false; |
| 2354 | 2354 | |
| 2355 | 2355 | return $p; |
@@ -2376,7 +2376,7 @@ discard block |
||
| 2376 | 2376 | while ($_val = interprete_argument_balise($n++, $p)) { |
| 2377 | 2377 | $_code[] = $_val; |
| 2378 | 2378 | } |
| 2379 | - $p->code = 'array(' . join(', ', $_code) . ')'; |
|
| 2379 | + $p->code = 'array('.join(', ', $_code).')'; |
|
| 2380 | 2380 | $p->interdire_scripts = false; |
| 2381 | 2381 | |
| 2382 | 2382 | return $p; |
@@ -2421,10 +2421,10 @@ discard block |
||
| 2421 | 2421 | $_code[] = $_v; |
| 2422 | 2422 | } |
| 2423 | 2423 | |
| 2424 | - $p->code = '((function_exists("autoriser")||include_spip("inc/autoriser"))&&autoriser(' . join( |
|
| 2424 | + $p->code = '((function_exists("autoriser")||include_spip("inc/autoriser"))&&autoriser('.join( |
|
| 2425 | 2425 | ', ', |
| 2426 | 2426 | $_code |
| 2427 | - ) . ')?" ":"")'; |
|
| 2427 | + ).')?" ":"")'; |
|
| 2428 | 2428 | $p->interdire_scripts = false; |
| 2429 | 2429 | |
| 2430 | 2430 | return $p; |
@@ -2457,7 +2457,7 @@ discard block |
||
| 2457 | 2457 | $type_info = isset($type_info) ? str_replace('\'', '"', $type_info) : '"est_actif"'; |
| 2458 | 2458 | |
| 2459 | 2459 | $f = chercher_filtre('info_plugin'); |
| 2460 | - $p->code = $f . '(' . $plugin . ', ' . $type_info . ')'; |
|
| 2460 | + $p->code = $f.'('.$plugin.', '.$type_info.')'; |
|
| 2461 | 2461 | |
| 2462 | 2462 | return $p; |
| 2463 | 2463 | } |
@@ -2689,7 +2689,7 @@ discard block |
||
| 2689 | 2689 | } |
| 2690 | 2690 | |
| 2691 | 2691 | // Différentes infos relatives au tri présentes dans les modificateurs |
| 2692 | - $_tri_nom = $boucle->modificateur['tri_nom'] ; // nom du paramètre définissant le tri |
|
| 2692 | + $_tri_nom = $boucle->modificateur['tri_nom']; // nom du paramètre définissant le tri |
|
| 2693 | 2693 | $_tri_champ = $boucle->modificateur['tri_champ']; // champ actuel utilisé le tri |
| 2694 | 2694 | $_tri_sens = $boucle->modificateur['tri_sens']; // sens de tri actuel |
| 2695 | 2695 | $_tri_liste_sens_defaut = $boucle->modificateur['tri_liste_sens_defaut']; // sens par défaut pour chaque champ |
@@ -2784,7 +2784,7 @@ discard block |
||
| 2784 | 2784 | $connect = $p->boucles[$p->id_boucle]->sql_serveur; |
| 2785 | 2785 | } |
| 2786 | 2786 | |
| 2787 | - $p->code = '(objet_test_si_publie(' . $_type . ',intval(' . $_id . '),' . _q($connect) . ")?' ':'')"; |
|
| 2787 | + $p->code = '(objet_test_si_publie('.$_type.',intval('.$_id.'),'._q($connect).")?' ':'')"; |
|
| 2788 | 2788 | $p->interdire_scripts = false; |
| 2789 | 2789 | |
| 2790 | 2790 | return $p; |
@@ -27,7 +27,7 @@ discard block |
||
| 27 | 27 | **/ |
| 28 | 28 | |
| 29 | 29 | if (!defined('_ECRIRE_INC_VERSION')) { |
| 30 | - return; |
|
| 30 | + return; |
|
| 31 | 31 | } |
| 32 | 32 | |
| 33 | 33 | /** |
@@ -49,16 +49,16 @@ discard block |
||
| 49 | 49 | * Code PHP si cet argument est présent, sinon null |
| 50 | 50 | **/ |
| 51 | 51 | function interprete_argument_balise(int $n, Champ $p): ?string { |
| 52 | - if (($p->param) && (!$p->param[0][0]) && ((is_countable($p->param[0]) ? count($p->param[0]) : 0) > $n)) { |
|
| 53 | - return calculer_liste( |
|
| 54 | - $p->param[0][$n], |
|
| 55 | - $p->descr, |
|
| 56 | - $p->boucles, |
|
| 57 | - $p->id_boucle |
|
| 58 | - ); |
|
| 59 | - } else { |
|
| 60 | - return null; |
|
| 61 | - } |
|
| 52 | + if (($p->param) && (!$p->param[0][0]) && ((is_countable($p->param[0]) ? count($p->param[0]) : 0) > $n)) { |
|
| 53 | + return calculer_liste( |
|
| 54 | + $p->param[0][$n], |
|
| 55 | + $p->descr, |
|
| 56 | + $p->boucles, |
|
| 57 | + $p->id_boucle |
|
| 58 | + ); |
|
| 59 | + } else { |
|
| 60 | + return null; |
|
| 61 | + } |
|
| 62 | 62 | } |
| 63 | 63 | |
| 64 | 64 | |
@@ -78,10 +78,10 @@ discard block |
||
| 78 | 78 | * Pile complétée par le code à générer |
| 79 | 79 | **/ |
| 80 | 80 | function balise_NOM_SITE_SPIP_dist($p) { |
| 81 | - $p->code = "\$GLOBALS['meta']['nom_site']"; |
|
| 81 | + $p->code = "\$GLOBALS['meta']['nom_site']"; |
|
| 82 | 82 | |
| 83 | - #$p->interdire_scripts = true; |
|
| 84 | - return $p; |
|
| 83 | + #$p->interdire_scripts = true; |
|
| 84 | + return $p; |
|
| 85 | 85 | } |
| 86 | 86 | |
| 87 | 87 | /** |
@@ -97,10 +97,10 @@ discard block |
||
| 97 | 97 | * Pile complétée par le code à générer |
| 98 | 98 | **/ |
| 99 | 99 | function balise_EMAIL_WEBMASTER_dist($p) { |
| 100 | - $p->code = "\$GLOBALS['meta']['email_webmaster']"; |
|
| 100 | + $p->code = "\$GLOBALS['meta']['email_webmaster']"; |
|
| 101 | 101 | |
| 102 | - #$p->interdire_scripts = true; |
|
| 103 | - return $p; |
|
| 102 | + #$p->interdire_scripts = true; |
|
| 103 | + return $p; |
|
| 104 | 104 | } |
| 105 | 105 | |
| 106 | 106 | /** |
@@ -116,10 +116,10 @@ discard block |
||
| 116 | 116 | * Pile complétée par le code à générer |
| 117 | 117 | **/ |
| 118 | 118 | function balise_DESCRIPTIF_SITE_SPIP_dist($p) { |
| 119 | - $p->code = "\$GLOBALS['meta']['descriptif_site']"; |
|
| 119 | + $p->code = "\$GLOBALS['meta']['descriptif_site']"; |
|
| 120 | 120 | |
| 121 | - #$p->interdire_scripts = true; |
|
| 122 | - return $p; |
|
| 121 | + #$p->interdire_scripts = true; |
|
| 122 | + return $p; |
|
| 123 | 123 | } |
| 124 | 124 | |
| 125 | 125 | |
@@ -140,10 +140,10 @@ discard block |
||
| 140 | 140 | * Pile complétée par le code à générer |
| 141 | 141 | **/ |
| 142 | 142 | function balise_CHARSET_dist($p) { |
| 143 | - $p->code = "\$GLOBALS['meta']['charset']"; |
|
| 143 | + $p->code = "\$GLOBALS['meta']['charset']"; |
|
| 144 | 144 | |
| 145 | - #$p->interdire_scripts = true; |
|
| 146 | - return $p; |
|
| 145 | + #$p->interdire_scripts = true; |
|
| 146 | + return $p; |
|
| 147 | 147 | } |
| 148 | 148 | |
| 149 | 149 | /** |
@@ -168,11 +168,11 @@ discard block |
||
| 168 | 168 | * Pile complétée par le code à générer |
| 169 | 169 | **/ |
| 170 | 170 | function balise_LANG_LEFT_dist($p) { |
| 171 | - $_lang = champ_sql('lang', $p); |
|
| 172 | - $p->code = "lang_dir($_lang, 'left','right')"; |
|
| 173 | - $p->interdire_scripts = false; |
|
| 171 | + $_lang = champ_sql('lang', $p); |
|
| 172 | + $p->code = "lang_dir($_lang, 'left','right')"; |
|
| 173 | + $p->interdire_scripts = false; |
|
| 174 | 174 | |
| 175 | - return $p; |
|
| 175 | + return $p; |
|
| 176 | 176 | } |
| 177 | 177 | |
| 178 | 178 | /** |
@@ -192,11 +192,11 @@ discard block |
||
| 192 | 192 | * Pile complétée par le code à générer |
| 193 | 193 | **/ |
| 194 | 194 | function balise_LANG_RIGHT_dist($p) { |
| 195 | - $_lang = champ_sql('lang', $p); |
|
| 196 | - $p->code = "lang_dir($_lang, 'right','left')"; |
|
| 197 | - $p->interdire_scripts = false; |
|
| 195 | + $_lang = champ_sql('lang', $p); |
|
| 196 | + $p->code = "lang_dir($_lang, 'right','left')"; |
|
| 197 | + $p->interdire_scripts = false; |
|
| 198 | 198 | |
| 199 | - return $p; |
|
| 199 | + return $p; |
|
| 200 | 200 | } |
| 201 | 201 | |
| 202 | 202 | /** |
@@ -221,11 +221,11 @@ discard block |
||
| 221 | 221 | * Pile complétée par le code à générer |
| 222 | 222 | **/ |
| 223 | 223 | function balise_LANG_DIR_dist($p) { |
| 224 | - $_lang = champ_sql('lang', $p); |
|
| 225 | - $p->code = "lang_dir($_lang, 'ltr','rtl')"; |
|
| 226 | - $p->interdire_scripts = false; |
|
| 224 | + $_lang = champ_sql('lang', $p); |
|
| 225 | + $p->code = "lang_dir($_lang, 'ltr','rtl')"; |
|
| 226 | + $p->interdire_scripts = false; |
|
| 227 | 227 | |
| 228 | - return $p; |
|
| 228 | + return $p; |
|
| 229 | 229 | } |
| 230 | 230 | |
| 231 | 231 | |
@@ -242,10 +242,10 @@ discard block |
||
| 242 | 242 | * Pile complétée par le code à générer |
| 243 | 243 | **/ |
| 244 | 244 | function balise_PUCE_dist($p) { |
| 245 | - $p->code = 'definir_puce()'; |
|
| 246 | - $p->interdire_scripts = false; |
|
| 245 | + $p->code = 'definir_puce()'; |
|
| 246 | + $p->interdire_scripts = false; |
|
| 247 | 247 | |
| 248 | - return $p; |
|
| 248 | + return $p; |
|
| 249 | 249 | } |
| 250 | 250 | |
| 251 | 251 | |
@@ -269,9 +269,9 @@ discard block |
||
| 269 | 269 | * Pile completée du code PHP d'exécution de la balise |
| 270 | 270 | */ |
| 271 | 271 | function balise_DATE_dist($p) { |
| 272 | - $p->code = champ_sql('date', $p); |
|
| 272 | + $p->code = champ_sql('date', $p); |
|
| 273 | 273 | |
| 274 | - return $p; |
|
| 274 | + return $p; |
|
| 275 | 275 | } |
| 276 | 276 | |
| 277 | 277 | |
@@ -291,10 +291,10 @@ 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 | - $p->code = champ_sql('date_redac', $p); |
|
| 295 | - $p->interdire_scripts = false; |
|
| 294 | + $p->code = champ_sql('date_redac', $p); |
|
| 295 | + $p->interdire_scripts = false; |
|
| 296 | 296 | |
| 297 | - return $p; |
|
| 297 | + return $p; |
|
| 298 | 298 | } |
| 299 | 299 | |
| 300 | 300 | /** |
@@ -313,10 +313,10 @@ discard block |
||
| 313 | 313 | * Pile completée du code PHP d'exécution de la balise |
| 314 | 314 | */ |
| 315 | 315 | function balise_DATE_MODIF_dist($p) { |
| 316 | - $p->code = champ_sql('date_modif', $p); |
|
| 317 | - $p->interdire_scripts = false; |
|
| 316 | + $p->code = champ_sql('date_modif', $p); |
|
| 317 | + $p->interdire_scripts = false; |
|
| 318 | 318 | |
| 319 | - return $p; |
|
| 319 | + return $p; |
|
| 320 | 320 | } |
| 321 | 321 | |
| 322 | 322 | /** |
@@ -334,13 +334,13 @@ discard block |
||
| 334 | 334 | * Pile completée du code PHP d'exécution de la balise |
| 335 | 335 | */ |
| 336 | 336 | function balise_DATE_NOUVEAUTES_dist($p) { |
| 337 | - $p->code = "((\$GLOBALS['meta']['quoi_de_neuf'] == 'oui' |
|
| 337 | + $p->code = "((\$GLOBALS['meta']['quoi_de_neuf'] == 'oui' |
|
| 338 | 338 | AND isset(\$GLOBALS['meta']['dernier_envoi_neuf'])) ? |
| 339 | 339 | \$GLOBALS['meta']['dernier_envoi_neuf'] : |
| 340 | 340 | \"'0000-00-00'\")"; |
| 341 | - $p->interdire_scripts = false; |
|
| 341 | + $p->interdire_scripts = false; |
|
| 342 | 342 | |
| 343 | - return $p; |
|
| 343 | + return $p; |
|
| 344 | 344 | } |
| 345 | 345 | |
| 346 | 346 | |
@@ -358,11 +358,11 @@ discard block |
||
| 358 | 358 | * Pile completée du code PHP d'exécution de la balise |
| 359 | 359 | */ |
| 360 | 360 | function balise_DOSSIER_SQUELETTE_dist($p) { |
| 361 | - $code = substr(addslashes(dirname($p->descr['sourcefile'])), strlen(_DIR_RACINE)); |
|
| 362 | - $p->code = "_DIR_RACINE . '$code'" . |
|
| 363 | - $p->interdire_scripts = false; |
|
| 361 | + $code = substr(addslashes(dirname($p->descr['sourcefile'])), strlen(_DIR_RACINE)); |
|
| 362 | + $p->code = "_DIR_RACINE . '$code'" . |
|
| 363 | + $p->interdire_scripts = false; |
|
| 364 | 364 | |
| 365 | - return $p; |
|
| 365 | + return $p; |
|
| 366 | 366 | } |
| 367 | 367 | |
| 368 | 368 | /** |
@@ -377,11 +377,11 @@ discard block |
||
| 377 | 377 | * Pile completée du code PHP d'exécution de la balise |
| 378 | 378 | */ |
| 379 | 379 | function balise_SQUELETTE_dist($p) { |
| 380 | - $code = addslashes($p->descr['sourcefile']); |
|
| 381 | - $p->code = "'$code'" . |
|
| 382 | - $p->interdire_scripts = false; |
|
| 380 | + $code = addslashes($p->descr['sourcefile']); |
|
| 381 | + $p->code = "'$code'" . |
|
| 382 | + $p->interdire_scripts = false; |
|
| 383 | 383 | |
| 384 | - return $p; |
|
| 384 | + return $p; |
|
| 385 | 385 | } |
| 386 | 386 | |
| 387 | 387 | /** |
@@ -400,10 +400,10 @@ discard block |
||
| 400 | 400 | * Pile completée du code PHP d'exécution de la balise |
| 401 | 401 | */ |
| 402 | 402 | function balise_SPIP_VERSION_dist($p) { |
| 403 | - $p->code = 'spip_version()'; |
|
| 404 | - $p->interdire_scripts = false; |
|
| 403 | + $p->code = 'spip_version()'; |
|
| 404 | + $p->interdire_scripts = false; |
|
| 405 | 405 | |
| 406 | - return $p; |
|
| 406 | + return $p; |
|
| 407 | 407 | } |
| 408 | 408 | |
| 409 | 409 | |
@@ -429,18 +429,18 @@ discard block |
||
| 429 | 429 | * Pile complétée par le code à générer |
| 430 | 430 | **/ |
| 431 | 431 | function balise_NOM_SITE_dist($p) { |
| 432 | - if (!$p->etoile) { |
|
| 433 | - $p->code = 'supprimer_numero(calculer_url(' . |
|
| 434 | - champ_sql('url_site', $p) . ',' . |
|
| 435 | - champ_sql('nom_site', $p) . |
|
| 436 | - ", 'titre', \$connect, false))"; |
|
| 437 | - } else { |
|
| 438 | - $p->code = champ_sql('nom_site', $p); |
|
| 439 | - } |
|
| 432 | + if (!$p->etoile) { |
|
| 433 | + $p->code = 'supprimer_numero(calculer_url(' . |
|
| 434 | + champ_sql('url_site', $p) . ',' . |
|
| 435 | + champ_sql('nom_site', $p) . |
|
| 436 | + ", 'titre', \$connect, false))"; |
|
| 437 | + } else { |
|
| 438 | + $p->code = champ_sql('nom_site', $p); |
|
| 439 | + } |
|
| 440 | 440 | |
| 441 | - $p->interdire_scripts = true; |
|
| 441 | + $p->interdire_scripts = true; |
|
| 442 | 442 | |
| 443 | - return $p; |
|
| 443 | + return $p; |
|
| 444 | 444 | } |
| 445 | 445 | |
| 446 | 446 | |
@@ -457,11 +457,11 @@ discard block |
||
| 457 | 457 | * Pile complétée par le code à générer |
| 458 | 458 | **/ |
| 459 | 459 | function balise_NOTES_dist($p) { |
| 460 | - // Recuperer les notes |
|
| 461 | - $p->code = 'calculer_notes()'; |
|
| 460 | + // Recuperer les notes |
|
| 461 | + $p->code = 'calculer_notes()'; |
|
| 462 | 462 | |
| 463 | - #$p->interdire_scripts = true; |
|
| 464 | - return $p; |
|
| 463 | + #$p->interdire_scripts = true; |
|
| 464 | + return $p; |
|
| 465 | 465 | } |
| 466 | 466 | |
| 467 | 467 | |
@@ -483,10 +483,10 @@ discard block |
||
| 483 | 483 | * Pile complétée par le code à générer |
| 484 | 484 | **/ |
| 485 | 485 | function balise_RECHERCHE_dist($p) { |
| 486 | - $p->code = 'entites_html(_request("recherche"))'; |
|
| 487 | - $p->interdire_scripts = false; |
|
| 486 | + $p->code = 'entites_html(_request("recherche"))'; |
|
| 487 | + $p->interdire_scripts = false; |
|
| 488 | 488 | |
| 489 | - return $p; |
|
| 489 | + return $p; |
|
| 490 | 490 | } |
| 491 | 491 | |
| 492 | 492 | |
@@ -504,18 +504,18 @@ discard block |
||
| 504 | 504 | * Pile complétée par le code à générer |
| 505 | 505 | **/ |
| 506 | 506 | function balise_COMPTEUR_BOUCLE_dist($p) { |
| 507 | - $b = index_boucle_mere($p); |
|
| 508 | - if ($b === '') { |
|
| 509 | - $msg = ['zbug_champ_hors_boucle', ['champ' => zbug_presenter_champ($p)]]; |
|
| 510 | - erreur_squelette($msg, $p); |
|
| 511 | - return null; |
|
| 512 | - } else { |
|
| 513 | - $p->code = "(\$Numrows['$b']['compteur_boucle'] ?? 0)"; |
|
| 514 | - $p->boucles[$b]->cptrows = true; |
|
| 515 | - $p->interdire_scripts = false; |
|
| 507 | + $b = index_boucle_mere($p); |
|
| 508 | + if ($b === '') { |
|
| 509 | + $msg = ['zbug_champ_hors_boucle', ['champ' => zbug_presenter_champ($p)]]; |
|
| 510 | + erreur_squelette($msg, $p); |
|
| 511 | + return null; |
|
| 512 | + } else { |
|
| 513 | + $p->code = "(\$Numrows['$b']['compteur_boucle'] ?? 0)"; |
|
| 514 | + $p->boucles[$b]->cptrows = true; |
|
| 515 | + $p->interdire_scripts = false; |
|
| 516 | 516 | |
| 517 | - return $p; |
|
| 518 | - } |
|
| 517 | + return $p; |
|
| 518 | + } |
|
| 519 | 519 | } |
| 520 | 520 | |
| 521 | 521 | /** |
@@ -533,17 +533,17 @@ discard block |
||
| 533 | 533 | * Pile complétée par le code à générer |
| 534 | 534 | **/ |
| 535 | 535 | function balise_TOTAL_BOUCLE_dist($p) { |
| 536 | - $b = index_boucle_mere($p); |
|
| 537 | - if ($b === '') { |
|
| 538 | - $msg = ['zbug_champ_hors_boucle', ['champ' => zbug_presenter_champ($p)]]; |
|
| 539 | - erreur_squelette($msg, $p); |
|
| 540 | - } else { |
|
| 541 | - $p->code = "(\$Numrows['$b']['total'] ?? 0)"; |
|
| 542 | - $p->boucles[$b]->numrows = true; |
|
| 543 | - $p->interdire_scripts = false; |
|
| 544 | - } |
|
| 536 | + $b = index_boucle_mere($p); |
|
| 537 | + if ($b === '') { |
|
| 538 | + $msg = ['zbug_champ_hors_boucle', ['champ' => zbug_presenter_champ($p)]]; |
|
| 539 | + erreur_squelette($msg, $p); |
|
| 540 | + } else { |
|
| 541 | + $p->code = "(\$Numrows['$b']['total'] ?? 0)"; |
|
| 542 | + $p->boucles[$b]->numrows = true; |
|
| 543 | + $p->interdire_scripts = false; |
|
| 544 | + } |
|
| 545 | 545 | |
| 546 | - return $p; |
|
| 546 | + return $p; |
|
| 547 | 547 | } |
| 548 | 548 | |
| 549 | 549 | |
@@ -563,7 +563,7 @@ discard block |
||
| 563 | 563 | * Pile complétée par le code à générer |
| 564 | 564 | **/ |
| 565 | 565 | function balise_POINTS_dist($p) { |
| 566 | - return rindex_pile($p, 'points', 'recherche'); |
|
| 566 | + return rindex_pile($p, 'points', 'recherche'); |
|
| 567 | 567 | } |
| 568 | 568 | |
| 569 | 569 | |
@@ -584,12 +584,12 @@ discard block |
||
| 584 | 584 | * Pile complétée par le code à générer |
| 585 | 585 | **/ |
| 586 | 586 | function balise_POPULARITE_ABSOLUE_dist($p) { |
| 587 | - $p->code = 'ceil(' . |
|
| 588 | - champ_sql('popularite', $p) . |
|
| 589 | - ')'; |
|
| 590 | - $p->interdire_scripts = false; |
|
| 587 | + $p->code = 'ceil(' . |
|
| 588 | + champ_sql('popularite', $p) . |
|
| 589 | + ')'; |
|
| 590 | + $p->interdire_scripts = false; |
|
| 591 | 591 | |
| 592 | - return $p; |
|
| 592 | + return $p; |
|
| 593 | 593 | } |
| 594 | 594 | |
| 595 | 595 | /** |
@@ -609,10 +609,10 @@ discard block |
||
| 609 | 609 | * Pile complétée par le code à générer |
| 610 | 610 | **/ |
| 611 | 611 | function balise_POPULARITE_SITE_dist($p) { |
| 612 | - $p->code = 'ceil($GLOBALS["meta"][\'popularite_total\'])'; |
|
| 613 | - $p->interdire_scripts = false; |
|
| 612 | + $p->code = 'ceil($GLOBALS["meta"][\'popularite_total\'])'; |
|
| 613 | + $p->interdire_scripts = false; |
|
| 614 | 614 | |
| 615 | - return $p; |
|
| 615 | + return $p; |
|
| 616 | 616 | } |
| 617 | 617 | |
| 618 | 618 | /** |
@@ -633,10 +633,10 @@ discard block |
||
| 633 | 633 | * Pile complétée par le code à générer |
| 634 | 634 | **/ |
| 635 | 635 | function balise_POPULARITE_MAX_dist($p) { |
| 636 | - $p->code = 'ceil($GLOBALS["meta"][\'popularite_max\'])'; |
|
| 637 | - $p->interdire_scripts = false; |
|
| 636 | + $p->code = 'ceil($GLOBALS["meta"][\'popularite_max\'])'; |
|
| 637 | + $p->interdire_scripts = false; |
|
| 638 | 638 | |
| 639 | - return $p; |
|
| 639 | + return $p; |
|
| 640 | 640 | } |
| 641 | 641 | |
| 642 | 642 | |
@@ -662,15 +662,15 @@ discard block |
||
| 662 | 662 | * Pile complétée par le code à générer |
| 663 | 663 | **/ |
| 664 | 664 | function balise_VALEUR_dist($p) { |
| 665 | - $b = $p->nom_boucle ?: $p->id_boucle; |
|
| 666 | - $p->code = index_pile($p->id_boucle, 'valeur', $p->boucles, $b); |
|
| 665 | + $b = $p->nom_boucle ?: $p->id_boucle; |
|
| 666 | + $p->code = index_pile($p->id_boucle, 'valeur', $p->boucles, $b); |
|
| 667 | 667 | ; |
| 668 | - if (($v = interprete_argument_balise(1, $p)) !== null) { |
|
| 669 | - $p->code = 'table_valeur(' . $p->code . ', ' . $v . ')'; |
|
| 670 | - } |
|
| 671 | - $p->interdire_scripts = true; |
|
| 668 | + if (($v = interprete_argument_balise(1, $p)) !== null) { |
|
| 669 | + $p->code = 'table_valeur(' . $p->code . ', ' . $v . ')'; |
|
| 670 | + } |
|
| 671 | + $p->interdire_scripts = true; |
|
| 672 | 672 | |
| 673 | - return $p; |
|
| 673 | + return $p; |
|
| 674 | 674 | } |
| 675 | 675 | |
| 676 | 676 | /** |
@@ -699,16 +699,16 @@ discard block |
||
| 699 | 699 | * Pile complétée par le code à générer |
| 700 | 700 | **/ |
| 701 | 701 | function balise_EXPOSE_dist($p) { |
| 702 | - $on = "'on'"; |
|
| 703 | - $off = "''"; |
|
| 704 | - if (($v = interprete_argument_balise(1, $p)) !== null) { |
|
| 705 | - $on = $v; |
|
| 706 | - if (($v = interprete_argument_balise(2, $p)) !== null) { |
|
| 707 | - $off = $v; |
|
| 708 | - } |
|
| 709 | - } |
|
| 702 | + $on = "'on'"; |
|
| 703 | + $off = "''"; |
|
| 704 | + if (($v = interprete_argument_balise(1, $p)) !== null) { |
|
| 705 | + $on = $v; |
|
| 706 | + if (($v = interprete_argument_balise(2, $p)) !== null) { |
|
| 707 | + $off = $v; |
|
| 708 | + } |
|
| 709 | + } |
|
| 710 | 710 | |
| 711 | - return calculer_balise_expose($p, $on, $off); |
|
| 711 | + return calculer_balise_expose($p, $on, $off); |
|
| 712 | 712 | } |
| 713 | 713 | |
| 714 | 714 | /** |
@@ -726,35 +726,35 @@ discard block |
||
| 726 | 726 | * Pile complétée par le code à générer |
| 727 | 727 | **/ |
| 728 | 728 | function calculer_balise_expose($p, $on, $off) { |
| 729 | - $b = index_boucle($p); |
|
| 730 | - if (empty($p->boucles[$b]->primary)) { |
|
| 731 | - $msg = ['zbug_champ_hors_boucle', ['champ' => zbug_presenter_champ($p)]]; |
|
| 732 | - erreur_squelette($msg, $p); |
|
| 733 | - } else { |
|
| 734 | - $key = $p->boucles[$b]->primary; |
|
| 735 | - $type = $p->boucles[$p->id_boucle]->primary; |
|
| 736 | - $desc = $p->boucles[$b]->show; |
|
| 737 | - $connect = sql_quote($p->boucles[$b]->sql_serveur); |
|
| 729 | + $b = index_boucle($p); |
|
| 730 | + if (empty($p->boucles[$b]->primary)) { |
|
| 731 | + $msg = ['zbug_champ_hors_boucle', ['champ' => zbug_presenter_champ($p)]]; |
|
| 732 | + erreur_squelette($msg, $p); |
|
| 733 | + } else { |
|
| 734 | + $key = $p->boucles[$b]->primary; |
|
| 735 | + $type = $p->boucles[$p->id_boucle]->primary; |
|
| 736 | + $desc = $p->boucles[$b]->show; |
|
| 737 | + $connect = sql_quote($p->boucles[$b]->sql_serveur); |
|
| 738 | 738 | |
| 739 | - // Ne pas utiliser champ_sql, on jongle avec le nom boucle explicite |
|
| 740 | - $c = index_pile($p->id_boucle, $type, $p->boucles); |
|
| 739 | + // Ne pas utiliser champ_sql, on jongle avec le nom boucle explicite |
|
| 740 | + $c = index_pile($p->id_boucle, $type, $p->boucles); |
|
| 741 | 741 | |
| 742 | - if (isset($desc['field']['id_parent'])) { |
|
| 743 | - $parent = 0; // pour if (!$parent) dans calculer_expose |
|
| 744 | - } elseif (isset($desc['field']['id_rubrique'])) { |
|
| 745 | - $parent = index_pile($p->id_boucle, 'id_rubrique', $p->boucles, $b); |
|
| 746 | - } elseif (isset($desc['field']['id_groupe'])) { |
|
| 747 | - $parent = index_pile($p->id_boucle, 'id_groupe', $p->boucles, $b); |
|
| 748 | - } else { |
|
| 749 | - $parent = "''"; |
|
| 750 | - } |
|
| 742 | + if (isset($desc['field']['id_parent'])) { |
|
| 743 | + $parent = 0; // pour if (!$parent) dans calculer_expose |
|
| 744 | + } elseif (isset($desc['field']['id_rubrique'])) { |
|
| 745 | + $parent = index_pile($p->id_boucle, 'id_rubrique', $p->boucles, $b); |
|
| 746 | + } elseif (isset($desc['field']['id_groupe'])) { |
|
| 747 | + $parent = index_pile($p->id_boucle, 'id_groupe', $p->boucles, $b); |
|
| 748 | + } else { |
|
| 749 | + $parent = "''"; |
|
| 750 | + } |
|
| 751 | 751 | |
| 752 | - $p->code = "(calcul_exposer($c, '$type', \$Pile[0], $parent, '$key', $connect) ? $on : $off)"; |
|
| 753 | - } |
|
| 752 | + $p->code = "(calcul_exposer($c, '$type', \$Pile[0], $parent, '$key', $connect) ? $on : $off)"; |
|
| 753 | + } |
|
| 754 | 754 | |
| 755 | - $p->interdire_scripts = false; |
|
| 755 | + $p->interdire_scripts = false; |
|
| 756 | 756 | |
| 757 | - return $p; |
|
| 757 | + return $p; |
|
| 758 | 758 | } |
| 759 | 759 | |
| 760 | 760 | |
@@ -795,46 +795,46 @@ discard block |
||
| 795 | 795 | **/ |
| 796 | 796 | function balise_INTRODUCTION_dist($p) { |
| 797 | 797 | |
| 798 | - $type_objet = $p->type_requete; |
|
| 799 | - $cle_objet = id_table_objet($type_objet); |
|
| 800 | - $_id_objet = champ_sql($cle_objet, $p); |
|
| 801 | - |
|
| 802 | - // Récupérer les valeurs sql nécessaires : descriptif, texte et chapo |
|
| 803 | - // ainsi que le longueur d'introduction donnée dans la description de l'objet. |
|
| 804 | - $_introduction_longueur = 'null'; |
|
| 805 | - $_ligne = 'array('; |
|
| 806 | - $trouver_table = charger_fonction('trouver_table', 'base'); |
|
| 807 | - if ($desc = $trouver_table(table_objet_sql($type_objet))) { |
|
| 808 | - if (isset($desc['field']['descriptif'])) { |
|
| 809 | - $_ligne .= "'descriptif' => " . champ_sql('descriptif', $p) . ','; |
|
| 810 | - } |
|
| 811 | - if (isset($desc['field']['texte'])) { |
|
| 812 | - $_ligne .= "'texte' => " . champ_sql('texte', $p) . ','; |
|
| 813 | - } |
|
| 814 | - if (isset($desc['field']['chapo'])) { |
|
| 815 | - $_ligne .= "'chapo' => " . champ_sql('chapo', $p) . ','; |
|
| 816 | - } |
|
| 817 | - if (isset($desc['introduction_longueur'])) { |
|
| 818 | - $_introduction_longueur = "'" . $desc['introduction_longueur'] . "'"; |
|
| 819 | - } |
|
| 820 | - } |
|
| 821 | - $_ligne .= ')'; |
|
| 822 | - |
|
| 823 | - // Récupérer la longueur et la suite passés en paramètres |
|
| 824 | - $_longueur_ou_suite = 'null'; |
|
| 825 | - if (($v1 = interprete_argument_balise(1, $p)) !== null) { |
|
| 826 | - $_longueur_ou_suite = $v1; |
|
| 827 | - } |
|
| 828 | - $_suite = 'null'; |
|
| 829 | - if (($v2 = interprete_argument_balise(2, $p)) !== null) { |
|
| 830 | - $_suite = $v2; |
|
| 831 | - } |
|
| 832 | - |
|
| 833 | - $p->code = "generer_objet_introduction((int)$_id_objet, '$type_objet', $_ligne, $_introduction_longueur, $_longueur_ou_suite, $_suite, \$connect)"; |
|
| 834 | - |
|
| 835 | - #$p->interdire_scripts = true; |
|
| 836 | - $p->etoile = '*'; // propre est deja fait dans le calcul de l'intro |
|
| 837 | - return $p; |
|
| 798 | + $type_objet = $p->type_requete; |
|
| 799 | + $cle_objet = id_table_objet($type_objet); |
|
| 800 | + $_id_objet = champ_sql($cle_objet, $p); |
|
| 801 | + |
|
| 802 | + // Récupérer les valeurs sql nécessaires : descriptif, texte et chapo |
|
| 803 | + // ainsi que le longueur d'introduction donnée dans la description de l'objet. |
|
| 804 | + $_introduction_longueur = 'null'; |
|
| 805 | + $_ligne = 'array('; |
|
| 806 | + $trouver_table = charger_fonction('trouver_table', 'base'); |
|
| 807 | + if ($desc = $trouver_table(table_objet_sql($type_objet))) { |
|
| 808 | + if (isset($desc['field']['descriptif'])) { |
|
| 809 | + $_ligne .= "'descriptif' => " . champ_sql('descriptif', $p) . ','; |
|
| 810 | + } |
|
| 811 | + if (isset($desc['field']['texte'])) { |
|
| 812 | + $_ligne .= "'texte' => " . champ_sql('texte', $p) . ','; |
|
| 813 | + } |
|
| 814 | + if (isset($desc['field']['chapo'])) { |
|
| 815 | + $_ligne .= "'chapo' => " . champ_sql('chapo', $p) . ','; |
|
| 816 | + } |
|
| 817 | + if (isset($desc['introduction_longueur'])) { |
|
| 818 | + $_introduction_longueur = "'" . $desc['introduction_longueur'] . "'"; |
|
| 819 | + } |
|
| 820 | + } |
|
| 821 | + $_ligne .= ')'; |
|
| 822 | + |
|
| 823 | + // Récupérer la longueur et la suite passés en paramètres |
|
| 824 | + $_longueur_ou_suite = 'null'; |
|
| 825 | + if (($v1 = interprete_argument_balise(1, $p)) !== null) { |
|
| 826 | + $_longueur_ou_suite = $v1; |
|
| 827 | + } |
|
| 828 | + $_suite = 'null'; |
|
| 829 | + if (($v2 = interprete_argument_balise(2, $p)) !== null) { |
|
| 830 | + $_suite = $v2; |
|
| 831 | + } |
|
| 832 | + |
|
| 833 | + $p->code = "generer_objet_introduction((int)$_id_objet, '$type_objet', $_ligne, $_introduction_longueur, $_longueur_ou_suite, $_suite, \$connect)"; |
|
| 834 | + |
|
| 835 | + #$p->interdire_scripts = true; |
|
| 836 | + $p->etoile = '*'; // propre est deja fait dans le calcul de l'intro |
|
| 837 | + return $p; |
|
| 838 | 838 | } |
| 839 | 839 | |
| 840 | 840 | |
@@ -854,15 +854,15 @@ discard block |
||
| 854 | 854 | * Pile complétée par le code à générer |
| 855 | 855 | **/ |
| 856 | 856 | function balise_LANG_dist($p) { |
| 857 | - $_lang = champ_sql('lang', $p); |
|
| 858 | - if (!$p->etoile) { |
|
| 859 | - $p->code = "spip_htmlentities($_lang ? $_lang : \$GLOBALS['spip_lang'])"; |
|
| 860 | - } else { |
|
| 861 | - $p->code = "spip_htmlentities($_lang)"; |
|
| 862 | - } |
|
| 863 | - $p->interdire_scripts = false; |
|
| 857 | + $_lang = champ_sql('lang', $p); |
|
| 858 | + if (!$p->etoile) { |
|
| 859 | + $p->code = "spip_htmlentities($_lang ? $_lang : \$GLOBALS['spip_lang'])"; |
|
| 860 | + } else { |
|
| 861 | + $p->code = "spip_htmlentities($_lang)"; |
|
| 862 | + } |
|
| 863 | + $p->interdire_scripts = false; |
|
| 864 | 864 | |
| 865 | - return $p; |
|
| 865 | + return $p; |
|
| 866 | 866 | } |
| 867 | 867 | |
| 868 | 868 | /** |
@@ -884,45 +884,45 @@ discard block |
||
| 884 | 884 | * Pile complétée par le code à générer |
| 885 | 885 | */ |
| 886 | 886 | function balise_LESAUTEURS_dist($p) { |
| 887 | - // Cherche le champ 'lesauteurs' dans la pile |
|
| 888 | - $_lesauteurs = champ_sql('lesauteurs', $p, ''); |
|
| 889 | - |
|
| 890 | - // Si le champ n'existe pas (cas de spip_articles), on applique |
|
| 891 | - // le modele lesauteurs.html en passant id_article dans le contexte; |
|
| 892 | - // dans le cas contraire on prend le champ 'lesauteurs' |
|
| 893 | - // (cf extension sites/) |
|
| 894 | - if ($_lesauteurs) { |
|
| 895 | - $p->code = "safehtml($_lesauteurs)"; |
|
| 896 | - // $p->interdire_scripts = true; |
|
| 897 | - } else { |
|
| 898 | - if (!$p->id_boucle) { |
|
| 899 | - $connect = ''; |
|
| 900 | - $objet = 'article'; |
|
| 901 | - $id_table_objet = 'id_article'; |
|
| 902 | - } else { |
|
| 903 | - $b = $p->nom_boucle ?: $p->id_boucle; |
|
| 904 | - $connect = $p->boucles[$b]->sql_serveur; |
|
| 905 | - $type_boucle = $p->boucles[$b]->type_requete; |
|
| 906 | - $objet = objet_type($type_boucle); |
|
| 907 | - $id_table_objet = id_table_objet($type_boucle); |
|
| 908 | - } |
|
| 909 | - $c = memoriser_contexte_compil($p); |
|
| 910 | - |
|
| 911 | - $p->code = sprintf( |
|
| 912 | - CODE_RECUPERER_FOND, |
|
| 913 | - "'modeles/lesauteurs'", |
|
| 914 | - "array('objet'=>'" . $objet . |
|
| 915 | - "','id_objet' => " . champ_sql($id_table_objet, $p) . |
|
| 916 | - ",'$id_table_objet' => " . champ_sql($id_table_objet, $p) . |
|
| 917 | - ($objet == 'article' ? '' : ",'id_article' => " . champ_sql('id_article', $p)) . |
|
| 918 | - ')', |
|
| 919 | - "'trim'=>true, 'compil'=>array($c)", |
|
| 920 | - _q($connect) |
|
| 921 | - ); |
|
| 922 | - $p->interdire_scripts = false; // securite apposee par recuperer_fond() |
|
| 923 | - } |
|
| 924 | - |
|
| 925 | - return $p; |
|
| 887 | + // Cherche le champ 'lesauteurs' dans la pile |
|
| 888 | + $_lesauteurs = champ_sql('lesauteurs', $p, ''); |
|
| 889 | + |
|
| 890 | + // Si le champ n'existe pas (cas de spip_articles), on applique |
|
| 891 | + // le modele lesauteurs.html en passant id_article dans le contexte; |
|
| 892 | + // dans le cas contraire on prend le champ 'lesauteurs' |
|
| 893 | + // (cf extension sites/) |
|
| 894 | + if ($_lesauteurs) { |
|
| 895 | + $p->code = "safehtml($_lesauteurs)"; |
|
| 896 | + // $p->interdire_scripts = true; |
|
| 897 | + } else { |
|
| 898 | + if (!$p->id_boucle) { |
|
| 899 | + $connect = ''; |
|
| 900 | + $objet = 'article'; |
|
| 901 | + $id_table_objet = 'id_article'; |
|
| 902 | + } else { |
|
| 903 | + $b = $p->nom_boucle ?: $p->id_boucle; |
|
| 904 | + $connect = $p->boucles[$b]->sql_serveur; |
|
| 905 | + $type_boucle = $p->boucles[$b]->type_requete; |
|
| 906 | + $objet = objet_type($type_boucle); |
|
| 907 | + $id_table_objet = id_table_objet($type_boucle); |
|
| 908 | + } |
|
| 909 | + $c = memoriser_contexte_compil($p); |
|
| 910 | + |
|
| 911 | + $p->code = sprintf( |
|
| 912 | + CODE_RECUPERER_FOND, |
|
| 913 | + "'modeles/lesauteurs'", |
|
| 914 | + "array('objet'=>'" . $objet . |
|
| 915 | + "','id_objet' => " . champ_sql($id_table_objet, $p) . |
|
| 916 | + ",'$id_table_objet' => " . champ_sql($id_table_objet, $p) . |
|
| 917 | + ($objet == 'article' ? '' : ",'id_article' => " . champ_sql('id_article', $p)) . |
|
| 918 | + ')', |
|
| 919 | + "'trim'=>true, 'compil'=>array($c)", |
|
| 920 | + _q($connect) |
|
| 921 | + ); |
|
| 922 | + $p->interdire_scripts = false; // securite apposee par recuperer_fond() |
|
| 923 | + } |
|
| 924 | + |
|
| 925 | + return $p; |
|
| 926 | 926 | } |
| 927 | 927 | |
| 928 | 928 | |
@@ -949,76 +949,76 @@ discard block |
||
| 949 | 949 | * Pile complétée par le code à générer |
| 950 | 950 | */ |
| 951 | 951 | function balise_RANG_dist($p) { |
| 952 | - $b = index_boucle($p); |
|
| 953 | - if ($b === '') { |
|
| 954 | - $msg = [ |
|
| 955 | - 'zbug_champ_hors_boucle', |
|
| 956 | - ['champ' => '#RANG'] |
|
| 957 | - ]; |
|
| 958 | - erreur_squelette($msg, $p); |
|
| 959 | - } else { |
|
| 960 | - // chercher d'abord un champ sql rang (mais pas dans le env : defaut '' si on trouve pas de champ sql) |
|
| 961 | - // dans la boucle immediatement englobante uniquement |
|
| 962 | - // sinon on compose le champ calcule |
|
| 963 | - $_rang = champ_sql('rang', $p, '', false); |
|
| 964 | - |
|
| 965 | - // si pas trouve de champ sql rang : |
|
| 966 | - if (!$_rang or $_rang == "''") { |
|
| 967 | - $boucle = &$p->boucles[$b]; |
|
| 968 | - |
|
| 969 | - // on gere le cas ou #RANG est une extraction du numero dans le titre |
|
| 970 | - $trouver_table = charger_fonction('trouver_table', 'base'); |
|
| 971 | - $desc = $trouver_table($boucle->id_table); |
|
| 972 | - $_titre = ''; # où extraire le numero ? |
|
| 973 | - |
|
| 974 | - if (isset($desc['titre'])) { |
|
| 975 | - $t = $desc['titre']; |
|
| 976 | - if ( |
|
| 977 | - // Soit on trouve avec la déclaration de la lang AVANT |
|
| 978 | - preg_match(';(?:lang\s*,)\s*(.*?titre)\s*(,|$);', $t, $m) |
|
| 979 | - // Soit on prend depuis le début |
|
| 980 | - or preg_match(';^(.*?titre)\s*(,|$);', $t, $m) |
|
| 981 | - ) { |
|
| 982 | - $m = preg_replace(',as\s+titre$,i', '', $m[1]); |
|
| 983 | - $m = trim($m); |
|
| 984 | - if ($m != "''") { |
|
| 985 | - if (!preg_match(',\W,', $m)) { |
|
| 986 | - $m = $boucle->id_table . ".$m"; |
|
| 987 | - } |
|
| 988 | - |
|
| 989 | - $m .= ' AS titre_rang'; |
|
| 990 | - |
|
| 991 | - $boucle->select[] = $m; |
|
| 992 | - $_titre = '$Pile[$SP][\'titre_rang\']'; |
|
| 993 | - } |
|
| 994 | - } |
|
| 995 | - } |
|
| 996 | - |
|
| 997 | - // si on n'a rien trouvé, on utilise le champ titre classique |
|
| 998 | - if (!$_titre) { |
|
| 999 | - $_titre = champ_sql('titre', $p); |
|
| 1000 | - } |
|
| 1001 | - |
|
| 1002 | - // et on recupere aussi les infos de liaison si on est en train d'editer les liens justement |
|
| 1003 | - // cas des formulaires xxx_lies utilises par #FORMULAIRE_EDITER_LIENS |
|
| 1004 | - $type_boucle = $boucle->type_requete; |
|
| 1005 | - $objet = objet_type($type_boucle); |
|
| 1006 | - $id_table_objet = id_table_objet($type_boucle); |
|
| 1007 | - $_primary = champ_sql($id_table_objet, $p, '', false); |
|
| 1008 | - $_env = '$Pile[0]'; |
|
| 1009 | - |
|
| 1010 | - if (!$_titre) {$_titre = "''"; |
|
| 1011 | - } |
|
| 1012 | - if (!$_primary) {$_primary = "''"; |
|
| 1013 | - } |
|
| 1014 | - $_rang = "calculer_rang_smart($_titre, '$objet', $_primary, $_env)"; |
|
| 1015 | - } |
|
| 1016 | - |
|
| 1017 | - $p->code = $_rang; |
|
| 1018 | - $p->interdire_scripts = false; |
|
| 1019 | - } |
|
| 1020 | - |
|
| 1021 | - return $p; |
|
| 952 | + $b = index_boucle($p); |
|
| 953 | + if ($b === '') { |
|
| 954 | + $msg = [ |
|
| 955 | + 'zbug_champ_hors_boucle', |
|
| 956 | + ['champ' => '#RANG'] |
|
| 957 | + ]; |
|
| 958 | + erreur_squelette($msg, $p); |
|
| 959 | + } else { |
|
| 960 | + // chercher d'abord un champ sql rang (mais pas dans le env : defaut '' si on trouve pas de champ sql) |
|
| 961 | + // dans la boucle immediatement englobante uniquement |
|
| 962 | + // sinon on compose le champ calcule |
|
| 963 | + $_rang = champ_sql('rang', $p, '', false); |
|
| 964 | + |
|
| 965 | + // si pas trouve de champ sql rang : |
|
| 966 | + if (!$_rang or $_rang == "''") { |
|
| 967 | + $boucle = &$p->boucles[$b]; |
|
| 968 | + |
|
| 969 | + // on gere le cas ou #RANG est une extraction du numero dans le titre |
|
| 970 | + $trouver_table = charger_fonction('trouver_table', 'base'); |
|
| 971 | + $desc = $trouver_table($boucle->id_table); |
|
| 972 | + $_titre = ''; # où extraire le numero ? |
|
| 973 | + |
|
| 974 | + if (isset($desc['titre'])) { |
|
| 975 | + $t = $desc['titre']; |
|
| 976 | + if ( |
|
| 977 | + // Soit on trouve avec la déclaration de la lang AVANT |
|
| 978 | + preg_match(';(?:lang\s*,)\s*(.*?titre)\s*(,|$);', $t, $m) |
|
| 979 | + // Soit on prend depuis le début |
|
| 980 | + or preg_match(';^(.*?titre)\s*(,|$);', $t, $m) |
|
| 981 | + ) { |
|
| 982 | + $m = preg_replace(',as\s+titre$,i', '', $m[1]); |
|
| 983 | + $m = trim($m); |
|
| 984 | + if ($m != "''") { |
|
| 985 | + if (!preg_match(',\W,', $m)) { |
|
| 986 | + $m = $boucle->id_table . ".$m"; |
|
| 987 | + } |
|
| 988 | + |
|
| 989 | + $m .= ' AS titre_rang'; |
|
| 990 | + |
|
| 991 | + $boucle->select[] = $m; |
|
| 992 | + $_titre = '$Pile[$SP][\'titre_rang\']'; |
|
| 993 | + } |
|
| 994 | + } |
|
| 995 | + } |
|
| 996 | + |
|
| 997 | + // si on n'a rien trouvé, on utilise le champ titre classique |
|
| 998 | + if (!$_titre) { |
|
| 999 | + $_titre = champ_sql('titre', $p); |
|
| 1000 | + } |
|
| 1001 | + |
|
| 1002 | + // et on recupere aussi les infos de liaison si on est en train d'editer les liens justement |
|
| 1003 | + // cas des formulaires xxx_lies utilises par #FORMULAIRE_EDITER_LIENS |
|
| 1004 | + $type_boucle = $boucle->type_requete; |
|
| 1005 | + $objet = objet_type($type_boucle); |
|
| 1006 | + $id_table_objet = id_table_objet($type_boucle); |
|
| 1007 | + $_primary = champ_sql($id_table_objet, $p, '', false); |
|
| 1008 | + $_env = '$Pile[0]'; |
|
| 1009 | + |
|
| 1010 | + if (!$_titre) {$_titre = "''"; |
|
| 1011 | + } |
|
| 1012 | + if (!$_primary) {$_primary = "''"; |
|
| 1013 | + } |
|
| 1014 | + $_rang = "calculer_rang_smart($_titre, '$objet', $_primary, $_env)"; |
|
| 1015 | + } |
|
| 1016 | + |
|
| 1017 | + $p->code = $_rang; |
|
| 1018 | + $p->interdire_scripts = false; |
|
| 1019 | + } |
|
| 1020 | + |
|
| 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 | /** |
@@ -1056,8 +1056,8 @@ discard block |
||
| 1056 | 1056 | * l'absence peut-être due à une faute de frappe dans le contexte inclus. |
| 1057 | 1057 | */ |
| 1058 | 1058 | define( |
| 1059 | - 'CODE_PAGINATION', |
|
| 1060 | - '%s($Numrows["%s"]["grand_total"], |
|
| 1059 | + 'CODE_PAGINATION', |
|
| 1060 | + '%s($Numrows["%s"]["grand_total"], |
|
| 1061 | 1061 | %s, |
| 1062 | 1062 | isset($Pile[0][%4$s])?$Pile[0][%4$s]:intval(_request(%4$s)), |
| 1063 | 1063 | %5$s, %6$s, %7$s, %8$s, array(%9$s))' |
@@ -1094,75 +1094,75 @@ discard block |
||
| 1094 | 1094 | * Pile complétée par le code à générer |
| 1095 | 1095 | */ |
| 1096 | 1096 | function balise_PAGINATION_dist($p, $liste = 'true') { |
| 1097 | - $b = index_boucle_mere($p); |
|
| 1098 | - |
|
| 1099 | - // s'il n'y a pas de nom de boucle, on ne peut pas paginer |
|
| 1100 | - if ($b === '') { |
|
| 1101 | - $msg = [ |
|
| 1102 | - 'zbug_champ_hors_boucle', |
|
| 1103 | - ['champ' => $liste ? 'PAGINATION' : 'ANCRE_PAGINATION'] |
|
| 1104 | - ]; |
|
| 1105 | - erreur_squelette($msg, $p); |
|
| 1106 | - |
|
| 1107 | - return $p; |
|
| 1108 | - } |
|
| 1109 | - |
|
| 1110 | - // s'il n'y a pas de mode_partie, c'est qu'on se trouve |
|
| 1111 | - // dans un boucle recursive ou qu'on a oublie le critere {pagination} |
|
| 1112 | - if (!$p->boucles[$b]->mode_partie) { |
|
| 1113 | - if (!$p->boucles[$b]->table_optionnelle) { |
|
| 1114 | - $msg = [ |
|
| 1115 | - 'zbug_pagination_sans_critere', |
|
| 1116 | - ['champ' => '#PAGINATION'] |
|
| 1117 | - ]; |
|
| 1118 | - erreur_squelette($msg, $p); |
|
| 1119 | - } |
|
| 1120 | - |
|
| 1121 | - return $p; |
|
| 1122 | - } |
|
| 1123 | - |
|
| 1124 | - // a priori true |
|
| 1125 | - // si false, le compilo va bloquer sur des syntaxes avec un filtre sans argument qui suit la balise |
|
| 1126 | - // si true, les arguments simples (sans truc=chose) vont degager |
|
| 1127 | - $_contexte = argumenter_inclure($p->param, true, $p, $p->boucles, $p->id_boucle, false, false); |
|
| 1128 | - if (is_countable($_contexte) ? count($_contexte) : 0) { |
|
| 1129 | - $key = key($_contexte); |
|
| 1130 | - if (is_numeric($key)) { |
|
| 1131 | - array_shift($_contexte); |
|
| 1132 | - $__modele = interprete_argument_balise(1, $p); |
|
| 1133 | - } |
|
| 1134 | - } |
|
| 1135 | - |
|
| 1136 | - if (is_countable($_contexte) ? count($_contexte) : 0) { |
|
| 1137 | - $code_contexte = implode(',', $_contexte); |
|
| 1138 | - } else { |
|
| 1139 | - $code_contexte = ''; |
|
| 1140 | - } |
|
| 1141 | - |
|
| 1142 | - $connect = $p->boucles[$b]->sql_serveur; |
|
| 1143 | - $pas = $p->boucles[$b]->total_parties; |
|
| 1144 | - $f_pagination = chercher_filtre('pagination'); |
|
| 1145 | - $type = $p->boucles[$b]->modificateur['debut_nom']; |
|
| 1146 | - $modif = ($type[0] !== "'") ? "'debut'.$type" |
|
| 1147 | - : ("'debut" . substr($type, 1)); |
|
| 1148 | - |
|
| 1149 | - $p->code = sprintf( |
|
| 1150 | - CODE_PAGINATION, |
|
| 1151 | - $f_pagination, |
|
| 1152 | - $b, |
|
| 1153 | - $type, |
|
| 1154 | - $modif, |
|
| 1155 | - $pas, |
|
| 1156 | - $liste, |
|
| 1157 | - ((isset($__modele) and $__modele) ? $__modele : "''"), |
|
| 1158 | - _q($connect), |
|
| 1159 | - $code_contexte |
|
| 1160 | - ); |
|
| 1161 | - |
|
| 1162 | - $p->boucles[$b]->numrows = true; |
|
| 1163 | - $p->interdire_scripts = false; |
|
| 1164 | - |
|
| 1165 | - return $p; |
|
| 1097 | + $b = index_boucle_mere($p); |
|
| 1098 | + |
|
| 1099 | + // s'il n'y a pas de nom de boucle, on ne peut pas paginer |
|
| 1100 | + if ($b === '') { |
|
| 1101 | + $msg = [ |
|
| 1102 | + 'zbug_champ_hors_boucle', |
|
| 1103 | + ['champ' => $liste ? 'PAGINATION' : 'ANCRE_PAGINATION'] |
|
| 1104 | + ]; |
|
| 1105 | + erreur_squelette($msg, $p); |
|
| 1106 | + |
|
| 1107 | + return $p; |
|
| 1108 | + } |
|
| 1109 | + |
|
| 1110 | + // s'il n'y a pas de mode_partie, c'est qu'on se trouve |
|
| 1111 | + // dans un boucle recursive ou qu'on a oublie le critere {pagination} |
|
| 1112 | + if (!$p->boucles[$b]->mode_partie) { |
|
| 1113 | + if (!$p->boucles[$b]->table_optionnelle) { |
|
| 1114 | + $msg = [ |
|
| 1115 | + 'zbug_pagination_sans_critere', |
|
| 1116 | + ['champ' => '#PAGINATION'] |
|
| 1117 | + ]; |
|
| 1118 | + erreur_squelette($msg, $p); |
|
| 1119 | + } |
|
| 1120 | + |
|
| 1121 | + return $p; |
|
| 1122 | + } |
|
| 1123 | + |
|
| 1124 | + // a priori true |
|
| 1125 | + // si false, le compilo va bloquer sur des syntaxes avec un filtre sans argument qui suit la balise |
|
| 1126 | + // si true, les arguments simples (sans truc=chose) vont degager |
|
| 1127 | + $_contexte = argumenter_inclure($p->param, true, $p, $p->boucles, $p->id_boucle, false, false); |
|
| 1128 | + if (is_countable($_contexte) ? count($_contexte) : 0) { |
|
| 1129 | + $key = key($_contexte); |
|
| 1130 | + if (is_numeric($key)) { |
|
| 1131 | + array_shift($_contexte); |
|
| 1132 | + $__modele = interprete_argument_balise(1, $p); |
|
| 1133 | + } |
|
| 1134 | + } |
|
| 1135 | + |
|
| 1136 | + if (is_countable($_contexte) ? count($_contexte) : 0) { |
|
| 1137 | + $code_contexte = implode(',', $_contexte); |
|
| 1138 | + } else { |
|
| 1139 | + $code_contexte = ''; |
|
| 1140 | + } |
|
| 1141 | + |
|
| 1142 | + $connect = $p->boucles[$b]->sql_serveur; |
|
| 1143 | + $pas = $p->boucles[$b]->total_parties; |
|
| 1144 | + $f_pagination = chercher_filtre('pagination'); |
|
| 1145 | + $type = $p->boucles[$b]->modificateur['debut_nom']; |
|
| 1146 | + $modif = ($type[0] !== "'") ? "'debut'.$type" |
|
| 1147 | + : ("'debut" . substr($type, 1)); |
|
| 1148 | + |
|
| 1149 | + $p->code = sprintf( |
|
| 1150 | + CODE_PAGINATION, |
|
| 1151 | + $f_pagination, |
|
| 1152 | + $b, |
|
| 1153 | + $type, |
|
| 1154 | + $modif, |
|
| 1155 | + $pas, |
|
| 1156 | + $liste, |
|
| 1157 | + ((isset($__modele) and $__modele) ? $__modele : "''"), |
|
| 1158 | + _q($connect), |
|
| 1159 | + $code_contexte |
|
| 1160 | + ); |
|
| 1161 | + |
|
| 1162 | + $p->boucles[$b]->numrows = true; |
|
| 1163 | + $p->interdire_scripts = false; |
|
| 1164 | + |
|
| 1165 | + return $p; |
|
| 1166 | 1166 | } |
| 1167 | 1167 | |
| 1168 | 1168 | |
@@ -1189,11 +1189,11 @@ discard block |
||
| 1189 | 1189 | * Pile complétée par le code à générer |
| 1190 | 1190 | **/ |
| 1191 | 1191 | function balise_ANCRE_PAGINATION_dist($p) { |
| 1192 | - if ($f = charger_fonction('PAGINATION', 'balise', true)) { |
|
| 1193 | - return $f($p, $liste = 'false'); |
|
| 1194 | - } else { |
|
| 1195 | - return null; |
|
| 1196 | - } // ou une erreur ? |
|
| 1192 | + if ($f = charger_fonction('PAGINATION', 'balise', true)) { |
|
| 1193 | + return $f($p, $liste = 'false'); |
|
| 1194 | + } else { |
|
| 1195 | + return null; |
|
| 1196 | + } // ou une erreur ? |
|
| 1197 | 1197 | } |
| 1198 | 1198 | |
| 1199 | 1199 | |
@@ -1214,17 +1214,17 @@ discard block |
||
| 1214 | 1214 | * Pile complétée par le code à générer |
| 1215 | 1215 | **/ |
| 1216 | 1216 | function balise_GRAND_TOTAL_dist($p) { |
| 1217 | - $b = index_boucle_mere($p); |
|
| 1218 | - if ($b === '') { |
|
| 1219 | - $msg = ['zbug_champ_hors_boucle', ['champ' => zbug_presenter_champ($p)]]; |
|
| 1220 | - erreur_squelette($msg, $p); |
|
| 1221 | - } else { |
|
| 1222 | - $p->code = "(\$Numrows['$b']['grand_total'] ?? \$Numrows['$b']['total'] ?? 0)"; |
|
| 1223 | - $p->boucles[$b]->numrows = true; |
|
| 1224 | - $p->interdire_scripts = false; |
|
| 1225 | - } |
|
| 1217 | + $b = index_boucle_mere($p); |
|
| 1218 | + if ($b === '') { |
|
| 1219 | + $msg = ['zbug_champ_hors_boucle', ['champ' => zbug_presenter_champ($p)]]; |
|
| 1220 | + erreur_squelette($msg, $p); |
|
| 1221 | + } else { |
|
| 1222 | + $p->code = "(\$Numrows['$b']['grand_total'] ?? \$Numrows['$b']['total'] ?? 0)"; |
|
| 1223 | + $p->boucles[$b]->numrows = true; |
|
| 1224 | + $p->interdire_scripts = false; |
|
| 1225 | + } |
|
| 1226 | 1226 | |
| 1227 | - return $p; |
|
| 1227 | + return $p; |
|
| 1228 | 1228 | } |
| 1229 | 1229 | |
| 1230 | 1230 | |
@@ -1252,10 +1252,10 @@ discard block |
||
| 1252 | 1252 | * Pile complétée par le code à générer |
| 1253 | 1253 | **/ |
| 1254 | 1254 | function balise_SELF_dist($p) { |
| 1255 | - $p->code = 'self()'; |
|
| 1256 | - $p->interdire_scripts = false; |
|
| 1255 | + $p->code = 'self()'; |
|
| 1256 | + $p->interdire_scripts = false; |
|
| 1257 | 1257 | |
| 1258 | - return $p; |
|
| 1258 | + return $p; |
|
| 1259 | 1259 | } |
| 1260 | 1260 | |
| 1261 | 1261 | |
@@ -1282,17 +1282,17 @@ discard block |
||
| 1282 | 1282 | * Pile complétée par le code à générer |
| 1283 | 1283 | **/ |
| 1284 | 1284 | function balise_CHEMIN_dist($p) { |
| 1285 | - $arg = interprete_argument_balise(1, $p); |
|
| 1286 | - if (!$arg) { |
|
| 1287 | - $msg = ['zbug_balise_sans_argument', ['balise' => ' CHEMIN']]; |
|
| 1288 | - erreur_squelette($msg, $p); |
|
| 1289 | - } else { |
|
| 1290 | - $p->code = 'find_in_path((string)' . $arg . ')'; |
|
| 1291 | - } |
|
| 1285 | + $arg = interprete_argument_balise(1, $p); |
|
| 1286 | + if (!$arg) { |
|
| 1287 | + $msg = ['zbug_balise_sans_argument', ['balise' => ' CHEMIN']]; |
|
| 1288 | + erreur_squelette($msg, $p); |
|
| 1289 | + } else { |
|
| 1290 | + $p->code = 'find_in_path((string)' . $arg . ')'; |
|
| 1291 | + } |
|
| 1292 | 1292 | |
| 1293 | - $p->interdire_scripts = false; |
|
| 1293 | + $p->interdire_scripts = false; |
|
| 1294 | 1294 | |
| 1295 | - return $p; |
|
| 1295 | + return $p; |
|
| 1296 | 1296 | } |
| 1297 | 1297 | |
| 1298 | 1298 | /** |
@@ -1317,16 +1317,16 @@ discard block |
||
| 1317 | 1317 | * Pile complétée par le code à générer |
| 1318 | 1318 | **/ |
| 1319 | 1319 | function balise_CHEMIN_IMAGE_dist($p) { |
| 1320 | - $arg = interprete_argument_balise(1, $p); |
|
| 1321 | - if (!$arg) { |
|
| 1322 | - $msg = ['zbug_balise_sans_argument', ['balise' => ' CHEMIN_IMAGE']]; |
|
| 1323 | - erreur_squelette($msg, $p); |
|
| 1324 | - } else { |
|
| 1325 | - $p->code = 'chemin_image((string)' . $arg . ')'; |
|
| 1326 | - } |
|
| 1320 | + $arg = interprete_argument_balise(1, $p); |
|
| 1321 | + if (!$arg) { |
|
| 1322 | + $msg = ['zbug_balise_sans_argument', ['balise' => ' CHEMIN_IMAGE']]; |
|
| 1323 | + erreur_squelette($msg, $p); |
|
| 1324 | + } else { |
|
| 1325 | + $p->code = 'chemin_image((string)' . $arg . ')'; |
|
| 1326 | + } |
|
| 1327 | 1327 | |
| 1328 | - $p->interdire_scripts = false; |
|
| 1329 | - return $p; |
|
| 1328 | + $p->interdire_scripts = false; |
|
| 1329 | + return $p; |
|
| 1330 | 1330 | } |
| 1331 | 1331 | |
| 1332 | 1332 | |
@@ -1364,36 +1364,36 @@ discard block |
||
| 1364 | 1364 | **/ |
| 1365 | 1365 | function balise_ENV_dist($p, $src = null) { |
| 1366 | 1366 | |
| 1367 | - // cle du tableau desiree |
|
| 1368 | - $_nom = interprete_argument_balise(1, $p); |
|
| 1369 | - // valeur par defaut |
|
| 1370 | - $_sinon = interprete_argument_balise(2, $p); |
|
| 1367 | + // cle du tableau desiree |
|
| 1368 | + $_nom = interprete_argument_balise(1, $p); |
|
| 1369 | + // valeur par defaut |
|
| 1370 | + $_sinon = interprete_argument_balise(2, $p); |
|
| 1371 | 1371 | |
| 1372 | - // $src est un tableau de donnees sources eventuellement transmis |
|
| 1373 | - // en absence, on utilise l'environnement du squelette $Pile[0] |
|
| 1372 | + // $src est un tableau de donnees sources eventuellement transmis |
|
| 1373 | + // en absence, on utilise l'environnement du squelette $Pile[0] |
|
| 1374 | 1374 | |
| 1375 | - if (!$_nom) { |
|
| 1376 | - // cas de #ENV sans argument : on retourne le serialize() du tableau |
|
| 1377 | - // une belle fonction [(#ENV|affiche_env)] serait pratique |
|
| 1378 | - if ($src) { |
|
| 1379 | - $p->code = '(is_array($a = (' . $src . ')) ? serialize($a) : "")'; |
|
| 1380 | - } else { |
|
| 1381 | - $p->code = 'serialize($Pile[0]??[])'; |
|
| 1382 | - } |
|
| 1383 | - } else { |
|
| 1384 | - if (!$src) { |
|
| 1385 | - $src = '$Pile[0]??[]'; |
|
| 1386 | - } |
|
| 1387 | - if ($_sinon) { |
|
| 1388 | - $p->code = "sinon(table_valeur($src, (string)$_nom, null), $_sinon)"; |
|
| 1389 | - } else { |
|
| 1390 | - $p->code = "table_valeur($src, (string)$_nom, null)"; |
|
| 1391 | - } |
|
| 1392 | - } |
|
| 1375 | + if (!$_nom) { |
|
| 1376 | + // cas de #ENV sans argument : on retourne le serialize() du tableau |
|
| 1377 | + // une belle fonction [(#ENV|affiche_env)] serait pratique |
|
| 1378 | + if ($src) { |
|
| 1379 | + $p->code = '(is_array($a = (' . $src . ')) ? serialize($a) : "")'; |
|
| 1380 | + } else { |
|
| 1381 | + $p->code = 'serialize($Pile[0]??[])'; |
|
| 1382 | + } |
|
| 1383 | + } else { |
|
| 1384 | + if (!$src) { |
|
| 1385 | + $src = '$Pile[0]??[]'; |
|
| 1386 | + } |
|
| 1387 | + if ($_sinon) { |
|
| 1388 | + $p->code = "sinon(table_valeur($src, (string)$_nom, null), $_sinon)"; |
|
| 1389 | + } else { |
|
| 1390 | + $p->code = "table_valeur($src, (string)$_nom, null)"; |
|
| 1391 | + } |
|
| 1392 | + } |
|
| 1393 | 1393 | |
| 1394 | - #$p->interdire_scripts = true; |
|
| 1394 | + #$p->interdire_scripts = true; |
|
| 1395 | 1395 | |
| 1396 | - return $p; |
|
| 1396 | + return $p; |
|
| 1397 | 1397 | } |
| 1398 | 1398 | |
| 1399 | 1399 | /** |
@@ -1423,16 +1423,16 @@ discard block |
||
| 1423 | 1423 | * Pile completée du code PHP d'exécution de la balise |
| 1424 | 1424 | */ |
| 1425 | 1425 | function balise_CONFIG_dist($p) { |
| 1426 | - if (!$arg = interprete_argument_balise(1, $p)) { |
|
| 1427 | - $arg = "''"; |
|
| 1428 | - } |
|
| 1429 | - $_sinon = interprete_argument_balise(2, $p); |
|
| 1430 | - $_unserialize = sinon(interprete_argument_balise(3, $p), 'false'); |
|
| 1426 | + if (!$arg = interprete_argument_balise(1, $p)) { |
|
| 1427 | + $arg = "''"; |
|
| 1428 | + } |
|
| 1429 | + $_sinon = interprete_argument_balise(2, $p); |
|
| 1430 | + $_unserialize = sinon(interprete_argument_balise(3, $p), 'false'); |
|
| 1431 | 1431 | |
| 1432 | - $p->code = '(include_spip(\'inc/config\')?lire_config(' . $arg . ',' . |
|
| 1433 | - ($_sinon && $_sinon != "''" ? $_sinon : 'null') . ',' . $_unserialize . "):'')"; |
|
| 1432 | + $p->code = '(include_spip(\'inc/config\')?lire_config(' . $arg . ',' . |
|
| 1433 | + ($_sinon && $_sinon != "''" ? $_sinon : 'null') . ',' . $_unserialize . "):'')"; |
|
| 1434 | 1434 | |
| 1435 | - return $p; |
|
| 1435 | + return $p; |
|
| 1436 | 1436 | } |
| 1437 | 1437 | |
| 1438 | 1438 | |
@@ -1455,10 +1455,10 @@ discard block |
||
| 1455 | 1455 | * Pile completée du code PHP d'exécution de la balise |
| 1456 | 1456 | */ |
| 1457 | 1457 | function balise_CONNECT_dist($p) { |
| 1458 | - $p->code = '($connect ? $connect : NULL)'; |
|
| 1459 | - $p->interdire_scripts = false; |
|
| 1458 | + $p->code = '($connect ? $connect : NULL)'; |
|
| 1459 | + $p->interdire_scripts = false; |
|
| 1460 | 1460 | |
| 1461 | - return $p; |
|
| 1461 | + return $p; |
|
| 1462 | 1462 | } |
| 1463 | 1463 | |
| 1464 | 1464 | |
@@ -1486,15 +1486,15 @@ discard block |
||
| 1486 | 1486 | * Pile completée du code PHP d'exécution de la balise |
| 1487 | 1487 | **/ |
| 1488 | 1488 | function balise_SESSION_dist($p) { |
| 1489 | - $p->descr['session'] = true; |
|
| 1489 | + $p->descr['session'] = true; |
|
| 1490 | 1490 | |
| 1491 | - $f = function_exists('balise_ENV') |
|
| 1492 | - ? 'balise_ENV' |
|
| 1493 | - : 'balise_ENV_dist'; |
|
| 1491 | + $f = function_exists('balise_ENV') |
|
| 1492 | + ? 'balise_ENV' |
|
| 1493 | + : 'balise_ENV_dist'; |
|
| 1494 | 1494 | |
| 1495 | - $p = $f($p, '$GLOBALS["visiteur_session"]??[]'); |
|
| 1495 | + $p = $f($p, '$GLOBALS["visiteur_session"]??[]'); |
|
| 1496 | 1496 | |
| 1497 | - return $p; |
|
| 1497 | + return $p; |
|
| 1498 | 1498 | } |
| 1499 | 1499 | |
| 1500 | 1500 | |
@@ -1517,18 +1517,18 @@ discard block |
||
| 1517 | 1517 | * Pile completée du code PHP d'exécution de la balise |
| 1518 | 1518 | **/ |
| 1519 | 1519 | function balise_SESSION_SET_dist($p) { |
| 1520 | - $_nom = interprete_argument_balise(1, $p); |
|
| 1521 | - $_val = interprete_argument_balise(2, $p); |
|
| 1522 | - if (!$_nom or !$_val) { |
|
| 1523 | - $err_b_s_a = ['zbug_balise_sans_argument', ['balise' => 'SESSION_SET']]; |
|
| 1524 | - erreur_squelette($err_b_s_a, $p); |
|
| 1525 | - } else { |
|
| 1526 | - $p->code = '(include_spip("inc/session") AND session_set(' . $_nom . ',' . $_val . '))'; |
|
| 1527 | - } |
|
| 1520 | + $_nom = interprete_argument_balise(1, $p); |
|
| 1521 | + $_val = interprete_argument_balise(2, $p); |
|
| 1522 | + if (!$_nom or !$_val) { |
|
| 1523 | + $err_b_s_a = ['zbug_balise_sans_argument', ['balise' => 'SESSION_SET']]; |
|
| 1524 | + erreur_squelette($err_b_s_a, $p); |
|
| 1525 | + } else { |
|
| 1526 | + $p->code = '(include_spip("inc/session") AND session_set(' . $_nom . ',' . $_val . '))'; |
|
| 1527 | + } |
|
| 1528 | 1528 | |
| 1529 | - $p->interdire_scripts = false; |
|
| 1529 | + $p->interdire_scripts = false; |
|
| 1530 | 1530 | |
| 1531 | - return $p; |
|
| 1531 | + return $p; |
|
| 1532 | 1532 | } |
| 1533 | 1533 | |
| 1534 | 1534 | |
@@ -1559,30 +1559,30 @@ discard block |
||
| 1559 | 1559 | * Pile completée du code PHP d'exécution de la balise |
| 1560 | 1560 | **/ |
| 1561 | 1561 | function balise_EVAL_dist($p) { |
| 1562 | - $php = interprete_argument_balise(1, $p); |
|
| 1563 | - if ($php) { |
|
| 1564 | - # optimisation sur les #EVAL{une expression sans #BALISE} |
|
| 1565 | - # attention au commentaire "// x signes" qui precede |
|
| 1566 | - if ( |
|
| 1567 | - preg_match( |
|
| 1568 | - ",^([[:space:]]*//[^\n]*\n)'([^']+)'$,ms", |
|
| 1569 | - $php, |
|
| 1570 | - $r |
|
| 1571 | - ) |
|
| 1572 | - ) { |
|
| 1573 | - $p->code = /* $r[1]. */ |
|
| 1574 | - '(' . $r[2] . ')'; |
|
| 1575 | - } else { |
|
| 1576 | - $p->code = "eval('return '.$php.';')"; |
|
| 1577 | - } |
|
| 1578 | - } else { |
|
| 1579 | - $msg = ['zbug_balise_sans_argument', ['balise' => ' EVAL']]; |
|
| 1580 | - erreur_squelette($msg, $p); |
|
| 1581 | - } |
|
| 1582 | - |
|
| 1583 | - #$p->interdire_scripts = true; |
|
| 1584 | - |
|
| 1585 | - return $p; |
|
| 1562 | + $php = interprete_argument_balise(1, $p); |
|
| 1563 | + if ($php) { |
|
| 1564 | + # optimisation sur les #EVAL{une expression sans #BALISE} |
|
| 1565 | + # attention au commentaire "// x signes" qui precede |
|
| 1566 | + if ( |
|
| 1567 | + preg_match( |
|
| 1568 | + ",^([[:space:]]*//[^\n]*\n)'([^']+)'$,ms", |
|
| 1569 | + $php, |
|
| 1570 | + $r |
|
| 1571 | + ) |
|
| 1572 | + ) { |
|
| 1573 | + $p->code = /* $r[1]. */ |
|
| 1574 | + '(' . $r[2] . ')'; |
|
| 1575 | + } else { |
|
| 1576 | + $p->code = "eval('return '.$php.';')"; |
|
| 1577 | + } |
|
| 1578 | + } else { |
|
| 1579 | + $msg = ['zbug_balise_sans_argument', ['balise' => ' EVAL']]; |
|
| 1580 | + erreur_squelette($msg, $p); |
|
| 1581 | + } |
|
| 1582 | + |
|
| 1583 | + #$p->interdire_scripts = true; |
|
| 1584 | + |
|
| 1585 | + return $p; |
|
| 1586 | 1586 | } |
| 1587 | 1587 | |
| 1588 | 1588 | |
@@ -1612,19 +1612,19 @@ discard block |
||
| 1612 | 1612 | **/ |
| 1613 | 1613 | function balise_CHAMP_SQL_dist($p) { |
| 1614 | 1614 | |
| 1615 | - if ( |
|
| 1616 | - $p->param |
|
| 1617 | - and isset($p->param[0][1][0]) |
|
| 1618 | - and $champ = ($p->param[0][1][0]->texte) |
|
| 1619 | - ) { |
|
| 1620 | - $p->code = champ_sql($champ, $p); |
|
| 1621 | - } else { |
|
| 1622 | - $err_b_s_a = ['zbug_balise_sans_argument', ['balise' => ' CHAMP_SQL']]; |
|
| 1623 | - erreur_squelette($err_b_s_a, $p); |
|
| 1624 | - } |
|
| 1615 | + if ( |
|
| 1616 | + $p->param |
|
| 1617 | + and isset($p->param[0][1][0]) |
|
| 1618 | + and $champ = ($p->param[0][1][0]->texte) |
|
| 1619 | + ) { |
|
| 1620 | + $p->code = champ_sql($champ, $p); |
|
| 1621 | + } else { |
|
| 1622 | + $err_b_s_a = ['zbug_balise_sans_argument', ['balise' => ' CHAMP_SQL']]; |
|
| 1623 | + erreur_squelette($err_b_s_a, $p); |
|
| 1624 | + } |
|
| 1625 | 1625 | |
| 1626 | - #$p->interdire_scripts = true; |
|
| 1627 | - return $p; |
|
| 1626 | + #$p->interdire_scripts = true; |
|
| 1627 | + return $p; |
|
| 1628 | 1628 | } |
| 1629 | 1629 | |
| 1630 | 1630 | /** |
@@ -1650,13 +1650,13 @@ discard block |
||
| 1650 | 1650 | * Pile complétée par le code à générer |
| 1651 | 1651 | **/ |
| 1652 | 1652 | function balise_VAL_dist($p) { |
| 1653 | - $p->code = interprete_argument_balise(1, $p) ?? ''; |
|
| 1654 | - if (!strlen($p->code)) { |
|
| 1655 | - $p->code = "''"; |
|
| 1656 | - } |
|
| 1657 | - $p->interdire_scripts = false; |
|
| 1653 | + $p->code = interprete_argument_balise(1, $p) ?? ''; |
|
| 1654 | + if (!strlen($p->code)) { |
|
| 1655 | + $p->code = "''"; |
|
| 1656 | + } |
|
| 1657 | + $p->interdire_scripts = false; |
|
| 1658 | 1658 | |
| 1659 | - return $p; |
|
| 1659 | + return $p; |
|
| 1660 | 1660 | } |
| 1661 | 1661 | |
| 1662 | 1662 | /** |
@@ -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 | /** |
@@ -1698,10 +1698,10 @@ discard block |
||
| 1698 | 1698 | * @return mixed |
| 1699 | 1699 | */ |
| 1700 | 1700 | function balise_NULL_dist($p) { |
| 1701 | - $p->code = 'null'; |
|
| 1702 | - $p->interdire_scripts = false; |
|
| 1701 | + $p->code = 'null'; |
|
| 1702 | + $p->interdire_scripts = false; |
|
| 1703 | 1703 | |
| 1704 | - return $p; |
|
| 1704 | + return $p; |
|
| 1705 | 1705 | } |
| 1706 | 1706 | |
| 1707 | 1707 | |
@@ -1725,18 +1725,18 @@ discard block |
||
| 1725 | 1725 | **/ |
| 1726 | 1726 | function balise_HTTP_HEADER_dist($p) { |
| 1727 | 1727 | |
| 1728 | - $header = interprete_argument_balise(1, $p); |
|
| 1729 | - if (!$header) { |
|
| 1730 | - $err_b_s_a = ['zbug_balise_sans_argument', ['balise' => 'HTTP_HEADER']]; |
|
| 1731 | - erreur_squelette($err_b_s_a, $p); |
|
| 1732 | - } else { |
|
| 1733 | - $p->code = "'<'.'?php header(' . _q(" |
|
| 1734 | - . $header |
|
| 1735 | - . ") . '); ?'.'>'"; |
|
| 1736 | - } |
|
| 1737 | - $p->interdire_scripts = false; |
|
| 1728 | + $header = interprete_argument_balise(1, $p); |
|
| 1729 | + if (!$header) { |
|
| 1730 | + $err_b_s_a = ['zbug_balise_sans_argument', ['balise' => 'HTTP_HEADER']]; |
|
| 1731 | + erreur_squelette($err_b_s_a, $p); |
|
| 1732 | + } else { |
|
| 1733 | + $p->code = "'<'.'?php header(' . _q(" |
|
| 1734 | + . $header |
|
| 1735 | + . ") . '); ?'.'>'"; |
|
| 1736 | + } |
|
| 1737 | + $p->interdire_scripts = false; |
|
| 1738 | 1738 | |
| 1739 | - return $p; |
|
| 1739 | + return $p; |
|
| 1740 | 1740 | } |
| 1741 | 1741 | |
| 1742 | 1742 | |
@@ -1761,22 +1761,22 @@ discard block |
||
| 1761 | 1761 | * Pile complétée par le code à générer |
| 1762 | 1762 | **/ |
| 1763 | 1763 | function balise_FILTRE_dist($p) { |
| 1764 | - if ($p->param) { |
|
| 1765 | - $args = []; |
|
| 1766 | - foreach ($p->param as $i => $ignore) { |
|
| 1767 | - $args[] = interprete_argument_balise($i + 1, $p); |
|
| 1768 | - } |
|
| 1769 | - $p->code = "'<' . '" |
|
| 1770 | - . '?php header("X-Spip-Filtre: \'.' |
|
| 1771 | - . join('.\'|\'.', $args) |
|
| 1772 | - . " . '\"); ?'.'>'"; |
|
| 1764 | + if ($p->param) { |
|
| 1765 | + $args = []; |
|
| 1766 | + foreach ($p->param as $i => $ignore) { |
|
| 1767 | + $args[] = interprete_argument_balise($i + 1, $p); |
|
| 1768 | + } |
|
| 1769 | + $p->code = "'<' . '" |
|
| 1770 | + . '?php header("X-Spip-Filtre: \'.' |
|
| 1771 | + . join('.\'|\'.', $args) |
|
| 1772 | + . " . '\"); ?'.'>'"; |
|
| 1773 | 1773 | |
| 1774 | - $p->interdire_scripts = false; |
|
| 1774 | + $p->interdire_scripts = false; |
|
| 1775 | 1775 | |
| 1776 | - return $p; |
|
| 1777 | - } |
|
| 1776 | + return $p; |
|
| 1777 | + } |
|
| 1778 | 1778 | |
| 1779 | - return null; |
|
| 1779 | + return null; |
|
| 1780 | 1780 | } |
| 1781 | 1781 | |
| 1782 | 1782 | |
@@ -1812,55 +1812,55 @@ discard block |
||
| 1812 | 1812 | **/ |
| 1813 | 1813 | function balise_CACHE_dist($p) { |
| 1814 | 1814 | |
| 1815 | - if ($p->param) { |
|
| 1816 | - $duree = valeur_numerique($p->param[0][1][0]->texte); |
|
| 1817 | - |
|
| 1818 | - // noter la duree du cache dans un entete proprietaire |
|
| 1819 | - |
|
| 1820 | - $code = "'<'.'" . '?php header("X-Spip-Cache: ' |
|
| 1821 | - . $duree |
|
| 1822 | - . '"); ?' . "'.'>'"; |
|
| 1823 | - |
|
| 1824 | - // Remplir le header Cache-Control |
|
| 1825 | - // cas #CACHE{0} |
|
| 1826 | - if ($duree == 0) { |
|
| 1827 | - $code .= ".'<'.'" |
|
| 1828 | - . '?php header("Cache-Control: no-cache, must-revalidate"); ?' |
|
| 1829 | - . "'.'><'.'" |
|
| 1830 | - . '?php header("Pragma: no-cache"); ?' |
|
| 1831 | - . "'.'>'"; |
|
| 1832 | - } |
|
| 1833 | - |
|
| 1834 | - // recuperer les parametres suivants |
|
| 1835 | - $i = 1; |
|
| 1836 | - while (isset($p->param[0][++$i])) { |
|
| 1837 | - $pa = ($p->param[0][$i][0]->texte); |
|
| 1838 | - |
|
| 1839 | - if ( |
|
| 1840 | - $pa == 'cache-client' |
|
| 1841 | - and $duree > 0 |
|
| 1842 | - ) { |
|
| 1843 | - $code .= ".'<'.'" . '?php header("Cache-Control: max-age=' |
|
| 1844 | - . $duree |
|
| 1845 | - . '"); ?' . "'.'>'"; |
|
| 1846 | - // il semble logique, si on cache-client, de ne pas invalider |
|
| 1847 | - $pa = 'statique'; |
|
| 1848 | - } |
|
| 1849 | - |
|
| 1850 | - if ( |
|
| 1851 | - $pa == 'statique' |
|
| 1852 | - and $duree > 0 |
|
| 1853 | - ) { |
|
| 1854 | - $code .= ".'<'.'" . '?php header("X-Spip-Statique: oui"); ?' . "'.'>'"; |
|
| 1855 | - } |
|
| 1856 | - } |
|
| 1857 | - } else { |
|
| 1858 | - $code = "''"; |
|
| 1859 | - } |
|
| 1860 | - $p->code = $code; |
|
| 1861 | - $p->interdire_scripts = false; |
|
| 1862 | - |
|
| 1863 | - return $p; |
|
| 1815 | + if ($p->param) { |
|
| 1816 | + $duree = valeur_numerique($p->param[0][1][0]->texte); |
|
| 1817 | + |
|
| 1818 | + // noter la duree du cache dans un entete proprietaire |
|
| 1819 | + |
|
| 1820 | + $code = "'<'.'" . '?php header("X-Spip-Cache: ' |
|
| 1821 | + . $duree |
|
| 1822 | + . '"); ?' . "'.'>'"; |
|
| 1823 | + |
|
| 1824 | + // Remplir le header Cache-Control |
|
| 1825 | + // cas #CACHE{0} |
|
| 1826 | + if ($duree == 0) { |
|
| 1827 | + $code .= ".'<'.'" |
|
| 1828 | + . '?php header("Cache-Control: no-cache, must-revalidate"); ?' |
|
| 1829 | + . "'.'><'.'" |
|
| 1830 | + . '?php header("Pragma: no-cache"); ?' |
|
| 1831 | + . "'.'>'"; |
|
| 1832 | + } |
|
| 1833 | + |
|
| 1834 | + // recuperer les parametres suivants |
|
| 1835 | + $i = 1; |
|
| 1836 | + while (isset($p->param[0][++$i])) { |
|
| 1837 | + $pa = ($p->param[0][$i][0]->texte); |
|
| 1838 | + |
|
| 1839 | + if ( |
|
| 1840 | + $pa == 'cache-client' |
|
| 1841 | + and $duree > 0 |
|
| 1842 | + ) { |
|
| 1843 | + $code .= ".'<'.'" . '?php header("Cache-Control: max-age=' |
|
| 1844 | + . $duree |
|
| 1845 | + . '"); ?' . "'.'>'"; |
|
| 1846 | + // il semble logique, si on cache-client, de ne pas invalider |
|
| 1847 | + $pa = 'statique'; |
|
| 1848 | + } |
|
| 1849 | + |
|
| 1850 | + if ( |
|
| 1851 | + $pa == 'statique' |
|
| 1852 | + and $duree > 0 |
|
| 1853 | + ) { |
|
| 1854 | + $code .= ".'<'.'" . '?php header("X-Spip-Statique: oui"); ?' . "'.'>'"; |
|
| 1855 | + } |
|
| 1856 | + } |
|
| 1857 | + } else { |
|
| 1858 | + $code = "''"; |
|
| 1859 | + } |
|
| 1860 | + $p->code = $code; |
|
| 1861 | + $p->interdire_scripts = false; |
|
| 1862 | + |
|
| 1863 | + return $p; |
|
| 1864 | 1864 | } |
| 1865 | 1865 | |
| 1866 | 1866 | |
@@ -1892,13 +1892,13 @@ discard block |
||
| 1892 | 1892 | * Pile complétée par le code à générer |
| 1893 | 1893 | */ |
| 1894 | 1894 | function balise_INSERT_HEAD_dist($p) { |
| 1895 | - $p->code = "'<'.'" |
|
| 1896 | - . '?php header("X-Spip-Filtre: insert_head_css_conditionnel"); ?' |
|
| 1897 | - . "'.'>'"; |
|
| 1898 | - $p->code .= ". pipeline('insert_head','<!-- insert_head -->')"; |
|
| 1899 | - $p->interdire_scripts = false; |
|
| 1895 | + $p->code = "'<'.'" |
|
| 1896 | + . '?php header("X-Spip-Filtre: insert_head_css_conditionnel"); ?' |
|
| 1897 | + . "'.'>'"; |
|
| 1898 | + $p->code .= ". pipeline('insert_head','<!-- insert_head -->')"; |
|
| 1899 | + $p->interdire_scripts = false; |
|
| 1900 | 1900 | |
| 1901 | - return $p; |
|
| 1901 | + return $p; |
|
| 1902 | 1902 | } |
| 1903 | 1903 | |
| 1904 | 1904 | /** |
@@ -1916,10 +1916,10 @@ discard block |
||
| 1916 | 1916 | * Pile complétée par le code à générer |
| 1917 | 1917 | */ |
| 1918 | 1918 | function balise_INSERT_HEAD_CSS_dist($p) { |
| 1919 | - $p->code = "pipeline('insert_head_css','<!-- insert_head_css -->')"; |
|
| 1920 | - $p->interdire_scripts = false; |
|
| 1919 | + $p->code = "pipeline('insert_head_css','<!-- insert_head_css -->')"; |
|
| 1920 | + $p->interdire_scripts = false; |
|
| 1921 | 1921 | |
| 1922 | - return $p; |
|
| 1922 | + return $p; |
|
| 1923 | 1923 | } |
| 1924 | 1924 | |
| 1925 | 1925 | /** |
@@ -1934,11 +1934,11 @@ discard block |
||
| 1934 | 1934 | * Pile complétée par le code à générer |
| 1935 | 1935 | **/ |
| 1936 | 1936 | function balise_INCLUDE_dist($p) { |
| 1937 | - if (function_exists('balise_INCLURE')) { |
|
| 1938 | - return balise_INCLURE($p); |
|
| 1939 | - } else { |
|
| 1940 | - return balise_INCLURE_dist($p); |
|
| 1941 | - } |
|
| 1937 | + if (function_exists('balise_INCLURE')) { |
|
| 1938 | + return balise_INCLURE($p); |
|
| 1939 | + } else { |
|
| 1940 | + return balise_INCLURE_dist($p); |
|
| 1941 | + } |
|
| 1942 | 1942 | } |
| 1943 | 1943 | |
| 1944 | 1944 | /** |
@@ -1972,66 +1972,66 @@ discard block |
||
| 1972 | 1972 | * Pile complétée par le code à générer |
| 1973 | 1973 | **/ |
| 1974 | 1974 | function balise_INCLURE_dist($p) { |
| 1975 | - $id_boucle = $p->id_boucle; |
|
| 1976 | - // la lang n'est pas passe de facon automatique par argumenter |
|
| 1977 | - // mais le sera pas recuperer_fond, sauf si etoile=>true est passe |
|
| 1978 | - // en option |
|
| 1979 | - |
|
| 1980 | - $_contexte = argumenter_inclure($p->param, true, $p, $p->boucles, $id_boucle, false, false); |
|
| 1981 | - |
|
| 1982 | - // erreur de syntaxe = fond absent |
|
| 1983 | - // (2 messages d'erreur SPIP pour le prix d'un, mais pas d'erreur PHP |
|
| 1984 | - if (!$_contexte) { |
|
| 1985 | - $_contexte = []; |
|
| 1986 | - } |
|
| 1987 | - |
|
| 1988 | - if (isset($_contexte['fond'])) { |
|
| 1989 | - $f = $_contexte['fond']; |
|
| 1990 | - // toujours vrai : |
|
| 1991 | - if (preg_match('/^.fond.\s*=>(.*)$/s', $f, $r)) { |
|
| 1992 | - $f = $r[1]; |
|
| 1993 | - unset($_contexte['fond']); |
|
| 1994 | - } else { |
|
| 1995 | - spip_log('compilation de #INCLURE a revoir'); |
|
| 1996 | - } |
|
| 1997 | - |
|
| 1998 | - // #INCLURE{doublons} |
|
| 1999 | - if (isset($_contexte['doublons'])) { |
|
| 2000 | - $_contexte['doublons'] = "'doublons' => \$doublons"; |
|
| 2001 | - } |
|
| 2002 | - |
|
| 2003 | - // Critere d'inclusion {env} (et {self} pour compatibilite ascendante) |
|
| 2004 | - $flag_env = false; |
|
| 2005 | - if (isset($_contexte['env']) or isset($_contexte['self'])) { |
|
| 2006 | - $flag_env = true; |
|
| 2007 | - unset($_contexte['env']); |
|
| 2008 | - } |
|
| 2009 | - |
|
| 2010 | - $_options = []; |
|
| 2011 | - if (isset($_contexte['ajax'])) { |
|
| 2012 | - $_options[] = preg_replace(',=>(.*)$,ims', '=> ($v=(\\1))?$v:true', $_contexte['ajax']); |
|
| 2013 | - unset($_contexte['ajax']); |
|
| 2014 | - } |
|
| 2015 | - if ($p->etoile) { |
|
| 2016 | - $_options[] = "'etoile'=>true"; |
|
| 2017 | - } |
|
| 2018 | - $_options[] = "'compil'=>array(" . memoriser_contexte_compil($p) . ')'; |
|
| 2019 | - |
|
| 2020 | - $_l = 'array(' . join(",\n\t", $_contexte) . ')'; |
|
| 2021 | - if ($flag_env) { |
|
| 2022 | - $_l = "array_merge(\$Pile[0],$_l)"; |
|
| 2023 | - } |
|
| 2024 | - |
|
| 2025 | - $p->code = sprintf(CODE_RECUPERER_FOND, $f, $_l, join(',', $_options), "_request('connect') ?? ''"); |
|
| 2026 | - } elseif (!isset($_contexte[1])) { |
|
| 2027 | - $msg = ['zbug_balise_sans_argument', ['balise' => ' INCLURE']]; |
|
| 2028 | - erreur_squelette($msg, $p); |
|
| 2029 | - } else { |
|
| 2030 | - $p->code = 'charge_scripts(' . $_contexte[1] . ',false)'; |
|
| 2031 | - } |
|
| 2032 | - |
|
| 2033 | - $p->interdire_scripts = false; // la securite est assuree par recuperer_fond |
|
| 2034 | - return $p; |
|
| 1975 | + $id_boucle = $p->id_boucle; |
|
| 1976 | + // la lang n'est pas passe de facon automatique par argumenter |
|
| 1977 | + // mais le sera pas recuperer_fond, sauf si etoile=>true est passe |
|
| 1978 | + // en option |
|
| 1979 | + |
|
| 1980 | + $_contexte = argumenter_inclure($p->param, true, $p, $p->boucles, $id_boucle, false, false); |
|
| 1981 | + |
|
| 1982 | + // erreur de syntaxe = fond absent |
|
| 1983 | + // (2 messages d'erreur SPIP pour le prix d'un, mais pas d'erreur PHP |
|
| 1984 | + if (!$_contexte) { |
|
| 1985 | + $_contexte = []; |
|
| 1986 | + } |
|
| 1987 | + |
|
| 1988 | + if (isset($_contexte['fond'])) { |
|
| 1989 | + $f = $_contexte['fond']; |
|
| 1990 | + // toujours vrai : |
|
| 1991 | + if (preg_match('/^.fond.\s*=>(.*)$/s', $f, $r)) { |
|
| 1992 | + $f = $r[1]; |
|
| 1993 | + unset($_contexte['fond']); |
|
| 1994 | + } else { |
|
| 1995 | + spip_log('compilation de #INCLURE a revoir'); |
|
| 1996 | + } |
|
| 1997 | + |
|
| 1998 | + // #INCLURE{doublons} |
|
| 1999 | + if (isset($_contexte['doublons'])) { |
|
| 2000 | + $_contexte['doublons'] = "'doublons' => \$doublons"; |
|
| 2001 | + } |
|
| 2002 | + |
|
| 2003 | + // Critere d'inclusion {env} (et {self} pour compatibilite ascendante) |
|
| 2004 | + $flag_env = false; |
|
| 2005 | + if (isset($_contexte['env']) or isset($_contexte['self'])) { |
|
| 2006 | + $flag_env = true; |
|
| 2007 | + unset($_contexte['env']); |
|
| 2008 | + } |
|
| 2009 | + |
|
| 2010 | + $_options = []; |
|
| 2011 | + if (isset($_contexte['ajax'])) { |
|
| 2012 | + $_options[] = preg_replace(',=>(.*)$,ims', '=> ($v=(\\1))?$v:true', $_contexte['ajax']); |
|
| 2013 | + unset($_contexte['ajax']); |
|
| 2014 | + } |
|
| 2015 | + if ($p->etoile) { |
|
| 2016 | + $_options[] = "'etoile'=>true"; |
|
| 2017 | + } |
|
| 2018 | + $_options[] = "'compil'=>array(" . memoriser_contexte_compil($p) . ')'; |
|
| 2019 | + |
|
| 2020 | + $_l = 'array(' . join(",\n\t", $_contexte) . ')'; |
|
| 2021 | + if ($flag_env) { |
|
| 2022 | + $_l = "array_merge(\$Pile[0],$_l)"; |
|
| 2023 | + } |
|
| 2024 | + |
|
| 2025 | + $p->code = sprintf(CODE_RECUPERER_FOND, $f, $_l, join(',', $_options), "_request('connect') ?? ''"); |
|
| 2026 | + } elseif (!isset($_contexte[1])) { |
|
| 2027 | + $msg = ['zbug_balise_sans_argument', ['balise' => ' INCLURE']]; |
|
| 2028 | + erreur_squelette($msg, $p); |
|
| 2029 | + } else { |
|
| 2030 | + $p->code = 'charge_scripts(' . $_contexte[1] . ',false)'; |
|
| 2031 | + } |
|
| 2032 | + |
|
| 2033 | + $p->interdire_scripts = false; // la securite est assuree par recuperer_fond |
|
| 2034 | + return $p; |
|
| 2035 | 2035 | } |
| 2036 | 2036 | |
| 2037 | 2037 | |
@@ -2059,69 +2059,69 @@ discard block |
||
| 2059 | 2059 | **/ |
| 2060 | 2060 | function balise_MODELE_dist($p) { |
| 2061 | 2061 | |
| 2062 | - $_contexte = argumenter_inclure($p->param, true, $p, $p->boucles, $p->id_boucle, false); |
|
| 2063 | - |
|
| 2064 | - // erreur de syntaxe = fond absent |
|
| 2065 | - // (2 messages d'erreur SPIP pour le prix d'un, mais pas d'erreur PHP |
|
| 2066 | - if (!$_contexte) { |
|
| 2067 | - $_contexte = []; |
|
| 2068 | - } |
|
| 2069 | - |
|
| 2070 | - if (!isset($_contexte[1])) { |
|
| 2071 | - $msg = ['zbug_balise_sans_argument', ['balise' => ' MODELE']]; |
|
| 2072 | - erreur_squelette($msg, $p); |
|
| 2073 | - } else { |
|
| 2074 | - $nom = $_contexte[1]; |
|
| 2075 | - unset($_contexte[1]); |
|
| 2076 | - |
|
| 2077 | - if (preg_match("/^\s*'[^']*'/s", $nom)) { |
|
| 2078 | - $nom = "'modeles/" . substr($nom, 1); |
|
| 2079 | - } else { |
|
| 2080 | - $nom = "'modeles/' . $nom"; |
|
| 2081 | - } |
|
| 2082 | - |
|
| 2083 | - $flag_env = false; |
|
| 2084 | - if (isset($_contexte['env'])) { |
|
| 2085 | - $flag_env = true; |
|
| 2086 | - unset($_contexte['env']); |
|
| 2087 | - } |
|
| 2088 | - |
|
| 2089 | - // Incoherence dans la syntaxe du contexte. A revoir. |
|
| 2090 | - // Reserver la cle primaire de la boucle courante si elle existe |
|
| 2091 | - if (isset($p->boucles[$p->id_boucle]->primary)) { |
|
| 2092 | - $primary = $p->boucles[$p->id_boucle]->primary; |
|
| 2093 | - if (!strpos($primary, ',')) { |
|
| 2094 | - $id = champ_sql($primary, $p); |
|
| 2095 | - $_contexte[] = "'$primary'=>" . $id; |
|
| 2096 | - $_contexte[] = "'id'=>" . $id; |
|
| 2097 | - } |
|
| 2098 | - } |
|
| 2099 | - $_contexte[] = "'recurs'=>(++\$recurs)"; |
|
| 2100 | - $connect = ''; |
|
| 2101 | - if (isset($p->boucles[$p->id_boucle])) { |
|
| 2102 | - $connect = $p->boucles[$p->id_boucle]->sql_serveur; |
|
| 2103 | - } |
|
| 2104 | - |
|
| 2105 | - $_options = memoriser_contexte_compil($p); |
|
| 2106 | - $_options = "'compil'=>array($_options), 'trim'=>true"; |
|
| 2107 | - if (isset($_contexte['ajax'])) { |
|
| 2108 | - $_options .= ', ' . preg_replace(',=>(.*)$,ims', '=> ($v=(\\1))?$v:true', $_contexte['ajax']); |
|
| 2109 | - unset($_contexte['ajax']); |
|
| 2110 | - } |
|
| 2111 | - |
|
| 2112 | - $_l = 'array(' . join(",\n\t", $_contexte) . ')'; |
|
| 2113 | - if ($flag_env) { |
|
| 2114 | - $_l = "array_merge(\$Pile[0],$_l)"; |
|
| 2115 | - } |
|
| 2116 | - |
|
| 2117 | - $page = sprintf(CODE_RECUPERER_FOND, $nom, $_l, $_options, _q($connect)); |
|
| 2118 | - |
|
| 2119 | - $p->code = "\n\t(((\$recurs=(isset(\$Pile[0]['recurs'])?\$Pile[0]['recurs']:0))>=5)? '' :\n\t$page)\n"; |
|
| 2120 | - |
|
| 2121 | - $p->interdire_scripts = false; // securite assuree par le squelette |
|
| 2122 | - } |
|
| 2123 | - |
|
| 2124 | - return $p; |
|
| 2062 | + $_contexte = argumenter_inclure($p->param, true, $p, $p->boucles, $p->id_boucle, false); |
|
| 2063 | + |
|
| 2064 | + // erreur de syntaxe = fond absent |
|
| 2065 | + // (2 messages d'erreur SPIP pour le prix d'un, mais pas d'erreur PHP |
|
| 2066 | + if (!$_contexte) { |
|
| 2067 | + $_contexte = []; |
|
| 2068 | + } |
|
| 2069 | + |
|
| 2070 | + if (!isset($_contexte[1])) { |
|
| 2071 | + $msg = ['zbug_balise_sans_argument', ['balise' => ' MODELE']]; |
|
| 2072 | + erreur_squelette($msg, $p); |
|
| 2073 | + } else { |
|
| 2074 | + $nom = $_contexte[1]; |
|
| 2075 | + unset($_contexte[1]); |
|
| 2076 | + |
|
| 2077 | + if (preg_match("/^\s*'[^']*'/s", $nom)) { |
|
| 2078 | + $nom = "'modeles/" . substr($nom, 1); |
|
| 2079 | + } else { |
|
| 2080 | + $nom = "'modeles/' . $nom"; |
|
| 2081 | + } |
|
| 2082 | + |
|
| 2083 | + $flag_env = false; |
|
| 2084 | + if (isset($_contexte['env'])) { |
|
| 2085 | + $flag_env = true; |
|
| 2086 | + unset($_contexte['env']); |
|
| 2087 | + } |
|
| 2088 | + |
|
| 2089 | + // Incoherence dans la syntaxe du contexte. A revoir. |
|
| 2090 | + // Reserver la cle primaire de la boucle courante si elle existe |
|
| 2091 | + if (isset($p->boucles[$p->id_boucle]->primary)) { |
|
| 2092 | + $primary = $p->boucles[$p->id_boucle]->primary; |
|
| 2093 | + if (!strpos($primary, ',')) { |
|
| 2094 | + $id = champ_sql($primary, $p); |
|
| 2095 | + $_contexte[] = "'$primary'=>" . $id; |
|
| 2096 | + $_contexte[] = "'id'=>" . $id; |
|
| 2097 | + } |
|
| 2098 | + } |
|
| 2099 | + $_contexte[] = "'recurs'=>(++\$recurs)"; |
|
| 2100 | + $connect = ''; |
|
| 2101 | + if (isset($p->boucles[$p->id_boucle])) { |
|
| 2102 | + $connect = $p->boucles[$p->id_boucle]->sql_serveur; |
|
| 2103 | + } |
|
| 2104 | + |
|
| 2105 | + $_options = memoriser_contexte_compil($p); |
|
| 2106 | + $_options = "'compil'=>array($_options), 'trim'=>true"; |
|
| 2107 | + if (isset($_contexte['ajax'])) { |
|
| 2108 | + $_options .= ', ' . preg_replace(',=>(.*)$,ims', '=> ($v=(\\1))?$v:true', $_contexte['ajax']); |
|
| 2109 | + unset($_contexte['ajax']); |
|
| 2110 | + } |
|
| 2111 | + |
|
| 2112 | + $_l = 'array(' . join(",\n\t", $_contexte) . ')'; |
|
| 2113 | + if ($flag_env) { |
|
| 2114 | + $_l = "array_merge(\$Pile[0],$_l)"; |
|
| 2115 | + } |
|
| 2116 | + |
|
| 2117 | + $page = sprintf(CODE_RECUPERER_FOND, $nom, $_l, $_options, _q($connect)); |
|
| 2118 | + |
|
| 2119 | + $p->code = "\n\t(((\$recurs=(isset(\$Pile[0]['recurs'])?\$Pile[0]['recurs']:0))>=5)? '' :\n\t$page)\n"; |
|
| 2120 | + |
|
| 2121 | + $p->interdire_scripts = false; // securite assuree par le squelette |
|
| 2122 | + } |
|
| 2123 | + |
|
| 2124 | + return $p; |
|
| 2125 | 2125 | } |
| 2126 | 2126 | |
| 2127 | 2127 | |
@@ -2145,21 +2145,21 @@ discard block |
||
| 2145 | 2145 | * Pile complétée par le code à générer |
| 2146 | 2146 | **/ |
| 2147 | 2147 | function balise_SET_dist($p) { |
| 2148 | - $_nom = interprete_argument_balise(1, $p); |
|
| 2149 | - $_val = interprete_argument_balise(2, $p); |
|
| 2148 | + $_nom = interprete_argument_balise(1, $p); |
|
| 2149 | + $_val = interprete_argument_balise(2, $p); |
|
| 2150 | 2150 | |
| 2151 | - if (!$_nom or !$_val) { |
|
| 2152 | - $err_b_s_a = ['zbug_balise_sans_argument', ['balise' => 'SET']]; |
|
| 2153 | - erreur_squelette($err_b_s_a, $p); |
|
| 2154 | - } |
|
| 2155 | - // affectation $_zzz inutile, mais permet de contourner un bug OpCode cache sous PHP 5.5.4 |
|
| 2156 | - // cf https://bugs.php.net/bug.php?id=65845 |
|
| 2157 | - else { |
|
| 2158 | - $p->code = "vide(\$Pile['vars'][\$_zzz=(string)$_nom] = $_val)"; |
|
| 2159 | - } |
|
| 2151 | + if (!$_nom or !$_val) { |
|
| 2152 | + $err_b_s_a = ['zbug_balise_sans_argument', ['balise' => 'SET']]; |
|
| 2153 | + erreur_squelette($err_b_s_a, $p); |
|
| 2154 | + } |
|
| 2155 | + // affectation $_zzz inutile, mais permet de contourner un bug OpCode cache sous PHP 5.5.4 |
|
| 2156 | + // cf https://bugs.php.net/bug.php?id=65845 |
|
| 2157 | + else { |
|
| 2158 | + $p->code = "vide(\$Pile['vars'][\$_zzz=(string)$_nom] = $_val)"; |
|
| 2159 | + } |
|
| 2160 | 2160 | |
| 2161 | - $p->interdire_scripts = false; // la balise ne renvoie rien |
|
| 2162 | - return $p; |
|
| 2161 | + $p->interdire_scripts = false; // la balise ne renvoie rien |
|
| 2162 | + return $p; |
|
| 2163 | 2163 | } |
| 2164 | 2164 | |
| 2165 | 2165 | |
@@ -2189,12 +2189,12 @@ discard block |
||
| 2189 | 2189 | * Pile complétée par le code à générer |
| 2190 | 2190 | **/ |
| 2191 | 2191 | function balise_GET_dist($p) { |
| 2192 | - $p->interdire_scripts = false; // le contenu vient de #SET, donc il est de confiance |
|
| 2193 | - if (function_exists('balise_ENV')) { |
|
| 2194 | - return balise_ENV($p, '$Pile["vars"]??[]'); |
|
| 2195 | - } else { |
|
| 2196 | - return balise_ENV_dist($p, '$Pile["vars"]??[]'); |
|
| 2197 | - } |
|
| 2192 | + $p->interdire_scripts = false; // le contenu vient de #SET, donc il est de confiance |
|
| 2193 | + if (function_exists('balise_ENV')) { |
|
| 2194 | + return balise_ENV($p, '$Pile["vars"]??[]'); |
|
| 2195 | + } else { |
|
| 2196 | + return balise_ENV_dist($p, '$Pile["vars"]??[]'); |
|
| 2197 | + } |
|
| 2198 | 2198 | } |
| 2199 | 2199 | |
| 2200 | 2200 | |
@@ -2217,22 +2217,22 @@ discard block |
||
| 2217 | 2217 | * Pile complétée par le code à générer |
| 2218 | 2218 | **/ |
| 2219 | 2219 | function balise_DOUBLONS_dist($p) { |
| 2220 | - if ($type = interprete_argument_balise(1, $p)) { |
|
| 2221 | - if ($famille = interprete_argument_balise(2, $p)) { |
|
| 2222 | - $type .= '.' . $famille; |
|
| 2223 | - } |
|
| 2224 | - $p->code = '(isset($doublons[' . $type . ']) ? $doublons[' . $type . '] : "")'; |
|
| 2225 | - if (!$p->etoile) { |
|
| 2226 | - $p->code = 'array_filter(array_map("intval",explode(",",' |
|
| 2227 | - . $p->code . ')))'; |
|
| 2228 | - } |
|
| 2229 | - } else { |
|
| 2230 | - $p->code = '$doublons'; |
|
| 2231 | - } |
|
| 2220 | + if ($type = interprete_argument_balise(1, $p)) { |
|
| 2221 | + if ($famille = interprete_argument_balise(2, $p)) { |
|
| 2222 | + $type .= '.' . $famille; |
|
| 2223 | + } |
|
| 2224 | + $p->code = '(isset($doublons[' . $type . ']) ? $doublons[' . $type . '] : "")'; |
|
| 2225 | + if (!$p->etoile) { |
|
| 2226 | + $p->code = 'array_filter(array_map("intval",explode(",",' |
|
| 2227 | + . $p->code . ')))'; |
|
| 2228 | + } |
|
| 2229 | + } else { |
|
| 2230 | + $p->code = '$doublons'; |
|
| 2231 | + } |
|
| 2232 | 2232 | |
| 2233 | - $p->interdire_scripts = false; |
|
| 2233 | + $p->interdire_scripts = false; |
|
| 2234 | 2234 | |
| 2235 | - return $p; |
|
| 2235 | + return $p; |
|
| 2236 | 2236 | } |
| 2237 | 2237 | |
| 2238 | 2238 | |
@@ -2255,18 +2255,18 @@ discard block |
||
| 2255 | 2255 | * Pile complétée par le code à générer |
| 2256 | 2256 | **/ |
| 2257 | 2257 | function balise_PIPELINE_dist($p) { |
| 2258 | - $_pipe = interprete_argument_balise(1, $p); |
|
| 2259 | - if (!$_pipe) { |
|
| 2260 | - $err_b_s_a = ['zbug_balise_sans_argument', ['balise' => 'PIPELINE']]; |
|
| 2261 | - erreur_squelette($err_b_s_a, $p); |
|
| 2262 | - } else { |
|
| 2263 | - $_flux = interprete_argument_balise(2, $p); |
|
| 2264 | - $_flux = $_flux ?: "''"; |
|
| 2265 | - $p->code = "pipeline( $_pipe , $_flux )"; |
|
| 2266 | - $p->interdire_scripts = false; |
|
| 2267 | - } |
|
| 2258 | + $_pipe = interprete_argument_balise(1, $p); |
|
| 2259 | + if (!$_pipe) { |
|
| 2260 | + $err_b_s_a = ['zbug_balise_sans_argument', ['balise' => 'PIPELINE']]; |
|
| 2261 | + erreur_squelette($err_b_s_a, $p); |
|
| 2262 | + } else { |
|
| 2263 | + $_flux = interprete_argument_balise(2, $p); |
|
| 2264 | + $_flux = $_flux ?: "''"; |
|
| 2265 | + $p->code = "pipeline( $_pipe , $_flux )"; |
|
| 2266 | + $p->interdire_scripts = false; |
|
| 2267 | + } |
|
| 2268 | 2268 | |
| 2269 | - return $p; |
|
| 2269 | + return $p; |
|
| 2270 | 2270 | } |
| 2271 | 2271 | |
| 2272 | 2272 | |
@@ -2291,10 +2291,10 @@ discard block |
||
| 2291 | 2291 | * Pile complétée par le code à générer |
| 2292 | 2292 | **/ |
| 2293 | 2293 | function balise_EDIT_dist($p) { |
| 2294 | - $p->code = "''"; |
|
| 2295 | - $p->interdire_scripts = false; |
|
| 2294 | + $p->code = "''"; |
|
| 2295 | + $p->interdire_scripts = false; |
|
| 2296 | 2296 | |
| 2297 | - return $p; |
|
| 2297 | + return $p; |
|
| 2298 | 2298 | } |
| 2299 | 2299 | |
| 2300 | 2300 | |
@@ -2317,11 +2317,11 @@ discard block |
||
| 2317 | 2317 | * Pile complétée par le code à générer |
| 2318 | 2318 | **/ |
| 2319 | 2319 | function balise_TOTAL_UNIQUE_dist($p) { |
| 2320 | - $_famille = interprete_argument_balise(1, $p); |
|
| 2321 | - $_famille = $_famille ?: "''"; |
|
| 2322 | - $p->code = "unique('', $_famille, true)"; |
|
| 2320 | + $_famille = interprete_argument_balise(1, $p); |
|
| 2321 | + $_famille = $_famille ?: "''"; |
|
| 2322 | + $p->code = "unique('', $_famille, true)"; |
|
| 2323 | 2323 | |
| 2324 | - return $p; |
|
| 2324 | + return $p; |
|
| 2325 | 2325 | } |
| 2326 | 2326 | |
| 2327 | 2327 | /** |
@@ -2344,19 +2344,19 @@ discard block |
||
| 2344 | 2344 | * Pile complétée par le code à générer |
| 2345 | 2345 | **/ |
| 2346 | 2346 | function balise_ARRAY_dist($p) { |
| 2347 | - $_code = []; |
|
| 2348 | - $n = 1; |
|
| 2349 | - do { |
|
| 2350 | - $_key = interprete_argument_balise($n++, $p); |
|
| 2351 | - $_val = interprete_argument_balise($n++, $p); |
|
| 2352 | - if ($_key and $_val) { |
|
| 2353 | - $_code[] = "$_key => $_val"; |
|
| 2354 | - } |
|
| 2355 | - } while ($_key && $_val); |
|
| 2356 | - $p->code = 'array(' . join(', ', $_code) . ')'; |
|
| 2357 | - $p->interdire_scripts = false; |
|
| 2347 | + $_code = []; |
|
| 2348 | + $n = 1; |
|
| 2349 | + do { |
|
| 2350 | + $_key = interprete_argument_balise($n++, $p); |
|
| 2351 | + $_val = interprete_argument_balise($n++, $p); |
|
| 2352 | + if ($_key and $_val) { |
|
| 2353 | + $_code[] = "$_key => $_val"; |
|
| 2354 | + } |
|
| 2355 | + } while ($_key && $_val); |
|
| 2356 | + $p->code = 'array(' . join(', ', $_code) . ')'; |
|
| 2357 | + $p->interdire_scripts = false; |
|
| 2358 | 2358 | |
| 2359 | - return $p; |
|
| 2359 | + return $p; |
|
| 2360 | 2360 | } |
| 2361 | 2361 | |
| 2362 | 2362 | /** |
@@ -2375,15 +2375,15 @@ discard block |
||
| 2375 | 2375 | * Pile complétée par le code à générer |
| 2376 | 2376 | */ |
| 2377 | 2377 | function balise_LISTE_dist($p) { |
| 2378 | - $_code = []; |
|
| 2379 | - $n = 1; |
|
| 2380 | - while ($_val = interprete_argument_balise($n++, $p)) { |
|
| 2381 | - $_code[] = $_val; |
|
| 2382 | - } |
|
| 2383 | - $p->code = 'array(' . join(', ', $_code) . ')'; |
|
| 2384 | - $p->interdire_scripts = false; |
|
| 2378 | + $_code = []; |
|
| 2379 | + $n = 1; |
|
| 2380 | + while ($_val = interprete_argument_balise($n++, $p)) { |
|
| 2381 | + $_code[] = $_val; |
|
| 2382 | + } |
|
| 2383 | + $p->code = 'array(' . join(', ', $_code) . ')'; |
|
| 2384 | + $p->interdire_scripts = false; |
|
| 2385 | 2385 | |
| 2386 | - return $p; |
|
| 2386 | + return $p; |
|
| 2387 | 2387 | } |
| 2388 | 2388 | |
| 2389 | 2389 | |
@@ -2417,21 +2417,21 @@ discard block |
||
| 2417 | 2417 | * Pile complétée par le code à générer |
| 2418 | 2418 | **/ |
| 2419 | 2419 | function balise_AUTORISER_dist($p) { |
| 2420 | - $_code = []; |
|
| 2421 | - $p->descr['session'] = true; // faire un cache par session |
|
| 2420 | + $_code = []; |
|
| 2421 | + $p->descr['session'] = true; // faire un cache par session |
|
| 2422 | 2422 | |
| 2423 | - $n = 1; |
|
| 2424 | - while ($_v = interprete_argument_balise($n++, $p)) { |
|
| 2425 | - $_code[] = $_v; |
|
| 2426 | - } |
|
| 2423 | + $n = 1; |
|
| 2424 | + while ($_v = interprete_argument_balise($n++, $p)) { |
|
| 2425 | + $_code[] = $_v; |
|
| 2426 | + } |
|
| 2427 | 2427 | |
| 2428 | - $p->code = '((function_exists("autoriser")||include_spip("inc/autoriser"))&&autoriser(' . join( |
|
| 2429 | - ', ', |
|
| 2430 | - $_code |
|
| 2431 | - ) . ')?" ":"")'; |
|
| 2432 | - $p->interdire_scripts = false; |
|
| 2428 | + $p->code = '((function_exists("autoriser")||include_spip("inc/autoriser"))&&autoriser(' . join( |
|
| 2429 | + ', ', |
|
| 2430 | + $_code |
|
| 2431 | + ) . ')?" ":"")'; |
|
| 2432 | + $p->interdire_scripts = false; |
|
| 2433 | 2433 | |
| 2434 | - return $p; |
|
| 2434 | + return $p; |
|
| 2435 | 2435 | } |
| 2436 | 2436 | |
| 2437 | 2437 | |
@@ -2455,15 +2455,15 @@ discard block |
||
| 2455 | 2455 | * Pile complétée par le code à générer |
| 2456 | 2456 | **/ |
| 2457 | 2457 | function balise_PLUGIN_dist($p) { |
| 2458 | - $plugin = interprete_argument_balise(1, $p); |
|
| 2459 | - $plugin = isset($plugin) ? str_replace('\'', '"', $plugin) : '""'; |
|
| 2460 | - $type_info = interprete_argument_balise(2, $p); |
|
| 2461 | - $type_info = isset($type_info) ? str_replace('\'', '"', $type_info) : '"est_actif"'; |
|
| 2458 | + $plugin = interprete_argument_balise(1, $p); |
|
| 2459 | + $plugin = isset($plugin) ? str_replace('\'', '"', $plugin) : '""'; |
|
| 2460 | + $type_info = interprete_argument_balise(2, $p); |
|
| 2461 | + $type_info = isset($type_info) ? str_replace('\'', '"', $type_info) : '"est_actif"'; |
|
| 2462 | 2462 | |
| 2463 | - $f = chercher_filtre('info_plugin'); |
|
| 2464 | - $p->code = $f . '(' . $plugin . ', ' . $type_info . ')'; |
|
| 2463 | + $f = chercher_filtre('info_plugin'); |
|
| 2464 | + $p->code = $f . '(' . $plugin . ', ' . $type_info . ')'; |
|
| 2465 | 2465 | |
| 2466 | - return $p; |
|
| 2466 | + return $p; |
|
| 2467 | 2467 | } |
| 2468 | 2468 | |
| 2469 | 2469 | /** |
@@ -2484,9 +2484,9 @@ discard block |
||
| 2484 | 2484 | * Pile complétée par le code à générer |
| 2485 | 2485 | **/ |
| 2486 | 2486 | function balise_AIDER_dist($p) { |
| 2487 | - $_motif = interprete_argument_balise(1, $p); |
|
| 2488 | - $p->code = "((\$aider=charger_fonction('aide','inc',true))?\$aider($_motif):'')"; |
|
| 2489 | - return $p; |
|
| 2487 | + $_motif = interprete_argument_balise(1, $p); |
|
| 2488 | + $p->code = "((\$aider=charger_fonction('aide','inc',true))?\$aider($_motif):'')"; |
|
| 2489 | + return $p; |
|
| 2490 | 2490 | } |
| 2491 | 2491 | |
| 2492 | 2492 | /** |
@@ -2512,16 +2512,16 @@ discard block |
||
| 2512 | 2512 | * Pile complétée par le code à générer |
| 2513 | 2513 | **/ |
| 2514 | 2514 | function balise_ACTION_FORMULAIRE($p) { |
| 2515 | - if (!$_url = interprete_argument_balise(1, $p)) { |
|
| 2516 | - $_url = "(\$Pile[0]['action'] ?? '')"; |
|
| 2517 | - } |
|
| 2518 | - if (!$_form = interprete_argument_balise(2, $p)) { |
|
| 2519 | - $_form = "(\$Pile[0]['form'] ?? '')"; |
|
| 2520 | - } |
|
| 2521 | - |
|
| 2522 | - // envoyer le nom du formulaire que l'on traite |
|
| 2523 | - // transmettre les eventuels args de la balise formulaire |
|
| 2524 | - $p->code = " '<span class=\"form-hidden\">' . |
|
| 2515 | + if (!$_url = interprete_argument_balise(1, $p)) { |
|
| 2516 | + $_url = "(\$Pile[0]['action'] ?? '')"; |
|
| 2517 | + } |
|
| 2518 | + if (!$_form = interprete_argument_balise(2, $p)) { |
|
| 2519 | + $_form = "(\$Pile[0]['form'] ?? '')"; |
|
| 2520 | + } |
|
| 2521 | + |
|
| 2522 | + // envoyer le nom du formulaire que l'on traite |
|
| 2523 | + // transmettre les eventuels args de la balise formulaire |
|
| 2524 | + $p->code = " '<span class=\"form-hidden\">' . |
|
| 2525 | 2525 | form_hidden($_url) . |
| 2526 | 2526 | '<input name=\'formulaire_action\' type=\'hidden\' |
| 2527 | 2527 | value=\'' . $_form . '\' />' . |
@@ -2532,9 +2532,9 @@ discard block |
||
| 2532 | 2532 | (\$Pile[0]['_hidden'] ?? '') . |
| 2533 | 2533 | '</span>'"; |
| 2534 | 2534 | |
| 2535 | - $p->interdire_scripts = false; |
|
| 2535 | + $p->interdire_scripts = false; |
|
| 2536 | 2536 | |
| 2537 | - return $p; |
|
| 2537 | + return $p; |
|
| 2538 | 2538 | } |
| 2539 | 2539 | |
| 2540 | 2540 | |
@@ -2575,25 +2575,25 @@ discard block |
||
| 2575 | 2575 | */ |
| 2576 | 2576 | function balise_BOUTON_ACTION_dist($p) { |
| 2577 | 2577 | |
| 2578 | - $args = []; |
|
| 2579 | - for ($k = 1; $k <= 6; $k++) { |
|
| 2580 | - $_a = interprete_argument_balise($k, $p); |
|
| 2581 | - if (!$_a) { |
|
| 2582 | - $_a = "''"; |
|
| 2583 | - } |
|
| 2584 | - $args[] = $_a; |
|
| 2585 | - } |
|
| 2586 | - // supprimer les args vides |
|
| 2587 | - while (end($args) == "''" and count($args) > 2) { |
|
| 2588 | - array_pop($args); |
|
| 2589 | - } |
|
| 2590 | - $args = implode(',', $args); |
|
| 2578 | + $args = []; |
|
| 2579 | + for ($k = 1; $k <= 6; $k++) { |
|
| 2580 | + $_a = interprete_argument_balise($k, $p); |
|
| 2581 | + if (!$_a) { |
|
| 2582 | + $_a = "''"; |
|
| 2583 | + } |
|
| 2584 | + $args[] = $_a; |
|
| 2585 | + } |
|
| 2586 | + // supprimer les args vides |
|
| 2587 | + while (end($args) == "''" and count($args) > 2) { |
|
| 2588 | + array_pop($args); |
|
| 2589 | + } |
|
| 2590 | + $args = implode(',', $args); |
|
| 2591 | 2591 | |
| 2592 | - $bouton_action = chercher_filtre('bouton_action'); |
|
| 2593 | - $p->code = "$bouton_action($args)"; |
|
| 2594 | - $p->interdire_scripts = false; |
|
| 2592 | + $bouton_action = chercher_filtre('bouton_action'); |
|
| 2593 | + $p->code = "$bouton_action($args)"; |
|
| 2594 | + $p->interdire_scripts = false; |
|
| 2595 | 2595 | |
| 2596 | - return $p; |
|
| 2596 | + return $p; |
|
| 2597 | 2597 | } |
| 2598 | 2598 | |
| 2599 | 2599 | |
@@ -2612,10 +2612,10 @@ discard block |
||
| 2612 | 2612 | * Pile complétée par le code à générer |
| 2613 | 2613 | */ |
| 2614 | 2614 | function balise_SLOGAN_SITE_SPIP_dist($p) { |
| 2615 | - $p->code = "\$GLOBALS['meta']['slogan_site']"; |
|
| 2615 | + $p->code = "\$GLOBALS['meta']['slogan_site']"; |
|
| 2616 | 2616 | |
| 2617 | - #$p->interdire_scripts = true; |
|
| 2618 | - return $p; |
|
| 2617 | + #$p->interdire_scripts = true; |
|
| 2618 | + return $p; |
|
| 2619 | 2619 | } |
| 2620 | 2620 | |
| 2621 | 2621 | |
@@ -2639,10 +2639,10 @@ discard block |
||
| 2639 | 2639 | * Pile complétée par le code à générer |
| 2640 | 2640 | */ |
| 2641 | 2641 | function balise_HTML5_dist($p) { |
| 2642 | - $p->code = html5_permis() ? "' '" : "''"; |
|
| 2643 | - $p->interdire_scripts = false; |
|
| 2642 | + $p->code = html5_permis() ? "' '" : "''"; |
|
| 2643 | + $p->interdire_scripts = false; |
|
| 2644 | 2644 | |
| 2645 | - return $p; |
|
| 2645 | + return $p; |
|
| 2646 | 2646 | } |
| 2647 | 2647 | |
| 2648 | 2648 | |
@@ -2668,58 +2668,58 @@ discard block |
||
| 2668 | 2668 | * Pile complétée par le code à générer |
| 2669 | 2669 | */ |
| 2670 | 2670 | function balise_TRI_dist($p, $liste = 'true') { |
| 2671 | - $b = index_boucle_mere($p); |
|
| 2672 | - // s'il n'y a pas de nom de boucle, on ne peut pas trier |
|
| 2673 | - if ($b === '') { |
|
| 2674 | - $msg = ['zbug_champ_hors_boucle', ['champ' => zbug_presenter_champ($p)]]; |
|
| 2675 | - erreur_squelette($msg, $p); |
|
| 2676 | - $p->code = "''"; |
|
| 2671 | + $b = index_boucle_mere($p); |
|
| 2672 | + // s'il n'y a pas de nom de boucle, on ne peut pas trier |
|
| 2673 | + if ($b === '') { |
|
| 2674 | + $msg = ['zbug_champ_hors_boucle', ['champ' => zbug_presenter_champ($p)]]; |
|
| 2675 | + erreur_squelette($msg, $p); |
|
| 2676 | + $p->code = "''"; |
|
| 2677 | 2677 | |
| 2678 | - return $p; |
|
| 2679 | - } |
|
| 2680 | - $boucle = $p->boucles[$b]; |
|
| 2678 | + return $p; |
|
| 2679 | + } |
|
| 2680 | + $boucle = $p->boucles[$b]; |
|
| 2681 | 2681 | |
| 2682 | - // s'il n'y a pas de tri_champ, c'est qu'on se trouve |
|
| 2683 | - // dans un boucle recursive ou qu'on a oublie le critere {tri} |
|
| 2684 | - if (!isset($boucle->modificateur['tri_champ'])) { |
|
| 2685 | - $msg = ['zbug_champ_hors_critere', [ |
|
| 2686 | - 'champ' => zbug_presenter_champ($p), |
|
| 2687 | - 'critere' => 'tri' |
|
| 2688 | - ]]; |
|
| 2689 | - erreur_squelette($msg, $p); |
|
| 2690 | - $p->code = "''"; |
|
| 2682 | + // s'il n'y a pas de tri_champ, c'est qu'on se trouve |
|
| 2683 | + // dans un boucle recursive ou qu'on a oublie le critere {tri} |
|
| 2684 | + if (!isset($boucle->modificateur['tri_champ'])) { |
|
| 2685 | + $msg = ['zbug_champ_hors_critere', [ |
|
| 2686 | + 'champ' => zbug_presenter_champ($p), |
|
| 2687 | + 'critere' => 'tri' |
|
| 2688 | + ]]; |
|
| 2689 | + erreur_squelette($msg, $p); |
|
| 2690 | + $p->code = "''"; |
|
| 2691 | 2691 | |
| 2692 | - return $p; |
|
| 2693 | - } |
|
| 2692 | + return $p; |
|
| 2693 | + } |
|
| 2694 | 2694 | |
| 2695 | - // Différentes infos relatives au tri présentes dans les modificateurs |
|
| 2696 | - $_tri_nom = $boucle->modificateur['tri_nom'] ; // nom du paramètre définissant le tri |
|
| 2697 | - $_tri_champ = $boucle->modificateur['tri_champ']; // champ actuel utilisé le tri |
|
| 2698 | - $_tri_sens = $boucle->modificateur['tri_sens']; // sens de tri actuel |
|
| 2699 | - $_tri_liste_sens_defaut = $boucle->modificateur['tri_liste_sens_defaut']; // sens par défaut pour chaque champ |
|
| 2695 | + // Différentes infos relatives au tri présentes dans les modificateurs |
|
| 2696 | + $_tri_nom = $boucle->modificateur['tri_nom'] ; // nom du paramètre définissant le tri |
|
| 2697 | + $_tri_champ = $boucle->modificateur['tri_champ']; // champ actuel utilisé le tri |
|
| 2698 | + $_tri_sens = $boucle->modificateur['tri_sens']; // sens de tri actuel |
|
| 2699 | + $_tri_liste_sens_defaut = $boucle->modificateur['tri_liste_sens_defaut']; // sens par défaut pour chaque champ |
|
| 2700 | 2700 | |
| 2701 | - $_champ_ou_sens = interprete_argument_balise(1, $p); |
|
| 2702 | - // si pas de champ, renvoyer le critère de tri actuel |
|
| 2703 | - if (!$_champ_ou_sens) { |
|
| 2704 | - $p->code = $_tri_champ; |
|
| 2701 | + $_champ_ou_sens = interprete_argument_balise(1, $p); |
|
| 2702 | + // si pas de champ, renvoyer le critère de tri actuel |
|
| 2703 | + if (!$_champ_ou_sens) { |
|
| 2704 | + $p->code = $_tri_champ; |
|
| 2705 | 2705 | |
| 2706 | - return $p; |
|
| 2707 | - } |
|
| 2708 | - // forcer la jointure si besoin, et si le champ est statique |
|
| 2709 | - if (preg_match(",^'([\w.]+)'$,i", $_champ_ou_sens, $m)) { |
|
| 2710 | - index_pile($b, $m[1], $p->boucles, '', null, true, false); |
|
| 2711 | - } |
|
| 2706 | + return $p; |
|
| 2707 | + } |
|
| 2708 | + // forcer la jointure si besoin, et si le champ est statique |
|
| 2709 | + if (preg_match(",^'([\w.]+)'$,i", $_champ_ou_sens, $m)) { |
|
| 2710 | + index_pile($b, $m[1], $p->boucles, '', null, true, false); |
|
| 2711 | + } |
|
| 2712 | 2712 | |
| 2713 | - $_libelle = interprete_argument_balise(2, $p); |
|
| 2714 | - $_libelle = $_libelle ?: $_champ_ou_sens; |
|
| 2713 | + $_libelle = interprete_argument_balise(2, $p); |
|
| 2714 | + $_libelle = $_libelle ?: $_champ_ou_sens; |
|
| 2715 | 2715 | |
| 2716 | - $_class = interprete_argument_balise(3, $p) ?? "''"; |
|
| 2716 | + $_class = interprete_argument_balise(3, $p) ?? "''"; |
|
| 2717 | 2717 | |
| 2718 | - $p->code = "calculer_balise_tri($_champ_ou_sens, $_libelle, $_class, $_tri_nom, $_tri_champ, $_tri_sens, $_tri_liste_sens_defaut)"; |
|
| 2718 | + $p->code = "calculer_balise_tri($_champ_ou_sens, $_libelle, $_class, $_tri_nom, $_tri_champ, $_tri_sens, $_tri_liste_sens_defaut)"; |
|
| 2719 | 2719 | |
| 2720 | - $p->interdire_scripts = false; |
|
| 2720 | + $p->interdire_scripts = false; |
|
| 2721 | 2721 | |
| 2722 | - return $p; |
|
| 2722 | + return $p; |
|
| 2723 | 2723 | } |
| 2724 | 2724 | |
| 2725 | 2725 | |
@@ -2740,21 +2740,21 @@ discard block |
||
| 2740 | 2740 | * Pile complétée par le code à générer |
| 2741 | 2741 | */ |
| 2742 | 2742 | function balise_SAUTER_dist($p) { |
| 2743 | - $id_boucle = $p->id_boucle; |
|
| 2743 | + $id_boucle = $p->id_boucle; |
|
| 2744 | 2744 | |
| 2745 | - if (empty($p->boucles[$id_boucle])) { |
|
| 2746 | - $msg = ['zbug_champ_hors_boucle', ['champ' => '#SAUTER']]; |
|
| 2747 | - erreur_squelette($msg, $p); |
|
| 2748 | - } else { |
|
| 2749 | - $_saut = interprete_argument_balise(1, $p); |
|
| 2750 | - $_compteur = "\$Numrows['$id_boucle']['compteur_boucle']"; |
|
| 2751 | - $_total = "(\$Numrows['$id_boucle']['total'] ?? null)"; |
|
| 2745 | + if (empty($p->boucles[$id_boucle])) { |
|
| 2746 | + $msg = ['zbug_champ_hors_boucle', ['champ' => '#SAUTER']]; |
|
| 2747 | + erreur_squelette($msg, $p); |
|
| 2748 | + } else { |
|
| 2749 | + $_saut = interprete_argument_balise(1, $p); |
|
| 2750 | + $_compteur = "\$Numrows['$id_boucle']['compteur_boucle']"; |
|
| 2751 | + $_total = "(\$Numrows['$id_boucle']['total'] ?? null)"; |
|
| 2752 | 2752 | |
| 2753 | - $p->code = "vide($_compteur=\$iter->skip($_saut,$_total))"; |
|
| 2754 | - } |
|
| 2755 | - $p->interdire_scripts = false; |
|
| 2753 | + $p->code = "vide($_compteur=\$iter->skip($_saut,$_total))"; |
|
| 2754 | + } |
|
| 2755 | + $p->interdire_scripts = false; |
|
| 2756 | 2756 | |
| 2757 | - return $p; |
|
| 2757 | + return $p; |
|
| 2758 | 2758 | } |
| 2759 | 2759 | |
| 2760 | 2760 | |
@@ -2776,22 +2776,22 @@ discard block |
||
| 2776 | 2776 | * Pile complétée par le code à générer |
| 2777 | 2777 | */ |
| 2778 | 2778 | function balise_PUBLIE_dist($p) { |
| 2779 | - if (!$_type = interprete_argument_balise(1, $p)) { |
|
| 2780 | - $_type = _q($p->type_requete); |
|
| 2781 | - $_id = champ_sql($p->boucles[$p->id_boucle]->primary, $p); |
|
| 2782 | - } else { |
|
| 2783 | - $_id = interprete_argument_balise(2, $p); |
|
| 2784 | - } |
|
| 2779 | + if (!$_type = interprete_argument_balise(1, $p)) { |
|
| 2780 | + $_type = _q($p->type_requete); |
|
| 2781 | + $_id = champ_sql($p->boucles[$p->id_boucle]->primary, $p); |
|
| 2782 | + } else { |
|
| 2783 | + $_id = interprete_argument_balise(2, $p); |
|
| 2784 | + } |
|
| 2785 | 2785 | |
| 2786 | - $connect = ''; |
|
| 2787 | - if (isset($p->boucles[$p->id_boucle])) { |
|
| 2788 | - $connect = $p->boucles[$p->id_boucle]->sql_serveur; |
|
| 2789 | - } |
|
| 2786 | + $connect = ''; |
|
| 2787 | + if (isset($p->boucles[$p->id_boucle])) { |
|
| 2788 | + $connect = $p->boucles[$p->id_boucle]->sql_serveur; |
|
| 2789 | + } |
|
| 2790 | 2790 | |
| 2791 | - $p->code = '(objet_test_si_publie(' . $_type . ',intval(' . $_id . '),' . _q($connect) . ")?' ':'')"; |
|
| 2792 | - $p->interdire_scripts = false; |
|
| 2791 | + $p->code = '(objet_test_si_publie(' . $_type . ',intval(' . $_id . '),' . _q($connect) . ")?' ':'')"; |
|
| 2792 | + $p->interdire_scripts = false; |
|
| 2793 | 2793 | |
| 2794 | - return $p; |
|
| 2794 | + return $p; |
|
| 2795 | 2795 | } |
| 2796 | 2796 | |
| 2797 | 2797 | /** |
@@ -2820,12 +2820,12 @@ discard block |
||
| 2820 | 2820 | * Pile complétée par le code à générer |
| 2821 | 2821 | */ |
| 2822 | 2822 | function balise_PRODUIRE_dist($p) { |
| 2823 | - $balise_inclure = charger_fonction('INCLURE', 'balise'); |
|
| 2824 | - $p = $balise_inclure($p); |
|
| 2823 | + $balise_inclure = charger_fonction('INCLURE', 'balise'); |
|
| 2824 | + $p = $balise_inclure($p); |
|
| 2825 | 2825 | |
| 2826 | - $p->code = str_replace('recuperer_fond(', 'produire_fond_statique(', $p->code); |
|
| 2826 | + $p->code = str_replace('recuperer_fond(', 'produire_fond_statique(', $p->code); |
|
| 2827 | 2827 | |
| 2828 | - return $p; |
|
| 2828 | + return $p; |
|
| 2829 | 2829 | } |
| 2830 | 2830 | |
| 2831 | 2831 | /** |
@@ -2844,13 +2844,13 @@ discard block |
||
| 2844 | 2844 | * Pile complétée par le code à générer |
| 2845 | 2845 | */ |
| 2846 | 2846 | function balise_LARGEUR_ECRAN_dist($p) { |
| 2847 | - $_class = interprete_argument_balise(1, $p); |
|
| 2848 | - if (!$_class) { |
|
| 2849 | - $_class = 'null'; |
|
| 2850 | - } |
|
| 2851 | - $p->code = "(is_string($_class)?vide(\$GLOBALS['largeur_ecran']=$_class):(isset(\$GLOBALS['largeur_ecran'])?\$GLOBALS['largeur_ecran']:''))"; |
|
| 2847 | + $_class = interprete_argument_balise(1, $p); |
|
| 2848 | + if (!$_class) { |
|
| 2849 | + $_class = 'null'; |
|
| 2850 | + } |
|
| 2851 | + $p->code = "(is_string($_class)?vide(\$GLOBALS['largeur_ecran']=$_class):(isset(\$GLOBALS['largeur_ecran'])?\$GLOBALS['largeur_ecran']:''))"; |
|
| 2852 | 2852 | |
| 2853 | - return $p; |
|
| 2853 | + return $p; |
|
| 2854 | 2854 | } |
| 2855 | 2855 | |
| 2856 | 2856 | |
@@ -2866,14 +2866,14 @@ discard block |
||
| 2866 | 2866 | * Pile complétée par le code à générer |
| 2867 | 2867 | **/ |
| 2868 | 2868 | function balise_CONST_dist($p) { |
| 2869 | - $_const = interprete_argument_balise(1, $p); |
|
| 2870 | - if (!strlen($_const ?? '')) { |
|
| 2871 | - $p->code = "''"; |
|
| 2872 | - } |
|
| 2873 | - else { |
|
| 2874 | - $p->code = "(defined($_const)?constant($_const):'')"; |
|
| 2875 | - } |
|
| 2876 | - $p->interdire_scripts = false; |
|
| 2877 | - |
|
| 2878 | - return $p; |
|
| 2869 | + $_const = interprete_argument_balise(1, $p); |
|
| 2870 | + if (!strlen($_const ?? '')) { |
|
| 2871 | + $p->code = "''"; |
|
| 2872 | + } |
|
| 2873 | + else { |
|
| 2874 | + $p->code = "(defined($_const)?constant($_const):'')"; |
|
| 2875 | + } |
|
| 2876 | + $p->interdire_scripts = false; |
|
| 2877 | + |
|
| 2878 | + return $p; |
|
| 2879 | 2879 | } |
@@ -135,9 +135,9 @@ discard block |
||
| 135 | 135 | sql_updateq( |
| 136 | 136 | 'spip_rubriques', |
| 137 | 137 | ['statut' => 'publie', 'date' => date('Y-m-d H:i:s')], |
| 138 | - 'id_rubrique=' . intval($id_rubrique) |
|
| 138 | + 'id_rubrique='.intval($id_rubrique) |
|
| 139 | 139 | ); |
| 140 | - $id_parent = sql_getfetsel('id_parent', 'spip_rubriques AS R', 'R.id_rubrique=' . intval($id_rubrique)); |
|
| 140 | + $id_parent = sql_getfetsel('id_parent', 'spip_rubriques AS R', 'R.id_rubrique='.intval($id_rubrique)); |
|
| 141 | 141 | if (!$id_parent) { |
| 142 | 142 | break; |
| 143 | 143 | } |
@@ -172,7 +172,7 @@ discard block |
||
| 172 | 172 | return $id_pred != $id_rubrique; |
| 173 | 173 | } |
| 174 | 174 | // passer au parent si on a depublie |
| 175 | - $r = sql_fetsel('id_parent', 'spip_rubriques', 'id_rubrique=' . intval($id_pred)); |
|
| 175 | + $r = sql_fetsel('id_parent', 'spip_rubriques', 'id_rubrique='.intval($id_pred)); |
|
| 176 | 176 | $id_pred = $r['id_parent']; |
| 177 | 177 | } |
| 178 | 178 | |
@@ -197,14 +197,14 @@ discard block |
||
| 197 | 197 | $date = date('Y-m-d H:i:s'); |
| 198 | 198 | } |
| 199 | 199 | $postdates = ($GLOBALS['meta']['post_dates'] == 'non') ? |
| 200 | - ' AND date <= ' . sql_quote($date) : ''; |
|
| 200 | + ' AND date <= '.sql_quote($date) : ''; |
|
| 201 | 201 | |
| 202 | 202 | if (!$id_rubrique = intval($id_rubrique)) { |
| 203 | 203 | return false; |
| 204 | 204 | } |
| 205 | 205 | |
| 206 | 206 | // verifier qu'elle existe et est bien publiee |
| 207 | - $r = sql_fetsel('id_rubrique,statut', 'spip_rubriques', 'id_rubrique=' . intval($id_rubrique)); |
|
| 207 | + $r = sql_fetsel('id_rubrique,statut', 'spip_rubriques', 'id_rubrique='.intval($id_rubrique)); |
|
| 208 | 208 | if (!$r or $r['statut'] !== 'publie') { |
| 209 | 209 | return false; |
| 210 | 210 | } |
@@ -214,12 +214,12 @@ discard block |
||
| 214 | 214 | $compte = [ |
| 215 | 215 | 'articles' => sql_countsel( |
| 216 | 216 | 'spip_articles', |
| 217 | - 'id_rubrique=' . intval($id_rubrique) . " AND statut='publie'$postdates" |
|
| 217 | + 'id_rubrique='.intval($id_rubrique)." AND statut='publie'$postdates" |
|
| 218 | 218 | ), |
| 219 | - 'rubriques' => sql_countsel('spip_rubriques', 'id_parent=' . intval($id_rubrique) . " AND statut='publie'"), |
|
| 219 | + 'rubriques' => sql_countsel('spip_rubriques', 'id_parent='.intval($id_rubrique)." AND statut='publie'"), |
|
| 220 | 220 | 'documents' => sql_countsel( |
| 221 | 221 | 'spip_documents AS D JOIN spip_documents_liens AS L ON D.id_document=L.id_document', |
| 222 | - 'L.id_objet=' . intval($id_rubrique) . " AND L.objet='rubrique' and D.mode NOT IN('logoon', 'logooff') " |
|
| 222 | + 'L.id_objet='.intval($id_rubrique)." AND L.objet='rubrique' and D.mode NOT IN('logoon', 'logooff') " |
|
| 223 | 223 | ) |
| 224 | 224 | ]; |
| 225 | 225 | |
@@ -244,7 +244,7 @@ discard block |
||
| 244 | 244 | } |
| 245 | 245 | } |
| 246 | 246 | |
| 247 | - sql_updateq('spip_rubriques', ['statut' => 'prepa'], 'id_rubrique=' . intval($id_rubrique)); |
|
| 247 | + sql_updateq('spip_rubriques', ['statut' => 'prepa'], 'id_rubrique='.intval($id_rubrique)); |
|
| 248 | 248 | |
| 249 | 249 | # spip_log("depublier_rubrique $id_pred"); |
| 250 | 250 | return true; |
@@ -307,7 +307,7 @@ discard block |
||
| 307 | 307 | |
| 308 | 308 | // Afficher les articles post-dates ? |
| 309 | 309 | $postdates = ($GLOBALS['meta']['post_dates'] == 'non') ? |
| 310 | - 'AND A.date <= ' . sql_quote(date('Y-m-d H:i:s')) : ''; |
|
| 310 | + 'AND A.date <= '.sql_quote(date('Y-m-d H:i:s')) : ''; |
|
| 311 | 311 | |
| 312 | 312 | $r = sql_select( |
| 313 | 313 | 'R.id_rubrique AS id, max(A.date) AS date_h', |
@@ -319,7 +319,7 @@ discard block |
||
| 319 | 319 | sql_updateq( |
| 320 | 320 | 'spip_rubriques', |
| 321 | 321 | ['statut_tmp' => 'publie', 'date_tmp' => $row['date_h']], |
| 322 | - 'id_rubrique=' . intval($row['id']) |
|
| 322 | + 'id_rubrique='.intval($row['id']) |
|
| 323 | 323 | ); |
| 324 | 324 | } |
| 325 | 325 | |
@@ -345,7 +345,7 @@ discard block |
||
| 345 | 345 | sql_updateq( |
| 346 | 346 | 'spip_rubriques', |
| 347 | 347 | ['statut_tmp' => 'publie', 'date_tmp' => $row['date_h']], |
| 348 | - 'id_rubrique=' . intval($row['id']) |
|
| 348 | + 'id_rubrique='.intval($row['id']) |
|
| 349 | 349 | ); |
| 350 | 350 | $continuer = true; |
| 351 | 351 | } |
@@ -398,7 +398,7 @@ discard block |
||
| 398 | 398 | and $rows = sql_allfetsel( |
| 399 | 399 | 'A.id_rubrique AS id, R.id_secteur AS id_secteur, R.profondeur+1 as profondeur', |
| 400 | 400 | 'spip_rubriques AS A JOIN spip_rubriques AS R ON A.id_parent = R.id_rubrique', |
| 401 | - 'R.profondeur=' . intval($prof) . ' AND (A.id_secteur <> R.id_secteur OR A.profondeur > R.profondeur+1)', |
|
| 401 | + 'R.profondeur='.intval($prof).' AND (A.id_secteur <> R.id_secteur OR A.profondeur > R.profondeur+1)', |
|
| 402 | 402 | '', |
| 403 | 403 | 'R.id_secteur', |
| 404 | 404 | '0,100' |
@@ -437,11 +437,11 @@ discard block |
||
| 437 | 437 | and $rows = sql_allfetsel( |
| 438 | 438 | 'id_rubrique as id', |
| 439 | 439 | 'spip_rubriques', |
| 440 | - 'profondeur=' . intval($prof + 1) . ' AND id_parent NOT IN (' . sql_get_select( |
|
| 440 | + 'profondeur='.intval($prof + 1).' AND id_parent NOT IN ('.sql_get_select( |
|
| 441 | 441 | 'zzz.id_rubrique', |
| 442 | 442 | 'spip_rubriques AS zzz', |
| 443 | - 'zzz.profondeur=' . intval($prof) |
|
| 444 | - ) . ')', |
|
| 443 | + 'zzz.profondeur='.intval($prof) |
|
| 444 | + ).')', |
|
| 445 | 445 | '', |
| 446 | 446 | '', |
| 447 | 447 | '0,100' |
@@ -455,7 +455,7 @@ discard block |
||
| 455 | 455 | // si pas de rubrique a profondeur $prof+1 pas la peine de continuer |
| 456 | 456 | // si il reste des rubriques non vues, c'est une branche morte ou reference circulaire (base foireuse) |
| 457 | 457 | // on arrete les frais |
| 458 | - if (sql_countsel('spip_rubriques', 'profondeur=' . intval($prof + 1))) { |
|
| 458 | + if (sql_countsel('spip_rubriques', 'profondeur='.intval($prof + 1))) { |
|
| 459 | 459 | $prof++; |
| 460 | 460 | $continuer = true; |
| 461 | 461 | } |
@@ -463,12 +463,12 @@ discard block |
||
| 463 | 463 | |
| 464 | 464 | // loger si la table des rubriques semble foireuse |
| 465 | 465 | // et mettre un id_secteur=0 sur ces rubriques pour eviter toute selection par les boucles |
| 466 | - if (sql_countsel('spip_rubriques', 'profondeur>' . intval($prof + 1))) { |
|
| 466 | + if (sql_countsel('spip_rubriques', 'profondeur>'.intval($prof + 1))) { |
|
| 467 | 467 | spip_log( |
| 468 | - 'Les rubriques de profondeur>' . ($prof + 1) . ' semblent suspectes (branches morte ou reference circulaire dans les parents)', |
|
| 468 | + 'Les rubriques de profondeur>'.($prof + 1).' semblent suspectes (branches morte ou reference circulaire dans les parents)', |
|
| 469 | 469 | _LOG_CRITIQUE |
| 470 | 470 | ); |
| 471 | - sql_update('spip_rubriques', ['id_secteur' => 0], 'profondeur>' . intval($prof + 1)); |
|
| 471 | + sql_update('spip_rubriques', ['id_secteur' => 0], 'profondeur>'.intval($prof + 1)); |
|
| 472 | 472 | } |
| 473 | 473 | |
| 474 | 474 | // reparer les articles |
@@ -479,7 +479,7 @@ discard block |
||
| 479 | 479 | ); |
| 480 | 480 | |
| 481 | 481 | while ($row = sql_fetch($r)) { |
| 482 | - sql_update('spip_articles', ['id_secteur' => $row['secteur']], 'id_article=' . intval($row['id'])); |
|
| 482 | + sql_update('spip_articles', ['id_secteur' => $row['secteur']], 'id_article='.intval($row['id'])); |
|
| 483 | 483 | } |
| 484 | 484 | |
| 485 | 485 | // avertir les plugins qui peuvent faire leur mises a jour egalement |
@@ -510,7 +510,7 @@ discard block |
||
| 510 | 510 | $t = sql_updateq( |
| 511 | 511 | 'spip_rubriques', |
| 512 | 512 | ['lang' => $row['lang'], 'langue_choisie' => 'non'], |
| 513 | - 'id_rubrique=' . intval($id_rubrique) |
|
| 513 | + 'id_rubrique='.intval($id_rubrique) |
|
| 514 | 514 | ); |
| 515 | 515 | } |
| 516 | 516 | |
@@ -555,7 +555,7 @@ discard block |
||
| 555 | 555 | sql_updateq( |
| 556 | 556 | 'spip_articles', |
| 557 | 557 | ['lang' => $row['lang'], 'langue_choisie' => 'non'], |
| 558 | - 'id_article=' . intval($id_article) |
|
| 558 | + 'id_article='.intval($id_article) |
|
| 559 | 559 | ); |
| 560 | 560 | } |
| 561 | 561 | |
@@ -630,11 +630,11 @@ discard block |
||
| 630 | 630 | ]; |
| 631 | 631 | // generer un nom de fonction "anonyme" unique |
| 632 | 632 | do { |
| 633 | - $functionname = 'f_calculer_langues_utilisees_' . $boucle->id_table . '_' . time() . '_' . random_int(0, mt_getrandmax()); |
|
| 633 | + $functionname = 'f_calculer_langues_utilisees_'.$boucle->id_table.'_'.time().'_'.random_int(0, mt_getrandmax()); |
|
| 634 | 634 | } while (function_exists($functionname)); |
| 635 | 635 | $code = calculer_boucle('calculer_langues_utilisees', $boucles); |
| 636 | - $code = '$SP=0; $command=array();$command["connect"] = $connect = "' . $serveur . '"; $Pile=array(0=>array());' . "\n" . $code; |
|
| 637 | - $code = 'function ' . $functionname . '(){' . $code . '};$res = ' . $functionname . '();'; |
|
| 636 | + $code = '$SP=0; $command=array();$command["connect"] = $connect = "'.$serveur.'"; $Pile=array(0=>array());'."\n".$code; |
|
| 637 | + $code = 'function '.$functionname.'(){'.$code.'};$res = '.$functionname.'();'; |
|
| 638 | 638 | $res = ''; |
| 639 | 639 | eval($code); |
| 640 | 640 | $res = explode(',', $res); |
@@ -736,11 +736,11 @@ discard block |
||
| 736 | 736 | $maxiter-- and $filles = sql_allfetsel( |
| 737 | 737 | 'id_rubrique', |
| 738 | 738 | 'spip_rubriques', |
| 739 | - sql_in('id_parent', $r) . ' AND ' . sql_in('id_rubrique', $r, 'NOT') |
|
| 739 | + sql_in('id_parent', $r).' AND '.sql_in('id_rubrique', $r, 'NOT') |
|
| 740 | 740 | ) |
| 741 | 741 | ) { |
| 742 | 742 | $r = join(',', array_column($filles, 'id_rubrique')); |
| 743 | - $branche .= ',' . $r; |
|
| 743 | + $branche .= ','.$r; |
|
| 744 | 744 | } |
| 745 | 745 | |
| 746 | 746 | # securite pour ne pas plomber la conso memoire sur les sites prolifiques |
@@ -780,7 +780,7 @@ discard block |
||
| 780 | 780 | |
| 781 | 781 | if (isset($b[$id])) { |
| 782 | 782 | // Notre branche commence par la rubrique de depart si $tout=true |
| 783 | - return $tout ? (strlen($b[$id]) ? $b[$id] . ",$id" : $id) : $b[$id]; |
|
| 783 | + return $tout ? (strlen($b[$id]) ? $b[$id].",$id" : $id) : $b[$id]; |
|
| 784 | 784 | } |
| 785 | 785 | |
| 786 | 786 | $hier = ''; |
@@ -793,11 +793,11 @@ discard block |
||
| 793 | 793 | $maxiter-- and $parents = sql_allfetsel( |
| 794 | 794 | 'id_parent', |
| 795 | 795 | 'spip_rubriques', |
| 796 | - sql_in('id_rubrique', $ids_nouveaux_parents) . ' AND ' . sql_in('id_parent', $hier, 'NOT') |
|
| 796 | + sql_in('id_rubrique', $ids_nouveaux_parents).' AND '.sql_in('id_parent', $hier, 'NOT') |
|
| 797 | 797 | ) |
| 798 | 798 | ) { |
| 799 | 799 | $ids_nouveaux_parents = join(',', array_column($parents, 'id_parent')); |
| 800 | - $hier = $ids_nouveaux_parents . (strlen($hier) ? ',' . $hier : ''); |
|
| 800 | + $hier = $ids_nouveaux_parents.(strlen($hier) ? ','.$hier : ''); |
|
| 801 | 801 | } |
| 802 | 802 | |
| 803 | 803 | # securite pour ne pas plomber la conso memoire sur les sites prolifiques |
@@ -829,7 +829,7 @@ discard block |
||
| 829 | 829 | include_spip('base/abstract_sql'); |
| 830 | 830 | if ($check) { |
| 831 | 831 | $postdates = ($GLOBALS['meta']['post_dates'] == 'non') ? |
| 832 | - 'AND A.date <= ' . sql_quote(date('Y-m-d H:i:s')) : ''; |
|
| 832 | + 'AND A.date <= '.sql_quote(date('Y-m-d H:i:s')) : ''; |
|
| 833 | 833 | |
| 834 | 834 | $r = sql_select( |
| 835 | 835 | 'DISTINCT A.id_rubrique AS id', |
@@ -846,7 +846,7 @@ discard block |
||
| 846 | 846 | $t = sql_fetsel( |
| 847 | 847 | 'date', |
| 848 | 848 | 'spip_articles', |
| 849 | - "statut='publie' AND date > " . sql_quote(date('Y-m-d H:i:s')), |
|
| 849 | + "statut='publie' AND date > ".sql_quote(date('Y-m-d H:i:s')), |
|
| 850 | 850 | '', |
| 851 | 851 | 'date', |
| 852 | 852 | '1' |
@@ -902,7 +902,7 @@ discard block |
||
| 902 | 902 | $r = sql_getfetsel( |
| 903 | 903 | 'id_rubrique', |
| 904 | 904 | 'spip_rubriques', |
| 905 | - 'titre = ' . sql_quote($titre) . ' AND id_parent=' . intval($id_parent), |
|
| 905 | + 'titre = '.sql_quote($titre).' AND id_parent='.intval($id_parent), |
|
| 906 | 906 | $groupby = [], |
| 907 | 907 | $orderby = [], |
| 908 | 908 | $limit = '', |
@@ -938,7 +938,7 @@ discard block |
||
| 938 | 938 | sql_updateq( |
| 939 | 939 | 'spip_rubriques', |
| 940 | 940 | ['id_secteur' => $id_secteur, 'lang' => $lang], |
| 941 | - 'id_rubrique=' . intval($id_rubrique), |
|
| 941 | + 'id_rubrique='.intval($id_rubrique), |
|
| 942 | 942 | [], |
| 943 | 943 | $serveur |
| 944 | 944 | ); |
@@ -19,7 +19,7 @@ discard block |
||
| 19 | 19 | */ |
| 20 | 20 | |
| 21 | 21 | if (!defined('_ECRIRE_INC_VERSION')) { |
| 22 | - return; |
|
| 22 | + return; |
|
| 23 | 23 | } |
| 24 | 24 | |
| 25 | 25 | |
@@ -55,65 +55,65 @@ discard block |
||
| 55 | 55 | * @return void |
| 56 | 56 | **/ |
| 57 | 57 | function calculer_rubriques_if($id_rubrique, $modifs, $infos = [], $postdate = false) { |
| 58 | - $statuts_publies = null; |
|
| 59 | - $neuf = false; |
|
| 60 | - |
|
| 61 | - // Compat avec l'ancienne signature |
|
| 62 | - if (is_string($infos)) { |
|
| 63 | - $infos = ['statut_ancien' => $infos]; |
|
| 64 | - } |
|
| 65 | - if (!isset($infos['statut_ancien'])) { |
|
| 66 | - $infos['statut_ancien'] = ''; |
|
| 67 | - } |
|
| 68 | - |
|
| 69 | - // On recherche quels statuts tester |
|
| 70 | - if ( |
|
| 71 | - isset($infos['objet']) |
|
| 72 | - and include_spip('inc/filtres') |
|
| 73 | - and $declaration_statut = objet_info($infos['objet'], 'statut') |
|
| 74 | - and is_array($declaration_statut) |
|
| 75 | - ) { |
|
| 76 | - foreach ($declaration_statut as $champ_statut) { |
|
| 77 | - if ($champ_statut['champ'] == 'statut') { |
|
| 78 | - $statuts_publies = array_map('trim', explode(',', $champ_statut['publie'])); |
|
| 79 | - break; // stop on a trouvé le bon champ |
|
| 80 | - } |
|
| 81 | - } |
|
| 82 | - } else { |
|
| 83 | - $statuts_publies = ['publie']; |
|
| 84 | - } |
|
| 85 | - |
|
| 86 | - if (in_array($infos['statut_ancien'], $statuts_publies)) { |
|
| 87 | - if ( |
|
| 88 | - isset($modifs['statut']) |
|
| 89 | - or isset($modifs['id_rubrique']) |
|
| 90 | - or ($postdate and strtotime($postdate) > time()) |
|
| 91 | - ) { |
|
| 92 | - $neuf |= depublier_branche_rubrique_if($id_rubrique); |
|
| 93 | - } |
|
| 94 | - // ne publier que si c'est pas un postdate, ou si la date n'est pas dans le futur |
|
| 95 | - if ($postdate) { |
|
| 96 | - calculer_prochain_postdate(true); |
|
| 97 | - $neuf |= (strtotime($postdate) <= time()); // par securite |
|
| 98 | - } elseif (isset($modifs['id_rubrique'])) { |
|
| 99 | - $neuf |= publier_branche_rubrique($modifs['id_rubrique']); |
|
| 100 | - } |
|
| 101 | - } elseif (isset($modifs['statut']) and in_array($modifs['statut'], $statuts_publies)) { |
|
| 102 | - if ($postdate) { |
|
| 103 | - calculer_prochain_postdate(true); |
|
| 104 | - $neuf |= (strtotime($postdate) <= time()); // par securite |
|
| 105 | - } else { |
|
| 106 | - $neuf |= publier_branche_rubrique($id_rubrique); |
|
| 107 | - } |
|
| 108 | - } |
|
| 109 | - |
|
| 110 | - if ($neuf) { |
|
| 111 | - // Sauver la date de la derniere mise a jour (pour menu_rubriques) |
|
| 112 | - ecrire_meta('date_calcul_rubriques', date('U')); |
|
| 113 | - } |
|
| 114 | - |
|
| 115 | - $langues = calculer_langues_utilisees(); |
|
| 116 | - ecrire_meta('langues_utilisees', $langues); |
|
| 58 | + $statuts_publies = null; |
|
| 59 | + $neuf = false; |
|
| 60 | + |
|
| 61 | + // Compat avec l'ancienne signature |
|
| 62 | + if (is_string($infos)) { |
|
| 63 | + $infos = ['statut_ancien' => $infos]; |
|
| 64 | + } |
|
| 65 | + if (!isset($infos['statut_ancien'])) { |
|
| 66 | + $infos['statut_ancien'] = ''; |
|
| 67 | + } |
|
| 68 | + |
|
| 69 | + // On recherche quels statuts tester |
|
| 70 | + if ( |
|
| 71 | + isset($infos['objet']) |
|
| 72 | + and include_spip('inc/filtres') |
|
| 73 | + and $declaration_statut = objet_info($infos['objet'], 'statut') |
|
| 74 | + and is_array($declaration_statut) |
|
| 75 | + ) { |
|
| 76 | + foreach ($declaration_statut as $champ_statut) { |
|
| 77 | + if ($champ_statut['champ'] == 'statut') { |
|
| 78 | + $statuts_publies = array_map('trim', explode(',', $champ_statut['publie'])); |
|
| 79 | + break; // stop on a trouvé le bon champ |
|
| 80 | + } |
|
| 81 | + } |
|
| 82 | + } else { |
|
| 83 | + $statuts_publies = ['publie']; |
|
| 84 | + } |
|
| 85 | + |
|
| 86 | + if (in_array($infos['statut_ancien'], $statuts_publies)) { |
|
| 87 | + if ( |
|
| 88 | + isset($modifs['statut']) |
|
| 89 | + or isset($modifs['id_rubrique']) |
|
| 90 | + or ($postdate and strtotime($postdate) > time()) |
|
| 91 | + ) { |
|
| 92 | + $neuf |= depublier_branche_rubrique_if($id_rubrique); |
|
| 93 | + } |
|
| 94 | + // ne publier que si c'est pas un postdate, ou si la date n'est pas dans le futur |
|
| 95 | + if ($postdate) { |
|
| 96 | + calculer_prochain_postdate(true); |
|
| 97 | + $neuf |= (strtotime($postdate) <= time()); // par securite |
|
| 98 | + } elseif (isset($modifs['id_rubrique'])) { |
|
| 99 | + $neuf |= publier_branche_rubrique($modifs['id_rubrique']); |
|
| 100 | + } |
|
| 101 | + } elseif (isset($modifs['statut']) and in_array($modifs['statut'], $statuts_publies)) { |
|
| 102 | + if ($postdate) { |
|
| 103 | + calculer_prochain_postdate(true); |
|
| 104 | + $neuf |= (strtotime($postdate) <= time()); // par securite |
|
| 105 | + } else { |
|
| 106 | + $neuf |= publier_branche_rubrique($id_rubrique); |
|
| 107 | + } |
|
| 108 | + } |
|
| 109 | + |
|
| 110 | + if ($neuf) { |
|
| 111 | + // Sauver la date de la derniere mise a jour (pour menu_rubriques) |
|
| 112 | + ecrire_meta('date_calcul_rubriques', date('U')); |
|
| 113 | + } |
|
| 114 | + |
|
| 115 | + $langues = calculer_langues_utilisees(); |
|
| 116 | + ecrire_meta('langues_utilisees', $langues); |
|
| 117 | 117 | } |
| 118 | 118 | |
| 119 | 119 | |
@@ -131,22 +131,22 @@ discard block |
||
| 131 | 131 | * true si le statut change effectivement |
| 132 | 132 | */ |
| 133 | 133 | function publier_branche_rubrique($id_rubrique) { |
| 134 | - $id_pred = $id_rubrique; |
|
| 135 | - while (true) { |
|
| 136 | - sql_updateq( |
|
| 137 | - 'spip_rubriques', |
|
| 138 | - ['statut' => 'publie', 'date' => date('Y-m-d H:i:s')], |
|
| 139 | - 'id_rubrique=' . intval($id_rubrique) |
|
| 140 | - ); |
|
| 141 | - $id_parent = sql_getfetsel('id_parent', 'spip_rubriques AS R', 'R.id_rubrique=' . intval($id_rubrique)); |
|
| 142 | - if (!$id_parent) { |
|
| 143 | - break; |
|
| 144 | - } |
|
| 145 | - $id_rubrique = $id_parent; |
|
| 146 | - } |
|
| 134 | + $id_pred = $id_rubrique; |
|
| 135 | + while (true) { |
|
| 136 | + sql_updateq( |
|
| 137 | + 'spip_rubriques', |
|
| 138 | + ['statut' => 'publie', 'date' => date('Y-m-d H:i:s')], |
|
| 139 | + 'id_rubrique=' . intval($id_rubrique) |
|
| 140 | + ); |
|
| 141 | + $id_parent = sql_getfetsel('id_parent', 'spip_rubriques AS R', 'R.id_rubrique=' . intval($id_rubrique)); |
|
| 142 | + if (!$id_parent) { |
|
| 143 | + break; |
|
| 144 | + } |
|
| 145 | + $id_rubrique = $id_parent; |
|
| 146 | + } |
|
| 147 | 147 | |
| 148 | 148 | # spip_log(" publier_branche_rubrique($id_rubrique $id_pred"); |
| 149 | - return $id_pred != $id_rubrique; |
|
| 149 | + return $id_pred != $id_rubrique; |
|
| 150 | 150 | } |
| 151 | 151 | |
| 152 | 152 | /** |
@@ -164,20 +164,20 @@ discard block |
||
| 164 | 164 | * true si le statut change effectivement |
| 165 | 165 | */ |
| 166 | 166 | function depublier_branche_rubrique_if($id_rubrique) { |
| 167 | - $date = date('Y-m-d H:i:s'); // figer la date |
|
| 168 | - |
|
| 169 | - # spip_log("depublier_branche_rubrique($id_rubrique ?"); |
|
| 170 | - $id_pred = $id_rubrique; |
|
| 171 | - while ($id_pred) { |
|
| 172 | - if (!depublier_rubrique_if($id_pred, $date)) { |
|
| 173 | - return $id_pred != $id_rubrique; |
|
| 174 | - } |
|
| 175 | - // passer au parent si on a depublie |
|
| 176 | - $r = sql_fetsel('id_parent', 'spip_rubriques', 'id_rubrique=' . intval($id_pred)); |
|
| 177 | - $id_pred = $r['id_parent']; |
|
| 178 | - } |
|
| 179 | - |
|
| 180 | - return $id_pred != $id_rubrique; |
|
| 167 | + $date = date('Y-m-d H:i:s'); // figer la date |
|
| 168 | + |
|
| 169 | + # spip_log("depublier_branche_rubrique($id_rubrique ?"); |
|
| 170 | + $id_pred = $id_rubrique; |
|
| 171 | + while ($id_pred) { |
|
| 172 | + if (!depublier_rubrique_if($id_pred, $date)) { |
|
| 173 | + return $id_pred != $id_rubrique; |
|
| 174 | + } |
|
| 175 | + // passer au parent si on a depublie |
|
| 176 | + $r = sql_fetsel('id_parent', 'spip_rubriques', 'id_rubrique=' . intval($id_pred)); |
|
| 177 | + $id_pred = $r['id_parent']; |
|
| 178 | + } |
|
| 179 | + |
|
| 180 | + return $id_pred != $id_rubrique; |
|
| 181 | 181 | } |
| 182 | 182 | |
| 183 | 183 | /** |
@@ -194,61 +194,61 @@ discard block |
||
| 194 | 194 | * true si la rubrique a été dépubliée |
| 195 | 195 | */ |
| 196 | 196 | function depublier_rubrique_if($id_rubrique, $date = null) { |
| 197 | - if (is_null($date)) { |
|
| 198 | - $date = date('Y-m-d H:i:s'); |
|
| 199 | - } |
|
| 200 | - $postdates = ($GLOBALS['meta']['post_dates'] == 'non') ? |
|
| 201 | - ' AND date <= ' . sql_quote($date) : ''; |
|
| 202 | - |
|
| 203 | - if (!$id_rubrique = intval($id_rubrique)) { |
|
| 204 | - return false; |
|
| 205 | - } |
|
| 206 | - |
|
| 207 | - // verifier qu'elle existe et est bien publiee |
|
| 208 | - $r = sql_fetsel('id_rubrique,statut', 'spip_rubriques', 'id_rubrique=' . intval($id_rubrique)); |
|
| 209 | - if (!$r or $r['statut'] !== 'publie') { |
|
| 210 | - return false; |
|
| 211 | - } |
|
| 212 | - |
|
| 213 | - // On met le nombre de chaque type d'enfants dans un tableau |
|
| 214 | - // Le type de l'objet est au pluriel |
|
| 215 | - $compte = [ |
|
| 216 | - 'articles' => sql_countsel( |
|
| 217 | - 'spip_articles', |
|
| 218 | - 'id_rubrique=' . intval($id_rubrique) . " AND statut='publie'$postdates" |
|
| 219 | - ), |
|
| 220 | - 'rubriques' => sql_countsel('spip_rubriques', 'id_parent=' . intval($id_rubrique) . " AND statut='publie'"), |
|
| 221 | - 'documents' => sql_countsel( |
|
| 222 | - 'spip_documents AS D JOIN spip_documents_liens AS L ON D.id_document=L.id_document', |
|
| 223 | - 'L.id_objet=' . intval($id_rubrique) . " AND L.objet='rubrique' and D.mode NOT IN('logoon', 'logooff') " |
|
| 224 | - ) |
|
| 225 | - ]; |
|
| 226 | - |
|
| 227 | - // On passe le tableau des comptes dans un pipeline pour que les plugins puissent ajouter (ou retirer) des enfants |
|
| 228 | - $compte = pipeline( |
|
| 229 | - 'objet_compte_enfants', |
|
| 230 | - [ |
|
| 231 | - 'args' => [ |
|
| 232 | - 'objet' => 'rubrique', |
|
| 233 | - 'id_objet' => $id_rubrique, |
|
| 234 | - 'statut' => 'publie', |
|
| 235 | - 'date' => $date |
|
| 236 | - ], |
|
| 237 | - 'data' => $compte |
|
| 238 | - ] |
|
| 239 | - ); |
|
| 240 | - |
|
| 241 | - // S'il y a au moins un enfant de n'importe quoi, on ne dépublie pas |
|
| 242 | - foreach ($compte as $objet => $n) { |
|
| 243 | - if ($n) { |
|
| 244 | - return false; |
|
| 245 | - } |
|
| 246 | - } |
|
| 247 | - |
|
| 248 | - sql_updateq('spip_rubriques', ['statut' => 'prepa'], 'id_rubrique=' . intval($id_rubrique)); |
|
| 197 | + if (is_null($date)) { |
|
| 198 | + $date = date('Y-m-d H:i:s'); |
|
| 199 | + } |
|
| 200 | + $postdates = ($GLOBALS['meta']['post_dates'] == 'non') ? |
|
| 201 | + ' AND date <= ' . sql_quote($date) : ''; |
|
| 202 | + |
|
| 203 | + if (!$id_rubrique = intval($id_rubrique)) { |
|
| 204 | + return false; |
|
| 205 | + } |
|
| 206 | + |
|
| 207 | + // verifier qu'elle existe et est bien publiee |
|
| 208 | + $r = sql_fetsel('id_rubrique,statut', 'spip_rubriques', 'id_rubrique=' . intval($id_rubrique)); |
|
| 209 | + if (!$r or $r['statut'] !== 'publie') { |
|
| 210 | + return false; |
|
| 211 | + } |
|
| 212 | + |
|
| 213 | + // On met le nombre de chaque type d'enfants dans un tableau |
|
| 214 | + // Le type de l'objet est au pluriel |
|
| 215 | + $compte = [ |
|
| 216 | + 'articles' => sql_countsel( |
|
| 217 | + 'spip_articles', |
|
| 218 | + 'id_rubrique=' . intval($id_rubrique) . " AND statut='publie'$postdates" |
|
| 219 | + ), |
|
| 220 | + 'rubriques' => sql_countsel('spip_rubriques', 'id_parent=' . intval($id_rubrique) . " AND statut='publie'"), |
|
| 221 | + 'documents' => sql_countsel( |
|
| 222 | + 'spip_documents AS D JOIN spip_documents_liens AS L ON D.id_document=L.id_document', |
|
| 223 | + 'L.id_objet=' . intval($id_rubrique) . " AND L.objet='rubrique' and D.mode NOT IN('logoon', 'logooff') " |
|
| 224 | + ) |
|
| 225 | + ]; |
|
| 226 | + |
|
| 227 | + // On passe le tableau des comptes dans un pipeline pour que les plugins puissent ajouter (ou retirer) des enfants |
|
| 228 | + $compte = pipeline( |
|
| 229 | + 'objet_compte_enfants', |
|
| 230 | + [ |
|
| 231 | + 'args' => [ |
|
| 232 | + 'objet' => 'rubrique', |
|
| 233 | + 'id_objet' => $id_rubrique, |
|
| 234 | + 'statut' => 'publie', |
|
| 235 | + 'date' => $date |
|
| 236 | + ], |
|
| 237 | + 'data' => $compte |
|
| 238 | + ] |
|
| 239 | + ); |
|
| 240 | + |
|
| 241 | + // S'il y a au moins un enfant de n'importe quoi, on ne dépublie pas |
|
| 242 | + foreach ($compte as $objet => $n) { |
|
| 243 | + if ($n) { |
|
| 244 | + return false; |
|
| 245 | + } |
|
| 246 | + } |
|
| 247 | + |
|
| 248 | + sql_updateq('spip_rubriques', ['statut' => 'prepa'], 'id_rubrique=' . intval($id_rubrique)); |
|
| 249 | 249 | |
| 250 | 250 | # spip_log("depublier_rubrique $id_pred"); |
| 251 | - return true; |
|
| 251 | + return true; |
|
| 252 | 252 | } |
| 253 | 253 | |
| 254 | 254 | |
@@ -271,18 +271,18 @@ discard block |
||
| 271 | 271 | **/ |
| 272 | 272 | function calculer_rubriques() { |
| 273 | 273 | |
| 274 | - calculer_rubriques_publiees(); |
|
| 274 | + calculer_rubriques_publiees(); |
|
| 275 | 275 | |
| 276 | - // Apres chaque (de)publication |
|
| 277 | - // recalculer les langues utilisees sur le site |
|
| 278 | - $langues = calculer_langues_utilisees(); |
|
| 279 | - ecrire_meta('langues_utilisees', $langues); |
|
| 276 | + // Apres chaque (de)publication |
|
| 277 | + // recalculer les langues utilisees sur le site |
|
| 278 | + $langues = calculer_langues_utilisees(); |
|
| 279 | + ecrire_meta('langues_utilisees', $langues); |
|
| 280 | 280 | |
| 281 | - // Sauver la date de la derniere mise a jour (pour menu_rubriques) |
|
| 282 | - ecrire_meta('date_calcul_rubriques', date('U')); |
|
| 281 | + // Sauver la date de la derniere mise a jour (pour menu_rubriques) |
|
| 282 | + ecrire_meta('date_calcul_rubriques', date('U')); |
|
| 283 | 283 | |
| 284 | - // on calcule la date du prochain article post-date |
|
| 285 | - calculer_prochain_postdate(); |
|
| 284 | + // on calcule la date du prochain article post-date |
|
| 285 | + calculer_prochain_postdate(); |
|
| 286 | 286 | } |
| 287 | 287 | |
| 288 | 288 | |
@@ -299,61 +299,61 @@ discard block |
||
| 299 | 299 | **/ |
| 300 | 300 | function calculer_rubriques_publiees() { |
| 301 | 301 | |
| 302 | - // Mettre les compteurs a zero |
|
| 303 | - sql_updateq('spip_rubriques', ['date_tmp' => '0000-00-00 00:00:00', 'statut_tmp' => 'prepa']); |
|
| 304 | - |
|
| 305 | - // |
|
| 306 | - // Publier et dater les rubriques qui ont un article publie |
|
| 307 | - // |
|
| 308 | - |
|
| 309 | - // Afficher les articles post-dates ? |
|
| 310 | - $postdates = ($GLOBALS['meta']['post_dates'] == 'non') ? |
|
| 311 | - 'AND A.date <= ' . sql_quote(date('Y-m-d H:i:s')) : ''; |
|
| 312 | - |
|
| 313 | - $r = sql_select( |
|
| 314 | - 'R.id_rubrique AS id, max(A.date) AS date_h', |
|
| 315 | - 'spip_rubriques AS R JOIN spip_articles AS A ON R.id_rubrique = A.id_rubrique', |
|
| 316 | - "A.date>R.date_tmp AND A.statut='publie' $postdates ", |
|
| 317 | - 'R.id_rubrique' |
|
| 318 | - ); |
|
| 319 | - while ($row = sql_fetch($r)) { |
|
| 320 | - sql_updateq( |
|
| 321 | - 'spip_rubriques', |
|
| 322 | - ['statut_tmp' => 'publie', 'date_tmp' => $row['date_h']], |
|
| 323 | - 'id_rubrique=' . intval($row['id']) |
|
| 324 | - ); |
|
| 325 | - } |
|
| 326 | - |
|
| 327 | - // point d'entree pour permettre a des plugins de gerer le statut |
|
| 328 | - // autrement (par ex: toute rubrique est publiee des sa creation) |
|
| 329 | - // Ce pipeline fait ce qu'il veut, mais s'il touche aux statuts/dates |
|
| 330 | - // c'est statut_tmp/date_tmp qu'il doit modifier |
|
| 331 | - // [C'est un trigger... a renommer en trig_calculer_rubriques ?] |
|
| 332 | - pipeline('calculer_rubriques', null); |
|
| 333 | - |
|
| 334 | - |
|
| 335 | - // Les rubriques qui ont une rubrique fille plus recente |
|
| 336 | - // on tourne tant que les donnees remontent vers la racine. |
|
| 337 | - do { |
|
| 338 | - $continuer = false; |
|
| 339 | - $r = sql_select( |
|
| 340 | - 'R.id_rubrique AS id, max(SR.date_tmp) AS date_h', |
|
| 341 | - 'spip_rubriques AS R JOIN spip_rubriques AS SR ON R.id_rubrique = SR.id_parent', |
|
| 342 | - "(SR.date_tmp>R.date_tmp OR R.statut_tmp<>'publie') AND SR.statut_tmp='publie' ", |
|
| 343 | - 'R.id_rubrique' |
|
| 344 | - ); |
|
| 345 | - while ($row = sql_fetch($r)) { |
|
| 346 | - sql_updateq( |
|
| 347 | - 'spip_rubriques', |
|
| 348 | - ['statut_tmp' => 'publie', 'date_tmp' => $row['date_h']], |
|
| 349 | - 'id_rubrique=' . intval($row['id']) |
|
| 350 | - ); |
|
| 351 | - $continuer = true; |
|
| 352 | - } |
|
| 353 | - } while ($continuer); |
|
| 354 | - |
|
| 355 | - // Enregistrement des modifs |
|
| 356 | - sql_update('spip_rubriques', ['date' => 'date_tmp', 'statut' => 'statut_tmp']); |
|
| 302 | + // Mettre les compteurs a zero |
|
| 303 | + sql_updateq('spip_rubriques', ['date_tmp' => '0000-00-00 00:00:00', 'statut_tmp' => 'prepa']); |
|
| 304 | + |
|
| 305 | + // |
|
| 306 | + // Publier et dater les rubriques qui ont un article publie |
|
| 307 | + // |
|
| 308 | + |
|
| 309 | + // Afficher les articles post-dates ? |
|
| 310 | + $postdates = ($GLOBALS['meta']['post_dates'] == 'non') ? |
|
| 311 | + 'AND A.date <= ' . sql_quote(date('Y-m-d H:i:s')) : ''; |
|
| 312 | + |
|
| 313 | + $r = sql_select( |
|
| 314 | + 'R.id_rubrique AS id, max(A.date) AS date_h', |
|
| 315 | + 'spip_rubriques AS R JOIN spip_articles AS A ON R.id_rubrique = A.id_rubrique', |
|
| 316 | + "A.date>R.date_tmp AND A.statut='publie' $postdates ", |
|
| 317 | + 'R.id_rubrique' |
|
| 318 | + ); |
|
| 319 | + while ($row = sql_fetch($r)) { |
|
| 320 | + sql_updateq( |
|
| 321 | + 'spip_rubriques', |
|
| 322 | + ['statut_tmp' => 'publie', 'date_tmp' => $row['date_h']], |
|
| 323 | + 'id_rubrique=' . intval($row['id']) |
|
| 324 | + ); |
|
| 325 | + } |
|
| 326 | + |
|
| 327 | + // point d'entree pour permettre a des plugins de gerer le statut |
|
| 328 | + // autrement (par ex: toute rubrique est publiee des sa creation) |
|
| 329 | + // Ce pipeline fait ce qu'il veut, mais s'il touche aux statuts/dates |
|
| 330 | + // c'est statut_tmp/date_tmp qu'il doit modifier |
|
| 331 | + // [C'est un trigger... a renommer en trig_calculer_rubriques ?] |
|
| 332 | + pipeline('calculer_rubriques', null); |
|
| 333 | + |
|
| 334 | + |
|
| 335 | + // Les rubriques qui ont une rubrique fille plus recente |
|
| 336 | + // on tourne tant que les donnees remontent vers la racine. |
|
| 337 | + do { |
|
| 338 | + $continuer = false; |
|
| 339 | + $r = sql_select( |
|
| 340 | + 'R.id_rubrique AS id, max(SR.date_tmp) AS date_h', |
|
| 341 | + 'spip_rubriques AS R JOIN spip_rubriques AS SR ON R.id_rubrique = SR.id_parent', |
|
| 342 | + "(SR.date_tmp>R.date_tmp OR R.statut_tmp<>'publie') AND SR.statut_tmp='publie' ", |
|
| 343 | + 'R.id_rubrique' |
|
| 344 | + ); |
|
| 345 | + while ($row = sql_fetch($r)) { |
|
| 346 | + sql_updateq( |
|
| 347 | + 'spip_rubriques', |
|
| 348 | + ['statut_tmp' => 'publie', 'date_tmp' => $row['date_h']], |
|
| 349 | + 'id_rubrique=' . intval($row['id']) |
|
| 350 | + ); |
|
| 351 | + $continuer = true; |
|
| 352 | + } |
|
| 353 | + } while ($continuer); |
|
| 354 | + |
|
| 355 | + // Enregistrement des modifs |
|
| 356 | + sql_update('spip_rubriques', ['date' => 'date_tmp', 'statut' => 'statut_tmp']); |
|
| 357 | 357 | } |
| 358 | 358 | |
| 359 | 359 | /** |
@@ -368,123 +368,123 @@ discard block |
||
| 368 | 368 | * @return void |
| 369 | 369 | **/ |
| 370 | 370 | function propager_les_secteurs() { |
| 371 | - // Profondeur 0 |
|
| 372 | - // Toutes les rubriques racines sont de profondeur 0 |
|
| 373 | - // et fixer les id_secteur des rubriques racines |
|
| 374 | - sql_update('spip_rubriques', ['id_secteur' => 'id_rubrique', 'profondeur' => 0], 'id_parent=0'); |
|
| 375 | - // Toute rubrique non racine est de profondeur >0 |
|
| 376 | - sql_updateq('spip_rubriques', ['profondeur' => 1], 'id_parent<>0 AND profondeur=0'); |
|
| 377 | - |
|
| 378 | - // securite : pas plus d'iteration que de rubriques dans la base |
|
| 379 | - $maxiter = sql_countsel('spip_rubriques'); |
|
| 380 | - |
|
| 381 | - // reparer les rubriques qui n'ont pas l'id_secteur de leur parent |
|
| 382 | - // on fait profondeur par profondeur |
|
| 383 | - |
|
| 384 | - $prof = 0; |
|
| 385 | - do { |
|
| 386 | - $continuer = false; |
|
| 387 | - |
|
| 388 | - // Par recursivite : si toutes les rubriques de profondeur $prof sont bonnes |
|
| 389 | - // on fixe le profondeur $prof+1 |
|
| 390 | - |
|
| 391 | - // Toutes les rubriques dont le parent est de profondeur $prof ont une profondeur $prof+1 |
|
| 392 | - // on teste A.profondeur > $prof+1 car : |
|
| 393 | - // - toutes les rubriques de profondeur 0 à $prof sont bonnes |
|
| 394 | - // - si A.profondeur = $prof+1 c'est bon |
|
| 395 | - // - cela nous protege de la boucle infinie en cas de reference circulaire dans les rubriques |
|
| 396 | - $maxiter2 = $maxiter; |
|
| 397 | - while ( |
|
| 398 | - $maxiter2-- |
|
| 399 | - and $rows = sql_allfetsel( |
|
| 400 | - 'A.id_rubrique AS id, R.id_secteur AS id_secteur, R.profondeur+1 as profondeur', |
|
| 401 | - 'spip_rubriques AS A JOIN spip_rubriques AS R ON A.id_parent = R.id_rubrique', |
|
| 402 | - 'R.profondeur=' . intval($prof) . ' AND (A.id_secteur <> R.id_secteur OR A.profondeur > R.profondeur+1)', |
|
| 403 | - '', |
|
| 404 | - 'R.id_secteur', |
|
| 405 | - '0,100' |
|
| 406 | - ) |
|
| 407 | - ) { |
|
| 408 | - $id_secteur = null; |
|
| 409 | - $ids = []; |
|
| 410 | - while ($row = array_shift($rows)) { |
|
| 411 | - if ($row['id_secteur'] !== $id_secteur) { |
|
| 412 | - if (count($ids)) { |
|
| 413 | - sql_updateq( |
|
| 414 | - 'spip_rubriques', |
|
| 415 | - ['id_secteur' => $id_secteur, 'profondeur' => $prof + 1], |
|
| 416 | - sql_in('id_rubrique', $ids) |
|
| 417 | - ); |
|
| 418 | - } |
|
| 419 | - $id_secteur = $row['id_secteur']; |
|
| 420 | - $ids = []; |
|
| 421 | - } |
|
| 422 | - $ids[] = $row['id']; |
|
| 423 | - } |
|
| 424 | - if (count($ids)) { |
|
| 425 | - sql_updateq( |
|
| 426 | - 'spip_rubriques', |
|
| 427 | - ['id_secteur' => $id_secteur, 'profondeur' => $prof + 1], |
|
| 428 | - sql_in('id_rubrique', $ids) |
|
| 429 | - ); |
|
| 430 | - } |
|
| 431 | - } |
|
| 432 | - |
|
| 433 | - |
|
| 434 | - // Toutes les rubriques de profondeur $prof+1 qui n'ont pas un parent de profondeur $prof sont decalees |
|
| 435 | - $maxiter2 = $maxiter; |
|
| 436 | - while ( |
|
| 437 | - $maxiter2-- |
|
| 438 | - and $rows = sql_allfetsel( |
|
| 439 | - 'id_rubrique as id', |
|
| 440 | - 'spip_rubriques', |
|
| 441 | - 'profondeur=' . intval($prof + 1) . ' AND id_parent NOT IN (' . sql_get_select( |
|
| 442 | - 'zzz.id_rubrique', |
|
| 443 | - 'spip_rubriques AS zzz', |
|
| 444 | - 'zzz.profondeur=' . intval($prof) |
|
| 445 | - ) . ')', |
|
| 446 | - '', |
|
| 447 | - '', |
|
| 448 | - '0,100' |
|
| 449 | - ) |
|
| 450 | - ) { |
|
| 451 | - $rows = array_column($rows, 'id'); |
|
| 452 | - sql_updateq('spip_rubriques', ['profondeur' => $prof + 2], sql_in('id_rubrique', $rows)); |
|
| 453 | - } |
|
| 454 | - |
|
| 455 | - // ici on a fini de valider $prof+1, toutes les rubriques de prondeur 0 a $prof+1 sont OK |
|
| 456 | - // si pas de rubrique a profondeur $prof+1 pas la peine de continuer |
|
| 457 | - // si il reste des rubriques non vues, c'est une branche morte ou reference circulaire (base foireuse) |
|
| 458 | - // on arrete les frais |
|
| 459 | - if (sql_countsel('spip_rubriques', 'profondeur=' . intval($prof + 1))) { |
|
| 460 | - $prof++; |
|
| 461 | - $continuer = true; |
|
| 462 | - } |
|
| 463 | - } while ($continuer and $maxiter--); |
|
| 464 | - |
|
| 465 | - // loger si la table des rubriques semble foireuse |
|
| 466 | - // et mettre un id_secteur=0 sur ces rubriques pour eviter toute selection par les boucles |
|
| 467 | - if (sql_countsel('spip_rubriques', 'profondeur>' . intval($prof + 1))) { |
|
| 468 | - spip_log( |
|
| 469 | - 'Les rubriques de profondeur>' . ($prof + 1) . ' semblent suspectes (branches morte ou reference circulaire dans les parents)', |
|
| 470 | - _LOG_CRITIQUE |
|
| 471 | - ); |
|
| 472 | - sql_update('spip_rubriques', ['id_secteur' => 0], 'profondeur>' . intval($prof + 1)); |
|
| 473 | - } |
|
| 474 | - |
|
| 475 | - // reparer les articles |
|
| 476 | - $r = sql_select( |
|
| 477 | - 'A.id_article AS id, R.id_secteur AS secteur', |
|
| 478 | - 'spip_articles AS A, spip_rubriques AS R', |
|
| 479 | - 'A.id_rubrique = R.id_rubrique AND A.id_secteur <> R.id_secteur' |
|
| 480 | - ); |
|
| 481 | - |
|
| 482 | - while ($row = sql_fetch($r)) { |
|
| 483 | - sql_update('spip_articles', ['id_secteur' => $row['secteur']], 'id_article=' . intval($row['id'])); |
|
| 484 | - } |
|
| 485 | - |
|
| 486 | - // avertir les plugins qui peuvent faire leur mises a jour egalement |
|
| 487 | - pipeline('trig_propager_les_secteurs', ''); |
|
| 371 | + // Profondeur 0 |
|
| 372 | + // Toutes les rubriques racines sont de profondeur 0 |
|
| 373 | + // et fixer les id_secteur des rubriques racines |
|
| 374 | + sql_update('spip_rubriques', ['id_secteur' => 'id_rubrique', 'profondeur' => 0], 'id_parent=0'); |
|
| 375 | + // Toute rubrique non racine est de profondeur >0 |
|
| 376 | + sql_updateq('spip_rubriques', ['profondeur' => 1], 'id_parent<>0 AND profondeur=0'); |
|
| 377 | + |
|
| 378 | + // securite : pas plus d'iteration que de rubriques dans la base |
|
| 379 | + $maxiter = sql_countsel('spip_rubriques'); |
|
| 380 | + |
|
| 381 | + // reparer les rubriques qui n'ont pas l'id_secteur de leur parent |
|
| 382 | + // on fait profondeur par profondeur |
|
| 383 | + |
|
| 384 | + $prof = 0; |
|
| 385 | + do { |
|
| 386 | + $continuer = false; |
|
| 387 | + |
|
| 388 | + // Par recursivite : si toutes les rubriques de profondeur $prof sont bonnes |
|
| 389 | + // on fixe le profondeur $prof+1 |
|
| 390 | + |
|
| 391 | + // Toutes les rubriques dont le parent est de profondeur $prof ont une profondeur $prof+1 |
|
| 392 | + // on teste A.profondeur > $prof+1 car : |
|
| 393 | + // - toutes les rubriques de profondeur 0 à $prof sont bonnes |
|
| 394 | + // - si A.profondeur = $prof+1 c'est bon |
|
| 395 | + // - cela nous protege de la boucle infinie en cas de reference circulaire dans les rubriques |
|
| 396 | + $maxiter2 = $maxiter; |
|
| 397 | + while ( |
|
| 398 | + $maxiter2-- |
|
| 399 | + and $rows = sql_allfetsel( |
|
| 400 | + 'A.id_rubrique AS id, R.id_secteur AS id_secteur, R.profondeur+1 as profondeur', |
|
| 401 | + 'spip_rubriques AS A JOIN spip_rubriques AS R ON A.id_parent = R.id_rubrique', |
|
| 402 | + 'R.profondeur=' . intval($prof) . ' AND (A.id_secteur <> R.id_secteur OR A.profondeur > R.profondeur+1)', |
|
| 403 | + '', |
|
| 404 | + 'R.id_secteur', |
|
| 405 | + '0,100' |
|
| 406 | + ) |
|
| 407 | + ) { |
|
| 408 | + $id_secteur = null; |
|
| 409 | + $ids = []; |
|
| 410 | + while ($row = array_shift($rows)) { |
|
| 411 | + if ($row['id_secteur'] !== $id_secteur) { |
|
| 412 | + if (count($ids)) { |
|
| 413 | + sql_updateq( |
|
| 414 | + 'spip_rubriques', |
|
| 415 | + ['id_secteur' => $id_secteur, 'profondeur' => $prof + 1], |
|
| 416 | + sql_in('id_rubrique', $ids) |
|
| 417 | + ); |
|
| 418 | + } |
|
| 419 | + $id_secteur = $row['id_secteur']; |
|
| 420 | + $ids = []; |
|
| 421 | + } |
|
| 422 | + $ids[] = $row['id']; |
|
| 423 | + } |
|
| 424 | + if (count($ids)) { |
|
| 425 | + sql_updateq( |
|
| 426 | + 'spip_rubriques', |
|
| 427 | + ['id_secteur' => $id_secteur, 'profondeur' => $prof + 1], |
|
| 428 | + sql_in('id_rubrique', $ids) |
|
| 429 | + ); |
|
| 430 | + } |
|
| 431 | + } |
|
| 432 | + |
|
| 433 | + |
|
| 434 | + // Toutes les rubriques de profondeur $prof+1 qui n'ont pas un parent de profondeur $prof sont decalees |
|
| 435 | + $maxiter2 = $maxiter; |
|
| 436 | + while ( |
|
| 437 | + $maxiter2-- |
|
| 438 | + and $rows = sql_allfetsel( |
|
| 439 | + 'id_rubrique as id', |
|
| 440 | + 'spip_rubriques', |
|
| 441 | + 'profondeur=' . intval($prof + 1) . ' AND id_parent NOT IN (' . sql_get_select( |
|
| 442 | + 'zzz.id_rubrique', |
|
| 443 | + 'spip_rubriques AS zzz', |
|
| 444 | + 'zzz.profondeur=' . intval($prof) |
|
| 445 | + ) . ')', |
|
| 446 | + '', |
|
| 447 | + '', |
|
| 448 | + '0,100' |
|
| 449 | + ) |
|
| 450 | + ) { |
|
| 451 | + $rows = array_column($rows, 'id'); |
|
| 452 | + sql_updateq('spip_rubriques', ['profondeur' => $prof + 2], sql_in('id_rubrique', $rows)); |
|
| 453 | + } |
|
| 454 | + |
|
| 455 | + // ici on a fini de valider $prof+1, toutes les rubriques de prondeur 0 a $prof+1 sont OK |
|
| 456 | + // si pas de rubrique a profondeur $prof+1 pas la peine de continuer |
|
| 457 | + // si il reste des rubriques non vues, c'est une branche morte ou reference circulaire (base foireuse) |
|
| 458 | + // on arrete les frais |
|
| 459 | + if (sql_countsel('spip_rubriques', 'profondeur=' . intval($prof + 1))) { |
|
| 460 | + $prof++; |
|
| 461 | + $continuer = true; |
|
| 462 | + } |
|
| 463 | + } while ($continuer and $maxiter--); |
|
| 464 | + |
|
| 465 | + // loger si la table des rubriques semble foireuse |
|
| 466 | + // et mettre un id_secteur=0 sur ces rubriques pour eviter toute selection par les boucles |
|
| 467 | + if (sql_countsel('spip_rubriques', 'profondeur>' . intval($prof + 1))) { |
|
| 468 | + spip_log( |
|
| 469 | + 'Les rubriques de profondeur>' . ($prof + 1) . ' semblent suspectes (branches morte ou reference circulaire dans les parents)', |
|
| 470 | + _LOG_CRITIQUE |
|
| 471 | + ); |
|
| 472 | + sql_update('spip_rubriques', ['id_secteur' => 0], 'profondeur>' . intval($prof + 1)); |
|
| 473 | + } |
|
| 474 | + |
|
| 475 | + // reparer les articles |
|
| 476 | + $r = sql_select( |
|
| 477 | + 'A.id_article AS id, R.id_secteur AS secteur', |
|
| 478 | + 'spip_articles AS A, spip_rubriques AS R', |
|
| 479 | + 'A.id_rubrique = R.id_rubrique AND A.id_secteur <> R.id_secteur' |
|
| 480 | + ); |
|
| 481 | + |
|
| 482 | + while ($row = sql_fetch($r)) { |
|
| 483 | + sql_update('spip_articles', ['id_secteur' => $row['secteur']], 'id_article=' . intval($row['id'])); |
|
| 484 | + } |
|
| 485 | + |
|
| 486 | + // avertir les plugins qui peuvent faire leur mises a jour egalement |
|
| 487 | + pipeline('trig_propager_les_secteurs', ''); |
|
| 488 | 488 | } |
| 489 | 489 | |
| 490 | 490 | |
@@ -499,23 +499,23 @@ discard block |
||
| 499 | 499 | * true si un changement a eu lieu |
| 500 | 500 | **/ |
| 501 | 501 | function calculer_langues_rubriques_etape() { |
| 502 | - $s = sql_select( |
|
| 503 | - 'A.id_rubrique AS id_rubrique, R.lang AS lang', |
|
| 504 | - 'spip_rubriques AS A, spip_rubriques AS R', |
|
| 505 | - "A.id_parent = R.id_rubrique AND A.langue_choisie != 'oui' AND R.lang<>'' AND R.lang<>A.lang" |
|
| 506 | - ); |
|
| 507 | - |
|
| 508 | - $t = false; |
|
| 509 | - while ($row = sql_fetch($s)) { |
|
| 510 | - $id_rubrique = $row['id_rubrique']; |
|
| 511 | - $t = sql_updateq( |
|
| 512 | - 'spip_rubriques', |
|
| 513 | - ['lang' => $row['lang'], 'langue_choisie' => 'non'], |
|
| 514 | - 'id_rubrique=' . intval($id_rubrique) |
|
| 515 | - ); |
|
| 516 | - } |
|
| 517 | - |
|
| 518 | - return $t; |
|
| 502 | + $s = sql_select( |
|
| 503 | + 'A.id_rubrique AS id_rubrique, R.lang AS lang', |
|
| 504 | + 'spip_rubriques AS A, spip_rubriques AS R', |
|
| 505 | + "A.id_parent = R.id_rubrique AND A.langue_choisie != 'oui' AND R.lang<>'' AND R.lang<>A.lang" |
|
| 506 | + ); |
|
| 507 | + |
|
| 508 | + $t = false; |
|
| 509 | + while ($row = sql_fetch($s)) { |
|
| 510 | + $id_rubrique = $row['id_rubrique']; |
|
| 511 | + $t = sql_updateq( |
|
| 512 | + 'spip_rubriques', |
|
| 513 | + ['lang' => $row['lang'], 'langue_choisie' => 'non'], |
|
| 514 | + 'id_rubrique=' . intval($id_rubrique) |
|
| 515 | + ); |
|
| 516 | + } |
|
| 517 | + |
|
| 518 | + return $t; |
|
| 519 | 519 | } |
| 520 | 520 | |
| 521 | 521 | /** |
@@ -535,38 +535,38 @@ discard block |
||
| 535 | 535 | **/ |
| 536 | 536 | function calculer_langues_rubriques() { |
| 537 | 537 | |
| 538 | - // rubriques (recursivite) |
|
| 539 | - sql_updateq( |
|
| 540 | - 'spip_rubriques', |
|
| 541 | - ['lang' => $GLOBALS['meta']['langue_site'], 'langue_choisie' => 'non'], |
|
| 542 | - "id_parent=0 AND langue_choisie != 'oui'" |
|
| 543 | - ); |
|
| 544 | - while (calculer_langues_rubriques_etape()) { |
|
| 545 | - ; |
|
| 546 | - } |
|
| 547 | - |
|
| 548 | - // articles |
|
| 549 | - $s = sql_select( |
|
| 550 | - 'A.id_article AS id_article, R.lang AS lang', |
|
| 551 | - 'spip_articles AS A, spip_rubriques AS R', |
|
| 552 | - "A.id_rubrique = R.id_rubrique AND A.langue_choisie != 'oui' AND (length(A.lang)=0 OR length(R.lang)>0) AND R.lang<>A.lang" |
|
| 553 | - ); |
|
| 554 | - while ($row = sql_fetch($s)) { |
|
| 555 | - $id_article = $row['id_article']; |
|
| 556 | - sql_updateq( |
|
| 557 | - 'spip_articles', |
|
| 558 | - ['lang' => $row['lang'], 'langue_choisie' => 'non'], |
|
| 559 | - 'id_article=' . intval($id_article) |
|
| 560 | - ); |
|
| 561 | - } |
|
| 562 | - |
|
| 563 | - if ($GLOBALS['meta']['multi_rubriques'] == 'oui') { |
|
| 564 | - $langues = calculer_langues_utilisees(); |
|
| 565 | - ecrire_meta('langues_utilisees', $langues); |
|
| 566 | - } |
|
| 567 | - |
|
| 568 | - // avertir les plugins qui peuvent faire leur mises a jour egalement |
|
| 569 | - pipeline('trig_calculer_langues_rubriques', ''); |
|
| 538 | + // rubriques (recursivite) |
|
| 539 | + sql_updateq( |
|
| 540 | + 'spip_rubriques', |
|
| 541 | + ['lang' => $GLOBALS['meta']['langue_site'], 'langue_choisie' => 'non'], |
|
| 542 | + "id_parent=0 AND langue_choisie != 'oui'" |
|
| 543 | + ); |
|
| 544 | + while (calculer_langues_rubriques_etape()) { |
|
| 545 | + ; |
|
| 546 | + } |
|
| 547 | + |
|
| 548 | + // articles |
|
| 549 | + $s = sql_select( |
|
| 550 | + 'A.id_article AS id_article, R.lang AS lang', |
|
| 551 | + 'spip_articles AS A, spip_rubriques AS R', |
|
| 552 | + "A.id_rubrique = R.id_rubrique AND A.langue_choisie != 'oui' AND (length(A.lang)=0 OR length(R.lang)>0) AND R.lang<>A.lang" |
|
| 553 | + ); |
|
| 554 | + while ($row = sql_fetch($s)) { |
|
| 555 | + $id_article = $row['id_article']; |
|
| 556 | + sql_updateq( |
|
| 557 | + 'spip_articles', |
|
| 558 | + ['lang' => $row['lang'], 'langue_choisie' => 'non'], |
|
| 559 | + 'id_article=' . intval($id_article) |
|
| 560 | + ); |
|
| 561 | + } |
|
| 562 | + |
|
| 563 | + if ($GLOBALS['meta']['multi_rubriques'] == 'oui') { |
|
| 564 | + $langues = calculer_langues_utilisees(); |
|
| 565 | + ecrire_meta('langues_utilisees', $langues); |
|
| 566 | + } |
|
| 567 | + |
|
| 568 | + // avertir les plugins qui peuvent faire leur mises a jour egalement |
|
| 569 | + pipeline('trig_calculer_langues_rubriques', ''); |
|
| 570 | 570 | } |
| 571 | 571 | |
| 572 | 572 | |
@@ -583,80 +583,80 @@ discard block |
||
| 583 | 583 | * Liste des langues utilisées séparées par des virgules |
| 584 | 584 | **/ |
| 585 | 585 | function calculer_langues_utilisees($serveur = '') { |
| 586 | - include_spip('public/interfaces'); |
|
| 587 | - include_spip('public/compiler'); |
|
| 588 | - include_spip('public/composer'); |
|
| 589 | - include_spip('public/phraser_html'); |
|
| 590 | - $langues = []; |
|
| 591 | - |
|
| 592 | - $langues[$GLOBALS['meta']['langue_site']] = 1; |
|
| 593 | - |
|
| 594 | - include_spip('base/objets'); |
|
| 595 | - $tables = lister_tables_objets_sql(); |
|
| 596 | - $trouver_table = charger_fonction('trouver_table', 'base'); |
|
| 597 | - |
|
| 598 | - foreach (array_keys($tables) as $t) { |
|
| 599 | - $desc = $trouver_table($t, $serveur); |
|
| 600 | - // c'est une table avec des langues |
|
| 601 | - if ( |
|
| 602 | - $desc['exist'] |
|
| 603 | - and isset($desc['field']['lang']) |
|
| 604 | - and isset($desc['field']['langue_choisie']) |
|
| 605 | - ) { |
|
| 606 | - $boucle = new Boucle(); |
|
| 607 | - $boucle->show = $desc; |
|
| 608 | - $boucle->nom = 'calculer_langues_utilisees'; |
|
| 609 | - $boucle->id_boucle = $desc['table_objet']; |
|
| 610 | - $boucle->id_table = $desc['table_objet']; |
|
| 611 | - $boucle->primary = $desc['key']['PRIMARY KEY'] ?? ''; |
|
| 612 | - $boucle->sql_serveur = $serveur; |
|
| 613 | - $boucle->select[] = 'DISTINCT lang'; |
|
| 614 | - $boucle->from[$desc['table_objet']] = $t; |
|
| 615 | - $boucle->separateur[] = ','; |
|
| 616 | - $boucle->return = '$Pile[$SP][\'lang\']'; |
|
| 617 | - $boucle->iterateur = 'sql'; |
|
| 618 | - |
|
| 619 | - $boucle->descr['nom'] = 'calculer_langues_utilisees'; // eviter notice php |
|
| 620 | - $boucle->descr['sourcefile'] = 'internal'; |
|
| 621 | - $boucle->descr['gram'] = 'html'; |
|
| 622 | - |
|
| 623 | - $boucle = pipeline('pre_boucle', $boucle); |
|
| 624 | - |
|
| 625 | - if ( |
|
| 626 | - isset($desc['statut']) |
|
| 627 | - and $desc['statut'] |
|
| 628 | - ) { |
|
| 629 | - $boucles = [ |
|
| 630 | - 'calculer_langues_utilisees' => $boucle, |
|
| 631 | - ]; |
|
| 632 | - // generer un nom de fonction "anonyme" unique |
|
| 633 | - do { |
|
| 634 | - $functionname = 'f_calculer_langues_utilisees_' . $boucle->id_table . '_' . time() . '_' . random_int(0, mt_getrandmax()); |
|
| 635 | - } while (function_exists($functionname)); |
|
| 636 | - $code = calculer_boucle('calculer_langues_utilisees', $boucles); |
|
| 637 | - $code = '$SP=0; $command=array();$command["connect"] = $connect = "' . $serveur . '"; $Pile=array(0=>array());' . "\n" . $code; |
|
| 638 | - $code = 'function ' . $functionname . '(){' . $code . '};$res = ' . $functionname . '();'; |
|
| 639 | - $res = ''; |
|
| 640 | - eval($code); |
|
| 641 | - $res = explode(',', $res); |
|
| 642 | - foreach ($res as $lang) { |
|
| 643 | - $langues[$lang] = 1; |
|
| 644 | - } |
|
| 645 | - } else { |
|
| 646 | - $res = sql_select(implode(',', $boucle->select), $boucle->from); |
|
| 647 | - while ($row = sql_fetch($res)) { |
|
| 648 | - $langues[$row['lang']] = 1; |
|
| 649 | - } |
|
| 650 | - } |
|
| 651 | - } |
|
| 652 | - } |
|
| 653 | - |
|
| 654 | - $langues = array_filter(array_keys($langues)); |
|
| 655 | - sort($langues); |
|
| 656 | - $langues = join(',', $langues); |
|
| 657 | - spip_log("langues utilisees: $langues"); |
|
| 658 | - |
|
| 659 | - return $langues; |
|
| 586 | + include_spip('public/interfaces'); |
|
| 587 | + include_spip('public/compiler'); |
|
| 588 | + include_spip('public/composer'); |
|
| 589 | + include_spip('public/phraser_html'); |
|
| 590 | + $langues = []; |
|
| 591 | + |
|
| 592 | + $langues[$GLOBALS['meta']['langue_site']] = 1; |
|
| 593 | + |
|
| 594 | + include_spip('base/objets'); |
|
| 595 | + $tables = lister_tables_objets_sql(); |
|
| 596 | + $trouver_table = charger_fonction('trouver_table', 'base'); |
|
| 597 | + |
|
| 598 | + foreach (array_keys($tables) as $t) { |
|
| 599 | + $desc = $trouver_table($t, $serveur); |
|
| 600 | + // c'est une table avec des langues |
|
| 601 | + if ( |
|
| 602 | + $desc['exist'] |
|
| 603 | + and isset($desc['field']['lang']) |
|
| 604 | + and isset($desc['field']['langue_choisie']) |
|
| 605 | + ) { |
|
| 606 | + $boucle = new Boucle(); |
|
| 607 | + $boucle->show = $desc; |
|
| 608 | + $boucle->nom = 'calculer_langues_utilisees'; |
|
| 609 | + $boucle->id_boucle = $desc['table_objet']; |
|
| 610 | + $boucle->id_table = $desc['table_objet']; |
|
| 611 | + $boucle->primary = $desc['key']['PRIMARY KEY'] ?? ''; |
|
| 612 | + $boucle->sql_serveur = $serveur; |
|
| 613 | + $boucle->select[] = 'DISTINCT lang'; |
|
| 614 | + $boucle->from[$desc['table_objet']] = $t; |
|
| 615 | + $boucle->separateur[] = ','; |
|
| 616 | + $boucle->return = '$Pile[$SP][\'lang\']'; |
|
| 617 | + $boucle->iterateur = 'sql'; |
|
| 618 | + |
|
| 619 | + $boucle->descr['nom'] = 'calculer_langues_utilisees'; // eviter notice php |
|
| 620 | + $boucle->descr['sourcefile'] = 'internal'; |
|
| 621 | + $boucle->descr['gram'] = 'html'; |
|
| 622 | + |
|
| 623 | + $boucle = pipeline('pre_boucle', $boucle); |
|
| 624 | + |
|
| 625 | + if ( |
|
| 626 | + isset($desc['statut']) |
|
| 627 | + and $desc['statut'] |
|
| 628 | + ) { |
|
| 629 | + $boucles = [ |
|
| 630 | + 'calculer_langues_utilisees' => $boucle, |
|
| 631 | + ]; |
|
| 632 | + // generer un nom de fonction "anonyme" unique |
|
| 633 | + do { |
|
| 634 | + $functionname = 'f_calculer_langues_utilisees_' . $boucle->id_table . '_' . time() . '_' . random_int(0, mt_getrandmax()); |
|
| 635 | + } while (function_exists($functionname)); |
|
| 636 | + $code = calculer_boucle('calculer_langues_utilisees', $boucles); |
|
| 637 | + $code = '$SP=0; $command=array();$command["connect"] = $connect = "' . $serveur . '"; $Pile=array(0=>array());' . "\n" . $code; |
|
| 638 | + $code = 'function ' . $functionname . '(){' . $code . '};$res = ' . $functionname . '();'; |
|
| 639 | + $res = ''; |
|
| 640 | + eval($code); |
|
| 641 | + $res = explode(',', $res); |
|
| 642 | + foreach ($res as $lang) { |
|
| 643 | + $langues[$lang] = 1; |
|
| 644 | + } |
|
| 645 | + } else { |
|
| 646 | + $res = sql_select(implode(',', $boucle->select), $boucle->from); |
|
| 647 | + while ($row = sql_fetch($res)) { |
|
| 648 | + $langues[$row['lang']] = 1; |
|
| 649 | + } |
|
| 650 | + } |
|
| 651 | + } |
|
| 652 | + } |
|
| 653 | + |
|
| 654 | + $langues = array_filter(array_keys($langues)); |
|
| 655 | + sort($langues); |
|
| 656 | + $langues = join(',', $langues); |
|
| 657 | + spip_log("langues utilisees: $langues"); |
|
| 658 | + |
|
| 659 | + return $langues; |
|
| 660 | 660 | } |
| 661 | 661 | |
| 662 | 662 | /** |
@@ -673,9 +673,9 @@ discard block |
||
| 673 | 673 | * incluant les rubriques noeuds et toutes leurs descendances |
| 674 | 674 | */ |
| 675 | 675 | function calcul_branche_in($id) { |
| 676 | - $calcul_branche_in = charger_fonction('calcul_branche_in', 'inc'); |
|
| 676 | + $calcul_branche_in = charger_fonction('calcul_branche_in', 'inc'); |
|
| 677 | 677 | |
| 678 | - return $calcul_branche_in($id); |
|
| 678 | + return $calcul_branche_in($id); |
|
| 679 | 679 | } |
| 680 | 680 | |
| 681 | 681 | /** |
@@ -693,9 +693,9 @@ discard block |
||
| 693 | 693 | * incluant les rubriques transmises et toutes leurs parentées |
| 694 | 694 | */ |
| 695 | 695 | function calcul_hierarchie_in($id, $tout = true) { |
| 696 | - $calcul_hierarchie_in = charger_fonction('calcul_hierarchie_in', 'inc'); |
|
| 696 | + $calcul_hierarchie_in = charger_fonction('calcul_hierarchie_in', 'inc'); |
|
| 697 | 697 | |
| 698 | - return $calcul_hierarchie_in($id, $tout); |
|
| 698 | + return $calcul_hierarchie_in($id, $tout); |
|
| 699 | 699 | } |
| 700 | 700 | |
| 701 | 701 | |
@@ -716,40 +716,40 @@ discard block |
||
| 716 | 716 | * incluant les rubriques noeuds et toutes leurs descendances |
| 717 | 717 | */ |
| 718 | 718 | function inc_calcul_branche_in_dist($id) { |
| 719 | - static $b = []; |
|
| 720 | - |
|
| 721 | - // normaliser $id qui a pu arriver comme un array, comme un entier, ou comme une chaine NN,NN,NN |
|
| 722 | - if (!is_array($id)) { |
|
| 723 | - $id = explode(',', $id); |
|
| 724 | - } |
|
| 725 | - $id = join(',', array_map('intval', $id)); |
|
| 726 | - if (isset($b[$id])) { |
|
| 727 | - return $b[$id]; |
|
| 728 | - } |
|
| 729 | - |
|
| 730 | - // Notre branche commence par la rubrique de depart |
|
| 731 | - $branche = $r = $id; |
|
| 732 | - |
|
| 733 | - // On ajoute une generation (les filles de la generation precedente) |
|
| 734 | - // jusqu'a epuisement, en se protegeant des references circulaires |
|
| 735 | - $maxiter = 10000; |
|
| 736 | - while ( |
|
| 737 | - $maxiter-- and $filles = sql_allfetsel( |
|
| 738 | - 'id_rubrique', |
|
| 739 | - 'spip_rubriques', |
|
| 740 | - sql_in('id_parent', $r) . ' AND ' . sql_in('id_rubrique', $r, 'NOT') |
|
| 741 | - ) |
|
| 742 | - ) { |
|
| 743 | - $r = join(',', array_column($filles, 'id_rubrique')); |
|
| 744 | - $branche .= ',' . $r; |
|
| 745 | - } |
|
| 746 | - |
|
| 747 | - # securite pour ne pas plomber la conso memoire sur les sites prolifiques |
|
| 748 | - if (strlen($branche) < 10000) { |
|
| 749 | - $b[$id] = $branche; |
|
| 750 | - } |
|
| 751 | - |
|
| 752 | - return $branche; |
|
| 719 | + static $b = []; |
|
| 720 | + |
|
| 721 | + // normaliser $id qui a pu arriver comme un array, comme un entier, ou comme une chaine NN,NN,NN |
|
| 722 | + if (!is_array($id)) { |
|
| 723 | + $id = explode(',', $id); |
|
| 724 | + } |
|
| 725 | + $id = join(',', array_map('intval', $id)); |
|
| 726 | + if (isset($b[$id])) { |
|
| 727 | + return $b[$id]; |
|
| 728 | + } |
|
| 729 | + |
|
| 730 | + // Notre branche commence par la rubrique de depart |
|
| 731 | + $branche = $r = $id; |
|
| 732 | + |
|
| 733 | + // On ajoute une generation (les filles de la generation precedente) |
|
| 734 | + // jusqu'a epuisement, en se protegeant des references circulaires |
|
| 735 | + $maxiter = 10000; |
|
| 736 | + while ( |
|
| 737 | + $maxiter-- and $filles = sql_allfetsel( |
|
| 738 | + 'id_rubrique', |
|
| 739 | + 'spip_rubriques', |
|
| 740 | + sql_in('id_parent', $r) . ' AND ' . sql_in('id_rubrique', $r, 'NOT') |
|
| 741 | + ) |
|
| 742 | + ) { |
|
| 743 | + $r = join(',', array_column($filles, 'id_rubrique')); |
|
| 744 | + $branche .= ',' . $r; |
|
| 745 | + } |
|
| 746 | + |
|
| 747 | + # securite pour ne pas plomber la conso memoire sur les sites prolifiques |
|
| 748 | + if (strlen($branche) < 10000) { |
|
| 749 | + $b[$id] = $branche; |
|
| 750 | + } |
|
| 751 | + |
|
| 752 | + return $branche; |
|
| 753 | 753 | } |
| 754 | 754 | |
| 755 | 755 | |
@@ -771,45 +771,45 @@ discard block |
||
| 771 | 771 | * incluant les rubriques transmises et toutes leurs parentées |
| 772 | 772 | */ |
| 773 | 773 | function inc_calcul_hierarchie_in_dist($id, $tout = true) { |
| 774 | - static $b = []; |
|
| 775 | - |
|
| 776 | - // normaliser $id qui a pu arriver comme un array, comme un entier, ou comme une chaine NN,NN,NN |
|
| 777 | - if (!is_array($id)) { |
|
| 778 | - $id = explode(',', $id); |
|
| 779 | - } |
|
| 780 | - $id = join(',', array_map('intval', $id)); |
|
| 781 | - |
|
| 782 | - if (isset($b[$id])) { |
|
| 783 | - // Notre branche commence par la rubrique de depart si $tout=true |
|
| 784 | - return $tout ? (strlen($b[$id]) ? $b[$id] . ",$id" : $id) : $b[$id]; |
|
| 785 | - } |
|
| 786 | - |
|
| 787 | - $hier = ''; |
|
| 788 | - |
|
| 789 | - // On ajoute une generation (les filles de la generation precedente) |
|
| 790 | - // jusqu'a epuisement, en se protegeant des references circulaires |
|
| 791 | - $ids_nouveaux_parents = $id; |
|
| 792 | - $maxiter = 10000; |
|
| 793 | - while ( |
|
| 794 | - $maxiter-- and $parents = sql_allfetsel( |
|
| 795 | - 'id_parent', |
|
| 796 | - 'spip_rubriques', |
|
| 797 | - sql_in('id_rubrique', $ids_nouveaux_parents) . ' AND ' . sql_in('id_parent', $hier, 'NOT') |
|
| 798 | - ) |
|
| 799 | - ) { |
|
| 800 | - $ids_nouveaux_parents = join(',', array_column($parents, 'id_parent')); |
|
| 801 | - $hier = $ids_nouveaux_parents . (strlen($hier) ? ',' . $hier : ''); |
|
| 802 | - } |
|
| 803 | - |
|
| 804 | - # securite pour ne pas plomber la conso memoire sur les sites prolifiques |
|
| 805 | - if (strlen($hier) < 10000) { |
|
| 806 | - $b[$id] = $hier; |
|
| 807 | - } |
|
| 808 | - |
|
| 809 | - // Notre branche commence par la rubrique de depart si $tout=true |
|
| 810 | - $hier = $tout ? (strlen($hier) ? "$hier,$id" : $id) : $hier; |
|
| 811 | - |
|
| 812 | - return $hier; |
|
| 774 | + static $b = []; |
|
| 775 | + |
|
| 776 | + // normaliser $id qui a pu arriver comme un array, comme un entier, ou comme une chaine NN,NN,NN |
|
| 777 | + if (!is_array($id)) { |
|
| 778 | + $id = explode(',', $id); |
|
| 779 | + } |
|
| 780 | + $id = join(',', array_map('intval', $id)); |
|
| 781 | + |
|
| 782 | + if (isset($b[$id])) { |
|
| 783 | + // Notre branche commence par la rubrique de depart si $tout=true |
|
| 784 | + return $tout ? (strlen($b[$id]) ? $b[$id] . ",$id" : $id) : $b[$id]; |
|
| 785 | + } |
|
| 786 | + |
|
| 787 | + $hier = ''; |
|
| 788 | + |
|
| 789 | + // On ajoute une generation (les filles de la generation precedente) |
|
| 790 | + // jusqu'a epuisement, en se protegeant des references circulaires |
|
| 791 | + $ids_nouveaux_parents = $id; |
|
| 792 | + $maxiter = 10000; |
|
| 793 | + while ( |
|
| 794 | + $maxiter-- and $parents = sql_allfetsel( |
|
| 795 | + 'id_parent', |
|
| 796 | + 'spip_rubriques', |
|
| 797 | + sql_in('id_rubrique', $ids_nouveaux_parents) . ' AND ' . sql_in('id_parent', $hier, 'NOT') |
|
| 798 | + ) |
|
| 799 | + ) { |
|
| 800 | + $ids_nouveaux_parents = join(',', array_column($parents, 'id_parent')); |
|
| 801 | + $hier = $ids_nouveaux_parents . (strlen($hier) ? ',' . $hier : ''); |
|
| 802 | + } |
|
| 803 | + |
|
| 804 | + # securite pour ne pas plomber la conso memoire sur les sites prolifiques |
|
| 805 | + if (strlen($hier) < 10000) { |
|
| 806 | + $b[$id] = $hier; |
|
| 807 | + } |
|
| 808 | + |
|
| 809 | + // Notre branche commence par la rubrique de depart si $tout=true |
|
| 810 | + $hier = $tout ? (strlen($hier) ? "$hier,$id" : $id) : $hier; |
|
| 811 | + |
|
| 812 | + return $hier; |
|
| 813 | 813 | } |
| 814 | 814 | |
| 815 | 815 | |
@@ -827,47 +827,47 @@ discard block |
||
| 827 | 827 | * @return void |
| 828 | 828 | **/ |
| 829 | 829 | function calculer_prochain_postdate($check = false) { |
| 830 | - include_spip('base/abstract_sql'); |
|
| 831 | - if ($check) { |
|
| 832 | - $postdates = ($GLOBALS['meta']['post_dates'] == 'non') ? |
|
| 833 | - 'AND A.date <= ' . sql_quote(date('Y-m-d H:i:s')) : ''; |
|
| 834 | - |
|
| 835 | - $r = sql_select( |
|
| 836 | - 'DISTINCT A.id_rubrique AS id', |
|
| 837 | - 'spip_articles AS A LEFT JOIN spip_rubriques AS R ON A.id_rubrique=R.id_rubrique', |
|
| 838 | - "R.statut != 'publie' AND A.statut='publie'$postdates" |
|
| 839 | - ); |
|
| 840 | - while ($row = sql_fetch($r)) { |
|
| 841 | - publier_branche_rubrique($row['id']); |
|
| 842 | - } |
|
| 843 | - |
|
| 844 | - pipeline('trig_calculer_prochain_postdate', ''); |
|
| 845 | - } |
|
| 846 | - |
|
| 847 | - $t = sql_fetsel( |
|
| 848 | - 'date', |
|
| 849 | - 'spip_articles', |
|
| 850 | - "statut='publie' AND date > " . sql_quote(date('Y-m-d H:i:s')), |
|
| 851 | - '', |
|
| 852 | - 'date', |
|
| 853 | - '1' |
|
| 854 | - ); |
|
| 855 | - |
|
| 856 | - if ($t) { |
|
| 857 | - $t = $t['date']; |
|
| 858 | - if ( |
|
| 859 | - !isset($GLOBALS['meta']['date_prochain_postdate']) |
|
| 860 | - or $t <> $GLOBALS['meta']['date_prochain_postdate'] |
|
| 861 | - ) { |
|
| 862 | - ecrire_meta('date_prochain_postdate', strtotime($t)); |
|
| 863 | - ecrire_meta('derniere_modif', time()); |
|
| 864 | - } |
|
| 865 | - } else { |
|
| 866 | - effacer_meta('date_prochain_postdate'); |
|
| 867 | - ecrire_meta('derniere_modif', time()); |
|
| 868 | - } |
|
| 869 | - |
|
| 870 | - spip_log("prochain postdate: $t"); |
|
| 830 | + include_spip('base/abstract_sql'); |
|
| 831 | + if ($check) { |
|
| 832 | + $postdates = ($GLOBALS['meta']['post_dates'] == 'non') ? |
|
| 833 | + 'AND A.date <= ' . sql_quote(date('Y-m-d H:i:s')) : ''; |
|
| 834 | + |
|
| 835 | + $r = sql_select( |
|
| 836 | + 'DISTINCT A.id_rubrique AS id', |
|
| 837 | + 'spip_articles AS A LEFT JOIN spip_rubriques AS R ON A.id_rubrique=R.id_rubrique', |
|
| 838 | + "R.statut != 'publie' AND A.statut='publie'$postdates" |
|
| 839 | + ); |
|
| 840 | + while ($row = sql_fetch($r)) { |
|
| 841 | + publier_branche_rubrique($row['id']); |
|
| 842 | + } |
|
| 843 | + |
|
| 844 | + pipeline('trig_calculer_prochain_postdate', ''); |
|
| 845 | + } |
|
| 846 | + |
|
| 847 | + $t = sql_fetsel( |
|
| 848 | + 'date', |
|
| 849 | + 'spip_articles', |
|
| 850 | + "statut='publie' AND date > " . sql_quote(date('Y-m-d H:i:s')), |
|
| 851 | + '', |
|
| 852 | + 'date', |
|
| 853 | + '1' |
|
| 854 | + ); |
|
| 855 | + |
|
| 856 | + if ($t) { |
|
| 857 | + $t = $t['date']; |
|
| 858 | + if ( |
|
| 859 | + !isset($GLOBALS['meta']['date_prochain_postdate']) |
|
| 860 | + or $t <> $GLOBALS['meta']['date_prochain_postdate'] |
|
| 861 | + ) { |
|
| 862 | + ecrire_meta('date_prochain_postdate', strtotime($t)); |
|
| 863 | + ecrire_meta('derniere_modif', time()); |
|
| 864 | + } |
|
| 865 | + } else { |
|
| 866 | + effacer_meta('date_prochain_postdate'); |
|
| 867 | + ecrire_meta('derniere_modif', time()); |
|
| 868 | + } |
|
| 869 | + |
|
| 870 | + spip_log("prochain postdate: $t"); |
|
| 871 | 871 | } |
| 872 | 872 | |
| 873 | 873 | /** |
@@ -892,62 +892,62 @@ discard block |
||
| 892 | 892 | */ |
| 893 | 893 | function creer_rubrique_nommee($titre, $id_parent = 0, $serveur = '') { |
| 894 | 894 | |
| 895 | - // eclater l'arborescence demandee |
|
| 896 | - // echapper les </multi> et autres balises fermantes html |
|
| 897 | - $titre = preg_replace(',</([a-z][^>]*)>,ims', "<@\\1>", $titre); |
|
| 898 | - $arbo = explode('/', preg_replace(',^/,', '', $titre)); |
|
| 899 | - include_spip('base/abstract_sql'); |
|
| 900 | - foreach ($arbo as $titre) { |
|
| 901 | - // retablir les </multi> et autres balises fermantes html |
|
| 902 | - $titre = preg_replace(',<@([a-z][^>]*)>,ims', "</\\1>", $titre); |
|
| 903 | - $r = sql_getfetsel( |
|
| 904 | - 'id_rubrique', |
|
| 905 | - 'spip_rubriques', |
|
| 906 | - 'titre = ' . sql_quote($titre) . ' AND id_parent=' . intval($id_parent), |
|
| 907 | - $groupby = [], |
|
| 908 | - $orderby = [], |
|
| 909 | - $limit = '', |
|
| 910 | - $having = [], |
|
| 911 | - $serveur |
|
| 912 | - ); |
|
| 913 | - if ($r !== null) { |
|
| 914 | - $id_parent = $r; |
|
| 915 | - } else { |
|
| 916 | - $id_rubrique = sql_insertq('spip_rubriques', [ |
|
| 917 | - 'titre' => $titre, |
|
| 918 | - 'id_parent' => $id_parent, |
|
| 919 | - 'statut' => 'prepa' |
|
| 920 | - ], $desc = [], $serveur); |
|
| 921 | - if ($id_parent > 0) { |
|
| 922 | - $data = sql_fetsel( |
|
| 923 | - 'id_secteur,lang', |
|
| 924 | - 'spip_rubriques', |
|
| 925 | - "id_rubrique=$id_parent", |
|
| 926 | - $groupby = [], |
|
| 927 | - $orderby = [], |
|
| 928 | - $limit = '', |
|
| 929 | - $having = [], |
|
| 930 | - $serveur |
|
| 931 | - ); |
|
| 932 | - $id_secteur = $data['id_secteur']; |
|
| 933 | - $lang = $data['lang']; |
|
| 934 | - } else { |
|
| 935 | - $id_secteur = $id_rubrique; |
|
| 936 | - $lang = $GLOBALS['meta']['langue_site']; |
|
| 937 | - } |
|
| 938 | - |
|
| 939 | - sql_updateq( |
|
| 940 | - 'spip_rubriques', |
|
| 941 | - ['id_secteur' => $id_secteur, 'lang' => $lang], |
|
| 942 | - 'id_rubrique=' . intval($id_rubrique), |
|
| 943 | - [], |
|
| 944 | - $serveur |
|
| 945 | - ); |
|
| 946 | - |
|
| 947 | - // pour la recursion |
|
| 948 | - $id_parent = $id_rubrique; |
|
| 949 | - } |
|
| 950 | - } |
|
| 951 | - |
|
| 952 | - return intval($id_parent); |
|
| 895 | + // eclater l'arborescence demandee |
|
| 896 | + // echapper les </multi> et autres balises fermantes html |
|
| 897 | + $titre = preg_replace(',</([a-z][^>]*)>,ims', "<@\\1>", $titre); |
|
| 898 | + $arbo = explode('/', preg_replace(',^/,', '', $titre)); |
|
| 899 | + include_spip('base/abstract_sql'); |
|
| 900 | + foreach ($arbo as $titre) { |
|
| 901 | + // retablir les </multi> et autres balises fermantes html |
|
| 902 | + $titre = preg_replace(',<@([a-z][^>]*)>,ims', "</\\1>", $titre); |
|
| 903 | + $r = sql_getfetsel( |
|
| 904 | + 'id_rubrique', |
|
| 905 | + 'spip_rubriques', |
|
| 906 | + 'titre = ' . sql_quote($titre) . ' AND id_parent=' . intval($id_parent), |
|
| 907 | + $groupby = [], |
|
| 908 | + $orderby = [], |
|
| 909 | + $limit = '', |
|
| 910 | + $having = [], |
|
| 911 | + $serveur |
|
| 912 | + ); |
|
| 913 | + if ($r !== null) { |
|
| 914 | + $id_parent = $r; |
|
| 915 | + } else { |
|
| 916 | + $id_rubrique = sql_insertq('spip_rubriques', [ |
|
| 917 | + 'titre' => $titre, |
|
| 918 | + 'id_parent' => $id_parent, |
|
| 919 | + 'statut' => 'prepa' |
|
| 920 | + ], $desc = [], $serveur); |
|
| 921 | + if ($id_parent > 0) { |
|
| 922 | + $data = sql_fetsel( |
|
| 923 | + 'id_secteur,lang', |
|
| 924 | + 'spip_rubriques', |
|
| 925 | + "id_rubrique=$id_parent", |
|
| 926 | + $groupby = [], |
|
| 927 | + $orderby = [], |
|
| 928 | + $limit = '', |
|
| 929 | + $having = [], |
|
| 930 | + $serveur |
|
| 931 | + ); |
|
| 932 | + $id_secteur = $data['id_secteur']; |
|
| 933 | + $lang = $data['lang']; |
|
| 934 | + } else { |
|
| 935 | + $id_secteur = $id_rubrique; |
|
| 936 | + $lang = $GLOBALS['meta']['langue_site']; |
|
| 937 | + } |
|
| 938 | + |
|
| 939 | + sql_updateq( |
|
| 940 | + 'spip_rubriques', |
|
| 941 | + ['id_secteur' => $id_secteur, 'lang' => $lang], |
|
| 942 | + 'id_rubrique=' . intval($id_rubrique), |
|
| 943 | + [], |
|
| 944 | + $serveur |
|
| 945 | + ); |
|
| 946 | + |
|
| 947 | + // pour la recursion |
|
| 948 | + $id_parent = $id_rubrique; |
|
| 949 | + } |
|
| 950 | + } |
|
| 951 | + |
|
| 952 | + return intval($id_parent); |
|
| 953 | 953 | } |
@@ -9,384 +9,384 @@ |
||
| 9 | 9 | |
| 10 | 10 | $GLOBALS['CHARSET']['translit'] = [ |
| 11 | 11 | // latin [fausse plage] |
| 12 | - 128 => 'EUR', |
|
| 13 | - 131 => 'f', |
|
| 14 | - 140 => 'OE', |
|
| 15 | - 147 => '\'\'', |
|
| 16 | - 148 => '\'\'', |
|
| 17 | - 153 => '(TM)', |
|
| 18 | - 156 => 'oe', |
|
| 19 | - 159 => 'Y', |
|
| 12 | + 128 => 'EUR', |
|
| 13 | + 131 => 'f', |
|
| 14 | + 140 => 'OE', |
|
| 15 | + 147 => '\'\'', |
|
| 16 | + 148 => '\'\'', |
|
| 17 | + 153 => '(TM)', |
|
| 18 | + 156 => 'oe', |
|
| 19 | + 159 => 'Y', |
|
| 20 | 20 | |
| 21 | 21 | // latin [legal] |
| 22 | - 160 => ' ', |
|
| 23 | - 161 => '!', |
|
| 24 | - 162 => 'c', |
|
| 25 | - 163 => 'L', |
|
| 26 | - 164 => 'O', |
|
| 27 | - 165 => 'yen', |
|
| 28 | - 166 => '|', |
|
| 29 | - 167 => 'p', |
|
| 30 | - 169 => '(c)', |
|
| 31 | - 171 => '<<', |
|
| 32 | - 172 => '-', |
|
| 33 | - 173 => '-', |
|
| 34 | - 174 => '(R)', |
|
| 35 | - 176 => 'o', |
|
| 36 | - 177 => '+-', |
|
| 37 | - 181 => 'mu', |
|
| 38 | - 182 => 'p', |
|
| 39 | - 183 => '.', |
|
| 40 | - 186 => 'o ', |
|
| 41 | - 187 => '>>', |
|
| 42 | - 191 => '?', |
|
| 43 | - 192 => 'A', |
|
| 44 | - 193 => 'A', |
|
| 45 | - 194 => 'A', |
|
| 46 | - 195 => 'A', |
|
| 47 | - 196 => 'A', |
|
| 48 | - 197 => 'A', |
|
| 49 | - 198 => 'AE', |
|
| 50 | - 199 => 'C', |
|
| 51 | - 200 => 'E', |
|
| 52 | - 201 => 'E', |
|
| 53 | - 202 => 'E', |
|
| 54 | - 203 => 'E', |
|
| 55 | - 204 => 'I', |
|
| 56 | - 205 => 'I', |
|
| 57 | - 206 => 'I', |
|
| 58 | - 207 => 'I', |
|
| 59 | - 209 => 'N', |
|
| 60 | - 210 => 'O', |
|
| 61 | - 211 => 'O', |
|
| 62 | - 212 => 'O', |
|
| 63 | - 213 => 'O', |
|
| 64 | - 214 => 'O', |
|
| 65 | - 216 => 'O', |
|
| 66 | - 217 => 'U', |
|
| 67 | - 218 => 'U', |
|
| 68 | - 219 => 'U', |
|
| 69 | - 220 => 'U', |
|
| 70 | - 223 => 'ss', |
|
| 71 | - 224 => 'a', |
|
| 72 | - 225 => 'a', |
|
| 73 | - 226 => 'a', |
|
| 74 | - 227 => 'a', |
|
| 75 | - 228 => 'a', |
|
| 76 | - 229 => 'a', |
|
| 77 | - 230 => 'ae', |
|
| 78 | - 231 => 'c', |
|
| 79 | - 232 => 'e', |
|
| 80 | - 233 => 'e', |
|
| 81 | - 234 => 'e', |
|
| 82 | - 235 => 'e', |
|
| 83 | - 236 => 'i', |
|
| 84 | - 237 => 'i', |
|
| 85 | - 238 => 'i', |
|
| 86 | - 239 => 'i', |
|
| 87 | - 241 => 'n', |
|
| 88 | - 242 => 'o', |
|
| 89 | - 243 => 'o', |
|
| 90 | - 244 => 'o', |
|
| 91 | - 245 => 'o', |
|
| 92 | - 246 => 'o', |
|
| 93 | - 248 => 'o', |
|
| 94 | - 249 => 'u', |
|
| 95 | - 250 => 'u', |
|
| 96 | - 251 => 'u', |
|
| 97 | - 252 => 'u', |
|
| 98 | - 255 => 'y', |
|
| 22 | + 160 => ' ', |
|
| 23 | + 161 => '!', |
|
| 24 | + 162 => 'c', |
|
| 25 | + 163 => 'L', |
|
| 26 | + 164 => 'O', |
|
| 27 | + 165 => 'yen', |
|
| 28 | + 166 => '|', |
|
| 29 | + 167 => 'p', |
|
| 30 | + 169 => '(c)', |
|
| 31 | + 171 => '<<', |
|
| 32 | + 172 => '-', |
|
| 33 | + 173 => '-', |
|
| 34 | + 174 => '(R)', |
|
| 35 | + 176 => 'o', |
|
| 36 | + 177 => '+-', |
|
| 37 | + 181 => 'mu', |
|
| 38 | + 182 => 'p', |
|
| 39 | + 183 => '.', |
|
| 40 | + 186 => 'o ', |
|
| 41 | + 187 => '>>', |
|
| 42 | + 191 => '?', |
|
| 43 | + 192 => 'A', |
|
| 44 | + 193 => 'A', |
|
| 45 | + 194 => 'A', |
|
| 46 | + 195 => 'A', |
|
| 47 | + 196 => 'A', |
|
| 48 | + 197 => 'A', |
|
| 49 | + 198 => 'AE', |
|
| 50 | + 199 => 'C', |
|
| 51 | + 200 => 'E', |
|
| 52 | + 201 => 'E', |
|
| 53 | + 202 => 'E', |
|
| 54 | + 203 => 'E', |
|
| 55 | + 204 => 'I', |
|
| 56 | + 205 => 'I', |
|
| 57 | + 206 => 'I', |
|
| 58 | + 207 => 'I', |
|
| 59 | + 209 => 'N', |
|
| 60 | + 210 => 'O', |
|
| 61 | + 211 => 'O', |
|
| 62 | + 212 => 'O', |
|
| 63 | + 213 => 'O', |
|
| 64 | + 214 => 'O', |
|
| 65 | + 216 => 'O', |
|
| 66 | + 217 => 'U', |
|
| 67 | + 218 => 'U', |
|
| 68 | + 219 => 'U', |
|
| 69 | + 220 => 'U', |
|
| 70 | + 223 => 'ss', |
|
| 71 | + 224 => 'a', |
|
| 72 | + 225 => 'a', |
|
| 73 | + 226 => 'a', |
|
| 74 | + 227 => 'a', |
|
| 75 | + 228 => 'a', |
|
| 76 | + 229 => 'a', |
|
| 77 | + 230 => 'ae', |
|
| 78 | + 231 => 'c', |
|
| 79 | + 232 => 'e', |
|
| 80 | + 233 => 'e', |
|
| 81 | + 234 => 'e', |
|
| 82 | + 235 => 'e', |
|
| 83 | + 236 => 'i', |
|
| 84 | + 237 => 'i', |
|
| 85 | + 238 => 'i', |
|
| 86 | + 239 => 'i', |
|
| 87 | + 241 => 'n', |
|
| 88 | + 242 => 'o', |
|
| 89 | + 243 => 'o', |
|
| 90 | + 244 => 'o', |
|
| 91 | + 245 => 'o', |
|
| 92 | + 246 => 'o', |
|
| 93 | + 248 => 'o', |
|
| 94 | + 249 => 'u', |
|
| 95 | + 250 => 'u', |
|
| 96 | + 251 => 'u', |
|
| 97 | + 252 => 'u', |
|
| 98 | + 255 => 'y', |
|
| 99 | 99 | |
| 100 | 100 | // turc |
| 101 | - 286 => 'G', |
|
| 102 | - 287 => 'g', |
|
| 103 | - 304 => 'I', |
|
| 104 | - 305 => 'i', |
|
| 101 | + 286 => 'G', |
|
| 102 | + 287 => 'g', |
|
| 103 | + 304 => 'I', |
|
| 104 | + 305 => 'i', |
|
| 105 | 105 | |
| 106 | 106 | // esperanto |
| 107 | - 264 => 'Cx', |
|
| 108 | - 265 => 'cx', |
|
| 109 | - 284 => 'Gx', |
|
| 110 | - 285 => 'gx', |
|
| 111 | - 292 => 'Hx', |
|
| 112 | - 293 => 'hx', |
|
| 113 | - 308 => 'Jx', |
|
| 114 | - 309 => 'jx', |
|
| 115 | - 348 => 'Sx', |
|
| 116 | - 349 => 'sx', |
|
| 117 | - 364 => 'Ux', |
|
| 118 | - 365 => 'ux', |
|
| 107 | + 264 => 'Cx', |
|
| 108 | + 265 => 'cx', |
|
| 109 | + 284 => 'Gx', |
|
| 110 | + 285 => 'gx', |
|
| 111 | + 292 => 'Hx', |
|
| 112 | + 293 => 'hx', |
|
| 113 | + 308 => 'Jx', |
|
| 114 | + 309 => 'jx', |
|
| 115 | + 348 => 'Sx', |
|
| 116 | + 349 => 'sx', |
|
| 117 | + 364 => 'Ux', |
|
| 118 | + 365 => 'ux', |
|
| 119 | 119 | |
| 120 | 120 | |
| 121 | 121 | // latin2 [Czech] |
| 122 | - 283 => 'e', |
|
| 123 | - 353 => 's', |
|
| 124 | - 269 => 'c', |
|
| 125 | - 345 => 'r', |
|
| 126 | - 382 => 'z', |
|
| 127 | - 367 => 'u', |
|
| 128 | - 328 => 'n', |
|
| 129 | - 357 => 't', |
|
| 130 | - 271 => 'd', |
|
| 131 | - 449 => 'o', |
|
| 132 | - 282 => 'E', |
|
| 133 | - 352 => 'S', |
|
| 134 | - 268 => 'C', |
|
| 135 | - 344 => 'R', |
|
| 136 | - 381 => 'Z', |
|
| 137 | - 366 => 'U', |
|
| 138 | - 327 => 'N', |
|
| 139 | - 356 => 'T', |
|
| 140 | - 270 => 'D', |
|
| 141 | - 467 => 'O', |
|
| 122 | + 283 => 'e', |
|
| 123 | + 353 => 's', |
|
| 124 | + 269 => 'c', |
|
| 125 | + 345 => 'r', |
|
| 126 | + 382 => 'z', |
|
| 127 | + 367 => 'u', |
|
| 128 | + 328 => 'n', |
|
| 129 | + 357 => 't', |
|
| 130 | + 271 => 'd', |
|
| 131 | + 449 => 'o', |
|
| 132 | + 282 => 'E', |
|
| 133 | + 352 => 'S', |
|
| 134 | + 268 => 'C', |
|
| 135 | + 344 => 'R', |
|
| 136 | + 381 => 'Z', |
|
| 137 | + 366 => 'U', |
|
| 138 | + 327 => 'N', |
|
| 139 | + 356 => 'T', |
|
| 140 | + 270 => 'D', |
|
| 141 | + 467 => 'O', |
|
| 142 | 142 | |
| 143 | 143 | // francais |
| 144 | - 338 => 'OE', |
|
| 145 | - 339 => 'oe', |
|
| 146 | - 376 => 'Y', |
|
| 147 | - 402 => 'f', |
|
| 144 | + 338 => 'OE', |
|
| 145 | + 339 => 'oe', |
|
| 146 | + 376 => 'Y', |
|
| 147 | + 402 => 'f', |
|
| 148 | 148 | |
| 149 | 149 | //polskie |
| 150 | - 260 => 'A', |
|
| 151 | - 261 => 'a', |
|
| 152 | - 262 => 'C', |
|
| 153 | - 263 => 'c', |
|
| 154 | - 280 => 'E', |
|
| 155 | - 281 => 'e', |
|
| 156 | - 321 => 'L', |
|
| 157 | - 322 => 'l', |
|
| 158 | - 323 => 'N', |
|
| 159 | - 324 => 'n', |
|
| 160 | - 346 => 'S', |
|
| 161 | - 347 => 's', |
|
| 162 | - 377 => 'Z', |
|
| 163 | - 378 => 'z', |
|
| 164 | - 379 => 'Z', |
|
| 165 | - 380 => 'z', |
|
| 150 | + 260 => 'A', |
|
| 151 | + 261 => 'a', |
|
| 152 | + 262 => 'C', |
|
| 153 | + 263 => 'c', |
|
| 154 | + 280 => 'E', |
|
| 155 | + 281 => 'e', |
|
| 156 | + 321 => 'L', |
|
| 157 | + 322 => 'l', |
|
| 158 | + 323 => 'N', |
|
| 159 | + 324 => 'n', |
|
| 160 | + 346 => 'S', |
|
| 161 | + 347 => 's', |
|
| 162 | + 377 => 'Z', |
|
| 163 | + 378 => 'z', |
|
| 164 | + 379 => 'Z', |
|
| 165 | + 380 => 'z', |
|
| 166 | 166 | |
| 167 | 167 | //roumain |
| 168 | - 258 => 'A', |
|
| 169 | - 259 => 'a', |
|
| 170 | - 354 => 'T', |
|
| 171 | - 355 => 't', |
|
| 168 | + 258 => 'A', |
|
| 169 | + 259 => 'a', |
|
| 170 | + 354 => 'T', |
|
| 171 | + 355 => 't', |
|
| 172 | 172 | |
| 173 | 173 | //turc & roumain |
| 174 | - 350 => 'S', |
|
| 175 | - 351 => 's', |
|
| 174 | + 350 => 'S', |
|
| 175 | + 351 => 's', |
|
| 176 | 176 | |
| 177 | 177 | // cyrillique |
| 178 | - 1026 => 'D%', |
|
| 179 | - 1027 => 'G%', |
|
| 180 | - 8218 => '\'', |
|
| 181 | - 1107 => 'g%', |
|
| 182 | - 8222 => '"', |
|
| 183 | - 8230 => '...', |
|
| 184 | - 8224 => '/-', |
|
| 185 | - 8225 => '/=', |
|
| 186 | - 8364 => 'EUR', |
|
| 187 | - 8240 => '0/00', |
|
| 188 | - 1033 => 'LJ', |
|
| 189 | - 8249 => '<', |
|
| 190 | - 1034 => 'NJ', |
|
| 191 | - 1036 => 'KJ', |
|
| 192 | - 1035 => 'Ts', |
|
| 193 | - 1039 => 'DZ', |
|
| 194 | - 1106 => 'd%', |
|
| 195 | - 8216 => '`', |
|
| 196 | - 8217 => '\'', |
|
| 197 | - 8220 => '"', |
|
| 198 | - 8221 => '"', |
|
| 199 | - 8226 => ' o ', |
|
| 200 | - 8211 => '-', |
|
| 201 | - 8212 => '~', |
|
| 202 | - 8482 => '(TM)', |
|
| 203 | - 1113 => 'lj', |
|
| 204 | - 8250 => '>', |
|
| 205 | - 1114 => 'nj', |
|
| 206 | - 1116 => 'kj', |
|
| 207 | - 1115 => 'ts', |
|
| 208 | - 1119 => 'dz', |
|
| 209 | - 1038 => 'V%', |
|
| 210 | - 1118 => 'v%', |
|
| 211 | - 1032 => 'J%', |
|
| 212 | - 1168 => 'G3', |
|
| 213 | - 1025 => 'IO', |
|
| 214 | - 1028 => 'IE', |
|
| 215 | - 1031 => 'YI', |
|
| 216 | - 1030 => 'II', |
|
| 217 | - 1110 => 'ii', |
|
| 218 | - 1169 => 'g3', |
|
| 219 | - 1105 => 'io', |
|
| 220 | - 8470 => 'No.', |
|
| 221 | - 1108 => 'ie', |
|
| 222 | - 1112 => 'j%', |
|
| 223 | - 1029 => 'DS', |
|
| 224 | - 1109 => 'ds', |
|
| 225 | - 1111 => 'yi', |
|
| 226 | - 1040 => 'A', |
|
| 227 | - 1041 => 'B', |
|
| 228 | - 1042 => 'V', |
|
| 229 | - 1043 => 'G', |
|
| 230 | - 1044 => 'D', |
|
| 231 | - 1045 => 'E', |
|
| 232 | - 1046 => 'ZH', |
|
| 233 | - 1047 => 'Z', |
|
| 234 | - 1048 => 'I', |
|
| 235 | - 1049 => 'J', |
|
| 236 | - 1050 => 'K', |
|
| 237 | - 1051 => 'L', |
|
| 238 | - 1052 => 'M', |
|
| 239 | - 1053 => 'N', |
|
| 240 | - 1054 => 'O', |
|
| 241 | - 1055 => 'P', |
|
| 242 | - 1056 => 'R', |
|
| 243 | - 1057 => 'S', |
|
| 244 | - 1058 => 'T', |
|
| 245 | - 1059 => 'U', |
|
| 246 | - 1060 => 'F', |
|
| 247 | - 1061 => 'H', |
|
| 248 | - 1062 => 'C', |
|
| 249 | - 1063 => 'CH', |
|
| 250 | - 1064 => 'SH', |
|
| 251 | - 1065 => 'SCH', |
|
| 252 | - 1066 => '"', |
|
| 253 | - 1067 => 'Y', |
|
| 254 | - 1068 => '\'', |
|
| 255 | - 1069 => '`E', |
|
| 256 | - 1070 => 'YU', |
|
| 257 | - 1071 => 'YA', |
|
| 258 | - 1072 => 'a', |
|
| 259 | - 1073 => 'b', |
|
| 260 | - 1074 => 'v', |
|
| 261 | - 1075 => 'g', |
|
| 262 | - 1076 => 'd', |
|
| 263 | - 1077 => 'e', |
|
| 264 | - 1078 => 'zh', |
|
| 265 | - 1079 => 'z', |
|
| 266 | - 1080 => 'i', |
|
| 267 | - 1081 => 'j', |
|
| 268 | - 1082 => 'k', |
|
| 269 | - 1083 => 'l', |
|
| 270 | - 1084 => 'm', |
|
| 271 | - 1085 => 'n', |
|
| 272 | - 1086 => 'o', |
|
| 273 | - 1087 => 'p', |
|
| 274 | - 1088 => 'r', |
|
| 275 | - 1089 => 's', |
|
| 276 | - 1090 => 't', |
|
| 277 | - 1091 => 'u', |
|
| 278 | - 1092 => 'f', |
|
| 279 | - 1093 => 'h', |
|
| 280 | - 1094 => 'c', |
|
| 281 | - 1095 => 'ch', |
|
| 282 | - 1096 => 'sh', |
|
| 283 | - 1097 => 'sch', |
|
| 284 | - 1098 => '"', |
|
| 285 | - 1099 => 'y', |
|
| 286 | - 1100 => '\'', |
|
| 287 | - 1101 => '`e', |
|
| 288 | - 1102 => 'yu', |
|
| 289 | - 1103 => 'ya', |
|
| 178 | + 1026 => 'D%', |
|
| 179 | + 1027 => 'G%', |
|
| 180 | + 8218 => '\'', |
|
| 181 | + 1107 => 'g%', |
|
| 182 | + 8222 => '"', |
|
| 183 | + 8230 => '...', |
|
| 184 | + 8224 => '/-', |
|
| 185 | + 8225 => '/=', |
|
| 186 | + 8364 => 'EUR', |
|
| 187 | + 8240 => '0/00', |
|
| 188 | + 1033 => 'LJ', |
|
| 189 | + 8249 => '<', |
|
| 190 | + 1034 => 'NJ', |
|
| 191 | + 1036 => 'KJ', |
|
| 192 | + 1035 => 'Ts', |
|
| 193 | + 1039 => 'DZ', |
|
| 194 | + 1106 => 'd%', |
|
| 195 | + 8216 => '`', |
|
| 196 | + 8217 => '\'', |
|
| 197 | + 8220 => '"', |
|
| 198 | + 8221 => '"', |
|
| 199 | + 8226 => ' o ', |
|
| 200 | + 8211 => '-', |
|
| 201 | + 8212 => '~', |
|
| 202 | + 8482 => '(TM)', |
|
| 203 | + 1113 => 'lj', |
|
| 204 | + 8250 => '>', |
|
| 205 | + 1114 => 'nj', |
|
| 206 | + 1116 => 'kj', |
|
| 207 | + 1115 => 'ts', |
|
| 208 | + 1119 => 'dz', |
|
| 209 | + 1038 => 'V%', |
|
| 210 | + 1118 => 'v%', |
|
| 211 | + 1032 => 'J%', |
|
| 212 | + 1168 => 'G3', |
|
| 213 | + 1025 => 'IO', |
|
| 214 | + 1028 => 'IE', |
|
| 215 | + 1031 => 'YI', |
|
| 216 | + 1030 => 'II', |
|
| 217 | + 1110 => 'ii', |
|
| 218 | + 1169 => 'g3', |
|
| 219 | + 1105 => 'io', |
|
| 220 | + 8470 => 'No.', |
|
| 221 | + 1108 => 'ie', |
|
| 222 | + 1112 => 'j%', |
|
| 223 | + 1029 => 'DS', |
|
| 224 | + 1109 => 'ds', |
|
| 225 | + 1111 => 'yi', |
|
| 226 | + 1040 => 'A', |
|
| 227 | + 1041 => 'B', |
|
| 228 | + 1042 => 'V', |
|
| 229 | + 1043 => 'G', |
|
| 230 | + 1044 => 'D', |
|
| 231 | + 1045 => 'E', |
|
| 232 | + 1046 => 'ZH', |
|
| 233 | + 1047 => 'Z', |
|
| 234 | + 1048 => 'I', |
|
| 235 | + 1049 => 'J', |
|
| 236 | + 1050 => 'K', |
|
| 237 | + 1051 => 'L', |
|
| 238 | + 1052 => 'M', |
|
| 239 | + 1053 => 'N', |
|
| 240 | + 1054 => 'O', |
|
| 241 | + 1055 => 'P', |
|
| 242 | + 1056 => 'R', |
|
| 243 | + 1057 => 'S', |
|
| 244 | + 1058 => 'T', |
|
| 245 | + 1059 => 'U', |
|
| 246 | + 1060 => 'F', |
|
| 247 | + 1061 => 'H', |
|
| 248 | + 1062 => 'C', |
|
| 249 | + 1063 => 'CH', |
|
| 250 | + 1064 => 'SH', |
|
| 251 | + 1065 => 'SCH', |
|
| 252 | + 1066 => '"', |
|
| 253 | + 1067 => 'Y', |
|
| 254 | + 1068 => '\'', |
|
| 255 | + 1069 => '`E', |
|
| 256 | + 1070 => 'YU', |
|
| 257 | + 1071 => 'YA', |
|
| 258 | + 1072 => 'a', |
|
| 259 | + 1073 => 'b', |
|
| 260 | + 1074 => 'v', |
|
| 261 | + 1075 => 'g', |
|
| 262 | + 1076 => 'd', |
|
| 263 | + 1077 => 'e', |
|
| 264 | + 1078 => 'zh', |
|
| 265 | + 1079 => 'z', |
|
| 266 | + 1080 => 'i', |
|
| 267 | + 1081 => 'j', |
|
| 268 | + 1082 => 'k', |
|
| 269 | + 1083 => 'l', |
|
| 270 | + 1084 => 'm', |
|
| 271 | + 1085 => 'n', |
|
| 272 | + 1086 => 'o', |
|
| 273 | + 1087 => 'p', |
|
| 274 | + 1088 => 'r', |
|
| 275 | + 1089 => 's', |
|
| 276 | + 1090 => 't', |
|
| 277 | + 1091 => 'u', |
|
| 278 | + 1092 => 'f', |
|
| 279 | + 1093 => 'h', |
|
| 280 | + 1094 => 'c', |
|
| 281 | + 1095 => 'ch', |
|
| 282 | + 1096 => 'sh', |
|
| 283 | + 1097 => 'sch', |
|
| 284 | + 1098 => '"', |
|
| 285 | + 1099 => 'y', |
|
| 286 | + 1100 => '\'', |
|
| 287 | + 1101 => '`e', |
|
| 288 | + 1102 => 'yu', |
|
| 289 | + 1103 => 'ya', |
|
| 290 | 290 | |
| 291 | 291 | // vietnamien en translitteration de base |
| 292 | - 7843 => 'a', |
|
| 293 | - 7841 => 'a', |
|
| 294 | - 7845 => 'a', |
|
| 295 | - 7847 => 'a', |
|
| 296 | - 7849 => 'a', |
|
| 297 | - 7851 => 'a', |
|
| 298 | - 7853 => 'a', |
|
| 299 | - 7855 => 'a', |
|
| 300 | - 7857 => 'a', |
|
| 301 | - 7859 => 'a', |
|
| 302 | - 7861 => 'a', |
|
| 303 | - 7863 => 'a', |
|
| 304 | - 7842 => 'A', |
|
| 305 | - 7840 => 'A', |
|
| 306 | - 7844 => 'A', |
|
| 307 | - 7846 => 'A', |
|
| 308 | - 7848 => 'A', |
|
| 309 | - 7850 => 'A', |
|
| 310 | - 7852 => 'A', |
|
| 311 | - 7854 => 'A', |
|
| 312 | - 7856 => 'A', |
|
| 313 | - 7858 => 'A', |
|
| 314 | - 7860 => 'A', |
|
| 315 | - 7862 => 'A', |
|
| 316 | - 7867 => 'e', |
|
| 317 | - 7869 => 'e', |
|
| 318 | - 7865 => 'e', |
|
| 319 | - 7871 => 'e', |
|
| 320 | - 7873 => 'e', |
|
| 321 | - 7875 => 'e', |
|
| 322 | - 7877 => 'e', |
|
| 323 | - 7879 => 'e', |
|
| 324 | - 7866 => 'E', |
|
| 325 | - 7868 => 'E', |
|
| 326 | - 7864 => 'E', |
|
| 327 | - 7870 => 'E', |
|
| 328 | - 7872 => 'E', |
|
| 329 | - 7874 => 'E', |
|
| 330 | - 7876 => 'E', |
|
| 331 | - 7878 => 'E', |
|
| 332 | - 7881 => 'i', |
|
| 333 | - 7883 => 'i', |
|
| 334 | - 7880 => 'I', |
|
| 335 | - 7882 => 'I', |
|
| 336 | - 7887 => 'o', |
|
| 337 | - 7885 => 'o', |
|
| 338 | - 7889 => 'o', |
|
| 339 | - 7891 => 'o', |
|
| 340 | - 7893 => 'o', |
|
| 341 | - 7895 => 'o', |
|
| 342 | - 7897 => 'o', |
|
| 343 | - 417 => 'o', |
|
| 344 | - 7899 => 'o', |
|
| 345 | - 7901 => 'o', |
|
| 346 | - 7903 => 'o', |
|
| 347 | - 7905 => 'o', |
|
| 348 | - 7907 => 'o', |
|
| 349 | - 7886 => 'O', |
|
| 350 | - 7884 => 'O', |
|
| 351 | - 7888 => 'O', |
|
| 352 | - 7890 => 'O', |
|
| 353 | - 7892 => 'O', |
|
| 354 | - 7894 => 'O', |
|
| 355 | - 7896 => 'O', |
|
| 356 | - 416 => 'O', |
|
| 357 | - 7898 => 'O', |
|
| 358 | - 7900 => 'O', |
|
| 359 | - 7902 => 'O', |
|
| 360 | - 7904 => 'O', |
|
| 361 | - 7906 => 'O', |
|
| 362 | - 7911 => 'u', |
|
| 363 | - 361 => 'u', |
|
| 364 | - 7909 => 'u', |
|
| 365 | - 432 => 'u', |
|
| 366 | - 7913 => 'u', |
|
| 367 | - 7915 => 'u', |
|
| 368 | - 7917 => 'u', |
|
| 369 | - 7919 => 'u', |
|
| 370 | - 7921 => 'u', |
|
| 371 | - 7910 => 'U', |
|
| 372 | - 360 => 'U', |
|
| 373 | - 7908 => 'U', |
|
| 374 | - 431 => 'U', |
|
| 375 | - 7912 => 'U', |
|
| 376 | - 7914 => 'U', |
|
| 377 | - 7916 => 'U', |
|
| 378 | - 7918 => 'U', |
|
| 379 | - 7920 => 'U', |
|
| 380 | - 253 => 'y', |
|
| 381 | - 7923 => 'y', |
|
| 382 | - 7927 => 'y', |
|
| 383 | - 7929 => 'y', |
|
| 384 | - 7925 => 'y', |
|
| 385 | - 221 => 'Y', |
|
| 386 | - 7922 => 'Y', |
|
| 387 | - 7926 => 'Y', |
|
| 388 | - 7928 => 'Y', |
|
| 389 | - 7924 => 'Y', |
|
| 390 | - 273 => 'd' |
|
| 292 | + 7843 => 'a', |
|
| 293 | + 7841 => 'a', |
|
| 294 | + 7845 => 'a', |
|
| 295 | + 7847 => 'a', |
|
| 296 | + 7849 => 'a', |
|
| 297 | + 7851 => 'a', |
|
| 298 | + 7853 => 'a', |
|
| 299 | + 7855 => 'a', |
|
| 300 | + 7857 => 'a', |
|
| 301 | + 7859 => 'a', |
|
| 302 | + 7861 => 'a', |
|
| 303 | + 7863 => 'a', |
|
| 304 | + 7842 => 'A', |
|
| 305 | + 7840 => 'A', |
|
| 306 | + 7844 => 'A', |
|
| 307 | + 7846 => 'A', |
|
| 308 | + 7848 => 'A', |
|
| 309 | + 7850 => 'A', |
|
| 310 | + 7852 => 'A', |
|
| 311 | + 7854 => 'A', |
|
| 312 | + 7856 => 'A', |
|
| 313 | + 7858 => 'A', |
|
| 314 | + 7860 => 'A', |
|
| 315 | + 7862 => 'A', |
|
| 316 | + 7867 => 'e', |
|
| 317 | + 7869 => 'e', |
|
| 318 | + 7865 => 'e', |
|
| 319 | + 7871 => 'e', |
|
| 320 | + 7873 => 'e', |
|
| 321 | + 7875 => 'e', |
|
| 322 | + 7877 => 'e', |
|
| 323 | + 7879 => 'e', |
|
| 324 | + 7866 => 'E', |
|
| 325 | + 7868 => 'E', |
|
| 326 | + 7864 => 'E', |
|
| 327 | + 7870 => 'E', |
|
| 328 | + 7872 => 'E', |
|
| 329 | + 7874 => 'E', |
|
| 330 | + 7876 => 'E', |
|
| 331 | + 7878 => 'E', |
|
| 332 | + 7881 => 'i', |
|
| 333 | + 7883 => 'i', |
|
| 334 | + 7880 => 'I', |
|
| 335 | + 7882 => 'I', |
|
| 336 | + 7887 => 'o', |
|
| 337 | + 7885 => 'o', |
|
| 338 | + 7889 => 'o', |
|
| 339 | + 7891 => 'o', |
|
| 340 | + 7893 => 'o', |
|
| 341 | + 7895 => 'o', |
|
| 342 | + 7897 => 'o', |
|
| 343 | + 417 => 'o', |
|
| 344 | + 7899 => 'o', |
|
| 345 | + 7901 => 'o', |
|
| 346 | + 7903 => 'o', |
|
| 347 | + 7905 => 'o', |
|
| 348 | + 7907 => 'o', |
|
| 349 | + 7886 => 'O', |
|
| 350 | + 7884 => 'O', |
|
| 351 | + 7888 => 'O', |
|
| 352 | + 7890 => 'O', |
|
| 353 | + 7892 => 'O', |
|
| 354 | + 7894 => 'O', |
|
| 355 | + 7896 => 'O', |
|
| 356 | + 416 => 'O', |
|
| 357 | + 7898 => 'O', |
|
| 358 | + 7900 => 'O', |
|
| 359 | + 7902 => 'O', |
|
| 360 | + 7904 => 'O', |
|
| 361 | + 7906 => 'O', |
|
| 362 | + 7911 => 'u', |
|
| 363 | + 361 => 'u', |
|
| 364 | + 7909 => 'u', |
|
| 365 | + 432 => 'u', |
|
| 366 | + 7913 => 'u', |
|
| 367 | + 7915 => 'u', |
|
| 368 | + 7917 => 'u', |
|
| 369 | + 7919 => 'u', |
|
| 370 | + 7921 => 'u', |
|
| 371 | + 7910 => 'U', |
|
| 372 | + 360 => 'U', |
|
| 373 | + 7908 => 'U', |
|
| 374 | + 431 => 'U', |
|
| 375 | + 7912 => 'U', |
|
| 376 | + 7914 => 'U', |
|
| 377 | + 7916 => 'U', |
|
| 378 | + 7918 => 'U', |
|
| 379 | + 7920 => 'U', |
|
| 380 | + 253 => 'y', |
|
| 381 | + 7923 => 'y', |
|
| 382 | + 7927 => 'y', |
|
| 383 | + 7929 => 'y', |
|
| 384 | + 7925 => 'y', |
|
| 385 | + 221 => 'Y', |
|
| 386 | + 7922 => 'Y', |
|
| 387 | + 7926 => 'Y', |
|
| 388 | + 7928 => 'Y', |
|
| 389 | + 7924 => 'Y', |
|
| 390 | + 273 => 'd' |
|
| 391 | 391 | |
| 392 | 392 | ]; |
@@ -4,123 +4,123 @@ |
||
| 4 | 4 | // ** ne pas modifier le fichier ** |
| 5 | 5 | |
| 6 | 6 | if (!defined('_ECRIRE_INC_VERSION')) { |
| 7 | - return; |
|
| 7 | + return; |
|
| 8 | 8 | } |
| 9 | 9 | |
| 10 | 10 | $GLOBALS[$GLOBALS['idx_lang']] = array( |
| 11 | 11 | |
| 12 | - // A |
|
| 13 | - 'accueil_site' => 'Startseite', |
|
| 14 | - 'article' => 'Artikel', |
|
| 15 | - 'articles' => 'Artikel', |
|
| 16 | - 'articles_auteur' => 'Artikel dieses Autors', |
|
| 17 | - 'articles_populaires' => 'Die beliebtesten Artikel', |
|
| 18 | - 'articles_rubrique' => 'Artikel dieser Rubrik', |
|
| 19 | - 'aucun_article' => 'Unter dieser Adresse gibt es keinen Artikel.', |
|
| 20 | - 'aucun_auteur' => 'Unter dieser Adresse gibt es keinen Autor.', |
|
| 21 | - 'aucun_site' => 'Unter dieser Adresse gibt es keien Website.', |
|
| 22 | - 'aucune_breve' => 'Unter dieser Adresse gibt es keine Meldung.', |
|
| 23 | - 'aucune_rubrique' => 'Unter dieser Adresse gibt es keine Rubrik.', |
|
| 24 | - 'auteur' => 'Autor', |
|
| 25 | - 'autres' => 'Andere', |
|
| 26 | - 'autres_breves' => 'Weitere Meldungen.', |
|
| 27 | - 'autres_groupes_mots_clefs' => 'Weitere Schlagwortgruppen', |
|
| 28 | - 'autres_sites' => 'Weitere Websites', |
|
| 29 | - |
|
| 30 | - // B |
|
| 31 | - 'bonjour' => 'Hallo', |
|
| 32 | - |
|
| 33 | - // C |
|
| 34 | - 'commenter_site' => 'Website kommentieren', |
|
| 35 | - 'contact' => 'Kontakt', |
|
| 36 | - 'copie_document_impossible' => 'Dokument kann nicht kopiert werden', |
|
| 37 | - |
|
| 38 | - // D |
|
| 39 | - 'date' => 'Datum', |
|
| 40 | - 'dernier_ajout' => 'Neuester Eintrag', |
|
| 41 | - 'dernieres_breves' => 'Neue Meldungen', |
|
| 42 | - 'derniers_articles' => 'Neueste Artikel', |
|
| 43 | - 'derniers_commentaires' => 'Neueste Kommentare', |
|
| 44 | - 'derniers_messages_forum' => 'Neue Forumsbeiträge', |
|
| 45 | - |
|
| 46 | - // E |
|
| 47 | - 'edition_mode_texte' => 'Im Textmodus bearbeiten ', |
|
| 48 | - 'en_reponse' => 'Antwort auf:', |
|
| 49 | - 'en_resume' => 'Als Zusammenfassung', |
|
| 50 | - 'envoyer_message' => 'Nachricht senden', |
|
| 51 | - 'espace_prive' => 'Redaktion', |
|
| 52 | - |
|
| 53 | - // F |
|
| 54 | - 'formats_acceptes' => 'Akzeptierte Formate: @formats@.', |
|
| 55 | - |
|
| 56 | - // H |
|
| 57 | - 'hierarchie_site' => 'Baumstruktur der Website', |
|
| 58 | - |
|
| 59 | - // J |
|
| 60 | - 'jours' => 'Tage', |
|
| 61 | - |
|
| 62 | - // L |
|
| 63 | - 'lien_connecter' => 'Login', |
|
| 64 | - |
|
| 65 | - // M |
|
| 66 | - 'meme_auteur' => 'Vom gleichen Autor', |
|
| 67 | - 'meme_rubrique' => 'In der gleichen Rubrik', |
|
| 68 | - 'memes_auteurs' => 'Von den gleichen Autoren', |
|
| 69 | - 'message' => 'Nachricht', |
|
| 70 | - 'messages_forum' => 'Nachrichten', |
|
| 71 | - 'messages_recents' => 'Neue Forumsbeiträge', |
|
| 72 | - 'mots_clef' => 'Schlagwort', |
|
| 73 | - 'mots_clefs' => 'Schlagworte', |
|
| 74 | - 'mots_clefs_meme_groupe' => 'Schlagworte der gleichen Kategorie', |
|
| 75 | - |
|
| 76 | - // N |
|
| 77 | - 'navigation' => 'Navigation', |
|
| 78 | - 'nom' => 'Name', |
|
| 79 | - 'nouveautes' => 'Neuigkeiten', |
|
| 80 | - 'nouveautes_web' => 'Neues im WWW', |
|
| 81 | - 'nouveaux_articles' => 'Neue Artikel', |
|
| 82 | - 'nouvelles_breves' => 'Neue Meldungen', |
|
| 83 | - |
|
| 84 | - // P |
|
| 85 | - 'page_precedente' => 'vorige Seite', |
|
| 86 | - 'page_suivante' => 'nächste Seite', |
|
| 87 | - 'par_auteur' => 'von ', |
|
| 88 | - 'participer_site' => 'Sie können bei dieser Website mitmachen, wenn Sie sich anmelden. Sie erhalten sofort eine E-Mail mit den Zugangsdaten zum Redaktionssystem.', |
|
| 89 | - 'plan_site' => 'Sitemap', |
|
| 90 | - 'popularite' => 'Beliebtheit', |
|
| 91 | - 'poster_message' => 'Nachricht senden', |
|
| 92 | - 'proposer_site' => 'Sie können in dieser Rubrik eine Seite vorschlagen :', |
|
| 93 | - |
|
| 94 | - // R |
|
| 95 | - 'repondre_article' => 'auf diesen Artikel antworten', |
|
| 96 | - 'repondre_breve' => 'auf diese Meldung antworten', |
|
| 97 | - 'resultats_recherche' => 'Suchergebnis(se)', |
|
| 98 | - 'retour_debut_forums' => 'Zurück zum Beginn des Forums', |
|
| 99 | - 'rss_abonnement' => 'Kopieren Sie die folgende URL in Ihren Feedreader:', |
|
| 100 | - 'rss_abonnement_titre' => 'Abonnieren', |
|
| 101 | - 'rss_abonnement_titre_page' => 'Abonnieren von', |
|
| 102 | - 'rss_explication' => 'Ein RSS-Feed sammelt Informationen über die Aktualisierungen einer Website. Er liefert den Inhalt von Einträgen oder Kommentaren oder einen Auszug daraus sowie einen Link zu den Vollversionen und einige andere Informationen. Der Feed ist dazu gedacht, von einem RSS-Aggregator (Feedreader) gelesen zu werden', |
|
| 103 | - 'rss_explication_titre' => 'Was ist ein RSS-Feed ?', |
|
| 104 | - 'rubrique' => 'Rubrik', |
|
| 105 | - 'rubriques' => 'Rubriken', |
|
| 106 | - |
|
| 107 | - // S |
|
| 108 | - 'signatures_petition' => 'Unterschrift', |
|
| 109 | - 'site_realise_avec_spip' => 'Realisiert mit SPIP', |
|
| 110 | - 'sites_web' => 'Websites', |
|
| 111 | - 'sous_rubriques' => 'Unterrubriken', |
|
| 112 | - 'spam' => 'SPAM', |
|
| 113 | - 'suite' => 'weiter', |
|
| 114 | - 'sur_web' => 'Im WWW', |
|
| 115 | - 'syndiquer_rubrique' => 'Diese Rubrik per RSS einbinden', |
|
| 116 | - 'syndiquer_site' => 'Die ganze Website mit RSS einbinden', |
|
| 117 | - |
|
| 118 | - // T |
|
| 119 | - 'texte_lettre_information' => 'Dies ist der Newsletter der Website ', |
|
| 120 | - 'texte_lettre_information_2' => 'Diese Mail informiert über die Neuerscheinungen der letzten', |
|
| 121 | - |
|
| 122 | - // V |
|
| 123 | - 'ver_imprimer' => 'Druckversion', |
|
| 124 | - 'voir_en_ligne' => 'Online ansehen', |
|
| 125 | - 'voir_squelette' => 'Layoutvorlage dieser Seite ansehen' |
|
| 12 | + // A |
|
| 13 | + 'accueil_site' => 'Startseite', |
|
| 14 | + 'article' => 'Artikel', |
|
| 15 | + 'articles' => 'Artikel', |
|
| 16 | + 'articles_auteur' => 'Artikel dieses Autors', |
|
| 17 | + 'articles_populaires' => 'Die beliebtesten Artikel', |
|
| 18 | + 'articles_rubrique' => 'Artikel dieser Rubrik', |
|
| 19 | + 'aucun_article' => 'Unter dieser Adresse gibt es keinen Artikel.', |
|
| 20 | + 'aucun_auteur' => 'Unter dieser Adresse gibt es keinen Autor.', |
|
| 21 | + 'aucun_site' => 'Unter dieser Adresse gibt es keien Website.', |
|
| 22 | + 'aucune_breve' => 'Unter dieser Adresse gibt es keine Meldung.', |
|
| 23 | + 'aucune_rubrique' => 'Unter dieser Adresse gibt es keine Rubrik.', |
|
| 24 | + 'auteur' => 'Autor', |
|
| 25 | + 'autres' => 'Andere', |
|
| 26 | + 'autres_breves' => 'Weitere Meldungen.', |
|
| 27 | + 'autres_groupes_mots_clefs' => 'Weitere Schlagwortgruppen', |
|
| 28 | + 'autres_sites' => 'Weitere Websites', |
|
| 29 | + |
|
| 30 | + // B |
|
| 31 | + 'bonjour' => 'Hallo', |
|
| 32 | + |
|
| 33 | + // C |
|
| 34 | + 'commenter_site' => 'Website kommentieren', |
|
| 35 | + 'contact' => 'Kontakt', |
|
| 36 | + 'copie_document_impossible' => 'Dokument kann nicht kopiert werden', |
|
| 37 | + |
|
| 38 | + // D |
|
| 39 | + 'date' => 'Datum', |
|
| 40 | + 'dernier_ajout' => 'Neuester Eintrag', |
|
| 41 | + 'dernieres_breves' => 'Neue Meldungen', |
|
| 42 | + 'derniers_articles' => 'Neueste Artikel', |
|
| 43 | + 'derniers_commentaires' => 'Neueste Kommentare', |
|
| 44 | + 'derniers_messages_forum' => 'Neue Forumsbeiträge', |
|
| 45 | + |
|
| 46 | + // E |
|
| 47 | + 'edition_mode_texte' => 'Im Textmodus bearbeiten ', |
|
| 48 | + 'en_reponse' => 'Antwort auf:', |
|
| 49 | + 'en_resume' => 'Als Zusammenfassung', |
|
| 50 | + 'envoyer_message' => 'Nachricht senden', |
|
| 51 | + 'espace_prive' => 'Redaktion', |
|
| 52 | + |
|
| 53 | + // F |
|
| 54 | + 'formats_acceptes' => 'Akzeptierte Formate: @formats@.', |
|
| 55 | + |
|
| 56 | + // H |
|
| 57 | + 'hierarchie_site' => 'Baumstruktur der Website', |
|
| 58 | + |
|
| 59 | + // J |
|
| 60 | + 'jours' => 'Tage', |
|
| 61 | + |
|
| 62 | + // L |
|
| 63 | + 'lien_connecter' => 'Login', |
|
| 64 | + |
|
| 65 | + // M |
|
| 66 | + 'meme_auteur' => 'Vom gleichen Autor', |
|
| 67 | + 'meme_rubrique' => 'In der gleichen Rubrik', |
|
| 68 | + 'memes_auteurs' => 'Von den gleichen Autoren', |
|
| 69 | + 'message' => 'Nachricht', |
|
| 70 | + 'messages_forum' => 'Nachrichten', |
|
| 71 | + 'messages_recents' => 'Neue Forumsbeiträge', |
|
| 72 | + 'mots_clef' => 'Schlagwort', |
|
| 73 | + 'mots_clefs' => 'Schlagworte', |
|
| 74 | + 'mots_clefs_meme_groupe' => 'Schlagworte der gleichen Kategorie', |
|
| 75 | + |
|
| 76 | + // N |
|
| 77 | + 'navigation' => 'Navigation', |
|
| 78 | + 'nom' => 'Name', |
|
| 79 | + 'nouveautes' => 'Neuigkeiten', |
|
| 80 | + 'nouveautes_web' => 'Neues im WWW', |
|
| 81 | + 'nouveaux_articles' => 'Neue Artikel', |
|
| 82 | + 'nouvelles_breves' => 'Neue Meldungen', |
|
| 83 | + |
|
| 84 | + // P |
|
| 85 | + 'page_precedente' => 'vorige Seite', |
|
| 86 | + 'page_suivante' => 'nächste Seite', |
|
| 87 | + 'par_auteur' => 'von ', |
|
| 88 | + 'participer_site' => 'Sie können bei dieser Website mitmachen, wenn Sie sich anmelden. Sie erhalten sofort eine E-Mail mit den Zugangsdaten zum Redaktionssystem.', |
|
| 89 | + 'plan_site' => 'Sitemap', |
|
| 90 | + 'popularite' => 'Beliebtheit', |
|
| 91 | + 'poster_message' => 'Nachricht senden', |
|
| 92 | + 'proposer_site' => 'Sie können in dieser Rubrik eine Seite vorschlagen :', |
|
| 93 | + |
|
| 94 | + // R |
|
| 95 | + 'repondre_article' => 'auf diesen Artikel antworten', |
|
| 96 | + 'repondre_breve' => 'auf diese Meldung antworten', |
|
| 97 | + 'resultats_recherche' => 'Suchergebnis(se)', |
|
| 98 | + 'retour_debut_forums' => 'Zurück zum Beginn des Forums', |
|
| 99 | + 'rss_abonnement' => 'Kopieren Sie die folgende URL in Ihren Feedreader:', |
|
| 100 | + 'rss_abonnement_titre' => 'Abonnieren', |
|
| 101 | + 'rss_abonnement_titre_page' => 'Abonnieren von', |
|
| 102 | + 'rss_explication' => 'Ein RSS-Feed sammelt Informationen über die Aktualisierungen einer Website. Er liefert den Inhalt von Einträgen oder Kommentaren oder einen Auszug daraus sowie einen Link zu den Vollversionen und einige andere Informationen. Der Feed ist dazu gedacht, von einem RSS-Aggregator (Feedreader) gelesen zu werden', |
|
| 103 | + 'rss_explication_titre' => 'Was ist ein RSS-Feed ?', |
|
| 104 | + 'rubrique' => 'Rubrik', |
|
| 105 | + 'rubriques' => 'Rubriken', |
|
| 106 | + |
|
| 107 | + // S |
|
| 108 | + 'signatures_petition' => 'Unterschrift', |
|
| 109 | + 'site_realise_avec_spip' => 'Realisiert mit SPIP', |
|
| 110 | + 'sites_web' => 'Websites', |
|
| 111 | + 'sous_rubriques' => 'Unterrubriken', |
|
| 112 | + 'spam' => 'SPAM', |
|
| 113 | + 'suite' => 'weiter', |
|
| 114 | + 'sur_web' => 'Im WWW', |
|
| 115 | + 'syndiquer_rubrique' => 'Diese Rubrik per RSS einbinden', |
|
| 116 | + 'syndiquer_site' => 'Die ganze Website mit RSS einbinden', |
|
| 117 | + |
|
| 118 | + // T |
|
| 119 | + 'texte_lettre_information' => 'Dies ist der Newsletter der Website ', |
|
| 120 | + 'texte_lettre_information_2' => 'Diese Mail informiert über die Neuerscheinungen der letzten', |
|
| 121 | + |
|
| 122 | + // V |
|
| 123 | + 'ver_imprimer' => 'Druckversion', |
|
| 124 | + 'voir_en_ligne' => 'Online ansehen', |
|
| 125 | + 'voir_squelette' => 'Layoutvorlage dieser Seite ansehen' |
|
| 126 | 126 | ); |
@@ -37,7 +37,7 @@ discard block |
||
| 37 | 37 | $pass_poivre = hash_hmac('sha256', $password_clair, $key); |
| 38 | 38 | return password_verify($pass_poivre, $password_hash); |
| 39 | 39 | } |
| 40 | - spip_log('Aucune clé pour vérifier le mot de passe', 'chiffrer' . _LOG_INFO_IMPORTANTE); |
|
| 40 | + spip_log('Aucune clé pour vérifier le mot de passe', 'chiffrer'._LOG_INFO_IMPORTANTE); |
|
| 41 | 41 | return false; |
| 42 | 42 | } |
| 43 | 43 | |
@@ -59,7 +59,7 @@ discard block |
||
| 59 | 59 | $pass_poivre = hash_hmac('sha256', $password_clair, $key); |
| 60 | 60 | return password_hash($pass_poivre, PASSWORD_DEFAULT); |
| 61 | 61 | } |
| 62 | - spip_log('Aucune clé pour chiffrer le mot de passe', 'chiffrer' . _LOG_INFO_IMPORTANTE); |
|
| 62 | + spip_log('Aucune clé pour chiffrer le mot de passe', 'chiffrer'._LOG_INFO_IMPORTANTE); |
|
| 63 | 63 | return null; |
| 64 | 64 | } |
| 65 | 65 | |
@@ -13,49 +13,49 @@ |
||
| 13 | 13 | |
| 14 | 14 | /** Vérification et hachage de mot de passe */ |
| 15 | 15 | class Password { |
| 16 | - /** |
|
| 17 | - * verifier qu'un mot de passe en clair est correct a l'aide de son hash |
|
| 18 | - * |
|
| 19 | - * Le mot de passe est poivre via la cle secret_des_auth |
|
| 20 | - */ |
|
| 21 | - public static function verifier( |
|
| 22 | - #[\SensitiveParameter] |
|
| 23 | - string $password_clair, |
|
| 24 | - #[\SensitiveParameter] |
|
| 25 | - string $password_hash, |
|
| 26 | - #[\SensitiveParameter] |
|
| 27 | - ?string $key = null |
|
| 28 | - ): bool { |
|
| 29 | - $key ??= self::getDefaultKey(); |
|
| 30 | - if ($key) { |
|
| 31 | - $pass_poivre = hash_hmac('sha256', $password_clair, $key); |
|
| 32 | - return password_verify($pass_poivre, $password_hash); |
|
| 33 | - } |
|
| 34 | - spip_log('Aucune clé pour vérifier le mot de passe', 'chiffrer' . _LOG_INFO_IMPORTANTE); |
|
| 35 | - return false; |
|
| 36 | - } |
|
| 16 | + /** |
|
| 17 | + * verifier qu'un mot de passe en clair est correct a l'aide de son hash |
|
| 18 | + * |
|
| 19 | + * Le mot de passe est poivre via la cle secret_des_auth |
|
| 20 | + */ |
|
| 21 | + public static function verifier( |
|
| 22 | + #[\SensitiveParameter] |
|
| 23 | + string $password_clair, |
|
| 24 | + #[\SensitiveParameter] |
|
| 25 | + string $password_hash, |
|
| 26 | + #[\SensitiveParameter] |
|
| 27 | + ?string $key = null |
|
| 28 | + ): bool { |
|
| 29 | + $key ??= self::getDefaultKey(); |
|
| 30 | + if ($key) { |
|
| 31 | + $pass_poivre = hash_hmac('sha256', $password_clair, $key); |
|
| 32 | + return password_verify($pass_poivre, $password_hash); |
|
| 33 | + } |
|
| 34 | + spip_log('Aucune clé pour vérifier le mot de passe', 'chiffrer' . _LOG_INFO_IMPORTANTE); |
|
| 35 | + return false; |
|
| 36 | + } |
|
| 37 | 37 | |
| 38 | - /** |
|
| 39 | - * Calculer un hash salé du mot de passe |
|
| 40 | - */ |
|
| 41 | - public static function hacher( |
|
| 42 | - #[\SensitiveParameter] |
|
| 43 | - string $password_clair, |
|
| 44 | - #[\SensitiveParameter] |
|
| 45 | - ?string $key = null |
|
| 46 | - ): ?string { |
|
| 47 | - $key ??= self::getDefaultKey(); |
|
| 48 | - // ne pas fournir un hash errone si la cle nous manque |
|
| 49 | - if ($key) { |
|
| 50 | - $pass_poivre = hash_hmac('sha256', $password_clair, $key); |
|
| 51 | - return password_hash($pass_poivre, PASSWORD_DEFAULT); |
|
| 52 | - } |
|
| 53 | - spip_log('Aucune clé pour chiffrer le mot de passe', 'chiffrer' . _LOG_INFO_IMPORTANTE); |
|
| 54 | - return null; |
|
| 55 | - } |
|
| 38 | + /** |
|
| 39 | + * Calculer un hash salé du mot de passe |
|
| 40 | + */ |
|
| 41 | + public static function hacher( |
|
| 42 | + #[\SensitiveParameter] |
|
| 43 | + string $password_clair, |
|
| 44 | + #[\SensitiveParameter] |
|
| 45 | + ?string $key = null |
|
| 46 | + ): ?string { |
|
| 47 | + $key ??= self::getDefaultKey(); |
|
| 48 | + // ne pas fournir un hash errone si la cle nous manque |
|
| 49 | + if ($key) { |
|
| 50 | + $pass_poivre = hash_hmac('sha256', $password_clair, $key); |
|
| 51 | + return password_hash($pass_poivre, PASSWORD_DEFAULT); |
|
| 52 | + } |
|
| 53 | + spip_log('Aucune clé pour chiffrer le mot de passe', 'chiffrer' . _LOG_INFO_IMPORTANTE); |
|
| 54 | + return null; |
|
| 55 | + } |
|
| 56 | 56 | |
| 57 | - private static function getDefaultKey(): ?string { |
|
| 58 | - $keys = SpipCles::instance(); |
|
| 59 | - return $keys->getSecretAuth(); |
|
| 60 | - } |
|
| 57 | + private static function getDefaultKey(): ?string { |
|
| 58 | + $keys = SpipCles::instance(); |
|
| 59 | + return $keys->getSecretAuth(); |
|
| 60 | + } |
|
| 61 | 61 | } |
@@ -30,7 +30,7 @@ |
||
| 30 | 30 | public function generate(string $name): string { |
| 31 | 31 | $key = Chiffrement::keygen(); |
| 32 | 32 | $this->keys[$name] = $key; |
| 33 | - spip_log("Création de la cle $name", 'chiffrer' . _LOG_INFO_IMPORTANTE); |
|
| 33 | + spip_log("Création de la cle $name", 'chiffrer'._LOG_INFO_IMPORTANTE); |
|
| 34 | 34 | return $key; |
| 35 | 35 | } |
| 36 | 36 | |
@@ -13,46 +13,46 @@ |
||
| 13 | 13 | |
| 14 | 14 | /** Conteneur de clés (chiffrement, authentification) */ |
| 15 | 15 | class Cles implements \Countable /* , ContainerInterface */ { |
| 16 | - public function __construct(private array $keys) { |
|
| 17 | - } |
|
| 18 | - |
|
| 19 | - public function has(string $name): bool { |
|
| 20 | - return array_key_exists($name, $this->keys); |
|
| 21 | - } |
|
| 22 | - |
|
| 23 | - public function get(string $name): ?string { |
|
| 24 | - return $this->keys[$name] ?? null; |
|
| 25 | - } |
|
| 26 | - |
|
| 27 | - public function generate(string $name): string { |
|
| 28 | - $key = Chiffrement::keygen(); |
|
| 29 | - $this->keys[$name] = $key; |
|
| 30 | - spip_log("Création de la cle $name", 'chiffrer' . _LOG_INFO_IMPORTANTE); |
|
| 31 | - return $key; |
|
| 32 | - } |
|
| 33 | - |
|
| 34 | - public function set( |
|
| 35 | - string $name, |
|
| 36 | - #[\SensitiveParameter] |
|
| 37 | - string $key |
|
| 38 | - ): void { |
|
| 39 | - $this->keys[$name] = $key; |
|
| 40 | - } |
|
| 41 | - |
|
| 42 | - public function delete(string $name): bool { |
|
| 43 | - if (isset($this->keys[$name])) { |
|
| 44 | - unset($this->keys[$name]); |
|
| 45 | - return true; |
|
| 46 | - }; |
|
| 47 | - return false; |
|
| 48 | - } |
|
| 49 | - |
|
| 50 | - public function count(): int { |
|
| 51 | - return count($this->keys); |
|
| 52 | - } |
|
| 53 | - |
|
| 54 | - public function toJson(): string { |
|
| 55 | - $json = array_map('base64_encode', $this->keys); |
|
| 56 | - return \json_encode($json); |
|
| 57 | - } |
|
| 16 | + public function __construct(private array $keys) { |
|
| 17 | + } |
|
| 18 | + |
|
| 19 | + public function has(string $name): bool { |
|
| 20 | + return array_key_exists($name, $this->keys); |
|
| 21 | + } |
|
| 22 | + |
|
| 23 | + public function get(string $name): ?string { |
|
| 24 | + return $this->keys[$name] ?? null; |
|
| 25 | + } |
|
| 26 | + |
|
| 27 | + public function generate(string $name): string { |
|
| 28 | + $key = Chiffrement::keygen(); |
|
| 29 | + $this->keys[$name] = $key; |
|
| 30 | + spip_log("Création de la cle $name", 'chiffrer' . _LOG_INFO_IMPORTANTE); |
|
| 31 | + return $key; |
|
| 32 | + } |
|
| 33 | + |
|
| 34 | + public function set( |
|
| 35 | + string $name, |
|
| 36 | + #[\SensitiveParameter] |
|
| 37 | + string $key |
|
| 38 | + ): void { |
|
| 39 | + $this->keys[$name] = $key; |
|
| 40 | + } |
|
| 41 | + |
|
| 42 | + public function delete(string $name): bool { |
|
| 43 | + if (isset($this->keys[$name])) { |
|
| 44 | + unset($this->keys[$name]); |
|
| 45 | + return true; |
|
| 46 | + }; |
|
| 47 | + return false; |
|
| 48 | + } |
|
| 49 | + |
|
| 50 | + public function count(): int { |
|
| 51 | + return count($this->keys); |
|
| 52 | + } |
|
| 53 | + |
|
| 54 | + public function toJson(): string { |
|
| 55 | + $json = array_map('base64_encode', $this->keys); |
|
| 56 | + return \json_encode($json); |
|
| 57 | + } |
|
| 58 | 58 | } |
@@ -16,7 +16,7 @@ discard block |
||
| 16 | 16 | * @package SPIP\Core\Queue |
| 17 | 17 | **/ |
| 18 | 18 | if (!defined('_ECRIRE_INC_VERSION')) { |
| 19 | - return; |
|
| 19 | + return; |
|
| 20 | 20 | } |
| 21 | 21 | |
| 22 | 22 | define('_JQ_SCHEDULED', 1); |
@@ -50,103 +50,103 @@ discard block |
||
| 50 | 50 | * id of job |
| 51 | 51 | */ |
| 52 | 52 | function queue_add_job( |
| 53 | - $function, |
|
| 54 | - $description, |
|
| 55 | - $arguments = [], |
|
| 56 | - $file = '', |
|
| 57 | - $no_duplicate = false, |
|
| 58 | - $time = 0, |
|
| 59 | - $priority = 0 |
|
| 53 | + $function, |
|
| 54 | + $description, |
|
| 55 | + $arguments = [], |
|
| 56 | + $file = '', |
|
| 57 | + $no_duplicate = false, |
|
| 58 | + $time = 0, |
|
| 59 | + $priority = 0 |
|
| 60 | 60 | ) { |
| 61 | - include_spip('base/abstract_sql'); |
|
| 62 | - |
|
| 63 | - // cas pourri de ecrire/action/editer_site avec l'option reload=oui |
|
| 64 | - if (defined('_GENIE_SYNDIC_NOW')) { |
|
| 65 | - $arguments['id_syndic'] = _GENIE_SYNDIC_NOW; |
|
| 66 | - } |
|
| 67 | - |
|
| 68 | - // serialiser les arguments |
|
| 69 | - $arguments = serialize($arguments); |
|
| 70 | - $md5args = md5($arguments); |
|
| 71 | - |
|
| 72 | - // si pas de date programee, des que possible |
|
| 73 | - $duplicate_where = 'status=' . intval(_JQ_SCHEDULED) . ' AND '; |
|
| 74 | - if (!$time) { |
|
| 75 | - $time = time(); |
|
| 76 | - $duplicate_where = ''; // ne pas dupliquer si deja le meme job en cours d'execution |
|
| 77 | - } |
|
| 78 | - $date = date('Y-m-d H:i:s', $time); |
|
| 79 | - |
|
| 80 | - $set_job = [ |
|
| 81 | - 'fonction' => $function, |
|
| 82 | - 'descriptif' => $description, |
|
| 83 | - 'args' => $arguments, |
|
| 84 | - 'md5args' => $md5args, |
|
| 85 | - 'inclure' => $file, |
|
| 86 | - 'priorite' => max(-10, min(10, intval($priority))), |
|
| 87 | - 'date' => $date, |
|
| 88 | - 'status' => _JQ_SCHEDULED, |
|
| 89 | - ]; |
|
| 90 | - // si option ne pas dupliquer, regarder si la fonction existe deja |
|
| 91 | - // avec les memes args et file |
|
| 92 | - if ( |
|
| 93 | - $no_duplicate |
|
| 94 | - and |
|
| 95 | - $id_job = sql_getfetsel( |
|
| 96 | - 'id_job', |
|
| 97 | - 'spip_jobs', |
|
| 98 | - $duplicate_where = |
|
| 99 | - $duplicate_where . 'fonction=' . sql_quote($function) |
|
| 100 | - . (($no_duplicate === 'function_only') ? '' : |
|
| 101 | - ' AND md5args=' . sql_quote($md5args) . ' AND inclure=' . sql_quote($file)) |
|
| 102 | - ) |
|
| 103 | - ) { |
|
| 104 | - return $id_job; |
|
| 105 | - } |
|
| 106 | - |
|
| 107 | - $id_job = sql_insertq('spip_jobs', $set_job); |
|
| 108 | - // en cas de concurrence, deux process peuvent arriver jusqu'ici en parallele |
|
| 109 | - // avec le meme job unique a inserer. Dans ce cas, celui qui a eu l'id le plus grand |
|
| 110 | - // doit s'effacer |
|
| 111 | - if ( |
|
| 112 | - $no_duplicate |
|
| 113 | - and |
|
| 114 | - $id_prev = sql_getfetsel('id_job', 'spip_jobs', 'id_job<' . intval($id_job) . " AND $duplicate_where") |
|
| 115 | - ) { |
|
| 116 | - sql_delete('spip_jobs', 'id_job=' . intval($id_job)); |
|
| 117 | - |
|
| 118 | - return $id_prev; |
|
| 119 | - } |
|
| 120 | - |
|
| 121 | - // verifier la non duplication qui peut etre problematique en cas de concurence |
|
| 122 | - // il faut dans ce cas que seul le dernier ajoute se supprime ! |
|
| 123 | - |
|
| 124 | - // une option de debug pour verifier que les arguments en base sont bons |
|
| 125 | - // ie cas d'un char non acceptables sur certains type de champs |
|
| 126 | - // qui coupe la valeur |
|
| 127 | - if (defined('_JQ_INSERT_CHECK_ARGS') and $id_job) { |
|
| 128 | - $args = sql_getfetsel('args', 'spip_jobs', 'id_job=' . intval($id_job)); |
|
| 129 | - if ($args !== $arguments) { |
|
| 130 | - spip_log('arguments job errones / longueur ' . strlen($args) . ' vs ' . strlen($arguments) . ' / valeur : ' . var_export( |
|
| 131 | - $arguments, |
|
| 132 | - true |
|
| 133 | - ), 'queue'); |
|
| 134 | - } |
|
| 135 | - } |
|
| 136 | - |
|
| 137 | - if ($id_job) { |
|
| 138 | - queue_update_next_job_time($time); |
|
| 139 | - } |
|
| 140 | - // si la mise en file d'attente du job echoue, |
|
| 141 | - // il ne faut pas perdre l'execution de la fonction |
|
| 142 | - // on la lance immediatement, c'est un fallback |
|
| 143 | - // sauf en cas d'upgrade necessaire (table spip_jobs inexistante) |
|
| 144 | - elseif ($GLOBALS['meta']['version_installee'] == $GLOBALS['spip_version_base']) { |
|
| 145 | - $set_job['id_job'] = 0; |
|
| 146 | - queue_start_job($set_job); |
|
| 147 | - } |
|
| 148 | - |
|
| 149 | - return $id_job; |
|
| 61 | + include_spip('base/abstract_sql'); |
|
| 62 | + |
|
| 63 | + // cas pourri de ecrire/action/editer_site avec l'option reload=oui |
|
| 64 | + if (defined('_GENIE_SYNDIC_NOW')) { |
|
| 65 | + $arguments['id_syndic'] = _GENIE_SYNDIC_NOW; |
|
| 66 | + } |
|
| 67 | + |
|
| 68 | + // serialiser les arguments |
|
| 69 | + $arguments = serialize($arguments); |
|
| 70 | + $md5args = md5($arguments); |
|
| 71 | + |
|
| 72 | + // si pas de date programee, des que possible |
|
| 73 | + $duplicate_where = 'status=' . intval(_JQ_SCHEDULED) . ' AND '; |
|
| 74 | + if (!$time) { |
|
| 75 | + $time = time(); |
|
| 76 | + $duplicate_where = ''; // ne pas dupliquer si deja le meme job en cours d'execution |
|
| 77 | + } |
|
| 78 | + $date = date('Y-m-d H:i:s', $time); |
|
| 79 | + |
|
| 80 | + $set_job = [ |
|
| 81 | + 'fonction' => $function, |
|
| 82 | + 'descriptif' => $description, |
|
| 83 | + 'args' => $arguments, |
|
| 84 | + 'md5args' => $md5args, |
|
| 85 | + 'inclure' => $file, |
|
| 86 | + 'priorite' => max(-10, min(10, intval($priority))), |
|
| 87 | + 'date' => $date, |
|
| 88 | + 'status' => _JQ_SCHEDULED, |
|
| 89 | + ]; |
|
| 90 | + // si option ne pas dupliquer, regarder si la fonction existe deja |
|
| 91 | + // avec les memes args et file |
|
| 92 | + if ( |
|
| 93 | + $no_duplicate |
|
| 94 | + and |
|
| 95 | + $id_job = sql_getfetsel( |
|
| 96 | + 'id_job', |
|
| 97 | + 'spip_jobs', |
|
| 98 | + $duplicate_where = |
|
| 99 | + $duplicate_where . 'fonction=' . sql_quote($function) |
|
| 100 | + . (($no_duplicate === 'function_only') ? '' : |
|
| 101 | + ' AND md5args=' . sql_quote($md5args) . ' AND inclure=' . sql_quote($file)) |
|
| 102 | + ) |
|
| 103 | + ) { |
|
| 104 | + return $id_job; |
|
| 105 | + } |
|
| 106 | + |
|
| 107 | + $id_job = sql_insertq('spip_jobs', $set_job); |
|
| 108 | + // en cas de concurrence, deux process peuvent arriver jusqu'ici en parallele |
|
| 109 | + // avec le meme job unique a inserer. Dans ce cas, celui qui a eu l'id le plus grand |
|
| 110 | + // doit s'effacer |
|
| 111 | + if ( |
|
| 112 | + $no_duplicate |
|
| 113 | + and |
|
| 114 | + $id_prev = sql_getfetsel('id_job', 'spip_jobs', 'id_job<' . intval($id_job) . " AND $duplicate_where") |
|
| 115 | + ) { |
|
| 116 | + sql_delete('spip_jobs', 'id_job=' . intval($id_job)); |
|
| 117 | + |
|
| 118 | + return $id_prev; |
|
| 119 | + } |
|
| 120 | + |
|
| 121 | + // verifier la non duplication qui peut etre problematique en cas de concurence |
|
| 122 | + // il faut dans ce cas que seul le dernier ajoute se supprime ! |
|
| 123 | + |
|
| 124 | + // une option de debug pour verifier que les arguments en base sont bons |
|
| 125 | + // ie cas d'un char non acceptables sur certains type de champs |
|
| 126 | + // qui coupe la valeur |
|
| 127 | + if (defined('_JQ_INSERT_CHECK_ARGS') and $id_job) { |
|
| 128 | + $args = sql_getfetsel('args', 'spip_jobs', 'id_job=' . intval($id_job)); |
|
| 129 | + if ($args !== $arguments) { |
|
| 130 | + spip_log('arguments job errones / longueur ' . strlen($args) . ' vs ' . strlen($arguments) . ' / valeur : ' . var_export( |
|
| 131 | + $arguments, |
|
| 132 | + true |
|
| 133 | + ), 'queue'); |
|
| 134 | + } |
|
| 135 | + } |
|
| 136 | + |
|
| 137 | + if ($id_job) { |
|
| 138 | + queue_update_next_job_time($time); |
|
| 139 | + } |
|
| 140 | + // si la mise en file d'attente du job echoue, |
|
| 141 | + // il ne faut pas perdre l'execution de la fonction |
|
| 142 | + // on la lance immediatement, c'est un fallback |
|
| 143 | + // sauf en cas d'upgrade necessaire (table spip_jobs inexistante) |
|
| 144 | + elseif ($GLOBALS['meta']['version_installee'] == $GLOBALS['spip_version_base']) { |
|
| 145 | + $set_job['id_job'] = 0; |
|
| 146 | + queue_start_job($set_job); |
|
| 147 | + } |
|
| 148 | + |
|
| 149 | + return $id_job; |
|
| 150 | 150 | } |
| 151 | 151 | |
| 152 | 152 | /** |
@@ -155,11 +155,11 @@ discard block |
||
| 155 | 155 | * @return void |
| 156 | 156 | */ |
| 157 | 157 | function queue_purger() { |
| 158 | - include_spip('base/abstract_sql'); |
|
| 159 | - sql_delete('spip_jobs'); |
|
| 160 | - sql_delete('spip_jobs_liens', 'id_job NOT IN (' . sql_get_select('id_job', 'spip_jobs') . ')'); |
|
| 161 | - include_spip('inc/genie'); |
|
| 162 | - genie_queue_watch_dist(); |
|
| 158 | + include_spip('base/abstract_sql'); |
|
| 159 | + sql_delete('spip_jobs'); |
|
| 160 | + sql_delete('spip_jobs_liens', 'id_job NOT IN (' . sql_get_select('id_job', 'spip_jobs') . ')'); |
|
| 161 | + include_spip('inc/genie'); |
|
| 162 | + genie_queue_watch_dist(); |
|
| 163 | 163 | } |
| 164 | 164 | |
| 165 | 165 | /** |
@@ -170,25 +170,25 @@ discard block |
||
| 170 | 170 | * @return int|bool |
| 171 | 171 | */ |
| 172 | 172 | function queue_remove_job($id_job) { |
| 173 | - include_spip('base/abstract_sql'); |
|
| 174 | - |
|
| 175 | - if ( |
|
| 176 | - $row = sql_fetsel('fonction,inclure,date', 'spip_jobs', 'id_job=' . intval($id_job)) |
|
| 177 | - and $res = sql_delete('spip_jobs', 'id_job=' . intval($id_job)) |
|
| 178 | - ) { |
|
| 179 | - queue_unlink_job($id_job); |
|
| 180 | - // est-ce une tache cron qu'il faut relancer ? |
|
| 181 | - if ($periode = queue_is_cron_job($row['fonction'], $row['inclure'])) { |
|
| 182 | - // relancer avec les nouveaux arguments de temps |
|
| 183 | - include_spip('inc/genie'); |
|
| 184 | - // relancer avec la periode prevue |
|
| 185 | - queue_genie_replan_job($row['fonction'], $periode, strtotime($row['date'])); |
|
| 186 | - } |
|
| 187 | - queue_update_next_job_time(); |
|
| 188 | - return $res; |
|
| 189 | - } |
|
| 190 | - |
|
| 191 | - return false; |
|
| 173 | + include_spip('base/abstract_sql'); |
|
| 174 | + |
|
| 175 | + if ( |
|
| 176 | + $row = sql_fetsel('fonction,inclure,date', 'spip_jobs', 'id_job=' . intval($id_job)) |
|
| 177 | + and $res = sql_delete('spip_jobs', 'id_job=' . intval($id_job)) |
|
| 178 | + ) { |
|
| 179 | + queue_unlink_job($id_job); |
|
| 180 | + // est-ce une tache cron qu'il faut relancer ? |
|
| 181 | + if ($periode = queue_is_cron_job($row['fonction'], $row['inclure'])) { |
|
| 182 | + // relancer avec les nouveaux arguments de temps |
|
| 183 | + include_spip('inc/genie'); |
|
| 184 | + // relancer avec la periode prevue |
|
| 185 | + queue_genie_replan_job($row['fonction'], $periode, strtotime($row['date'])); |
|
| 186 | + } |
|
| 187 | + queue_update_next_job_time(); |
|
| 188 | + return $res; |
|
| 189 | + } |
|
| 190 | + |
|
| 191 | + return false; |
|
| 192 | 192 | } |
| 193 | 193 | |
| 194 | 194 | /** |
@@ -201,18 +201,18 @@ discard block |
||
| 201 | 201 | * ou un tableau composé de tableaux simples pour lieur plusieurs objets en une fois |
| 202 | 202 | */ |
| 203 | 203 | function queue_link_job($id_job, $objets) { |
| 204 | - include_spip('base/abstract_sql'); |
|
| 205 | - |
|
| 206 | - if (is_array($objets) and count($objets)) { |
|
| 207 | - if (is_array(reset($objets))) { |
|
| 208 | - foreach ($objets as $k => $o) { |
|
| 209 | - $objets[$k]['id_job'] = $id_job; |
|
| 210 | - } |
|
| 211 | - sql_insertq_multi('spip_jobs_liens', $objets); |
|
| 212 | - } else { |
|
| 213 | - sql_insertq('spip_jobs_liens', array_merge(['id_job' => $id_job], $objets)); |
|
| 214 | - } |
|
| 215 | - } |
|
| 204 | + include_spip('base/abstract_sql'); |
|
| 205 | + |
|
| 206 | + if (is_array($objets) and count($objets)) { |
|
| 207 | + if (is_array(reset($objets))) { |
|
| 208 | + foreach ($objets as $k => $o) { |
|
| 209 | + $objets[$k]['id_job'] = $id_job; |
|
| 210 | + } |
|
| 211 | + sql_insertq_multi('spip_jobs_liens', $objets); |
|
| 212 | + } else { |
|
| 213 | + sql_insertq('spip_jobs_liens', array_merge(['id_job' => $id_job], $objets)); |
|
| 214 | + } |
|
| 215 | + } |
|
| 216 | 216 | } |
| 217 | 217 | |
| 218 | 218 | /** |
@@ -224,7 +224,7 @@ discard block |
||
| 224 | 224 | * resultat du sql_delete |
| 225 | 225 | */ |
| 226 | 226 | function queue_unlink_job($id_job) { |
| 227 | - return sql_delete('spip_jobs_liens', 'id_job=' . intval($id_job)); |
|
| 227 | + return sql_delete('spip_jobs_liens', 'id_job=' . intval($id_job)); |
|
| 228 | 228 | } |
| 229 | 229 | |
| 230 | 230 | /** |
@@ -237,36 +237,36 @@ discard block |
||
| 237 | 237 | */ |
| 238 | 238 | function queue_start_job($row) { |
| 239 | 239 | |
| 240 | - // deserialiser les arguments |
|
| 241 | - $args = unserialize($row['args']); |
|
| 242 | - if (!is_array($args)) { |
|
| 243 | - spip_log('arguments job errones ' . var_export($row, true), 'queue'); |
|
| 244 | - $args = []; |
|
| 245 | - } |
|
| 246 | - |
|
| 247 | - $fonction = $row['fonction']; |
|
| 248 | - if (strlen($inclure = trim($row['inclure']))) { |
|
| 249 | - if (substr($inclure, -1) == '/') { // c'est un chemin pour charger_fonction |
|
| 250 | - $f = charger_fonction($fonction, rtrim($inclure, '/'), false); |
|
| 251 | - if ($f) { |
|
| 252 | - $fonction = $f; |
|
| 253 | - } |
|
| 254 | - } else { |
|
| 255 | - include_spip($inclure); |
|
| 256 | - } |
|
| 257 | - } |
|
| 258 | - |
|
| 259 | - if (!function_exists($fonction)) { |
|
| 260 | - spip_log("fonction $fonction ($inclure) inexistante " . var_export($row, true), 'queue'); |
|
| 261 | - |
|
| 262 | - return false; |
|
| 263 | - } |
|
| 264 | - |
|
| 265 | - spip_log('queue [' . $row['id_job'] . "]: $fonction() start", 'queue'); |
|
| 266 | - $res = $fonction(...$args); |
|
| 267 | - spip_log('queue [' . $row['id_job'] . "]: $fonction() end", 'queue'); |
|
| 268 | - |
|
| 269 | - return $res; |
|
| 240 | + // deserialiser les arguments |
|
| 241 | + $args = unserialize($row['args']); |
|
| 242 | + if (!is_array($args)) { |
|
| 243 | + spip_log('arguments job errones ' . var_export($row, true), 'queue'); |
|
| 244 | + $args = []; |
|
| 245 | + } |
|
| 246 | + |
|
| 247 | + $fonction = $row['fonction']; |
|
| 248 | + if (strlen($inclure = trim($row['inclure']))) { |
|
| 249 | + if (substr($inclure, -1) == '/') { // c'est un chemin pour charger_fonction |
|
| 250 | + $f = charger_fonction($fonction, rtrim($inclure, '/'), false); |
|
| 251 | + if ($f) { |
|
| 252 | + $fonction = $f; |
|
| 253 | + } |
|
| 254 | + } else { |
|
| 255 | + include_spip($inclure); |
|
| 256 | + } |
|
| 257 | + } |
|
| 258 | + |
|
| 259 | + if (!function_exists($fonction)) { |
|
| 260 | + spip_log("fonction $fonction ($inclure) inexistante " . var_export($row, true), 'queue'); |
|
| 261 | + |
|
| 262 | + return false; |
|
| 263 | + } |
|
| 264 | + |
|
| 265 | + spip_log('queue [' . $row['id_job'] . "]: $fonction() start", 'queue'); |
|
| 266 | + $res = $fonction(...$args); |
|
| 267 | + spip_log('queue [' . $row['id_job'] . "]: $fonction() end", 'queue'); |
|
| 268 | + |
|
| 269 | + return $res; |
|
| 270 | 270 | } |
| 271 | 271 | |
| 272 | 272 | /** |
@@ -293,89 +293,89 @@ discard block |
||
| 293 | 293 | * - true : une planification a été faite. |
| 294 | 294 | */ |
| 295 | 295 | function queue_schedule($force_jobs = null) { |
| 296 | - $time = time(); |
|
| 297 | - if (defined('_DEBUG_BLOCK_QUEUE')) { |
|
| 298 | - spip_log('_DEBUG_BLOCK_QUEUE : schedule stop', 'jq' . _LOG_DEBUG); |
|
| 299 | - |
|
| 300 | - return; |
|
| 301 | - } |
|
| 302 | - |
|
| 303 | - // rien a faire si le prochain job est encore dans le futur |
|
| 304 | - if (queue_sleep_time_to_next_job() > 0 and (!$force_jobs or !count($force_jobs))) { |
|
| 305 | - spip_log('queue_sleep_time_to_next_job', 'jq' . _LOG_DEBUG); |
|
| 306 | - |
|
| 307 | - return; |
|
| 308 | - } |
|
| 309 | - |
|
| 310 | - include_spip('base/abstract_sql'); |
|
| 311 | - // on ne peut rien faire si pas de connexion SQL |
|
| 312 | - if (!spip_connect()) { |
|
| 313 | - return false; |
|
| 314 | - } |
|
| 315 | - |
|
| 316 | - if (!defined('_JQ_MAX_JOBS_TIME_TO_EXECUTE')) { |
|
| 317 | - $max_time = ini_get('max_execution_time') / 2; |
|
| 318 | - // valeur conservatrice si on a pas reussi a lire le max_execution_time |
|
| 319 | - if (!$max_time) { |
|
| 320 | - $max_time = 5; |
|
| 321 | - } |
|
| 322 | - define('_JQ_MAX_JOBS_TIME_TO_EXECUTE', min($max_time, 15)); // une valeur maxi en temps. |
|
| 323 | - } |
|
| 324 | - $end_time = $time + _JQ_MAX_JOBS_TIME_TO_EXECUTE; |
|
| 325 | - |
|
| 326 | - spip_log("JQ schedule $time / $end_time", 'jq' . _LOG_DEBUG); |
|
| 327 | - |
|
| 328 | - if (!defined('_JQ_MAX_JOBS_EXECUTE')) { |
|
| 329 | - define('_JQ_MAX_JOBS_EXECUTE', 200); |
|
| 330 | - } |
|
| 331 | - $nbj = 0; |
|
| 332 | - // attraper les jobs |
|
| 333 | - // dont la date est passee (echus en attente), |
|
| 334 | - // par ordre : |
|
| 335 | - // - de priorite |
|
| 336 | - // - de date |
|
| 337 | - // lorsqu'un job cron n'a pas fini, sa priorite est descendue |
|
| 338 | - // pour qu'il ne bloque pas les autres jobs en attente |
|
| 339 | - if (is_array($force_jobs) and count($force_jobs)) { |
|
| 340 | - $cond = 'status=' . intval(_JQ_SCHEDULED) . ' AND ' . sql_in('id_job', $force_jobs); |
|
| 341 | - } else { |
|
| 342 | - $now = date('Y-m-d H:i:s', $time); |
|
| 343 | - $cond = 'status=' . intval(_JQ_SCHEDULED) . ' AND date<=' . sql_quote($now); |
|
| 344 | - } |
|
| 345 | - |
|
| 346 | - register_shutdown_function('queue_error_handler'); // recuperer les erreurs auant que possible |
|
| 347 | - $res = sql_allfetsel('*', 'spip_jobs', $cond, '', 'priorite DESC,date', '0,' . (_JQ_MAX_JOBS_EXECUTE + 1)); |
|
| 348 | - do { |
|
| 349 | - if ($row = array_shift($res)) { |
|
| 350 | - $nbj++; |
|
| 351 | - // il faut un verrou, a base de sql_delete |
|
| 352 | - if (sql_delete('spip_jobs', 'id_job=' . intval($row['id_job']) . ' AND status=' . intval(_JQ_SCHEDULED))) { |
|
| 353 | - #spip_log("JQ schedule job ".$nbj." OK",'jq'); |
|
| 354 | - // on reinsert dans la base aussitot avec un status=_JQ_PENDING |
|
| 355 | - $row['status'] = _JQ_PENDING; |
|
| 356 | - $row['date'] = date('Y-m-d H:i:s', $time); |
|
| 357 | - sql_insertq('spip_jobs', $row); |
|
| 358 | - |
|
| 359 | - // on a la main sur le job : |
|
| 360 | - // l'executer |
|
| 361 | - $result = queue_start_job($row); |
|
| 362 | - |
|
| 363 | - $time = time(); |
|
| 364 | - queue_close_job($row, $time, $result); |
|
| 365 | - } |
|
| 366 | - } |
|
| 367 | - spip_log('JQ schedule job end time ' . $time, 'jq' . _LOG_DEBUG); |
|
| 368 | - } while ($nbj < _JQ_MAX_JOBS_EXECUTE and $row and $time < $end_time); |
|
| 369 | - spip_log('JQ schedule end time ' . time(), 'jq' . _LOG_DEBUG); |
|
| 370 | - |
|
| 371 | - if ($row = array_shift($res)) { |
|
| 372 | - queue_update_next_job_time(0); // on sait qu'il y a encore des jobs a lancer ASAP |
|
| 373 | - spip_log('JQ encore !', 'jq' . _LOG_DEBUG); |
|
| 374 | - } else { |
|
| 375 | - queue_update_next_job_time(); |
|
| 376 | - } |
|
| 377 | - |
|
| 378 | - return true; |
|
| 296 | + $time = time(); |
|
| 297 | + if (defined('_DEBUG_BLOCK_QUEUE')) { |
|
| 298 | + spip_log('_DEBUG_BLOCK_QUEUE : schedule stop', 'jq' . _LOG_DEBUG); |
|
| 299 | + |
|
| 300 | + return; |
|
| 301 | + } |
|
| 302 | + |
|
| 303 | + // rien a faire si le prochain job est encore dans le futur |
|
| 304 | + if (queue_sleep_time_to_next_job() > 0 and (!$force_jobs or !count($force_jobs))) { |
|
| 305 | + spip_log('queue_sleep_time_to_next_job', 'jq' . _LOG_DEBUG); |
|
| 306 | + |
|
| 307 | + return; |
|
| 308 | + } |
|
| 309 | + |
|
| 310 | + include_spip('base/abstract_sql'); |
|
| 311 | + // on ne peut rien faire si pas de connexion SQL |
|
| 312 | + if (!spip_connect()) { |
|
| 313 | + return false; |
|
| 314 | + } |
|
| 315 | + |
|
| 316 | + if (!defined('_JQ_MAX_JOBS_TIME_TO_EXECUTE')) { |
|
| 317 | + $max_time = ini_get('max_execution_time') / 2; |
|
| 318 | + // valeur conservatrice si on a pas reussi a lire le max_execution_time |
|
| 319 | + if (!$max_time) { |
|
| 320 | + $max_time = 5; |
|
| 321 | + } |
|
| 322 | + define('_JQ_MAX_JOBS_TIME_TO_EXECUTE', min($max_time, 15)); // une valeur maxi en temps. |
|
| 323 | + } |
|
| 324 | + $end_time = $time + _JQ_MAX_JOBS_TIME_TO_EXECUTE; |
|
| 325 | + |
|
| 326 | + spip_log("JQ schedule $time / $end_time", 'jq' . _LOG_DEBUG); |
|
| 327 | + |
|
| 328 | + if (!defined('_JQ_MAX_JOBS_EXECUTE')) { |
|
| 329 | + define('_JQ_MAX_JOBS_EXECUTE', 200); |
|
| 330 | + } |
|
| 331 | + $nbj = 0; |
|
| 332 | + // attraper les jobs |
|
| 333 | + // dont la date est passee (echus en attente), |
|
| 334 | + // par ordre : |
|
| 335 | + // - de priorite |
|
| 336 | + // - de date |
|
| 337 | + // lorsqu'un job cron n'a pas fini, sa priorite est descendue |
|
| 338 | + // pour qu'il ne bloque pas les autres jobs en attente |
|
| 339 | + if (is_array($force_jobs) and count($force_jobs)) { |
|
| 340 | + $cond = 'status=' . intval(_JQ_SCHEDULED) . ' AND ' . sql_in('id_job', $force_jobs); |
|
| 341 | + } else { |
|
| 342 | + $now = date('Y-m-d H:i:s', $time); |
|
| 343 | + $cond = 'status=' . intval(_JQ_SCHEDULED) . ' AND date<=' . sql_quote($now); |
|
| 344 | + } |
|
| 345 | + |
|
| 346 | + register_shutdown_function('queue_error_handler'); // recuperer les erreurs auant que possible |
|
| 347 | + $res = sql_allfetsel('*', 'spip_jobs', $cond, '', 'priorite DESC,date', '0,' . (_JQ_MAX_JOBS_EXECUTE + 1)); |
|
| 348 | + do { |
|
| 349 | + if ($row = array_shift($res)) { |
|
| 350 | + $nbj++; |
|
| 351 | + // il faut un verrou, a base de sql_delete |
|
| 352 | + if (sql_delete('spip_jobs', 'id_job=' . intval($row['id_job']) . ' AND status=' . intval(_JQ_SCHEDULED))) { |
|
| 353 | + #spip_log("JQ schedule job ".$nbj." OK",'jq'); |
|
| 354 | + // on reinsert dans la base aussitot avec un status=_JQ_PENDING |
|
| 355 | + $row['status'] = _JQ_PENDING; |
|
| 356 | + $row['date'] = date('Y-m-d H:i:s', $time); |
|
| 357 | + sql_insertq('spip_jobs', $row); |
|
| 358 | + |
|
| 359 | + // on a la main sur le job : |
|
| 360 | + // l'executer |
|
| 361 | + $result = queue_start_job($row); |
|
| 362 | + |
|
| 363 | + $time = time(); |
|
| 364 | + queue_close_job($row, $time, $result); |
|
| 365 | + } |
|
| 366 | + } |
|
| 367 | + spip_log('JQ schedule job end time ' . $time, 'jq' . _LOG_DEBUG); |
|
| 368 | + } while ($nbj < _JQ_MAX_JOBS_EXECUTE and $row and $time < $end_time); |
|
| 369 | + spip_log('JQ schedule end time ' . time(), 'jq' . _LOG_DEBUG); |
|
| 370 | + |
|
| 371 | + if ($row = array_shift($res)) { |
|
| 372 | + queue_update_next_job_time(0); // on sait qu'il y a encore des jobs a lancer ASAP |
|
| 373 | + spip_log('JQ encore !', 'jq' . _LOG_DEBUG); |
|
| 374 | + } else { |
|
| 375 | + queue_update_next_job_time(); |
|
| 376 | + } |
|
| 377 | + |
|
| 378 | + return true; |
|
| 379 | 379 | } |
| 380 | 380 | |
| 381 | 381 | /** |
@@ -393,21 +393,21 @@ discard block |
||
| 393 | 393 | * @param int $result |
| 394 | 394 | */ |
| 395 | 395 | function queue_close_job(&$row, $time, $result = 0) { |
| 396 | - // est-ce une tache cron qu'il faut relancer ? |
|
| 397 | - if ($periode = queue_is_cron_job($row['fonction'], $row['inclure'])) { |
|
| 398 | - // relancer avec les nouveaux arguments de temps |
|
| 399 | - include_spip('inc/genie'); |
|
| 400 | - if ($result < 0) { // relancer tout de suite, mais en baissant la priorite |
|
| 401 | - queue_genie_replan_job($row['fonction'], $periode, 0 - $result, null, $row['priorite'] - 1); |
|
| 402 | - } else // relancer avec la periode prevue |
|
| 403 | - { |
|
| 404 | - queue_genie_replan_job($row['fonction'], $periode, $time); |
|
| 405 | - } |
|
| 406 | - } |
|
| 407 | - // purger ses liens eventuels avec des objets |
|
| 408 | - sql_delete('spip_jobs_liens', 'id_job=' . intval($row['id_job'])); |
|
| 409 | - // supprimer le job fini |
|
| 410 | - sql_delete('spip_jobs', 'id_job=' . intval($row['id_job'])); |
|
| 396 | + // est-ce une tache cron qu'il faut relancer ? |
|
| 397 | + if ($periode = queue_is_cron_job($row['fonction'], $row['inclure'])) { |
|
| 398 | + // relancer avec les nouveaux arguments de temps |
|
| 399 | + include_spip('inc/genie'); |
|
| 400 | + if ($result < 0) { // relancer tout de suite, mais en baissant la priorite |
|
| 401 | + queue_genie_replan_job($row['fonction'], $periode, 0 - $result, null, $row['priorite'] - 1); |
|
| 402 | + } else // relancer avec la periode prevue |
|
| 403 | + { |
|
| 404 | + queue_genie_replan_job($row['fonction'], $periode, $time); |
|
| 405 | + } |
|
| 406 | + } |
|
| 407 | + // purger ses liens eventuels avec des objets |
|
| 408 | + sql_delete('spip_jobs_liens', 'id_job=' . intval($row['id_job'])); |
|
| 409 | + // supprimer le job fini |
|
| 410 | + sql_delete('spip_jobs', 'id_job=' . intval($row['id_job'])); |
|
| 411 | 411 | } |
| 412 | 412 | |
| 413 | 413 | /** |
@@ -417,10 +417,10 @@ discard block |
||
| 417 | 417 | * @uses queue_update_next_job_time() |
| 418 | 418 | */ |
| 419 | 419 | function queue_error_handler() { |
| 420 | - // se remettre dans le bon dossier, car Apache le change parfois (toujours?) |
|
| 421 | - chdir(_ROOT_CWD); |
|
| 420 | + // se remettre dans le bon dossier, car Apache le change parfois (toujours?) |
|
| 421 | + chdir(_ROOT_CWD); |
|
| 422 | 422 | |
| 423 | - queue_update_next_job_time(); |
|
| 423 | + queue_update_next_job_time(); |
|
| 424 | 424 | } |
| 425 | 425 | |
| 426 | 426 | |
@@ -437,18 +437,18 @@ discard block |
||
| 437 | 437 | * Périodicité de la tâche en secondes, si tâche périodique, sinon false. |
| 438 | 438 | */ |
| 439 | 439 | function queue_is_cron_job($function, $inclure) { |
| 440 | - static $taches = null; |
|
| 441 | - if (strncmp($inclure, 'genie/', 6) == 0) { |
|
| 442 | - if (is_null($taches)) { |
|
| 443 | - include_spip('inc/genie'); |
|
| 444 | - $taches = taches_generales(); |
|
| 445 | - } |
|
| 446 | - if (isset($taches[$function])) { |
|
| 447 | - return $taches[$function]; |
|
| 448 | - } |
|
| 449 | - } |
|
| 450 | - |
|
| 451 | - return false; |
|
| 440 | + static $taches = null; |
|
| 441 | + if (strncmp($inclure, 'genie/', 6) == 0) { |
|
| 442 | + if (is_null($taches)) { |
|
| 443 | + include_spip('inc/genie'); |
|
| 444 | + $taches = taches_generales(); |
|
| 445 | + } |
|
| 446 | + if (isset($taches[$function])) { |
|
| 447 | + return $taches[$function]; |
|
| 448 | + } |
|
| 449 | + } |
|
| 450 | + |
|
| 451 | + return false; |
|
| 452 | 452 | } |
| 453 | 453 | |
| 454 | 454 | /** |
@@ -462,62 +462,62 @@ discard block |
||
| 462 | 462 | * temps de la tache ajoutee ou 0 pour ASAP |
| 463 | 463 | */ |
| 464 | 464 | function queue_update_next_job_time($next_time = null) { |
| 465 | - static $nb_jobs_scheduled = null; |
|
| 466 | - static $deja_la = false; |
|
| 467 | - // prendre le min des $next_time que l'on voit passer ici, en cas de reentrance |
|
| 468 | - static $next = null; |
|
| 469 | - // queue_close_job peut etre reentrant ici |
|
| 470 | - if ($deja_la) { |
|
| 471 | - return; |
|
| 472 | - } |
|
| 473 | - $deja_la = true; |
|
| 474 | - |
|
| 475 | - include_spip('base/abstract_sql'); |
|
| 476 | - $time = time(); |
|
| 477 | - |
|
| 478 | - // traiter les jobs morts au combat (_JQ_PENDING depuis plus de 180s) |
|
| 479 | - // pour cause de timeout ou autre erreur fatale |
|
| 480 | - $res = sql_allfetsel( |
|
| 481 | - '*', |
|
| 482 | - 'spip_jobs', |
|
| 483 | - 'status=' . intval(_JQ_PENDING) . ' AND date<' . sql_quote(date('Y-m-d H:i:s', $time - 180)) |
|
| 484 | - ); |
|
| 485 | - if (is_array($res)) { |
|
| 486 | - foreach ($res as $row) { |
|
| 487 | - queue_close_job($row, $time); |
|
| 488 | - spip_log('queue_close_job car _JQ_PENDING depuis +180s : ' . print_r($row, 1), 'job_mort' . _LOG_ERREUR); |
|
| 489 | - } |
|
| 490 | - } |
|
| 491 | - |
|
| 492 | - // chercher la date du prochain job si pas connu |
|
| 493 | - if (is_null($next) or is_null(queue_sleep_time_to_next_job())) { |
|
| 494 | - $date = sql_getfetsel('date', 'spip_jobs', 'status=' . intval(_JQ_SCHEDULED), '', 'date', '0,1'); |
|
| 495 | - $next = strtotime($date); |
|
| 496 | - } |
|
| 497 | - if (!is_null($next_time)) { |
|
| 498 | - if (is_null($next) or $next > $next_time) { |
|
| 499 | - $next = $next_time; |
|
| 500 | - } |
|
| 501 | - } |
|
| 502 | - |
|
| 503 | - if ($next) { |
|
| 504 | - if (is_null($nb_jobs_scheduled)) { |
|
| 505 | - $nb_jobs_scheduled = sql_countsel( |
|
| 506 | - 'spip_jobs', |
|
| 507 | - 'status=' . intval(_JQ_SCHEDULED) . ' AND date<' . sql_quote(date('Y-m-d H:i:s', $time)) |
|
| 508 | - ); |
|
| 509 | - } elseif ($next <= $time) { |
|
| 510 | - $nb_jobs_scheduled++; |
|
| 511 | - } |
|
| 512 | - // si trop de jobs en attente, on force la purge en fin de hit |
|
| 513 | - // pour assurer le coup |
|
| 514 | - if ($nb_jobs_scheduled > (defined('_JQ_NB_JOBS_OVERFLOW') ? _JQ_NB_JOBS_OVERFLOW : 10000)) { |
|
| 515 | - define('_DIRECT_CRON_FORCE', true); |
|
| 516 | - } |
|
| 517 | - } |
|
| 518 | - |
|
| 519 | - queue_set_next_job_time($next); |
|
| 520 | - $deja_la = false; |
|
| 465 | + static $nb_jobs_scheduled = null; |
|
| 466 | + static $deja_la = false; |
|
| 467 | + // prendre le min des $next_time que l'on voit passer ici, en cas de reentrance |
|
| 468 | + static $next = null; |
|
| 469 | + // queue_close_job peut etre reentrant ici |
|
| 470 | + if ($deja_la) { |
|
| 471 | + return; |
|
| 472 | + } |
|
| 473 | + $deja_la = true; |
|
| 474 | + |
|
| 475 | + include_spip('base/abstract_sql'); |
|
| 476 | + $time = time(); |
|
| 477 | + |
|
| 478 | + // traiter les jobs morts au combat (_JQ_PENDING depuis plus de 180s) |
|
| 479 | + // pour cause de timeout ou autre erreur fatale |
|
| 480 | + $res = sql_allfetsel( |
|
| 481 | + '*', |
|
| 482 | + 'spip_jobs', |
|
| 483 | + 'status=' . intval(_JQ_PENDING) . ' AND date<' . sql_quote(date('Y-m-d H:i:s', $time - 180)) |
|
| 484 | + ); |
|
| 485 | + if (is_array($res)) { |
|
| 486 | + foreach ($res as $row) { |
|
| 487 | + queue_close_job($row, $time); |
|
| 488 | + spip_log('queue_close_job car _JQ_PENDING depuis +180s : ' . print_r($row, 1), 'job_mort' . _LOG_ERREUR); |
|
| 489 | + } |
|
| 490 | + } |
|
| 491 | + |
|
| 492 | + // chercher la date du prochain job si pas connu |
|
| 493 | + if (is_null($next) or is_null(queue_sleep_time_to_next_job())) { |
|
| 494 | + $date = sql_getfetsel('date', 'spip_jobs', 'status=' . intval(_JQ_SCHEDULED), '', 'date', '0,1'); |
|
| 495 | + $next = strtotime($date); |
|
| 496 | + } |
|
| 497 | + if (!is_null($next_time)) { |
|
| 498 | + if (is_null($next) or $next > $next_time) { |
|
| 499 | + $next = $next_time; |
|
| 500 | + } |
|
| 501 | + } |
|
| 502 | + |
|
| 503 | + if ($next) { |
|
| 504 | + if (is_null($nb_jobs_scheduled)) { |
|
| 505 | + $nb_jobs_scheduled = sql_countsel( |
|
| 506 | + 'spip_jobs', |
|
| 507 | + 'status=' . intval(_JQ_SCHEDULED) . ' AND date<' . sql_quote(date('Y-m-d H:i:s', $time)) |
|
| 508 | + ); |
|
| 509 | + } elseif ($next <= $time) { |
|
| 510 | + $nb_jobs_scheduled++; |
|
| 511 | + } |
|
| 512 | + // si trop de jobs en attente, on force la purge en fin de hit |
|
| 513 | + // pour assurer le coup |
|
| 514 | + if ($nb_jobs_scheduled > (defined('_JQ_NB_JOBS_OVERFLOW') ? _JQ_NB_JOBS_OVERFLOW : 10000)) { |
|
| 515 | + define('_DIRECT_CRON_FORCE', true); |
|
| 516 | + } |
|
| 517 | + } |
|
| 518 | + |
|
| 519 | + queue_set_next_job_time($next); |
|
| 520 | + $deja_la = false; |
|
| 521 | 521 | } |
| 522 | 522 | |
| 523 | 523 | |
@@ -528,26 +528,26 @@ discard block |
||
| 528 | 528 | */ |
| 529 | 529 | function queue_set_next_job_time($next) { |
| 530 | 530 | |
| 531 | - // utiliser le temps courant reel plutot que temps de la requete ici |
|
| 532 | - $time = time(); |
|
| 533 | - |
|
| 534 | - // toujours relire la valeur pour comparer, pour tenir compte des maj concourrantes |
|
| 535 | - // et ne mettre a jour que si il y a un interet a le faire |
|
| 536 | - // permet ausis d'initialiser le nom de fichier a coup sur |
|
| 537 | - $curr_next = $_SERVER['REQUEST_TIME'] + max(0, queue_sleep_time_to_next_job(true)); |
|
| 538 | - if ( |
|
| 539 | - ($curr_next <= $time and $next > $time) // le prochain job est dans le futur mais pas la date planifiee actuelle |
|
| 540 | - or $curr_next > $next // le prochain job est plus tot que la date planifiee actuelle |
|
| 541 | - ) { |
|
| 542 | - if (function_exists('cache_set') and defined('_MEMOIZE_MEMORY') and _MEMOIZE_MEMORY) { |
|
| 543 | - cache_set(_JQ_NEXT_JOB_TIME_FILENAME, intval($next)); |
|
| 544 | - } else { |
|
| 545 | - ecrire_fichier(_JQ_NEXT_JOB_TIME_FILENAME, intval($next)); |
|
| 546 | - } |
|
| 547 | - queue_sleep_time_to_next_job($next); |
|
| 548 | - } |
|
| 549 | - |
|
| 550 | - return queue_sleep_time_to_next_job(); |
|
| 531 | + // utiliser le temps courant reel plutot que temps de la requete ici |
|
| 532 | + $time = time(); |
|
| 533 | + |
|
| 534 | + // toujours relire la valeur pour comparer, pour tenir compte des maj concourrantes |
|
| 535 | + // et ne mettre a jour que si il y a un interet a le faire |
|
| 536 | + // permet ausis d'initialiser le nom de fichier a coup sur |
|
| 537 | + $curr_next = $_SERVER['REQUEST_TIME'] + max(0, queue_sleep_time_to_next_job(true)); |
|
| 538 | + if ( |
|
| 539 | + ($curr_next <= $time and $next > $time) // le prochain job est dans le futur mais pas la date planifiee actuelle |
|
| 540 | + or $curr_next > $next // le prochain job est plus tot que la date planifiee actuelle |
|
| 541 | + ) { |
|
| 542 | + if (function_exists('cache_set') and defined('_MEMOIZE_MEMORY') and _MEMOIZE_MEMORY) { |
|
| 543 | + cache_set(_JQ_NEXT_JOB_TIME_FILENAME, intval($next)); |
|
| 544 | + } else { |
|
| 545 | + ecrire_fichier(_JQ_NEXT_JOB_TIME_FILENAME, intval($next)); |
|
| 546 | + } |
|
| 547 | + queue_sleep_time_to_next_job($next); |
|
| 548 | + } |
|
| 549 | + |
|
| 550 | + return queue_sleep_time_to_next_job(); |
|
| 551 | 551 | } |
| 552 | 552 | |
| 553 | 553 | /** |
@@ -564,60 +564,60 @@ discard block |
||
| 564 | 564 | * @return string |
| 565 | 565 | */ |
| 566 | 566 | function queue_affichage_cron() { |
| 567 | - $texte = ''; |
|
| 568 | - |
|
| 569 | - $time_to_next = queue_sleep_time_to_next_job(); |
|
| 570 | - // rien a faire si le prochain job est encore dans le futur |
|
| 571 | - if ($time_to_next > 0 or defined('_DEBUG_BLOCK_QUEUE')) { |
|
| 572 | - return $texte; |
|
| 573 | - } |
|
| 574 | - |
|
| 575 | - // ne pas relancer si on vient de lancer dans la meme seconde par un hit concurent |
|
| 576 | - if (file_exists($lock = _DIR_TMP . 'cron.lock') and !(@filemtime($lock) < $_SERVER['REQUEST_TIME'])) { |
|
| 577 | - return $texte; |
|
| 578 | - } |
|
| 579 | - |
|
| 580 | - @touch($lock); |
|
| 581 | - |
|
| 582 | - // il y a des taches en attentes |
|
| 583 | - // si depuis plus de 5min, on essaye de lancer le cron par tous les moyens pour rattraper le coup |
|
| 584 | - // on est sans doute sur un site qui n'autorise pas http sortant ou avec peu de trafic |
|
| 585 | - $urgent = false; |
|
| 586 | - if ($time_to_next < -300) { |
|
| 587 | - $urgent = true; |
|
| 588 | - } |
|
| 589 | - |
|
| 590 | - $url_cron = generer_url_action('cron', '', false, true); |
|
| 591 | - |
|
| 592 | - if (!defined('_HTML_BG_CRON_FORCE') or !_HTML_BG_CRON_FORCE) { |
|
| 593 | - if (queue_lancer_url_http_async($url_cron) and !$urgent) { |
|
| 594 | - return $texte; |
|
| 595 | - } |
|
| 596 | - } |
|
| 597 | - |
|
| 598 | - // si deja force, on retourne sans rien |
|
| 599 | - if (defined('_DIRECT_CRON_FORCE')) { |
|
| 600 | - return $texte; |
|
| 601 | - } |
|
| 602 | - |
|
| 603 | - // si c'est un bot |
|
| 604 | - // inutile de faire un appel par image background, |
|
| 605 | - // on force un appel direct en fin de hit |
|
| 606 | - if ((defined('_IS_BOT') and _IS_BOT)) { |
|
| 607 | - define('_DIRECT_CRON_FORCE', true); |
|
| 608 | - |
|
| 609 | - return $texte; |
|
| 610 | - } |
|
| 611 | - |
|
| 612 | - if (!defined('_HTML_BG_CRON_INHIB') or !_HTML_BG_CRON_INHIB) { |
|
| 613 | - // en derniere solution, on insere un appel xhr non bloquant ou une image background dans la page si pas de JS |
|
| 614 | - $url_cron = generer_url_action('cron'); |
|
| 615 | - $texte = '<!-- SPIP-CRON -->' |
|
| 616 | - . "<script>setTimeout(function(){var xo = new XMLHttpRequest();xo.open('GET', '$url_cron', true);xo.send('');},100);</script>" |
|
| 617 | - . "<noscript><div style=\"background-image: url('$url_cron');\"></div></noscript>"; |
|
| 618 | - } |
|
| 619 | - |
|
| 620 | - return $texte; |
|
| 567 | + $texte = ''; |
|
| 568 | + |
|
| 569 | + $time_to_next = queue_sleep_time_to_next_job(); |
|
| 570 | + // rien a faire si le prochain job est encore dans le futur |
|
| 571 | + if ($time_to_next > 0 or defined('_DEBUG_BLOCK_QUEUE')) { |
|
| 572 | + return $texte; |
|
| 573 | + } |
|
| 574 | + |
|
| 575 | + // ne pas relancer si on vient de lancer dans la meme seconde par un hit concurent |
|
| 576 | + if (file_exists($lock = _DIR_TMP . 'cron.lock') and !(@filemtime($lock) < $_SERVER['REQUEST_TIME'])) { |
|
| 577 | + return $texte; |
|
| 578 | + } |
|
| 579 | + |
|
| 580 | + @touch($lock); |
|
| 581 | + |
|
| 582 | + // il y a des taches en attentes |
|
| 583 | + // si depuis plus de 5min, on essaye de lancer le cron par tous les moyens pour rattraper le coup |
|
| 584 | + // on est sans doute sur un site qui n'autorise pas http sortant ou avec peu de trafic |
|
| 585 | + $urgent = false; |
|
| 586 | + if ($time_to_next < -300) { |
|
| 587 | + $urgent = true; |
|
| 588 | + } |
|
| 589 | + |
|
| 590 | + $url_cron = generer_url_action('cron', '', false, true); |
|
| 591 | + |
|
| 592 | + if (!defined('_HTML_BG_CRON_FORCE') or !_HTML_BG_CRON_FORCE) { |
|
| 593 | + if (queue_lancer_url_http_async($url_cron) and !$urgent) { |
|
| 594 | + return $texte; |
|
| 595 | + } |
|
| 596 | + } |
|
| 597 | + |
|
| 598 | + // si deja force, on retourne sans rien |
|
| 599 | + if (defined('_DIRECT_CRON_FORCE')) { |
|
| 600 | + return $texte; |
|
| 601 | + } |
|
| 602 | + |
|
| 603 | + // si c'est un bot |
|
| 604 | + // inutile de faire un appel par image background, |
|
| 605 | + // on force un appel direct en fin de hit |
|
| 606 | + if ((defined('_IS_BOT') and _IS_BOT)) { |
|
| 607 | + define('_DIRECT_CRON_FORCE', true); |
|
| 608 | + |
|
| 609 | + return $texte; |
|
| 610 | + } |
|
| 611 | + |
|
| 612 | + if (!defined('_HTML_BG_CRON_INHIB') or !_HTML_BG_CRON_INHIB) { |
|
| 613 | + // en derniere solution, on insere un appel xhr non bloquant ou une image background dans la page si pas de JS |
|
| 614 | + $url_cron = generer_url_action('cron'); |
|
| 615 | + $texte = '<!-- SPIP-CRON -->' |
|
| 616 | + . "<script>setTimeout(function(){var xo = new XMLHttpRequest();xo.open('GET', '$url_cron', true);xo.send('');},100);</script>" |
|
| 617 | + . "<noscript><div style=\"background-image: url('$url_cron');\"></div></noscript>"; |
|
| 618 | + } |
|
| 619 | + |
|
| 620 | + return $texte; |
|
| 621 | 621 | } |
| 622 | 622 | |
| 623 | 623 | /** |
@@ -626,73 +626,73 @@ discard block |
||
| 626 | 626 | * @return bool : true si l'url a pu être appelée en asynchrone, false sinon |
| 627 | 627 | */ |
| 628 | 628 | function queue_lancer_url_http_async($url_cron) { |
| 629 | - // methode la plus rapide : |
|
| 630 | - // Si fsockopen est possible, on lance le cron via un socket en asynchrone |
|
| 631 | - // si fsockopen echoue (disponibilite serveur, firewall) on essaye pas cURL |
|
| 632 | - // car on a toutes les chances d'echouer pareil mais sans moyen de le savoir |
|
| 633 | - // mais on renvoie false direct |
|
| 634 | - if (function_exists('fsockopen')) { |
|
| 635 | - $parts = parse_url($url_cron); |
|
| 636 | - |
|
| 637 | - switch ($parts['scheme']) { |
|
| 638 | - case 'https': |
|
| 639 | - $scheme = 'ssl://'; |
|
| 640 | - $port = 443; |
|
| 641 | - break; |
|
| 642 | - case 'http': |
|
| 643 | - default: |
|
| 644 | - $scheme = ''; |
|
| 645 | - $port = 80; |
|
| 646 | - } |
|
| 647 | - $fp = @fsockopen( |
|
| 648 | - $scheme . $parts['host'], |
|
| 649 | - $parts['port'] ?? $port, |
|
| 650 | - $errno, |
|
| 651 | - $errstr, |
|
| 652 | - 1 |
|
| 653 | - ); |
|
| 654 | - |
|
| 655 | - if ($fp) { |
|
| 656 | - $host_sent = $parts['host']; |
|
| 657 | - if (isset($parts['port']) and $parts['port'] !== $port) { |
|
| 658 | - $host_sent .= ':' . $parts['port']; |
|
| 659 | - } |
|
| 660 | - $timeout = 200; // ms |
|
| 661 | - stream_set_timeout($fp, 0, $timeout * 1000); |
|
| 662 | - $query = $parts['path'] . ($parts['query'] ? '?' . $parts['query'] : ''); |
|
| 663 | - $out = 'GET ' . $query . " HTTP/1.1\r\n"; |
|
| 664 | - $out .= 'Host: ' . $host_sent . "\r\n"; |
|
| 665 | - $out .= "Connection: Close\r\n\r\n"; |
|
| 666 | - fwrite($fp, $out); |
|
| 667 | - spip_timer('read'); |
|
| 668 | - $t = 0; |
|
| 669 | - // on lit la reponse si possible pour fermer proprement la connexion |
|
| 670 | - // avec un timeout total de 200ms pour ne pas se bloquer |
|
| 671 | - while (!feof($fp) and $t < $timeout) { |
|
| 672 | - @fgets($fp, 1024); |
|
| 673 | - $t += spip_timer('read', true); |
|
| 674 | - spip_timer('read'); |
|
| 675 | - } |
|
| 676 | - fclose($fp); |
|
| 677 | - return true; |
|
| 678 | - } |
|
| 679 | - } |
|
| 680 | - // si fsockopen n'est pas dispo on essaye cURL : |
|
| 681 | - // lancer le cron par un cURL asynchrone si cURL est present |
|
| 682 | - elseif (function_exists('curl_init')) { |
|
| 683 | - //setting the curl parameters. |
|
| 684 | - $ch = curl_init($url_cron); |
|
| 685 | - curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); |
|
| 686 | - // cf bug : http://www.php.net/manual/en/function.curl-setopt.php#104597 |
|
| 687 | - curl_setopt($ch, CURLOPT_NOSIGNAL, 1); |
|
| 688 | - // valeur mini pour que la requete soit lancee |
|
| 689 | - curl_setopt($ch, CURLOPT_TIMEOUT_MS, 200); |
|
| 690 | - // lancer |
|
| 691 | - curl_exec($ch); |
|
| 692 | - // fermer |
|
| 693 | - curl_close($ch); |
|
| 694 | - return true; |
|
| 695 | - } |
|
| 696 | - |
|
| 697 | - return false; |
|
| 629 | + // methode la plus rapide : |
|
| 630 | + // Si fsockopen est possible, on lance le cron via un socket en asynchrone |
|
| 631 | + // si fsockopen echoue (disponibilite serveur, firewall) on essaye pas cURL |
|
| 632 | + // car on a toutes les chances d'echouer pareil mais sans moyen de le savoir |
|
| 633 | + // mais on renvoie false direct |
|
| 634 | + if (function_exists('fsockopen')) { |
|
| 635 | + $parts = parse_url($url_cron); |
|
| 636 | + |
|
| 637 | + switch ($parts['scheme']) { |
|
| 638 | + case 'https': |
|
| 639 | + $scheme = 'ssl://'; |
|
| 640 | + $port = 443; |
|
| 641 | + break; |
|
| 642 | + case 'http': |
|
| 643 | + default: |
|
| 644 | + $scheme = ''; |
|
| 645 | + $port = 80; |
|
| 646 | + } |
|
| 647 | + $fp = @fsockopen( |
|
| 648 | + $scheme . $parts['host'], |
|
| 649 | + $parts['port'] ?? $port, |
|
| 650 | + $errno, |
|
| 651 | + $errstr, |
|
| 652 | + 1 |
|
| 653 | + ); |
|
| 654 | + |
|
| 655 | + if ($fp) { |
|
| 656 | + $host_sent = $parts['host']; |
|
| 657 | + if (isset($parts['port']) and $parts['port'] !== $port) { |
|
| 658 | + $host_sent .= ':' . $parts['port']; |
|
| 659 | + } |
|
| 660 | + $timeout = 200; // ms |
|
| 661 | + stream_set_timeout($fp, 0, $timeout * 1000); |
|
| 662 | + $query = $parts['path'] . ($parts['query'] ? '?' . $parts['query'] : ''); |
|
| 663 | + $out = 'GET ' . $query . " HTTP/1.1\r\n"; |
|
| 664 | + $out .= 'Host: ' . $host_sent . "\r\n"; |
|
| 665 | + $out .= "Connection: Close\r\n\r\n"; |
|
| 666 | + fwrite($fp, $out); |
|
| 667 | + spip_timer('read'); |
|
| 668 | + $t = 0; |
|
| 669 | + // on lit la reponse si possible pour fermer proprement la connexion |
|
| 670 | + // avec un timeout total de 200ms pour ne pas se bloquer |
|
| 671 | + while (!feof($fp) and $t < $timeout) { |
|
| 672 | + @fgets($fp, 1024); |
|
| 673 | + $t += spip_timer('read', true); |
|
| 674 | + spip_timer('read'); |
|
| 675 | + } |
|
| 676 | + fclose($fp); |
|
| 677 | + return true; |
|
| 678 | + } |
|
| 679 | + } |
|
| 680 | + // si fsockopen n'est pas dispo on essaye cURL : |
|
| 681 | + // lancer le cron par un cURL asynchrone si cURL est present |
|
| 682 | + elseif (function_exists('curl_init')) { |
|
| 683 | + //setting the curl parameters. |
|
| 684 | + $ch = curl_init($url_cron); |
|
| 685 | + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); |
|
| 686 | + // cf bug : http://www.php.net/manual/en/function.curl-setopt.php#104597 |
|
| 687 | + curl_setopt($ch, CURLOPT_NOSIGNAL, 1); |
|
| 688 | + // valeur mini pour que la requete soit lancee |
|
| 689 | + curl_setopt($ch, CURLOPT_TIMEOUT_MS, 200); |
|
| 690 | + // lancer |
|
| 691 | + curl_exec($ch); |
|
| 692 | + // fermer |
|
| 693 | + curl_close($ch); |
|
| 694 | + return true; |
|
| 695 | + } |
|
| 696 | + |
|
| 697 | + return false; |
|
| 698 | 698 | } |
@@ -70,7 +70,7 @@ discard block |
||
| 70 | 70 | $md5args = md5($arguments); |
| 71 | 71 | |
| 72 | 72 | // si pas de date programee, des que possible |
| 73 | - $duplicate_where = 'status=' . intval(_JQ_SCHEDULED) . ' AND '; |
|
| 73 | + $duplicate_where = 'status='.intval(_JQ_SCHEDULED).' AND '; |
|
| 74 | 74 | if (!$time) { |
| 75 | 75 | $time = time(); |
| 76 | 76 | $duplicate_where = ''; // ne pas dupliquer si deja le meme job en cours d'execution |
@@ -96,9 +96,8 @@ discard block |
||
| 96 | 96 | 'id_job', |
| 97 | 97 | 'spip_jobs', |
| 98 | 98 | $duplicate_where = |
| 99 | - $duplicate_where . 'fonction=' . sql_quote($function) |
|
| 100 | - . (($no_duplicate === 'function_only') ? '' : |
|
| 101 | - ' AND md5args=' . sql_quote($md5args) . ' AND inclure=' . sql_quote($file)) |
|
| 99 | + $duplicate_where.'fonction='.sql_quote($function) |
|
| 100 | + . (($no_duplicate === 'function_only') ? '' : ' AND md5args='.sql_quote($md5args).' AND inclure='.sql_quote($file)) |
|
| 102 | 101 | ) |
| 103 | 102 | ) { |
| 104 | 103 | return $id_job; |
@@ -111,9 +110,9 @@ discard block |
||
| 111 | 110 | if ( |
| 112 | 111 | $no_duplicate |
| 113 | 112 | and |
| 114 | - $id_prev = sql_getfetsel('id_job', 'spip_jobs', 'id_job<' . intval($id_job) . " AND $duplicate_where") |
|
| 113 | + $id_prev = sql_getfetsel('id_job', 'spip_jobs', 'id_job<'.intval($id_job)." AND $duplicate_where") |
|
| 115 | 114 | ) { |
| 116 | - sql_delete('spip_jobs', 'id_job=' . intval($id_job)); |
|
| 115 | + sql_delete('spip_jobs', 'id_job='.intval($id_job)); |
|
| 117 | 116 | |
| 118 | 117 | return $id_prev; |
| 119 | 118 | } |
@@ -125,9 +124,9 @@ discard block |
||
| 125 | 124 | // ie cas d'un char non acceptables sur certains type de champs |
| 126 | 125 | // qui coupe la valeur |
| 127 | 126 | if (defined('_JQ_INSERT_CHECK_ARGS') and $id_job) { |
| 128 | - $args = sql_getfetsel('args', 'spip_jobs', 'id_job=' . intval($id_job)); |
|
| 127 | + $args = sql_getfetsel('args', 'spip_jobs', 'id_job='.intval($id_job)); |
|
| 129 | 128 | if ($args !== $arguments) { |
| 130 | - spip_log('arguments job errones / longueur ' . strlen($args) . ' vs ' . strlen($arguments) . ' / valeur : ' . var_export( |
|
| 129 | + spip_log('arguments job errones / longueur '.strlen($args).' vs '.strlen($arguments).' / valeur : '.var_export( |
|
| 131 | 130 | $arguments, |
| 132 | 131 | true |
| 133 | 132 | ), 'queue'); |
@@ -157,7 +156,7 @@ discard block |
||
| 157 | 156 | function queue_purger() { |
| 158 | 157 | include_spip('base/abstract_sql'); |
| 159 | 158 | sql_delete('spip_jobs'); |
| 160 | - sql_delete('spip_jobs_liens', 'id_job NOT IN (' . sql_get_select('id_job', 'spip_jobs') . ')'); |
|
| 159 | + sql_delete('spip_jobs_liens', 'id_job NOT IN ('.sql_get_select('id_job', 'spip_jobs').')'); |
|
| 161 | 160 | include_spip('inc/genie'); |
| 162 | 161 | genie_queue_watch_dist(); |
| 163 | 162 | } |
@@ -173,8 +172,8 @@ discard block |
||
| 173 | 172 | include_spip('base/abstract_sql'); |
| 174 | 173 | |
| 175 | 174 | if ( |
| 176 | - $row = sql_fetsel('fonction,inclure,date', 'spip_jobs', 'id_job=' . intval($id_job)) |
|
| 177 | - and $res = sql_delete('spip_jobs', 'id_job=' . intval($id_job)) |
|
| 175 | + $row = sql_fetsel('fonction,inclure,date', 'spip_jobs', 'id_job='.intval($id_job)) |
|
| 176 | + and $res = sql_delete('spip_jobs', 'id_job='.intval($id_job)) |
|
| 178 | 177 | ) { |
| 179 | 178 | queue_unlink_job($id_job); |
| 180 | 179 | // est-ce une tache cron qu'il faut relancer ? |
@@ -224,7 +223,7 @@ discard block |
||
| 224 | 223 | * resultat du sql_delete |
| 225 | 224 | */ |
| 226 | 225 | function queue_unlink_job($id_job) { |
| 227 | - return sql_delete('spip_jobs_liens', 'id_job=' . intval($id_job)); |
|
| 226 | + return sql_delete('spip_jobs_liens', 'id_job='.intval($id_job)); |
|
| 228 | 227 | } |
| 229 | 228 | |
| 230 | 229 | /** |
@@ -240,7 +239,7 @@ discard block |
||
| 240 | 239 | // deserialiser les arguments |
| 241 | 240 | $args = unserialize($row['args']); |
| 242 | 241 | if (!is_array($args)) { |
| 243 | - spip_log('arguments job errones ' . var_export($row, true), 'queue'); |
|
| 242 | + spip_log('arguments job errones '.var_export($row, true), 'queue'); |
|
| 244 | 243 | $args = []; |
| 245 | 244 | } |
| 246 | 245 | |
@@ -257,14 +256,14 @@ discard block |
||
| 257 | 256 | } |
| 258 | 257 | |
| 259 | 258 | if (!function_exists($fonction)) { |
| 260 | - spip_log("fonction $fonction ($inclure) inexistante " . var_export($row, true), 'queue'); |
|
| 259 | + spip_log("fonction $fonction ($inclure) inexistante ".var_export($row, true), 'queue'); |
|
| 261 | 260 | |
| 262 | 261 | return false; |
| 263 | 262 | } |
| 264 | 263 | |
| 265 | - spip_log('queue [' . $row['id_job'] . "]: $fonction() start", 'queue'); |
|
| 264 | + spip_log('queue ['.$row['id_job']."]: $fonction() start", 'queue'); |
|
| 266 | 265 | $res = $fonction(...$args); |
| 267 | - spip_log('queue [' . $row['id_job'] . "]: $fonction() end", 'queue'); |
|
| 266 | + spip_log('queue ['.$row['id_job']."]: $fonction() end", 'queue'); |
|
| 268 | 267 | |
| 269 | 268 | return $res; |
| 270 | 269 | } |
@@ -295,14 +294,14 @@ discard block |
||
| 295 | 294 | function queue_schedule($force_jobs = null) { |
| 296 | 295 | $time = time(); |
| 297 | 296 | if (defined('_DEBUG_BLOCK_QUEUE')) { |
| 298 | - spip_log('_DEBUG_BLOCK_QUEUE : schedule stop', 'jq' . _LOG_DEBUG); |
|
| 297 | + spip_log('_DEBUG_BLOCK_QUEUE : schedule stop', 'jq'._LOG_DEBUG); |
|
| 299 | 298 | |
| 300 | 299 | return; |
| 301 | 300 | } |
| 302 | 301 | |
| 303 | 302 | // rien a faire si le prochain job est encore dans le futur |
| 304 | 303 | if (queue_sleep_time_to_next_job() > 0 and (!$force_jobs or !count($force_jobs))) { |
| 305 | - spip_log('queue_sleep_time_to_next_job', 'jq' . _LOG_DEBUG); |
|
| 304 | + spip_log('queue_sleep_time_to_next_job', 'jq'._LOG_DEBUG); |
|
| 306 | 305 | |
| 307 | 306 | return; |
| 308 | 307 | } |
@@ -323,7 +322,7 @@ discard block |
||
| 323 | 322 | } |
| 324 | 323 | $end_time = $time + _JQ_MAX_JOBS_TIME_TO_EXECUTE; |
| 325 | 324 | |
| 326 | - spip_log("JQ schedule $time / $end_time", 'jq' . _LOG_DEBUG); |
|
| 325 | + spip_log("JQ schedule $time / $end_time", 'jq'._LOG_DEBUG); |
|
| 327 | 326 | |
| 328 | 327 | if (!defined('_JQ_MAX_JOBS_EXECUTE')) { |
| 329 | 328 | define('_JQ_MAX_JOBS_EXECUTE', 200); |
@@ -337,19 +336,19 @@ discard block |
||
| 337 | 336 | // lorsqu'un job cron n'a pas fini, sa priorite est descendue |
| 338 | 337 | // pour qu'il ne bloque pas les autres jobs en attente |
| 339 | 338 | if (is_array($force_jobs) and count($force_jobs)) { |
| 340 | - $cond = 'status=' . intval(_JQ_SCHEDULED) . ' AND ' . sql_in('id_job', $force_jobs); |
|
| 339 | + $cond = 'status='.intval(_JQ_SCHEDULED).' AND '.sql_in('id_job', $force_jobs); |
|
| 341 | 340 | } else { |
| 342 | 341 | $now = date('Y-m-d H:i:s', $time); |
| 343 | - $cond = 'status=' . intval(_JQ_SCHEDULED) . ' AND date<=' . sql_quote($now); |
|
| 342 | + $cond = 'status='.intval(_JQ_SCHEDULED).' AND date<='.sql_quote($now); |
|
| 344 | 343 | } |
| 345 | 344 | |
| 346 | 345 | register_shutdown_function('queue_error_handler'); // recuperer les erreurs auant que possible |
| 347 | - $res = sql_allfetsel('*', 'spip_jobs', $cond, '', 'priorite DESC,date', '0,' . (_JQ_MAX_JOBS_EXECUTE + 1)); |
|
| 346 | + $res = sql_allfetsel('*', 'spip_jobs', $cond, '', 'priorite DESC,date', '0,'.(_JQ_MAX_JOBS_EXECUTE + 1)); |
|
| 348 | 347 | do { |
| 349 | 348 | if ($row = array_shift($res)) { |
| 350 | 349 | $nbj++; |
| 351 | 350 | // il faut un verrou, a base de sql_delete |
| 352 | - if (sql_delete('spip_jobs', 'id_job=' . intval($row['id_job']) . ' AND status=' . intval(_JQ_SCHEDULED))) { |
|
| 351 | + if (sql_delete('spip_jobs', 'id_job='.intval($row['id_job']).' AND status='.intval(_JQ_SCHEDULED))) { |
|
| 353 | 352 | #spip_log("JQ schedule job ".$nbj." OK",'jq'); |
| 354 | 353 | // on reinsert dans la base aussitot avec un status=_JQ_PENDING |
| 355 | 354 | $row['status'] = _JQ_PENDING; |
@@ -364,13 +363,13 @@ discard block |
||
| 364 | 363 | queue_close_job($row, $time, $result); |
| 365 | 364 | } |
| 366 | 365 | } |
| 367 | - spip_log('JQ schedule job end time ' . $time, 'jq' . _LOG_DEBUG); |
|
| 366 | + spip_log('JQ schedule job end time '.$time, 'jq'._LOG_DEBUG); |
|
| 368 | 367 | } while ($nbj < _JQ_MAX_JOBS_EXECUTE and $row and $time < $end_time); |
| 369 | - spip_log('JQ schedule end time ' . time(), 'jq' . _LOG_DEBUG); |
|
| 368 | + spip_log('JQ schedule end time '.time(), 'jq'._LOG_DEBUG); |
|
| 370 | 369 | |
| 371 | 370 | if ($row = array_shift($res)) { |
| 372 | 371 | queue_update_next_job_time(0); // on sait qu'il y a encore des jobs a lancer ASAP |
| 373 | - spip_log('JQ encore !', 'jq' . _LOG_DEBUG); |
|
| 372 | + spip_log('JQ encore !', 'jq'._LOG_DEBUG); |
|
| 374 | 373 | } else { |
| 375 | 374 | queue_update_next_job_time(); |
| 376 | 375 | } |
@@ -405,9 +404,9 @@ discard block |
||
| 405 | 404 | } |
| 406 | 405 | } |
| 407 | 406 | // purger ses liens eventuels avec des objets |
| 408 | - sql_delete('spip_jobs_liens', 'id_job=' . intval($row['id_job'])); |
|
| 407 | + sql_delete('spip_jobs_liens', 'id_job='.intval($row['id_job'])); |
|
| 409 | 408 | // supprimer le job fini |
| 410 | - sql_delete('spip_jobs', 'id_job=' . intval($row['id_job'])); |
|
| 409 | + sql_delete('spip_jobs', 'id_job='.intval($row['id_job'])); |
|
| 411 | 410 | } |
| 412 | 411 | |
| 413 | 412 | /** |
@@ -480,18 +479,18 @@ discard block |
||
| 480 | 479 | $res = sql_allfetsel( |
| 481 | 480 | '*', |
| 482 | 481 | 'spip_jobs', |
| 483 | - 'status=' . intval(_JQ_PENDING) . ' AND date<' . sql_quote(date('Y-m-d H:i:s', $time - 180)) |
|
| 482 | + 'status='.intval(_JQ_PENDING).' AND date<'.sql_quote(date('Y-m-d H:i:s', $time - 180)) |
|
| 484 | 483 | ); |
| 485 | 484 | if (is_array($res)) { |
| 486 | 485 | foreach ($res as $row) { |
| 487 | 486 | queue_close_job($row, $time); |
| 488 | - spip_log('queue_close_job car _JQ_PENDING depuis +180s : ' . print_r($row, 1), 'job_mort' . _LOG_ERREUR); |
|
| 487 | + spip_log('queue_close_job car _JQ_PENDING depuis +180s : '.print_r($row, 1), 'job_mort'._LOG_ERREUR); |
|
| 489 | 488 | } |
| 490 | 489 | } |
| 491 | 490 | |
| 492 | 491 | // chercher la date du prochain job si pas connu |
| 493 | 492 | if (is_null($next) or is_null(queue_sleep_time_to_next_job())) { |
| 494 | - $date = sql_getfetsel('date', 'spip_jobs', 'status=' . intval(_JQ_SCHEDULED), '', 'date', '0,1'); |
|
| 493 | + $date = sql_getfetsel('date', 'spip_jobs', 'status='.intval(_JQ_SCHEDULED), '', 'date', '0,1'); |
|
| 495 | 494 | $next = strtotime($date); |
| 496 | 495 | } |
| 497 | 496 | if (!is_null($next_time)) { |
@@ -504,7 +503,7 @@ discard block |
||
| 504 | 503 | if (is_null($nb_jobs_scheduled)) { |
| 505 | 504 | $nb_jobs_scheduled = sql_countsel( |
| 506 | 505 | 'spip_jobs', |
| 507 | - 'status=' . intval(_JQ_SCHEDULED) . ' AND date<' . sql_quote(date('Y-m-d H:i:s', $time)) |
|
| 506 | + 'status='.intval(_JQ_SCHEDULED).' AND date<'.sql_quote(date('Y-m-d H:i:s', $time)) |
|
| 508 | 507 | ); |
| 509 | 508 | } elseif ($next <= $time) { |
| 510 | 509 | $nb_jobs_scheduled++; |
@@ -573,7 +572,7 @@ discard block |
||
| 573 | 572 | } |
| 574 | 573 | |
| 575 | 574 | // ne pas relancer si on vient de lancer dans la meme seconde par un hit concurent |
| 576 | - if (file_exists($lock = _DIR_TMP . 'cron.lock') and !(@filemtime($lock) < $_SERVER['REQUEST_TIME'])) { |
|
| 575 | + if (file_exists($lock = _DIR_TMP.'cron.lock') and !(@filemtime($lock) < $_SERVER['REQUEST_TIME'])) { |
|
| 577 | 576 | return $texte; |
| 578 | 577 | } |
| 579 | 578 | |
@@ -645,7 +644,7 @@ discard block |
||
| 645 | 644 | $port = 80; |
| 646 | 645 | } |
| 647 | 646 | $fp = @fsockopen( |
| 648 | - $scheme . $parts['host'], |
|
| 647 | + $scheme.$parts['host'], |
|
| 649 | 648 | $parts['port'] ?? $port, |
| 650 | 649 | $errno, |
| 651 | 650 | $errstr, |
@@ -655,13 +654,13 @@ discard block |
||
| 655 | 654 | if ($fp) { |
| 656 | 655 | $host_sent = $parts['host']; |
| 657 | 656 | if (isset($parts['port']) and $parts['port'] !== $port) { |
| 658 | - $host_sent .= ':' . $parts['port']; |
|
| 657 | + $host_sent .= ':'.$parts['port']; |
|
| 659 | 658 | } |
| 660 | 659 | $timeout = 200; // ms |
| 661 | 660 | stream_set_timeout($fp, 0, $timeout * 1000); |
| 662 | - $query = $parts['path'] . ($parts['query'] ? '?' . $parts['query'] : ''); |
|
| 663 | - $out = 'GET ' . $query . " HTTP/1.1\r\n"; |
|
| 664 | - $out .= 'Host: ' . $host_sent . "\r\n"; |
|
| 661 | + $query = $parts['path'].($parts['query'] ? '?'.$parts['query'] : ''); |
|
| 662 | + $out = 'GET '.$query." HTTP/1.1\r\n"; |
|
| 663 | + $out .= 'Host: '.$host_sent."\r\n"; |
|
| 665 | 664 | $out .= "Connection: Close\r\n\r\n"; |
| 666 | 665 | fwrite($fp, $out); |
| 667 | 666 | spip_timer('read'); |