From 79409bed093890d38cb2c60f8b6af079854cf8d2 Mon Sep 17 00:00:00 2001 From: polo Date: Tue, 23 Dec 2025 18:02:00 +0100 Subject: =?UTF-8?q?choix=20dur=C3=A9e=20stockage=20emails=20sensibles=20co?= =?UTF-8?q?nfigurables=20aussi,=20bug=20dur=C3=A9e=20emails=20sensibles?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/js/form.js | 5 +++-- src/controller/ContactFormController.php | 2 +- src/model/entities/Email.php | 20 ++++++++------------ src/view/FormBuilder.php | 8 +++++++- src/view/templates/form_admin.php | 9 +++++++-- 5 files changed, 26 insertions(+), 18 deletions(-) diff --git a/public/js/form.js b/public/js/form.js index d8849c8..003cac4 100644 --- a/public/js/form.js +++ b/public/js/form.js @@ -58,8 +58,8 @@ function keepEmails(block_id){ console.error('Erreur:', error); }); } -function setEmailsRetentionPeriod(block_id){ - const form = document.getElementById('retention_period_' + block_id); +function setEmailsRetentionPeriod(block_id, field_name){ + const form = document.getElementById(field_name + '_' + block_id); if(!form){ return; } @@ -71,6 +71,7 @@ function setEmailsRetentionPeriod(block_id){ }, body: JSON.stringify({ id: block_id, + field: field_name, months: form.value }) }) diff --git a/src/controller/ContactFormController.php b/src/controller/ContactFormController.php index 0724401..468b732 100644 --- a/src/controller/ContactFormController.php +++ b/src/controller/ContactFormController.php @@ -19,7 +19,7 @@ class ContactFormController static public function setEmailsRetentionPeriod(EntityManager $entityManager, array $json): void { $form_data = $entityManager->find('App\Entity\NodeData', $json['id']); - $form_data->updateData('retention_period', (int)$json['months']); + $form_data->updateData($json['field'], (int)$json['months']); $entityManager->persist($form_data); $entityManager->flush(); echo json_encode(['success' => true, 'months' => $json['months']]); diff --git a/src/model/entities/Email.php b/src/model/entities/Email.php index d54b3cc..ff76653 100644 --- a/src/model/entities/Email.php +++ b/src/model/entities/Email.php @@ -113,23 +113,19 @@ class Email $this->last_contact_date = new \DateTime; } - // la durée de conservation $period est propre au bloc formulaire (NodeData) - // la date de dernier contact - public function getDeletionDate(): \DateTime + public function getDeletionDate(): \DateTime // utilise une durée de conservation $period qui est propre au bloc formulaire (à son NodeData) { - // deux tests: + // tests appliqués: // => e-mail associé à un formulaire? // => ce formulaire dispose d'une durée de stockage spécifique? - $period = $this->node_data === null ? null : ($this->node_data->getData()['retention_period'] ?? null); + // => cette donnée est un entier > 0 + $key = $this->is_sensitive ? 'retention_period_sensible' : 'retention_period'; + $period = $this->node_data ? (int)($this->node_data->getData()[$key] ?? null) : null; - $period = (int)$period; - if($period === null || $period <= 0){ - $period = $this->is_sensitive ? self::DEFAULT_RETENTION_PERIOD_SENSITIVE : self::DEFAULT_RETENTION_PERIOD; - } - - $date = $this->is_sensitive ? (clone $this->is_sensitive_since) : (clone $this->last_contact_date); // oui durée 5 ans, non durée 3 ans "glissante" - // erreur si "sensible" mais sans date disponible (pas censé arriver) + $default = $this->is_sensitive ? self::DEFAULT_RETENTION_PERIOD_SENSITIVE : self::DEFAULT_RETENTION_PERIOD; + $period = ($period === null || $period <= 0) ? $default : $period; + $date = clone ($this->is_sensitive ? $this->is_sensitive_since : $this->last_contact_date); // erreur si "sensible" mais sans date disponible (pas censé arriver) return $date->modify('+ ' . (string)$period . ' month'); } } \ No newline at end of file diff --git a/src/view/FormBuilder.php b/src/view/FormBuilder.php index e2389b0..7505510 100644 --- a/src/view/FormBuilder.php +++ b/src/view/FormBuilder.php @@ -30,7 +30,8 @@ class FormBuilder extends AbstractBuilder $smtp_username = $smtp_username ?? Config::$smtp_username; $email_dest = $email_dest ?? Config::$email_dest; $keep_emails = (bool)$keep_emails ?? false; // (bool) est inutile mais plus clair - $retention_period = (int)($retention_period ?? App\Entity\Email::DEFAULT_RETENTION_PERIOD); // (int) est nécessaire à cause du stockage JSON + $retention_period = $this->getRetentionPeriod($retention_period ?? null, App\Entity\Email::DEFAULT_RETENTION_PERIOD); + $retention_period_sensible = $this->getRetentionPeriod($retention_period_sensible ?? null, App\Entity\Email::DEFAULT_RETENTION_PERIOD_SENSITIVE); $admin_content = ''; if($_SESSION['admin']) @@ -44,4 +45,9 @@ class FormBuilder extends AbstractBuilder require self::VIEWS_PATH . $node->getName() . '.php'; $this->html = ob_get_clean(); // pas de concaténation ici, on écrase } + + private function getRetentionPeriod(mixed $period, int $default_period): int + { + return ($period === null || (int)$period <= 0) ? $default_period : (int)$period; // (int) est nécessaire à cause du stockage JSON + } } \ No newline at end of file diff --git a/src/view/templates/form_admin.php b/src/view/templates/form_admin.php index 457f770..7156374 100644 --- a/src/view/templates/form_admin.php +++ b/src/view/templates/form_admin.php @@ -9,11 +9,16 @@ declare(strict_types=1); onclick="keepEmails(getNodeData()->getId() ?>)">

Notez que ces enregistrements sont des données personnelles et sont concernés par le RGPD.

+

- +

-

+

+ + +

+

Paramètres d'envoi

-- cgit v1.2.3