Browse Source

Add Email 1st Step & Maj bug debug

stany.ferer 1 năm trước cách đây
mục cha
commit
1fde53ead0

+ 3 - 0
.gitignore

@@ -4,3 +4,6 @@ public-cms/tests/sftp_meyclub.php
 core/views/pages/cms.test.php
 .active-debug
 .lock-maintenance
+.active-debug-submit
+.active-debug-email
+.active-debug-sql

+ 7 - 10
conf.inc.php

@@ -4,6 +4,7 @@ define("PWA", 1);
 
 define("TIME_ZONE", "Europe/Paris");
 
+// Dossier Root
 define("DIR_PHP_CLASS", DOCUMENT_ROOT . "core/class/");
 define("DIR_PHP_VIEWS", DOCUMENT_ROOT . "core/views/");
 define("DIR_PHP_VIEWS_PAGE", DOCUMENT_ROOT . "core/views/pages/");
@@ -12,18 +13,20 @@ define("DIR_PHP_SUBMIT", DOCUMENT_ROOT . "core/submit/");
 define("DIR_PHP_LIBS", DOCUMENT_ROOT . "core/libs/");
 define("DIR_PHP_JAVASCRIPT", DOCUMENT_ROOT . "core/javascript/");
 define("DIR_DATAS_JSONDATA", DOCUMENT_ROOT . "core/json/");
+define("DIR_TEMPLATE_EMAILS", DOCUMENT_ROOT . "core/views/templates/emails/");
+define("DIR_PRINT", DOCUMENT_ROOT . "core/print/");
+define("DIR_MAJ", DOCUMENT_ROOT . "maj/");
+
+// Dossier Data
 define("DIR_DATAS", DOCUMENT_DATAS . "datas/");
 define("DIR_DATAS_JSON", DOCUMENT_DATAS . "datas/json/");
 define("DIR_DATAS_FILES", DOCUMENT_DATAS . "datas/files/");
 define("DIR_DATAS_DOCS", DOCUMENT_DATAS . "datas/documents/");
-define("DIR_TEMPLATE_EMAILS", DOCUMENT_DATAS . "core/views/templates/emails/");
 define("SFTP_LOCAL", DOCUMENT_DATAS . "datas/sftp/");
-define("DIR_PRINT", DOCUMENT_ROOT . "core/print/");
 define("DIR_TEMP", DOCUMENT_DATAS . "tmp/");
-define("DIR_MAJ", DOCUMENT_ROOT . "maj/");
-
 define("DIR_BACKUP", DOCUMENT_DATAS . "backups/");
 
+// Tables base de données
 define("DB_T_CONFIG", "config");
 define("DB_T_USER", "user");
 define("DB_T_USER_TAGS", "user_tags");
@@ -86,12 +89,6 @@ define("EMEMARGEMENT_END", 1800); // Possibilité de s'émarger 1800 secondes so
 
 // Backup
 define("BACKUP_LIMIT", 15); // nombre de backup max
-define("FILE_MAINTENANCE", ".lock-maintenance");
-
-// Debug
-define("FILE_DEBUG", ".active-debug");
-define("FILE_DEBUG_SUBMIT", ".active-debug-submit");
-define("FILE_DEBUG_SQL", ".active-debug-sql");
 
 // Email
 define("EMAIL_SMTP_HOST", "ssl0.ovh.net");

+ 7 - 0
core/class/core.class.php

@@ -189,6 +189,13 @@ class core
         return round($_size, $_decimalplaces) . ' ' . $sizes[$i];
     }
 
+    public static  function formatEuro($_amount) {
+        $amount = (float)$_amount;
+        $formattedAmount = number_format($amount, 2, ',', ' ');
+        return $formattedAmount . ' €';
+    }
+    
+
     public static function checkStringOnly(string $_string)
     {
         if (!ctype_alpha($_string)) {

+ 74 - 34
core/class/debug.class.php

@@ -2,30 +2,22 @@
 
 class debug
 {
-
     private static $logs = [];
     private static $startTime;
     private static $closeTime;
 
     private static function typeFile(string $_string){
         switch ($_string) {
-            case 'debug':
-                return FILE_DEBUG;
-                break;
             case 'maintenance':
-                return FILE_MAINTENANCE;
+                return ".lock-maintenance";
                 break;
-            case 'submit':
-                return FILE_DEBUG_SUBMIT;
-                break;
-            case 'sql':
-                return FILE_DEBUG_SQL;
+            case 'debug':
+                return ".active-debug";
                 break;
             default:
-                return NULL;
+                return ".active-debug-".$_string;
                 break;
         }
-
     }
     
     public static function addFile(string $_string = NULL)
@@ -38,17 +30,14 @@ class debug
 
     public static function removeFile(string $_string = NULL)
     {
-        unlink(DOCUMENT_ROOT . self::typeFile($_string));
+        if($_string != NULL){
+            unlink(DOCUMENT_ROOT . self::typeFile($_string));
+        }
     }
 
     public static function isFile(string $_string = NULL)
     {
-        return (file_exists(DOCUMENT_ROOT . self::typeFile($_string))) ? TRUE : FALSE;
-    }
-
-    public static function isSubmit()
-    {
-        return (file_exists(DOCUMENT_ROOT . FILE_DEBUG_SUBMIT)) ? TRUE : FALSE;
+        return file_exists(DOCUMENT_ROOT . self::typeFile($_string)) ? TRUE : FALSE;
     }
     
     public static function includeDebug()
@@ -64,7 +53,7 @@ class debug
         ob_start();
 
         echo "<pre class='debug-dump'>";
-        echo "<strong>$label:</strong> ";
+        echo "<strong>" . $label . ":</strong> ";
 
         // Convert array or object to string
         if (is_array($var)) {
@@ -176,6 +165,43 @@ class debug
         ($_exit != NULL) ? exit() : NULL;
     }
 
+    public static function isHtml(string $_string) : bool 
+    {
+        $stripped_string = strip_tags($_string);
+        return $_string !== $stripped_string;
+    }
+
+    public static function generateHtmlContent($htmlContent)
+    {
+        $id = md5(microtime());
+        return <<<HTML
+                    <!DOCTYPE html>
+                    <html>
+                    <head>
+                        <title>Exécution de HTML</title>
+                        <style>
+                            .isolated-iframe {
+                                width: 100%;
+                                height: 300px;
+                                border: none;
+                            }
+                        </style>
+                    </head>
+                    <body>
+                        <iframe id="isolatedIframe-$id" class="isolated-iframe"></iframe>
+                        <script>
+                            var iframe = document.getElementById('isolatedIframe-$id');
+                            var doc = iframe.document || iframe.contentDocument || iframe.contentWindow.document;
+                            doc.open();
+                            doc.write(`{$htmlContent}`);
+                            doc.close();
+                        </script>
+                    </body>
+                    </html>
+                    HTML;
+    }
+
+
     public static function log($_message, $_mark = NULL)
     {        
         $mark = "<div class='debug-head-console'>";
@@ -184,13 +210,15 @@ class debug
         $mark .= "</div>";
         if($_message != NULL) {
             if(is_array($_message)){
-                self::$logs[] = $mark ."<div class='debug-console'>" . self::arrayToString($_message) . "</div>";
+                self::$logs[] = ["data" => $mark ."<div class='debug-console'>" . self::arrayToString($_message) . "</div>", "nl2br" => TRUE];
             } elseif(is_object($_message)){
-                self::$logs[] = $mark ."<div class='debug-console'>" . self::objectToString($_message) . "</div>";
+                self::$logs[] = ["data" => $mark ."<div class='debug-console'>" . self::objectToString($_message) . "</div>", "nl2br" => TRUE];
+            } elseif(self::isHtml($_message)){
+                self::$logs[] = ["data" => $mark ."<div class='debug-console'>" . self::generateHtmlContent($_message) . "</div>", "nl2br" => FALSE];
             } elseif($mark != NULL){
-                self::$logs[] = $mark ."<div class='debug-console' style='color:blue;'>" . $_message . "</div>";
+                self::$logs[] = ["data" => $mark ."<div class='debug-console' style='color:blue;'>" . $_message . "</div>", "nl2br" => TRUE];
             } else {
-                self::$logs[] = $_message;
+                self::$logs[] = ["data" => $_message, "nl2br" => TRUE];
             }
         }
     }
@@ -203,13 +231,15 @@ class debug
         $mark .= "</div>";
         if($_message != NULL) {
             if(is_array($_message)){
-                self::setSession($mark ."<div class='debug-console'>" . self::arrayToString($_message) . "</div>");
+                self::setSession(["data" => $mark ."<div class='debug-console'>" . self::arrayToString($_message) . "</div>", "nl2br" => TRUE]);
             } elseif(is_object($_message)){
-                self::setSession($mark ."<div class='debug-console'>" . self::objectToString($_message) . "</div>");
+                self::setSession(["data" => $mark ."<div class='debug-console'>" . self::objectToString($_message) . "</div>", "nl2br" => TRUE]);
+            } elseif(self::isHtml($_message)){
+                self::setSession(["data" => $mark ."<div class='debug-console'>" . self::generateHtmlContent($_message) . "</div>", "nl2br" => false]);
             } elseif($mark != NULL){
-                self::setSession($mark ."<div class='debug-console' style='color:blue;'>" . $_message . "</div>");
+                self::setSession(["data" => $mark ."<div class='debug-console' style='color:blue;'>" . $_message . "</div>", "nl2br" => TRUE]);
             } else {
-                self::setSession($_message);
+                self::setSession(["data" => $_message, "nl2br" => TRUE]);
             }
         }
     }
@@ -219,26 +249,36 @@ class debug
             echo "<div id='debugger-logs'>";
 
             echo "<div class='debug-renderLogs-header'>";
-            echo "PHP ". phpversion() . " | MYSQL " . db::version() . " | " . number_format(self::$closeTime, 4) . " secondes ";
+            echo "PHP <span style=\"font-weight: bold;\">". phpversion() . "</span> | MYSQL <span style=\"font-weight: bold;\">" . db::version() . "</span> | " . number_format(self::$closeTime, 4) . " secondes ";
             echo "</div>";
             echo "<div class=\"form-check form-switch\" style=\"margin-top: -30px;\">
                 <div>
                     <input class=\"form-check-input\" type=\"checkbox\" id=\"checkIsSubmit\" " . core::checkboxSelecter(self::isFile("submit"), 0) . " >
-                    <label class=\"form-check-label\" for=\"checkIsSubmit\">Intercepter les Submit</label>
+                    <label class=\"form-check-label\" for=\"checkIsSubmit\">Intercepter les <span style=\"font-weight: bold;\">Submit</span></label>
                 </div>
                 <div>
                     <input class=\"form-check-input\" type=\"checkbox\" id=\"checkIsSql\" " . core::checkboxSelecter(self::isFile("sql"), 0) . " >
-                    <label class=\"form-check-label\" for=\"checkIsSql\">Intercepter les requêtes SQL</label>
+                    <label class=\"form-check-label\" for=\"checkIsSql\">Intercepter les <span style=\"font-weight: bold;\">requêtes SQL</span></label>
+                </div>
+                <div>
+                    <input class=\"form-check-input\" type=\"checkbox\" id=\"checkIsEmail\" " . core::checkboxSelecter(self::isFile("email"), 0) . " >
+                    <label class=\"form-check-label\" for=\"checkIsEmail\">Intercepter les <span style=\"font-weight: bold;\">Email</span></label>
                 </div>
             </div>";
 
             foreach (self::$logs as $log) {
-                echo ($log != NULL) ? "<div class='debug-renderLogs-print'>".nl2br($log)."</div>" : NULL;
+                if($log != NULL){
+                    echo "<div class='debug-renderLogs-print'>";
+                        echo $log["nl2br"] == TRUE ? nl2br($log["data"]) : $log["data"];
+                    echo "</div>";
+                }
             }
 
             if(self::ifSession()){
                 foreach (self::getSession() as $logSession) {
-                    echo ($logSession != NULL) ? "<div class='debug-renderLogs-print'>".nl2br($logSession)."</div>" : NULL;
+                    echo "<div class='debug-renderLogs-print'>";
+                        echo $logSession["nl2br"] == TRUE ? nl2br($logSession["data"]) : $logSession["data"];
+                    echo "</div>";
                 }
             }
 
@@ -273,7 +313,7 @@ class debug
     }
 
     private static function buildBadge(array $_data){
-        $color = empty($_data["color"]) ? "balck" : $_data["color"];
+        $color = empty($_data["color"]) ? "black" : $_data["color"];
         $backgroundColor = empty($_data["background-color"]) ? "orangered" : $_data["background-color"];
         $class = empty($_data["class"]) ? NULL : $_data["class"];
         $link = empty($_data["link"]) ? "#" : $_data["link"];

+ 94 - 3
core/class/document.class.php

@@ -399,9 +399,10 @@ class document
         db::execute();
     }
 
-    static public function getAssignMe(){
+    static public function getAssign(float $_id = NULL){
 
-        $tags = user::getIdTags(session::getId());
+        $idUser = is_null($_id ) ? session::getId() : $_id;
+        $tags = user::getIdTags($idUser);
 
         $where = NULL;
         foreach ($tags AS $key => $value) {
@@ -494,4 +495,94 @@ class document
         return $return > 0 ? $return : NULL;
     }
 
-}
+    public static function sendEmailAssign(float $_id){
+        $list = self::getAssign($_id);
+        $nb = count($list);
+        
+        $titre = $nb > 1 ? "Vous avez " . $nb . " documents en attentes de validation" : "Vous avez un document en attente de validation";
+        
+        $message = "Cet email est un récapitulatif des documents qui vous ont été assignés sur le CMS du CSE Invent.<br />A ce jour, vous avez ";
+        $message .= $nb > 1 ? $nb . " documents en attentes de validation." : "un seul document en attente de validation.";
+        $message .= "<br />Ce bilan est mis à jour une fois par semaine et est envoyé à l'ensemble des personnes attribuées à ces documents.";
+        
+        $tmp = [
+            "name" => "Stany Ferer",
+            "subject" => $titre,
+            "message" => $message,
+            "table" => self::getMailArray($list)
+        ];
+
+        $data = [
+            "to" => "stany.ferer@capgemini.com",
+            "name" => "Stany Ferer",
+            "subject" => $titre,
+            "template" => self::templateMail($tmp)
+        ];
+
+        try {
+            email::send($data);
+        } catch (\Throwable $th) {
+            debug::log($th);
+        }
+    }
+
+    public static function templateMail(array $_data)
+    {
+        $logo_url = empty($_data["logo_url"]) ? "https://" . DOMAIN_CMS . "/img/logo.png" : $_data["logo_url"];
+        $date = empty($_data["date"]) ? core::printDateTxt() : $_data["date"];
+        $name = empty($_data["name"]) ? NULL : $_data["name"];
+        $subject = empty($_data["subject"]) ? NULL : $_data["subject"];
+        $message = empty($_data["message"]) ? NULL : $_data["message"];
+        $cms_url = empty($_data["cms_url"]) ? "https://" . DOMAIN_CMS : $_data["cms_url"];
+        $table = empty($_data["table"]) ? NULL : $_data["table"];
+        
+        $template = email::loadTemplate('cms.documents.html');
+
+        if ($template === false) {
+            echo "Impossible de lire le template d'email.";
+            return false;
+        }
+
+        // Remplacer les variables dans le template
+        $template = str_replace([
+                        '{{logo_url}}', 
+                        '{{date}}', 
+                        '{{name}}', 
+                        '{{subject}}', 
+                        '{{message}}',
+                        '{{cms_url}}',
+                        '{{table}}'
+                    ], [
+                        $logo_url, 
+                        $date, 
+                        $name, 
+                        $subject, 
+                        $message,
+                        $cms_url,
+                        $table
+                    ], $template);
+
+        // Si debug
+        if(debug::isFile("email")){
+            debug::log($template);
+        }
+
+        return $template;
+    }
+
+    static public function getMailArray(array $_array){
+        $return = NULL;
+        foreach ($_array as $value) {
+            $return .= ' <tr>
+                            <td>' . core::convertDate($value["date"], FALSE) . '</td>
+                            <td>' . $value["titre"] . '</td>
+                            <td>' . $value["label"] . '</td>
+                            <td>' . $value["deadline"] . '</td>
+                            <td>' . $value["assign"] . '</td>
+                            <td style="text-align:right;">' . core::formatEuro($value["montant"]) . '</td>
+                        </tr>';
+        }
+        return $return;
+    }
+
+}

+ 77 - 43
core/class/email.class.php

@@ -1,6 +1,9 @@
 <?php
 
-class email
+use PHPMailer\PHPMailer\PHPMailer;
+use PHPMailer\PHPMailer\Exception;
+
+class Email
 {
     private static $smtpServer = EMAIL_SMTP_HOST;
     private static $smtpPort = EMAIL_SMTP_PORT;
@@ -9,72 +12,103 @@ class email
     private static $password = EMAIL_SMTP_PASSWORD;
     private static $fromEmail = EMAIL_FROM_EMAIL;
     private static $fromName = EMAIL_FROM_NAME;
+    private static $templateDir = DIR_TEMPLATE_EMAILS;
 
-    public static function send($_to, $_name, $_subject, $_message)
+    /**
+     * Envoie un email avec les paramètres spécifiés.
+     *
+     * @param string $to L'adresse email du destinataire.
+     * @param string $name Le nom du destinataire.
+     * @param string $subject Le sujet de l'email.
+     * @param string $message Le message de l'email.
+     * @return bool Retourne TRUE en cas de succès, FALSE sinon.
+     */
+    public static function send(array $_data): bool
     {
-        $template = file_get_contents(DIR_TEMPLATE_EMAILS.'cms.alerte.html');
+        
+        $to = empty($_data["to"]) ? NULL : $_data["to"];
+        $name = empty($_data["name"]) ? NULL : $_data["name"];
+        $subject = empty($_data["subject"]) ? NULL : $_data["subject"];
+        $template = empty($_data["template"]) ? NULL : $_data["template"];
 
-        if ($template === false) {
-            echo "Impossible de lire le template d'email.";
-            return;
+        if(is_null($to) OR is_null($name) OR is_null($subject) OR is_null($template)){
+            historique::recRef("script");
+            historique::add(array(
+                "idType" => historique::getIdRef("ERROR"),
+                "idUser" => session::getId(),
+                "idPage" => historique::getIdRef("script"),
+                "log" => "L'email en erreur car toutes les valeurs ne sont pas présentes."
+            ));
+            return FALSE;
         }
-
-        // Remplacer les variables dans le template
-        $template = str_replace('{{name}}', $_name, $template);
-        $template = str_replace('{{message}}', $_message, $template);
-        $template = str_replace('{{subject}}', $_subject, $template);
-
-         // Créer une instance de PHPMailer
-        $mail = new PHPMailer\PHPMailer\PHPMailer(true);
+        
+        // Créer une instance de PHPMailer
+        $mail = new PHPMailer(true);
 
         try {
             // Paramètres du serveur
-            $mail->isSMTP();
-            $mail->Host = self::$smtpServer; 
-            $mail->SMTPAuth = true;
-            $mail->Username = self::$username; 
-            $mail->Password = self::$password; 
-            $mail->SMTPSecure = self::$smtpSecure; 
-            $mail->Port = self::$smtpPort;
+            self::configureMailer($mail);
+
+            // Si debug
+            if(debug::isFile("email")){
+                $mail->SMTPDebug = 1;
+            }
 
             // Destinataires
             $mail->setFrom(self::$fromEmail, self::$fromName);
-            $mail->addAddress($_to, $_name);
+            $mail->addAddress($to, $name);
+
+            $mail->CharSet = 'UTF-8';
 
             // Contenu de l'email
             $mail->isHTML(true);
-            $mail->Subject = $_subject;
+            $mail->Subject = "CSE Invent :. ". $subject;
             $mail->Body    = $template;
 
-            try {
+            if(!debug::isFile("email")){
                 $mail->send();
-                return TRUE;
-            } catch (Exception $e) {
-                alert::recError("ERREUR TECHNIQUE : Send Email " . $mail->ErrorInfo);
-                return FALSE;
             }
+
+            return true;
         } catch (Exception $e) {
-            alert::recError("ERREUR TECHNIQUE : Config Email " . $mail->ErrorInfo);
-            return FALSE;
+            historique::recRef("script");
+            historique::add(array(
+                "idType" => historique::getIdRef("ERROR"),
+                "idUser" => session::getId(),
+                "idPage" => historique::getIdRef("script"),
+                "log" => $mail->ErrorInfo
+            ));
+            return false;
         }
     }
 
-    private static function sendCommand($smtp, $command)
+    /**
+     * Charge le template d'email spécifié.
+     *
+     * @param string $templateName Le nom du template à charger.
+     * @return string|bool Le contenu du template ou FALSE en cas d'échec.
+     */
+    public static function loadTemplate(string $templateName)
     {
-        fputs($smtp, $command . "\r\n");
-        return self::serverResponse($smtp);
+        $templatePath = self::$templateDir . $templateName;
+        $template = file_get_contents($templatePath);
+
+        return $template !== false ? $template : false;
     }
 
-    private static function serverResponse($smtp)
+    /**
+     * Configure les paramètres de PHPMailer.
+     *
+     * @param PHPMailer $mail L'instance de PHPMailer à configurer.
+     */
+    private static function configureMailer(PHPMailer $mail)
     {
-        $response = '';
-        while ($str = fgets($smtp, 512)) {
-            $response .= $str;
-            if (substr($str, 3, 1) == ' ') {
-                break;
-            }
-        }
-        return $response;
+        $mail->isSMTP();
+        $mail->Host = self::$smtpServer;
+        $mail->SMTPAuth = true;
+        $mail->Username = self::$username;
+        $mail->Password = self::$password;
+        $mail->SMTPSecure = self::$smtpSecure;
+        $mail->Port = self::$smtpPort;
     }
-
 }

+ 6 - 2
core/javascript/cms.debug.php

@@ -2,11 +2,15 @@
     $(document).ready(function() {
 
         $('#checkIsSubmit').on('change', function() {
-            window.location.href = '/submit.php?from=parametres-debug-submit-activation&actif=' + $('#checkIsSubmit').prop('checked');
+            window.location.href = '/submit.php?from=parametres-debug&target=submit&actif=' + $('#checkIsSubmit').prop('checked');
         });
 
         $('#checkIsSql').on('change', function() {
-            window.location.href = '/submit.php?from=parametres-debug-sql-activation&actif=' + $('#checkIsSql').prop('checked');
+            window.location.href = '/submit.php?from=parametres-debug&target=sql&actif=' + $('#checkIsSql').prop('checked');
+        });
+
+        $('#checkIsEmail').on('change', function() {
+            window.location.href = '/submit.php?from=parametres-debug&target=email&actif=' + $('#checkIsEmail').prop('checked');
         });
 
         $('.toggle-logs').click(function() {

+ 1 - 1
core/json/cms.documents-my-assign.php

@@ -1,6 +1,6 @@
 <?php 
 
-$row = document::getAssignMe();
+$row = document::getAssign();
 if (!empty($row)) {
     echo json_encode($row);
     exit();

+ 0 - 27
core/submit/cms.parametres-debug-activation.php

@@ -1,27 +0,0 @@
-<?php
-if(core::ifGet("actif")){
-    if(core::getGet("actif") == "true"){
-        debug::addFile("debug");
-
-        historique::recRef("/parametres.html");
-        historique::add(array(
-            "idType" => historique::getIdRef("ACTION"),
-            "idUser" => session::getId(),
-            "idPage" => historique::getIdRef("/parametres.html"),
-            "log" => "Mode debug : Activation"
-        ));
-    } else {
-        debug::removeFile("debug");
-
-        historique::recRef("/parametres.html#parametres-debug");
-        historique::add(array(
-            "idType" => historique::getIdRef("ACTION"),
-            "idUser" => session::getId(),
-            "idPage" => historique::getIdRef("/parametres.html#parametres-debug"),
-            "log" => "Mode debug : Désactivation"
-        ));
-    }
-}
-
-header("Location: /parametres.html#parametres-debug");
-exit();

+ 0 - 11
core/submit/cms.parametres-debug-sql-activation.php

@@ -1,11 +0,0 @@
-<?php
-if(core::ifGet("actif")){
-    if(core::getGet("actif") == "true"){
-        debug::addFile("sql");
-    } else {
-        debug::removeFile("sql");
-    }
-}
-
-header("Location: " . $_SERVER['HTTP_REFERER']);
-exit();

+ 0 - 11
core/submit/cms.parametres-debug-submit-activation.php

@@ -1,11 +0,0 @@
-<?php
-if(core::ifGet("actif")){
-    if(core::getGet("actif") == "true"){
-        debug::addFile("submit");
-    } else {
-        debug::removeFile("submit");
-    }
-}
-
-header("Location: " . $_SERVER['HTTP_REFERER']);
-exit();

+ 20 - 0
core/submit/cms.parametres-debug.php

@@ -0,0 +1,20 @@
+<?php
+if(core::ifGet("actif") AND core::ifGet("target")){
+    $filter = [
+        "debug",
+        "sql",
+        "submit",
+        "email"
+    ];
+
+    if(in_array(core::getGet("target"), $filter)){
+        if(core::getGet("actif") == "true"){
+            debug::addFile(core::getGet("target"));
+        } else {
+            debug::removeFile(core::getGet("target"));
+        }
+    }
+}
+
+header("Location: " . $_SERVER['HTTP_REFERER']);
+exit();

+ 1 - 1
core/views/pages/cms.parametres-debug.php

@@ -68,7 +68,7 @@
         });
 
         $('#checkDebug').on('change', function() {
-            window.location.href = "/submit.php?from=parametres-debug-activation&actif=" + $("#checkDebug").prop('checked');
+            window.location.href = "/submit.php?from=parametres-debug&target=debug&actif=" + $("#checkDebug").prop('checked');
         });
     });
 </script>

+ 0 - 12
core/views/templates/emails/cms.alerte.html

@@ -1,12 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-    <title>{{subject}}</title>
-</head>
-<body>
-    <h1>Bonjour, {{name}}!</h1>
-    <p>{{message}}</p>
-    <p>Merci,</p>
-    <p>L'équipe</p>
-</body>
-</html>

+ 121 - 0
core/views/templates/emails/cms.documents.html

@@ -0,0 +1,121 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <meta charset="UTF-8">
+    <title>{{subject}}</title>
+    <style>
+        body {
+            font-family: Arial, sans-serif;
+            margin: 0;
+            padding: 0;
+            background-color: #f4f4f4;
+        }
+        .container {
+            width: 100%;
+            max-width: 900px;
+            margin: 0 auto;
+            background-color: #ffffff;
+            padding: 20px;
+            box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
+        }
+        .header {
+            display: flex;
+            justify-content: space-between;
+            align-items: center;
+        }
+        .header .left {
+            text-align: left;
+        }
+        .header .left p {
+            margin: 0;
+            font-size: 14px;
+            color: #666666;
+        }
+        .header .right img {
+            max-height: 120px;
+        }
+        h1 {
+            color: #0a71af;
+            font-size: 18px;
+        }
+        p {
+            color: #363636;
+            font-size: 14px;
+        }
+        .footer {
+            border-top: #ddd solid 1px;
+            margin-top: 25px;
+            font-size: 11px;
+            text-align: center;
+            text-decoration: none;
+        }
+
+        .footer p {
+            color: #999999;
+        }
+
+        .footer a {
+            color: #0a71af;
+            text-decoration: none;
+        }
+
+        .footer a:hover {
+            color: #999999;
+            text-decoration: none;
+        }
+
+        table {
+            width: 100%;
+            border-collapse: collapse;
+        }
+        th, td {
+            border: 1px solid #ddd;
+            padding: 8px;
+            text-align: left;
+            font-size: 12px;
+            color: #363636;
+        }
+        th {
+            background-color: #f2f2f2;
+        }
+    </style>
+</head>
+<body>
+    <div class="container">
+        <div class="header">
+            <div class="left">
+                <h1>{{subject}}</h1>
+                <p>Le {{date}}</p>
+            </div>
+            <div class="right">
+                <img src="{{logo_url}}" alt="Logo">
+            </div>
+        </div>
+        <p>Bonjour {{name}},</p>
+        <p>{{message}}</p>
+
+        <table>
+            <thead>
+                <tr>
+                    <th>Date</th>
+                    <th>Titre</th>
+                    <th>Type</th>
+                    <th>Echéance</th>
+                    <th>Attribution</th>
+                    <th>Montant</th>
+                </tr>
+            </thead>
+            <tbody>
+                {{table}}
+            </tbody>
+        </table>
+
+        <p>Merci,</p>
+        <p>L'équipe du CSE Invent</p>
+        <div class="footer">
+            <p>Cet email vous a été envoyé depuis le CMS d'Invent France.</p>
+            <p><a href="{{cms_url}}">{{cms_url}}</a></p>
+        </div>
+    </div>
+</body>
+</html>

+ 3 - 4
public-cms/submit.php

@@ -8,10 +8,9 @@ require_once "../conf.inc.php";
 require_once DIR_PHP_LAYOUTS . "header.php"; 
 require_once DIR_PHP_LAYOUTS . "cms.session.php";
 
-if(debug::isFile("submit") AND ( core::ifPost() OR core::ifFiles()) ) {
-    core::ifPost() ? core::print_r(core::getPost()) : NULL;
-    core::ifFiles() ? core::print_r(core::getFiles()) : NULL;
-    exit();
+if(debug::isFile("submit") AND (core::ifPost() OR core::ifFiles())) {
+        core::ifPost() ? debug::logSession(core::getPost()) : NULL;
+        core::ifFiles() ? debug::logSession(core::getFiles()) : NULL;
 }
 
 get::submit();