From: Johan Cwiklinski Date: Wed, 11 Oct 2023 17:07:35 +0000 (+0200) Subject: Handle old filenames for non members dynamic files; refs #1697 X-Git-Tag: 1.0.0rc2~3 X-Git-Url: https://git.agnieray.net/?a=commitdiff_plain;h=30e21335e420f22b8c35b56a847ebcbe7e58d7a0;p=galette.git Handle old filenames for non members dynamic files; refs #1697 --- diff --git a/galette/lib/Galette/Controllers/Crud/DynamicFieldsController.php b/galette/lib/Galette/Controllers/Crud/DynamicFieldsController.php index 757d91d34..367d3138e 100644 --- a/galette/lib/Galette/Controllers/Crud/DynamicFieldsController.php +++ b/galette/lib/Galette/Controllers/Crud/DynamicFieldsController.php @@ -307,10 +307,11 @@ class DynamicFieldsController extends CrudController ->disableAllDeps() ->enableDep('dynamics') ->load($id); + $fields = $object->getDynamicFields()->getFields(); + $field = $fields[$fid] ?? null; $denied = null; if (!$object->canShow($this->login)) { - $fields = $object->getDynamicFields()->getFields(); if (!isset($fields[$fid])) { //field does not exist or access is forbidden $denied = true; @@ -341,42 +342,11 @@ class DynamicFieldsController extends CrudController ); } - if ($form_name === 'adh') { - $form_name = 'member'; //for compatibility with existing files - } - $filename = str_replace( - [ - '%form', - '%oid', - '%fid', - '%pos' - ], - [ - $form_name, - $id, - $fid, - $pos - ], - '%form_%oid_field_%fid_value_%pos' - ); + $filename = $field->getFileName($id, $pos); if ($form_name !== 'member' && !file_exists(GALETTE_FILES_PATH . $filename)) { //handle old names for non adh dynamic files - $test_filename = str_replace( - [ - '%form', - '%oid', - '%fid', - '%pos' - ], - [ - 'member', - $id, - $fid, - $pos - ], - '%form_%oid_field_%fid_value_%pos' - ); + $test_filename = $field->getFileName($id, $pos, 'member'); if (file_exists(GALETTE_FILES_PATH . $test_filename)) { //rename old file to new name rename(GALETTE_FILES_PATH . $test_filename, GALETTE_FILES_PATH . $filename); diff --git a/galette/lib/Galette/DynamicFields/File.php b/galette/lib/Galette/DynamicFields/File.php index 2bddce820..f80459566 100644 --- a/galette/lib/Galette/DynamicFields/File.php +++ b/galette/lib/Galette/DynamicFields/File.php @@ -76,4 +76,39 @@ class File extends DynamicField { return self::FILE; } + + /** + * Get file name on disk + * + * @param int $id Object (member, contribution, ...) ID + * @param int $pos Position in the list of values (0-based) + * @param string|null $prefix Forced file prefix; if null (defaults) form_name wil be used verbatim + * + * @return string + */ + public function getFileName(int $id, int $pos, string $prefix = null): string + { + $form_name = $this->form; + if ($form_name === 'adh') { + $form_name = 'member'; //fix expected filename + } + + $filename = str_replace( + [ + '%form', + '%oid', + '%fid', + '%pos' + ], + [ + $prefix ?? $form_name, + $id, + $this->id, + $pos + ], + '%form_%oid_field_%fid_value_%pos' + ); + + return $filename; + } } diff --git a/galette/lib/Galette/Features/Dynamics.php b/galette/lib/Galette/Features/Dynamics.php index f3ad50578..607e7d4bd 100644 --- a/galette/lib/Galette/Features/Dynamics.php +++ b/galette/lib/Galette/Features/Dynamics.php @@ -36,6 +36,7 @@ namespace Galette\Features; +use Galette\Entity\Adherent; use Galette\Repository\DynamicFieldsSet; use Throwable; use Analog\Analog; @@ -164,14 +165,14 @@ trait Dynamics } else { if ($fields[$field_id] instanceof File) { //delete checkbox - $filename = sprintf( - 'member_%d_field_%d_value_%d', - $this->id, - $field_id, - $val_index - ); + $filename = $fields[$field_id]->getFileName($this->id, $val_index); if (file_exists(GALETTE_FILES_PATH . $filename)) { unlink(GALETTE_FILES_PATH . $filename); + } elseif (!$this instanceof Adherent) { + $test_filename = $fields[$field_id]->getFileName($this->id, $val_index, 'member'); + if (file_exists(GALETTE_FILES_PATH . $test_filename)) { + unlink(GALETTE_FILES_PATH . $test_filename); + } } $this->dynamics->setValue($this->id, $field_id, $val_index, ''); } else {