Completed
Push — master ( 1dde8c...5a052b )
by cam
01:06
created
ecrire/action/purger.php 2 patches
Spacing   +7 added lines, -7 removed lines patch added patch discarded remove patch
@@ -61,7 +61,7 @@  discard block
 block discarded – undo
61 61
 			supprime_invalideurs();
62 62
 			@spip_unlink(_CACHE_RUBRIQUES);
63 63
 			@spip_unlink(_CACHE_CHEMIN);
64
-			@spip_unlink(_DIR_TMP . "plugin_xml_cache.gz");
64
+			@spip_unlink(_DIR_TMP."plugin_xml_cache.gz");
65 65
 			// on ne supprime que _CACHE_PLUGINS_OPT qui declenche la reconstruction des 3
66 66
 			// _CACHE_PIPELINES _CACHE_PLUGINS_PATH et _CACHE_PLUGINS_FCT
67 67
 			// pour eviter des problemes de concurence
@@ -72,8 +72,8 @@  discard block
 block discarded – undo
72 72
 			@spip_unlink(_CACHE_PLUGINS_OPT);
73 73
 			purger_repertoire(_DIR_CACHE, array('subdir' => true));
74 74
 			purger_repertoire(_DIR_AIDE);
75
-			purger_repertoire(_DIR_VAR . 'cache-css');
76
-			purger_repertoire(_DIR_VAR . 'cache-js');
75
+			purger_repertoire(_DIR_VAR.'cache-css');
76
+			purger_repertoire(_DIR_VAR.'cache-js');
77 77
 			break;
78 78
 
79 79
 		case 'squelettes':
@@ -81,10 +81,10 @@  discard block
 block discarded – undo
81 81
 			break;
82 82
 
83 83
 		case 'vignettes':
84
-			purger_repertoire(_DIR_VAR . 'cache-gd2', array('subdir' => true));
85
-			purger_repertoire(_DIR_VAR . 'cache-texte', array('subdir' => true));
86
-			purger_repertoire(_DIR_VAR . 'cache-vignettes', array('subdir' => true));
87
-			purger_repertoire(_DIR_VAR . 'cache-TeX', array('subdir' => true));
84
+			purger_repertoire(_DIR_VAR.'cache-gd2', array('subdir' => true));
85
+			purger_repertoire(_DIR_VAR.'cache-texte', array('subdir' => true));
86
+			purger_repertoire(_DIR_VAR.'cache-vignettes', array('subdir' => true));
87
+			purger_repertoire(_DIR_VAR.'cache-TeX', array('subdir' => true));
88 88
 			supprime_invalideurs();
89 89
 			purger_repertoire(_DIR_CACHE, array('subdir' => true));
90 90
 			break;
Please login to merge, or discard this patch.
Indentation   +47 added lines, -47 removed lines patch added patch discarded remove patch
@@ -16,7 +16,7 @@  discard block
 block discarded – undo
16 16
  * @package SPIP\Core\Cache
17 17
  **/
18 18
 if (!defined('_ECRIRE_INC_VERSION')) {
19
-	return;
19
+    return;
20 20
 }
21 21
 
22 22
 /**
@@ -39,57 +39,57 @@  discard block
 block discarded – undo
39 39
  *     de l'action sécurisée.
40 40
  */
41 41
 function action_purger_dist($arg = null) {
42
-	if (is_null($arg)) {
43
-		$securiser_action = charger_fonction('securiser_action', 'inc');
44
-		$arg = $securiser_action();
45
-	}
42
+    if (is_null($arg)) {
43
+        $securiser_action = charger_fonction('securiser_action', 'inc');
44
+        $arg = $securiser_action();
45
+    }
46 46
 
47
-	include_spip('inc/invalideur');
47
+    include_spip('inc/invalideur');
48 48
 
49
-	spip_log("purger $arg");
49
+    spip_log("purger $arg");
50 50
 
51
-	switch ($arg) {
52
-		case 'inhibe_cache':
53
-			// inhiber le cache pendant 24h
54
-			ecrire_meta('cache_inhib', $_SERVER['REQUEST_TIME'] + 24 * 3600);
55
-			break;
56
-		case 'reactive_cache':
57
-			effacer_meta('cache_inhib');
58
-			break;
51
+    switch ($arg) {
52
+        case 'inhibe_cache':
53
+            // inhiber le cache pendant 24h
54
+            ecrire_meta('cache_inhib', $_SERVER['REQUEST_TIME'] + 24 * 3600);
55
+            break;
56
+        case 'reactive_cache':
57
+            effacer_meta('cache_inhib');
58
+            break;
59 59
 
60
-		case 'cache':
61
-			supprime_invalideurs();
62
-			@spip_unlink(_CACHE_RUBRIQUES);
63
-			@spip_unlink(_CACHE_CHEMIN);
64
-			@spip_unlink(_DIR_TMP . "plugin_xml_cache.gz");
65
-			// on ne supprime que _CACHE_PLUGINS_OPT qui declenche la reconstruction des 3
66
-			// _CACHE_PIPELINES _CACHE_PLUGINS_PATH et _CACHE_PLUGINS_FCT
67
-			// pour eviter des problemes de concurence
68
-			// cf https://core.spip.net/issues/2989
69
-			//@spip_unlink(_CACHE_PIPELINES);
70
-			//@spip_unlink(_CACHE_PLUGINS_PATH);
71
-			//@spip_unlink(_CACHE_PLUGINS_FCT);
72
-			@spip_unlink(_CACHE_PLUGINS_OPT);
73
-			purger_repertoire(_DIR_CACHE, array('subdir' => true));
74
-			purger_repertoire(_DIR_AIDE);
75
-			purger_repertoire(_DIR_VAR . 'cache-css');
76
-			purger_repertoire(_DIR_VAR . 'cache-js');
77
-			break;
60
+        case 'cache':
61
+            supprime_invalideurs();
62
+            @spip_unlink(_CACHE_RUBRIQUES);
63
+            @spip_unlink(_CACHE_CHEMIN);
64
+            @spip_unlink(_DIR_TMP . "plugin_xml_cache.gz");
65
+            // on ne supprime que _CACHE_PLUGINS_OPT qui declenche la reconstruction des 3
66
+            // _CACHE_PIPELINES _CACHE_PLUGINS_PATH et _CACHE_PLUGINS_FCT
67
+            // pour eviter des problemes de concurence
68
+            // cf https://core.spip.net/issues/2989
69
+            //@spip_unlink(_CACHE_PIPELINES);
70
+            //@spip_unlink(_CACHE_PLUGINS_PATH);
71
+            //@spip_unlink(_CACHE_PLUGINS_FCT);
72
+            @spip_unlink(_CACHE_PLUGINS_OPT);
73
+            purger_repertoire(_DIR_CACHE, array('subdir' => true));
74
+            purger_repertoire(_DIR_AIDE);
75
+            purger_repertoire(_DIR_VAR . 'cache-css');
76
+            purger_repertoire(_DIR_VAR . 'cache-js');
77
+            break;
78 78
 
79
-		case 'squelettes':
80
-			purger_repertoire(_DIR_SKELS);
81
-			break;
79
+        case 'squelettes':
80
+            purger_repertoire(_DIR_SKELS);
81
+            break;
82 82
 
83
-		case 'vignettes':
84
-			purger_repertoire(_DIR_VAR . 'cache-gd2', array('subdir' => true));
85
-			purger_repertoire(_DIR_VAR . 'cache-texte', array('subdir' => true));
86
-			purger_repertoire(_DIR_VAR . 'cache-vignettes', array('subdir' => true));
87
-			purger_repertoire(_DIR_VAR . 'cache-TeX', array('subdir' => true));
88
-			supprime_invalideurs();
89
-			purger_repertoire(_DIR_CACHE, array('subdir' => true));
90
-			break;
91
-	}
83
+        case 'vignettes':
84
+            purger_repertoire(_DIR_VAR . 'cache-gd2', array('subdir' => true));
85
+            purger_repertoire(_DIR_VAR . 'cache-texte', array('subdir' => true));
86
+            purger_repertoire(_DIR_VAR . 'cache-vignettes', array('subdir' => true));
87
+            purger_repertoire(_DIR_VAR . 'cache-TeX', array('subdir' => true));
88
+            supprime_invalideurs();
89
+            purger_repertoire(_DIR_CACHE, array('subdir' => true));
90
+            break;
91
+    }
92 92
 
93
-	// le faire savoir aux plugins
94
-	pipeline('trig_purger', $arg);
93
+    // le faire savoir aux plugins
94
+    pipeline('trig_purger', $arg);
95 95
 }
Please login to merge, or discard this patch.
ecrire/inc/svg.php 3 patches
Indentation   +422 added lines, -422 removed lines patch added patch discarded remove patch
@@ -17,13 +17,13 @@  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
 if (!defined('IMG_SVG')) {
24
-	// complete 	IMG_BMP | IMG_GIF | IMG_JPG | IMG_PNG | IMG_WBMP | IMG_XPM | IMG_WEBP
25
-	define('IMG_SVG',128);
26
-	define('IMAGETYPE_SVG', 19);
24
+    // complete 	IMG_BMP | IMG_GIF | IMG_JPG | IMG_PNG | IMG_WBMP | IMG_XPM | IMG_WEBP
25
+    define('IMG_SVG',128);
26
+    define('IMAGETYPE_SVG', 19);
27 27
 }
28 28
 
29 29
 /**
@@ -39,39 +39,39 @@  discard block
 block discarded – undo
39 39
  *   false si on a pas pu charger l'image
40 40
  */
41 41
 function svg_charger($fichier, $maxlen=null) {
42
-	if (strpos($fichier, "data:image/svg+xml") === 0) {
43
-		$image = explode(";", $fichier, 2);
44
-		$image = end($image);
45
-		if (strpos($image, "base64,") === 0) {
46
-			$image = base64_decode(substr($image, 7));
47
-		}
48
-		if (strpos($image, "<svg") !== false) {
49
-			return $image;
50
-		}
51
-		// encodage inconnu ou autre format d'image ?
52
-		return false;
53
-	}
54
-	// c'est peut etre deja une image svg ?
55
-	if (strpos($fichier, "<svg") !== false) {
56
-		return $fichier;
57
-	}
58
-	if (!file_exists($fichier)) {
59
-		$fichier  = supprimer_timestamp($fichier);
60
-		if (!file_exists($fichier)) {
61
-			return false;
62
-		}
63
-	}
64
-	if (is_null($maxlen)) {
65
-		$image = file_get_contents($fichier);
66
-	}
67
-	else {
68
-		$image = file_get_contents($fichier, false,null,0, $maxlen);
69
-	}
70
-	// est-ce bien une image svg ?
71
-	if (strpos($image, "<svg") !== false) {
72
-		return $image;
73
-	}
74
-	return false;
42
+    if (strpos($fichier, "data:image/svg+xml") === 0) {
43
+        $image = explode(";", $fichier, 2);
44
+        $image = end($image);
45
+        if (strpos($image, "base64,") === 0) {
46
+            $image = base64_decode(substr($image, 7));
47
+        }
48
+        if (strpos($image, "<svg") !== false) {
49
+            return $image;
50
+        }
51
+        // encodage inconnu ou autre format d'image ?
52
+        return false;
53
+    }
54
+    // c'est peut etre deja une image svg ?
55
+    if (strpos($fichier, "<svg") !== false) {
56
+        return $fichier;
57
+    }
58
+    if (!file_exists($fichier)) {
59
+        $fichier  = supprimer_timestamp($fichier);
60
+        if (!file_exists($fichier)) {
61
+            return false;
62
+        }
63
+    }
64
+    if (is_null($maxlen)) {
65
+        $image = file_get_contents($fichier);
66
+    }
67
+    else {
68
+        $image = file_get_contents($fichier, false,null,0, $maxlen);
69
+    }
70
+    // est-ce bien une image svg ?
71
+    if (strpos($image, "<svg") !== false) {
72
+        return $image;
73
+    }
74
+    return false;
75 75
 }
76 76
 
77 77
 /**
@@ -80,29 +80,29 @@  discard block
 block discarded – undo
80 80
  * @return array|bool
81 81
  */
82 82
 function svg_lire_balise_svg($fichier) {
83
-	if (!$debut_fichier = svg_charger($fichier, 4096)) {
84
-		return false;
85
-	}
83
+    if (!$debut_fichier = svg_charger($fichier, 4096)) {
84
+        return false;
85
+    }
86 86
 
87
-	if (($ps = stripos($debut_fichier, "<svg")) !== false) {
87
+    if (($ps = stripos($debut_fichier, "<svg")) !== false) {
88 88
 
89
-		$pe = stripos($debut_fichier, ">", $ps);
90
-		$balise_svg = substr($debut_fichier, $ps, $pe - $ps +1);
89
+        $pe = stripos($debut_fichier, ">", $ps);
90
+        $balise_svg = substr($debut_fichier, $ps, $pe - $ps +1);
91 91
 
92
-		if (preg_match_all(",([\w:\-]+)=,Uims", $balise_svg, $matches)) {
93
-			if (!function_exists('extraire_attribut')) {
94
-				include_spip('inc/filtres');
95
-			}
96
-			$attributs = [];
97
-			foreach ($matches[1] as $att) {
98
-				$attributs[$att] = extraire_attribut($balise_svg, $att);
99
-			}
92
+        if (preg_match_all(",([\w:\-]+)=,Uims", $balise_svg, $matches)) {
93
+            if (!function_exists('extraire_attribut')) {
94
+                include_spip('inc/filtres');
95
+            }
96
+            $attributs = [];
97
+            foreach ($matches[1] as $att) {
98
+                $attributs[$att] = extraire_attribut($balise_svg, $att);
99
+            }
100 100
 
101
-			return [$balise_svg, $attributs];
102
-		}
103
-	}
101
+            return [$balise_svg, $attributs];
102
+        }
103
+    }
104 104
 
105
-	return false;
105
+    return false;
106 106
 }
107 107
 
108 108
 /**
@@ -112,12 +112,12 @@  discard block
 block discarded – undo
112 112
  */
113 113
 function svg_lire_attributs($img) {
114 114
 
115
-	if ($svg_infos = svg_lire_balise_svg($img)) {
116
-		list($balise_svg, $attributs) = $svg_infos;
117
-		return $attributs;
118
-	}
115
+    if ($svg_infos = svg_lire_balise_svg($img)) {
116
+        list($balise_svg, $attributs) = $svg_infos;
117
+        return $attributs;
118
+    }
119 119
 
120
-	return false;
120
+    return false;
121 121
 }
122 122
 
123 123
 /**
@@ -127,38 +127,38 @@  discard block
 block discarded – undo
127 127
  * @return bool|float|int
128 128
  */
129 129
 function svg_dimension_to_pixels($dimension, $precision = 2) {
130
-	if (preg_match(',^(-?\d+(\.\d+)?)([^\d]*),i', trim($dimension), $m)){
131
-		switch (strtolower($m[2])) {
132
-			case '%':
133
-				// on ne sait pas faire :(
134
-				return false;
135
-				break;
136
-			case 'em':
137
-				return round($m[1]*16, $precision); // 16px font-size par defaut
138
-				break;
139
-			case 'ex':
140
-				return round($m[1]*16, $precision); // 16px font-size par defaut
141
-				break;
142
-			case 'pc':
143
-				return round($m[1]*16, $precision); // 1/6 inch = 96px/6 in CSS
144
-				break;
145
-			case 'cm':
146
-				return round($m[1]*96/2.54, $precision); // 96px / 2.54cm;
147
-				break;
148
-			case 'mm':
149
-				return round($m[1]*96/25.4, $precision); // 96px / 25.4mm;
150
-				break;
151
-			case 'in':
152
-				return round($m[1]*96, $precision); // 1 inch = 96px in CSS
153
-				break;
154
-			case 'px':
155
-			case 'pt':
156
-			default:
157
-				return $m[1];
158
-				break;
159
-		}
160
-	}
161
-	return false;
130
+    if (preg_match(',^(-?\d+(\.\d+)?)([^\d]*),i', trim($dimension), $m)){
131
+        switch (strtolower($m[2])) {
132
+            case '%':
133
+                // on ne sait pas faire :(
134
+                return false;
135
+                break;
136
+            case 'em':
137
+                return round($m[1]*16, $precision); // 16px font-size par defaut
138
+                break;
139
+            case 'ex':
140
+                return round($m[1]*16, $precision); // 16px font-size par defaut
141
+                break;
142
+            case 'pc':
143
+                return round($m[1]*16, $precision); // 1/6 inch = 96px/6 in CSS
144
+                break;
145
+            case 'cm':
146
+                return round($m[1]*96/2.54, $precision); // 96px / 2.54cm;
147
+                break;
148
+            case 'mm':
149
+                return round($m[1]*96/25.4, $precision); // 96px / 25.4mm;
150
+                break;
151
+            case 'in':
152
+                return round($m[1]*96, $precision); // 1 inch = 96px in CSS
153
+                break;
154
+            case 'px':
155
+            case 'pt':
156
+            default:
157
+                return $m[1];
158
+                break;
159
+        }
160
+    }
161
+    return false;
162 162
 }
163 163
 
164 164
 /**
@@ -169,15 +169,15 @@  discard block
 block discarded – undo
169 169
  * @return string
170 170
  */
171 171
 function svg_change_balise_svg($svg, $old_balise_svg, $attributs) {
172
-	$new_balise_svg = "<svg";
173
-	foreach ($attributs as $k=>$v) {
174
-		$new_balise_svg .= " $k=\"".entites_html($v)."\"";
175
-	}
176
-	$new_balise_svg .= ">";
177
-
178
-	$p = strpos($svg, $old_balise_svg);
179
-	$svg = substr_replace($svg, $new_balise_svg, $p, strlen($old_balise_svg));
180
-	return $svg;
172
+    $new_balise_svg = "<svg";
173
+    foreach ($attributs as $k=>$v) {
174
+        $new_balise_svg .= " $k=\"".entites_html($v)."\"";
175
+    }
176
+    $new_balise_svg .= ">";
177
+
178
+    $p = strpos($svg, $old_balise_svg);
179
+    $svg = substr_replace($svg, $new_balise_svg, $p, strlen($old_balise_svg));
180
+    return $svg;
181 181
 }
182 182
 
183 183
 /**
@@ -189,15 +189,15 @@  discard block
 block discarded – undo
189 189
  */
190 190
 function svg_insert_shapes($svg, $shapes, $start=true) {
191 191
 
192
-	if ($start === false or $start === 'end') {
193
-		$svg = str_replace("</svg>", $shapes . "</svg>", $svg);
194
-	}
195
-	else {
196
-		$p = stripos($svg, "<svg");
197
-		$p = strpos($svg, ">", $p);
198
-		$svg = substr_replace($svg, $shapes, $p+1, 0);
199
-	}
200
-	return $svg;
192
+    if ($start === false or $start === 'end') {
193
+        $svg = str_replace("</svg>", $shapes . "</svg>", $svg);
194
+    }
195
+    else {
196
+        $p = stripos($svg, "<svg");
197
+        $p = strpos($svg, ">", $p);
198
+        $svg = substr_replace($svg, $shapes, $p+1, 0);
199
+    }
200
+    return $svg;
201 201
 }
202 202
 
203 203
 /**
@@ -210,13 +210,13 @@  discard block
 block discarded – undo
210 210
  * @return string
211 211
  */
212 212
 function svg_clip_in_box($svg, $x, $y, $width, $height) {
213
-	$rect = "<rect x=\"$x\" y=\"$y\" width=\"$width\" height=\"$height\" />";
214
-	$id = 'clip-'.substr(md5($rect . strlen($svg)),0,8);
215
-	$clippath = "<clipPath id=\"$id\">$rect</clipPath>";
216
-	$g = "<g clip-path=\"url(#$id)\">";
217
-	$svg = svg_insert_shapes($svg, $clippath . $g);
218
-	$svg = svg_insert_shapes($svg, "</g>", false);
219
-	return $svg;
213
+    $rect = "<rect x=\"$x\" y=\"$y\" width=\"$width\" height=\"$height\" />";
214
+    $id = 'clip-'.substr(md5($rect . strlen($svg)),0,8);
215
+    $clippath = "<clipPath id=\"$id\">$rect</clipPath>";
216
+    $g = "<g clip-path=\"url(#$id)\">";
217
+    $svg = svg_insert_shapes($svg, $clippath . $g);
218
+    $svg = svg_insert_shapes($svg, "</g>", false);
219
+    return $svg;
220 220
 }
221 221
 
222 222
 /**
@@ -227,21 +227,21 @@  discard block
 block discarded – undo
227 227
  * @return bool|string
228 228
  */
229 229
 function svg_redimensionner($img, $new_width, $new_height) {
230
-	if ($svg = svg_charger($img)
231
-	  and $svg_infos = svg_lire_balise_svg($svg)) {
230
+    if ($svg = svg_charger($img)
231
+      and $svg_infos = svg_lire_balise_svg($svg)) {
232 232
 
233
-		list($balise_svg, $attributs) = $svg_infos;
234
-		if (!isset($attributs['viewBox'])) {
235
-			$attributs['viewBox'] = "0 0 " . $attributs['width'] . " " . $attributs['height'];
236
-		}
237
-		$attributs['width'] = strval($new_width);
238
-		$attributs['height'] = strval($new_height);
233
+        list($balise_svg, $attributs) = $svg_infos;
234
+        if (!isset($attributs['viewBox'])) {
235
+            $attributs['viewBox'] = "0 0 " . $attributs['width'] . " " . $attributs['height'];
236
+        }
237
+        $attributs['width'] = strval($new_width);
238
+        $attributs['height'] = strval($new_height);
239 239
 
240
-		$svg = svg_change_balise_svg($svg, $balise_svg, $attributs);
241
-		return $svg;
242
-	}
240
+        $svg = svg_change_balise_svg($svg, $balise_svg, $attributs);
241
+        return $svg;
242
+    }
243 243
 
244
-	return $img;
244
+    return $img;
245 245
 }
246 246
 
247 247
 /**
@@ -250,15 +250,15 @@  discard block
 block discarded – undo
250 250
  * @return string
251 251
  */
252 252
 function svg_couleur_to_hexa($couleur) {
253
-	if (strpos($couleur, "rgb(")===0) {
254
-		$c = explode(',', substr($couleur, 4));
255
-		$couleur = _couleur_dec_to_hex(intval($c[0]), intval($c[1]), intval($c[2]));
256
-	}
257
-	else {
258
-		$couleur = couleur_html_to_hex($couleur);
259
-	}
260
-	$couleur = '#'.ltrim($couleur,'#');
261
-	return $couleur;
253
+    if (strpos($couleur, "rgb(")===0) {
254
+        $c = explode(',', substr($couleur, 4));
255
+        $couleur = _couleur_dec_to_hex(intval($c[0]), intval($c[1]), intval($c[2]));
256
+    }
257
+    else {
258
+        $couleur = couleur_html_to_hex($couleur);
259
+    }
260
+    $couleur = '#'.ltrim($couleur,'#');
261
+    return $couleur;
262 262
 }
263 263
 
264 264
 /**
@@ -267,11 +267,11 @@  discard block
 block discarded – undo
267 267
  * @return array
268 268
  */
269 269
 function svg_couleur_to_rgb($couleur) {
270
-	if (strpos($couleur, "rgb(")===0) {
271
-		$c = explode(',', substr($couleur, 4));
272
-		return ['red' => intval($c[0]),'green' => intval($c[1]),'blue' => intval($c[2])];
273
-	}
274
-	return _couleur_hex_to_dec($couleur);
270
+    if (strpos($couleur, "rgb(")===0) {
271
+        $c = explode(',', substr($couleur, 4));
272
+        return ['red' => intval($c[0]),'green' => intval($c[1]),'blue' => intval($c[2])];
273
+    }
274
+    return _couleur_hex_to_dec($couleur);
275 275
 }
276 276
 
277 277
 
@@ -281,66 +281,66 @@  discard block
 block discarded – undo
281 281
  * @return array
282 282
  */
283 283
 function svg_getimagesize_from_attr($attributs) {
284
-	$width = 350; // default width
285
-	$height = 150; // default height
286
-
287
-	$viewBox = "0 0 $width $height";
288
-	if (isset($attributs['viewBox'])) {
289
-		$viewBox = $attributs['viewBox'];
290
-		$viewBox = preg_replace(",\s+,", " ", $viewBox);
291
-	}
292
-	// et on la convertit en px
293
-	$viewBox = explode(' ', $viewBox);
294
-	$viewBox = array_map('svg_dimension_to_pixels', $viewBox);
295
-	if (!$viewBox[2]) {
296
-		$viewBox[2] = $width;
297
-	}
298
-	if (!$viewBox[3]) {
299
-		$viewBox[3] = $height;
300
-	}
301
-
302
-	$coeff = 1;
303
-	if (isset($attributs['width'])
304
-	  and $w = svg_dimension_to_pixels($attributs['width'])) {
305
-		$width = $w;
306
-	}
307
-	else {
308
-		// si on recupere la taille de la viewbox mais si la viewbox est petite on met un multiplicateur pour la taille finale
309
-		$width = $viewBox[2];
310
-		if ($width < 1) {
311
-			$coeff = max($coeff, 1000);
312
-		}
313
-		elseif ($width < 10) {
314
-			$coeff = max($coeff, 100);
315
-		}
316
-		elseif ($width < 100) {
317
-			$coeff = max($coeff, 10);
318
-		}
319
-	}
320
-	if (isset($attributs['height'])
321
-	  and $h = svg_dimension_to_pixels($attributs['height'])) {
322
-		$height = $h;
323
-	}
324
-	else {
325
-		$height = $viewBox[3];
326
-		if ($height < 1) {
327
-			$coeff = max($coeff, 1000);
328
-		}
329
-		elseif ($height < 10) {
330
-			$coeff = max($coeff, 100);
331
-		}
332
-		elseif ($height < 100) {
333
-			$coeff = max($coeff, 10);
334
-		}
335
-	}
336
-
337
-	// arrondir le width et height en pixel in fine
338
-	$width = round($coeff * $width);
339
-	$height = round($coeff * $height);
340
-
341
-	$viewBox = implode(' ', $viewBox);
342
-
343
-	return array($width, $height, $viewBox);
284
+    $width = 350; // default width
285
+    $height = 150; // default height
286
+
287
+    $viewBox = "0 0 $width $height";
288
+    if (isset($attributs['viewBox'])) {
289
+        $viewBox = $attributs['viewBox'];
290
+        $viewBox = preg_replace(",\s+,", " ", $viewBox);
291
+    }
292
+    // et on la convertit en px
293
+    $viewBox = explode(' ', $viewBox);
294
+    $viewBox = array_map('svg_dimension_to_pixels', $viewBox);
295
+    if (!$viewBox[2]) {
296
+        $viewBox[2] = $width;
297
+    }
298
+    if (!$viewBox[3]) {
299
+        $viewBox[3] = $height;
300
+    }
301
+
302
+    $coeff = 1;
303
+    if (isset($attributs['width'])
304
+      and $w = svg_dimension_to_pixels($attributs['width'])) {
305
+        $width = $w;
306
+    }
307
+    else {
308
+        // si on recupere la taille de la viewbox mais si la viewbox est petite on met un multiplicateur pour la taille finale
309
+        $width = $viewBox[2];
310
+        if ($width < 1) {
311
+            $coeff = max($coeff, 1000);
312
+        }
313
+        elseif ($width < 10) {
314
+            $coeff = max($coeff, 100);
315
+        }
316
+        elseif ($width < 100) {
317
+            $coeff = max($coeff, 10);
318
+        }
319
+    }
320
+    if (isset($attributs['height'])
321
+      and $h = svg_dimension_to_pixels($attributs['height'])) {
322
+        $height = $h;
323
+    }
324
+    else {
325
+        $height = $viewBox[3];
326
+        if ($height < 1) {
327
+            $coeff = max($coeff, 1000);
328
+        }
329
+        elseif ($height < 10) {
330
+            $coeff = max($coeff, 100);
331
+        }
332
+        elseif ($height < 100) {
333
+            $coeff = max($coeff, 10);
334
+        }
335
+    }
336
+
337
+    // arrondir le width et height en pixel in fine
338
+    $width = round($coeff * $width);
339
+    $height = round($coeff * $height);
340
+
341
+    $viewBox = implode(' ', $viewBox);
342
+
343
+    return array($width, $height, $viewBox);
344 344
 }
345 345
 
346 346
 /**
@@ -356,24 +356,24 @@  discard block
 block discarded – undo
356 356
  * @return string
357 357
  */
358 358
 function svg_force_viewBox_px($img, $force_width_and_height = false) {
359
-	if ($svg = svg_charger($img)
360
-	  and $svg_infos = svg_lire_balise_svg($svg)){
359
+    if ($svg = svg_charger($img)
360
+      and $svg_infos = svg_lire_balise_svg($svg)){
361 361
 
362
-		list($balise_svg, $attributs) = $svg_infos;
362
+        list($balise_svg, $attributs) = $svg_infos;
363 363
 
364
-		list($width, $height, $viewBox) = svg_getimagesize_from_attr($attributs);
364
+        list($width, $height, $viewBox) = svg_getimagesize_from_attr($attributs);
365 365
 
366
-		if ($force_width_and_height) {
367
-			$attributs['width'] = $width;
368
-			$attributs['height'] = $height;
369
-		}
366
+        if ($force_width_and_height) {
367
+            $attributs['width'] = $width;
368
+            $attributs['height'] = $height;
369
+        }
370 370
 
371
-		$attributs['viewBox'] = $viewBox;
371
+        $attributs['viewBox'] = $viewBox;
372 372
 
373
-		$svg = svg_change_balise_svg($svg, $balise_svg, $attributs);
374
-		return $svg;
375
-	}
376
-	return $img;
373
+        $svg = svg_change_balise_svg($svg, $balise_svg, $attributs);
374
+        return $svg;
375
+    }
376
+    return $img;
377 377
 }
378 378
 
379 379
 /**
@@ -382,12 +382,12 @@  discard block
 block discarded – undo
382 382
  * @return array|mixed
383 383
  */
384 384
 function svg_extract_couleurs($img) {
385
-	if ($svg = svg_charger($img)) {
386
-		if (preg_match_all("/(#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f])|(rgb\([\s\d]+,[\s\d]+,[\s\d]+\))|(#[0-9a-f][0-9a-f][0-9a-f])/imS", $svg, $matches)) {
387
-			return $matches[0];
388
-		}
389
-	}
390
-	return [];
385
+    if ($svg = svg_charger($img)) {
386
+        if (preg_match_all("/(#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f])|(rgb\([\s\d]+,[\s\d]+,[\s\d]+\))|(#[0-9a-f][0-9a-f][0-9a-f])/imS", $svg, $matches)) {
387
+            return $matches[0];
388
+        }
389
+    }
390
+    return [];
391 391
 }
392 392
 
393 393
 /**
@@ -398,56 +398,56 @@  discard block
 block discarded – undo
398 398
  * @return bool|string
399 399
  */
400 400
 function svg_recadrer($img, $new_width, $new_height, $offset_width, $offset_height, $background_color='') {
401
-	if ($svg = svg_force_viewBox_px($img)
402
-	  and $svg_infos = svg_lire_balise_svg($svg)) {
403
-
404
-		list($balise_svg, $attributs) = $svg_infos;
405
-		$viewBox = explode(' ', $attributs['viewBox']);
406
-
407
-		$viewport_w = $new_width;
408
-		$viewport_h = $new_height;
409
-		$viewport_ox = $offset_width;
410
-		$viewport_oy = $offset_height;
411
-
412
-		// si on a un width/height qui rescale, il faut rescaler
413
-		if (isset ($attributs['width'])
414
-		  and $w = svg_dimension_to_pixels($attributs['width'])
415
-		  and isset ($attributs['height'])
416
-		  and $h = svg_dimension_to_pixels($attributs['height'])) {
417
-
418
-			$xscale = $viewBox[2] / $w;
419
-			$viewport_w = round($viewport_w * $xscale, 2);
420
-			$viewport_ox = round($viewport_ox * $xscale, 2);
421
-			$yscale = $viewBox[3] / $h;
422
-			$viewport_h = round($viewport_h * $yscale, 2);
423
-			$viewport_oy = round($viewport_oy * $yscale, 2);
424
-		}
425
-
426
-		if ($viewport_w>$viewBox[2] or $viewport_h>$viewBox[3]) {
427
-			$svg = svg_clip_in_box($svg, $viewBox[0], $viewBox[1], $viewBox[2], $viewBox[3]);
428
-		}
429
-
430
-		// maintenant on redefinit la viewBox
431
-		$viewBox[0] += $viewport_ox;
432
-		$viewBox[1] += $viewport_oy;
433
-		$viewBox[2] = $viewport_w;
434
-		$viewBox[3] = $viewport_h;
435
-
436
-		$attributs['viewBox'] = implode(' ', $viewBox);
437
-		$attributs['width'] = strval($new_width);
438
-		$attributs['height'] = strval($new_height);
439
-
440
-		$svg = svg_change_balise_svg($svg, $balise_svg, $attributs);
441
-
442
-		// ajouter un background
443
-		if ($background_color and $background_color!=='transparent') {
444
-			$svg = svg_ajouter_background($svg, $background_color);
445
-		}
446
-
447
-		return $svg;
448
-	}
449
-
450
-	return $img;
401
+    if ($svg = svg_force_viewBox_px($img)
402
+      and $svg_infos = svg_lire_balise_svg($svg)) {
403
+
404
+        list($balise_svg, $attributs) = $svg_infos;
405
+        $viewBox = explode(' ', $attributs['viewBox']);
406
+
407
+        $viewport_w = $new_width;
408
+        $viewport_h = $new_height;
409
+        $viewport_ox = $offset_width;
410
+        $viewport_oy = $offset_height;
411
+
412
+        // si on a un width/height qui rescale, il faut rescaler
413
+        if (isset ($attributs['width'])
414
+          and $w = svg_dimension_to_pixels($attributs['width'])
415
+          and isset ($attributs['height'])
416
+          and $h = svg_dimension_to_pixels($attributs['height'])) {
417
+
418
+            $xscale = $viewBox[2] / $w;
419
+            $viewport_w = round($viewport_w * $xscale, 2);
420
+            $viewport_ox = round($viewport_ox * $xscale, 2);
421
+            $yscale = $viewBox[3] / $h;
422
+            $viewport_h = round($viewport_h * $yscale, 2);
423
+            $viewport_oy = round($viewport_oy * $yscale, 2);
424
+        }
425
+
426
+        if ($viewport_w>$viewBox[2] or $viewport_h>$viewBox[3]) {
427
+            $svg = svg_clip_in_box($svg, $viewBox[0], $viewBox[1], $viewBox[2], $viewBox[3]);
428
+        }
429
+
430
+        // maintenant on redefinit la viewBox
431
+        $viewBox[0] += $viewport_ox;
432
+        $viewBox[1] += $viewport_oy;
433
+        $viewBox[2] = $viewport_w;
434
+        $viewBox[3] = $viewport_h;
435
+
436
+        $attributs['viewBox'] = implode(' ', $viewBox);
437
+        $attributs['width'] = strval($new_width);
438
+        $attributs['height'] = strval($new_height);
439
+
440
+        $svg = svg_change_balise_svg($svg, $balise_svg, $attributs);
441
+
442
+        // ajouter un background
443
+        if ($background_color and $background_color!=='transparent') {
444
+            $svg = svg_ajouter_background($svg, $background_color);
445
+        }
446
+
447
+        return $svg;
448
+    }
449
+
450
+    return $img;
451 451
 }
452 452
 
453 453
 /**
@@ -457,25 +457,25 @@  discard block
 block discarded – undo
457 457
  * @return bool|string
458 458
  */
459 459
 function svg_ajouter_background($img, $background_color) {
460
-	if ($svg = svg_charger($img)
461
-	  and $svg_infos = svg_lire_balise_svg($svg)){
462
-
463
-		if ($background_color and $background_color!=='transparent') {
464
-			list($balise_svg, $attributs) = $svg_infos;
465
-
466
-			$background_color = svg_couleur_to_hexa($background_color);
467
-			if (isset($attributs['viewBox'])) {
468
-				$viewBox = explode(' ', $attributs['viewBox']);
469
-				$rect = "<rect x=\"".$viewBox[0]."\" y=\"".$viewBox[1]."\" width=\"".$viewBox[2]."\" height=\"".$viewBox[3]."\" fill=\"$background_color\"/>";
470
-			}
471
-			else {
472
-				$rect = "<rect width=\"100%\" height=\"100%\" fill=\"$background_color\"/>";
473
-			}
474
-			$svg = svg_insert_shapes($svg, $rect);
475
-		}
476
-		return $svg;
477
-	}
478
-	return $img;
460
+    if ($svg = svg_charger($img)
461
+      and $svg_infos = svg_lire_balise_svg($svg)){
462
+
463
+        if ($background_color and $background_color!=='transparent') {
464
+            list($balise_svg, $attributs) = $svg_infos;
465
+
466
+            $background_color = svg_couleur_to_hexa($background_color);
467
+            if (isset($attributs['viewBox'])) {
468
+                $viewBox = explode(' ', $attributs['viewBox']);
469
+                $rect = "<rect x=\"".$viewBox[0]."\" y=\"".$viewBox[1]."\" width=\"".$viewBox[2]."\" height=\"".$viewBox[3]."\" fill=\"$background_color\"/>";
470
+            }
471
+            else {
472
+                $rect = "<rect width=\"100%\" height=\"100%\" fill=\"$background_color\"/>";
473
+            }
474
+            $svg = svg_insert_shapes($svg, $rect);
475
+        }
476
+        return $svg;
477
+    }
478
+    return $img;
479 479
 }
480 480
 
481 481
 
@@ -486,25 +486,25 @@  discard block
 block discarded – undo
486 486
  * @return bool|string
487 487
  */
488 488
 function svg_ajouter_voile($img, $background_color, $opacity) {
489
-	if ($svg = svg_charger($img)
490
-	  and $svg_infos = svg_lire_balise_svg($svg)){
491
-
492
-		if ($background_color and $background_color!=='transparent') {
493
-			list($balise_svg, $attributs) = $svg_infos;
494
-
495
-			$background_color = svg_couleur_to_hexa($background_color);
496
-			if (isset($attributs['viewBox'])) {
497
-				$viewBox = explode(' ', $attributs['viewBox']);
498
-				$rect = "<rect x=\"".$viewBox[0]."\" y=\"".$viewBox[1]."\" width=\"".$viewBox[2]."\" height=\"".$viewBox[3]."\" fill=\"$background_color\" opacity=\"$opacity\"/>";
499
-			}
500
-			else {
501
-				$rect = "<rect width=\"100%\" height=\"100%\" fill=\"$background_color\"/>";
502
-			}
503
-			$svg = svg_insert_shapes($svg, $rect, false);
504
-		}
505
-		return $svg;
506
-	}
507
-	return $img;
489
+    if ($svg = svg_charger($img)
490
+      and $svg_infos = svg_lire_balise_svg($svg)){
491
+
492
+        if ($background_color and $background_color!=='transparent') {
493
+            list($balise_svg, $attributs) = $svg_infos;
494
+
495
+            $background_color = svg_couleur_to_hexa($background_color);
496
+            if (isset($attributs['viewBox'])) {
497
+                $viewBox = explode(' ', $attributs['viewBox']);
498
+                $rect = "<rect x=\"".$viewBox[0]."\" y=\"".$viewBox[1]."\" width=\"".$viewBox[2]."\" height=\"".$viewBox[3]."\" fill=\"$background_color\" opacity=\"$opacity\"/>";
499
+            }
500
+            else {
501
+                $rect = "<rect width=\"100%\" height=\"100%\" fill=\"$background_color\"/>";
502
+            }
503
+            $svg = svg_insert_shapes($svg, $rect, false);
504
+        }
505
+        return $svg;
506
+    }
507
+    return $img;
508 508
 }
509 509
 
510 510
 
@@ -515,26 +515,26 @@  discard block
 block discarded – undo
515 515
  * @return bool|string
516 516
  */
517 517
 function svg_transformer($img, $attributs) {
518
-	if ($svg = svg_charger($img)
519
-	  and $svg_infos = svg_lire_balise_svg($svg)){
520
-
521
-		if ($attributs) {
522
-			list($balise_svg, ) = $svg_infos;
523
-			$g = "<g";
524
-			foreach ($attributs as $k=>$v) {
525
-				if (strlen($v)) {
526
-					$g .= " $k=\"".attribut_html($v)."\"";
527
-				}
528
-			}
529
-			if (strlen($g) > 2) {
530
-				$g .= ">";
531
-				$svg = svg_insert_shapes($svg, $g);
532
-				$svg = svg_insert_shapes($svg, "</g>", false);
533
-			}
534
-		}
535
-		return $svg;
536
-	}
537
-	return $img;
518
+    if ($svg = svg_charger($img)
519
+      and $svg_infos = svg_lire_balise_svg($svg)){
520
+
521
+        if ($attributs) {
522
+            list($balise_svg, ) = $svg_infos;
523
+            $g = "<g";
524
+            foreach ($attributs as $k=>$v) {
525
+                if (strlen($v)) {
526
+                    $g .= " $k=\"".attribut_html($v)."\"";
527
+                }
528
+            }
529
+            if (strlen($g) > 2) {
530
+                $g .= ">";
531
+                $svg = svg_insert_shapes($svg, $g);
532
+                $svg = svg_insert_shapes($svg, "</g>", false);
533
+            }
534
+        }
535
+        return $svg;
536
+    }
537
+    return $img;
538 538
 }
539 539
 
540 540
 /**
@@ -545,20 +545,20 @@  discard block
 block discarded – undo
545 545
  * @return bool|string
546 546
  */
547 547
 function svg_apply_filter($img, $filter_def) {
548
-	if ($svg = svg_charger($img)
549
-	  and $svg_infos = svg_lire_balise_svg($svg)){
550
-
551
-		if ($filter_def) {
552
-			list($balise_svg, ) = $svg_infos;
553
-			$filter_id = "filter-". substr(md5($filter_def . strlen($svg)), 0, 8);
554
-			$filter = "<defs><filter id=\"$filter_id\">$filter_def</filter></defs>";
555
-			$g = "<g filter=\"url(#$filter_id)\">";
556
-			$svg = svg_insert_shapes($svg, $filter . $g);
557
-			$svg = svg_insert_shapes($svg, "</g>", false);
558
-		}
559
-		return $svg;
560
-	}
561
-	return $img;
548
+    if ($svg = svg_charger($img)
549
+      and $svg_infos = svg_lire_balise_svg($svg)){
550
+
551
+        if ($filter_def) {
552
+            list($balise_svg, ) = $svg_infos;
553
+            $filter_id = "filter-". substr(md5($filter_def . strlen($svg)), 0, 8);
554
+            $filter = "<defs><filter id=\"$filter_id\">$filter_def</filter></defs>";
555
+            $g = "<g filter=\"url(#$filter_id)\">";
556
+            $svg = svg_insert_shapes($svg, $filter . $g);
557
+            $svg = svg_insert_shapes($svg, "</g>", false);
558
+        }
559
+        return $svg;
560
+    }
561
+    return $img;
562 562
 }
563 563
 
564 564
 /**
@@ -568,8 +568,8 @@  discard block
 block discarded – undo
568 568
  * @return string
569 569
  */
570 570
 function svg_filter_blur($img, $blur_width) {
571
-	$blur_width = intval($blur_width);
572
-	return svg_apply_filter($img, "<feGaussianBlur stdDeviation=\"$blur_width\"/>");
571
+    $blur_width = intval($blur_width);
572
+    return svg_apply_filter($img, "<feGaussianBlur stdDeviation=\"$blur_width\"/>");
573 573
 }
574 574
 
575 575
 /**
@@ -579,10 +579,10 @@  discard block
 block discarded – undo
579 579
  * @return bool|string
580 580
  */
581 581
 function svg_filter_grayscale($img, $intensity) {
582
-	$value = round(1.0 - $intensity, 2);
583
-	//$filter = "<feColorMatrix type=\"matrix\" values=\"0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0\"/>";
584
-	$filter = "<feColorMatrix type=\"saturate\" values=\"$value\"/>";
585
-	return svg_apply_filter($img, $filter);
582
+    $value = round(1.0 - $intensity, 2);
583
+    //$filter = "<feColorMatrix type=\"matrix\" values=\"0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0\"/>";
584
+    $filter = "<feColorMatrix type=\"saturate\" values=\"$value\"/>";
585
+    return svg_apply_filter($img, $filter);
586 586
 }
587 587
 
588 588
 /**
@@ -592,8 +592,8 @@  discard block
 block discarded – undo
592 592
  * @return bool|string
593 593
  */
594 594
 function svg_filter_sepia($img, $intensity) {
595
-	$filter = "<feColorMatrix type=\"matrix\" values=\"0.30 0.30 0.30 0.0 0 0.25 0.25 0.25 0.0 0 0.20 0.20 0.20 0.0 0 0.00 0.00 0.00 1 0\"/>";
596
-	return svg_apply_filter($img, $filter);
595
+    $filter = "<feColorMatrix type=\"matrix\" values=\"0.30 0.30 0.30 0.0 0 0.25 0.25 0.25 0.0 0 0.20 0.20 0.20 0.0 0 0.00 0.00 0.00 1 0\"/>";
596
+    return svg_apply_filter($img, $filter);
597 597
 }
598 598
 
599 599
 /**
@@ -603,30 +603,30 @@  discard block
 block discarded – undo
603 603
  * @return bool|string
604 604
  */
605 605
 function svg_flip($img, $HorV) {
606
-	if ($svg = svg_force_viewBox_px($img)
607
-	  and $svg_infos = svg_lire_balise_svg($svg)){
608
-
609
-		list($balise_svg, $atts) = $svg_infos;
610
-		$viewBox = explode(' ', $atts['viewBox']);
611
-
612
-		if (!in_array($HorV, ['h', 'H'])) {
613
-			$transform = "scale(-1,1)";
614
-
615
-			$x = intval($viewBox[0]) + intval($viewBox[2]/2);
616
-			$mx = -$x;
617
-			$transform = "translate($x, 0) $transform translate($mx, 0)";
618
-		}
619
-		else {
620
-			$transform = "scale(1,-1)";
621
-
622
-			$y = intval($viewBox[1]) + intval($viewBox[3]/2);
623
-			$my = -$y;
624
-			$transform = "translate(0, $y) $transform translate(0, $my)";
625
-		}
626
-		$svg = svg_transformer($svg, ['transform' => $transform]);
627
-		return $svg;
628
-	}
629
-	return $img;
606
+    if ($svg = svg_force_viewBox_px($img)
607
+      and $svg_infos = svg_lire_balise_svg($svg)){
608
+
609
+        list($balise_svg, $atts) = $svg_infos;
610
+        $viewBox = explode(' ', $atts['viewBox']);
611
+
612
+        if (!in_array($HorV, ['h', 'H'])) {
613
+            $transform = "scale(-1,1)";
614
+
615
+            $x = intval($viewBox[0]) + intval($viewBox[2]/2);
616
+            $mx = -$x;
617
+            $transform = "translate($x, 0) $transform translate($mx, 0)";
618
+        }
619
+        else {
620
+            $transform = "scale(1,-1)";
621
+
622
+            $y = intval($viewBox[1]) + intval($viewBox[3]/2);
623
+            $my = -$y;
624
+            $transform = "translate(0, $y) $transform translate(0, $my)";
625
+        }
626
+        $svg = svg_transformer($svg, ['transform' => $transform]);
627
+        return $svg;
628
+    }
629
+    return $img;
630 630
 }
631 631
 
632 632
 /**
@@ -640,19 +640,19 @@  discard block
 block discarded – undo
640 640
  * @return bool|string
641 641
  */
642 642
 function svg_rotate($img, $angle, $center_x, $center_y) {
643
-	if ($svg = svg_force_viewBox_px($img)
644
-		and $svg_infos = svg_lire_balise_svg($svg)){
643
+    if ($svg = svg_force_viewBox_px($img)
644
+        and $svg_infos = svg_lire_balise_svg($svg)){
645 645
 
646
-		list($balise_svg, $atts) = $svg_infos;
647
-		$viewBox = explode(' ', $atts['viewBox']);
646
+        list($balise_svg, $atts) = $svg_infos;
647
+        $viewBox = explode(' ', $atts['viewBox']);
648 648
 
649
-		$center_x = round($viewBox[0] + $center_x * $viewBox[2]);
650
-		$center_y = round($viewBox[1] + $center_y * $viewBox[3]);
651
-		$svg = svg_transformer($svg, ['transform' => "rotate($angle $center_x $center_y)"]);
649
+        $center_x = round($viewBox[0] + $center_x * $viewBox[2]);
650
+        $center_y = round($viewBox[1] + $center_y * $viewBox[3]);
651
+        $svg = svg_transformer($svg, ['transform' => "rotate($angle $center_x $center_y)"]);
652 652
 
653
-		return $svg;
654
-	}
655
-	return $img;
653
+        return $svg;
654
+    }
655
+    return $img;
656 656
 }
657 657
 
658 658
 /**
@@ -664,40 +664,40 @@  discard block
 block discarded – undo
664 664
  * @return bool|mixed|string
665 665
  */
666 666
 function svg_filtrer_couleurs($img, $callback_filter) {
667
-	if ($svg = svg_force_viewBox_px($img)
668
-	  and $colors = svg_extract_couleurs($svg)) {
669
-
670
-		$colors = array_unique($colors);
671
-
672
-		$short = [];
673
-		$long = [];
674
-		while (count($colors)) {
675
-			$c = array_shift($colors);
676
-			if (strlen($c) == 4) {
677
-				$short[] = $c;
678
-			}
679
-			else {
680
-				$long[] = $c;
681
-			}
682
-		}
683
-
684
-		$colors = array_merge($long, $short);
685
-		$new_colors = [];
686
-		$colors = array_flip($colors);
687
-		foreach ($colors as $c => $k) {
688
-			$colors[$c] = "@@@COLOR$$k$@@@";
689
-		}
690
-
691
-
692
-		foreach ($colors as $original => $replace) {
693
-			$new = svg_couleur_to_hexa($original);
694
-			$new_colors[$replace] = $callback_filter($new);
695
-		}
696
-
697
-		$svg = str_replace(array_keys($colors), array_values($colors), $svg);
698
-		$svg = str_replace(array_keys($new_colors), array_values($new_colors), $svg);
699
-
700
-		return $svg;
701
-	}
702
-	return $img;
667
+    if ($svg = svg_force_viewBox_px($img)
668
+      and $colors = svg_extract_couleurs($svg)) {
669
+
670
+        $colors = array_unique($colors);
671
+
672
+        $short = [];
673
+        $long = [];
674
+        while (count($colors)) {
675
+            $c = array_shift($colors);
676
+            if (strlen($c) == 4) {
677
+                $short[] = $c;
678
+            }
679
+            else {
680
+                $long[] = $c;
681
+            }
682
+        }
683
+
684
+        $colors = array_merge($long, $short);
685
+        $new_colors = [];
686
+        $colors = array_flip($colors);
687
+        foreach ($colors as $c => $k) {
688
+            $colors[$c] = "@@@COLOR$$k$@@@";
689
+        }
690
+
691
+
692
+        foreach ($colors as $original => $replace) {
693
+            $new = svg_couleur_to_hexa($original);
694
+            $new_colors[$replace] = $callback_filter($new);
695
+        }
696
+
697
+        $svg = str_replace(array_keys($colors), array_values($colors), $svg);
698
+        $svg = str_replace(array_keys($new_colors), array_values($new_colors), $svg);
699
+
700
+        return $svg;
701
+    }
702
+    return $img;
703 703
 }
704 704
\ No newline at end of file
Please login to merge, or discard this patch.
Spacing   +40 added lines, -40 removed lines patch added patch discarded remove patch
@@ -22,7 +22,7 @@  discard block
 block discarded – undo
22 22
 
23 23
 if (!defined('IMG_SVG')) {
24 24
 	// complete 	IMG_BMP | IMG_GIF | IMG_JPG | IMG_PNG | IMG_WBMP | IMG_XPM | IMG_WEBP
25
-	define('IMG_SVG',128);
25
+	define('IMG_SVG', 128);
26 26
 	define('IMAGETYPE_SVG', 19);
27 27
 }
28 28
 
@@ -38,7 +38,7 @@  discard block
 block discarded – undo
38 38
  * @return bool|string
39 39
  *   false si on a pas pu charger l'image
40 40
  */
41
-function svg_charger($fichier, $maxlen=null) {
41
+function svg_charger($fichier, $maxlen = null) {
42 42
 	if (strpos($fichier, "data:image/svg+xml") === 0) {
43 43
 		$image = explode(";", $fichier, 2);
44 44
 		$image = end($image);
@@ -56,7 +56,7 @@  discard block
 block discarded – undo
56 56
 		return $fichier;
57 57
 	}
58 58
 	if (!file_exists($fichier)) {
59
-		$fichier  = supprimer_timestamp($fichier);
59
+		$fichier = supprimer_timestamp($fichier);
60 60
 		if (!file_exists($fichier)) {
61 61
 			return false;
62 62
 		}
@@ -65,7 +65,7 @@  discard block
 block discarded – undo
65 65
 		$image = file_get_contents($fichier);
66 66
 	}
67 67
 	else {
68
-		$image = file_get_contents($fichier, false,null,0, $maxlen);
68
+		$image = file_get_contents($fichier, false, null, 0, $maxlen);
69 69
 	}
70 70
 	// est-ce bien une image svg ?
71 71
 	if (strpos($image, "<svg") !== false) {
@@ -87,7 +87,7 @@  discard block
 block discarded – undo
87 87
 	if (($ps = stripos($debut_fichier, "<svg")) !== false) {
88 88
 
89 89
 		$pe = stripos($debut_fichier, ">", $ps);
90
-		$balise_svg = substr($debut_fichier, $ps, $pe - $ps +1);
90
+		$balise_svg = substr($debut_fichier, $ps, $pe - $ps + 1);
91 91
 
92 92
 		if (preg_match_all(",([\w:\-]+)=,Uims", $balise_svg, $matches)) {
93 93
 			if (!function_exists('extraire_attribut')) {
@@ -127,29 +127,29 @@  discard block
 block discarded – undo
127 127
  * @return bool|float|int
128 128
  */
129 129
 function svg_dimension_to_pixels($dimension, $precision = 2) {
130
-	if (preg_match(',^(-?\d+(\.\d+)?)([^\d]*),i', trim($dimension), $m)){
130
+	if (preg_match(',^(-?\d+(\.\d+)?)([^\d]*),i', trim($dimension), $m)) {
131 131
 		switch (strtolower($m[2])) {
132 132
 			case '%':
133 133
 				// on ne sait pas faire :(
134 134
 				return false;
135 135
 				break;
136 136
 			case 'em':
137
-				return round($m[1]*16, $precision); // 16px font-size par defaut
137
+				return round($m[1] * 16, $precision); // 16px font-size par defaut
138 138
 				break;
139 139
 			case 'ex':
140
-				return round($m[1]*16, $precision); // 16px font-size par defaut
140
+				return round($m[1] * 16, $precision); // 16px font-size par defaut
141 141
 				break;
142 142
 			case 'pc':
143
-				return round($m[1]*16, $precision); // 1/6 inch = 96px/6 in CSS
143
+				return round($m[1] * 16, $precision); // 1/6 inch = 96px/6 in CSS
144 144
 				break;
145 145
 			case 'cm':
146
-				return round($m[1]*96/2.54, $precision); // 96px / 2.54cm;
146
+				return round($m[1] * 96 / 2.54, $precision); // 96px / 2.54cm;
147 147
 				break;
148 148
 			case 'mm':
149
-				return round($m[1]*96/25.4, $precision); // 96px / 25.4mm;
149
+				return round($m[1] * 96 / 25.4, $precision); // 96px / 25.4mm;
150 150
 				break;
151 151
 			case 'in':
152
-				return round($m[1]*96, $precision); // 1 inch = 96px in CSS
152
+				return round($m[1] * 96, $precision); // 1 inch = 96px in CSS
153 153
 				break;
154 154
 			case 'px':
155 155
 			case 'pt':
@@ -187,15 +187,15 @@  discard block
 block discarded – undo
187 187
  *   inserer au debut (true) ou a la fin (false)
188 188
  * @return string
189 189
  */
190
-function svg_insert_shapes($svg, $shapes, $start=true) {
190
+function svg_insert_shapes($svg, $shapes, $start = true) {
191 191
 
192 192
 	if ($start === false or $start === 'end') {
193
-		$svg = str_replace("</svg>", $shapes . "</svg>", $svg);
193
+		$svg = str_replace("</svg>", $shapes."</svg>", $svg);
194 194
 	}
195 195
 	else {
196 196
 		$p = stripos($svg, "<svg");
197 197
 		$p = strpos($svg, ">", $p);
198
-		$svg = substr_replace($svg, $shapes, $p+1, 0);
198
+		$svg = substr_replace($svg, $shapes, $p + 1, 0);
199 199
 	}
200 200
 	return $svg;
201 201
 }
@@ -211,10 +211,10 @@  discard block
 block discarded – undo
211 211
  */
212 212
 function svg_clip_in_box($svg, $x, $y, $width, $height) {
213 213
 	$rect = "<rect x=\"$x\" y=\"$y\" width=\"$width\" height=\"$height\" />";
214
-	$id = 'clip-'.substr(md5($rect . strlen($svg)),0,8);
214
+	$id = 'clip-'.substr(md5($rect.strlen($svg)), 0, 8);
215 215
 	$clippath = "<clipPath id=\"$id\">$rect</clipPath>";
216 216
 	$g = "<g clip-path=\"url(#$id)\">";
217
-	$svg = svg_insert_shapes($svg, $clippath . $g);
217
+	$svg = svg_insert_shapes($svg, $clippath.$g);
218 218
 	$svg = svg_insert_shapes($svg, "</g>", false);
219 219
 	return $svg;
220 220
 }
@@ -232,7 +232,7 @@  discard block
 block discarded – undo
232 232
 
233 233
 		list($balise_svg, $attributs) = $svg_infos;
234 234
 		if (!isset($attributs['viewBox'])) {
235
-			$attributs['viewBox'] = "0 0 " . $attributs['width'] . " " . $attributs['height'];
235
+			$attributs['viewBox'] = "0 0 ".$attributs['width']." ".$attributs['height'];
236 236
 		}
237 237
 		$attributs['width'] = strval($new_width);
238 238
 		$attributs['height'] = strval($new_height);
@@ -250,14 +250,14 @@  discard block
 block discarded – undo
250 250
  * @return string
251 251
  */
252 252
 function svg_couleur_to_hexa($couleur) {
253
-	if (strpos($couleur, "rgb(")===0) {
253
+	if (strpos($couleur, "rgb(") === 0) {
254 254
 		$c = explode(',', substr($couleur, 4));
255 255
 		$couleur = _couleur_dec_to_hex(intval($c[0]), intval($c[1]), intval($c[2]));
256 256
 	}
257 257
 	else {
258 258
 		$couleur = couleur_html_to_hex($couleur);
259 259
 	}
260
-	$couleur = '#'.ltrim($couleur,'#');
260
+	$couleur = '#'.ltrim($couleur, '#');
261 261
 	return $couleur;
262 262
 }
263 263
 
@@ -267,9 +267,9 @@  discard block
 block discarded – undo
267 267
  * @return array
268 268
  */
269 269
 function svg_couleur_to_rgb($couleur) {
270
-	if (strpos($couleur, "rgb(")===0) {
270
+	if (strpos($couleur, "rgb(") === 0) {
271 271
 		$c = explode(',', substr($couleur, 4));
272
-		return ['red' => intval($c[0]),'green' => intval($c[1]),'blue' => intval($c[2])];
272
+		return ['red' => intval($c[0]), 'green' => intval($c[1]), 'blue' => intval($c[2])];
273 273
 	}
274 274
 	return _couleur_hex_to_dec($couleur);
275 275
 }
@@ -357,7 +357,7 @@  discard block
 block discarded – undo
357 357
  */
358 358
 function svg_force_viewBox_px($img, $force_width_and_height = false) {
359 359
 	if ($svg = svg_charger($img)
360
-	  and $svg_infos = svg_lire_balise_svg($svg)){
360
+	  and $svg_infos = svg_lire_balise_svg($svg)) {
361 361
 
362 362
 		list($balise_svg, $attributs) = $svg_infos;
363 363
 
@@ -397,7 +397,7 @@  discard block
 block discarded – undo
397 397
  * @param $new_height
398 398
  * @return bool|string
399 399
  */
400
-function svg_recadrer($img, $new_width, $new_height, $offset_width, $offset_height, $background_color='') {
400
+function svg_recadrer($img, $new_width, $new_height, $offset_width, $offset_height, $background_color = '') {
401 401
 	if ($svg = svg_force_viewBox_px($img)
402 402
 	  and $svg_infos = svg_lire_balise_svg($svg)) {
403 403
 
@@ -423,7 +423,7 @@  discard block
 block discarded – undo
423 423
 			$viewport_oy = round($viewport_oy * $yscale, 2);
424 424
 		}
425 425
 
426
-		if ($viewport_w>$viewBox[2] or $viewport_h>$viewBox[3]) {
426
+		if ($viewport_w > $viewBox[2] or $viewport_h > $viewBox[3]) {
427 427
 			$svg = svg_clip_in_box($svg, $viewBox[0], $viewBox[1], $viewBox[2], $viewBox[3]);
428 428
 		}
429 429
 
@@ -440,7 +440,7 @@  discard block
 block discarded – undo
440 440
 		$svg = svg_change_balise_svg($svg, $balise_svg, $attributs);
441 441
 
442 442
 		// ajouter un background
443
-		if ($background_color and $background_color!=='transparent') {
443
+		if ($background_color and $background_color !== 'transparent') {
444 444
 			$svg = svg_ajouter_background($svg, $background_color);
445 445
 		}
446 446
 
@@ -458,9 +458,9 @@  discard block
 block discarded – undo
458 458
  */
459 459
 function svg_ajouter_background($img, $background_color) {
460 460
 	if ($svg = svg_charger($img)
461
-	  and $svg_infos = svg_lire_balise_svg($svg)){
461
+	  and $svg_infos = svg_lire_balise_svg($svg)) {
462 462
 
463
-		if ($background_color and $background_color!=='transparent') {
463
+		if ($background_color and $background_color !== 'transparent') {
464 464
 			list($balise_svg, $attributs) = $svg_infos;
465 465
 
466 466
 			$background_color = svg_couleur_to_hexa($background_color);
@@ -487,9 +487,9 @@  discard block
 block discarded – undo
487 487
  */
488 488
 function svg_ajouter_voile($img, $background_color, $opacity) {
489 489
 	if ($svg = svg_charger($img)
490
-	  and $svg_infos = svg_lire_balise_svg($svg)){
490
+	  and $svg_infos = svg_lire_balise_svg($svg)) {
491 491
 
492
-		if ($background_color and $background_color!=='transparent') {
492
+		if ($background_color and $background_color !== 'transparent') {
493 493
 			list($balise_svg, $attributs) = $svg_infos;
494 494
 
495 495
 			$background_color = svg_couleur_to_hexa($background_color);
@@ -516,10 +516,10 @@  discard block
 block discarded – undo
516 516
  */
517 517
 function svg_transformer($img, $attributs) {
518 518
 	if ($svg = svg_charger($img)
519
-	  and $svg_infos = svg_lire_balise_svg($svg)){
519
+	  and $svg_infos = svg_lire_balise_svg($svg)) {
520 520
 
521 521
 		if ($attributs) {
522
-			list($balise_svg, ) = $svg_infos;
522
+			list($balise_svg,) = $svg_infos;
523 523
 			$g = "<g";
524 524
 			foreach ($attributs as $k=>$v) {
525 525
 				if (strlen($v)) {
@@ -546,14 +546,14 @@  discard block
 block discarded – undo
546 546
  */
547 547
 function svg_apply_filter($img, $filter_def) {
548 548
 	if ($svg = svg_charger($img)
549
-	  and $svg_infos = svg_lire_balise_svg($svg)){
549
+	  and $svg_infos = svg_lire_balise_svg($svg)) {
550 550
 
551 551
 		if ($filter_def) {
552
-			list($balise_svg, ) = $svg_infos;
553
-			$filter_id = "filter-". substr(md5($filter_def . strlen($svg)), 0, 8);
552
+			list($balise_svg,) = $svg_infos;
553
+			$filter_id = "filter-".substr(md5($filter_def.strlen($svg)), 0, 8);
554 554
 			$filter = "<defs><filter id=\"$filter_id\">$filter_def</filter></defs>";
555 555
 			$g = "<g filter=\"url(#$filter_id)\">";
556
-			$svg = svg_insert_shapes($svg, $filter . $g);
556
+			$svg = svg_insert_shapes($svg, $filter.$g);
557 557
 			$svg = svg_insert_shapes($svg, "</g>", false);
558 558
 		}
559 559
 		return $svg;
@@ -604,7 +604,7 @@  discard block
 block discarded – undo
604 604
  */
605 605
 function svg_flip($img, $HorV) {
606 606
 	if ($svg = svg_force_viewBox_px($img)
607
-	  and $svg_infos = svg_lire_balise_svg($svg)){
607
+	  and $svg_infos = svg_lire_balise_svg($svg)) {
608 608
 
609 609
 		list($balise_svg, $atts) = $svg_infos;
610 610
 		$viewBox = explode(' ', $atts['viewBox']);
@@ -612,14 +612,14 @@  discard block
 block discarded – undo
612 612
 		if (!in_array($HorV, ['h', 'H'])) {
613 613
 			$transform = "scale(-1,1)";
614 614
 
615
-			$x = intval($viewBox[0]) + intval($viewBox[2]/2);
615
+			$x = intval($viewBox[0]) + intval($viewBox[2] / 2);
616 616
 			$mx = -$x;
617 617
 			$transform = "translate($x, 0) $transform translate($mx, 0)";
618 618
 		}
619 619
 		else {
620 620
 			$transform = "scale(1,-1)";
621 621
 
622
-			$y = intval($viewBox[1]) + intval($viewBox[3]/2);
622
+			$y = intval($viewBox[1]) + intval($viewBox[3] / 2);
623 623
 			$my = -$y;
624 624
 			$transform = "translate(0, $y) $transform translate(0, $my)";
625 625
 		}
@@ -641,7 +641,7 @@  discard block
 block discarded – undo
641 641
  */
642 642
 function svg_rotate($img, $angle, $center_x, $center_y) {
643 643
 	if ($svg = svg_force_viewBox_px($img)
644
-		and $svg_infos = svg_lire_balise_svg($svg)){
644
+		and $svg_infos = svg_lire_balise_svg($svg)) {
645 645
 
646 646
 		list($balise_svg, $atts) = $svg_infos;
647 647
 		$viewBox = explode(' ', $atts['viewBox']);
Please login to merge, or discard this patch.
Braces   +13 added lines, -26 removed lines patch added patch discarded remove patch
@@ -63,8 +63,7 @@  discard block
 block discarded – undo
63 63
 	}
64 64
 	if (is_null($maxlen)) {
65 65
 		$image = file_get_contents($fichier);
66
-	}
67
-	else {
66
+	} else {
68 67
 		$image = file_get_contents($fichier, false,null,0, $maxlen);
69 68
 	}
70 69
 	// est-ce bien une image svg ?
@@ -191,8 +190,7 @@  discard block
 block discarded – undo
191 190
 
192 191
 	if ($start === false or $start === 'end') {
193 192
 		$svg = str_replace("</svg>", $shapes . "</svg>", $svg);
194
-	}
195
-	else {
193
+	} else {
196 194
 		$p = stripos($svg, "<svg");
197 195
 		$p = strpos($svg, ">", $p);
198 196
 		$svg = substr_replace($svg, $shapes, $p+1, 0);
@@ -253,8 +251,7 @@  discard block
 block discarded – undo
253 251
 	if (strpos($couleur, "rgb(")===0) {
254 252
 		$c = explode(',', substr($couleur, 4));
255 253
 		$couleur = _couleur_dec_to_hex(intval($c[0]), intval($c[1]), intval($c[2]));
256
-	}
257
-	else {
254
+	} else {
258 255
 		$couleur = couleur_html_to_hex($couleur);
259 256
 	}
260 257
 	$couleur = '#'.ltrim($couleur,'#');
@@ -303,33 +300,27 @@  discard block
 block discarded – undo
303 300
 	if (isset($attributs['width'])
304 301
 	  and $w = svg_dimension_to_pixels($attributs['width'])) {
305 302
 		$width = $w;
306
-	}
307
-	else {
303
+	} else {
308 304
 		// si on recupere la taille de la viewbox mais si la viewbox est petite on met un multiplicateur pour la taille finale
309 305
 		$width = $viewBox[2];
310 306
 		if ($width < 1) {
311 307
 			$coeff = max($coeff, 1000);
312
-		}
313
-		elseif ($width < 10) {
308
+		} elseif ($width < 10) {
314 309
 			$coeff = max($coeff, 100);
315
-		}
316
-		elseif ($width < 100) {
310
+		} elseif ($width < 100) {
317 311
 			$coeff = max($coeff, 10);
318 312
 		}
319 313
 	}
320 314
 	if (isset($attributs['height'])
321 315
 	  and $h = svg_dimension_to_pixels($attributs['height'])) {
322 316
 		$height = $h;
323
-	}
324
-	else {
317
+	} else {
325 318
 		$height = $viewBox[3];
326 319
 		if ($height < 1) {
327 320
 			$coeff = max($coeff, 1000);
328
-		}
329
-		elseif ($height < 10) {
321
+		} elseif ($height < 10) {
330 322
 			$coeff = max($coeff, 100);
331
-		}
332
-		elseif ($height < 100) {
323
+		} elseif ($height < 100) {
333 324
 			$coeff = max($coeff, 10);
334 325
 		}
335 326
 	}
@@ -467,8 +458,7 @@  discard block
 block discarded – undo
467 458
 			if (isset($attributs['viewBox'])) {
468 459
 				$viewBox = explode(' ', $attributs['viewBox']);
469 460
 				$rect = "<rect x=\"".$viewBox[0]."\" y=\"".$viewBox[1]."\" width=\"".$viewBox[2]."\" height=\"".$viewBox[3]."\" fill=\"$background_color\"/>";
470
-			}
471
-			else {
461
+			} else {
472 462
 				$rect = "<rect width=\"100%\" height=\"100%\" fill=\"$background_color\"/>";
473 463
 			}
474 464
 			$svg = svg_insert_shapes($svg, $rect);
@@ -496,8 +486,7 @@  discard block
 block discarded – undo
496 486
 			if (isset($attributs['viewBox'])) {
497 487
 				$viewBox = explode(' ', $attributs['viewBox']);
498 488
 				$rect = "<rect x=\"".$viewBox[0]."\" y=\"".$viewBox[1]."\" width=\"".$viewBox[2]."\" height=\"".$viewBox[3]."\" fill=\"$background_color\" opacity=\"$opacity\"/>";
499
-			}
500
-			else {
489
+			} else {
501 490
 				$rect = "<rect width=\"100%\" height=\"100%\" fill=\"$background_color\"/>";
502 491
 			}
503 492
 			$svg = svg_insert_shapes($svg, $rect, false);
@@ -615,8 +604,7 @@  discard block
 block discarded – undo
615 604
 			$x = intval($viewBox[0]) + intval($viewBox[2]/2);
616 605
 			$mx = -$x;
617 606
 			$transform = "translate($x, 0) $transform translate($mx, 0)";
618
-		}
619
-		else {
607
+		} else {
620 608
 			$transform = "scale(1,-1)";
621 609
 
622 610
 			$y = intval($viewBox[1]) + intval($viewBox[3]/2);
@@ -675,8 +663,7 @@  discard block
 block discarded – undo
675 663
 			$c = array_shift($colors);
676 664
 			if (strlen($c) == 4) {
677 665
 				$short[] = $c;
678
-			}
679
-			else {
666
+			} else {
680 667
 				$long[] = $c;
681 668
 			}
682 669
 		}
Please login to merge, or discard this patch.
ecrire/lang/ecrire_bg.php 1 patch
Indentation   +544 added lines, -544 removed lines patch added patch discarded remove patch
@@ -4,311 +4,311 @@  discard block
 block discarded – undo
4 4
 // ** ne pas modifier le fichier **
5 5
 
6 6
 if (!defined('_ECRIRE_INC_VERSION')) {
7
-	return;
7
+    return;
8 8
 }
9 9
 
10 10
 $GLOBALS[$GLOBALS['idx_lang']] = array(
11 11
 
12
-	// A
13
-	'activer_plugin' => 'Активирайте плъгина',
14
-	'aide_non_disponible' => 'Тази част от рубриката "Помощник" все още не е публикувана на български език.',
15
-	'auteur' => 'Автор:',
16
-	'avis_acces_interdit' => 'Забранен достъп.',
17
-	'avis_article_modifie' => 'Предупреждение! @nom_auteur_modif@ е работил по тази статия преди @date_diff@ минути',
18
-	'avis_aucun_resultat' => 'Няма намерени резултати.',
19
-	'avis_chemin_invalide_1' => 'Името на файла, което сте избрали',
20
-	'avis_chemin_invalide_2' => 'е грешно. Моля, върнете се на предишната страница, за за проверите подадената информация. ',
21
-	'avis_connexion_echec_1' => 'Връзката към SQL сървъра се разпадна.', # MODIF
22
-	'avis_connexion_echec_2' => 'Моля, върнете се на предишната страница, за да проверите подадената информация.',
23
-	'avis_connexion_echec_3' => '<b>ВНИМАНИЕ!</b> За достъп до голяма част от сървърите е необходимо да се изпрати <b>заявка</b> за активиране достъпа до базите данни SQL, преди използването им. Ако не успеете да се свържете, проверете дали сте изпратили заявката.', # MODIF
24
-	'avis_connexion_ldap_echec_1' => 'Връзката с LDAP сървъра пропадна.',
25
-	'avis_connexion_ldap_echec_2' => 'Моля, върнете се на предишната страница, за за проверите подадената информация.',
26
-	'avis_connexion_ldap_echec_3' => 'Без използване на LDAP-поддръжка за вписване на потребители.',
27
-	'avis_deplacement_rubrique' => 'Предупреждение! Рубриката съдържа @contient_breves@ новина@scb@: ако желаете да я преместите, отметнете в полето за потвърждение. ',
28
-	'avis_erreur_connexion_mysql' => 'Грешка при свързване с SQL',
29
-	'avis_espace_interdit' => '<b>Забранена област</b><p>СПИП е вече инсталиран.', # MODIF
30
-	'avis_lecture_noms_bases_1' => 'Инсталаторът не може да прочете имената на инсталираните бази данни.',
31
-	'avis_lecture_noms_bases_2' => 'Или не съществува база данни, или свойството, позволяващо преглед на базите данни е забранено
12
+    // A
13
+    'activer_plugin' => 'Активирайте плъгина',
14
+    'aide_non_disponible' => 'Тази част от рубриката "Помощник" все още не е публикувана на български език.',
15
+    'auteur' => 'Автор:',
16
+    'avis_acces_interdit' => 'Забранен достъп.',
17
+    'avis_article_modifie' => 'Предупреждение! @nom_auteur_modif@ е работил по тази статия преди @date_diff@ минути',
18
+    'avis_aucun_resultat' => 'Няма намерени резултати.',
19
+    'avis_chemin_invalide_1' => 'Името на файла, което сте избрали',
20
+    'avis_chemin_invalide_2' => 'е грешно. Моля, върнете се на предишната страница, за за проверите подадената информация. ',
21
+    'avis_connexion_echec_1' => 'Връзката към SQL сървъра се разпадна.', # MODIF
22
+    'avis_connexion_echec_2' => 'Моля, върнете се на предишната страница, за да проверите подадената информация.',
23
+    'avis_connexion_echec_3' => '<b>ВНИМАНИЕ!</b> За достъп до голяма част от сървърите е необходимо да се изпрати <b>заявка</b> за активиране достъпа до базите данни SQL, преди използването им. Ако не успеете да се свържете, проверете дали сте изпратили заявката.', # MODIF
24
+    'avis_connexion_ldap_echec_1' => 'Връзката с LDAP сървъра пропадна.',
25
+    'avis_connexion_ldap_echec_2' => 'Моля, върнете се на предишната страница, за за проверите подадената информация.',
26
+    'avis_connexion_ldap_echec_3' => 'Без използване на LDAP-поддръжка за вписване на потребители.',
27
+    'avis_deplacement_rubrique' => 'Предупреждение! Рубриката съдържа @contient_breves@ новина@scb@: ако желаете да я преместите, отметнете в полето за потвърждение. ',
28
+    'avis_erreur_connexion_mysql' => 'Грешка при свързване с SQL',
29
+    'avis_espace_interdit' => '<b>Забранена област</b><p>СПИП е вече инсталиран.', # MODIF
30
+    'avis_lecture_noms_bases_1' => 'Инсталаторът не може да прочете имената на инсталираните бази данни.',
31
+    'avis_lecture_noms_bases_2' => 'Или не съществува база данни, или свойството, позволяващо преглед на базите данни е забранено
32 32
   поради съображения за сигурност (какъвто е случаят с много доставчици).',
33
-	'avis_lecture_noms_bases_3' => 'Ако втората възможност се окаже вярна, тогава е възможно да се използва базата данни, указана след Вашето влизане в системата.',
34
-	'avis_non_acces_page' => 'Забранен достъп до тази страница.',
35
-	'avis_operation_echec' => 'Операцията пропадна.',
36
-	'avis_suppression_base' => 'ПРЕДУПРЕЖДЕНИЕ: изтриването на данните е необратимо',
33
+    'avis_lecture_noms_bases_3' => 'Ако втората възможност се окаже вярна, тогава е възможно да се използва базата данни, указана след Вашето влизане в системата.',
34
+    'avis_non_acces_page' => 'Забранен достъп до тази страница.',
35
+    'avis_operation_echec' => 'Операцията пропадна.',
36
+    'avis_suppression_base' => 'ПРЕДУПРЕЖДЕНИЕ: изтриването на данните е необратимо',
37 37
 
38
-	// B
39
-	'bouton_acces_ldap' => 'Добавяне достъп до LDAP >>',
40
-	'bouton_ajouter' => 'Добавяне',
41
-	'bouton_demande_publication' => 'Заявка за публикуване на статията',
42
-	'bouton_desactive_tout' => 'Деактивирайте всички',
43
-	'bouton_effacer_tout' => 'Изтриване на ВСИЧКО',
44
-	'bouton_envoyer_message' => 'Последно съобщение: изпращане',
45
-	'bouton_modifier' => 'Промяна',
46
-	'bouton_radio_afficher' => 'Показване',
47
-	'bouton_radio_apparaitre_liste_redacteurs_connectes' => 'Добяване към списъка на текущо свързаните редактори',
48
-	'bouton_radio_envoi_annonces_adresse' => 'Изпращане на съобщения до следния адрес:',
49
-	'bouton_radio_envoi_liste_nouveautes' => 'Изпращане на списък с новини',
50
-	'bouton_radio_non_apparaitre_liste_redacteurs_connectes' => 'Изключване от списъка на текущо свързаните редактори',
51
-	'bouton_radio_non_envoi_annonces_editoriales' => 'Отказ от изпращане на редакторски съобщения',
52
-	'bouton_redirection' => 'ПРЕНАСОЧВАНЕ',
53
-	'bouton_relancer_installation' => 'Подновяване на инсталацията',
54
-	'bouton_suivant' => 'По-нататък',
55
-	'bouton_tenter_recuperation' => 'Опит за възстановяване',
56
-	'bouton_test_proxy' => 'Тестване на прокси',
57
-	'bouton_vider_cache' => 'Изпразване на кеш-паметта',
38
+    // B
39
+    'bouton_acces_ldap' => 'Добавяне достъп до LDAP >>',
40
+    'bouton_ajouter' => 'Добавяне',
41
+    'bouton_demande_publication' => 'Заявка за публикуване на статията',
42
+    'bouton_desactive_tout' => 'Деактивирайте всички',
43
+    'bouton_effacer_tout' => 'Изтриване на ВСИЧКО',
44
+    'bouton_envoyer_message' => 'Последно съобщение: изпращане',
45
+    'bouton_modifier' => 'Промяна',
46
+    'bouton_radio_afficher' => 'Показване',
47
+    'bouton_radio_apparaitre_liste_redacteurs_connectes' => 'Добяване към списъка на текущо свързаните редактори',
48
+    'bouton_radio_envoi_annonces_adresse' => 'Изпращане на съобщения до следния адрес:',
49
+    'bouton_radio_envoi_liste_nouveautes' => 'Изпращане на списък с новини',
50
+    'bouton_radio_non_apparaitre_liste_redacteurs_connectes' => 'Изключване от списъка на текущо свързаните редактори',
51
+    'bouton_radio_non_envoi_annonces_editoriales' => 'Отказ от изпращане на редакторски съобщения',
52
+    'bouton_redirection' => 'ПРЕНАСОЧВАНЕ',
53
+    'bouton_relancer_installation' => 'Подновяване на инсталацията',
54
+    'bouton_suivant' => 'По-нататък',
55
+    'bouton_tenter_recuperation' => 'Опит за възстановяване',
56
+    'bouton_test_proxy' => 'Тестване на прокси',
57
+    'bouton_vider_cache' => 'Изпразване на кеш-паметта',
58 58
 
59
-	// C
60
-	'cache_modifiable_webmestre' => 'Параметърът може да бъде променен от уеб-администратора. ',
61
-	'calendrier_synchro' => 'Ако инсталирате приложение за дневник, съвместимо с <b>iCal</b>, ще можете да го синхронизирате с информацията от сайта.',
59
+    // C
60
+    'cache_modifiable_webmestre' => 'Параметърът може да бъде променен от уеб-администратора. ',
61
+    'calendrier_synchro' => 'Ако инсталирате приложение за дневник, съвместимо с <b>iCal</b>, ще можете да го синхронизирате с информацията от сайта.',
62 62
 
63
-	// D
64
-	'date_mot_heures' => 'ч.',
63
+    // D
64
+    'date_mot_heures' => 'ч.',
65 65
 
66
-	// E
67
-	'email' => 'електронен адрес',
68
-	'email_2' => 'електронен адрес:',
69
-	'entree_adresse_annuaire' => 'Адрес на директорията',
70
-	'entree_adresse_email' => 'Електронен адрес (е-mail)',
71
-	'entree_base_donnee_1' => 'Адрес на базата данни',
72
-	'entree_base_donnee_2' => '(Често адресът съвпада с адрес от Вашия сайт, понякога съответства на името «localhost», а понякога се оставя празен.)',
73
-	'entree_biographie' => 'Кратка биография с няколко думи.',
74
-	'entree_chemin_acces' => '<b>Въвеждане</b> на път:',
75
-	'entree_cle_pgp' => 'PGP ключ',
76
-	'entree_contenu_rubrique' => '(Кратко съдържание на рубриката.)',
77
-	'entree_identifiants_connexion' => 'Идентефикатори за свързване',
78
-	'entree_informations_connexion_ldap' => 'Моля, попълнете бланката с информацията за LDAP връзка. Тази информация ще получите от системния или мрежовия администратор.',
79
-	'entree_infos_perso' => 'Кой си ти?',
80
-	'entree_interieur_rubrique' => 'В рубриката:',
81
-	'entree_liens_sites' => '<b>Хипертекстова препратка</b> (препратка, сайт за посещаване и т.н.)',
82
-	'entree_login' => 'Вход',
83
-	'entree_login_connexion_1' => 'Потребителско име за свързване',
84
-	'entree_login_connexion_2' => '(Понякога съвпада с Вашето потребителско име към FTP достъпа, понякога се оставя празно)',
85
-	'entree_mot_passe' => 'Парола',
86
-	'entree_mot_passe_1' => 'Парола за свързване',
87
-	'entree_mot_passe_2' => '(Понякога съвпада с паролата Ви за FTP-достъп, понякога се оставя празно)',
88
-	'entree_nom_fichier' => 'Моля, попълнете име на файла @texte_compresse@:',
89
-	'entree_nom_pseudo' => 'Име или прякор',
90
-	'entree_nom_pseudo_1' => '(Име или прякор)',
91
-	'entree_nom_site' => 'Име на сайта',
92
-	'entree_nouveau_passe' => 'Нова парола',
93
-	'entree_passe_ldap' => 'Парола',
94
-	'entree_port_annuaire' => 'Номер на порта на директорията',
95
-	'entree_signature' => 'Подпис',
96
-	'entree_titre_obligatoire' => '<b>Заглавие</b> [Задължително]<br />',
97
-	'entree_url' => 'URL на сайта',
98
-	'erreur_plugin_fichier_absent' => 'Липсва файл',
99
-	'erreur_plugin_fichier_def_absent' => 'Файлът - дефиниция липсва',
100
-	'erreur_plugin_nom_fonction_interdit' => 'Забранено име на функцията',
101
-	'erreur_plugin_nom_manquant' => 'Липсва име на плъгина',
102
-	'erreur_plugin_prefix_manquant' => 'Не е определено име, указващо мястото на плъгина',
103
-	'erreur_plugin_tag_plugin_absent' => '&lt;плъгин&gt; липсва във файла - дефиниция',
104
-	'erreur_plugin_version_manquant' => 'Липсва версията на плъгина',
66
+    // E
67
+    'email' => 'електронен адрес',
68
+    'email_2' => 'електронен адрес:',
69
+    'entree_adresse_annuaire' => 'Адрес на директорията',
70
+    'entree_adresse_email' => 'Електронен адрес (е-mail)',
71
+    'entree_base_donnee_1' => 'Адрес на базата данни',
72
+    'entree_base_donnee_2' => '(Често адресът съвпада с адрес от Вашия сайт, понякога съответства на името «localhost», а понякога се оставя празен.)',
73
+    'entree_biographie' => 'Кратка биография с няколко думи.',
74
+    'entree_chemin_acces' => '<b>Въвеждане</b> на път:',
75
+    'entree_cle_pgp' => 'PGP ключ',
76
+    'entree_contenu_rubrique' => '(Кратко съдържание на рубриката.)',
77
+    'entree_identifiants_connexion' => 'Идентефикатори за свързване',
78
+    'entree_informations_connexion_ldap' => 'Моля, попълнете бланката с информацията за LDAP връзка. Тази информация ще получите от системния или мрежовия администратор.',
79
+    'entree_infos_perso' => 'Кой си ти?',
80
+    'entree_interieur_rubrique' => 'В рубриката:',
81
+    'entree_liens_sites' => '<b>Хипертекстова препратка</b> (препратка, сайт за посещаване и т.н.)',
82
+    'entree_login' => 'Вход',
83
+    'entree_login_connexion_1' => 'Потребителско име за свързване',
84
+    'entree_login_connexion_2' => '(Понякога съвпада с Вашето потребителско име към FTP достъпа, понякога се оставя празно)',
85
+    'entree_mot_passe' => 'Парола',
86
+    'entree_mot_passe_1' => 'Парола за свързване',
87
+    'entree_mot_passe_2' => '(Понякога съвпада с паролата Ви за FTP-достъп, понякога се оставя празно)',
88
+    'entree_nom_fichier' => 'Моля, попълнете име на файла @texte_compresse@:',
89
+    'entree_nom_pseudo' => 'Име или прякор',
90
+    'entree_nom_pseudo_1' => '(Име или прякор)',
91
+    'entree_nom_site' => 'Име на сайта',
92
+    'entree_nouveau_passe' => 'Нова парола',
93
+    'entree_passe_ldap' => 'Парола',
94
+    'entree_port_annuaire' => 'Номер на порта на директорията',
95
+    'entree_signature' => 'Подпис',
96
+    'entree_titre_obligatoire' => '<b>Заглавие</b> [Задължително]<br />',
97
+    'entree_url' => 'URL на сайта',
98
+    'erreur_plugin_fichier_absent' => 'Липсва файл',
99
+    'erreur_plugin_fichier_def_absent' => 'Файлът - дефиниция липсва',
100
+    'erreur_plugin_nom_fonction_interdit' => 'Забранено име на функцията',
101
+    'erreur_plugin_nom_manquant' => 'Липсва име на плъгина',
102
+    'erreur_plugin_prefix_manquant' => 'Не е определено име, указващо мястото на плъгина',
103
+    'erreur_plugin_tag_plugin_absent' => '&lt;плъгин&gt; липсва във файла - дефиниция',
104
+    'erreur_plugin_version_manquant' => 'Липсва версията на плъгина',
105 105
 
106
-	// I
107
-	'ical_info1' => 'Тази страница представя няколко начина да останете във връзка с дейността на сайта.',
108
-	'ical_info2' => 'За повече информация, отидете на <a href="@spipnet@">Документация за СПИП</a>.', # MODIF
109
-	'ical_info_calendrier' => 'Имате на разположение два календара. Първият е карта на сайта, указваща всички публикувани статии. Вторият съдържа обявления за редакторите, както и най-новите лични съобщения до Вас. Този календар се показва само на Вас, благодарение на личнен ключ, който можете да променяте по всяко време чрез смяна на паролата.',
110
-	'ical_methode_http' => 'Сваляне',
111
-	'ical_methode_webcal' => 'Синхронизация (webcal://)', # MODIF
112
-	'ical_texte_js' => 'Един ред на скрипт Java позволява на всяка страница от сайта лесно да се показват най-новите публикувани статии.',
113
-	'ical_texte_prive' => 'Календарът е строго личен. Той уведомява за вътрешните редакторски дейности на сайта (напр. задачи, лични срещи, изпратени статии и новини и др.)',
114
-	'ical_texte_public' => 'Календарът Ви дава възможност да следите публичните дейности на сайта (напр. публикувани статии и новини).',
115
-	'ical_texte_rss' => 'Можете да обедините последните новини от сайта на всеки файлов четец от типа XML/RSS (Rich Site Summary). Това е същият формат, който позволява на СПИП да чете последните новини, публикувани от други сайтове като за целта използва съвместим формат за обмен.',
116
-	'ical_titre_js' => 'Скрипт Java',
117
-	'ical_titre_mailing' => 'Пощенски списък',
118
-	'ical_titre_rss' => 'Файлове за обединение',
119
-	'icone_activer_cookie' => 'Поставяне на cookie',
120
-	'icone_admin_plugin' => 'Управление на плъгините',
121
-	'icone_afficher_auteurs' => 'Показване на авторите',
122
-	'icone_afficher_visiteurs' => 'Показване на посетителите',
123
-	'icone_arret_discussion' => 'Прекъсване участието в тази дискусия',
124
-	'icone_calendrier' => 'Календар',
125
-	'icone_creer_auteur' => 'Създаване на автор и свързване със статията',
126
-	'icone_creer_mot_cle' => 'Създаване на ключова дума и свързване със статията',
127
-	'icone_creer_rubrique_2' => 'Създаване на рубрика',
128
-	'icone_modifier_article' => 'Промяна на статията',
129
-	'icone_modifier_rubrique' => 'Промяна на рубриката',
130
-	'icone_retour' => 'Обратно',
131
-	'icone_retour_article' => 'Обратно към статията',
132
-	'icone_supprimer_cookie' => 'Изтриване на cookie',
133
-	'icone_supprimer_rubrique' => 'Изтриване на рубриката',
134
-	'icone_supprimer_signature' => 'Изтриване на записа',
135
-	'icone_valider_signature' => 'Одобряване на записа',
136
-	'image_administrer_rubrique' => 'Управление на рубриката',
137
-	'impossible_modifier_login_auteur' => 'Impossible de modifier le login.', # MODIF
138
-	'impossible_modifier_pass_auteur' => 'Impossible de modifier le mot de passe.', # MODIF
139
-	'info_1_article' => '1 статия',
140
-	'info_activer_cookie' => 'Възможност за активиране на <b>cookie администриране</b>, което позволява
106
+    // I
107
+    'ical_info1' => 'Тази страница представя няколко начина да останете във връзка с дейността на сайта.',
108
+    'ical_info2' => 'За повече информация, отидете на <a href="@spipnet@">Документация за СПИП</a>.', # MODIF
109
+    'ical_info_calendrier' => 'Имате на разположение два календара. Първият е карта на сайта, указваща всички публикувани статии. Вторият съдържа обявления за редакторите, както и най-новите лични съобщения до Вас. Този календар се показва само на Вас, благодарение на личнен ключ, който можете да променяте по всяко време чрез смяна на паролата.',
110
+    'ical_methode_http' => 'Сваляне',
111
+    'ical_methode_webcal' => 'Синхронизация (webcal://)', # MODIF
112
+    'ical_texte_js' => 'Един ред на скрипт Java позволява на всяка страница от сайта лесно да се показват най-новите публикувани статии.',
113
+    'ical_texte_prive' => 'Календарът е строго личен. Той уведомява за вътрешните редакторски дейности на сайта (напр. задачи, лични срещи, изпратени статии и новини и др.)',
114
+    'ical_texte_public' => 'Календарът Ви дава възможност да следите публичните дейности на сайта (напр. публикувани статии и новини).',
115
+    'ical_texte_rss' => 'Можете да обедините последните новини от сайта на всеки файлов четец от типа XML/RSS (Rich Site Summary). Това е същият формат, който позволява на СПИП да чете последните новини, публикувани от други сайтове като за целта използва съвместим формат за обмен.',
116
+    'ical_titre_js' => 'Скрипт Java',
117
+    'ical_titre_mailing' => 'Пощенски списък',
118
+    'ical_titre_rss' => 'Файлове за обединение',
119
+    'icone_activer_cookie' => 'Поставяне на cookie',
120
+    'icone_admin_plugin' => 'Управление на плъгините',
121
+    'icone_afficher_auteurs' => 'Показване на авторите',
122
+    'icone_afficher_visiteurs' => 'Показване на посетителите',
123
+    'icone_arret_discussion' => 'Прекъсване участието в тази дискусия',
124
+    'icone_calendrier' => 'Календар',
125
+    'icone_creer_auteur' => 'Създаване на автор и свързване със статията',
126
+    'icone_creer_mot_cle' => 'Създаване на ключова дума и свързване със статията',
127
+    'icone_creer_rubrique_2' => 'Създаване на рубрика',
128
+    'icone_modifier_article' => 'Промяна на статията',
129
+    'icone_modifier_rubrique' => 'Промяна на рубриката',
130
+    'icone_retour' => 'Обратно',
131
+    'icone_retour_article' => 'Обратно към статията',
132
+    'icone_supprimer_cookie' => 'Изтриване на cookie',
133
+    'icone_supprimer_rubrique' => 'Изтриване на рубриката',
134
+    'icone_supprimer_signature' => 'Изтриване на записа',
135
+    'icone_valider_signature' => 'Одобряване на записа',
136
+    'image_administrer_rubrique' => 'Управление на рубриката',
137
+    'impossible_modifier_login_auteur' => 'Impossible de modifier le login.', # MODIF
138
+    'impossible_modifier_pass_auteur' => 'Impossible de modifier le mot de passe.', # MODIF
139
+    'info_1_article' => '1 статия',
140
+    'info_activer_cookie' => 'Възможност за активиране на <b>cookie администриране</b>, което позволява
141 141
  улеснено превключване между публичния сайт и личната зона.',
142
-	'info_administrateur' => 'Администратор',
143
-	'info_administrateur_1' => 'Администратор',
144
-	'info_administrateur_2' => 'на сайта (<i>внимавайте</i>)',
145
-	'info_administrateur_site_01' => 'Ако сте администратор на сайта, моля',
146
-	'info_administrateur_site_02' => 'посещаване на препратката',
147
-	'info_administrateurs' => 'Администратори',
148
-	'info_administrer_rubrique' => 'Вие можете да управлявате рубриката',
149
-	'info_adresse' => 'към адрес:',
150
-	'info_adresse_url' => 'Публичен URL на сайта ',
151
-	'info_aide_en_ligne' => 'Помощник',
152
-	'info_ajout_image' => 'Когато се добавят изображения под формата на приложени документи към 
142
+    'info_administrateur' => 'Администратор',
143
+    'info_administrateur_1' => 'Администратор',
144
+    'info_administrateur_2' => 'на сайта (<i>внимавайте</i>)',
145
+    'info_administrateur_site_01' => 'Ако сте администратор на сайта, моля',
146
+    'info_administrateur_site_02' => 'посещаване на препратката',
147
+    'info_administrateurs' => 'Администратори',
148
+    'info_administrer_rubrique' => 'Вие можете да управлявате рубриката',
149
+    'info_adresse' => 'към адрес:',
150
+    'info_adresse_url' => 'Публичен URL на сайта ',
151
+    'info_aide_en_ligne' => 'Помощник',
152
+    'info_ajout_image' => 'Когато се добавят изображения под формата на приложени документи към 
153 153
   статия, СПИП автоматично създава умалени образи (винетки)
154 154
   на поместените изображения. Това позволява, например да се създаде
155 155
   автоматично галерия от изображения.',
156
-	'info_ajouter_rubrique' => 'Добавяне на друга рубрика за управление:',
157
-	'info_annonce_nouveautes' => 'Най-новите съобщения',
158
-	'info_article' => 'статия',
159
-	'info_article_2' => 'статии',
160
-	'info_article_a_paraitre' => 'Статии за одобрение със стара дата ',
161
-	'info_articles_02' => 'статии',
162
-	'info_articles_2' => 'Статии',
163
-	'info_articles_auteur' => 'Статиите на автора',
164
-	'info_articles_trouves' => 'Намерени статии',
165
-	'info_attente_validation' => 'Вашите статии, очакващи одобрение за публикуване',
166
-	'info_aujourdhui' => 'днес:',
167
-	'info_auteur_gere_toutes_rubriques_2' => 'Je gère <b>toutes les rubriques</b>', # MODIF
168
-	'info_auteurs' => 'Автори',
169
-	'info_auteurs_par_tri' => 'Автори@partri@',
170
-	'info_auteurs_trouves' => 'Намерени автори',
171
-	'info_authentification_externe' => 'Външно удостоверяване на автентичността',
172
-	'info_avertissement' => 'Предупреждение',
173
-	'info_base_installee' => 'Структурата на Вашата база данни е инсталирана.',
174
-	'info_chapeau' => 'Преглед',
175
-	'info_chapeau_2' => 'Въведение:',
176
-	'info_chemin_acces_1' => 'Опции: <b>Път за достъп до директорията</b>',
177
-	'info_chemin_acces_2' => 'От сега нататък Вие трябва да определяте пътя за достъп до данните в директорията. Тази информация дава възможност за преглед на потребителските профили, съхранени там.',
178
-	'info_chemin_acces_annuaire' => 'Опции: <b>Път за достъп</b>',
179
-	'info_choix_base' => 'Трета стъпка:',
180
-	'info_classement_1' => '<sup>st</sup> от общо @liste@',
181
-	'info_classement_2' => '<sup>th</sup> от общо @liste@',
182
-	'info_code_acces' => 'Не забравяйте личния си код за достъп!',
183
-	'info_config_suivi' => 'Ако адресът отговаря а даден пощенски списък, можете да окажете отдолу адресът, където участниците на сайта биха могли да се регистрират. Този адрес може да бъде URL (наример страницата, където се прави регистрация през Интернет страница), или електронен адрес, заедно с определена тема на писмото (например: <tt>@adresse_suivi@?subject=subscribe</tt>):',
184
-	'info_config_suivi_explication' => 'Можете да се абонирате за пощенския списък на сайта. За целта ще получите автоматично електронно съобщение с обявленията, свързани с новините и статиите, изпратени за публикуване.',
185
-	'info_confirmer_passe' => 'Потвърдете новата парола:',
186
-	'info_connexion_base' => 'Втора стъпка: <b>Опит за свързване с базата данни</b>',
187
-	'info_connexion_ldap_ok' => '<b>Успешна LDAP връзка</b><p> Преминете към следващата стъпка.', # MODIF
188
-	'info_connexion_mysql' => 'Първа стъпка: <b>Вашата SQL връзка</b>',
189
-	'info_connexion_ok' => 'Успешно свързване.',
190
-	'info_contact' => 'Контакт',
191
-	'info_contenu_articles' => 'Съдържание на статиите',
192
-	'info_creation_paragraphe' => '(За нов ред оставете празни редове.)', # MODIF
193
-	'info_creation_rubrique' => 'Трябва да създадете поне една рубрика,<br />преди да започнете да пишете статии.<br />',
194
-	'info_creation_tables' => 'Четвърта стъпка: <b>Създаване на таблици с бази данни</b>',
195
-	'info_creer_base' => '<b>Създаване</b> на нова база данни:',
196
-	'info_dans_rubrique' => 'В рубриката:',
197
-	'info_date_publication_anterieure' => 'Дата на предишно публикуване:',
198
-	'info_date_referencement' => 'ДАТА НА СВЪРЗВАНЕ НА САЙТА:',
199
-	'info_derniere_etape' => 'Последна стъпка: <b>Приключено!',
200
-	'info_descriptif' => 'Описание:',
201
-	'info_discussion_cours' => 'Дискусии в ход',
202
-	'info_ecrire_article' => 'Преди да започнете за пишете статии, трябва да създадете поне една рубрика.',
203
-	'info_email_envoi' => 'Електронен адрес на изпращача (по желание)',
204
-	'info_email_envoi_txt' => 'Впишете електронния адрес на изпращача, който използвате (по подразбиране, адресът на получателя ще се използва за адрес на изпращача):',
205
-	'info_email_webmestre' => 'Електронен адрес на уеб-администратора (незадължителен)', # MODIF
206
-	'info_envoi_email_automatique' => 'Автоматично изпращане на съобщение',
207
-	'info_envoyer_maintenant' => 'Изпращане',
208
-	'info_etape_suivante' => 'Преминете към следващата стъпка',
209
-	'info_etape_suivante_1' => 'Можете да преминете към следващата стъпка.',
210
-	'info_etape_suivante_2' => 'Можете да преминете към следващата стъпка.',
211
-	'info_exportation_base' => 'експортиране на базата данни в @archive@',
212
-	'info_facilite_suivi_activite' => 'За улесняване по-нататъшните действия на редакторите,
156
+    'info_ajouter_rubrique' => 'Добавяне на друга рубрика за управление:',
157
+    'info_annonce_nouveautes' => 'Най-новите съобщения',
158
+    'info_article' => 'статия',
159
+    'info_article_2' => 'статии',
160
+    'info_article_a_paraitre' => 'Статии за одобрение със стара дата ',
161
+    'info_articles_02' => 'статии',
162
+    'info_articles_2' => 'Статии',
163
+    'info_articles_auteur' => 'Статиите на автора',
164
+    'info_articles_trouves' => 'Намерени статии',
165
+    'info_attente_validation' => 'Вашите статии, очакващи одобрение за публикуване',
166
+    'info_aujourdhui' => 'днес:',
167
+    'info_auteur_gere_toutes_rubriques_2' => 'Je gère <b>toutes les rubriques</b>', # MODIF
168
+    'info_auteurs' => 'Автори',
169
+    'info_auteurs_par_tri' => 'Автори@partri@',
170
+    'info_auteurs_trouves' => 'Намерени автори',
171
+    'info_authentification_externe' => 'Външно удостоверяване на автентичността',
172
+    'info_avertissement' => 'Предупреждение',
173
+    'info_base_installee' => 'Структурата на Вашата база данни е инсталирана.',
174
+    'info_chapeau' => 'Преглед',
175
+    'info_chapeau_2' => 'Въведение:',
176
+    'info_chemin_acces_1' => 'Опции: <b>Път за достъп до директорията</b>',
177
+    'info_chemin_acces_2' => 'От сега нататък Вие трябва да определяте пътя за достъп до данните в директорията. Тази информация дава възможност за преглед на потребителските профили, съхранени там.',
178
+    'info_chemin_acces_annuaire' => 'Опции: <b>Път за достъп</b>',
179
+    'info_choix_base' => 'Трета стъпка:',
180
+    'info_classement_1' => '<sup>st</sup> от общо @liste@',
181
+    'info_classement_2' => '<sup>th</sup> от общо @liste@',
182
+    'info_code_acces' => 'Не забравяйте личния си код за достъп!',
183
+    'info_config_suivi' => 'Ако адресът отговаря а даден пощенски списък, можете да окажете отдолу адресът, където участниците на сайта биха могли да се регистрират. Този адрес може да бъде URL (наример страницата, където се прави регистрация през Интернет страница), или електронен адрес, заедно с определена тема на писмото (например: <tt>@adresse_suivi@?subject=subscribe</tt>):',
184
+    'info_config_suivi_explication' => 'Можете да се абонирате за пощенския списък на сайта. За целта ще получите автоматично електронно съобщение с обявленията, свързани с новините и статиите, изпратени за публикуване.',
185
+    'info_confirmer_passe' => 'Потвърдете новата парола:',
186
+    'info_connexion_base' => 'Втора стъпка: <b>Опит за свързване с базата данни</b>',
187
+    'info_connexion_ldap_ok' => '<b>Успешна LDAP връзка</b><p> Преминете към следващата стъпка.', # MODIF
188
+    'info_connexion_mysql' => 'Първа стъпка: <b>Вашата SQL връзка</b>',
189
+    'info_connexion_ok' => 'Успешно свързване.',
190
+    'info_contact' => 'Контакт',
191
+    'info_contenu_articles' => 'Съдържание на статиите',
192
+    'info_creation_paragraphe' => '(За нов ред оставете празни редове.)', # MODIF
193
+    'info_creation_rubrique' => 'Трябва да създадете поне една рубрика,<br />преди да започнете да пишете статии.<br />',
194
+    'info_creation_tables' => 'Четвърта стъпка: <b>Създаване на таблици с бази данни</b>',
195
+    'info_creer_base' => '<b>Създаване</b> на нова база данни:',
196
+    'info_dans_rubrique' => 'В рубриката:',
197
+    'info_date_publication_anterieure' => 'Дата на предишно публикуване:',
198
+    'info_date_referencement' => 'ДАТА НА СВЪРЗВАНЕ НА САЙТА:',
199
+    'info_derniere_etape' => 'Последна стъпка: <b>Приключено!',
200
+    'info_descriptif' => 'Описание:',
201
+    'info_discussion_cours' => 'Дискусии в ход',
202
+    'info_ecrire_article' => 'Преди да започнете за пишете статии, трябва да създадете поне една рубрика.',
203
+    'info_email_envoi' => 'Електронен адрес на изпращача (по желание)',
204
+    'info_email_envoi_txt' => 'Впишете електронния адрес на изпращача, който използвате (по подразбиране, адресът на получателя ще се използва за адрес на изпращача):',
205
+    'info_email_webmestre' => 'Електронен адрес на уеб-администратора (незадължителен)', # MODIF
206
+    'info_envoi_email_automatique' => 'Автоматично изпращане на съобщение',
207
+    'info_envoyer_maintenant' => 'Изпращане',
208
+    'info_etape_suivante' => 'Преминете към следващата стъпка',
209
+    'info_etape_suivante_1' => 'Можете да преминете към следващата стъпка.',
210
+    'info_etape_suivante_2' => 'Можете да преминете към следващата стъпка.',
211
+    'info_exportation_base' => 'експортиране на базата данни в @archive@',
212
+    'info_facilite_suivi_activite' => 'За улесняване по-нататъшните действия на редакторите,
213 213
   СПИП изпраща по електронна поща съобщение с молбите за публикуване и одобрените статии до
214 214
   някой пощенски списък
215 215
   на редактори, например.
216 216
 ',
217
-	'info_fichiers_authent' => 'Файл за удостоверяване автентичността: „.htpasswd“',
218
-	'info_forums_abo_invites' => 'Сайтът Ви съдържа форуми посредством предварителен абонамент; посетителите могат да се регистират за тях през публичния сайт.',
219
-	'info_gauche_admin_tech' => '<b>Само администратори имат достъп до тази страница.</b><p> Тя осигурява достъп до различни
217
+    'info_fichiers_authent' => 'Файл за удостоверяване автентичността: „.htpasswd“',
218
+    'info_forums_abo_invites' => 'Сайтът Ви съдържа форуми посредством предварителен абонамент; посетителите могат да се регистират за тях през публичния сайт.',
219
+    'info_gauche_admin_tech' => '<b>Само администратори имат достъп до тази страница.</b><p> Тя осигурява достъп до различни
220 220
  технически задачи за поддръжка. Някои от тях позволяват специфичен процес на
221 221
 идентификация и изискват FTP достъп до сайта.', # MODIF
222
-	'info_gauche_admin_vider' => '<b>Само администратори имат достъп до тази страница.</b><p> Тя осигурява достъп доразлични
222
+    'info_gauche_admin_vider' => '<b>Само администратори имат достъп до тази страница.</b><p> Тя осигурява достъп доразлични
223 223
 технически задачи за поддръжка. Някои от тях позволяват специфичен процес на
224 224
 идентификация и изискват FTP достъп до сайта.', # MODIF
225
-	'info_gauche_auteurs' => 'Тук ще намерите всички автори на сайта.
225
+    'info_gauche_auteurs' => 'Тук ще намерите всички автори на сайта.
226 226
  Статусът на всеки от тях е обозначен с цвета на неговата икона (редактор - жълта; администратор - зелена).',
227
-	'info_gauche_auteurs_exterieurs' => 'Външни автори, без достъп до сайта, са обозначени със синя икона; изтритите автори - с кошче за боклук.', # MODIF
228
-	'info_gauche_messagerie' => 'Изпращането на съобщения позволява да се обменя информация между редакторите, да се съхраняват бележки (за лично ползване) или да се публикуват обяви в началната страница на личната зона (ако сте администратор).',
229
-	'info_gauche_statistiques_referers' => 'Тази страница показва списък с <i>препратки към сайтове</i>: т.е. сайтовете, съдържащи връзка към Вашия сайт, само за вчера и днес: този списък се акуализира на всеки 24 часа.',
230
-	'info_gauche_visiteurs_enregistres' => 'Тук ще намерите посетителите, регистрирани
227
+    'info_gauche_auteurs_exterieurs' => 'Външни автори, без достъп до сайта, са обозначени със синя икона; изтритите автори - с кошче за боклук.', # MODIF
228
+    'info_gauche_messagerie' => 'Изпращането на съобщения позволява да се обменя информация между редакторите, да се съхраняват бележки (за лично ползване) или да се публикуват обяви в началната страница на личната зона (ако сте администратор).',
229
+    'info_gauche_statistiques_referers' => 'Тази страница показва списък с <i>препратки към сайтове</i>: т.е. сайтовете, съдържащи връзка към Вашия сайт, само за вчера и днес: този списък се акуализира на всеки 24 часа.',
230
+    'info_gauche_visiteurs_enregistres' => 'Тук ще намерите посетителите, регистрирани
231 231
  в публичната зона на сайта (форумите са с предварително записване).',
232
-	'info_generation_miniatures_images' => 'Генерирана на умалени образи на изображенията',
233
-	'info_hebergeur_desactiver_envoi_email' => 'Някои доставчици не позволяват изпращането на автоматични съобщения
232
+    'info_generation_miniatures_images' => 'Генерирана на умалени образи на изображенията',
233
+    'info_hebergeur_desactiver_envoi_email' => 'Някои доставчици не позволяват изпращането на автоматични съобщения
234 234
   от техните сървъри. В този случай, следните свойства
235 235
   на СПИП не работят:',
236
-	'info_hier' => 'вчера:',
237
-	'info_identification_publique' => 'Публична самоличност...',
238
-	'info_image_process' => 'Изберете най-удобният начин да създавате миниатюри, чрез натискане въру съответната картинка.',
239
-	'info_image_process2' => '<b>N.B.</b> <i>Ако не можете да видите никакво изображение, следователно сървърът Ви не е конфигуриран да използва такива инструменти. Ако искате да ползвате това свойство, трябва да се свържете с доставчика си и да поискате да ви инсталират разширения от типа "GD" или "Imagick"</i>', # MODIF
240
-	'info_images_auto' => 'Автоматично изчислени изображения',
241
-	'info_informations_personnelles' => 'Стъпка пет: <b>Лични данни</b>',
242
-	'info_inscription_automatique' => 'Автоматична регистрация на нови редактори',
243
-	'info_jeu_caractere' => 'Кодировка на сайта',
244
-	'info_jours' => 'дни',
245
-	'info_laisser_champs_vides' => 'оставите празни полетата)',
246
-	'info_langues' => 'Езици на сайта',
247
-	'info_ldap_ok' => 'Инсталирана е аутентификация за LDAP.',
248
-	'info_lien_hypertexte' => 'Хипертекстова препратка:',
249
-	'info_liste_redacteurs_connectes' => 'Списък на свързаните редактори',
250
-	'info_login_existant' => 'Потребителското име вече съществува.',
251
-	'info_login_trop_court' => 'Потребителското име е твърде кратко.',
252
-	'info_maximum' => 'максимум:',
253
-	'info_meme_rubrique' => 'В същата рубрика',
254
-	'info_message_en_redaction' => 'Съобщения в процес на обработка',
255
-	'info_message_technique' => 'Техническо съобщение:',
256
-	'info_messagerie_interne' => 'Система за вътрешни съобщения',
257
-	'info_mise_a_niveau_base' => 'Актуализиране на базата данни SQL',
258
-	'info_mise_a_niveau_base_2' => '{{Предупреждение!}} Инсталираната версия на СПИП
236
+    'info_hier' => 'вчера:',
237
+    'info_identification_publique' => 'Публична самоличност...',
238
+    'info_image_process' => 'Изберете най-удобният начин да създавате миниатюри, чрез натискане въру съответната картинка.',
239
+    'info_image_process2' => '<b>N.B.</b> <i>Ако не можете да видите никакво изображение, следователно сървърът Ви не е конфигуриран да използва такива инструменти. Ако искате да ползвате това свойство, трябва да се свържете с доставчика си и да поискате да ви инсталират разширения от типа "GD" или "Imagick"</i>', # MODIF
240
+    'info_images_auto' => 'Автоматично изчислени изображения',
241
+    'info_informations_personnelles' => 'Стъпка пет: <b>Лични данни</b>',
242
+    'info_inscription_automatique' => 'Автоматична регистрация на нови редактори',
243
+    'info_jeu_caractere' => 'Кодировка на сайта',
244
+    'info_jours' => 'дни',
245
+    'info_laisser_champs_vides' => 'оставите празни полетата)',
246
+    'info_langues' => 'Езици на сайта',
247
+    'info_ldap_ok' => 'Инсталирана е аутентификация за LDAP.',
248
+    'info_lien_hypertexte' => 'Хипертекстова препратка:',
249
+    'info_liste_redacteurs_connectes' => 'Списък на свързаните редактори',
250
+    'info_login_existant' => 'Потребителското име вече съществува.',
251
+    'info_login_trop_court' => 'Потребителското име е твърде кратко.',
252
+    'info_maximum' => 'максимум:',
253
+    'info_meme_rubrique' => 'В същата рубрика',
254
+    'info_message_en_redaction' => 'Съобщения в процес на обработка',
255
+    'info_message_technique' => 'Техническо съобщение:',
256
+    'info_messagerie_interne' => 'Система за вътрешни съобщения',
257
+    'info_mise_a_niveau_base' => 'Актуализиране на базата данни SQL',
258
+    'info_mise_a_niveau_base_2' => '{{Предупреждение!}} Инсталираната версия на СПИП
259 259
  е по-стара от тази, показана на този сайт
260 260
   Има риск за изгубване на данни, както и Вашият сайт да
261 261
   спре да работи.<br />{{Преинсталирай
262 262
   файловете на СПИП.}}',
263
-	'info_modifier_rubrique' => 'Промяна на настройките на рубриката:',
264
-	'info_modifier_titre' => 'Промяна: @titre@',
265
-	'info_mon_site_spip' => 'Моят сайт под СПИП',
266
-	'info_moyenne' => 'средно:',
267
-	'info_multi_cet_article' => 'Език на статията:',
268
-	'info_multi_langues_choisies' => 'Изберете по-долу езиците, които желаете да са активни за редакторите на сайта.
263
+    'info_modifier_rubrique' => 'Промяна на настройките на рубриката:',
264
+    'info_modifier_titre' => 'Промяна: @titre@',
265
+    'info_mon_site_spip' => 'Моят сайт под СПИП',
266
+    'info_moyenne' => 'средно:',
267
+    'info_multi_cet_article' => 'Език на статията:',
268
+    'info_multi_langues_choisies' => 'Изберете по-долу езиците, които желаете да са активни за редакторите на сайта.
269 269
   Езиците, които вече са използвани в сайта (в началото на списъка) не могат да бъдат деактивирани.',
270
-	'info_multi_secteurs' => ' ... само за рубрики, намиращи се в схемата?',
271
-	'info_nom' => 'Име',
272
-	'info_nom_destinataire' => 'Име на получателя',
273
-	'info_nom_site' => 'Име на сайта Ви',
274
-	'info_nombre_articles' => '@nb_articles@ статии,',
275
-	'info_nombre_rubriques' => '@nb_rubriques@ рубрики,',
276
-	'info_nombre_sites' => '@nb_sites@ сайтове,',
277
-	'info_non_deplacer' => 'Не правете нищо...',
278
-	'info_non_envoi_annonce_dernieres_nouveautes' => 'СПИП може да изпраща регулярно информация за новостите на сайта.
270
+    'info_multi_secteurs' => ' ... само за рубрики, намиращи се в схемата?',
271
+    'info_nom' => 'Име',
272
+    'info_nom_destinataire' => 'Име на получателя',
273
+    'info_nom_site' => 'Име на сайта Ви',
274
+    'info_nombre_articles' => '@nb_articles@ статии,',
275
+    'info_nombre_rubriques' => '@nb_rubriques@ рубрики,',
276
+    'info_nombre_sites' => '@nb_sites@ сайтове,',
277
+    'info_non_deplacer' => 'Не правете нищо...',
278
+    'info_non_envoi_annonce_dernieres_nouveautes' => 'СПИП може да изпраща регулярно информация за новостите на сайта.
279 279
   (напр. съобщения за наскоро публикуваните статии и новини).',
280
-	'info_non_envoi_liste_nouveautes' => 'Бе изпращане на списък с най-новите съобщения',
281
-	'info_non_modifiable' => 'промяната е невъзможна',
282
-	'info_non_suppression_mot_cle' => 'Отказ от изтриване на ключовата дума.',
283
-	'info_notes' => 'Бележки под линия',
284
-	'info_nouvel_article' => 'Нова статия',
285
-	'info_nouvelle_traduction' => 'Нов превод:',
286
-	'info_numero_article' => 'НОМЕР НА СТАТИЯТА:',
287
-	'info_obligatoire_02' => '[Задължително]', # MODIF
288
-	'info_option_accepter_visiteurs' => 'Позволяване регистрацията на посетители от публичния сайт',
289
-	'info_option_ne_pas_accepter_visiteurs' => 'Отказ за регистрация на посетител',
290
-	'info_options_avancees' => 'ПОДРОБНИ ОПЦИИ',
291
-	'info_ou' => 'или ...',
292
-	'info_page_interdite' => 'Забранена страница',
293
-	'info_par_nombre_article' => '(по номер на статията)',
294
-	'info_passe_trop_court' => 'Паролата не е достатъчно дълга.',
295
-	'info_passes_identiques' => 'Двете пароли не съвадат.',
296
-	'info_plus_cinq_car' => 'повече от 5 знака',
297
-	'info_plus_cinq_car_2' => '(повече от 5 знака)',
298
-	'info_plus_trois_car' => '(повече от 3 знака)',
299
-	'info_popularite' => 'популярност: @popularite@; посещения: @visites@',
300
-	'info_post_scriptum' => 'Постскриптум',
301
-	'info_post_scriptum_2' => 'Постскриптум:',
302
-	'info_pour' => 'за',
303
-	'info_preview_texte' => 'Възможно е да се прави предварителен преглед на сайта все едно, че всички статии и новини (които имат статус "изпратени") са вече публикувани. Да бъде ли даден достъп към тази функция на администраторите само, да бъде ли възможна за всички автори на сайта или да бъде изключена напълно?', # MODIF
304
-	'info_procedez_par_etape' => 'моля, продължете напред стъпка по стъпка',
305
-	'info_procedure_maj_version' => 'процедурата по обновяване трябва да се стартира,
280
+    'info_non_envoi_liste_nouveautes' => 'Бе изпращане на списък с най-новите съобщения',
281
+    'info_non_modifiable' => 'промяната е невъзможна',
282
+    'info_non_suppression_mot_cle' => 'Отказ от изтриване на ключовата дума.',
283
+    'info_notes' => 'Бележки под линия',
284
+    'info_nouvel_article' => 'Нова статия',
285
+    'info_nouvelle_traduction' => 'Нов превод:',
286
+    'info_numero_article' => 'НОМЕР НА СТАТИЯТА:',
287
+    'info_obligatoire_02' => '[Задължително]', # MODIF
288
+    'info_option_accepter_visiteurs' => 'Позволяване регистрацията на посетители от публичния сайт',
289
+    'info_option_ne_pas_accepter_visiteurs' => 'Отказ за регистрация на посетител',
290
+    'info_options_avancees' => 'ПОДРОБНИ ОПЦИИ',
291
+    'info_ou' => 'или ...',
292
+    'info_page_interdite' => 'Забранена страница',
293
+    'info_par_nombre_article' => '(по номер на статията)',
294
+    'info_passe_trop_court' => 'Паролата не е достатъчно дълга.',
295
+    'info_passes_identiques' => 'Двете пароли не съвадат.',
296
+    'info_plus_cinq_car' => 'повече от 5 знака',
297
+    'info_plus_cinq_car_2' => '(повече от 5 знака)',
298
+    'info_plus_trois_car' => '(повече от 3 знака)',
299
+    'info_popularite' => 'популярност: @popularite@; посещения: @visites@',
300
+    'info_post_scriptum' => 'Постскриптум',
301
+    'info_post_scriptum_2' => 'Постскриптум:',
302
+    'info_pour' => 'за',
303
+    'info_preview_texte' => 'Възможно е да се прави предварителен преглед на сайта все едно, че всички статии и новини (които имат статус "изпратени") са вече публикувани. Да бъде ли даден достъп към тази функция на администраторите само, да бъде ли възможна за всички автори на сайта или да бъде изключена напълно?', # MODIF
304
+    'info_procedez_par_etape' => 'моля, продължете напред стъпка по стъпка',
305
+    'info_procedure_maj_version' => 'процедурата по обновяване трябва да се стартира,
306 306
  за да може базата данни да се адаптира към новата версия на СПИП.',
307
-	'info_ps' => 'П.С. ',
308
-	'info_publier' => 'публикуване',
309
-	'info_publies' => 'Вашите публикувани статии',
310
-	'info_question_accepter_visiteurs' => 'Ако шаблоните на сайта Ви позволяват посетителите да се регистират без да влизат в личната зона, активирайте следната опция:',
311
-	'info_question_inscription_nouveaux_redacteurs' => 'Позволявате ли регистрацията на нови редактори от
307
+    'info_ps' => 'П.С. ',
308
+    'info_publier' => 'публикуване',
309
+    'info_publies' => 'Вашите публикувани статии',
310
+    'info_question_accepter_visiteurs' => 'Ако шаблоните на сайта Ви позволяват посетителите да се регистират без да влизат в личната зона, активирайте следната опция:',
311
+    'info_question_inscription_nouveaux_redacteurs' => 'Позволявате ли регистрацията на нови редактори от
312 312
   публикувания сайт. Ако сте съгласни, посетителите трябва да се
313 313
   регистрират през автоматичната форма, за да имат достъп до личната зона и
314 314
   да предложат свои собствени статии. <blockquote><i>По време на регистрацията
@@ -317,208 +317,208 @@  discard block
 block discarded – undo
317 317
   доставчици спират съобщения, изпратени
318 318
   до техни сървъри: в този случай автоматичната регистрация
319 319
   не би могла да се осъществи.', # MODIF
320
-	'info_qui_edite' => '@nom_auteur_modif@ a travaillé sur ce contenu il y a @date_diff@ minutes', # MODIF
321
-	'info_racine_site' => 'Схема на сайта',
322
-	'info_recharger_page' => 'Моля, презаредете страницата след малко.',
323
-	'info_recherche_auteur_zero' => 'Няма намерени резултати за „@cherche_auteur@“.',
324
-	'info_recommencer' => 'Моля, опитайте отново.',
325
-	'info_redacteur_1' => 'Редактор',
326
-	'info_redacteur_2' => 'достъп до личната зона(<i>препоръчително</i>)',
327
-	'info_redacteurs' => 'Редактори',
328
-	'info_redaction_en_cours' => 'В ХОД Е ПИСАНЕ',
329
-	'info_redirection' => 'Пренасочване',
330
-	'info_refuses' => 'Вашите отхвърлени статии',
331
-	'info_reglage_ldap' => 'Опции: <b>Приспособяване на вписването чрез LDAP</b>',
332
-	'info_renvoi_article' => '<b>Пренасочване.</b> Статията се отнася към страница:',
333
-	'info_reserve_admin' => 'Този адрес може да се променя само от администратори.',
334
-	'info_restreindre_rubrique' => 'Забрана за управление на рубриката:',
335
-	'info_resultat_recherche' => 'Намерени резултати:',
336
-	'info_rubriques' => 'Рубрики',
337
-	'info_rubriques_02' => 'рубрики',
338
-	'info_rubriques_trouvees' => 'Намерени рубрики',
339
-	'info_sans_titre' => 'Без заглавие',
340
-	'info_selection_chemin_acces' => '<b>Изберете</b> по-долу път за достъп в директорията:',
341
-	'info_signatures' => 'подписи',
342
-	'info_site' => 'Сайт',
343
-	'info_site_2' => 'сайт:',
344
-	'info_site_min' => 'сайт',
345
-	'info_site_reference_2' => 'Свързан сайт',
346
-	'info_site_web' => 'ИНТЕРНЕТ САЙТ:', # MODIF
347
-	'info_sites' => 'сайтове',
348
-	'info_sites_lies_mot' => 'Свързани сайтове, асоциирани с ключовата дума',
349
-	'info_sites_proxy' => 'Използване на прокси',
350
-	'info_sites_trouves' => 'Намерени сайтове',
351
-	'info_sous_titre' => 'Подзаглавие:',
352
-	'info_statut_administrateur' => 'Администратор',
353
-	'info_statut_auteur' => 'Статус на автора:', # MODIF
354
-	'info_statut_auteur_a_confirmer' => 'Регистрация, предстояща за потвърждение',
355
-	'info_statut_auteur_autre' => 'Друг статус:',
356
-	'info_statut_redacteur' => 'Редактор',
357
-	'info_statut_utilisateurs_1' => 'Статус "по подразбиране" на вписаните потребители',
358
-	'info_statut_utilisateurs_2' => 'Изберете статус за хората, вписани в LDAP-директорията при свързването им за първи път. По-късно ще можете да променяте тази характеристика за всеки автор по отделно.',
359
-	'info_suivi_activite' => 'Дейности на редакторите',
360
-	'info_surtitre' => 'Челно заглавие:',
361
-	'info_syndication_integrale_1' => 'Сайтът Ви предлага файлове за обединение (вж “<a href="@url@">@titre@</a>“).',
362
-	'info_syndication_integrale_2' => 'Желаете ли да изпратите цели статии или само резюме от няколко стотин знака?',
363
-	'info_taille_maximale_vignette' => 'Максимален размер на винетките, който е генериран от системата:',
364
-	'info_terminer_installation' => 'Сега можете да приключите с процеса по стандартна инсталация.',
365
-	'info_texte' => 'Текст',
366
-	'info_texte_explicatif' => 'Обяснителен текст',
367
-	'info_texte_long' => '(текстът е прекалено дълъг: той ще се появи в няколко части, които ще бъдат събрани след одобрението.)',
368
-	'info_texte_message' => 'Текст на съобщението:', # MODIF
369
-	'info_texte_message_02' => 'Текст на съобщение',
370
-	'info_titre' => 'Заглавие:',
371
-	'info_total' => 'общо:',
372
-	'info_tous_articles_en_redaction' => 'Всички статии в процес на обработка',
373
-	'info_tous_articles_presents' => 'Всички статии в рубриката',
374
-	'info_tous_les' => 'всички:',
375
-	'info_tout_site' => 'Целият сайт',
376
-	'info_tout_site2' => 'Статията не е преведена на дадения език.',
377
-	'info_tout_site3' => 'Статията е преведена на дадения език, но след това са направени промени в основната статия. Преводът изисква актуализация.',
378
-	'info_tout_site4' => 'Статията е преведена на дадения език, а преводът - актуализиран.',
379
-	'info_tout_site5' => 'Оригинална статия.',
380
-	'info_tout_site6' => '<b>Предупреждение:</b> показани са само оригинални статии.
320
+    'info_qui_edite' => '@nom_auteur_modif@ a travaillé sur ce contenu il y a @date_diff@ minutes', # MODIF
321
+    'info_racine_site' => 'Схема на сайта',
322
+    'info_recharger_page' => 'Моля, презаредете страницата след малко.',
323
+    'info_recherche_auteur_zero' => 'Няма намерени резултати за „@cherche_auteur@“.',
324
+    'info_recommencer' => 'Моля, опитайте отново.',
325
+    'info_redacteur_1' => 'Редактор',
326
+    'info_redacteur_2' => 'достъп до личната зона(<i>препоръчително</i>)',
327
+    'info_redacteurs' => 'Редактори',
328
+    'info_redaction_en_cours' => 'В ХОД Е ПИСАНЕ',
329
+    'info_redirection' => 'Пренасочване',
330
+    'info_refuses' => 'Вашите отхвърлени статии',
331
+    'info_reglage_ldap' => 'Опции: <b>Приспособяване на вписването чрез LDAP</b>',
332
+    'info_renvoi_article' => '<b>Пренасочване.</b> Статията се отнася към страница:',
333
+    'info_reserve_admin' => 'Този адрес може да се променя само от администратори.',
334
+    'info_restreindre_rubrique' => 'Забрана за управление на рубриката:',
335
+    'info_resultat_recherche' => 'Намерени резултати:',
336
+    'info_rubriques' => 'Рубрики',
337
+    'info_rubriques_02' => 'рубрики',
338
+    'info_rubriques_trouvees' => 'Намерени рубрики',
339
+    'info_sans_titre' => 'Без заглавие',
340
+    'info_selection_chemin_acces' => '<b>Изберете</b> по-долу път за достъп в директорията:',
341
+    'info_signatures' => 'подписи',
342
+    'info_site' => 'Сайт',
343
+    'info_site_2' => 'сайт:',
344
+    'info_site_min' => 'сайт',
345
+    'info_site_reference_2' => 'Свързан сайт',
346
+    'info_site_web' => 'ИНТЕРНЕТ САЙТ:', # MODIF
347
+    'info_sites' => 'сайтове',
348
+    'info_sites_lies_mot' => 'Свързани сайтове, асоциирани с ключовата дума',
349
+    'info_sites_proxy' => 'Използване на прокси',
350
+    'info_sites_trouves' => 'Намерени сайтове',
351
+    'info_sous_titre' => 'Подзаглавие:',
352
+    'info_statut_administrateur' => 'Администратор',
353
+    'info_statut_auteur' => 'Статус на автора:', # MODIF
354
+    'info_statut_auteur_a_confirmer' => 'Регистрация, предстояща за потвърждение',
355
+    'info_statut_auteur_autre' => 'Друг статус:',
356
+    'info_statut_redacteur' => 'Редактор',
357
+    'info_statut_utilisateurs_1' => 'Статус "по подразбиране" на вписаните потребители',
358
+    'info_statut_utilisateurs_2' => 'Изберете статус за хората, вписани в LDAP-директорията при свързването им за първи път. По-късно ще можете да променяте тази характеристика за всеки автор по отделно.',
359
+    'info_suivi_activite' => 'Дейности на редакторите',
360
+    'info_surtitre' => 'Челно заглавие:',
361
+    'info_syndication_integrale_1' => 'Сайтът Ви предлага файлове за обединение (вж “<a href="@url@">@titre@</a>“).',
362
+    'info_syndication_integrale_2' => 'Желаете ли да изпратите цели статии или само резюме от няколко стотин знака?',
363
+    'info_taille_maximale_vignette' => 'Максимален размер на винетките, който е генериран от системата:',
364
+    'info_terminer_installation' => 'Сега можете да приключите с процеса по стандартна инсталация.',
365
+    'info_texte' => 'Текст',
366
+    'info_texte_explicatif' => 'Обяснителен текст',
367
+    'info_texte_long' => '(текстът е прекалено дълъг: той ще се появи в няколко части, които ще бъдат събрани след одобрението.)',
368
+    'info_texte_message' => 'Текст на съобщението:', # MODIF
369
+    'info_texte_message_02' => 'Текст на съобщение',
370
+    'info_titre' => 'Заглавие:',
371
+    'info_total' => 'общо:',
372
+    'info_tous_articles_en_redaction' => 'Всички статии в процес на обработка',
373
+    'info_tous_articles_presents' => 'Всички статии в рубриката',
374
+    'info_tous_les' => 'всички:',
375
+    'info_tout_site' => 'Целият сайт',
376
+    'info_tout_site2' => 'Статията не е преведена на дадения език.',
377
+    'info_tout_site3' => 'Статията е преведена на дадения език, но след това са направени промени в основната статия. Преводът изисква актуализация.',
378
+    'info_tout_site4' => 'Статията е преведена на дадения език, а преводът - актуализиран.',
379
+    'info_tout_site5' => 'Оригинална статия.',
380
+    'info_tout_site6' => '<b>Предупреждение:</b> показани са само оригинални статии.
381 381
 Преводите са свързани с оригинала в цвят, посочващ техния статус:',
382
-	'info_traductions' => 'Преводи',
383
-	'info_travail_colaboratif' => 'Съвместна работа по статии',
384
-	'info_un_article' => 'една статия,',
385
-	'info_un_site' => 'сайт,',
386
-	'info_une_rubrique' => 'рубрика,',
387
-	'info_une_rubrique_02' => '1 рубрика',
388
-	'info_url' => 'URL:',
389
-	'info_urlref' => 'Препратка в хипертекст:',
390
-	'info_utilisation_spip' => 'СПИП вече е готов за използване.',
391
-	'info_visites_par_mois' => 'Месечен дисплей:',
392
-	'info_visiteur_1' => 'Посетител',
393
-	'info_visiteur_2' => 'публичен сайт',
394
-	'info_visiteurs' => 'Посетители',
395
-	'info_visiteurs_02' => 'Посетители на публичния сайт',
396
-	'install_echec_annonce' => 'Инсталацията Ви вероятно няма да проработи или сайтът, който правите ще даде лош резултат...',
397
-	'install_extension_mbstring' => 'СПИП не работи с:',
398
-	'install_extension_php_obligatoire' => 'СПИП изисква разширение от типа php:',
399
-	'install_select_langue' => 'Изберете език и след това натиснете бутон „по-нататък“, за да стартирате процедурата по инсталацията.',
400
-	'intem_redacteur' => 'редактор',
401
-	'item_accepter_inscriptions' => 'Позволяване на регистрации',
402
-	'item_activer_messages_avertissement' => 'Активиране на предупредителни съобщения',
403
-	'item_administrateur_2' => 'администратор',
404
-	'item_afficher_calendrier' => 'Показване в календара',
405
-	'item_autoriser_syndication_integrale' => 'Включване на цели статии във файловете за обединяване',
406
-	'item_choix_administrateurs' => 'администратори',
407
-	'item_choix_generation_miniature' => 'Автоматично генериране на умалени образи.',
408
-	'item_choix_non_generation_miniature' => 'Без генериране на умалени образи.',
409
-	'item_choix_redacteurs' => 'редактори',
410
-	'item_choix_visiteurs' => 'посетители на публичния сайт',
411
-	'item_creer_fichiers_authent' => 'Създаване на файлове от типа .htpasswd',
412
-	'item_login' => 'Потребителско име',
413
-	'item_mots_cles_association_articles' => 'статиите',
414
-	'item_mots_cles_association_rubriques' => 'рубриките',
415
-	'item_mots_cles_association_sites' => 'свързаните или обединени сайтове.',
416
-	'item_non' => 'Не',
417
-	'item_non_accepter_inscriptions' => 'Забрана на регистрации',
418
-	'item_non_activer_messages_avertissement' => 'Без предупредителни съобщения',
419
-	'item_non_afficher_calendrier' => 'Без показване в календара',
420
-	'item_non_autoriser_syndication_integrale' => 'Изпращане на резюме',
421
-	'item_non_creer_fichiers_authent' => 'Забрана за създаване на файловете',
422
-	'item_non_publier_articles' => 'Забраняване публикуването на статии преди техните дати на публикуване.',
423
-	'item_nouvel_auteur' => 'Нов автор',
424
-	'item_nouvelle_rubrique' => 'Нова рубрика',
425
-	'item_oui' => 'Да',
426
-	'item_publier_articles' => 'Публикуване на статиите независимо от техните дати на публикуване.',
427
-	'item_reponse_article' => 'Отговор на статията',
428
-	'item_visiteur' => 'посетител',
382
+    'info_traductions' => 'Преводи',
383
+    'info_travail_colaboratif' => 'Съвместна работа по статии',
384
+    'info_un_article' => 'една статия,',
385
+    'info_un_site' => 'сайт,',
386
+    'info_une_rubrique' => 'рубрика,',
387
+    'info_une_rubrique_02' => '1 рубрика',
388
+    'info_url' => 'URL:',
389
+    'info_urlref' => 'Препратка в хипертекст:',
390
+    'info_utilisation_spip' => 'СПИП вече е готов за използване.',
391
+    'info_visites_par_mois' => 'Месечен дисплей:',
392
+    'info_visiteur_1' => 'Посетител',
393
+    'info_visiteur_2' => 'публичен сайт',
394
+    'info_visiteurs' => 'Посетители',
395
+    'info_visiteurs_02' => 'Посетители на публичния сайт',
396
+    'install_echec_annonce' => 'Инсталацията Ви вероятно няма да проработи или сайтът, който правите ще даде лош резултат...',
397
+    'install_extension_mbstring' => 'СПИП не работи с:',
398
+    'install_extension_php_obligatoire' => 'СПИП изисква разширение от типа php:',
399
+    'install_select_langue' => 'Изберете език и след това натиснете бутон „по-нататък“, за да стартирате процедурата по инсталацията.',
400
+    'intem_redacteur' => 'редактор',
401
+    'item_accepter_inscriptions' => 'Позволяване на регистрации',
402
+    'item_activer_messages_avertissement' => 'Активиране на предупредителни съобщения',
403
+    'item_administrateur_2' => 'администратор',
404
+    'item_afficher_calendrier' => 'Показване в календара',
405
+    'item_autoriser_syndication_integrale' => 'Включване на цели статии във файловете за обединяване',
406
+    'item_choix_administrateurs' => 'администратори',
407
+    'item_choix_generation_miniature' => 'Автоматично генериране на умалени образи.',
408
+    'item_choix_non_generation_miniature' => 'Без генериране на умалени образи.',
409
+    'item_choix_redacteurs' => 'редактори',
410
+    'item_choix_visiteurs' => 'посетители на публичния сайт',
411
+    'item_creer_fichiers_authent' => 'Създаване на файлове от типа .htpasswd',
412
+    'item_login' => 'Потребителско име',
413
+    'item_mots_cles_association_articles' => 'статиите',
414
+    'item_mots_cles_association_rubriques' => 'рубриките',
415
+    'item_mots_cles_association_sites' => 'свързаните или обединени сайтове.',
416
+    'item_non' => 'Не',
417
+    'item_non_accepter_inscriptions' => 'Забрана на регистрации',
418
+    'item_non_activer_messages_avertissement' => 'Без предупредителни съобщения',
419
+    'item_non_afficher_calendrier' => 'Без показване в календара',
420
+    'item_non_autoriser_syndication_integrale' => 'Изпращане на резюме',
421
+    'item_non_creer_fichiers_authent' => 'Забрана за създаване на файловете',
422
+    'item_non_publier_articles' => 'Забраняване публикуването на статии преди техните дати на публикуване.',
423
+    'item_nouvel_auteur' => 'Нов автор',
424
+    'item_nouvelle_rubrique' => 'Нова рубрика',
425
+    'item_oui' => 'Да',
426
+    'item_publier_articles' => 'Публикуване на статиите независимо от техните дати на публикуване.',
427
+    'item_reponse_article' => 'Отговор на статията',
428
+    'item_visiteur' => 'посетител',
429 429
 
430
-	// J
431
-	'jour_non_connu_nc' => 'непознат',
430
+    // J
431
+    'jour_non_connu_nc' => 'непознат',
432 432
 
433
-	// L
434
-	'lien_ajouter_auteur' => 'Добавяне на автора',
435
-	'lien_email' => 'Електронен адрес',
436
-	'lien_nom_site' => 'ИМЕ НА САЙТА:',
437
-	'lien_retirer_auteur' => 'Премахване на автор',
438
-	'lien_site' => 'сайт',
439
-	'lien_tout_deplier' => 'Разширяване на всички',
440
-	'lien_tout_replier' => 'Разтваряне на всички',
441
-	'lien_trier_nom' => 'Подреждане по име',
442
-	'lien_trier_nombre_articles' => 'Подреждане по номер на статията',
443
-	'lien_trier_statut' => 'Подреждане по статус',
444
-	'lien_voir_en_ligne' => 'ИЗГЛЕД НА САЙТА:',
445
-	'logo_article' => 'ЛОГО НА СТАТИЯТА', # MODIF
446
-	'logo_auteur' => 'ЛОГО НА АВТОРА', # MODIF
447
-	'logo_rubrique' => 'ЛОГО НА РУБРИКАТА', # MODIF
448
-	'logo_site' => 'ЛОГО НА САЙТА', # MODIF
449
-	'logo_standard_rubrique' => 'СТАНДАРТНО ЛОГО ЗА РУБРИКИ', # MODIF
450
-	'logo_survol' => 'АЛТЕРНАТИВНО ЛОГО', # MODIF
433
+    // L
434
+    'lien_ajouter_auteur' => 'Добавяне на автора',
435
+    'lien_email' => 'Електронен адрес',
436
+    'lien_nom_site' => 'ИМЕ НА САЙТА:',
437
+    'lien_retirer_auteur' => 'Премахване на автор',
438
+    'lien_site' => 'сайт',
439
+    'lien_tout_deplier' => 'Разширяване на всички',
440
+    'lien_tout_replier' => 'Разтваряне на всички',
441
+    'lien_trier_nom' => 'Подреждане по име',
442
+    'lien_trier_nombre_articles' => 'Подреждане по номер на статията',
443
+    'lien_trier_statut' => 'Подреждане по статус',
444
+    'lien_voir_en_ligne' => 'ИЗГЛЕД НА САЙТА:',
445
+    'logo_article' => 'ЛОГО НА СТАТИЯТА', # MODIF
446
+    'logo_auteur' => 'ЛОГО НА АВТОРА', # MODIF
447
+    'logo_rubrique' => 'ЛОГО НА РУБРИКАТА', # MODIF
448
+    'logo_site' => 'ЛОГО НА САЙТА', # MODIF
449
+    'logo_standard_rubrique' => 'СТАНДАРТНО ЛОГО ЗА РУБРИКИ', # MODIF
450
+    'logo_survol' => 'АЛТЕРНАТИВНО ЛОГО', # MODIF
451 451
 
452
-	// M
453
-	'menu_aide_installation_choix_base' => 'Избор на база данни',
454
-	'module_fichier_langue' => 'Езиков файл',
455
-	'module_raccourci' => 'Кратка команда',
456
-	'module_texte_affiche' => 'Показан текст',
457
-	'module_texte_explicatif' => 'Можете да впишете следните кратки команди в шаблоните на сайта си. Те ще бъдат автоматично преведени на различни езици, за които има езиков файл.',
458
-	'module_texte_traduction' => 'Езиковият файл ,, @module@ ’’ е достъпен на:',
459
-	'mois_non_connu' => 'непознат',
452
+    // M
453
+    'menu_aide_installation_choix_base' => 'Избор на база данни',
454
+    'module_fichier_langue' => 'Езиков файл',
455
+    'module_raccourci' => 'Кратка команда',
456
+    'module_texte_affiche' => 'Показан текст',
457
+    'module_texte_explicatif' => 'Можете да впишете следните кратки команди в шаблоните на сайта си. Те ще бъдат автоматично преведени на различни езици, за които има езиков файл.',
458
+    'module_texte_traduction' => 'Езиковият файл ,, @module@ ’’ е достъпен на:',
459
+    'mois_non_connu' => 'непознат',
460 460
 
461
-	// O
462
-	'onglet_repartition_actuelle' => 'сега',
461
+    // O
462
+    'onglet_repartition_actuelle' => 'сега',
463 463
 
464
-	// P
465
-	'plugin_etat_developpement' => 'в развитие',
466
-	'plugin_etat_experimental' => 'експериментален',
467
-	'plugin_etat_stable' => 'стабилен',
468
-	'plugin_etat_test' => 'в процес на тестване',
469
-	'plugins_liste' => 'Списък с плъгини',
464
+    // P
465
+    'plugin_etat_developpement' => 'в развитие',
466
+    'plugin_etat_experimental' => 'експериментален',
467
+    'plugin_etat_stable' => 'стабилен',
468
+    'plugin_etat_test' => 'в процес на тестване',
469
+    'plugins_liste' => 'Списък с плъгини',
470 470
 
471
-	// R
472
-	'repertoire_plugins' => 'Директория:',
473
-	'required' => '[Задължително]', # MODIF
471
+    // R
472
+    'repertoire_plugins' => 'Директория:',
473
+    'required' => '[Задължително]', # MODIF
474 474
 
475
-	// S
476
-	'statut_admin_restreint' => '(ограничен администратор)', # MODIF
475
+    // S
476
+    'statut_admin_restreint' => '(ограничен администратор)', # MODIF
477 477
 
478
-	// T
479
-	'taille_cache_image' => 'Изображенията, изчислени автоматично от СПИП (умалени изображения, заглавия, преобразени в графики, математически формули в TeX формат и др.) заемат общо @taille@ в директорията @dir@.',
480
-	'taille_cache_infinie' => 'Този сайт няма фиксиран лимит за размера на <code>CACHE/</code> директорията.',
481
-	'taille_cache_maxi' => 'СПИП се опитва да намали размера на данните в  <code>CACHE/</code> директорията до около  <b>@octets@</b>.',
482
-	'taille_cache_octets' => 'Размерът на кеш-паметта в момента е @octets@.', # MODIF
483
-	'taille_cache_vide' => 'Кеш-паметта е празна.',
484
-	'taille_repertoire_cache' => 'Размер на кеш-паметта в момента',
485
-	'text_article_propose_publication' => 'Изпратена е статия със заявка за публикуване. Не се колебайте да дадете мнението си за нея във форума, който е прикрепен към нея (най-долу на страницата).', # MODIF
486
-	'texte_acces_ldap_anonyme_1' => 'Някои LDAP-сървъри не позволяват анонимен достъп. В такива случаи, за да можете да правите справка в директорията, трябва да използвате началното си потребителско име за достъп. Въпреки това, в повечето случаи можете да оставяте следните полета празни. ',
487
-	'texte_admin_effacer_01' => 'Тази команда изтрива <i>цялото</i> съдържание в базата данни,
478
+    // T
479
+    'taille_cache_image' => 'Изображенията, изчислени автоматично от СПИП (умалени изображения, заглавия, преобразени в графики, математически формули в TeX формат и др.) заемат общо @taille@ в директорията @dir@.',
480
+    'taille_cache_infinie' => 'Този сайт няма фиксиран лимит за размера на <code>CACHE/</code> директорията.',
481
+    'taille_cache_maxi' => 'СПИП се опитва да намали размера на данните в  <code>CACHE/</code> директорията до около  <b>@octets@</b>.',
482
+    'taille_cache_octets' => 'Размерът на кеш-паметта в момента е @octets@.', # MODIF
483
+    'taille_cache_vide' => 'Кеш-паметта е празна.',
484
+    'taille_repertoire_cache' => 'Размер на кеш-паметта в момента',
485
+    'text_article_propose_publication' => 'Изпратена е статия със заявка за публикуване. Не се колебайте да дадете мнението си за нея във форума, който е прикрепен към нея (най-долу на страницата).', # MODIF
486
+    'texte_acces_ldap_anonyme_1' => 'Някои LDAP-сървъри не позволяват анонимен достъп. В такива случаи, за да можете да правите справка в директорията, трябва да използвате началното си потребителско име за достъп. Въпреки това, в повечето случаи можете да оставяте следните полета празни. ',
487
+    'texte_admin_effacer_01' => 'Тази команда изтрива <i>цялото</i> съдържание в базата данни,
488 488
 включително <i>всички</i> параметри за достъп за редактори и администратори. След нейното изпълнение, трябва
489 489
 да се преинсталира СПИП, за да се създаде нова база данни и първи администраторски достъп.',
490
-	'texte_adresse_annuaire_1' => '( Ако директорията Ви е инсталирана на същата машина, на която и Интернет сайта, вероятно е «localhost».)',
491
-	'texte_ajout_auteur' => 'Следният автор бе добавен към статията:',
492
-	'texte_annuaire_ldap_1' => 'Ако разполагате с достъп до (LDAP) директория, можете да я използвате, за да вписвате автоматично потребители в СПИП.',
493
-	'texte_article_statut' => 'Статията е:',
494
-	'texte_article_virtuel' => 'Виртуална статия',
495
-	'texte_article_virtuel_reference' => '<b>Виртуална статия:</b> свързана статия на Вашия СПИП сайт, която се пренасочва към друг URL адрес. За да премахнете пренасочването, изтрийте горепосочения URL.',
496
-	'texte_aucun_resultat_auteur' => 'Няма намерен разултат за „@cherche_auteur@“.',
497
-	'texte_auteur_messagerie' => 'Сайт може продължително да следи списъка от свързани редактори, което позволява изпращането та съобщения в реално време (ако съобщението е забранено по-горе, тогава целият списък от редактори е забранен). Вие можете да решите да не се появявате в този списък (т.е. да сте „невидим“ за останалите потребители).',
498
-	'texte_auteurs' => 'АВТОРИТЕ',
499
-	'texte_choix_base_1' => 'Изберете база данни:',
500
-	'texte_choix_base_2' => 'Сървърът SQL съдържа няколко бази данни.',
501
-	'texte_choix_base_3' => '<b>Изберете</b> по-долу това, което доставчикът Ви e разрешил:',
502
-	'texte_compte_element' => '@count@ елемент',
503
-	'texte_compte_elements' => '@count@ елементи',
504
-	'texte_connexion_mysql' => 'Погледнете информацията, предоставена от доставчика Ви: ако доставчикът ви поддържа SQL, трябва да са дадени кодовете за връзка със сървъра SQL.', # MODIF
505
-	'texte_contenu_article' => '(Съдържание на статията с няколко думи.)',
506
-	'texte_contenu_articles' => 'Въз основа на оформлението на сайта Ви, може да решите
490
+    'texte_adresse_annuaire_1' => '( Ако директорията Ви е инсталирана на същата машина, на която и Интернет сайта, вероятно е «localhost».)',
491
+    'texte_ajout_auteur' => 'Следният автор бе добавен към статията:',
492
+    'texte_annuaire_ldap_1' => 'Ако разполагате с достъп до (LDAP) директория, можете да я използвате, за да вписвате автоматично потребители в СПИП.',
493
+    'texte_article_statut' => 'Статията е:',
494
+    'texte_article_virtuel' => 'Виртуална статия',
495
+    'texte_article_virtuel_reference' => '<b>Виртуална статия:</b> свързана статия на Вашия СПИП сайт, която се пренасочва към друг URL адрес. За да премахнете пренасочването, изтрийте горепосочения URL.',
496
+    'texte_aucun_resultat_auteur' => 'Няма намерен разултат за „@cherche_auteur@“.',
497
+    'texte_auteur_messagerie' => 'Сайт може продължително да следи списъка от свързани редактори, което позволява изпращането та съобщения в реално време (ако съобщението е забранено по-горе, тогава целият списък от редактори е забранен). Вие можете да решите да не се появявате в този списък (т.е. да сте „невидим“ за останалите потребители).',
498
+    'texte_auteurs' => 'АВТОРИТЕ',
499
+    'texte_choix_base_1' => 'Изберете база данни:',
500
+    'texte_choix_base_2' => 'Сървърът SQL съдържа няколко бази данни.',
501
+    'texte_choix_base_3' => '<b>Изберете</b> по-долу това, което доставчикът Ви e разрешил:',
502
+    'texte_compte_element' => '@count@ елемент',
503
+    'texte_compte_elements' => '@count@ елементи',
504
+    'texte_connexion_mysql' => 'Погледнете информацията, предоставена от доставчика Ви: ако доставчикът ви поддържа SQL, трябва да са дадени кодовете за връзка със сървъра SQL.', # MODIF
505
+    'texte_contenu_article' => '(Съдържание на статията с няколко думи.)',
506
+    'texte_contenu_articles' => 'Въз основа на оформлението на сайта Ви, може да решите
507 507
   да не използвате някои елементи на статиите.
508 508
   Използвайте този списък, за да изберете кои елементи искате да направите активни.',
509
-	'texte_crash_base' => 'Ако Вашата база данни
509
+    'texte_crash_base' => 'Ако Вашата база данни
510 510
    блокира, можете да се опитате да я поправите
511 511
    автоматично.',
512
-	'texte_creer_rubrique' => 'Преди да пишете статии,<br /> трябва да създадете рубрика.',
513
-	'texte_date_creation_article' => 'ДАТА НА СЪЗДАВАНЕ НА СТАТИЯТА:',
514
-	'texte_date_publication_anterieure' => 'Дата на предишно публикуване:',
515
-	'texte_date_publication_anterieure_nonaffichee' => 'Скриване датата на предишно публикуване.',
516
-	'texte_date_publication_article' => 'ДАТА НА ПУБЛИКУВАНЕ В ИНТЕРНЕТ:',
517
-	'texte_descriptif_rapide' => 'Кратко описание',
518
-	'texte_effacer_base' => 'Изтриване на базата данни СПИП',
519
-	'texte_en_cours_validation' => 'Изпратени са следните статии със заявка за публикуване. Не се колебайте да дадете мнението си за тях във форума, който е прикрепен към тях. ', # MODIF
520
-	'texte_enrichir_mise_a_jour' => 'Можете да обогатите външния вид на текста като използвате «Типографски кратки команди».',
521
-	'texte_fichier_authent' => '<b>Да създаде ли СПИП специални  <tt>.htpasswd</tt>
512
+    'texte_creer_rubrique' => 'Преди да пишете статии,<br /> трябва да създадете рубрика.',
513
+    'texte_date_creation_article' => 'ДАТА НА СЪЗДАВАНЕ НА СТАТИЯТА:',
514
+    'texte_date_publication_anterieure' => 'Дата на предишно публикуване:',
515
+    'texte_date_publication_anterieure_nonaffichee' => 'Скриване датата на предишно публикуване.',
516
+    'texte_date_publication_article' => 'ДАТА НА ПУБЛИКУВАНЕ В ИНТЕРНЕТ:',
517
+    'texte_descriptif_rapide' => 'Кратко описание',
518
+    'texte_effacer_base' => 'Изтриване на базата данни СПИП',
519
+    'texte_en_cours_validation' => 'Изпратени са следните статии със заявка за публикуване. Не се колебайте да дадете мнението си за тях във форума, който е прикрепен към тях. ', # MODIF
520
+    'texte_enrichir_mise_a_jour' => 'Можете да обогатите външния вид на текста като използвате «Типографски кратки команди».',
521
+    'texte_fichier_authent' => '<b>Да създаде ли СПИП специални  <tt>.htpasswd</tt>
522 522
   и <tt>.htpasswd-admin</tt> файлове в директорията@dossier@?</b><p>
523 523
   Тези файлове ще бъдат използвани за ограничаване достъпа на авторите
524 524
   и администраторите до други части на сайта
@@ -526,44 +526,44 @@  discard block
 block discarded – undo
526 526
   Ако не сте използвали такива файлове преди, можете да осигурите възможност
527 527
   за стойност "по подразбиране" (без 
528 528
   да се създават файлове).', # MODIF
529
-	'texte_informations_personnelles_1' => 'Системата сега ще създаде личен достъп до сайта. ',
530
-	'texte_informations_personnelles_2' => '(Забележка: ако това е преинсталация и достъпът Ви все още е активен, можете', # MODIF
531
-	'texte_introductif_article' => '(Въведение към статията.)',
532
-	'texte_jeu_caractere' => 'Препоръчваме да използвате на сайта универсална кодировка на знаците от азбуката (<tt>utf-8</tt>), за да може да се показва под формата на текст на всякакъв език. Никой от настоящите Интернет - навигатори нямат проблеми с нея. ',
533
-	'texte_jeu_caractere_3' => 'Настоящата кодировка на сайта е:',
534
-	'texte_jeu_caractere_4' => 'Ако това не отговаря на ситуацията, която имате с данните си (например след възстановяване на базата от данни от архива) или ако <em>правите настройка на сайта си в момента</em> и желаете да използвате различна кодировка на символите, моля да обозначите кодировката тук:',
535
-	'texte_login_ldap_1' => '(Оставете празно поле за потребител за анонимен достъп или попълнете пълния път за достъп, например «<tt>uid=smith, ou=users, dc=my-domain, dc=com</tt>».)',
536
-	'texte_login_precaution' => 'Внимание! Това е потребителското име, с което в момента сте се свързали.
529
+    'texte_informations_personnelles_1' => 'Системата сега ще създаде личен достъп до сайта. ',
530
+    'texte_informations_personnelles_2' => '(Забележка: ако това е преинсталация и достъпът Ви все още е активен, можете', # MODIF
531
+    'texte_introductif_article' => '(Въведение към статията.)',
532
+    'texte_jeu_caractere' => 'Препоръчваме да използвате на сайта универсална кодировка на знаците от азбуката (<tt>utf-8</tt>), за да може да се показва под формата на текст на всякакъв език. Никой от настоящите Интернет - навигатори нямат проблеми с нея. ',
533
+    'texte_jeu_caractere_3' => 'Настоящата кодировка на сайта е:',
534
+    'texte_jeu_caractere_4' => 'Ако това не отговаря на ситуацията, която имате с данните си (например след възстановяване на базата от данни от архива) или ако <em>правите настройка на сайта си в момента</em> и желаете да използвате различна кодировка на символите, моля да обозначите кодировката тук:',
535
+    'texte_login_ldap_1' => '(Оставете празно поле за потребител за анонимен достъп или попълнете пълния път за достъп, например «<tt>uid=smith, ou=users, dc=my-domain, dc=com</tt>».)',
536
+    'texte_login_precaution' => 'Внимание! Това е потребителското име, с което в момента сте се свързали.
537 537
  Предпазливо използвайте формата ...',
538
-	'texte_mise_a_niveau_base_1' => 'СПИП файловете са актуализирани.
538
+    'texte_mise_a_niveau_base_1' => 'СПИП файловете са актуализирани.
539 539
  Сега остава да обновите базата данни на
540 540
  сайта.',
541
-	'texte_modifier_article' => 'Промяна на статията:',
542
-	'texte_multilinguisme' => 'Ако желаете да боравите със статии на няколко езика с усложнена навигация, можете да добавите меню "избор на език" към статиите и/или към рубриките, в зависимост от организацията на сайта Ви.', # MODIF
543
-	'texte_multilinguisme_trad' => 'Също така, можете да активирате система за управление на препратките към различните преводи на статията.', # MODIF
544
-	'texte_non_compresse' => '<i>uncompressed</i> (сървърът ви не поддрържа това свойство)',
545
-	'texte_nouvelle_version_spip_1' => 'Току-що инсталирахте нова версия на СПИП.',
546
-	'texte_nouvelle_version_spip_2' => 'Тази нова версия налага по-сериозна от обикновената актуализация. Ако сте администратор на сайта, изтрийте файла <tt>inc_connect.php3</tt> от директория <tt>ecrire</tt> и стартирайте отново инсталацията, с цел да актуализирате параметрите на базата данни за връзка. <p>(NB: ако сте забравили параметрите на базата данни за връзка, погледнете следния файл <tt>inc_connect.php3</tt> преди да го изтриете).', # MODIF
547
-	'texte_operation_echec' => 'Върнете се на предишната страница, за да изберете друга база или да създадете нова. Потвърдете информацията, изпратена от Вашия доставчик. ',
548
-	'texte_plus_trois_car' => 'повече от 3 знака',
549
-	'texte_plusieurs_articles' => 'Бяха намерени няколко автора за „@cherche_auteur@“:',
550
-	'texte_port_annuaire' => '(Обичайната стойност е подходяща като цяло.)',
551
-	'texte_presente_plugin' => 'На тази страница са указани наличните на сайта плъгини. Активирайте тези от тях, които Ви трябват, чрез отбелязване в съответната кутийка.',
552
-	'texte_proposer_publication' => 'Когато напишете статията,<br /> можете да я изпратите за публикуване.',
553
-	'texte_proxy' => 'В някои случаи (интранет, защитени мрежи и др.),
541
+    'texte_modifier_article' => 'Промяна на статията:',
542
+    'texte_multilinguisme' => 'Ако желаете да боравите със статии на няколко езика с усложнена навигация, можете да добавите меню "избор на език" към статиите и/или към рубриките, в зависимост от организацията на сайта Ви.', # MODIF
543
+    'texte_multilinguisme_trad' => 'Също така, можете да активирате система за управление на препратките към различните преводи на статията.', # MODIF
544
+    'texte_non_compresse' => '<i>uncompressed</i> (сървърът ви не поддрържа това свойство)',
545
+    'texte_nouvelle_version_spip_1' => 'Току-що инсталирахте нова версия на СПИП.',
546
+    'texte_nouvelle_version_spip_2' => 'Тази нова версия налага по-сериозна от обикновената актуализация. Ако сте администратор на сайта, изтрийте файла <tt>inc_connect.php3</tt> от директория <tt>ecrire</tt> и стартирайте отново инсталацията, с цел да актуализирате параметрите на базата данни за връзка. <p>(NB: ако сте забравили параметрите на базата данни за връзка, погледнете следния файл <tt>inc_connect.php3</tt> преди да го изтриете).', # MODIF
547
+    'texte_operation_echec' => 'Върнете се на предишната страница, за да изберете друга база или да създадете нова. Потвърдете информацията, изпратена от Вашия доставчик. ',
548
+    'texte_plus_trois_car' => 'повече от 3 знака',
549
+    'texte_plusieurs_articles' => 'Бяха намерени няколко автора за „@cherche_auteur@“:',
550
+    'texte_port_annuaire' => '(Обичайната стойност е подходяща като цяло.)',
551
+    'texte_presente_plugin' => 'На тази страница са указани наличните на сайта плъгини. Активирайте тези от тях, които Ви трябват, чрез отбелязване в съответната кутийка.',
552
+    'texte_proposer_publication' => 'Когато напишете статията,<br /> можете да я изпратите за публикуване.',
553
+    'texte_proxy' => 'В някои случаи (интранет, защитени мрежи и др.),
554 554
   е нужно да се използва <i>HTTP прокси</i>, за да се достигне до обединените сайтове.
555 555
   Ако има прокси, впишете адрес му отдолу по следния начин
556 556
   <tt><html>http://proxy:8080</html></tt>. По принцип,
557 557
   това поле се оставя празно.',
558
-	'texte_publication_articles_post_dates' => 'Какво би трябвало да направи СПИП във връзка със статии,
558
+    'texte_publication_articles_post_dates' => 'Какво би трябвало да направи СПИП във връзка със статии,
559 559
   чиято публикация е зададена
560 560
   за бъдеща дата?',
561
-	'texte_rappel_selection_champs' => '[Не забравяйте да изберете правилното поле.]',
562
-	'texte_recalcul_page' => 'Ако желаете да
561
+    'texte_rappel_selection_champs' => '[Не забравяйте да изберете правилното поле.]',
562
+    'texte_recalcul_page' => 'Ако желаете да
563 563
 презаредите само една страница, по-добре направете това от публичната зона, като използвате « бутона "Презареждане" ».',
564
-	'texte_recuperer_base' => 'Поправка на базата данни',
565
-	'texte_reference_mais_redirige' => 'свързана статия на Вашия СПИП сайт, но пренасочена към друг URL адрес.',
566
-	'texte_requetes_echouent' => '<b>Когато някои SQL справки
564
+    'texte_recuperer_base' => 'Поправка на базата данни',
565
+    'texte_reference_mais_redirige' => 'свързана статия на Вашия СПИП сайт, но пренасочена към друг URL адрес.',
566
+    'texte_requetes_echouent' => '<b>Когато някои SQL справки
567 567
   системно и без налична причина заочнат да се развалят, възможно е
568 568
   базата данни сама да
569 569
   го прави.</b>
@@ -574,7 +574,7 @@  discard block
 block discarded – undo
574 574
   указания за това, което е развалено.
575 575
   <p>Ако проблемът все още е налице, обадете се
576 576
   на Вашия хост.', # MODIF
577
-	'texte_selection_langue_principale' => 'Посочете по-долу „основният език“ на сайта. За щастие, този избор не ограничава статиите Ви да бъдат написани на избран от Вас езит. Той позволявя да определите
577
+    'texte_selection_langue_principale' => 'Посочете по-долу „основният език“ на сайта. За щастие, този избор не ограничава статиите Ви да бъдат написани на избран от Вас езит. Той позволявя да определите
578 578
 
579 579
 <ul><li> формата „по подразбиране“ на данните в публичния сайт</li>
580 580
 
@@ -583,71 +583,71 @@  discard block
 block discarded – undo
583 583
 <li> езикът, който се използва във формите на публичния сайт</li>
584 584
 
585 585
 <li> езикът „по подразбиране“ на данните в личната зона.</li></ul>',
586
-	'texte_sous_titre' => 'Подзаглавие',
587
-	'texte_statistiques_visites' => '(тъмни ивици: неделя / тъмна крива: средно развитие)',
588
-	'texte_statut_attente_validation' => 'за одобрение',
589
-	'texte_statut_publies' => 'публикувани на сайта',
590
-	'texte_statut_refuses' => 'отхвърлени',
591
-	'texte_suppression_fichiers' => 'Тази команда служи за изтриване на всички
586
+    'texte_sous_titre' => 'Подзаглавие',
587
+    'texte_statistiques_visites' => '(тъмни ивици: неделя / тъмна крива: средно развитие)',
588
+    'texte_statut_attente_validation' => 'за одобрение',
589
+    'texte_statut_publies' => 'публикувани на сайта',
590
+    'texte_statut_refuses' => 'отхвърлени',
591
+    'texte_suppression_fichiers' => 'Тази команда служи за изтриване на всички
592 592
  файлове в кеш-паметта на СПИП. Това позволява да се актуализират принудително всички страници, в
593 593
  случаи, когато са направени важни изменения в графиките или структурата на сайта.',
594
-	'texte_sur_titre' => 'Челно заглавие',
595
-	'texte_table_ok' => ' : тази таблица е добра.',
596
-	'texte_tentative_recuperation' => 'Опит за поправка',
597
-	'texte_tenter_reparation' => 'Опит за поправка на базата данни',
598
-	'texte_test_proxy' => 'За да изпробвате дали работи проксито, впишете на това място
594
+    'texte_sur_titre' => 'Челно заглавие',
595
+    'texte_table_ok' => ' : тази таблица е добра.',
596
+    'texte_tentative_recuperation' => 'Опит за поправка',
597
+    'texte_tenter_reparation' => 'Опит за поправка на базата данни',
598
+    'texte_test_proxy' => 'За да изпробвате дали работи проксито, впишете на това място
599 599
     URL-a на желана Интернет страница.',
600
-	'texte_titre_02' => 'Тема:',
601
-	'texte_titre_obligatoire' => '<b>Заглавие</b> [Задължително]',
602
-	'texte_travail_article' => '@nom_auteur_modif@ е работил по статията преди @date_diff@ минути',
603
-	'texte_travail_collaboratif' => 'Ако се случва често няколко редактора да
600
+    'texte_titre_02' => 'Тема:',
601
+    'texte_titre_obligatoire' => '<b>Заглавие</b> [Задължително]',
602
+    'texte_travail_article' => '@nom_auteur_modif@ е работил по статията преди @date_diff@ минути',
603
+    'texte_travail_collaboratif' => 'Ако се случва често няколко редактора да
604 604
   работят по една и съща статия, системата
605 605
   може да покаже наскоро отваряните статии,
606 606
   с цел да избегнат едновременни промени.
607 607
   Тази операция е изключена по начало,
608 608
   с цел да не се показват излишни
609 609
   предупредителни съобщения.',
610
-	'texte_vide' => 'празно',
611
-	'texte_vider_cache' => 'Изпразване на кеш-паметта',
612
-	'titre_admin_tech' => 'Техническа поддръжка',
613
-	'titre_admin_vider' => 'Техническа поддръжка',
614
-	'titre_cadre_afficher_article' => 'Показване на статиите:',
615
-	'titre_cadre_afficher_traductions' => 'Показване статуса на превод на следния език:',
616
-	'titre_cadre_ajouter_auteur' => 'ДОБАВЯНЕ НА АВТОР:',
617
-	'titre_cadre_interieur_rubrique' => 'В рубрика',
618
-	'titre_cadre_numero_auteur' => 'НОМЕР НА АВТОРА',
619
-	'titre_cadre_signature_obligatoire' => '<b>Подпис</b> [Задължителен]<br />',
620
-	'titre_config_fonctions' => 'Конфигуриране на сайта',
621
-	'titre_configuration' => 'Конфигуриране на сайта',
622
-	'titre_connexion_ldap' => 'Възможности: <b>Вашата LDAP-връзка</b>',
623
-	'titre_groupe_mots' => 'ГРУПА ОТ КЛЮЧОВИ ДУМИ:',
624
-	'titre_langue_article' => 'ЕЗИК НА СТАТИЯТА', # MODIF
625
-	'titre_langue_rubrique' => 'ЕЗИК НА РУБРИКАТА', # MODIF
626
-	'titre_langue_trad_article' => 'ЕЗИК И ПРЕВОДИ НА СТАТИЯТА',
627
-	'titre_les_articles' => 'СТАТИИ',
628
-	'titre_naviguer_dans_le_site' => 'Търсене на сайта',
629
-	'titre_nouvelle_rubrique' => 'Нова рубрика',
630
-	'titre_numero_rubrique' => 'НОМЕР НА РУБРИКАТА:',
631
-	'titre_page_articles_edit' => 'Промяна: @titre@',
632
-	'titre_page_articles_page' => 'Статии',
633
-	'titre_page_articles_tous' => 'Целият сайт',
634
-	'titre_page_calendrier' => 'Календар @nom_mois@ @annee@',
635
-	'titre_page_config_contenu' => 'Конфигуриране на сайта',
636
-	'titre_page_delete_all' => 'пълно и безвъзвратно изтриване',
637
-	'titre_page_recherche' => 'Резултати от търсенето @recherche@',
638
-	'titre_page_statistiques_referers' => 'Статистика (входящи препратки)',
639
-	'titre_page_upgrade' => 'Актуализация на СПИП',
640
-	'titre_publication_articles_post_dates' => 'Публикуване на статии с отминала дата',
641
-	'titre_reparation' => 'Поправка',
642
-	'titre_suivi_petition' => 'Допълнения на молбите',
643
-	'trad_article_traduction' => 'Всички версии на статията:',
644
-	'trad_delier' => 'Отказ от свързване на статията с нейните преводи', # MODIF
645
-	'trad_lier' => 'Статията е превод на статия номер ',
646
-	'trad_new' => 'Писане на нов превод на статията', # MODIF
610
+    'texte_vide' => 'празно',
611
+    'texte_vider_cache' => 'Изпразване на кеш-паметта',
612
+    'titre_admin_tech' => 'Техническа поддръжка',
613
+    'titre_admin_vider' => 'Техническа поддръжка',
614
+    'titre_cadre_afficher_article' => 'Показване на статиите:',
615
+    'titre_cadre_afficher_traductions' => 'Показване статуса на превод на следния език:',
616
+    'titre_cadre_ajouter_auteur' => 'ДОБАВЯНЕ НА АВТОР:',
617
+    'titre_cadre_interieur_rubrique' => 'В рубрика',
618
+    'titre_cadre_numero_auteur' => 'НОМЕР НА АВТОРА',
619
+    'titre_cadre_signature_obligatoire' => '<b>Подпис</b> [Задължителен]<br />',
620
+    'titre_config_fonctions' => 'Конфигуриране на сайта',
621
+    'titre_configuration' => 'Конфигуриране на сайта',
622
+    'titre_connexion_ldap' => 'Възможности: <b>Вашата LDAP-връзка</b>',
623
+    'titre_groupe_mots' => 'ГРУПА ОТ КЛЮЧОВИ ДУМИ:',
624
+    'titre_langue_article' => 'ЕЗИК НА СТАТИЯТА', # MODIF
625
+    'titre_langue_rubrique' => 'ЕЗИК НА РУБРИКАТА', # MODIF
626
+    'titre_langue_trad_article' => 'ЕЗИК И ПРЕВОДИ НА СТАТИЯТА',
627
+    'titre_les_articles' => 'СТАТИИ',
628
+    'titre_naviguer_dans_le_site' => 'Търсене на сайта',
629
+    'titre_nouvelle_rubrique' => 'Нова рубрика',
630
+    'titre_numero_rubrique' => 'НОМЕР НА РУБРИКАТА:',
631
+    'titre_page_articles_edit' => 'Промяна: @titre@',
632
+    'titre_page_articles_page' => 'Статии',
633
+    'titre_page_articles_tous' => 'Целият сайт',
634
+    'titre_page_calendrier' => 'Календар @nom_mois@ @annee@',
635
+    'titre_page_config_contenu' => 'Конфигуриране на сайта',
636
+    'titre_page_delete_all' => 'пълно и безвъзвратно изтриване',
637
+    'titre_page_recherche' => 'Резултати от търсенето @recherche@',
638
+    'titre_page_statistiques_referers' => 'Статистика (входящи препратки)',
639
+    'titre_page_upgrade' => 'Актуализация на СПИП',
640
+    'titre_publication_articles_post_dates' => 'Публикуване на статии с отминала дата',
641
+    'titre_reparation' => 'Поправка',
642
+    'titre_suivi_petition' => 'Допълнения на молбите',
643
+    'trad_article_traduction' => 'Всички версии на статията:',
644
+    'trad_delier' => 'Отказ от свързване на статията с нейните преводи', # MODIF
645
+    'trad_lier' => 'Статията е превод на статия номер ',
646
+    'trad_new' => 'Писане на нов превод на статията', # MODIF
647 647
 
648
-	// U
649
-	'utf8_convert_erreur_orig' => 'Грешка: кодировката на символите @charset@ не се поддържа.',
648
+    // U
649
+    'utf8_convert_erreur_orig' => 'Грешка: кодировката на символите @charset@ не се поддържа.',
650 650
 
651
-	// V
652
-	'version' => 'Версия:'
651
+    // V
652
+    'version' => 'Версия:'
653 653
 );
Please login to merge, or discard this patch.
ecrire/public/compiler.php 3 patches
Braces   +1 added lines, -2 removed lines patch added patch discarded remove patch
@@ -890,8 +890,7 @@
 block discarded – undo
890 890
 			if (isset($boucles[$idb]->descr['sourcefile'])) {
891 891
 				$descr['sourcefile'] = $boucles[$idb]->descr['sourcefile'];
892 892
 			}
893
-		}
894
-		else {
893
+		} else {
895 894
 			$descr = array();
896 895
 		}
897 896
 	}
Please login to merge, or discard this patch.
Indentation   +1169 added lines, -1169 removed lines patch added patch discarded remove patch
@@ -18,7 +18,7 @@  discard block
 block discarded – undo
18 18
  **/
19 19
 
20 20
 if (!defined('_ECRIRE_INC_VERSION')) {
21
-	return;
21
+    return;
22 22
 }
23 23
 
24 24
 /** Repérer un code ne calculant rien, meme avec commentaire */
@@ -60,91 +60,91 @@  discard block
 block discarded – undo
60 60
 
61 61
 // https://code.spip.net/@argumenter_inclure
62 62
 function argumenter_inclure(
63
-	$params,
64
-	$rejet_filtres,
65
-	$p,
66
-	&$boucles,
67
-	$id_boucle,
68
-	$echap = true,
69
-	$lang = '',
70
-	$fond1 = false
63
+    $params,
64
+    $rejet_filtres,
65
+    $p,
66
+    &$boucles,
67
+    $id_boucle,
68
+    $echap = true,
69
+    $lang = '',
70
+    $fond1 = false
71 71
 ) {
72
-	$l = array();
73
-	$erreur_p_i_i = '';
74
-	if (!is_array($params)) {
75
-		return $l;
76
-	}
77
-	foreach ($params as $k => $couple) {
78
-		// la liste d'arguments d'inclusion peut se terminer par un filtre
79
-		$filtre = array_shift($couple);
80
-		if ($filtre) {
81
-			break;
82
-		}
83
-		foreach ($couple as $n => $val) {
84
-			$var = $val[0];
85
-			if ($var->type != 'texte') {
86
-				if ($n or $k or $fond1) {
87
-					$erreur_p_i_i = array(
88
-						'zbug_parametres_inclus_incorrects',
89
-						array('param' => $var->nom_champ)
90
-					);
91
-					erreur_squelette($erreur_p_i_i, $p);
92
-					break;
93
-				} else {
94
-					$l[1] = calculer_liste($val, $p->descr, $boucles, $id_boucle);
95
-				}
96
-			} else {
97
-				preg_match(",^([^=]*)(=?)(.*)$,m", $var->texte, $m);
98
-				$m = array_pad($m, 3, null);
99
-				$var = $m[1];
100
-				$auto = false;;
101
-				if ($m[2]) {
102
-					$v = $m[3];
103
-					if (preg_match(',^[\'"](.*)[\'"]$,', $v, $m)) {
104
-						$v = $m[1];
105
-					}
106
-					$val[0] = new Texte;
107
-					$val[0]->texte = $v;
108
-				} elseif ($k or $n or $fond1) {
109
-					$auto = true;
110
-				} else {
111
-					$var = 1;
112
-				}
113
-
114
-				if ($var == 'lang') {
115
-					$lang = !$auto
116
-						? calculer_liste($val, $p->descr, $boucles, $id_boucle)
117
-						: '$GLOBALS["spip_lang"]';
118
-				} else {
119
-					$val = $auto
120
-						? index_pile($id_boucle, $var, $boucles)
121
-						: calculer_liste($val, $p->descr, $boucles, $id_boucle);
122
-					if ($var !== 1) {
123
-						$val = ($echap ? "\'$var\' => ' . argumenter_squelette(" : "'$var' => ")
124
-							. $val . ($echap ? ") . '" : " ");
125
-					} else {
126
-						$val = $echap ? "'.$val.'" : $val;
127
-					}
128
-					$l[$var] = $val;
129
-				}
130
-			}
131
-		}
132
-	}
133
-	if ($erreur_p_i_i) {
134
-		return false;
135
-	}
136
-	// Cas particulier de la langue : si {lang=xx} est definie, on
137
-	// la passe, sinon on passe la langue courante au moment du calcul
138
-	// sauf si on n'en veut pas 
139
-	if ($lang === false) {
140
-		return $l;
141
-	}
142
-	if (!$lang) {
143
-		$lang = '$GLOBALS["spip_lang"]';
144
-	}
145
-	$l['lang'] = ($echap ? "\'lang\' => ' . argumenter_squelette(" : "'lang' => ") . $lang . ($echap ? ") . '" : " ");
146
-
147
-	return $l;
72
+    $l = array();
73
+    $erreur_p_i_i = '';
74
+    if (!is_array($params)) {
75
+        return $l;
76
+    }
77
+    foreach ($params as $k => $couple) {
78
+        // la liste d'arguments d'inclusion peut se terminer par un filtre
79
+        $filtre = array_shift($couple);
80
+        if ($filtre) {
81
+            break;
82
+        }
83
+        foreach ($couple as $n => $val) {
84
+            $var = $val[0];
85
+            if ($var->type != 'texte') {
86
+                if ($n or $k or $fond1) {
87
+                    $erreur_p_i_i = array(
88
+                        'zbug_parametres_inclus_incorrects',
89
+                        array('param' => $var->nom_champ)
90
+                    );
91
+                    erreur_squelette($erreur_p_i_i, $p);
92
+                    break;
93
+                } else {
94
+                    $l[1] = calculer_liste($val, $p->descr, $boucles, $id_boucle);
95
+                }
96
+            } else {
97
+                preg_match(",^([^=]*)(=?)(.*)$,m", $var->texte, $m);
98
+                $m = array_pad($m, 3, null);
99
+                $var = $m[1];
100
+                $auto = false;;
101
+                if ($m[2]) {
102
+                    $v = $m[3];
103
+                    if (preg_match(',^[\'"](.*)[\'"]$,', $v, $m)) {
104
+                        $v = $m[1];
105
+                    }
106
+                    $val[0] = new Texte;
107
+                    $val[0]->texte = $v;
108
+                } elseif ($k or $n or $fond1) {
109
+                    $auto = true;
110
+                } else {
111
+                    $var = 1;
112
+                }
113
+
114
+                if ($var == 'lang') {
115
+                    $lang = !$auto
116
+                        ? calculer_liste($val, $p->descr, $boucles, $id_boucle)
117
+                        : '$GLOBALS["spip_lang"]';
118
+                } else {
119
+                    $val = $auto
120
+                        ? index_pile($id_boucle, $var, $boucles)
121
+                        : calculer_liste($val, $p->descr, $boucles, $id_boucle);
122
+                    if ($var !== 1) {
123
+                        $val = ($echap ? "\'$var\' => ' . argumenter_squelette(" : "'$var' => ")
124
+                            . $val . ($echap ? ") . '" : " ");
125
+                    } else {
126
+                        $val = $echap ? "'.$val.'" : $val;
127
+                    }
128
+                    $l[$var] = $val;
129
+                }
130
+            }
131
+        }
132
+    }
133
+    if ($erreur_p_i_i) {
134
+        return false;
135
+    }
136
+    // Cas particulier de la langue : si {lang=xx} est definie, on
137
+    // la passe, sinon on passe la langue courante au moment du calcul
138
+    // sauf si on n'en veut pas 
139
+    if ($lang === false) {
140
+        return $l;
141
+    }
142
+    if (!$lang) {
143
+        $lang = '$GLOBALS["spip_lang"]';
144
+    }
145
+    $l['lang'] = ($echap ? "\'lang\' => ' . argumenter_squelette(" : "'lang' => ") . $lang . ($echap ? ") . '" : " ");
146
+
147
+    return $l;
148 148
 }
149 149
 
150 150
 /**
@@ -168,77 +168,77 @@  discard block
 block discarded – undo
168 168
  **/
169 169
 function calculer_inclure($p, &$boucles, $id_boucle) {
170 170
 
171
-	$_contexte = argumenter_inclure($p->param, false, $p, $boucles, $id_boucle, true, '', true);
172
-	if (is_string($p->texte)) {
173
-		$fichier = $p->texte;
174
-		$code = "\"".str_replace('"','\"',$fichier)."\"";
175
-
176
-	} else {
177
-		$code = calculer_liste($p->texte, $p->descr, $boucles, $id_boucle);
178
-		if ($code and preg_match("/^'([^']*)'/s", $code, $r)) {
179
-			$fichier = $r[1];
180
-		} else {
181
-			$fichier = '';
182
-		}
183
-	}
184
-	if (!$code or $code === '""' or $code === "''") {
185
-		$trace = $p->fonctions;
186
-		while (is_array($trace)
187
-		  and $trace = array_filter($trace)
188
-			and count($trace)==1) {
189
-			$trace = reset($trace);
190
-		}
191
-		$erreur_p_i_i = array(
192
-			'zbug_parametres_inclus_incorrects',
193
-			array('param' => print_r($trace, true))
194
-		);
195
-		erreur_squelette($erreur_p_i_i, $p);
196
-
197
-		return "''";
198
-	}
199
-	$compil = texte_script(memoriser_contexte_compil($p));
200
-
201
-	if (is_array($_contexte)) {
202
-		// Critere d'inclusion {env} (et {self} pour compatibilite ascendante)
203
-		if ($env = (isset($_contexte['env']) || isset($_contexte['self']))) {
204
-			unset($_contexte['env']);
205
-		}
206
-
207
-		// noter les doublons dans l'appel a public.php
208
-		if (isset($_contexte['doublons'])) {
209
-			$_contexte['doublons'] = "\\'doublons\\' => '.var_export(\$doublons,true).'";
210
-		}
211
-
212
-		if ($ajax = isset($_contexte['ajax'])) {
213
-			$ajax = preg_replace(",=>(.*)$,ims", '=> ($v=(\\1))?$v:true', $_contexte['ajax']);
214
-			unset($_contexte['ajax']);
215
-		}
216
-
217
-		$_contexte = join(",\n\t", $_contexte);
218
-	} else {
219
-		return false;
220
-	} // j'aurais voulu toucher le fond ...
221
-
222
-	$contexte = 'array(' . $_contexte . ')';
223
-
224
-	if ($env) {
225
-		$contexte = "array_merge('.var_export(\$Pile[0],1).',$contexte)";
226
-	}
227
-
228
-	// s'il y a une extension .php, ce n'est pas un squelette
229
-	if ($fichier and preg_match('/^.+[.]php$/s', $fichier)) {
230
-		$code = sandbox_composer_inclure_php($fichier, $p, $contexte);
231
-	} else {
232
-		$_options[] = "\"compil\"=>array($compil)";
233
-		if ($ajax) {
234
-			$_options[] = $ajax;
235
-		}
236
-		$code = " ' . argumenter_squelette($code) . '";
237
-		$code = "echo " . sprintf(CODE_RECUPERER_FOND, $code, $contexte, implode(',', $_options),
238
-				"_request(\"connect\")") . ';';
239
-	}
240
-
241
-	return "\n'<'.'" . "?php " . $code . "\n?'." . "'>'";
171
+    $_contexte = argumenter_inclure($p->param, false, $p, $boucles, $id_boucle, true, '', true);
172
+    if (is_string($p->texte)) {
173
+        $fichier = $p->texte;
174
+        $code = "\"".str_replace('"','\"',$fichier)."\"";
175
+
176
+    } else {
177
+        $code = calculer_liste($p->texte, $p->descr, $boucles, $id_boucle);
178
+        if ($code and preg_match("/^'([^']*)'/s", $code, $r)) {
179
+            $fichier = $r[1];
180
+        } else {
181
+            $fichier = '';
182
+        }
183
+    }
184
+    if (!$code or $code === '""' or $code === "''") {
185
+        $trace = $p->fonctions;
186
+        while (is_array($trace)
187
+          and $trace = array_filter($trace)
188
+            and count($trace)==1) {
189
+            $trace = reset($trace);
190
+        }
191
+        $erreur_p_i_i = array(
192
+            'zbug_parametres_inclus_incorrects',
193
+            array('param' => print_r($trace, true))
194
+        );
195
+        erreur_squelette($erreur_p_i_i, $p);
196
+
197
+        return "''";
198
+    }
199
+    $compil = texte_script(memoriser_contexte_compil($p));
200
+
201
+    if (is_array($_contexte)) {
202
+        // Critere d'inclusion {env} (et {self} pour compatibilite ascendante)
203
+        if ($env = (isset($_contexte['env']) || isset($_contexte['self']))) {
204
+            unset($_contexte['env']);
205
+        }
206
+
207
+        // noter les doublons dans l'appel a public.php
208
+        if (isset($_contexte['doublons'])) {
209
+            $_contexte['doublons'] = "\\'doublons\\' => '.var_export(\$doublons,true).'";
210
+        }
211
+
212
+        if ($ajax = isset($_contexte['ajax'])) {
213
+            $ajax = preg_replace(",=>(.*)$,ims", '=> ($v=(\\1))?$v:true', $_contexte['ajax']);
214
+            unset($_contexte['ajax']);
215
+        }
216
+
217
+        $_contexte = join(",\n\t", $_contexte);
218
+    } else {
219
+        return false;
220
+    } // j'aurais voulu toucher le fond ...
221
+
222
+    $contexte = 'array(' . $_contexte . ')';
223
+
224
+    if ($env) {
225
+        $contexte = "array_merge('.var_export(\$Pile[0],1).',$contexte)";
226
+    }
227
+
228
+    // s'il y a une extension .php, ce n'est pas un squelette
229
+    if ($fichier and preg_match('/^.+[.]php$/s', $fichier)) {
230
+        $code = sandbox_composer_inclure_php($fichier, $p, $contexte);
231
+    } else {
232
+        $_options[] = "\"compil\"=>array($compil)";
233
+        if ($ajax) {
234
+            $_options[] = $ajax;
235
+        }
236
+        $code = " ' . argumenter_squelette($code) . '";
237
+        $code = "echo " . sprintf(CODE_RECUPERER_FOND, $code, $contexte, implode(',', $_options),
238
+                "_request(\"connect\")") . ';';
239
+    }
240
+
241
+    return "\n'<'.'" . "?php " . $code . "\n?'." . "'>'";
242 242
 }
243 243
 
244 244
 
@@ -256,7 +256,7 @@  discard block
 block discarded – undo
256 256
  *     true pour ne tester que le cas publie et ignorer l'eventuel var_mode=preview de la page
257 257
  */
258 258
 function instituer_boucle(&$boucle, $echapper = true, $ignore_previsu = false) {
259
-	/*
259
+    /*
260 260
 	$show['statut'][] = array(
261 261
 		'champ'=>'statut',  // champ de la table sur lequel porte le filtrage par le statut
262 262
 		'publie'=>'publie', // valeur ou liste de valeurs, qui definissent l'objet comme publie.
@@ -280,71 +280,71 @@  discard block
 block discarded – undo
280 280
 	champstatut est alors le champ statut sur la tablen
281 281
 	dans les jointures, clen peut etre un tableau pour une jointure complexe : array('id_objet','id_article','objet','article')
282 282
 */
283
-	$id_table = $boucle->id_table;
284
-	$show = $boucle->show;
285
-	if (isset($show['statut']) and $show['statut']) {
286
-		foreach ($show['statut'] as $k => $s) {
287
-			// Restreindre aux elements publies si pas de {statut} ou autre dans les criteres
288
-			$filtrer = true;
289
-			if (isset($s['exception'])) {
290
-				foreach (is_array($s['exception']) ? $s['exception'] : array($s['exception']) as $m) {
291
-					if (isset($boucle->modificateur[$m]) or isset($boucle->modificateur['criteres'][$m])) {
292
-						$filtrer = false;
293
-						break;
294
-					}
295
-				}
296
-			}
297
-
298
-			if ($filtrer) {
299
-				if (is_array($s['champ'])) {
300
-					$statut = preg_replace(',\W,', '', array_pop($s['champ'])); // securite
301
-					$jointures = array();
302
-					// indiquer la description de chaque table dans le tableau de jointures,
303
-					// ce qui permet d'eviter certains GROUP BY inutiles.
304
-					$trouver_table = charger_fonction('trouver_table', 'base');
305
-					foreach ($s['champ'] as $j) {
306
-						$id = reset($j);
307
-						$def = $trouver_table($id);
308
-						$jointures[] = array('', array($id, $def), end($j));
309
-					}
310
-					$jointures[0][0] = $id_table;
311
-					if (!array_search($id, $boucle->from)) {
312
-						include_spip('public/jointures');
313
-						fabrique_jointures($boucle, $jointures, true, $boucle->show, $id_table, '', $echapper);
314
-					}
315
-					// trouver l'alias de la table d'arrivee qui porte le statut
316
-					$id = array_search($id, $boucle->from);
317
-				} else {
318
-					$id = $id_table;
319
-					$statut = preg_replace(',\W,', '', $s['champ']); // securite
320
-				}
321
-				$mstatut = $id . '.' . $statut;
322
-
323
-				$arg_ignore_previsu = ($ignore_previsu ? ",true" : '');
324
-				include_spip('public/quete');
325
-				if (isset($s['post_date']) and $s['post_date']
326
-					and $GLOBALS['meta']["post_dates"] == 'non'
327
-				) {
328
-					$date = $id . '.' . preg_replace(',\W,', '', $s['post_date']); // securite
329
-					array_unshift($boucle->where,
330
-						$echapper ?
331
-							"\nquete_condition_postdates('$date'," . _q($boucle->sql_serveur) . "$arg_ignore_previsu)"
332
-							:
333
-							quete_condition_postdates($date, $boucle->sql_serveur, $ignore_previsu)
334
-					);
335
-				}
336
-				array_unshift($boucle->where,
337
-					$echapper ?
338
-						"\nquete_condition_statut('$mstatut',"
339
-						. _q($s['previsu']) . ","
340
-						. _q($s['publie']) . ","
341
-						. _q($boucle->sql_serveur) . "$arg_ignore_previsu)"
342
-						:
343
-						quete_condition_statut($mstatut, $s['previsu'], $s['publie'], $boucle->sql_serveur, $ignore_previsu)
344
-				);
345
-			}
346
-		}
347
-	}
283
+    $id_table = $boucle->id_table;
284
+    $show = $boucle->show;
285
+    if (isset($show['statut']) and $show['statut']) {
286
+        foreach ($show['statut'] as $k => $s) {
287
+            // Restreindre aux elements publies si pas de {statut} ou autre dans les criteres
288
+            $filtrer = true;
289
+            if (isset($s['exception'])) {
290
+                foreach (is_array($s['exception']) ? $s['exception'] : array($s['exception']) as $m) {
291
+                    if (isset($boucle->modificateur[$m]) or isset($boucle->modificateur['criteres'][$m])) {
292
+                        $filtrer = false;
293
+                        break;
294
+                    }
295
+                }
296
+            }
297
+
298
+            if ($filtrer) {
299
+                if (is_array($s['champ'])) {
300
+                    $statut = preg_replace(',\W,', '', array_pop($s['champ'])); // securite
301
+                    $jointures = array();
302
+                    // indiquer la description de chaque table dans le tableau de jointures,
303
+                    // ce qui permet d'eviter certains GROUP BY inutiles.
304
+                    $trouver_table = charger_fonction('trouver_table', 'base');
305
+                    foreach ($s['champ'] as $j) {
306
+                        $id = reset($j);
307
+                        $def = $trouver_table($id);
308
+                        $jointures[] = array('', array($id, $def), end($j));
309
+                    }
310
+                    $jointures[0][0] = $id_table;
311
+                    if (!array_search($id, $boucle->from)) {
312
+                        include_spip('public/jointures');
313
+                        fabrique_jointures($boucle, $jointures, true, $boucle->show, $id_table, '', $echapper);
314
+                    }
315
+                    // trouver l'alias de la table d'arrivee qui porte le statut
316
+                    $id = array_search($id, $boucle->from);
317
+                } else {
318
+                    $id = $id_table;
319
+                    $statut = preg_replace(',\W,', '', $s['champ']); // securite
320
+                }
321
+                $mstatut = $id . '.' . $statut;
322
+
323
+                $arg_ignore_previsu = ($ignore_previsu ? ",true" : '');
324
+                include_spip('public/quete');
325
+                if (isset($s['post_date']) and $s['post_date']
326
+                    and $GLOBALS['meta']["post_dates"] == 'non'
327
+                ) {
328
+                    $date = $id . '.' . preg_replace(',\W,', '', $s['post_date']); // securite
329
+                    array_unshift($boucle->where,
330
+                        $echapper ?
331
+                            "\nquete_condition_postdates('$date'," . _q($boucle->sql_serveur) . "$arg_ignore_previsu)"
332
+                            :
333
+                            quete_condition_postdates($date, $boucle->sql_serveur, $ignore_previsu)
334
+                    );
335
+                }
336
+                array_unshift($boucle->where,
337
+                    $echapper ?
338
+                        "\nquete_condition_statut('$mstatut',"
339
+                        . _q($s['previsu']) . ","
340
+                        . _q($s['publie']) . ","
341
+                        . _q($boucle->sql_serveur) . "$arg_ignore_previsu)"
342
+                        :
343
+                        quete_condition_statut($mstatut, $s['previsu'], $s['publie'], $boucle->sql_serveur, $ignore_previsu)
344
+                );
345
+            }
346
+        }
347
+    }
348 348
 }
349 349
 
350 350
 /**
@@ -363,29 +363,29 @@  discard block
 block discarded – undo
363 363
  */
364 364
 function calculer_boucle($id_boucle, &$boucles) {
365 365
 
366
-	$boucle = &$boucles[$id_boucle];
367
-	instituer_boucle($boucle);
368
-	$boucles[$id_boucle] = pipeline('post_boucle', $boucles[$id_boucle]);
369
-
370
-	// en mode debug memoriser les premiers passages dans la boucle,
371
-	// mais pas tous, sinon ca pete.
372
-	if (_request('var_mode_affiche') != 'resultat') {
373
-		$trace = '';
374
-	} else {
375
-		$_trace = $boucles[$id_boucle]->descr['nom'] . $id_boucle;
376
-		$_trace = "\$GLOBALS['debug_objets']['resultat']['$_trace']";
377
-		$trace = "
366
+    $boucle = &$boucles[$id_boucle];
367
+    instituer_boucle($boucle);
368
+    $boucles[$id_boucle] = pipeline('post_boucle', $boucles[$id_boucle]);
369
+
370
+    // en mode debug memoriser les premiers passages dans la boucle,
371
+    // mais pas tous, sinon ca pete.
372
+    if (_request('var_mode_affiche') != 'resultat') {
373
+        $trace = '';
374
+    } else {
375
+        $_trace = $boucles[$id_boucle]->descr['nom'] . $id_boucle;
376
+        $_trace = "\$GLOBALS['debug_objets']['resultat']['$_trace']";
377
+        $trace = "
378 378
 		if (empty($_trace)) { 
379 379
 			$_trace = []; 
380 380
 		}
381 381
 		if (count($_trace) < 3) { 
382 382
 			$_trace" . "[] = \$t0; 
383 383
 		}";
384
-	}
384
+    }
385 385
 
386
-	return ($boucles[$id_boucle]->type_requete == TYPE_RECURSIF)
387
-		? calculer_boucle_rec($id_boucle, $boucles, $trace)
388
-		: calculer_boucle_nonrec($id_boucle, $boucles, $trace);
386
+    return ($boucles[$id_boucle]->type_requete == TYPE_RECURSIF)
387
+        ? calculer_boucle_rec($id_boucle, $boucles, $trace)
388
+        : calculer_boucle_nonrec($id_boucle, $boucles, $trace);
389 389
 }
390 390
 
391 391
 
@@ -408,15 +408,15 @@  discard block
 block discarded – undo
408 408
  *    Code PHP compilé de la boucle récursive
409 409
  **/
410 410
 function calculer_boucle_rec($id_boucle, &$boucles, $trace) {
411
-	$nom = $boucles[$id_boucle]->param[0];
412
-
413
-	return
414
-		// Numrows[$nom] peut ne pas être encore defini
415
-		"\n\t\$save_numrows = (isset(\$Numrows['$nom']) ? \$Numrows['$nom'] : array());"
416
-		. "\n\t\$t0 = " . $boucles[$id_boucle]->return . ";"
417
-		. "\n\t\$Numrows['$nom'] = (\$save_numrows);"
418
-		. $trace
419
-		. "\n\treturn \$t0;";
411
+    $nom = $boucles[$id_boucle]->param[0];
412
+
413
+    return
414
+        // Numrows[$nom] peut ne pas être encore defini
415
+        "\n\t\$save_numrows = (isset(\$Numrows['$nom']) ? \$Numrows['$nom'] : array());"
416
+        . "\n\t\$t0 = " . $boucles[$id_boucle]->return . ";"
417
+        . "\n\t\$Numrows['$nom'] = (\$save_numrows);"
418
+        . $trace
419
+        . "\n\treturn \$t0;";
420 420
 }
421 421
 
422 422
 /**
@@ -470,170 +470,170 @@  discard block
 block discarded – undo
470 470
  **/
471 471
 function calculer_boucle_nonrec($id_boucle, &$boucles, $trace) {
472 472
 
473
-	$boucle = &$boucles[$id_boucle];
474
-	$return = $boucle->return;
475
-	$type_boucle = $boucle->type_requete;
476
-	$primary = $boucle->primary;
477
-	$constant = preg_match(CODE_MONOTONE, str_replace("\\'", '', $return));
478
-	$flag_cpt = $boucle->mode_partie || $boucle->cptrows;
479
-	$corps = '';
480
-
481
-	// faudrait expanser le foreach a la compil, car y en a souvent qu'un 
482
-	// et puis faire un [] plutot qu'un "','."
483
-	if ($boucle->doublons) {
484
-		$corps .= "\n\t\t\tforeach(" . $boucle->doublons . ' as $k) $doublons[$k] .= "," . ' .
485
-			index_pile($id_boucle, $primary, $boucles)
486
-			. "; // doublons\n";
487
-	}
488
-
489
-	// La boucle doit-elle selectionner la langue ?
490
-	// - par defaut, les boucles suivantes le font
491
-	//    (sauf si forcer_lang==true ou si le titre contient <multi>).
492
-	// - a moins d'une demande explicite via {!lang_select}
493
-	if (!$constant && $boucle->lang_select != 'non' &&
494
-		(($boucle->lang_select == 'oui') ||
495
-			in_array($type_boucle, array(
496
-				'articles',
497
-				'rubriques',
498
-				'hierarchie',
499
-				'breves'
500
-			)))
501
-	) {
502
-		// Memoriser la langue avant la boucle et la restituer apres
503
-		// afin que le corps de boucle affecte la globale directement
504
-		$init_lang = "lang_select(\$GLOBALS['spip_lang']);\n\t";
505
-		$fin_lang = "lang_select();\n\t";
506
-		$fin_lang_select_public = "\n\t\tlang_select();";
507
-
508
-		$corps .=
509
-			"\n\t\tlang_select_public("
510
-			. index_pile($id_boucle, 'lang', $boucles)
511
-			. ", '" . $boucle->lang_select . "'"
512
-			. (in_array($type_boucle, array(
513
-				'articles',
514
-				'rubriques',
515
-				'hierarchie',
516
-				'breves'
517
-			)) ? ', ' . index_pile($id_boucle, 'titre', $boucles) : '')
518
-			. ');';
519
-	} else {
520
-		$init_lang = '';
521
-		$fin_lang = '';
522
-		$fin_lang_select_public = '';
523
-		// sortir les appels au traducteur (invariants de boucle)
524
-		if (strpos($return, '?php') === false
525
-			and preg_match_all("/\W(_T[(]'[^']*'[)])/", $return, $r)
526
-		) {
527
-			$i = 1;
528
-			foreach ($r[1] as $t) {
529
-				$init_lang .= "\n\t\$l$i = $t;";
530
-				$return = str_replace($t, "\$l$i", $return);
531
-				$i++;
532
-			}
533
-		}
534
-	}
535
-
536
-	// gestion optimale des separateurs et des boucles constantes
537
-	if (count($boucle->separateur)) {
538
-		$code_sep = ("'" . str_replace("'", "\'", join('', $boucle->separateur)) . "'");
539
-	}
540
-
541
-	$corps .=
542
-		((!$boucle->separateur) ?
543
-			(($constant && !$corps && !$flag_cpt) ? $return :
544
-				(($return === "''") ? '' :
545
-					("\n\t\t" . '$t0 .= ' . $return . ";"))) :
546
-			("\n\t\t\$t1 " .
547
-				((strpos($return, '$t1.') === 0) ?
548
-					(".=" . substr($return, 4)) :
549
-					('= ' . $return)) .
550
-				";\n\t\t" .
551
-				'$t0 .= ((strlen($t1) && strlen($t0)) ? ' . $code_sep . " : '') . \$t1;"));
552
-
553
-	// Calculer les invalideurs si c'est une boucle non constante et si on
554
-	// souhaite invalider ces elements
555
-	if (!$constant and $primary) {
556
-		include_spip('inc/invalideur');
557
-		$corps = calcul_invalideurs($corps, $primary,$boucles, $id_boucle);
558
-	}
559
-
560
-	// gerer le compteur de boucle 
561
-	// avec ou sans son utilisation par les criteres {1/3} {1,4} {n-2,1}...
562
-
563
-	if ($boucle->partie or $boucle->cptrows) {
564
-		$corps = "\n\t\t\$Numrows['$id_boucle']['compteur_boucle']++;"
565
-			. $boucle->partie
566
-			. $corps;
567
-	}
568
-
569
-	// depiler la lang de la boucle si besoin
570
-	$corps .= $fin_lang_select_public;
571
-
572
-	// si le corps est une constante, ne pas appeler le serveur N fois!
573
-
574
-	if (preg_match(CODE_MONOTONE, str_replace("\\'", '', $corps), $r)) {
575
-		if (!isset($r[2]) or (!$r[2])) {
576
-			if (!$boucle->numrows) {
577
-				return "\n\t\$t0 = '';";
578
-			} else {
579
-				$corps = "";
580
-			}
581
-		} else {
582
-			$boucle->numrows = true;
583
-			$corps = "\n\t\$t0 = str_repeat($corps, \$Numrows['$id_boucle']['total']);";
584
-		}
585
-	} else {
586
-		$corps = "while (\$Pile[\$SP]=\$iter->fetch()) {\n$corps\n	}";
587
-	}
588
-
589
-	$count = '';
590
-	if (!$boucle->select) {
591
-		if (!$boucle->numrows or $boucle->limit or $boucle->mode_partie or $boucle->group) {
592
-			$count = '1';
593
-		} else {
594
-			$count = 'count(*)';
595
-		}
596
-		$boucles[$id_boucle]->select[] = $count;
597
-	}
598
-
599
-	if ($flag_cpt) {
600
-		$nums = "\n\t// COMPTEUR\n\t"
601
-			. "\$Numrows['$id_boucle']['compteur_boucle'] = 0;\n\t";
602
-	} else {
603
-		$nums = '';
604
-	}
605
-
606
-	if ($boucle->numrows or $boucle->mode_partie) {
607
-		$nums .= "\$Numrows['$id_boucle']['command'] = \$command;\n\t"
608
-			. "\$Numrows['$id_boucle']['total'] = @intval(\$iter->count());"
609
-			. $boucle->mode_partie
610
-			. "\n\t";
611
-	}
612
-
613
-	// Ne calculer la requete que maintenant
614
-	// car ce qui precede appelle index_pile qui influe dessus
615
-
616
-	$init = (($init = $boucles[$id_boucle]->doublons)
617
-			? ("\n\t$init = array();") : '')
618
-		. calculer_requete_sql($boucles[$id_boucle]);
619
-
620
-	$contexte = memoriser_contexte_compil($boucle);
621
-
622
-	$a = sprintf(CODE_CORPS_BOUCLE,
623
-		$init,
624
-		$boucle->iterateur,
625
-		"\$command",
626
-		$contexte,
627
-		$nums,
628
-		$init_lang,
629
-		$corps,
630
-		$fin_lang,
631
-		$trace,
632
-		'BOUCLE' . $id_boucle . ' @ ' . ($boucle->descr['sourcefile'])
633
-	);
473
+    $boucle = &$boucles[$id_boucle];
474
+    $return = $boucle->return;
475
+    $type_boucle = $boucle->type_requete;
476
+    $primary = $boucle->primary;
477
+    $constant = preg_match(CODE_MONOTONE, str_replace("\\'", '', $return));
478
+    $flag_cpt = $boucle->mode_partie || $boucle->cptrows;
479
+    $corps = '';
480
+
481
+    // faudrait expanser le foreach a la compil, car y en a souvent qu'un 
482
+    // et puis faire un [] plutot qu'un "','."
483
+    if ($boucle->doublons) {
484
+        $corps .= "\n\t\t\tforeach(" . $boucle->doublons . ' as $k) $doublons[$k] .= "," . ' .
485
+            index_pile($id_boucle, $primary, $boucles)
486
+            . "; // doublons\n";
487
+    }
488
+
489
+    // La boucle doit-elle selectionner la langue ?
490
+    // - par defaut, les boucles suivantes le font
491
+    //    (sauf si forcer_lang==true ou si le titre contient <multi>).
492
+    // - a moins d'une demande explicite via {!lang_select}
493
+    if (!$constant && $boucle->lang_select != 'non' &&
494
+        (($boucle->lang_select == 'oui') ||
495
+            in_array($type_boucle, array(
496
+                'articles',
497
+                'rubriques',
498
+                'hierarchie',
499
+                'breves'
500
+            )))
501
+    ) {
502
+        // Memoriser la langue avant la boucle et la restituer apres
503
+        // afin que le corps de boucle affecte la globale directement
504
+        $init_lang = "lang_select(\$GLOBALS['spip_lang']);\n\t";
505
+        $fin_lang = "lang_select();\n\t";
506
+        $fin_lang_select_public = "\n\t\tlang_select();";
507
+
508
+        $corps .=
509
+            "\n\t\tlang_select_public("
510
+            . index_pile($id_boucle, 'lang', $boucles)
511
+            . ", '" . $boucle->lang_select . "'"
512
+            . (in_array($type_boucle, array(
513
+                'articles',
514
+                'rubriques',
515
+                'hierarchie',
516
+                'breves'
517
+            )) ? ', ' . index_pile($id_boucle, 'titre', $boucles) : '')
518
+            . ');';
519
+    } else {
520
+        $init_lang = '';
521
+        $fin_lang = '';
522
+        $fin_lang_select_public = '';
523
+        // sortir les appels au traducteur (invariants de boucle)
524
+        if (strpos($return, '?php') === false
525
+            and preg_match_all("/\W(_T[(]'[^']*'[)])/", $return, $r)
526
+        ) {
527
+            $i = 1;
528
+            foreach ($r[1] as $t) {
529
+                $init_lang .= "\n\t\$l$i = $t;";
530
+                $return = str_replace($t, "\$l$i", $return);
531
+                $i++;
532
+            }
533
+        }
534
+    }
535
+
536
+    // gestion optimale des separateurs et des boucles constantes
537
+    if (count($boucle->separateur)) {
538
+        $code_sep = ("'" . str_replace("'", "\'", join('', $boucle->separateur)) . "'");
539
+    }
540
+
541
+    $corps .=
542
+        ((!$boucle->separateur) ?
543
+            (($constant && !$corps && !$flag_cpt) ? $return :
544
+                (($return === "''") ? '' :
545
+                    ("\n\t\t" . '$t0 .= ' . $return . ";"))) :
546
+            ("\n\t\t\$t1 " .
547
+                ((strpos($return, '$t1.') === 0) ?
548
+                    (".=" . substr($return, 4)) :
549
+                    ('= ' . $return)) .
550
+                ";\n\t\t" .
551
+                '$t0 .= ((strlen($t1) && strlen($t0)) ? ' . $code_sep . " : '') . \$t1;"));
552
+
553
+    // Calculer les invalideurs si c'est une boucle non constante et si on
554
+    // souhaite invalider ces elements
555
+    if (!$constant and $primary) {
556
+        include_spip('inc/invalideur');
557
+        $corps = calcul_invalideurs($corps, $primary,$boucles, $id_boucle);
558
+    }
559
+
560
+    // gerer le compteur de boucle 
561
+    // avec ou sans son utilisation par les criteres {1/3} {1,4} {n-2,1}...
562
+
563
+    if ($boucle->partie or $boucle->cptrows) {
564
+        $corps = "\n\t\t\$Numrows['$id_boucle']['compteur_boucle']++;"
565
+            . $boucle->partie
566
+            . $corps;
567
+    }
568
+
569
+    // depiler la lang de la boucle si besoin
570
+    $corps .= $fin_lang_select_public;
571
+
572
+    // si le corps est une constante, ne pas appeler le serveur N fois!
573
+
574
+    if (preg_match(CODE_MONOTONE, str_replace("\\'", '', $corps), $r)) {
575
+        if (!isset($r[2]) or (!$r[2])) {
576
+            if (!$boucle->numrows) {
577
+                return "\n\t\$t0 = '';";
578
+            } else {
579
+                $corps = "";
580
+            }
581
+        } else {
582
+            $boucle->numrows = true;
583
+            $corps = "\n\t\$t0 = str_repeat($corps, \$Numrows['$id_boucle']['total']);";
584
+        }
585
+    } else {
586
+        $corps = "while (\$Pile[\$SP]=\$iter->fetch()) {\n$corps\n	}";
587
+    }
588
+
589
+    $count = '';
590
+    if (!$boucle->select) {
591
+        if (!$boucle->numrows or $boucle->limit or $boucle->mode_partie or $boucle->group) {
592
+            $count = '1';
593
+        } else {
594
+            $count = 'count(*)';
595
+        }
596
+        $boucles[$id_boucle]->select[] = $count;
597
+    }
598
+
599
+    if ($flag_cpt) {
600
+        $nums = "\n\t// COMPTEUR\n\t"
601
+            . "\$Numrows['$id_boucle']['compteur_boucle'] = 0;\n\t";
602
+    } else {
603
+        $nums = '';
604
+    }
605
+
606
+    if ($boucle->numrows or $boucle->mode_partie) {
607
+        $nums .= "\$Numrows['$id_boucle']['command'] = \$command;\n\t"
608
+            . "\$Numrows['$id_boucle']['total'] = @intval(\$iter->count());"
609
+            . $boucle->mode_partie
610
+            . "\n\t";
611
+    }
612
+
613
+    // Ne calculer la requete que maintenant
614
+    // car ce qui precede appelle index_pile qui influe dessus
615
+
616
+    $init = (($init = $boucles[$id_boucle]->doublons)
617
+            ? ("\n\t$init = array();") : '')
618
+        . calculer_requete_sql($boucles[$id_boucle]);
619
+
620
+    $contexte = memoriser_contexte_compil($boucle);
621
+
622
+    $a = sprintf(CODE_CORPS_BOUCLE,
623
+        $init,
624
+        $boucle->iterateur,
625
+        "\$command",
626
+        $contexte,
627
+        $nums,
628
+        $init_lang,
629
+        $corps,
630
+        $fin_lang,
631
+        $trace,
632
+        'BOUCLE' . $id_boucle . ' @ ' . ($boucle->descr['sourcefile'])
633
+    );
634 634
 
635 635
 #	var_dump($a);exit;
636
-	return $a;
636
+    return $a;
637 637
 }
638 638
 
639 639
 
@@ -649,43 +649,43 @@  discard block
 block discarded – undo
649 649
  *     Code PHP compilé définissant les informations de requête
650 650
  **/
651 651
 function calculer_requete_sql($boucle) {
652
-	$init = array();
653
-	$init[] = calculer_dec('table', "'" . $boucle->id_table . "'");
654
-	$init[] = calculer_dec('id', "'" . $boucle->id_boucle . "'");
655
-	# En absence de champ c'est un decompte :
656
-	$init[] = calculer_dec('from', calculer_from($boucle));
657
-	$init[] = calculer_dec('type', calculer_from_type($boucle));
658
-	$init[] = calculer_dec('groupby',
659
-		'array(' . (($g = join("\",\n\t\t\"", $boucle->group)) ? '"' . $g . '"' : '') . ")");
660
-	$init[] = calculer_dec('select', 'array("' . join("\",\n\t\t\"", $boucle->select) . "\")");
661
-	$init[] = calculer_dec('orderby', 'array(' . calculer_order($boucle) . ")");
662
-	$init[] = calculer_dec('where', calculer_dump_array($boucle->where));
663
-	$init[] = calculer_dec('join', calculer_dump_join($boucle->join));
664
-	$init[] = calculer_dec('limit',
665
-		(strpos($boucle->limit, 'intval') === false ?
666
-			"'" . $boucle->limit . "'"
667
-			:
668
-			$boucle->limit));
669
-	$init[] = calculer_dec('having', calculer_dump_array($boucle->having));
670
-	$s = $d = "";
671
-	// l'index 0 de $i indique si l'affectation est statique (contenu)
672
-	// ou recalculée à chaque passage (vide)
673
-	foreach ($init as $i) {
674
-		if (reset($i)) {
675
-			$s .= "\n\t\t" . end($i);
676
-		} # statique
677
-		else {
678
-			$d .= "\n\t" . end($i);
679
-		} # dynamique
680
-	}
681
-
682
-	return ($boucle->hierarchie ? "\n\t$boucle->hierarchie" : '')
683
-	. $boucle->in
684
-	. $boucle->hash
685
-	. "\n\t" . 'if (!isset($command[\'table\'])) {'
686
-	. $s
687
-	. "\n\t}"
688
-	. $d;
652
+    $init = array();
653
+    $init[] = calculer_dec('table', "'" . $boucle->id_table . "'");
654
+    $init[] = calculer_dec('id', "'" . $boucle->id_boucle . "'");
655
+    # En absence de champ c'est un decompte :
656
+    $init[] = calculer_dec('from', calculer_from($boucle));
657
+    $init[] = calculer_dec('type', calculer_from_type($boucle));
658
+    $init[] = calculer_dec('groupby',
659
+        'array(' . (($g = join("\",\n\t\t\"", $boucle->group)) ? '"' . $g . '"' : '') . ")");
660
+    $init[] = calculer_dec('select', 'array("' . join("\",\n\t\t\"", $boucle->select) . "\")");
661
+    $init[] = calculer_dec('orderby', 'array(' . calculer_order($boucle) . ")");
662
+    $init[] = calculer_dec('where', calculer_dump_array($boucle->where));
663
+    $init[] = calculer_dec('join', calculer_dump_join($boucle->join));
664
+    $init[] = calculer_dec('limit',
665
+        (strpos($boucle->limit, 'intval') === false ?
666
+            "'" . $boucle->limit . "'"
667
+            :
668
+            $boucle->limit));
669
+    $init[] = calculer_dec('having', calculer_dump_array($boucle->having));
670
+    $s = $d = "";
671
+    // l'index 0 de $i indique si l'affectation est statique (contenu)
672
+    // ou recalculée à chaque passage (vide)
673
+    foreach ($init as $i) {
674
+        if (reset($i)) {
675
+            $s .= "\n\t\t" . end($i);
676
+        } # statique
677
+        else {
678
+            $d .= "\n\t" . end($i);
679
+        } # dynamique
680
+    }
681
+
682
+    return ($boucle->hierarchie ? "\n\t$boucle->hierarchie" : '')
683
+    . $boucle->in
684
+    . $boucle->hash
685
+    . "\n\t" . 'if (!isset($command[\'table\'])) {'
686
+    . $s
687
+    . "\n\t}"
688
+    . $d;
689 689
 }
690 690
 
691 691
 /**
@@ -703,13 +703,13 @@  discard block
 block discarded – undo
703 703
  *     qui peut être utilisé pour la production d'un tableau array()
704 704
  **/
705 705
 function memoriser_contexte_compil($p) {
706
-	return join(',', array(
707
-		_q(isset($p->descr['sourcefile']) ? $p->descr['sourcefile'] : ''),
708
-		_q(isset($p->descr['nom']) ? $p->descr['nom'] : ''),
709
-		_q(isset($p->id_boucle) ? $p->id_boucle : null),
710
-		intval($p->ligne),
711
-		'$GLOBALS[\'spip_lang\']'
712
-	));
706
+    return join(',', array(
707
+        _q(isset($p->descr['sourcefile']) ? $p->descr['sourcefile'] : ''),
708
+        _q(isset($p->descr['nom']) ? $p->descr['nom'] : ''),
709
+        _q(isset($p->id_boucle) ? $p->id_boucle : null),
710
+        intval($p->ligne),
711
+        '$GLOBALS[\'spip_lang\']'
712
+    ));
713 713
 }
714 714
 
715 715
 /**
@@ -727,19 +727,19 @@  discard block
 block discarded – undo
727 727
  *     Objet Contexte
728 728
  **/
729 729
 function reconstruire_contexte_compil($context_compil) {
730
-	if (!is_array($context_compil)) {
731
-		return $context_compil;
732
-	}
733
-	$p = new Contexte;
734
-	$p->descr = array(
735
-		'sourcefile' => $context_compil[0],
736
-		'nom' => $context_compil[1]
737
-	);
738
-	$p->id_boucle = $context_compil[2];
739
-	$p->ligne = $context_compil[3];
740
-	$p->lang = $context_compil[4];
741
-
742
-	return $p;
730
+    if (!is_array($context_compil)) {
731
+        return $context_compil;
732
+    }
733
+    $p = new Contexte;
734
+    $p->descr = array(
735
+        'sourcefile' => $context_compil[0],
736
+        'nom' => $context_compil[1]
737
+    );
738
+    $p->id_boucle = $context_compil[2];
739
+    $p->ligne = $context_compil[3];
740
+    $p->lang = $context_compil[4];
741
+
742
+    return $p;
743 743
 }
744 744
 
745 745
 /**
@@ -765,12 +765,12 @@  discard block
 block discarded – undo
765 765
  *    - index 1 : Code de l'affectation
766 766
  **/
767 767
 function calculer_dec($nom, $val) {
768
-	$static = 'if (!isset($command[\'' . $nom . '\'])) ';
769
-	// si une variable apparait dans le calcul de la clause
770
-	// il faut la re-evaluer a chaque passage
771
-	if (
772
-		strpos($val, '$') !== false
773
-		/*
768
+    $static = 'if (!isset($command[\'' . $nom . '\'])) ';
769
+    // si une variable apparait dans le calcul de la clause
770
+    // il faut la re-evaluer a chaque passage
771
+    if (
772
+        strpos($val, '$') !== false
773
+        /*
774 774
 		OR strpos($val, 'sql_') !== false
775 775
 		OR (
776 776
 			$test = str_replace(array("array(",'\"',"\'"),array("","",""),$val) // supprimer les array( et les echappements de guillemets
@@ -778,11 +778,11 @@  discard block
 block discarded – undo
778 778
 			AND $test = preg_replace(",'[^']*',UimsS","",$test) // supprimer les chaines qui peuvent contenir des fonctions SQL qui ne genent pas
779 779
 			AND preg_match(",\w+\s*\(,UimsS",$test,$regs) // tester la presence de fonctions restantes
780 780
 		)*/
781
-	) {
782
-		$static = "";
783
-	}
781
+    ) {
782
+        $static = "";
783
+    }
784 784
 
785
-	return array($static, '$command[\'' . $nom . '\'] = ' . $val . ';');
785
+    return array($static, '$command[\'' . $nom . '\'] = ' . $val . ';');
786 786
 }
787 787
 
788 788
 /**
@@ -802,33 +802,33 @@  discard block
 block discarded – undo
802 802
  *     Expression PHP décrivant un texte ou un tableau
803 803
  **/
804 804
 function calculer_dump_array($a) {
805
-	if (!is_array($a)) {
806
-		return $a;
807
-	}
808
-	$res = "";
809
-	if ($a and $a[0] == "'?'") {
810
-		return ("(" . calculer_dump_array($a[1]) .
811
-			" ? " . calculer_dump_array($a[2]) .
812
-			" : " . calculer_dump_array($a[3]) .
813
-			")");
814
-	} else {
815
-		foreach ($a as $k => $v) {
816
-			$showk = (is_numeric($k) ? '' : sql_quote($k) . ' => ');
817
-			$res .= ", " . $showk . calculer_dump_array($v);
818
-		}
819
-
820
-		return "\n\t\t\tarray(" . substr($res, 2) . ')';
821
-	}
805
+    if (!is_array($a)) {
806
+        return $a;
807
+    }
808
+    $res = "";
809
+    if ($a and $a[0] == "'?'") {
810
+        return ("(" . calculer_dump_array($a[1]) .
811
+            " ? " . calculer_dump_array($a[2]) .
812
+            " : " . calculer_dump_array($a[3]) .
813
+            ")");
814
+    } else {
815
+        foreach ($a as $k => $v) {
816
+            $showk = (is_numeric($k) ? '' : sql_quote($k) . ' => ');
817
+            $res .= ", " . $showk . calculer_dump_array($v);
818
+        }
819
+
820
+        return "\n\t\t\tarray(" . substr($res, 2) . ')';
821
+    }
822 822
 }
823 823
 
824 824
 // https://code.spip.net/@calculer_dump_join
825 825
 function calculer_dump_join($a) {
826
-	$res = "";
827
-	foreach ($a as $k => $v) {
828
-		$res .= ", '$k' => array(" . implode(',', $v) . ")";
829
-	}
826
+    $res = "";
827
+    foreach ($a as $k => $v) {
828
+        $res .= ", '$k' => array(" . implode(',', $v) . ")";
829
+    }
830 830
 
831
-	return 'array(' . substr($res, 2) . ')';
831
+    return 'array(' . substr($res, 2) . ')';
832 832
 }
833 833
 
834 834
 /**
@@ -840,12 +840,12 @@  discard block
 block discarded – undo
840 840
  *     Code PHP construisant un tableau des alias et noms des tables du FROM
841 841
  **/
842 842
 function calculer_from(&$boucle) {
843
-	$res = "";
844
-	foreach ($boucle->from as $k => $v) {
845
-		$res .= ",'$k' => '$v'";
846
-	}
843
+    $res = "";
844
+    foreach ($boucle->from as $k => $v) {
845
+        $res .= ",'$k' => '$v'";
846
+    }
847 847
 
848
-	return 'array(' . substr($res, 1) . ')';
848
+    return 'array(' . substr($res, 1) . ')';
849 849
 }
850 850
 
851 851
 /**
@@ -858,30 +858,30 @@  discard block
 block discarded – undo
858 858
  *     Code PHP construisant un tableau des alias et type de jointure du FROM
859 859
  **/
860 860
 function calculer_from_type(&$boucle) {
861
-	$res = "";
862
-	foreach ($boucle->from_type as $k => $v) {
863
-		$res .= ",'$k' => '$v'";
864
-	}
861
+    $res = "";
862
+    foreach ($boucle->from_type as $k => $v) {
863
+        $res .= ",'$k' => '$v'";
864
+    }
865 865
 
866
-	return 'array(' . substr($res, 1) . ')';
866
+    return 'array(' . substr($res, 1) . ')';
867 867
 }
868 868
 
869 869
 // https://code.spip.net/@calculer_order
870 870
 function calculer_order(&$boucle) {
871
-	if (!$order = $boucle->order
872
-		and !$order = $boucle->default_order
873
-	) {
874
-		$order = array();
875
-	}
871
+    if (!$order = $boucle->order
872
+        and !$order = $boucle->default_order
873
+    ) {
874
+        $order = array();
875
+    }
876 876
 
877
-	/*if (isset($boucle->modificateur['collate'])){
877
+    /*if (isset($boucle->modificateur['collate'])){
878 878
 		$col = "." . $boucle->modificateur['collate'];
879 879
 		foreach($order as $k=>$o)
880 880
 			if (strpos($order[$k],'COLLATE')===false)
881 881
 				$order[$k].= $col;
882 882
 	}*/
883 883
 
884
-	return join(', ', $order);
884
+    return join(', ', $order);
885 885
 }
886 886
 
887 887
 // Production du code PHP a partir de la sequence livree par le phraseur
@@ -891,59 +891,59 @@  discard block
 block discarded – undo
891 891
 
892 892
 // https://code.spip.net/@calculer_liste
893 893
 function calculer_liste($tableau, $descr, &$boucles, $id_boucle = '') {
894
-	if (!$tableau) {
895
-		return "''";
896
-	}
897
-	if (is_string($descr)) {
898
-		if (isset($boucles[$descr])) {
899
-			$idb = $descr;
900
-			$descr = [];
901
-			if (isset($boucles[$idb]->descr['id_mere_contexte'])) {
902
-				$descr['id_mere'] = $boucles[$idb]->descr['id_mere_contexte'];
903
-			}
904
-			if (isset($boucles[$idb]->descr['sourcefile'])) {
905
-				$descr['sourcefile'] = $boucles[$idb]->descr['sourcefile'];
906
-			}
907
-		}
908
-		else {
909
-			$descr = array();
910
-		}
911
-	}
912
-	if (!isset($descr['niv'])) {
913
-		$descr['niv'] = 0;
914
-	}
915
-	$codes = compile_cas($tableau, $descr, $boucles, $id_boucle);
916
-	if ($codes === false) {
917
-		return false;
918
-	}
919
-	$n = count($codes);
920
-	if (!$n) {
921
-		return "''";
922
-	}
923
-	$tab = str_repeat("\t", $descr['niv']);
924
-	if (_request('var_mode_affiche') != 'validation') {
925
-		if ($n == 1) {
926
-			return $codes[0];
927
-		} else {
928
-			$res = '';
929
-			foreach ($codes as $code) {
930
-				if (!preg_match("/^'[^']*'$/", $code)
931
-					or substr($res, -1, 1) !== "'"
932
-				) {
933
-					$res .= " .\n$tab$code";
934
-				} else {
935
-					$res = substr($res, 0, -1) . substr($code, 1);
936
-				}
937
-			}
938
-
939
-			return '(' . substr($res, 2 + $descr['niv']) . ')';
940
-		}
941
-	} else {
942
-		$nom = $descr['nom'] . $id_boucle . ($descr['niv'] ? $descr['niv'] : '');
943
-
944
-		return "join('', array_map('array_shift', \$GLOBALS['debug_objets']['sequence']['$nom'] = array(" . join(" ,\n$tab",
945
-			$codes) . ")))";
946
-	}
894
+    if (!$tableau) {
895
+        return "''";
896
+    }
897
+    if (is_string($descr)) {
898
+        if (isset($boucles[$descr])) {
899
+            $idb = $descr;
900
+            $descr = [];
901
+            if (isset($boucles[$idb]->descr['id_mere_contexte'])) {
902
+                $descr['id_mere'] = $boucles[$idb]->descr['id_mere_contexte'];
903
+            }
904
+            if (isset($boucles[$idb]->descr['sourcefile'])) {
905
+                $descr['sourcefile'] = $boucles[$idb]->descr['sourcefile'];
906
+            }
907
+        }
908
+        else {
909
+            $descr = array();
910
+        }
911
+    }
912
+    if (!isset($descr['niv'])) {
913
+        $descr['niv'] = 0;
914
+    }
915
+    $codes = compile_cas($tableau, $descr, $boucles, $id_boucle);
916
+    if ($codes === false) {
917
+        return false;
918
+    }
919
+    $n = count($codes);
920
+    if (!$n) {
921
+        return "''";
922
+    }
923
+    $tab = str_repeat("\t", $descr['niv']);
924
+    if (_request('var_mode_affiche') != 'validation') {
925
+        if ($n == 1) {
926
+            return $codes[0];
927
+        } else {
928
+            $res = '';
929
+            foreach ($codes as $code) {
930
+                if (!preg_match("/^'[^']*'$/", $code)
931
+                    or substr($res, -1, 1) !== "'"
932
+                ) {
933
+                    $res .= " .\n$tab$code";
934
+                } else {
935
+                    $res = substr($res, 0, -1) . substr($code, 1);
936
+                }
937
+            }
938
+
939
+            return '(' . substr($res, 2 + $descr['niv']) . ')';
940
+        }
941
+    } else {
942
+        $nom = $descr['nom'] . $id_boucle . ($descr['niv'] ? $descr['niv'] : '');
943
+
944
+        return "join('', array_map('array_shift', \$GLOBALS['debug_objets']['sequence']['$nom'] = array(" . join(" ,\n$tab",
945
+            $codes) . ")))";
946
+    }
947 947
 }
948 948
 
949 949
 
@@ -954,203 +954,203 @@  discard block
 block discarded – undo
954 954
 // https://code.spip.net/@compile_cas
955 955
 function compile_cas($tableau, $descr, &$boucles, $id_boucle) {
956 956
 
957
-	$codes = array();
958
-	// cas de la boucle recursive
959
-	if (is_array($id_boucle)) {
960
-		$id_boucle = $id_boucle[0];
961
-	}
962
-	$type = !$id_boucle ? '' : $boucles[$id_boucle]->type_requete;
963
-	$tab = str_repeat("\t", ++$descr['niv']);
964
-	$mode = _request('var_mode_affiche');
965
-	$err_e_c = '';
966
-	// chaque commentaire introduit dans le code doit commencer
967
-	// par un caractere distinguant le cas, pour exploitation par debug.
968
-	foreach ($tableau as $p) {
969
-
970
-		switch ($p->type) {
971
-			// texte seul
972
-			case 'texte':
973
-				$code = sandbox_composer_texte($p->texte, $p);
974
-				$commentaire = strlen($p->texte) . " signes";
975
-				$avant = '';
976
-				$apres = '';
977
-				$altern = "''";
978
-				break;
979
-
980
-			case 'polyglotte':
981
-				$code = "";
982
-				foreach ($p->traductions as $k => $v) {
983
-					$code .= ",'" .
984
-						str_replace(array("\\", "'"), array("\\\\", "\\'"), $k) .
985
-						"' => '" .
986
-						str_replace(array("\\", "'"), array("\\\\", "\\'"), $v) .
987
-						"'";
988
-				}
989
-				$code = "choisir_traduction(array(" .
990
-					substr($code, 1) .
991
-					"))";
992
-				$commentaire = '&';
993
-				$avant = '';
994
-				$apres = '';
995
-				$altern = "''";
996
-				break;
997
-
998
-			// inclure
999
-			case 'include':
1000
-				$p->descr = $descr;
1001
-				$code = calculer_inclure($p, $boucles, $id_boucle);
1002
-				if ($code === false) {
1003
-					$err_e_c = true;
1004
-					$code = "''";
1005
-				} else {
1006
-					$commentaire = '<INCLURE ' . addslashes(str_replace("\n", ' ', $code)) . '>';
1007
-					$avant = '';
1008
-					$apres = '';
1009
-					$altern = "''";
1010
-				}
1011
-				break;
1012
-
1013
-			// boucle
1014
-			case TYPE_RECURSIF:
1015
-				$nom = $p->id_boucle;
1016
-				$newdescr = $descr;
1017
-				$newdescr['id_mere'] = $nom;
1018
-				$newdescr['niv']++;
1019
-				$preaff = calculer_liste($p->preaff, $newdescr, $boucles, $id_boucle);
1020
-				$avant = calculer_liste($p->avant, $newdescr, $boucles, $id_boucle);
1021
-				$apres = calculer_liste($p->apres, $newdescr, $boucles, $id_boucle);
1022
-				$postaff = calculer_liste($p->postaff, $newdescr, $boucles, $id_boucle);
1023
-				$newdescr['niv']--;
1024
-				$altern = calculer_liste($p->altern, $newdescr, $boucles, $id_boucle);
1025
-				if ($preaff === false
1026
-					or $avant === false
1027
-					or $apres === false
1028
-					or $altern === false
1029
-					or $postaff === false) {
1030
-					$err_e_c = true;
1031
-					$code = "''";
1032
-				} else {
1033
-					$code = 'BOUCLE' .
1034
-						str_replace("-", "_", $nom) . $descr['nom'] .
1035
-						'($Cache, $Pile, $doublons, $Numrows, $SP)';
1036
-					$commentaire = "?$nom";
1037
-					if (!$boucles[$nom]->milieu
1038
-						and $boucles[$nom]->type_requete <> TYPE_RECURSIF
1039
-					) {
1040
-						if ($preaff != "''") {
1041
-							$code .= "\n. $preaff";
1042
-						}
1043
-						if ($altern != "''") {
1044
-							$code .= "\n. $altern";
1045
-						}
1046
-						if ($postaff != "''") {
1047
-							$code .= "\n. $postaff";
1048
-						}
1049
-						if ($avant <> "''" or $apres <> "''") {
1050
-							spip_log("boucle $nom toujours vide, code superflu dans $descr[sourcefile]");
1051
-						}
1052
-						$avant = $apres = $altern = "''";
1053
-					} else {
1054
-						if ($preaff != "''") {
1055
-							$avant = compile_concatene_parties_codes($preaff, $avant);
1056
-							$altern = compile_concatene_parties_codes($preaff, $altern);
1057
-						}
1058
-						if ($postaff != "''") {
1059
-							$apres = compile_concatene_parties_codes($apres, $postaff);
1060
-							$altern = compile_concatene_parties_codes($altern, $postaff);
1061
-						}
1062
-						if ($altern != "''") {
1063
-							$altern = "($altern)";
1064
-						}
1065
-					}
1066
-				}
1067
-				break;
1068
-
1069
-			case 'idiome':
1070
-				$l = array();
1071
-				$code = '';
1072
-				foreach ($p->arg as $k => $v) {
1073
-					$_v = calculer_liste($v, $descr, $boucles, $id_boucle);
1074
-					if ($k) {
1075
-						$l[] = _q($k) . ' => ' . $_v;
1076
-					} else {
1077
-						$code = $_v;
1078
-					}
1079
-				}
1080
-				// Si le module n'est pas fourni, l'expliciter sauf si calculé
1081
-				if ($p->module) {
1082
-					$m = $p->module . ':' . $p->nom_champ;
1083
-				} elseif ($p->nom_champ) {
1084
-					$m = MODULES_IDIOMES . ':' . $p->nom_champ;
1085
-				} else {
1086
-					$m = '';
1087
-				}
1088
-
1089
-				$code = (!$code ? "'$m'" :
1090
-						($m ? "'$m' . $code" :
1091
-							("(strpos(\$x=$code, ':') ? \$x : ('" . MODULES_IDIOMES . ":' . \$x))")))
1092
-					. (!$l ? '' : (", array(" . implode(",\n", $l) . ")"));
1093
-				$code = "_T($code)";
1094
-				if ($p->param) {
1095
-					$p->id_boucle = $id_boucle;
1096
-					$p->boucles = &$boucles;
1097
-					$code = compose_filtres($p, $code);
1098
-				}
1099
-				$commentaire = ":";
1100
-				$avant = '';
1101
-				$apres = '';
1102
-				$altern = "''";
1103
-				break;
1104
-
1105
-			case 'champ':
1106
-
1107
-				// cette structure pourrait etre completee des le phrase' (a faire)
1108
-				$p->id_boucle = $id_boucle;
1109
-				$p->boucles = &$boucles;
1110
-				$p->descr = $descr;
1111
-				#$p->interdire_scripts = true;
1112
-				$p->type_requete = $type;
1113
-
1114
-				$code = calculer_champ($p);
1115
-				$commentaire = '#' . $p->nom_champ . $p->etoile;
1116
-				$avant = calculer_liste($p->avant,
1117
-					$descr, $boucles, $id_boucle);
1118
-				$apres = calculer_liste($p->apres,
1119
-					$descr, $boucles, $id_boucle);
1120
-				$altern = "''";
1121
-				// Si la valeur est destinee a une comparaison a ''
1122
-				// forcer la conversion en une chaine par strval
1123
-				// si ca peut etre autre chose qu'une chaine
1124
-				if (($avant != "''" or $apres != "''")
1125
-					and $code[0] != "'"
957
+    $codes = array();
958
+    // cas de la boucle recursive
959
+    if (is_array($id_boucle)) {
960
+        $id_boucle = $id_boucle[0];
961
+    }
962
+    $type = !$id_boucle ? '' : $boucles[$id_boucle]->type_requete;
963
+    $tab = str_repeat("\t", ++$descr['niv']);
964
+    $mode = _request('var_mode_affiche');
965
+    $err_e_c = '';
966
+    // chaque commentaire introduit dans le code doit commencer
967
+    // par un caractere distinguant le cas, pour exploitation par debug.
968
+    foreach ($tableau as $p) {
969
+
970
+        switch ($p->type) {
971
+            // texte seul
972
+            case 'texte':
973
+                $code = sandbox_composer_texte($p->texte, $p);
974
+                $commentaire = strlen($p->texte) . " signes";
975
+                $avant = '';
976
+                $apres = '';
977
+                $altern = "''";
978
+                break;
979
+
980
+            case 'polyglotte':
981
+                $code = "";
982
+                foreach ($p->traductions as $k => $v) {
983
+                    $code .= ",'" .
984
+                        str_replace(array("\\", "'"), array("\\\\", "\\'"), $k) .
985
+                        "' => '" .
986
+                        str_replace(array("\\", "'"), array("\\\\", "\\'"), $v) .
987
+                        "'";
988
+                }
989
+                $code = "choisir_traduction(array(" .
990
+                    substr($code, 1) .
991
+                    "))";
992
+                $commentaire = '&';
993
+                $avant = '';
994
+                $apres = '';
995
+                $altern = "''";
996
+                break;
997
+
998
+            // inclure
999
+            case 'include':
1000
+                $p->descr = $descr;
1001
+                $code = calculer_inclure($p, $boucles, $id_boucle);
1002
+                if ($code === false) {
1003
+                    $err_e_c = true;
1004
+                    $code = "''";
1005
+                } else {
1006
+                    $commentaire = '<INCLURE ' . addslashes(str_replace("\n", ' ', $code)) . '>';
1007
+                    $avant = '';
1008
+                    $apres = '';
1009
+                    $altern = "''";
1010
+                }
1011
+                break;
1012
+
1013
+            // boucle
1014
+            case TYPE_RECURSIF:
1015
+                $nom = $p->id_boucle;
1016
+                $newdescr = $descr;
1017
+                $newdescr['id_mere'] = $nom;
1018
+                $newdescr['niv']++;
1019
+                $preaff = calculer_liste($p->preaff, $newdescr, $boucles, $id_boucle);
1020
+                $avant = calculer_liste($p->avant, $newdescr, $boucles, $id_boucle);
1021
+                $apres = calculer_liste($p->apres, $newdescr, $boucles, $id_boucle);
1022
+                $postaff = calculer_liste($p->postaff, $newdescr, $boucles, $id_boucle);
1023
+                $newdescr['niv']--;
1024
+                $altern = calculer_liste($p->altern, $newdescr, $boucles, $id_boucle);
1025
+                if ($preaff === false
1026
+                    or $avant === false
1027
+                    or $apres === false
1028
+                    or $altern === false
1029
+                    or $postaff === false) {
1030
+                    $err_e_c = true;
1031
+                    $code = "''";
1032
+                } else {
1033
+                    $code = 'BOUCLE' .
1034
+                        str_replace("-", "_", $nom) . $descr['nom'] .
1035
+                        '($Cache, $Pile, $doublons, $Numrows, $SP)';
1036
+                    $commentaire = "?$nom";
1037
+                    if (!$boucles[$nom]->milieu
1038
+                        and $boucles[$nom]->type_requete <> TYPE_RECURSIF
1039
+                    ) {
1040
+                        if ($preaff != "''") {
1041
+                            $code .= "\n. $preaff";
1042
+                        }
1043
+                        if ($altern != "''") {
1044
+                            $code .= "\n. $altern";
1045
+                        }
1046
+                        if ($postaff != "''") {
1047
+                            $code .= "\n. $postaff";
1048
+                        }
1049
+                        if ($avant <> "''" or $apres <> "''") {
1050
+                            spip_log("boucle $nom toujours vide, code superflu dans $descr[sourcefile]");
1051
+                        }
1052
+                        $avant = $apres = $altern = "''";
1053
+                    } else {
1054
+                        if ($preaff != "''") {
1055
+                            $avant = compile_concatene_parties_codes($preaff, $avant);
1056
+                            $altern = compile_concatene_parties_codes($preaff, $altern);
1057
+                        }
1058
+                        if ($postaff != "''") {
1059
+                            $apres = compile_concatene_parties_codes($apres, $postaff);
1060
+                            $altern = compile_concatene_parties_codes($altern, $postaff);
1061
+                        }
1062
+                        if ($altern != "''") {
1063
+                            $altern = "($altern)";
1064
+                        }
1065
+                    }
1066
+                }
1067
+                break;
1068
+
1069
+            case 'idiome':
1070
+                $l = array();
1071
+                $code = '';
1072
+                foreach ($p->arg as $k => $v) {
1073
+                    $_v = calculer_liste($v, $descr, $boucles, $id_boucle);
1074
+                    if ($k) {
1075
+                        $l[] = _q($k) . ' => ' . $_v;
1076
+                    } else {
1077
+                        $code = $_v;
1078
+                    }
1079
+                }
1080
+                // Si le module n'est pas fourni, l'expliciter sauf si calculé
1081
+                if ($p->module) {
1082
+                    $m = $p->module . ':' . $p->nom_champ;
1083
+                } elseif ($p->nom_champ) {
1084
+                    $m = MODULES_IDIOMES . ':' . $p->nom_champ;
1085
+                } else {
1086
+                    $m = '';
1087
+                }
1088
+
1089
+                $code = (!$code ? "'$m'" :
1090
+                        ($m ? "'$m' . $code" :
1091
+                            ("(strpos(\$x=$code, ':') ? \$x : ('" . MODULES_IDIOMES . ":' . \$x))")))
1092
+                    . (!$l ? '' : (", array(" . implode(",\n", $l) . ")"));
1093
+                $code = "_T($code)";
1094
+                if ($p->param) {
1095
+                    $p->id_boucle = $id_boucle;
1096
+                    $p->boucles = &$boucles;
1097
+                    $code = compose_filtres($p, $code);
1098
+                }
1099
+                $commentaire = ":";
1100
+                $avant = '';
1101
+                $apres = '';
1102
+                $altern = "''";
1103
+                break;
1104
+
1105
+            case 'champ':
1106
+
1107
+                // cette structure pourrait etre completee des le phrase' (a faire)
1108
+                $p->id_boucle = $id_boucle;
1109
+                $p->boucles = &$boucles;
1110
+                $p->descr = $descr;
1111
+                #$p->interdire_scripts = true;
1112
+                $p->type_requete = $type;
1113
+
1114
+                $code = calculer_champ($p);
1115
+                $commentaire = '#' . $p->nom_champ . $p->etoile;
1116
+                $avant = calculer_liste($p->avant,
1117
+                    $descr, $boucles, $id_boucle);
1118
+                $apres = calculer_liste($p->apres,
1119
+                    $descr, $boucles, $id_boucle);
1120
+                $altern = "''";
1121
+                // Si la valeur est destinee a une comparaison a ''
1122
+                // forcer la conversion en une chaine par strval
1123
+                // si ca peut etre autre chose qu'une chaine
1124
+                if (($avant != "''" or $apres != "''")
1125
+                    and $code[0] != "'"
1126 1126
 #			AND (strpos($code,'interdire_scripts') !== 0)
1127
-					and !preg_match(_REGEXP_COND_VIDE_NONVIDE, $code)
1128
-					and !preg_match(_REGEXP_COND_NONVIDE_VIDE, $code)
1129
-					and !preg_match(_REGEXP_CONCAT_NON_VIDE, $code)
1130
-				) {
1131
-					$code = "strval($code)";
1132
-				}
1133
-				break;
1134
-
1135
-			default:
1136
-				// Erreur de construction de l'arbre de syntaxe abstraite
1137
-				$code = "''";
1138
-				$p->descr = $descr;
1139
-				$err_e_c = _T('zbug_erreur_compilation');
1140
-				erreur_squelette($err_e_c, $p);
1141
-		} // switch
1142
-
1143
-		if ($code != "''") {
1144
-			$code = compile_retour($code, $avant, $apres, $altern, $tab, $descr['niv']);
1145
-			$codes[] = (($mode == 'validation') ?
1146
-				"array($code, '$commentaire', " . $p->ligne . ")"
1147
-				: (($mode == 'code') ?
1148
-					"\n// $commentaire\n$code" :
1149
-					$code));
1150
-		}
1151
-	} // foreach
1152
-
1153
-	return $err_e_c ? false : $codes;
1127
+                    and !preg_match(_REGEXP_COND_VIDE_NONVIDE, $code)
1128
+                    and !preg_match(_REGEXP_COND_NONVIDE_VIDE, $code)
1129
+                    and !preg_match(_REGEXP_CONCAT_NON_VIDE, $code)
1130
+                ) {
1131
+                    $code = "strval($code)";
1132
+                }
1133
+                break;
1134
+
1135
+            default:
1136
+                // Erreur de construction de l'arbre de syntaxe abstraite
1137
+                $code = "''";
1138
+                $p->descr = $descr;
1139
+                $err_e_c = _T('zbug_erreur_compilation');
1140
+                erreur_squelette($err_e_c, $p);
1141
+        } // switch
1142
+
1143
+        if ($code != "''") {
1144
+            $code = compile_retour($code, $avant, $apres, $altern, $tab, $descr['niv']);
1145
+            $codes[] = (($mode == 'validation') ?
1146
+                "array($code, '$commentaire', " . $p->ligne . ")"
1147
+                : (($mode == 'code') ?
1148
+                    "\n// $commentaire\n$code" :
1149
+                    $code));
1150
+        }
1151
+    } // foreach
1152
+
1153
+    return $err_e_c ? false : $codes;
1154 1154
 }
1155 1155
 
1156 1156
 /**
@@ -1160,13 +1160,13 @@  discard block
 block discarded – undo
1160 1160
  * @return string
1161 1161
  */
1162 1162
 function compile_concatene_parties_codes($partie1, $partie2) {
1163
-	if ($partie1 === "''") {
1164
-		return $partie2;
1165
-	}
1166
-	if ($partie2 === "''") {
1167
-		return $partie1;
1168
-	}
1169
-	return "$partie1\n. $partie2";
1163
+    if ($partie1 === "''") {
1164
+        return $partie2;
1165
+    }
1166
+    if ($partie2 === "''") {
1167
+        return $partie1;
1168
+    }
1169
+    return "$partie1\n. $partie2";
1170 1170
 }
1171 1171
 
1172 1172
 
@@ -1191,57 +1191,57 @@  discard block
 block discarded – undo
1191 1191
  * @return mixed|string
1192 1192
  */
1193 1193
 function compile_retour($code, $avant, $apres, $altern, $tab, $n) {
1194
-	if ($avant === "''") {
1195
-		$avant = '';
1196
-	}
1197
-	if ($apres === "''") {
1198
-		$apres = '';
1199
-	}
1200
-	if ($avant or $apres or ($altern !== "''")){
1201
-		if (preg_match(_REGEXP_CONCAT_NON_VIDE, $code)){
1202
-			$t = $code;
1203
-			$cond = '';
1204
-		} elseif (preg_match(_REGEXP_COND_VIDE_NONVIDE, $code, $r)) {
1205
-			$t = $r[2];
1206
-			$cond = '!' . $r[1];
1207
-		} else {
1208
-			if (preg_match(_REGEXP_COND_NONVIDE_VIDE, $code, $r)){
1209
-				$t = $r[2];
1210
-				$cond = $r[1];
1211
-			} else {
1212
-				$t = '$t' . $n;
1213
-				$cond = "($t = $code)!==''";
1214
-			}
1215
-		}
1216
-
1217
-		$res = (!$avant ? "" : "$avant . ") .
1218
-			$t .
1219
-			(!$apres ? "" : " . $apres");
1220
-
1221
-		if ($res!==$t){
1222
-			$res = "($res)";
1223
-		}
1224
-
1225
-		$code = (!$cond ? $res : "($cond ?\n\t$tab$res :\n\t$tab$altern)");
1226
-	}
1227
-
1228
-	return $code;
1194
+    if ($avant === "''") {
1195
+        $avant = '';
1196
+    }
1197
+    if ($apres === "''") {
1198
+        $apres = '';
1199
+    }
1200
+    if ($avant or $apres or ($altern !== "''")){
1201
+        if (preg_match(_REGEXP_CONCAT_NON_VIDE, $code)){
1202
+            $t = $code;
1203
+            $cond = '';
1204
+        } elseif (preg_match(_REGEXP_COND_VIDE_NONVIDE, $code, $r)) {
1205
+            $t = $r[2];
1206
+            $cond = '!' . $r[1];
1207
+        } else {
1208
+            if (preg_match(_REGEXP_COND_NONVIDE_VIDE, $code, $r)){
1209
+                $t = $r[2];
1210
+                $cond = $r[1];
1211
+            } else {
1212
+                $t = '$t' . $n;
1213
+                $cond = "($t = $code)!==''";
1214
+            }
1215
+        }
1216
+
1217
+        $res = (!$avant ? "" : "$avant . ") .
1218
+            $t .
1219
+            (!$apres ? "" : " . $apres");
1220
+
1221
+        if ($res!==$t){
1222
+            $res = "($res)";
1223
+        }
1224
+
1225
+        $code = (!$cond ? $res : "($cond ?\n\t$tab$res :\n\t$tab$altern)");
1226
+    }
1227
+
1228
+    return $code;
1229 1229
 
1230 1230
 }
1231 1231
 
1232 1232
 
1233 1233
 function compile_inclure_doublons($lexemes) {
1234
-	foreach ($lexemes as $v) {
1235
-		if ($v->type === 'include' and $v->param) {
1236
-			foreach ($v->param as $r) {
1237
-				if (trim($r[0]) === 'doublons') {
1238
-					return true;
1239
-				}
1240
-			}
1241
-		}
1242
-	}
1243
-
1244
-	return false;
1234
+    foreach ($lexemes as $v) {
1235
+        if ($v->type === 'include' and $v->param) {
1236
+            foreach ($v->param as $r) {
1237
+                if (trim($r[0]) === 'doublons') {
1238
+                    return true;
1239
+                }
1240
+            }
1241
+        }
1242
+    }
1243
+
1244
+    return false;
1245 1245
 }
1246 1246
 
1247 1247
 // Prend en argument le texte d'un squelette, le nom de son fichier d'origine,
@@ -1261,348 +1261,348 @@  discard block
 block discarded – undo
1261 1261
 
1262 1262
 // https://code.spip.net/@public_compiler_dist
1263 1263
 function public_compiler_dist($squelette, $nom, $gram, $sourcefile, $connect = '') {
1264
-	// Pre-traitement : reperer le charset du squelette, et le convertir
1265
-	// Bonus : supprime le BOM
1266
-	include_spip('inc/charsets');
1267
-	$squelette = transcoder_page($squelette);
1268
-
1269
-	// rendre inertes les echappements de #[](){}<>
1270
-	$i = 0;
1271
-	while (false !== strpos($squelette, $inerte = '-INERTE' . $i)) {
1272
-		$i++;
1273
-	}
1274
-	$squelette = preg_replace_callback(',\\\\([#[()\]{}<>]),',
1275
-		function($a) use ($inerte) {
1276
-			return "$inerte-" . ord($a[1]) . '-';
1277
-		},
1278
-		$squelette,
1279
-		-1,
1280
-		$esc
1281
-	);
1282
-
1283
-	$descr = array(
1284
-		'nom' => $nom,
1285
-		'gram' => $gram,
1286
-		'sourcefile' => $sourcefile,
1287
-		'squelette' => $squelette
1288
-	);
1289
-
1290
-	// Phraser le squelette, selon sa grammaire
1291
-
1292
-	$boucles = array();
1293
-	$f = charger_fonction('phraser_' . $gram, 'public');
1294
-
1295
-	$squelette = $f($squelette, '', $boucles, $descr);
1296
-
1297
-	$boucles = compiler_squelette($squelette, $boucles, $nom, $descr, $sourcefile, $connect);
1298
-
1299
-	// restituer les echappements
1300
-	if ($esc) {
1301
-		foreach ($boucles as $i => $boucle) {
1302
-			$boucles[$i]->return = preg_replace_callback(
1303
-				",$inerte-(\d+)-,",
1304
-				function($a) {
1305
-					return chr($a[1]);
1306
-				},
1307
-				$boucle->return
1308
-			);
1309
-			$boucles[$i]->descr['squelette'] = preg_replace_callback(
1310
-				",$inerte-(\d+)-,",
1311
-				function($a) {
1312
-					return "\\\\" . chr($a[1]);
1313
-				},
1314
-				$boucle->descr['squelette']
1315
-			);
1316
-		}
1317
-	}
1318
-
1319
-	$debug = ($boucles and defined('_VAR_MODE') and _VAR_MODE == 'debug');
1320
-	if ($debug) {
1321
-		include_spip('public/decompiler');
1322
-		foreach ($boucles as $id => $boucle) {
1323
-			if ($id) {
1324
-				$decomp = "\n/* BOUCLE " .
1325
-					$boucle->type_requete .
1326
-					" " .
1327
-					str_replace('*/', '* /', public_decompiler($boucle, $gram, 0, 'criteres')) .
1328
-					($boucle->debug ? "\n *\n * " . implode("\n * ", $boucle->debug) . "\n" : '') .
1329
-					" */\n";
1330
-			} else {
1331
-				$decomp = ("\n/*\n" .
1332
-					str_replace('*/', '* /', public_decompiler($squelette, $gram))
1333
-					. "\n*/");
1334
-			}
1335
-			$boucles[$id]->return = $decomp . $boucle->return;
1336
-			$GLOBALS['debug_objets']['code'][$nom . $id] = $boucle->return;
1337
-		}
1338
-	}
1339
-
1340
-	return $boucles;
1264
+    // Pre-traitement : reperer le charset du squelette, et le convertir
1265
+    // Bonus : supprime le BOM
1266
+    include_spip('inc/charsets');
1267
+    $squelette = transcoder_page($squelette);
1268
+
1269
+    // rendre inertes les echappements de #[](){}<>
1270
+    $i = 0;
1271
+    while (false !== strpos($squelette, $inerte = '-INERTE' . $i)) {
1272
+        $i++;
1273
+    }
1274
+    $squelette = preg_replace_callback(',\\\\([#[()\]{}<>]),',
1275
+        function($a) use ($inerte) {
1276
+            return "$inerte-" . ord($a[1]) . '-';
1277
+        },
1278
+        $squelette,
1279
+        -1,
1280
+        $esc
1281
+    );
1282
+
1283
+    $descr = array(
1284
+        'nom' => $nom,
1285
+        'gram' => $gram,
1286
+        'sourcefile' => $sourcefile,
1287
+        'squelette' => $squelette
1288
+    );
1289
+
1290
+    // Phraser le squelette, selon sa grammaire
1291
+
1292
+    $boucles = array();
1293
+    $f = charger_fonction('phraser_' . $gram, 'public');
1294
+
1295
+    $squelette = $f($squelette, '', $boucles, $descr);
1296
+
1297
+    $boucles = compiler_squelette($squelette, $boucles, $nom, $descr, $sourcefile, $connect);
1298
+
1299
+    // restituer les echappements
1300
+    if ($esc) {
1301
+        foreach ($boucles as $i => $boucle) {
1302
+            $boucles[$i]->return = preg_replace_callback(
1303
+                ",$inerte-(\d+)-,",
1304
+                function($a) {
1305
+                    return chr($a[1]);
1306
+                },
1307
+                $boucle->return
1308
+            );
1309
+            $boucles[$i]->descr['squelette'] = preg_replace_callback(
1310
+                ",$inerte-(\d+)-,",
1311
+                function($a) {
1312
+                    return "\\\\" . chr($a[1]);
1313
+                },
1314
+                $boucle->descr['squelette']
1315
+            );
1316
+        }
1317
+    }
1318
+
1319
+    $debug = ($boucles and defined('_VAR_MODE') and _VAR_MODE == 'debug');
1320
+    if ($debug) {
1321
+        include_spip('public/decompiler');
1322
+        foreach ($boucles as $id => $boucle) {
1323
+            if ($id) {
1324
+                $decomp = "\n/* BOUCLE " .
1325
+                    $boucle->type_requete .
1326
+                    " " .
1327
+                    str_replace('*/', '* /', public_decompiler($boucle, $gram, 0, 'criteres')) .
1328
+                    ($boucle->debug ? "\n *\n * " . implode("\n * ", $boucle->debug) . "\n" : '') .
1329
+                    " */\n";
1330
+            } else {
1331
+                $decomp = ("\n/*\n" .
1332
+                    str_replace('*/', '* /', public_decompiler($squelette, $gram))
1333
+                    . "\n*/");
1334
+            }
1335
+            $boucles[$id]->return = $decomp . $boucle->return;
1336
+            $GLOBALS['debug_objets']['code'][$nom . $id] = $boucle->return;
1337
+        }
1338
+    }
1339
+
1340
+    return $boucles;
1341 1341
 }
1342 1342
 
1343 1343
 // Point d'entree pour arbre de syntaxe abstraite fourni en premier argument
1344 1344
 // Autres specifications comme ci-dessus
1345 1345
 
1346 1346
 function compiler_squelette($squelette, $boucles, $nom, $descr, $sourcefile, $connect = '') {
1347
-	static $trouver_table;
1348
-	spip_timer('calcul_skel');
1349
-
1350
-	if (defined('_VAR_MODE') and _VAR_MODE == 'debug') {
1351
-		$GLOBALS['debug_objets']['squelette'][$nom] = $descr['squelette'];
1352
-		$GLOBALS['debug_objets']['sourcefile'][$nom] = $sourcefile;
1353
-
1354
-		if (!isset($GLOBALS['debug_objets']['principal'])) {
1355
-			$GLOBALS['debug_objets']['principal'] = $nom;
1356
-		}
1357
-	}
1358
-	foreach ($boucles as $id => $boucle) {
1359
-		$GLOBALS['debug_objets']['boucle'][$nom . $id] = $boucle;
1360
-	}
1361
-	$descr['documents'] = compile_inclure_doublons($squelette);
1362
-
1363
-	// Demander la description des tables une fois pour toutes
1364
-	if (!$trouver_table) {
1365
-		$trouver_table = charger_fonction('trouver_table', 'base');
1366
-	}
1367
-
1368
-	// reperer si les doublons sont demandes
1369
-	// pour un inclure ou une boucle document
1370
-	// c'est utile a la fonction champs_traitements
1371
-	foreach ($boucles as $id => $boucle) {
1372
-		if (!($type = $boucle->type_requete)) {
1373
-			continue;
1374
-		}
1375
-		if (!$descr['documents'] and (
1376
-				(($type == 'documents') and $boucle->doublons) or
1377
-				compile_inclure_doublons($boucle->avant) or
1378
-				compile_inclure_doublons($boucle->apres) or
1379
-				compile_inclure_doublons($boucle->milieu) or
1380
-				compile_inclure_doublons($boucle->altern))
1381
-		) {
1382
-			$descr['documents'] = true;
1383
-		}
1384
-		if ($type != TYPE_RECURSIF) {
1385
-			if (!$boucles[$id]->sql_serveur and $connect) {
1386
-				$boucles[$id]->sql_serveur = $connect;
1387
-			}
1388
-
1389
-			// chercher dans les iterateurs du repertoire iterateur/
1390
-			if ($g = charger_fonction(
1391
-				preg_replace('/\W/', '_', $boucle->type_requete), 'iterateur', true)
1392
-			) {
1393
-				$boucles[$id] = $g($boucle);
1394
-
1395
-				// sinon, en cas de requeteur d'un type predefini,
1396
-				// utiliser les informations donnees par le requeteur
1397
-				// cas "php:xx" et "data:xx".
1398
-			} else {
1399
-				if ($boucle->sql_serveur and $requeteur = charger_fonction($boucle->sql_serveur, 'requeteur', true)) {
1400
-					$requeteur($boucles, $boucle, $id);
1401
-
1402
-					// utiliser la description des champs transmis
1403
-				} else {
1404
-					$show = $trouver_table($type, $boucles[$id]->sql_serveur);
1405
-					// si la table n'existe pas avec le connecteur par defaut,
1406
-					// c'est peut etre une table qui necessite son connecteur dedie fourni
1407
-					// permet une ecriture allegee (GEO) -> (geo:GEO)
1408
-					if (!$show
1409
-						and $show = $trouver_table($type, strtolower($type))
1410
-					) {
1411
-						$boucles[$id]->sql_serveur = strtolower($type);
1412
-					}
1413
-					if ($show) {
1414
-						$boucles[$id]->show = $show;
1415
-						// recopie les infos les plus importantes
1416
-						$boucles[$id]->primary = isset($show['key']["PRIMARY KEY"]) ? $show['key']["PRIMARY KEY"] : '';
1417
-						$boucles[$id]->id_table = $x = preg_replace(",^spip_,", "", $show['id_table']);
1418
-						$boucles[$id]->from[$x] = $nom_table = $show['table'];
1419
-						$boucles[$id]->iterateur = 'SQL';
1420
-
1421
-						if (empty($boucles[$id]->descr)) {
1422
-							$boucles[$id]->descr = &$descr;
1423
-						}
1424
-						if ((!$boucles[$id]->jointures)
1425
-							and is_array($show['tables_jointures'])
1426
-							and count($x = $show['tables_jointures'])
1427
-						) {
1428
-							$boucles[$id]->jointures = $x;
1429
-						}
1430
-						if ($boucles[$id]->jointures_explicites) {
1431
-							$jointures = preg_split("/\s+/", $boucles[$id]->jointures_explicites);
1432
-							while ($j = array_pop($jointures)) {
1433
-								array_unshift($boucles[$id]->jointures, $j);
1434
-							}
1435
-						}
1436
-					} else {
1437
-						// Pas une erreur si la table est optionnelle
1438
-						if ($boucles[$id]->table_optionnelle) {
1439
-							$boucles[$id]->type_requete = '';
1440
-						} else {
1441
-							$boucles[$id]->type_requete = false;
1442
-							$boucle = $boucles[$id];
1443
-							$x = (!$boucle->sql_serveur ? '' :
1444
-									($boucle->sql_serveur . ":")) .
1445
-								$type;
1446
-							$msg = array(
1447
-								'zbug_table_inconnue',
1448
-								array('table' => $x)
1449
-							);
1450
-							erreur_squelette($msg, $boucle);
1451
-						}
1452
-					}
1453
-				}
1454
-			}
1455
-		}
1456
-	}
1457
-
1458
-	// Commencer par reperer les boucles appelees explicitement 
1459
-	// car elles indexent les arguments de maniere derogatoire
1460
-	foreach ($boucles as $id => $boucle) {
1461
-		if ($boucle->type_requete == TYPE_RECURSIF and $boucle->param) {
1462
-			$boucles[$id]->descr = &$descr;
1463
-			$rec = &$boucles[$boucle->param[0]];
1464
-			if (!$rec) {
1465
-				$msg = array(
1466
-					'zbug_boucle_recursive_undef',
1467
-					array('nom' => $boucle->param[0])
1468
-				);
1469
-				erreur_squelette($msg, $boucle);
1470
-				$boucles[$id]->type_requete = false;
1471
-			} else {
1472
-				$rec->externe = $id;
1473
-				$descr['id_mere'] = $id;
1474
-				$boucles[$id]->return =
1475
-					calculer_liste(array($rec),
1476
-						$descr,
1477
-						$boucles,
1478
-						$boucle->param);
1479
-			}
1480
-		}
1481
-	}
1482
-	foreach ($boucles as $id => $boucle) {
1483
-		$id = strval($id); // attention au type dans index_pile
1484
-		$type = $boucle->type_requete;
1485
-		if ($type and $type != TYPE_RECURSIF) {
1486
-			$res = '';
1487
-			if ($boucle->param) {
1488
-				// retourne un tableau en cas d'erreur
1489
-				$res = calculer_criteres($id, $boucles);
1490
-			}
1491
-			$descr['id_mere'] = $id;
1492
-			$boucles[$id]->return =
1493
-				calculer_liste($boucle->milieu,
1494
-					$descr,
1495
-					$boucles,
1496
-					$id);
1497
-			// Si les criteres se sont mal compiles
1498
-			// ne pas tenter d'assembler le code final
1499
-			// (mais compiler le corps pour detection d'erreurs)
1500
-			if (is_array($res)) {
1501
-				$boucles[$id]->type_requete = false;
1502
-			}
1503
-		}
1504
-	}
1505
-
1506
-	// idem pour la racine
1507
-	$descr['id_mere'] = '';
1508
-	$corps = calculer_liste($squelette, $descr, $boucles);
1509
-
1510
-
1511
-	// Calcul du corps de toutes les fonctions PHP,
1512
-	// en particulier les requetes SQL et TOTAL_BOUCLE
1513
-	// de'terminables seulement maintenant
1514
-
1515
-	foreach ($boucles as $id => $boucle) {
1516
-		$boucle = $boucles[$id] = pipeline('pre_boucle', $boucle);
1517
-		if ($boucle->return === false) {
1518
-			$corps = false;
1519
-			continue;
1520
-		}
1521
-		// appeler la fonction de definition de la boucle
1522
-
1523
-		if ($req = $boucle->type_requete) {
1524
-			// boucle personnalisée ?
1525
-			$table = strtoupper($boucle->type_requete);
1526
-			$serveur = strtolower($boucle->sql_serveur);
1527
-			if (
1528
-				// fonction de boucle avec serveur & table
1529
-				(!$serveur or
1530
-					((!function_exists($f = "boucle_" . $serveur . "_" . $table))
1531
-						and (!function_exists($f = $f . "_dist"))
1532
-					)
1533
-				)
1534
-				// fonction de boucle avec table
1535
-				and (!function_exists($f = "boucle_" . $table))
1536
-				and (!function_exists($f = $f . "_dist"))
1537
-			) {
1538
-				// fonction de boucle standard 
1539
-				if (!function_exists($f = 'boucle_DEFAUT')) {
1540
-					$f = 'boucle_DEFAUT_dist';
1541
-				}
1542
-			}
1543
-
1544
-			$req = "\n\n\tstatic \$command = array();\n\t" .
1545
-				"static \$connect;\n\t" .
1546
-				"\$command['connect'] = \$connect = " .
1547
-				_q($boucle->sql_serveur) .
1548
-				";" .
1549
-				$f($id, $boucles);
1550
-		} else {
1551
-			$req = ("\n\treturn '';");
1552
-		}
1553
-
1554
-		$boucles[$id]->return =
1555
-			"\n\nfunction BOUCLE" . strtr($id, "-", "_") . $nom .
1556
-			'(&$Cache, &$Pile, &$doublons, &$Numrows, $SP) {' .
1557
-			$req .
1558
-			"\n}\n";
1559
-	}
1560
-
1561
-	// Au final, si le corps ou un critere au moins s'est mal compile
1562
-	// retourner False, sinon inserer leur decompilation
1563
-	if (is_bool($corps)) {
1564
-		return false;
1565
-	}
1566
-
1567
-	$principal = "\nfunction " . $nom . '($Cache, $Pile, $doublons = array(), $Numrows = array(), $SP = 0) {
1347
+    static $trouver_table;
1348
+    spip_timer('calcul_skel');
1349
+
1350
+    if (defined('_VAR_MODE') and _VAR_MODE == 'debug') {
1351
+        $GLOBALS['debug_objets']['squelette'][$nom] = $descr['squelette'];
1352
+        $GLOBALS['debug_objets']['sourcefile'][$nom] = $sourcefile;
1353
+
1354
+        if (!isset($GLOBALS['debug_objets']['principal'])) {
1355
+            $GLOBALS['debug_objets']['principal'] = $nom;
1356
+        }
1357
+    }
1358
+    foreach ($boucles as $id => $boucle) {
1359
+        $GLOBALS['debug_objets']['boucle'][$nom . $id] = $boucle;
1360
+    }
1361
+    $descr['documents'] = compile_inclure_doublons($squelette);
1362
+
1363
+    // Demander la description des tables une fois pour toutes
1364
+    if (!$trouver_table) {
1365
+        $trouver_table = charger_fonction('trouver_table', 'base');
1366
+    }
1367
+
1368
+    // reperer si les doublons sont demandes
1369
+    // pour un inclure ou une boucle document
1370
+    // c'est utile a la fonction champs_traitements
1371
+    foreach ($boucles as $id => $boucle) {
1372
+        if (!($type = $boucle->type_requete)) {
1373
+            continue;
1374
+        }
1375
+        if (!$descr['documents'] and (
1376
+                (($type == 'documents') and $boucle->doublons) or
1377
+                compile_inclure_doublons($boucle->avant) or
1378
+                compile_inclure_doublons($boucle->apres) or
1379
+                compile_inclure_doublons($boucle->milieu) or
1380
+                compile_inclure_doublons($boucle->altern))
1381
+        ) {
1382
+            $descr['documents'] = true;
1383
+        }
1384
+        if ($type != TYPE_RECURSIF) {
1385
+            if (!$boucles[$id]->sql_serveur and $connect) {
1386
+                $boucles[$id]->sql_serveur = $connect;
1387
+            }
1388
+
1389
+            // chercher dans les iterateurs du repertoire iterateur/
1390
+            if ($g = charger_fonction(
1391
+                preg_replace('/\W/', '_', $boucle->type_requete), 'iterateur', true)
1392
+            ) {
1393
+                $boucles[$id] = $g($boucle);
1394
+
1395
+                // sinon, en cas de requeteur d'un type predefini,
1396
+                // utiliser les informations donnees par le requeteur
1397
+                // cas "php:xx" et "data:xx".
1398
+            } else {
1399
+                if ($boucle->sql_serveur and $requeteur = charger_fonction($boucle->sql_serveur, 'requeteur', true)) {
1400
+                    $requeteur($boucles, $boucle, $id);
1401
+
1402
+                    // utiliser la description des champs transmis
1403
+                } else {
1404
+                    $show = $trouver_table($type, $boucles[$id]->sql_serveur);
1405
+                    // si la table n'existe pas avec le connecteur par defaut,
1406
+                    // c'est peut etre une table qui necessite son connecteur dedie fourni
1407
+                    // permet une ecriture allegee (GEO) -> (geo:GEO)
1408
+                    if (!$show
1409
+                        and $show = $trouver_table($type, strtolower($type))
1410
+                    ) {
1411
+                        $boucles[$id]->sql_serveur = strtolower($type);
1412
+                    }
1413
+                    if ($show) {
1414
+                        $boucles[$id]->show = $show;
1415
+                        // recopie les infos les plus importantes
1416
+                        $boucles[$id]->primary = isset($show['key']["PRIMARY KEY"]) ? $show['key']["PRIMARY KEY"] : '';
1417
+                        $boucles[$id]->id_table = $x = preg_replace(",^spip_,", "", $show['id_table']);
1418
+                        $boucles[$id]->from[$x] = $nom_table = $show['table'];
1419
+                        $boucles[$id]->iterateur = 'SQL';
1420
+
1421
+                        if (empty($boucles[$id]->descr)) {
1422
+                            $boucles[$id]->descr = &$descr;
1423
+                        }
1424
+                        if ((!$boucles[$id]->jointures)
1425
+                            and is_array($show['tables_jointures'])
1426
+                            and count($x = $show['tables_jointures'])
1427
+                        ) {
1428
+                            $boucles[$id]->jointures = $x;
1429
+                        }
1430
+                        if ($boucles[$id]->jointures_explicites) {
1431
+                            $jointures = preg_split("/\s+/", $boucles[$id]->jointures_explicites);
1432
+                            while ($j = array_pop($jointures)) {
1433
+                                array_unshift($boucles[$id]->jointures, $j);
1434
+                            }
1435
+                        }
1436
+                    } else {
1437
+                        // Pas une erreur si la table est optionnelle
1438
+                        if ($boucles[$id]->table_optionnelle) {
1439
+                            $boucles[$id]->type_requete = '';
1440
+                        } else {
1441
+                            $boucles[$id]->type_requete = false;
1442
+                            $boucle = $boucles[$id];
1443
+                            $x = (!$boucle->sql_serveur ? '' :
1444
+                                    ($boucle->sql_serveur . ":")) .
1445
+                                $type;
1446
+                            $msg = array(
1447
+                                'zbug_table_inconnue',
1448
+                                array('table' => $x)
1449
+                            );
1450
+                            erreur_squelette($msg, $boucle);
1451
+                        }
1452
+                    }
1453
+                }
1454
+            }
1455
+        }
1456
+    }
1457
+
1458
+    // Commencer par reperer les boucles appelees explicitement 
1459
+    // car elles indexent les arguments de maniere derogatoire
1460
+    foreach ($boucles as $id => $boucle) {
1461
+        if ($boucle->type_requete == TYPE_RECURSIF and $boucle->param) {
1462
+            $boucles[$id]->descr = &$descr;
1463
+            $rec = &$boucles[$boucle->param[0]];
1464
+            if (!$rec) {
1465
+                $msg = array(
1466
+                    'zbug_boucle_recursive_undef',
1467
+                    array('nom' => $boucle->param[0])
1468
+                );
1469
+                erreur_squelette($msg, $boucle);
1470
+                $boucles[$id]->type_requete = false;
1471
+            } else {
1472
+                $rec->externe = $id;
1473
+                $descr['id_mere'] = $id;
1474
+                $boucles[$id]->return =
1475
+                    calculer_liste(array($rec),
1476
+                        $descr,
1477
+                        $boucles,
1478
+                        $boucle->param);
1479
+            }
1480
+        }
1481
+    }
1482
+    foreach ($boucles as $id => $boucle) {
1483
+        $id = strval($id); // attention au type dans index_pile
1484
+        $type = $boucle->type_requete;
1485
+        if ($type and $type != TYPE_RECURSIF) {
1486
+            $res = '';
1487
+            if ($boucle->param) {
1488
+                // retourne un tableau en cas d'erreur
1489
+                $res = calculer_criteres($id, $boucles);
1490
+            }
1491
+            $descr['id_mere'] = $id;
1492
+            $boucles[$id]->return =
1493
+                calculer_liste($boucle->milieu,
1494
+                    $descr,
1495
+                    $boucles,
1496
+                    $id);
1497
+            // Si les criteres se sont mal compiles
1498
+            // ne pas tenter d'assembler le code final
1499
+            // (mais compiler le corps pour detection d'erreurs)
1500
+            if (is_array($res)) {
1501
+                $boucles[$id]->type_requete = false;
1502
+            }
1503
+        }
1504
+    }
1505
+
1506
+    // idem pour la racine
1507
+    $descr['id_mere'] = '';
1508
+    $corps = calculer_liste($squelette, $descr, $boucles);
1509
+
1510
+
1511
+    // Calcul du corps de toutes les fonctions PHP,
1512
+    // en particulier les requetes SQL et TOTAL_BOUCLE
1513
+    // de'terminables seulement maintenant
1514
+
1515
+    foreach ($boucles as $id => $boucle) {
1516
+        $boucle = $boucles[$id] = pipeline('pre_boucle', $boucle);
1517
+        if ($boucle->return === false) {
1518
+            $corps = false;
1519
+            continue;
1520
+        }
1521
+        // appeler la fonction de definition de la boucle
1522
+
1523
+        if ($req = $boucle->type_requete) {
1524
+            // boucle personnalisée ?
1525
+            $table = strtoupper($boucle->type_requete);
1526
+            $serveur = strtolower($boucle->sql_serveur);
1527
+            if (
1528
+                // fonction de boucle avec serveur & table
1529
+                (!$serveur or
1530
+                    ((!function_exists($f = "boucle_" . $serveur . "_" . $table))
1531
+                        and (!function_exists($f = $f . "_dist"))
1532
+                    )
1533
+                )
1534
+                // fonction de boucle avec table
1535
+                and (!function_exists($f = "boucle_" . $table))
1536
+                and (!function_exists($f = $f . "_dist"))
1537
+            ) {
1538
+                // fonction de boucle standard 
1539
+                if (!function_exists($f = 'boucle_DEFAUT')) {
1540
+                    $f = 'boucle_DEFAUT_dist';
1541
+                }
1542
+            }
1543
+
1544
+            $req = "\n\n\tstatic \$command = array();\n\t" .
1545
+                "static \$connect;\n\t" .
1546
+                "\$command['connect'] = \$connect = " .
1547
+                _q($boucle->sql_serveur) .
1548
+                ";" .
1549
+                $f($id, $boucles);
1550
+        } else {
1551
+            $req = ("\n\treturn '';");
1552
+        }
1553
+
1554
+        $boucles[$id]->return =
1555
+            "\n\nfunction BOUCLE" . strtr($id, "-", "_") . $nom .
1556
+            '(&$Cache, &$Pile, &$doublons, &$Numrows, $SP) {' .
1557
+            $req .
1558
+            "\n}\n";
1559
+    }
1560
+
1561
+    // Au final, si le corps ou un critere au moins s'est mal compile
1562
+    // retourner False, sinon inserer leur decompilation
1563
+    if (is_bool($corps)) {
1564
+        return false;
1565
+    }
1566
+
1567
+    $principal = "\nfunction " . $nom . '($Cache, $Pile, $doublons = array(), $Numrows = array(), $SP = 0) {
1568 1568
 '
1569
-		// reporter de maniere securisee les doublons inclus
1570
-		. '
1569
+        // reporter de maniere securisee les doublons inclus
1570
+        . '
1571 1571
 	if (isset($Pile[0]["doublons"]) AND is_array($Pile[0]["doublons"]))
1572 1572
 		$doublons = nettoyer_env_doublons($Pile[0]["doublons"]);
1573 1573
 
1574 1574
 	$connect = ' .
1575
-		_q($connect) . ';
1575
+        _q($connect) . ';
1576 1576
 	$page = ' .
1577
-		// ATTENTION, le calcul de l'expression $corps affectera $Cache
1578
-		// c'est pourquoi on l'affecte a la variable auxiliaire $page.
1579
-		// avant de referencer $Cache
1580
-		$corps . ";
1577
+        // ATTENTION, le calcul de l'expression $corps affectera $Cache
1578
+        // c'est pourquoi on l'affecte a la variable auxiliaire $page.
1579
+        // avant de referencer $Cache
1580
+        $corps . ";
1581 1581
 
1582 1582
 	return analyse_resultat_skel(" . var_export($nom, true)
1583
-		. ", \$Cache, \$page, " . var_export($sourcefile, true) . ");
1583
+        . ", \$Cache, \$page, " . var_export($sourcefile, true) . ");
1584 1584
 }";
1585 1585
 
1586
-	$secondes = spip_timer('calcul_skel');
1587
-	spip_log("COMPIL ($secondes) [$sourcefile] $nom.php");
1588
-	// $connect n'est pas sûr : on nettoie
1589
-	$connect = preg_replace(',[^\w],', '', $connect);
1586
+    $secondes = spip_timer('calcul_skel');
1587
+    spip_log("COMPIL ($secondes) [$sourcefile] $nom.php");
1588
+    // $connect n'est pas sûr : on nettoie
1589
+    $connect = preg_replace(',[^\w],', '', $connect);
1590 1590
 
1591
-	// Assimiler la fct principale a une boucle anonyme, pour retourner un resultat simple
1592
-	$code = new Boucle;
1593
-	$code->descr = $descr;
1594
-	$code->return = '
1591
+    // Assimiler la fct principale a une boucle anonyme, pour retourner un resultat simple
1592
+    $code = new Boucle;
1593
+    $code->descr = $descr;
1594
+    $code->return = '
1595 1595
 //
1596 1596
 // Fonction principale du squelette ' .
1597
-		$sourcefile .
1598
-		($connect ? " pour $connect" : '') .
1599
-		(!CODE_COMMENTE ? '' : "\n// Temps de compilation total: $secondes") .
1600
-		"\n//\n" .
1601
-		$principal;
1597
+        $sourcefile .
1598
+        ($connect ? " pour $connect" : '') .
1599
+        (!CODE_COMMENTE ? '' : "\n// Temps de compilation total: $secondes") .
1600
+        "\n//\n" .
1601
+        $principal;
1602 1602
 
1603
-	$boucles[''] = $code;
1603
+    $boucles[''] = $code;
1604 1604
 
1605
-	return $boucles;
1605
+    return $boucles;
1606 1606
 }
1607 1607
 
1608 1608
 
@@ -1619,18 +1619,18 @@  discard block
 block discarded – undo
1619 1619
  *
1620 1620
  **/
1621 1621
 function requeteur_php_dist(&$boucles, &$boucle, &$id) {
1622
-	if (class_exists($boucle->type_requete)) {
1623
-		$g = charger_fonction('php', 'iterateur');
1624
-		$boucles[$id] = $g($boucle, $boucle->type_requete);
1625
-	} else {
1626
-		$x = $boucle->type_requete;
1627
-		$boucle->type_requete = false;
1628
-		$msg = array(
1629
-			'zbug_iterateur_inconnu',
1630
-			array('iterateur' => $x)
1631
-		);
1632
-		erreur_squelette($msg, $boucle);
1633
-	}
1622
+    if (class_exists($boucle->type_requete)) {
1623
+        $g = charger_fonction('php', 'iterateur');
1624
+        $boucles[$id] = $g($boucle, $boucle->type_requete);
1625
+    } else {
1626
+        $x = $boucle->type_requete;
1627
+        $boucle->type_requete = false;
1628
+        $msg = array(
1629
+            'zbug_iterateur_inconnu',
1630
+            array('iterateur' => $x)
1631
+        );
1632
+        erreur_squelette($msg, $boucle);
1633
+    }
1634 1634
 }
1635 1635
 
1636 1636
 
@@ -1648,23 +1648,23 @@  discard block
 block discarded – undo
1648 1648
  *
1649 1649
  **/
1650 1650
 function requeteur_data_dist(&$boucles, &$boucle, &$id) {
1651
-	include_spip('iterateur/data');
1652
-	if ($h = charger_fonction($boucle->type_requete . '_to_array', 'inc', true)) {
1653
-		$g = charger_fonction('data', 'iterateur');
1654
-		$boucles[$id] = $g($boucle);
1655
-		// from[0] stocke le type de data (rss, yql, ...)
1656
-		$boucles[$id]->from[] = $boucle->type_requete;
1657
-
1658
-	} else {
1659
-		$x = $boucle->type_requete;
1660
-		$boucle->type_requete = false;
1661
-		$msg = array(
1662
-			'zbug_requeteur_inconnu',
1663
-			array(
1664
-				'requeteur' => 'data',
1665
-				'type' => $x
1666
-			)
1667
-		);
1668
-		erreur_squelette($msg, $boucle);
1669
-	}
1651
+    include_spip('iterateur/data');
1652
+    if ($h = charger_fonction($boucle->type_requete . '_to_array', 'inc', true)) {
1653
+        $g = charger_fonction('data', 'iterateur');
1654
+        $boucles[$id] = $g($boucle);
1655
+        // from[0] stocke le type de data (rss, yql, ...)
1656
+        $boucles[$id]->from[] = $boucle->type_requete;
1657
+
1658
+    } else {
1659
+        $x = $boucle->type_requete;
1660
+        $boucle->type_requete = false;
1661
+        $msg = array(
1662
+            'zbug_requeteur_inconnu',
1663
+            array(
1664
+                'requeteur' => 'data',
1665
+                'type' => $x
1666
+            )
1667
+        );
1668
+        erreur_squelette($msg, $boucle);
1669
+    }
1670 1670
 }
Please login to merge, or discard this patch.
Spacing   +115 added lines, -123 removed lines patch added patch discarded remove patch
@@ -97,7 +97,7 @@  discard block
 block discarded – undo
97 97
 				preg_match(",^([^=]*)(=?)(.*)$,m", $var->texte, $m);
98 98
 				$m = array_pad($m, 3, null);
99 99
 				$var = $m[1];
100
-				$auto = false;;
100
+				$auto = false; ;
101 101
 				if ($m[2]) {
102 102
 					$v = $m[3];
103 103
 					if (preg_match(',^[\'"](.*)[\'"]$,', $v, $m)) {
@@ -121,7 +121,7 @@  discard block
 block discarded – undo
121 121
 						: calculer_liste($val, $p->descr, $boucles, $id_boucle);
122 122
 					if ($var !== 1) {
123 123
 						$val = ($echap ? "\'$var\' => ' . argumenter_squelette(" : "'$var' => ")
124
-							. $val . ($echap ? ") . '" : " ");
124
+							. $val.($echap ? ") . '" : " ");
125 125
 					} else {
126 126
 						$val = $echap ? "'.$val.'" : $val;
127 127
 					}
@@ -142,7 +142,7 @@  discard block
 block discarded – undo
142 142
 	if (!$lang) {
143 143
 		$lang = '$GLOBALS["spip_lang"]';
144 144
 	}
145
-	$l['lang'] = ($echap ? "\'lang\' => ' . argumenter_squelette(" : "'lang' => ") . $lang . ($echap ? ") . '" : " ");
145
+	$l['lang'] = ($echap ? "\'lang\' => ' . argumenter_squelette(" : "'lang' => ").$lang.($echap ? ") . '" : " ");
146 146
 
147 147
 	return $l;
148 148
 }
@@ -171,7 +171,7 @@  discard block
 block discarded – undo
171 171
 	$_contexte = argumenter_inclure($p->param, false, $p, $boucles, $id_boucle, true, '', true);
172 172
 	if (is_string($p->texte)) {
173 173
 		$fichier = $p->texte;
174
-		$code = "\"".str_replace('"','\"',$fichier)."\"";
174
+		$code = "\"".str_replace('"', '\"', $fichier)."\"";
175 175
 
176 176
 	} else {
177 177
 		$code = calculer_liste($p->texte, $p->descr, $boucles, $id_boucle);
@@ -185,7 +185,7 @@  discard block
 block discarded – undo
185 185
 		$trace = $p->fonctions;
186 186
 		while (is_array($trace)
187 187
 		  and $trace = array_filter($trace)
188
-			and count($trace)==1) {
188
+			and count($trace) == 1) {
189 189
 			$trace = reset($trace);
190 190
 		}
191 191
 		$erreur_p_i_i = array(
@@ -219,7 +219,7 @@  discard block
 block discarded – undo
219 219
 		return false;
220 220
 	} // j'aurais voulu toucher le fond ...
221 221
 
222
-	$contexte = 'array(' . $_contexte . ')';
222
+	$contexte = 'array('.$_contexte.')';
223 223
 
224 224
 	if ($env) {
225 225
 		$contexte = "array_merge('.var_export(\$Pile[0],1).',$contexte)";
@@ -234,11 +234,11 @@  discard block
 block discarded – undo
234 234
 			$_options[] = $ajax;
235 235
 		}
236 236
 		$code = " ' . argumenter_squelette($code) . '";
237
-		$code = "echo " . sprintf(CODE_RECUPERER_FOND, $code, $contexte, implode(',', $_options),
238
-				"_request(\"connect\")") . ';';
237
+		$code = "echo ".sprintf(CODE_RECUPERER_FOND, $code, $contexte, implode(',', $_options),
238
+				"_request(\"connect\")").';';
239 239
 	}
240 240
 
241
-	return "\n'<'.'" . "?php " . $code . "\n?'." . "'>'";
241
+	return "\n'<'.'"."?php ".$code."\n?'."."'>'";
242 242
 }
243 243
 
244 244
 
@@ -318,17 +318,17 @@  discard block
 block discarded – undo
318 318
 					$id = $id_table;
319 319
 					$statut = preg_replace(',\W,', '', $s['champ']); // securite
320 320
 				}
321
-				$mstatut = $id . '.' . $statut;
321
+				$mstatut = $id.'.'.$statut;
322 322
 
323 323
 				$arg_ignore_previsu = ($ignore_previsu ? ",true" : '');
324 324
 				include_spip('public/quete');
325 325
 				if (isset($s['post_date']) and $s['post_date']
326 326
 					and $GLOBALS['meta']["post_dates"] == 'non'
327 327
 				) {
328
-					$date = $id . '.' . preg_replace(',\W,', '', $s['post_date']); // securite
328
+					$date = $id.'.'.preg_replace(',\W,', '', $s['post_date']); // securite
329 329
 					array_unshift($boucle->where,
330 330
 						$echapper ?
331
-							"\nquete_condition_postdates('$date'," . _q($boucle->sql_serveur) . "$arg_ignore_previsu)"
331
+							"\nquete_condition_postdates('$date',"._q($boucle->sql_serveur)."$arg_ignore_previsu)"
332 332
 							:
333 333
 							quete_condition_postdates($date, $boucle->sql_serveur, $ignore_previsu)
334 334
 					);
@@ -336,9 +336,9 @@  discard block
 block discarded – undo
336 336
 				array_unshift($boucle->where,
337 337
 					$echapper ?
338 338
 						"\nquete_condition_statut('$mstatut',"
339
-						. _q($s['previsu']) . ","
340
-						. _q($s['publie']) . ","
341
-						. _q($boucle->sql_serveur) . "$arg_ignore_previsu)"
339
+						. _q($s['previsu']).","
340
+						. _q($s['publie']).","
341
+						. _q($boucle->sql_serveur)."$arg_ignore_previsu)"
342 342
 						:
343 343
 						quete_condition_statut($mstatut, $s['previsu'], $s['publie'], $boucle->sql_serveur, $ignore_previsu)
344 344
 				);
@@ -372,14 +372,14 @@  discard block
 block discarded – undo
372 372
 	if (_request('var_mode_affiche') != 'resultat') {
373 373
 		$trace = '';
374 374
 	} else {
375
-		$_trace = $boucles[$id_boucle]->descr['nom'] . $id_boucle;
375
+		$_trace = $boucles[$id_boucle]->descr['nom'].$id_boucle;
376 376
 		$_trace = "\$GLOBALS['debug_objets']['resultat']['$_trace']";
377 377
 		$trace = "
378 378
 		if (empty($_trace)) { 
379 379
 			$_trace = []; 
380 380
 		}
381 381
 		if (count($_trace) < 3) { 
382
-			$_trace" . "[] = \$t0; 
382
+			$_trace"."[] = \$t0; 
383 383
 		}";
384 384
 	}
385 385
 
@@ -413,7 +413,7 @@  discard block
 block discarded – undo
413 413
 	return
414 414
 		// Numrows[$nom] peut ne pas être encore defini
415 415
 		"\n\t\$save_numrows = (isset(\$Numrows['$nom']) ? \$Numrows['$nom'] : array());"
416
-		. "\n\t\$t0 = " . $boucles[$id_boucle]->return . ";"
416
+		. "\n\t\$t0 = ".$boucles[$id_boucle]->return.";"
417 417
 		. "\n\t\$Numrows['$nom'] = (\$save_numrows);"
418 418
 		. $trace
419 419
 		. "\n\treturn \$t0;";
@@ -481,7 +481,7 @@  discard block
 block discarded – undo
481 481
 	// faudrait expanser le foreach a la compil, car y en a souvent qu'un 
482 482
 	// et puis faire un [] plutot qu'un "','."
483 483
 	if ($boucle->doublons) {
484
-		$corps .= "\n\t\t\tforeach(" . $boucle->doublons . ' as $k) $doublons[$k] .= "," . ' .
484
+		$corps .= "\n\t\t\tforeach(".$boucle->doublons.' as $k) $doublons[$k] .= "," . '.
485 485
 			index_pile($id_boucle, $primary, $boucles)
486 486
 			. "; // doublons\n";
487 487
 	}
@@ -508,13 +508,13 @@  discard block
 block discarded – undo
508 508
 		$corps .=
509 509
 			"\n\t\tlang_select_public("
510 510
 			. index_pile($id_boucle, 'lang', $boucles)
511
-			. ", '" . $boucle->lang_select . "'"
511
+			. ", '".$boucle->lang_select."'"
512 512
 			. (in_array($type_boucle, array(
513 513
 				'articles',
514 514
 				'rubriques',
515 515
 				'hierarchie',
516 516
 				'breves'
517
-			)) ? ', ' . index_pile($id_boucle, 'titre', $boucles) : '')
517
+			)) ? ', '.index_pile($id_boucle, 'titre', $boucles) : '')
518 518
 			. ');';
519 519
 	} else {
520 520
 		$init_lang = '';
@@ -535,26 +535,22 @@  discard block
 block discarded – undo
535 535
 
536 536
 	// gestion optimale des separateurs et des boucles constantes
537 537
 	if (count($boucle->separateur)) {
538
-		$code_sep = ("'" . str_replace("'", "\'", join('', $boucle->separateur)) . "'");
538
+		$code_sep = ("'".str_replace("'", "\'", join('', $boucle->separateur))."'");
539 539
 	}
540 540
 
541 541
 	$corps .=
542 542
 		((!$boucle->separateur) ?
543
-			(($constant && !$corps && !$flag_cpt) ? $return :
544
-				(($return === "''") ? '' :
545
-					("\n\t\t" . '$t0 .= ' . $return . ";"))) :
546
-			("\n\t\t\$t1 " .
543
+			(($constant && !$corps && !$flag_cpt) ? $return : (($return === "''") ? '' : ("\n\t\t".'$t0 .= '.$return.";"))) : ("\n\t\t\$t1 ".
547 544
 				((strpos($return, '$t1.') === 0) ?
548
-					(".=" . substr($return, 4)) :
549
-					('= ' . $return)) .
550
-				";\n\t\t" .
551
-				'$t0 .= ((strlen($t1) && strlen($t0)) ? ' . $code_sep . " : '') . \$t1;"));
545
+					(".=".substr($return, 4)) : ('= '.$return)).
546
+				";\n\t\t".
547
+				'$t0 .= ((strlen($t1) && strlen($t0)) ? '.$code_sep." : '') . \$t1;"));
552 548
 
553 549
 	// Calculer les invalideurs si c'est une boucle non constante et si on
554 550
 	// souhaite invalider ces elements
555 551
 	if (!$constant and $primary) {
556 552
 		include_spip('inc/invalideur');
557
-		$corps = calcul_invalideurs($corps, $primary,$boucles, $id_boucle);
553
+		$corps = calcul_invalideurs($corps, $primary, $boucles, $id_boucle);
558 554
 	}
559 555
 
560 556
 	// gerer le compteur de boucle 
@@ -629,7 +625,7 @@  discard block
 block discarded – undo
629 625
 		$corps,
630 626
 		$fin_lang,
631 627
 		$trace,
632
-		'BOUCLE' . $id_boucle . ' @ ' . ($boucle->descr['sourcefile'])
628
+		'BOUCLE'.$id_boucle.' @ '.($boucle->descr['sourcefile'])
633 629
 	);
634 630
 
635 631
 #	var_dump($a);exit;
@@ -650,20 +646,20 @@  discard block
 block discarded – undo
650 646
  **/
651 647
 function calculer_requete_sql($boucle) {
652 648
 	$init = array();
653
-	$init[] = calculer_dec('table', "'" . $boucle->id_table . "'");
654
-	$init[] = calculer_dec('id', "'" . $boucle->id_boucle . "'");
649
+	$init[] = calculer_dec('table', "'".$boucle->id_table."'");
650
+	$init[] = calculer_dec('id', "'".$boucle->id_boucle."'");
655 651
 	# En absence de champ c'est un decompte :
656 652
 	$init[] = calculer_dec('from', calculer_from($boucle));
657 653
 	$init[] = calculer_dec('type', calculer_from_type($boucle));
658 654
 	$init[] = calculer_dec('groupby',
659
-		'array(' . (($g = join("\",\n\t\t\"", $boucle->group)) ? '"' . $g . '"' : '') . ")");
660
-	$init[] = calculer_dec('select', 'array("' . join("\",\n\t\t\"", $boucle->select) . "\")");
661
-	$init[] = calculer_dec('orderby', 'array(' . calculer_order($boucle) . ")");
655
+		'array('.(($g = join("\",\n\t\t\"", $boucle->group)) ? '"'.$g.'"' : '').")");
656
+	$init[] = calculer_dec('select', 'array("'.join("\",\n\t\t\"", $boucle->select)."\")");
657
+	$init[] = calculer_dec('orderby', 'array('.calculer_order($boucle).")");
662 658
 	$init[] = calculer_dec('where', calculer_dump_array($boucle->where));
663 659
 	$init[] = calculer_dec('join', calculer_dump_join($boucle->join));
664 660
 	$init[] = calculer_dec('limit',
665 661
 		(strpos($boucle->limit, 'intval') === false ?
666
-			"'" . $boucle->limit . "'"
662
+			"'".$boucle->limit."'"
667 663
 			:
668 664
 			$boucle->limit));
669 665
 	$init[] = calculer_dec('having', calculer_dump_array($boucle->having));
@@ -672,17 +668,17 @@  discard block
 block discarded – undo
672 668
 	// ou recalculée à chaque passage (vide)
673 669
 	foreach ($init as $i) {
674 670
 		if (reset($i)) {
675
-			$s .= "\n\t\t" . end($i);
671
+			$s .= "\n\t\t".end($i);
676 672
 		} # statique
677 673
 		else {
678
-			$d .= "\n\t" . end($i);
674
+			$d .= "\n\t".end($i);
679 675
 		} # dynamique
680 676
 	}
681 677
 
682 678
 	return ($boucle->hierarchie ? "\n\t$boucle->hierarchie" : '')
683 679
 	. $boucle->in
684 680
 	. $boucle->hash
685
-	. "\n\t" . 'if (!isset($command[\'table\'])) {'
681
+	. "\n\t".'if (!isset($command[\'table\'])) {'
686 682
 	. $s
687 683
 	. "\n\t}"
688 684
 	. $d;
@@ -765,7 +761,7 @@  discard block
 block discarded – undo
765 761
  *    - index 1 : Code de l'affectation
766 762
  **/
767 763
 function calculer_dec($nom, $val) {
768
-	$static = 'if (!isset($command[\'' . $nom . '\'])) ';
764
+	$static = 'if (!isset($command[\''.$nom.'\'])) ';
769 765
 	// si une variable apparait dans le calcul de la clause
770 766
 	// il faut la re-evaluer a chaque passage
771 767
 	if (
@@ -782,7 +778,7 @@  discard block
 block discarded – undo
782 778
 		$static = "";
783 779
 	}
784 780
 
785
-	return array($static, '$command[\'' . $nom . '\'] = ' . $val . ';');
781
+	return array($static, '$command[\''.$nom.'\'] = '.$val.';');
786 782
 }
787 783
 
788 784
 /**
@@ -807,17 +803,17 @@  discard block
 block discarded – undo
807 803
 	}
808 804
 	$res = "";
809 805
 	if ($a and $a[0] == "'?'") {
810
-		return ("(" . calculer_dump_array($a[1]) .
811
-			" ? " . calculer_dump_array($a[2]) .
812
-			" : " . calculer_dump_array($a[3]) .
806
+		return ("(".calculer_dump_array($a[1]).
807
+			" ? ".calculer_dump_array($a[2]).
808
+			" : ".calculer_dump_array($a[3]).
813 809
 			")");
814 810
 	} else {
815 811
 		foreach ($a as $k => $v) {
816
-			$showk = (is_numeric($k) ? '' : sql_quote($k) . ' => ');
817
-			$res .= ", " . $showk . calculer_dump_array($v);
812
+			$showk = (is_numeric($k) ? '' : sql_quote($k).' => ');
813
+			$res .= ", ".$showk.calculer_dump_array($v);
818 814
 		}
819 815
 
820
-		return "\n\t\t\tarray(" . substr($res, 2) . ')';
816
+		return "\n\t\t\tarray(".substr($res, 2).')';
821 817
 	}
822 818
 }
823 819
 
@@ -825,10 +821,10 @@  discard block
 block discarded – undo
825 821
 function calculer_dump_join($a) {
826 822
 	$res = "";
827 823
 	foreach ($a as $k => $v) {
828
-		$res .= ", '$k' => array(" . implode(',', $v) . ")";
824
+		$res .= ", '$k' => array(".implode(',', $v).")";
829 825
 	}
830 826
 
831
-	return 'array(' . substr($res, 2) . ')';
827
+	return 'array('.substr($res, 2).')';
832 828
 }
833 829
 
834 830
 /**
@@ -845,7 +841,7 @@  discard block
 block discarded – undo
845 841
 		$res .= ",'$k' => '$v'";
846 842
 	}
847 843
 
848
-	return 'array(' . substr($res, 1) . ')';
844
+	return 'array('.substr($res, 1).')';
849 845
 }
850 846
 
851 847
 /**
@@ -863,7 +859,7 @@  discard block
 block discarded – undo
863 859
 		$res .= ",'$k' => '$v'";
864 860
 	}
865 861
 
866
-	return 'array(' . substr($res, 1) . ')';
862
+	return 'array('.substr($res, 1).')';
867 863
 }
868 864
 
869 865
 // https://code.spip.net/@calculer_order
@@ -932,17 +928,17 @@  discard block
 block discarded – undo
932 928
 				) {
933 929
 					$res .= " .\n$tab$code";
934 930
 				} else {
935
-					$res = substr($res, 0, -1) . substr($code, 1);
931
+					$res = substr($res, 0, -1).substr($code, 1);
936 932
 				}
937 933
 			}
938 934
 
939
-			return '(' . substr($res, 2 + $descr['niv']) . ')';
935
+			return '('.substr($res, 2 + $descr['niv']).')';
940 936
 		}
941 937
 	} else {
942
-		$nom = $descr['nom'] . $id_boucle . ($descr['niv'] ? $descr['niv'] : '');
938
+		$nom = $descr['nom'].$id_boucle.($descr['niv'] ? $descr['niv'] : '');
943 939
 
944
-		return "join('', array_map('array_shift', \$GLOBALS['debug_objets']['sequence']['$nom'] = array(" . join(" ,\n$tab",
945
-			$codes) . ")))";
940
+		return "join('', array_map('array_shift', \$GLOBALS['debug_objets']['sequence']['$nom'] = array(".join(" ,\n$tab",
941
+			$codes).")))";
946 942
 	}
947 943
 }
948 944
 
@@ -971,7 +967,7 @@  discard block
 block discarded – undo
971 967
 			// texte seul
972 968
 			case 'texte':
973 969
 				$code = sandbox_composer_texte($p->texte, $p);
974
-				$commentaire = strlen($p->texte) . " signes";
970
+				$commentaire = strlen($p->texte)." signes";
975 971
 				$avant = '';
976 972
 				$apres = '';
977 973
 				$altern = "''";
@@ -980,14 +976,14 @@  discard block
 block discarded – undo
980 976
 			case 'polyglotte':
981 977
 				$code = "";
982 978
 				foreach ($p->traductions as $k => $v) {
983
-					$code .= ",'" .
984
-						str_replace(array("\\", "'"), array("\\\\", "\\'"), $k) .
985
-						"' => '" .
986
-						str_replace(array("\\", "'"), array("\\\\", "\\'"), $v) .
979
+					$code .= ",'".
980
+						str_replace(array("\\", "'"), array("\\\\", "\\'"), $k).
981
+						"' => '".
982
+						str_replace(array("\\", "'"), array("\\\\", "\\'"), $v).
987 983
 						"'";
988 984
 				}
989
-				$code = "choisir_traduction(array(" .
990
-					substr($code, 1) .
985
+				$code = "choisir_traduction(array(".
986
+					substr($code, 1).
991 987
 					"))";
992 988
 				$commentaire = '&';
993 989
 				$avant = '';
@@ -1003,7 +999,7 @@  discard block
 block discarded – undo
1003 999
 					$err_e_c = true;
1004 1000
 					$code = "''";
1005 1001
 				} else {
1006
-					$commentaire = '<INCLURE ' . addslashes(str_replace("\n", ' ', $code)) . '>';
1002
+					$commentaire = '<INCLURE '.addslashes(str_replace("\n", ' ', $code)).'>';
1007 1003
 					$avant = '';
1008 1004
 					$apres = '';
1009 1005
 					$altern = "''";
@@ -1030,8 +1026,8 @@  discard block
 block discarded – undo
1030 1026
 					$err_e_c = true;
1031 1027
 					$code = "''";
1032 1028
 				} else {
1033
-					$code = 'BOUCLE' .
1034
-						str_replace("-", "_", $nom) . $descr['nom'] .
1029
+					$code = 'BOUCLE'.
1030
+						str_replace("-", "_", $nom).$descr['nom'].
1035 1031
 						'($Cache, $Pile, $doublons, $Numrows, $SP)';
1036 1032
 					$commentaire = "?$nom";
1037 1033
 					if (!$boucles[$nom]->milieu
@@ -1072,24 +1068,22 @@  discard block
 block discarded – undo
1072 1068
 				foreach ($p->arg as $k => $v) {
1073 1069
 					$_v = calculer_liste($v, $descr, $boucles, $id_boucle);
1074 1070
 					if ($k) {
1075
-						$l[] = _q($k) . ' => ' . $_v;
1071
+						$l[] = _q($k).' => '.$_v;
1076 1072
 					} else {
1077 1073
 						$code = $_v;
1078 1074
 					}
1079 1075
 				}
1080 1076
 				// Si le module n'est pas fourni, l'expliciter sauf si calculé
1081 1077
 				if ($p->module) {
1082
-					$m = $p->module . ':' . $p->nom_champ;
1078
+					$m = $p->module.':'.$p->nom_champ;
1083 1079
 				} elseif ($p->nom_champ) {
1084
-					$m = MODULES_IDIOMES . ':' . $p->nom_champ;
1080
+					$m = MODULES_IDIOMES.':'.$p->nom_champ;
1085 1081
 				} else {
1086 1082
 					$m = '';
1087 1083
 				}
1088 1084
 
1089
-				$code = (!$code ? "'$m'" :
1090
-						($m ? "'$m' . $code" :
1091
-							("(strpos(\$x=$code, ':') ? \$x : ('" . MODULES_IDIOMES . ":' . \$x))")))
1092
-					. (!$l ? '' : (", array(" . implode(",\n", $l) . ")"));
1085
+				$code = (!$code ? "'$m'" : ($m ? "'$m' . $code" : ("(strpos(\$x=$code, ':') ? \$x : ('".MODULES_IDIOMES.":' . \$x))")))
1086
+					. (!$l ? '' : (", array(".implode(",\n", $l).")"));
1093 1087
 				$code = "_T($code)";
1094 1088
 				if ($p->param) {
1095 1089
 					$p->id_boucle = $id_boucle;
@@ -1112,7 +1106,7 @@  discard block
 block discarded – undo
1112 1106
 				$p->type_requete = $type;
1113 1107
 
1114 1108
 				$code = calculer_champ($p);
1115
-				$commentaire = '#' . $p->nom_champ . $p->etoile;
1109
+				$commentaire = '#'.$p->nom_champ.$p->etoile;
1116 1110
 				$avant = calculer_liste($p->avant,
1117 1111
 					$descr, $boucles, $id_boucle);
1118 1112
 				$apres = calculer_liste($p->apres,
@@ -1143,10 +1137,9 @@  discard block
 block discarded – undo
1143 1137
 		if ($code != "''") {
1144 1138
 			$code = compile_retour($code, $avant, $apres, $altern, $tab, $descr['niv']);
1145 1139
 			$codes[] = (($mode == 'validation') ?
1146
-				"array($code, '$commentaire', " . $p->ligne . ")"
1140
+				"array($code, '$commentaire', ".$p->ligne.")"
1147 1141
 				: (($mode == 'code') ?
1148
-					"\n// $commentaire\n$code" :
1149
-					$code));
1142
+					"\n// $commentaire\n$code" : $code));
1150 1143
 		}
1151 1144
 	} // foreach
1152 1145
 
@@ -1197,28 +1190,28 @@  discard block
 block discarded – undo
1197 1190
 	if ($apres === "''") {
1198 1191
 		$apres = '';
1199 1192
 	}
1200
-	if ($avant or $apres or ($altern !== "''")){
1201
-		if (preg_match(_REGEXP_CONCAT_NON_VIDE, $code)){
1193
+	if ($avant or $apres or ($altern !== "''")) {
1194
+		if (preg_match(_REGEXP_CONCAT_NON_VIDE, $code)) {
1202 1195
 			$t = $code;
1203 1196
 			$cond = '';
1204 1197
 		} elseif (preg_match(_REGEXP_COND_VIDE_NONVIDE, $code, $r)) {
1205 1198
 			$t = $r[2];
1206
-			$cond = '!' . $r[1];
1199
+			$cond = '!'.$r[1];
1207 1200
 		} else {
1208
-			if (preg_match(_REGEXP_COND_NONVIDE_VIDE, $code, $r)){
1201
+			if (preg_match(_REGEXP_COND_NONVIDE_VIDE, $code, $r)) {
1209 1202
 				$t = $r[2];
1210 1203
 				$cond = $r[1];
1211 1204
 			} else {
1212
-				$t = '$t' . $n;
1205
+				$t = '$t'.$n;
1213 1206
 				$cond = "($t = $code)!==''";
1214 1207
 			}
1215 1208
 		}
1216 1209
 
1217
-		$res = (!$avant ? "" : "$avant . ") .
1218
-			$t .
1210
+		$res = (!$avant ? "" : "$avant . ").
1211
+			$t.
1219 1212
 			(!$apres ? "" : " . $apres");
1220 1213
 
1221
-		if ($res!==$t){
1214
+		if ($res !== $t) {
1222 1215
 			$res = "($res)";
1223 1216
 		}
1224 1217
 
@@ -1268,12 +1261,12 @@  discard block
 block discarded – undo
1268 1261
 
1269 1262
 	// rendre inertes les echappements de #[](){}<>
1270 1263
 	$i = 0;
1271
-	while (false !== strpos($squelette, $inerte = '-INERTE' . $i)) {
1264
+	while (false !== strpos($squelette, $inerte = '-INERTE'.$i)) {
1272 1265
 		$i++;
1273 1266
 	}
1274 1267
 	$squelette = preg_replace_callback(',\\\\([#[()\]{}<>]),',
1275 1268
 		function($a) use ($inerte) {
1276
-			return "$inerte-" . ord($a[1]) . '-';
1269
+			return "$inerte-".ord($a[1]).'-';
1277 1270
 		},
1278 1271
 		$squelette,
1279 1272
 		-1,
@@ -1290,7 +1283,7 @@  discard block
 block discarded – undo
1290 1283
 	// Phraser le squelette, selon sa grammaire
1291 1284
 
1292 1285
 	$boucles = array();
1293
-	$f = charger_fonction('phraser_' . $gram, 'public');
1286
+	$f = charger_fonction('phraser_'.$gram, 'public');
1294 1287
 
1295 1288
 	$squelette = $f($squelette, '', $boucles, $descr);
1296 1289
 
@@ -1309,7 +1302,7 @@  discard block
 block discarded – undo
1309 1302
 			$boucles[$i]->descr['squelette'] = preg_replace_callback(
1310 1303
 				",$inerte-(\d+)-,",
1311 1304
 				function($a) {
1312
-					return "\\\\" . chr($a[1]);
1305
+					return "\\\\".chr($a[1]);
1313 1306
 				},
1314 1307
 				$boucle->descr['squelette']
1315 1308
 			);
@@ -1321,19 +1314,19 @@  discard block
 block discarded – undo
1321 1314
 		include_spip('public/decompiler');
1322 1315
 		foreach ($boucles as $id => $boucle) {
1323 1316
 			if ($id) {
1324
-				$decomp = "\n/* BOUCLE " .
1325
-					$boucle->type_requete .
1326
-					" " .
1327
-					str_replace('*/', '* /', public_decompiler($boucle, $gram, 0, 'criteres')) .
1328
-					($boucle->debug ? "\n *\n * " . implode("\n * ", $boucle->debug) . "\n" : '') .
1317
+				$decomp = "\n/* BOUCLE ".
1318
+					$boucle->type_requete.
1319
+					" ".
1320
+					str_replace('*/', '* /', public_decompiler($boucle, $gram, 0, 'criteres')).
1321
+					($boucle->debug ? "\n *\n * ".implode("\n * ", $boucle->debug)."\n" : '').
1329 1322
 					" */\n";
1330 1323
 			} else {
1331
-				$decomp = ("\n/*\n" .
1324
+				$decomp = ("\n/*\n".
1332 1325
 					str_replace('*/', '* /', public_decompiler($squelette, $gram))
1333 1326
 					. "\n*/");
1334 1327
 			}
1335
-			$boucles[$id]->return = $decomp . $boucle->return;
1336
-			$GLOBALS['debug_objets']['code'][$nom . $id] = $boucle->return;
1328
+			$boucles[$id]->return = $decomp.$boucle->return;
1329
+			$GLOBALS['debug_objets']['code'][$nom.$id] = $boucle->return;
1337 1330
 		}
1338 1331
 	}
1339 1332
 
@@ -1356,7 +1349,7 @@  discard block
 block discarded – undo
1356 1349
 		}
1357 1350
 	}
1358 1351
 	foreach ($boucles as $id => $boucle) {
1359
-		$GLOBALS['debug_objets']['boucle'][$nom . $id] = $boucle;
1352
+		$GLOBALS['debug_objets']['boucle'][$nom.$id] = $boucle;
1360 1353
 	}
1361 1354
 	$descr['documents'] = compile_inclure_doublons($squelette);
1362 1355
 
@@ -1440,8 +1433,7 @@  discard block
 block discarded – undo
1440 1433
 						} else {
1441 1434
 							$boucles[$id]->type_requete = false;
1442 1435
 							$boucle = $boucles[$id];
1443
-							$x = (!$boucle->sql_serveur ? '' :
1444
-									($boucle->sql_serveur . ":")) .
1436
+							$x = (!$boucle->sql_serveur ? '' : ($boucle->sql_serveur.":")).
1445 1437
 								$type;
1446 1438
 							$msg = array(
1447 1439
 								'zbug_table_inconnue',
@@ -1527,13 +1519,13 @@  discard block
 block discarded – undo
1527 1519
 			if (
1528 1520
 				// fonction de boucle avec serveur & table
1529 1521
 				(!$serveur or
1530
-					((!function_exists($f = "boucle_" . $serveur . "_" . $table))
1531
-						and (!function_exists($f = $f . "_dist"))
1522
+					((!function_exists($f = "boucle_".$serveur."_".$table))
1523
+						and (!function_exists($f = $f."_dist"))
1532 1524
 					)
1533 1525
 				)
1534 1526
 				// fonction de boucle avec table
1535
-				and (!function_exists($f = "boucle_" . $table))
1536
-				and (!function_exists($f = $f . "_dist"))
1527
+				and (!function_exists($f = "boucle_".$table))
1528
+				and (!function_exists($f = $f."_dist"))
1537 1529
 			) {
1538 1530
 				// fonction de boucle standard 
1539 1531
 				if (!function_exists($f = 'boucle_DEFAUT')) {
@@ -1541,20 +1533,20 @@  discard block
 block discarded – undo
1541 1533
 				}
1542 1534
 			}
1543 1535
 
1544
-			$req = "\n\n\tstatic \$command = array();\n\t" .
1545
-				"static \$connect;\n\t" .
1546
-				"\$command['connect'] = \$connect = " .
1547
-				_q($boucle->sql_serveur) .
1548
-				";" .
1536
+			$req = "\n\n\tstatic \$command = array();\n\t".
1537
+				"static \$connect;\n\t".
1538
+				"\$command['connect'] = \$connect = ".
1539
+				_q($boucle->sql_serveur).
1540
+				";".
1549 1541
 				$f($id, $boucles);
1550 1542
 		} else {
1551 1543
 			$req = ("\n\treturn '';");
1552 1544
 		}
1553 1545
 
1554 1546
 		$boucles[$id]->return =
1555
-			"\n\nfunction BOUCLE" . strtr($id, "-", "_") . $nom .
1556
-			'(&$Cache, &$Pile, &$doublons, &$Numrows, $SP) {' .
1557
-			$req .
1547
+			"\n\nfunction BOUCLE".strtr($id, "-", "_").$nom.
1548
+			'(&$Cache, &$Pile, &$doublons, &$Numrows, $SP) {'.
1549
+			$req.
1558 1550
 			"\n}\n";
1559 1551
 	}
1560 1552
 
@@ -1564,7 +1556,7 @@  discard block
 block discarded – undo
1564 1556
 		return false;
1565 1557
 	}
1566 1558
 
1567
-	$principal = "\nfunction " . $nom . '($Cache, $Pile, $doublons = array(), $Numrows = array(), $SP = 0) {
1559
+	$principal = "\nfunction ".$nom.'($Cache, $Pile, $doublons = array(), $Numrows = array(), $SP = 0) {
1568 1560
 '
1569 1561
 		// reporter de maniere securisee les doublons inclus
1570 1562
 		. '
@@ -1572,15 +1564,15 @@  discard block
 block discarded – undo
1572 1564
 		$doublons = nettoyer_env_doublons($Pile[0]["doublons"]);
1573 1565
 
1574 1566
 	$connect = ' .
1575
-		_q($connect) . ';
1567
+		_q($connect).';
1576 1568
 	$page = ' .
1577 1569
 		// ATTENTION, le calcul de l'expression $corps affectera $Cache
1578 1570
 		// c'est pourquoi on l'affecte a la variable auxiliaire $page.
1579 1571
 		// avant de referencer $Cache
1580
-		$corps . ";
1572
+		$corps.";
1581 1573
 
1582 1574
 	return analyse_resultat_skel(" . var_export($nom, true)
1583
-		. ", \$Cache, \$page, " . var_export($sourcefile, true) . ");
1575
+		. ", \$Cache, \$page, ".var_export($sourcefile, true).");
1584 1576
 }";
1585 1577
 
1586 1578
 	$secondes = spip_timer('calcul_skel');
@@ -1594,10 +1586,10 @@  discard block
 block discarded – undo
1594 1586
 	$code->return = '
1595 1587
 //
1596 1588
 // Fonction principale du squelette ' .
1597
-		$sourcefile .
1598
-		($connect ? " pour $connect" : '') .
1599
-		(!CODE_COMMENTE ? '' : "\n// Temps de compilation total: $secondes") .
1600
-		"\n//\n" .
1589
+		$sourcefile.
1590
+		($connect ? " pour $connect" : '').
1591
+		(!CODE_COMMENTE ? '' : "\n// Temps de compilation total: $secondes").
1592
+		"\n//\n".
1601 1593
 		$principal;
1602 1594
 
1603 1595
 	$boucles[''] = $code;
@@ -1649,7 +1641,7 @@  discard block
 block discarded – undo
1649 1641
  **/
1650 1642
 function requeteur_data_dist(&$boucles, &$boucle, &$id) {
1651 1643
 	include_spip('iterateur/data');
1652
-	if ($h = charger_fonction($boucle->type_requete . '_to_array', 'inc', true)) {
1644
+	if ($h = charger_fonction($boucle->type_requete.'_to_array', 'inc', true)) {
1653 1645
 		$g = charger_fonction('data', 'iterateur');
1654 1646
 		$boucles[$id] = $g($boucle);
1655 1647
 		// from[0] stocke le type de data (rss, yql, ...)
Please login to merge, or discard this patch.
ecrire/lang/public_oc_ni.php 1 patch
Indentation   +110 added lines, -110 removed lines patch added patch discarded remove patch
@@ -4,118 +4,118 @@
 block discarded – undo
4 4
 // ** ne pas modifier le fichier **
5 5
 
6 6
 if (!defined('_ECRIRE_INC_VERSION')) {
7
-	return;
7
+    return;
8 8
 }
9 9
 
10 10
 $GLOBALS[$GLOBALS['idx_lang']] = array(
11 11
 
12
-	// A
13
-	'accueil_site' => 'Acuèlh',
14
-	'article' => 'Article',
15
-	'articles' => 'Articles',
16
-	'articles_auteur' => 'Articles d’aquel autor',
17
-	'articles_populaires' => 'Lu articles mai populars',
18
-	'articles_rubrique' => 'Articles d’aquela rubrica',
19
-	'aucun_article' => 'Li a minga d’article à-n-aquela adreça',
20
-	'aucun_auteur' => 'Li a minga d’autor à-n-aquela adreça',
21
-	'aucun_site' => 'Li a minga de site à-n-aquela adreça',
22
-	'aucune_breve' => 'Li a minga de brèva à-n-aquela adreça',
23
-	'aucune_rubrique' => 'Li a minga de rubrica à-n-aquela adreça',
24
-	'auteur' => 'Autor',
25
-	'autres' => 'Autres',
26
-	'autres_breves' => 'Autri brèvas',
27
-	'autres_groupes_mots_clefs' => 'Autres grops de mòts claus',
28
-	'autres_sites' => 'Autres sites',
29
-
30
-	// B
31
-	'bonjour' => 'Boanjorn',
32
-
33
-	// C
34
-	'commenter_site' => 'Comentar aqueu site',
35
-	'contact' => 'Contacte',
36
-	'copie_document_impossible' => 'Impossible de copiar lo document',
37
-
38
-	// D
39
-	'date' => 'Data',
40
-	'dernier_ajout' => 'Darrier ajust',
41
-	'dernieres_breves' => 'Darrieras brèvas',
42
-	'derniers_articles' => 'Darriers articles',
43
-	'derniers_commentaires' => 'Darriers comentaris',
44
-	'derniers_messages_forum' => 'Darriers messatges publicats dins lu fòros',
45
-
46
-	// E
47
-	'edition_mode_texte' => 'Edicion en mòde tèxt de',
48
-	'en_reponse' => 'En respoasta à:',
49
-	'en_resume' => 'En resumit',
50
-	'envoyer_message' => 'Mandar un messatge',
51
-	'espace_prive' => 'Espaci privat',
52
-
53
-	// F
54
-	'formats_acceptes' => 'Formats acceptats : @formats@.',
55
-
56
-	// H
57
-	'hierarchie_site' => 'Ierarquia dau sit',
58
-
59
-	// J
60
-	'jours' => 'jorns',
61
-
62
-	// L
63
-	'lien_connecter' => 'Si conectar',
64
-
65
-	// M
66
-	'meme_auteur' => 'Dau meme autor',
67
-	'meme_rubrique' => 'Dins la mema rubrica',
68
-	'memes_auteurs' => 'Dei memes autors',
69
-	'message' => 'Messatge',
70
-	'messages_forum' => 'Messatges',
71
-	'messages_recents' => 'Lu messatges de fòros mai recents',
72
-	'mots_clef' => 'Mòt-clau',
73
-	'mots_clefs' => 'Mòts-claus',
74
-	'mots_clefs_meme_groupe' => 'Mòts-claus dins lo meme grop',
75
-
76
-	// N
77
-	'navigation' => 'Navigacion',
78
-	'nom' => 'Nom',
79
-	'nouveautes' => 'Li novèutats',
80
-	'nouveautes_web' => 'Novèutats sus lo oèb',
81
-	'nouveaux_articles' => 'Articles nòus',
82
-	'nouvelles_breves' => 'Brèvas novèlas',
83
-
84
-	// P
85
-	'page_precedente' => 'pàgina anteriora',
86
-	'page_suivante' => 'pàgina seguenta',
87
-	'par_auteur' => 'da',
88
-	'participer_site' => 'Podètz participar à la vida d’aqueu sit e prepauar lu voastres articles en vos inscrivent çai sota. Receberètz un e-mail que v’indicarà lu voastres còdes per accedir à l’espaci privat dau sit.',
89
-	'plan_site' => 'Plan dau site',
90
-	'popularite' => 'Popularitat',
91
-	'poster_message' => 'Postar un messatge',
92
-	'proposer_site' => 'Podètz prepauar un site à ajustar en aquela rubrica:',
93
-
94
-	// R
95
-	'repondre_article' => 'Respoandre à-n-aquel article',
96
-	'repondre_breve' => 'Respoandre à-n-aquela brèva',
97
-	'resultats_recherche' => 'Resultats de la recèrca',
98
-	'retour_debut_forums' => 'Retorn au començament dei fòros',
99
-	'rubrique' => 'Rubrica',
100
-	'rubriques' => 'Rubricas',
101
-
102
-	// S
103
-	'signatures_petition' => 'Firmas',
104
-	'site_realise_avec_spip' => 'Sit realisat embé SPIP',
105
-	'sites_web' => 'Sits web',
106
-	'sous_rubriques' => 'Sosrubricas',
107
-	'spam' => 'Espam',
108
-	'suite' => 'seguida',
109
-	'sur_web' => 'Sus lo oèb',
110
-	'syndiquer_rubrique' => 'Sindicar aquela rubrica',
111
-	'syndiquer_site' => 'Sindicar tot lo sit',
112
-
113
-	// T
114
-	'texte_lettre_information' => 'Vequí la letra d’informacion dau sit',
115
-	'texte_lettre_information_2' => 'Aquela letra recensa li noveutas publicadi despí',
116
-
117
-	// V
118
-	'ver_imprimer' => 'Version d’estampar',
119
-	'voir_en_ligne' => 'Vejatz en linha',
120
-	'voir_squelette' => 'veire l’esqueleta d’aquela pàgina'
12
+    // A
13
+    'accueil_site' => 'Acuèlh',
14
+    'article' => 'Article',
15
+    'articles' => 'Articles',
16
+    'articles_auteur' => 'Articles d’aquel autor',
17
+    'articles_populaires' => 'Lu articles mai populars',
18
+    'articles_rubrique' => 'Articles d’aquela rubrica',
19
+    'aucun_article' => 'Li a minga d’article à-n-aquela adreça',
20
+    'aucun_auteur' => 'Li a minga d’autor à-n-aquela adreça',
21
+    'aucun_site' => 'Li a minga de site à-n-aquela adreça',
22
+    'aucune_breve' => 'Li a minga de brèva à-n-aquela adreça',
23
+    'aucune_rubrique' => 'Li a minga de rubrica à-n-aquela adreça',
24
+    'auteur' => 'Autor',
25
+    'autres' => 'Autres',
26
+    'autres_breves' => 'Autri brèvas',
27
+    'autres_groupes_mots_clefs' => 'Autres grops de mòts claus',
28
+    'autres_sites' => 'Autres sites',
29
+
30
+    // B
31
+    'bonjour' => 'Boanjorn',
32
+
33
+    // C
34
+    'commenter_site' => 'Comentar aqueu site',
35
+    'contact' => 'Contacte',
36
+    'copie_document_impossible' => 'Impossible de copiar lo document',
37
+
38
+    // D
39
+    'date' => 'Data',
40
+    'dernier_ajout' => 'Darrier ajust',
41
+    'dernieres_breves' => 'Darrieras brèvas',
42
+    'derniers_articles' => 'Darriers articles',
43
+    'derniers_commentaires' => 'Darriers comentaris',
44
+    'derniers_messages_forum' => 'Darriers messatges publicats dins lu fòros',
45
+
46
+    // E
47
+    'edition_mode_texte' => 'Edicion en mòde tèxt de',
48
+    'en_reponse' => 'En respoasta à:',
49
+    'en_resume' => 'En resumit',
50
+    'envoyer_message' => 'Mandar un messatge',
51
+    'espace_prive' => 'Espaci privat',
52
+
53
+    // F
54
+    'formats_acceptes' => 'Formats acceptats : @formats@.',
55
+
56
+    // H
57
+    'hierarchie_site' => 'Ierarquia dau sit',
58
+
59
+    // J
60
+    'jours' => 'jorns',
61
+
62
+    // L
63
+    'lien_connecter' => 'Si conectar',
64
+
65
+    // M
66
+    'meme_auteur' => 'Dau meme autor',
67
+    'meme_rubrique' => 'Dins la mema rubrica',
68
+    'memes_auteurs' => 'Dei memes autors',
69
+    'message' => 'Messatge',
70
+    'messages_forum' => 'Messatges',
71
+    'messages_recents' => 'Lu messatges de fòros mai recents',
72
+    'mots_clef' => 'Mòt-clau',
73
+    'mots_clefs' => 'Mòts-claus',
74
+    'mots_clefs_meme_groupe' => 'Mòts-claus dins lo meme grop',
75
+
76
+    // N
77
+    'navigation' => 'Navigacion',
78
+    'nom' => 'Nom',
79
+    'nouveautes' => 'Li novèutats',
80
+    'nouveautes_web' => 'Novèutats sus lo oèb',
81
+    'nouveaux_articles' => 'Articles nòus',
82
+    'nouvelles_breves' => 'Brèvas novèlas',
83
+
84
+    // P
85
+    'page_precedente' => 'pàgina anteriora',
86
+    'page_suivante' => 'pàgina seguenta',
87
+    'par_auteur' => 'da',
88
+    'participer_site' => 'Podètz participar à la vida d’aqueu sit e prepauar lu voastres articles en vos inscrivent çai sota. Receberètz un e-mail que v’indicarà lu voastres còdes per accedir à l’espaci privat dau sit.',
89
+    'plan_site' => 'Plan dau site',
90
+    'popularite' => 'Popularitat',
91
+    'poster_message' => 'Postar un messatge',
92
+    'proposer_site' => 'Podètz prepauar un site à ajustar en aquela rubrica:',
93
+
94
+    // R
95
+    'repondre_article' => 'Respoandre à-n-aquel article',
96
+    'repondre_breve' => 'Respoandre à-n-aquela brèva',
97
+    'resultats_recherche' => 'Resultats de la recèrca',
98
+    'retour_debut_forums' => 'Retorn au començament dei fòros',
99
+    'rubrique' => 'Rubrica',
100
+    'rubriques' => 'Rubricas',
101
+
102
+    // S
103
+    'signatures_petition' => 'Firmas',
104
+    'site_realise_avec_spip' => 'Sit realisat embé SPIP',
105
+    'sites_web' => 'Sits web',
106
+    'sous_rubriques' => 'Sosrubricas',
107
+    'spam' => 'Espam',
108
+    'suite' => 'seguida',
109
+    'sur_web' => 'Sus lo oèb',
110
+    'syndiquer_rubrique' => 'Sindicar aquela rubrica',
111
+    'syndiquer_site' => 'Sindicar tot lo sit',
112
+
113
+    // T
114
+    'texte_lettre_information' => 'Vequí la letra d’informacion dau sit',
115
+    'texte_lettre_information_2' => 'Aquela letra recensa li noveutas publicadi despí',
116
+
117
+    // V
118
+    'ver_imprimer' => 'Version d’estampar',
119
+    'voir_en_ligne' => 'Vejatz en linha',
120
+    'voir_squelette' => 'veire l’esqueleta d’aquela pàgina'
121 121
 );
Please login to merge, or discard this patch.
prive/formulaires/editer_liens.php 3 patches
Indentation   +345 added lines, -345 removed lines patch added patch discarded remove patch
@@ -15,7 +15,7 @@  discard block
 block discarded – undo
15 15
  * @package SPIP\Core\Formulaires
16 16
  **/
17 17
 if (!defined('_ECRIRE_INC_VERSION')) {
18
-	return;
18
+    return;
19 19
 }
20 20
 
21 21
 
@@ -35,25 +35,25 @@  discard block
 block discarded – undo
35 35
  *   ($table_source,$objet,$id_objet,$objet_lien)
36 36
  */
37 37
 function determine_source_lien_objet($a, $b, $c) {
38
-	$table_source = $objet_lien = $objet = $id_objet = null;
39
-	// auteurs, article, 23 :
40
-	// associer des auteurs à l'article 23, sur la table pivot spip_auteurs_liens
41
-	if (is_numeric($c) and !is_numeric($b)) {
42
-		$table_source = table_objet($a);
43
-		$objet_lien = objet_type($a);
44
-		$objet = objet_type($b);
45
-		$id_objet = $c;
46
-	}
47
-	// article, 23, auteurs
48
-	// associer des auteurs à l'article 23, sur la table pivot spip_articles_liens
49
-	if (is_numeric($b) and !is_numeric($c)) {
50
-		$table_source = table_objet($c);
51
-		$objet_lien = objet_type($a);
52
-		$objet = objet_type($a);
53
-		$id_objet = $b;
54
-	}
55
-
56
-	return array($table_source, $objet, $id_objet, $objet_lien);
38
+    $table_source = $objet_lien = $objet = $id_objet = null;
39
+    // auteurs, article, 23 :
40
+    // associer des auteurs à l'article 23, sur la table pivot spip_auteurs_liens
41
+    if (is_numeric($c) and !is_numeric($b)) {
42
+        $table_source = table_objet($a);
43
+        $objet_lien = objet_type($a);
44
+        $objet = objet_type($b);
45
+        $id_objet = $c;
46
+    }
47
+    // article, 23, auteurs
48
+    // associer des auteurs à l'article 23, sur la table pivot spip_articles_liens
49
+    if (is_numeric($b) and !is_numeric($c)) {
50
+        $table_source = table_objet($c);
51
+        $objet_lien = objet_type($a);
52
+        $objet = objet_type($a);
53
+        $id_objet = $b;
54
+    }
55
+
56
+    return array($table_source, $objet, $id_objet, $objet_lien);
57 57
 }
58 58
 
59 59
 /**
@@ -79,91 +79,91 @@  discard block
 block discarded – undo
79 79
  */
80 80
 function formulaires_editer_liens_charger_dist($a, $b, $c, $options = array()) {
81 81
 
82
-	// compat avec ancienne signature ou le 4eme argument est $editable
83
-	if (!is_array($options)) {
84
-		$options = array('editable' => $options);
85
-	} elseif (!isset($options['editable'])) {
86
-		$options['editable'] = true;
87
-	}
88
-
89
-	$editable = $options['editable'];
90
-
91
-	list($table_source, $objet, $id_objet, $objet_lien) = determine_source_lien_objet($a, $b, $c);
92
-	if (!$table_source or !$objet or !$objet_lien or !$id_objet) {
93
-		return false;
94
-	}
95
-
96
-	$objet_source = objet_type($table_source);
97
-	$table_sql_source = table_objet_sql($objet_source);
98
-
99
-	// verifier existence de la table xxx_liens
100
-	include_spip('action/editer_liens');
101
-	if (!objet_associable($objet_lien)) {
102
-		return false;
103
-	}
104
-
105
-	// L'éditabilité :) est définie par un test permanent (par exemple "associermots") ET le 4ème argument
106
-	include_spip('inc/autoriser');
107
-	$editable = ($editable and autoriser('associer' . $table_source, $objet, $id_objet)
108
-		and autoriser('modifier', $objet, $id_objet));
109
-
110
-	if (!$editable and !count(objet_trouver_liens(
111
-		array($objet_lien => '*'),
112
-		array(($objet_lien == $objet_source ? $objet : $objet_source) => $id_objet)
113
-	))) {
114
-		return false;
115
-	}
116
-
117
-	// squelettes de vue et de d'association
118
-	// ils sont différents si des rôles sont définis.
119
-	$skel_vue = $table_source . '_lies';
120
-	$skel_ajout = $table_source . '_associer';
121
-
122
-	// description des roles
123
-	include_spip('inc/roles');
124
-	if ($roles = roles_presents($objet_source, $objet)) {
125
-		// on demande de nouveaux squelettes en conséquence
126
-		$skel_vue = $table_source . '_roles_lies';
127
-		$skel_ajout = $table_source . '_roles_associer';
128
-	}
129
-
130
-	$oups = _request('_oups');
131
-	if (unserialize(base64_decode($oups))) {
132
-		// on est bon, rien a faire
133
-	}
134
-	elseif(unserialize($oups)) {
135
-		// il faut encoder
136
-		$oups = base64_encode($oups);
137
-	}
138
-	else {
139
-		$oups = '';
140
-	}
141
-	$valeurs = array(
142
-		'id' => "$table_source-$objet-$id_objet-$objet_lien", // identifiant unique pour les id du form
143
-		'_vue_liee' => $skel_vue,
144
-		'_vue_ajout' => $skel_ajout,
145
-		'_objet_lien' => $objet_lien,
146
-		'id_lien_ajoute' => _request('id_lien_ajoute'),
147
-		'objet' => $objet,
148
-		'id_objet' => $id_objet,
149
-		'objet_source' => $objet_source,
150
-		'table_source' => $table_source,
151
-		'recherche' => '',
152
-		'visible' => 0,
153
-		'ajouter_lien' => '',
154
-		'supprimer_lien' => '',
155
-		'qualifier_lien' => '',
156
-		'ordonner_lien' => '',
157
-		'desordonner_liens' => '',
158
-		'_roles' => $roles, # description des roles
159
-		'_oups' => $oups,
160
-		'editable' => $editable,
161
-	);
162
-
163
-	// les options non definies dans $valeurs sont passees telles quelles au formulaire html
164
-	$valeurs = array_merge($options, $valeurs);
165
-
166
-	return $valeurs;
82
+    // compat avec ancienne signature ou le 4eme argument est $editable
83
+    if (!is_array($options)) {
84
+        $options = array('editable' => $options);
85
+    } elseif (!isset($options['editable'])) {
86
+        $options['editable'] = true;
87
+    }
88
+
89
+    $editable = $options['editable'];
90
+
91
+    list($table_source, $objet, $id_objet, $objet_lien) = determine_source_lien_objet($a, $b, $c);
92
+    if (!$table_source or !$objet or !$objet_lien or !$id_objet) {
93
+        return false;
94
+    }
95
+
96
+    $objet_source = objet_type($table_source);
97
+    $table_sql_source = table_objet_sql($objet_source);
98
+
99
+    // verifier existence de la table xxx_liens
100
+    include_spip('action/editer_liens');
101
+    if (!objet_associable($objet_lien)) {
102
+        return false;
103
+    }
104
+
105
+    // L'éditabilité :) est définie par un test permanent (par exemple "associermots") ET le 4ème argument
106
+    include_spip('inc/autoriser');
107
+    $editable = ($editable and autoriser('associer' . $table_source, $objet, $id_objet)
108
+        and autoriser('modifier', $objet, $id_objet));
109
+
110
+    if (!$editable and !count(objet_trouver_liens(
111
+        array($objet_lien => '*'),
112
+        array(($objet_lien == $objet_source ? $objet : $objet_source) => $id_objet)
113
+    ))) {
114
+        return false;
115
+    }
116
+
117
+    // squelettes de vue et de d'association
118
+    // ils sont différents si des rôles sont définis.
119
+    $skel_vue = $table_source . '_lies';
120
+    $skel_ajout = $table_source . '_associer';
121
+
122
+    // description des roles
123
+    include_spip('inc/roles');
124
+    if ($roles = roles_presents($objet_source, $objet)) {
125
+        // on demande de nouveaux squelettes en conséquence
126
+        $skel_vue = $table_source . '_roles_lies';
127
+        $skel_ajout = $table_source . '_roles_associer';
128
+    }
129
+
130
+    $oups = _request('_oups');
131
+    if (unserialize(base64_decode($oups))) {
132
+        // on est bon, rien a faire
133
+    }
134
+    elseif(unserialize($oups)) {
135
+        // il faut encoder
136
+        $oups = base64_encode($oups);
137
+    }
138
+    else {
139
+        $oups = '';
140
+    }
141
+    $valeurs = array(
142
+        'id' => "$table_source-$objet-$id_objet-$objet_lien", // identifiant unique pour les id du form
143
+        '_vue_liee' => $skel_vue,
144
+        '_vue_ajout' => $skel_ajout,
145
+        '_objet_lien' => $objet_lien,
146
+        'id_lien_ajoute' => _request('id_lien_ajoute'),
147
+        'objet' => $objet,
148
+        'id_objet' => $id_objet,
149
+        'objet_source' => $objet_source,
150
+        'table_source' => $table_source,
151
+        'recherche' => '',
152
+        'visible' => 0,
153
+        'ajouter_lien' => '',
154
+        'supprimer_lien' => '',
155
+        'qualifier_lien' => '',
156
+        'ordonner_lien' => '',
157
+        'desordonner_liens' => '',
158
+        '_roles' => $roles, # description des roles
159
+        '_oups' => $oups,
160
+        'editable' => $editable,
161
+    );
162
+
163
+    // les options non definies dans $valeurs sont passees telles quelles au formulaire html
164
+    $valeurs = array_merge($options, $valeurs);
165
+
166
+    return $valeurs;
167 167
 }
168 168
 
169 169
 /**
@@ -207,161 +207,161 @@  discard block
 block discarded – undo
207 207
  * @return array
208 208
  */
209 209
 function formulaires_editer_liens_traiter_dist($a, $b, $c, $options = array()) {
210
-	// compat avec ancienne signature ou le 4eme argument est $editable
211
-	if (!is_array($options)) {
212
-		$options = array('editable' => $options);
213
-	} elseif (!isset($options['editable'])) {
214
-		$options['editable'] = true;
215
-	}
216
-
217
-	$editable = $options['editable'];
218
-
219
-	$res = array('editable' => $editable ? true : false);
220
-	list($table_source, $objet, $id_objet, $objet_lien) = determine_source_lien_objet($a, $b, $c);
221
-	if (!$table_source or !$objet or !$objet_lien) {
222
-		return $res;
223
-	}
224
-
225
-
226
-	if (_request('tout_voir')) {
227
-		set_request('recherche', '');
228
-	}
229
-
230
-	include_spip('inc/autoriser');
231
-	if (autoriser('modifier', $objet, $id_objet)) {
232
-		// annuler les suppressions du coup d'avant !
233
-		if (_request('annuler_oups')
234
-			and $oups = _request('_oups')
235
-			and $oups = base64_decode($oups)
236
-			and $oups = unserialize($oups)
237
-		) {
238
-			if ($oups_objets = charger_fonction("editer_liens_oups_{$table_source}_{$objet}_{$objet_lien}", 'action', true)) {
239
-				$oups_objets($oups);
240
-			} else {
241
-				$objet_source = objet_type($table_source);
242
-				include_spip('action/editer_liens');
243
-				foreach ($oups as $oup) {
244
-					if ($objet_lien == $objet_source) {
245
-						objet_associer(array($objet_source => $oup[$objet_source]), array($objet => $oup[$objet]), $oup);
246
-					} else {
247
-						objet_associer(array($objet => $oup[$objet]), array($objet_source => $oup[$objet_source]), $oup);
248
-					}
249
-				}
250
-			}
251
-			# oups ne persiste que pour la derniere action, si suppression
252
-			set_request('_oups');
253
-		}
254
-
255
-		$supprimer = _request('supprimer_lien');
256
-		$ajouter = _request('ajouter_lien');
257
-		$ordonner = _request('ordonner_lien');
258
-
259
-		if (_request('desordonner_liens')) {
260
-			include_spip('action/editer_liens');
261
-			objet_qualifier_liens(array($objet_lien => '*'), array($objet => $id_objet), array('rang_lien' => 0));
262
-		}
263
-
264
-		// il est possible de preciser dans une seule variable un remplacement :
265
-		// remplacer_lien[old][new]
266
-		if ($remplacer = _request('remplacer_lien')) {
267
-			foreach ($remplacer as $k => $v) {
268
-				if ($old = lien_verifier_action($k, '')) {
269
-					foreach (is_array($v) ? $v : array($v) as $kn => $vn) {
270
-						if ($new = lien_verifier_action($kn, $vn)) {
271
-							$supprimer[$old] = 'x';
272
-							$ajouter[$new] = '+';
273
-						}
274
-					}
275
-				}
276
-			}
277
-		}
278
-
279
-		if ($supprimer) {
280
-			if ($supprimer_objets = charger_fonction(
281
-				"editer_liens_supprimer_{$table_source}_{$objet}_{$objet_lien}",
282
-				'action',
283
-				true
284
-			)) {
285
-				$oups = $supprimer_objets($supprimer);
286
-			} else {
287
-				include_spip('action/editer_liens');
288
-				$oups = array();
289
-
290
-				foreach ($supprimer as $k => $v) {
291
-					if ($lien = lien_verifier_action($k, $v)) {
292
-						$lien = explode('-', $lien);
293
-						list($objet_source, $ids, $objet_lie, $idl, $role) = array_pad($lien, 5, null);
294
-						// appliquer une condition sur le rôle si défini ('*' pour tous les roles)
295
-						$cond = (!is_null($role) ? array('role' => $role) : array());
296
-						if ($objet_lien == $objet_source) {
297
-							$oups = array_merge(
298
-								$oups,
299
-								objet_trouver_liens(array($objet_source => $ids), array($objet_lie => $idl), $cond)
300
-							);
301
-							objet_dissocier(array($objet_source => $ids), array($objet_lie => $idl), $cond);
302
-						} else {
303
-							$oups = array_merge(
304
-								$oups,
305
-								objet_trouver_liens(array($objet_lie => $idl), array($objet_source => $ids), $cond)
306
-							);
307
-							objet_dissocier(array($objet_lie => $idl), array($objet_source => $ids), $cond);
308
-						}
309
-					}
310
-				}
311
-			}
312
-			set_request('_oups', $oups ? base64_encode(serialize($oups)) : null);
313
-		}
314
-
315
-		if ($ajouter) {
316
-			if ($ajouter_objets = charger_fonction("editer_liens_ajouter_{$table_source}_{$objet}_{$objet_lien}", 'action', true)
317
-			) {
318
-				$ajout_ok = $ajouter_objets($ajouter);
319
-			} else {
320
-				$ajout_ok = false;
321
-				include_spip('action/editer_liens');
322
-				foreach ($ajouter as $k => $v) {
323
-					if ($lien = lien_verifier_action($k, $v)) {
324
-						$ajout_ok = true;
325
-						list($objet1, $ids, $objet2, $idl) = explode('-', $lien);
326
-						$qualifs = lien_retrouver_qualif($objet_lien, $lien);
327
-						if ($objet_lien == $objet1) {
328
-							lien_ajouter_liaisons($objet1, $ids, $objet2, $idl, $qualifs);
329
-						} else {
330
-							lien_ajouter_liaisons($objet2, $idl, $objet1, $ids, $qualifs);
331
-						}
332
-						set_request('id_lien_ajoute', $ids);
333
-					}
334
-				}
335
-			}
336
-			# oups ne persiste que pour la derniere action, si suppression
337
-			# une suppression suivie d'un ajout dans le meme hit est un remplacement
338
-			# non annulable !
339
-			if ($ajout_ok) {
340
-				set_request('_oups');
341
-			}
342
-		}
343
-
344
-		if ($ordonner) {
345
-			include_spip('action/editer_liens');
346
-			foreach ($ordonner as $k => $rang_lien) {
347
-				if ($lien = lien_verifier_action($k, '')) {
348
-					list($objet1, $ids, $objet2, $idl) = explode('-', $lien);
349
-					$qualif = array('rang_lien' => $rang_lien);
350
-
351
-					if ($objet_lien == $objet1) {
352
-						objet_qualifier_liens(array($objet1 => $ids), array($objet2 => $idl), $qualif);
353
-					} else {
354
-						objet_qualifier_liens(array($objet2 => $idl), array($objet1 => $ids), $qualif);
355
-					}
356
-					set_request('id_lien_ajoute', $ids);
357
-					set_request('_oups');
358
-				}
359
-			}
360
-		}
361
-	}
362
-
363
-
364
-	return $res;
210
+    // compat avec ancienne signature ou le 4eme argument est $editable
211
+    if (!is_array($options)) {
212
+        $options = array('editable' => $options);
213
+    } elseif (!isset($options['editable'])) {
214
+        $options['editable'] = true;
215
+    }
216
+
217
+    $editable = $options['editable'];
218
+
219
+    $res = array('editable' => $editable ? true : false);
220
+    list($table_source, $objet, $id_objet, $objet_lien) = determine_source_lien_objet($a, $b, $c);
221
+    if (!$table_source or !$objet or !$objet_lien) {
222
+        return $res;
223
+    }
224
+
225
+
226
+    if (_request('tout_voir')) {
227
+        set_request('recherche', '');
228
+    }
229
+
230
+    include_spip('inc/autoriser');
231
+    if (autoriser('modifier', $objet, $id_objet)) {
232
+        // annuler les suppressions du coup d'avant !
233
+        if (_request('annuler_oups')
234
+            and $oups = _request('_oups')
235
+            and $oups = base64_decode($oups)
236
+            and $oups = unserialize($oups)
237
+        ) {
238
+            if ($oups_objets = charger_fonction("editer_liens_oups_{$table_source}_{$objet}_{$objet_lien}", 'action', true)) {
239
+                $oups_objets($oups);
240
+            } else {
241
+                $objet_source = objet_type($table_source);
242
+                include_spip('action/editer_liens');
243
+                foreach ($oups as $oup) {
244
+                    if ($objet_lien == $objet_source) {
245
+                        objet_associer(array($objet_source => $oup[$objet_source]), array($objet => $oup[$objet]), $oup);
246
+                    } else {
247
+                        objet_associer(array($objet => $oup[$objet]), array($objet_source => $oup[$objet_source]), $oup);
248
+                    }
249
+                }
250
+            }
251
+            # oups ne persiste que pour la derniere action, si suppression
252
+            set_request('_oups');
253
+        }
254
+
255
+        $supprimer = _request('supprimer_lien');
256
+        $ajouter = _request('ajouter_lien');
257
+        $ordonner = _request('ordonner_lien');
258
+
259
+        if (_request('desordonner_liens')) {
260
+            include_spip('action/editer_liens');
261
+            objet_qualifier_liens(array($objet_lien => '*'), array($objet => $id_objet), array('rang_lien' => 0));
262
+        }
263
+
264
+        // il est possible de preciser dans une seule variable un remplacement :
265
+        // remplacer_lien[old][new]
266
+        if ($remplacer = _request('remplacer_lien')) {
267
+            foreach ($remplacer as $k => $v) {
268
+                if ($old = lien_verifier_action($k, '')) {
269
+                    foreach (is_array($v) ? $v : array($v) as $kn => $vn) {
270
+                        if ($new = lien_verifier_action($kn, $vn)) {
271
+                            $supprimer[$old] = 'x';
272
+                            $ajouter[$new] = '+';
273
+                        }
274
+                    }
275
+                }
276
+            }
277
+        }
278
+
279
+        if ($supprimer) {
280
+            if ($supprimer_objets = charger_fonction(
281
+                "editer_liens_supprimer_{$table_source}_{$objet}_{$objet_lien}",
282
+                'action',
283
+                true
284
+            )) {
285
+                $oups = $supprimer_objets($supprimer);
286
+            } else {
287
+                include_spip('action/editer_liens');
288
+                $oups = array();
289
+
290
+                foreach ($supprimer as $k => $v) {
291
+                    if ($lien = lien_verifier_action($k, $v)) {
292
+                        $lien = explode('-', $lien);
293
+                        list($objet_source, $ids, $objet_lie, $idl, $role) = array_pad($lien, 5, null);
294
+                        // appliquer une condition sur le rôle si défini ('*' pour tous les roles)
295
+                        $cond = (!is_null($role) ? array('role' => $role) : array());
296
+                        if ($objet_lien == $objet_source) {
297
+                            $oups = array_merge(
298
+                                $oups,
299
+                                objet_trouver_liens(array($objet_source => $ids), array($objet_lie => $idl), $cond)
300
+                            );
301
+                            objet_dissocier(array($objet_source => $ids), array($objet_lie => $idl), $cond);
302
+                        } else {
303
+                            $oups = array_merge(
304
+                                $oups,
305
+                                objet_trouver_liens(array($objet_lie => $idl), array($objet_source => $ids), $cond)
306
+                            );
307
+                            objet_dissocier(array($objet_lie => $idl), array($objet_source => $ids), $cond);
308
+                        }
309
+                    }
310
+                }
311
+            }
312
+            set_request('_oups', $oups ? base64_encode(serialize($oups)) : null);
313
+        }
314
+
315
+        if ($ajouter) {
316
+            if ($ajouter_objets = charger_fonction("editer_liens_ajouter_{$table_source}_{$objet}_{$objet_lien}", 'action', true)
317
+            ) {
318
+                $ajout_ok = $ajouter_objets($ajouter);
319
+            } else {
320
+                $ajout_ok = false;
321
+                include_spip('action/editer_liens');
322
+                foreach ($ajouter as $k => $v) {
323
+                    if ($lien = lien_verifier_action($k, $v)) {
324
+                        $ajout_ok = true;
325
+                        list($objet1, $ids, $objet2, $idl) = explode('-', $lien);
326
+                        $qualifs = lien_retrouver_qualif($objet_lien, $lien);
327
+                        if ($objet_lien == $objet1) {
328
+                            lien_ajouter_liaisons($objet1, $ids, $objet2, $idl, $qualifs);
329
+                        } else {
330
+                            lien_ajouter_liaisons($objet2, $idl, $objet1, $ids, $qualifs);
331
+                        }
332
+                        set_request('id_lien_ajoute', $ids);
333
+                    }
334
+                }
335
+            }
336
+            # oups ne persiste que pour la derniere action, si suppression
337
+            # une suppression suivie d'un ajout dans le meme hit est un remplacement
338
+            # non annulable !
339
+            if ($ajout_ok) {
340
+                set_request('_oups');
341
+            }
342
+        }
343
+
344
+        if ($ordonner) {
345
+            include_spip('action/editer_liens');
346
+            foreach ($ordonner as $k => $rang_lien) {
347
+                if ($lien = lien_verifier_action($k, '')) {
348
+                    list($objet1, $ids, $objet2, $idl) = explode('-', $lien);
349
+                    $qualif = array('rang_lien' => $rang_lien);
350
+
351
+                    if ($objet_lien == $objet1) {
352
+                        objet_qualifier_liens(array($objet1 => $ids), array($objet2 => $idl), $qualif);
353
+                    } else {
354
+                        objet_qualifier_liens(array($objet2 => $idl), array($objet1 => $ids), $qualif);
355
+                    }
356
+                    set_request('id_lien_ajoute', $ids);
357
+                    set_request('_oups');
358
+                }
359
+            }
360
+        }
361
+    }
362
+
363
+
364
+    return $res;
365 365
 }
366 366
 
367 367
 
@@ -384,24 +384,24 @@  discard block
 block discarded – undo
384 384
  * @return string Action demandée si trouvée, sinon ''
385 385
  */
386 386
 function lien_verifier_action($k, $v) {
387
-	$action = '';
388
-	if (preg_match(',^\w+-[\w*]+-[\w*]+-[\w*]+(-[\w*])?,', $k)) {
389
-		$action = $k;
390
-	}
391
-	if (preg_match(',^\w+-[\w*]+-[\w*]+-[\w*]+(-[\w*])?,', $v)) {
392
-		if (is_numeric($k)) {
393
-			$action = $v;
394
-		}
395
-		if (_request($k)) {
396
-			$action = $v;
397
-		}
398
-	}
399
-	// ajout un role null fictif (plus pratique) si pas défini
400
-	if ($action and count(explode('-', $action)) == 4) {
401
-		$action .= '-';
402
-	}
403
-
404
-	return $action;
387
+    $action = '';
388
+    if (preg_match(',^\w+-[\w*]+-[\w*]+-[\w*]+(-[\w*])?,', $k)) {
389
+        $action = $k;
390
+    }
391
+    if (preg_match(',^\w+-[\w*]+-[\w*]+-[\w*]+(-[\w*])?,', $v)) {
392
+        if (is_numeric($k)) {
393
+            $action = $v;
394
+        }
395
+        if (_request($k)) {
396
+            $action = $v;
397
+        }
398
+    }
399
+    // ajout un role null fictif (plus pratique) si pas défini
400
+    if ($action and count(explode('-', $action)) == 4) {
401
+        $action .= '-';
402
+    }
403
+
404
+    return $action;
405 405
 }
406 406
 
407 407
 
@@ -417,65 +417,65 @@  discard block
 block discarded – undo
417 417
  *   Liste des qualifs pour chaque lien. Tableau vide s'il n'y en a pas.
418 418
  **/
419 419
 function lien_retrouver_qualif($objet_lien, $lien) {
420
-	// un role est défini dans la liaison
421
-	$defs = explode('-', $lien);
422
-	list($objet1, , $objet2, , $role) = array_pad($defs, 5, null);
423
-	if ($objet_lien == $objet1) {
424
-		$colonne_role = roles_colonne($objet1, $objet2);
425
-	} else {
426
-		$colonne_role = roles_colonne($objet2, $objet1);
427
-	}
428
-
429
-	// cas ou le role est defini en 5e argument de l'action sur le lien (suppression, ajout rapide sans autre attribut)
430
-	if ($role) {
431
-		return array(
432
-			// un seul lien avec ce role
433
-			array($colonne_role => $role)
434
-		);
435
-	}
436
-
437
-	// retrouver les rôles postés pour cette liaison, s'il y en a.
438
-	$qualifier_lien = _request('qualifier_lien');
439
-	if (!$qualifier_lien or !is_array($qualifier_lien)) {
440
-		return array();
441
-	}
442
-
443
-	// pas avec l'action complete (incluant le role)
444
-	$qualif = array();
445
-	if ((!isset($qualifier_lien[$lien]) or !$qualif = $qualifier_lien[$lien])
446
-		and count($defs) == 5
447
-	) {
448
-		// on tente avec l'action sans le role
449
-		array_pop($defs);
450
-		$lien = implode('-', $defs);
451
-		if (!isset($qualifier_lien[$lien]) or !$qualif = $qualifier_lien[$lien]) {
452
-			$qualif = array();
453
-		}
454
-	}
455
-
456
-	// $qualif de la forme array(role=>array(...),valeur=>array(...),....)
457
-	// on le reforme en array(array(role=>..,valeur=>..,..),array(role=>..,valeur=>..,..),...)
458
-	$qualifs = array();
459
-	while (count($qualif)) {
460
-		$q = array();
461
-		foreach ($qualif as $att => $values) {
462
-			if (is_array($values)) {
463
-				$q[$att] = array_shift($qualif[$att]);
464
-				if (!count($qualif[$att])) {
465
-					unset($qualif[$att]);
466
-				}
467
-			} else {
468
-				$q[$att] = $values;
469
-				unset($qualif[$att]);
470
-			}
471
-		}
472
-		// pas de rôle vide
473
-		if (!$colonne_role or !isset($q[$colonne_role]) or $q[$colonne_role]) {
474
-			$qualifs[] = $q;
475
-		}
476
-	}
477
-
478
-	return $qualifs;
420
+    // un role est défini dans la liaison
421
+    $defs = explode('-', $lien);
422
+    list($objet1, , $objet2, , $role) = array_pad($defs, 5, null);
423
+    if ($objet_lien == $objet1) {
424
+        $colonne_role = roles_colonne($objet1, $objet2);
425
+    } else {
426
+        $colonne_role = roles_colonne($objet2, $objet1);
427
+    }
428
+
429
+    // cas ou le role est defini en 5e argument de l'action sur le lien (suppression, ajout rapide sans autre attribut)
430
+    if ($role) {
431
+        return array(
432
+            // un seul lien avec ce role
433
+            array($colonne_role => $role)
434
+        );
435
+    }
436
+
437
+    // retrouver les rôles postés pour cette liaison, s'il y en a.
438
+    $qualifier_lien = _request('qualifier_lien');
439
+    if (!$qualifier_lien or !is_array($qualifier_lien)) {
440
+        return array();
441
+    }
442
+
443
+    // pas avec l'action complete (incluant le role)
444
+    $qualif = array();
445
+    if ((!isset($qualifier_lien[$lien]) or !$qualif = $qualifier_lien[$lien])
446
+        and count($defs) == 5
447
+    ) {
448
+        // on tente avec l'action sans le role
449
+        array_pop($defs);
450
+        $lien = implode('-', $defs);
451
+        if (!isset($qualifier_lien[$lien]) or !$qualif = $qualifier_lien[$lien]) {
452
+            $qualif = array();
453
+        }
454
+    }
455
+
456
+    // $qualif de la forme array(role=>array(...),valeur=>array(...),....)
457
+    // on le reforme en array(array(role=>..,valeur=>..,..),array(role=>..,valeur=>..,..),...)
458
+    $qualifs = array();
459
+    while (count($qualif)) {
460
+        $q = array();
461
+        foreach ($qualif as $att => $values) {
462
+            if (is_array($values)) {
463
+                $q[$att] = array_shift($qualif[$att]);
464
+                if (!count($qualif[$att])) {
465
+                    unset($qualif[$att]);
466
+                }
467
+            } else {
468
+                $q[$att] = $values;
469
+                unset($qualif[$att]);
470
+            }
471
+        }
472
+        // pas de rôle vide
473
+        if (!$colonne_role or !isset($q[$colonne_role]) or $q[$colonne_role]) {
474
+            $qualifs[] = $q;
475
+        }
476
+    }
477
+
478
+    return $qualifs;
479 479
 }
480 480
 
481 481
 /**
@@ -494,12 +494,12 @@  discard block
 block discarded – undo
494 494
  **/
495 495
 function lien_ajouter_liaisons($objet_source, $ids, $objet_lien, $idl, $qualifs) {
496 496
 
497
-	// retrouver la colonne de roles s'il y en a a lier
498
-	if (is_array($qualifs) and count($qualifs)) {
499
-		foreach ($qualifs as $qualif) {
500
-			objet_associer(array($objet_source => $ids), array($objet_lien => $idl), $qualif);
501
-		}
502
-	} else {
503
-		objet_associer(array($objet_source => $ids), array($objet_lien => $idl));
504
-	}
497
+    // retrouver la colonne de roles s'il y en a a lier
498
+    if (is_array($qualifs) and count($qualifs)) {
499
+        foreach ($qualifs as $qualif) {
500
+            objet_associer(array($objet_source => $ids), array($objet_lien => $idl), $qualif);
501
+        }
502
+    } else {
503
+        objet_associer(array($objet_source => $ids), array($objet_lien => $idl));
504
+    }
505 505
 }
Please login to merge, or discard this patch.
Spacing   +7 added lines, -7 removed lines patch added patch discarded remove patch
@@ -104,7 +104,7 @@  discard block
 block discarded – undo
104 104
 
105 105
 	// L'éditabilité :) est définie par un test permanent (par exemple "associermots") ET le 4ème argument
106 106
 	include_spip('inc/autoriser');
107
-	$editable = ($editable and autoriser('associer' . $table_source, $objet, $id_objet)
107
+	$editable = ($editable and autoriser('associer'.$table_source, $objet, $id_objet)
108 108
 		and autoriser('modifier', $objet, $id_objet));
109 109
 
110 110
 	if (!$editable and !count(objet_trouver_liens(
@@ -116,22 +116,22 @@  discard block
 block discarded – undo
116 116
 
117 117
 	// squelettes de vue et de d'association
118 118
 	// ils sont différents si des rôles sont définis.
119
-	$skel_vue = $table_source . '_lies';
120
-	$skel_ajout = $table_source . '_associer';
119
+	$skel_vue = $table_source.'_lies';
120
+	$skel_ajout = $table_source.'_associer';
121 121
 
122 122
 	// description des roles
123 123
 	include_spip('inc/roles');
124 124
 	if ($roles = roles_presents($objet_source, $objet)) {
125 125
 		// on demande de nouveaux squelettes en conséquence
126
-		$skel_vue = $table_source . '_roles_lies';
127
-		$skel_ajout = $table_source . '_roles_associer';
126
+		$skel_vue = $table_source.'_roles_lies';
127
+		$skel_ajout = $table_source.'_roles_associer';
128 128
 	}
129 129
 
130 130
 	$oups = _request('_oups');
131 131
 	if (unserialize(base64_decode($oups))) {
132 132
 		// on est bon, rien a faire
133 133
 	}
134
-	elseif(unserialize($oups)) {
134
+	elseif (unserialize($oups)) {
135 135
 		// il faut encoder
136 136
 		$oups = base64_encode($oups);
137 137
 	}
@@ -419,7 +419,7 @@  discard block
 block discarded – undo
419 419
 function lien_retrouver_qualif($objet_lien, $lien) {
420 420
 	// un role est défini dans la liaison
421 421
 	$defs = explode('-', $lien);
422
-	list($objet1, , $objet2, , $role) = array_pad($defs, 5, null);
422
+	list($objet1,, $objet2,, $role) = array_pad($defs, 5, null);
423 423
 	if ($objet_lien == $objet1) {
424 424
 		$colonne_role = roles_colonne($objet1, $objet2);
425 425
 	} else {
Please login to merge, or discard this patch.
Braces   +2 added lines, -4 removed lines patch added patch discarded remove patch
@@ -130,12 +130,10 @@
 block discarded – undo
130 130
 	$oups = _request('_oups');
131 131
 	if (unserialize(base64_decode($oups))) {
132 132
 		// on est bon, rien a faire
133
-	}
134
-	elseif(unserialize($oups)) {
133
+	} elseif(unserialize($oups)) {
135 134
 		// il faut encoder
136 135
 		$oups = base64_encode($oups);
137
-	}
138
-	else {
136
+	} else {
139 137
 		$oups = '';
140 138
 	}
141 139
 	$valeurs = array(
Please login to merge, or discard this patch.
prive/formulaires/traduire.php 2 patches
Indentation   +110 added lines, -110 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('inc/actions');
@@ -39,64 +39,64 @@  discard block
 block discarded – undo
39 39
  *     Contexte à transmettre au squelette du formulaire sinon
40 40
  */
41 41
 function formulaires_traduire_charger_dist($objet, $id_objet, $retour = '', $traduire = true) {
42
-	if (!intval($id_objet)) {
43
-		return false;
44
-	}
45
-	$valeurs = formulaires_editer_objet_charger($objet, $id_objet, null, 0, $retour, '');
46
-	// verifier que l'objet indique possede bien des champs id_trad et lang
47
-	// attention, charger renomme lang => langue pour ne pas perturber la langue d'affichage du squelette
48
-	if (!isset($valeurs['langue'])) {
49
-		return false;
50
-	}
51
-
52
-	$valeurs['editable'] = autoriser('changerlangue', $objet, $id_objet);
53
-	$valeurs['_langue'] = '';
54
-	$langue_parent = '';
55
-	$id_parent = '';
56
-	if (isset($valeurs['id_rubrique'])) {
57
-		$id_parent = $valeurs['id_rubrique'];
58
-	}
59
-	if (isset($valeurs['id_parent'])) {
60
-		$id_parent = $valeurs['id_parent'];
61
-	}
62
-	if ($id_parent) {
63
-		$langue_parent = sql_getfetsel('lang', 'spip_rubriques', 'id_rubrique=' . intval($id_parent));
64
-	}
65
-
66
-	if (!$langue_parent) {
67
-		$langue_parent = $GLOBALS['meta']['langue_site'];
68
-	}
69
-	if ($valeurs['editable']
70
-		and in_array(table_objet_sql($objet), explode(',', $GLOBALS['meta']['multi_objets']))
71
-	) {
72
-		$valeurs['_langue'] = $valeurs['langue'];
73
-	}
74
-	$valeurs['langue_parent'] = $langue_parent;
75
-
76
-	$valeurs['_objet'] = $objet;
77
-	$valeurs['_id_objet'] = $id_objet;
78
-	$valeurs['changer_lang'] = '';
79
-
80
-
81
-	$valeurs['_traduisible'] = autoriser('changertraduction', $objet, $id_objet);
82
-	$valeurs['_traduire'] = '';
83
-	if (isset($valeurs['id_trad'])) {
84
-		$valeurs['_traduire'] = ($traduire ? ' ' : '');
85
-		$valeurs['_vue_traductions'] = 'prive/objets/liste/' . (trouver_fond(
86
-			$f = table_objet($objet) . '-trad',
87
-			'prive/objets/liste'
88
-		) ? $f : 'objets-trad');
89
-		// pour afficher la liste des trad sur la base de l'id_trad en base
90
-		// independamment d'une saisie en cours sur id_trad
91
-		$valeurs['_lister_id_trad'] = $valeurs['id_trad'];
92
-		$valeurs['_id_parent'] = $id_parent;
93
-	}
94
-
95
-	$valeurs['_saisie_en_cours'] = (!_request('annuler') and (_request('changer_lang') !== null
96
-		or _request('changer_id_trad') !== null));
97
-	$valeurs['_pipeline'] = array('traduire', array('type' => $objet, 'id' => $id_objet));
98
-
99
-	return $valeurs;
42
+    if (!intval($id_objet)) {
43
+        return false;
44
+    }
45
+    $valeurs = formulaires_editer_objet_charger($objet, $id_objet, null, 0, $retour, '');
46
+    // verifier que l'objet indique possede bien des champs id_trad et lang
47
+    // attention, charger renomme lang => langue pour ne pas perturber la langue d'affichage du squelette
48
+    if (!isset($valeurs['langue'])) {
49
+        return false;
50
+    }
51
+
52
+    $valeurs['editable'] = autoriser('changerlangue', $objet, $id_objet);
53
+    $valeurs['_langue'] = '';
54
+    $langue_parent = '';
55
+    $id_parent = '';
56
+    if (isset($valeurs['id_rubrique'])) {
57
+        $id_parent = $valeurs['id_rubrique'];
58
+    }
59
+    if (isset($valeurs['id_parent'])) {
60
+        $id_parent = $valeurs['id_parent'];
61
+    }
62
+    if ($id_parent) {
63
+        $langue_parent = sql_getfetsel('lang', 'spip_rubriques', 'id_rubrique=' . intval($id_parent));
64
+    }
65
+
66
+    if (!$langue_parent) {
67
+        $langue_parent = $GLOBALS['meta']['langue_site'];
68
+    }
69
+    if ($valeurs['editable']
70
+        and in_array(table_objet_sql($objet), explode(',', $GLOBALS['meta']['multi_objets']))
71
+    ) {
72
+        $valeurs['_langue'] = $valeurs['langue'];
73
+    }
74
+    $valeurs['langue_parent'] = $langue_parent;
75
+
76
+    $valeurs['_objet'] = $objet;
77
+    $valeurs['_id_objet'] = $id_objet;
78
+    $valeurs['changer_lang'] = '';
79
+
80
+
81
+    $valeurs['_traduisible'] = autoriser('changertraduction', $objet, $id_objet);
82
+    $valeurs['_traduire'] = '';
83
+    if (isset($valeurs['id_trad'])) {
84
+        $valeurs['_traduire'] = ($traduire ? ' ' : '');
85
+        $valeurs['_vue_traductions'] = 'prive/objets/liste/' . (trouver_fond(
86
+            $f = table_objet($objet) . '-trad',
87
+            'prive/objets/liste'
88
+        ) ? $f : 'objets-trad');
89
+        // pour afficher la liste des trad sur la base de l'id_trad en base
90
+        // independamment d'une saisie en cours sur id_trad
91
+        $valeurs['_lister_id_trad'] = $valeurs['id_trad'];
92
+        $valeurs['_id_parent'] = $id_parent;
93
+    }
94
+
95
+    $valeurs['_saisie_en_cours'] = (!_request('annuler') and (_request('changer_lang') !== null
96
+        or _request('changer_id_trad') !== null));
97
+    $valeurs['_pipeline'] = array('traduire', array('type' => $objet, 'id' => $id_objet));
98
+
99
+    return $valeurs;
100 100
 }
101 101
 
102 102
 /**
@@ -114,30 +114,30 @@  discard block
 block discarded – undo
114 114
  *     Erreurs des saisies
115 115
  */
116 116
 function formulaires_traduire_verifier_dist($objet, $id_objet, $retour = '', $traduire = true) {
117
-	$erreurs = array();
118
-
119
-	if (null !== _request('changer_lang')) {
120
-		$erreurs = formulaires_editer_objet_verifier($objet, $id_objet, array('changer_lang'));
121
-	}
122
-
123
-	// si id_trad fourni, verifier que cela ne conflicte pas avec un id_trad existant
124
-	// et que ca reference bien un objet existant
125
-	if ($id_trad = _request('id_trad')) {
126
-		$table_objet_sql = table_objet_sql($objet);
127
-		$_id_table_objet = id_table_objet($objet);
128
-		if (sql_getfetsel(
129
-			'id_trad',
130
-			$table_objet_sql,
131
-			"$_id_table_objet=" . intval($id_objet)
132
-		)) {
133
-			// ne devrait jamais arriver sauf concurence de saisie
134
-			$erreurs['id_trad'] = _L('Une traduction est deja referencee');
135
-		} elseif (!sql_getfetsel($_id_table_objet, $table_objet_sql, "$_id_table_objet=" . intval($id_trad))) {
136
-			$erreurs['id_trad'] = _L('Indiquez un contenu existant');
137
-		}
138
-	}
139
-
140
-	return $erreurs;
117
+    $erreurs = array();
118
+
119
+    if (null !== _request('changer_lang')) {
120
+        $erreurs = formulaires_editer_objet_verifier($objet, $id_objet, array('changer_lang'));
121
+    }
122
+
123
+    // si id_trad fourni, verifier que cela ne conflicte pas avec un id_trad existant
124
+    // et que ca reference bien un objet existant
125
+    if ($id_trad = _request('id_trad')) {
126
+        $table_objet_sql = table_objet_sql($objet);
127
+        $_id_table_objet = id_table_objet($objet);
128
+        if (sql_getfetsel(
129
+            'id_trad',
130
+            $table_objet_sql,
131
+            "$_id_table_objet=" . intval($id_objet)
132
+        )) {
133
+            // ne devrait jamais arriver sauf concurence de saisie
134
+            $erreurs['id_trad'] = _L('Une traduction est deja referencee');
135
+        } elseif (!sql_getfetsel($_id_table_objet, $table_objet_sql, "$_id_table_objet=" . intval($id_trad))) {
136
+            $erreurs['id_trad'] = _L('Indiquez un contenu existant');
137
+        }
138
+    }
139
+
140
+    return $erreurs;
141 141
 }
142 142
 
143 143
 
@@ -156,31 +156,31 @@  discard block
 block discarded – undo
156 156
  *     Retour des traitements
157 157
  */
158 158
 function formulaires_traduire_traiter_dist($objet, $id_objet, $retour = '', $traduire = true) {
159
-	$res = array();
160
-	if (!_request('annuler') and autoriser('changerlangue', $objet, $id_objet)) {
161
-		// action/editer_xxx doit traiter la modif de changer_lang
162
-		$res = formulaires_editer_objet_traiter($objet, $id_objet, 0, 0, $retour);
163
-	}
164
-	if (!_request('annuler') and autoriser('changertraduction', $objet, $id_objet)) {
165
-		if ($id_trad = _request('id_trad') or _request('supprimer_trad')) {
166
-			$referencer_traduction = charger_fonction('referencer_traduction', 'action');
167
-			$referencer_traduction($objet, $id_objet, intval($id_trad)); // 0 si supprimer_trad
168
-		} elseif ($new_id_trad = _request('changer_reference_trad')
169
-			and $new_id_trad = array_keys($new_id_trad)
170
-			and $new_id_trad = reset($new_id_trad)
171
-		) {
172
-			$table_objet_sql = table_objet_sql($objet);
173
-			$_id_table_objet = id_table_objet($objet);
174
-			if ($id_trad = sql_getfetsel('id_trad', $table_objet_sql, "$_id_table_objet=" . intval($id_objet))) {
175
-				$referencer_traduction = charger_fonction('referencer_traduction', 'action');
176
-				$referencer_traduction($objet, $id_trad, $new_id_trad);
177
-			}
178
-		}
179
-	}
180
-	$res['editable'] = true;
181
-	if (!isset($res['message_erreur'])) {
182
-		set_request('annuler', 'annuler');
183
-	} // provoquer la fermeture du forumlaire
184
-
185
-	return $res;
159
+    $res = array();
160
+    if (!_request('annuler') and autoriser('changerlangue', $objet, $id_objet)) {
161
+        // action/editer_xxx doit traiter la modif de changer_lang
162
+        $res = formulaires_editer_objet_traiter($objet, $id_objet, 0, 0, $retour);
163
+    }
164
+    if (!_request('annuler') and autoriser('changertraduction', $objet, $id_objet)) {
165
+        if ($id_trad = _request('id_trad') or _request('supprimer_trad')) {
166
+            $referencer_traduction = charger_fonction('referencer_traduction', 'action');
167
+            $referencer_traduction($objet, $id_objet, intval($id_trad)); // 0 si supprimer_trad
168
+        } elseif ($new_id_trad = _request('changer_reference_trad')
169
+            and $new_id_trad = array_keys($new_id_trad)
170
+            and $new_id_trad = reset($new_id_trad)
171
+        ) {
172
+            $table_objet_sql = table_objet_sql($objet);
173
+            $_id_table_objet = id_table_objet($objet);
174
+            if ($id_trad = sql_getfetsel('id_trad', $table_objet_sql, "$_id_table_objet=" . intval($id_objet))) {
175
+                $referencer_traduction = charger_fonction('referencer_traduction', 'action');
176
+                $referencer_traduction($objet, $id_trad, $new_id_trad);
177
+            }
178
+        }
179
+    }
180
+    $res['editable'] = true;
181
+    if (!isset($res['message_erreur'])) {
182
+        set_request('annuler', 'annuler');
183
+    } // provoquer la fermeture du forumlaire
184
+
185
+    return $res;
186 186
 }
Please login to merge, or discard this patch.
Spacing   +6 added lines, -6 removed lines patch added patch discarded remove patch
@@ -60,7 +60,7 @@  discard block
 block discarded – undo
60 60
 		$id_parent = $valeurs['id_parent'];
61 61
 	}
62 62
 	if ($id_parent) {
63
-		$langue_parent = sql_getfetsel('lang', 'spip_rubriques', 'id_rubrique=' . intval($id_parent));
63
+		$langue_parent = sql_getfetsel('lang', 'spip_rubriques', 'id_rubrique='.intval($id_parent));
64 64
 	}
65 65
 
66 66
 	if (!$langue_parent) {
@@ -82,8 +82,8 @@  discard block
 block discarded – undo
82 82
 	$valeurs['_traduire'] = '';
83 83
 	if (isset($valeurs['id_trad'])) {
84 84
 		$valeurs['_traduire'] = ($traduire ? ' ' : '');
85
-		$valeurs['_vue_traductions'] = 'prive/objets/liste/' . (trouver_fond(
86
-			$f = table_objet($objet) . '-trad',
85
+		$valeurs['_vue_traductions'] = 'prive/objets/liste/'.(trouver_fond(
86
+			$f = table_objet($objet).'-trad',
87 87
 			'prive/objets/liste'
88 88
 		) ? $f : 'objets-trad');
89 89
 		// pour afficher la liste des trad sur la base de l'id_trad en base
@@ -128,11 +128,11 @@  discard block
 block discarded – undo
128 128
 		if (sql_getfetsel(
129 129
 			'id_trad',
130 130
 			$table_objet_sql,
131
-			"$_id_table_objet=" . intval($id_objet)
131
+			"$_id_table_objet=".intval($id_objet)
132 132
 		)) {
133 133
 			// ne devrait jamais arriver sauf concurence de saisie
134 134
 			$erreurs['id_trad'] = _L('Une traduction est deja referencee');
135
-		} elseif (!sql_getfetsel($_id_table_objet, $table_objet_sql, "$_id_table_objet=" . intval($id_trad))) {
135
+		} elseif (!sql_getfetsel($_id_table_objet, $table_objet_sql, "$_id_table_objet=".intval($id_trad))) {
136 136
 			$erreurs['id_trad'] = _L('Indiquez un contenu existant');
137 137
 		}
138 138
 	}
@@ -171,7 +171,7 @@  discard block
 block discarded – undo
171 171
 		) {
172 172
 			$table_objet_sql = table_objet_sql($objet);
173 173
 			$_id_table_objet = id_table_objet($objet);
174
-			if ($id_trad = sql_getfetsel('id_trad', $table_objet_sql, "$_id_table_objet=" . intval($id_objet))) {
174
+			if ($id_trad = sql_getfetsel('id_trad', $table_objet_sql, "$_id_table_objet=".intval($id_objet))) {
175 175
 				$referencer_traduction = charger_fonction('referencer_traduction', 'action');
176 176
 				$referencer_traduction($objet, $id_trad, $new_id_trad);
177 177
 			}
Please login to merge, or discard this patch.
ecrire/public/tracer.php 3 patches
Spacing   +5 added lines, -5 removed lines patch added patch discarded remove patch
@@ -77,13 +77,13 @@  discard block
 block discarded – undo
77 77
 
78 78
 function chrono_requete($temps) {
79 79
 	$total = 0;
80
-	$hors = "<i>" . _T('zbug_hors_compilation') . "</i>";
80
+	$hors = "<i>"._T('zbug_hors_compilation')."</i>";
81 81
 	$t = $q = $n = $d = array();
82 82
 	// Totaliser les temps et completer le Explain
83 83
 	foreach ($temps as $key => $v) {
84 84
 		list($dt, $nb, $boucle, $query, $explain, $res, $contexte) = $v;
85 85
 		if (is_array($contexte)) {
86
-			$k = ($contexte[0] . " $boucle");
86
+			$k = ($contexte[0]." $boucle");
87 87
 			include_spip('public/compiler');
88 88
 			$env = reconstruire_contexte_compil($contexte);
89 89
 		} else {
@@ -128,7 +128,7 @@  discard block
 block discarded – undo
128 128
 	// Fabriquer les liens de navigations dans le tableau des temps
129 129
 	foreach ($temps as $k => $v) {
130 130
 		$titre = strip_tags($v[2]);
131
-		$href = quote_amp($GLOBALS['REQUEST_URI']) . "#req$i";
131
+		$href = quote_amp($GLOBALS['REQUEST_URI'])."#req$i";
132 132
 		$href = str_replace("\\'", '&#39;', $href);
133 133
 
134 134
 		if (!isset($t[$v[2]])) {
@@ -149,7 +149,7 @@  discard block
 block discarded – undo
149 149
 	unset($d['']);
150 150
 	// Fabriquer le tableau des liens de navigation dans le grand tableau
151 151
 	foreach ($d as $k => $v) {
152
-		$d[$k] = $n[$k] . "</td><td>$k</td><td class='time'>$v</td><td class='liste-reqs'>"
152
+		$d[$k] = $n[$k]."</td><td>$k</td><td class='time'>$v</td><td class='liste-reqs'>"
153 153
 			. join('', $t[$k]);
154 154
 	}
155 155
 
@@ -159,7 +159,7 @@  discard block
 block discarded – undo
159 159
 		. join("</td></tr>\n<tr><td>", $d)
160 160
 		. "</td></tr>\n"
161 161
 		. (# _request('var_mode_objet') ? '' :
162
-		("<tr><td>" . count($temps) . "</td><td>" . _T('info_total') . '</td><td class="time">' . $total . "</td><td></td></tr>"))
162
+		("<tr><td>".count($temps)."</td><td>"._T('info_total').'</td><td class="time">'.$total."</td><td></td></tr>"))
163 163
 	);
164 164
 
165 165
 	return array($temps, $navigation);
Please login to merge, or discard this patch.
Indentation   +170 added lines, -170 removed lines patch added patch discarded remove patch
@@ -11,190 +11,190 @@
 block discarded – undo
11 11
 \***************************************************************************/
12 12
 
13 13
 if (!defined('_ECRIRE_INC_VERSION')) {
14
-	return;
14
+    return;
15 15
 }
16 16
 
17 17
 // https://code.spip.net/@trace_query_start
18 18
 function trace_query_start() {
19
-	static $trace = '?';
20
-	if ($trace === '?' or defined('_DEBUG_TRACE_QUERIES')) {
21
-		if (defined('_DEBUG_TRACE_QUERIES') and _DEBUG_TRACE_QUERIES) {
22
-			$trace = true;
23
-		}
24
-		else {
25
-			if (empty($GLOBALS['visiteur_session'])) {
26
-				// si un anonyme fait un var_profile on est oblige de remplir le tableau des temps en attendant de savoir
27
-				// car ici on ne sait pas si c'est un hit anonyme
28
-				// ou une requete SQL faite avant chargement de la session
29
-				$trace = (!empty($_GET['var_profile']) ? '?' : false);
30
-			}
31
-			else {
32
-				include_spip('inc/autoriser');
33
-				// gare au bouclage sur calcul de droits au premier appel
34
-				// A fortiori quand on demande une trace
35
-				$trace = false; // on ne trace pas la requete provoquee par autoriser('debug')
36
-				$trace = (!empty($_GET['var_profile']) and autoriser('debug'));
37
-			}
38
-		}
39
-	}
40
-
41
-	return $trace ? microtime() : 0;
19
+    static $trace = '?';
20
+    if ($trace === '?' or defined('_DEBUG_TRACE_QUERIES')) {
21
+        if (defined('_DEBUG_TRACE_QUERIES') and _DEBUG_TRACE_QUERIES) {
22
+            $trace = true;
23
+        }
24
+        else {
25
+            if (empty($GLOBALS['visiteur_session'])) {
26
+                // si un anonyme fait un var_profile on est oblige de remplir le tableau des temps en attendant de savoir
27
+                // car ici on ne sait pas si c'est un hit anonyme
28
+                // ou une requete SQL faite avant chargement de la session
29
+                $trace = (!empty($_GET['var_profile']) ? '?' : false);
30
+            }
31
+            else {
32
+                include_spip('inc/autoriser');
33
+                // gare au bouclage sur calcul de droits au premier appel
34
+                // A fortiori quand on demande une trace
35
+                $trace = false; // on ne trace pas la requete provoquee par autoriser('debug')
36
+                $trace = (!empty($_GET['var_profile']) and autoriser('debug'));
37
+            }
38
+        }
39
+    }
40
+
41
+    return $trace ? microtime() : 0;
42 42
 }
43 43
 
44 44
 // https://code.spip.net/@trace_query_end
45 45
 function trace_query_end($query, $start, $result, $erreur, $serveur = '') {
46
-	static $trace = '?';
47
-	if ($trace === '?') {
48
-		if (empty($GLOBALS['visiteur_session'])) {
49
-			// si un anonyme fait un var_profile on est oblige de remplir le tableau des temps en attendant de savoir
50
-			// car ici on ne sait pas si c'est un hit anonyme
51
-			// ou une requete SQL faite avant chargement de la session
52
-			$trace = (!empty($_GET['var_profile']) ? '?' : false);
53
-		}
54
-		else {
55
-			include_spip('inc/autoriser');
56
-			// gare au bouclage sur calcul de droits au premier appel
57
-			// A fortiori quand on demande une trace
58
-			$trace = false; // on ne trace pas la requete provoquee par autoriser('debug')
59
-			$trace = (!empty($_GET['var_profile']) and autoriser('debug'));
60
-		}
61
-	}
62
-	if ($start) {
63
-		$end = microtime();
64
-		list($usec, $sec) = explode(" ", $start);
65
-		list($usec2, $sec2) = explode(" ", $end);
66
-		$dt = $sec2 + $usec2 - $sec - $usec;
67
-		pipeline('trig_trace_query', ['query' => $query, 'start' => $start, 'end' => $end, 'time' => $dt, 'result' => $result, 'erreur' => $erreur, 'serveur' => $serveur]);
68
-		if ($trace) {
69
-			trace_query_chrono($dt, $query, $result, $serveur);
70
-		}
71
-	}
72
-	// tracer les erreurs, sauf pour select, c'est fait dans abstract_sql
73
-	if ($trace and $erreur and !preg_match('/^select\b/i', $query)) {
74
-		erreur_squelette(array(sql_errno($serveur), $erreur, $query));
75
-	}
76
-
77
-	return $result;
46
+    static $trace = '?';
47
+    if ($trace === '?') {
48
+        if (empty($GLOBALS['visiteur_session'])) {
49
+            // si un anonyme fait un var_profile on est oblige de remplir le tableau des temps en attendant de savoir
50
+            // car ici on ne sait pas si c'est un hit anonyme
51
+            // ou une requete SQL faite avant chargement de la session
52
+            $trace = (!empty($_GET['var_profile']) ? '?' : false);
53
+        }
54
+        else {
55
+            include_spip('inc/autoriser');
56
+            // gare au bouclage sur calcul de droits au premier appel
57
+            // A fortiori quand on demande une trace
58
+            $trace = false; // on ne trace pas la requete provoquee par autoriser('debug')
59
+            $trace = (!empty($_GET['var_profile']) and autoriser('debug'));
60
+        }
61
+    }
62
+    if ($start) {
63
+        $end = microtime();
64
+        list($usec, $sec) = explode(" ", $start);
65
+        list($usec2, $sec2) = explode(" ", $end);
66
+        $dt = $sec2 + $usec2 - $sec - $usec;
67
+        pipeline('trig_trace_query', ['query' => $query, 'start' => $start, 'end' => $end, 'time' => $dt, 'result' => $result, 'erreur' => $erreur, 'serveur' => $serveur]);
68
+        if ($trace) {
69
+            trace_query_chrono($dt, $query, $result, $serveur);
70
+        }
71
+    }
72
+    // tracer les erreurs, sauf pour select, c'est fait dans abstract_sql
73
+    if ($trace and $erreur and !preg_match('/^select\b/i', $query)) {
74
+        erreur_squelette(array(sql_errno($serveur), $erreur, $query));
75
+    }
76
+
77
+    return $result;
78 78
 }
79 79
 
80 80
 // https://code.spip.net/@trace_query_chrono
81 81
 function trace_query_chrono($dt, $query, $result, $serveur = '') {
82
-	include_spip('inc/filtres_mini');
83
-	static $tt = 0, $nb = 0;
84
-
85
-	$x = _request('var_mode_objet');
86
-	if (isset($GLOBALS['debug']['aucasou'])) {
87
-		list(, $boucle, $serveur, $contexte) = $GLOBALS['debug']['aucasou'];
88
-		if ($x and !preg_match("/$boucle\$/", $x)) {
89
-			return;
90
-		}
91
-		if ($serveur) {
92
-			$boucle .= " ($serveur)";
93
-		}
94
-		$boucle = "<b>$boucle</b>";
95
-	} else {
96
-		if ($x) {
97
-			return;
98
-		}
99
-		$boucle = $contexte = '';
100
-	}
101
-
102
-	$tt += $dt;
103
-	$nb++;
104
-
105
-	$q = preg_replace('/([a-z)`])\s+([A-Z])/', "$1\n<br />$2", spip_htmlentities($query));
106
-	$e = sql_explain($query, $serveur);
107
-	$r = str_replace('Resource id ', '', (is_object($result) ? get_class($result) : $result));
108
-	$GLOBALS['tableau_des_temps'][] = array($dt, $nb, $boucle, $q, $e, $r, $contexte);
82
+    include_spip('inc/filtres_mini');
83
+    static $tt = 0, $nb = 0;
84
+
85
+    $x = _request('var_mode_objet');
86
+    if (isset($GLOBALS['debug']['aucasou'])) {
87
+        list(, $boucle, $serveur, $contexte) = $GLOBALS['debug']['aucasou'];
88
+        if ($x and !preg_match("/$boucle\$/", $x)) {
89
+            return;
90
+        }
91
+        if ($serveur) {
92
+            $boucle .= " ($serveur)";
93
+        }
94
+        $boucle = "<b>$boucle</b>";
95
+    } else {
96
+        if ($x) {
97
+            return;
98
+        }
99
+        $boucle = $contexte = '';
100
+    }
101
+
102
+    $tt += $dt;
103
+    $nb++;
104
+
105
+    $q = preg_replace('/([a-z)`])\s+([A-Z])/', "$1\n<br />$2", spip_htmlentities($query));
106
+    $e = sql_explain($query, $serveur);
107
+    $r = str_replace('Resource id ', '', (is_object($result) ? get_class($result) : $result));
108
+    $GLOBALS['tableau_des_temps'][] = array($dt, $nb, $boucle, $q, $e, $r, $contexte);
109 109
 }
110 110
 
111 111
 
112 112
 function chrono_requete($temps) {
113
-	$total = 0;
114
-	$hors = "<i>" . _T('zbug_hors_compilation') . "</i>";
115
-	$t = $q = $n = $d = array();
116
-	// Totaliser les temps et completer le Explain
117
-	foreach ($temps as $key => $v) {
118
-		list($dt, $nb, $boucle, $query, $explain, $res, $contexte) = $v;
119
-		if (is_array($contexte)) {
120
-			$k = ($contexte[0] . " $boucle");
121
-			include_spip('public/compiler');
122
-			$env = reconstruire_contexte_compil($contexte);
123
-		} else {
124
-			$k = $env = $boucle;
125
-		}
126
-
127
-		$total += $dt;
128
-		$t[$key] = $dt;
129
-		$q[$key] = $nb;
130
-		if (!isset($d[$k])) {
131
-			$d[$k] = 0;
132
-			$n[$k] = 0;
133
-		}
134
-		$d[$k] += $dt;
135
-		++$n[$k];
136
-
137
-		if (!is_array($explain)) {
138
-			$explain = array();
139
-		}
140
-		foreach ($explain as $j => $v) {
141
-			$explain[$j] = "<tr><th>$j</th><td>"
142
-				. str_replace(';', '<br />', $v)
143
-				. "</td></tr>";
144
-		}
145
-		$e = "<table class='explain'>"
146
-			. "<caption>"
147
-			. $query
148
-			. "</caption>"
149
-			. "<tr><th>Time</th><td>$dt</td></tr>"
150
-			. "<tr><th>Order</th><td>$nb</td></tr>"
151
-			. "<tr><th>Res</th><td>$res</td></tr>"
152
-			. join('', $explain)
153
-			. "</table>";
154
-
155
-		$temps[$key] = array($e, $env, $k);
156
-	}
157
-	// Trier par temps d'execution decroissant
158
-	array_multisort($t, SORT_DESC, $q, $temps);
159
-	arsort($d);
160
-	$i = 1;
161
-	$t = array();
162
-	// Fabriquer les liens de navigations dans le tableau des temps
163
-	foreach ($temps as $k => $v) {
164
-		$titre = strip_tags($v[2]);
165
-		$href = quote_amp($GLOBALS['REQUEST_URI']) . "#req$i";
166
-		$href = str_replace("\\'", '&#39;', $href);
167
-
168
-		if (!isset($t[$v[2]])) {
169
-			$t[$v[2]] = array();
170
-		}
171
-		$t[$v[2]][] = "<span class='spip-debug-arg'> "
172
-			. "<a title='$titre' href='$href'>$i</a>"
173
-			. '</span>'
174
-			. ((count($t[$v[2]]) % 10 == 9) ? "<br />" : '');
175
-		$i++;
176
-	}
177
-
178
-	if ($d['']) {
179
-		$d[$hors] = $d[''];
180
-		$n[$hors] = $n[''];
181
-		$t[$hors] = $t[''];
182
-	}
183
-	unset($d['']);
184
-	// Fabriquer le tableau des liens de navigation dans le grand tableau
185
-	foreach ($d as $k => $v) {
186
-		$d[$k] = $n[$k] . "</td><td>$k</td><td class='time'>$v</td><td class='liste-reqs'>"
187
-			. join('', $t[$k]);
188
-	}
189
-
190
-	$navigation = array(
191
-		_T('zbug_statistiques'),
192
-		"<tr><td>"
193
-		. join("</td></tr>\n<tr><td>", $d)
194
-		. "</td></tr>\n"
195
-		. (# _request('var_mode_objet') ? '' :
196
-		("<tr><td>" . count($temps) . "</td><td>" . _T('info_total') . '</td><td class="time">' . $total . "</td><td></td></tr>"))
197
-	);
198
-
199
-	return array($temps, $navigation);
113
+    $total = 0;
114
+    $hors = "<i>" . _T('zbug_hors_compilation') . "</i>";
115
+    $t = $q = $n = $d = array();
116
+    // Totaliser les temps et completer le Explain
117
+    foreach ($temps as $key => $v) {
118
+        list($dt, $nb, $boucle, $query, $explain, $res, $contexte) = $v;
119
+        if (is_array($contexte)) {
120
+            $k = ($contexte[0] . " $boucle");
121
+            include_spip('public/compiler');
122
+            $env = reconstruire_contexte_compil($contexte);
123
+        } else {
124
+            $k = $env = $boucle;
125
+        }
126
+
127
+        $total += $dt;
128
+        $t[$key] = $dt;
129
+        $q[$key] = $nb;
130
+        if (!isset($d[$k])) {
131
+            $d[$k] = 0;
132
+            $n[$k] = 0;
133
+        }
134
+        $d[$k] += $dt;
135
+        ++$n[$k];
136
+
137
+        if (!is_array($explain)) {
138
+            $explain = array();
139
+        }
140
+        foreach ($explain as $j => $v) {
141
+            $explain[$j] = "<tr><th>$j</th><td>"
142
+                . str_replace(';', '<br />', $v)
143
+                . "</td></tr>";
144
+        }
145
+        $e = "<table class='explain'>"
146
+            . "<caption>"
147
+            . $query
148
+            . "</caption>"
149
+            . "<tr><th>Time</th><td>$dt</td></tr>"
150
+            . "<tr><th>Order</th><td>$nb</td></tr>"
151
+            . "<tr><th>Res</th><td>$res</td></tr>"
152
+            . join('', $explain)
153
+            . "</table>";
154
+
155
+        $temps[$key] = array($e, $env, $k);
156
+    }
157
+    // Trier par temps d'execution decroissant
158
+    array_multisort($t, SORT_DESC, $q, $temps);
159
+    arsort($d);
160
+    $i = 1;
161
+    $t = array();
162
+    // Fabriquer les liens de navigations dans le tableau des temps
163
+    foreach ($temps as $k => $v) {
164
+        $titre = strip_tags($v[2]);
165
+        $href = quote_amp($GLOBALS['REQUEST_URI']) . "#req$i";
166
+        $href = str_replace("\\'", '&#39;', $href);
167
+
168
+        if (!isset($t[$v[2]])) {
169
+            $t[$v[2]] = array();
170
+        }
171
+        $t[$v[2]][] = "<span class='spip-debug-arg'> "
172
+            . "<a title='$titre' href='$href'>$i</a>"
173
+            . '</span>'
174
+            . ((count($t[$v[2]]) % 10 == 9) ? "<br />" : '');
175
+        $i++;
176
+    }
177
+
178
+    if ($d['']) {
179
+        $d[$hors] = $d[''];
180
+        $n[$hors] = $n[''];
181
+        $t[$hors] = $t[''];
182
+    }
183
+    unset($d['']);
184
+    // Fabriquer le tableau des liens de navigation dans le grand tableau
185
+    foreach ($d as $k => $v) {
186
+        $d[$k] = $n[$k] . "</td><td>$k</td><td class='time'>$v</td><td class='liste-reqs'>"
187
+            . join('', $t[$k]);
188
+    }
189
+
190
+    $navigation = array(
191
+        _T('zbug_statistiques'),
192
+        "<tr><td>"
193
+        . join("</td></tr>\n<tr><td>", $d)
194
+        . "</td></tr>\n"
195
+        . (# _request('var_mode_objet') ? '' :
196
+        ("<tr><td>" . count($temps) . "</td><td>" . _T('info_total') . '</td><td class="time">' . $total . "</td><td></td></tr>"))
197
+    );
198
+
199
+    return array($temps, $navigation);
200 200
 }
Please login to merge, or discard this patch.
Braces   +3 added lines, -6 removed lines patch added patch discarded remove patch
@@ -20,15 +20,13 @@  discard block
 block discarded – undo
20 20
 	if ($trace === '?' or defined('_DEBUG_TRACE_QUERIES')) {
21 21
 		if (defined('_DEBUG_TRACE_QUERIES') and _DEBUG_TRACE_QUERIES) {
22 22
 			$trace = true;
23
-		}
24
-		else {
23
+		} else {
25 24
 			if (empty($GLOBALS['visiteur_session'])) {
26 25
 				// si un anonyme fait un var_profile on est oblige de remplir le tableau des temps en attendant de savoir
27 26
 				// car ici on ne sait pas si c'est un hit anonyme
28 27
 				// ou une requete SQL faite avant chargement de la session
29 28
 				$trace = (!empty($_GET['var_profile']) ? '?' : false);
30
-			}
31
-			else {
29
+			} else {
32 30
 				include_spip('inc/autoriser');
33 31
 				// gare au bouclage sur calcul de droits au premier appel
34 32
 				// A fortiori quand on demande une trace
@@ -50,8 +48,7 @@  discard block
 block discarded – undo
50 48
 			// car ici on ne sait pas si c'est un hit anonyme
51 49
 			// ou une requete SQL faite avant chargement de la session
52 50
 			$trace = (!empty($_GET['var_profile']) ? '?' : false);
53
-		}
54
-		else {
51
+		} else {
55 52
 			include_spip('inc/autoriser');
56 53
 			// gare au bouclage sur calcul de droits au premier appel
57 54
 			// A fortiori quand on demande une trace
Please login to merge, or discard this patch.
ecrire/public/aiguiller.php 2 patches
Spacing   +4 added lines, -4 removed lines patch added patch discarded remove patch
@@ -22,11 +22,11 @@  discard block
 block discarded – undo
22 22
 			return $r3;
23 23
 		}
24 24
 	}
25
-	if ((tester_url_absolue($redirect) or preg_match(',^\w+:,',trim($redirect)))
25
+	if ((tester_url_absolue($redirect) or preg_match(',^\w+:,', trim($redirect)))
26 26
 		and !defined('_AUTORISER_ACTION_ABS_REDIRECT')) {
27 27
 		// si l'url est une url du site, on la laisse passer sans rien faire
28 28
 		// c'est encore le plus simple
29
-		$base = $GLOBALS['meta']['adresse_site'] . "/";
29
+		$base = $GLOBALS['meta']['adresse_site']."/";
30 30
 		if (strlen($base) and strncmp($redirect, $base, strlen($base)) == 0) {
31 31
 			return $redirect;
32 32
 		}
@@ -145,7 +145,7 @@  discard block
 block discarded – undo
145 145
 			if ($ancre = _request('var_ajax_ancre')) {
146 146
 				// pas n'importe quoi quand meme dans la variable !
147 147
 				$ancre = str_replace(array('<', '"', "'"), array('&lt;', '&quot;', ''), $ancre);
148
-				$texte = "<a href='#$ancre' name='ajax_ancre' style='display:none;'>anchor</a>" . $texte;
148
+				$texte = "<a href='#$ancre' name='ajax_ancre' style='display:none;'>anchor</a>".$texte;
149 149
 			}
150 150
 		} else {
151 151
 			include_spip('inc/headers');
@@ -299,7 +299,7 @@  discard block
 block discarded – undo
299 299
 				// on ajoute un br en display none en tete du retour ajax pour regler un bug dans IE6/7
300 300
 				// sans cela le formulaire n'est pas actif apres le hit ajax
301 301
 				// la classe ajax-form-is-ok sert a s'assurer que le retour ajax s'est bien passe
302
-				$retour = "<br class='bugajaxie ajax-form-is-ok' style='display:none;'/>" . $retour;
302
+				$retour = "<br class='bugajaxie ajax-form-is-ok' style='display:none;'/>".$retour;
303 303
 				ajax_retour($retour, false);
304 304
 
305 305
 				return true; // on a fini le hit
Please login to merge, or discard this patch.
Indentation   +257 added lines, -257 removed lines patch added patch discarded remove patch
@@ -11,156 +11,156 @@  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
 function securiser_redirect_action($redirect) {
18
-	// cas d'un double urlencode : si un urldecode de l'url n'est pas secure, on retient ca comme redirect
19
-	if (strpos($redirect, '%') !== false) {
20
-		$r2 = urldecode($redirect);
21
-		if (($r3 = securiser_redirect_action($r2)) !== $r2) {
22
-			return $r3;
23
-		}
24
-	}
25
-	if ((tester_url_absolue($redirect) or preg_match(',^\w+:,',trim($redirect)))
26
-		and !defined('_AUTORISER_ACTION_ABS_REDIRECT')) {
27
-		// si l'url est une url du site, on la laisse passer sans rien faire
28
-		// c'est encore le plus simple
29
-		$base = $GLOBALS['meta']['adresse_site'] . "/";
30
-		if (strlen($base) and strncmp($redirect, $base, strlen($base)) == 0) {
31
-			return $redirect;
32
-		}
33
-		$base = url_de_base();
34
-		if (strlen($base) and strncmp($redirect, $base, strlen($base)) == 0) {
35
-			return $redirect;
36
-		}
18
+    // cas d'un double urlencode : si un urldecode de l'url n'est pas secure, on retient ca comme redirect
19
+    if (strpos($redirect, '%') !== false) {
20
+        $r2 = urldecode($redirect);
21
+        if (($r3 = securiser_redirect_action($r2)) !== $r2) {
22
+            return $r3;
23
+        }
24
+    }
25
+    if ((tester_url_absolue($redirect) or preg_match(',^\w+:,',trim($redirect)))
26
+        and !defined('_AUTORISER_ACTION_ABS_REDIRECT')) {
27
+        // si l'url est une url du site, on la laisse passer sans rien faire
28
+        // c'est encore le plus simple
29
+        $base = $GLOBALS['meta']['adresse_site'] . "/";
30
+        if (strlen($base) and strncmp($redirect, $base, strlen($base)) == 0) {
31
+            return $redirect;
32
+        }
33
+        $base = url_de_base();
34
+        if (strlen($base) and strncmp($redirect, $base, strlen($base)) == 0) {
35
+            return $redirect;
36
+        }
37 37
 
38
-		return "";
39
-	}
38
+        return "";
39
+    }
40 40
 
41
-	return $redirect;
41
+    return $redirect;
42 42
 }
43 43
 
44 44
 // https://code.spip.net/@traiter_appels_actions
45 45
 function traiter_appels_actions() {
46
-	// cas de l'appel qui renvoie une redirection (302) ou rien (204)
47
-	if ($action = _request('action')) {
48
-		include_spip('base/abstract_sql'); // chargement systematique pour les actions
49
-		include_spip('inc/autoriser');
50
-		include_spip('inc/headers');
51
-		include_spip('inc/actions');
52
-		// des actions peuvent appeler _T
53
-		if (!isset($GLOBALS['spip_lang'])) {
54
-			include_spip('inc/lang');
55
-			utiliser_langue_visiteur();
56
-		}
57
-		// si l'action est provoque par un hit {ajax}
58
-		// il faut transmettre l'env ajax au redirect
59
-		// on le met avant dans la query string au cas ou l'action fait elle meme sa redirection
60
-		if (($v = _request('var_ajax'))
61
-			and ($v !== 'form')
62
-			and ($args = _request('var_ajax_env'))
63
-			and ($url = _request('redirect'))
64
-		) {
65
-			$url = parametre_url($url, 'var_ajax', $v, '&');
66
-			$url = parametre_url($url, 'var_ajax_env', $args, '&');
67
-			set_request('redirect', $url);
68
-		} else {
69
-			if (_request('redirect')) {
70
-				set_request('redirect', securiser_redirect_action(_request('redirect')));
71
-			}
72
-		}
73
-		$var_f = charger_fonction($action, 'action');
74
-		$var_f();
75
-		if (!isset($GLOBALS['redirect'])) {
76
-			$GLOBALS['redirect'] = _request('redirect');
77
-			if ($_SERVER['REQUEST_METHOD'] == 'POST') {
78
-				$GLOBALS['redirect'] = urldecode($GLOBALS['redirect']);
79
-			}
80
-			$GLOBALS['redirect'] = securiser_redirect_action($GLOBALS['redirect']);
81
-		}
82
-		if ($url = $GLOBALS['redirect']) {
83
-			// si l'action est provoque par un hit {ajax}
84
-			// il faut transmettre l'env ajax au redirect 
85
-			// qui a pu etre defini par l'action
86
-			if (($v = _request('var_ajax'))
87
-				and ($v !== 'form')
88
-				and ($args = _request('var_ajax_env'))
89
-			) {
90
-				$url = parametre_url($url, 'var_ajax', $v, '&');
91
-				$url = parametre_url($url, 'var_ajax_env', $args, '&');
92
-				// passer l'ancre en variable pour pouvoir la gerer cote serveur
93
-				$url = preg_replace(',#([^#&?]+)$,', "&var_ajax_ancre=\\1", $url);
94
-			}
95
-			$url = str_replace('&amp;', '&', $url); // les redirections se font en &, pas en en &amp;
96
-			redirige_par_entete($url);
97
-		}
46
+    // cas de l'appel qui renvoie une redirection (302) ou rien (204)
47
+    if ($action = _request('action')) {
48
+        include_spip('base/abstract_sql'); // chargement systematique pour les actions
49
+        include_spip('inc/autoriser');
50
+        include_spip('inc/headers');
51
+        include_spip('inc/actions');
52
+        // des actions peuvent appeler _T
53
+        if (!isset($GLOBALS['spip_lang'])) {
54
+            include_spip('inc/lang');
55
+            utiliser_langue_visiteur();
56
+        }
57
+        // si l'action est provoque par un hit {ajax}
58
+        // il faut transmettre l'env ajax au redirect
59
+        // on le met avant dans la query string au cas ou l'action fait elle meme sa redirection
60
+        if (($v = _request('var_ajax'))
61
+            and ($v !== 'form')
62
+            and ($args = _request('var_ajax_env'))
63
+            and ($url = _request('redirect'))
64
+        ) {
65
+            $url = parametre_url($url, 'var_ajax', $v, '&');
66
+            $url = parametre_url($url, 'var_ajax_env', $args, '&');
67
+            set_request('redirect', $url);
68
+        } else {
69
+            if (_request('redirect')) {
70
+                set_request('redirect', securiser_redirect_action(_request('redirect')));
71
+            }
72
+        }
73
+        $var_f = charger_fonction($action, 'action');
74
+        $var_f();
75
+        if (!isset($GLOBALS['redirect'])) {
76
+            $GLOBALS['redirect'] = _request('redirect');
77
+            if ($_SERVER['REQUEST_METHOD'] == 'POST') {
78
+                $GLOBALS['redirect'] = urldecode($GLOBALS['redirect']);
79
+            }
80
+            $GLOBALS['redirect'] = securiser_redirect_action($GLOBALS['redirect']);
81
+        }
82
+        if ($url = $GLOBALS['redirect']) {
83
+            // si l'action est provoque par un hit {ajax}
84
+            // il faut transmettre l'env ajax au redirect 
85
+            // qui a pu etre defini par l'action
86
+            if (($v = _request('var_ajax'))
87
+                and ($v !== 'form')
88
+                and ($args = _request('var_ajax_env'))
89
+            ) {
90
+                $url = parametre_url($url, 'var_ajax', $v, '&');
91
+                $url = parametre_url($url, 'var_ajax_env', $args, '&');
92
+                // passer l'ancre en variable pour pouvoir la gerer cote serveur
93
+                $url = preg_replace(',#([^#&?]+)$,', "&var_ajax_ancre=\\1", $url);
94
+            }
95
+            $url = str_replace('&amp;', '&', $url); // les redirections se font en &, pas en en &amp;
96
+            redirige_par_entete($url);
97
+        }
98 98
 
99
-		// attention : avec zlib.output_compression=1 on a vu des cas de ob_get_length() qui renvoi 0
100
-		// et du coup en renvoi un status 204 a tort (vu sur le menu rubriques notamment)
101
-		if (!headers_sent()
102
-			and !ob_get_length()
103
-		) {
104
-			http_status(204);
105
-		} // No Content
106
-		return true;
107
-	}
99
+        // attention : avec zlib.output_compression=1 on a vu des cas de ob_get_length() qui renvoi 0
100
+        // et du coup en renvoi un status 204 a tort (vu sur le menu rubriques notamment)
101
+        if (!headers_sent()
102
+            and !ob_get_length()
103
+        ) {
104
+            http_status(204);
105
+        } // No Content
106
+        return true;
107
+    }
108 108
 
109
-	return false;
109
+    return false;
110 110
 }
111 111
 
112 112
 
113 113
 // https://code.spip.net/@refuser_traiter_formulaire_ajax
114 114
 function refuser_traiter_formulaire_ajax() {
115
-	if ($v = _request('var_ajax')
116
-		and $v == 'form'
117
-		and $form = _request('formulaire_action')
118
-		and $args = _request('formulaire_action_args')
119
-		and decoder_contexte_ajax($args, $form) !== false
120
-	) {
121
-		// on est bien dans le contexte de traitement d'un formulaire en ajax
122
-		// mais traiter ne veut pas
123
-		// on le dit a la page qui va resumbit
124
-		// sans ajax
125
-		include_spip('inc/actions');
126
-		ajax_retour('noajax', false);
127
-		exit;
128
-	}
115
+    if ($v = _request('var_ajax')
116
+        and $v == 'form'
117
+        and $form = _request('formulaire_action')
118
+        and $args = _request('formulaire_action_args')
119
+        and decoder_contexte_ajax($args, $form) !== false
120
+    ) {
121
+        // on est bien dans le contexte de traitement d'un formulaire en ajax
122
+        // mais traiter ne veut pas
123
+        // on le dit a la page qui va resumbit
124
+        // sans ajax
125
+        include_spip('inc/actions');
126
+        ajax_retour('noajax', false);
127
+        exit;
128
+    }
129 129
 }
130 130
 
131 131
 // https://code.spip.net/@traiter_appels_inclusions_ajax
132 132
 function traiter_appels_inclusions_ajax() {
133
-	// traiter les appels de bloc ajax (ex: pagination)
134
-	if ($v = _request('var_ajax')
135
-		and $v !== 'form'
136
-		and $args = _request('var_ajax_env')
137
-	) {
138
-		include_spip('inc/filtres');
139
-		include_spip('inc/actions');
140
-		if ($args = decoder_contexte_ajax($args)
141
-			and $fond = $args['fond']
142
-		) {
143
-			include_spip('public/assembler');
144
-			$contexte = calculer_contexte();
145
-			$contexte = array_merge($args, $contexte);
146
-			$page = recuperer_fond($fond, $contexte, array('trim' => false));
147
-			$texte = $page;
148
-			if ($ancre = _request('var_ajax_ancre')) {
149
-				// pas n'importe quoi quand meme dans la variable !
150
-				$ancre = str_replace(array('<', '"', "'"), array('&lt;', '&quot;', ''), $ancre);
151
-				$texte = "<a href='#$ancre' name='ajax_ancre' style='display:none;'>anchor</a>" . $texte;
152
-			}
153
-		} else {
154
-			include_spip('inc/headers');
155
-			http_status(400);
156
-			$texte = _L('signature ajax bloc incorrecte');
157
-		}
158
-		ajax_retour($texte, false);
133
+    // traiter les appels de bloc ajax (ex: pagination)
134
+    if ($v = _request('var_ajax')
135
+        and $v !== 'form'
136
+        and $args = _request('var_ajax_env')
137
+    ) {
138
+        include_spip('inc/filtres');
139
+        include_spip('inc/actions');
140
+        if ($args = decoder_contexte_ajax($args)
141
+            and $fond = $args['fond']
142
+        ) {
143
+            include_spip('public/assembler');
144
+            $contexte = calculer_contexte();
145
+            $contexte = array_merge($args, $contexte);
146
+            $page = recuperer_fond($fond, $contexte, array('trim' => false));
147
+            $texte = $page;
148
+            if ($ancre = _request('var_ajax_ancre')) {
149
+                // pas n'importe quoi quand meme dans la variable !
150
+                $ancre = str_replace(array('<', '"', "'"), array('&lt;', '&quot;', ''), $ancre);
151
+                $texte = "<a href='#$ancre' name='ajax_ancre' style='display:none;'>anchor</a>" . $texte;
152
+            }
153
+        } else {
154
+            include_spip('inc/headers');
155
+            http_status(400);
156
+            $texte = _L('signature ajax bloc incorrecte');
157
+        }
158
+        ajax_retour($texte, false);
159 159
 
160
-		return true; // on a fini le hit
161
-	}
160
+        return true; // on a fini le hit
161
+    }
162 162
 
163
-	return false;
163
+    return false;
164 164
 }
165 165
 
166 166
 // au 1er appel, traite les formulaires dynamiques charger/verifier/traiter
@@ -169,148 +169,148 @@  discard block
 block discarded – undo
169 169
 
170 170
 // https://code.spip.net/@traiter_formulaires_dynamiques
171 171
 function traiter_formulaires_dynamiques($get = false) {
172
-	static $post = array();
173
-	static $done = false;
172
+    static $post = array();
173
+    static $done = false;
174 174
 
175
-	if ($get) {
176
-		return $post;
177
-	}
178
-	if ($done) {
179
-		return false;
180
-	}
181
-	$done = true;
175
+    if ($get) {
176
+        return $post;
177
+    }
178
+    if ($done) {
179
+        return false;
180
+    }
181
+    $done = true;
182 182
 
183
-	if (!($form = _request('formulaire_action')
184
-		and $args = _request('formulaire_action_args'))
185
-	) {
186
-		return false;
187
-	} // le hit peut continuer normalement
183
+    if (!($form = _request('formulaire_action')
184
+        and $args = _request('formulaire_action_args'))
185
+    ) {
186
+        return false;
187
+    } // le hit peut continuer normalement
188 188
 
189
-	include_spip('inc/filtres');
190
-	if (($args = decoder_contexte_ajax($args, $form)) === false) {
191
-		spip_log("signature ajax form incorrecte : $form");
189
+    include_spip('inc/filtres');
190
+    if (($args = decoder_contexte_ajax($args, $form)) === false) {
191
+        spip_log("signature ajax form incorrecte : $form");
192 192
 
193
-		return false; // continuons le hit comme si de rien etait
194
-	} else {
195
-		include_spip('inc/lang');
196
-		// sauvegarder la lang en cours
197
-		$old_lang = $GLOBALS['spip_lang'];
198
-		// changer la langue avec celle qui a cours dans le formulaire
199
-		// on la depile de $args car c'est un argument implicite masque	
200
-		changer_langue(array_shift($args));
193
+        return false; // continuons le hit comme si de rien etait
194
+    } else {
195
+        include_spip('inc/lang');
196
+        // sauvegarder la lang en cours
197
+        $old_lang = $GLOBALS['spip_lang'];
198
+        // changer la langue avec celle qui a cours dans le formulaire
199
+        // on la depile de $args car c'est un argument implicite masque	
200
+        changer_langue(array_shift($args));
201 201
 
202 202
 
203
-		// inclure mes_fonctions et autres filtres avant verifier/traiter
204
-		include_fichiers_fonctions();
205
-		// ainsi que l'API SQL bien utile dans verifier/traiter
206
-		include_spip('base/abstract_sql');
203
+        // inclure mes_fonctions et autres filtres avant verifier/traiter
204
+        include_fichiers_fonctions();
205
+        // ainsi que l'API SQL bien utile dans verifier/traiter
206
+        include_spip('base/abstract_sql');
207 207
 
208
-		/**
209
-		 * Pipeline exécuté lors de la soumission d'un formulaire,
210
-		 * mais avant l'appel de la fonction de vérification.
211
-		 */
212
-		pipeline(
213
-			'formulaire_receptionner',
214
-			array(
215
-				'args' => array('form' => $form, 'args' => $args),
216
-				'data' => null,
217
-			)
218
-		);
208
+        /**
209
+         * Pipeline exécuté lors de la soumission d'un formulaire,
210
+         * mais avant l'appel de la fonction de vérification.
211
+         */
212
+        pipeline(
213
+            'formulaire_receptionner',
214
+            array(
215
+                'args' => array('form' => $form, 'args' => $args),
216
+                'data' => null,
217
+            )
218
+        );
219 219
 
220
-		$verifier = charger_fonction("verifier", "formulaires/$form/", true);
221
-		$post["erreurs_$form"] = pipeline(
222
-			'formulaire_verifier',
223
-			array(
224
-				'args' => array('form' => $form, 'args' => $args),
225
-				'data' => $verifier ? call_user_func_array($verifier, $args) : array()
226
-			)
227
-		);
228
-		// prise en charge CVT multi etape si besoin
229
-		if (_request('cvtm_prev_post')) {
230
-			include_spip('inc/cvt_multietapes');
231
-			$post["erreurs_$form"] = cvtmulti_formulaire_verifier_etapes(
232
-				array('form' => $form, 'args' => $args),
233
-				$post["erreurs_$form"]
234
-			);
235
-		}
220
+        $verifier = charger_fonction("verifier", "formulaires/$form/", true);
221
+        $post["erreurs_$form"] = pipeline(
222
+            'formulaire_verifier',
223
+            array(
224
+                'args' => array('form' => $form, 'args' => $args),
225
+                'data' => $verifier ? call_user_func_array($verifier, $args) : array()
226
+            )
227
+        );
228
+        // prise en charge CVT multi etape si besoin
229
+        if (_request('cvtm_prev_post')) {
230
+            include_spip('inc/cvt_multietapes');
231
+            $post["erreurs_$form"] = cvtmulti_formulaire_verifier_etapes(
232
+                array('form' => $form, 'args' => $args),
233
+                $post["erreurs_$form"]
234
+            );
235
+        }
236 236
 
237
-		// accessibilite : si des erreurs mais pas de message general l'ajouter
238
-		if ((isset($post["erreurs_$form"]) and count($post["erreurs_$form"])) and !isset($post["erreurs_$form"]['message_erreur'])) {
239
-			$post["erreurs_$form"]['message_erreur'] = singulier_ou_pluriel(count($post["erreurs_$form"]),
240
-				'avis_1_erreur_saisie', 'avis_nb_erreurs_saisie');
241
-		}
237
+        // accessibilite : si des erreurs mais pas de message general l'ajouter
238
+        if ((isset($post["erreurs_$form"]) and count($post["erreurs_$form"])) and !isset($post["erreurs_$form"]['message_erreur'])) {
239
+            $post["erreurs_$form"]['message_erreur'] = singulier_ou_pluriel(count($post["erreurs_$form"]),
240
+                'avis_1_erreur_saisie', 'avis_nb_erreurs_saisie');
241
+        }
242 242
 
243
-		// si on ne demandait qu'une verif json
244
-		if (_request('formulaire_action_verifier_json')) {
245
-			include_spip('inc/json');
246
-			include_spip('inc/actions');
247
-			ajax_retour(json_encode($post["erreurs_$form"]), 'text/plain');
243
+        // si on ne demandait qu'une verif json
244
+        if (_request('formulaire_action_verifier_json')) {
245
+            include_spip('inc/json');
246
+            include_spip('inc/actions');
247
+            ajax_retour(json_encode($post["erreurs_$form"]), 'text/plain');
248 248
 
249
-			return true; // on a fini le hit
250
-		}
251
-		$retour = "";
252
-		if (isset($post["erreurs_$form"]) and (count($post["erreurs_$form"]) == 0)) {
253
-			$rev = "";
254
-			if ($traiter = charger_fonction("traiter", "formulaires/$form/", true)) {
255
-				$rev = call_user_func_array($traiter, $args);
256
-			}
249
+            return true; // on a fini le hit
250
+        }
251
+        $retour = "";
252
+        if (isset($post["erreurs_$form"]) and (count($post["erreurs_$form"]) == 0)) {
253
+            $rev = "";
254
+            if ($traiter = charger_fonction("traiter", "formulaires/$form/", true)) {
255
+                $rev = call_user_func_array($traiter, $args);
256
+            }
257 257
 
258
-			$rev = pipeline(
259
-				'formulaire_traiter',
260
-				array(
261
-					'args' => array('form' => $form, 'args' => $args),
262
-					'data' => $rev
263
-				)
264
-			);
265
-			// le retour de traiter est
266
-			// un tableau explicite ('editable'=>$editable,'message_ok'=>$message,'redirect'=>$redirect,'id_xx'=>$id_xx)
267
-			// il permet le pipelinage, en particulier
268
-			// en y passant l'id de l'objet cree/modifie
269
-			// si message_erreur est present, on considere que le traitement a echoue
270
-			$post["message_ok_$form"] = '';
271
-			// on peut avoir message_ok et message_erreur
272
-			if (isset($rev['message_ok'])) {
273
-				$post["message_ok_$form"] = $rev['message_ok'];
274
-			}
258
+            $rev = pipeline(
259
+                'formulaire_traiter',
260
+                array(
261
+                    'args' => array('form' => $form, 'args' => $args),
262
+                    'data' => $rev
263
+                )
264
+            );
265
+            // le retour de traiter est
266
+            // un tableau explicite ('editable'=>$editable,'message_ok'=>$message,'redirect'=>$redirect,'id_xx'=>$id_xx)
267
+            // il permet le pipelinage, en particulier
268
+            // en y passant l'id de l'objet cree/modifie
269
+            // si message_erreur est present, on considere que le traitement a echoue
270
+            $post["message_ok_$form"] = '';
271
+            // on peut avoir message_ok et message_erreur
272
+            if (isset($rev['message_ok'])) {
273
+                $post["message_ok_$form"] = $rev['message_ok'];
274
+            }
275 275
 
276
-			// verifier si traiter n'a pas echoue avec une erreur :
277
-			if (isset($rev['message_erreur'])) {
278
-				$post["erreurs_$form"]["message_erreur"] = $rev['message_erreur'];
279
-				// si il y a une erreur on ne redirige pas
280
-			} else {
281
-				// sinon faire ce qu'il faut :
282
-				if (isset($rev['editable'])) {
283
-					$post["editable_$form"] = $rev['editable'];
284
-				}
285
-				// si une redirection est demandee, appeler redirigae_formulaire qui choisira
286
-				// le bon mode de redirection (302 et on ne revient pas ici, ou javascript et on continue)
287
-				if (isset($rev['redirect']) and $rev['redirect']) {
288
-					include_spip('inc/headers');
289
-					list($masque, $message) = redirige_formulaire($rev['redirect'], '', 'ajaxform');
290
-					$post["message_ok_$form"] .= $message;
291
-					$retour .= $masque;
292
-				}
293
-			}
294
-		}
295
-		// si le formulaire a ete soumis en ajax, on le renvoie direct !
296
-		if (_request('var_ajax')) {
297
-			if (find_in_path('formulaire_.php', 'balise/', true)) {
298
-				include_spip('inc/actions');
299
-				include_spip('public/assembler');
300
-				array_unshift($args, $form);
301
-				$retour .= inclure_balise_dynamique(call_user_func_array('balise_formulaire__dyn', $args), false);
302
-				// on ajoute un br en display none en tete du retour ajax pour regler un bug dans IE6/7
303
-				// sans cela le formulaire n'est pas actif apres le hit ajax
304
-				// la classe ajax-form-is-ok sert a s'assurer que le retour ajax s'est bien passe
305
-				$retour = "<br class='bugajaxie ajax-form-is-ok' style='display:none;'/>" . $retour;
306
-				ajax_retour($retour, false);
276
+            // verifier si traiter n'a pas echoue avec une erreur :
277
+            if (isset($rev['message_erreur'])) {
278
+                $post["erreurs_$form"]["message_erreur"] = $rev['message_erreur'];
279
+                // si il y a une erreur on ne redirige pas
280
+            } else {
281
+                // sinon faire ce qu'il faut :
282
+                if (isset($rev['editable'])) {
283
+                    $post["editable_$form"] = $rev['editable'];
284
+                }
285
+                // si une redirection est demandee, appeler redirigae_formulaire qui choisira
286
+                // le bon mode de redirection (302 et on ne revient pas ici, ou javascript et on continue)
287
+                if (isset($rev['redirect']) and $rev['redirect']) {
288
+                    include_spip('inc/headers');
289
+                    list($masque, $message) = redirige_formulaire($rev['redirect'], '', 'ajaxform');
290
+                    $post["message_ok_$form"] .= $message;
291
+                    $retour .= $masque;
292
+                }
293
+            }
294
+        }
295
+        // si le formulaire a ete soumis en ajax, on le renvoie direct !
296
+        if (_request('var_ajax')) {
297
+            if (find_in_path('formulaire_.php', 'balise/', true)) {
298
+                include_spip('inc/actions');
299
+                include_spip('public/assembler');
300
+                array_unshift($args, $form);
301
+                $retour .= inclure_balise_dynamique(call_user_func_array('balise_formulaire__dyn', $args), false);
302
+                // on ajoute un br en display none en tete du retour ajax pour regler un bug dans IE6/7
303
+                // sans cela le formulaire n'est pas actif apres le hit ajax
304
+                // la classe ajax-form-is-ok sert a s'assurer que le retour ajax s'est bien passe
305
+                $retour = "<br class='bugajaxie ajax-form-is-ok' style='display:none;'/>" . $retour;
306
+                ajax_retour($retour, false);
307 307
 
308
-				return true; // on a fini le hit
309
-			}
310
-		}
311
-		// restaurer la lang en cours
312
-		changer_langue($old_lang);
313
-	}
308
+                return true; // on a fini le hit
309
+            }
310
+        }
311
+        // restaurer la lang en cours
312
+        changer_langue($old_lang);
313
+    }
314 314
 
315
-	return false; // le hit peut continuer normalement
315
+    return false; // le hit peut continuer normalement
316 316
 }
Please login to merge, or discard this patch.