Completed
Push — master ( ed0e63...647eb8 )
by cam
01:36
created
ecrire/inc/modeles.php 1 patch
Indentation   +180 added lines, -180 removed lines patch added patch discarded remove patch
@@ -11,7 +11,7 @@  discard block
 block discarded – undo
11 11
 \***************************************************************************/
12 12
 
13 13
 if (!defined('_ECRIRE_INC_VERSION')) {
14
-	return;
14
+    return;
15 15
 }
16 16
 
17 17
 // traite les modeles (dans la fonction typo), en remplacant
@@ -22,17 +22,17 @@  discard block
 block discarded – undo
22 22
 // mais on renvoie les params (pour l'indexation par le moteur de recherche)
23 23
 
24 24
 define(
25
-	'_PREG_MODELE',
26
-	'(<([a-z_-]{3,})' # <modele
27
-	. '\s*([0-9]*)\s*' # id
28
-	. '([|](?:<[^<>]*>|[^>])*?)?' # |arguments (y compris des tags <...>)
29
-	. '\s*/?' . '>)' # fin du modele >
25
+    '_PREG_MODELE',
26
+    '(<([a-z_-]{3,})' # <modele
27
+    . '\s*([0-9]*)\s*' # id
28
+    . '([|](?:<[^<>]*>|[^>])*?)?' # |arguments (y compris des tags <...>)
29
+    . '\s*/?' . '>)' # fin du modele >
30 30
 );
31 31
 
32 32
 define(
33
-	'_RACCOURCI_MODELE',
34
-	_PREG_MODELE
35
-	. '\s*(<\/a>)?' # eventuel </a>
33
+    '_RACCOURCI_MODELE',
34
+    _PREG_MODELE
35
+    . '\s*(<\/a>)?' # eventuel </a>
36 36
 );
37 37
 
38 38
 define('_RACCOURCI_MODELE_DEBUT', '@^' . _RACCOURCI_MODELE . '@isS');
@@ -46,63 +46,63 @@  discard block
 block discarded – undo
46 46
  */
47 47
 function modeles_collecter($texte, bool $collecter_liens = true) {
48 48
 
49
-	$modeles = [];
50
-	// detecter les modeles (rapide)
51
-	if (
52
-		strpos($texte, '<') !== false
53
-		and preg_match_all('/<[a-z_-]{3,}\s*[0-9|]+/iS', $texte, $matches, PREG_SET_ORDER)
54
-	) {
55
-		$pos = 0;
56
-		// Recuperer l'appel complet (y compris un eventuel lien)
57
-		foreach ($matches as $match) {
58
-			$a = strpos($texte, (string)$match[0], $pos);
59
-
60
-			if (preg_match(_RACCOURCI_MODELE_DEBUT, substr($texte, $a), $regs)) {
61
-				// s'assurer qu'il y a toujours un 5e arg, eventuellement vide
62
-				while (count($regs) < 6) {
63
-					$regs[] = '';
64
-				}
65
-
66
-				[, $mod, $type, $id, $params, $fermeture_lien] = $regs;
67
-
68
-				if (
69
-					$collecter_liens
70
-					and $fermeture_lien
71
-					and $before = substr($texte, $pos, $a - $pos)
72
-					and stripos($before, '<a') !== false
73
-					and preg_match('/<a\s[^<>]*>\s*$/i', $before, $r)
74
-				) {
75
-					$lien = [
76
-						'href' => extraire_attribut($r[0], 'href'),
77
-						'class' => extraire_attribut($r[0], 'class'),
78
-						'mime' => extraire_attribut($r[0], 'type'),
79
-						'title' => extraire_attribut($r[0], 'title'),
80
-						'hreflang' => extraire_attribut($r[0], 'hreflang')
81
-					];
82
-					$n = strlen($r[0]);
83
-					$a -= $n;
84
-					$longueur = $n + strlen($regs[0]);
85
-				} else {
86
-					$lien = false;
87
-					$longueur = strlen($mod);
88
-				}
89
-
90
-				$modele = [
91
-					'modele' => $mod,
92
-					'pos' => $a,
93
-					'length' => $longueur,
94
-					'type' => $type,
95
-					'id' => $id,
96
-					'params' => $params,
97
-					'lien' => $lien,
98
-				];
99
-
100
-				$modeles[] = $modele;
101
-			}
102
-			$pos = $a + strlen((string)$match[0]);
103
-		}
104
-	}
105
-	return $modeles;
49
+    $modeles = [];
50
+    // detecter les modeles (rapide)
51
+    if (
52
+        strpos($texte, '<') !== false
53
+        and preg_match_all('/<[a-z_-]{3,}\s*[0-9|]+/iS', $texte, $matches, PREG_SET_ORDER)
54
+    ) {
55
+        $pos = 0;
56
+        // Recuperer l'appel complet (y compris un eventuel lien)
57
+        foreach ($matches as $match) {
58
+            $a = strpos($texte, (string)$match[0], $pos);
59
+
60
+            if (preg_match(_RACCOURCI_MODELE_DEBUT, substr($texte, $a), $regs)) {
61
+                // s'assurer qu'il y a toujours un 5e arg, eventuellement vide
62
+                while (count($regs) < 6) {
63
+                    $regs[] = '';
64
+                }
65
+
66
+                [, $mod, $type, $id, $params, $fermeture_lien] = $regs;
67
+
68
+                if (
69
+                    $collecter_liens
70
+                    and $fermeture_lien
71
+                    and $before = substr($texte, $pos, $a - $pos)
72
+                    and stripos($before, '<a') !== false
73
+                    and preg_match('/<a\s[^<>]*>\s*$/i', $before, $r)
74
+                ) {
75
+                    $lien = [
76
+                        'href' => extraire_attribut($r[0], 'href'),
77
+                        'class' => extraire_attribut($r[0], 'class'),
78
+                        'mime' => extraire_attribut($r[0], 'type'),
79
+                        'title' => extraire_attribut($r[0], 'title'),
80
+                        'hreflang' => extraire_attribut($r[0], 'hreflang')
81
+                    ];
82
+                    $n = strlen($r[0]);
83
+                    $a -= $n;
84
+                    $longueur = $n + strlen($regs[0]);
85
+                } else {
86
+                    $lien = false;
87
+                    $longueur = strlen($mod);
88
+                }
89
+
90
+                $modele = [
91
+                    'modele' => $mod,
92
+                    'pos' => $a,
93
+                    'length' => $longueur,
94
+                    'type' => $type,
95
+                    'id' => $id,
96
+                    'params' => $params,
97
+                    'lien' => $lien,
98
+                ];
99
+
100
+                $modeles[] = $modele;
101
+            }
102
+            $pos = $a + strlen((string)$match[0]);
103
+        }
104
+    }
105
+    return $modeles;
106 106
 }
107 107
 
108 108
 /**
@@ -116,24 +116,24 @@  discard block
 block discarded – undo
116 116
  */
117 117
 function modeles_echapper_raccourcis($texte, bool $collecter_liens = false) {
118 118
 
119
-	$modeles = modeles_collecter($texte, $collecter_liens);
120
-	$markid = '';
121
-	if (!empty($modeles)) {
122
-		// generer un marqueur qui n'est pas dans le texte
123
-		do {
124
-			$markid = substr(md5(creer_uniqid()), 0, 7);
125
-			$markid = "@|MODELE$markid|";
126
-		} while (strpos($texte, $markid) !== false);
127
-
128
-		$offset_pos = 0;
129
-		foreach ($modeles as $m) {
130
-			$rempl = $markid . base64_encode($m['modele']) . '|@';
131
-			$texte = substr_replace($texte, $rempl, $m['pos'] + $offset_pos, $m['length']);
132
-			$offset_pos += strlen($rempl) - $m['length'];
133
-		}
134
-	}
135
-
136
-	return [$texte, $markid];
119
+    $modeles = modeles_collecter($texte, $collecter_liens);
120
+    $markid = '';
121
+    if (!empty($modeles)) {
122
+        // generer un marqueur qui n'est pas dans le texte
123
+        do {
124
+            $markid = substr(md5(creer_uniqid()), 0, 7);
125
+            $markid = "@|MODELE$markid|";
126
+        } while (strpos($texte, $markid) !== false);
127
+
128
+        $offset_pos = 0;
129
+        foreach ($modeles as $m) {
130
+            $rempl = $markid . base64_encode($m['modele']) . '|@';
131
+            $texte = substr_replace($texte, $rempl, $m['pos'] + $offset_pos, $m['length']);
132
+            $offset_pos += strlen($rempl) - $m['length'];
133
+        }
134
+    }
135
+
136
+    return [$texte, $markid];
137 137
 }
138 138
 
139 139
 /**
@@ -146,24 +146,24 @@  discard block
 block discarded – undo
146 146
  */
147 147
 function modele_retablir_raccourcis_echappes(string $texte, string $markid) {
148 148
 
149
-	if ($markid) {
150
-		$pos = 0;
151
-		while (
152
-			($p = strpos($texte, $markid, $pos)) !== false
153
-			and $end = strpos($texte, '|@', $p + 16)
154
-		) {
155
-			$base64 = substr($texte, $p + 16, $end - ($p + 16));
156
-			if ($modele = base64_decode($base64, true)) {
157
-				$texte = substr_replace($texte, $modele, $p, $end + 2 - $p);
158
-				$pos = $p + strlen($modele);
159
-			}
160
-			else {
161
-				$pos = $end;
162
-			}
163
-		}
164
-	}
165
-
166
-	return $texte;
149
+    if ($markid) {
150
+        $pos = 0;
151
+        while (
152
+            ($p = strpos($texte, $markid, $pos)) !== false
153
+            and $end = strpos($texte, '|@', $p + 16)
154
+        ) {
155
+            $base64 = substr($texte, $p + 16, $end - ($p + 16));
156
+            if ($modele = base64_decode($base64, true)) {
157
+                $texte = substr_replace($texte, $modele, $p, $end + 2 - $p);
158
+                $pos = $p + strlen($modele);
159
+            }
160
+            else {
161
+                $pos = $end;
162
+            }
163
+        }
164
+    }
165
+
166
+    return $texte;
167 167
 }
168 168
 
169 169
 
@@ -178,82 +178,82 @@  discard block
 block discarded – undo
178 178
  * @return string
179 179
  */
180 180
 function traiter_modeles($texte, $doublons = false, $echap = '', string $connect = '', ?string $markidliens = null, $env = []) {
181
-	// preserver la compatibilite : true = recherche des documents
182
-	if ($doublons === true) {
183
-		$doublons = ['documents' => ['doc', 'emb', 'img']];
184
-	}
185
-
186
-	$modeles = modeles_collecter($texte, true);
187
-	if (!empty($modeles)) {
188
-		include_spip('public/assembler');
189
-		$wrap_embed_html = charger_fonction('wrap_embed_html', 'inc', true);
190
-
191
-		$offset_pos = 0;
192
-		foreach ($modeles as $m) {
193
-			// calculer le modele
194
-			# hack indexation
195
-			if ($doublons) {
196
-				$texte .= preg_replace(',[|][^|=]*,s', ' ', $m['params']);
197
-			} # version normale
198
-			else {
199
-				// si un tableau de liens a ete passe, reinjecter le contenu d'origine
200
-				// dans les parametres, plutot que les liens echappes
201
-				$params = $m['params'];
202
-				if (!is_null($markidliens)) {
203
-					$params = liens_retablir_raccourcis_echappes($params, $markidliens);
204
-				}
205
-
206
-				$modele = inclure_modele($m['type'], $m['id'], $params, $m['lien'], $connect ?? '', $env);
207
-
208
-				// en cas d'echec,
209
-				// si l'objet demande a une url,
210
-				// creer un petit encadre vers elle
211
-				if ($modele === false) {
212
-					$modele = $m['modele'];
213
-
214
-					if (!is_null($markidliens)) {
215
-						$modele = liens_retablir_raccourcis_echappes($modele, $markidliens);
216
-					}
217
-
218
-					$contexte = array_merge($env, ['id' => $m['id'], 'type' => $m['type'], 'modele' => $modele]);
219
-
220
-					if (!empty($m['lien'])) {
221
-						# un eventuel guillemet (") sera reechappe par #ENV
222
-						$contexte['lien'] = str_replace('&quot;', '"', $m['lien']['href']);
223
-						$contexte['lien_class'] = $m['lien']['class'];
224
-						$contexte['lien_mime'] = $m['lien']['mime'];
225
-						$contexte['lien_title'] = $m['lien']['title'];
226
-						$contexte['lien_hreflang'] = $m['lien']['hreflang'];
227
-					}
228
-
229
-					$modele = recuperer_fond('modeles/dist', $contexte, [], $connect ?? '');
230
-				}
231
-
232
-				// le remplacer dans le texte
233
-				if ($modele !== false) {
234
-					$modele = protege_js_modeles($modele);
235
-
236
-					if ($wrap_embed_html) {
237
-						$modele = $wrap_embed_html($m['modele'], $modele);
238
-					}
239
-
240
-					$rempl = code_echappement($modele, $echap);
241
-					$texte = substr_replace($texte, $rempl, $m['pos'] + $offset_pos, $m['length']);
242
-					$offset_pos += strlen($rempl) - $m['length'];
243
-				}
244
-			}
245
-
246
-			// hack pour tout l'espace prive
247
-			if ((test_espace_prive() or ($doublons)) and !empty($m['id'])) {
248
-				$type = strtolower($m['type']);
249
-				foreach ($doublons ?: ['documents' => ['doc', 'emb', 'img']] as $quoi => $type_modeles) {
250
-					if (in_array($type, $type_modeles)) {
251
-						$GLOBALS["doublons_{$quoi}_inclus"][] = $m['id'];
252
-					}
253
-				}
254
-			}
255
-		}
256
-	}
257
-
258
-	return $texte;
181
+    // preserver la compatibilite : true = recherche des documents
182
+    if ($doublons === true) {
183
+        $doublons = ['documents' => ['doc', 'emb', 'img']];
184
+    }
185
+
186
+    $modeles = modeles_collecter($texte, true);
187
+    if (!empty($modeles)) {
188
+        include_spip('public/assembler');
189
+        $wrap_embed_html = charger_fonction('wrap_embed_html', 'inc', true);
190
+
191
+        $offset_pos = 0;
192
+        foreach ($modeles as $m) {
193
+            // calculer le modele
194
+            # hack indexation
195
+            if ($doublons) {
196
+                $texte .= preg_replace(',[|][^|=]*,s', ' ', $m['params']);
197
+            } # version normale
198
+            else {
199
+                // si un tableau de liens a ete passe, reinjecter le contenu d'origine
200
+                // dans les parametres, plutot que les liens echappes
201
+                $params = $m['params'];
202
+                if (!is_null($markidliens)) {
203
+                    $params = liens_retablir_raccourcis_echappes($params, $markidliens);
204
+                }
205
+
206
+                $modele = inclure_modele($m['type'], $m['id'], $params, $m['lien'], $connect ?? '', $env);
207
+
208
+                // en cas d'echec,
209
+                // si l'objet demande a une url,
210
+                // creer un petit encadre vers elle
211
+                if ($modele === false) {
212
+                    $modele = $m['modele'];
213
+
214
+                    if (!is_null($markidliens)) {
215
+                        $modele = liens_retablir_raccourcis_echappes($modele, $markidliens);
216
+                    }
217
+
218
+                    $contexte = array_merge($env, ['id' => $m['id'], 'type' => $m['type'], 'modele' => $modele]);
219
+
220
+                    if (!empty($m['lien'])) {
221
+                        # un eventuel guillemet (") sera reechappe par #ENV
222
+                        $contexte['lien'] = str_replace('&quot;', '"', $m['lien']['href']);
223
+                        $contexte['lien_class'] = $m['lien']['class'];
224
+                        $contexte['lien_mime'] = $m['lien']['mime'];
225
+                        $contexte['lien_title'] = $m['lien']['title'];
226
+                        $contexte['lien_hreflang'] = $m['lien']['hreflang'];
227
+                    }
228
+
229
+                    $modele = recuperer_fond('modeles/dist', $contexte, [], $connect ?? '');
230
+                }
231
+
232
+                // le remplacer dans le texte
233
+                if ($modele !== false) {
234
+                    $modele = protege_js_modeles($modele);
235
+
236
+                    if ($wrap_embed_html) {
237
+                        $modele = $wrap_embed_html($m['modele'], $modele);
238
+                    }
239
+
240
+                    $rempl = code_echappement($modele, $echap);
241
+                    $texte = substr_replace($texte, $rempl, $m['pos'] + $offset_pos, $m['length']);
242
+                    $offset_pos += strlen($rempl) - $m['length'];
243
+                }
244
+            }
245
+
246
+            // hack pour tout l'espace prive
247
+            if ((test_espace_prive() or ($doublons)) and !empty($m['id'])) {
248
+                $type = strtolower($m['type']);
249
+                foreach ($doublons ?: ['documents' => ['doc', 'emb', 'img']] as $quoi => $type_modeles) {
250
+                    if (in_array($type, $type_modeles)) {
251
+                        $GLOBALS["doublons_{$quoi}_inclus"][] = $m['id'];
252
+                    }
253
+                }
254
+            }
255
+        }
256
+    }
257
+
258
+    return $texte;
259 259
 }
Please login to merge, or discard this patch.