123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- <?php
- /**
- * Gestion de l'action teleporter
- *
- * @plugin SVP pour SPIP
- * @license GPL
- * @package SPIP\SVP\Actions
- */
-
- /**
- * Téléporter et déballer un composant
- *
- * @param string $methode
- * http|git|svn|...
- * @param string $source
- * URL source du composant
- * @param string $dest
- * Chemin du répertoire où déballer le composant. Inclus le dernier segment
- * @param array $options
- * revision => ''
- * --ignore-externals
- * @return bool|string
- * String : texte d'une erreur
- * true si l'opération est correctement réalisée
- */
- function action_teleporter_composant_dist($methode,$source,$dest,$options=array()){
- # Si definie a '', le chargeur est interdit ; mais on n'aurait de toutes
- # facons jamais pu venir ici avec toutes les securisations faites :^)
- if (!preg_match(','.substr(_DIR_LIB,0,-1).',',$dest) && !_DIR_PLUGINS_AUTO)
- die('Vous ne pouvez pas télécharger, absence de _DIR_PLUGINS_AUTO');
- // verifier que la methode est connue
- if (!$teleporter = charger_fonction($methode,"teleporter",true)){
- spip_log("Methode $methode inconnue pour teleporter $source vers $dest","teleport"._LOG_ERREUR);
- return _T('svp:erreur_teleporter_methode_inconue',array('methode' => $methode));
- }
- if (!$dest = teleporter_verifier_destination($d = $dest)){
- spip_log("Rerpertoire $d non accessible pour teleporter $source vers $d","teleport"._LOG_ERREUR);
- return _T('svp:erreur_teleporter_destination_erreur',array('dir' => $d));
- #$texte = "<p>"._T('plugin_erreur_droit1',array('dest'=>$dest))."</p>"
- # . "<p>"._T('plugin_erreur_droit2').aide('install0')."</p>";
- }
- # destination temporaire des fichiers si besoin
- $options['dir_tmp'] = sous_repertoire(_DIR_CACHE, 'chargeur');
- return $teleporter($methode,$source,$dest,$options);
- }
- /**
- * Vérifier et préparer l'arborescence jusqu'au répertoire parent
- *
- * @param string $dest
- * @return bool|string
- * false en cas d'échec
- * Chemin du répertoire sinon
- */
- function teleporter_verifier_destination($dest){
- $dest = rtrim($dest,"/");
- $final = basename($dest);
- $base = dirname($dest);
- $create = array();
- // on cree tout le chemin jusqu'a dest non inclus
- while (!is_dir($base)){
- $create[] = basename($base);
- $base = dirname($base);
- }
- while (count($create)){
- if (!is_writable($base))
- return false;
- $base = sous_repertoire($base,array_pop($create));
- if (!$base)
- return false;
- }
- if (!is_writable($base))
- return false;
- return $base."/$final";
- }
- /**
- * Déplace un répertoire pour libérer l'emplacement.
- *
- * Si le répertoire donné existe, le déplace dans un répertoire de backup.
- * Si ce backup existe déjà, il est supprimé auparavant.
- * Retourne le nouveau chemin du répertoire.
- *
- * @param string $dest
- * Chemin du répertoire à déplacer
- * @return string
- * Nouveau chemin du répertoire s'il existait,
- * Chaîne vide sinon
- **/
- function teleporter_nettoyer_vieille_version($dest){
- $old = "";
- if (is_dir($dest)){
- $dir = dirname($dest);
- $base = basename($dest);
- $old="$dir/.$base.bck";
- if (is_dir($old))
- supprimer_repertoire($old);
- rename($dest,$old);
- }
- return $old;
- }
|