Completed
Push — master ( 5d4b0b...2986c5 )
by cam
01:06
created
ecrire/inc/genie.php 1 patch
Indentation   +88 added lines, -88 removed lines patch added patch discarded remove patch
@@ -11,7 +11,7 @@  discard block
 block discarded – undo
11 11
 \***************************************************************************/
12 12
 
13 13
 if (!defined('_ECRIRE_INC_VERSION')) {
14
-	return;
14
+    return;
15 15
 }
16 16
 
17 17
 /**
@@ -75,28 +75,28 @@  discard block
 block discarded – undo
75 75
  * @return
76 76
  **/
77 77
 function inc_genie_dist($taches = []) {
78
-	include_spip('inc/queue');
79
-
80
-	if (_request('exec') == 'job_queue') {
81
-		return false;
82
-	}
83
-
84
-	$force_jobs = [];
85
-	// l'ancienne facon de lancer une tache cron immediatement
86
-	// etait de la passer en parametre a ing_genie_dist
87
-	// on reroute en ajoutant simplement le job a la queue, ASAP
88
-	foreach ($taches as $function => $period) {
89
-		$force_jobs[] = queue_add_job(
90
-			$function,
91
-			_T('tache_cron_asap', ['function' => $function]),
92
-			[time() - abs($period)],
93
-			'genie/'
94
-		);
95
-	}
96
-
97
-	// et on passe la main a la gestion de la queue !
98
-	// en forcant eventuellement les jobs ajoute a l'instant
99
-	return queue_schedule(count($force_jobs) ? $force_jobs : null);
78
+    include_spip('inc/queue');
79
+
80
+    if (_request('exec') == 'job_queue') {
81
+        return false;
82
+    }
83
+
84
+    $force_jobs = [];
85
+    // l'ancienne facon de lancer une tache cron immediatement
86
+    // etait de la passer en parametre a ing_genie_dist
87
+    // on reroute en ajoutant simplement le job a la queue, ASAP
88
+    foreach ($taches as $function => $period) {
89
+        $force_jobs[] = queue_add_job(
90
+            $function,
91
+            _T('tache_cron_asap', ['function' => $function]),
92
+            [time() - abs($period)],
93
+            'genie/'
94
+        );
95
+    }
96
+
97
+    // et on passe la main a la gestion de la queue !
98
+    // en forcant eventuellement les jobs ajoute a l'instant
99
+    return queue_schedule(count($force_jobs) ? $force_jobs : null);
100 100
 }
101 101
 
102 102
 //
@@ -109,33 +109,33 @@  discard block
 block discarded – undo
109 109
 //
110 110
 function taches_generales($taches_generales = []) {
111 111
 
112
-	// verifier que toutes les taches cron sont planifiees
113
-	// c'est une tache cron !
114
-	$taches_generales['queue_watch'] = 3600 * 24;
112
+    // verifier que toutes les taches cron sont planifiees
113
+    // c'est une tache cron !
114
+    $taches_generales['queue_watch'] = 3600 * 24;
115 115
 
116
-	// MAJ des rubriques publiques (cas de la publication post-datee)
117
-	// est fait au coup par coup a present
118
-	//	$taches_generales['rubriques'] = 3600;
116
+    // MAJ des rubriques publiques (cas de la publication post-datee)
117
+    // est fait au coup par coup a present
118
+    //	$taches_generales['rubriques'] = 3600;
119 119
 
120
-	// Optimisation de la base
121
-	$taches_generales['optimiser'] = 3600 * 48;
120
+    // Optimisation de la base
121
+    $taches_generales['optimiser'] = 3600 * 48;
122 122
 
123
-	// nouveautes
124
-	if (
125
-		isset($GLOBALS['meta']['adresse_neuf']) and $GLOBALS['meta']['adresse_neuf']
126
-		and $GLOBALS['meta']['jours_neuf']
127
-		and ($GLOBALS['meta']['quoi_de_neuf'] == 'oui')
128
-	) {
129
-		$taches_generales['mail'] = 3600 * 24 * $GLOBALS['meta']['jours_neuf'];
130
-	}
123
+    // nouveautes
124
+    if (
125
+        isset($GLOBALS['meta']['adresse_neuf']) and $GLOBALS['meta']['adresse_neuf']
126
+        and $GLOBALS['meta']['jours_neuf']
127
+        and ($GLOBALS['meta']['quoi_de_neuf'] == 'oui')
128
+    ) {
129
+        $taches_generales['mail'] = 3600 * 24 * $GLOBALS['meta']['jours_neuf'];
130
+    }
131 131
 
132
-	// maintenance (ajax, verifications diverses)
133
-	$taches_generales['maintenance'] = 3600 * 2;
132
+    // maintenance (ajax, verifications diverses)
133
+    $taches_generales['maintenance'] = 3600 * 2;
134 134
 
135
-	// verifier si une mise a jour de spip est disponible (2 fois par semaine suffit largement)
136
-	$taches_generales['mise_a_jour'] = 3 * 24 * 3600;
135
+    // verifier si une mise a jour de spip est disponible (2 fois par semaine suffit largement)
136
+    $taches_generales['mise_a_jour'] = 3 * 24 * 3600;
137 137
 
138
-	return pipeline('taches_generales_cron', $taches_generales);
138
+    return pipeline('taches_generales_cron', $taches_generales);
139 139
 }
140 140
 
141 141
 /**
@@ -151,22 +151,22 @@  discard block
 block discarded – undo
151 151
  * @return int
152 152
  */
153 153
 function genie_queue_watch_dist() {
154
-	static $deja_la = false;
155
-	if ($deja_la) {
156
-		return;
157
-	} // re-entrance si l'insertion des jobs echoue (pas de table spip_jobs a l'upgrade par exemple)
158
-	$deja_la = true;
159
-	$taches = taches_generales();
160
-	$programmees = sql_allfetsel('fonction', 'spip_jobs', sql_in('fonction', array_keys($taches)));
161
-	$programmees = array_column($programmees, 'fonction');
162
-	foreach ($taches as $tache => $periode) {
163
-		if (!in_array($tache, $programmees)) {
164
-			queue_genie_replan_job($tache, $periode, time() - round(random_int(1, $periode)), 0);
165
-		}
166
-	}
167
-	$deja_la = false;
168
-
169
-	return 1;
154
+    static $deja_la = false;
155
+    if ($deja_la) {
156
+        return;
157
+    } // re-entrance si l'insertion des jobs echoue (pas de table spip_jobs a l'upgrade par exemple)
158
+    $deja_la = true;
159
+    $taches = taches_generales();
160
+    $programmees = sql_allfetsel('fonction', 'spip_jobs', sql_in('fonction', array_keys($taches)));
161
+    $programmees = array_column($programmees, 'fonction');
162
+    foreach ($taches as $tache => $periode) {
163
+        if (!in_array($tache, $programmees)) {
164
+            queue_genie_replan_job($tache, $periode, time() - round(random_int(1, $periode)), 0);
165
+        }
166
+    }
167
+    $deja_la = false;
168
+
169
+    return 1;
170 170
 }
171 171
 
172 172
 /**
@@ -187,32 +187,32 @@  discard block
 block discarded – undo
187 187
  * @return void
188 188
  */
189 189
 function queue_genie_replan_job($function, $period, $last = 0, $time = null, $priority = 0) {
190
-	static $done = [];
191
-	if (isset($done[$function])) {
192
-		return;
193
-	}
194
-	$done[$function] = true;
195
-	if (is_null($time)) {
196
-		$time = time();
197
-		if ($last) {
198
-			$time = max($last + $period, $time);
199
-		}
200
-	}
201
-	if (!$last) {
202
-		$last = $time - $period;
203
-	}
204
-	spip_log("replan_job $function $period $last $time $priority", 'queue');
205
-	include_spip('inc/queue');
206
-	// on replanifie un job cron
207
-	// uniquement si il n'y en a pas deja un avec le meme nom
208
-	// independament de l'argument
209
-	queue_add_job(
210
-		$function,
211
-		_T('tache_cron_secondes', ['function' => $function, 'nb' => $period]),
212
-		[$last],
213
-		'genie/',
214
-		'function_only',
215
-		$time,
216
-		$priority
217
-	);
190
+    static $done = [];
191
+    if (isset($done[$function])) {
192
+        return;
193
+    }
194
+    $done[$function] = true;
195
+    if (is_null($time)) {
196
+        $time = time();
197
+        if ($last) {
198
+            $time = max($last + $period, $time);
199
+        }
200
+    }
201
+    if (!$last) {
202
+        $last = $time - $period;
203
+    }
204
+    spip_log("replan_job $function $period $last $time $priority", 'queue');
205
+    include_spip('inc/queue');
206
+    // on replanifie un job cron
207
+    // uniquement si il n'y en a pas deja un avec le meme nom
208
+    // independament de l'argument
209
+    queue_add_job(
210
+        $function,
211
+        _T('tache_cron_secondes', ['function' => $function, 'nb' => $period]),
212
+        [$last],
213
+        'genie/',
214
+        'function_only',
215
+        $time,
216
+        $priority
217
+    );
218 218
 }
Please login to merge, or discard this patch.
ecrire/inc/informer.php 1 patch
Indentation   +57 added lines, -57 removed lines patch added patch discarded remove patch
@@ -11,73 +11,73 @@
 block discarded – undo
11 11
 \***************************************************************************/
12 12
 
13 13
 if (!defined('_ECRIRE_INC_VERSION')) {
14
-	return;
14
+    return;
15 15
 }
16 16
 
17 17
 # Les information d'une rubrique selectionnee dans le mini navigateur
18 18
 
19 19
 function inc_informer_dist($id, $col, $exclus, $rac, $type, $do = 'aff') {
20
-	include_spip('inc/texte');
21
-	$titre = $descriptif = '';
22
-	if ($type == 'rubrique') {
23
-		$row = sql_fetsel('titre, descriptif', 'spip_rubriques', 'id_rubrique = ' . intval($id));
24
-		if ($row) {
25
-			$titre = typo($row['titre']);
26
-			$descriptif = propre($row['descriptif']);
27
-		} else {
28
-			$titre = _T('info_racine_site');
29
-		}
30
-	}
20
+    include_spip('inc/texte');
21
+    $titre = $descriptif = '';
22
+    if ($type == 'rubrique') {
23
+        $row = sql_fetsel('titre, descriptif', 'spip_rubriques', 'id_rubrique = ' . intval($id));
24
+        if ($row) {
25
+            $titre = typo($row['titre']);
26
+            $descriptif = propre($row['descriptif']);
27
+        } else {
28
+            $titre = _T('info_racine_site');
29
+        }
30
+    }
31 31
 
32
-	$res = '';
33
-	if ($type == 'rubrique' and $GLOBALS['spip_display'] != 1 and isset($GLOBALS['meta']['image_process'])) {
34
-		if ($GLOBALS['meta']['image_process'] != 'non') {
35
-			$chercher_logo = charger_fonction('chercher_logo', 'inc');
36
-			if ($res = $chercher_logo($id, 'id_rubrique', 'on')) {
37
-				[$fid, $dir, $nom, $format] = $res;
38
-				include_spip('inc/filtres_images_mini');
39
-				$res = image_reduire("<img src='$fid' alt='' />", 100, 48);
40
-				if ($res) {
41
-					$res = "<div class='informer__media' style='float: " . $GLOBALS['spip_lang_right'] . '; margin-' . $GLOBALS['spip_lang_right'] . ": -5px; margin-top: -5px;'>$res</div>";
42
-				}
43
-			}
44
-		}
45
-	}
32
+    $res = '';
33
+    if ($type == 'rubrique' and $GLOBALS['spip_display'] != 1 and isset($GLOBALS['meta']['image_process'])) {
34
+        if ($GLOBALS['meta']['image_process'] != 'non') {
35
+            $chercher_logo = charger_fonction('chercher_logo', 'inc');
36
+            if ($res = $chercher_logo($id, 'id_rubrique', 'on')) {
37
+                [$fid, $dir, $nom, $format] = $res;
38
+                include_spip('inc/filtres_images_mini');
39
+                $res = image_reduire("<img src='$fid' alt='' />", 100, 48);
40
+                if ($res) {
41
+                    $res = "<div class='informer__media' style='float: " . $GLOBALS['spip_lang_right'] . '; margin-' . $GLOBALS['spip_lang_right'] . ": -5px; margin-top: -5px;'>$res</div>";
42
+                }
43
+            }
44
+        }
45
+    }
46 46
 
47
-	$rac = spip_htmlentities($rac, ENT_QUOTES);
48
-	$do = spip_htmlentities($do, ENT_QUOTES);
49
-	$id = intval($id);
47
+    $rac = spip_htmlentities($rac, ENT_QUOTES);
48
+    $do = spip_htmlentities($do, ENT_QUOTES);
49
+    $id = intval($id);
50 50
 
51 51
 # ce lien provoque la selection (directe) de la rubrique cliquee
52 52
 # et l'affichage de son titre dans le bandeau
53
-	$titre = strtr(
54
-		str_replace(
55
-			"'",
56
-			'&#8217;',
57
-			str_replace('"', '&#34;', textebrut($titre))
58
-		),
59
-		"\n\r",
60
-		'  '
61
-	);
53
+    $titre = strtr(
54
+        str_replace(
55
+            "'",
56
+            '&#8217;',
57
+            str_replace('"', '&#34;', textebrut($titre))
58
+        ),
59
+        "\n\r",
60
+        '  '
61
+    );
62 62
 
63
-	$js_func = $do . '_selection_titre';
63
+    $js_func = $do . '_selection_titre';
64 64
 
65
-	return "<div style='display: none;'>"
66
-	. "<input type='text' id='" . $rac . "_sel' value='$id' />"
67
-	. "<input type='text' id='" . $rac . "_sel2' value=\""
68
-	. entites_html($titre)
69
-	. '" />'
70
-	. '</div>'
71
-	. "<div class='informer' style='padding: 5px; border-top: 0px;'>"
72
-	. '<div class="informer__item">'
73
-	. (!$res ? '' : $res)
74
-	. "<p class='informer__titre'><b>" . safehtml($titre) . '</b></p>'
75
-	. (!$descriptif ? '' : "<div class='informer__descriptif'>" . safehtml($descriptif) . '</div>')
76
-	. '</div>'
77
-	. "<div class='informer__action' style='clear:both; text-align: " . $GLOBALS['spip_lang_right'] . ";'>"
78
-	. "<input type='submit' class='fondo btn submit' value='"
79
-	. _T('bouton_choisir')
80
-	. "'\nonclick=\"$js_func('$titre',$id,'selection_rubrique','id_parent'); return false;\" />"
81
-	. '</div>'
82
-	. '</div>';
65
+    return "<div style='display: none;'>"
66
+    . "<input type='text' id='" . $rac . "_sel' value='$id' />"
67
+    . "<input type='text' id='" . $rac . "_sel2' value=\""
68
+    . entites_html($titre)
69
+    . '" />'
70
+    . '</div>'
71
+    . "<div class='informer' style='padding: 5px; border-top: 0px;'>"
72
+    . '<div class="informer__item">'
73
+    . (!$res ? '' : $res)
74
+    . "<p class='informer__titre'><b>" . safehtml($titre) . '</b></p>'
75
+    . (!$descriptif ? '' : "<div class='informer__descriptif'>" . safehtml($descriptif) . '</div>')
76
+    . '</div>'
77
+    . "<div class='informer__action' style='clear:both; text-align: " . $GLOBALS['spip_lang_right'] . ";'>"
78
+    . "<input type='submit' class='fondo btn submit' value='"
79
+    . _T('bouton_choisir')
80
+    . "'\nonclick=\"$js_func('$titre',$id,'selection_rubrique','id_parent'); return false;\" />"
81
+    . '</div>'
82
+    . '</div>';
83 83
 }
Please login to merge, or discard this patch.
ecrire/inc/lang.php 1 patch
Indentation   +252 added lines, -252 removed lines patch added patch discarded remove patch
@@ -16,7 +16,7 @@  discard block
 block discarded – undo
16 16
  * @package SPIP\Core\Langue
17 17
  **/
18 18
 if (!defined('_ECRIRE_INC_VERSION')) {
19
-	return;
19
+    return;
20 20
 }
21 21
 
22 22
 
@@ -39,36 +39,36 @@  discard block
 block discarded – undo
39 39
  **/
40 40
 function changer_langue($lang, $liste_langues = null) {
41 41
 
42
-	if (is_null($liste_langues)) {
43
-		$liste_langues = @$GLOBALS['meta']['langues_proposees'] . ',' . @$GLOBALS['meta']['langues_multilingue'];
44
-	}
45
-	else {
46
-		if (is_array($liste_langues)) {
47
-			$liste_langues = implode(',', $liste_langues);
48
-		}
49
-	}
50
-	$liste_langues = ',' . $liste_langues . ',';
51
-
52
-	// Si la langue demandee n'existe pas, on essaie d'autres variantes
53
-	// Exemple : 'pt-br' => 'pt_br' => 'pt'
54
-	$lang = str_replace('-', '_', trim($lang));
55
-	if (!$lang) {
56
-		return false;
57
-	}
58
-
59
-	if (
60
-		strpos($liste_langues, (string) ",$lang,") !== false
61
-		or ($lang = preg_replace(',_.*,', '', $lang)
62
-			and strpos($liste_langues, (string) ",$lang,") !== false)
63
-	) {
64
-		$GLOBALS['spip_lang_rtl'] = lang_dir($lang, '', '_rtl');
65
-		$GLOBALS['spip_lang_right'] = $GLOBALS['spip_lang_rtl'] ? 'left' : 'right';
66
-		$GLOBALS['spip_lang_left'] = $GLOBALS['spip_lang_rtl'] ? 'right' : 'left';
67
-
68
-		return $GLOBALS['spip_lang'] = $lang;
69
-	} else {
70
-		return false;
71
-	}
42
+    if (is_null($liste_langues)) {
43
+        $liste_langues = @$GLOBALS['meta']['langues_proposees'] . ',' . @$GLOBALS['meta']['langues_multilingue'];
44
+    }
45
+    else {
46
+        if (is_array($liste_langues)) {
47
+            $liste_langues = implode(',', $liste_langues);
48
+        }
49
+    }
50
+    $liste_langues = ',' . $liste_langues . ',';
51
+
52
+    // Si la langue demandee n'existe pas, on essaie d'autres variantes
53
+    // Exemple : 'pt-br' => 'pt_br' => 'pt'
54
+    $lang = str_replace('-', '_', trim($lang));
55
+    if (!$lang) {
56
+        return false;
57
+    }
58
+
59
+    if (
60
+        strpos($liste_langues, (string) ",$lang,") !== false
61
+        or ($lang = preg_replace(',_.*,', '', $lang)
62
+            and strpos($liste_langues, (string) ",$lang,") !== false)
63
+    ) {
64
+        $GLOBALS['spip_lang_rtl'] = lang_dir($lang, '', '_rtl');
65
+        $GLOBALS['spip_lang_right'] = $GLOBALS['spip_lang_rtl'] ? 'left' : 'right';
66
+        $GLOBALS['spip_lang_left'] = $GLOBALS['spip_lang_rtl'] ? 'right' : 'left';
67
+
68
+        return $GLOBALS['spip_lang'] = $lang;
69
+    } else {
70
+        return false;
71
+    }
72 72
 }
73 73
 
74 74
 //
@@ -81,9 +81,9 @@  discard block
 block discarded – undo
81 81
 // par exemple le francais pour l'espagnol, l'anglais pour l'allemand, etc.
82 82
 
83 83
 function choisir_traduction($trads, $lang = '') {
84
-	$k = approcher_langue($trads, $lang);
84
+    $k = approcher_langue($trads, $lang);
85 85
 
86
-	return $k ? $trads[$k] : array_shift($trads);
86
+    return $k ? $trads[$k] : array_shift($trads);
87 87
 }
88 88
 
89 89
 // retourne son 2e argument si c'est un index du premier
@@ -91,21 +91,21 @@  discard block
 block discarded – undo
91 91
 // la langue X etant consideree comme une approche de X_Y
92 92
 function approcher_langue($trads, $lang = '') {
93 93
 
94
-	if (!$lang) {
95
-		$lang = $GLOBALS['spip_lang'];
96
-	}
97
-
98
-	if (isset($trads[$lang])) {
99
-		return $lang;
100
-	} // cas des langues xx_yy
101
-	else {
102
-		$r = explode('_', $lang);
103
-		if (isset($trads[$r[0]])) {
104
-			return $r[0];
105
-		}
106
-	}
107
-
108
-	return '';
94
+    if (!$lang) {
95
+        $lang = $GLOBALS['spip_lang'];
96
+    }
97
+
98
+    if (isset($trads[$lang])) {
99
+        return $lang;
100
+    } // cas des langues xx_yy
101
+    else {
102
+        $r = explode('_', $lang);
103
+        if (isset($trads[$r[0]])) {
104
+            return $r[0];
105
+        }
106
+    }
107
+
108
+    return '';
109 109
 }
110 110
 
111 111
 /**
@@ -120,10 +120,10 @@  discard block
 block discarded – undo
120 120
  *     Nom de la langue, sinon son code.
121 121
  **/
122 122
 function traduire_nom_langue($lang) {
123
-	include_spip('inc/lang_liste');
124
-	include_spip('inc/charsets');
123
+    include_spip('inc/lang_liste');
124
+    include_spip('inc/charsets');
125 125
 
126
-	return html2unicode($GLOBALS['codes_langues'][$lang] ?? $lang);
126
+    return html2unicode($GLOBALS['codes_langues'][$lang] ?? $lang);
127 127
 }
128 128
 
129 129
 //
@@ -136,10 +136,10 @@  discard block
 block discarded – undo
136 136
 // hebreu a priori), 'droitier' sinon.
137 137
 // C'est utilise par #LANG_DIR, #LANG_LEFT, #LANG_RIGHT.
138 138
 function lang_dir($lang = '', $droitier = 'ltr', $gaucher = 'rtl') {
139
-	static $lang_rtl = ['ar', 'fa', 'ku', 'prs', 'ps', 'ur', 'he', 'heb', 'hbo', 'yi'];
139
+    static $lang_rtl = ['ar', 'fa', 'ku', 'prs', 'ps', 'ur', 'he', 'heb', 'hbo', 'yi'];
140 140
 
141
-	return in_array(($lang ?: $GLOBALS['spip_lang']), $lang_rtl) ?
142
-		$gaucher : $droitier;
141
+    return in_array(($lang ?: $GLOBALS['spip_lang']), $lang_rtl) ?
142
+        $gaucher : $droitier;
143 143
 }
144 144
 
145 145
 // typo francaise ou anglaise ?
@@ -148,29 +148,29 @@  discard block
 block discarded – undo
148 148
 // sinon determiner la typo en fonction de la langue courante
149 149
 
150 150
 function lang_typo($lang = '') {
151
-	if (!$lang) {
152
-		$lang = $GLOBALS['lang_objet'] ?? $GLOBALS['spip_lang'];
153
-	}
154
-	if (
155
-		$lang == 'eo'
156
-		or $lang == 'fr'
157
-		or strncmp($lang, 'fr_', 3) == 0
158
-		or $lang == 'cpf'
159
-	) {
160
-		return 'fr';
161
-	} else {
162
-		return 'en';
163
-	}
151
+    if (!$lang) {
152
+        $lang = $GLOBALS['lang_objet'] ?? $GLOBALS['spip_lang'];
153
+    }
154
+    if (
155
+        $lang == 'eo'
156
+        or $lang == 'fr'
157
+        or strncmp($lang, 'fr_', 3) == 0
158
+        or $lang == 'cpf'
159
+    ) {
160
+        return 'fr';
161
+    } else {
162
+        return 'en';
163
+    }
164 164
 }
165 165
 
166 166
 // gestion de la globale $lang_objet pour que les textes soient affiches
167 167
 // avec les memes typo et direction dans l'espace prive que dans le public
168 168
 function changer_typo($lang = '') {
169
-	if ($lang) {
170
-		$GLOBALS['lang_objet'] = $lang;
171
-	} else {
172
-		unset($GLOBALS['lang_objet']);
173
-	}
169
+    if ($lang) {
170
+        $GLOBALS['lang_objet'] = $lang;
171
+    } else {
172
+        unset($GLOBALS['lang_objet']);
173
+    }
174 174
 }
175 175
 
176 176
 //
@@ -180,58 +180,58 @@  discard block
 block discarded – undo
180 180
 // pour 'changer_lang' (langue de l'article, espace prive), c'est en Ajax
181 181
 //
182 182
 function menu_langues($nom_select, $default = '') {
183
-	include_spip('inc/actions');
184
-
185
-	$langues = liste_options_langues($nom_select);
186
-	$ret = '';
187
-	if (!count($langues)) {
188
-		return '';
189
-	}
190
-
191
-	if (!$default) {
192
-		$default = $GLOBALS['spip_lang'];
193
-	}
194
-	foreach ($langues as $l) {
195
-		$selected = ($l == $default) ? ' selected=\'selected\'' : '';
196
-		$ret .= "<option value='$l'$selected>[" . $l . '] ' . traduire_nom_langue($l) . "</option>\n";
197
-	}
198
-
199
-	if (!test_espace_prive()) {
200
-		$cible = self();
201
-		$base = '';
202
-	} else {
203
-		$cible = self();
204
-		$base = spip_connect() ? 'base' : '';
205
-	}
206
-
207
-	$change = ' onchange="this.parentNode.parentNode.submit()"';
208
-
209
-	return generer_action_auteur(
210
-		'converser',
211
-		$base,
212
-		$cible,
213
-		(select_langues($nom_select, $change, $ret)
214
-			. "<noscript><div style='display:inline'><input type='submit' class='fondo' value='" . _T('bouton_changer') . "' /></div></noscript>"),
215
-		" method='post'"
216
-	);
183
+    include_spip('inc/actions');
184
+
185
+    $langues = liste_options_langues($nom_select);
186
+    $ret = '';
187
+    if (!count($langues)) {
188
+        return '';
189
+    }
190
+
191
+    if (!$default) {
192
+        $default = $GLOBALS['spip_lang'];
193
+    }
194
+    foreach ($langues as $l) {
195
+        $selected = ($l == $default) ? ' selected=\'selected\'' : '';
196
+        $ret .= "<option value='$l'$selected>[" . $l . '] ' . traduire_nom_langue($l) . "</option>\n";
197
+    }
198
+
199
+    if (!test_espace_prive()) {
200
+        $cible = self();
201
+        $base = '';
202
+    } else {
203
+        $cible = self();
204
+        $base = spip_connect() ? 'base' : '';
205
+    }
206
+
207
+    $change = ' onchange="this.parentNode.parentNode.submit()"';
208
+
209
+    return generer_action_auteur(
210
+        'converser',
211
+        $base,
212
+        $cible,
213
+        (select_langues($nom_select, $change, $ret)
214
+            . "<noscript><div style='display:inline'><input type='submit' class='fondo' value='" . _T('bouton_changer') . "' /></div></noscript>"),
215
+        " method='post'"
216
+    );
217 217
 }
218 218
 
219 219
 function select_langues($nom_select, $change, $options, $label = '') {
220
-	static $cpt = 0;
221
-	$id = 'menu_langues' . $cpt++;
222
-
223
-	return
224
-		"<label for='$id'>" . ($label ?: _T('info_langues')) . '</label> ' .
225
-		"<select name='$nom_select' id='$id' "
226
-		. ((!test_espace_prive()) ?
227
-			("class='forml menu_langues'") :
228
-			(($nom_select == 'var_lang_ecrire') ?
229
-				("class='lang_ecrire'") :
230
-				"class='fondl'"))
231
-		. $change
232
-		. ">\n"
233
-		. $options
234
-		. '</select>';
220
+    static $cpt = 0;
221
+    $id = 'menu_langues' . $cpt++;
222
+
223
+    return
224
+        "<label for='$id'>" . ($label ?: _T('info_langues')) . '</label> ' .
225
+        "<select name='$nom_select' id='$id' "
226
+        . ((!test_espace_prive()) ?
227
+            ("class='forml menu_langues'") :
228
+            (($nom_select == 'var_lang_ecrire') ?
229
+                ("class='lang_ecrire'") :
230
+                "class='fondl'"))
231
+        . $change
232
+        . ">\n"
233
+        . $options
234
+        . '</select>';
235 235
 }
236 236
 
237 237
 /**
@@ -253,34 +253,34 @@  discard block
 block discarded – undo
253 253
  */
254 254
 function liste_options_langues($nom_select) {
255 255
 
256
-	switch ($nom_select) {
257
-		# #MENU_LANG
258
-		case 'var_lang':
259
-			# menu de changement de la langue d'un article
260
-			# les langues selectionnees dans la configuration "multilinguisme"
261
-		case 'changer_lang':
262
-			$langues = explode(',', $GLOBALS['meta']['langues_multilingue']);
263
-			break;
264
-		# menu de l'interface (privee, installation et panneau de login)
265
-		# les langues presentes sous forme de fichiers de langue
266
-		# on force la relecture du repertoire des langues pour etre synchrone.
267
-		case 'var_lang_ecrire':
268
-		default:
269
-			$GLOBALS['meta']['langues_proposees'] = '';
270
-			init_langues();
271
-			$langues = explode(',', $GLOBALS['meta']['langues_proposees']);
272
-			break;
256
+    switch ($nom_select) {
257
+        # #MENU_LANG
258
+        case 'var_lang':
259
+            # menu de changement de la langue d'un article
260
+            # les langues selectionnees dans la configuration "multilinguisme"
261
+        case 'changer_lang':
262
+            $langues = explode(',', $GLOBALS['meta']['langues_multilingue']);
263
+            break;
264
+        # menu de l'interface (privee, installation et panneau de login)
265
+        # les langues presentes sous forme de fichiers de langue
266
+        # on force la relecture du repertoire des langues pour etre synchrone.
267
+        case 'var_lang_ecrire':
268
+        default:
269
+            $GLOBALS['meta']['langues_proposees'] = '';
270
+            init_langues();
271
+            $langues = explode(',', $GLOBALS['meta']['langues_proposees']);
272
+            break;
273 273
 
274 274
 # dernier choix possible : toutes les langues = langues_proposees
275 275
 # + langues_multilingues ; mais, ne sert pas
276 276
 #			$langues = explode(',', $GLOBALS['all_langs']);
277
-	}
278
-	if (count($langues) <= 1) {
279
-		return [];
280
-	}
281
-	sort($langues);
277
+    }
278
+    if (count($langues) <= 1) {
279
+        return [];
280
+    }
281
+    sort($langues);
282 282
 
283
-	return $langues;
283
+    return $langues;
284 284
 }
285 285
 
286 286
 
@@ -295,39 +295,39 @@  discard block
 block discarded – undo
295 295
  **/
296 296
 function verifier_lang_url() {
297 297
 
298
-	// quelle langue est demandee ?
299
-	$lang_demandee = (test_espace_prive() ? $GLOBALS['spip_lang'] : $GLOBALS['meta']['langue_site']);
300
-	if (isset($_COOKIE['spip_lang_ecrire'])) {
301
-		$lang_demandee = $_COOKIE['spip_lang_ecrire'];
302
-	}
303
-	if (!test_espace_prive() and isset($_COOKIE['spip_lang'])) {
304
-		$lang_demandee = $_COOKIE['spip_lang'];
305
-	}
306
-	if (isset($_GET['lang'])) {
307
-		$lang_demandee = $_GET['lang'];
308
-	}
309
-
310
-	// Renvoyer si besoin (et si la langue demandee existe)
311
-	if (
312
-		$GLOBALS['spip_lang'] != $lang_demandee
313
-		and changer_langue($lang_demandee)
314
-		and $lang_demandee != @$_GET['lang']
315
-	) {
316
-		$destination = parametre_url(self(), 'lang', $lang_demandee, '&');
317
-		// ici on a besoin des var_truc
318
-		foreach ($_GET as $var => $val) {
319
-			if (!strncmp('var_', $var, 4)) {
320
-				$destination = parametre_url($destination, $var, $val, '&');
321
-			}
322
-		}
323
-		include_spip('inc/headers');
324
-		redirige_par_entete($destination);
325
-	}
326
-
327
-	// Subtilite : si la langue demandee par cookie est la bonne
328
-	// alors on fait comme si $lang etait passee dans l'URL
329
-	// (pour criteres {lang}).
330
-	$GLOBALS['lang'] = $_GET['lang'] = $GLOBALS['spip_lang'];
298
+    // quelle langue est demandee ?
299
+    $lang_demandee = (test_espace_prive() ? $GLOBALS['spip_lang'] : $GLOBALS['meta']['langue_site']);
300
+    if (isset($_COOKIE['spip_lang_ecrire'])) {
301
+        $lang_demandee = $_COOKIE['spip_lang_ecrire'];
302
+    }
303
+    if (!test_espace_prive() and isset($_COOKIE['spip_lang'])) {
304
+        $lang_demandee = $_COOKIE['spip_lang'];
305
+    }
306
+    if (isset($_GET['lang'])) {
307
+        $lang_demandee = $_GET['lang'];
308
+    }
309
+
310
+    // Renvoyer si besoin (et si la langue demandee existe)
311
+    if (
312
+        $GLOBALS['spip_lang'] != $lang_demandee
313
+        and changer_langue($lang_demandee)
314
+        and $lang_demandee != @$_GET['lang']
315
+    ) {
316
+        $destination = parametre_url(self(), 'lang', $lang_demandee, '&');
317
+        // ici on a besoin des var_truc
318
+        foreach ($_GET as $var => $val) {
319
+            if (!strncmp('var_', $var, 4)) {
320
+                $destination = parametre_url($destination, $var, $val, '&');
321
+            }
322
+        }
323
+        include_spip('inc/headers');
324
+        redirige_par_entete($destination);
325
+    }
326
+
327
+    // Subtilite : si la langue demandee par cookie est la bonne
328
+    // alors on fait comme si $lang etait passee dans l'URL
329
+    // (pour criteres {lang}).
330
+    $GLOBALS['lang'] = $_GET['lang'] = $GLOBALS['spip_lang'];
331 331
 }
332 332
 
333 333
 
@@ -345,22 +345,22 @@  discard block
 block discarded – undo
345 345
  *     La langue sélectionnée
346 346
  **/
347 347
 function utiliser_langue_site($liste_langues = null) {
348
-	// s'il existe une langue du site (en gros tout le temps en théorie)
349
-	if (
350
-		isset($GLOBALS['meta']['langue_site'])
351
-		// et si spip_langue est pas encore définie (ce que va faire changer_langue())
352
-		// ou qu'elle n'est pas identique à la langue du site
353
-		and (!isset($GLOBALS['spip_lang'])
354
-			or $GLOBALS['spip_lang'] != $GLOBALS['meta']['langue_site'])
355
-	) {
356
-		return changer_langue($GLOBALS['meta']['langue_site'], $liste_langues);//@:install
357
-	}
358
-	// en theorie là, la globale est définie, sinon c'est un problème.
359
-	if (!isset($GLOBALS['spip_lang'])) {
360
-		spip_log('La globale spip_lang est indéfinie dans utiliser_langue_site() !', _LOG_ERREUR);
361
-	}
362
-
363
-	return $GLOBALS['spip_lang'];
348
+    // s'il existe une langue du site (en gros tout le temps en théorie)
349
+    if (
350
+        isset($GLOBALS['meta']['langue_site'])
351
+        // et si spip_langue est pas encore définie (ce que va faire changer_langue())
352
+        // ou qu'elle n'est pas identique à la langue du site
353
+        and (!isset($GLOBALS['spip_lang'])
354
+            or $GLOBALS['spip_lang'] != $GLOBALS['meta']['langue_site'])
355
+    ) {
356
+        return changer_langue($GLOBALS['meta']['langue_site'], $liste_langues);//@:install
357
+    }
358
+    // en theorie là, la globale est définie, sinon c'est un problème.
359
+    if (!isset($GLOBALS['spip_lang'])) {
360
+        spip_log('La globale spip_lang est indéfinie dans utiliser_langue_site() !', _LOG_ERREUR);
361
+    }
362
+
363
+    return $GLOBALS['spip_lang'];
364 364
 }
365 365
 
366 366
 /**
@@ -379,30 +379,30 @@  discard block
 block discarded – undo
379 379
  **/
380 380
 function utiliser_langue_visiteur($liste_langues = null) {
381 381
 
382
-	$l = (!test_espace_prive() ? 'spip_lang' : 'spip_lang_ecrire');
383
-	if (isset($_COOKIE[$l])) {
384
-		if (changer_langue($l = $_COOKIE[$l], $liste_langues)) {
385
-			return $l;
386
-		}
387
-	}
388
-
389
-	if (isset($GLOBALS['visiteur_session']['lang'])) {
390
-		if (changer_langue($l = $GLOBALS['visiteur_session']['lang'], $liste_langues)) {
391
-			return $l;
392
-		}
393
-	}
394
-
395
-	if (isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) {
396
-		foreach (explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']) as $s) {
397
-			if (preg_match('#^([a-z]{2,3})(-[a-z]{2,3})?(;q=[0-9.]+)?$#i', trim($s), $r)) {
398
-				if (changer_langue($l = strtolower($r[1]), $liste_langues)) {
399
-					return $l;
400
-				}
401
-			}
402
-		}
403
-	}
404
-
405
-	return utiliser_langue_site($liste_langues);
382
+    $l = (!test_espace_prive() ? 'spip_lang' : 'spip_lang_ecrire');
383
+    if (isset($_COOKIE[$l])) {
384
+        if (changer_langue($l = $_COOKIE[$l], $liste_langues)) {
385
+            return $l;
386
+        }
387
+    }
388
+
389
+    if (isset($GLOBALS['visiteur_session']['lang'])) {
390
+        if (changer_langue($l = $GLOBALS['visiteur_session']['lang'], $liste_langues)) {
391
+            return $l;
392
+        }
393
+    }
394
+
395
+    if (isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) {
396
+        foreach (explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']) as $s) {
397
+            if (preg_match('#^([a-z]{2,3})(-[a-z]{2,3})?(;q=[0-9.]+)?$#i', trim($s), $r)) {
398
+                if (changer_langue($l = strtolower($r[1]), $liste_langues)) {
399
+                    return $l;
400
+                }
401
+            }
402
+        }
403
+    }
404
+
405
+    return utiliser_langue_site($liste_langues);
406 406
 }
407 407
 
408 408
 
@@ -412,7 +412,7 @@  discard block
 block discarded – undo
412 412
  * @return int
413 413
  */
414 414
 function match_langue($chaine) {
415
-	return preg_match('/^[a-z]{2,3}(_[a-z]{2,3}){0,2}$/', $chaine);
415
+    return preg_match('/^[a-z]{2,3}(_[a-z]{2,3}){0,2}$/', $chaine);
416 416
 }
417 417
 
418 418
 /**
@@ -430,36 +430,36 @@  discard block
 block discarded – undo
430 430
  **/
431 431
 function init_langues() {
432 432
 
433
-	// liste des langues dans les meta, sauf a l'install
434
-	$all_langs = @$GLOBALS['meta']['langues_proposees'];
435
-
436
-	$tout = [];
437
-	if (!$all_langs) {
438
-		// trouver tous les modules lang/spip_xx.php
439
-		$modules = find_all_in_path('lang/', '/spip_([a-z_]+)\.php$');
440
-		foreach ($modules as $name => $path) {
441
-			if (preg_match(',^spip_([a-z_]+)\.php$,', $name, $regs)) {
442
-				if (match_langue($regs[1])) {
443
-					$tout[] = $regs[1];
444
-				}
445
-			}
446
-		}
447
-		sort($tout);
448
-		$tout = join(',', $tout);
449
-		// Si les langues n'ont pas change, ne rien faire
450
-		if ($tout != $all_langs) {
451
-			$GLOBALS['meta']['langues_proposees'] = $tout;
452
-			include_spip('inc/meta');
453
-			ecrire_meta('langues_proposees', $tout);
454
-		}
455
-	}
456
-	if (!isset($GLOBALS['meta']['langue_site'])) {
457
-		// Initialisation : le francais si dispo, sinon la premiere langue trouvee
458
-		$GLOBALS['meta']['langue_site'] = $tout =
459
-			(!$all_langs or (strpos(',' . _LANGUE_PAR_DEFAUT . ',', (string) ",$all_langs,") !== false))
460
-				? _LANGUE_PAR_DEFAUT : substr($all_langs, 0, strpos($all_langs, ','));
461
-		ecrire_meta('langue_site', $tout);
462
-	}
433
+    // liste des langues dans les meta, sauf a l'install
434
+    $all_langs = @$GLOBALS['meta']['langues_proposees'];
435
+
436
+    $tout = [];
437
+    if (!$all_langs) {
438
+        // trouver tous les modules lang/spip_xx.php
439
+        $modules = find_all_in_path('lang/', '/spip_([a-z_]+)\.php$');
440
+        foreach ($modules as $name => $path) {
441
+            if (preg_match(',^spip_([a-z_]+)\.php$,', $name, $regs)) {
442
+                if (match_langue($regs[1])) {
443
+                    $tout[] = $regs[1];
444
+                }
445
+            }
446
+        }
447
+        sort($tout);
448
+        $tout = join(',', $tout);
449
+        // Si les langues n'ont pas change, ne rien faire
450
+        if ($tout != $all_langs) {
451
+            $GLOBALS['meta']['langues_proposees'] = $tout;
452
+            include_spip('inc/meta');
453
+            ecrire_meta('langues_proposees', $tout);
454
+        }
455
+    }
456
+    if (!isset($GLOBALS['meta']['langue_site'])) {
457
+        // Initialisation : le francais si dispo, sinon la premiere langue trouvee
458
+        $GLOBALS['meta']['langue_site'] = $tout =
459
+            (!$all_langs or (strpos(',' . _LANGUE_PAR_DEFAUT . ',', (string) ",$all_langs,") !== false))
460
+                ? _LANGUE_PAR_DEFAUT : substr($all_langs, 0, strpos($all_langs, ','));
461
+        ecrire_meta('langue_site', $tout);
462
+    }
463 463
 }
464 464
 
465 465
 /**
@@ -473,10 +473,10 @@  discard block
 block discarded – undo
473 473
  *     Code html de la balise <html>
474 474
  **/
475 475
 function html_lang_attributes() {
476
-	$lang = $GLOBALS['spip_lang'];
477
-	$dir = ($GLOBALS['spip_lang_rtl'] ? 'rtl' : 'ltr');
476
+    $lang = $GLOBALS['spip_lang'];
477
+    $dir = ($GLOBALS['spip_lang_rtl'] ? 'rtl' : 'ltr');
478 478
 
479
-	return "<html class='$dir $lang no-js' xmlns='http://www.w3.org/1999/xhtml' lang='$lang' dir='$dir'>\n";
479
+    return "<html class='$dir $lang no-js' xmlns='http://www.w3.org/1999/xhtml' lang='$lang' dir='$dir'>\n";
480 480
 }
481 481
 
482 482
 
@@ -490,7 +490,7 @@  discard block
 block discarded – undo
490 490
  * @return string
491 491
  */
492 492
 function aide_lang_dir($spip_lang, $spip_lang_rtl) {
493
-	return ($spip_lang <> 'he') ? $spip_lang_rtl : '';
493
+    return ($spip_lang <> 'he') ? $spip_lang_rtl : '';
494 494
 }
495 495
 
496 496
 
Please login to merge, or discard this patch.
ecrire/inc/xml.php 1 patch
Indentation   +157 added lines, -157 removed lines patch added patch discarded remove patch
@@ -17,7 +17,7 @@  discard block
 block discarded – undo
17 17
  **/
18 18
 
19 19
 if (!defined('_ECRIRE_INC_VERSION')) {
20
-	return;
20
+    return;
21 21
 }
22 22
 
23 23
 
@@ -47,24 +47,24 @@  discard block
 block discarded – undo
47 47
  *     - false si l'arbre xml ne peut être créé ou est vide
48 48
  **/
49 49
 function spip_xml_load($fichier, $strict = true, $clean = true, $taille_max = 1_048_576, $datas = '', $profondeur = -1) {
50
-	$contenu = '';
51
-	if (tester_url_absolue($fichier)) {
52
-		include_spip('inc/distant');
53
-		$contenu = recuperer_url($fichier, ['taille_max' => $taille_max, 'datas' => $datas]);
54
-		$contenu = $contenu['page'] ?? '';
55
-	} else {
56
-		lire_fichier($fichier, $contenu);
57
-	}
58
-	$arbre = [];
59
-	if ($contenu) {
60
-		$arbre = spip_xml_parse($contenu, $strict, $clean, $profondeur);
61
-	}
50
+    $contenu = '';
51
+    if (tester_url_absolue($fichier)) {
52
+        include_spip('inc/distant');
53
+        $contenu = recuperer_url($fichier, ['taille_max' => $taille_max, 'datas' => $datas]);
54
+        $contenu = $contenu['page'] ?? '';
55
+    } else {
56
+        lire_fichier($fichier, $contenu);
57
+    }
58
+    $arbre = [];
59
+    if ($contenu) {
60
+        $arbre = spip_xml_parse($contenu, $strict, $clean, $profondeur);
61
+    }
62 62
 
63
-	return count($arbre) ? $arbre : false;
63
+    return count($arbre) ? $arbre : false;
64 64
 }
65 65
 
66 66
 if (!defined('_SPIP_XML_TAG_SPLIT')) {
67
-	define('_SPIP_XML_TAG_SPLIT', '{<([^:>][^>]*?)>}sS');
67
+    define('_SPIP_XML_TAG_SPLIT', '{<([^:>][^>]*?)>}sS');
68 68
 }
69 69
 
70 70
 /**
@@ -83,150 +83,150 @@  discard block
 block discarded – undo
83 83
  *     - false si l'arbre xml ne peut être créé ou est vide
84 84
  **/
85 85
 function spip_xml_parse(&$texte, $strict = true, $clean = true, $profondeur = -1) {
86
-	$out = [];
87
-	// enlever les commentaires
88
-	$charset = 'AUTO';
89
-	if ($clean === true) {
90
-		if (preg_match(",<\?xml\s(.*?)encoding=['\"]?(.*?)['\"]?(\s(.*))?\?>,im", $texte, $regs)) {
91
-			$charset = $regs[2];
92
-		}
93
-		$texte = preg_replace(',<!--(.*?)-->,is', '', $texte);
94
-		$texte = preg_replace(',<\?(.*?)\?>,is', '', $texte);
95
-		include_spip('inc/charsets');
96
-		$clean = $charset;
97
-		//$texte = importer_charset($texte,$charset);
98
-	}
99
-	if (is_string($clean)) {
100
-		$charset = $clean;
101
-	}
102
-	$txt = $texte;
86
+    $out = [];
87
+    // enlever les commentaires
88
+    $charset = 'AUTO';
89
+    if ($clean === true) {
90
+        if (preg_match(",<\?xml\s(.*?)encoding=['\"]?(.*?)['\"]?(\s(.*))?\?>,im", $texte, $regs)) {
91
+            $charset = $regs[2];
92
+        }
93
+        $texte = preg_replace(',<!--(.*?)-->,is', '', $texte);
94
+        $texte = preg_replace(',<\?(.*?)\?>,is', '', $texte);
95
+        include_spip('inc/charsets');
96
+        $clean = $charset;
97
+        //$texte = importer_charset($texte,$charset);
98
+    }
99
+    if (is_string($clean)) {
100
+        $charset = $clean;
101
+    }
102
+    $txt = $texte;
103 103
 
104
-	// tant qu'il y a des tags
105
-	$chars = preg_split(_SPIP_XML_TAG_SPLIT, $txt, 2, PREG_SPLIT_DELIM_CAPTURE);
106
-	while ((is_countable($chars) ? count($chars) : 0) >= 2) {
107
-		// tag ouvrant
108
-		//$chars = preg_split("{<([^>]*?)>}s",$txt,2,PREG_SPLIT_DELIM_CAPTURE);
104
+    // tant qu'il y a des tags
105
+    $chars = preg_split(_SPIP_XML_TAG_SPLIT, $txt, 2, PREG_SPLIT_DELIM_CAPTURE);
106
+    while ((is_countable($chars) ? count($chars) : 0) >= 2) {
107
+        // tag ouvrant
108
+        //$chars = preg_split("{<([^>]*?)>}s",$txt,2,PREG_SPLIT_DELIM_CAPTURE);
109 109
 
110
-		// $before doit etre vide ou des espaces uniquements!
111
-		$before = trim($chars[0]);
110
+        // $before doit etre vide ou des espaces uniquements!
111
+        $before = trim($chars[0]);
112 112
 
113
-		if (strlen($before) > 0) {
114
-			return importer_charset($texte, $charset);
115
-		}//$texte; // before non vide, donc on est dans du texte
113
+        if (strlen($before) > 0) {
114
+            return importer_charset($texte, $charset);
115
+        }//$texte; // before non vide, donc on est dans du texte
116 116
 
117
-		$tag = rtrim($chars[1]);
118
-		$txt = $chars[2];
117
+        $tag = rtrim($chars[1]);
118
+        $txt = $chars[2];
119 119
 
120
-		if (strncmp($tag, '![CDATA[', 8) == 0) {
121
-			return importer_charset($texte, $charset);
122
-		}//$texte;
123
-		if (substr($tag, -1) == '/') { // self closing tag
124
-			$tag = rtrim(substr($tag, 0, strlen($tag) - 1));
125
-			$out[$tag][] = '';
126
-		} else {
127
-			$closing_tag = preg_split(",\s|\t|\n|\r,", trim($tag));
128
-			$closing_tag = reset($closing_tag);
129
-			// tag fermant
130
-			$ncclos = strlen("</$closing_tag>");
131
-			$p = strpos($txt, (string) "</$closing_tag>");
132
-			if ($p !== false and (strpos($txt, '<') < $p)) {
133
-				$nclose = 0;
134
-				$nopen = 0;
135
-				$d = 0;
136
-				while (
137
-					$p !== false
138
-					and ($morceau = substr($txt, $d, $p - $d))
139
-					and (($nopen += preg_match_all(
140
-						'{<' . preg_quote($closing_tag) . '(\s*>|\s[^>]*[^/>]>)}is',
141
-						$morceau,
142
-						$matches,
143
-						PREG_SET_ORDER
144
-					)) > $nclose)
145
-				) {
146
-					$nclose++;
147
-					$d = $p + $ncclos;
148
-					$p = strpos($txt, (string) "</$closing_tag>", $d);
149
-				}
150
-			}
151
-			if ($p === false) {
152
-				if ($strict) {
153
-					$out[$tag][] = "erreur : tag fermant $tag manquant::$txt";
120
+        if (strncmp($tag, '![CDATA[', 8) == 0) {
121
+            return importer_charset($texte, $charset);
122
+        }//$texte;
123
+        if (substr($tag, -1) == '/') { // self closing tag
124
+            $tag = rtrim(substr($tag, 0, strlen($tag) - 1));
125
+            $out[$tag][] = '';
126
+        } else {
127
+            $closing_tag = preg_split(",\s|\t|\n|\r,", trim($tag));
128
+            $closing_tag = reset($closing_tag);
129
+            // tag fermant
130
+            $ncclos = strlen("</$closing_tag>");
131
+            $p = strpos($txt, (string) "</$closing_tag>");
132
+            if ($p !== false and (strpos($txt, '<') < $p)) {
133
+                $nclose = 0;
134
+                $nopen = 0;
135
+                $d = 0;
136
+                while (
137
+                    $p !== false
138
+                    and ($morceau = substr($txt, $d, $p - $d))
139
+                    and (($nopen += preg_match_all(
140
+                        '{<' . preg_quote($closing_tag) . '(\s*>|\s[^>]*[^/>]>)}is',
141
+                        $morceau,
142
+                        $matches,
143
+                        PREG_SET_ORDER
144
+                    )) > $nclose)
145
+                ) {
146
+                    $nclose++;
147
+                    $d = $p + $ncclos;
148
+                    $p = strpos($txt, (string) "</$closing_tag>", $d);
149
+                }
150
+            }
151
+            if ($p === false) {
152
+                if ($strict) {
153
+                    $out[$tag][] = "erreur : tag fermant $tag manquant::$txt";
154 154
 
155
-					return $out;
156
-				} else {
157
-					return importer_charset($texte, $charset);
158
-				}//$texte // un tag qui constitue du texte a reporter dans $before
159
-			}
160
-			$content = substr($txt, 0, $p);
161
-			$txt = substr($txt, $p + $ncclos);
162
-			if ($profondeur == 0 or strpos($content, '<') === false) { // eviter une recursion si pas utile
163
-			$out[$tag][] = importer_charset($content, $charset);
164
-			}//$content;
165
-			else {
166
-				$out[$tag][] = spip_xml_parse($content, $strict, $clean, $profondeur - 1);
167
-			}
168
-		}
169
-		$chars = preg_split(_SPIP_XML_TAG_SPLIT, $txt, 2, PREG_SPLIT_DELIM_CAPTURE);
170
-	}
171
-	if (count($out) && (strlen(trim($txt)) == 0)) {
172
-		return $out;
173
-	} else {
174
-		return importer_charset($texte, $charset);
175
-	}//$texte;
155
+                    return $out;
156
+                } else {
157
+                    return importer_charset($texte, $charset);
158
+                }//$texte // un tag qui constitue du texte a reporter dans $before
159
+            }
160
+            $content = substr($txt, 0, $p);
161
+            $txt = substr($txt, $p + $ncclos);
162
+            if ($profondeur == 0 or strpos($content, '<') === false) { // eviter une recursion si pas utile
163
+            $out[$tag][] = importer_charset($content, $charset);
164
+            }//$content;
165
+            else {
166
+                $out[$tag][] = spip_xml_parse($content, $strict, $clean, $profondeur - 1);
167
+            }
168
+        }
169
+        $chars = preg_split(_SPIP_XML_TAG_SPLIT, $txt, 2, PREG_SPLIT_DELIM_CAPTURE);
170
+    }
171
+    if (count($out) && (strlen(trim($txt)) == 0)) {
172
+        return $out;
173
+    } else {
174
+        return importer_charset($texte, $charset);
175
+    }//$texte;
176 176
 }
177 177
 
178 178
 function spip_xml_aplatit($arbre, $separateur = ' ') {
179
-	$s = '';
180
-	if (is_array($arbre)) {
181
-		foreach ($arbre as $tag => $feuille) {
182
-			if (is_array($feuille)) {
183
-				if ($tag !== intval($tag)) {
184
-					$f = spip_xml_aplatit($feuille, $separateur);
185
-					if (strlen($f)) {
186
-						$tagf = explode(' ', $tag);
187
-						$tagf = $tagf[0];
188
-						$s .= "<$tag>$f</$tagf>";
189
-					} else {
190
-						$s .= "<$tag />";
191
-					}
192
-				} else {
193
-					$s .= spip_xml_aplatit($feuille);
194
-				}
195
-				$s .= $separateur;
196
-			} else {
197
-				$s .= "$feuille$separateur";
198
-			}
199
-		}
200
-	}
179
+    $s = '';
180
+    if (is_array($arbre)) {
181
+        foreach ($arbre as $tag => $feuille) {
182
+            if (is_array($feuille)) {
183
+                if ($tag !== intval($tag)) {
184
+                    $f = spip_xml_aplatit($feuille, $separateur);
185
+                    if (strlen($f)) {
186
+                        $tagf = explode(' ', $tag);
187
+                        $tagf = $tagf[0];
188
+                        $s .= "<$tag>$f</$tagf>";
189
+                    } else {
190
+                        $s .= "<$tag />";
191
+                    }
192
+                } else {
193
+                    $s .= spip_xml_aplatit($feuille);
194
+                }
195
+                $s .= $separateur;
196
+            } else {
197
+                $s .= "$feuille$separateur";
198
+            }
199
+        }
200
+    }
201 201
 
202
-	return strlen($separateur) ? substr($s, 0, -strlen($separateur)) : $s;
202
+    return strlen($separateur) ? substr($s, 0, -strlen($separateur)) : $s;
203 203
 }
204 204
 
205 205
 function spip_xml_tagname($tag) {
206
-	if (preg_match(',^([a-z][\w:]*),i', $tag, $reg)) {
207
-		return $reg[1];
208
-	}
206
+    if (preg_match(',^([a-z][\w:]*),i', $tag, $reg)) {
207
+        return $reg[1];
208
+    }
209 209
 
210
-	return '';
210
+    return '';
211 211
 }
212 212
 
213 213
 function spip_xml_decompose_tag($tag) {
214
-	$tagname = spip_xml_tagname($tag);
215
-	$liste = [];
216
-	$tag = ltrim(strpbrk($tag, " \n\t"));
217
-	$p = strpos($tag, '=');
218
-	while ($p !== false) {
219
-		$attr = trim(substr($tag, 0, $p));
220
-		$tag = ltrim(substr($tag, $p + 1));
221
-		$quote = $tag[0];
222
-		$p = strpos($tag, $quote, 1);
223
-		$cont = substr($tag, 1, $p - 1);
224
-		$liste[$attr] = $cont;
225
-		$tag = substr($tag, $p + 1);
226
-		$p = strpos($tag, '=');
227
-	}
214
+    $tagname = spip_xml_tagname($tag);
215
+    $liste = [];
216
+    $tag = ltrim(strpbrk($tag, " \n\t"));
217
+    $p = strpos($tag, '=');
218
+    while ($p !== false) {
219
+        $attr = trim(substr($tag, 0, $p));
220
+        $tag = ltrim(substr($tag, $p + 1));
221
+        $quote = $tag[0];
222
+        $p = strpos($tag, $quote, 1);
223
+        $cont = substr($tag, 1, $p - 1);
224
+        $liste[$attr] = $cont;
225
+        $tag = substr($tag, $p + 1);
226
+        $p = strpos($tag, '=');
227
+    }
228 228
 
229
-	return [$tagname, $liste];
229
+    return [$tagname, $liste];
230 230
 }
231 231
 
232 232
 /**
@@ -249,21 +249,21 @@  discard block
 block discarded – undo
249 249
  *     false si aucun élément ne valide l'expression régulière, true sinon.
250 250
  **/
251 251
 function spip_xml_match_nodes($regexp, &$arbre, &$matches, $init = true) {
252
-	if ($init) {
253
-		$matches = [];
254
-	}
255
-	if (is_array($arbre) && count($arbre)) {
256
-		foreach (array_keys($arbre) as $tag) {
257
-			if (preg_match($regexp, $tag)) {
258
-				$matches[$tag] = &$arbre[$tag];
259
-			}
260
-			if (is_array($arbre[$tag])) {
261
-				foreach (array_keys($arbre[$tag]) as $occurences) {
262
-					spip_xml_match_nodes($regexp, $arbre[$tag][$occurences], $matches, false);
263
-				}
264
-			}
265
-		}
266
-	}
252
+    if ($init) {
253
+        $matches = [];
254
+    }
255
+    if (is_array($arbre) && count($arbre)) {
256
+        foreach (array_keys($arbre) as $tag) {
257
+            if (preg_match($regexp, $tag)) {
258
+                $matches[$tag] = &$arbre[$tag];
259
+            }
260
+            if (is_array($arbre[$tag])) {
261
+                foreach (array_keys($arbre[$tag]) as $occurences) {
262
+                    spip_xml_match_nodes($regexp, $arbre[$tag][$occurences], $matches, false);
263
+                }
264
+            }
265
+        }
266
+    }
267 267
 
268
-	return (is_countable($matches) ? count($matches) : 0);
268
+    return (is_countable($matches) ? count($matches) : 0);
269 269
 }
Please login to merge, or discard this patch.
ecrire/inc/invalideur.php 1 patch
Indentation   +138 added lines, -138 removed lines patch added patch discarded remove patch
@@ -17,7 +17,7 @@  discard block
 block discarded – undo
17 17
  **/
18 18
 
19 19
 if (!defined('_ECRIRE_INC_VERSION')) {
20
-	return;
20
+    return;
21 21
 }
22 22
 
23 23
 include_spip('base/serial');
@@ -27,7 +27,7 @@  discard block
 block discarded – undo
27 27
  * en droit de l'éliminer
28 28
  */
29 29
 if (!defined('_AGE_CACHE_ATIME')) {
30
-	define('_AGE_CACHE_ATIME', 3600);
30
+    define('_AGE_CACHE_ATIME', 3600);
31 31
 }
32 32
 
33 33
 
@@ -40,31 +40,31 @@  discard block
 block discarded – undo
40 40
  * @return int Taille approximative en octets
41 41
  **/
42 42
 function taille_du_cache() {
43
-	# check dirs until we reach > 500 files
44
-	$t = 0;
45
-	$n = 0;
46
-	$time = $GLOBALS['meta']['cache_mark'] ?? 0;
47
-	for ($i = 0; $i < 256; $i++) {
48
-		$dir = _DIR_CACHE . sprintf('%02s', dechex($i));
49
-		if (@is_dir($dir) and is_readable($dir) and $d = opendir($dir)) {
50
-			while (($f = readdir($d)) !== false) {
51
-				if (preg_match(',^[[0-9a-f]+\.cache$,S', $f) and $a = stat("$dir/$f")) {
52
-					$n++;
53
-					if ($a['mtime'] >= $time) {
54
-						if ($a['blocks'] > 0) {
55
-							$t += 512 * $a['blocks'];
56
-						} else {
57
-							$t += $a['size'];
58
-						}
59
-					}
60
-				}
61
-			}
62
-		}
63
-		if ($n > 500) {
64
-			return intval(256 * $t / (1 + $i));
65
-		}
66
-	}
67
-	return $t;
43
+    # check dirs until we reach > 500 files
44
+    $t = 0;
45
+    $n = 0;
46
+    $time = $GLOBALS['meta']['cache_mark'] ?? 0;
47
+    for ($i = 0; $i < 256; $i++) {
48
+        $dir = _DIR_CACHE . sprintf('%02s', dechex($i));
49
+        if (@is_dir($dir) and is_readable($dir) and $d = opendir($dir)) {
50
+            while (($f = readdir($d)) !== false) {
51
+                if (preg_match(',^[[0-9a-f]+\.cache$,S', $f) and $a = stat("$dir/$f")) {
52
+                    $n++;
53
+                    if ($a['mtime'] >= $time) {
54
+                        if ($a['blocks'] > 0) {
55
+                            $t += 512 * $a['blocks'];
56
+                        } else {
57
+                            $t += $a['size'];
58
+                        }
59
+                    }
60
+                }
61
+            }
62
+        }
63
+        if ($n > 500) {
64
+            return intval(256 * $t / (1 + $i));
65
+        }
66
+    }
67
+    return $t;
68 68
 }
69 69
 
70 70
 
@@ -91,30 +91,30 @@  discard block
 block discarded – undo
91 91
  *     Inutilisé
92 92
  **/
93 93
 function inc_suivre_invalideur_dist($cond, $modif = true) {
94
-	if (!$modif) {
95
-		return;
96
-	}
97
-
98
-	// determiner l'objet modifie : forum, article, etc
99
-	if (preg_match(',["\']([a-z_]+)[/"\'],', $cond, $r)) {
100
-		$objet = objet_type($r[1]);
101
-	}
102
-
103
-	// stocker la date_modif_$objet (ne sert a rien pour le moment)
104
-	if (isset($objet)) {
105
-		ecrire_meta('derniere_modif_' . $objet, time());
106
-	}
107
-
108
-	// si $derniere_modif_invalide est un array('article', 'rubrique')
109
-	// n'affecter la meta que si un de ces objets est modifie
110
-	if (is_array($GLOBALS['derniere_modif_invalide'])) {
111
-		if (in_array($objet, $GLOBALS['derniere_modif_invalide'])) {
112
-			ecrire_meta('derniere_modif', time());
113
-		}
114
-	} // sinon, cas standard, toujours affecter la meta
115
-	else {
116
-		ecrire_meta('derniere_modif', time());
117
-	}
94
+    if (!$modif) {
95
+        return;
96
+    }
97
+
98
+    // determiner l'objet modifie : forum, article, etc
99
+    if (preg_match(',["\']([a-z_]+)[/"\'],', $cond, $r)) {
100
+        $objet = objet_type($r[1]);
101
+    }
102
+
103
+    // stocker la date_modif_$objet (ne sert a rien pour le moment)
104
+    if (isset($objet)) {
105
+        ecrire_meta('derniere_modif_' . $objet, time());
106
+    }
107
+
108
+    // si $derniere_modif_invalide est un array('article', 'rubrique')
109
+    // n'affecter la meta que si un de ces objets est modifie
110
+    if (is_array($GLOBALS['derniere_modif_invalide'])) {
111
+        if (in_array($objet, $GLOBALS['derniere_modif_invalide'])) {
112
+            ecrire_meta('derniere_modif', time());
113
+        }
114
+    } // sinon, cas standard, toujours affecter la meta
115
+    else {
116
+        ecrire_meta('derniere_modif', time());
117
+    }
118 118
 }
119 119
 
120 120
 
@@ -139,57 +139,57 @@  discard block
 block discarded – undo
139 139
  *     Nombre de fichiers supprimés
140 140
  **/
141 141
 function purger_repertoire($dir, $options = []) {
142
-	if (!is_dir($dir) or !is_readable($dir)) {
143
-		return 0;
144
-	}
145
-
146
-	// sur certains sites on veut absolument garder certains caches référencés dans un CDN
147
-	// on peut donc inhiber la purge de ces répertoires pour eviter tout probleme
148
-	if (file_exists(rtrim($dir, '/') . '/inhib_purger_repertoire.txt')) {
149
-		return 0;
150
-	}
151
-
152
-	$handle = opendir($dir);
153
-	if (!$handle) {
154
-		return 0;
155
-	}
156
-
157
-	$total = 0;
158
-
159
-	while (($fichier = @readdir($handle)) !== false) {
160
-		// Eviter ".", "..", ".htaccess", ".svn" etc & CACHEDIR.TAG
161
-		if ($fichier[0] == '.' or $fichier == 'CACHEDIR.TAG') {
162
-			continue;
163
-		}
164
-		$chemin = "$dir/$fichier";
165
-		if (is_file($chemin)) {
166
-			if (
167
-				(!isset($options['atime']) or (@fileatime($chemin) < $options['atime']))
168
-				and (!isset($options['mtime']) or (@filemtime($chemin) < $options['mtime']))
169
-			) {
170
-				supprimer_fichier($chemin);
171
-				$total++;
172
-			}
173
-		} else {
174
-			if (is_dir($chemin)) {
175
-				$opts = $options;
176
-				if (isset($options['limit'])) {
177
-					$opts['limit'] = $options['limit'] - $total;
178
-				}
179
-				$total += purger_repertoire($chemin, $opts);
180
-				if (isset($options['subdir']) && $options['subdir']) {
181
-					spip_unlink($chemin);
182
-				}
183
-			}
184
-		}
185
-
186
-		if (isset($options['limit']) and $total >= $options['limit']) {
187
-			break;
188
-		}
189
-	}
190
-	closedir($handle);
191
-
192
-	return $total;
142
+    if (!is_dir($dir) or !is_readable($dir)) {
143
+        return 0;
144
+    }
145
+
146
+    // sur certains sites on veut absolument garder certains caches référencés dans un CDN
147
+    // on peut donc inhiber la purge de ces répertoires pour eviter tout probleme
148
+    if (file_exists(rtrim($dir, '/') . '/inhib_purger_repertoire.txt')) {
149
+        return 0;
150
+    }
151
+
152
+    $handle = opendir($dir);
153
+    if (!$handle) {
154
+        return 0;
155
+    }
156
+
157
+    $total = 0;
158
+
159
+    while (($fichier = @readdir($handle)) !== false) {
160
+        // Eviter ".", "..", ".htaccess", ".svn" etc & CACHEDIR.TAG
161
+        if ($fichier[0] == '.' or $fichier == 'CACHEDIR.TAG') {
162
+            continue;
163
+        }
164
+        $chemin = "$dir/$fichier";
165
+        if (is_file($chemin)) {
166
+            if (
167
+                (!isset($options['atime']) or (@fileatime($chemin) < $options['atime']))
168
+                and (!isset($options['mtime']) or (@filemtime($chemin) < $options['mtime']))
169
+            ) {
170
+                supprimer_fichier($chemin);
171
+                $total++;
172
+            }
173
+        } else {
174
+            if (is_dir($chemin)) {
175
+                $opts = $options;
176
+                if (isset($options['limit'])) {
177
+                    $opts['limit'] = $options['limit'] - $total;
178
+                }
179
+                $total += purger_repertoire($chemin, $opts);
180
+                if (isset($options['subdir']) && $options['subdir']) {
181
+                    spip_unlink($chemin);
182
+                }
183
+            }
184
+        }
185
+
186
+        if (isset($options['limit']) and $total >= $options['limit']) {
187
+            break;
188
+        }
189
+    }
190
+    closedir($handle);
191
+
192
+    return $total;
193 193
 }
194 194
 
195 195
 
@@ -200,26 +200,26 @@  discard block
 block discarded – undo
200 200
 // Securite : est sur que c'est un cache
201 201
 function retire_cache($cache) {
202 202
 
203
-	if (
204
-		preg_match(
205
-			',^([0-9a-f]/)?([0-9]+/)?[0-9a-f]+\.cache(\.gz)?$,i',
206
-			$cache
207
-		)
208
-	) {
209
-		// supprimer le fichier (de facon propre)
210
-		supprimer_fichier(_DIR_CACHE . $cache);
211
-	} else {
212
-		spip_log("Nom de fichier cache incorrect : $cache");
213
-	}
203
+    if (
204
+        preg_match(
205
+            ',^([0-9a-f]/)?([0-9]+/)?[0-9a-f]+\.cache(\.gz)?$,i',
206
+            $cache
207
+        )
208
+    ) {
209
+        // supprimer le fichier (de facon propre)
210
+        supprimer_fichier(_DIR_CACHE . $cache);
211
+    } else {
212
+        spip_log("Nom de fichier cache incorrect : $cache");
213
+    }
214 214
 }
215 215
 
216 216
 // Supprimer les caches marques "x"
217 217
 // A priori dans cette version la fonction ne sera pas appelee, car
218 218
 // la meta est toujours false ; mais evitons un bug si elle est appellee
219 219
 function inc_retire_caches_dist($chemin = '') {
220
-	if (isset($GLOBALS['meta']['invalider_caches'])) {
221
-		effacer_meta('invalider_caches');
222
-	} # concurrence
220
+    if (isset($GLOBALS['meta']['invalider_caches'])) {
221
+        effacer_meta('invalider_caches');
222
+    } # concurrence
223 223
 }
224 224
 
225 225
 #######################################################################
@@ -230,9 +230,9 @@  discard block
 block discarded – undo
230 230
 ##
231 231
 
232 232
 function retire_caches($chemin = '') {
233
-	if ($retire_caches = charger_fonction('retire_caches', 'inc', true)) {
234
-		return $retire_caches($chemin);
235
-	}
233
+    if ($retire_caches = charger_fonction('retire_caches', 'inc', true)) {
234
+        return $retire_caches($chemin);
235
+    }
236 236
 }
237 237
 
238 238
 
@@ -240,10 +240,10 @@  discard block
 block discarded – undo
240 240
 // (note: si absente, n'est pas appellee)
241 241
 
242 242
 function calcul_invalideurs($corps, $primary, &$boucles, $id_boucle) {
243
-	if ($calcul_invalideurs = charger_fonction('calcul_invalideurs', 'inc', true)) {
244
-		return $calcul_invalideurs($corps, $primary, $boucles, $id_boucle);
245
-	}
246
-	return $corps;
243
+    if ($calcul_invalideurs = charger_fonction('calcul_invalideurs', 'inc', true)) {
244
+        return $calcul_invalideurs($corps, $primary, $boucles, $id_boucle);
245
+    }
246
+    return $corps;
247 247
 }
248 248
 
249 249
 
@@ -252,41 +252,41 @@  discard block
 block discarded – undo
252 252
 // invoquee quand on vide tout le cache en bloc (action/purger)
253 253
 //
254 254
 function supprime_invalideurs() {
255
-	if ($supprime_invalideurs = charger_fonction('supprime_invalideurs', 'inc', true)) {
256
-		return $supprime_invalideurs();
257
-	}
255
+    if ($supprime_invalideurs = charger_fonction('supprime_invalideurs', 'inc', true)) {
256
+        return $supprime_invalideurs();
257
+    }
258 258
 }
259 259
 
260 260
 
261 261
 // Calcul des pages : noter dans la base les liens d'invalidation
262 262
 function maj_invalideurs($fichier, &$page) {
263
-	if ($maj_invalideurs = charger_fonction('maj_invalideurs', 'inc', true)) {
264
-		return $maj_invalideurs($fichier, $page);
265
-	}
263
+    if ($maj_invalideurs = charger_fonction('maj_invalideurs', 'inc', true)) {
264
+        return $maj_invalideurs($fichier, $page);
265
+    }
266 266
 }
267 267
 
268 268
 
269 269
 // les invalideurs sont de la forme "objet/id_objet"
270 270
 function insere_invalideur($inval, $fichier) {
271
-	if ($insere_invalideur = charger_fonction('insere_invalideur', 'inc', true)) {
272
-		return $insere_invalideur($inval, $fichier);
273
-	}
271
+    if ($insere_invalideur = charger_fonction('insere_invalideur', 'inc', true)) {
272
+        return $insere_invalideur($inval, $fichier);
273
+    }
274 274
 }
275 275
 
276 276
 //
277 277
 // Marquer les fichiers caches invalides comme etant a supprimer
278 278
 //
279 279
 function applique_invalideur($depart) {
280
-	if ($applique_invalideur = charger_fonction('applique_invalideur', 'inc', true)) {
281
-		return $applique_invalideur($depart);
282
-	}
280
+    if ($applique_invalideur = charger_fonction('applique_invalideur', 'inc', true)) {
281
+        return $applique_invalideur($depart);
282
+    }
283 283
 }
284 284
 
285 285
 //
286 286
 // Invalider les caches liés à telle condition
287 287
 //
288 288
 function suivre_invalideur($cond, $modif = true) {
289
-	if ($suivre_invalideur = charger_fonction('suivre_invalideur', 'inc', true)) {
290
-		return $suivre_invalideur($cond, $modif);
291
-	}
289
+    if ($suivre_invalideur = charger_fonction('suivre_invalideur', 'inc', true)) {
290
+        return $suivre_invalideur($cond, $modif);
291
+    }
292 292
 }
Please login to merge, or discard this patch.
ecrire/xml/indenter.php 1 patch
Indentation   +37 added lines, -37 removed lines patch added patch discarded remove patch
@@ -11,55 +11,55 @@
 block discarded – undo
11 11
 \***************************************************************************/
12 12
 
13 13
 if (!defined('_ECRIRE_INC_VERSION')) {
14
-	return;
14
+    return;
15 15
 }
16 16
 
17 17
 class IndenteurXML {
18 18
 
19
-	public function debutElement($phraseur, $name, $attrs) {
20
-		xml_debutElement($this, $name, $attrs);
21
-	}
19
+    public function debutElement($phraseur, $name, $attrs) {
20
+        xml_debutElement($this, $name, $attrs);
21
+    }
22 22
 
23
-	public function finElement($phraseur, $name) {
24
-		xml_finElement($this, $name);
25
-	}
23
+    public function finElement($phraseur, $name) {
24
+        xml_finElement($this, $name);
25
+    }
26 26
 
27
-	public function textElement($phraseur, $data) {
28
-		xml_textElement($this, $data);
29
-	}
27
+    public function textElement($phraseur, $data) {
28
+        xml_textElement($this, $data);
29
+    }
30 30
 
31
-	public function piElement($phraseur, $target, $data) {
32
-		xml_PiElement($this, $target, $data);
33
-	}
31
+    public function piElement($phraseur, $target, $data) {
32
+        xml_PiElement($this, $target, $data);
33
+    }
34 34
 
35
-	public function defaultElement($phraseur, $data) {
36
-		xml_defaultElement($this, $data);
37
-	}
35
+    public function defaultElement($phraseur, $data) {
36
+        xml_defaultElement($this, $data);
37
+    }
38 38
 
39
-	public function phraserTout($phraseur, $data) {
40
-		xml_parsestring($this, $data);
41
-	}
39
+    public function phraserTout($phraseur, $data) {
40
+        xml_parsestring($this, $data);
41
+    }
42 42
 
43
-	public $depth = '';
44
-	public $res = '';
45
-	public $err = [];
46
-	public $contenu = [];
47
-	public $ouvrant = [];
48
-	public $reperes = [];
49
-	public $entete = '';
50
-	public $page = '';
51
-	public $dtc = null;
52
-	public $sax = null;
43
+    public $depth = '';
44
+    public $res = '';
45
+    public $err = [];
46
+    public $contenu = [];
47
+    public $ouvrant = [];
48
+    public $reperes = [];
49
+    public $entete = '';
50
+    public $page = '';
51
+    public $dtc = null;
52
+    public $sax = null;
53 53
 }
54 54
 
55 55
 function xml_indenter_dist($page, $apply = false) {
56
-	$sax = charger_fonction('sax', 'xml');
57
-	$f = new IndenteurXML();
58
-	$sax($page, $apply, $f);
59
-	if (!$f->err) {
60
-		return $f->entete . $f->res;
61
-	}
62
-	spip_log('indentation impossible ' . (is_countable($f->err) ? count($f->err) : 0) . ' erreurs de validation');
56
+    $sax = charger_fonction('sax', 'xml');
57
+    $f = new IndenteurXML();
58
+    $sax($page, $apply, $f);
59
+    if (!$f->err) {
60
+        return $f->entete . $f->res;
61
+    }
62
+    spip_log('indentation impossible ' . (is_countable($f->err) ? count($f->err) : 0) . ' erreurs de validation');
63 63
 
64
-	return $f->entete . $f->page;
64
+    return $f->entete . $f->page;
65 65
 }
Please login to merge, or discard this patch.
ecrire/xml/analyser_dtd.php 1 patch
Indentation   +335 added lines, -335 removed lines patch added patch discarded remove patch
@@ -11,58 +11,58 @@  discard block
 block discarded – undo
11 11
 \***************************************************************************/
12 12
 
13 13
 if (!defined('_ECRIRE_INC_VERSION')) {
14
-	return;
14
+    return;
15 15
 }
16 16
 
17 17
 include_spip('xml/interfaces');
18 18
 
19 19
 function charger_dtd($grammaire, $avail, $rotlvl) {
20
-	$r = null;
21
-	static $dtd = []; # cache bien utile pour le validateur en boucle
22
-
23
-	if (isset($dtd[$grammaire])) {
24
-		return $dtd[$grammaire];
25
-	}
26
-
27
-	if ($avail == 'SYSTEM') {
28
-		$grammaire = find_in_path($grammaire);
29
-	}
30
-
31
-	$file = _DIR_CACHE_XML . preg_replace('/[^\w.]/', '_', $rotlvl) . '.gz';
32
-
33
-	if (lire_fichier($file, $r)) {
34
-		if (!$grammaire) {
35
-			return [];
36
-		}
37
-		if (($avail == 'SYSTEM') and filemtime($file) < filemtime($grammaire)) {
38
-			$r = false;
39
-		}
40
-	}
41
-
42
-	if ($r) {
43
-		$dtc = unserialize($r);
44
-	} else {
45
-		spip_timer('dtd');
46
-		$dtc = new DTC();
47
-		// L'analyseur retourne un booleen de reussite et modifie $dtc.
48
-		// Retourner vide en cas d'echec
49
-		if (!analyser_dtd($grammaire, $avail, $dtc)) {
50
-			$dtc = [];
51
-		} else {
52
-			// tri final pour presenter les suggestions de corrections
53
-			foreach ($dtc->peres as $k => $v) {
54
-				asort($v);
55
-				$dtc->peres[$k] = $v;
56
-			}
57
-
58
-			spip_log("Analyser DTD $avail $grammaire (" . spip_timer('dtd') . ') ' . (is_countable($dtc->macros) ? count($dtc->macros) : 0) . ' macros, ' . (is_countable($dtc->elements) ? count($dtc->elements) : 0) . ' elements, ' . (is_countable($dtc->attributs) ? count($dtc->attributs) : 0) . " listes d'attributs, " . (is_countable($dtc->entites) ? count($dtc->entites) : 0) . ' entites');
59
-			#	$r = $dtc->regles; ksort($r);foreach($r as $l => $v) {$t=array_keys($dtc->attributs[$l]);echo "<b>$l</b> '$v' ", count($t), " attributs: ", join (', ',$t);$t=$dtc->peres[$l];echo "<br />",count($t), " peres: ", @join (', ',$t), "<br />\n";}exit;
60
-			ecrire_fichier($file, serialize($dtc), true);
61
-		}
62
-	}
63
-	$dtd[$grammaire] = $dtc;
64
-
65
-	return $dtc;
20
+    $r = null;
21
+    static $dtd = []; # cache bien utile pour le validateur en boucle
22
+
23
+    if (isset($dtd[$grammaire])) {
24
+        return $dtd[$grammaire];
25
+    }
26
+
27
+    if ($avail == 'SYSTEM') {
28
+        $grammaire = find_in_path($grammaire);
29
+    }
30
+
31
+    $file = _DIR_CACHE_XML . preg_replace('/[^\w.]/', '_', $rotlvl) . '.gz';
32
+
33
+    if (lire_fichier($file, $r)) {
34
+        if (!$grammaire) {
35
+            return [];
36
+        }
37
+        if (($avail == 'SYSTEM') and filemtime($file) < filemtime($grammaire)) {
38
+            $r = false;
39
+        }
40
+    }
41
+
42
+    if ($r) {
43
+        $dtc = unserialize($r);
44
+    } else {
45
+        spip_timer('dtd');
46
+        $dtc = new DTC();
47
+        // L'analyseur retourne un booleen de reussite et modifie $dtc.
48
+        // Retourner vide en cas d'echec
49
+        if (!analyser_dtd($grammaire, $avail, $dtc)) {
50
+            $dtc = [];
51
+        } else {
52
+            // tri final pour presenter les suggestions de corrections
53
+            foreach ($dtc->peres as $k => $v) {
54
+                asort($v);
55
+                $dtc->peres[$k] = $v;
56
+            }
57
+
58
+            spip_log("Analyser DTD $avail $grammaire (" . spip_timer('dtd') . ') ' . (is_countable($dtc->macros) ? count($dtc->macros) : 0) . ' macros, ' . (is_countable($dtc->elements) ? count($dtc->elements) : 0) . ' elements, ' . (is_countable($dtc->attributs) ? count($dtc->attributs) : 0) . " listes d'attributs, " . (is_countable($dtc->entites) ? count($dtc->entites) : 0) . ' entites');
59
+            #	$r = $dtc->regles; ksort($r);foreach($r as $l => $v) {$t=array_keys($dtc->attributs[$l]);echo "<b>$l</b> '$v' ", count($t), " attributs: ", join (', ',$t);$t=$dtc->peres[$l];echo "<br />",count($t), " peres: ", @join (', ',$t), "<br />\n";}exit;
60
+            ecrire_fichier($file, serialize($dtc), true);
61
+        }
62
+    }
63
+    $dtd[$grammaire] = $dtc;
64
+
65
+    return $dtc;
66 66
 }
67 67
 
68 68
 // Compiler une regle de production en une Regexp qu'on appliquera sur la
@@ -74,153 +74,153 @@  discard block
 block discarded – undo
74 74
 // et parentheser le tout pour que  | + * ? s'applique dessus.
75 75
 
76 76
 function compilerRegle($val) {
77
-	$x = str_replace(
78
-		'()',
79
-		'',
80
-		preg_replace(
81
-			'/\s*,\s*/',
82
-			'',
83
-			preg_replace(
84
-				'/(\w+)\s*/',
85
-				'(?:\1 )',
86
-				preg_replace(
87
-					'/\s*\)/',
88
-					')',
89
-					preg_replace(
90
-						'/\s*([(+*|?])\s*/',
91
-						'\1',
92
-						preg_replace('/\s*#\w+\s*[,|]?\s*/', '', $val)
93
-					)
94
-				)
95
-			)
96
-		)
97
-	);
98
-
99
-	return $x;
77
+    $x = str_replace(
78
+        '()',
79
+        '',
80
+        preg_replace(
81
+            '/\s*,\s*/',
82
+            '',
83
+            preg_replace(
84
+                '/(\w+)\s*/',
85
+                '(?:\1 )',
86
+                preg_replace(
87
+                    '/\s*\)/',
88
+                    ')',
89
+                    preg_replace(
90
+                        '/\s*([(+*|?])\s*/',
91
+                        '\1',
92
+                        preg_replace('/\s*#\w+\s*[,|]?\s*/', '', $val)
93
+                    )
94
+                )
95
+            )
96
+        )
97
+    );
98
+
99
+    return $x;
100 100
 }
101 101
 
102 102
 
103 103
 function analyser_dtd($loc, $avail, &$dtc) {
104
-	// creer le repertoire de cache si ce n'est fait
105
-	// (utile aussi pour le resultat de la compil)
106
-	$file = sous_repertoire(_DIR_CACHE_XML);
107
-	// si DTD locale, ignorer ce repertoire pour le moment
108
-	if ($avail == 'SYSTEM') {
109
-		$file = $loc;
110
-		if (_DIR_RACINE and strncmp($file, _DIR_RACINE, strlen(_DIR_RACINE)) == 0) {
111
-			$file = substr($file, strlen(_DIR_RACINE));
112
-		}
113
-		$file = find_in_path($file);
114
-	} else {
115
-		$file .= preg_replace('/[^\w.]/', '_', $loc);
116
-	}
117
-
118
-	$dtd = '';
119
-	if (@is_readable($file)) {
120
-		lire_fichier($file, $dtd);
121
-	} else {
122
-		if ($avail == 'PUBLIC') {
123
-			include_spip('inc/distant');
124
-			$dtd = recuperer_url($loc);
125
-			$dtd = trim($dtd['page'] ?? '');
126
-			if ($dtd) {
127
-				ecrire_fichier($file, $dtd, true);
128
-			}
129
-		}
130
-	}
131
-
132
-	$dtd = ltrim($dtd);
133
-	if (!$dtd) {
134
-		spip_log("DTD '$loc' ($file) inaccessible");
135
-
136
-		return false;
137
-	} else {
138
-		spip_log("analyse de la DTD $loc ");
139
-	}
140
-
141
-	while ($dtd) {
142
-		if ($dtd[0] != '<') {
143
-			$r = analyser_dtd_lexeme($dtd, $dtc, $loc);
144
-		} elseif ($dtd[1] != '!') {
145
-			$r = analyser_dtd_pi($dtd, $dtc, $loc);
146
-		} elseif ($dtd[2] == '[') {
147
-			$r = analyser_dtd_data($dtd, $dtc, $loc);
148
-		} else {
149
-			switch ($dtd[3]) {
150
-				case '%':
151
-					$r = analyser_dtd_data($dtd, $dtc, $loc);
152
-					break;
153
-				case 'T':
154
-					$r = analyser_dtd_attlist($dtd, $dtc, $loc);
155
-					break;
156
-				case 'L':
157
-					$r = analyser_dtd_element($dtd, $dtc, $loc);
158
-					break;
159
-				case 'N':
160
-					$r = analyser_dtd_entity($dtd, $dtc, $loc);
161
-					break;
162
-				case 'O':
163
-					$r = analyser_dtd_notation($dtd, $dtc, $loc);
164
-					break;
165
-				case '-':
166
-					$r = analyser_dtd_comment($dtd, $dtc, $loc);
167
-					break;
168
-				default:
169
-					$r = -1;
170
-			}
171
-		}
172
-		if (!is_string($r)) {
173
-			spip_log("erreur $r dans la DTD  " . substr($dtd, 0, 80) . '.....');
174
-
175
-			return false;
176
-		}
177
-		$dtd = $r;
178
-	}
179
-
180
-	return true;
104
+    // creer le repertoire de cache si ce n'est fait
105
+    // (utile aussi pour le resultat de la compil)
106
+    $file = sous_repertoire(_DIR_CACHE_XML);
107
+    // si DTD locale, ignorer ce repertoire pour le moment
108
+    if ($avail == 'SYSTEM') {
109
+        $file = $loc;
110
+        if (_DIR_RACINE and strncmp($file, _DIR_RACINE, strlen(_DIR_RACINE)) == 0) {
111
+            $file = substr($file, strlen(_DIR_RACINE));
112
+        }
113
+        $file = find_in_path($file);
114
+    } else {
115
+        $file .= preg_replace('/[^\w.]/', '_', $loc);
116
+    }
117
+
118
+    $dtd = '';
119
+    if (@is_readable($file)) {
120
+        lire_fichier($file, $dtd);
121
+    } else {
122
+        if ($avail == 'PUBLIC') {
123
+            include_spip('inc/distant');
124
+            $dtd = recuperer_url($loc);
125
+            $dtd = trim($dtd['page'] ?? '');
126
+            if ($dtd) {
127
+                ecrire_fichier($file, $dtd, true);
128
+            }
129
+        }
130
+    }
131
+
132
+    $dtd = ltrim($dtd);
133
+    if (!$dtd) {
134
+        spip_log("DTD '$loc' ($file) inaccessible");
135
+
136
+        return false;
137
+    } else {
138
+        spip_log("analyse de la DTD $loc ");
139
+    }
140
+
141
+    while ($dtd) {
142
+        if ($dtd[0] != '<') {
143
+            $r = analyser_dtd_lexeme($dtd, $dtc, $loc);
144
+        } elseif ($dtd[1] != '!') {
145
+            $r = analyser_dtd_pi($dtd, $dtc, $loc);
146
+        } elseif ($dtd[2] == '[') {
147
+            $r = analyser_dtd_data($dtd, $dtc, $loc);
148
+        } else {
149
+            switch ($dtd[3]) {
150
+                case '%':
151
+                    $r = analyser_dtd_data($dtd, $dtc, $loc);
152
+                    break;
153
+                case 'T':
154
+                    $r = analyser_dtd_attlist($dtd, $dtc, $loc);
155
+                    break;
156
+                case 'L':
157
+                    $r = analyser_dtd_element($dtd, $dtc, $loc);
158
+                    break;
159
+                case 'N':
160
+                    $r = analyser_dtd_entity($dtd, $dtc, $loc);
161
+                    break;
162
+                case 'O':
163
+                    $r = analyser_dtd_notation($dtd, $dtc, $loc);
164
+                    break;
165
+                case '-':
166
+                    $r = analyser_dtd_comment($dtd, $dtc, $loc);
167
+                    break;
168
+                default:
169
+                    $r = -1;
170
+            }
171
+        }
172
+        if (!is_string($r)) {
173
+            spip_log("erreur $r dans la DTD  " . substr($dtd, 0, 80) . '.....');
174
+
175
+            return false;
176
+        }
177
+        $dtd = $r;
178
+    }
179
+
180
+    return true;
181 181
 }
182 182
 
183 183
 function analyser_dtd_comment($dtd, &$dtc, $grammaire) {
184
-	// ejecter les commentaires, surtout quand ils contiennent du code.
185
-	// Option /s car sur plusieurs lignes parfois
184
+    // ejecter les commentaires, surtout quand ils contiennent du code.
185
+    // Option /s car sur plusieurs lignes parfois
186 186
 
187
-	if (!preg_match('/^<!--.*?-->\s*(.*)$/s', $dtd, $m)) {
188
-		return -6;
189
-	}
187
+    if (!preg_match('/^<!--.*?-->\s*(.*)$/s', $dtd, $m)) {
188
+        return -6;
189
+    }
190 190
 
191
-	return $m[1];
191
+    return $m[1];
192 192
 }
193 193
 
194 194
 function analyser_dtd_pi($dtd, &$dtc, $grammaire) {
195
-	if (!preg_match('/^<\?.*?>\s*(.*)$/s', $dtd, $m)) {
196
-		return -10;
197
-	}
195
+    if (!preg_match('/^<\?.*?>\s*(.*)$/s', $dtd, $m)) {
196
+        return -10;
197
+    }
198 198
 
199
-	return $m[1];
199
+    return $m[1];
200 200
 }
201 201
 
202 202
 function analyser_dtd_lexeme($dtd, &$dtc, $grammaire) {
203 203
 
204
-	if (!preg_match(_REGEXP_ENTITY_DEF, $dtd, $m)) {
205
-		return -9;
206
-	}
207
-
208
-	[, $s] = $m;
209
-	$n = $dtc->macros[$s];
210
-
211
-	if (is_array($n)) {
212
-		// en cas d'inclusion, l'espace de nom est le meme
213
-		// mais gaffe aux DTD dont l'URL est relative a l'engloblante
214
-		if (
215
-			($n[0] == 'PUBLIC')
216
-			and !tester_url_absolue($n[1])
217
-		) {
218
-			$n[1] = substr($grammaire, 0, strrpos($grammaire, '/') + 1) . $n[1];
219
-		}
220
-		analyser_dtd($n[1], $n[0], $dtc);
221
-	}
222
-
223
-	return ltrim(substr($dtd, strlen($m[0])));
204
+    if (!preg_match(_REGEXP_ENTITY_DEF, $dtd, $m)) {
205
+        return -9;
206
+    }
207
+
208
+    [, $s] = $m;
209
+    $n = $dtc->macros[$s];
210
+
211
+    if (is_array($n)) {
212
+        // en cas d'inclusion, l'espace de nom est le meme
213
+        // mais gaffe aux DTD dont l'URL est relative a l'engloblante
214
+        if (
215
+            ($n[0] == 'PUBLIC')
216
+            and !tester_url_absolue($n[1])
217
+        ) {
218
+            $n[1] = substr($grammaire, 0, strrpos($grammaire, '/') + 1) . $n[1];
219
+        }
220
+        analyser_dtd($n[1], $n[0], $dtc);
221
+    }
222
+
223
+    return ltrim(substr($dtd, strlen($m[0])));
224 224
 }
225 225
 
226 226
 // il faudrait gerer plus proprement les niveaux d'inclusion:
@@ -228,83 +228,83 @@  discard block
 block discarded – undo
228 228
 
229 229
 function analyser_dtd_data($dtd, &$dtc, $grammaire) {
230 230
 
231
-	if (!preg_match(_REGEXP_INCLUDE_USE, $dtd, $m)) {
232
-		return -11;
233
-	}
234
-	if (
235
-		!preg_match(
236
-			'/^((\s*<!(\[\s*%\s*[^;]*;\s*\[([^]<]*<[^>]*>)*[^]<]*\]\]>)|([^]>]*>))*[^]<]*)\]\]>\s*/s',
237
-			$m[2],
238
-			$r
239
-		)
240
-	) {
241
-		return -12;
242
-	}
243
-
244
-	if ($dtc->macros[$m[1]] == 'INCLUDE') {
245
-		$retour = $r[1] . substr($m[2], strlen($r[0]));
246
-	} else {
247
-		$retour = substr($m[2], strlen($r[0]));
248
-	}
249
-
250
-	return $retour;
231
+    if (!preg_match(_REGEXP_INCLUDE_USE, $dtd, $m)) {
232
+        return -11;
233
+    }
234
+    if (
235
+        !preg_match(
236
+            '/^((\s*<!(\[\s*%\s*[^;]*;\s*\[([^]<]*<[^>]*>)*[^]<]*\]\]>)|([^]>]*>))*[^]<]*)\]\]>\s*/s',
237
+            $m[2],
238
+            $r
239
+        )
240
+    ) {
241
+        return -12;
242
+    }
243
+
244
+    if ($dtc->macros[$m[1]] == 'INCLUDE') {
245
+        $retour = $r[1] . substr($m[2], strlen($r[0]));
246
+    } else {
247
+        $retour = substr($m[2], strlen($r[0]));
248
+    }
249
+
250
+    return $retour;
251 251
 }
252 252
 
253 253
 function analyser_dtd_notation($dtd, &$dtc, $grammaire) {
254
-	if (!preg_match('/^<!NOTATION.*?>\s*(.*)$/s', $dtd, $m)) {
255
-		return -8;
256
-	}
257
-	spip_log('analyser_dtd_notation a ecrire');
254
+    if (!preg_match('/^<!NOTATION.*?>\s*(.*)$/s', $dtd, $m)) {
255
+        return -8;
256
+    }
257
+    spip_log('analyser_dtd_notation a ecrire');
258 258
 
259
-	return $m[1];
259
+    return $m[1];
260 260
 }
261 261
 
262 262
 function analyser_dtd_entity($dtd, &$dtc, $grammaire) {
263
-	if (!preg_match(_REGEXP_ENTITY_DECL, $dtd, $m)) {
264
-		return -2;
265
-	}
266
-
267
-	[$t, $term, $nom, $type, $k1, $k2, $k3, $k4, $k5, $k6, $c, $q, $alt, $dtd] = $m;
268
-
269
-	if (isset($dtc->macros[$nom]) and $dtc->macros[$nom]) {
270
-		return $dtd;
271
-	}
272
-	if (isset($dtc->entites[$nom])) {
273
-		spip_log("redefinition de l'entite $nom");
274
-	}
275
-	if ($k6) {
276
-		return $k6 . $dtd;
277
-	} // cas du synonyme complet
278
-	$val = expanserEntite(($k2 ? $k3 : ($k4 ? $k5 : $k6)), $dtc->macros);
279
-
280
-	// cas particulier double evaluation: 'PUBLIC "..." "...."'
281
-	if (preg_match('/(PUBLIC|SYSTEM)\s+"([^"]*)"\s*("([^"]*)")?\s*$/s', $val, $r)) {
282
-		[$t, $type, $val, $q, $alt] = $r;
283
-	}
284
-
285
-	if (!$term) {
286
-		$dtc->entites[$nom] = $val;
287
-	} elseif (!$type) {
288
-		$dtc->macros[$nom] = $val;
289
-	} else {
290
-		if (($type == 'SYSTEM') and !$alt) {
291
-			$alt = $val;
292
-		}
293
-		if (!$alt) {
294
-			$dtc->macros[$nom] = $val;
295
-		} else {
296
-			if (
297
-				($type == 'PUBLIC')
298
-				and (strpos($alt, '/') === false)
299
-			) {
300
-				$alt = preg_replace(',/[^/]+$,', '/', $grammaire)
301
-					. $alt;
302
-			}
303
-			$dtc->macros[$nom] = [$type, $alt];
304
-		}
305
-	}
306
-
307
-	return $dtd;
263
+    if (!preg_match(_REGEXP_ENTITY_DECL, $dtd, $m)) {
264
+        return -2;
265
+    }
266
+
267
+    [$t, $term, $nom, $type, $k1, $k2, $k3, $k4, $k5, $k6, $c, $q, $alt, $dtd] = $m;
268
+
269
+    if (isset($dtc->macros[$nom]) and $dtc->macros[$nom]) {
270
+        return $dtd;
271
+    }
272
+    if (isset($dtc->entites[$nom])) {
273
+        spip_log("redefinition de l'entite $nom");
274
+    }
275
+    if ($k6) {
276
+        return $k6 . $dtd;
277
+    } // cas du synonyme complet
278
+    $val = expanserEntite(($k2 ? $k3 : ($k4 ? $k5 : $k6)), $dtc->macros);
279
+
280
+    // cas particulier double evaluation: 'PUBLIC "..." "...."'
281
+    if (preg_match('/(PUBLIC|SYSTEM)\s+"([^"]*)"\s*("([^"]*)")?\s*$/s', $val, $r)) {
282
+        [$t, $type, $val, $q, $alt] = $r;
283
+    }
284
+
285
+    if (!$term) {
286
+        $dtc->entites[$nom] = $val;
287
+    } elseif (!$type) {
288
+        $dtc->macros[$nom] = $val;
289
+    } else {
290
+        if (($type == 'SYSTEM') and !$alt) {
291
+            $alt = $val;
292
+        }
293
+        if (!$alt) {
294
+            $dtc->macros[$nom] = $val;
295
+        } else {
296
+            if (
297
+                ($type == 'PUBLIC')
298
+                and (strpos($alt, '/') === false)
299
+            ) {
300
+                $alt = preg_replace(',/[^/]+$,', '/', $grammaire)
301
+                    . $alt;
302
+            }
303
+            $dtc->macros[$nom] = [$type, $alt];
304
+        }
305
+    }
306
+
307
+    return $dtd;
308 308
 }
309 309
 
310 310
 // Dresser le tableau des filles potentielles de l'element
@@ -317,76 +317,76 @@  discard block
 block discarded – undo
317 317
 // Fin du controle en finElement
318 318
 
319 319
 function analyser_dtd_element($dtd, &$dtc, $grammaire) {
320
-	if (!preg_match('/^<!ELEMENT\s+([^>\s]+)([^>]*)>\s*(.*)$/s', $dtd, $m)) {
321
-		return -3;
322
-	}
323
-
324
-	[, $nom, $contenu, $dtd] = $m;
325
-	$nom = expanserEntite($nom, $dtc->macros);
326
-
327
-	if (isset($dtc->elements[$nom])) {
328
-		spip_log("redefinition de l'element $nom dans la DTD");
329
-
330
-		return -4;
331
-	}
332
-	$filles = [];
333
-	$contenu = expanserEntite($contenu, $dtc->macros);
334
-	$val = $contenu ? compilerRegle($contenu) : '(?:EMPTY )';
335
-	if ($val == '(?:EMPTY )') {
336
-		$dtc->regles[$nom] = 'EMPTY';
337
-	} elseif ($val == '(?:ANY )') {
338
-		$dtc->regles[$nom] = 'ANY';
339
-	} else {
340
-		$last = substr($val, -1);
341
-		if (
342
-			preg_match('/ \w/', $val)
343
-			or (!empty($last) and strpos('*+?', $last) === false)
344
-		) {
345
-			$dtc->regles[$nom] = "/^$val$/";
346
-		} else {
347
-			$dtc->regles[$nom] = $last;
348
-		}
349
-		$filles = array_values(preg_split('/\W+/', $val, -1, PREG_SPLIT_NO_EMPTY));
350
-
351
-		foreach ($filles as $k) {
352
-			if (!isset($dtc->peres[$k])) {
353
-				$dtc->peres[$k] = [];
354
-			}
355
-			if (!in_array($nom, $dtc->peres[$k])) {
356
-				$dtc->peres[$k][] = $nom;
357
-			}
358
-		}
359
-	}
360
-	$dtc->pcdata[$nom] = (strpos($contenu, '#PCDATA') === false);
361
-	$dtc->elements[$nom] = $filles;
362
-
363
-	return $dtd;
320
+    if (!preg_match('/^<!ELEMENT\s+([^>\s]+)([^>]*)>\s*(.*)$/s', $dtd, $m)) {
321
+        return -3;
322
+    }
323
+
324
+    [, $nom, $contenu, $dtd] = $m;
325
+    $nom = expanserEntite($nom, $dtc->macros);
326
+
327
+    if (isset($dtc->elements[$nom])) {
328
+        spip_log("redefinition de l'element $nom dans la DTD");
329
+
330
+        return -4;
331
+    }
332
+    $filles = [];
333
+    $contenu = expanserEntite($contenu, $dtc->macros);
334
+    $val = $contenu ? compilerRegle($contenu) : '(?:EMPTY )';
335
+    if ($val == '(?:EMPTY )') {
336
+        $dtc->regles[$nom] = 'EMPTY';
337
+    } elseif ($val == '(?:ANY )') {
338
+        $dtc->regles[$nom] = 'ANY';
339
+    } else {
340
+        $last = substr($val, -1);
341
+        if (
342
+            preg_match('/ \w/', $val)
343
+            or (!empty($last) and strpos('*+?', $last) === false)
344
+        ) {
345
+            $dtc->regles[$nom] = "/^$val$/";
346
+        } else {
347
+            $dtc->regles[$nom] = $last;
348
+        }
349
+        $filles = array_values(preg_split('/\W+/', $val, -1, PREG_SPLIT_NO_EMPTY));
350
+
351
+        foreach ($filles as $k) {
352
+            if (!isset($dtc->peres[$k])) {
353
+                $dtc->peres[$k] = [];
354
+            }
355
+            if (!in_array($nom, $dtc->peres[$k])) {
356
+                $dtc->peres[$k][] = $nom;
357
+            }
358
+        }
359
+    }
360
+    $dtc->pcdata[$nom] = (strpos($contenu, '#PCDATA') === false);
361
+    $dtc->elements[$nom] = $filles;
362
+
363
+    return $dtd;
364 364
 }
365 365
 
366 366
 
367 367
 function analyser_dtd_attlist($dtd, &$dtc, $grammaire) {
368
-	if (!preg_match('/^<!ATTLIST\s+(\S+)\s+([^>]*)>\s*(.*)/s', $dtd, $m)) {
369
-		return -5;
370
-	}
371
-
372
-	[, $nom, $val, $dtd] = $m;
373
-	$nom = expanserEntite($nom, $dtc->macros);
374
-	$val = expanserEntite($val, $dtc->macros);
375
-	if (!isset($dtc->attributs[$nom])) {
376
-		$dtc->attributs[$nom] = [];
377
-	}
378
-
379
-	if (preg_match_all("/\s*(\S+)\s+(([(][^)]*[)])|(\S+))\s+([^\s']*)(\s*'[^']*')?/", $val, $r2, PREG_SET_ORDER)) {
380
-		foreach ($r2 as $m2) {
381
-			$v = preg_match('/^\w+$/', $m2[2]) ? $m2[2]
382
-				: ('/^' . preg_replace('/\s+/', '', $m2[2]) . '$/');
383
-			$m21 = expanserEntite($m2[1], $dtc->macros);
384
-			$m25 = expanserEntite($m2[5], $dtc->macros);
385
-			$dtc->attributs[$nom][$m21] = [$v, $m25];
386
-		}
387
-	}
388
-
389
-	return $dtd;
368
+    if (!preg_match('/^<!ATTLIST\s+(\S+)\s+([^>]*)>\s*(.*)/s', $dtd, $m)) {
369
+        return -5;
370
+    }
371
+
372
+    [, $nom, $val, $dtd] = $m;
373
+    $nom = expanserEntite($nom, $dtc->macros);
374
+    $val = expanserEntite($val, $dtc->macros);
375
+    if (!isset($dtc->attributs[$nom])) {
376
+        $dtc->attributs[$nom] = [];
377
+    }
378
+
379
+    if (preg_match_all("/\s*(\S+)\s+(([(][^)]*[)])|(\S+))\s+([^\s']*)(\s*'[^']*')?/", $val, $r2, PREG_SET_ORDER)) {
380
+        foreach ($r2 as $m2) {
381
+            $v = preg_match('/^\w+$/', $m2[2]) ? $m2[2]
382
+                : ('/^' . preg_replace('/\s+/', '', $m2[2]) . '$/');
383
+            $m21 = expanserEntite($m2[1], $dtc->macros);
384
+            $m25 = expanserEntite($m2[5], $dtc->macros);
385
+            $dtc->attributs[$nom][$m21] = [$v, $m25];
386
+        }
387
+    }
388
+
389
+    return $dtd;
390 390
 }
391 391
 
392 392
 
@@ -402,26 +402,26 @@  discard block
 block discarded – undo
402 402
  * @return string|array
403 403
  **/
404 404
 function expanserEntite($val, $macros = []) {
405
-	static $vu = [];
406
-	if (!is_string($val)) {
407
-		return $vu;
408
-	}
409
-
410
-	if (preg_match_all(_REGEXP_ENTITY_USE, $val, $r, PREG_SET_ORDER)) {
411
-		foreach ($r as $m) {
412
-			$ent = $m[1];
413
-			// il peut valoir ""
414
-			if (!isset($macros[$ent])) {
415
-				spip_log("Entite $ent inconnu");
416
-			} else {
417
-				if (!isset($vu[$ent])) {
418
-					$vu[$ent] = 0;
419
-				}
420
-				++$vu[$ent];
421
-				$val = str_replace($m[0], $macros[$ent], $val);
422
-			}
423
-		}
424
-	}
425
-
426
-	return trim(preg_replace('/\s+/', ' ', $val));
405
+    static $vu = [];
406
+    if (!is_string($val)) {
407
+        return $vu;
408
+    }
409
+
410
+    if (preg_match_all(_REGEXP_ENTITY_USE, $val, $r, PREG_SET_ORDER)) {
411
+        foreach ($r as $m) {
412
+            $ent = $m[1];
413
+            // il peut valoir ""
414
+            if (!isset($macros[$ent])) {
415
+                spip_log("Entite $ent inconnu");
416
+            } else {
417
+                if (!isset($vu[$ent])) {
418
+                    $vu[$ent] = 0;
419
+                }
420
+                ++$vu[$ent];
421
+                $val = str_replace($m[0], $macros[$ent], $val);
422
+            }
423
+        }
424
+    }
425
+
426
+    return trim(preg_replace('/\s+/', ' ', $val));
427 427
 }
Please login to merge, or discard this patch.
ecrire/public/cacher.php 1 patch
Indentation   +320 added lines, -320 removed lines patch added patch discarded remove patch
@@ -11,7 +11,7 @@  discard block
 block discarded – undo
11 11
 \***************************************************************************/
12 12
 
13 13
 if (!defined('_ECRIRE_INC_VERSION')) {
14
-	return;
14
+    return;
15 15
 }
16 16
 
17 17
 /**
@@ -25,9 +25,9 @@  discard block
 block discarded – undo
25 25
  * @return string
26 26
  */
27 27
 function generer_nom_fichier_cache($contexte, $page) {
28
-	$u = md5(var_export([$contexte, $page], true));
28
+    $u = md5(var_export([$contexte, $page], true));
29 29
 
30
-	return $u . '.cache';
30
+    return $u . '.cache';
31 31
 }
32 32
 
33 33
 /**
@@ -43,26 +43,26 @@  discard block
 block discarded – undo
43 43
  * @return string
44 44
  */
45 45
 function cache_chemin_fichier($nom_cache, $ecrire = false) {
46
-	static $l1, $l2;
47
-	if (is_null($l1)) {
48
-		$length = (defined('_CACHE_PROFONDEUR_STOCKAGE') ? min(8, max(_CACHE_PROFONDEUR_STOCKAGE, 2)) : 4);
49
-		$l1 = intval(floor($length / 2));
50
-		$l2 = $length - $l1;
51
-	}
52
-	$d = substr($nom_cache, 0, $l1);
53
-	$u = substr($nom_cache, $l1, $l2);
54
-
55
-	if ($ecrire) {
56
-		$rep = sous_repertoire(_DIR_CACHE, '', false, true);
57
-		$rep = sous_repertoire($rep, 'calcul/', false, true);
58
-		$rep = sous_repertoire($rep, $d, false, true);
59
-	}
60
-	else {
61
-		// en lecture on essaye pas de creer les repertoires, on va au plus vite
62
-		$rep = _DIR_CACHE . "calcul/$d/";
63
-	}
64
-
65
-	return $rep . $u . '.cache';
46
+    static $l1, $l2;
47
+    if (is_null($l1)) {
48
+        $length = (defined('_CACHE_PROFONDEUR_STOCKAGE') ? min(8, max(_CACHE_PROFONDEUR_STOCKAGE, 2)) : 4);
49
+        $l1 = intval(floor($length / 2));
50
+        $l2 = $length - $l1;
51
+    }
52
+    $d = substr($nom_cache, 0, $l1);
53
+    $u = substr($nom_cache, $l1, $l2);
54
+
55
+    if ($ecrire) {
56
+        $rep = sous_repertoire(_DIR_CACHE, '', false, true);
57
+        $rep = sous_repertoire($rep, 'calcul/', false, true);
58
+        $rep = sous_repertoire($rep, $d, false, true);
59
+    }
60
+    else {
61
+        // en lecture on essaye pas de creer les repertoires, on va au plus vite
62
+        $rep = _DIR_CACHE . "calcul/$d/";
63
+    }
64
+
65
+    return $rep . $u . '.cache';
66 66
 }
67 67
 
68 68
 /**
@@ -73,7 +73,7 @@  discard block
 block discarded – undo
73 73
  * @return bool
74 74
  */
75 75
 function ecrire_cache($nom_cache, $valeur) {
76
-	return ecrire_fichier(cache_chemin_fichier($nom_cache, true), serialize(['nom_cache' => $nom_cache, 'valeur' => $valeur]));
76
+    return ecrire_fichier(cache_chemin_fichier($nom_cache, true), serialize(['nom_cache' => $nom_cache, 'valeur' => $valeur]));
77 77
 }
78 78
 
79 79
 /**
@@ -83,38 +83,38 @@  discard block
 block discarded – undo
83 83
  * @return mixed
84 84
  */
85 85
 function lire_cache($nom_cache) {
86
-	$tmp = [];
87
-	if (
88
-		file_exists($f = cache_chemin_fichier($nom_cache))
89
-		and lire_fichier($f, $tmp)
90
-		and $tmp = unserialize($tmp)
91
-		and $tmp['nom_cache'] == $nom_cache
92
-		and isset($tmp['valeur'])
93
-	) {
94
-		return $tmp['valeur'];
95
-	}
96
-
97
-	return false;
86
+    $tmp = [];
87
+    if (
88
+        file_exists($f = cache_chemin_fichier($nom_cache))
89
+        and lire_fichier($f, $tmp)
90
+        and $tmp = unserialize($tmp)
91
+        and $tmp['nom_cache'] == $nom_cache
92
+        and isset($tmp['valeur'])
93
+    ) {
94
+        return $tmp['valeur'];
95
+    }
96
+
97
+    return false;
98 98
 }
99 99
 
100 100
 // Parano : on signe le cache, afin d'interdire un hack d'injection
101 101
 // dans notre memcache
102 102
 function cache_signature(&$page) {
103
-	if (!isset($GLOBALS['meta']['cache_signature'])) {
104
-		include_spip('inc/acces');
105
-		include_spip('auth/sha256.inc');
106
-		ecrire_meta(
107
-			'cache_signature',
108
-			spip_sha256(
109
-				$_SERVER['DOCUMENT_ROOT']
110
-				. ($_SERVER['SERVER_SIGNATURE'] ?? '')
111
-				. creer_uniqid()
112
-			),
113
-			'non'
114
-		);
115
-	}
116
-
117
-	return crc32($GLOBALS['meta']['cache_signature'] . $page['texte']);
103
+    if (!isset($GLOBALS['meta']['cache_signature'])) {
104
+        include_spip('inc/acces');
105
+        include_spip('auth/sha256.inc');
106
+        ecrire_meta(
107
+            'cache_signature',
108
+            spip_sha256(
109
+                $_SERVER['DOCUMENT_ROOT']
110
+                . ($_SERVER['SERVER_SIGNATURE'] ?? '')
111
+                . creer_uniqid()
112
+            ),
113
+            'non'
114
+        );
115
+    }
116
+
117
+    return crc32($GLOBALS['meta']['cache_signature'] . $page['texte']);
118 118
 }
119 119
 
120 120
 /**
@@ -127,14 +127,14 @@  discard block
 block discarded – undo
127 127
  * @return array
128 128
  */
129 129
 function gzip_page($page) {
130
-	if (function_exists('gzcompress') and strlen($page['texte']) > 16 * 1024) {
131
-		$page['gz'] = true;
132
-		$page['texte'] = gzcompress($page['texte']);
133
-	} else {
134
-		$page['gz'] = false;
135
-	}
136
-
137
-	return $page;
130
+    if (function_exists('gzcompress') and strlen($page['texte']) > 16 * 1024) {
131
+        $page['gz'] = true;
132
+        $page['texte'] = gzcompress($page['texte']);
133
+    } else {
134
+        $page['gz'] = false;
135
+    }
136
+
137
+    return $page;
138 138
 }
139 139
 
140 140
 /**
@@ -147,10 +147,10 @@  discard block
 block discarded – undo
147 147
  * @return void
148 148
  */
149 149
 function gunzip_page(&$page) {
150
-	if ($page['gz']) {
151
-		$page['texte'] = gzuncompress($page['texte']);
152
-		$page['gz'] = false; // ne pas gzuncompress deux fois une meme page
153
-	}
150
+    if ($page['gz']) {
151
+        $page['texte'] = gzuncompress($page['texte']);
152
+        $page['gz'] = false; // ne pas gzuncompress deux fois une meme page
153
+    }
154 154
 }
155 155
 
156 156
 /**
@@ -165,72 +165,72 @@  discard block
 block discarded – undo
165 165
  * -1 si il faut calculer sans stocker en cache
166 166
  */
167 167
 function cache_valide(&$page, $date) {
168
-	$now = $_SERVER['REQUEST_TIME'];
169
-
170
-	// Apparition d'un nouvel article post-date ?
171
-	if (
172
-		isset($GLOBALS['meta']['post_dates'])
173
-		and $GLOBALS['meta']['post_dates'] == 'non'
174
-		and isset($GLOBALS['meta']['date_prochain_postdate'])
175
-		and $now > $GLOBALS['meta']['date_prochain_postdate']
176
-	) {
177
-		spip_log('Un article post-date invalide le cache');
178
-		include_spip('inc/rubriques');
179
-		calculer_prochain_postdate(true);
180
-	}
181
-
182
-	if (defined('_VAR_NOCACHE') and _VAR_NOCACHE) {
183
-		return -1;
184
-	}
185
-	if (isset($GLOBALS['meta']['cache_inhib']) and $_SERVER['REQUEST_TIME'] < $GLOBALS['meta']['cache_inhib']) {
186
-		return -1;
187
-	}
188
-	if (defined('_NO_CACHE')) {
189
-		return (_NO_CACHE == 0 and !isset($page['texte'])) ? 1 : _NO_CACHE;
190
-	}
191
-
192
-	// pas de cache ? on le met a jour, sauf pour les bots (on leur calcule la page sans mise en cache)
193
-	if (!$page or !isset($page['texte']) or !isset($page['entetes']['X-Spip-Cache'])) {
194
-		return _IS_BOT ? -1 : 1;
195
-	}
196
-
197
-	// controle de la signature
198
-	if ($page['sig'] !== cache_signature($page)) {
199
-		return _IS_BOT ? -1 : 1;
200
-	}
201
-
202
-	// #CACHE{n,statique} => on n'invalide pas avec derniere_modif
203
-	// cf. ecrire/public/balises.php, balise_CACHE_dist()
204
-	if (!isset($page['entetes']['X-Spip-Statique']) or $page['entetes']['X-Spip-Statique'] !== 'oui') {
205
-		// Cache invalide par la meta 'derniere_modif'
206
-		// sauf pour les bots, qui utilisent toujours le cache
207
-		if (
208
-			!_IS_BOT
209
-			and $GLOBALS['derniere_modif_invalide']
210
-			and isset($GLOBALS['meta']['derniere_modif'])
211
-			and $date < $GLOBALS['meta']['derniere_modif']
212
-		) {
213
-			return 1;
214
-		}
215
-	}
216
-
217
-	// Sinon comparer l'age du fichier a sa duree de cache
218
-	$duree = intval($page['entetes']['X-Spip-Cache']);
219
-	$cache_mark = ($GLOBALS['meta']['cache_mark'] ?? 0);
220
-	if ($duree == 0) {  #CACHE{0}
221
-	return -1;
222
-	} // sauf pour les bots, qui utilisent toujours le cache
223
-	else {
224
-		if (
225
-			(!_IS_BOT and $date + $duree < $now)
226
-			# le cache est anterieur a la derniere purge : l'ignorer, meme pour les bots
227
-			or $date < $cache_mark
228
-		) {
229
-			return _IS_BOT ? -1 : 1;
230
-		} else {
231
-			return 0;
232
-		}
233
-	}
168
+    $now = $_SERVER['REQUEST_TIME'];
169
+
170
+    // Apparition d'un nouvel article post-date ?
171
+    if (
172
+        isset($GLOBALS['meta']['post_dates'])
173
+        and $GLOBALS['meta']['post_dates'] == 'non'
174
+        and isset($GLOBALS['meta']['date_prochain_postdate'])
175
+        and $now > $GLOBALS['meta']['date_prochain_postdate']
176
+    ) {
177
+        spip_log('Un article post-date invalide le cache');
178
+        include_spip('inc/rubriques');
179
+        calculer_prochain_postdate(true);
180
+    }
181
+
182
+    if (defined('_VAR_NOCACHE') and _VAR_NOCACHE) {
183
+        return -1;
184
+    }
185
+    if (isset($GLOBALS['meta']['cache_inhib']) and $_SERVER['REQUEST_TIME'] < $GLOBALS['meta']['cache_inhib']) {
186
+        return -1;
187
+    }
188
+    if (defined('_NO_CACHE')) {
189
+        return (_NO_CACHE == 0 and !isset($page['texte'])) ? 1 : _NO_CACHE;
190
+    }
191
+
192
+    // pas de cache ? on le met a jour, sauf pour les bots (on leur calcule la page sans mise en cache)
193
+    if (!$page or !isset($page['texte']) or !isset($page['entetes']['X-Spip-Cache'])) {
194
+        return _IS_BOT ? -1 : 1;
195
+    }
196
+
197
+    // controle de la signature
198
+    if ($page['sig'] !== cache_signature($page)) {
199
+        return _IS_BOT ? -1 : 1;
200
+    }
201
+
202
+    // #CACHE{n,statique} => on n'invalide pas avec derniere_modif
203
+    // cf. ecrire/public/balises.php, balise_CACHE_dist()
204
+    if (!isset($page['entetes']['X-Spip-Statique']) or $page['entetes']['X-Spip-Statique'] !== 'oui') {
205
+        // Cache invalide par la meta 'derniere_modif'
206
+        // sauf pour les bots, qui utilisent toujours le cache
207
+        if (
208
+            !_IS_BOT
209
+            and $GLOBALS['derniere_modif_invalide']
210
+            and isset($GLOBALS['meta']['derniere_modif'])
211
+            and $date < $GLOBALS['meta']['derniere_modif']
212
+        ) {
213
+            return 1;
214
+        }
215
+    }
216
+
217
+    // Sinon comparer l'age du fichier a sa duree de cache
218
+    $duree = intval($page['entetes']['X-Spip-Cache']);
219
+    $cache_mark = ($GLOBALS['meta']['cache_mark'] ?? 0);
220
+    if ($duree == 0) {  #CACHE{0}
221
+    return -1;
222
+    } // sauf pour les bots, qui utilisent toujours le cache
223
+    else {
224
+        if (
225
+            (!_IS_BOT and $date + $duree < $now)
226
+            # le cache est anterieur a la derniere purge : l'ignorer, meme pour les bots
227
+            or $date < $cache_mark
228
+        ) {
229
+            return _IS_BOT ? -1 : 1;
230
+        } else {
231
+            return 0;
232
+        }
233
+    }
234 234
 }
235 235
 
236 236
 /**
@@ -243,59 +243,59 @@  discard block
 block discarded – undo
243 243
  */
244 244
 function creer_cache(&$page, &$chemin_cache) {
245 245
 
246
-	// Ne rien faire si on est en preview, debug, ou si une erreur
247
-	// grave s'est presentee (compilation du squelette, MySQL, etc)
248
-	// le cas var_nocache ne devrait jamais arriver ici (securite)
249
-	// le cas spip_interdire_cache correspond a une ereur SQL grave non anticipable
250
-	if (
251
-		(defined('_VAR_NOCACHE') and _VAR_NOCACHE)
252
-		or defined('spip_interdire_cache')
253
-	) {
254
-		return;
255
-	}
256
-
257
-	// Si la page c1234 a un invalideur de session 'zz', sauver dans
258
-	// 'tmp/cache/MD5(chemin_cache)_zz'
259
-	if (
260
-		isset($page['invalideurs'])
261
-		and isset($page['invalideurs']['session'])
262
-	) {
263
-		// on verifie que le contenu du chemin cache indique seulement
264
-		// "cache sessionne" ; sa date indique la date de validite
265
-		// des caches sessionnes
266
-		if (!$tmp = lire_cache($chemin_cache)) {
267
-			spip_log('Creation cache sessionne ' . $chemin_cache);
268
-			$tmp = [
269
-				'invalideurs' => ['session' => ''],
270
-				'lastmodified' => $_SERVER['REQUEST_TIME']
271
-			];
272
-			ecrire_cache($chemin_cache, $tmp);
273
-		}
274
-		$chemin_cache = generer_nom_fichier_cache(
275
-			['chemin_cache' => $chemin_cache],
276
-			['session' => $page['invalideurs']['session']]
277
-		);
278
-	}
279
-
280
-	// ajouter la date de production dans le cache lui meme
281
-	// (qui contient deja sa duree de validite)
282
-	$page['lastmodified'] = $_SERVER['REQUEST_TIME'];
283
-
284
-	// compresser le contenu si besoin
285
-	$pagez = gzip_page($page);
286
-
287
-	// signer le contenu
288
-	$pagez['sig'] = cache_signature($pagez);
289
-
290
-	// l'enregistrer, compresse ou non...
291
-	$ok = ecrire_cache($chemin_cache, $pagez);
292
-
293
-	spip_log((_IS_BOT ? 'Bot:' : '') . "Creation du cache $chemin_cache pour "
294
-		. $page['entetes']['X-Spip-Cache'] . ' secondes' . ($ok ? '' : ' (erreur!)'), _LOG_INFO);
295
-
296
-	// Inserer ses invalideurs
297
-	include_spip('inc/invalideur');
298
-	maj_invalideurs($chemin_cache, $page);
246
+    // Ne rien faire si on est en preview, debug, ou si une erreur
247
+    // grave s'est presentee (compilation du squelette, MySQL, etc)
248
+    // le cas var_nocache ne devrait jamais arriver ici (securite)
249
+    // le cas spip_interdire_cache correspond a une ereur SQL grave non anticipable
250
+    if (
251
+        (defined('_VAR_NOCACHE') and _VAR_NOCACHE)
252
+        or defined('spip_interdire_cache')
253
+    ) {
254
+        return;
255
+    }
256
+
257
+    // Si la page c1234 a un invalideur de session 'zz', sauver dans
258
+    // 'tmp/cache/MD5(chemin_cache)_zz'
259
+    if (
260
+        isset($page['invalideurs'])
261
+        and isset($page['invalideurs']['session'])
262
+    ) {
263
+        // on verifie que le contenu du chemin cache indique seulement
264
+        // "cache sessionne" ; sa date indique la date de validite
265
+        // des caches sessionnes
266
+        if (!$tmp = lire_cache($chemin_cache)) {
267
+            spip_log('Creation cache sessionne ' . $chemin_cache);
268
+            $tmp = [
269
+                'invalideurs' => ['session' => ''],
270
+                'lastmodified' => $_SERVER['REQUEST_TIME']
271
+            ];
272
+            ecrire_cache($chemin_cache, $tmp);
273
+        }
274
+        $chemin_cache = generer_nom_fichier_cache(
275
+            ['chemin_cache' => $chemin_cache],
276
+            ['session' => $page['invalideurs']['session']]
277
+        );
278
+    }
279
+
280
+    // ajouter la date de production dans le cache lui meme
281
+    // (qui contient deja sa duree de validite)
282
+    $page['lastmodified'] = $_SERVER['REQUEST_TIME'];
283
+
284
+    // compresser le contenu si besoin
285
+    $pagez = gzip_page($page);
286
+
287
+    // signer le contenu
288
+    $pagez['sig'] = cache_signature($pagez);
289
+
290
+    // l'enregistrer, compresse ou non...
291
+    $ok = ecrire_cache($chemin_cache, $pagez);
292
+
293
+    spip_log((_IS_BOT ? 'Bot:' : '') . "Creation du cache $chemin_cache pour "
294
+        . $page['entetes']['X-Spip-Cache'] . ' secondes' . ($ok ? '' : ' (erreur!)'), _LOG_INFO);
295
+
296
+    // Inserer ses invalideurs
297
+    include_spip('inc/invalideur');
298
+    maj_invalideurs($chemin_cache, $page);
299 299
 }
300 300
 
301 301
 
@@ -308,15 +308,15 @@  discard block
 block discarded – undo
308 308
  * @return void
309 309
  */
310 310
 function nettoyer_petit_cache($prefix, $duree = 300) {
311
-	// determiner le repertoire a purger : 'tmp/CACHE/rech/'
312
-	$dircache = sous_repertoire(_DIR_CACHE, $prefix);
313
-	if (spip_touch($dircache . 'purger_' . $prefix, $duree, true)) {
314
-		foreach (preg_files($dircache, '[.]txt$') as $f) {
315
-			if ($_SERVER['REQUEST_TIME'] - (@file_exists($f) ? @filemtime($f) : 0) > $duree) {
316
-				spip_unlink($f);
317
-			}
318
-		}
319
-	}
311
+    // determiner le repertoire a purger : 'tmp/CACHE/rech/'
312
+    $dircache = sous_repertoire(_DIR_CACHE, $prefix);
313
+    if (spip_touch($dircache . 'purger_' . $prefix, $duree, true)) {
314
+        foreach (preg_files($dircache, '[.]txt$') as $f) {
315
+            if ($_SERVER['REQUEST_TIME'] - (@file_exists($f) ? @filemtime($f) : 0) > $duree) {
316
+                spip_unlink($f);
317
+            }
318
+        }
319
+    }
320 320
 }
321 321
 
322 322
 
@@ -344,133 +344,133 @@  discard block
 block discarded – undo
344 344
  */
345 345
 function public_cacher_dist($contexte, &$use_cache, &$chemin_cache, &$page, &$lastmodified) {
346 346
 
347
-	# fonction de cache minimale : dire "non on ne met rien en cache"
348
-	# $use_cache = -1; return;
349
-
350
-	// Second appel, destine a l'enregistrement du cache sur le disque
351
-	if (isset($chemin_cache)) {
352
-		return creer_cache($page, $chemin_cache);
353
-	}
354
-
355
-	// Toute la suite correspond au premier appel
356
-	$contexte_implicite = $page['contexte_implicite'];
357
-
358
-	// Cas ignorant le cache car completement dynamique
359
-	if (
360
-		(!empty($_SERVER['REQUEST_METHOD']) and $_SERVER['REQUEST_METHOD'] === 'POST')
361
-		or _request('connect')
362
-	) {
363
-		$use_cache = -1;
364
-		$lastmodified = 0;
365
-		$chemin_cache = '';
366
-		$page = [];
367
-
368
-		return;
369
-	}
370
-
371
-	// Controler l'existence d'un cache nous correspondant
372
-	$chemin_cache = generer_nom_fichier_cache($contexte, $page);
373
-	$lastmodified = 0;
374
-
375
-	// charger le cache s'il existe (et si il a bien le bon hash = anticollision)
376
-	if (!$page = lire_cache($chemin_cache)) {
377
-		$page = [];
378
-	}
379
-
380
-	// s'il est sessionne, charger celui correspondant a notre session
381
-	if (
382
-		isset($page['invalideurs'])
383
-		and isset($page['invalideurs']['session'])
384
-	) {
385
-		$chemin_cache_session = generer_nom_fichier_cache(
386
-			['chemin_cache' => $chemin_cache],
387
-			['session' => spip_session()]
388
-		);
389
-		if (
390
-			$page_session = lire_cache($chemin_cache_session)
391
-			and $page_session['lastmodified'] >= $page['lastmodified']
392
-		) {
393
-			$page = $page_session;
394
-		} else {
395
-			$page = [];
396
-		}
397
-	}
398
-
399
-
400
-	// Faut-il effacer des pages invalidees (en particulier ce cache-ci) ?
401
-	if (isset($GLOBALS['meta']['invalider'])) {
402
-		// ne le faire que si la base est disponible
403
-		if (spip_connect()) {
404
-			include_spip('inc/invalideur');
405
-			retire_caches($chemin_cache); # API invalideur inutile
406
-			supprimer_fichier(_DIR_CACHE . $chemin_cache);
407
-			if (isset($chemin_cache_session) and $chemin_cache_session) {
408
-				supprimer_fichier(_DIR_CACHE . $chemin_cache_session);
409
-			}
410
-		}
411
-	}
412
-
413
-	// Si un calcul, recalcul [ou preview, mais c'est recalcul] est demande,
414
-	// on supprime le cache
415
-	if (
416
-		defined('_VAR_MODE') &&
417
-		_VAR_MODE &&
418
-		(isset($_COOKIE['spip_session']) ||
419
-			isset($_COOKIE['spip_admin']) ||
420
-			@file_exists(_ACCESS_FILE_NAME))
421
-	) {
422
-		$page = ['contexte_implicite' => $contexte_implicite]; // ignorer le cache deja lu
423
-		include_spip('inc/invalideur');
424
-		retire_caches($chemin_cache); # API invalideur inutile
425
-		supprimer_fichier(_DIR_CACHE . $chemin_cache);
426
-		if (isset($chemin_cache_session) and $chemin_cache_session) {
427
-			supprimer_fichier(_DIR_CACHE . $chemin_cache_session);
428
-		}
429
-	}
430
-
431
-	// $delais par defaut
432
-	// pour toutes les pages sans #CACHE{} hors modeles/ et espace privé
433
-	// qui sont a cache nul par defaut
434
-	if (!isset($GLOBALS['delais'])) {
435
-		if (!defined('_DUREE_CACHE_DEFAUT')) {
436
-			define('_DUREE_CACHE_DEFAUT', 24 * 3600);
437
-		}
438
-		$GLOBALS['delais'] = _DUREE_CACHE_DEFAUT;
439
-	}
440
-
441
-	// determiner la validite de la page
442
-	if ($page) {
443
-		$use_cache = cache_valide($page, $page['lastmodified'] ?? 0);
444
-		// le contexte implicite n'est pas stocke dans le cache, mais il y a equivalence
445
-		// par le nom du cache. On le reinjecte donc ici pour utilisation eventuelle au calcul
446
-		$page['contexte_implicite'] = $contexte_implicite;
447
-		if (!$use_cache) {
448
-			// $page est un cache utilisable
449
-			gunzip_page($page);
450
-
451
-			return;
452
-		}
453
-	} else {
454
-		$page = ['contexte_implicite' => $contexte_implicite];
455
-		$use_cache = cache_valide($page, 0); // fichier cache absent : provoque le calcul
456
-	}
457
-
458
-	// Si pas valide mais pas de connexion a la base, le garder quand meme
459
-	if (!spip_connect()) {
460
-		if (isset($page['texte'])) {
461
-			gunzip_page($page);
462
-			$use_cache = 0;
463
-		} else {
464
-			spip_log("Erreur base de donnees, impossible utiliser $chemin_cache");
465
-			include_spip('inc/minipres');
466
-
467
-			return minipres(_T('info_travaux_titre'), _T('titre_probleme_technique'), ['status' => 503]);
468
-		}
469
-	}
470
-
471
-	if ($use_cache < 0) {
472
-		$chemin_cache = '';
473
-	}
474
-
475
-	return;
347
+    # fonction de cache minimale : dire "non on ne met rien en cache"
348
+    # $use_cache = -1; return;
349
+
350
+    // Second appel, destine a l'enregistrement du cache sur le disque
351
+    if (isset($chemin_cache)) {
352
+        return creer_cache($page, $chemin_cache);
353
+    }
354
+
355
+    // Toute la suite correspond au premier appel
356
+    $contexte_implicite = $page['contexte_implicite'];
357
+
358
+    // Cas ignorant le cache car completement dynamique
359
+    if (
360
+        (!empty($_SERVER['REQUEST_METHOD']) and $_SERVER['REQUEST_METHOD'] === 'POST')
361
+        or _request('connect')
362
+    ) {
363
+        $use_cache = -1;
364
+        $lastmodified = 0;
365
+        $chemin_cache = '';
366
+        $page = [];
367
+
368
+        return;
369
+    }
370
+
371
+    // Controler l'existence d'un cache nous correspondant
372
+    $chemin_cache = generer_nom_fichier_cache($contexte, $page);
373
+    $lastmodified = 0;
374
+
375
+    // charger le cache s'il existe (et si il a bien le bon hash = anticollision)
376
+    if (!$page = lire_cache($chemin_cache)) {
377
+        $page = [];
378
+    }
379
+
380
+    // s'il est sessionne, charger celui correspondant a notre session
381
+    if (
382
+        isset($page['invalideurs'])
383
+        and isset($page['invalideurs']['session'])
384
+    ) {
385
+        $chemin_cache_session = generer_nom_fichier_cache(
386
+            ['chemin_cache' => $chemin_cache],
387
+            ['session' => spip_session()]
388
+        );
389
+        if (
390
+            $page_session = lire_cache($chemin_cache_session)
391
+            and $page_session['lastmodified'] >= $page['lastmodified']
392
+        ) {
393
+            $page = $page_session;
394
+        } else {
395
+            $page = [];
396
+        }
397
+    }
398
+
399
+
400
+    // Faut-il effacer des pages invalidees (en particulier ce cache-ci) ?
401
+    if (isset($GLOBALS['meta']['invalider'])) {
402
+        // ne le faire que si la base est disponible
403
+        if (spip_connect()) {
404
+            include_spip('inc/invalideur');
405
+            retire_caches($chemin_cache); # API invalideur inutile
406
+            supprimer_fichier(_DIR_CACHE . $chemin_cache);
407
+            if (isset($chemin_cache_session) and $chemin_cache_session) {
408
+                supprimer_fichier(_DIR_CACHE . $chemin_cache_session);
409
+            }
410
+        }
411
+    }
412
+
413
+    // Si un calcul, recalcul [ou preview, mais c'est recalcul] est demande,
414
+    // on supprime le cache
415
+    if (
416
+        defined('_VAR_MODE') &&
417
+        _VAR_MODE &&
418
+        (isset($_COOKIE['spip_session']) ||
419
+            isset($_COOKIE['spip_admin']) ||
420
+            @file_exists(_ACCESS_FILE_NAME))
421
+    ) {
422
+        $page = ['contexte_implicite' => $contexte_implicite]; // ignorer le cache deja lu
423
+        include_spip('inc/invalideur');
424
+        retire_caches($chemin_cache); # API invalideur inutile
425
+        supprimer_fichier(_DIR_CACHE . $chemin_cache);
426
+        if (isset($chemin_cache_session) and $chemin_cache_session) {
427
+            supprimer_fichier(_DIR_CACHE . $chemin_cache_session);
428
+        }
429
+    }
430
+
431
+    // $delais par defaut
432
+    // pour toutes les pages sans #CACHE{} hors modeles/ et espace privé
433
+    // qui sont a cache nul par defaut
434
+    if (!isset($GLOBALS['delais'])) {
435
+        if (!defined('_DUREE_CACHE_DEFAUT')) {
436
+            define('_DUREE_CACHE_DEFAUT', 24 * 3600);
437
+        }
438
+        $GLOBALS['delais'] = _DUREE_CACHE_DEFAUT;
439
+    }
440
+
441
+    // determiner la validite de la page
442
+    if ($page) {
443
+        $use_cache = cache_valide($page, $page['lastmodified'] ?? 0);
444
+        // le contexte implicite n'est pas stocke dans le cache, mais il y a equivalence
445
+        // par le nom du cache. On le reinjecte donc ici pour utilisation eventuelle au calcul
446
+        $page['contexte_implicite'] = $contexte_implicite;
447
+        if (!$use_cache) {
448
+            // $page est un cache utilisable
449
+            gunzip_page($page);
450
+
451
+            return;
452
+        }
453
+    } else {
454
+        $page = ['contexte_implicite' => $contexte_implicite];
455
+        $use_cache = cache_valide($page, 0); // fichier cache absent : provoque le calcul
456
+    }
457
+
458
+    // Si pas valide mais pas de connexion a la base, le garder quand meme
459
+    if (!spip_connect()) {
460
+        if (isset($page['texte'])) {
461
+            gunzip_page($page);
462
+            $use_cache = 0;
463
+        } else {
464
+            spip_log("Erreur base de donnees, impossible utiliser $chemin_cache");
465
+            include_spip('inc/minipres');
466
+
467
+            return minipres(_T('info_travaux_titre'), _T('titre_probleme_technique'), ['status' => 503]);
468
+        }
469
+    }
470
+
471
+    if ($use_cache < 0) {
472
+        $chemin_cache = '';
473
+    }
474
+
475
+    return;
476 476
 }
Please login to merge, or discard this patch.
ecrire/public/references.php 1 patch
Indentation   +526 added lines, -526 removed lines patch added patch discarded remove patch
@@ -16,7 +16,7 @@  discard block
 block discarded – undo
16 16
  * @package SPIP\Core\Compilateur\References
17 17
  **/
18 18
 if (!defined('_ECRIRE_INC_VERSION')) {
19
-	return;
19
+    return;
20 20
 }
21 21
 
22 22
 /**
@@ -41,14 +41,14 @@  discard block
 block discarded – undo
41 41
  *     - '' si une référence explicite incorrecte est envoyée
42 42
  */
43 43
 function index_boucle($p) {
44
-	if (strlen($p->nom_boucle)) {
45
-		// retourne l’index explicite demandé s’il existe
46
-		if (!empty($p->boucles[$p->nom_boucle])) {
47
-			return $p->nom_boucle;
48
-		}
49
-		return '';
50
-	}
51
-	return $p->id_boucle;
44
+    if (strlen($p->nom_boucle)) {
45
+        // retourne l’index explicite demandé s’il existe
46
+        if (!empty($p->boucles[$p->nom_boucle])) {
47
+            return $p->nom_boucle;
48
+        }
49
+        return '';
50
+    }
51
+    return $p->id_boucle;
52 52
 }
53 53
 
54 54
 
@@ -71,17 +71,17 @@  discard block
 block discarded – undo
71 71
  *     - '' si une référence explicite incorrecte est envoyée
72 72
  */
73 73
 function index_boucle_mere($p) {
74
-	if (strlen($p->nom_boucle)) {
75
-		// retourne l’index explicite demandé s’il existe
76
-		if (!empty($p->boucles[$p->nom_boucle])) {
77
-			return $p->nom_boucle;
78
-		}
79
-		return '';
80
-	}
81
-	if (!empty($p->descr['id_mere'])) {
82
-		return $p->descr['id_mere'];
83
-	}
84
-	return '';
74
+    if (strlen($p->nom_boucle)) {
75
+        // retourne l’index explicite demandé s’il existe
76
+        if (!empty($p->boucles[$p->nom_boucle])) {
77
+            return $p->nom_boucle;
78
+        }
79
+        return '';
80
+    }
81
+    if (!empty($p->descr['id_mere'])) {
82
+        return $p->descr['id_mere'];
83
+    }
84
+    return '';
85 85
 }
86 86
 
87 87
 /**
@@ -115,74 +115,74 @@  discard block
 block discarded – undo
115 115
  *     Code PHP pour obtenir le champ SQL
116 116
  */
117 117
 function index_pile(
118
-	$idb,
119
-	$nom_champ,
120
-	&$boucles,
121
-	$explicite = '',
122
-	$defaut = null,
123
-	$remonte_pile = true,
124
-	$select = true
118
+    $idb,
119
+    $nom_champ,
120
+    &$boucles,
121
+    $explicite = '',
122
+    $defaut = null,
123
+    $remonte_pile = true,
124
+    $select = true
125 125
 ) {
126
-	if (!is_string($defaut)) {
127
-		$defaut = '($Pile[0][\'' . strtolower($nom_champ) . '\'] ?? null)';
128
-	}
129
-
130
-	$idb_origine = $idb;
131
-	$nom_champ_origine = $nom_champ;
132
-
133
-	$i = 0;
134
-	if (strlen($explicite)) {
135
-		// Recherche d'un champ dans un etage superieur
136
-		while (($idb !== $explicite) && ($idb !== '')) {
137
-			#	spip_log("Cherchexpl: $nom_champ '$explicite' '$idb' '$i'");
138
-			$i++;
139
-			$idb = $boucles[$idb]->id_parent;
140
-		}
141
-	}
142
-
143
-	#	spip_log("Cherche: $nom_champ a partir de '$idb'");
144
-	$nom_champ = strtolower($nom_champ);
145
-	$conditionnel = [];
146
-	// attention: entre la boucle nommee 0, "" et le tableau vide,
147
-	// il y a incoherences qu'il vaut mieux eviter
148
-	while (isset($boucles[$idb])) {
149
-		$joker = true;
150
-		// modifie $joker si tous les champs sont autorisés.
151
-		// $t = le select pour le champ, si on l'a trouvé (ou si joker)
152
-		// $c = le nom du champ demandé
153
-		[$t, $c] = index_tables_en_pile($idb, $nom_champ, $boucles, $joker);
154
-		if ($t) {
155
-			if ($select and !in_array($t, $boucles[$idb]->select)) {
156
-				$boucles[$idb]->select[] = $t;
157
-			}
158
-			// renseigner la boucle source de ce champ pour les traitements
159
-			$boucles[$idb_origine]->index_champ[$nom_champ_origine] = $idb;
160
-			$champ = '$Pile[$SP' . ($i ? "-$i" : '') . '][\'' . $c . '\']';
161
-			if (!$joker) {
162
-				return index_compose($conditionnel, $champ);
163
-			}
164
-
165
-			// tant que l'on trouve des tables avec joker, on continue
166
-			// avec la boucle parente et on conditionne à l'exécution
167
-			// la présence du champ. Si le champ existe à l'exécution
168
-			// dans une boucle, il est pris, sinon on le cherche dans le parent...
169
-			$conditionnel[] = "isset($champ)?$champ";
170
-		}
171
-
172
-		if ($remonte_pile) {
173
-			#	spip_log("On remonte vers $i");
174
-			// Sinon on remonte d'un cran
175
-			$idb = $boucles[$idb]->id_parent;
176
-			$i++;
177
-		} else {
178
-			$idb = null;
179
-		}
180
-	}
181
-
182
-	#	spip_log("Pas vu $nom_champ");
183
-	// esperons qu'il y sera
184
-	// ou qu'on a fourni une valeur par "defaut" plus pertinent
185
-	return index_compose($conditionnel, $defaut);
126
+    if (!is_string($defaut)) {
127
+        $defaut = '($Pile[0][\'' . strtolower($nom_champ) . '\'] ?? null)';
128
+    }
129
+
130
+    $idb_origine = $idb;
131
+    $nom_champ_origine = $nom_champ;
132
+
133
+    $i = 0;
134
+    if (strlen($explicite)) {
135
+        // Recherche d'un champ dans un etage superieur
136
+        while (($idb !== $explicite) && ($idb !== '')) {
137
+            #	spip_log("Cherchexpl: $nom_champ '$explicite' '$idb' '$i'");
138
+            $i++;
139
+            $idb = $boucles[$idb]->id_parent;
140
+        }
141
+    }
142
+
143
+    #	spip_log("Cherche: $nom_champ a partir de '$idb'");
144
+    $nom_champ = strtolower($nom_champ);
145
+    $conditionnel = [];
146
+    // attention: entre la boucle nommee 0, "" et le tableau vide,
147
+    // il y a incoherences qu'il vaut mieux eviter
148
+    while (isset($boucles[$idb])) {
149
+        $joker = true;
150
+        // modifie $joker si tous les champs sont autorisés.
151
+        // $t = le select pour le champ, si on l'a trouvé (ou si joker)
152
+        // $c = le nom du champ demandé
153
+        [$t, $c] = index_tables_en_pile($idb, $nom_champ, $boucles, $joker);
154
+        if ($t) {
155
+            if ($select and !in_array($t, $boucles[$idb]->select)) {
156
+                $boucles[$idb]->select[] = $t;
157
+            }
158
+            // renseigner la boucle source de ce champ pour les traitements
159
+            $boucles[$idb_origine]->index_champ[$nom_champ_origine] = $idb;
160
+            $champ = '$Pile[$SP' . ($i ? "-$i" : '') . '][\'' . $c . '\']';
161
+            if (!$joker) {
162
+                return index_compose($conditionnel, $champ);
163
+            }
164
+
165
+            // tant que l'on trouve des tables avec joker, on continue
166
+            // avec la boucle parente et on conditionne à l'exécution
167
+            // la présence du champ. Si le champ existe à l'exécution
168
+            // dans une boucle, il est pris, sinon on le cherche dans le parent...
169
+            $conditionnel[] = "isset($champ)?$champ";
170
+        }
171
+
172
+        if ($remonte_pile) {
173
+            #	spip_log("On remonte vers $i");
174
+            // Sinon on remonte d'un cran
175
+            $idb = $boucles[$idb]->id_parent;
176
+            $i++;
177
+        } else {
178
+            $idb = null;
179
+        }
180
+    }
181
+
182
+    #	spip_log("Pas vu $nom_champ");
183
+    // esperons qu'il y sera
184
+    // ou qu'on a fourni une valeur par "defaut" plus pertinent
185
+    return index_compose($conditionnel, $defaut);
186 186
 }
187 187
 
188 188
 /**
@@ -196,12 +196,12 @@  discard block
 block discarded – undo
196 196
  * @return string              Code PHP complet de recherche d'un champ
197 197
  */
198 198
 function index_compose($conditionnel, $defaut) {
199
-	while ($c = array_pop($conditionnel)) {
200
-		// si on passe defaut = '', ne pas générer d'erreur de compilation.
201
-		$defaut = "($c:(" . ($defaut ?: "''") . '))';
202
-	}
199
+    while ($c = array_pop($conditionnel)) {
200
+        // si on passe defaut = '', ne pas générer d'erreur de compilation.
201
+        $defaut = "($c:(" . ($defaut ?: "''") . '))';
202
+    }
203 203
 
204
-	return $defaut;
204
+    return $defaut;
205 205
 }
206 206
 
207 207
 /**
@@ -237,77 +237,77 @@  discard block
 block discarded – undo
237 237
  **/
238 238
 function index_tables_en_pile($idb, $nom_champ, &$boucles, &$joker) {
239 239
 
240
-	$r = $boucles[$idb]->type_requete;
241
-	// boucle recursive, c'est foutu...
242
-	if ($r == TYPE_RECURSIF) {
243
-		return [];
244
-	}
245
-	if (!$r) {
246
-		$joker = false; // indiquer a l'appelant
247
-		# continuer pour chercher l'erreur suivante
248
-		return ["'#" . $r . ':' . $nom_champ . "'", ''];
249
-	}
250
-
251
-	$desc = $boucles[$idb]->show;
252
-	// le nom du champ est il une exception de la table ? un alias ?
253
-	$excep = $GLOBALS['exceptions_des_tables'][$r] ?? '';
254
-	if ($excep) {
255
-		$excep = $excep[$nom_champ] ?? '';
256
-	}
257
-	if ($excep) {
258
-		$joker = false; // indiquer a l'appelant
259
-		return index_exception($boucles[$idb], $desc, $nom_champ, $excep);
260
-	} // pas d'alias. Le champ existe t'il ?
261
-	else {
262
-		// le champ est réellement présent, on le prend.
263
-		if (isset($desc['field'][$nom_champ])) {
264
-			$t = $boucles[$idb]->id_table;
265
-			$joker = false; // indiquer a l'appelant
266
-			return ["$t.$nom_champ", $nom_champ];
267
-		}
268
-		// Tous les champs sont-ils acceptés ?
269
-		// Si oui, on retourne le champ, et on lève le flag joker
270
-		// C'est le cas des itérateurs DATA qui acceptent tout
271
-		// et testent la présence du champ à l'exécution et non à la compilation
272
-		// car ils ne connaissent pas ici leurs contenus.
273
-		elseif (
240
+    $r = $boucles[$idb]->type_requete;
241
+    // boucle recursive, c'est foutu...
242
+    if ($r == TYPE_RECURSIF) {
243
+        return [];
244
+    }
245
+    if (!$r) {
246
+        $joker = false; // indiquer a l'appelant
247
+        # continuer pour chercher l'erreur suivante
248
+        return ["'#" . $r . ':' . $nom_champ . "'", ''];
249
+    }
250
+
251
+    $desc = $boucles[$idb]->show;
252
+    // le nom du champ est il une exception de la table ? un alias ?
253
+    $excep = $GLOBALS['exceptions_des_tables'][$r] ?? '';
254
+    if ($excep) {
255
+        $excep = $excep[$nom_champ] ?? '';
256
+    }
257
+    if ($excep) {
258
+        $joker = false; // indiquer a l'appelant
259
+        return index_exception($boucles[$idb], $desc, $nom_champ, $excep);
260
+    } // pas d'alias. Le champ existe t'il ?
261
+    else {
262
+        // le champ est réellement présent, on le prend.
263
+        if (isset($desc['field'][$nom_champ])) {
264
+            $t = $boucles[$idb]->id_table;
265
+            $joker = false; // indiquer a l'appelant
266
+            return ["$t.$nom_champ", $nom_champ];
267
+        }
268
+        // Tous les champs sont-ils acceptés ?
269
+        // Si oui, on retourne le champ, et on lève le flag joker
270
+        // C'est le cas des itérateurs DATA qui acceptent tout
271
+        // et testent la présence du champ à l'exécution et non à la compilation
272
+        // car ils ne connaissent pas ici leurs contenus.
273
+        elseif (
274 274
 /*$joker AND */
275
-			isset($desc['field']['*'])
276
-		) {
277
-			$joker = true; // indiquer a l'appelant
278
-			return [$nom_champ, $nom_champ];
279
-		}
280
-		// pas d'alias, pas de champ, pas de joker...
281
-		// tenter via une jointure...
282
-		else {
283
-			$joker = false; // indiquer a l'appelant
284
-			// regarder si le champ est deja dans une jointure existante
285
-			// sinon, si il y a des joitures explicites, la construire
286
-			if (!$t = trouver_champ_exterieur($nom_champ, $boucles[$idb]->from, $boucles[$idb])) {
287
-				if ($boucles[$idb]->jointures_explicites) {
288
-					// [todo] Ne pas lancer que lorsque il y a des jointures explicites !!!!
289
-					// fonctionnel, il suffit d'utiliser $boucles[$idb]->jointures au lieu de jointures_explicites
290
-					// mais est-ce ce qu'on veut ?
291
-					$jointures = preg_split('/\s+/', $boucles[$idb]->jointures_explicites);
292
-					if ($cle = trouver_jointure_champ($nom_champ, $boucles[$idb], $jointures)) {
293
-						$t = trouver_champ_exterieur($nom_champ, $boucles[$idb]->from, $boucles[$idb]);
294
-					}
295
-				}
296
-			}
297
-			if ($t) {
298
-				// si on a trouvé une jointure possible, on fait comme
299
-				// si c'était une exception pour le champ demandé
300
-				return index_exception(
301
-					$boucles[$idb],
302
-					$desc,
303
-					$nom_champ,
304
-					[$t[1]['id_table'], reset($t[2])]
305
-				);
306
-			}
307
-
308
-			return ['', ''];
309
-		}
310
-	}
275
+            isset($desc['field']['*'])
276
+        ) {
277
+            $joker = true; // indiquer a l'appelant
278
+            return [$nom_champ, $nom_champ];
279
+        }
280
+        // pas d'alias, pas de champ, pas de joker...
281
+        // tenter via une jointure...
282
+        else {
283
+            $joker = false; // indiquer a l'appelant
284
+            // regarder si le champ est deja dans une jointure existante
285
+            // sinon, si il y a des joitures explicites, la construire
286
+            if (!$t = trouver_champ_exterieur($nom_champ, $boucles[$idb]->from, $boucles[$idb])) {
287
+                if ($boucles[$idb]->jointures_explicites) {
288
+                    // [todo] Ne pas lancer que lorsque il y a des jointures explicites !!!!
289
+                    // fonctionnel, il suffit d'utiliser $boucles[$idb]->jointures au lieu de jointures_explicites
290
+                    // mais est-ce ce qu'on veut ?
291
+                    $jointures = preg_split('/\s+/', $boucles[$idb]->jointures_explicites);
292
+                    if ($cle = trouver_jointure_champ($nom_champ, $boucles[$idb], $jointures)) {
293
+                        $t = trouver_champ_exterieur($nom_champ, $boucles[$idb]->from, $boucles[$idb]);
294
+                    }
295
+                }
296
+            }
297
+            if ($t) {
298
+                // si on a trouvé une jointure possible, on fait comme
299
+                // si c'était une exception pour le champ demandé
300
+                return index_exception(
301
+                    $boucles[$idb],
302
+                    $desc,
303
+                    $nom_champ,
304
+                    [$t[1]['id_table'], reset($t[2])]
305
+                );
306
+            }
307
+
308
+            return ['', ''];
309
+        }
310
+    }
311 311
 }
312 312
 
313 313
 
@@ -335,52 +335,52 @@  discard block
 block discarded – undo
335 335
  *     est une expression pour le SELECT de la boucle du style "mots.titre AS titre_mot"
336 336
  **/
337 337
 function index_exception(&$boucle, $desc, $nom_champ, $excep) {
338
-	static $trouver_table;
339
-	if (!$trouver_table) {
340
-		$trouver_table = charger_fonction('trouver_table', 'base');
341
-	}
342
-
343
-	if (is_array($excep)) {
344
-		// permettre aux plugins de gerer eux meme des jointures derogatoire ingerables
345
-		$t = null;
346
-		if (count($excep) == 3) {
347
-			$index_exception_derogatoire = array_pop($excep);
348
-			$t = $index_exception_derogatoire($boucle, $desc, $nom_champ, $excep);
349
-		}
350
-		if ($t == null) {
351
-			[$e, $x] = $excep;  #PHP4 affecte de gauche a droite
352
-			$excep = $x;    #PHP5 de droite a gauche !
353
-			$j = $trouver_table($e, $boucle->sql_serveur);
354
-			if (!$j) {
355
-				return ['', ''];
356
-			}
357
-			$e = $j['table'];
358
-			if (!$t = array_search($e, $boucle->from)) {
359
-				$k = $j['key']['PRIMARY KEY'];
360
-				if (strpos($k, ',')) {
361
-					$l = (preg_split('/\s*,\s*/', $k));
362
-					$k = $desc['key']['PRIMARY KEY'];
363
-					if (!in_array($k, $l)) {
364
-						spip_log("jointure impossible $e " . join(',', $l));
365
-
366
-						return ['', ''];
367
-					}
368
-				}
369
-				$k = [$boucle->id_table, [$e], $k];
370
-				fabrique_jointures($boucle, [$k]);
371
-				$t = array_search($e, $boucle->from);
372
-			}
373
-		}
374
-	} else {
375
-		$t = $boucle->id_table;
376
-	}
377
-	// demander a SQL de gerer le synonyme
378
-	// ca permet que excep soit dynamique (Cedric, 2/3/06)
379
-	if ($excep != $nom_champ) {
380
-		$excep .= ' AS ' . $nom_champ;
381
-	}
382
-
383
-	return ["$t.$excep", $nom_champ];
338
+    static $trouver_table;
339
+    if (!$trouver_table) {
340
+        $trouver_table = charger_fonction('trouver_table', 'base');
341
+    }
342
+
343
+    if (is_array($excep)) {
344
+        // permettre aux plugins de gerer eux meme des jointures derogatoire ingerables
345
+        $t = null;
346
+        if (count($excep) == 3) {
347
+            $index_exception_derogatoire = array_pop($excep);
348
+            $t = $index_exception_derogatoire($boucle, $desc, $nom_champ, $excep);
349
+        }
350
+        if ($t == null) {
351
+            [$e, $x] = $excep;  #PHP4 affecte de gauche a droite
352
+            $excep = $x;    #PHP5 de droite a gauche !
353
+            $j = $trouver_table($e, $boucle->sql_serveur);
354
+            if (!$j) {
355
+                return ['', ''];
356
+            }
357
+            $e = $j['table'];
358
+            if (!$t = array_search($e, $boucle->from)) {
359
+                $k = $j['key']['PRIMARY KEY'];
360
+                if (strpos($k, ',')) {
361
+                    $l = (preg_split('/\s*,\s*/', $k));
362
+                    $k = $desc['key']['PRIMARY KEY'];
363
+                    if (!in_array($k, $l)) {
364
+                        spip_log("jointure impossible $e " . join(',', $l));
365
+
366
+                        return ['', ''];
367
+                    }
368
+                }
369
+                $k = [$boucle->id_table, [$e], $k];
370
+                fabrique_jointures($boucle, [$k]);
371
+                $t = array_search($e, $boucle->from);
372
+            }
373
+        }
374
+    } else {
375
+        $t = $boucle->id_table;
376
+    }
377
+    // demander a SQL de gerer le synonyme
378
+    // ca permet que excep soit dynamique (Cedric, 2/3/06)
379
+    if ($excep != $nom_champ) {
380
+        $excep .= ' AS ' . $nom_champ;
381
+    }
382
+
383
+    return ["$t.$excep", $nom_champ];
384 384
 }
385 385
 
386 386
 /**
@@ -405,7 +405,7 @@  discard block
 block discarded – undo
405 405
  *     Code PHP pour retrouver le champ
406 406
  */
407 407
 function champ_sql($champ, $p, $defaut = null, $remonte_pile = true) {
408
-	return index_pile($p->id_boucle, $champ, $p->boucles, $p->nom_boucle, $defaut, $remonte_pile);
408
+    return index_pile($p->id_boucle, $champ, $p->boucles, $p->nom_boucle, $defaut, $remonte_pile);
409 409
 }
410 410
 
411 411
 
@@ -425,9 +425,9 @@  discard block
 block discarded – undo
425 425
  *     Code PHP pour d'exécution de la balise et de ses filtres
426 426
  **/
427 427
 function calculer_champ($p) {
428
-	$p = calculer_balise($p->nom_champ, $p);
428
+    $p = calculer_balise($p->nom_champ, $p);
429 429
 
430
-	return applique_filtres($p);
430
+    return applique_filtres($p);
431 431
 }
432 432
 
433 433
 
@@ -464,26 +464,26 @@  discard block
 block discarded – undo
464 464
  **/
465 465
 function calculer_balise(string $nom, \Champ $p): \Champ {
466 466
 
467
-	// S'agit-t-il d'une balise_XXXX[_dist]() ?
468
-	if ($f = charger_fonction($nom, 'balise', true)) {
469
-		$p->balise_calculee = true;
470
-		$res = $f($p);
471
-		if ($res !== null and is_object($res)) {
472
-			return $res;
473
-		}
474
-	}
475
-
476
-	// Certaines des balises comportant un _ sont generiques
477
-	if ($balise_generique = chercher_balise_generique($nom)) {
478
-		$res = $balise_generique['fonction_generique']($p);
479
-		if ($res !== null and is_object($res)) {
480
-			return $res;
481
-		}
482
-	}
483
-
484
-	$f = charger_fonction('DEFAUT', 'calculer_balise');
485
-
486
-	return $f($nom, $p);
467
+    // S'agit-t-il d'une balise_XXXX[_dist]() ?
468
+    if ($f = charger_fonction($nom, 'balise', true)) {
469
+        $p->balise_calculee = true;
470
+        $res = $f($p);
471
+        if ($res !== null and is_object($res)) {
472
+            return $res;
473
+        }
474
+    }
475
+
476
+    // Certaines des balises comportant un _ sont generiques
477
+    if ($balise_generique = chercher_balise_generique($nom)) {
478
+        $res = $balise_generique['fonction_generique']($p);
479
+        if ($res !== null and is_object($res)) {
480
+            return $res;
481
+        }
482
+    }
483
+
484
+    $f = charger_fonction('DEFAUT', 'calculer_balise');
485
+
486
+    return $f($nom, $p);
487 487
 }
488 488
 
489 489
 
@@ -511,37 +511,37 @@  discard block
 block discarded – undo
511 511
  **/
512 512
 function calculer_balise_DEFAUT_dist($nom, $p) {
513 513
 
514
-	// ca pourrait etre un champ SQL homonyme,
515
-	$p->code = index_pile($p->id_boucle, $nom, $p->boucles, $p->nom_boucle);
516
-
517
-	// compatibilite: depuis qu'on accepte #BALISE{ses_args} sans [(...)] autour
518
-	// il faut recracher {...} quand ce n'est finalement pas des args
519
-	if ($p->fonctions and (!$p->fonctions[0][0]) and $p->fonctions[0][1]) {
520
-		$code = addslashes($p->fonctions[0][1]);
521
-		$p->code .= " . '$code'";
522
-	}
523
-
524
-	// ne pas passer le filtre securite sur les id_xxx
525
-	if (strpos($nom, 'ID_') === 0) {
526
-		$p->interdire_scripts = false;
527
-	}
528
-
529
-	// Compatibilite ascendante avec les couleurs html (#FEFEFE) :
530
-	// SI le champ SQL n'est pas trouve
531
-	// ET si la balise a une forme de couleur
532
-	// ET s'il n'y a ni filtre ni etoile
533
-	// ALORS retourner la couleur.
534
-	// Ca permet si l'on veut vraiment de recuperer [(#ACCEDE*)]
535
-	if (
536
-		preg_match('/^[A-F]{1,6}$/i', $nom)
537
-		and !$p->etoile
538
-		and !$p->fonctions
539
-	) {
540
-		$p->code = "'#$nom'";
541
-		$p->interdire_scripts = false;
542
-	}
543
-
544
-	return $p;
514
+    // ca pourrait etre un champ SQL homonyme,
515
+    $p->code = index_pile($p->id_boucle, $nom, $p->boucles, $p->nom_boucle);
516
+
517
+    // compatibilite: depuis qu'on accepte #BALISE{ses_args} sans [(...)] autour
518
+    // il faut recracher {...} quand ce n'est finalement pas des args
519
+    if ($p->fonctions and (!$p->fonctions[0][0]) and $p->fonctions[0][1]) {
520
+        $code = addslashes($p->fonctions[0][1]);
521
+        $p->code .= " . '$code'";
522
+    }
523
+
524
+    // ne pas passer le filtre securite sur les id_xxx
525
+    if (strpos($nom, 'ID_') === 0) {
526
+        $p->interdire_scripts = false;
527
+    }
528
+
529
+    // Compatibilite ascendante avec les couleurs html (#FEFEFE) :
530
+    // SI le champ SQL n'est pas trouve
531
+    // ET si la balise a une forme de couleur
532
+    // ET s'il n'y a ni filtre ni etoile
533
+    // ALORS retourner la couleur.
534
+    // Ca permet si l'on veut vraiment de recuperer [(#ACCEDE*)]
535
+    if (
536
+        preg_match('/^[A-F]{1,6}$/i', $nom)
537
+        and !$p->etoile
538
+        and !$p->fonctions
539
+    ) {
540
+        $p->code = "'#$nom'";
541
+        $p->interdire_scripts = false;
542
+    }
543
+
544
+    return $p;
545 545
 }
546 546
 
547 547
 
@@ -584,39 +584,39 @@  discard block
 block discarded – undo
584 584
  **/
585 585
 function calculer_balise_dynamique($p, $nom, $l, $supp = []) {
586 586
 
587
-	if (!balise_distante_interdite($p)) {
588
-		$p->code = "''";
589
-
590
-		return $p;
591
-	}
592
-	// compatibilite: depuis qu'on accepte #BALISE{ses_args} sans [(...)] autour
593
-	// il faut recracher {...} quand ce n'est finalement pas des args
594
-	if ($p->fonctions and (!$p->fonctions[0][0]) and $p->fonctions[0][1]) {
595
-		$p->fonctions = null;
596
-	}
597
-
598
-	if ($p->param and ($c = $p->param[0])) {
599
-		// liste d'arguments commence toujours par la chaine vide
600
-		array_shift($c);
601
-		// construire la liste d'arguments comme pour un filtre
602
-		$param = compose_filtres_args($p, $c, ',');
603
-	} else {
604
-		$param = '';
605
-	}
606
-	$collecte = collecter_balise_dynamique($l, $p, $nom);
607
-
608
-	$p->code = sprintf(
609
-		CODE_EXECUTER_BALISE,
610
-		$nom,
611
-		join(',', $collecte),
612
-		($collecte ? $param : substr($param, 1)), # virer la virgule
613
-		memoriser_contexte_compil($p),
614
-		(!$supp ? '' : (', ' . join(',', $supp)))
615
-	);
616
-
617
-	$p->interdire_scripts = false;
618
-
619
-	return $p;
587
+    if (!balise_distante_interdite($p)) {
588
+        $p->code = "''";
589
+
590
+        return $p;
591
+    }
592
+    // compatibilite: depuis qu'on accepte #BALISE{ses_args} sans [(...)] autour
593
+    // il faut recracher {...} quand ce n'est finalement pas des args
594
+    if ($p->fonctions and (!$p->fonctions[0][0]) and $p->fonctions[0][1]) {
595
+        $p->fonctions = null;
596
+    }
597
+
598
+    if ($p->param and ($c = $p->param[0])) {
599
+        // liste d'arguments commence toujours par la chaine vide
600
+        array_shift($c);
601
+        // construire la liste d'arguments comme pour un filtre
602
+        $param = compose_filtres_args($p, $c, ',');
603
+    } else {
604
+        $param = '';
605
+    }
606
+    $collecte = collecter_balise_dynamique($l, $p, $nom);
607
+
608
+    $p->code = sprintf(
609
+        CODE_EXECUTER_BALISE,
610
+        $nom,
611
+        join(',', $collecte),
612
+        ($collecte ? $param : substr($param, 1)), # virer la virgule
613
+        memoriser_contexte_compil($p),
614
+        (!$supp ? '' : (', ' . join(',', $supp)))
615
+    );
616
+
617
+    $p->interdire_scripts = false;
618
+
619
+    return $p;
620 620
 }
621 621
 
622 622
 
@@ -646,17 +646,17 @@  discard block
 block discarded – undo
646 646
  *     Liste des codes PHP d'éxecution des balises collectées
647 647
  **/
648 648
 function collecter_balise_dynamique(array $l, \Champ &$p, string $nom): array {
649
-	$args = [];
650
-	foreach ($l as $c) {
651
-		if ($c === null) {
652
-			$args[] = 'null';
653
-		} else {
654
-			$x = calculer_balise($c, $p);
655
-			$args[] = $x->code;
656
-		}
657
-	}
658
-
659
-	return $args;
649
+    $args = [];
650
+    foreach ($l as $c) {
651
+        if ($c === null) {
652
+            $args[] = 'null';
653
+        } else {
654
+            $x = calculer_balise($c, $p);
655
+            $args[] = $x->code;
656
+        }
657
+    }
658
+
659
+    return $args;
660 660
 }
661 661
 
662 662
 
@@ -671,22 +671,22 @@  discard block
 block discarded – undo
671 671
  *     Nom de la connexion
672 672
  **/
673 673
 function trouver_nom_serveur_distant($p) {
674
-	$nom = $p->id_boucle;
675
-	if (
676
-		$nom
677
-		and isset($p->boucles[$nom])
678
-	) {
679
-		$s = $p->boucles[$nom]->sql_serveur;
680
-		if (
681
-			strlen($s)
682
-			and strlen($serveur = strtolower($s))
683
-			and !in_array($serveur, $GLOBALS['exception_des_connect'])
684
-		) {
685
-			return $serveur;
686
-		}
687
-	}
688
-
689
-	return '';
674
+    $nom = $p->id_boucle;
675
+    if (
676
+        $nom
677
+        and isset($p->boucles[$nom])
678
+    ) {
679
+        $s = $p->boucles[$nom]->sql_serveur;
680
+        if (
681
+            strlen($s)
682
+            and strlen($serveur = strtolower($s))
683
+            and !in_array($serveur, $GLOBALS['exception_des_connect'])
684
+        ) {
685
+            return $serveur;
686
+        }
687
+    }
688
+
689
+    return '';
690 690
 }
691 691
 
692 692
 
@@ -710,15 +710,15 @@  discard block
 block discarded – undo
710 710
  *     - false : La balise est interdite car le serveur est distant
711 711
  **/
712 712
 function balise_distante_interdite($p) {
713
-	$nom = $p->id_boucle;
713
+    $nom = $p->id_boucle;
714 714
 
715
-	if ($nom and trouver_nom_serveur_distant($p)) {
716
-		spip_log($nom . ':' . $p->nom_champ . ' ' . _T('zbug_distant_interdit'));
715
+    if ($nom and trouver_nom_serveur_distant($p)) {
716
+        spip_log($nom . ':' . $p->nom_champ . ' ' . _T('zbug_distant_interdit'));
717 717
 
718
-		return false;
719
-	}
718
+        return false;
719
+    }
720 720
 
721
-	return true;
721
+    return true;
722 722
 }
723 723
 
724 724
 
@@ -728,84 +728,84 @@  discard block
 block discarded – undo
728 728
 //
729 729
 function champs_traitements($p) {
730 730
 
731
-	if (isset($GLOBALS['table_des_traitements'][$p->nom_champ])) {
732
-		$ps = $GLOBALS['table_des_traitements'][$p->nom_champ];
733
-	} else {
734
-		// quand on utilise un traitement catch-all *
735
-		// celui-ci ne s'applique pas sur les balises calculees qui peuvent gerer
736
-		// leur propre securite
737
-		if (!$p->balise_calculee) {
738
-			$ps = $GLOBALS['table_des_traitements']['*'];
739
-		} else {
740
-			$ps = false;
741
-		}
742
-	}
743
-
744
-	if (is_array($ps)) {
745
-		// Recuperer le type de boucle (articles, DATA) et la table SQL sur laquelle elle porte
746
-		$idb = index_boucle($p);
747
-		// si le champ a ete trouve dans une boucle parente sa source est renseignee ici
748
-		if (!empty($p->boucles[$idb]->index_champ[$p->nom_champ])) {
749
-			$idb = $p->boucles[$idb]->index_champ[$p->nom_champ];
750
-		}
751
-
752
-		// mais on peut aussi etre hors boucle. Se mefier.
753
-		$type_requete = $p->boucles[$idb]->type_requete ?? false;
754
-		$table_sql = $p->boucles[$idb]->show['table_sql'] ?? false;
755
-
756
-		// bien prendre en compte les alias de boucles (hierarchie => rubrique, syndication => syncdic, etc.)
757
-		if ($type_requete and isset($GLOBALS['table_des_tables'][$type_requete])) {
758
-			$type_alias = $type_requete;
759
-			$type_requete = $GLOBALS['table_des_tables'][$type_requete];
760
-		} else {
761
-			$type_alias = false;
762
-		}
763
-
764
-		// le traitement peut n'etre defini que pour une table en particulier "spip_articles"
765
-		if ($table_sql and isset($ps[$table_sql])) {
766
-			$ps = $ps[$table_sql];
767
-		} // ou pour une boucle en particulier "DATA","articles"
768
-		elseif ($type_requete and isset($ps[$type_requete])) {
769
-			$ps = $ps[$type_requete];
770
-		} // ou pour une boucle utilisant un alias ("hierarchie")
771
-		elseif ($type_alias and isset($ps[$type_alias])) {
772
-			$ps = $ps[$type_alias];
773
-		} // ou pour indifféremment quelle que soit la boucle
774
-		elseif (isset($ps[0])) {
775
-			$ps = $ps[0];
776
-		} else {
777
-			$ps = false;
778
-		}
779
-	}
780
-
781
-	if (!$ps) {
782
-		return $p->code;
783
-	}
784
-
785
-	// Si une boucle DOCUMENTS{doublons} est presente dans le squelette,
786
-	// ou si in INCLURE contient {doublons}
787
-	// on insere une fonction de remplissage du tableau des doublons
788
-	// dans les filtres propre() ou typo()
789
-	// (qui traitent les raccourcis <docXX> referencant les docs)
790
-
791
-	if (
792
-		isset($p->descr['documents'])
793
-		and
794
-		$p->descr['documents']
795
-		and (
796
-			(strpos($ps, 'propre') !== false)
797
-			or
798
-			(strpos($ps, 'typo') !== false)
799
-		)
800
-	) {
801
-		$ps = 'traiter_doublons_documents($doublons, ' . $ps . ')';
802
-	}
803
-
804
-	// La protection des champs par |safehtml est assuree par les extensions
805
-	// dans la declaration des traitements des champs sensibles
806
-
807
-	// Remplacer enfin le placeholder %s par le vrai code de la balise
808
-	return str_replace('%s', $p->code, $ps);
731
+    if (isset($GLOBALS['table_des_traitements'][$p->nom_champ])) {
732
+        $ps = $GLOBALS['table_des_traitements'][$p->nom_champ];
733
+    } else {
734
+        // quand on utilise un traitement catch-all *
735
+        // celui-ci ne s'applique pas sur les balises calculees qui peuvent gerer
736
+        // leur propre securite
737
+        if (!$p->balise_calculee) {
738
+            $ps = $GLOBALS['table_des_traitements']['*'];
739
+        } else {
740
+            $ps = false;
741
+        }
742
+    }
743
+
744
+    if (is_array($ps)) {
745
+        // Recuperer le type de boucle (articles, DATA) et la table SQL sur laquelle elle porte
746
+        $idb = index_boucle($p);
747
+        // si le champ a ete trouve dans une boucle parente sa source est renseignee ici
748
+        if (!empty($p->boucles[$idb]->index_champ[$p->nom_champ])) {
749
+            $idb = $p->boucles[$idb]->index_champ[$p->nom_champ];
750
+        }
751
+
752
+        // mais on peut aussi etre hors boucle. Se mefier.
753
+        $type_requete = $p->boucles[$idb]->type_requete ?? false;
754
+        $table_sql = $p->boucles[$idb]->show['table_sql'] ?? false;
755
+
756
+        // bien prendre en compte les alias de boucles (hierarchie => rubrique, syndication => syncdic, etc.)
757
+        if ($type_requete and isset($GLOBALS['table_des_tables'][$type_requete])) {
758
+            $type_alias = $type_requete;
759
+            $type_requete = $GLOBALS['table_des_tables'][$type_requete];
760
+        } else {
761
+            $type_alias = false;
762
+        }
763
+
764
+        // le traitement peut n'etre defini que pour une table en particulier "spip_articles"
765
+        if ($table_sql and isset($ps[$table_sql])) {
766
+            $ps = $ps[$table_sql];
767
+        } // ou pour une boucle en particulier "DATA","articles"
768
+        elseif ($type_requete and isset($ps[$type_requete])) {
769
+            $ps = $ps[$type_requete];
770
+        } // ou pour une boucle utilisant un alias ("hierarchie")
771
+        elseif ($type_alias and isset($ps[$type_alias])) {
772
+            $ps = $ps[$type_alias];
773
+        } // ou pour indifféremment quelle que soit la boucle
774
+        elseif (isset($ps[0])) {
775
+            $ps = $ps[0];
776
+        } else {
777
+            $ps = false;
778
+        }
779
+    }
780
+
781
+    if (!$ps) {
782
+        return $p->code;
783
+    }
784
+
785
+    // Si une boucle DOCUMENTS{doublons} est presente dans le squelette,
786
+    // ou si in INCLURE contient {doublons}
787
+    // on insere une fonction de remplissage du tableau des doublons
788
+    // dans les filtres propre() ou typo()
789
+    // (qui traitent les raccourcis <docXX> referencant les docs)
790
+
791
+    if (
792
+        isset($p->descr['documents'])
793
+        and
794
+        $p->descr['documents']
795
+        and (
796
+            (strpos($ps, 'propre') !== false)
797
+            or
798
+            (strpos($ps, 'typo') !== false)
799
+        )
800
+    ) {
801
+        $ps = 'traiter_doublons_documents($doublons, ' . $ps . ')';
802
+    }
803
+
804
+    // La protection des champs par |safehtml est assuree par les extensions
805
+    // dans la declaration des traitements des champs sensibles
806
+
807
+    // Remplacer enfin le placeholder %s par le vrai code de la balise
808
+    return str_replace('%s', $p->code, $ps);
809 809
 }
810 810
 
811 811
 
@@ -817,110 +817,110 @@  discard block
 block discarded – undo
817 817
 //
818 818
 function applique_filtres($p) {
819 819
 
820
-	// Traitements standards (cf. supra)
821
-	if ($p->etoile == '') {
822
-		$code = champs_traitements($p);
823
-	} else {
824
-		$code = $p->code;
825
-	}
820
+    // Traitements standards (cf. supra)
821
+    if ($p->etoile == '') {
822
+        $code = champs_traitements($p);
823
+    } else {
824
+        $code = $p->code;
825
+    }
826 826
 
827
-	// Appliquer les filtres perso
828
-	if ($p->param) {
829
-		$code = compose_filtres($p, $code);
830
-	}
827
+    // Appliquer les filtres perso
828
+    if ($p->param) {
829
+        $code = compose_filtres($p, $code);
830
+    }
831 831
 
832
-	// S'il y a un lien avec la session, ajouter un code qui levera
833
-	// un drapeau dans la structure d'invalidation $Cache
834
-	if (isset($p->descr['session'])) {
835
-		$code = "invalideur_session(\$Cache, $code)";
836
-	}
832
+    // S'il y a un lien avec la session, ajouter un code qui levera
833
+    // un drapeau dans la structure d'invalidation $Cache
834
+    if (isset($p->descr['session'])) {
835
+        $code = "invalideur_session(\$Cache, $code)";
836
+    }
837 837
 
838
-	$code = sandbox_composer_interdire_scripts($code, $p);
838
+    $code = sandbox_composer_interdire_scripts($code, $p);
839 839
 
840
-	return $code;
840
+    return $code;
841 841
 }
842 842
 
843 843
 // Cf. function pipeline dans ecrire/inc_utils.php
844 844
 function compose_filtres(&$p, $code) {
845 845
 
846
-	$image_miette = false;
847
-	foreach ($p->param as $filtre) {
848
-		$fonc = array_shift($filtre);
849
-		if (!$fonc) {
850
-			continue;
851
-		} // normalement qu'au premier tour.
852
-		$is_filtre_image = ((substr($fonc, 0, 6) == 'image_') and $fonc != 'image_graver');
853
-		if ($image_miette and !$is_filtre_image) {
854
-			// il faut graver maintenant car apres le filtre en cours
855
-			// on est pas sur d'avoir encore le nom du fichier dans le pipe
856
-			$code = "filtrer('image_graver', $code)";
857
-			$image_miette = false;
858
-		}
859
-
860
-		// recuperer les arguments du filtre,
861
-		// a separer par "," ou ":" dans le cas du filtre "?{a,b}"
862
-		$countfiltre = is_countable($filtre) ? count($filtre) : 0;
863
-		if ($fonc !== '?') {
864
-			$sep = ',';
865
-		} else {
866
-			$sep = ':';
867
-			// |?{a,b} *doit* avoir exactement 2 arguments ; on les force
868
-			if ($countfiltre != 2) {
869
-				$filtre = [$filtre[0] ?? '', $filtre[1] ?? ''];
870
-				$countfiltre = 2;
871
-			}
872
-		}
873
-		$arglist = compose_filtres_args($p, $filtre, $sep);
874
-		$logique = filtre_logique($fonc, $code, substr($arglist, 1));
875
-		if ($logique) {
876
-			$code = $logique;
877
-		} else {
878
-			$code = sandbox_composer_filtre($fonc, $code, $arglist, $p, $countfiltre);
879
-			if ($is_filtre_image) {
880
-				$image_miette = true;
881
-			}
882
-		}
883
-	}
884
-	// ramasser les images intermediaires inutiles et graver l'image finale
885
-	if ($image_miette) {
886
-		$code = "filtrer('image_graver',$code)";
887
-	}
888
-
889
-	return $code;
846
+    $image_miette = false;
847
+    foreach ($p->param as $filtre) {
848
+        $fonc = array_shift($filtre);
849
+        if (!$fonc) {
850
+            continue;
851
+        } // normalement qu'au premier tour.
852
+        $is_filtre_image = ((substr($fonc, 0, 6) == 'image_') and $fonc != 'image_graver');
853
+        if ($image_miette and !$is_filtre_image) {
854
+            // il faut graver maintenant car apres le filtre en cours
855
+            // on est pas sur d'avoir encore le nom du fichier dans le pipe
856
+            $code = "filtrer('image_graver', $code)";
857
+            $image_miette = false;
858
+        }
859
+
860
+        // recuperer les arguments du filtre,
861
+        // a separer par "," ou ":" dans le cas du filtre "?{a,b}"
862
+        $countfiltre = is_countable($filtre) ? count($filtre) : 0;
863
+        if ($fonc !== '?') {
864
+            $sep = ',';
865
+        } else {
866
+            $sep = ':';
867
+            // |?{a,b} *doit* avoir exactement 2 arguments ; on les force
868
+            if ($countfiltre != 2) {
869
+                $filtre = [$filtre[0] ?? '', $filtre[1] ?? ''];
870
+                $countfiltre = 2;
871
+            }
872
+        }
873
+        $arglist = compose_filtres_args($p, $filtre, $sep);
874
+        $logique = filtre_logique($fonc, $code, substr($arglist, 1));
875
+        if ($logique) {
876
+            $code = $logique;
877
+        } else {
878
+            $code = sandbox_composer_filtre($fonc, $code, $arglist, $p, $countfiltre);
879
+            if ($is_filtre_image) {
880
+                $image_miette = true;
881
+            }
882
+        }
883
+    }
884
+    // ramasser les images intermediaires inutiles et graver l'image finale
885
+    if ($image_miette) {
886
+        $code = "filtrer('image_graver',$code)";
887
+    }
888
+
889
+    return $code;
890 890
 }
891 891
 
892 892
 // Filtres et,ou,oui,non,sinon,xou,xor,and,or,not,yes
893 893
 // et comparateurs
894 894
 function filtre_logique($fonc, $code, $arg) {
895 895
 
896
-	switch (true) {
897
-		case in_array($fonc, $GLOBALS['table_criteres_infixes']):
898
-			return "($code $fonc $arg)";
899
-		case ($fonc == 'and') or ($fonc == 'et'):
900
-			return "((($code) AND ($arg)) ?' ' :'')";
901
-		case ($fonc == 'or') or ($fonc == 'ou'):
902
-			return "((($code) OR ($arg)) ?' ' :'')";
903
-		case ($fonc == 'xor') or ($fonc == 'xou'):
904
-			return "((($code) XOR ($arg)) ?' ' :'')";
905
-		case ($fonc == 'sinon'):
906
-			return "(((\$a = $code) OR (is_string(\$a) AND strlen(\$a))) ? \$a : $arg)";
907
-		case ($fonc == 'not') or ($fonc == 'non'):
908
-			return "(($code) ?'' :' ')";
909
-		case ($fonc == 'yes') or ($fonc == 'oui'):
910
-			return "(($code) ?' ' :'')";
911
-	}
912
-
913
-	return '';
896
+    switch (true) {
897
+        case in_array($fonc, $GLOBALS['table_criteres_infixes']):
898
+            return "($code $fonc $arg)";
899
+        case ($fonc == 'and') or ($fonc == 'et'):
900
+            return "((($code) AND ($arg)) ?' ' :'')";
901
+        case ($fonc == 'or') or ($fonc == 'ou'):
902
+            return "((($code) OR ($arg)) ?' ' :'')";
903
+        case ($fonc == 'xor') or ($fonc == 'xou'):
904
+            return "((($code) XOR ($arg)) ?' ' :'')";
905
+        case ($fonc == 'sinon'):
906
+            return "(((\$a = $code) OR (is_string(\$a) AND strlen(\$a))) ? \$a : $arg)";
907
+        case ($fonc == 'not') or ($fonc == 'non'):
908
+            return "(($code) ?'' :' ')";
909
+        case ($fonc == 'yes') or ($fonc == 'oui'):
910
+            return "(($code) ?' ' :'')";
911
+    }
912
+
913
+    return '';
914 914
 }
915 915
 
916 916
 function compose_filtres_args($p, $args, $sep) {
917
-	$arglist = '';
918
-	foreach ($args as $arg) {
919
-		$arglist .= $sep .
920
-			calculer_liste($arg, $p->descr, $p->boucles, $p->id_boucle);
921
-	}
917
+    $arglist = '';
918
+    foreach ($args as $arg) {
919
+        $arglist .= $sep .
920
+            calculer_liste($arg, $p->descr, $p->boucles, $p->id_boucle);
921
+    }
922 922
 
923
-	return $arglist;
923
+    return $arglist;
924 924
 }
925 925
 
926 926
 
@@ -938,15 +938,15 @@  discard block
 block discarded – undo
938 938
  **/
939 939
 function calculer_argument_precedent($idb, $nom_champ, &$boucles, $defaut = null) {
940 940
 
941
-	// si recursif, forcer l'extraction du champ SQL mais ignorer le code
942
-	if ($boucles[$idb]->externe) {
943
-		index_pile($idb, $nom_champ, $boucles, '', $defaut);
944
-		// retourner $Pile[$SP] et pas $Pile[0] si recursion en 1ere boucle
945
-		// on ignore le defaut fourni dans ce cas
946
-		$defaut = "(\$Pile[\$SP]['$nom_champ'] ?? null)";
947
-	}
941
+    // si recursif, forcer l'extraction du champ SQL mais ignorer le code
942
+    if ($boucles[$idb]->externe) {
943
+        index_pile($idb, $nom_champ, $boucles, '', $defaut);
944
+        // retourner $Pile[$SP] et pas $Pile[0] si recursion en 1ere boucle
945
+        // on ignore le defaut fourni dans ce cas
946
+        $defaut = "(\$Pile[\$SP]['$nom_champ'] ?? null)";
947
+    }
948 948
 
949
-	return index_pile($boucles[$idb]->id_parent, $nom_champ, $boucles, '', $defaut);
949
+    return index_pile($boucles[$idb]->id_parent, $nom_champ, $boucles, '', $defaut);
950 950
 }
951 951
 
952 952
 //
@@ -960,30 +960,30 @@  discard block
 block discarded – undo
960 960
 //
961 961
 
962 962
 function rindex_pile($p, $champ, $motif) {
963
-	$n = 0;
964
-	$b = $p->id_boucle;
965
-	$p->code = '';
966
-	while ($b != '') {
967
-		foreach ($p->boucles[$b]->criteres as $critere) {
968
-			if ($critere->op == $motif) {
969
-				$p->code = '$Pile[$SP' . (($n == 0) ? '' : "-$n") .
970
-					"]['$champ']";
971
-				$b = '';
972
-				break 2;
973
-			}
974
-		}
975
-		$n++;
976
-		$b = $p->boucles[$b]->id_parent;
977
-	}
978
-
979
-	// si on est hors d'une boucle de {recherche}, cette balise est vide
980
-	if (!$p->code) {
981
-		$p->code = "''";
982
-	}
983
-
984
-	$p->interdire_scripts = false;
985
-
986
-	return $p;
963
+    $n = 0;
964
+    $b = $p->id_boucle;
965
+    $p->code = '';
966
+    while ($b != '') {
967
+        foreach ($p->boucles[$b]->criteres as $critere) {
968
+            if ($critere->op == $motif) {
969
+                $p->code = '$Pile[$SP' . (($n == 0) ? '' : "-$n") .
970
+                    "]['$champ']";
971
+                $b = '';
972
+                break 2;
973
+            }
974
+        }
975
+        $n++;
976
+        $b = $p->boucles[$b]->id_parent;
977
+    }
978
+
979
+    // si on est hors d'une boucle de {recherche}, cette balise est vide
980
+    if (!$p->code) {
981
+        $p->code = "''";
982
+    }
983
+
984
+    $p->interdire_scripts = false;
985
+
986
+    return $p;
987 987
 }
988 988
 
989 989
 /**
@@ -993,7 +993,7 @@  discard block
 block discarded – undo
993 993
  * @return string Nom de la balise, avec indication de boucle explicite si présent.
994 994
  */
995 995
 function zbug_presenter_champ($p, $champ = '') {
996
-	$balise = $champ ?: $p->nom_champ;
997
-	$explicite = $p->nom_boucle ? $p->nom_boucle . ':' : '';
998
-	return "#{$explicite}{$balise}";
996
+    $balise = $champ ?: $p->nom_champ;
997
+    $explicite = $p->nom_boucle ? $p->nom_boucle . ':' : '';
998
+    return "#{$explicite}{$balise}";
999 999
 }
Please login to merge, or discard this patch.