Changeset 62540 in spip-zone


Ignore:
Timestamp:
Jun 14, 2012, 9:04:05 AM (7 years ago)
Author:
marcimat@…
Message:

Fonction "deplacer_dossiers" pour le Futilitaire.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/fabrique/inc/futilitaire.php

    r60510 r62540  
    8080         *    'base/importer_spip_villes_donnees.gz',
    8181         * ));
    82          *
    83          * @param string $source
    84          *              Répertoire source
    85          * @param string $dest
    86          *              Répertoire destination
     82         *
    8783         * @param string|array $fichiers
    8884         *              Liste des fichiers a déplacer
     
    110106                        $dest   = $this->dir_dest   . $f;
    111107                        if (!file_exists($source)){
    112                                 $this->log("deplacer_fichiers: Fichier introuvable dans le backup : $dest");
     108                                $this->log("deplacer_fichiers: Fichier $f introuvable dans le backup : $dest");
    113109                                continue;
    114110                        }
     
    122118                }
    123119        }
     120
     121
     122
     123        /**
     124         * Deplacer une liste de dossiers/répertoires
     125         * du backup vers le nouveau plugin
     126         * et cree les repertoires manquant si besoin dans le nouveau plugin.
     127         *
     128         * Usage:
     129         * $futil->deplacer_dossiers('lib');
     130         * $futil->deplacer_dossiers(array('lib','actions'));
     131         *
     132         * @param string|array $dossiers
     133         *              Liste des fichiers a déplacer
     134         *
     135         * @return null
     136        **/
     137        public function deplacer_dossiers($dossiers) {
     138                static $dirs = array();
     139
     140                if (!$dossiers OR !$this->dir_dest OR !$this->dir_backup) {
     141                        $this->log("deplacer_dossiers: Info manquante");
     142                        return;
     143                }
     144
     145                if (!is_array($dossiers)) {
     146                        $dossiers = array($dossiers);
     147                }
     148
     149                foreach ($dossiers as $d) {
     150                        if (!$d) {
     151                                $this->log("deplacer_dossiers: Dossier vide");
     152                                continue;
     153                        }
     154                        $source = $this->dir_backup . $d;
     155                        $dest   = $this->dir_dest   . $d;
     156                        if (!is_dir($source)){
     157                                $this->log("deplacer_dossiers: Dossier $d introuvable dans le backup : $dest");
     158                                continue;
     159                        }
     160
     161                        // cree l'arborescence depuis le chemin
     162                        $this->log("deplacer_dossiers: Créer arborescence pour $d");
     163                        $this->creer_arborescence_destination($d, false);
     164
     165                        // copie recursive
     166                        // http://stackoverflow.com/a/7775949
     167                        foreach ($iterator =
     168                                        new RecursiveIteratorIterator(
     169                                                new RecursiveDirectoryIterator($source, RecursiveDirectoryIterator::SKIP_DOTS),
     170                                                        RecursiveIteratorIterator::SELF_FIRST) as $item
     171                                ) {
     172                                if ($item->isDir()) {
     173                                        if (!mkdir($dest . DIRECTORY_SEPARATOR . $iterator->getSubPathName())) {
     174                                                $this->log("deplacer_dossiers: Creation ratee de " . $iterator->getSubPathName());
     175                                        }
     176                                } else {
     177                                        if (!copy($item, $dest . DIRECTORY_SEPARATOR . $iterator->getSubPathName())) {
     178                                                $this->log("deplacer_dossiers: Creation ratee de " . $iterator->getSubPathName());
     179                                        }
     180                                }
     181                        }
     182                }
     183        }
     184
    124185
    125186
     
    136197         *              Est-ce que c'est bien cree ?
    137198        **/
    138         public function creer_arborescence_destination($chemin) {
     199        public function creer_arborescence_destination($chemin, $is_file = true) {
    139200                // repertoire de destination deja crees.
    140201                static $reps = array();
     
    145206                }
    146207
     208                // si c'est un fichier,
    147209                // on retrouve le nom du fichier et la base du chemin de destination
    148                 $dest = explode('/', $chemin);
    149                 $nom = array_pop($dest);
    150                 $chemin_dest = implode('/', $dest);
     210                if ($is_file) {
     211                        $dest = explode('/', $chemin);
     212                        $nom = array_pop($dest);
     213                        $chemin_dest = implode('/', $dest);
     214                } else {
     215                        $chemin_dest = $chemin;
     216                }
    151217
    152218                // ne pas creer systematiquement les repertoires tout de meme.
Note: See TracChangeset for help on using the changeset viewer.