[SPIP][PLUGINS] v3.0-->v3.2
[lhc/web/www.git] / www / plugins-dist / svp / teleporter / http.php
index 3da9589..ada3d45 100644 (file)
@@ -1,15 +1,18 @@
 <?php
 /**
- * Gestion du téléporteur HTTP. 
+ * Gestion du téléporteur HTTP.
  *
  * @plugin SVP pour SPIP
  * @license GPL
  * @package SPIP\SVP\Teleporteur
  */
+
 /**
  * Téléporter et déballer un composant HTTP
- * 
+ *
+ * @uses  teleporter_http_recuperer_source()
+ * @uses  teleporter_nettoyer_vieille_version()
+ *
  * @param string $methode
  *   Méthode de téléportation : http|git|svn|...
  * @param string $source
  *     Texte d'erreur si erreur,
  *     True si l'opération réussie.
  */
-function teleporter_http_dist($methode,$source,$dest,$options=array()){
+function teleporter_http_dist($methode, $source, $dest, $options = array()) {
 
        $tmp = $options['dir_tmp'];
        # on ne se contente pas du basename qui peut etre un simple v1
        # exemple de l'url http://nodeload.github.com/kbjr/Git.php/zipball/v0.1.1-rc
-       $fichier = $tmp . (basename($dest)."-".substr(md5($source),0,8)."-".basename($source));
+       $fichier = $tmp . (basename($dest) . "-" . substr(md5($source), 0, 8) . "-" . basename($source));
 
-       $res = teleporter_http_recuperer_source($source,$fichier);
-       if (!is_array($res))
+       $res = teleporter_http_recuperer_source($source, $fichier);
+       if (!is_array($res)) {
                return $res;
+       }
 
-       list($fichier,$extension) = $res;
-       if (!$deballe = charger_fonction("http_deballe_".preg_replace(",\W,","_",$extension),"teleporter",true))
-               return _T('svp:erreur_teleporter_format_archive_non_supporte',array('extension' => $extension));
+       list($fichier, $extension) = $res;
+       if (!$deballe = charger_fonction("http_deballe_" . preg_replace(",\W,", "_", $extension), "teleporter", true)) {
+               return _T('svp:erreur_teleporter_format_archive_non_supporte', array('extension' => $extension));
+       }
 
        $old = teleporter_nettoyer_vieille_version($dest);
 
-       if (!$target = $deballe($fichier, $dest, $tmp)){
+       if (!$target = $deballe($fichier, $dest, $tmp)) {
                // retablir l'ancien sinon
-               if ($old)
-                       rename($old,$dest);
-               return _T('svp:erreur_teleporter_echec_deballage_archive',array('fichier' => $fichier));
+               if ($old) {
+                       rename($old, $dest);
+               }
+
+               return _T('svp:erreur_teleporter_echec_deballage_archive', array('fichier' => $fichier));
        }
 
        return true;
@@ -55,6 +62,8 @@ function teleporter_http_dist($methode,$source,$dest,$options=array()){
 /**
  * Récupérer la source et détecter son extension
  *
+ * @uses  teleporter_http_extension()
+ *
  * @param string $source
  *     URL de la source HTTP
  * @param string $dest_tmp
@@ -63,11 +72,12 @@ function teleporter_http_dist($methode,$source,$dest,$options=array()){
  *     - Texte d'erreur si une erreur survient,
  *     - Liste sinon (répertoire de destination temporaire, extension du fichier source)
  */
-function teleporter_http_recuperer_source($source,$dest_tmp){
+function teleporter_http_recuperer_source($source, $dest_tmp) {
 
        # securite : ici on repart toujours d'une source neuve
-       if (file_exists($dest_tmp))
+       if (file_exists($dest_tmp)) {
                spip_unlink($dest_tmp);
+       }
 
        $extension = "";
 
@@ -78,66 +88,77 @@ function teleporter_http_recuperer_source($source,$dest_tmp){
        include_spip('inc/distant');
        $head = recuperer_page($source, false, true, 0);
 
-       if (preg_match(",^Content-Type:\s*?(.*)$,Uims",$head,$m)
-               AND include_spip('base/typedoc')){
+       if (preg_match(",^Content-Type:\s*?(.*)$,Uims", $head, $m)
+               and include_spip('base/typedoc')
+       ) {
                $mime = $m[1];
                // passer du mime a l'extension !
-               if ($e = array_search($mime,$GLOBALS['tables_mime']))
+               if ($e = array_search($mime, $GLOBALS['tables_mime'])) {
                        $extension = $e;
+               }
        }
 
        if (!$extension
-         // cas des extensions incertaines car mime-type ambigu
-         OR in_array($extension,array('bin','gz'))){
-               if (preg_match(",^Content-Disposition:\s*attachment;\s*filename=(.*)['\"]?$,Uims",$head,$m)
-                 AND $e=teleporter_http_extension($m[1])){
+               // cas des extensions incertaines car mime-type ambigu
+               or in_array($extension, array('bin', 'gz'))
+       ) {
+               if (preg_match(",^Content-Disposition:\s*attachment;\s*filename=(.*)['\"]?$,Uims", $head, $m)
+                       and $e = teleporter_http_extension($m[1])
+               ) {
                        $extension = $e;
                }
                // au cas ou, si le content-type n'est pas la
                // mais que l'extension est explicite
-               else{
+               else {
                        $extension = teleporter_http_extension($source);
                }
        }
 
        # format de fichier inconnu
        if (!$extension) {
-               spip_log("Type de fichier inconnu pour la source $source","teleport"._LOG_ERREUR);
-               return _T('svp:erreur_teleporter_type_fichier_inconnu',array('source' => $source));
+               spip_log("Type de fichier inconnu pour la source $source", "teleport" . _LOG_ERREUR);
+
+               return _T('svp:erreur_teleporter_type_fichier_inconnu', array('source' => $source));
        }
 
-       $dest_tmp = preg_replace(";\.[\w]{2,3}$;i","",$dest_tmp).".$extension";
+       $dest_tmp = preg_replace(";\.[\w]{2,3}$;i", "", $dest_tmp) . ".$extension";
 
-       if (!defined('_SVP_PAQUET_MAX_SIZE')) define('_SVP_PAQUET_MAX_SIZE', 67108864); // 64Mo
+       if (!defined('_SVP_PAQUET_MAX_SIZE')) {
+               define('_SVP_PAQUET_MAX_SIZE', 67108864);
+       } // 64Mo
        include_spip('inc/distant');
-       $dest_tmp = copie_locale($source,'force',$dest_tmp,_SVP_PAQUET_MAX_SIZE);
+       $dest_tmp = copie_locale($source, 'force', $dest_tmp, _SVP_PAQUET_MAX_SIZE);
        if (!$dest_tmp
-         OR !file_exists($dest_tmp = _DIR_RACINE . $dest_tmp)) {
-               spip_log("Chargement impossible de la source $source","teleport"._LOG_ERREUR);
-               return _T('svp:erreur_teleporter_chargement_source_impossible',array('source' => $source));
+               or !file_exists($dest_tmp = _DIR_RACINE . $dest_tmp)
+       ) {
+               spip_log("Chargement impossible de la source $source", "teleport" . _LOG_ERREUR);
+
+               return _T('svp:erreur_teleporter_chargement_source_impossible', array('source' => $source));
        }
 
-       return array($dest_tmp,$extension);
+       return array($dest_tmp, $extension);
 }
 
 /**
- * Retrouve l'extension d'un fichier 
+ * Retrouve l'extension d'un fichier
  *
  * @note
  *     Retourne tgz pour un fichier .tar.gz
- * 
+ *
  * @param string $file
  *     Chemin du fichier
  * @return string
  *     Extension du fichier, sinon vide
-**/
-function teleporter_http_extension($file){
+ **/
+function teleporter_http_extension($file) {
        $e = pathinfo($file, PATHINFO_EXTENSION);
 
        // cas particuliers : redresser .tar.gz
-       if ($e=='gz'
-               AND preg_match(',tar\.gz,i',$file))
+       if ($e == 'gz'
+               and preg_match(',tar\.gz,i', $file)
+       ) {
                $e = 'tgz';
+       }
 
        return $e;
 }
@@ -149,35 +170,43 @@ function teleporter_http_extension($file){
  *     Liste de chemin de fichiers
  * @return string
  *     Chemin commun entre tous les fichiers
-**/
-function http_deballe_recherche_racine($list){
+ **/
+function http_deballe_recherche_racine($list) {
        // on cherche la plus longue racine commune a tous les fichiers
        // pour l'enlever au deballage
        $max_n = 999999;
        $paths = array();
-       foreach($list as $n) {
+       foreach ($list as $n) {
                $p = array();
-               foreach(explode('/', $n['filename']) as $n => $x) {
-                       if ($n>$max_n)
+               foreach (explode('/', $n['filename']) as $n => $x) {
+                       if ($n > $max_n) {
                                continue;
-                       $sofar = join('/',$p);
+                       }
+                       $sofar = join('/', $p);
+                       if (!isset($paths[$n])) {
+                               $paths[$n] = array();
+                       }
+                       if (!isset($paths[$n][$sofar])) {
+                               $paths[$n][$sofar] = 0;
+                       }
                        $paths[$n][$sofar]++;
                        $p[] = $x;
                }
-               $max_n = min($n,$max_n);
+               $max_n = min($n, $max_n);
        }
 
        $total = $paths[0][''];
        $i = 0;
        while (isset($paths[$i])
-       AND count($paths[$i]) <= 1
-       AND array_values($paths[$i]) == array($total))
+               and count($paths[$i]) <= 1
+               and array_values($paths[$i]) == array($total)) {
                $i++;
+       }
 
        $racine = '';
-       if ($i){
-               $racine = array_keys($paths[$i-1]);
-               $racine = array_pop($racine).'/';
+       if ($i) {
+               $racine = array_keys($paths[$i - 1]);
+               $racine = array_pop($racine) . '/';
        }
 
        return $racine;