Completed
Push — spip-3.0 ( 484b62...e817f1 )
by cam
34:33
created
ecrire/inc/prepare_recherche.php 1 patch
Indentation   +94 added lines, -94 removed lines patch added patch discarded remove patch
@@ -41,87 +41,87 @@  discard block
 block discarded – undo
41 41
  * @return array
42 42
  */
43 43
 function inc_prepare_recherche_dist($recherche, $table='articles', $cond=false, $serveur='', $modificateurs = array(), $primary='') {
44
-	static $cache = array();
45
-	$delai_fraicheur = min(_DELAI_CACHE_resultats,time()-$GLOBALS['meta']['derniere_modif']);
44
+    static $cache = array();
45
+    $delai_fraicheur = min(_DELAI_CACHE_resultats,time()-$GLOBALS['meta']['derniere_modif']);
46 46
 
47
-	// si recherche n'est pas dans le contexte, on va prendre en globals
48
-	// ca permet de faire des inclure simple.
49
-	if (!isset($recherche) AND isset($GLOBALS['recherche']))
50
-		$recherche = $GLOBALS['recherche'];
47
+    // si recherche n'est pas dans le contexte, on va prendre en globals
48
+    // ca permet de faire des inclure simple.
49
+    if (!isset($recherche) AND isset($GLOBALS['recherche']))
50
+        $recherche = $GLOBALS['recherche'];
51 51
 
52
-	// traiter le cas {recherche?}
53
-	if ($cond AND !strlen($recherche))
54
-		return array("0 as points" /* as points */, /* where */ '');
52
+    // traiter le cas {recherche?}
53
+    if ($cond AND !strlen($recherche))
54
+        return array("0 as points" /* as points */, /* where */ '');
55 55
 		
56 56
 	
57
-	$rechercher = false;
58
-
59
-	if (!isset($cache[$serveur][$table][$recherche])){
60
-		$hash_serv = ($serveur?substr(md5($serveur),0,16):'');
61
-		$hash = substr(md5($recherche . $table),0,16);
62
-		$where = "(resultats.recherche='$hash' AND resultats.table_objet=".sql_quote($table)." AND resultats.serveur='$hash_serv')";
63
-		$row = sql_fetsel('UNIX_TIMESTAMP(NOW())-UNIX_TIMESTAMP(resultats.maj) AS fraicheur','spip_resultats AS resultats',$where,'','fraicheur DESC','0,1');
64
-		if (!$row
65
-		  OR ($row['fraicheur']>$delai_fraicheur)
66
-		  OR (defined('_VAR_MODE') AND _VAR_MODE=='recalcul')){
67
-		 	$rechercher = true;
68
-		}
69
-	}
70
-
71
-	// si on n'a pas encore traite les donnees dans une boucle precedente
72
-	if ($rechercher) {
73
-		//$tables = liste_des_champs();
74
-		$x = objet_type($table);
75
-		$points = recherche_en_base($recherche,
76
-			$x,
77
-			array(
78
-				'score' => true,
79
-				'toutvoir' => true,
80
-				'jointures' => true
81
-				),
82
-			$serveur);
83
-		// pas de résultat, pas de point
84
-		$points = isset($points[$x]) ? $points[$x] : array();
85
-
86
-		// permettre aux plugins de modifier le resultat
87
-		$points = pipeline('prepare_recherche',array(
88
-			'args'=>array('type'=>$x,'recherche'=>$recherche,'serveur'=>$serveur,'modificateurs'=>$modificateurs),
89
-			'data'=>$points
90
-		));
91
-
92
-		// supprimer les anciens resultats de cette recherche
93
-		// et les resultats trop vieux avec une marge
94
-		// pas de AS resultats dans un delete (mysql)
95
-		$whered = str_replace(array("resultats.recherche","resultats.table_objet","resultats.serveur"),array("recherche","table_objet","serveur"),$where);
96
-		sql_delete('spip_resultats', 'NOT(' .sql_date_proche('maj', (0-($delai_fraicheur+100)), " SECOND") . ") OR ($whered)");
97
-
98
-		// inserer les resultats dans la table de cache des resultats
99
-		if (count($points)){
100
-			$tab_couples = array();
101
-			foreach ($points as $id => $p){
102
-				$tab_couples[] = array(
103
-					'recherche' => $hash,
104
-					'id' => $id,
105
-					'points' => $p['score'],
106
-					'table_objet' => $table,
107
-					'serveur' => $hash_serv,
108
-				);
109
-			}
110
-			sql_insertq_multi('spip_resultats',$tab_couples,array());
111
-		}
112
-	}
113
-
114
-	if (!isset($cache[$serveur][$table][$recherche])){
115
-		if (!$serveur)
116
-			$cache[$serveur][$table][$recherche] = array("resultats.points AS points",$where);
117
-		else {
118
-			if (sql_countsel('spip_resultats as resultats',$where))
119
-			$rows = sql_allfetsel('resultats.id,resultats.points','spip_resultats as resultats',$where);
120
-			$cache[$serveur][$table][$recherche] = generer_select_where_explicites($table, $primary, $rows, $serveur);
121
-		}
122
-	}
123
-
124
-	return $cache[$serveur][$table][$recherche];
57
+    $rechercher = false;
58
+
59
+    if (!isset($cache[$serveur][$table][$recherche])){
60
+        $hash_serv = ($serveur?substr(md5($serveur),0,16):'');
61
+        $hash = substr(md5($recherche . $table),0,16);
62
+        $where = "(resultats.recherche='$hash' AND resultats.table_objet=".sql_quote($table)." AND resultats.serveur='$hash_serv')";
63
+        $row = sql_fetsel('UNIX_TIMESTAMP(NOW())-UNIX_TIMESTAMP(resultats.maj) AS fraicheur','spip_resultats AS resultats',$where,'','fraicheur DESC','0,1');
64
+        if (!$row
65
+          OR ($row['fraicheur']>$delai_fraicheur)
66
+          OR (defined('_VAR_MODE') AND _VAR_MODE=='recalcul')){
67
+                $rechercher = true;
68
+        }
69
+    }
70
+
71
+    // si on n'a pas encore traite les donnees dans une boucle precedente
72
+    if ($rechercher) {
73
+        //$tables = liste_des_champs();
74
+        $x = objet_type($table);
75
+        $points = recherche_en_base($recherche,
76
+            $x,
77
+            array(
78
+                'score' => true,
79
+                'toutvoir' => true,
80
+                'jointures' => true
81
+                ),
82
+            $serveur);
83
+        // pas de résultat, pas de point
84
+        $points = isset($points[$x]) ? $points[$x] : array();
85
+
86
+        // permettre aux plugins de modifier le resultat
87
+        $points = pipeline('prepare_recherche',array(
88
+            'args'=>array('type'=>$x,'recherche'=>$recherche,'serveur'=>$serveur,'modificateurs'=>$modificateurs),
89
+            'data'=>$points
90
+        ));
91
+
92
+        // supprimer les anciens resultats de cette recherche
93
+        // et les resultats trop vieux avec une marge
94
+        // pas de AS resultats dans un delete (mysql)
95
+        $whered = str_replace(array("resultats.recherche","resultats.table_objet","resultats.serveur"),array("recherche","table_objet","serveur"),$where);
96
+        sql_delete('spip_resultats', 'NOT(' .sql_date_proche('maj', (0-($delai_fraicheur+100)), " SECOND") . ") OR ($whered)");
97
+
98
+        // inserer les resultats dans la table de cache des resultats
99
+        if (count($points)){
100
+            $tab_couples = array();
101
+            foreach ($points as $id => $p){
102
+                $tab_couples[] = array(
103
+                    'recherche' => $hash,
104
+                    'id' => $id,
105
+                    'points' => $p['score'],
106
+                    'table_objet' => $table,
107
+                    'serveur' => $hash_serv,
108
+                );
109
+            }
110
+            sql_insertq_multi('spip_resultats',$tab_couples,array());
111
+        }
112
+    }
113
+
114
+    if (!isset($cache[$serveur][$table][$recherche])){
115
+        if (!$serveur)
116
+            $cache[$serveur][$table][$recherche] = array("resultats.points AS points",$where);
117
+        else {
118
+            if (sql_countsel('spip_resultats as resultats',$where))
119
+            $rows = sql_allfetsel('resultats.id,resultats.points','spip_resultats as resultats',$where);
120
+            $cache[$serveur][$table][$recherche] = generer_select_where_explicites($table, $primary, $rows, $serveur);
121
+        }
122
+    }
123
+
124
+    return $cache[$serveur][$table][$recherche];
125 125
 }
126 126
 
127 127
 
@@ -137,23 +137,23 @@  discard block
 block discarded – undo
137 137
  * @return array
138 138
  */
139 139
 function generer_select_where_explicites($table, $primary, $rows, $serveur){
140
-	# calculer le {id_article IN()} et le {... as points}
141
-	if (!count($rows)){
142
-		return array("''", "0=1");
143
-	}
144
-	else {
145
-		$listes_ids = array();
146
-		$select = '0';
147
-		foreach ($rows as $r)
148
-			$listes_ids[$r['points']][] = $r['id'];
149
-
150
-		foreach ($listes_ids as $p => $ids)
151
-			$select .= "+$p*(".
152
-			           sql_in("$table.$primary", $ids,'',$serveur)
153
-			           .") ";
154
-
155
-		return array("$select AS points ",calcul_mysql_in("$table.$primary",array_map('reset',$rows),'',$serveur));
156
-	}
140
+    # calculer le {id_article IN()} et le {... as points}
141
+    if (!count($rows)){
142
+        return array("''", "0=1");
143
+    }
144
+    else {
145
+        $listes_ids = array();
146
+        $select = '0';
147
+        foreach ($rows as $r)
148
+            $listes_ids[$r['points']][] = $r['id'];
149
+
150
+        foreach ($listes_ids as $p => $ids)
151
+            $select .= "+$p*(".
152
+                        sql_in("$table.$primary", $ids,'',$serveur)
153
+                        .") ";
154
+
155
+        return array("$select AS points ",calcul_mysql_in("$table.$primary",array_map('reset',$rows),'',$serveur));
156
+    }
157 157
 }
158 158
 
159 159
 
Please login to merge, or discard this patch.
ecrire/inc/cvt_configurer.php 1 patch
Indentation   +136 added lines, -136 removed lines patch added patch discarded remove patch
@@ -21,28 +21,28 @@  discard block
 block discarded – undo
21 21
  * @return array
22 22
  */
23 23
 function cvtconf_formulaire_charger($flux){
24
-	if (
25
-		$form = $flux['args']['form']
26
-		and strncmp($form,'configurer_',11)==0 // un #FORMULAIRE_CONFIGURER_XXX
27
-	) {
28
-		// Pour tous les formulaires CONFIGURER, ayant une fonction charger ou pas, on teste si autorisé
29
-		include_spip('inc/autoriser');
30
-		if (!autoriser('configurer', '_'.substr($form,11))) {
31
-			return false;
32
-		}
24
+    if (
25
+        $form = $flux['args']['form']
26
+        and strncmp($form,'configurer_',11)==0 // un #FORMULAIRE_CONFIGURER_XXX
27
+    ) {
28
+        // Pour tous les formulaires CONFIGURER, ayant une fonction charger ou pas, on teste si autorisé
29
+        include_spip('inc/autoriser');
30
+        if (!autoriser('configurer', '_'.substr($form,11))) {
31
+            return false;
32
+        }
33 33
 		
34
-		// S'il n'y a pas de fonction charger(), on génère un contexte automatiquement
35
-		if (!charger_fonction("charger","formulaires/$form/",true)) {
36
-			$flux['data'] = cvtconf_formulaires_configurer_recense($form);
37
-			$flux['data']['editable'] = true;
38
-			if (_request('var_mode')=='configurer' AND autoriser('webmestre')){
39
-				if (!_AJAX) var_dump($flux['data']);
40
-				// reinjecter pour la trace au traitement
41
-				$flux['data']['_hidden'] = "<input type='hidden' name='var_mode' value='configurer' />";
42
-			}
43
-		}
44
-	}
45
-	return $flux;
34
+        // S'il n'y a pas de fonction charger(), on génère un contexte automatiquement
35
+        if (!charger_fonction("charger","formulaires/$form/",true)) {
36
+            $flux['data'] = cvtconf_formulaires_configurer_recense($form);
37
+            $flux['data']['editable'] = true;
38
+            if (_request('var_mode')=='configurer' AND autoriser('webmestre')){
39
+                if (!_AJAX) var_dump($flux['data']);
40
+                // reinjecter pour la trace au traitement
41
+                $flux['data']['_hidden'] = "<input type='hidden' name='var_mode' value='configurer' />";
42
+            }
43
+        }
44
+    }
45
+    return $flux;
46 46
 }
47 47
 
48 48
 /**
@@ -52,14 +52,14 @@  discard block
 block discarded – undo
52 52
  * @return array
53 53
  */
54 54
 function cvtconf_formulaire_traiter($flux){
55
-	if ($form = $flux['args']['form']
56
-	  AND strncmp($form,'configurer_',11)==0 // un #FORMULAIRE_CONFIGURER_XXX
57
-		AND !charger_fonction("traiter","formulaires/$form/",true) // sans fonction traiter()
58
-		) {
59
-		$trace = cvtconf_formulaires_configurer_enregistre($form,$flux['args']['args']);
60
-		$flux['data'] = array('message_ok'=>_T('config_info_enregistree').$trace,'editable'=>true);
61
-	}
62
-	return $flux;
55
+    if ($form = $flux['args']['form']
56
+      AND strncmp($form,'configurer_',11)==0 // un #FORMULAIRE_CONFIGURER_XXX
57
+        AND !charger_fonction("traiter","formulaires/$form/",true) // sans fonction traiter()
58
+        ) {
59
+        $trace = cvtconf_formulaires_configurer_enregistre($form,$flux['args']['args']);
60
+        $flux['data'] = array('message_ok'=>_T('config_info_enregistree').$trace,'editable'=>true);
61
+    }
62
+    return $flux;
63 63
 }
64 64
 
65 65
 /**
@@ -75,29 +75,29 @@  discard block
 block discarded – undo
75 75
  * @return string
76 76
  */
77 77
 function cvtconf_formulaires_configurer_enregistre($form,$args){
78
-		$valeurs = array();
79
-		// charger les valeurs
80
-		// ce qui permet de prendre en charge une fonction charger() existante
81
-		// qui prend alors la main sur l'auto detection
82
-		if ($charger_valeurs = charger_fonction("charger","formulaires/$form/",true))
83
-			$valeurs = call_user_func_array($charger_valeurs,$args);
84
-		$valeurs = pipeline(
85
-			'formulaire_charger',
86
-			array(
87
-				'args'=>array('form'=>$form,'args'=>$args,'je_suis_poste'=>false),
88
-				'data'=>$valeurs)
89
-		);
90
-		// ne pas stocker editable !
91
-		unset($valeurs['editable']);
92
-
93
-		// recuperer les valeurs postees
94
-		$store = array();
95
-		foreach($valeurs as $k=>$v){
96
-			if (substr($k,0,1)!=='_')
97
-				$store[$k] = _request($k);
98
-		}
99
-
100
-		return cvtconf_configurer_stocker($form,$valeurs,$store);
78
+        $valeurs = array();
79
+        // charger les valeurs
80
+        // ce qui permet de prendre en charge une fonction charger() existante
81
+        // qui prend alors la main sur l'auto detection
82
+        if ($charger_valeurs = charger_fonction("charger","formulaires/$form/",true))
83
+            $valeurs = call_user_func_array($charger_valeurs,$args);
84
+        $valeurs = pipeline(
85
+            'formulaire_charger',
86
+            array(
87
+                'args'=>array('form'=>$form,'args'=>$args,'je_suis_poste'=>false),
88
+                'data'=>$valeurs)
89
+        );
90
+        // ne pas stocker editable !
91
+        unset($valeurs['editable']);
92
+
93
+        // recuperer les valeurs postees
94
+        $store = array();
95
+        foreach($valeurs as $k=>$v){
96
+            if (substr($k,0,1)!=='_')
97
+                $store[$k] = _request($k);
98
+        }
99
+
100
+        return cvtconf_configurer_stocker($form,$valeurs,$store);
101 101
 }
102 102
 
103 103
 /**
@@ -113,25 +113,25 @@  discard block
 block discarded – undo
113 113
  * @return array
114 114
  */
115 115
 function cvtconf_definir_configurer_conteneur($form,$valeurs) {
116
-		// stocker en base
117
-		// par defaut, dans un casier serialize dans spip_meta (idem CFG)
118
-		$casier = substr($form,11);
119
-		$table = 'meta';
120
-		$prefixe = '';
121
-		$stockage = '';
122
-
123
-		if (isset($valeurs['_meta_casier']))   $casier   = $valeurs['_meta_casier'];
124
-		if (isset($valeurs['_meta_prefixe']))  $prefixe  = $valeurs['_meta_prefixe'];
125
-		if (isset($valeurs['_meta_stockage'])) $stockage = $valeurs['_meta_stockage'] . '::';
116
+        // stocker en base
117
+        // par defaut, dans un casier serialize dans spip_meta (idem CFG)
118
+        $casier = substr($form,11);
119
+        $table = 'meta';
120
+        $prefixe = '';
121
+        $stockage = '';
122
+
123
+        if (isset($valeurs['_meta_casier']))   $casier   = $valeurs['_meta_casier'];
124
+        if (isset($valeurs['_meta_prefixe']))  $prefixe  = $valeurs['_meta_prefixe'];
125
+        if (isset($valeurs['_meta_stockage'])) $stockage = $valeurs['_meta_stockage'] . '::';
126 126
 			
127
-		// si on indique juste une table, il faut vider les autres proprietes
128
-		// car par defaut on utilise ni casier ni prefixe dans ce cas
129
-		if (isset($valeurs['_meta_table'])) {
130
-			$table = $valeurs['_meta_table'];
131
-			$casier = (isset($valeurs['_meta_casier'])?$valeurs['_meta_casier']:'');
132
-		}
127
+        // si on indique juste une table, il faut vider les autres proprietes
128
+        // car par defaut on utilise ni casier ni prefixe dans ce cas
129
+        if (isset($valeurs['_meta_table'])) {
130
+            $table = $valeurs['_meta_table'];
131
+            $casier = (isset($valeurs['_meta_casier'])?$valeurs['_meta_casier']:'');
132
+        }
133 133
 	
134
-		return array($table,$casier,$prefixe,$stockage);
134
+        return array($table,$casier,$prefixe,$stockage);
135 135
 }
136 136
 
137 137
 /**
@@ -142,39 +142,39 @@  discard block
 block discarded – undo
142 142
  * @return array
143 143
  */
144 144
 function cvtconf_formulaires_configurer_recense($form){
145
-	$valeurs = array('editable'=>' ');
146
-
147
-	// sinon cas analyse du squelette
148
-	if ($f = find_in_path($form.'.' . _EXTENSION_SQUELETTES, 'formulaires/')
149
-		AND lire_fichier($f, $contenu)) {
150
-
151
-		for ($i=0;$i<2;$i++) {
152
-			// a la seconde iteration, evaluer le fond avec les valeurs deja trouvees
153
-			// permet de trouver aussi les name="#GET{truc}"
154
-			if ($i==1) $contenu = recuperer_fond("formulaires/$form",$valeurs);
155
-
156
-			$balises = array_merge(extraire_balises($contenu,'input'),
157
-				extraire_balises($contenu,'textarea'),
158
-				extraire_balises($contenu,'select'));
159
-
160
-			foreach($balises as $b) {
161
-				if ($n = extraire_attribut($b, 'name')
162
-					AND preg_match(",^([\w\-]+)(\[\w*\])?$,",$n,$r)
163
-					AND !in_array($n,array('formulaire_action','formulaire_action_args'))
164
-					AND extraire_attribut($b,'type')!=='submit') {
165
-						$valeurs[$r[1]] = '';
166
-						// recuperer les valeurs _meta_xx qui peuvent etre fournies
167
-						// en input hidden dans le squelette
168
-						if (strncmp($r[1],'_meta_',6)==0)
169
-							$valeurs[$r[1]] = extraire_attribut($b,'value');
170
-					}
171
-			}
172
-		}
173
-	}
174
-
175
-
176
-	cvtconf_configurer_lire_meta($form,$valeurs);
177
-	return $valeurs;
145
+    $valeurs = array('editable'=>' ');
146
+
147
+    // sinon cas analyse du squelette
148
+    if ($f = find_in_path($form.'.' . _EXTENSION_SQUELETTES, 'formulaires/')
149
+        AND lire_fichier($f, $contenu)) {
150
+
151
+        for ($i=0;$i<2;$i++) {
152
+            // a la seconde iteration, evaluer le fond avec les valeurs deja trouvees
153
+            // permet de trouver aussi les name="#GET{truc}"
154
+            if ($i==1) $contenu = recuperer_fond("formulaires/$form",$valeurs);
155
+
156
+            $balises = array_merge(extraire_balises($contenu,'input'),
157
+                extraire_balises($contenu,'textarea'),
158
+                extraire_balises($contenu,'select'));
159
+
160
+            foreach($balises as $b) {
161
+                if ($n = extraire_attribut($b, 'name')
162
+                    AND preg_match(",^([\w\-]+)(\[\w*\])?$,",$n,$r)
163
+                    AND !in_array($n,array('formulaire_action','formulaire_action_args'))
164
+                    AND extraire_attribut($b,'type')!=='submit') {
165
+                        $valeurs[$r[1]] = '';
166
+                        // recuperer les valeurs _meta_xx qui peuvent etre fournies
167
+                        // en input hidden dans le squelette
168
+                        if (strncmp($r[1],'_meta_',6)==0)
169
+                            $valeurs[$r[1]] = extraire_attribut($b,'value');
170
+                    }
171
+            }
172
+        }
173
+    }
174
+
175
+
176
+    cvtconf_configurer_lire_meta($form,$valeurs);
177
+    return $valeurs;
178 178
 }
179 179
 
180 180
 /**
@@ -185,24 +185,24 @@  discard block
 block discarded – undo
185 185
  * @return string
186 186
  */
187 187
 function cvtconf_configurer_stocker($form,$valeurs,$store) {
188
-	$trace = '';
189
-	list($table,$casier,$prefixe,$stockage) = cvtconf_definir_configurer_conteneur($form,$valeurs);
190
-	// stocker en base
191
-	// par defaut, dans un casier serialize dans spip_meta (idem CFG)
192
-	if (!isset($GLOBALS[$table]))
193
-		lire_metas($table);
194
-
195
-	$prefixe = ($prefixe?$prefixe.'_':'');
196
-	$table = ($table) ? "/$table/" : ""; 
197
-	$casier = ($casier) ? rtrim($casier,'/').'/' : ""; // slash final, sinon rien
188
+    $trace = '';
189
+    list($table,$casier,$prefixe,$stockage) = cvtconf_definir_configurer_conteneur($form,$valeurs);
190
+    // stocker en base
191
+    // par defaut, dans un casier serialize dans spip_meta (idem CFG)
192
+    if (!isset($GLOBALS[$table]))
193
+        lire_metas($table);
194
+
195
+    $prefixe = ($prefixe?$prefixe.'_':'');
196
+    $table = ($table) ? "/$table/" : ""; 
197
+    $casier = ($casier) ? rtrim($casier,'/').'/' : ""; // slash final, sinon rien
198 198
 	
199
-	foreach($store as $k=>$v){
200
-		ecrire_config("$stockage$table$prefixe$casier$k", $v);
201
-		if (_request('var_mode')=='configurer' AND autoriser('webmestre')){
202
-			$trace .= "<br />table $table : ".$prefixe.$k." = $v;";
203
-		}
204
-	}
205
-	return $trace;
199
+    foreach($store as $k=>$v){
200
+        ecrire_config("$stockage$table$prefixe$casier$k", $v);
201
+        if (_request('var_mode')=='configurer' AND autoriser('webmestre')){
202
+            $trace .= "<br />table $table : ".$prefixe.$k." = $v;";
203
+        }
204
+    }
205
+    return $trace;
206 206
 }
207 207
 
208 208
 /**
@@ -211,23 +211,23 @@  discard block
 block discarded – undo
211 211
  * @param array $valeurs
212 212
  */
213 213
 function cvtconf_configurer_lire_meta($form,&$valeurs) {
214
-	list($table,$casier,$prefixe,$stockage) = cvtconf_definir_configurer_conteneur($form,$valeurs);
215
-
216
-	$table = ($table) ? "/$table/" : ""; 
217
-	$prefixe = ($prefixe?$prefixe.'_':'');
218
-	if ($casier) {
219
-		$meta = lire_config("$stockage$table$prefixe$casier");
220
-		$prefixe = '';
221
-	}
222
-	else {
223
-		$table = rtrim($table, '/');
224
-		$meta = lire_config("$stockage$table");
225
-	}
226
-
227
-	foreach($valeurs as $k=>$v){
228
-		if (substr($k,0,1)!=='_')
229
-		$valeurs[$k] = (isset($meta[$prefixe.$k])?$meta[$prefixe.$k]:'');
230
-	}
214
+    list($table,$casier,$prefixe,$stockage) = cvtconf_definir_configurer_conteneur($form,$valeurs);
215
+
216
+    $table = ($table) ? "/$table/" : ""; 
217
+    $prefixe = ($prefixe?$prefixe.'_':'');
218
+    if ($casier) {
219
+        $meta = lire_config("$stockage$table$prefixe$casier");
220
+        $prefixe = '';
221
+    }
222
+    else {
223
+        $table = rtrim($table, '/');
224
+        $meta = lire_config("$stockage$table");
225
+    }
226
+
227
+    foreach($valeurs as $k=>$v){
228
+        if (substr($k,0,1)!=='_')
229
+        $valeurs[$k] = (isset($meta[$prefixe.$k])?$meta[$prefixe.$k]:'');
230
+    }
231 231
 }
232 232
 
233 233
 
Please login to merge, or discard this patch.
ecrire/inc/notifications.php 1 patch
Indentation   +99 added lines, -99 removed lines patch added patch discarded remove patch
@@ -26,16 +26,16 @@  discard block
 block discarded – undo
26 26
  */
27 27
 function inc_notifications_dist($quoi, $id=0, $options=array()) {
28 28
 
29
-	// charger les fichiers qui veulent ajouter des definitions
30
-	// ou faire des trucs aussi dans le pipeline, ca fait deux api pour le prix d'une ...
31
-	pipeline('notifications',array('args'=>array('quoi'=>$quoi,'id'=>$id,'options'=>$options)));
32
-
33
-	if ($notification = charger_fonction($quoi,'notifications',true)) {
34
-		spip_log("$notification($quoi,$id"
35
-			.($options?",".serialize($options):"")
36
-			.")",'notifications');
37
-		$notification($quoi, $id, $options);
38
-	}
29
+    // charger les fichiers qui veulent ajouter des definitions
30
+    // ou faire des trucs aussi dans le pipeline, ca fait deux api pour le prix d'une ...
31
+    pipeline('notifications',array('args'=>array('quoi'=>$quoi,'id'=>$id,'options'=>$options)));
32
+
33
+    if ($notification = charger_fonction($quoi,'notifications',true)) {
34
+        spip_log("$notification($quoi,$id"
35
+            .($options?",".serialize($options):"")
36
+            .")",'notifications');
37
+        $notification($quoi, $id, $options);
38
+    }
39 39
 }
40 40
 
41 41
 /**
@@ -48,15 +48,15 @@  discard block
 block discarded – undo
48 48
  * @param array $exclure
49 49
  */
50 50
 function notifications_nettoyer_emails(&$emails, $exclure = array()){
51
-	// filtrer et unifier
52
-	include_spip('inc/filtres');
53
-	$emails = array_unique(array_filter(array_map('email_valide',array_map('trim', $emails))));
54
-	if ($exclure AND count($exclure)){
55
-		// nettoyer les exclusions d'abord
56
-		notifications_nettoyer_emails($exclure);
57
-		// faire un diff
58
-		$emails = array_diff($emails,$exclure);
59
-	}
51
+    // filtrer et unifier
52
+    include_spip('inc/filtres');
53
+    $emails = array_unique(array_filter(array_map('email_valide',array_map('trim', $emails))));
54
+    if ($exclure AND count($exclure)){
55
+        // nettoyer les exclusions d'abord
56
+        notifications_nettoyer_emails($exclure);
57
+        // faire un diff
58
+        $emails = array_diff($emails,$exclure);
59
+    }
60 60
 }
61 61
 
62 62
 /**
@@ -70,71 +70,71 @@  discard block
 block discarded – undo
70 70
  * @param string $headers
71 71
  */
72 72
 function notifications_envoyer_mails($emails, $texte, $sujet="", $from = "", $headers = ""){
73
-	// rien a faire si pas de texte !
74
-	if (!strlen($texte))
75
-		return;
76
-
77
-	// si on ne specifie qu'un email, le mettre dans un tableau
78
-	if (!is_array($emails))
79
-		$emails = explode(',',$emails);
80
-
81
-	notifications_nettoyer_emails($emails);
82
-
83
-	// tester si le mail est deja en html
84
-	if (strpos($texte,"<")!==false // eviter les tests suivants si possible
85
-		AND $ttrim = trim($texte)
86
-		AND substr($ttrim,0,1)=="<"
87
-	  AND substr($ttrim,-1,1)==">"
88
-	  AND stripos($ttrim,"</html>")!==false){
89
-
90
-		if(!strlen($sujet)){
91
-			// dans ce cas on ruse un peu : extraire le sujet du title
92
-			if (preg_match(",<title>(.*)</title>,Uims",$texte,$m))
93
-				$sujet = $m[1];
94
-			else {
95
-				// fallback, on prend le body si on le trouve
96
-				if (preg_match(",<body[^>]*>(.*)</body>,Uims",$texte,$m))
97
-					$ttrim = $m[1];
98
-
99
-				// et on extrait la premiere ligne de vrai texte...
100
-				// nettoyer le html et les retours chariots
101
-				$ttrim = textebrut($ttrim);
102
-				$ttrim = str_replace("\r\n", "\r", $ttrim);
103
-				$ttrim = str_replace("\r", "\n", $ttrim);
104
-				// decouper
105
-				$ttrim = explode("\n",trim($ttrim));
106
-				// extraire la premiere ligne de texte brut
107
-				$sujet = array_shift($ttrim);
108
-			}
109
-		}
110
-
111
-		// si besoin on ajoute le content-type dans les headers
112
-		if (stripos($headers,"Content-Type")===false)
113
-			$headers .= "Content-Type: text/html\n";
114
-	}
115
-
116
-	// si le sujet est vide, extraire la premiere ligne du corps
117
-	// du mail qui est donc du texte
118
-	if (!strlen($sujet)){
119
-		// nettoyer un peu les retours chariots
120
-		$texte = str_replace("\r\n", "\r", $texte);
121
-		$texte = str_replace("\r", "\n", $texte);
122
-		// decouper
123
-		$texte = explode("\n",trim($texte));
124
-		// extraire la premiere ligne
125
-		$sujet = array_shift($texte);
126
-		$texte = trim(implode("\n",$texte));
127
-	}
128
-
129
-	$envoyer_mail = charger_fonction('envoyer_mail','inc');
130
-	foreach($emails as $email){
131
-		// passer dans un pipeline qui permet un ajout eventuel
132
-		// (url de suivi des notifications par exemple)
133
-		$envoi = pipeline('notifications_envoyer_mails',array('email'=>$email,'sujet'=>$sujet,'texte'=>$texte));
134
-		$email = $envoi['email'];
135
-
136
-		job_queue_add('envoyer_mail', ">$email : ".$envoi['sujet'], array($email, $envoi['sujet'], $envoi['texte'], $from, $headers), 'inc/');
137
-	}
73
+    // rien a faire si pas de texte !
74
+    if (!strlen($texte))
75
+        return;
76
+
77
+    // si on ne specifie qu'un email, le mettre dans un tableau
78
+    if (!is_array($emails))
79
+        $emails = explode(',',$emails);
80
+
81
+    notifications_nettoyer_emails($emails);
82
+
83
+    // tester si le mail est deja en html
84
+    if (strpos($texte,"<")!==false // eviter les tests suivants si possible
85
+        AND $ttrim = trim($texte)
86
+        AND substr($ttrim,0,1)=="<"
87
+      AND substr($ttrim,-1,1)==">"
88
+      AND stripos($ttrim,"</html>")!==false){
89
+
90
+        if(!strlen($sujet)){
91
+            // dans ce cas on ruse un peu : extraire le sujet du title
92
+            if (preg_match(",<title>(.*)</title>,Uims",$texte,$m))
93
+                $sujet = $m[1];
94
+            else {
95
+                // fallback, on prend le body si on le trouve
96
+                if (preg_match(",<body[^>]*>(.*)</body>,Uims",$texte,$m))
97
+                    $ttrim = $m[1];
98
+
99
+                // et on extrait la premiere ligne de vrai texte...
100
+                // nettoyer le html et les retours chariots
101
+                $ttrim = textebrut($ttrim);
102
+                $ttrim = str_replace("\r\n", "\r", $ttrim);
103
+                $ttrim = str_replace("\r", "\n", $ttrim);
104
+                // decouper
105
+                $ttrim = explode("\n",trim($ttrim));
106
+                // extraire la premiere ligne de texte brut
107
+                $sujet = array_shift($ttrim);
108
+            }
109
+        }
110
+
111
+        // si besoin on ajoute le content-type dans les headers
112
+        if (stripos($headers,"Content-Type")===false)
113
+            $headers .= "Content-Type: text/html\n";
114
+    }
115
+
116
+    // si le sujet est vide, extraire la premiere ligne du corps
117
+    // du mail qui est donc du texte
118
+    if (!strlen($sujet)){
119
+        // nettoyer un peu les retours chariots
120
+        $texte = str_replace("\r\n", "\r", $texte);
121
+        $texte = str_replace("\r", "\n", $texte);
122
+        // decouper
123
+        $texte = explode("\n",trim($texte));
124
+        // extraire la premiere ligne
125
+        $sujet = array_shift($texte);
126
+        $texte = trim(implode("\n",$texte));
127
+    }
128
+
129
+    $envoyer_mail = charger_fonction('envoyer_mail','inc');
130
+    foreach($emails as $email){
131
+        // passer dans un pipeline qui permet un ajout eventuel
132
+        // (url de suivi des notifications par exemple)
133
+        $envoi = pipeline('notifications_envoyer_mails',array('email'=>$email,'sujet'=>$sujet,'texte'=>$texte));
134
+        $email = $envoi['email'];
135
+
136
+        job_queue_add('envoyer_mail', ">$email : ".$envoi['sujet'], array($email, $envoi['sujet'], $envoi['texte'], $from, $headers), 'inc/');
137
+    }
138 138
 
139 139
 }
140 140
 
@@ -150,9 +150,9 @@  discard block
 block discarded – undo
150 150
  * @return string
151 151
  */
152 152
 function email_notification_objet($id_objet, $type_objet, $modele) {
153
-	$envoyer_mail = charger_fonction('envoyer_mail','inc'); // pour nettoyer_titre_email
154
-	$id_type = id_table_objet($type_objet);
155
-	return recuperer_fond($modele,array($id_type=>$id_objet,"id"=>$id_objet));
153
+    $envoyer_mail = charger_fonction('envoyer_mail','inc'); // pour nettoyer_titre_email
154
+    $id_type = id_table_objet($type_objet);
155
+    return recuperer_fond($modele,array($id_type=>$id_objet,"id"=>$id_objet));
156 156
 }
157 157
 
158 158
 /**
@@ -166,29 +166,29 @@  discard block
 block discarded – undo
166 166
  * @return string
167 167
  */
168 168
 function email_notification_article($id_article, $modele) {
169
-	$envoyer_mail = charger_fonction('envoyer_mail','inc'); // pour nettoyer_titre_email
169
+    $envoyer_mail = charger_fonction('envoyer_mail','inc'); // pour nettoyer_titre_email
170 170
 
171
-	return recuperer_fond($modele,array('id_article'=>$id_article));
171
+    return recuperer_fond($modele,array('id_article'=>$id_article));
172 172
 }
173 173
 
174 174
 // Compatibilite, ne plus utiliser
175 175
 // http://doc.spip.org/@notifier_publication_article
176 176
 function notifier_publication_article($id_article) {
177
-	if ($GLOBALS['meta']["suivi_edito"] == "oui") {
178
-		$adresse_suivi = $GLOBALS['meta']["adresse_suivi"];
179
-		$texte = email_notification_article($id_article, "notifications/article_publie");
180
-		notifications_envoyer_mails($adresse_suivi, $texte);
181
-	}
177
+    if ($GLOBALS['meta']["suivi_edito"] == "oui") {
178
+        $adresse_suivi = $GLOBALS['meta']["adresse_suivi"];
179
+        $texte = email_notification_article($id_article, "notifications/article_publie");
180
+        notifications_envoyer_mails($adresse_suivi, $texte);
181
+    }
182 182
 }
183 183
 
184 184
 // Compatibilite, ne plus utiliser
185 185
 // http://doc.spip.org/@notifier_proposition_article
186 186
 function notifier_proposition_article($id_article) {
187
-	if ($GLOBALS['meta']["suivi_edito"] == "oui") {
188
-		$adresse_suivi = $GLOBALS['meta']["adresse_suivi"];
189
-		$texte = email_notification_article($id_article, "notifications/article_propose");
190
-		notifications_envoyer_mails($adresse_suivi, $texte);
191
-	}
187
+    if ($GLOBALS['meta']["suivi_edito"] == "oui") {
188
+        $adresse_suivi = $GLOBALS['meta']["adresse_suivi"];
189
+        $texte = email_notification_article($id_article, "notifications/article_propose");
190
+        notifications_envoyer_mails($adresse_suivi, $texte);
191
+    }
192 192
 }
193 193
 
194 194
 ?>
Please login to merge, or discard this patch.
ecrire/inc/install.php 1 patch
Indentation   +333 added lines, -333 removed lines patch added patch discarded remove patch
@@ -40,12 +40,12 @@  discard block
 block discarded – undo
40 40
 **/
41 41
 function install_fichier_connexion($nom, $texte)
42 42
 {
43
-	$texte = "<"."?php\n"
44
-	. "if (!defined(\"_ECRIRE_INC_VERSION\")) return;\n"
45
-	. $texte
46
-	. "?".">";
43
+    $texte = "<"."?php\n"
44
+    . "if (!defined(\"_ECRIRE_INC_VERSION\")) return;\n"
45
+    . $texte
46
+    . "?".">";
47 47
 
48
-	ecrire_fichier($nom, $texte);
48
+    ecrire_fichier($nom, $texte);
49 49
 }
50 50
 
51 51
 
@@ -74,18 +74,18 @@  discard block
 block discarded – undo
74 74
 **/
75 75
 function install_connexion($adr, $port, $login, $pass, $base, $type, $pref, $ldap='')
76 76
 {
77
-	$adr = addcslashes($adr,"'\\");
78
-	$port = addcslashes($port,"'\\");
79
-	$login = addcslashes($login,"'\\");
80
-	$pass = addcslashes($pass,"'\\");
81
-	$base = addcslashes($base,"'\\");
82
-	$type = addcslashes($type,"'\\");
83
-	$pref = addcslashes($pref,"'\\");
84
-	$ldap = addcslashes($ldap,"'\\");
85
-	return "\$GLOBALS['spip_connect_version'] = 0.7;\n"
86
-	. "spip_connect_db("
87
-	. "'$adr','$port','$login','$pass','$base'"
88
-	. ",'$type', '$pref','$ldap');\n";
77
+    $adr = addcslashes($adr,"'\\");
78
+    $port = addcslashes($port,"'\\");
79
+    $login = addcslashes($login,"'\\");
80
+    $pass = addcslashes($pass,"'\\");
81
+    $base = addcslashes($base,"'\\");
82
+    $type = addcslashes($type,"'\\");
83
+    $pref = addcslashes($pref,"'\\");
84
+    $ldap = addcslashes($ldap,"'\\");
85
+    return "\$GLOBALS['spip_connect_version'] = 0.7;\n"
86
+    . "spip_connect_db("
87
+    . "'$adr','$port','$login','$pass','$base'"
88
+    . ",'$type', '$pref','$ldap');\n";
89 89
 }
90 90
 
91 91
 
@@ -102,23 +102,23 @@  discard block
 block discarded – undo
102 102
 **/
103 103
 function analyse_fichier_connection($file)
104 104
 {
105
-	$s = @join('', file($file));
106
-	if (preg_match("#mysql_connect\([\"'](.*)[\"'],[\"'](.*)[\"'],[\"'](.*)[\"']\)#", $s, $regs)) {
107
-		array_shift($regs);
108
-		return $regs;
109
-	} else {
110
-		$ar = '\s*\'([^\']*)\'';
111
-		$r = '\s*,' . $ar;
112
-		$r = "#spip_connect_db[(]$ar$r$r$r$r(?:$r(?:$r(?:$r)?)?)?#";
113
-		if (preg_match($r, $s, $regs)) {
114
-			$regs[2] = $regs[1] . (!$regs[2] ? '' : ":$port_db;");
115
-			array_shift($regs);
116
-			array_shift($regs);
117
-			return $regs;
118
-		}
119
-	}
120
-	spip_log("$file n'est pas un fichier de connexion");
121
-	return array();
105
+    $s = @join('', file($file));
106
+    if (preg_match("#mysql_connect\([\"'](.*)[\"'],[\"'](.*)[\"'],[\"'](.*)[\"']\)#", $s, $regs)) {
107
+        array_shift($regs);
108
+        return $regs;
109
+    } else {
110
+        $ar = '\s*\'([^\']*)\'';
111
+        $r = '\s*,' . $ar;
112
+        $r = "#spip_connect_db[(]$ar$r$r$r$r(?:$r(?:$r(?:$r)?)?)?#";
113
+        if (preg_match($r, $s, $regs)) {
114
+            $regs[2] = $regs[1] . (!$regs[2] ? '' : ":$port_db;");
115
+            array_shift($regs);
116
+            array_shift($regs);
117
+            return $regs;
118
+        }
119
+    }
120
+    spip_log("$file n'est pas un fichier de connexion");
121
+    return array();
122 122
 }
123 123
 
124 124
 /**
@@ -136,20 +136,20 @@  discard block
 block discarded – undo
136 136
 **/
137 137
 function bases_referencees($exclu='')
138 138
 {
139
-	$tables = array();
140
-	foreach(preg_files(_DIR_CONNECT, '.php$') as $f) {
141
-		if ($f != $exclu AND analyse_fichier_connection($f))
142
-			$tables[]= basename($f, '.php');
143
-	}
144
-	return $tables;
139
+    $tables = array();
140
+    foreach(preg_files(_DIR_CONNECT, '.php$') as $f) {
141
+        if ($f != $exclu AND analyse_fichier_connection($f))
142
+            $tables[]= basename($f, '.php');
143
+    }
144
+    return $tables;
145 145
 }
146 146
 
147 147
 
148 148
 function install_mode_appel($server_db, $tout=true)
149 149
 {
150
-	return ($server_db != 'mysql') ? ''
151
-	: (($tout  ? test_rappel_nom_base_mysql($server_db) : '')
152
-		. test_sql_mode_mysql($server_db)	);
150
+    return ($server_db != 'mysql') ? ''
151
+    : (($tout  ? test_rappel_nom_base_mysql($server_db) : '')
152
+        . test_sql_mode_mysql($server_db)	);
153 153
 }
154 154
 
155 155
 //
@@ -157,224 +157,224 @@  discard block
 block discarded – undo
157 157
 // (sert a l'etape 1 de l'installation)
158 158
 // http://doc.spip.org/@tester_compatibilite_hebergement
159 159
 function tester_compatibilite_hebergement() {
160
-	$err = array();
161
-
162
-	$p = phpversion();
163
-	if (preg_match(',^([0-9]+)\.([0-9]+)\.([0-9]+),', $p, $regs)) {
164
-		$php = array($regs[1], $regs[2], $regs[3]);
165
-		$m = '5.1.0';
166
-		$min = explode('.', $m);
167
-		if ($php[0]<$min[0]
168
-		OR ($php[0]==$min[0] AND $php[1]<$min[1])
169
-		OR ($php[0]==$min[0] AND $php[1]==$min[1] AND $php[2]<$min[2]))
170
-			$err[] = _T('install_php_version', array('version' => $p,  'minimum' => $m));
171
-	}
172
-
173
-	// Si on n'a pas la bonne version de PHP, c'est la fin
174
-	if ($err) 
175
-		die("<div class='error'>" 
176
-		. "<h3>"._T('avis_attention').'</h3><p>'._T('install_echec_annonce')."</p><ul class='spip'>"
177
-		. "<li><strong>{$err[0]}</strong></li>\n</ul></div>");
178
-
179
-	// Il faut une base de donnees tout de meme ...
180
-	$serveurs = install_select_serveur();
181
-	if (!$serveurs)
182
-		$err[] = _T('install_extension_php_obligatoire')
183
-		. " <a href='http://www.php.net/mysql'>MYSQL</a>"
184
-		. "| <a href='http://www.php.net/pgsql'>PostgreSQL</a>"
185
-		. "| <a href='http://www.php.net/sqlite'>SQLite</a>";
186
-
187
-	// et il faut preg
188
-	if (!function_exists('preg_match_all'))
189
-		$err[] = _T('install_extension_php_obligatoire')
190
-		. " <a href='http://se.php.net/pcre'>PCRE</a>";
191
-
192
-	// et surtout pas ce mbstring.overload
193
-	if ($a = @ini_get('mbstring.func_overload'))
194
-		$err[] = _T('install_extension_mbstring')
195
-		. "mbstring.func_overload=$a - <a href='http://www.php.net/mb_string'>mb_string</a>.<br /><small>";
196
-
197
-	if ($err) {
198
-			echo "<div class='error'>"
199
-				."<h3>"._T('avis_attention').'</h3><p>'._T('install_echec_annonce')."</p><ul class='spip'>";
200
-			foreach($err as $e)
201
-				echo "<li><strong>$e</strong></li>\n";
202
-
203
-		# a priori ici on pourrait die(), mais il faut laisser la possibilite
204
-		# de forcer malgre tout (pour tester, ou si bug de detection)
205
-		echo "</ul></div>\n";
206
-	}
160
+    $err = array();
161
+
162
+    $p = phpversion();
163
+    if (preg_match(',^([0-9]+)\.([0-9]+)\.([0-9]+),', $p, $regs)) {
164
+        $php = array($regs[1], $regs[2], $regs[3]);
165
+        $m = '5.1.0';
166
+        $min = explode('.', $m);
167
+        if ($php[0]<$min[0]
168
+        OR ($php[0]==$min[0] AND $php[1]<$min[1])
169
+        OR ($php[0]==$min[0] AND $php[1]==$min[1] AND $php[2]<$min[2]))
170
+            $err[] = _T('install_php_version', array('version' => $p,  'minimum' => $m));
171
+    }
172
+
173
+    // Si on n'a pas la bonne version de PHP, c'est la fin
174
+    if ($err) 
175
+        die("<div class='error'>" 
176
+        . "<h3>"._T('avis_attention').'</h3><p>'._T('install_echec_annonce')."</p><ul class='spip'>"
177
+        . "<li><strong>{$err[0]}</strong></li>\n</ul></div>");
178
+
179
+    // Il faut une base de donnees tout de meme ...
180
+    $serveurs = install_select_serveur();
181
+    if (!$serveurs)
182
+        $err[] = _T('install_extension_php_obligatoire')
183
+        . " <a href='http://www.php.net/mysql'>MYSQL</a>"
184
+        . "| <a href='http://www.php.net/pgsql'>PostgreSQL</a>"
185
+        . "| <a href='http://www.php.net/sqlite'>SQLite</a>";
186
+
187
+    // et il faut preg
188
+    if (!function_exists('preg_match_all'))
189
+        $err[] = _T('install_extension_php_obligatoire')
190
+        . " <a href='http://se.php.net/pcre'>PCRE</a>";
191
+
192
+    // et surtout pas ce mbstring.overload
193
+    if ($a = @ini_get('mbstring.func_overload'))
194
+        $err[] = _T('install_extension_mbstring')
195
+        . "mbstring.func_overload=$a - <a href='http://www.php.net/mb_string'>mb_string</a>.<br /><small>";
196
+
197
+    if ($err) {
198
+            echo "<div class='error'>"
199
+                ."<h3>"._T('avis_attention').'</h3><p>'._T('install_echec_annonce')."</p><ul class='spip'>";
200
+            foreach($err as $e)
201
+                echo "<li><strong>$e</strong></li>\n";
202
+
203
+        # a priori ici on pourrait die(), mais il faut laisser la possibilite
204
+        # de forcer malgre tout (pour tester, ou si bug de detection)
205
+        echo "</ul></div>\n";
206
+    }
207 207
 }
208 208
 
209 209
 
210 210
 // Une fonction pour faciliter la recherche du login (superflu ?)
211 211
 // http://doc.spip.org/@login_hebergeur
212 212
 function login_hebergeur() {
213
-	global $HTTP_X_HOST, $REQUEST_URI, $SERVER_NAME, $HTTP_HOST;
214
-
215
-	$base_hebergeur = 'localhost'; # par defaut
216
-
217
-	// Lycos (ex-Multimachin)
218
-	if ($HTTP_X_HOST == 'membres.lycos.fr') {
219
-		preg_match(',^/([^/]*),', $REQUEST_URI, $regs);
220
-		$login_hebergeur = $regs[1];
221
-	}
222
-	// Altern
223
-	else if (preg_match(',altern\.com$,', $SERVER_NAME)) {
224
-		preg_match(',([^.]*\.[^.]*)$,', $HTTP_HOST, $regs);
225
-		$login_hebergeur = preg_replace('[^\w\d]', '_', $regs[1]);
226
-	}
227
-	// Free
228
-	else if (preg_match(',(.*)\.free\.fr$,', $SERVER_NAME, $regs)) {
229
-		$base_hebergeur = 'sql.free.fr';
230
-		$login_hebergeur = $regs[1];
231
-	} else $login_hebergeur = '';
232
-
233
-	return array($base_hebergeur, $login_hebergeur);
213
+    global $HTTP_X_HOST, $REQUEST_URI, $SERVER_NAME, $HTTP_HOST;
214
+
215
+    $base_hebergeur = 'localhost'; # par defaut
216
+
217
+    // Lycos (ex-Multimachin)
218
+    if ($HTTP_X_HOST == 'membres.lycos.fr') {
219
+        preg_match(',^/([^/]*),', $REQUEST_URI, $regs);
220
+        $login_hebergeur = $regs[1];
221
+    }
222
+    // Altern
223
+    else if (preg_match(',altern\.com$,', $SERVER_NAME)) {
224
+        preg_match(',([^.]*\.[^.]*)$,', $HTTP_HOST, $regs);
225
+        $login_hebergeur = preg_replace('[^\w\d]', '_', $regs[1]);
226
+    }
227
+    // Free
228
+    else if (preg_match(',(.*)\.free\.fr$,', $SERVER_NAME, $regs)) {
229
+        $base_hebergeur = 'sql.free.fr';
230
+        $login_hebergeur = $regs[1];
231
+    } else $login_hebergeur = '';
232
+
233
+    return array($base_hebergeur, $login_hebergeur);
234 234
 }
235 235
 
236 236
 
237 237
 // http://doc.spip.org/@info_etape
238 238
 function info_etape($titre, $complement = ''){
239
-	return "<h2>".$titre."</h2>\n" .
240
-	($complement ? "".$complement."\n":'');
239
+    return "<h2>".$titre."</h2>\n" .
240
+    ($complement ? "".$complement."\n":'');
241 241
 }
242 242
 
243 243
 // http://doc.spip.org/@bouton_suivant
244 244
 function bouton_suivant($code = '') {
245
-	if($code=='') $code = _T('bouton_suivant');
246
-	static $suivant = 0;
247
-	$id = 'suivant'.(($suivant>0)?strval($suivant):'');
248
-	$suivant +=1;
249
-	return "\n<p class='boutons suivant'><input id='".$id."' type='submit'\nvalue=\"" .
250
-		$code .
251
-		" >>\" /></p>\n";
245
+    if($code=='') $code = _T('bouton_suivant');
246
+    static $suivant = 0;
247
+    $id = 'suivant'.(($suivant>0)?strval($suivant):'');
248
+    $suivant +=1;
249
+    return "\n<p class='boutons suivant'><input id='".$id."' type='submit'\nvalue=\"" .
250
+        $code .
251
+        " >>\" /></p>\n";
252 252
 }
253 253
 
254 254
 // http://doc.spip.org/@info_progression_etape
255 255
 function info_progression_etape($en_cours,$phase,$dir, $erreur = false){
256
-	//$en_cours = _request('etape')?_request('etape'):"";
257
-	$liste = find_all_in_path($dir,$phase.'(([0-9])+|fin)[.]php$');
258
-	$debut = 1; $etat = "ok";
259
-	$last = count($liste);
256
+    //$en_cours = _request('etape')?_request('etape'):"";
257
+    $liste = find_all_in_path($dir,$phase.'(([0-9])+|fin)[.]php$');
258
+    $debut = 1; $etat = "ok";
259
+    $last = count($liste);
260 260
 //	$texte_etat = array('ok'=>'OK','encours'=>_T('en_cours'),'todo'=>_T('todo'));
261 261
 
262
-	$intitule_etat["etape_"][1] = typo(_T('info_connexion_base_donnee'));
263
-	$intitule_etat["etape_"][2] = typo(_T('menu_aide_installation_choix_base'));
264
-	$intitule_etat["etape_"][3] = typo(_T('info_informations_personnelles'));
265
-	$intitule_etat["etape_"][4] = typo(_T('info_derniere_etape'));
262
+    $intitule_etat["etape_"][1] = typo(_T('info_connexion_base_donnee'));
263
+    $intitule_etat["etape_"][2] = typo(_T('menu_aide_installation_choix_base'));
264
+    $intitule_etat["etape_"][3] = typo(_T('info_informations_personnelles'));
265
+    $intitule_etat["etape_"][4] = typo(_T('info_derniere_etape'));
266 266
 
267
-	$intitule_etat["etape_ldap"][1] = typo(_T('titre_connexion_ldap'));
268
-	$intitule_etat["etape_ldap"][2] = typo(_T('titre_connexion_ldap'));
269
-	$intitule_etat["etape_ldap"][3] = typo(_T('info_chemin_acces_1'));
270
-	$intitule_etat["etape_ldap"][4] = typo(_T('info_reglage_ldap'));
271
-	$intitule_etat["etape_ldap"][5] = typo(_T('info_ldap_ok'));
267
+    $intitule_etat["etape_ldap"][1] = typo(_T('titre_connexion_ldap'));
268
+    $intitule_etat["etape_ldap"][2] = typo(_T('titre_connexion_ldap'));
269
+    $intitule_etat["etape_ldap"][3] = typo(_T('info_chemin_acces_1'));
270
+    $intitule_etat["etape_ldap"][4] = typo(_T('info_reglage_ldap'));
271
+    $intitule_etat["etape_ldap"][5] = typo(_T('info_ldap_ok'));
272 272
 
273 273
 //	$aff_etapes = "<span id='etapes'>";
274 274
 
275
-	$aff_etapes = "<ul id='infos_etapes' class='infos_$phase$en_cours'>";
276
-
277
-	foreach($liste as $etape=>$fichier){
278
-		if ($debut < $last) {
279
-			if ($debut == $en_cours && $erreur) $class = "on erreur";
280
-			else if ($debut == $en_cours) $class = "on";
281
-			else if ($debut > $en_cours) $class = "prochains";
282
-			else $class = "valides";
283
-
284
-			$aff_etapes .= "<li class='$class'><div class='fond'>";
285
-			$aff_etapes .= ($debut == $en_cours)?"<strong>":'';
286
-			$aff_etapes .= "<em>"._T('etape')." </em><span class='numero_etape'>$debut</span><em>&nbsp;: </em>";
287
-			$aff_etapes .= $intitule_etat["$phase"][$debut];
288
-			$aff_etapes .= ($debut == $en_cours)?"</strong>":'';
289
-			$aff_etapes .= "</div></li>";
290
-		}
291
-		$debut++;
292
-	}
293
-	$aff_etapes .= "</ul>";
294
-	$aff_etapes .= "<br class='nettoyeur' />\n";
295
-	return $aff_etapes;
275
+    $aff_etapes = "<ul id='infos_etapes' class='infos_$phase$en_cours'>";
276
+
277
+    foreach($liste as $etape=>$fichier){
278
+        if ($debut < $last) {
279
+            if ($debut == $en_cours && $erreur) $class = "on erreur";
280
+            else if ($debut == $en_cours) $class = "on";
281
+            else if ($debut > $en_cours) $class = "prochains";
282
+            else $class = "valides";
283
+
284
+            $aff_etapes .= "<li class='$class'><div class='fond'>";
285
+            $aff_etapes .= ($debut == $en_cours)?"<strong>":'';
286
+            $aff_etapes .= "<em>"._T('etape')." </em><span class='numero_etape'>$debut</span><em>&nbsp;: </em>";
287
+            $aff_etapes .= $intitule_etat["$phase"][$debut];
288
+            $aff_etapes .= ($debut == $en_cours)?"</strong>":'';
289
+            $aff_etapes .= "</div></li>";
290
+        }
291
+        $debut++;
292
+    }
293
+    $aff_etapes .= "</ul>";
294
+    $aff_etapes .= "<br class='nettoyeur' />\n";
295
+    return $aff_etapes;
296 296
 }
297 297
 
298 298
 
299 299
 // http://doc.spip.org/@fieldset
300 300
 function fieldset($legend,  $champs = array(), $apres='', $avant='') {
301
-	return "<fieldset>\n" .
302
-	  $avant .
303
-	  ($legend ? "<legend>".$legend."</legend>\n" : '') .
304
-	  fieldset_champs($champs) .
305
-	  $apres .
306
-	  "</fieldset>\n";
301
+    return "<fieldset>\n" .
302
+        $avant .
303
+        ($legend ? "<legend>".$legend."</legend>\n" : '') .
304
+        fieldset_champs($champs) .
305
+        $apres .
306
+        "</fieldset>\n";
307 307
 }
308 308
 
309 309
 function fieldset_champs($champs = array())
310
-  {
311
-	$fieldset = '';
312
-	foreach ($champs as $nom => $contenu) {
313
-		$type = isset($contenu['hidden']) ? 'hidden' : (preg_match(',^pass,', $nom) ? 'password' : 'text');
314
-		$class = isset($contenu['hidden']) ? '' : "class='formo' size='40' ";
315
-		if(isset($contenu['alternatives'])) {
316
-			$fieldset .= $contenu['label'] ."\n";
317
-			foreach($contenu['alternatives'] as $valeur => $label) {
318
-				$fieldset .= "<input type='radio' name='".$nom .
319
-				"' id='$nom-$valeur' value='$valeur'"
320
-				  .(($valeur==$contenu['valeur'])?"\nchecked='checked'":'')
321
-				  ."/>\n";
322
-				$fieldset .= "<label for='$nom-$valeur'>".$label."</label>\n";
323
-			}
324
-			$fieldset .= "<br />\n";
325
-		}
326
-		else {
327
-			$fieldset .= "<label for='".$nom."'>".$contenu['label']."</label>\n";
328
-			$fieldset .= "<input ".$class."type='".$type."' id='" . $nom . "' name='".$nom."'\nvalue='".$contenu['valeur']."'"
329
-							  .(preg_match(',^(pass|login),', $nom)?" autocomplete='off'":'')
330
-			          . ((isset($contenu['required']) AND $contenu['required'])?" required='required'":"")
331
-			          .	" />\n";
332
-		}
333
-	}
334
-	return $fieldset;
310
+    {
311
+    $fieldset = '';
312
+    foreach ($champs as $nom => $contenu) {
313
+        $type = isset($contenu['hidden']) ? 'hidden' : (preg_match(',^pass,', $nom) ? 'password' : 'text');
314
+        $class = isset($contenu['hidden']) ? '' : "class='formo' size='40' ";
315
+        if(isset($contenu['alternatives'])) {
316
+            $fieldset .= $contenu['label'] ."\n";
317
+            foreach($contenu['alternatives'] as $valeur => $label) {
318
+                $fieldset .= "<input type='radio' name='".$nom .
319
+                "' id='$nom-$valeur' value='$valeur'"
320
+                    .(($valeur==$contenu['valeur'])?"\nchecked='checked'":'')
321
+                    ."/>\n";
322
+                $fieldset .= "<label for='$nom-$valeur'>".$label."</label>\n";
323
+            }
324
+            $fieldset .= "<br />\n";
325
+        }
326
+        else {
327
+            $fieldset .= "<label for='".$nom."'>".$contenu['label']."</label>\n";
328
+            $fieldset .= "<input ".$class."type='".$type."' id='" . $nom . "' name='".$nom."'\nvalue='".$contenu['valeur']."'"
329
+                                .(preg_match(',^(pass|login),', $nom)?" autocomplete='off'":'')
330
+                        . ((isset($contenu['required']) AND $contenu['required'])?" required='required'":"")
331
+                        .	" />\n";
332
+        }
333
+    }
334
+    return $fieldset;
335 335
 }
336 336
 
337 337
 function install_select_serveur()
338 338
 {
339
-	$options = array();
340
-	$dir = _DIR_RESTREINT . 'req/';
341
-	$d = @opendir($dir);
342
-	if (!$d) return array();
343
-	while ($f = readdir($d)) {
344
-		if ((preg_match('/^(.*)[.]php$/', $f, $s))
345
-		AND is_readable($f = $dir . $f)) {
346
-			require_once($f);
347
-			$s = $s[1];
348
-			$v = 'spip_versions_' . $s;
349
-			if (function_exists($v) AND $v()) {
350
-			  $titre = _T("install_select_type_$s");
351
-				// proposer sqlite3 par defaut si dispo
352
-				$selected = ($s=='sqlite3'?" selected='selected'":"");
353
-			  $options[$s] =  "<option value='$s'$selected>"
354
-			    . ($titre ? $titre : $s)
355
-			    ."</option>";
356
-			} else spip_log("$s: portage indisponible");
357
-		}
358
-	}
359
-	sort($options);
360
-	return $options;
339
+    $options = array();
340
+    $dir = _DIR_RESTREINT . 'req/';
341
+    $d = @opendir($dir);
342
+    if (!$d) return array();
343
+    while ($f = readdir($d)) {
344
+        if ((preg_match('/^(.*)[.]php$/', $f, $s))
345
+        AND is_readable($f = $dir . $f)) {
346
+            require_once($f);
347
+            $s = $s[1];
348
+            $v = 'spip_versions_' . $s;
349
+            if (function_exists($v) AND $v()) {
350
+                $titre = _T("install_select_type_$s");
351
+                // proposer sqlite3 par defaut si dispo
352
+                $selected = ($s=='sqlite3'?" selected='selected'":"");
353
+                $options[$s] =  "<option value='$s'$selected>"
354
+                . ($titre ? $titre : $s)
355
+                ."</option>";
356
+            } else spip_log("$s: portage indisponible");
357
+        }
358
+    }
359
+    sort($options);
360
+    return $options;
361 361
 }
362 362
 
363 363
 // http://doc.spip.org/@install_connexion_form
364 364
 function install_connexion_form($db, $login, $pass, $predef, $hidden, $etape, $jquery=true)
365 365
 {
366
-	$server_db = (is_string($predef[0])) ? $predef[0] : '';
367
-
368
-	return generer_form_ecrire('install', (
369
-	  "\n<input type='hidden' name='etape' value='$etape' />"
370
-	. $hidden
371
-	. (_request('echec')?
372
-			("<p><b>"._T('avis_connexion_echec_1').
373
-			"</b></p><p>"._T('avis_connexion_echec_2')."</p><p style='font-size: small;'>"._T('avis_connexion_echec_3')."</p>")
374
-			:"")
375
-
376
-	. ($jquery?http_script('',  'jquery.js'):'')
377
-	. http_script('
366
+    $server_db = (is_string($predef[0])) ? $predef[0] : '';
367
+
368
+    return generer_form_ecrire('install', (
369
+        "\n<input type='hidden' name='etape' value='$etape' />"
370
+    . $hidden
371
+    . (_request('echec')?
372
+            ("<p><b>"._T('avis_connexion_echec_1').
373
+            "</b></p><p>"._T('avis_connexion_echec_2')."</p><p style='font-size: small;'>"._T('avis_connexion_echec_3')."</p>")
374
+            :"")
375
+
376
+    . ($jquery?http_script('',  'jquery.js'):'')
377
+    . http_script('
378 378
 		$(document).ready(function() {
379 379
 			$("input[type=hidden][name=server_db]").each(function(){
380 380
 				if ($(this).attr("value").match("sqlite*")){
@@ -395,67 +395,67 @@  discard block
 block discarded – undo
395 395
 			}
396 396
 		});')
397 397
 
398
-	. ($server_db
399
-		? '<input type="hidden" name="server_db" value="'.$server_db.'" />'
400
-			. (($predef[0])
401
-			   ?('<h3>'._T('install_serveur_hebergeur').'</h3>')
402
-				:'')
403
-		: ('<fieldset><legend>'
404
-		   ._T('install_select_type_db')
405
-		. "</legend>"
406
-			.'<label for="sql_serveur_db" class="p">'
407
-			. _T('install_types_db_connus')
408
-			// Passer l'avertissement SQLIte en  commentaire, on pourra facilement le supprimer par la suite sans changer les traductions.
409
-			. "<br /><small>(". _T('install_types_db_connus_avertissement') .')</small>'
410
-			.'</label>'
411
-		. "\n<div class='p center'><select name='server_db' id='sql_serveur_db' >\n"
412
-		.   join("\n", install_select_serveur())
413
-		. "\n</select></div></fieldset>")
414
-	)
415
-	. '<div id="install_adresse_base_hebergeur">'
416
-	. '<p>'. _T('texte_connexion_mysql').'</p>'
417
-	. ($predef[1]
418
-	? '<h3>'._T('install_adresse_base_hebergeur').'</h3>'
419
-	: fieldset(_T('entree_base_donnee_1'),
420
-		array(
421
-			'adresse_db' => array(
422
-				'label' => $db[1],
423
-				'valeur' => $db[0]
424
-			),
425
-		)
426
-	)
427
-	)
428
-	. '</div>'
429
-
430
-	. '<div id="install_login_base_hebergeur">'
431
-	. ($predef[2]
432
-	? '<h3>'._T('install_login_base_hebergeur').'</h3>'
433
-	: fieldset(_T('entree_login_connexion_1'),
434
-		array(
435
-			'login_db' => array(
436
-					'label' => $login[1],
437
-					'valeur' => $login[0]
438
-			),
439
-		)
440
-	)
441
-	)
442
-	. '</div>'
443
-
444
-	. '<div id="install_pass_base_hebergeur">'
445
-	. ($predef[3]
446
-	? '<h3>'._T('install_pass_base_hebergeur').'</h3>'
447
-	: fieldset(_T('entree_mot_passe_1'),
448
-		array(
449
-			'pass_db' => array(
450
-				'label' => $pass[1],
451
-				'valeur' => $pass[0]
452
-			),
453
-		)
454
-	)
455
-	)
456
-	. '</div>'
457
-
458
-	. bouton_suivant()));
398
+    . ($server_db
399
+        ? '<input type="hidden" name="server_db" value="'.$server_db.'" />'
400
+            . (($predef[0])
401
+               ?('<h3>'._T('install_serveur_hebergeur').'</h3>')
402
+                :'')
403
+        : ('<fieldset><legend>'
404
+            ._T('install_select_type_db')
405
+        . "</legend>"
406
+            .'<label for="sql_serveur_db" class="p">'
407
+            . _T('install_types_db_connus')
408
+            // Passer l'avertissement SQLIte en  commentaire, on pourra facilement le supprimer par la suite sans changer les traductions.
409
+            . "<br /><small>(". _T('install_types_db_connus_avertissement') .')</small>'
410
+            .'</label>'
411
+        . "\n<div class='p center'><select name='server_db' id='sql_serveur_db' >\n"
412
+        .   join("\n", install_select_serveur())
413
+        . "\n</select></div></fieldset>")
414
+    )
415
+    . '<div id="install_adresse_base_hebergeur">'
416
+    . '<p>'. _T('texte_connexion_mysql').'</p>'
417
+    . ($predef[1]
418
+    ? '<h3>'._T('install_adresse_base_hebergeur').'</h3>'
419
+    : fieldset(_T('entree_base_donnee_1'),
420
+        array(
421
+            'adresse_db' => array(
422
+                'label' => $db[1],
423
+                'valeur' => $db[0]
424
+            ),
425
+        )
426
+    )
427
+    )
428
+    . '</div>'
429
+
430
+    . '<div id="install_login_base_hebergeur">'
431
+    . ($predef[2]
432
+    ? '<h3>'._T('install_login_base_hebergeur').'</h3>'
433
+    : fieldset(_T('entree_login_connexion_1'),
434
+        array(
435
+            'login_db' => array(
436
+                    'label' => $login[1],
437
+                    'valeur' => $login[0]
438
+            ),
439
+        )
440
+    )
441
+    )
442
+    . '</div>'
443
+
444
+    . '<div id="install_pass_base_hebergeur">'
445
+    . ($predef[3]
446
+    ? '<h3>'._T('install_pass_base_hebergeur').'</h3>'
447
+    : fieldset(_T('entree_mot_passe_1'),
448
+        array(
449
+            'pass_db' => array(
450
+                'label' => $pass[1],
451
+                'valeur' => $pass[0]
452
+            ),
453
+        )
454
+    )
455
+    )
456
+    . '</div>'
457
+
458
+    . bouton_suivant()));
459 459
 
460 460
 }
461 461
 
@@ -465,23 +465,23 @@  discard block
 block discarded – undo
465 465
 // http://doc.spip.org/@predef_ou_cache
466 466
 function predef_ou_cache($adresse_db, $login_db, $pass_db, $server_db)
467 467
 {
468
-	return ((defined('_INSTALL_HOST_DB'))
469
-		? ''
470
-		: "\n<input type='hidden' name='adresse_db'  value=\"".spip_htmlspecialchars($adresse_db)."\" />"
471
-	)
472
-	. ((defined('_INSTALL_USER_DB'))
473
-		? ''
474
-		: "\n<input type='hidden' name='login_db' value=\"".spip_htmlspecialchars($login_db)."\" />"
475
-	)
476
-	. ((defined('_INSTALL_PASS_DB'))
477
-		? ''
478
-		: "\n<input type='hidden' name='pass_db' value=\"".spip_htmlspecialchars($pass_db)."\" />"
479
-	)
480
-
481
-	. ((defined('_INSTALL_SERVER_DB'))
482
-		? ''
483
-		: "\n<input type='hidden' name='server_db' value=\"".spip_htmlspecialchars($server_db)."\" />"
484
-	   );
468
+    return ((defined('_INSTALL_HOST_DB'))
469
+        ? ''
470
+        : "\n<input type='hidden' name='adresse_db'  value=\"".spip_htmlspecialchars($adresse_db)."\" />"
471
+    )
472
+    . ((defined('_INSTALL_USER_DB'))
473
+        ? ''
474
+        : "\n<input type='hidden' name='login_db' value=\"".spip_htmlspecialchars($login_db)."\" />"
475
+    )
476
+    . ((defined('_INSTALL_PASS_DB'))
477
+        ? ''
478
+        : "\n<input type='hidden' name='pass_db' value=\"".spip_htmlspecialchars($pass_db)."\" />"
479
+    )
480
+
481
+    . ((defined('_INSTALL_SERVER_DB'))
482
+        ? ''
483
+        : "\n<input type='hidden' name='server_db' value=\"".spip_htmlspecialchars($server_db)."\" />"
484
+        );
485 485
 }
486 486
 
487 487
 // presentation des bases existantes
@@ -489,45 +489,45 @@  discard block
 block discarded – undo
489 489
 // http://doc.spip.org/@install_etape_liste_bases
490 490
 function install_etape_liste_bases($server_db, $login_db, $disabled=array())
491 491
 {
492
-	$bases = $checked = array();
493
-	$noms = sql_listdbs($server_db);
494
-	if (!$noms) return '';
495
-
496
-	foreach ($noms as $nom){
497
-		$id = spip_htmlspecialchars($nom);
498
-		$dis = in_array($nom, $disabled) ? " disabled='disabled'" : '';
499
-		$base = " name=\"choix_db\" value=\""
500
-		  . $nom
501
-		  . '"'
502
-		  . $dis
503
-		  . " type='radio' id='$id'";
504
-		$label = "<label for='$id'>"
505
-		. ($dis ? "<i>$nom</i>" : $nom)
506
-		. "</label>";
507
-
508
-		if (!$checked AND !$dis AND
509
-		    (($nom == $login_db) OR
510
-			($GLOBALS['table_prefix'] == $nom))) {
511
-			$checked = "<input$base checked='checked' />\n$label";
512
-		} else {
513
-			$bases[]= "<input$base />\n$label";
514
-		}
515
-	}
516
-
517
-	if (!$bases && !$checked) return false;
518
-
519
-	if ($checked) {array_unshift($bases, $checked); $checked = true;}
520
-
521
-	return array($checked, $bases);
492
+    $bases = $checked = array();
493
+    $noms = sql_listdbs($server_db);
494
+    if (!$noms) return '';
495
+
496
+    foreach ($noms as $nom){
497
+        $id = spip_htmlspecialchars($nom);
498
+        $dis = in_array($nom, $disabled) ? " disabled='disabled'" : '';
499
+        $base = " name=\"choix_db\" value=\""
500
+            . $nom
501
+            . '"'
502
+            . $dis
503
+            . " type='radio' id='$id'";
504
+        $label = "<label for='$id'>"
505
+        . ($dis ? "<i>$nom</i>" : $nom)
506
+        . "</label>";
507
+
508
+        if (!$checked AND !$dis AND
509
+            (($nom == $login_db) OR
510
+            ($GLOBALS['table_prefix'] == $nom))) {
511
+            $checked = "<input$base checked='checked' />\n$label";
512
+        } else {
513
+            $bases[]= "<input$base />\n$label";
514
+        }
515
+    }
516
+
517
+    if (!$bases && !$checked) return false;
518
+
519
+    if ($checked) {array_unshift($bases, $checked); $checked = true;}
520
+
521
+    return array($checked, $bases);
522 522
 }
523 523
 
524 524
 function install_propager($hidden)
525 525
 {
526
-	$res = '';
527
-	foreach($hidden as $k) {
528
-		$v = spip_htmlentities(_request($k));
529
-		$res .= "<input type='hidden' name='$k' value='$v' />";
530
-	}
531
-	return $res;
526
+    $res = '';
527
+    foreach($hidden as $k) {
528
+        $v = spip_htmlentities(_request($k));
529
+        $res .= "<input type='hidden' name='$k' value='$v' />";
530
+    }
531
+    return $res;
532 532
 }
533 533
 ?>
Please login to merge, or discard this patch.
ecrire/inc/flock.php 1 patch
Indentation   +313 added lines, -313 removed lines patch added patch discarded remove patch
@@ -22,56 +22,56 @@  discard block
 block discarded – undo
22 22
 #define('_SPIP_LOCK_MODE',2); // utiliser le nfslock de spip
23 23
 
24 24
 if (_SPIP_LOCK_MODE==2)
25
-	include_spip('inc/nfslock');
25
+    include_spip('inc/nfslock');
26 26
 
27 27
 $GLOBALS['liste_verrous'] = array();
28 28
 // http://doc.spip.org/@spip_fopen_lock
29 29
 function spip_fopen_lock($fichier,$mode,$verrou){
30
-	if (_SPIP_LOCK_MODE==1){
31
-		if ($fl = @fopen($fichier,$mode))
32
-			// verrou
33
-			@flock($fl, $verrou);
34
-		return $fl;
35
-	}
36
-	elseif(_SPIP_LOCK_MODE==2) {
37
-		if (($verrou = spip_nfslock($fichier)) && ($fl = @fopen($fichier,$mode))){
38
-			$GLOBALS['liste_verrous'][$fl] = array($fichier,$verrou);
39
-			return $fl;
40
-		}
41
-		else return false;
42
-	}
43
-	return @fopen($fichier,$mode);
30
+    if (_SPIP_LOCK_MODE==1){
31
+        if ($fl = @fopen($fichier,$mode))
32
+            // verrou
33
+            @flock($fl, $verrou);
34
+        return $fl;
35
+    }
36
+    elseif(_SPIP_LOCK_MODE==2) {
37
+        if (($verrou = spip_nfslock($fichier)) && ($fl = @fopen($fichier,$mode))){
38
+            $GLOBALS['liste_verrous'][$fl] = array($fichier,$verrou);
39
+            return $fl;
40
+        }
41
+        else return false;
42
+    }
43
+    return @fopen($fichier,$mode);
44 44
 }
45 45
 // http://doc.spip.org/@spip_fclose_unlock
46 46
 function spip_fclose_unlock($handle){
47
-	if (_SPIP_LOCK_MODE==1){
48
-		@flock($handle, LOCK_UN);
49
-	}
50
-	elseif(_SPIP_LOCK_MODE==2) {
51
-		spip_nfsunlock(reset($GLOBALS['liste_verrous'][$handle]),end($GLOBALS['liste_verrous'][$handle]));
52
-		unset($GLOBALS['liste_verrous'][$handle]);
53
-	}
54
-	return @fclose($handle);
47
+    if (_SPIP_LOCK_MODE==1){
48
+        @flock($handle, LOCK_UN);
49
+    }
50
+    elseif(_SPIP_LOCK_MODE==2) {
51
+        spip_nfsunlock(reset($GLOBALS['liste_verrous'][$handle]),end($GLOBALS['liste_verrous'][$handle]));
52
+        unset($GLOBALS['liste_verrous'][$handle]);
53
+    }
54
+    return @fclose($handle);
55 55
 }
56 56
 
57 57
 
58 58
 // http://doc.spip.org/@spip_file_get_contents
59 59
 function spip_file_get_contents ($fichier) {
60
-	if (substr($fichier, -3) != '.gz') {
61
-		if (function_exists('file_get_contents')
62
-		AND ( 
63
-			// quand on est sous window on ne sait pas si file_get_contents marche
64
-			// on essaye : si ca retourne du contenu alors c'est bon
65
-			// sinon on fait un file() pour avoir le coeur net
66
-		  ($contenu = @file_get_contents ($fichier))
67
-		  OR _OS_SERVEUR != 'windows')
68
-		)
69
-			return $contenu;
70
-		else
71
-			$contenu = @file($fichier);
72
-	} else
73
-			$contenu = @gzfile($fichier);
74
-	return is_array($contenu)?join('', $contenu):(string)$contenu;
60
+    if (substr($fichier, -3) != '.gz') {
61
+        if (function_exists('file_get_contents')
62
+        AND ( 
63
+            // quand on est sous window on ne sait pas si file_get_contents marche
64
+            // on essaye : si ca retourne du contenu alors c'est bon
65
+            // sinon on fait un file() pour avoir le coeur net
66
+            ($contenu = @file_get_contents ($fichier))
67
+          OR _OS_SERVEUR != 'windows')
68
+        )
69
+            return $contenu;
70
+        else
71
+            $contenu = @file($fichier);
72
+    } else
73
+            $contenu = @gzfile($fichier);
74
+    return is_array($contenu)?join('', $contenu):(string)$contenu;
75 75
 }
76 76
 
77 77
 // options = array(
@@ -79,43 +79,43 @@  discard block
 block discarded – undo
79 79
 // dezippe automatiquement les fichiers .gz
80 80
 // http://doc.spip.org/@lire_fichier
81 81
 function lire_fichier ($fichier, &$contenu, $options=false) {
82
-	$contenu = '';
83
-	// inutile car si le fichier n'existe pas, le lock va renvoyer false juste apres
84
-	// economisons donc les acces disque, sauf chez free qui rale pour un rien
85
-	if (_TEST_FILE_EXISTS AND !@file_exists($fichier))
86
-		return false;
87
-
88
-	#spip_timer('lire_fichier');
89
-
90
-	// pas de @ sur spip_fopen_lock qui est silencieux de toute facon
91
-	if ($fl = spip_fopen_lock($fichier, 'r', LOCK_SH)) {
92
-		// lire le fichier avant tout
93
-		$contenu = spip_file_get_contents($fichier);
94
-
95
-		// le fichier a-t-il ete supprime par le locker ?
96
-		// on ne verifie que si la tentative de lecture a echoue
97
-		// pour discriminer un contenu vide d'un fichier absent
98
-		// et eviter un acces disque
99
-		if (!$contenu AND !@file_exists($fichier)) {
100
-			spip_fclose_unlock($fl);
101
-			return false;
102
-		}
103
-
104
-		// liberer le verrou
105
-		spip_fclose_unlock($fl);
106
-
107
-		// Verifications
108
-		$ok = true;
109
-		if ($options['phpcheck'] == 'oui')
110
-			$ok &= (preg_match(",[?]>\n?$,", $contenu));
111
-
112
-		#spip_log("$fread $fichier ".spip_timer('lire_fichier'));
113
-		if (!$ok)
114
-			spip_log("echec lecture $fichier");
115
-
116
-		return $ok;
117
-	}
118
-	return false;
82
+    $contenu = '';
83
+    // inutile car si le fichier n'existe pas, le lock va renvoyer false juste apres
84
+    // economisons donc les acces disque, sauf chez free qui rale pour un rien
85
+    if (_TEST_FILE_EXISTS AND !@file_exists($fichier))
86
+        return false;
87
+
88
+    #spip_timer('lire_fichier');
89
+
90
+    // pas de @ sur spip_fopen_lock qui est silencieux de toute facon
91
+    if ($fl = spip_fopen_lock($fichier, 'r', LOCK_SH)) {
92
+        // lire le fichier avant tout
93
+        $contenu = spip_file_get_contents($fichier);
94
+
95
+        // le fichier a-t-il ete supprime par le locker ?
96
+        // on ne verifie que si la tentative de lecture a echoue
97
+        // pour discriminer un contenu vide d'un fichier absent
98
+        // et eviter un acces disque
99
+        if (!$contenu AND !@file_exists($fichier)) {
100
+            spip_fclose_unlock($fl);
101
+            return false;
102
+        }
103
+
104
+        // liberer le verrou
105
+        spip_fclose_unlock($fl);
106
+
107
+        // Verifications
108
+        $ok = true;
109
+        if ($options['phpcheck'] == 'oui')
110
+            $ok &= (preg_match(",[?]>\n?$,", $contenu));
111
+
112
+        #spip_log("$fread $fichier ".spip_timer('lire_fichier'));
113
+        if (!$ok)
114
+            spip_log("echec lecture $fichier");
115
+
116
+        return $ok;
117
+    }
118
+    return false;
119 119
 }
120 120
 
121 121
 //
@@ -125,77 +125,77 @@  discard block
 block discarded – undo
125 125
 // http://doc.spip.org/@ecrire_fichier
126 126
 function ecrire_fichier ($fichier, $contenu, $ignorer_echec = false, $truncate=true) {
127 127
 
128
-	#spip_timer('ecrire_fichier');
129
-
130
-	// verrouiller le fichier destination
131
-	if ($fp = spip_fopen_lock($fichier, 'a',LOCK_EX)) {
132
-	// ecrire les donnees, compressees le cas echeant
133
-	// (on ouvre un nouveau pointeur sur le fichier, ce qui a l'avantage
134
-	// de le recreer si le locker qui nous precede l'avait supprime...)
135
-		if (substr($fichier, -3) == '.gz')
136
-			$contenu = gzencode($contenu);
137
-		// si c'est une ecriture avec troncation , on fait plutot une ecriture complete a cote suivie unlink+rename
138
-		// pour etre sur d'avoir une operation atomique
139
-		// y compris en NFS : http://www.ietf.org/rfc/rfc1094.txt
140
-		// sauf sous wintruc ou ca ne marche pas
141
-		$ok = false;
142
-		if ($truncate AND _OS_SERVEUR != 'windows'){
143
-			if (!function_exists('creer_uniqid'))
144
-				include_spip('inc/acces');
145
-			$id = creer_uniqid();
146
-			// on ouvre un pointeur sur un fichier temporaire en ecriture +raz
147
-			if ($fp2 = spip_fopen_lock("$fichier.$id", 'w',LOCK_EX)) {
148
-				$s = @fputs($fp2, $contenu, $a = strlen($contenu));
149
-				$ok = ($s == $a);
150
-				spip_fclose_unlock($fp2);
151
-				spip_fclose_unlock($fp);
152
-				// unlink direct et pas spip_unlink car on avait deja le verrou
153
-				// a priori pas besoin car rename ecrase la cible
154
-				// @unlink($fichier);
155
-				// le rename aussitot, atomique quand on est pas sous windows
156
-				// au pire on arrive en second en cas de concourance, et le rename echoue
157
-				// --> on a la version de l'autre process qui doit etre identique
158
-				@rename("$fichier.$id",$fichier);
159
-				// precaution en cas d'echec du rename
160
-				if (!_TEST_FILE_EXISTS OR @file_exists("$fichier.$id"))
161
-					@unlink("$fichier.$id");
162
-				if ($ok)
163
-					$ok = file_exists($fichier);
164
-			}
165
-			else
166
-				// echec mais penser a fermer ..
167
-				spip_fclose_unlock($fp);
168
-		}
169
-		// sinon ou si methode precedente a echoueee
170
-		// on se rabat sur la methode ancienne
171
-		if (!$ok){
172
-			// ici on est en ajout ou sous windows, cas desespere
173
-			if ($truncate)
174
-				@ftruncate($fp,0);
175
-			$s = @fputs($fp, $contenu, $a = strlen($contenu));
176
-
177
-			$ok = ($s == $a);
178
-			spip_fclose_unlock($fp);
179
-		}
180
-
181
-		// liberer le verrou et fermer le fichier
182
-		@chmod($fichier, _SPIP_CHMOD & 0666);
183
-		if ($ok) {
184
-			if (strpos($fichier,".php")!==false){
185
-				spip_clear_opcode_cache(realpath($fichier));
186
-			}
187
-			return $ok;
188
-		}
189
-	}
190
-
191
-	if (!$ignorer_echec){
192
-		include_spip('inc/autoriser');
193
-		if (autoriser('chargerftp'))
194
-			raler_fichier($fichier);
195
-		spip_unlink($fichier);
196
-	}
197
-	spip_log("Ecriture fichier $fichier impossible",_LOG_INFO_IMPORTANTE);
198
-	return false;
128
+    #spip_timer('ecrire_fichier');
129
+
130
+    // verrouiller le fichier destination
131
+    if ($fp = spip_fopen_lock($fichier, 'a',LOCK_EX)) {
132
+    // ecrire les donnees, compressees le cas echeant
133
+    // (on ouvre un nouveau pointeur sur le fichier, ce qui a l'avantage
134
+    // de le recreer si le locker qui nous precede l'avait supprime...)
135
+        if (substr($fichier, -3) == '.gz')
136
+            $contenu = gzencode($contenu);
137
+        // si c'est une ecriture avec troncation , on fait plutot une ecriture complete a cote suivie unlink+rename
138
+        // pour etre sur d'avoir une operation atomique
139
+        // y compris en NFS : http://www.ietf.org/rfc/rfc1094.txt
140
+        // sauf sous wintruc ou ca ne marche pas
141
+        $ok = false;
142
+        if ($truncate AND _OS_SERVEUR != 'windows'){
143
+            if (!function_exists('creer_uniqid'))
144
+                include_spip('inc/acces');
145
+            $id = creer_uniqid();
146
+            // on ouvre un pointeur sur un fichier temporaire en ecriture +raz
147
+            if ($fp2 = spip_fopen_lock("$fichier.$id", 'w',LOCK_EX)) {
148
+                $s = @fputs($fp2, $contenu, $a = strlen($contenu));
149
+                $ok = ($s == $a);
150
+                spip_fclose_unlock($fp2);
151
+                spip_fclose_unlock($fp);
152
+                // unlink direct et pas spip_unlink car on avait deja le verrou
153
+                // a priori pas besoin car rename ecrase la cible
154
+                // @unlink($fichier);
155
+                // le rename aussitot, atomique quand on est pas sous windows
156
+                // au pire on arrive en second en cas de concourance, et le rename echoue
157
+                // --> on a la version de l'autre process qui doit etre identique
158
+                @rename("$fichier.$id",$fichier);
159
+                // precaution en cas d'echec du rename
160
+                if (!_TEST_FILE_EXISTS OR @file_exists("$fichier.$id"))
161
+                    @unlink("$fichier.$id");
162
+                if ($ok)
163
+                    $ok = file_exists($fichier);
164
+            }
165
+            else
166
+                // echec mais penser a fermer ..
167
+                spip_fclose_unlock($fp);
168
+        }
169
+        // sinon ou si methode precedente a echoueee
170
+        // on se rabat sur la methode ancienne
171
+        if (!$ok){
172
+            // ici on est en ajout ou sous windows, cas desespere
173
+            if ($truncate)
174
+                @ftruncate($fp,0);
175
+            $s = @fputs($fp, $contenu, $a = strlen($contenu));
176
+
177
+            $ok = ($s == $a);
178
+            spip_fclose_unlock($fp);
179
+        }
180
+
181
+        // liberer le verrou et fermer le fichier
182
+        @chmod($fichier, _SPIP_CHMOD & 0666);
183
+        if ($ok) {
184
+            if (strpos($fichier,".php")!==false){
185
+                spip_clear_opcode_cache(realpath($fichier));
186
+            }
187
+            return $ok;
188
+        }
189
+    }
190
+
191
+    if (!$ignorer_echec){
192
+        include_spip('inc/autoriser');
193
+        if (autoriser('chargerftp'))
194
+            raler_fichier($fichier);
195
+        spip_unlink($fichier);
196
+    }
197
+    spip_log("Ecriture fichier $fichier impossible",_LOG_INFO_IMPORTANTE);
198
+    return false;
199 199
 }
200 200
 
201 201
 /**
@@ -207,10 +207,10 @@  discard block
 block discarded – undo
207 207
  * @param <type> $truncate 
208 208
  */
209 209
 function ecrire_fichier_securise ($fichier, $contenu, $ecrire_quand_meme = false, $truncate=true) {
210
-	if (substr($fichier,-4) !== '.php')
211
-		spip_log('Erreur de programmation: '.$fichier.' doit finir par .php');
212
-	$contenu = "<"."?php die ('Acces interdit'); ?".">\n" . $contenu;
213
-	return ecrire_fichier($fichier, $contenu, $ecrire_quand_meme, $truncate);
210
+    if (substr($fichier,-4) !== '.php')
211
+        spip_log('Erreur de programmation: '.$fichier.' doit finir par .php');
212
+    $contenu = "<"."?php die ('Acces interdit'); ?".">\n" . $contenu;
213
+    return ecrire_fichier($fichier, $contenu, $ecrire_quand_meme, $truncate);
214 214
 }
215 215
 
216 216
 /**
@@ -220,29 +220,29 @@  discard block
 block discarded – undo
220 220
  * @param <type> $options 
221 221
  */
222 222
 function lire_fichier_securise ($fichier, &$contenu, $options=false) {
223
-	if ($res = lire_fichier($fichier,$contenu,$options)){
224
-		$contenu = substr($contenu,strlen("<"."?php die ('Acces interdit'); ?".">\n"));
225
-	}
226
-	return $res;
223
+    if ($res = lire_fichier($fichier,$contenu,$options)){
224
+        $contenu = substr($contenu,strlen("<"."?php die ('Acces interdit'); ?".">\n"));
225
+    }
226
+    return $res;
227 227
 }
228 228
 
229 229
 // http://doc.spip.org/@raler_fichier
230 230
 function raler_fichier($fichier)
231 231
 {
232
-	include_spip('inc/minipres');
233
-	$dir = dirname($fichier);
234
-	http_status(401);
235
-	echo minipres(_T('texte_inc_meta_2'), "<h4 style='color: red'>"
236
-		. _T('texte_inc_meta_1', array('fichier' => $fichier))
237
-		. " <a href='"
238
-		. generer_url_ecrire('install', "etape=chmod&test_dir=$dir")
239
-		. "'>"
240
-		. _T('texte_inc_meta_2')
241
-		. "</a> "
242
-		. _T('texte_inc_meta_3',
243
-		     array('repertoire' => joli_repertoire($dir)))
244
-		. "</h4>\n");
245
-	exit;
232
+    include_spip('inc/minipres');
233
+    $dir = dirname($fichier);
234
+    http_status(401);
235
+    echo minipres(_T('texte_inc_meta_2'), "<h4 style='color: red'>"
236
+        . _T('texte_inc_meta_1', array('fichier' => $fichier))
237
+        . " <a href='"
238
+        . generer_url_ecrire('install', "etape=chmod&test_dir=$dir")
239
+        . "'>"
240
+        . _T('texte_inc_meta_2')
241
+        . "</a> "
242
+        . _T('texte_inc_meta_3',
243
+                array('repertoire' => joli_repertoire($dir)))
244
+        . "</h4>\n");
245
+    exit;
246 246
 }
247 247
 
248 248
 //
@@ -252,9 +252,9 @@  discard block
 block discarded – undo
252 252
 // http://doc.spip.org/@jeune_fichier
253 253
 function jeune_fichier($fichier, $n)
254 254
 {
255
-	if (!file_exists($fichier)) return false;
256
-	if (!$c = @filemtime($fichier)) return false;
257
-	return (time()-$n <= $c);
255
+    if (!file_exists($fichier)) return false;
256
+    if (!$c = @filemtime($fichier)) return false;
257
+    return (time()-$n <= $c);
258 258
 }
259 259
 
260 260
 //
@@ -262,31 +262,31 @@  discard block
 block discarded – undo
262 262
 //
263 263
 // http://doc.spip.org/@supprimer_fichier
264 264
 function supprimer_fichier($fichier, $lock=true) {
265
-	if (!@file_exists($fichier))
266
-		return true;
265
+    if (!@file_exists($fichier))
266
+        return true;
267 267
 
268
-	if ($lock) {
269
-		// verrouiller le fichier destination
270
-		if (!$fp = spip_fopen_lock($fichier, 'a', LOCK_EX))
271
-			return false;
268
+    if ($lock) {
269
+        // verrouiller le fichier destination
270
+        if (!$fp = spip_fopen_lock($fichier, 'a', LOCK_EX))
271
+            return false;
272 272
 	
273
-		// liberer le verrou
274
-		spip_fclose_unlock($fp);
275
-	}
273
+        // liberer le verrou
274
+        spip_fclose_unlock($fp);
275
+    }
276 276
 	
277
-	// supprimer
278
-	return @unlink($fichier);
277
+    // supprimer
278
+    return @unlink($fichier);
279 279
 }
280 280
 
281 281
 // Supprimer brutalement, si le fichier existe
282 282
 // http://doc.spip.org/@spip_unlink
283 283
 function spip_unlink($f) {
284
-	if (!is_dir($f))
285
-		supprimer_fichier($f,false);
286
-	else {
287
-		@unlink("$f/.ok");
288
-		@rmdir($f);
289
-	}
284
+    if (!is_dir($f))
285
+        supprimer_fichier($f,false);
286
+    else {
287
+        @unlink("$f/.ok");
288
+        @rmdir($f);
289
+    }
290 290
 }
291 291
 
292 292
 /**
@@ -295,13 +295,13 @@  discard block
 block discarded – undo
295 295
  * @param null $filename
296 296
  */
297 297
 function spip_clearstatcache($clear_realpath_cache = false, $filename=null){
298
-	if (!defined('PHP_VERSION_ID') || PHP_VERSION_ID < 50300) {
299
-   // Below PHP 5.3, clearstatcache does not accept any function parameters.
300
-   return clearstatcache();
301
- }
302
- else {
303
-	 return clearstatcache($clear_realpath_cache, $filename);
304
- }
298
+    if (!defined('PHP_VERSION_ID') || PHP_VERSION_ID < 50300) {
299
+    // Below PHP 5.3, clearstatcache does not accept any function parameters.
300
+    return clearstatcache();
301
+    }
302
+    else {
303
+        return clearstatcache($clear_realpath_cache, $filename);
304
+    }
305 305
 
306 306
 }
307 307
 
@@ -317,19 +317,19 @@  discard block
 block discarded – undo
317 317
  *   The absolute path of the PHP file to invalidate.
318 318
  */
319 319
 function spip_clear_opcode_cache($filepath) {
320
-	spip_clearstatcache(TRUE, $filepath);
320
+    spip_clearstatcache(TRUE, $filepath);
321 321
 
322
-  // Zend OPcache
323
-  if (function_exists('opcache_invalidate')) {
322
+    // Zend OPcache
323
+    if (function_exists('opcache_invalidate')) {
324 324
     opcache_invalidate($filepath, TRUE);
325
-  }
326
-  // APC.
327
-  if (function_exists('apc_delete_file')) {
325
+    }
326
+    // APC.
327
+    if (function_exists('apc_delete_file')) {
328 328
     // apc_delete_file() throws a PHP warning in case the specified file was
329 329
     // not compiled yet.
330 330
     // @see http://php.net/apc-delete-file
331 331
     @apc_delete_file($filepath);
332
-  }
332
+    }
333 333
 }
334 334
 
335 335
 /**
@@ -344,12 +344,12 @@  discard block
 block discarded – undo
344 344
  *
345 345
  */
346 346
 function spip_attend_invalidation_opcode_cache(){
347
-	if (function_exists('opcache_get_configuration')
348
-	  AND @ini_get('opcache.enable')
349
-	  AND @ini_get('opcache.validate_timestamps')
350
-	  AND $duree = @ini_get('opcache.revalidate_freq') ) {
351
-		sleep($duree+1);
352
-	}
347
+    if (function_exists('opcache_get_configuration')
348
+      AND @ini_get('opcache.enable')
349
+      AND @ini_get('opcache.validate_timestamps')
350
+      AND $duree = @ini_get('opcache.revalidate_freq') ) {
351
+        sleep($duree+1);
352
+    }
353 353
 }
354 354
 
355 355
 /**
@@ -361,18 +361,18 @@  discard block
 block discarded – undo
361 361
  * @return bool Suppression reussie.
362 362
  */
363 363
 function supprimer_repertoire($dir) {
364
-	if (!file_exists($dir)) return true;
365
-	if (!is_dir($dir) || is_link($dir)) return @unlink($dir);
364
+    if (!file_exists($dir)) return true;
365
+    if (!is_dir($dir) || is_link($dir)) return @unlink($dir);
366 366
 	
367
-	foreach (scandir($dir) as $item) {
368
-		if ($item == '.' || $item == '..') continue;
369
-		if (!supprimer_repertoire($dir . "/" . $item)) {
370
-			@chmod($dir . "/" . $item, 0777);
371
-			if (!supprimer_repertoire($dir . "/" . $item)) return false;
372
-		};
373
-	}
367
+    foreach (scandir($dir) as $item) {
368
+        if ($item == '.' || $item == '..') continue;
369
+        if (!supprimer_repertoire($dir . "/" . $item)) {
370
+            @chmod($dir . "/" . $item, 0777);
371
+            if (!supprimer_repertoire($dir . "/" . $item)) return false;
372
+        };
373
+    }
374 374
 	
375
-	return @rmdir($dir);
375
+    return @rmdir($dir);
376 376
 }
377 377
 
378 378
 	
@@ -384,61 +384,61 @@  discard block
 block discarded – undo
384 384
 //
385 385
 // http://doc.spip.org/@sous_repertoire
386 386
 function sous_repertoire($base, $subdir='', $nobase = false, $tantpis=false) {
387
-	static $dirs = array();
388
-
389
-	$base = str_replace("//", "/", $base);
390
-
391
-	# suppr le dernier caractere si c'est un / ou un _
392
-	$base = rtrim($base, '/_');
393
-
394
-	if (!strlen($subdir)) {
395
-		$n = strrpos($base, "/");
396
-		if ($n === false) return $nobase ? '' : ($base .'/');
397
-		$subdir = substr($base, $n+1);
398
-		$base = substr($base, 0, $n+1);
399
-	} else {
400
-		$base .= '/';
401
-		$subdir = str_replace("/", "", $subdir);
402
-	}
403
-
404
-	$baseaff = $nobase ? '' : $base;
405
-	if (isset($dirs[$base.$subdir]))
406
-		return $baseaff.$dirs[$base.$subdir];
407
-
408
-
409
-	if (_CREER_DIR_PLAT AND @file_exists("$base${subdir}.plat"))
410
-		return $baseaff.($dirs[$base.$subdir] = "${subdir}_");
411
-
412
-	$path = $base.$subdir; # $path = 'IMG/distant/pdf' ou 'IMG/distant_pdf'
413
-
414
-	if (file_exists("$path/.ok"))
415
-		return $baseaff.($dirs[$base.$subdir] = "$subdir/");
416
-
417
-	@mkdir($path, _SPIP_CHMOD);
418
-	@chmod($path, _SPIP_CHMOD);
419
-
420
-	if (is_dir($path) && is_writable($path)) {
421
-		@touch ("$path/.ok");
422
-		spip_log("creation $base$subdir/");
423
-		return $baseaff.($dirs[$base.$subdir] = "$subdir/");
424
-	}
425
-
426
-	// en cas d'echec c'est peut etre tout simplement que le disque est plein :
427
-	// l'inode du fichier dir_test existe, mais impossible d'y mettre du contenu
428
-	// => sauf besoin express (define dans mes_options), ne pas creer le .plat
429
-	if (_CREER_DIR_PLAT
430
-	AND $f = @fopen("$base${subdir}.plat", "w"))
431
-		fclose($f);
432
-	else {
433
-		spip_log("echec creation $base${subdir}");
434
-		if ($tantpis) return '';
435
-		if (!_DIR_RESTREINT)
436
-			$base = preg_replace(',^' . _DIR_RACINE .',', '',$base);
437
-		$base .= $subdir;
438
-		raler_fichier($base . '/.plat');
439
-	}
440
-	spip_log("faux sous-repertoire $base${subdir}");
441
-	return $baseaff.($dirs[$base.$subdir] = "${subdir}_");
387
+    static $dirs = array();
388
+
389
+    $base = str_replace("//", "/", $base);
390
+
391
+    # suppr le dernier caractere si c'est un / ou un _
392
+    $base = rtrim($base, '/_');
393
+
394
+    if (!strlen($subdir)) {
395
+        $n = strrpos($base, "/");
396
+        if ($n === false) return $nobase ? '' : ($base .'/');
397
+        $subdir = substr($base, $n+1);
398
+        $base = substr($base, 0, $n+1);
399
+    } else {
400
+        $base .= '/';
401
+        $subdir = str_replace("/", "", $subdir);
402
+    }
403
+
404
+    $baseaff = $nobase ? '' : $base;
405
+    if (isset($dirs[$base.$subdir]))
406
+        return $baseaff.$dirs[$base.$subdir];
407
+
408
+
409
+    if (_CREER_DIR_PLAT AND @file_exists("$base${subdir}.plat"))
410
+        return $baseaff.($dirs[$base.$subdir] = "${subdir}_");
411
+
412
+    $path = $base.$subdir; # $path = 'IMG/distant/pdf' ou 'IMG/distant_pdf'
413
+
414
+    if (file_exists("$path/.ok"))
415
+        return $baseaff.($dirs[$base.$subdir] = "$subdir/");
416
+
417
+    @mkdir($path, _SPIP_CHMOD);
418
+    @chmod($path, _SPIP_CHMOD);
419
+
420
+    if (is_dir($path) && is_writable($path)) {
421
+        @touch ("$path/.ok");
422
+        spip_log("creation $base$subdir/");
423
+        return $baseaff.($dirs[$base.$subdir] = "$subdir/");
424
+    }
425
+
426
+    // en cas d'echec c'est peut etre tout simplement que le disque est plein :
427
+    // l'inode du fichier dir_test existe, mais impossible d'y mettre du contenu
428
+    // => sauf besoin express (define dans mes_options), ne pas creer le .plat
429
+    if (_CREER_DIR_PLAT
430
+    AND $f = @fopen("$base${subdir}.plat", "w"))
431
+        fclose($f);
432
+    else {
433
+        spip_log("echec creation $base${subdir}");
434
+        if ($tantpis) return '';
435
+        if (!_DIR_RESTREINT)
436
+            $base = preg_replace(',^' . _DIR_RACINE .',', '',$base);
437
+        $base .= $subdir;
438
+        raler_fichier($base . '/.plat');
439
+    }
440
+    spip_log("faux sous-repertoire $base${subdir}");
441
+    return $baseaff.($dirs[$base.$subdir] = "${subdir}_");
442 442
 }
443 443
 
444 444
 //
@@ -455,46 +455,46 @@  discard block
 block discarded – undo
455 455
 //
456 456
 // http://doc.spip.org/@preg_files
457 457
 function preg_files($dir, $pattern=-1 /* AUTO */, $maxfiles = 10000, $recurs=array()) {
458
-	$nbfiles = 0;
459
-	if ($pattern == -1)
460
-		$pattern = "^$dir";
461
-	$fichiers = array();
462
-	// revenir au repertoire racine si on a recu dossier/truc
463
-	// pour regarder dossier/truc/ ne pas oublier le / final
464
-	$dir = preg_replace(',/[^/]*$,', '', $dir);
465
-	if ($dir == '') $dir = '.';
466
-
467
-	if (@is_dir($dir) AND is_readable($dir) AND $d = @opendir($dir)) {
468
-		while (($f = readdir($d)) !== false && ($nbfiles<$maxfiles)) {
469
-			if ($f[0] != '.' # ignorer . .. .svn etc
470
-			AND $f != 'CVS'
471
-			AND $f != 'remove.txt'
472
-			AND is_readable($f = "$dir/$f")) {
473
-				if (is_file($f)) {
474
-					if (preg_match(";$pattern;iS", $f))
475
-					{
476
-						$fichiers[] = $f;
477
-						$nbfiles++;
478
-					}
479
-				} 
480
-				else if (is_dir($f) AND is_array($recurs)){
481
-					$rp = @realpath($f);
482
-					if (!is_string($rp) OR !strlen($rp)) $rp=$f; # realpath n'est peut etre pas autorise
483
-					if (!isset($recurs[$rp])) {
484
-						$recurs[$rp] = true;
485
-						$beginning = $fichiers;
486
-						$end = preg_files("$f/", $pattern,
487
-							$maxfiles-$nbfiles, $recurs);
488
-						$fichiers = array_merge((array)$beginning, (array)$end);
489
-						$nbfiles = count($fichiers);
490
-					}
491
-				}
492
-			}
493
-		}
494
-		closedir($d);
495
-	}
496
-	sort($fichiers);
497
-	return $fichiers;
458
+    $nbfiles = 0;
459
+    if ($pattern == -1)
460
+        $pattern = "^$dir";
461
+    $fichiers = array();
462
+    // revenir au repertoire racine si on a recu dossier/truc
463
+    // pour regarder dossier/truc/ ne pas oublier le / final
464
+    $dir = preg_replace(',/[^/]*$,', '', $dir);
465
+    if ($dir == '') $dir = '.';
466
+
467
+    if (@is_dir($dir) AND is_readable($dir) AND $d = @opendir($dir)) {
468
+        while (($f = readdir($d)) !== false && ($nbfiles<$maxfiles)) {
469
+            if ($f[0] != '.' # ignorer . .. .svn etc
470
+            AND $f != 'CVS'
471
+            AND $f != 'remove.txt'
472
+            AND is_readable($f = "$dir/$f")) {
473
+                if (is_file($f)) {
474
+                    if (preg_match(";$pattern;iS", $f))
475
+                    {
476
+                        $fichiers[] = $f;
477
+                        $nbfiles++;
478
+                    }
479
+                } 
480
+                else if (is_dir($f) AND is_array($recurs)){
481
+                    $rp = @realpath($f);
482
+                    if (!is_string($rp) OR !strlen($rp)) $rp=$f; # realpath n'est peut etre pas autorise
483
+                    if (!isset($recurs[$rp])) {
484
+                        $recurs[$rp] = true;
485
+                        $beginning = $fichiers;
486
+                        $end = preg_files("$f/", $pattern,
487
+                            $maxfiles-$nbfiles, $recurs);
488
+                        $fichiers = array_merge((array)$beginning, (array)$end);
489
+                        $nbfiles = count($fichiers);
490
+                    }
491
+                }
492
+            }
493
+        }
494
+        closedir($d);
495
+    }
496
+    sort($fichiers);
497
+    return $fichiers;
498 498
 }
499 499
 
500 500
 ?>
Please login to merge, or discard this patch.
ecrire/inc/queue.php 1 patch
Indentation   +426 added lines, -426 removed lines patch added patch discarded remove patch
@@ -48,85 +48,85 @@  discard block
 block discarded – undo
48 48
  *	id of job
49 49
  */
50 50
 function queue_add_job($function, $description, $arguments = array(), $file = '', $no_duplicate = false, $time=0, $priority=0){
51
-	include_spip('base/abstract_sql');
52
-
53
-	// cas pourri de ecrire/action/editer_site avec l'option reload=oui
54
-	if (defined('_GENIE_SYNDIC_NOW'))
55
-		$arguments['id_syndic'] = _GENIE_SYNDIC_NOW;
56
-
57
-	// serialiser les arguments
58
-	$arguments = serialize($arguments);
59
-	$md5args = md5($arguments);
60
-
61
-	// si pas de date programee, des que possible
62
-	$duplicate_where = 'status='.intval(_JQ_SCHEDULED).' AND ';
63
-	if (!$time){
64
-		$time = time();
65
-		$duplicate_where = ""; // ne pas dupliquer si deja le meme job en cours d'execution
66
-	}
67
-	$date = date('Y-m-d H:i:s',$time);
68
-
69
-	$set_job = array(
70
-		'fonction'=>$function,
71
-		'descriptif'=>$description,
72
-		'args'=>$arguments,
73
-		'md5args'=>$md5args,
74
-		'inclure'=>$file,
75
-		'priorite'=>max(-10,min(10,intval($priority))),
76
-		'date'=>$date,
77
-		'status'=>_JQ_SCHEDULED,
78
-	);
79
-	// si option ne pas dupliquer, regarder si la fonction existe deja
80
-	// avec les memes args et file
81
-	if (
82
-			$no_duplicate
83
-		AND
84
-			$id_job = sql_getfetsel('id_job','spip_jobs',
85
-				$duplicate_where =
86
-					$duplicate_where . 'fonction='.sql_quote($function)
87
-				.(($no_duplicate==='function_only')?'':
88
-				 ' AND md5args='.sql_quote($md5args).' AND inclure='.sql_quote($file)))
89
-		)
90
-		return $id_job;
91
-
92
-	$id_job = sql_insertq('spip_jobs',$set_job);
93
-	// en cas de concurrence, deux process peuvent arriver jusqu'ici en parallele
94
-	// avec le meme job unique a inserer. Dans ce cas, celui qui a eu l'id le plus grand
95
-	// doit s'effacer
96
-	if (
97
-			$no_duplicate
98
-		AND
99
-			$id_prev = sql_getfetsel('id_job','spip_jobs',"id_job<".intval($id_job)." AND $duplicate_where")){
100
-		sql_delete('spip_jobs','id_job='.intval($id_job));
101
-		return $id_prev;
102
-	}
103
-
104
-	// verifier la non duplication qui peut etre problematique en cas de concurence
105
-	// il faut dans ce cas que seul le dernier ajoute se supprime !
106
-
107
-	// une option de debug pour verifier que les arguments en base sont bons
108
-	// ie cas d'un char non acceptables sur certains type de champs
109
-	// qui coupe la valeur
110
-	if (defined('_JQ_INSERT_CHECK_ARGS') AND $id_job) {
111
-		$args = sql_getfetsel('args', 'spip_jobs', 'id_job='.intval($id_job));
112
-		if ($args!==$arguments) {
113
-			spip_log('arguments job errones / longueur '.strlen($args)." vs ".strlen($arguments).' / valeur : '.var_export($arguments,true),'queue');
114
-		}
115
-	}
116
-
117
-	if ($id_job){
118
-		queue_update_next_job_time($time);
119
-	}
120
-	// si la mise en file d'attente du job echoue,
121
-	// il ne faut pas perdre l'execution de la fonction
122
-	// on la lance immediatement, c'est un fallback
123
-	// sauf en cas d'upgrade necessaire (table spip_jobs inexistante)
124
-	elseif($GLOBALS['meta']['version_installee']==$GLOBALS['spip_version_base']) {
125
-		$set_job['id_job'] = 0;
126
-		queue_start_job($set_job);
127
-	}
128
-
129
-	return $id_job;
51
+    include_spip('base/abstract_sql');
52
+
53
+    // cas pourri de ecrire/action/editer_site avec l'option reload=oui
54
+    if (defined('_GENIE_SYNDIC_NOW'))
55
+        $arguments['id_syndic'] = _GENIE_SYNDIC_NOW;
56
+
57
+    // serialiser les arguments
58
+    $arguments = serialize($arguments);
59
+    $md5args = md5($arguments);
60
+
61
+    // si pas de date programee, des que possible
62
+    $duplicate_where = 'status='.intval(_JQ_SCHEDULED).' AND ';
63
+    if (!$time){
64
+        $time = time();
65
+        $duplicate_where = ""; // ne pas dupliquer si deja le meme job en cours d'execution
66
+    }
67
+    $date = date('Y-m-d H:i:s',$time);
68
+
69
+    $set_job = array(
70
+        'fonction'=>$function,
71
+        'descriptif'=>$description,
72
+        'args'=>$arguments,
73
+        'md5args'=>$md5args,
74
+        'inclure'=>$file,
75
+        'priorite'=>max(-10,min(10,intval($priority))),
76
+        'date'=>$date,
77
+        'status'=>_JQ_SCHEDULED,
78
+    );
79
+    // si option ne pas dupliquer, regarder si la fonction existe deja
80
+    // avec les memes args et file
81
+    if (
82
+            $no_duplicate
83
+        AND
84
+            $id_job = sql_getfetsel('id_job','spip_jobs',
85
+                $duplicate_where =
86
+                    $duplicate_where . 'fonction='.sql_quote($function)
87
+                .(($no_duplicate==='function_only')?'':
88
+                 ' AND md5args='.sql_quote($md5args).' AND inclure='.sql_quote($file)))
89
+        )
90
+        return $id_job;
91
+
92
+    $id_job = sql_insertq('spip_jobs',$set_job);
93
+    // en cas de concurrence, deux process peuvent arriver jusqu'ici en parallele
94
+    // avec le meme job unique a inserer. Dans ce cas, celui qui a eu l'id le plus grand
95
+    // doit s'effacer
96
+    if (
97
+            $no_duplicate
98
+        AND
99
+            $id_prev = sql_getfetsel('id_job','spip_jobs',"id_job<".intval($id_job)." AND $duplicate_where")){
100
+        sql_delete('spip_jobs','id_job='.intval($id_job));
101
+        return $id_prev;
102
+    }
103
+
104
+    // verifier la non duplication qui peut etre problematique en cas de concurence
105
+    // il faut dans ce cas que seul le dernier ajoute se supprime !
106
+
107
+    // une option de debug pour verifier que les arguments en base sont bons
108
+    // ie cas d'un char non acceptables sur certains type de champs
109
+    // qui coupe la valeur
110
+    if (defined('_JQ_INSERT_CHECK_ARGS') AND $id_job) {
111
+        $args = sql_getfetsel('args', 'spip_jobs', 'id_job='.intval($id_job));
112
+        if ($args!==$arguments) {
113
+            spip_log('arguments job errones / longueur '.strlen($args)." vs ".strlen($arguments).' / valeur : '.var_export($arguments,true),'queue');
114
+        }
115
+    }
116
+
117
+    if ($id_job){
118
+        queue_update_next_job_time($time);
119
+    }
120
+    // si la mise en file d'attente du job echoue,
121
+    // il ne faut pas perdre l'execution de la fonction
122
+    // on la lance immediatement, c'est un fallback
123
+    // sauf en cas d'upgrade necessaire (table spip_jobs inexistante)
124
+    elseif($GLOBALS['meta']['version_installee']==$GLOBALS['spip_version_base']) {
125
+        $set_job['id_job'] = 0;
126
+        queue_start_job($set_job);
127
+    }
128
+
129
+    return $id_job;
130 130
 }
131 131
 
132 132
 /**
@@ -135,11 +135,11 @@  discard block
 block discarded – undo
135 135
  * @return void
136 136
  */
137 137
 function queue_purger(){
138
-	include_spip('base/abstract_sql');
139
-	sql_delete('spip_jobs');
140
-  sql_delete("spip_jobs_liens","id_job NOT IN (".sql_get_select("id_job","spip_jobs").")");
141
-  include_spip('inc/genie');
142
-  genie_queue_watch_dist();
138
+    include_spip('base/abstract_sql');
139
+    sql_delete('spip_jobs');
140
+    sql_delete("spip_jobs_liens","id_job NOT IN (".sql_get_select("id_job","spip_jobs").")");
141
+    include_spip('inc/genie');
142
+    genie_queue_watch_dist();
143 143
 }
144 144
 
145 145
 /**
@@ -149,21 +149,21 @@  discard block
 block discarded – undo
149 149
  * @return bool
150 150
  */
151 151
 function queue_remove_job($id_job){
152
-	include_spip('base/abstract_sql');
153
-
154
-	if ($row = sql_fetsel('fonction,inclure,date','spip_jobs','id_job='.intval($id_job))
155
-	 AND $res = sql_delete('spip_jobs','id_job='.intval($id_job))){
156
-		queue_unlink_job($id_job);
157
-		// est-ce une tache cron qu'il faut relancer ?
158
-		if ($periode = queue_is_cron_job($row['fonction'],$row['inclure'])){
159
-			// relancer avec les nouveaux arguments de temps
160
-			include_spip('inc/genie');
161
-			// relancer avec la periode prevue
162
-			queue_genie_replan_job($row['fonction'],$periode,strtotime($row['date']));
163
-		}
164
-		queue_update_next_job_time();
165
-	}
166
-	return $res;
152
+    include_spip('base/abstract_sql');
153
+
154
+    if ($row = sql_fetsel('fonction,inclure,date','spip_jobs','id_job='.intval($id_job))
155
+     AND $res = sql_delete('spip_jobs','id_job='.intval($id_job))){
156
+        queue_unlink_job($id_job);
157
+        // est-ce une tache cron qu'il faut relancer ?
158
+        if ($periode = queue_is_cron_job($row['fonction'],$row['inclure'])){
159
+            // relancer avec les nouveaux arguments de temps
160
+            include_spip('inc/genie');
161
+            // relancer avec la periode prevue
162
+            queue_genie_replan_job($row['fonction'],$periode,strtotime($row['date']));
163
+        }
164
+        queue_update_next_job_time();
165
+    }
166
+    return $res;
167 167
 }
168 168
 
169 169
 /**
@@ -176,18 +176,18 @@  discard block
 block discarded – undo
176 176
  *  or an array of simple array to link multiples objet in one time
177 177
  */
178 178
 function queue_link_job($id_job,$objets){
179
-	include_spip('base/abstract_sql');
180
-
181
-	if (is_array($objets) AND count($objets)){
182
-		if (is_array(reset($objets))){
183
-			foreach($objets as $k=>$o){
184
-				$objets[$k]['id_job'] = $id_job;
185
-			}
186
-			sql_insertq_multi('spip_jobs_liens',$objets);
187
-		}
188
-		else
189
-			sql_insertq('spip_jobs_liens',array_merge(array('id_job'=>$id_job),$objets));
190
-	}
179
+    include_spip('base/abstract_sql');
180
+
181
+    if (is_array($objets) AND count($objets)){
182
+        if (is_array(reset($objets))){
183
+            foreach($objets as $k=>$o){
184
+                $objets[$k]['id_job'] = $id_job;
185
+            }
186
+            sql_insertq_multi('spip_jobs_liens',$objets);
187
+        }
188
+        else
189
+            sql_insertq('spip_jobs_liens',array_merge(array('id_job'=>$id_job),$objets));
190
+    }
191 191
 }
192 192
 
193 193
 /**
@@ -199,7 +199,7 @@  discard block
 block discarded – undo
199 199
  *	result of sql_delete
200 200
  */
201 201
 function queue_unlink_job($id_job){
202
-	return sql_delete("spip_jobs_liens","id_job=".intval($id_job));
202
+    return sql_delete("spip_jobs_liens","id_job=".intval($id_job));
203 203
 }
204 204
 
205 205
 /**
@@ -211,48 +211,48 @@  discard block
 block discarded – undo
211 211
  */
212 212
 function queue_start_job($row){
213 213
 
214
-	// deserialiser les arguments
215
-	$args = unserialize($row['args']);
216
-	if ($args===false){
217
-		spip_log('arguments job errones '.var_export($row,true),'queue');
218
-		$args = array();
219
-	}
220
-
221
-	$fonction = $row['fonction'];
222
-	if (strlen($inclure = trim($row['inclure']))){
223
-		if (substr($inclure,-1)=='/'){ // c'est un chemin pour charger_fonction
224
-			$f = charger_fonction($fonction,rtrim($inclure,'/'),false);
225
-			if ($f)
226
-				$fonction = $f;
227
-		}
228
-		else
229
-			include_spip($inclure);
230
-	}
231
-
232
-	if (!function_exists($fonction)){
233
-		spip_log("fonction $fonction ($inclure) inexistante ".var_export($row,true),'queue');
234
-		return false;
235
-	}
236
-
237
-	spip_log("queue [".$row['id_job']."]: $fonction() start", 'queue');
238
-	switch (count($args)) {
239
-		case 0:	$res = $fonction(); break;
240
-		case 1:	$res = $fonction($args[0]); break;
241
-		case 2:	$res = $fonction($args[0],$args[1]); break;
242
-		case 3:	$res = $fonction($args[0],$args[1], $args[2]); break;
243
-		case 4:	$res = $fonction($args[0],$args[1], $args[2], $args[3]); break;
244
-		case 5:	$res = $fonction($args[0],$args[1], $args[2], $args[3], $args[4]); break;
245
-		case 6:	$res = $fonction($args[0],$args[1], $args[2], $args[3], $args[4], $args[5]); break;
246
-		case 7:	$res = $fonction($args[0],$args[1], $args[2], $args[3], $args[4], $args[5], $args[6]); break;
247
-		case 8:	$res = $fonction($args[0],$args[1], $args[2], $args[3], $args[4], $args[5], $args[6], $args[7]); break;
248
-		case 9:	$res = $fonction($args[0],$args[1], $args[2], $args[3], $args[4], $args[5], $args[6], $args[7], $args[8]); break;
249
-		case 10:$res = $fonction($args[0],$args[1], $args[2], $args[3], $args[4], $args[5], $args[6], $args[7], $args[8], $args[9]); break;
250
-		default:
251
-			# plus lent mais completement generique
252
-			$res = call_user_func_array($fonction, $args);
253
-	}
254
-	spip_log("queue [".$row['id_job']."]: $fonction() end", 'queue');
255
-	return $res;
214
+    // deserialiser les arguments
215
+    $args = unserialize($row['args']);
216
+    if ($args===false){
217
+        spip_log('arguments job errones '.var_export($row,true),'queue');
218
+        $args = array();
219
+    }
220
+
221
+    $fonction = $row['fonction'];
222
+    if (strlen($inclure = trim($row['inclure']))){
223
+        if (substr($inclure,-1)=='/'){ // c'est un chemin pour charger_fonction
224
+            $f = charger_fonction($fonction,rtrim($inclure,'/'),false);
225
+            if ($f)
226
+                $fonction = $f;
227
+        }
228
+        else
229
+            include_spip($inclure);
230
+    }
231
+
232
+    if (!function_exists($fonction)){
233
+        spip_log("fonction $fonction ($inclure) inexistante ".var_export($row,true),'queue');
234
+        return false;
235
+    }
236
+
237
+    spip_log("queue [".$row['id_job']."]: $fonction() start", 'queue');
238
+    switch (count($args)) {
239
+        case 0:	$res = $fonction(); break;
240
+        case 1:	$res = $fonction($args[0]); break;
241
+        case 2:	$res = $fonction($args[0],$args[1]); break;
242
+        case 3:	$res = $fonction($args[0],$args[1], $args[2]); break;
243
+        case 4:	$res = $fonction($args[0],$args[1], $args[2], $args[3]); break;
244
+        case 5:	$res = $fonction($args[0],$args[1], $args[2], $args[3], $args[4]); break;
245
+        case 6:	$res = $fonction($args[0],$args[1], $args[2], $args[3], $args[4], $args[5]); break;
246
+        case 7:	$res = $fonction($args[0],$args[1], $args[2], $args[3], $args[4], $args[5], $args[6]); break;
247
+        case 8:	$res = $fonction($args[0],$args[1], $args[2], $args[3], $args[4], $args[5], $args[6], $args[7]); break;
248
+        case 9:	$res = $fonction($args[0],$args[1], $args[2], $args[3], $args[4], $args[5], $args[6], $args[7], $args[8]); break;
249
+        case 10:$res = $fonction($args[0],$args[1], $args[2], $args[3], $args[4], $args[5], $args[6], $args[7], $args[8], $args[9]); break;
250
+        default:
251
+            # plus lent mais completement generique
252
+            $res = call_user_func_array($fonction, $args);
253
+    }
254
+    spip_log("queue [".$row['id_job']."]: $fonction() end", 'queue');
255
+    return $res;
256 256
 
257 257
 }
258 258
 
@@ -271,82 +271,82 @@  discard block
 block discarded – undo
271 271
  * @return null|false
272 272
  */
273 273
 function queue_schedule($force_jobs = null){
274
-	$time = time();
275
-	if (defined('_DEBUG_BLOCK_QUEUE')) {
276
-		spip_log("_DEBUG_BLOCK_QUEUE : schedule stop",'jq'._LOG_DEBUG);
277
-		return;
278
-	}
279
-
280
-	// rien a faire si le prochain job est encore dans le futur
281
-	if (queue_sleep_time_to_next_job()>0 AND (!$force_jobs OR !count($force_jobs))){
282
-		spip_log("queue_sleep_time_to_next_job",'jq'._LOG_DEBUG);
283
-		return;
284
-	}
285
-
286
-	include_spip('base/abstract_sql');
287
-	// on ne peut rien faire si pas de connexion SQL
288
-	if (!spip_connect())  return false;
289
-
290
-	if (!defined('_JQ_MAX_JOBS_TIME_TO_EXECUTE')){
291
-		$max_time = ini_get('max_execution_time')/2;
292
-		// valeur conservatrice si on a pas reussi a lire le max_execution_time
293
-		if (!$max_time) $max_time=5;
294
-		define('_JQ_MAX_JOBS_TIME_TO_EXECUTE',min($max_time,15)); // une valeur maxi en temps.
295
-	}
296
-	$end_time = $time + _JQ_MAX_JOBS_TIME_TO_EXECUTE;
297
-
298
-	spip_log("JQ schedule $time / $end_time",'jq'._LOG_DEBUG);
299
-
300
-	if (!defined('_JQ_MAX_JOBS_EXECUTE'))
301
-		define('_JQ_MAX_JOBS_EXECUTE',200);
302
-	$nbj=0;
303
-	// attraper les jobs
304
-	// dont la date est passee (echus en attente),
305
-	// par odre :
306
-	//	- de priorite
307
-	//	- de date
308
-	// lorsqu'un job cron n'a pas fini, sa priorite est descendue
309
-	// pour qu'il ne bloque pas les autres jobs en attente
310
-	if (is_array($force_jobs) AND count($force_jobs))
311
-		$cond = "status=".intval(_JQ_SCHEDULED)." AND ".sql_in("id_job", $force_jobs);
312
-	else {
313
-		$now = date('Y-m-d H:i:s',$time);
314
-		$cond = "status=".intval(_JQ_SCHEDULED)." AND date<=".sql_quote($now);
315
-	}
316
-
317
-	register_shutdown_function('queue_error_handler'); // recuperer les erreurs auant que possible
318
-	$res = sql_allfetsel('*','spip_jobs',$cond,'','priorite DESC,date','0,'.(_JQ_MAX_JOBS_EXECUTE+1));
319
-	do {
320
-		if ($row = array_shift($res)){
321
-			$nbj++;
322
-			// il faut un verrou, a base de sql_delete
323
-			if (sql_delete('spip_jobs',"id_job=".intval($row['id_job'])." AND status=".intval(_JQ_SCHEDULED))){
324
-				#spip_log("JQ schedule job ".$nbj." OK",'jq');
325
-				// on reinsert dans la base aussitot avec un status=_JQ_PENDING
326
-				$row['status'] = _JQ_PENDING;
327
-				$row['date'] = date('Y-m-d H:i:s',$time);
328
-				sql_insertq('spip_jobs', $row);
329
-
330
-				// on a la main sur le job :
331
-				// l'executer
332
-				$result = queue_start_job($row);
333
-
334
-				$time = time();
335
-				queue_close_job($row, $time, $result);
336
-			}
337
-		}
338
-		spip_log("JQ schedule job end time ".$time,'jq'._LOG_DEBUG);
339
-	} while ($nbj<_JQ_MAX_JOBS_EXECUTE AND $row AND $time<$end_time);
340
-	spip_log("JQ schedule end time ".time(),'jq'._LOG_DEBUG);
341
-
342
-	if ($row = array_shift($res)){
343
-		queue_update_next_job_time(0); // on sait qu'il y a encore des jobs a lancer ASAP
344
-		spip_log("JQ encore !",'jq'._LOG_DEBUG);
345
-	}
346
-	else
347
-		queue_update_next_job_time();
348
-
349
-	return true;
274
+    $time = time();
275
+    if (defined('_DEBUG_BLOCK_QUEUE')) {
276
+        spip_log("_DEBUG_BLOCK_QUEUE : schedule stop",'jq'._LOG_DEBUG);
277
+        return;
278
+    }
279
+
280
+    // rien a faire si le prochain job est encore dans le futur
281
+    if (queue_sleep_time_to_next_job()>0 AND (!$force_jobs OR !count($force_jobs))){
282
+        spip_log("queue_sleep_time_to_next_job",'jq'._LOG_DEBUG);
283
+        return;
284
+    }
285
+
286
+    include_spip('base/abstract_sql');
287
+    // on ne peut rien faire si pas de connexion SQL
288
+    if (!spip_connect())  return false;
289
+
290
+    if (!defined('_JQ_MAX_JOBS_TIME_TO_EXECUTE')){
291
+        $max_time = ini_get('max_execution_time')/2;
292
+        // valeur conservatrice si on a pas reussi a lire le max_execution_time
293
+        if (!$max_time) $max_time=5;
294
+        define('_JQ_MAX_JOBS_TIME_TO_EXECUTE',min($max_time,15)); // une valeur maxi en temps.
295
+    }
296
+    $end_time = $time + _JQ_MAX_JOBS_TIME_TO_EXECUTE;
297
+
298
+    spip_log("JQ schedule $time / $end_time",'jq'._LOG_DEBUG);
299
+
300
+    if (!defined('_JQ_MAX_JOBS_EXECUTE'))
301
+        define('_JQ_MAX_JOBS_EXECUTE',200);
302
+    $nbj=0;
303
+    // attraper les jobs
304
+    // dont la date est passee (echus en attente),
305
+    // par odre :
306
+    //	- de priorite
307
+    //	- de date
308
+    // lorsqu'un job cron n'a pas fini, sa priorite est descendue
309
+    // pour qu'il ne bloque pas les autres jobs en attente
310
+    if (is_array($force_jobs) AND count($force_jobs))
311
+        $cond = "status=".intval(_JQ_SCHEDULED)." AND ".sql_in("id_job", $force_jobs);
312
+    else {
313
+        $now = date('Y-m-d H:i:s',$time);
314
+        $cond = "status=".intval(_JQ_SCHEDULED)." AND date<=".sql_quote($now);
315
+    }
316
+
317
+    register_shutdown_function('queue_error_handler'); // recuperer les erreurs auant que possible
318
+    $res = sql_allfetsel('*','spip_jobs',$cond,'','priorite DESC,date','0,'.(_JQ_MAX_JOBS_EXECUTE+1));
319
+    do {
320
+        if ($row = array_shift($res)){
321
+            $nbj++;
322
+            // il faut un verrou, a base de sql_delete
323
+            if (sql_delete('spip_jobs',"id_job=".intval($row['id_job'])." AND status=".intval(_JQ_SCHEDULED))){
324
+                #spip_log("JQ schedule job ".$nbj." OK",'jq');
325
+                // on reinsert dans la base aussitot avec un status=_JQ_PENDING
326
+                $row['status'] = _JQ_PENDING;
327
+                $row['date'] = date('Y-m-d H:i:s',$time);
328
+                sql_insertq('spip_jobs', $row);
329
+
330
+                // on a la main sur le job :
331
+                // l'executer
332
+                $result = queue_start_job($row);
333
+
334
+                $time = time();
335
+                queue_close_job($row, $time, $result);
336
+            }
337
+        }
338
+        spip_log("JQ schedule job end time ".$time,'jq'._LOG_DEBUG);
339
+    } while ($nbj<_JQ_MAX_JOBS_EXECUTE AND $row AND $time<$end_time);
340
+    spip_log("JQ schedule end time ".time(),'jq'._LOG_DEBUG);
341
+
342
+    if ($row = array_shift($res)){
343
+        queue_update_next_job_time(0); // on sait qu'il y a encore des jobs a lancer ASAP
344
+        spip_log("JQ encore !",'jq'._LOG_DEBUG);
345
+    }
346
+    else
347
+        queue_update_next_job_time();
348
+
349
+    return true;
350 350
 }
351 351
 
352 352
 /**
@@ -360,21 +360,21 @@  discard block
 block discarded – undo
360 360
  * @param int $result
361 361
  */
362 362
 function queue_close_job(&$row,$time,$result=0){
363
-	// est-ce une tache cron qu'il faut relancer ?
364
-	if ($periode = queue_is_cron_job($row['fonction'],$row['inclure'])){
365
-		// relancer avec les nouveaux arguments de temps
366
-		include_spip('inc/genie');
367
-		if ($result<0)
368
-			// relancer tout de suite, mais en baissant la priorite
369
-			queue_genie_replan_job($row['fonction'],$periode,0-$result,null,$row['priorite']-1);
370
-		else
371
-			// relancer avec la periode prevue
372
-			queue_genie_replan_job($row['fonction'],$periode,$time);
373
-	}
374
-	// purger ses liens eventuels avec des objets
375
-	sql_delete("spip_jobs_liens","id_job=".intval($row['id_job']));
376
-	// supprimer le job fini
377
-	sql_delete('spip_jobs','id_job='.intval($row['id_job']));
363
+    // est-ce une tache cron qu'il faut relancer ?
364
+    if ($periode = queue_is_cron_job($row['fonction'],$row['inclure'])){
365
+        // relancer avec les nouveaux arguments de temps
366
+        include_spip('inc/genie');
367
+        if ($result<0)
368
+            // relancer tout de suite, mais en baissant la priorite
369
+            queue_genie_replan_job($row['fonction'],$periode,0-$result,null,$row['priorite']-1);
370
+        else
371
+            // relancer avec la periode prevue
372
+            queue_genie_replan_job($row['fonction'],$periode,$time);
373
+    }
374
+    // purger ses liens eventuels avec des objets
375
+    sql_delete("spip_jobs_liens","id_job=".intval($row['id_job']));
376
+    // supprimer le job fini
377
+    sql_delete('spip_jobs','id_job='.intval($row['id_job']));
378 378
 }
379 379
 
380 380
 /**
@@ -382,10 +382,10 @@  discard block
 block discarded – undo
382 382
  * en terminant la gestion de la queue
383 383
  */
384 384
 function queue_error_handler(){
385
-	// se remettre dans le bon dossier, car Apache le change parfois (toujours?)
386
-	chdir(_ROOT_CWD);
385
+    // se remettre dans le bon dossier, car Apache le change parfois (toujours?)
386
+    chdir(_ROOT_CWD);
387 387
 
388
-	queue_update_next_job_time();
388
+    queue_update_next_job_time();
389 389
 }
390 390
 
391 391
 
@@ -397,16 +397,16 @@  discard block
 block discarded – undo
397 397
  * @return <type>
398 398
  */
399 399
 function queue_is_cron_job($function,$inclure){
400
-	static $taches = null;
401
-	if (strncmp($inclure,'genie/',6)==0){
402
-		if (is_null($taches)){
403
-			include_spip('inc/genie');
404
-			$taches = taches_generales();
405
-		}
406
-		if (isset($taches[$function]))
407
-			return $taches[$function];
408
-	}
409
-	return false;
400
+    static $taches = null;
401
+    if (strncmp($inclure,'genie/',6)==0){
402
+        if (is_null($taches)){
403
+            include_spip('inc/genie');
404
+            $taches = taches_generales();
405
+        }
406
+        if (isset($taches[$function]))
407
+            return $taches[$function];
408
+    }
409
+    return false;
410 410
 }
411 411
 
412 412
 /**
@@ -420,48 +420,48 @@  discard block
 block discarded – undo
420 420
  *	temps de la tache ajoutee ou 0 pour ASAP
421 421
  */
422 422
 function queue_update_next_job_time($next_time=null){
423
-	static $nb_jobs_scheduled = null;
424
-	static $deja_la = false;
425
-	// prendre le min des $next_time que l'on voit passer ici, en cas de reentrance
426
-	static $next = null;
427
-	// queue_close_job peut etre reentrant ici
428
-	if ($deja_la) return;
429
-	$deja_la = true;
430
-
431
-	include_spip('base/abstract_sql');
432
-	$time = time();
433
-
434
-	// traiter les jobs morts au combat (_JQ_PENDING depuis plus de 180s)
435
-	// pour cause de timeout ou autre erreur fatale
436
-	$res = sql_allfetsel("*","spip_jobs","status=".intval(_JQ_PENDING)." AND date<".sql_quote(date('Y-m-d H:i:s',$time-180)));
437
-	if (is_array($res)) {
438
-		foreach ($res as $row)
439
-			queue_close_job($row,$time);
440
-	}
441
-
442
-	// chercher la date du prochain job si pas connu
443
-	if (is_null($next) OR is_null(queue_sleep_time_to_next_job())){
444
-		$date = sql_getfetsel('date','spip_jobs',"status=".intval(_JQ_SCHEDULED),'','date','0,1');
445
-		$next = strtotime($date);
446
-	}
447
-	if (!is_null($next_time)){
448
-		if (is_null($next) OR $next>$next_time)
449
-			$next = $next_time;
450
-	}
451
-
452
-		if ($next){
453
-			if (is_null($nb_jobs_scheduled))
454
-				$nb_jobs_scheduled = sql_countsel('spip_jobs',"status=".intval(_JQ_SCHEDULED)." AND date<".sql_quote(date('Y-m-d H:i:s',$time)));
455
-			elseif ($next<=$time)
456
-				$nb_jobs_scheduled++;
457
-			// si trop de jobs en attente, on force la purge en fin de hit
458
-			// pour assurer le coup
459
-			if ($nb_jobs_scheduled>defined('_JQ_NB_JOBS_OVERFLOW')?_JQ_NB_JOBS_OVERFLOW:10000)
460
-				define('_DIRECT_CRON_FORCE',true);
461
-		}
462
-
463
-	queue_set_next_job_time($next);
464
-	$deja_la = false;
423
+    static $nb_jobs_scheduled = null;
424
+    static $deja_la = false;
425
+    // prendre le min des $next_time que l'on voit passer ici, en cas de reentrance
426
+    static $next = null;
427
+    // queue_close_job peut etre reentrant ici
428
+    if ($deja_la) return;
429
+    $deja_la = true;
430
+
431
+    include_spip('base/abstract_sql');
432
+    $time = time();
433
+
434
+    // traiter les jobs morts au combat (_JQ_PENDING depuis plus de 180s)
435
+    // pour cause de timeout ou autre erreur fatale
436
+    $res = sql_allfetsel("*","spip_jobs","status=".intval(_JQ_PENDING)." AND date<".sql_quote(date('Y-m-d H:i:s',$time-180)));
437
+    if (is_array($res)) {
438
+        foreach ($res as $row)
439
+            queue_close_job($row,$time);
440
+    }
441
+
442
+    // chercher la date du prochain job si pas connu
443
+    if (is_null($next) OR is_null(queue_sleep_time_to_next_job())){
444
+        $date = sql_getfetsel('date','spip_jobs',"status=".intval(_JQ_SCHEDULED),'','date','0,1');
445
+        $next = strtotime($date);
446
+    }
447
+    if (!is_null($next_time)){
448
+        if (is_null($next) OR $next>$next_time)
449
+            $next = $next_time;
450
+    }
451
+
452
+        if ($next){
453
+            if (is_null($nb_jobs_scheduled))
454
+                $nb_jobs_scheduled = sql_countsel('spip_jobs',"status=".intval(_JQ_SCHEDULED)." AND date<".sql_quote(date('Y-m-d H:i:s',$time)));
455
+            elseif ($next<=$time)
456
+                $nb_jobs_scheduled++;
457
+            // si trop de jobs en attente, on force la purge en fin de hit
458
+            // pour assurer le coup
459
+            if ($nb_jobs_scheduled>defined('_JQ_NB_JOBS_OVERFLOW')?_JQ_NB_JOBS_OVERFLOW:10000)
460
+                define('_DIRECT_CRON_FORCE',true);
461
+        }
462
+
463
+    queue_set_next_job_time($next);
464
+    $deja_la = false;
465 465
 }
466 466
 
467 467
 
@@ -471,27 +471,27 @@  discard block
 block discarded – undo
471 471
  */
472 472
 function queue_set_next_job_time($next) {
473 473
 
474
-	// utiliser le temps courant reel plutot que temps de la requete ici
475
-	$time = time();
476
-
477
-	// toujours relire la valeur pour comparer, pour tenir compte des maj concourrantes
478
-	// et ne mettre a jour que si il y a un interet a le faire
479
-	// permet ausis d'initialiser le nom de fichier a coup sur
480
-	$curr_next = $_SERVER['REQUEST_TIME'] + max(0,queue_sleep_time_to_next_job(true));
481
-	if (
482
-			($curr_next<=$time AND $next>$time) // le prochain job est dans le futur mais pas la date planifiee actuelle
483
-			OR $curr_next>$next // le prochain job est plus tot que la date planifiee actuelle
484
-		) {
485
-		if (include_spip('inc/memoization') AND defined('_MEMOIZE_MEMORY') AND _MEMOIZE_MEMORY) {
486
-			cache_set(_JQ_NEXT_JOB_TIME_FILENAME,intval($next));
487
-		}
488
-		else {
489
-			ecrire_fichier(_JQ_NEXT_JOB_TIME_FILENAME,intval($next));
490
-		}
491
-		queue_sleep_time_to_next_job($next);
492
-	}
493
-
494
-	return queue_sleep_time_to_next_job();
474
+    // utiliser le temps courant reel plutot que temps de la requete ici
475
+    $time = time();
476
+
477
+    // toujours relire la valeur pour comparer, pour tenir compte des maj concourrantes
478
+    // et ne mettre a jour que si il y a un interet a le faire
479
+    // permet ausis d'initialiser le nom de fichier a coup sur
480
+    $curr_next = $_SERVER['REQUEST_TIME'] + max(0,queue_sleep_time_to_next_job(true));
481
+    if (
482
+            ($curr_next<=$time AND $next>$time) // le prochain job est dans le futur mais pas la date planifiee actuelle
483
+            OR $curr_next>$next // le prochain job est plus tot que la date planifiee actuelle
484
+        ) {
485
+        if (include_spip('inc/memoization') AND defined('_MEMOIZE_MEMORY') AND _MEMOIZE_MEMORY) {
486
+            cache_set(_JQ_NEXT_JOB_TIME_FILENAME,intval($next));
487
+        }
488
+        else {
489
+            ecrire_fichier(_JQ_NEXT_JOB_TIME_FILENAME,intval($next));
490
+        }
491
+        queue_sleep_time_to_next_job($next);
492
+    }
493
+
494
+    return queue_sleep_time_to_next_job();
495 495
 }
496 496
 
497 497
 /**
@@ -503,110 +503,110 @@  discard block
 block discarded – undo
503 503
  * @return string
504 504
  */
505 505
 function queue_affichage_cron(){
506
-	$texte = "";
507
-
508
-	$time_to_next = queue_sleep_time_to_next_job();
509
-	// rien a faire si le prochain job est encore dans le futur
510
-	if ($time_to_next>0 OR defined('_DEBUG_BLOCK_QUEUE'))
511
-		return $texte;
512
-
513
-	// ne pas relancer si on vient de lancer dans la meme seconde par un hit concurent
514
-	if (file_exists($lock=_DIR_TMP."cron.lock") AND !(@filemtime($lock)<$_SERVER['REQUEST_TIME']))
515
-		return $texte;
516
-	@touch($lock);
517
-
518
-	// il y a des taches en attentes
519
-	// si depuis plus de 5min, on essaye de lancer le cron par tous les moyens pour rattraper le coup
520
-	// on est sans doute sur un site qui n'autorise pas http sortant ou avec peu de trafic
521
-	$urgent = false;
522
-	if ($time_to_next<-300)
523
-		$urgent = true;
524
-
525
-	$url_cron = generer_url_action('cron','',false,true);
526
-
527
-	if (!defined('_HTML_BG_CRON_FORCE') OR !_HTML_BG_CRON_FORCE){
528
-
529
-		// methode la plus rapide :
530
-		// Si fsockopen est possible, on lance le cron via un socket en asynchrone
531
-		// si fsockopen echoue (disponibilite serveur, firewall) on essaye pas cURL
532
-		// car on a toutes les chances d'echouer pareil mais sans moyen de le savoir
533
-		// on passe direct a la methode background-image
534
-		if(function_exists('fsockopen')){
535
-			$parts=parse_url($url_cron);
536
-
537
-			switch ($parts['scheme']) {
538
-				case 'https':
539
-					$scheme = 'ssl://';
540
-					$port = 443;
541
-					break;
542
-				case 'http':
543
-				default:
544
-					$scheme = '';
545
-					$port = 80;
546
-			}
547
-
548
-			$fp = @fsockopen($scheme.$parts['host'],
549
-		        isset($parts['port'])?$parts['port']:$port,
550
-		        $errno, $errstr, 1);
551
-
552
-			if ($fp) {
553
-				$timeout = 200; // ms
554
-				stream_set_timeout($fp,0,$timeout * 1000);
555
-				$query = $parts['path'].($parts['query']?"?".$parts['query']:"");
556
-				$out = "GET ".$query." HTTP/1.1\r\n";
557
-				$out.= "Host: ".$parts['host']."\r\n";
558
-				$out.= "Connection: Close\r\n\r\n";
559
-				fwrite($fp, $out);
560
-				spip_timer('read');
561
-				$t = 0;
562
-				// on lit la reponse si possible pour fermer proprement la connexion
563
-				// avec un timeout total de 200ms pour ne pas se bloquer
564
-				while (!feof($fp) AND $t<$timeout) {
565
-					@fgets($fp, 1024);
566
-					$t += spip_timer('read',true);
567
-					spip_timer('read');
568
-				}
569
-				fclose($fp);
570
-				if (!$urgent)
571
-					return $texte;
572
-			}
573
-		}
574
-		// si fsockopen n'est pas dispo on essaye cURL :
575
-		// lancer le cron par un cURL asynchrone si cURL est present
576
-		elseif (function_exists("curl_init")){
577
-			//setting the curl parameters.
578
-			$ch = curl_init($url_cron);
579
-			curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
580
-			// cf bug : http://www.php.net/manual/en/function.curl-setopt.php#104597
581
-			curl_setopt($ch, CURLOPT_NOSIGNAL, 1);
582
-			// valeur mini pour que la requete soit lancee
583
-			curl_setopt($ch, CURLOPT_TIMEOUT_MS, 200);
584
-			// lancer
585
-			curl_exec($ch);
586
-			// fermer
587
-			curl_close($ch);
588
-			if (!$urgent)
589
-				return $texte;
590
-		}
591
-	}
592
-
593
-	// si deja force, on retourne sans rien
594
-	if (defined('_DIRECT_CRON_FORCE'))
595
-		return $texte;
596
-
597
-	// si c'est un bot
598
-	// inutile de faire un appel par image background,
599
-	// on force un appel direct en fin de hit
600
-	if ((defined('_IS_BOT') AND _IS_BOT)){
601
-		define('_DIRECT_CRON_FORCE',true);
602
-		return $texte;
603
-	}
604
-
605
-	// en derniere solution, on insere une image background dans la page
606
-	$texte = '<!-- SPIP-CRON --><div style="background-image: url(\'' .
607
-		generer_url_action('cron') .
608
-		'\');"></div>';
609
-
610
-	return $texte;
506
+    $texte = "";
507
+
508
+    $time_to_next = queue_sleep_time_to_next_job();
509
+    // rien a faire si le prochain job est encore dans le futur
510
+    if ($time_to_next>0 OR defined('_DEBUG_BLOCK_QUEUE'))
511
+        return $texte;
512
+
513
+    // ne pas relancer si on vient de lancer dans la meme seconde par un hit concurent
514
+    if (file_exists($lock=_DIR_TMP."cron.lock") AND !(@filemtime($lock)<$_SERVER['REQUEST_TIME']))
515
+        return $texte;
516
+    @touch($lock);
517
+
518
+    // il y a des taches en attentes
519
+    // si depuis plus de 5min, on essaye de lancer le cron par tous les moyens pour rattraper le coup
520
+    // on est sans doute sur un site qui n'autorise pas http sortant ou avec peu de trafic
521
+    $urgent = false;
522
+    if ($time_to_next<-300)
523
+        $urgent = true;
524
+
525
+    $url_cron = generer_url_action('cron','',false,true);
526
+
527
+    if (!defined('_HTML_BG_CRON_FORCE') OR !_HTML_BG_CRON_FORCE){
528
+
529
+        // methode la plus rapide :
530
+        // Si fsockopen est possible, on lance le cron via un socket en asynchrone
531
+        // si fsockopen echoue (disponibilite serveur, firewall) on essaye pas cURL
532
+        // car on a toutes les chances d'echouer pareil mais sans moyen de le savoir
533
+        // on passe direct a la methode background-image
534
+        if(function_exists('fsockopen')){
535
+            $parts=parse_url($url_cron);
536
+
537
+            switch ($parts['scheme']) {
538
+                case 'https':
539
+                    $scheme = 'ssl://';
540
+                    $port = 443;
541
+                    break;
542
+                case 'http':
543
+                default:
544
+                    $scheme = '';
545
+                    $port = 80;
546
+            }
547
+
548
+            $fp = @fsockopen($scheme.$parts['host'],
549
+                isset($parts['port'])?$parts['port']:$port,
550
+                $errno, $errstr, 1);
551
+
552
+            if ($fp) {
553
+                $timeout = 200; // ms
554
+                stream_set_timeout($fp,0,$timeout * 1000);
555
+                $query = $parts['path'].($parts['query']?"?".$parts['query']:"");
556
+                $out = "GET ".$query." HTTP/1.1\r\n";
557
+                $out.= "Host: ".$parts['host']."\r\n";
558
+                $out.= "Connection: Close\r\n\r\n";
559
+                fwrite($fp, $out);
560
+                spip_timer('read');
561
+                $t = 0;
562
+                // on lit la reponse si possible pour fermer proprement la connexion
563
+                // avec un timeout total de 200ms pour ne pas se bloquer
564
+                while (!feof($fp) AND $t<$timeout) {
565
+                    @fgets($fp, 1024);
566
+                    $t += spip_timer('read',true);
567
+                    spip_timer('read');
568
+                }
569
+                fclose($fp);
570
+                if (!$urgent)
571
+                    return $texte;
572
+            }
573
+        }
574
+        // si fsockopen n'est pas dispo on essaye cURL :
575
+        // lancer le cron par un cURL asynchrone si cURL est present
576
+        elseif (function_exists("curl_init")){
577
+            //setting the curl parameters.
578
+            $ch = curl_init($url_cron);
579
+            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
580
+            // cf bug : http://www.php.net/manual/en/function.curl-setopt.php#104597
581
+            curl_setopt($ch, CURLOPT_NOSIGNAL, 1);
582
+            // valeur mini pour que la requete soit lancee
583
+            curl_setopt($ch, CURLOPT_TIMEOUT_MS, 200);
584
+            // lancer
585
+            curl_exec($ch);
586
+            // fermer
587
+            curl_close($ch);
588
+            if (!$urgent)
589
+                return $texte;
590
+        }
591
+    }
592
+
593
+    // si deja force, on retourne sans rien
594
+    if (defined('_DIRECT_CRON_FORCE'))
595
+        return $texte;
596
+
597
+    // si c'est un bot
598
+    // inutile de faire un appel par image background,
599
+    // on force un appel direct en fin de hit
600
+    if ((defined('_IS_BOT') AND _IS_BOT)){
601
+        define('_DIRECT_CRON_FORCE',true);
602
+        return $texte;
603
+    }
604
+
605
+    // en derniere solution, on insere une image background dans la page
606
+    $texte = '<!-- SPIP-CRON --><div style="background-image: url(\'' .
607
+        generer_url_action('cron') .
608
+        '\');"></div>';
609
+
610
+    return $texte;
611 611
 }
612 612
 ?>
Please login to merge, or discard this patch.
ecrire/inc/lister_objets.php 1 patch
Indentation   +18 added lines, -18 removed lines patch added patch discarded remove patch
@@ -26,28 +26,28 @@
 block discarded – undo
26 26
  * @return string
27 27
  */
28 28
 function inc_lister_objets_dist($vue, $contexte=array(), $force=false){
29
-	$res = ""; // debug
30
-	if (!is_array($contexte))
31
-		return _L('$contexte doit etre un tableau dans inc/lister_objets');
32
-
33
-	$fond = "prive/objets/liste/$vue";
34
-	if (!find_in_path($fond."."._EXTENSION_SQUELETTES)) {
35
-		// traiter les cas particuliers
36
-		include_spip('base/connect_sql');
37
-		$vue = table_objet($vue);
38
-		$fond = "prive/objets/liste/$vue";
39
-		if (!find_in_path($fond."."._EXTENSION_SQUELETTES))
40
-			return _L("vue $vue introuvable pour lister les objets");
41
-	}
29
+    $res = ""; // debug
30
+    if (!is_array($contexte))
31
+        return _L('$contexte doit etre un tableau dans inc/lister_objets');
32
+
33
+    $fond = "prive/objets/liste/$vue";
34
+    if (!find_in_path($fond."."._EXTENSION_SQUELETTES)) {
35
+        // traiter les cas particuliers
36
+        include_spip('base/connect_sql');
37
+        $vue = table_objet($vue);
38
+        $fond = "prive/objets/liste/$vue";
39
+        if (!find_in_path($fond."."._EXTENSION_SQUELETTES))
40
+            return _L("vue $vue introuvable pour lister les objets");
41
+    }
42 42
 		
43 43
 	
44
-	$contexte['sinon']=($force ? $contexte['titre']:'');
44
+    $contexte['sinon']=($force ? $contexte['titre']:'');
45 45
 
46
-	$res = recuperer_fond($fond,$contexte,array('ajax'=>true));
47
-	if (_request('var_liste'))
48
-		echo var_export($contexte, true);
46
+    $res = recuperer_fond($fond,$contexte,array('ajax'=>true));
47
+    if (_request('var_liste'))
48
+        echo var_export($contexte, true);
49 49
 		
50
-	return $res;
50
+    return $res;
51 51
 }
52 52
 
53 53
 ?>
Please login to merge, or discard this patch.
ecrire/inc/csv.php 1 patch
Indentation   +66 added lines, -66 removed lines patch added patch discarded remove patch
@@ -14,76 +14,76 @@
 block discarded – undo
14 14
 
15 15
 function analyse_csv($t)
16 16
 {
17
-	$virg = substr_count($t, ',');
18
-	$pvirg = substr_count($t, ';');
19
-	$tab = substr_count($t, "\t");
20
-	if ($virg > $pvirg)
21
-		{ $sep = ','; $hs = '&#44;';}
22
-	else	{ $sep = ';'; $hs = '&#59;'; $virg = $pvirg;}
23
-	if ($tab > $virg) {$sep = "\t"; $hs = "\t";}
17
+    $virg = substr_count($t, ',');
18
+    $pvirg = substr_count($t, ';');
19
+    $tab = substr_count($t, "\t");
20
+    if ($virg > $pvirg)
21
+        { $sep = ','; $hs = '&#44;';}
22
+    else	{ $sep = ';'; $hs = '&#59;'; $virg = $pvirg;}
23
+    if ($tab > $virg) {$sep = "\t"; $hs = "\t";}
24 24
 
25
-	$t = preg_replace('/\r?\n/', "\n",
26
-				      preg_replace('/[\r\n]+/', "\n", $t));
27
-	// un separateur suivi de 3 guillemets attention !
28
-	// attention au ; suceptible d'etre confondu avec un separateur
29
-	// on substitue un # et on remplacera a la fin
30
-	$t = preg_replace("/([\n$sep])\"\"\"/",'\\1"&#34#',$t);
31
-	$t = str_replace('""','&#34#',$t);
32
-	preg_match_all('/"[^"]*"/', $t, $r);
33
-	foreach($r[0] as $cell)
34
-		$t = str_replace($cell,
35
-			str_replace($sep, $hs,
36
-				str_replace("\n", "<br />",
37
-					    substr($cell,1,-1))),
38
-			$t);
39
-	list($entete, $corps) = explode("\n",$t,2);
40
-	$caption = '';
41
-	// sauter la ligne de tete formee seulement de separateurs
42
-	if (substr_count($entete, $sep) == strlen($entete)) {
43
-		list($entete, $corps) = explode("\n",$corps,2);
44
-	}
45
-	// si une seule colonne, en faire le titre
46
-	if (preg_match("/^([^$sep]+)$sep+\$/", $entete, $l)) {
47
-			$caption = "\n||" .  $l[1] . "|";
48
-			list($entete, $corps) = explode("\n",$corps,2);
49
-	}
50
-	// si premiere colonne vide, le raccourci doit quand meme produire <th...
51
-	if ($entete[0] == $sep) $entete = ' ' . $entete;
25
+    $t = preg_replace('/\r?\n/', "\n",
26
+                        preg_replace('/[\r\n]+/', "\n", $t));
27
+    // un separateur suivi de 3 guillemets attention !
28
+    // attention au ; suceptible d'etre confondu avec un separateur
29
+    // on substitue un # et on remplacera a la fin
30
+    $t = preg_replace("/([\n$sep])\"\"\"/",'\\1"&#34#',$t);
31
+    $t = str_replace('""','&#34#',$t);
32
+    preg_match_all('/"[^"]*"/', $t, $r);
33
+    foreach($r[0] as $cell)
34
+        $t = str_replace($cell,
35
+            str_replace($sep, $hs,
36
+                str_replace("\n", "<br />",
37
+                        substr($cell,1,-1))),
38
+            $t);
39
+    list($entete, $corps) = explode("\n",$t,2);
40
+    $caption = '';
41
+    // sauter la ligne de tete formee seulement de separateurs
42
+    if (substr_count($entete, $sep) == strlen($entete)) {
43
+        list($entete, $corps) = explode("\n",$corps,2);
44
+    }
45
+    // si une seule colonne, en faire le titre
46
+    if (preg_match("/^([^$sep]+)$sep+\$/", $entete, $l)) {
47
+            $caption = "\n||" .  $l[1] . "|";
48
+            list($entete, $corps) = explode("\n",$corps,2);
49
+    }
50
+    // si premiere colonne vide, le raccourci doit quand meme produire <th...
51
+    if ($entete[0] == $sep) $entete = ' ' . $entete;
52 52
 
53
-	$lignes = explode("\n", $corps);
53
+    $lignes = explode("\n", $corps);
54 54
 
55
-	// retrait des lignes vides finales
56
-	while(count($lignes) > 0
57
-	AND preg_match("/^$sep*$/", $lignes[count($lignes)-1]))
58
-	  unset($lignes[count($lignes)-1]);
59
-	//  calcul du  nombre de colonne a chaque ligne
60
-	$nbcols = array();
61
-	$max = $mil = substr_count($entete, $sep);
62
-	foreach($lignes as $k=>$v) {
63
-	  if ($max <> ($nbcols[$k]= substr_count($v, $sep))) {
64
-	    if ($max > $nbcols[$k])
65
-	      $mil = $nbcols[$k];
66
-	    else { $mil = $max; $max = $nbcols[$k];}
67
-	  }
68
-	}
69
-	// Si pas le meme nombre, cadrer au nombre max
70
-	if ($mil <> $max)
71
-	  foreach($nbcols as $k=>$v) {
72
-	    if ($v < $max) $lignes[$k].= str_repeat($sep, $max-$v);
73
-	    }
74
-	// et retirer les colonnes integralement vides
75
-	while(true) {
76
-	  $nbcols =  ($entete[strlen($entete)-1]===$sep);
77
-	  foreach($lignes as $v) $nbcols &= ($v[strlen($v)-1]===$sep);
78
-	  if (!$nbcols) break;
79
-	  $entete = substr($entete,0,-1);
80
-	  foreach($lignes as $k=>$v) $lignes[$k] = substr($v,0,-1);
81
-	}
55
+    // retrait des lignes vides finales
56
+    while(count($lignes) > 0
57
+    AND preg_match("/^$sep*$/", $lignes[count($lignes)-1]))
58
+        unset($lignes[count($lignes)-1]);
59
+    //  calcul du  nombre de colonne a chaque ligne
60
+    $nbcols = array();
61
+    $max = $mil = substr_count($entete, $sep);
62
+    foreach($lignes as $k=>$v) {
63
+        if ($max <> ($nbcols[$k]= substr_count($v, $sep))) {
64
+        if ($max > $nbcols[$k])
65
+            $mil = $nbcols[$k];
66
+        else { $mil = $max; $max = $nbcols[$k];}
67
+        }
68
+    }
69
+    // Si pas le meme nombre, cadrer au nombre max
70
+    if ($mil <> $max)
71
+        foreach($nbcols as $k=>$v) {
72
+        if ($v < $max) $lignes[$k].= str_repeat($sep, $max-$v);
73
+        }
74
+    // et retirer les colonnes integralement vides
75
+    while(true) {
76
+        $nbcols =  ($entete[strlen($entete)-1]===$sep);
77
+        foreach($lignes as $v) $nbcols &= ($v[strlen($v)-1]===$sep);
78
+        if (!$nbcols) break;
79
+        $entete = substr($entete,0,-1);
80
+        foreach($lignes as $k=>$v) $lignes[$k] = substr($v,0,-1);
81
+    }
82 82
 
83
-	foreach($lignes as &$l) {
84
-		$l = explode($sep, $l);
85
-	}
86
-	return array(explode($sep, $entete), $lignes);
83
+    foreach($lignes as &$l) {
84
+        $l = explode($sep, $l);
85
+    }
86
+    return array(explode($sep, $entete), $lignes);
87 87
 }
88 88
 
89 89
 
Please login to merge, or discard this patch.
ecrire/inc/lien_court.php 1 patch
Indentation   +6 added lines, -6 removed lines patch added patch discarded remove patch
@@ -20,14 +20,14 @@
 block discarded – undo
20 20
  * http://zoumzamzouilam/truc/chose/machin..."
21 21
  */
22 22
 function inc_lien_court($url) {
23
-	$long_url = defined('_MAX_LONG_URL') ? _MAX_LONG_URL : 40;
24
-	$coupe_url = defined('_MAX_COUPE_URL') ? _MAX_COUPE_URL : 35;
23
+    $long_url = defined('_MAX_LONG_URL') ? _MAX_LONG_URL : 40;
24
+    $coupe_url = defined('_MAX_COUPE_URL') ? _MAX_COUPE_URL : 35;
25 25
 
26
-	if (strlen($url)>$long_url) {
27
-		$url = substr($url,0,$coupe_url).'...';
28
-	}
26
+    if (strlen($url)>$long_url) {
27
+        $url = substr($url,0,$coupe_url).'...';
28
+    }
29 29
 
30
-	return $url;
30
+    return $url;
31 31
 }
32 32
 
33 33
 ?>
34 34
\ No newline at end of file
Please login to merge, or discard this patch.