'' * --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 (!_DIR_PLUGINS_AUTO) die('jamais'); // 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 = "

"._T('plugin_erreur_droit1',array('dest'=>$dest))."

" # . "

"._T('plugin_erreur_droit2').aide('install0')."

"; } # 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; }