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
---
src/controller/ContactFormController.php | 2 +-
src/model/entities/Email.php | 20 ++++++++------------
src/view/FormBuilder.php | 8 +++++++-
src/view/templates/form_admin.php | 9 +++++++--
4 files changed, 23 insertions(+), 16 deletions(-)
(limited to 'src')
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(= $node->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