source: spip-zone/_plugins_/migrateur/dev-by-http/class/Serveur/Action/SyncDirectory.php @ 88462

Last change on this file since 88462 was 88462, checked in by marcimat@…, 5 years ago

Indiquer aussi l'estimation du volume à télécharger sur les logs destination.

File size: 2.0 KB
Line 
1<?php
2
3namespace SPIP\Migrateur\Serveur\Action;
4
5
6class SyncDirectory extends ActionBase {
7
8
9        public function run($data = null) {
10
11                if (empty($data['directory'])) {
12                        return "Pas de répertoire indiqué";
13                }
14
15                $directory = $data['directory'];
16                $this->log_run("Sync Directory : <em>$directory</em>");
17
18                // liste des fichiers déjà présents sur le site de destination
19                $remoteFiles = array();
20                if (isset($data['files']) and is_array($data['files'])) {
21                        $remoteFiles = $data['files'];
22                }
23
24                $n = count($remoteFiles);
25                $this->log("$n fichier(s) sur le site destination");
26
27                // calcul de la liste des fichiers locaux
28                spip_timer('list');
29                $localFiles = $this->source->getFileList($directory);
30                $t = spip_timer('list');
31                $n = count($localFiles);
32                if ($n > 1) {
33                        $this->log("$n fichiers locaux. ($t)");
34                } else {
35                        $this->log("$n fichier local. ($t)");
36                }
37
38                // calcul des différences !
39                spip_timer('diff');
40                $newFiles = $updatedFiles = $deletedFiles = array();
41                $totalSize = 0;
42
43                //compare local and remote file list to get updated files
44                foreach ($localFiles as $filePath => $info) {
45                        if (empty($remoteFiles[$filePath])) {
46                                $newFiles[$filePath] = $info;
47                                $totalSize += $info[0];
48                        } elseif ($remoteFiles[$filePath] != $info) {
49                                $updatedFiles[$filePath] = $info;
50                                $totalSize += $info[0];
51                        }
52                        unset($remoteFiles[$filePath]);
53                }
54                // logiquement, ce qui reste, c'est les fichiers supprimés
55                $deletedFiles = $remoteFiles;
56
57                $t = spip_timer('diff');
58                $this->log("- " . count($newFiles) . " nouveaux fichiers");
59                $this->log("- " . count($updatedFiles) . " à mettre à jour");
60                $this->log("- " . count($deletedFiles) . " à supprimer");
61
62                include_spip('inc/filtres');
63                $this->log("Estimation des transferts : " . taille_en_octets($totalSize));
64
65                return array(
66                        'directory' => $directory,
67                        'downloadSize' => taille_en_octets($totalSize),
68                        'files' => array(
69                                'new' => $newFiles,
70                                'updated' => $updatedFiles,
71                                'deleted' => $deletedFiles,
72                        ),
73                );
74        }
75
76}
Note: See TracBrowser for help on using the repository browser.