diff options
| author | polo <ordipolo@gmx.fr> | 2025-12-23 15:20:48 +0100 |
|---|---|---|
| committer | polo <ordipolo@gmx.fr> | 2025-12-23 15:20:48 +0100 |
| commit | 774437d3196878388e294a3833a73e900000b5e4 (patch) | |
| tree | 5d8449beee8b492fe553460f3c4f1027e8cd123a | |
| parent | 8393acd0366ee3408db103ba29e8686bab127f42 (diff) | |
| download | cms-774437d3196878388e294a3833a73e900000b5e4.tar.gz cms-774437d3196878388e294a3833a73e900000b5e4.tar.bz2 cms-774437d3196878388e294a3833a73e900000b5e4.zip | |
choix durée stockage e-mails, relation entités Email <=> NodeData
| -rw-r--r-- | public/js/form.js | 30 | ||||
| -rw-r--r-- | src/EmailService.php | 2 | ||||
| -rw-r--r-- | src/controller/ContactFormController.php | 9 | ||||
| -rw-r--r-- | src/model/Model.php | 16 | ||||
| -rw-r--r-- | src/model/entities/Email.php | 30 | ||||
| -rw-r--r-- | src/model/entities/NodeData.php | 38 | ||||
| -rw-r--r-- | src/router.php | 3 | ||||
| -rw-r--r-- | src/view/FormBuilder.php | 3 | ||||
| -rw-r--r-- | src/view/templates/form.php | 2 | ||||
| -rw-r--r-- | src/view/templates/form_admin.php | 10 |
10 files changed, 98 insertions, 45 deletions
diff --git a/public/js/form.js b/public/js/form.js index 7cee970..d8849c8 100644 --- a/public/js/form.js +++ b/public/js/form.js | |||
| @@ -58,6 +58,36 @@ function keepEmails(block_id){ | |||
| 58 | console.error('Erreur:', error); | 58 | console.error('Erreur:', error); |
| 59 | }); | 59 | }); |
| 60 | } | 60 | } |
| 61 | function setEmailsRetentionPeriod(block_id){ | ||
| 62 | const form = document.getElementById('retention_period_' + block_id); | ||
| 63 | if(!form){ | ||
| 64 | return; | ||
| 65 | } | ||
| 66 | |||
| 67 | fetch('index.php?action=set_retention_period', { | ||
| 68 | method: 'POST', | ||
| 69 | headers: { | ||
| 70 | 'Content-Type': 'application/json' | ||
| 71 | }, | ||
| 72 | body: JSON.stringify({ | ||
| 73 | id: block_id, | ||
| 74 | months: form.value | ||
| 75 | }) | ||
| 76 | }) | ||
| 77 | .then(response => response.json()) | ||
| 78 | .then(data => { | ||
| 79 | if(data.success){ | ||
| 80 | form.value = data.months; | ||
| 81 | console.log(data.months + " mois"); | ||
| 82 | } | ||
| 83 | else{ | ||
| 84 | toastNotify("Erreur, le réglage n'a pas été enregistré par le serveur."); | ||
| 85 | } | ||
| 86 | }) | ||
| 87 | .catch(error => { | ||
| 88 | console.error('Erreur:', error); | ||
| 89 | }); | ||
| 90 | } | ||
| 61 | 91 | ||
| 62 | function checkCase(id){ | 92 | function checkCase(id){ |
| 63 | if(document.getElementById('email_address_' + id).value.match('[A-Z]')){ | 93 | if(document.getElementById('email_address_' + id).value.match('[A-Z]')){ |
diff --git a/src/EmailService.php b/src/EmailService.php index 5d1b2eb..c6d97b4 100644 --- a/src/EmailService.php +++ b/src/EmailService.php | |||
| @@ -67,7 +67,7 @@ class EmailService | |||
| 67 | 67 | ||
| 68 | // copie en BDD | 68 | // copie en BDD |
| 69 | if(!$test_email && ($form_data->getData()['keep_emails'] ?? self::KEEP_EMAILS_DEFAULT)){ | 69 | if(!$test_email && ($form_data->getData()['keep_emails'] ?? self::KEEP_EMAILS_DEFAULT)){ |
| 70 | $db_email = new Email($name, $email, Config::$email_dest, $message); | 70 | $db_email = new Email($name, $email, Config::$email_dest, $message, $form_data); |
| 71 | $entityManager->persist($db_email); | 71 | $entityManager->persist($db_email); |
| 72 | self::updateLastContactDate($entityManager, $email); | 72 | self::updateLastContactDate($entityManager, $email); |
| 73 | $entityManager->flush(); | 73 | $entityManager->flush(); |
diff --git a/src/controller/ContactFormController.php b/src/controller/ContactFormController.php index 243740f..0724401 100644 --- a/src/controller/ContactFormController.php +++ b/src/controller/ContactFormController.php | |||
| @@ -16,6 +16,15 @@ class ContactFormController | |||
| 16 | echo json_encode(['success' => true, 'checked' => $json['checked']]); | 16 | echo json_encode(['success' => true, 'checked' => $json['checked']]); |
| 17 | die; | 17 | die; |
| 18 | } | 18 | } |
| 19 | static public function setEmailsRetentionPeriod(EntityManager $entityManager, array $json): void | ||
| 20 | { | ||
| 21 | $form_data = $entityManager->find('App\Entity\NodeData', $json['id']); | ||
| 22 | $form_data->updateData('retention_period', (int)$json['months']); | ||
| 23 | $entityManager->persist($form_data); | ||
| 24 | $entityManager->flush(); | ||
| 25 | echo json_encode(['success' => true, 'months' => $json['months']]); | ||
| 26 | die; | ||
| 27 | } | ||
| 19 | static public function setEmailParam(EntityManager $entityManager, array $json): void | 28 | static public function setEmailParam(EntityManager $entityManager, array $json): void |
| 20 | { | 29 | { |
| 21 | $form = new FormValidation($json, 'email_params'); | 30 | $form = new FormValidation($json, 'email_params'); |
diff --git a/src/model/Model.php b/src/model/Model.php index de391ff..1054d57 100644 --- a/src/model/Model.php +++ b/src/model/Model.php | |||
| @@ -65,8 +65,11 @@ class Model | |||
| 65 | } | 65 | } |
| 66 | 66 | ||
| 67 | // emails | 67 | // emails |
| 68 | if($parent_block->getName() === 'show_emails'){ | 68 | if($parent_block->getName() === 'show_emails'){ // show_emails = l'afficheur |
| 69 | $parent_block->getNodeData()->setEmails($this->getAllEmails()); | 69 | $parent_block->getNodeData()->setEmails($this->getAllEmails()); |
| 70 | |||
| 71 | // aller chercher les formulaires à la place (future MAJ?) | ||
| 72 | //$this->getFormsNodeData(); | ||
| 70 | } | 73 | } |
| 71 | } | 74 | } |
| 72 | } | 75 | } |
| @@ -294,8 +297,15 @@ class Model | |||
| 294 | $dql = 'SELECT e FROM App\Entity\Email e'; | 297 | $dql = 'SELECT e FROM App\Entity\Email e'; |
| 295 | return $this->entityManager | 298 | return $this->entityManager |
| 296 | ->createQuery($dql) | 299 | ->createQuery($dql) |
| 297 | //->setParameter('page', $this->page) | ||
| 298 | ->getResult(); | 300 | ->getResult(); |
| 299 | } | 301 | } |
| 300 | //private function getEmails(string $sender): array | 302 | /*private function getFormsNodeData(): array |
| 303 | { | ||
| 304 | $dql = 'SELECT fd FROM App\Entity\NodeData fd WHERE node.name_node = form'; | ||
| 305 | return $this->entityManager | ||
| 306 | ->createQuery($dql) | ||
| 307 | //->setParameter('page', $this->page) | ||
| 308 | ->getResult(); | ||
| 309 | }*/ | ||
| 310 | //private function getEmailsBySender(string $sender): array | ||
| 301 | } | 311 | } |
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; | |||
| 12 | class Email | 12 | class 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 |
diff --git a/src/model/entities/NodeData.php b/src/model/entities/NodeData.php index 4c07a69..d2f10ba 100644 --- a/src/model/entities/NodeData.php +++ b/src/model/entities/NodeData.php | |||
| @@ -44,8 +44,11 @@ class NodeData | |||
| 44 | #[ORM\OneToMany(mappedBy: 'node_data', targetEntity: NodeDataAsset::class, cascade: ['persist', 'remove'])] | 44 | #[ORM\OneToMany(mappedBy: 'node_data', targetEntity: NodeDataAsset::class, cascade: ['persist', 'remove'])] |
| 45 | private Collection $nda_collection; | 45 | private Collection $nda_collection; |
| 46 | 46 | ||
| 47 | /*#[ORM\OneToMany(mappedBy: 'node_data', targetEntity: Email::class, cascade: ['persist', 'remove'])] // => noeud "form", inutilisé et conflit avec le tableau $emails | ||
| 48 | private Collection $emails;*/ | ||
| 49 | |||
| 47 | private int $nb_pages = 1; | 50 | private int $nb_pages = 1; |
| 48 | private array $emails = []; // noeud show_emails uniquement | 51 | private array $emails = []; // => noeud "show_emails" |
| 49 | 52 | ||
| 50 | public function __construct(array $data, Node $node, Collection $nda_collection = new ArrayCollection, ?string $presentation = null, ?bool $chrono_order = null) | 53 | public function __construct(array $data, Node $node, Collection $nda_collection = new ArrayCollection, ?string $presentation = null, ?bool $chrono_order = null) |
| 51 | { | 54 | { |
| @@ -70,7 +73,7 @@ class NodeData | |||
| 70 | { | 73 | { |
| 71 | $this->data = $data; | 74 | $this->data = $data; |
| 72 | }*/ | 75 | }*/ |
| 73 | public function updateData(string $key, string|bool|array $value = ''): void | 76 | public function updateData(string $key, string|int|bool|array $value = ''): void |
| 74 | { | 77 | { |
| 75 | if($value !== ''){ | 78 | if($value !== ''){ |
| 76 | $this->data[$key] = $value; | 79 | $this->data[$key] = $value; |
| @@ -153,39 +156,12 @@ class NodeData | |||
| 153 | } | 156 | } |
| 154 | return $nda->getAsset() ?? null; | 157 | return $nda->getAsset() ?? null; |
| 155 | } | 158 | } |
| 156 | /*public function addNodeDataAsset(NodeDataAsset $nda): self | ||
| 157 | { | ||
| 158 | if(!$this->nda_collection->contains($nda)){ // sécurité contrainte UNIQUE | ||
| 159 | $this->nda_collection->add($nda); | ||
| 160 | } | ||
| 161 | return $this; | ||
| 162 | }*/ | ||
| 163 | /*public function removeNodeDataAsset(NodeDataAsset $nda): self // inutile on peut faire: $node_data->getNodeDataAssets()->removeElement($nda); | ||
| 164 | { | ||
| 165 | $this->nda_collection->removeElement($nda); | ||
| 166 | // pas de synchro dans NodeDataAsset, les champs de cette table ne sont pas nullables | ||
| 167 | return $this; | ||
| 168 | }*/ | ||
| 169 | |||
| 170 | // LE setter, sélectionne l'asset à utiliser en remplaçant l'entrée dans NodeDataAsset en fonction du rôle | ||
| 171 | // à mettre théoriquement dans une classe metier dans "service" | ||
| 172 | /*public function replaceAssetForRole(string $role, Asset $asset): void | ||
| 173 | { | ||
| 174 | foreach($this->nda_collection as $nda){ | ||
| 175 | if($nda->getRole() === $role){ | ||
| 176 | $this->removeNodeDataAsset($nda); | ||
| 177 | break; | ||
| 178 | } | ||
| 179 | } | ||
| 180 | $this->new_nda = new NodeDataAsset($this, $asset, $role); | ||
| 181 | $this->addNodeDataAsset($this->new_nda); | ||
| 182 | }*/ | ||
| 183 | 159 | ||
| 184 | public function getEmails(): array | 160 | public function getEmails(): array // appelée dans ShowEmailsBuilder |
| 185 | { | 161 | { |
| 186 | return $this->emails; | 162 | return $this->emails; |
| 187 | } | 163 | } |
| 188 | public function setEmails(array $emails): void | 164 | public function setEmails(array $emails): void // appelée dans Model |
| 189 | { | 165 | { |
| 190 | $this->emails = $emails; | 166 | $this->emails = $emails; |
| 191 | } | 167 | } |
diff --git a/src/router.php b/src/router.php index 228fae2..7348f2b 100644 --- a/src/router.php +++ b/src/router.php | |||
| @@ -115,6 +115,9 @@ elseif($request->getMethod() === 'POST'){ | |||
| 115 | elseif($_GET['action'] === 'keep_emails'){ | 115 | elseif($_GET['action'] === 'keep_emails'){ |
| 116 | ContactFormController::keepEmails($entityManager, $json); | 116 | ContactFormController::keepEmails($entityManager, $json); |
| 117 | } | 117 | } |
| 118 | elseif($_GET['action'] === 'set_retention_period'){ | ||
| 119 | ContactFormController::setEmailsRetentionPeriod($entityManager, $json); | ||
| 120 | } | ||
| 118 | elseif($_GET['action'] === 'set_email_param'){ | 121 | elseif($_GET['action'] === 'set_email_param'){ |
| 119 | ContactFormController::setEmailParam($entityManager, $json); | 122 | ContactFormController::setEmailParam($entityManager, $json); |
| 120 | } | 123 | } |
diff --git a/src/view/FormBuilder.php b/src/view/FormBuilder.php index 7952357..e2389b0 100644 --- a/src/view/FormBuilder.php +++ b/src/view/FormBuilder.php | |||
| @@ -24,10 +24,13 @@ class FormBuilder extends AbstractBuilder | |||
| 24 | $_SESSION['captcha'] = self::$captcha->getSolution(); | 24 | $_SESSION['captcha'] = self::$captcha->getSolution(); |
| 25 | } | 25 | } |
| 26 | 26 | ||
| 27 | // données stockées en vrac dans du JSON et récupérées avec extract => changer ça un jour | ||
| 27 | $smtp_host = $smtp_host ?? Config::$smtp_host; | 28 | $smtp_host = $smtp_host ?? Config::$smtp_host; |
| 28 | $smtp_secure = $smtp_secure ?? Config::$smtp_secure; | 29 | $smtp_secure = $smtp_secure ?? Config::$smtp_secure; |
| 29 | $smtp_username = $smtp_username ?? Config::$smtp_username; | 30 | $smtp_username = $smtp_username ?? Config::$smtp_username; |
| 30 | $email_dest = $email_dest ?? Config::$email_dest; | 31 | $email_dest = $email_dest ?? Config::$email_dest; |
| 32 | $keep_emails = (bool)$keep_emails ?? false; // (bool) est inutile mais plus clair | ||
| 33 | $retention_period = (int)($retention_period ?? App\Entity\Email::DEFAULT_RETENTION_PERIOD); // (int) est nécessaire à cause du stockage JSON | ||
| 31 | 34 | ||
| 32 | $admin_content = ''; | 35 | $admin_content = ''; |
| 33 | if($_SESSION['admin']) | 36 | if($_SESSION['admin']) |
diff --git a/src/view/templates/form.php b/src/view/templates/form.php index 54dcd02..8fb4735 100644 --- a/src/view/templates/form.php +++ b/src/view/templates/form.php | |||
| @@ -31,7 +31,7 @@ | |||
| 31 | <p class="send_email_success_<?= $node->getNodeData()->getId() ?> full_width_column"></p> | 31 | <p class="send_email_success_<?= $node->getNodeData()->getId() ?> full_width_column"></p> |
| 32 | </div> | 32 | </div> |
| 33 | <p id="form_warning_<?= $node->getNodeData()->getId() ?>" class="form_warning <?= ($keep_emails ?? false) ? '' : 'hidden' ?>"><i> | 33 | <p id="form_warning_<?= $node->getNodeData()->getId() ?>" class="form_warning <?= ($keep_emails ?? false) ? '' : 'hidden' ?>"><i> |
| 34 | Une copie de votre e-mail (nom, adresse et message) sera conservée dans notre base de données dans le but de pouvoir répondre à votre demande et et éventuellement dans un but de prospection. Ces données seront traitées automatiquement par notre serveur et conservées pendant au maximum 3 ans à compter de votre dernier message.<br> | 34 | Une copie de votre e-mail (nom, adresse et message) sera conservée dans notre base de données dans le but de pouvoir répondre à votre demande et éventuellement dans un but de prospection. Ces données seront traitées automatiquement par notre serveur et conservées pendant au maximum 3 ans à compter de votre dernier message.<br> |
| 35 | Ce traitement repose sur votre consentement. Vous pouvez consulter, modifier ou supprimer vos données en base de données sur simple demande. | 35 | Ce traitement repose sur votre consentement. Vous pouvez consulter, modifier ou supprimer vos données en base de données sur simple demande. |
| 36 | </i></p> | 36 | </i></p> |
| 37 | </section> \ No newline at end of file | 37 | </section> \ No newline at end of file |
diff --git a/src/view/templates/form_admin.php b/src/view/templates/form_admin.php index bf281b5..457f770 100644 --- a/src/view/templates/form_admin.php +++ b/src/view/templates/form_admin.php | |||
| @@ -6,9 +6,13 @@ declare(strict_types=1); | |||
| 6 | <div class="admin_form"> | 6 | <div class="admin_form"> |
| 7 | <p> | 7 | <p> |
| 8 | <label for="keep_emails_<?= $node->getNodeData()->getId() ?>">Conserver les e-mails en base de données</label> | 8 | <label for="keep_emails_<?= $node->getNodeData()->getId() ?>">Conserver les e-mails en base de données</label> |
| 9 | <input type="checkbox" id="keep_emails_<?= $node->getNodeData()->getId() ?>" <?= ($keep_emails ?? false) ? 'checked' : '' ?> onclick="keepEmails(<?= $node->getNodeData()->getId() ?>)"> | 9 | <input type="checkbox" id="keep_emails_<?= $node->getNodeData()->getId() ?>" <?= $keep_emails ? 'checked' : '' ?> onclick="keepEmails(<?= $node->getNodeData()->getId() ?>)"> |
| 10 | </p> | 10 | </p> |
| 11 | <p><i>Notez que ces enregistrements sont des données personnelles et sont concernés par le RGPD.</i></p> | 11 | <p><i>Notez que ces enregistrements sont des données personnelles et sont concernés par le RGPD.</i></p> |
| 12 | <p> | ||
| 13 | <label for="retention_period_<?= $node->getNodeData()->getId() ?>">Durée de conservation (en mois)</label> | ||
| 14 | <input type="number" id="retention_period_<?= $node->getNodeData()->getId() ?>" min="0" value="<?= $retention_period ?>" size="2" onchange="setEmailsRetentionPeriod(<?= $node->getNodeData()->getId() ?>)"> | ||
| 15 | </p> | ||
| 12 | <p><a href="<?= new URL(['page' => 'emails']) ?>"><button>Consulter les e-mails enregistrés</button></a></p> | 16 | <p><a href="<?= new URL(['page' => 'emails']) ?>"><button>Consulter les e-mails enregistrés</button></a></p> |
| 13 | </div> | 17 | </div> |
| 14 | <div class="admin_form"> | 18 | <div class="admin_form"> |
| @@ -23,8 +27,8 @@ declare(strict_types=1); | |||
| 23 | <label for="smtp_secure_<?= $node->getNodeData()->getId() ?>">Chiffrement</label> | 27 | <label for="smtp_secure_<?= $node->getNodeData()->getId() ?>">Chiffrement</label> |
| 24 | <select id="smtp_secure_<?= $node->getNodeData()->getId() ?>" name="smtp_secure" onchange="setEmailParam('smtp_secure', <?= $node->getNodeData()->getId() ?>)"> | 28 | <select id="smtp_secure_<?= $node->getNodeData()->getId() ?>" name="smtp_secure" onchange="setEmailParam('smtp_secure', <?= $node->getNodeData()->getId() ?>)"> |
| 25 | <option value="plain_text" >Aucun (port 25)</option> | 29 | <option value="plain_text" >Aucun (port 25)</option> |
| 26 | <option value="tls" <?php echo htmlspecialchars($smtp_secure) === 'tls' ? 'selected' : '' ?>>StartTLS (port 587)</option> | 30 | <option value="tls" <?= htmlspecialchars($smtp_secure) === 'tls' ? 'selected' : '' ?>>StartTLS (port 587)</option> |
| 27 | <option value="ssl" <?php echo htmlspecialchars($smtp_secure) === 'ssl' ? 'selected' : '' ?>>SSL (port 465)</option> | 31 | <option value="ssl" <?= htmlspecialchars($smtp_secure) === 'ssl' ? 'selected' : '' ?>>SSL (port 465)</option> |
| 28 | </select> | 32 | </select> |
| 29 | <input type="hidden" id="smtp_secure_hidden_<?= $node->getNodeData()->getId() ?>" value=""> | 33 | <input type="hidden" id="smtp_secure_hidden_<?= $node->getNodeData()->getId() ?>" value=""> |
| 30 | </p> | 34 | </p> |
