Browse Source

Une fonction archiveEnEcriture(), le pendant de archiveEnLecture()

pull/4422/head
Matthieu Marcillaud 10 months ago
parent
commit
e1570ceceb
  1. 24
      src/AbstractArchiver.php
  2. 66
      src/SpipArchiver.php

24
src/AbstractArchiver.php

@ -182,6 +182,30 @@ abstract class AbstractArchiver implements ArchiverInterface
return $archive;
}
/**
* Vérifier que le fichier d'archive est accessible en écriture.
*/
protected function archiveEnEcriture(): ?ArchiveInterface {
$archive = null;
if (file_exists($this->fichier_archive)) {
if (!is_writable($this->fichier_archive)) {
$this->setErreur(4);
} else {
if ('' === $this->mode_compression) {
$this->mimeType();
}
$archive = $this->getArchive();
}
} else {
$this->setErreur(3);
}
return $archive;
}
/**
* Fournir un objet Archive en fonction du mode de compression.
*/

66
src/SpipArchiver.php

@ -116,37 +116,25 @@ class SpipArchiver extends AbstractArchiver implements ArchiverInterface
* {@inheritDoc}
*/
public function retirer(array $fichiers = []): bool {
if (file_exists($this->fichier_archive)) {
if (is_writable($this->fichier_archive)) {
if ('' !== $this->mimeType()) {
$archive = $this->getArchive();
if ($archive) {
if (1 === $archive->open($this->fichier_archive, 'edition')) {
// Vérifier qu'on ne cherche pas à vider l'archive
$reste = $this->informer();
$fichiers_restants = array_column($reste['fichiers'], 'filename');
if (0 === count(array_diff($fichiers_restants, $fichiers))) {
$this->setErreur(8);
return false;
}
$retour = $archive->remove($fichiers);
$archive->close();
}
$this->setErreur(0);
return true;
}
$archive = $this->archiveEnEcriture();
if ($archive) {
if (1 === $archive->open($this->fichier_archive, 'edition')) {
// Vérifier qu'on ne cherche pas à vider l'archive
$reste = $this->informer();
$fichiers_restants = array_column($reste['fichiers'], 'filename');
if (0 === count(array_diff($fichiers_restants, $fichiers))) {
$this->setErreur(8);
return false;
}
$retour = $archive->remove($fichiers);
$archive->close();
}
$this->setErreur(0);
$this->setErreur(4);
return false;
return true;
}
$this->setErreur(3);
return false;
}
@ -154,29 +142,17 @@ class SpipArchiver extends AbstractArchiver implements ArchiverInterface
* {@inheritDoc}
*/
public function commenter(string $texte = ''): bool {
if (file_exists($this->fichier_archive)) {
if (is_writable($this->fichier_archive)) {
if ('' !== $this->mimeType()) {
$archive = $this->getArchive();
if ($archive) {
if (1 === $archive->open($this->fichier_archive, 'edition')) {
$archive->setComment($texte);
$archive->close();
}
$this->setErreur(0);
return true;
}
}
$archive = $this->archiveEnEcriture();
if ($archive) {
if (1 === $archive->open($this->fichier_archive, 'edition')) {
$archive->setComment($texte);
$archive->close();
}
$this->setErreur(0);
$this->setErreur(4);
return false;
return true;
}
$this->setErreur(3);
return false;
}
}

Loading…
Cancel
Save