[SPIP] ~version 3.0.7-->3.0.10
[ptitvelo/web/www.git] / www / ecrire / inc / filtres.php
index 971b863..f1c2fc5 100644 (file)
@@ -68,11 +68,33 @@ function chercher_filtre($fonc, $default=NULL) {
        return $default;
 }
 
-// http://doc.spip.org/@appliquer_filtre
-function appliquer_filtre($arg, $filtre) {
+/**
+ * Applique un filtre
+ * 
+ * Fonction générique qui prend en argument l’objet (texte, etc) à modifier
+ * et le nom du filtre. Retrouve les arguments du filtre demandé dans les arguments
+ * transmis à cette fonction, via func_get_args().
+ *
+ * @see filtrer() Assez proche
+ * 
+ * @param string $arg
+ *     Texte sur lequel appliquer le filtre
+ * @param string $filtre
+ *     Nom du filtre a appliquer
+ * @param string $force
+ *     La fonction doit-elle retourner le texte ou rien ?
+ * @return string
+ *     Texte avec le filtre appliqué s'il a été trouvé,
+ *     Texte sans le filtre appliqué s'il n'a pas été trouvé et que $force n'a
+ *       pas été fourni,
+ *     Chaîne vide si le filtre n'a pas été trouvé et que $force a été fourni.
+**/
+function appliquer_filtre($arg, $filtre, $force=NULL) {
        $f = chercher_filtre($filtre);
-       if (!$f)
-               return ''; // ou faut-il retourner $arg inchange == filtre_identite?
+       if (!$f) {
+               if (!$force) return '';
+               else return $arg;
+       }
 
        $args = func_get_args();
        array_shift($args); // enlever $arg
@@ -1550,13 +1572,16 @@ function vider_attribut ($balise, $attribut) {
 
 /**
  * Un filtre pour determiner le nom du satut des inscrits
- * @param void $dummy
+ *
+ * @deprecated a virer en 3.1
+ *
+ * @param void|int $id
  * @param string $mode
  * @return string
  */
-function tester_config($dummy, $mode='') {
-       include_spip('action/inscrire_auteur');
-       return tester_statut_inscription($mode);
+function tester_config($id, $mode='') {
+       include_spip('inc/autoriser');
+       return autoriser('inscrireauteur', $mode, $id) ? $mode : '';
 }
 
 //
@@ -2995,10 +3020,12 @@ function produire_fond_statique($fond, $contexte=array(), $options = array(), $c
 
        // mettre a jour le fichier si il n'existe pas
        // ou trop ancien
+       // le dernier fichier produit est toujours suffixe par .last
+       // et recopie sur le fichier cible uniquement si il change
        if (!file_exists($filename)
-               OR (isset($cache['lastmodified']) AND $cache['lastmodified'] AND filemtime($filename)<$cache['lastmodified'])
-               OR (defined('_VAR_MODE') AND _VAR_MODE=='recalcul')) 
-       {
+               OR !file_exists($filename.".last")
+               OR (isset($cache['lastmodified']) AND $cache['lastmodified'] AND filemtime($filename.".last")<$cache['lastmodified'])
+               OR (defined('_VAR_MODE') AND _VAR_MODE=='recalcul')) {
                $contenu = $cache['texte'];
                // passer les urls en absolu si c'est une css
                if ($extension=="css")
@@ -3009,10 +3036,18 @@ function produire_fond_statique($fond, $contexte=array(), $options = array(), $c
                        $comment = "/* #PRODUIRE{fond=$fond";
                        foreach($contexte as $k=>$v)
                                $comment .= ",$k=$v";
-                       $comment .="} le ".date("Y-m-d H:i:s")." */\n";
+                       // pas de date dans le commentaire car sinon ca invalide le md5 et force la maj
+                       // mais on peut mettre un md5 du contenu, ce qui donne un aperu rapide si la feuille a change ou non
+                       $comment .="}\n   md5:".md5($contenu)." */\n";
                }
                // et ecrire le fichier
-               ecrire_fichier($filename,$comment.$contenu);
+               ecrire_fichier($filename.".last",$comment.$contenu);
+               // regarder si on recopie
+               if (!file_exists($filename)
+                 OR md5_file($filename)!==md5_file($filename.".last")){
+                       @copy($filename.".last",$filename);
+                       spip_clearstatcache(true,$filename); // eviter que PHP ne reserve le vieux timestamp
+               }
        }
        
        return $filename;