->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;
);
}
- 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);
{
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;
+ }
}
namespace Galette\Features;
+use Galette\Entity\Adherent;
use Galette\Repository\DynamicFieldsSet;
use Throwable;
use Analog\Analog;
} 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 {