From 774437d3196878388e294a3833a73e900000b5e4 Mon Sep 17 00:00:00 2001 From: polo Date: Tue, 23 Dec 2025 15:20:48 +0100 Subject: =?UTF-8?q?choix=20dur=C3=A9e=20stockage=20e-mails,=20relation=20e?= =?UTF-8?q?ntit=C3=A9s=20Email=20<=3D>=20NodeData?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/model/entities/Email.php | 30 ++++++++++++++++++++++++------ 1 file changed, 24 insertions(+), 6 deletions(-) (limited to 'src/model/entities/Email.php') diff --git a/src/model/entities/Email.php b/src/model/entities/Email.php index c66625f..d54b3cc 100644 --- a/src/model/entities/Email.php +++ b/src/model/entities/Email.php @@ -12,8 +12,8 @@ use Doctrine\ORM\Mapping as ORM; class Email { // en mois - const LEGAL_RETENTION_PERIOD = 36; // 3 ans, justification = prospection, durée "glissante", date de suppression remise à jour à chaque nouvel e-mail - const LEGAL_RETENTION_PERIOD_SENSITIVE = 60; // 5 ans pour données sensibles ou litige, durée de preuve légale, durée non glissante + const DEFAULT_RETENTION_PERIOD = 36; // 3 ans, justification = prospection, durée "glissante", date de suppression remise à jour à chaque nouvel e-mail + const DEFAULT_RETENTION_PERIOD_SENSITIVE = 60; // 5 ans pour données sensibles ou litige, durée de preuve légale, durée non glissante #[ORM\Id] #[ORM\GeneratedValue] @@ -48,13 +48,18 @@ class Email #[ORM\Column(type: 'datetime', nullable: true)] private ?\DateTime $is_sensitive_since; - public function __construct(string $sender_name, string $sender_address, string $recipient, string $content, bool $sensitive = false){ + #[ORM\ManyToOne(targetEntity: NodeData::class)] + #[ORM\JoinColumn(name: "node_data_id", referencedColumnName: "id_node_data", nullable: true)] + private ?NodeData $node_data; + + public function __construct(string $sender_name, string $sender_address, string $recipient, string $content, NodeData $node_data, bool $sensitive = false){ $this->sender_name = strtolower($sender_name); $this->sender_address = strtolower($sender_address); $this->recipient = strtolower($recipient); $this->content = $content; $this->date_time = new \DateTime; $this->last_contact_date = new \DateTime; + $this->node_data = $node_data; $this->makeSensitive($sensitive); } @@ -108,10 +113,23 @@ 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 { - return $this->is_sensitive // oui durée 5 ans, non durée 3 ans "glissante" - ? (clone $this->is_sensitive_since)->modify('+ ' . (string)self::LEGAL_RETENTION_PERIOD_SENSITIVE . ' month') // erreur si vrai mais sans date (pas censé arriver) - : (clone $this->last_contact_date)->modify('+ ' . (string)self::LEGAL_RETENTION_PERIOD . ' month'); + // deux tests: + // => 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); + + $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) + + return $date->modify('+ ' . (string)$period . ' month'); } } \ No newline at end of file -- cgit v1.2.3