[SPIP] v3.2.1-->v3.2.3
[lhc/web/www.git] / www / plugins-dist / compresseur / compresseur_fonctions.php
index c0ba42b..e23ed9f 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2013                                                *
+ *  Copyright (c) 2001-2019                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
 
 /**
  * Fonctions et filtres du compresseur
- * 
+ *
  * @package SPIP\Compresseur\Fonctions
  */
-if (!defined("_ECRIRE_INC_VERSION")) return;
+if (!defined('_ECRIRE_INC_VERSION')) {
+       return;
+}
+$GLOBALS['spip_matrice']['compresseur_embarquer_images_css'] = 'inc/compresseur_embarquer.php';
 
 /**
  * Minifier un fichier JS ou CSS
- * 
+ *
  * Si la source est un chemin, on retourne un chemin avec le contenu minifié
  * dans _DIR_VAR/cache_$format/
  * Si c'est un flux on le renvoit compacté
@@ -28,47 +31,55 @@ if (!defined("_ECRIRE_INC_VERSION")) return;
  * @param string $source
  *     Contenu à minifier ou chemin vers un fichier dont on veut minifier le contenu
  * @param string $format
- *     Format de la source (js|css). 
+ *     Format de la source (js|css).
  * @return string
  *     - Contenu minifié (si la source est un contenu)
  *     - Chemin vers un fichier ayant le contenu minifié (si source est un fichier)
  */
 function minifier($source, $format = null) {
-       if (!$format AND preg_match(',\.(js|css)$,', $source, $r))
+       if (!$format and preg_match(',\.(js|css)$,', $source, $r)) {
                $format = $r[1];
+       }
        include_spip('inc/compresseur_minifier');
-       if (!function_exists($minifier = 'minifier_'.$format))
+       if (!function_exists($minifier = 'minifier_' . $format)) {
                return $source;
+       }
 
        // Si on n'importe pas, est-ce un fichier ?
        if (!preg_match(',[\s{}],', $source)
-       AND preg_match(',\.'.$format.'$,i', $source, $r)
-       AND file_exists($source)) {
+               and preg_match(',\.' . $format . '$,i', $source, $r)
+               and file_exists($source)
+       ) {
                // si c'est une css, il faut reecrire les url en absolu
-       if ($format=='css')
-               $source = url_absolue_css($source);
+               if ($format == 'css') {
+                       $source = url_absolue_css($source);
+               }
 
-               $f = basename($source,'.'.$format);
-               $f = sous_repertoire (_DIR_VAR, 'cache-'.$format)
-               . preg_replace(",(.*?)(_rtl|_ltr)?$,","\\1-minify-"
-               . substr(md5("$source-minify"), 0,4) . "\\2", $f, 1)
-               . '.' . $format;
+               $f = basename($source, '.' . $format);
+               $f = sous_repertoire(_DIR_VAR, 'cache-' . $format)
+                       . preg_replace(',(.*?)(_rtl|_ltr)?$,', "\\1-minify-"
+                               . substr(md5("$source-minify"), 0, 4) . "\\2", $f, 1)
+                       . '.' . $format;
 
                if ((@filemtime($f) > @filemtime($source))
-               AND (!defined('_VAR_MODE') OR _VAR_MODE != 'recalcul'))
+                       and (!defined('_VAR_MODE') or _VAR_MODE != 'recalcul')
+               ) {
                        return $f;
+               }
 
-               if (!lire_fichier($source, $contenu))
+               if (!lire_fichier($source, $contenu)) {
                        return $source;
+               }
 
                // traiter le contenu
                $contenu = $minifier($contenu);
 
                // ecrire le fichier destination, en cas d'echec renvoyer la source
-               if (ecrire_fichier($f, $contenu, true))
+               if (ecrire_fichier($f, $contenu, true)) {
                        return $f;
-               else
+               } else {
                        return $source;
+               }
        }
 
        // Sinon simple minification de contenu
@@ -79,24 +90,24 @@ function minifier($source, $format = null) {
  * Synonyme historique de minifier, pour compatibilite
  *
  * @deprecated Utiliser minifier()
- * 
+ *
  * @param string $source
  * @param string $format
  * @return string
  */
-function compacte($source, $format = null){
+function compacte($source, $format = null) {
        return minifier($source, $format);
 }
 
 /**
  * Compacte les éléments CSS et JS d'un <head> HTML
- * 
+ *
  * Cette fonction vérifie les réglages du site et traite le compactage
  * des css et/ou js d'un <head>
- * 
+ *
  * Un fichier .gz est crée pour chaque, qui peut etre utilisé par apache
  * et lui éviter de recompresser à chaque hit, avec les directives suivantes :
- * 
+ *
  * <IfModule mod_gzip.c>
  * mod_gzip_on                   Yes
  * mod_gzip_can_negotiate        Yes
@@ -106,21 +117,24 @@ function compacte($source, $format = null){
  * </IfModule>
  *
  * @see compacte_head_files()
- * 
+ *
  * @param string $flux
  *     Partie de contenu du head HTML
  * @return string
  *     Partie de contenu du head HTML
  */
-function compacte_head($flux){
+function compacte_head($flux) {
        include_spip('inc/compresseur');
-       if (!defined('_INTERDIRE_COMPACTE_HEAD')){
+       if (!defined('_INTERDIRE_COMPACTE_HEAD')) {
                // dans l'espace prive on compacte toujours, c'est concu pour
-               if ((!test_espace_prive() AND $GLOBALS['meta']['auto_compress_css'] == 'oui') OR (test_espace_prive() AND !defined('_INTERDIRE_COMPACTE_HEAD_ECRIRE')))
-                       $flux = compacte_head_files($flux,'css');
-               if ((!test_espace_prive() AND $GLOBALS['meta']['auto_compress_js'] == 'oui') OR (test_espace_prive() AND !defined('_INTERDIRE_COMPACTE_HEAD_ECRIRE')))
-                       $flux = compacte_head_files($flux,'js');
+               if ((!test_espace_prive() and $GLOBALS['meta']['auto_compress_css'] == 'oui') or (test_espace_prive() and !defined('_INTERDIRE_COMPACTE_HEAD_ECRIRE'))) {
+                       $flux = compacte_head_files($flux, 'css');
+               }
+               if ((!test_espace_prive() and $GLOBALS['meta']['auto_compress_js'] == 'oui') or (test_espace_prive() and !defined('_INTERDIRE_COMPACTE_HEAD_ECRIRE'))) {
+                       $flux = compacte_head_files($flux, 'js');
+               }
        }
+
        return $flux;
 }
 
@@ -128,11 +142,11 @@ function compacte_head($flux){
  * Embarquer sous forme URI Scheme un fichier
  *
  * Une URI Scheme est de la forme data:xxx/yyy;base64,....
- * 
+ *
  * Experimental
  *
- * @filtre embarque_fichier
- * 
+ * @filtre
+ *
  * @staticvar array $mime
  *     Couples (extension de fichier => type myme)
  * @param string $src
@@ -145,27 +159,37 @@ function compacte_head($flux){
  *     URI Scheme du fichier si la compression est faite,
  *     URL du fichier sinon (la source)
  */
-function filtre_embarque_fichier ($src, $base="", $maxsize = 4096) {
+function filtre_embarque_fichier($src, $base = '', $maxsize = 4096) {
        static $mime = array();
-       $extension = substr(strrchr($src,'.'),1);
+       $extension = substr(strrchr($src, '.'), 1);
        $filename = $base . $src;
-       #var_dump("$base:$src:$filename");
 
        if (!file_exists($filename)
-               OR filesize($filename)>$maxsize
-               OR !lire_fichier($filename, $contenu))
+               or filesize($filename) > $maxsize
+               or !lire_fichier($filename, $contenu)
+       ) {
                return $src;
+       }
 
-       if (!isset($mime[$extension]))
-               $mime[$extension] = sql_getfetsel('mime_type','spip_types_documents','extension='.sql_quote($extension));
+       if (!isset($mime[$extension])) {
+               if (isset($GLOBALS['tables_mime']) and isset($GLOBALS['tables_mime'][$extension])) {
+                       $mime[$extension] = $GLOBALS['tables_mime'][$extension];
+               }
+       }
+       if (!isset($mime[$extension])) {
+               if (!function_exists('sql_getfetsel')) {
+                       include_spip('base/abstract_sql');
+               }
+               $mime[$extension] = sql_getfetsel('mime_type', 'spip_types_documents', 'extension=' . sql_quote($extension));
+       }
 
        $base64 = base64_encode($contenu);
-       $encoded = 'data:'.$mime[$extension].';base64,'.$base64;
-       #var_dump($encoded);
+       $encoded = 'data:' . $mime[$extension] . ';base64,' . $base64;
 
        return $encoded;
 }
 
+
 /**
  * Embarquer le 'src' d'une balise html en URI Scheme
  *
@@ -178,11 +202,11 @@ function filtre_embarque_fichier ($src, $base="", $maxsize = 4096) {
  * @return string
  *     Code HTML de l'image, avec la source en URI Scheme si cela a été possible.
  */
-function filtre_embarque_src ($img, $maxsize = 4096){
-       $src = extraire_attribut($img,'src');
-       if ($src2=filtre_embarque_fichier($src, "", $maxsize) AND $src2!= $src) {
+function filtre_embarque_src($img, $maxsize = 4096) {
+       $src = extraire_attribut($img, 'src');
+       if ($src2 = filtre_embarque_fichier($src, '', $maxsize) and $src2 != $src) {
                $img = inserer_attribut($img, 'src', $src2);
        }
+
        return $img;
 }
-?>