3 * Gestion de l'action teleporter
5 * @plugin SVP pour SPIP
7 * @package SPIP\SVP\Actions
12 * Téléporter et déballer un composant
14 * @param string $methode
16 * @param string $source
17 * URL source du composant
19 * Chemin du répertoire où déballer le composant. Inclus le dernier segment
20 * @param array $options
24 * String : texte d'une erreur
25 * true si l'opération est correctement réalisée
27 function action_teleporter_composant_dist($methode,$source,$dest,$options=array()){
29 # Si definie a '', le chargeur est interdit ; mais on n'aurait de toutes
30 # facons jamais pu venir ici avec toutes les securisations faites :^)
31 if (!_DIR_PLUGINS_AUTO
) die('jamais');
33 // verifier que la methode est connue
34 if (!$teleporter = charger_fonction($methode,"teleporter",true)){
35 spip_log("Methode $methode inconnue pour teleporter $source vers $dest","teleport"._LOG_ERREUR
);
36 return _T('svp:erreur_teleporter_methode_inconue',array('methode' => $methode));
39 if (!$dest = teleporter_verifier_destination($d = $dest)){
40 spip_log("Rerpertoire $d non accessible pour teleporter $source vers $d","teleport"._LOG_ERREUR
);
41 return _T('svp:erreur_teleporter_destination_erreur',array('dir' => $d));
42 #$texte = "<p>"._T('plugin_erreur_droit1',array('dest'=>$dest))."</p>"
43 # . "<p>"._T('plugin_erreur_droit2').aide('install0')."</p>";
46 # destination temporaire des fichiers si besoin
47 $options['dir_tmp'] = sous_repertoire(_DIR_CACHE
, 'chargeur');
49 return $teleporter($methode,$source,$dest,$options);
54 * Vérifier et préparer l'arborescence jusqu'au répertoire parent
58 * false en cas d'échec
59 * Chemin du répertoire sinon
61 function teleporter_verifier_destination($dest){
62 $dest = rtrim($dest,"/");
63 $final = basename($dest);
64 $base = dirname($dest);
66 // on cree tout le chemin jusqu'a dest non inclus
67 while (!is_dir($base)){
68 $create[] = basename($base);
69 $base = dirname($base);
71 while (count($create)){
72 if (!is_writable($base))
74 $base = sous_repertoire($base,array_pop($create));
79 if (!is_writable($base))
82 return $base."/$final";
86 * Déplace un répertoire pour libérer l'emplacement.
88 * Si le répertoire donné existe, le déplace dans un répertoire de backup.
89 * Si ce backup existe déjà, il est supprimé auparavant.
90 * Retourne le nouveau chemin du répertoire.
93 * Chemin du répertoire à déplacer
95 * Nouveau chemin du répertoire s'il existait,
98 function teleporter_nettoyer_vieille_version($dest){
101 $dir = dirname($dest);
102 $base = basename($dest);
103 $old="$dir/.$base.bck";
105 supprimer_repertoire($old);