Completed
Push — master ( a15233...457c22 )
by cam
01:25
created
prive/formulaires/inscription.php 1 patch
Indentation   +124 added lines, -124 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
 /**
@@ -40,24 +40,24 @@  discard block
 block discarded – undo
40 40
  */
41 41
 function formulaires_inscription_charger_dist($mode = '', $options = [], $retour = '') {
42 42
 
43
-	$id = ($options['id'] ?? 0);
43
+    $id = ($options['id'] ?? 0);
44 44
 
45
-	// fournir le mode de la config ou tester si l'argument du formulaire est un mode accepte par celle-ci
46
-	// pas de formulaire si le mode est interdit
47
-	include_spip('inc/autoriser');
48
-	if (!autoriser('inscrireauteur', $mode, $id)) {
49
-		return false;
50
-	}
45
+    // fournir le mode de la config ou tester si l'argument du formulaire est un mode accepte par celle-ci
46
+    // pas de formulaire si le mode est interdit
47
+    include_spip('inc/autoriser');
48
+    if (!autoriser('inscrireauteur', $mode, $id)) {
49
+        return false;
50
+    }
51 51
 
52
-	// pas de formulaire si on a déjà une session avec un statut égal ou meilleur au mode
53
-	if (isset($GLOBALS['visiteur_session']['statut']) and ($GLOBALS['visiteur_session']['statut'] <= $mode)) {
54
-		return false;
55
-	}
52
+    // pas de formulaire si on a déjà une session avec un statut égal ou meilleur au mode
53
+    if (isset($GLOBALS['visiteur_session']['statut']) and ($GLOBALS['visiteur_session']['statut'] <= $mode)) {
54
+        return false;
55
+    }
56 56
 
57 57
 
58
-	$valeurs = array('nom_inscription' => '', 'mail_inscription' => '', 'id' => $id, '_mode' => $mode);
58
+    $valeurs = array('nom_inscription' => '', 'mail_inscription' => '', 'id' => $id, '_mode' => $mode);
59 59
 
60
-	return $valeurs;
60
+    return $valeurs;
61 61
 }
62 62
 
63 63
 
@@ -70,69 +70,69 @@  discard block
 block discarded – undo
70 70
  * @return array
71 71
  */
72 72
 function formulaires_inscription_verifier_dist($mode = '', $options = [], $retour = '') {
73
-	set_request('_upgrade_auteur'); // securite
74
-	include_spip('inc/filtres');
75
-	$erreurs = array();
76
-
77
-	$id = ($options['id'] ?? 0);
78
-
79
-	include_spip('inc/autoriser');
80
-	if (!autoriser('inscrireauteur', $mode, $id)
81
-		or (strlen(_request('nobot')) > 0)
82
-	) {
83
-		$erreurs['message_erreur'] = _T('pass_rien_a_faire_ici');
84
-	}
85
-
86
-	if (!$nom = _request('nom_inscription')) {
87
-		$erreurs['nom_inscription'] = _T('info_obligatoire');
88
-	} elseif (!nom_acceptable(_request('nom_inscription'))) {
89
-		$erreurs['nom_inscription'] = _T('ecrire:info_nom_pas_conforme');
90
-	}
91
-	if (!$mail = strval(_request('mail_inscription'))) {
92
-		$erreurs['mail_inscription'] = _T('info_obligatoire');
93
-	}
94
-
95
-	// compatibilite avec anciennes fonction surchargeables
96
-	// plus de definition par defaut
97
-	if (!count($erreurs)) {
98
-		include_spip('action/inscrire_auteur');
99
-		if (function_exists('test_inscription')) {
100
-			$f = 'test_inscription';
101
-		} else {
102
-			$f = 'test_inscription_dist';
103
-		}
104
-		$declaration = $f($mode, $mail, $nom, $options);
105
-		if (is_string($declaration)) {
106
-			$k = (strpos($declaration, 'mail') !== false) ?
107
-				'mail_inscription' : 'nom_inscription';
108
-			$erreurs[$k] = _T($declaration);
109
-		} else {
110
-			include_spip('base/abstract_sql');
111
-
112
-			if ($row = sql_fetsel(
113
-				'statut, id_auteur, login, email',
114
-				'spip_auteurs',
115
-				'email=' . sql_quote($declaration['email'])
116
-			)) {
117
-				if (($row['statut'] == '5poubelle') and empty($declaration['pass'])) {
118
-					// irrecuperable
119
-					$erreurs['message_erreur'] = _T('form_forum_access_refuse');
120
-				} else {
121
-					if (($row['statut'] != 'nouveau') and empty($declaration['pass'])) {
122
-						if (intval($row['statut']) > intval($mode)) {
123
-							set_request('_upgrade_auteur', $row['id_auteur']);
124
-						} else {
125
-							// deja inscrit
126
-							$erreurs['message_erreur'] = _T('form_forum_email_deja_enregistre');
127
-						}
128
-					}
129
-				}
130
-				spip_log($row['id_auteur'] . ' veut se resinscrire');
131
-			}
132
-		}
133
-	}
134
-
135
-	return $erreurs;
73
+    set_request('_upgrade_auteur'); // securite
74
+    include_spip('inc/filtres');
75
+    $erreurs = array();
76
+
77
+    $id = ($options['id'] ?? 0);
78
+
79
+    include_spip('inc/autoriser');
80
+    if (!autoriser('inscrireauteur', $mode, $id)
81
+        or (strlen(_request('nobot')) > 0)
82
+    ) {
83
+        $erreurs['message_erreur'] = _T('pass_rien_a_faire_ici');
84
+    }
85
+
86
+    if (!$nom = _request('nom_inscription')) {
87
+        $erreurs['nom_inscription'] = _T('info_obligatoire');
88
+    } elseif (!nom_acceptable(_request('nom_inscription'))) {
89
+        $erreurs['nom_inscription'] = _T('ecrire:info_nom_pas_conforme');
90
+    }
91
+    if (!$mail = strval(_request('mail_inscription'))) {
92
+        $erreurs['mail_inscription'] = _T('info_obligatoire');
93
+    }
94
+
95
+    // compatibilite avec anciennes fonction surchargeables
96
+    // plus de definition par defaut
97
+    if (!count($erreurs)) {
98
+        include_spip('action/inscrire_auteur');
99
+        if (function_exists('test_inscription')) {
100
+            $f = 'test_inscription';
101
+        } else {
102
+            $f = 'test_inscription_dist';
103
+        }
104
+        $declaration = $f($mode, $mail, $nom, $options);
105
+        if (is_string($declaration)) {
106
+            $k = (strpos($declaration, 'mail') !== false) ?
107
+                'mail_inscription' : 'nom_inscription';
108
+            $erreurs[$k] = _T($declaration);
109
+        } else {
110
+            include_spip('base/abstract_sql');
111
+
112
+            if ($row = sql_fetsel(
113
+                'statut, id_auteur, login, email',
114
+                'spip_auteurs',
115
+                'email=' . sql_quote($declaration['email'])
116
+            )) {
117
+                if (($row['statut'] == '5poubelle') and empty($declaration['pass'])) {
118
+                    // irrecuperable
119
+                    $erreurs['message_erreur'] = _T('form_forum_access_refuse');
120
+                } else {
121
+                    if (($row['statut'] != 'nouveau') and empty($declaration['pass'])) {
122
+                        if (intval($row['statut']) > intval($mode)) {
123
+                            set_request('_upgrade_auteur', $row['id_auteur']);
124
+                        } else {
125
+                            // deja inscrit
126
+                            $erreurs['message_erreur'] = _T('form_forum_email_deja_enregistre');
127
+                        }
128
+                    }
129
+                }
130
+                spip_log($row['id_auteur'] . ' veut se resinscrire');
131
+            }
132
+        }
133
+    }
134
+
135
+    return $erreurs;
136 136
 }
137 137
 
138 138
 /**
@@ -144,51 +144,51 @@  discard block
 block discarded – undo
144 144
  * @return array
145 145
  */
146 146
 function formulaires_inscription_traiter_dist($mode = '', array $options = [], $retour = '') {
147
-	if ($retour) {
148
-		refuser_traiter_formulaire_ajax();
149
-	}
150
-
151
-	include_spip('inc/filtres');
152
-	include_spip('inc/autoriser');
153
-
154
-	$id = ($options['id'] ?? 0);
155
-
156
-	if (!autoriser('inscrireauteur', $mode, $id)) {
157
-		$desc = 'rien a faire ici';
158
-	} else {
159
-		if ($id_auteur = _request('_upgrade_auteur')) {
160
-			include_spip('action/editer_auteur');
161
-			autoriser_exception('modifier', 'auteur', $id_auteur);
162
-			autoriser_exception('instituer', 'auteur', $id_auteur);
163
-			auteur_modifier($id_auteur, array('statut' => $mode));
164
-			autoriser_exception('modifier', 'auteur', $id_auteur, false);
165
-			autoriser_exception('instituer', 'auteur', $id_auteur, false);
166
-
167
-			return array('message_ok' => _T('form_forum_email_deja_enregistre'), 'id_auteur' => $id_auteur);
168
-		}
169
-
170
-		$nom = _request('nom_inscription');
171
-		$mail_complet = _request('mail_inscription');
172
-
173
-		$inscrire_auteur = charger_fonction('inscrire_auteur', 'action');
174
-		$desc = $inscrire_auteur($mode, $mail_complet, $nom, $options);
175
-	}
176
-
177
-	// erreur ?
178
-	if (is_string($desc)) {
179
-		return array('message_erreur' => $desc);
180
-	} // OK
181
-	else {
182
-		$retours = array(
183
-			'message_ok' => _T('form_forum_identifiant_mail'),
184
-			'id_auteur' => $desc['id_auteur'],
185
-		);
186
-
187
-		// Si on demande à rediriger juste après validation du formulaire
188
-		if ($retour) {
189
-			$retours['redirect'] = $retour;
190
-		}
191
-
192
-		return $retours;
193
-	}
147
+    if ($retour) {
148
+        refuser_traiter_formulaire_ajax();
149
+    }
150
+
151
+    include_spip('inc/filtres');
152
+    include_spip('inc/autoriser');
153
+
154
+    $id = ($options['id'] ?? 0);
155
+
156
+    if (!autoriser('inscrireauteur', $mode, $id)) {
157
+        $desc = 'rien a faire ici';
158
+    } else {
159
+        if ($id_auteur = _request('_upgrade_auteur')) {
160
+            include_spip('action/editer_auteur');
161
+            autoriser_exception('modifier', 'auteur', $id_auteur);
162
+            autoriser_exception('instituer', 'auteur', $id_auteur);
163
+            auteur_modifier($id_auteur, array('statut' => $mode));
164
+            autoriser_exception('modifier', 'auteur', $id_auteur, false);
165
+            autoriser_exception('instituer', 'auteur', $id_auteur, false);
166
+
167
+            return array('message_ok' => _T('form_forum_email_deja_enregistre'), 'id_auteur' => $id_auteur);
168
+        }
169
+
170
+        $nom = _request('nom_inscription');
171
+        $mail_complet = _request('mail_inscription');
172
+
173
+        $inscrire_auteur = charger_fonction('inscrire_auteur', 'action');
174
+        $desc = $inscrire_auteur($mode, $mail_complet, $nom, $options);
175
+    }
176
+
177
+    // erreur ?
178
+    if (is_string($desc)) {
179
+        return array('message_erreur' => $desc);
180
+    } // OK
181
+    else {
182
+        $retours = array(
183
+            'message_ok' => _T('form_forum_identifiant_mail'),
184
+            'id_auteur' => $desc['id_auteur'],
185
+        );
186
+
187
+        // Si on demande à rediriger juste après validation du formulaire
188
+        if ($retour) {
189
+            $retours['redirect'] = $retour;
190
+        }
191
+
192
+        return $retours;
193
+    }
194 194
 }
Please login to merge, or discard this patch.
ecrire/balise/formulaire_inscription.php 1 patch
Indentation   +14 added lines, -14 removed lines patch added patch discarded remove patch
@@ -17,7 +17,7 @@  discard block
 block discarded – undo
17 17
  **/
18 18
 
19 19
 if (!defined('_ECRIRE_INC_VERSION')) {
20
-	return;
20
+    return;
21 21
 }
22 22
 
23 23
 include_spip('base/abstract_sql');
@@ -44,7 +44,7 @@  discard block
 block discarded – undo
44 44
  *     Pile complétée du code compilé
45 45
  **/
46 46
 function balise_FORMULAIRE_INSCRIPTION($p) {
47
-	return calculer_balise_dynamique($p, 'FORMULAIRE_INSCRIPTION', []);
47
+    return calculer_balise_dynamique($p, 'FORMULAIRE_INSCRIPTION', []);
48 48
 }
49 49
 
50 50
 /**
@@ -74,19 +74,19 @@  discard block
 block discarded – undo
74 74
  *   - chaîne vide sinon.
75 75
  */
76 76
 function balise_FORMULAIRE_INSCRIPTION_stat($args, $context_compil) {
77
-	[$mode, $id_ou_options, $retour] = array_pad($args, 3, null);
77
+    [$mode, $id_ou_options, $retour] = array_pad($args, 3, null);
78 78
 
79
-	// Compatibilité avec l'ancien param "id" dans les deux sens
80
-	if (!is_array($id_ou_options)) {
81
-		$options = ['id' => intval($id_ou_options)];
82
-		$id = $options['id'];
83
-	}else {
84
-		$options = $id_ou_options;
85
-		$id = (int) ($id_ou_options['id'] ?? 0);
86
-	}
79
+    // Compatibilité avec l'ancien param "id" dans les deux sens
80
+    if (!is_array($id_ou_options)) {
81
+        $options = ['id' => intval($id_ou_options)];
82
+        $id = $options['id'];
83
+    }else {
84
+        $options = $id_ou_options;
85
+        $id = (int) ($id_ou_options['id'] ?? 0);
86
+    }
87 87
 
88
-	include_spip('action/inscrire_auteur');
89
-	$mode = tester_statut_inscription($mode, $id);
88
+    include_spip('action/inscrire_auteur');
89
+    $mode = tester_statut_inscription($mode, $id);
90 90
 
91
-	return $mode ? [$mode, $options, $retour] : '';
91
+    return $mode ? [$mode, $options, $retour] : '';
92 92
 }
Please login to merge, or discard this patch.
prive/formulaires/mot_de_passe.php 1 patch
Indentation   +128 added lines, -128 removed lines patch added patch discarded remove patch
@@ -11,30 +11,30 @@  discard block
 block discarded – undo
11 11
 \***************************************************************************/
12 12
 
13 13
 if (!defined('_ECRIRE_INC_VERSION')) {
14
-	return;
14
+    return;
15 15
 }
16 16
 
17 17
 include_spip('base/abstract_sql');
18 18
 
19 19
 function retrouve_auteur($id_auteur, $jeton = '') {
20
-	if ($id_auteur = intval($id_auteur)) {
21
-		return sql_fetsel(
22
-			'*',
23
-			'spip_auteurs',
24
-			array('id_auteur=' . intval($id_auteur), "statut<>'5poubelle'", "pass<>''", "login<>''")
25
-		);
26
-	} elseif ($jeton) {
27
-		include_spip('action/inscrire_auteur');
28
-		if ($auteur = auteur_verifier_jeton($jeton)
29
-			and $auteur['statut'] <> '5poubelle'
30
-			and $auteur['pass'] <> ''
31
-			and $auteur['login'] <> ''
32
-		) {
33
-			return $auteur;
34
-		}
35
-	}
36
-
37
-	return false;
20
+    if ($id_auteur = intval($id_auteur)) {
21
+        return sql_fetsel(
22
+            '*',
23
+            'spip_auteurs',
24
+            array('id_auteur=' . intval($id_auteur), "statut<>'5poubelle'", "pass<>''", "login<>''")
25
+        );
26
+    } elseif ($jeton) {
27
+        include_spip('action/inscrire_auteur');
28
+        if ($auteur = auteur_verifier_jeton($jeton)
29
+            and $auteur['statut'] <> '5poubelle'
30
+            and $auteur['pass'] <> ''
31
+            and $auteur['login'] <> ''
32
+        ) {
33
+            return $auteur;
34
+        }
35
+    }
36
+
37
+    return false;
38 38
 }
39 39
 
40 40
 // chargement des valeurs par defaut des champs du formulaire
@@ -49,30 +49,30 @@  discard block
 block discarded – undo
49 49
  */
50 50
 function formulaires_mot_de_passe_charger_dist($id_auteur = null, $jeton = null) {
51 51
 
52
-	$valeurs = array();
53
-	// compatibilite anciens appels du formulaire
54
-	if (is_null($jeton)) {
55
-		$jeton = _request('p');
56
-	}
57
-	$auteur = retrouve_auteur($id_auteur, $jeton);
58
-
59
-	if ($auteur) {
60
-		$valeurs['id_auteur'] = $id_auteur; // a toutes fins utiles pour le formulaire
61
-		if ($jeton) {
62
-			$valeurs['_hidden'] = '<input type="hidden" name="p" value="' . $jeton . '" />';
63
-		}
64
-	} else {
65
-		$valeurs['message_erreur'] = _T('pass_erreur_code_inconnu');
66
-		$valeurs['editable'] = false; // pas de saisie
67
-	}
68
-	$valeurs['oubli'] = '';
69
-	// le champ login n'est pas utilise, mais il est destine aux navigateurs smarts
70
-	// qui veulent remplir le formulaire avec login/mot de passe
71
-	// et qui sinon remplissent le champ nobot (autocomplete=off n'est pas une option, certains navigateurs l'ignorant)
72
-	$valeurs['login'] = '';
73
-	$valeurs['nobot'] = '';
74
-
75
-	return $valeurs;
52
+    $valeurs = array();
53
+    // compatibilite anciens appels du formulaire
54
+    if (is_null($jeton)) {
55
+        $jeton = _request('p');
56
+    }
57
+    $auteur = retrouve_auteur($id_auteur, $jeton);
58
+
59
+    if ($auteur) {
60
+        $valeurs['id_auteur'] = $id_auteur; // a toutes fins utiles pour le formulaire
61
+        if ($jeton) {
62
+            $valeurs['_hidden'] = '<input type="hidden" name="p" value="' . $jeton . '" />';
63
+        }
64
+    } else {
65
+        $valeurs['message_erreur'] = _T('pass_erreur_code_inconnu');
66
+        $valeurs['editable'] = false; // pas de saisie
67
+    }
68
+    $valeurs['oubli'] = '';
69
+    // le champ login n'est pas utilise, mais il est destine aux navigateurs smarts
70
+    // qui veulent remplir le formulaire avec login/mot de passe
71
+    // et qui sinon remplissent le champ nobot (autocomplete=off n'est pas une option, certains navigateurs l'ignorant)
72
+    $valeurs['login'] = '';
73
+    $valeurs['nobot'] = '';
74
+
75
+    return $valeurs;
76 76
 }
77 77
 
78 78
 /**
@@ -83,36 +83,36 @@  discard block
 block discarded – undo
83 83
  * @param int $id_auteur
84 84
  */
85 85
 function formulaires_mot_de_passe_verifier_dist($id_auteur = null, $jeton = null) {
86
-	$erreurs = array();
87
-	if (!_request('oubli')) {
88
-		$erreurs['oubli'] = _T('info_obligatoire');
89
-	} else {
90
-		if (strlen($p = _request('oubli')) < _PASS_LONGUEUR_MINI) {
91
-			$erreurs['oubli'] = _T('info_passe_trop_court_car_pluriel', array('nb' => _PASS_LONGUEUR_MINI));
92
-		} else {
93
-			if (!is_null($c = _request('oubli_confirm'))) {
94
-				if (!$c) {
95
-					$erreurs['oubli_confirm'] = _T('info_obligatoire');
96
-				} elseif ($c !== $p) {
97
-					$erreurs['oubli'] = _T('info_passes_identiques');
98
-				}
99
-			}
100
-		}
101
-	}
102
-	if (isset($erreurs['oubli'])) {
103
-		set_request('oubli');
104
-		set_request('oubli_confirm');
105
-	}
106
-
107
-	if (_request('nobot')) {
108
-		$erreurs['message_erreur'] = _T('pass_rien_a_faire_ici');
109
-	}
110
-	// precaution
111
-	if (_request('login')) {
112
-		set_request('login');
113
-	}
114
-
115
-	return $erreurs;
86
+    $erreurs = array();
87
+    if (!_request('oubli')) {
88
+        $erreurs['oubli'] = _T('info_obligatoire');
89
+    } else {
90
+        if (strlen($p = _request('oubli')) < _PASS_LONGUEUR_MINI) {
91
+            $erreurs['oubli'] = _T('info_passe_trop_court_car_pluriel', array('nb' => _PASS_LONGUEUR_MINI));
92
+        } else {
93
+            if (!is_null($c = _request('oubli_confirm'))) {
94
+                if (!$c) {
95
+                    $erreurs['oubli_confirm'] = _T('info_obligatoire');
96
+                } elseif ($c !== $p) {
97
+                    $erreurs['oubli'] = _T('info_passes_identiques');
98
+                }
99
+            }
100
+        }
101
+    }
102
+    if (isset($erreurs['oubli'])) {
103
+        set_request('oubli');
104
+        set_request('oubli_confirm');
105
+    }
106
+
107
+    if (_request('nobot')) {
108
+        $erreurs['message_erreur'] = _T('pass_rien_a_faire_ici');
109
+    }
110
+    // precaution
111
+    if (_request('login')) {
112
+        set_request('login');
113
+    }
114
+
115
+    return $erreurs;
116 116
 }
117 117
 
118 118
 /**
@@ -122,59 +122,59 @@  discard block
 block discarded – undo
122 122
  * @param int $id_auteur
123 123
  */
124 124
 function formulaires_mot_de_passe_traiter_dist($id_auteur = null, $jeton = null) {
125
-	$res = array('message_ok' => '');
126
-	refuser_traiter_formulaire_ajax(); // puisqu'on va loger l'auteur a la volee (c'est bonus)
127
-
128
-	// compatibilite anciens appels du formulaire
129
-	if (is_null($jeton)) {
130
-		$jeton = _request('p');
131
-	}
132
-	$row = retrouve_auteur($id_auteur, $jeton);
133
-
134
-	if ($row
135
-		&& ($id_auteur = $row['id_auteur'])
136
-		&& ($oubli = _request('oubli'))
137
-	) {
138
-		include_spip('action/editer_auteur');
139
-		include_spip('action/inscrire_auteur');
140
-		if ($err = auteur_modifier($id_auteur, array('pass' => $oubli))) {
141
-			$res = array('message_erreur' => $err);
142
-		} else {
143
-			auteur_effacer_jeton($id_auteur);
144
-
145
-			// Par défaut, on rappelle de s'identifier avec son email s'il existe
146
-			// et qu'il n'est PAS utilisé par quelqu'un d'autre
147
-			if (
148
-				$row['email']
149
-				and !sql_fetsel(
150
-					'id_auteur',
151
-					'spip_auteurs',
152
-					array(
153
-						'(email='.sql_quote($row['email']).' or login='.sql_quote($row['email']).')',
154
-						'id_auteur != '.$id_auteur
155
-					),
156
-					'', '', '0,1'
157
-				)
158
-			) {
159
-				$identifiant = $row['email'];
160
-			}
161
-			// Sinon on dit d'utiliser le login
162
-			else {
163
-				$identifiant = $row['login'];
164
-			}
165
-			$res['message_ok'] = '<b>' . _T('pass_nouveau_enregistre') . '</b>' .
166
-				'<br />' . _T('pass_rappel_login', array('login' => $identifiant));
167
-
168
-			include_spip('inc/auth');
169
-			$auth = auth_identifier_login($row['login'], $oubli);
170
-			if (!is_array($auth)) {
171
-				spip_log("Erreur identification ".$row['login']." après changement de mot de passe: $auth", _LOG_ERREUR);
172
-			}
173
-			elseif ($auth['id_auteur'] == $id_auteur) {
174
-				auth_loger($auth);
175
-			}
176
-		}
177
-	}
178
-
179
-	return $res;
125
+    $res = array('message_ok' => '');
126
+    refuser_traiter_formulaire_ajax(); // puisqu'on va loger l'auteur a la volee (c'est bonus)
127
+
128
+    // compatibilite anciens appels du formulaire
129
+    if (is_null($jeton)) {
130
+        $jeton = _request('p');
131
+    }
132
+    $row = retrouve_auteur($id_auteur, $jeton);
133
+
134
+    if ($row
135
+        && ($id_auteur = $row['id_auteur'])
136
+        && ($oubli = _request('oubli'))
137
+    ) {
138
+        include_spip('action/editer_auteur');
139
+        include_spip('action/inscrire_auteur');
140
+        if ($err = auteur_modifier($id_auteur, array('pass' => $oubli))) {
141
+            $res = array('message_erreur' => $err);
142
+        } else {
143
+            auteur_effacer_jeton($id_auteur);
144
+
145
+            // Par défaut, on rappelle de s'identifier avec son email s'il existe
146
+            // et qu'il n'est PAS utilisé par quelqu'un d'autre
147
+            if (
148
+                $row['email']
149
+                and !sql_fetsel(
150
+                    'id_auteur',
151
+                    'spip_auteurs',
152
+                    array(
153
+                        '(email='.sql_quote($row['email']).' or login='.sql_quote($row['email']).')',
154
+                        'id_auteur != '.$id_auteur
155
+                    ),
156
+                    '', '', '0,1'
157
+                )
158
+            ) {
159
+                $identifiant = $row['email'];
160
+            }
161
+            // Sinon on dit d'utiliser le login
162
+            else {
163
+                $identifiant = $row['login'];
164
+            }
165
+            $res['message_ok'] = '<b>' . _T('pass_nouveau_enregistre') . '</b>' .
166
+                '<br />' . _T('pass_rappel_login', array('login' => $identifiant));
167
+
168
+            include_spip('inc/auth');
169
+            $auth = auth_identifier_login($row['login'], $oubli);
170
+            if (!is_array($auth)) {
171
+                spip_log("Erreur identification ".$row['login']." après changement de mot de passe: $auth", _LOG_ERREUR);
172
+            }
173
+            elseif ($auth['id_auteur'] == $id_auteur) {
174
+                auth_loger($auth);
175
+            }
176
+        }
177
+    }
178
+
179
+    return $res;
180 180
 }
Please login to merge, or discard this patch.
prive/formulaires/oubli.php 1 patch
Indentation   +67 added lines, -67 removed lines patch added patch discarded remove patch
@@ -11,104 +11,104 @@
 block discarded – undo
11 11
 \***************************************************************************/
12 12
 
13 13
 if (!defined('_ECRIRE_INC_VERSION')) {
14
-	return;
14
+    return;
15 15
 }
16 16
 
17 17
 // chargement des valeurs par defaut des champs du formulaire
18 18
 function formulaires_oubli_charger_dist() {
19
-	$valeurs = array('oubli' => '', 'nobot' => '');
19
+    $valeurs = array('oubli' => '', 'nobot' => '');
20 20
 
21
-	return $valeurs;
21
+    return $valeurs;
22 22
 }
23 23
 
24 24
 // https://code.spip.net/@message_oubli
25 25
 function message_oubli($email, $param) {
26
-	$r = formulaires_oubli_mail($email);
27
-
28
-	if (is_array($r) and $r[1] and $r[1]['statut'] !== '5poubelle' and $r[1]['pass'] !== '') {
29
-		include_spip('inc/texte'); # pour corriger_typo
30
-
31
-		include_spip('action/inscrire_auteur');
32
-		$cookie = auteur_attribuer_jeton($r[1]['id_auteur']);
33
-
34
-		// l'url_reset doit etre une URL de confiance, on force donc un url_absolue sur adresse_site
35
-		include_spip('inc/filtres');
36
-		$msg = recuperer_fond(
37
-			'modeles/mail_oubli',
38
-			array(
39
-				'url_reset' => url_absolue(
40
-					generer_url_public('spip_pass', "$param=$cookie"),
41
-					$GLOBALS['meta']['adresse_site'] . '/'
42
-				)
43
-			)
44
-		);
45
-		include_spip('inc/notifications');
46
-		notifications_envoyer_mails($email, $msg);
47
-	}
48
-
49
-	return _T('pass_recevoir_mail');
26
+    $r = formulaires_oubli_mail($email);
27
+
28
+    if (is_array($r) and $r[1] and $r[1]['statut'] !== '5poubelle' and $r[1]['pass'] !== '') {
29
+        include_spip('inc/texte'); # pour corriger_typo
30
+
31
+        include_spip('action/inscrire_auteur');
32
+        $cookie = auteur_attribuer_jeton($r[1]['id_auteur']);
33
+
34
+        // l'url_reset doit etre une URL de confiance, on force donc un url_absolue sur adresse_site
35
+        include_spip('inc/filtres');
36
+        $msg = recuperer_fond(
37
+            'modeles/mail_oubli',
38
+            array(
39
+                'url_reset' => url_absolue(
40
+                    generer_url_public('spip_pass', "$param=$cookie"),
41
+                    $GLOBALS['meta']['adresse_site'] . '/'
42
+                )
43
+            )
44
+        );
45
+        include_spip('inc/notifications');
46
+        notifications_envoyer_mails($email, $msg);
47
+    }
48
+
49
+    return _T('pass_recevoir_mail');
50 50
 }
51 51
 
52 52
 // la saisie a ete validee, on peut agir
53 53
 function formulaires_oubli_traiter_dist() {
54 54
 
55
-	$message = message_oubli(_request('oubli'), 'p');
55
+    $message = message_oubli(_request('oubli'), 'p');
56 56
 
57
-	return array('message_ok' => $message);
57
+    return array('message_ok' => $message);
58 58
 }
59 59
 
60 60
 
61 61
 // fonction qu'on peut redefinir pour filtrer les adresses mail
62 62
 // https://code.spip.net/@test_oubli
63 63
 function test_oubli_dist($email) {
64
-	include_spip('inc/filtres'); # pour email_valide()
65
-	if (!email_valide($email)) {
66
-		return _T('pass_erreur_non_valide', array('email_oubli' => spip_htmlspecialchars($email)));
67
-	}
64
+    include_spip('inc/filtres'); # pour email_valide()
65
+    if (!email_valide($email)) {
66
+        return _T('pass_erreur_non_valide', array('email_oubli' => spip_htmlspecialchars($email)));
67
+    }
68 68
 
69
-	return array('mail' => $email);
69
+    return array('mail' => $email);
70 70
 }
71 71
 
72 72
 function formulaires_oubli_verifier_dist() {
73
-	$erreurs = array();
73
+    $erreurs = array();
74 74
 
75
-	$email = strval(_request('oubli'));
75
+    $email = strval(_request('oubli'));
76 76
 
77
-	$r = formulaires_oubli_mail($email);
77
+    $r = formulaires_oubli_mail($email);
78 78
 
79
-	if (!is_array($r)) {
80
-		$erreurs['oubli'] = $r;
81
-	} else {
82
-		if (!$r[1]) {
83
-			spip_log("demande de reinitialisation de mot de passe pour $email non enregistre sur le site", "oubli");
84
-		} elseif ($r[1]['statut'] == '5poubelle' or $r[1]['pass'] == '') {
85
-			spip_log("demande de reinitialisation de mot de passe pour $email sans acces (poubelle ou pass vide)", "oubli");
86
-		}
87
-	}
79
+    if (!is_array($r)) {
80
+        $erreurs['oubli'] = $r;
81
+    } else {
82
+        if (!$r[1]) {
83
+            spip_log("demande de reinitialisation de mot de passe pour $email non enregistre sur le site", "oubli");
84
+        } elseif ($r[1]['statut'] == '5poubelle' or $r[1]['pass'] == '') {
85
+            spip_log("demande de reinitialisation de mot de passe pour $email sans acces (poubelle ou pass vide)", "oubli");
86
+        }
87
+    }
88 88
 
89
-	if (_request('nobot')) {
90
-		$erreurs['message_erreur'] = _T('pass_rien_a_faire_ici');
91
-	}
89
+    if (_request('nobot')) {
90
+        $erreurs['message_erreur'] = _T('pass_rien_a_faire_ici');
91
+    }
92 92
 
93
-	return $erreurs;
93
+    return $erreurs;
94 94
 }
95 95
 
96 96
 function formulaires_oubli_mail($email) {
97
-	if (function_exists('test_oubli')) {
98
-		$f = 'test_oubli';
99
-	} else {
100
-		$f = 'test_oubli_dist';
101
-	}
102
-	$declaration = $f($email);
103
-
104
-	if (!is_array($declaration)) {
105
-		return $declaration;
106
-	} else {
107
-		include_spip('base/abstract_sql');
108
-
109
-		return array(
110
-			$declaration,
111
-			sql_fetsel('id_auteur,statut,pass', 'spip_auteurs', "login<>'' AND email =" . sql_quote($declaration['mail']))
112
-		);
113
-	}
97
+    if (function_exists('test_oubli')) {
98
+        $f = 'test_oubli';
99
+    } else {
100
+        $f = 'test_oubli_dist';
101
+    }
102
+    $declaration = $f($email);
103
+
104
+    if (!is_array($declaration)) {
105
+        return $declaration;
106
+    } else {
107
+        include_spip('base/abstract_sql');
108
+
109
+        return array(
110
+            $declaration,
111
+            sql_fetsel('id_auteur,statut,pass', 'spip_auteurs', "login<>'' AND email =" . sql_quote($declaration['mail']))
112
+        );
113
+    }
114 114
 }
Please login to merge, or discard this patch.
ecrire/src/Texte/Collecteur/Multis.php 1 patch
Indentation   +204 added lines, -204 removed lines patch added patch discarded remove patch
@@ -29,209 +29,209 @@
 block discarded – undo
29 29
  */
30 30
 class Multis extends AbstractCollecteur {
31 31
 
32
-	protected static string $markPrefix = 'MULTI';
33
-
34
-	/**
35
-	 * La preg pour découper et collecter les modèles
36
-	 * @var string
37
-	 */
38
-	protected string $preg_multi;
39
-
40
-	public function __construct(?string $preg = null) {
41
-
42
-		$this->preg_multi = ($preg ?: '@<multi>(.*?)</multi>@sS');
43
-	}
44
-
45
-	/**
46
-	 * Sanitizer une collection d'occurences de multi : on sanitize chaque texte de langue séparemment
47
-	 *
48
-	 * @param array $collection
49
-	 * @param string $sanitize_callback
50
-	 * @return array
51
-	 */
52
-	protected function sanitizer_collection(array $collection, string $sanitize_callback): array {
53
-
54
-		foreach ($collection as &$multi) {
55
-			$changed = false;
56
-			foreach ($multi['trads'] as $lang => $trad) {
57
-				$t = $sanitize_callback($trad);
58
-				if ($t !== $trad) {
59
-					$changed = true;
60
-					$multi['trads'][$lang] = $t;
61
-				}
62
-			}
63
-			if ($changed) {
64
-				$texte = $this->agglomerer_trads($multi['trads']);
65
-				$multi['raw'] = str_replace($multi['texte'], $texte, $multi['raw']);
66
-				$multi['texte'] = $texte;
67
-			}
68
-		}
69
-		return $collection;
70
-	}
71
-
72
-
73
-	/**
74
-	 * Convertit le contenu d'une balise `<multi>` en un tableau
75
-	 *
76
-	 * Exemple de blocs.
77
-	 * - `texte par défaut [fr] en français [en] en anglais`
78
-	 * - `[fr] en français [en] en anglais`
79
-	 *
80
-	 * @param string $bloc
81
-	 *     Le contenu intérieur d'un bloc multi
82
-	 * @return array [code de langue => texte]
83
-	 *     Peut retourner un code de langue vide, lorsqu'un texte par défaut est indiqué.
84
-	 **/
85
-	protected function extraire_trads($bloc) {
86
-		$trads = [];
87
-
88
-		if (strlen($bloc)) {
89
-			$langs = $this->collecteur($bloc, ']', '[', '@[\[]([a-z]{2,3}(_[a-z]{2,3})?(_[a-z]{2,3})?)[\]]@siS');
90
-			$lang = '';
91
-			$pos_prev = 0;
92
-			foreach ($langs as $l) {
93
-				$pos = $l['pos'];
94
-				if ($lang or $pos > $pos_prev) {
95
-					$trads[$lang] = substr($bloc, $pos_prev, $pos - $pos_prev);
96
-				}
97
-				$lang = $l['match'][1];
98
-				$pos_prev = $pos + $l['length'];
99
-			}
100
-			$trads[$lang] = substr($bloc, $pos_prev);
101
-		}
102
-
103
-		return $trads;
104
-	}
105
-
106
-	/**
107
-	 * Recoller ensemble les trads pour reconstituer le texte dans la balise <multi>...</multi>
108
-	 * @param $trads
109
-	 * @return string
110
-	 */
111
-	protected function agglomerer_trads($trads) {
112
-		$texte = '';
113
-		foreach ($trads as $lang => $trad) {
114
-			if ($texte or $lang) {
115
-				$texte .= "[$lang]";
116
-			}
117
-			$texte .= $trad;
118
-		}
119
-		return $texte;
120
-	}
121
-
122
-	/**
123
-	 * @param string $texte
124
-	 * @param array $options
125
-	 *   bool $collecter_liens
126
-	 * @return array
127
-	 */
128
-	public function collecter(string $texte, array $options = []): array {
129
-		if (!$texte) {
130
-			return [];
131
-		}
132
-
133
-		// collecter les matchs de la preg
134
-		$multis = $this->collecteur($texte, '', '<multi', $this->preg_multi, empty($options['detecter_presence']) ? 0 : 1);
135
-		// si on veut seulement detecter la présence, on peut retourner tel quel
136
-		if (empty($options['detecter_presence'])) {
137
-			foreach ($multis as $k => &$multi) {
138
-				$multi['texte'] = $multi['match'][1];
139
-				// extraire les trads du texte
140
-				$multi['trads'] = $this->extraire_trads($multi['texte']);
141
-			}
142
-		}
143
-
144
-		return $multis;
145
-	}
146
-
147
-	/**
148
-	 * Traiter les multis d'un texte
149
-	 *
150
-	 * @uses approcher_langue()
151
-	 * @uses lang_typo()
152
-	 * @uses code_echappement()
153
-	 * @uses echappe_retour()
154
-	 *
155
-	 * @param string $texte
156
-	 * @param array $options
157
-	 *   ?string $lang
158
-	 *   ?string $lang_defaut
159
-	 *   ?bool echappe_span
160
-	 *   ?bool appliquer_typo
161
-	 * @return string
162
-	 */
163
-	public function traiter(string $texte, array $options) {
164
-		if ($texte) {
165
-
166
-			$multis = $this->collecter($texte);
167
-			if (!empty($multis)) {
168
-				$lang = $options['lang'] ?? $GLOBALS['spip_lang'];
169
-				$lang_defaut = $options['lang_defaut'] ?? _LANGUE_PAR_DEFAUT;
170
-				$echappe_span = $options['echappe_span'] ?? false;
171
-				$appliquer_typo = $options['appliquer_typo'] ?? true;
172
-
173
-				if (!function_exists('approcher_langue')) {
174
-					include_spip('inc/lang');
175
-				}
176
-				if (!function_exists('code_echappement')) {
177
-					include_spip('inc/texte_mini');
178
-				}
179
-
180
-				$offset_pos = 0;
181
-				foreach ($multis as $m) {
182
-
183
-					// chercher la version de la langue courante
184
-					$trads = $m['trads'];
185
-					if (empty($trads)) {
186
-						$trad = '';
187
-					}
188
-					elseif ($l = approcher_langue($trads, $lang)) {
189
-						$trad = $trads[$l];
190
-					} else {
191
-						if ($lang_defaut == 'aucune') {
192
-							$trad = '';
193
-						} else {
194
-							// langue absente, prendre le fr ou une langue précisée (meme comportement que inc/traduire.php)
195
-							// ou la premiere dispo
196
-							if (!$l = approcher_langue($trads, $lang_defaut)) {
197
-								$l = array_keys($trads);
198
-								$l = reset($l);
199
-							}
200
-							$trad = $trads[$l];
201
-
202
-							// mais typographier le texte selon les regles de celle-ci
203
-							// Attention aux blocs multi sur plusieurs lignes
204
-							if ($appliquer_typo) {
205
-								$typographie = charger_fonction(lang_typo($l), 'typographie');
206
-								$trad = $typographie($trad);
207
-
208
-								// Tester si on echappe en span ou en div
209
-								// il ne faut pas echapper en div si propre produit un seul paragraphe
210
-								include_spip('inc/texte');
211
-								$trad_propre = preg_replace(',(^<p[^>]*>|</p>$),Uims', '', propre($trad));
212
-								$mode = preg_match(',</?(' . _BALISES_BLOCS . ')[>[:space:]],iS', $trad_propre) ? 'div' : 'span';
213
-								if ($mode === 'div') {
214
-									$trad = rtrim($trad) . "\n\n";
215
-								}
216
-								$trad = code_echappement($trad, 'multi', false, $mode);
217
-								$trad = str_replace("'", '"', inserer_attribut($trad, 'lang', $l));
218
-								if (lang_dir($l) !== lang_dir($lang)) {
219
-									$trad = str_replace("'", '"', inserer_attribut($trad, 'dir', lang_dir($l)));
220
-								}
221
-								if (!$echappe_span) {
222
-									$trad = echappe_retour($trad, 'multi');
223
-								}
224
-							}
225
-						}
226
-					}
227
-
228
-					$texte = substr_replace($texte, $trad, $m['pos'] + $offset_pos, $m['length']);
229
-					$offset_pos += strlen($trad) - $m['length'];
230
-				}
231
-			}
232
-		}
233
-
234
-		return $texte;
235
-	}
32
+    protected static string $markPrefix = 'MULTI';
33
+
34
+    /**
35
+     * La preg pour découper et collecter les modèles
36
+     * @var string
37
+     */
38
+    protected string $preg_multi;
39
+
40
+    public function __construct(?string $preg = null) {
41
+
42
+        $this->preg_multi = ($preg ?: '@<multi>(.*?)</multi>@sS');
43
+    }
44
+
45
+    /**
46
+     * Sanitizer une collection d'occurences de multi : on sanitize chaque texte de langue séparemment
47
+     *
48
+     * @param array $collection
49
+     * @param string $sanitize_callback
50
+     * @return array
51
+     */
52
+    protected function sanitizer_collection(array $collection, string $sanitize_callback): array {
53
+
54
+        foreach ($collection as &$multi) {
55
+            $changed = false;
56
+            foreach ($multi['trads'] as $lang => $trad) {
57
+                $t = $sanitize_callback($trad);
58
+                if ($t !== $trad) {
59
+                    $changed = true;
60
+                    $multi['trads'][$lang] = $t;
61
+                }
62
+            }
63
+            if ($changed) {
64
+                $texte = $this->agglomerer_trads($multi['trads']);
65
+                $multi['raw'] = str_replace($multi['texte'], $texte, $multi['raw']);
66
+                $multi['texte'] = $texte;
67
+            }
68
+        }
69
+        return $collection;
70
+    }
71
+
72
+
73
+    /**
74
+     * Convertit le contenu d'une balise `<multi>` en un tableau
75
+     *
76
+     * Exemple de blocs.
77
+     * - `texte par défaut [fr] en français [en] en anglais`
78
+     * - `[fr] en français [en] en anglais`
79
+     *
80
+     * @param string $bloc
81
+     *     Le contenu intérieur d'un bloc multi
82
+     * @return array [code de langue => texte]
83
+     *     Peut retourner un code de langue vide, lorsqu'un texte par défaut est indiqué.
84
+     **/
85
+    protected function extraire_trads($bloc) {
86
+        $trads = [];
87
+
88
+        if (strlen($bloc)) {
89
+            $langs = $this->collecteur($bloc, ']', '[', '@[\[]([a-z]{2,3}(_[a-z]{2,3})?(_[a-z]{2,3})?)[\]]@siS');
90
+            $lang = '';
91
+            $pos_prev = 0;
92
+            foreach ($langs as $l) {
93
+                $pos = $l['pos'];
94
+                if ($lang or $pos > $pos_prev) {
95
+                    $trads[$lang] = substr($bloc, $pos_prev, $pos - $pos_prev);
96
+                }
97
+                $lang = $l['match'][1];
98
+                $pos_prev = $pos + $l['length'];
99
+            }
100
+            $trads[$lang] = substr($bloc, $pos_prev);
101
+        }
102
+
103
+        return $trads;
104
+    }
105
+
106
+    /**
107
+     * Recoller ensemble les trads pour reconstituer le texte dans la balise <multi>...</multi>
108
+     * @param $trads
109
+     * @return string
110
+     */
111
+    protected function agglomerer_trads($trads) {
112
+        $texte = '';
113
+        foreach ($trads as $lang => $trad) {
114
+            if ($texte or $lang) {
115
+                $texte .= "[$lang]";
116
+            }
117
+            $texte .= $trad;
118
+        }
119
+        return $texte;
120
+    }
121
+
122
+    /**
123
+     * @param string $texte
124
+     * @param array $options
125
+     *   bool $collecter_liens
126
+     * @return array
127
+     */
128
+    public function collecter(string $texte, array $options = []): array {
129
+        if (!$texte) {
130
+            return [];
131
+        }
132
+
133
+        // collecter les matchs de la preg
134
+        $multis = $this->collecteur($texte, '', '<multi', $this->preg_multi, empty($options['detecter_presence']) ? 0 : 1);
135
+        // si on veut seulement detecter la présence, on peut retourner tel quel
136
+        if (empty($options['detecter_presence'])) {
137
+            foreach ($multis as $k => &$multi) {
138
+                $multi['texte'] = $multi['match'][1];
139
+                // extraire les trads du texte
140
+                $multi['trads'] = $this->extraire_trads($multi['texte']);
141
+            }
142
+        }
143
+
144
+        return $multis;
145
+    }
146
+
147
+    /**
148
+     * Traiter les multis d'un texte
149
+     *
150
+     * @uses approcher_langue()
151
+     * @uses lang_typo()
152
+     * @uses code_echappement()
153
+     * @uses echappe_retour()
154
+     *
155
+     * @param string $texte
156
+     * @param array $options
157
+     *   ?string $lang
158
+     *   ?string $lang_defaut
159
+     *   ?bool echappe_span
160
+     *   ?bool appliquer_typo
161
+     * @return string
162
+     */
163
+    public function traiter(string $texte, array $options) {
164
+        if ($texte) {
165
+
166
+            $multis = $this->collecter($texte);
167
+            if (!empty($multis)) {
168
+                $lang = $options['lang'] ?? $GLOBALS['spip_lang'];
169
+                $lang_defaut = $options['lang_defaut'] ?? _LANGUE_PAR_DEFAUT;
170
+                $echappe_span = $options['echappe_span'] ?? false;
171
+                $appliquer_typo = $options['appliquer_typo'] ?? true;
172
+
173
+                if (!function_exists('approcher_langue')) {
174
+                    include_spip('inc/lang');
175
+                }
176
+                if (!function_exists('code_echappement')) {
177
+                    include_spip('inc/texte_mini');
178
+                }
179
+
180
+                $offset_pos = 0;
181
+                foreach ($multis as $m) {
182
+
183
+                    // chercher la version de la langue courante
184
+                    $trads = $m['trads'];
185
+                    if (empty($trads)) {
186
+                        $trad = '';
187
+                    }
188
+                    elseif ($l = approcher_langue($trads, $lang)) {
189
+                        $trad = $trads[$l];
190
+                    } else {
191
+                        if ($lang_defaut == 'aucune') {
192
+                            $trad = '';
193
+                        } else {
194
+                            // langue absente, prendre le fr ou une langue précisée (meme comportement que inc/traduire.php)
195
+                            // ou la premiere dispo
196
+                            if (!$l = approcher_langue($trads, $lang_defaut)) {
197
+                                $l = array_keys($trads);
198
+                                $l = reset($l);
199
+                            }
200
+                            $trad = $trads[$l];
201
+
202
+                            // mais typographier le texte selon les regles de celle-ci
203
+                            // Attention aux blocs multi sur plusieurs lignes
204
+                            if ($appliquer_typo) {
205
+                                $typographie = charger_fonction(lang_typo($l), 'typographie');
206
+                                $trad = $typographie($trad);
207
+
208
+                                // Tester si on echappe en span ou en div
209
+                                // il ne faut pas echapper en div si propre produit un seul paragraphe
210
+                                include_spip('inc/texte');
211
+                                $trad_propre = preg_replace(',(^<p[^>]*>|</p>$),Uims', '', propre($trad));
212
+                                $mode = preg_match(',</?(' . _BALISES_BLOCS . ')[>[:space:]],iS', $trad_propre) ? 'div' : 'span';
213
+                                if ($mode === 'div') {
214
+                                    $trad = rtrim($trad) . "\n\n";
215
+                                }
216
+                                $trad = code_echappement($trad, 'multi', false, $mode);
217
+                                $trad = str_replace("'", '"', inserer_attribut($trad, 'lang', $l));
218
+                                if (lang_dir($l) !== lang_dir($lang)) {
219
+                                    $trad = str_replace("'", '"', inserer_attribut($trad, 'dir', lang_dir($l)));
220
+                                }
221
+                                if (!$echappe_span) {
222
+                                    $trad = echappe_retour($trad, 'multi');
223
+                                }
224
+                            }
225
+                        }
226
+                    }
227
+
228
+                    $texte = substr_replace($texte, $trad, $m['pos'] + $offset_pos, $m['length']);
229
+                    $offset_pos += strlen($trad) - $m['length'];
230
+                }
231
+            }
232
+        }
233
+
234
+        return $texte;
235
+    }
236 236
 
237 237
 }
Please login to merge, or discard this patch.
ecrire/req/sqlite_fonctions.php 1 patch
Indentation   +216 added lines, -216 removed lines patch added patch discarded remove patch
@@ -22,7 +22,7 @@  discard block
 block discarded – undo
22 22
  */
23 23
 
24 24
 if (!defined('_ECRIRE_INC_VERSION')) {
25
-	return;
25
+    return;
26 26
 }
27 27
 
28 28
 /**
@@ -43,90 +43,90 @@  discard block
 block discarded – undo
43 43
  */
44 44
 function _sqlite_init_functions(&$sqlite) {
45 45
 
46
-	if (!$sqlite) {
47
-		return false;
48
-	}
46
+    if (!$sqlite) {
47
+        return false;
48
+    }
49 49
 
50 50
 
51
-	$fonctions = [
52
-		// A
53
-		'ACOS'  => ['acos', 1],
54
-		'ASIN'  => ['asin', 1],
55
-		'ATAN'  => ['atan', 1], // mysql accepte 2 params comme atan2… hum ?
56
-		'ATAN2' => ['atan2', 2],
51
+    $fonctions = [
52
+        // A
53
+        'ACOS'  => ['acos', 1],
54
+        'ASIN'  => ['asin', 1],
55
+        'ATAN'  => ['atan', 1], // mysql accepte 2 params comme atan2… hum ?
56
+        'ATAN2' => ['atan2', 2],
57 57
 
58
-		// C
59
-		'CEIL'   => ['_sqlite_func_ceil', 1],
60
-		'CONCAT' => ['_sqlite_func_concat', -1],
61
-		'COS'    => ['cos', 1],
58
+        // C
59
+        'CEIL'   => ['_sqlite_func_ceil', 1],
60
+        'CONCAT' => ['_sqlite_func_concat', -1],
61
+        'COS'    => ['cos', 1],
62 62
 
63
-		// D
64
-		'DATE_FORMAT' => ['_sqlite_func_date_format', 2], // équivalent a strftime avec args inversés
65
-		'DAYOFMONTH'  => ['_sqlite_func_dayofmonth', 1],
66
-		'DEGREES'     => ['rad2deg', 1],
63
+        // D
64
+        'DATE_FORMAT' => ['_sqlite_func_date_format', 2], // équivalent a strftime avec args inversés
65
+        'DAYOFMONTH'  => ['_sqlite_func_dayofmonth', 1],
66
+        'DEGREES'     => ['rad2deg', 1],
67 67
 
68
-		// E
69
-		'EXTRAIRE_MULTI' => ['_sqlite_func_extraire_multi', 2], // specifique a SPIP/sql_multi()
70
-		'EXP'            => ['exp', 1],
68
+        // E
69
+        'EXTRAIRE_MULTI' => ['_sqlite_func_extraire_multi', 2], // specifique a SPIP/sql_multi()
70
+        'EXP'            => ['exp', 1],
71 71
 
72
-		// F
73
-		'FIND_IN_SET' => ['_sqlite_func_find_in_set', 2],
74
-		'FLOOR'       => ['_sqlite_func_floor', 1],
72
+        // F
73
+        'FIND_IN_SET' => ['_sqlite_func_find_in_set', 2],
74
+        'FLOOR'       => ['_sqlite_func_floor', 1],
75 75
 
76
-		// G
77
-		'GREATEST' => ['_sqlite_func_greatest', -1],
76
+        // G
77
+        'GREATEST' => ['_sqlite_func_greatest', -1],
78 78
 
79
-		// I
80
-		'IF'     => ['_sqlite_func_if', 3],
81
-		'INSERT' => ['_sqlite_func_insert', 4],
82
-		'INSTR'  => ['_sqlite_func_instr', 2],
79
+        // I
80
+        'IF'     => ['_sqlite_func_if', 3],
81
+        'INSERT' => ['_sqlite_func_insert', 4],
82
+        'INSTR'  => ['_sqlite_func_instr', 2],
83 83
 
84
-		// L
85
-		'LEAST'  => ['_sqlite_func_least', -1],
86
-		'_LEFT'  => ['_sqlite_func_left', 2],
84
+        // L
85
+        'LEAST'  => ['_sqlite_func_least', -1],
86
+        '_LEFT'  => ['_sqlite_func_left', 2],
87 87
 
88
-		// N
89
-		'NOW' => ['_sqlite_func_now', 0],
88
+        // N
89
+        'NOW' => ['_sqlite_func_now', 0],
90 90
 
91
-		// M
92
-		'MD5'   => ['md5', 1],
93
-		'MONTH' => ['_sqlite_func_month', 1],
91
+        // M
92
+        'MD5'   => ['md5', 1],
93
+        'MONTH' => ['_sqlite_func_month', 1],
94 94
 
95
-		// P
96
-		'PREG_REPLACE' => ['_sqlite_func_preg_replace', 3],
95
+        // P
96
+        'PREG_REPLACE' => ['_sqlite_func_preg_replace', 3],
97 97
 
98
-		// R
99
-		'RADIANS' => ['deg2rad', 1],
100
-		'RAND'    => ['_sqlite_func_rand', 0], // sinon random() v2.4
101
-		'REGEXP'  => ['_sqlite_func_regexp_match', 2], // critere REGEXP supporte a partir de v3.3.2
102
-		'RIGHT'   => ['_sqlite_func_right', 2],
98
+        // R
99
+        'RADIANS' => ['deg2rad', 1],
100
+        'RAND'    => ['_sqlite_func_rand', 0], // sinon random() v2.4
101
+        'REGEXP'  => ['_sqlite_func_regexp_match', 2], // critere REGEXP supporte a partir de v3.3.2
102
+        'RIGHT'   => ['_sqlite_func_right', 2],
103 103
 
104
-		// S
105
-		'SETTYPE'   => ['settype', 2], // CAST present en v3.2.3
106
-		'SIN'       => ['sin', 1],
107
-		'SQRT'      => ['sqrt', 1],
108
-		'SUBSTRING' => ['_sqlite_func_substring' /*, 3*/], // peut etre appelee avec 2 ou 3 arguments, index base 1 et non 0
104
+        // S
105
+        'SETTYPE'   => ['settype', 2], // CAST present en v3.2.3
106
+        'SIN'       => ['sin', 1],
107
+        'SQRT'      => ['sqrt', 1],
108
+        'SUBSTRING' => ['_sqlite_func_substring' /*, 3*/], // peut etre appelee avec 2 ou 3 arguments, index base 1 et non 0
109 109
 
110
-		// T
111
-		'TAN'           => ['tan', 1],
112
-		'TIMESTAMPDIFF' => ['_sqlite_timestampdiff'    /*, 3*/],
113
-		'TO_DAYS'       => ['_sqlite_func_to_days', 1],
110
+        // T
111
+        'TAN'           => ['tan', 1],
112
+        'TIMESTAMPDIFF' => ['_sqlite_timestampdiff'    /*, 3*/],
113
+        'TO_DAYS'       => ['_sqlite_func_to_days', 1],
114 114
 
115
-		// U
116
-		'UNIX_TIMESTAMP' => ['_sqlite_func_unix_timestamp', 1],
115
+        // U
116
+        'UNIX_TIMESTAMP' => ['_sqlite_func_unix_timestamp', 1],
117 117
 
118
-		// V
119
-		'VIDE' => ['_sqlite_func_vide', 0], // du vide pour SELECT 0 as x ... ORDER BY x -> ORDER BY vide()
118
+        // V
119
+        'VIDE' => ['_sqlite_func_vide', 0], // du vide pour SELECT 0 as x ... ORDER BY x -> ORDER BY vide()
120 120
 
121
-		// Y
122
-		'YEAR' => ['_sqlite_func_year', 1]
123
-	];
121
+        // Y
122
+        'YEAR' => ['_sqlite_func_year', 1]
123
+    ];
124 124
 
125
-	foreach ($fonctions as $f => $r) {
126
-		_sqlite_add_function($sqlite, $f, $r);
127
-	}
125
+    foreach ($fonctions as $f => $r) {
126
+        _sqlite_add_function($sqlite, $f, $r);
127
+    }
128 128
 
129
-	#spip_log('functions sqlite chargees ','sqlite.'._LOG_DEBUG);
129
+    #spip_log('functions sqlite chargees ','sqlite.'._LOG_DEBUG);
130 130
 }
131 131
 
132 132
 
@@ -147,9 +147,9 @@  discard block
 block discarded – undo
147 147
  *
148 148
 **/
149 149
 function _sqlite_add_function(&$sqlite, &$f, &$r) {
150
-	isset($r[1])
151
-		? $sqlite->sqliteCreateFunction($f, $r[0], $r[1])
152
-		: $sqlite->sqliteCreateFunction($f, $r[0]);
150
+    isset($r[1])
151
+        ? $sqlite->sqliteCreateFunction($f, $r[0], $r[1])
152
+        : $sqlite->sqliteCreateFunction($f, $r[0]);
153 153
 }
154 154
 
155 155
 /**
@@ -159,7 +159,7 @@  discard block
 block discarded – undo
159 159
  * @return int
160 160
  */
161 161
 function _sqlite_func_ceil($a) {
162
-	return ceil($a);
162
+    return ceil($a);
163 163
 }
164 164
 
165 165
 /**
@@ -169,7 +169,7 @@  discard block
 block discarded – undo
169 169
  * @return string
170 170
  */
171 171
 function _sqlite_func_concat(...$args) {
172
-	return join('', $args);
172
+    return join('', $args);
173 173
 }
174 174
 
175 175
 
@@ -182,7 +182,7 @@  discard block
 block discarded – undo
182 182
  * @return string
183 183
  */
184 184
 function _sqlite_func_dayofmonth($d) {
185
-	return _sqlite_func_date('d', $d);
185
+    return _sqlite_func_date('d', $d);
186 186
 }
187 187
 
188 188
 
@@ -194,15 +194,15 @@  discard block
 block discarded – undo
194 194
  * @return int
195 195
  */
196 196
 function _sqlite_func_find_in_set($num, $set) {
197
-	$rank = 0;
198
-	foreach (explode(',', $set) as $v) {
199
-		if ($v == $num) {
200
-			return (++$rank);
201
-		}
202
-		$rank++;
203
-	}
204
-
205
-	return 0;
197
+    $rank = 0;
198
+    foreach (explode(',', $set) as $v) {
199
+        if ($v == $num) {
200
+            return (++$rank);
201
+        }
202
+        $rank++;
203
+    }
204
+
205
+    return 0;
206 206
 }
207 207
 
208 208
 /**
@@ -212,7 +212,7 @@  discard block
 block discarded – undo
212 212
  * @return int
213 213
  */
214 214
 function _sqlite_func_floor($a) {
215
-	return floor($a);
215
+    return floor($a);
216 216
 }
217 217
 
218 218
 
@@ -225,7 +225,7 @@  discard block
 block discarded – undo
225 225
  * @return mixed
226 226
  */
227 227
 function _sqlite_func_if($bool, $oui, $non) {
228
-	return ($bool) ? $oui : $non;
228
+    return ($bool) ? $oui : $non;
229 229
 }
230 230
 
231 231
 
@@ -242,10 +242,10 @@  discard block
 block discarded – undo
242 242
  * @return string
243 243
  */
244 244
 function _sqlite_func_insert($s, $index, $longueur, $chaine) {
245
-	return
246
-		substr($s, 0, $index)
247
-		. $chaine
248
-		. substr(substr($s, $index), $longueur);
245
+    return
246
+        substr($s, 0, $index)
247
+        . $chaine
248
+        . substr(substr($s, $index), $longueur);
249 249
 }
250 250
 
251 251
 
@@ -257,7 +257,7 @@  discard block
 block discarded – undo
257 257
  * @return int
258 258
  */
259 259
 function _sqlite_func_instr($s, $search) {
260
-	return strpos($s, $search);
260
+    return strpos($s, $search);
261 261
 }
262 262
 
263 263
 
@@ -268,7 +268,7 @@  discard block
 block discarded – undo
268 268
  * @return int
269 269
  */
270 270
 function _sqlite_func_least(...$args) {
271
-	return min($args);
271
+    return min($args);
272 272
 }
273 273
 
274 274
 
@@ -279,7 +279,7 @@  discard block
 block discarded – undo
279 279
  * @return int
280 280
  */
281 281
 function _sqlite_func_greatest(...$args) {
282
-	return max($args);
282
+    return max($args);
283 283
 }
284 284
 
285 285
 
@@ -291,7 +291,7 @@  discard block
 block discarded – undo
291 291
  * @return string
292 292
  */
293 293
 function _sqlite_func_left($s, $lenght) {
294
-	return substr($s, $lenght);
294
+    return substr($s, $lenght);
295 295
 }
296 296
 
297 297
 /**
@@ -301,13 +301,13 @@  discard block
 block discarded – undo
301 301
  * @return string
302 302
  */
303 303
 function _sqlite_func_now($force_refresh = false) {
304
-	static $now = null;
305
-	if (is_null($now) or $force_refresh) {
306
-		$now = date('Y-m-d H:i:s');
307
-	}
304
+    static $now = null;
305
+    if (is_null($now) or $force_refresh) {
306
+        $now = date('Y-m-d H:i:s');
307
+    }
308 308
 
309
-	#spip_log("Passage avec NOW : $now | ".time(),'sqlite.'._LOG_DEBUG);
310
-	return $now;
309
+    #spip_log("Passage avec NOW : $now | ".time(),'sqlite.'._LOG_DEBUG);
310
+    return $now;
311 311
 }
312 312
 
313 313
 
@@ -320,7 +320,7 @@  discard block
 block discarded – undo
320 320
  * @return string
321 321
  */
322 322
 function _sqlite_func_month($d) {
323
-	return _sqlite_func_date('m', $d);
323
+    return _sqlite_func_date('m', $d);
324 324
 }
325 325
 
326 326
 
@@ -333,10 +333,10 @@  discard block
 block discarded – undo
333 333
  * @return string
334 334
  */
335 335
 function _sqlite_func_preg_replace($quoi, $cherche, $remplace) {
336
-	$return = preg_replace('%' . $cherche . '%', $remplace, $quoi);
336
+    $return = preg_replace('%' . $cherche . '%', $remplace, $quoi);
337 337
 
338
-	#spip_log("preg_replace : $quoi, $cherche, $remplace, $return",'sqlite.'._LOG_DEBUG);
339
-	return $return;
338
+    #spip_log("preg_replace : $quoi, $cherche, $remplace, $return",'sqlite.'._LOG_DEBUG);
339
+    return $return;
340 340
 }
341 341
 
342 342
 /**
@@ -349,13 +349,13 @@  discard block
 block discarded – undo
349 349
  * @return string, l'extrait trouve.
350 350
  **/
351 351
 function _sqlite_func_extraire_multi($quoi, $lang) {
352
-	if (strpos($quoi, '<') !== false) {
353
-		include_spip("src/Texte/Collecteur/AbstractCollecteur");
354
-		include_spip("src/Texte/Collecteur/Multis");
355
-		$collecteurMultis = new Spip\Texte\Collecteur\Multis();
356
-		$quoi = $collecteurMultis->traiter($quoi, ['lang' => $lang, 'appliquer_typo' => false]);
357
-	}
358
-	return $quoi;
352
+    if (strpos($quoi, '<') !== false) {
353
+        include_spip("src/Texte/Collecteur/AbstractCollecteur");
354
+        include_spip("src/Texte/Collecteur/Multis");
355
+        $collecteurMultis = new Spip\Texte\Collecteur\Multis();
356
+        $quoi = $collecteurMultis->traiter($quoi, ['lang' => $lang, 'appliquer_typo' => false]);
357
+    }
358
+    return $quoi;
359 359
 }
360 360
 
361 361
 
@@ -365,7 +365,7 @@  discard block
 block discarded – undo
365 365
  * @return float
366 366
  */
367 367
 function _sqlite_func_rand() {
368
-	return random_int(0, mt_getrandmax());
368
+    return random_int(0, mt_getrandmax());
369 369
 }
370 370
 
371 371
 
@@ -377,7 +377,7 @@  discard block
 block discarded – undo
377 377
  * @return string
378 378
  */
379 379
 function _sqlite_func_right($s, $length) {
380
-	return substr($s, 0 - $length);
380
+    return substr($s, 0 - $length);
381 381
 }
382 382
 
383 383
 
@@ -389,17 +389,17 @@  discard block
 block discarded – undo
389 389
  * @return bool
390 390
  */
391 391
 function _sqlite_func_regexp_match($cherche, $quoi) {
392
-	// optimiser un cas tres courant avec les requetes en base
393
-	if (!$quoi and !strlen($quoi)) {
394
-		return false;
395
-	}
396
-	// il faut enlever un niveau d'echappement pour être homogène à mysql
397
-	$cherche = str_replace('\\\\', '\\', $cherche);
398
-	$u = $GLOBALS['meta']['pcre_u'] ?? 'u';
399
-	$return = preg_match('%' . $cherche . '%imsS' . $u, $quoi);
400
-
401
-	#spip_log("regexp_replace : $quoi, $cherche, $remplace, $return",'sqlite.'._LOG_DEBUG);
402
-	return $return;
392
+    // optimiser un cas tres courant avec les requetes en base
393
+    if (!$quoi and !strlen($quoi)) {
394
+        return false;
395
+    }
396
+    // il faut enlever un niveau d'echappement pour être homogène à mysql
397
+    $cherche = str_replace('\\\\', '\\', $cherche);
398
+    $u = $GLOBALS['meta']['pcre_u'] ?? 'u';
399
+    $return = preg_match('%' . $cherche . '%imsS' . $u, $quoi);
400
+
401
+    #spip_log("regexp_replace : $quoi, $cherche, $remplace, $return",'sqlite.'._LOG_DEBUG);
402
+    return $return;
403 403
 }
404 404
 
405 405
 
@@ -414,8 +414,8 @@  discard block
 block discarded – undo
414 414
  * @return string
415 415
  */
416 416
 function _sqlite_func_date_format($date, $conv) {
417
-	$conv = _sqlite_func_strftime_format_converter($conv);
418
-	return strftime($conv, is_int($date) ? $date : strtotime($date));
417
+    $conv = _sqlite_func_strftime_format_converter($conv);
418
+    return strftime($conv, is_int($date) ? $date : strtotime($date));
419 419
 }
420 420
 
421 421
 /**
@@ -431,28 +431,28 @@  discard block
 block discarded – undo
431 431
  * @return void
432 432
  */
433 433
 function _sqlite_func_strftime_format_converter(string $conv): string {
434
-	// ok : %a %b %d %e %H %I %l %j %k %m %p %r %S %T %w %y %Y
435
-	// on ne sait pas en gérer certains...
436
-	static $mysql_to_strftime_not_ok = ['%c', '%D', '%f', '%U', '%V', '%W', '%X'];
437
-	static $mysql_to_strftime = [
438
-		'%h' => '%I',
439
-		'%i' => '%M',
440
-		'%M' => '%B',
441
-		'%s' => '%S',
442
-		'%u' => '%U',
443
-		'%v' => '%V',
444
-		'%x' => '%G',
445
-	];
446
-	static $to_strftime = [];
447
-	if (!isset($to_strftime[$conv])) {
448
-		$count = 0;
449
-		str_replace($mysql_to_strftime_not_ok, '', $conv, $count);
450
-		if ($count > 0) {
451
-			spip_log("DATE_FORMAT : At least one parameter can't be parsed by strftime with format '$conv'", 'sqlite.' . _LOG_ERREUR);
452
-		}
453
-		$to_strftime[$conv] = str_replace(array_keys($mysql_to_strftime), $mysql_to_strftime, $conv);
454
-	}
455
-	return $to_strftime[$conv];
434
+    // ok : %a %b %d %e %H %I %l %j %k %m %p %r %S %T %w %y %Y
435
+    // on ne sait pas en gérer certains...
436
+    static $mysql_to_strftime_not_ok = ['%c', '%D', '%f', '%U', '%V', '%W', '%X'];
437
+    static $mysql_to_strftime = [
438
+        '%h' => '%I',
439
+        '%i' => '%M',
440
+        '%M' => '%B',
441
+        '%s' => '%S',
442
+        '%u' => '%U',
443
+        '%v' => '%V',
444
+        '%x' => '%G',
445
+    ];
446
+    static $to_strftime = [];
447
+    if (!isset($to_strftime[$conv])) {
448
+        $count = 0;
449
+        str_replace($mysql_to_strftime_not_ok, '', $conv, $count);
450
+        if ($count > 0) {
451
+            spip_log("DATE_FORMAT : At least one parameter can't be parsed by strftime with format '$conv'", 'sqlite.' . _LOG_ERREUR);
452
+        }
453
+        $to_strftime[$conv] = str_replace(array_keys($mysql_to_strftime), $mysql_to_strftime, $conv);
454
+    }
455
+    return $to_strftime[$conv];
456 456
 }
457 457
 
458 458
 /**
@@ -466,11 +466,11 @@  discard block
 block discarded – undo
466 466
  * @return int
467 467
  */
468 468
 function _sqlite_func_to_days($d) {
469
-	static $offset = 719528; // nb de jour entre 0000-00-00 et timestamp 0=1970-01-01
470
-	$result = $offset + (int)ceil(_sqlite_func_unix_timestamp($d) / (24 * 3600));
469
+    static $offset = 719528; // nb de jour entre 0000-00-00 et timestamp 0=1970-01-01
470
+    $result = $offset + (int)ceil(_sqlite_func_unix_timestamp($d) / (24 * 3600));
471 471
 
472
-	#spip_log("Passage avec TO_DAYS : $d, $result",'sqlite.'._LOG_DEBUG);
473
-	return $result;
472
+    #spip_log("Passage avec TO_DAYS : $d, $result",'sqlite.'._LOG_DEBUG);
473
+    return $result;
474 474
 }
475 475
 
476 476
 /**
@@ -482,13 +482,13 @@  discard block
 block discarded – undo
482 482
  * @return string
483 483
  */
484 484
 function _sqlite_func_substring($string, $start, $len = null) {
485
-	// SQL compte a partir de 1, php a partir de 0
486
-	$start = ($start > 0) ? $start - 1 : $start;
487
-	if (is_null($len)) {
488
-		return substr($string, $start);
489
-	} else {
490
-		return substr($string, $start, $len);
491
-	}
485
+    // SQL compte a partir de 1, php a partir de 0
486
+    $start = ($start > 0) ? $start - 1 : $start;
487
+    if (is_null($len)) {
488
+        return substr($string, $start);
489
+    } else {
490
+        return substr($string, $start, $len);
491
+    }
492 492
 }
493 493
 
494 494
 /**
@@ -504,33 +504,33 @@  discard block
 block discarded – undo
504 504
  * @return int
505 505
  */
506 506
 function _sqlite_timestampdiff($unit, $date1, $date2) {
507
-	$d1 = date_create($date1);
508
-	$d2 = date_create($date2);
509
-	$diff = date_diff($d1, $d2);
510
-	$inv = $diff->invert ? -1 : 1;
511
-	switch ($unit) {
512
-		case 'YEAR':
513
-			return $inv * $diff->y;
514
-		case 'QUARTER':
515
-			return $inv * (4 * $diff->y + intval(floor($diff->m / 3)));
516
-		case 'MONTH':
517
-			return $inv * (12 * $diff->y + $diff->m);
518
-		case 'WEEK':
519
-			return $inv * intval(floor($diff->days / 7));
520
-		case 'DAY':
521
-			#var_dump($inv*$diff->days);
522
-			return $inv * $diff->days;
523
-		case 'HOUR':
524
-			return $inv * (24 * $diff->days + $diff->h);
525
-		case 'MINUTE':
526
-			return $inv * ((24 * $diff->days + $diff->h) * 60 + $diff->i);
527
-		case 'SECOND':
528
-			return $inv * (((24 * $diff->days + $diff->h) * 60 + $diff->i) * 60 + $diff->s);
529
-		case 'MICROSECOND':
530
-			return $inv * (((24 * $diff->days + $diff->h) * 60 + $diff->i) * 60 + $diff->s) * 1_000_000;
531
-	}
532
-
533
-	return 0;
507
+    $d1 = date_create($date1);
508
+    $d2 = date_create($date2);
509
+    $diff = date_diff($d1, $d2);
510
+    $inv = $diff->invert ? -1 : 1;
511
+    switch ($unit) {
512
+        case 'YEAR':
513
+            return $inv * $diff->y;
514
+        case 'QUARTER':
515
+            return $inv * (4 * $diff->y + intval(floor($diff->m / 3)));
516
+        case 'MONTH':
517
+            return $inv * (12 * $diff->y + $diff->m);
518
+        case 'WEEK':
519
+            return $inv * intval(floor($diff->days / 7));
520
+        case 'DAY':
521
+            #var_dump($inv*$diff->days);
522
+            return $inv * $diff->days;
523
+        case 'HOUR':
524
+            return $inv * (24 * $diff->days + $diff->h);
525
+        case 'MINUTE':
526
+            return $inv * ((24 * $diff->days + $diff->h) * 60 + $diff->i);
527
+        case 'SECOND':
528
+            return $inv * (((24 * $diff->days + $diff->h) * 60 + $diff->i) * 60 + $diff->s);
529
+        case 'MICROSECOND':
530
+            return $inv * (((24 * $diff->days + $diff->h) * 60 + $diff->i) * 60 + $diff->s) * 1_000_000;
531
+    }
532
+
533
+    return 0;
534 534
 }
535 535
 
536 536
 /**
@@ -540,24 +540,24 @@  discard block
 block discarded – undo
540 540
  * @return int
541 541
  */
542 542
 function _sqlite_func_unix_timestamp($d) {
543
-	static $mem = [];
544
-	static $n = 0;
545
-	if (isset($mem[$d])) {
546
-		return $mem[$d];
547
-	}
548
-	if ($n++ > 100) {
549
-		$mem = [];
550
-		$n = 0;
551
-	}
552
-
553
-	//2005-12-02 20:53:53
554
-	#spip_log("Passage avec UNIX_TIMESTAMP : $d",'sqlite.'._LOG_DEBUG);
555
-	if (!$d) {
556
-		return $mem[$d] = time();
557
-	}
558
-
559
-	// une pile plus grosse n'accelere pas le calcul
560
-	return $mem[$d] = strtotime($d);
543
+    static $mem = [];
544
+    static $n = 0;
545
+    if (isset($mem[$d])) {
546
+        return $mem[$d];
547
+    }
548
+    if ($n++ > 100) {
549
+        $mem = [];
550
+        $n = 0;
551
+    }
552
+
553
+    //2005-12-02 20:53:53
554
+    #spip_log("Passage avec UNIX_TIMESTAMP : $d",'sqlite.'._LOG_DEBUG);
555
+    if (!$d) {
556
+        return $mem[$d] = time();
557
+    }
558
+
559
+    // une pile plus grosse n'accelere pas le calcul
560
+    return $mem[$d] = strtotime($d);
561 561
 }
562 562
 
563 563
 
@@ -570,7 +570,7 @@  discard block
 block discarded – undo
570 570
  * @return string
571 571
  */
572 572
 function _sqlite_func_year($d) {
573
-	return _sqlite_func_date('Y', $d);
573
+    return _sqlite_func_date('Y', $d);
574 574
 }
575 575
 
576 576
 /**
@@ -583,20 +583,20 @@  discard block
 block discarded – undo
583 583
  * @return string
584 584
  */
585 585
 function _sqlite_func_date($quoi, $d) {
586
-	static $mem = [];
587
-	static $n = 0;
588
-	if (isset($mem[$d])) {
589
-		return $mem[$d][$quoi];
590
-	}
591
-	if ($n++ > 100) {
592
-		$mem = [];
593
-		$n = 0;
594
-	}
595
-
596
-	$dec = date('Y-m-d', _sqlite_func_unix_timestamp($d));
597
-	$mem[$d] = ['Y' => substr($dec, 0, 4), 'm' => substr($dec, 5, 2), 'd' => substr($dec, 8, 2)];
598
-
599
-	return $mem[$d][$quoi];
586
+    static $mem = [];
587
+    static $n = 0;
588
+    if (isset($mem[$d])) {
589
+        return $mem[$d][$quoi];
590
+    }
591
+    if ($n++ > 100) {
592
+        $mem = [];
593
+        $n = 0;
594
+    }
595
+
596
+    $dec = date('Y-m-d', _sqlite_func_unix_timestamp($d));
597
+    $mem[$d] = ['Y' => substr($dec, 0, 4), 'm' => substr($dec, 5, 2), 'd' => substr($dec, 8, 2)];
598
+
599
+    return $mem[$d][$quoi];
600 600
 }
601 601
 
602 602
 /**
@@ -605,5 +605,5 @@  discard block
 block discarded – undo
605 605
  * @return void
606 606
  */
607 607
 function _sqlite_func_vide() {
608
-	return;
608
+    return;
609 609
 }
Please login to merge, or discard this patch.
ecrire/src/Sql/Sqlite/PDOStatement.php 1 patch
Indentation   +7 added lines, -7 removed lines patch added patch discarded remove patch
@@ -6,12 +6,12 @@
 block discarded – undo
6 6
  * Pouvoir retrouver le PDO utilisé pour générer un résultat de requête.
7 7
  */
8 8
 final class PDOStatement extends \PDOStatement {
9
-	private \PDO $PDO;
9
+    private \PDO $PDO;
10 10
 
11
-	private function __construct(\PDO &$PDO) {
12
-		$this->PDO = $PDO;
13
-	}
14
-	public function getPDO(): \PDO {
15
-		return $this->PDO;
16
-	}
11
+    private function __construct(\PDO &$PDO) {
12
+        $this->PDO = $PDO;
13
+    }
14
+    public function getPDO(): \PDO {
15
+        return $this->PDO;
16
+    }
17 17
 }
Please login to merge, or discard this patch.
ecrire/src/Sql/Sqlite/Requeteur.php 1 patch
Indentation   +108 added lines, -108 removed lines patch added patch discarded remove patch
@@ -13,112 +13,112 @@
 block discarded – undo
13 13
 
14 14
 class Requeteur
15 15
 {
16
-	/** @var string texte de la requête */
17
-	public $query = ''; // la requete
18
-	/** @var string Nom de la connexion */
19
-	public $serveur = '';
20
-	/** @var \PDO|null Identifiant de la connexion SQLite */
21
-	public $link = null;
22
-	/** @var string Prefixe des tables SPIP */
23
-	public $prefixe = '';
24
-	/** @var string Nom de la base de donnée */
25
-	public $db = '';
26
-	/** @var bool Doit-on tracer les requetes (var_profile) ? */
27
-	public $tracer = false; // doit-on tracer les requetes (var_profile)
28
-
29
-	/** @var string Version de SQLite (2 ou 3) */
30
-	public $sqlite_version = '';
31
-
32
-	/**
33
-	 * Constructeur
34
-	 *
35
-	 * @param string $serveur
36
-	 */
37
-	public function __construct($serveur = '')
38
-	{
39
-		_sqlite_init();
40
-		$this->serveur = strtolower($serveur);
41
-
42
-		if (!($this->link = _sqlite_link($this->serveur)) && (!defined('_ECRIRE_INSTALL') || !_ECRIRE_INSTALL)) {
43
-			spip_log('Aucune connexion sqlite (link)', 'sqlite.' . _LOG_ERREUR);
44
-
45
-			return;
46
-		}
47
-
48
-		$this->sqlite_version = _sqlite_is_version('', $this->link);
49
-
50
-		$this->prefixe = $GLOBALS['connexions'][$this->serveur ? $this->serveur : 0]['prefixe'];
51
-		$this->db = $GLOBALS['connexions'][$this->serveur ? $this->serveur : 0]['db'];
52
-
53
-		// tracage des requetes ?
54
-		$this->tracer = (isset($_GET['var_profile']) && $_GET['var_profile']);
55
-	}
56
-
57
-	/**
58
-	 * Lancer la requête transmise et faire le tracage si demandé
59
-	 *
60
-	 * @param string $query
61
-	 *     Requête à exécuter
62
-	 * @param bool|null $tracer
63
-	 *     true pour tracer la requête
64
-	 * @return bool|\PDOStatement|array
65
-	 */
66
-	public function executer_requete($query, $tracer = null)
67
-	{
68
-		if (is_null($tracer)) {
69
-			$tracer = $this->tracer;
70
-		}
71
-		$err = '';
72
-		$t = 0;
73
-		if ($tracer or (defined('_DEBUG_TRACE_QUERIES') and _DEBUG_TRACE_QUERIES)) {
74
-			include_spip('public/tracer');
75
-			$t = trace_query_start();
76
-		}
77
-
78
-		# spip_log("requete: $this->serveur >> $query",'sqlite.'._LOG_DEBUG); // boum ? pourquoi ?
79
-		if ($this->link) {
80
-			// memoriser la derniere erreur PHP vue
81
-			$last_error = (function_exists('error_get_last') ? error_get_last() : '');
82
-			$e = null;
83
-			// sauver la derniere requete
84
-			$GLOBALS['connexions'][$this->serveur ? $this->serveur : 0]['last'] = $query;
85
-			$GLOBALS['connexions'][$this->serveur ? $this->serveur : 0]['total_requetes']++;
86
-
87
-			try {
88
-				$r = $this->link->query($query);
89
-			} catch (\PDOException $e) {
90
-				spip_log('PDOException: ' . $e->getMessage(), 'sqlite.' . _LOG_DEBUG);
91
-				$r = false;
92
-			}
93
-
94
-			// loger les warnings/erreurs eventuels de sqlite remontant dans PHP
95
-			if ($e and $e instanceof \PDOException) {
96
-				$err = strip_tags($e->getMessage()) . ' in ' . $e->getFile() . ' line ' . $e->getLine();
97
-				spip_log("$err - " . $query, 'sqlite.' . _LOG_ERREUR);
98
-			} elseif ($err = (function_exists('error_get_last') ? error_get_last() : '') and $err != $last_error) {
99
-				$err = strip_tags($err['message']) . ' in ' . $err['file'] . ' line ' . $err['line'];
100
-				spip_log("$err - " . $query, 'sqlite.' . _LOG_ERREUR);
101
-			} else {
102
-				$err = '';
103
-			}
104
-		} else {
105
-			$r = false;
106
-		}
107
-
108
-		if (spip_sqlite_errno($this->serveur)) {
109
-			$err .= spip_sqlite_error($query, $this->serveur);
110
-		}
111
-
112
-		return $t ? trace_query_end($query, $t, $r, $err, $this->serveur) : $r;
113
-	}
114
-
115
-	/**
116
-	 * Obtient l'identifiant de la dernière ligne insérée ou modifiée
117
-	 *
118
-	 * @return string|false
119
-	 **/
120
-	public function last_insert_id()
121
-	{
122
-		return $this->link->lastInsertId();
123
-	}
16
+    /** @var string texte de la requête */
17
+    public $query = ''; // la requete
18
+    /** @var string Nom de la connexion */
19
+    public $serveur = '';
20
+    /** @var \PDO|null Identifiant de la connexion SQLite */
21
+    public $link = null;
22
+    /** @var string Prefixe des tables SPIP */
23
+    public $prefixe = '';
24
+    /** @var string Nom de la base de donnée */
25
+    public $db = '';
26
+    /** @var bool Doit-on tracer les requetes (var_profile) ? */
27
+    public $tracer = false; // doit-on tracer les requetes (var_profile)
28
+
29
+    /** @var string Version de SQLite (2 ou 3) */
30
+    public $sqlite_version = '';
31
+
32
+    /**
33
+     * Constructeur
34
+     *
35
+     * @param string $serveur
36
+     */
37
+    public function __construct($serveur = '')
38
+    {
39
+        _sqlite_init();
40
+        $this->serveur = strtolower($serveur);
41
+
42
+        if (!($this->link = _sqlite_link($this->serveur)) && (!defined('_ECRIRE_INSTALL') || !_ECRIRE_INSTALL)) {
43
+            spip_log('Aucune connexion sqlite (link)', 'sqlite.' . _LOG_ERREUR);
44
+
45
+            return;
46
+        }
47
+
48
+        $this->sqlite_version = _sqlite_is_version('', $this->link);
49
+
50
+        $this->prefixe = $GLOBALS['connexions'][$this->serveur ? $this->serveur : 0]['prefixe'];
51
+        $this->db = $GLOBALS['connexions'][$this->serveur ? $this->serveur : 0]['db'];
52
+
53
+        // tracage des requetes ?
54
+        $this->tracer = (isset($_GET['var_profile']) && $_GET['var_profile']);
55
+    }
56
+
57
+    /**
58
+     * Lancer la requête transmise et faire le tracage si demandé
59
+     *
60
+     * @param string $query
61
+     *     Requête à exécuter
62
+     * @param bool|null $tracer
63
+     *     true pour tracer la requête
64
+     * @return bool|\PDOStatement|array
65
+     */
66
+    public function executer_requete($query, $tracer = null)
67
+    {
68
+        if (is_null($tracer)) {
69
+            $tracer = $this->tracer;
70
+        }
71
+        $err = '';
72
+        $t = 0;
73
+        if ($tracer or (defined('_DEBUG_TRACE_QUERIES') and _DEBUG_TRACE_QUERIES)) {
74
+            include_spip('public/tracer');
75
+            $t = trace_query_start();
76
+        }
77
+
78
+        # spip_log("requete: $this->serveur >> $query",'sqlite.'._LOG_DEBUG); // boum ? pourquoi ?
79
+        if ($this->link) {
80
+            // memoriser la derniere erreur PHP vue
81
+            $last_error = (function_exists('error_get_last') ? error_get_last() : '');
82
+            $e = null;
83
+            // sauver la derniere requete
84
+            $GLOBALS['connexions'][$this->serveur ? $this->serveur : 0]['last'] = $query;
85
+            $GLOBALS['connexions'][$this->serveur ? $this->serveur : 0]['total_requetes']++;
86
+
87
+            try {
88
+                $r = $this->link->query($query);
89
+            } catch (\PDOException $e) {
90
+                spip_log('PDOException: ' . $e->getMessage(), 'sqlite.' . _LOG_DEBUG);
91
+                $r = false;
92
+            }
93
+
94
+            // loger les warnings/erreurs eventuels de sqlite remontant dans PHP
95
+            if ($e and $e instanceof \PDOException) {
96
+                $err = strip_tags($e->getMessage()) . ' in ' . $e->getFile() . ' line ' . $e->getLine();
97
+                spip_log("$err - " . $query, 'sqlite.' . _LOG_ERREUR);
98
+            } elseif ($err = (function_exists('error_get_last') ? error_get_last() : '') and $err != $last_error) {
99
+                $err = strip_tags($err['message']) . ' in ' . $err['file'] . ' line ' . $err['line'];
100
+                spip_log("$err - " . $query, 'sqlite.' . _LOG_ERREUR);
101
+            } else {
102
+                $err = '';
103
+            }
104
+        } else {
105
+            $r = false;
106
+        }
107
+
108
+        if (spip_sqlite_errno($this->serveur)) {
109
+            $err .= spip_sqlite_error($query, $this->serveur);
110
+        }
111
+
112
+        return $t ? trace_query_end($query, $t, $r, $err, $this->serveur) : $r;
113
+    }
114
+
115
+    /**
116
+     * Obtient l'identifiant de la dernière ligne insérée ou modifiée
117
+     *
118
+     * @return string|false
119
+     **/
120
+    public function last_insert_id()
121
+    {
122
+        return $this->link->lastInsertId();
123
+    }
124 124
 }
Please login to merge, or discard this patch.
ecrire/src/Sql/Sqlite/Sqlite.php 1 patch
Indentation   +102 added lines, -102 removed lines patch added patch discarded remove patch
@@ -8,119 +8,119 @@
 block discarded – undo
8 8
  **/
9 9
 class Sqlite
10 10
 {
11
-	/** @var Requeteur[] Liste des instances de requêteurs créés */
12
-	public static $requeteurs = [];
13
-	/** @var bool[] Pour chaque connexion, flag pour savoir si une transaction est en cours */
14
-	public static $transaction_en_cours = [];
11
+    /** @var Requeteur[] Liste des instances de requêteurs créés */
12
+    public static $requeteurs = [];
13
+    /** @var bool[] Pour chaque connexion, flag pour savoir si une transaction est en cours */
14
+    public static $transaction_en_cours = [];
15 15
 
16 16
 
17
-	/**
18
-	 * Retourne une unique instance du requêteur
19
-	 *
20
-	 * Retourne une instance unique du requêteur pour une connexion SQLite
21
-	 * donnée
22
-	 *
23
-	 * @param string $serveur
24
-	 *    Nom du connecteur
25
-	 * @return SqliteRequeteur
26
-	 *    Instance unique du requêteur
27
-	 **/
28
-	public static function requeteur($serveur)
29
-	{
30
-		if (!isset(static::$requeteurs[$serveur])) {
31
-			static::$requeteurs[$serveur] = new Requeteur($serveur);
32
-		}
17
+    /**
18
+     * Retourne une unique instance du requêteur
19
+     *
20
+     * Retourne une instance unique du requêteur pour une connexion SQLite
21
+     * donnée
22
+     *
23
+     * @param string $serveur
24
+     *    Nom du connecteur
25
+     * @return SqliteRequeteur
26
+     *    Instance unique du requêteur
27
+     **/
28
+    public static function requeteur($serveur)
29
+    {
30
+        if (!isset(static::$requeteurs[$serveur])) {
31
+            static::$requeteurs[$serveur] = new Requeteur($serveur);
32
+        }
33 33
 
34
-		return static::$requeteurs[$serveur];
35
-	}
34
+        return static::$requeteurs[$serveur];
35
+    }
36 36
 
37
-	/**
38
-	 * Prépare le texte d'une requête avant son exécution
39
-	 *
40
-	 * Adapte la requête au format plus ou moins MySQL par un format
41
-	 * compris de SQLite.
42
-	 *
43
-	 * Change les préfixes de tables SPIP par ceux véritables
44
-	 *
45
-	 * @param string $query Requête à préparer
46
-	 * @param string $serveur Nom de la connexion
47
-	 * @return string           Requête préparée
48
-	 */
49
-	public static function traduire_requete($query, $serveur)
50
-	{
51
-		$requeteur = static::requeteur($serveur);
52
-		$traducteur = new Traducteur($query, $requeteur->prefixe, $requeteur->sqlite_version);
37
+    /**
38
+     * Prépare le texte d'une requête avant son exécution
39
+     *
40
+     * Adapte la requête au format plus ou moins MySQL par un format
41
+     * compris de SQLite.
42
+     *
43
+     * Change les préfixes de tables SPIP par ceux véritables
44
+     *
45
+     * @param string $query Requête à préparer
46
+     * @param string $serveur Nom de la connexion
47
+     * @return string           Requête préparée
48
+     */
49
+    public static function traduire_requete($query, $serveur)
50
+    {
51
+        $requeteur = static::requeteur($serveur);
52
+        $traducteur = new Traducteur($query, $requeteur->prefixe, $requeteur->sqlite_version);
53 53
 
54
-		return $traducteur->traduire_requete();
55
-	}
54
+        return $traducteur->traduire_requete();
55
+    }
56 56
 
57
-	/**
58
-	 * Démarre une transaction
59
-	 *
60
-	 * @param string $serveur Nom de la connexion
61
-	 **/
62
-	public static function demarrer_transaction($serveur)
63
-	{
64
-		Sqlite::executer_requete('BEGIN TRANSACTION', $serveur);
65
-		Sqlite::$transaction_en_cours[$serveur] = true;
66
-	}
57
+    /**
58
+     * Démarre une transaction
59
+     *
60
+     * @param string $serveur Nom de la connexion
61
+     **/
62
+    public static function demarrer_transaction($serveur)
63
+    {
64
+        Sqlite::executer_requete('BEGIN TRANSACTION', $serveur);
65
+        Sqlite::$transaction_en_cours[$serveur] = true;
66
+    }
67 67
 
68
-	/**
69
-	 * Exécute la requête donnée
70
-	 *
71
-	 * @param string $query Requête
72
-	 * @param string $serveur Nom de la connexion
73
-	 * @param null|bool $tracer Demander des statistiques (temps) ?
74
-	 **/
75
-	public static function executer_requete($query, $serveur, $tracer = null)
76
-	{
77
-		$requeteur = Sqlite::requeteur($serveur);
68
+    /**
69
+     * Exécute la requête donnée
70
+     *
71
+     * @param string $query Requête
72
+     * @param string $serveur Nom de la connexion
73
+     * @param null|bool $tracer Demander des statistiques (temps) ?
74
+     **/
75
+    public static function executer_requete($query, $serveur, $tracer = null)
76
+    {
77
+        $requeteur = Sqlite::requeteur($serveur);
78 78
 
79
-		return $requeteur->executer_requete($query, $tracer);
80
-	}
79
+        return $requeteur->executer_requete($query, $tracer);
80
+    }
81 81
 
82
-	/**
83
-	 * Obtient l'identifiant de la dernière ligne insérée ou modifiée
84
-	 *
85
-	 * @param string $serveur Nom de la connexion
86
-	 * return int                Identifiant
87
-	 **/
88
-	public static function last_insert_id($serveur)
89
-	{
90
-		$requeteur = Sqlite::requeteur($serveur);
82
+    /**
83
+     * Obtient l'identifiant de la dernière ligne insérée ou modifiée
84
+     *
85
+     * @param string $serveur Nom de la connexion
86
+     * return int                Identifiant
87
+     **/
88
+    public static function last_insert_id($serveur)
89
+    {
90
+        $requeteur = Sqlite::requeteur($serveur);
91 91
 
92
-		return $requeteur->last_insert_id($serveur);
93
-	}
92
+        return $requeteur->last_insert_id($serveur);
93
+    }
94 94
 
95
-	/**
96
-	 * Annule une transaction
97
-	 *
98
-	 * @param string $serveur Nom de la connexion
99
-	 **/
100
-	public static function annuler_transaction($serveur)
101
-	{
102
-		Sqlite::executer_requete('ROLLBACK', $serveur);
103
-		Sqlite::$transaction_en_cours[$serveur] = false;
104
-	}
95
+    /**
96
+     * Annule une transaction
97
+     *
98
+     * @param string $serveur Nom de la connexion
99
+     **/
100
+    public static function annuler_transaction($serveur)
101
+    {
102
+        Sqlite::executer_requete('ROLLBACK', $serveur);
103
+        Sqlite::$transaction_en_cours[$serveur] = false;
104
+    }
105 105
 
106
-	/**
107
-	 * Termine une transaction
108
-	 *
109
-	 * @param string $serveur Nom de la connexion
110
-	 **/
111
-	public static function finir_transaction($serveur)
112
-	{
113
-		// si pas de transaction en cours, ne rien faire et le dire
114
-		if (
115
-			!isset(Sqlite::$transaction_en_cours[$serveur])
116
-			or Sqlite::$transaction_en_cours[$serveur] == false
117
-		) {
118
-			return false;
119
-		}
120
-		// sinon fermer la transaction et retourner true
121
-		Sqlite::executer_requete('COMMIT', $serveur);
122
-		Sqlite::$transaction_en_cours[$serveur] = false;
106
+    /**
107
+     * Termine une transaction
108
+     *
109
+     * @param string $serveur Nom de la connexion
110
+     **/
111
+    public static function finir_transaction($serveur)
112
+    {
113
+        // si pas de transaction en cours, ne rien faire et le dire
114
+        if (
115
+            !isset(Sqlite::$transaction_en_cours[$serveur])
116
+            or Sqlite::$transaction_en_cours[$serveur] == false
117
+        ) {
118
+            return false;
119
+        }
120
+        // sinon fermer la transaction et retourner true
121
+        Sqlite::executer_requete('COMMIT', $serveur);
122
+        Sqlite::$transaction_en_cours[$serveur] = false;
123 123
 
124
-		return true;
125
-	}
124
+        return true;
125
+    }
126 126
 }
Please login to merge, or discard this patch.