From 3104104e838b7d57de49daba0178b1aefe646548 Mon Sep 17 00:00:00 2001 From: polo Date: Fri, 4 Jul 2025 10:29:45 +0200 Subject: formulaire de contact 4 --- src/controller/ajax.php | 15 +++++++++------ src/controller/ajax_admin.php | 22 ++++++++++++++-------- src/model/entities/Email.php | 4 ++-- src/model/entities/NodeData.php | 10 ++++++++-- src/view/FormBuilder.php | 22 ++++++++-------------- src/view/templates/form.php | 2 +- 6 files changed, 42 insertions(+), 33 deletions(-) (limited to 'src') diff --git a/src/controller/ajax.php b/src/controller/ajax.php index 7529fe6..8a7cb34 100644 --- a/src/controller/ajax.php +++ b/src/controller/ajax.php @@ -8,7 +8,7 @@ use PHPMailer\PHPMailer\Exception; use App\Entity\Email; // mettre ça ailleurs? -function sendEmail(bool $true_email, string $name = '', string $email = '', string $message = ''): bool +function sendEmail(string $recipient, bool $true_email, string $name = '', string $email = '', string $message = ''): bool { $mail = new PHPMailer(true); // true => exceptions $mail->CharSet = 'UTF-8'; @@ -35,7 +35,7 @@ function sendEmail(bool $true_email, string $name = '', string $email = '', stri // Expéditeur et destinataire $mail->setFrom(strtolower(Config::$email_from), Config::$email_from_name); // expéditeur - $mail->addAddress(strtolower(Config::$email_dest), Config::$email_dest_name); // destinataire + $mail->addAddress(strtolower($recipient), Config::$email_dest_name); // destinataire // Contenu $mail->isHTML(true); @@ -65,10 +65,9 @@ if($_SERVER['CONTENT_TYPE'] === 'application/json') $data = file_get_contents('php://input'); $json = json_decode($data, true); - // requêtes de tinymce ou touchant aux articles if(isset($_GET['action'])) { - // e-mail envoyé par le formulaire de contact + /* -- bloc Formulaire -- */ if($_GET['action'] === 'send_email'){ $captcha_solution = (isset($_SESSION['captcha']) && is_int($_SESSION['captcha'])) ? $_SESSION['captcha'] : 0; $captcha_try = isset($json['captcha']) ? Captcha::controlInput($json['captcha']) : 0; @@ -77,12 +76,16 @@ if($_SERVER['CONTENT_TYPE'] === 'application/json') $name = htmlspecialchars(trim($json['name'])); $email = strtolower(htmlspecialchars(trim($json['email']))); $message = htmlspecialchars(trim($json['message'])); + + // destinataire = e-mail par défaut dans config.ini OU choisi par l'utilisateur + $form_data = $entityManager->find('App\Entity\NodeData', $json['id']); + $recipient = $form_data->getData()['email'] ?? Config::$email_dest; if($captcha_try != 0 && $captcha_solution != 0 && ($captcha_try === $captcha_solution) && filter_var($email, FILTER_VALIDATE_EMAIL) && isset($json['hidden']) && empty($json['hidden']) - && sendEmail(true, $name, $email, $message)) + && sendEmail($recipient, true, $name, $email, $message)) { - $db_email = new Email(strtolower(Config::$email_from), strtolower(Config::$email_dest), $message); + $db_email = new Email(Config::$email_from, Config::$email_dest, $message); $entityManager->persist($db_email); $entityManager->flush(); echo json_encode(['success' => true]); diff --git a/src/controller/ajax_admin.php b/src/controller/ajax_admin.php index 944e84b..2318ac1 100644 --- a/src/controller/ajax_admin.php +++ b/src/controller/ajax_admin.php @@ -197,7 +197,6 @@ if($_SERVER['CONTENT_TYPE'] === 'application/json') $data = file_get_contents('php://input'); $json = json_decode($data, true); - // requêtes de tinymce ou touchant aux articles if(isset($_GET['action'])) { if($_GET['action'] === 'editor_submit' && isset($json['id']) && isset($json['content'])) @@ -356,13 +355,17 @@ if($_SERVER['CONTENT_TYPE'] === 'application/json') die; } - // config formulaire - /*elseif($_GET['action'] === 'recipient_email'){ + + /* -- bloc Formulaire -- */ + elseif($_GET['action'] === 'recipient_email'){ $email = htmlspecialchars(trim($json['email'])); - if(filter_var($email, FILTER_VALIDATE_EMAIL) && isset($json['hidden']) && empty($json['hidden'])){ + if((filter_var($email, FILTER_VALIDATE_EMAIL) // nouvel e-mail + || ($json['email'] === '' && !empty(Config::$email_dest))) // e-mail par défaut + && isset($json['hidden']) && empty($json['hidden'])) + { $form_data = $entityManager->find('App\Entity\NodeData', $json['id']); - $form_data->updateData('email', $json['email']); + $form_data->updateData('email', $email); $entityManager->persist($form_data); $entityManager->flush(); @@ -372,10 +375,13 @@ if($_SERVER['CONTENT_TYPE'] === 'application/json') echo json_encode(['success' => false]); } die; - }*/ - // e-mail de test + } elseif($_GET['action'] === 'test_email'){ - if(sendEmail(false, 'nom du visiteur', 'adresse@du_visiteur.fr', "TEST d'un envoi d'e-mail depuis le site web")){ + // destinataire = e-mail par défaut dans config.ini OU choisi par l'utilisateur + $form_data = $entityManager->find('App\Entity\NodeData', $json['id']); + $recipient = $form_data->getData()['email'] ?? Config::$email_dest; + + if(sendEmail($recipient, false, 'nom du visiteur', 'adresse@du_visiteur.fr', "TEST d'un envoi d'e-mail depuis le site web")){ echo json_encode(['success' => true]); } else{ diff --git a/src/model/entities/Email.php b/src/model/entities/Email.php index c6c2a29..9d87f1f 100644 --- a/src/model/entities/Email.php +++ b/src/model/entities/Email.php @@ -33,8 +33,8 @@ class Email private ?\DateTime $date_time ; public function __construct(string $sender, string $recipient, string $content){ - $this->sender = $sender; - $this->recipient = $recipient; + $this->sender = strtolower($sender); + $this->recipient = strtolower($recipient); $this->content = $content; $this->date_time = new \DateTime(); } diff --git a/src/model/entities/NodeData.php b/src/model/entities/NodeData.php index 9d23b8b..758ccb7 100644 --- a/src/model/entities/NodeData.php +++ b/src/model/entities/NodeData.php @@ -55,9 +55,15 @@ class NodeData { $this->data = $data; }*/ - public function updateData(string $key, string $value): void + public function updateData(string $key, string $value = ''): void { - $this->data[$key] = $value; + if($value !== ''){ + $this->data[$key] = $value; + } + // si $value est vide, supprime la clé + elseif(isset($this->data[$key])){ + unset($this->data[$key]); + } } /*public function setNode(Node $node): void { diff --git a/src/view/FormBuilder.php b/src/view/FormBuilder.php index 508763b..7a2adcb 100644 --- a/src/view/FormBuilder.php +++ b/src/view/FormBuilder.php @@ -22,27 +22,21 @@ class FormBuilder extends AbstractBuilder $captcha = new Captcha; $_SESSION['captcha'] = $captcha->getSolution(); + $email = $email ?? Config::$email_dest; + $admin_content = ''; if($_SESSION['admin']) { - $admin_content = '' - //. '

Configuration du formulaire

' . "\n" - . '
' . "\n" - /*. '

- + $admin_content = '

+

+

-

- - - - -

' . "\n"*/ - . '

' . "\n" - . '

' - . '
' . "\n"; +

+

+
' . "\n"; } ob_start(); diff --git a/src/view/templates/form.php b/src/view/templates/form.php index 5f81f6f..bcde2f4 100644 --- a/src/view/templates/form.php +++ b/src/view/templates/form.php @@ -25,7 +25,7 @@
- +

-- cgit v1.2.3