Browse Source

Création d'une fonction protégée pour scanner les dossiers.

Ajout d'une propriété protégée pour définir les fichiers ignorés.
Prise en compte dans la fonction emballer()
pull/4422/head
Eric Lupinacci 10 months ago
parent
commit
1e965174c1
  1. 36
      src/AbstractArchiver.php
  2. 22
      src/SpipArchiver.php

36
src/AbstractArchiver.php

@ -2,6 +2,11 @@
namespace Spip\Archiver;
use FilesystemIterator;
use CallbackFilterIterator;
use RecursiveDirectoryIterator;
use RecursiveIteratorIterator;
/**
* {@inheritDoc}
* Gestion des erreurs.
@ -39,6 +44,9 @@ abstract class AbstractArchiver implements ArchiverInterface
8 => 'tentative_de_vidage_du_fichier',
];
/** @var array liste des fichiers à exclure de l'archive */
protected array $fichiers_ignores = ['.ok'];
/**
* Constructeur de base.
*
@ -260,4 +268,32 @@ abstract class AbstractArchiver implements ArchiverInterface
return $racine;
}
protected function listerFichiers(array $chemins): array {
$fichiers = [];
foreach ($chemins as $chemin) {
if (is_dir($chemin)) {
$iterateur_dossier = new CallbackFilterIterator(
new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($chemin, FilesystemIterator::SKIP_DOTS),
),
function ($current, $key, $iterator) {
if (in_array($current->getFilename(), $this->fichiers_ignores)) {
return false;
}
return true;
}
);
foreach ($iterateur_dossier as $fichier) {
$fichiers[] = $fichier->getPathname();
}
} else {
$fichiers[] = $chemin;
}
}
return $fichiers;
}
}

22
src/SpipArchiver.php

@ -2,9 +2,6 @@
namespace Spip\Archiver;
use RecursiveDirectoryIterator;
use RecursiveIteratorIterator;
/**
* {@inheritDoc}
* Implémentation des méthodes principales.
@ -94,23 +91,8 @@ class SpipArchiver extends AbstractArchiver implements ArchiverInterface
$retour = false;
if (1 === $archive->open($this->fichier_archive, 'creation')) {
// On établit la liste des fichiers en traitant éventuels les répertoires.
$fichiers = [];
foreach ($chemins as $chemin) {
if (is_dir($chemin)) {
$iterateur_dossier = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($chemin),
RecursiveIteratorIterator::LEAVES_ONLY
);
foreach ($iterateur_dossier as $fichier) {
if (!in_array($fichier->getFilename(), ['.', '..', '.ok'])) {
$fichiers[] = $fichier->getPathname();
}
}
} else {
$fichiers[] = $chemin;
}
}
$fichiers = $this->listerFichiers($chemins);
// On archive la liste des fichiers
$retour = $archive->compress($source, $fichiers);
$archive->close();
}

Loading…
Cancel
Save