aboutsummaryrefslogtreecommitdiff
path: root/src/model/entities/Email.php
diff options
context:
space:
mode:
Diffstat (limited to 'src/model/entities/Email.php')
-rw-r--r--src/model/entities/Email.php30
1 files changed, 24 insertions, 6 deletions
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;
12class Email 12class Email
13{ 13{
14 // en mois 14 // en mois
15 const LEGAL_RETENTION_PERIOD = 36; // 3 ans, justification = prospection, durée "glissante", date de suppression remise à jour à chaque nouvel e-mail 15 const DEFAULT_RETENTION_PERIOD = 36; // 3 ans, justification = prospection, durée "glissante", date de suppression remise à jour à chaque nouvel e-mail
16 const LEGAL_RETENTION_PERIOD_SENSITIVE = 60; // 5 ans pour données sensibles ou litige, durée de preuve légale, durée non glissante 16 const DEFAULT_RETENTION_PERIOD_SENSITIVE = 60; // 5 ans pour données sensibles ou litige, durée de preuve légale, durée non glissante
17 17
18 #[ORM\Id] 18 #[ORM\Id]
19 #[ORM\GeneratedValue] 19 #[ORM\GeneratedValue]
@@ -48,13 +48,18 @@ class Email
48 #[ORM\Column(type: 'datetime', nullable: true)] 48 #[ORM\Column(type: 'datetime', nullable: true)]
49 private ?\DateTime $is_sensitive_since; 49 private ?\DateTime $is_sensitive_since;
50 50
51 public function __construct(string $sender_name, string $sender_address, string $recipient, string $content, bool $sensitive = false){ 51 #[ORM\ManyToOne(targetEntity: NodeData::class)]
52 #[ORM\JoinColumn(name: "node_data_id", referencedColumnName: "id_node_data", nullable: true)]
53 private ?NodeData $node_data;
54
55 public function __construct(string $sender_name, string $sender_address, string $recipient, string $content, NodeData $node_data, bool $sensitive = false){
52 $this->sender_name = strtolower($sender_name); 56 $this->sender_name = strtolower($sender_name);
53 $this->sender_address = strtolower($sender_address); 57 $this->sender_address = strtolower($sender_address);
54 $this->recipient = strtolower($recipient); 58 $this->recipient = strtolower($recipient);
55 $this->content = $content; 59 $this->content = $content;
56 $this->date_time = new \DateTime; 60 $this->date_time = new \DateTime;
57 $this->last_contact_date = new \DateTime; 61 $this->last_contact_date = new \DateTime;
62 $this->node_data = $node_data;
58 $this->makeSensitive($sensitive); 63 $this->makeSensitive($sensitive);
59 } 64 }
60 65
@@ -108,10 +113,23 @@ class Email
108 $this->last_contact_date = new \DateTime; 113 $this->last_contact_date = new \DateTime;
109 } 114 }
110 115
116 // la durée de conservation $period est propre au bloc formulaire (NodeData)
117 // la date de dernier contact
111 public function getDeletionDate(): \DateTime 118 public function getDeletionDate(): \DateTime
112 { 119 {
113 return $this->is_sensitive // oui durée 5 ans, non durée 3 ans "glissante" 120 // deux tests:
114 ? (clone $this->is_sensitive_since)->modify('+ ' . (string)self::LEGAL_RETENTION_PERIOD_SENSITIVE . ' month') // erreur si vrai mais sans date (pas censé arriver) 121 // => e-mail associé à un formulaire?
115 : (clone $this->last_contact_date)->modify('+ ' . (string)self::LEGAL_RETENTION_PERIOD . ' month'); 122 // => ce formulaire dispose d'une durée de stockage spécifique?
123 $period = $this->node_data === null ? null : ($this->node_data->getData()['retention_period'] ?? null);
124
125 $period = (int)$period;
126 if($period === null || $period <= 0){
127 $period = $this->is_sensitive ? self::DEFAULT_RETENTION_PERIOD_SENSITIVE : self::DEFAULT_RETENTION_PERIOD;
128 }
129
130 $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"
131 // erreur si "sensible" mais sans date disponible (pas censé arriver)
132
133 return $date->modify('+ ' . (string)$period . ' month');
116 } 134 }
117} \ No newline at end of file 135} \ No newline at end of file