From 08dfc9125edf35ccbe3a6e21d9a9918c4b7fd6e9 Mon Sep 17 00:00:00 2001 From: polo Date: Fri, 8 May 2026 18:14:38 +0200 Subject: page maintenance: voir/supprimer les logs et lien vers voir les e-mails, suppression des modes de fonctionnement --- src/controller/MaintenanceController.php | 50 ++++++++++++++++++++++++++++ src/model/DatabaseSettingUp.php | 8 +++-- src/model/entities/Log.php | 9 +++++ src/service/AppMode.php | 56 -------------------------------- src/service/Config.php | 10 +++--- src/service/EmailService.php | 8 +++-- src/service/router.php | 12 ++++++- src/view/FooterBuilder.php | 13 ++++---- src/view/MaintenanceBuilder.php | 19 +++++++++++ src/view/MenuBuilder.php | 6 ++-- src/view/templates/form_admin.php | 7 +++- src/view/templates/maintenance.php | 51 +++++++++++++---------------- src/view/templates/show_emails.php | 5 +-- 13 files changed, 146 insertions(+), 108 deletions(-) create mode 100644 src/controller/MaintenanceController.php delete mode 100644 src/service/AppMode.php create mode 100644 src/view/MaintenanceBuilder.php (limited to 'src') diff --git a/src/controller/MaintenanceController.php b/src/controller/MaintenanceController.php new file mode 100644 index 0000000..49ec23f --- /dev/null +++ b/src/controller/MaintenanceController.php @@ -0,0 +1,50 @@ +getRepository(Log::class)->findAll(); + if(empty($data)){ + echo json_encode(['success' => false]); + } + else{ + $view = '

Table ' . TABLE_PREFIX . 'log de la BDD

+ + + + + + + + '; + foreach($data as $entry){ + $view .= ' + + + '; + } + $view .= '
date et heure (Greenwich)connexion réussie
' . $entry->getFormatedDate() . '' . ($entry->getSuccess() ? 'oui' : 'non') . '
'; + echo json_encode(['success' => true, 'view' => $view]); + } + die; + } + static public function eraseLogs(EntityManager $entityManager): void + { + try{ + $table = $entityManager->getClassMetadata(Log::class)->getTableName(); + $entityManager->getConnection()->executeStatement("TRUNCATE TABLE {$table}"); // SQL donné à DBAL + echo json_encode(['success' => true]); + } + catch(Exception $e){ + echo json_encode(['success' => false]); + } + die; + } +} \ No newline at end of file diff --git a/src/model/DatabaseSettingUp.php b/src/model/DatabaseSettingUp.php index 9ff7344..d64f226 100644 --- a/src/model/DatabaseSettingUp.php +++ b/src/model/DatabaseSettingUp.php @@ -28,9 +28,6 @@ class DatabaseSettingUp // empêcher la réutilisation de cette fonction self::preventReinstallation($entityManager); - // fin de l'installation - AppMode::set($entityManager, 'run'); - // recharger la page? //header('Location: ' . new URL); } @@ -83,6 +80,8 @@ class DatabaseSettingUp $emails = new Page("Courriels", 'emails', "Consulter les courriels en base de données", true, false, false, NULL, NULL); $emails->addCSS('show_emails'); $emails->addJS('form'); + $maintenance = new Page("Maintenance", 'maintenance', "Opérations de maintenance, installation, sauvegarde, restauration", true, false, false, NULL, NULL); + $maintenance->addJS('maintenance'); /* -- table node -- */ // paramètres: name_node, article_timestamp, attributes, position, parent, page, article @@ -97,6 +96,7 @@ class DatabaseSettingUp $bloc_edit_menu = new Node('menu', 1, $main, $menu_paths, NULL); $bloc_new_page = new Node('new_page', 1, $main, $new_page, NULL); $bloc_emails = new Node('show_emails', 1, $main, $emails, NULL); + $bloc_maintenance = new Node('maintenance', 1, $main, $maintenance, NULL); /* -- table node_data -- */ // paramètres: data, node, images @@ -113,6 +113,7 @@ class DatabaseSettingUp $entityManager->persist($menu_paths); $entityManager->persist($new_page); $entityManager->persist($emails); + $entityManager->persist($maintenance); /* -- table node -- */ $entityManager->persist($head); @@ -126,6 +127,7 @@ class DatabaseSettingUp $entityManager->persist($bloc_edit_menu); $entityManager->persist($bloc_new_page); $entityManager->persist($bloc_emails); + $entityManager->persist($bloc_maintenance); /* -- table node_data -- */ $entityManager->persist($head_data); diff --git a/src/model/entities/Log.php b/src/model/entities/Log.php index eeb76e4..222b8db 100644 --- a/src/model/entities/Log.php +++ b/src/model/entities/Log.php @@ -26,4 +26,13 @@ class Log $this->date_time = new \DateTime; $this->success = $success; } + + public function getFormatedDate(): string + { + return $this->date_time->format('d/m/Y à H\hi'); + } + public function getSuccess(): bool + { + return $this->success; + } } diff --git a/src/service/AppMode.php b/src/service/AppMode.php deleted file mode 100644 index 60b58bd..0000000 --- a/src/service/AppMode.php +++ /dev/null @@ -1,56 +0,0 @@ -getRepository(AppMetadata::class)->find('mode'); - if(!$metadata){ - self::$mode = 'maintenance'; - } - else{ - self::$mode = $metadata->getValue(); - } - } - - public static function is(string $mode): bool - { - return self::$mode === $mode; - } - - public static function get(): string - { - return self::$mode; - } - - public static function set(EntityManager $entityManager, string $mode): void - { - self::$mode = $mode; - - $metadata = $entityManager->find(AppMetadata::class, 'mode'); - if($metadata){ - $metadata->setValue($mode); - } - else{ - $metadata = new AppMetadata('mode', $mode); - $entityManager->persist($metadata); - } - $entityManager->flush(); - - /*self::$data = [ - 'mode' => $mode, - 'since' => (new DateTimeImmutable())->format('c'), - 'by' => $by, - ];*/ - } -} \ No newline at end of file diff --git a/src/service/Config.php b/src/service/Config.php index e59f728..7077e01 100644 --- a/src/service/Config.php +++ b/src/service/Config.php @@ -18,15 +18,17 @@ class Config static public string $index_path = ''; static public string $port = '80'; - // e-mails + // envoi e-mails static public string $smtp_host = ''; static public string $smtp_username = ''; static public string $smtp_password = ''; static public string $smtp_secure = ''; // tls (smarttls) ou ssl (smtps) ou plain_text/chaine vide - static public string $email_from = 'mon_adresse@email.fr'; + + // destination e-mails + static public string $email_from = ''; // correspondant affiché dans la boite de réception static public string $email_from_name = 'site web'; - static public string $email_dest = ''; - static public string $email_dest_name = 'destinataire formulaire'; + static public string $email_dest = ''; // destinataire affiché dans la boite de réception + static public string $email_dest_name = 'moi'; // copier dans ce tableau les variables contenant des chemins static private array $path_vars = []; diff --git a/src/service/EmailService.php b/src/service/EmailService.php index 6f4e93d..0ea8f39 100644 --- a/src/service/EmailService.php +++ b/src/service/EmailService.php @@ -22,8 +22,10 @@ class EmailService $smtp_secure = $form_data->getData()['smtp_secure'] ?? Config::$smtp_secure; $smtp_username = $form_data->getData()['smtp_username'] ?? Config::$smtp_username; $smtp_password = $form_data->getData()['smtp_password'] ?? Config::$smtp_password; - $email_from = $form_data->getData()['email_from'] ?? Config::$email_from; // une adresse bidon est donnée à setFrom() - $email_from_name = $form_data->getData()['email_from_name'] ?? Config::$email_from_name; // = site web + + $email_from = $form_data->getData()['email_from'] ?? Config::$email_from; // adresse de l'expéditeur affichée + $email_from = empty($email_from) ? $smtp_username : $email_from; // si vide + $email_from_name = $form_data->getData()['email_from_name'] ?? Config::$email_from_name; // = nom de l'expéditeur affiché $email_dest = $form_data->getData()['email_dest'] ?? Config::$email_dest; $email_dest_name = $form_data->getData()['email_dest_name'] ?? Config::$email_dest_name; // = destinataire formulaire @@ -67,7 +69,7 @@ class EmailService // copie en BDD if(!$test_email && ($form_data->getData()['keep_emails'] ?? self::KEEP_EMAILS_DEFAULT)){ - $db_email = new Email($name, $email, Config::$email_dest, $message, $form_data); + $db_email = new Email($name, $email, $email_dest, $message, $form_data); $entityManager->persist($db_email); self::updateLastContactDate($entityManager, $email); $entityManager->flush(); diff --git a/src/service/router.php b/src/service/router.php index fc6b028..508721c 100644 --- a/src/service/router.php +++ b/src/service/router.php @@ -39,7 +39,7 @@ if($request->getMethod() === 'GET'){ } // pages interdites - if(!IS_ADMIN && in_array(CURRENT_PAGE, ['menu_paths', 'new_page', 'user_edit', 'emails'])){ + if(!IS_ADMIN && in_array(CURRENT_PAGE, ['menu_paths', 'new_page', 'user_edit', 'emails', 'maintenance'])){ header('Location: ' . new URL); die; } @@ -154,6 +154,16 @@ elseif($request->getMethod() === 'POST'){ elseif($request->query->get('action') === 'remove_event'){ CalendarController::removeEvent($json, $entityManager); } + + /* -- mode maintenance -- */ + elseif($request->query->get('action') === 'get_logs'){ + MaintenanceController::getLogs($entityManager); + die; + } + elseif($request->query->get('action') === 'erase_logs'){ + MaintenanceController::eraseLogs($entityManager); + die; + } else{ echo json_encode(['success' => false]); die; diff --git a/src/view/FooterBuilder.php b/src/view/FooterBuilder.php index f1623e7..da16758 100644 --- a/src/view/FooterBuilder.php +++ b/src/view/FooterBuilder.php @@ -58,8 +58,6 @@ class FooterBuilder extends AbstractBuilder $mode = 'administrateur'; $div_admin = 'logged_in'; } - $link_new_page = new URL(['page' => 'new_page']); - $link_change_paths = new URL(['page' => 'menu_paths']); $link_change_password = new URL(['page' => 'user_edit', 'from' => CURRENT_PAGE]); isset($_GET['id']) ? $link_change_password->addParams(['id' => $_GET['id']]) : ''; @@ -69,10 +67,11 @@ class FooterBuilder extends AbstractBuilder $zone_admin = '

Vous êtes en mode ' . $mode . ".

\n" . - '
' . "\n"; - $zone_admin .= $this->makePageModifModeButton(); - $zone_admin .= '
' . "\n" . + '
' . "\n" . + $this->makePageModifModeButton() . "\n" . + '
' . "\n" . '
' . "\n" . + '
' . "\n" . '
' . "\n" . '
' . "\n"; } @@ -100,7 +99,7 @@ class FooterBuilder extends AbstractBuilder private function makePageModifModeButton(): string { $link_edit_page = new URL(['page' => CURRENT_PAGE]); - if(!in_array(CURRENT_PAGE, ['article', 'new_page', 'menu_paths'])) // ajouter 'user_edit' et 'connection' le jour où ces pages auront un footer + if(!in_array(CURRENT_PAGE, ['article', 'new_page', 'menu_paths', 'maintenance'])) // ajouter 'user_edit' et 'connection' le jour où ces pages auront un footer { if(MainBuilder::$modif_mode){ $link_edit_label = 'Sortir du mode modification'; @@ -109,7 +108,7 @@ class FooterBuilder extends AbstractBuilder $link_edit_page->addParams(['mode' => 'page_modif']); $link_edit_label = 'Modifier la page'; } - return '
' . "\n"; + return '
'; } else{ return ''; diff --git a/src/view/MaintenanceBuilder.php b/src/view/MaintenanceBuilder.php new file mode 100644 index 0000000..f5c60ed --- /dev/null +++ b/src/view/MaintenanceBuilder.php @@ -0,0 +1,19 @@ +getName() . '.php'; + + if(file_exists($viewFile)){ + ob_start(); + require $viewFile; + $this->html = ob_get_clean(); + } + } +} \ No newline at end of file diff --git a/src/view/MenuBuilder.php b/src/view/MenuBuilder.php index 41ee189..85335df 100644 --- a/src/view/MenuBuilder.php +++ b/src/view/MenuBuilder.php @@ -13,10 +13,10 @@ class MenuBuilder extends AbstractBuilder //private int $margin_left_multiplier = 29; private string $options = ''; - public function __construct(?Node $node, bool $template = true) + public function __construct(Node $node, bool $template = true) { - // impossible de me rappeler pourquoi j'ai écrit ce test sur $node, pourquoi $node serait null? - $viewFile = $node === null ? self::VIEWS_PATH . 'menu.php' : self::VIEWS_PATH . $node->getName() . '.php'; + // dans une ancienne version $node pouvait être null mais je ne sais plus pourquoi + $viewFile = self::VIEWS_PATH . $node->getName() . '.php'; if(file_exists($viewFile)) { diff --git a/src/view/templates/form_admin.php b/src/view/templates/form_admin.php index 7156374..d745656 100644 --- a/src/view/templates/form_admin.php +++ b/src/view/templates/form_admin.php @@ -49,7 +49,12 @@ declare(strict_types=1);

-

Il s'agit du service qui acheminera les messages envoyés par ce formulaire. Les services d'envoi de courriels nécéssitent généralement de s'y connecter avec un identifiant et un mot de passe. Les adresses d'envoi et de réception peuvent être identiques. Le site web peut ne pas réussir à se connecter à certains fournisseurs.

+

Il s'agit du service qui acheminera les messages envoyés par ce formulaire.
+ Site web => serveur d'envoi => serveur de réception => votre application "mail"

+

+ Ce formulaire utilise les paramètres dans le fichier config.ini sur le serveur à mois que vous n'en renseignez d'autres ci-dessus. Les adresses d'envoi et de réception peuvent être identiques. +

+

Le site web peut ne pas réussir à se connecter à certains fournisseurs.

Paramètres de réception

diff --git a/src/view/templates/maintenance.php b/src/view/templates/maintenance.php index 9a2434f..426831f 100644 --- a/src/view/templates/maintenance.php +++ b/src/view/templates/maintenance.php @@ -1,29 +1,24 @@ - - - - - Site en maintenance - - - - - - - - - -
-

Le site est en cours de maintenance.

-

Il devrait être de nouveau accessible rapidement.

- Contact: ' . Config::$email_dest . '

' : '' ?> -
- - - \ No newline at end of file +
+

Maintenance du site

+
+

+
+ Qui a essayé de se connecter, quand et a-t'il réussi? +

+

+ +

+
+
+
+

+
+ Emails reçus depuis tous les formulaires de contact +

+
+ + +
\ No newline at end of file diff --git a/src/view/templates/show_emails.php b/src/view/templates/show_emails.php index 2cb102e..f561dc7 100644 --- a/src/view/templates/show_emails.php +++ b/src/view/templates/show_emails.php @@ -2,14 +2,15 @@

Table "email" de la base de données

- Les e-mails ci-dessous sont des copies de ceux arrivés dans votre boite de messagerie (qui en théorie sont également concernés par le RGPD) depuis tous les formulaires existant sur le site. Ils sont conservés dans un but pratique et éventuellement dans un but de prospection, ou dans tout autre but justifiant leur conservation. + Les e-mails ci-dessous sont des copies de ceux arrivés dans votre boite de messagerie depuis tous les formulaires existant sur le site. Ils sont conservés dans un but pratique (historique, prospection) ou dans tout autre but justifiant leur conservation. Cette conservation est optionnelle et règlementée par la loi européenne RGPD.
+ Notez qu'utiliser cette application ne vous garantit pas d'être en conformité avec la loi, c'est un outil vous permettant de faire les choses comme vous l'entendez. Si tout ceci vous gêne, désactivez le stockage des e-mails et supprimez ceux déjà enregistrés (ci-dessous).

Durées de conservation

Ce sont des durées maximales, les données peuvent être supprimées plus tôt ou même immédiatement. Le faire est d'ailleurs une obligation dans le cas où les personnes concernées le demandent.

- Les e-mails ordinaires d'un même expéditeur (même adresse e-mail) sont tous supprimés simultanément lorsque le plus récent d'entre eux atteint les 3 ans (utilisateur "inactif").
+ Les e-mails ordinaires d'un même expéditeur (même adresse e-mail) sont tous supprimés simultanément lorsque le plus récent d'entre eux atteint les 3 ans (utilisateur est considéré inactif).
Les e-mails sensibles quand à eux sont supprimés 5 ans après être devenus sensibles (durée juridique d'une preuve).

-- cgit v1.2.3