فهرست منبع

Add attachment

stany.ferer 1 سال پیش
والد
کامیت
8122811222
3فایلهای تغییر یافته به همراه160 افزوده شده و 69 حذف شده
  1. 1 1
      core/class/core.class.php
  2. 106 42
      core/class/document.class.php
  3. 53 26
      core/views/pages/cms.document.php

+ 1 - 1
core/class/core.class.php

@@ -22,7 +22,7 @@ class core
 
     public static function ifFiles(string $_string)
     {
-        if (isset($_FILES[$_string])) {
+        if (isset($_FILES[$_string]) AND $_FILES[$_string]["size"] > 0) {
             return TRUE;
         } else {
             return FALSE;

+ 106 - 42
core/class/document.class.php

@@ -16,7 +16,15 @@ class document
         return file::download($_id, DIR_DATAS_DOCS);
     }
 
-    static public function deleteFile(float $_id){
+    static public function deleteFile(string $_id){
+        db::query("DELETE FROM ". DB_T_DOCUMENT_FILES ." WHERE id_files = :id_files");
+        db::bind(':id_files', $_id);
+        db::execute();
+
+        file::delete($_id, DIR_DATAS_DOCS);
+    }
+
+    static public function deleteFiles(float $_id){
         foreach (self::getFiles($_id) as $file) {
 
             db::query("DELETE FROM ". DB_T_DOCUMENT_FILES ." WHERE id_files = :id_files");
@@ -41,7 +49,7 @@ class document
             db::bind(':id_documents', $_id);
             db::execute();
 
-            self::deleteFile($_id);
+            self::deleteFiles($_id);
             
             db::query("DELETE FROM " . DB_T_DOCUMENTS . " WHERE id = :id");
             db::bind(':id', $_id);
@@ -159,51 +167,82 @@ class document
 
     public static function update()
     {
-        try { 
-            $tagsUser = tags::textToId(core::getPost("tagsUser"), 1);
-            self::addTags(core::getPost("id"), $tagsUser, 1);
-
-            $tagsSupplier = tags::textToId(core::getPost("tagsSupplier"), 2); echo $tagsSupplier;
-            self::addTags(core::getPost("id"), $tagsSupplier, 2);
-        } catch (Exception $ex) {
-            alert::recError("Erreur à l'enregistrement de la liaison : " . core::getPost("id"));
-            return FALSE;
+        if(core::ifFiles("attachement-document") == TRUE){
+            $file = core::getFiles("attachement-document");
+            $md5 = md5_file($file["tmp_name"]);
         }
-
-        if(core::ifPost("done") AND core::getPost("done") == TRUE){
-            $sql = ", id_user_done = :id_user_done, date_done = CURRENT_TIMESTAMP ";
+        if(isset($md5) AND file::findM5($md5) == TRUE){
+            alert::recError("Le fichier \"" . $file["name"] . "\" a déjà été utilisé");
+            session::setTemp(core::getPost(), "document");
         } else {
-            $sql = "";
-        }
-        
-        db::query("UPDATE " . DB_T_DOCUMENTS . " SET "
-                . "id_type = :id_type, "
-                . "titre = :titre, "
-                . "date = :date, "
-                . "deadline = :deadline, "
-                . "description = :description "
-                . $sql
-                . "WHERE id = :id");
-        
-        db::bind(':id_type', core::getPost("id_type"));
-        db::bind(':titre', core::getPost("titre"));
-        db::bind(':date', core::getPost("date"));
-        db::bind(':deadline', core::getPost("deadline"));
-        db::bind(':description', core::getPost("description"));
-        db::bind(':id', core::getPost("id"));
-
-        if(core::ifPost("done") AND core::getPost("done") == TRUE){
-            db::bind(':id_user_done', session::getId());
-        }
-        
-        try {
-                db::execute();
-                alert::recSuccess("Document mis à jour avec succès");
-                return TRUE;
+            if(isset($md5)){
+                try {
+                    $idFile = self::uploadFile($file);
+                } catch (Exception $ex) {
+                    alert::recError("Erreur à l'enregistrement de la pièce jointe : " . $idFile);
+                    return FALSE;
+                }
+
+                try {
+                    self::addFile(core::getPost("id"), $idFile);
+                } catch (Exception $ex) {
+                    alert::recError("Erreur à l'enregistrement de la liaison : " . $idFile);
+                    return FALSE;
+                }
+            }
+
+            if(core::getPost("delete-attachement")){
+                foreach (core::getPost("delete-attachement") as $deleteAttach) {
+                    self::deleteFile($deleteAttach);
+                }
+            }
+
+            try { 
+                $tagsUser = tags::textToId(core::getPost("tagsUser"), 1);
+                self::addTags(core::getPost("id"), $tagsUser, 1);
+
+                $tagsSupplier = tags::textToId(core::getPost("tagsSupplier"), 2); echo $tagsSupplier;
+                self::addTags(core::getPost("id"), $tagsSupplier, 2);
             } catch (Exception $ex) {
-                alert::recError("Erreur de mise à jour du document : " . $ex);
+                alert::recError("Erreur à l'enregistrement de la liaison : " . core::getPost("id"));
                 return FALSE;
             }
+
+            if(core::ifPost("done") AND core::getPost("done") == TRUE){
+                $sql = ", id_user_done = :id_user_done, date_done = CURRENT_TIMESTAMP ";
+            } else {
+                $sql = "";
+            }
+            
+            db::query("UPDATE " . DB_T_DOCUMENTS . " SET "
+                    . "id_type = :id_type, "
+                    . "titre = :titre, "
+                    . "date = :date, "
+                    . "deadline = :deadline, "
+                    . "description = :description "
+                    . $sql
+                    . "WHERE id = :id");
+            
+            db::bind(':id_type', core::getPost("id_type"));
+            db::bind(':titre', core::getPost("titre"));
+            db::bind(':date', core::getPost("date"));
+            db::bind(':deadline', core::getPost("deadline"));
+            db::bind(':description', core::getPost("description"));
+            db::bind(':id', core::getPost("id"));
+
+            if(core::ifPost("done") AND core::getPost("done") == TRUE){
+                db::bind(':id_user_done', session::getId());
+            }
+            
+            try {
+                    db::execute();
+                    alert::recSuccess("Document mis à jour avec succès");
+                    return TRUE;
+                } catch (Exception $ex) {
+                    alert::recError("Erreur de mise à jour du document : " . $ex);
+                    return FALSE;
+                }
+        }
     }
 
     static public function printFile(string $_id) {
@@ -298,4 +337,29 @@ class document
         }
     }
 
+    static public function printAttachement(array $_attachs){
+        echo '<ol class="list-group list-group-numbered">';
+        foreach ($_attachs as $key => $attach) {
+                echo '<li class="list-group-item d-flex justify-content-between align-items-start" id="attach-'.$attach["id"].'">
+                    <div class="ms-2 me-auto">
+                        <div><span class="fw-bold">'.$attach["name"].'</span> ('.core::convertBytes($attach["size"]).')</div>
+                        Chargé le '.core::convertDate($attach["creer"]).' par '.$attach["user"].'
+                        <div id="select-attach-'.$attach["id"].'" style="color:red;"></div>
+                    </div>';
+                if($key == 0){ 
+                    echo '
+                            <button type="button" class="btn btn btn-outline-primary" onclick="window.open(\'/document.php?id=' . $attach["id"] . '\', \'_blank\')"><i class="bi bi-eye-fill"></i></button>
+                        ';
+                } else {
+                    echo '<div class="btn-group">
+                        <button type="button" class="btn btn btn-outline-primary" onclick="window.open(\'/document.php?id=' . $attach["id"] . '\', \'_blank\')"><i class="bi bi-eye-fill"></i></button>
+                        <button type="button" class="btn btn-outline-danger" onclick="deleteAttachment(\''.$attach["id"].'\')" id="button-attach-'.$attach["id"].'"><i class="bi bi-trash"></i></button>
+                    </div>';
+                }
+                echo '</li>';
+                    
+        }
+        echo '</ol><br />';
+    }
+
 }

+ 53 - 26
core/views/pages/cms.document.php

@@ -25,6 +25,10 @@ if (core::getGet("id") == NULL) {
     $titre = "[#" . $document["id"] . "] " . $document["titre"];
 }
 
+if (core::isDebug()) {
+    debug::log($datas, "Données brutes");
+}
+
 $userTags = user::getUserById(session::getId())["tags"];
 
 ?>
@@ -129,27 +133,28 @@ if (isset($document["id"])) {
             </div>
             <br />
 
-            <?php if (isset($document) and tags::compareUserDocument($userTags, $document["tagsUser"]) == TRUE) {
-                $checkDone = (isset($document["id_user_done"])) ? " checked disabled" : NULL;
-                $checkText = (isset($document["id_user_done"])) ? "Ce document a été traité par " . $document["doneUser"] . " le " . $document["date_done"] : "Ce document a été traité";
-            ?>
-                <div class="form-check form-switch">
-                    <input class="form-check-input" style="width:40px; height:20px;" type="checkbox" name="done" id="doneDocument" <?php echo $checkDone ?>>
-                    <label class="form-check-label" style="font-size:larger; margin-left:10px;" for="doneDocument" id="doneDocumentTxt"><?php echo $checkText ?></label>
-                </div>
-                <br />
-            <?php } ?>
-
             <?php if (isset($files[0]["id"])) { ?>
-                <div class="form-group" style="opacity:0.5">
-                    <label style="color:var(--bs-link-color)">Nom du fichier</label>
-                    <input type="text" class="form-control" style="border-color:var(--bs-link-color); color:var(--bs-link-color);" value="<?php echo $files[0]["name"] ?>" readonly>
-                </div>
-                <br />
 
-                <div class="form-group" style="opacity:0.5">
-                    <label style="color:var(--bs-link-color)">Taille</label>
-                    <input type="text" class="form-control" style="border-color:var(--bs-link-color); color:var(--bs-link-color)" value="<?php echo $files[0]["size"] ?>" readonly>
+                <div style="border:1px #CCCCCC solid; background-color:#F6F6F6; padding:20px;">
+
+                    <?php if (isset($document) and tags::compareUserDocument($userTags, $document["tagsUser"]) == TRUE) {
+                        $checkDone = (isset($document["id_user_done"])) ? " checked disabled" : NULL;
+                        $checkText = (isset($document["id_user_done"])) ? "Ce document a été traité par " . $document["doneUser"] . " le " . $document["date_done"] : "Déclarer ce document comme traité.";
+                    ?>
+                        <div class="form-check form-switch">
+                            <input class="form-check-input" style="width:40px; height:20px;" type="checkbox" name="done" id="doneDocument" <?php echo $checkDone ?>>
+                            <label class="form-check-label" style="font-size:larger; margin-left:10px;" for="doneDocument" id="doneDocumentTxt"><?php echo $checkText ?></label>
+                        </div>
+                        <br />
+                    <?php } ?>
+                
+                <?php document::printAttachement($files); ?>
+
+                    <div class="file-drop-area">
+                        <span class="choose-file-button">Ajouter une pièce jointe</span>
+                        <span class="file-message">ou drag & drop</span>
+                        <input id="attachement-document" class="import-excel" name="attachement-document" type="file" onchange="dargAndDropAttachment()">
+                    </div>
                 </div>
                 <br />
             <?php } ?>
@@ -167,9 +172,6 @@ if (isset($document["id"])) {
             <?php } else {
                 $heigh = (mime_content_type(file::download($files[0]["id"], DIR_DATAS_DOCS)) == "application/pdf") ? "height:110vh;" : NULL;
                 echo '  <div style="margin-top:22px;">
-                        <a href="/document.php?id=' . $files[0]["id"] . '" target="_blank" style="right:0;">
-                            <input class="btn btn-outline-secondary btn-sm" style="width: 100%; opacity:0.6;" value="Ouvrir le document">
-                        </a>
                         <embed src="/document.php?id=' . $files[0]["id"] . '" style="width:100%; margin-top:10px;' . $heigh . '" /></embed>
                     </div><br />
                     ';
@@ -183,22 +185,26 @@ if (isset($document["id"])) {
 </form>
 
 <script>
+    
     function validateAndSubmit() {
         const form = document.getElementById('form-document');
         const requiredFields = form.querySelectorAll('[required]');
-        const fileDoc = document.getElementById('file-document-import');
         let allFieldsFilled = true;
 
         requiredFields.forEach(field => {
-            if (!field.value.trim()) { 
-                if(field.name === "document-import"){
+            if (!field.value.trim()) {
+                alert(field.name);
+                if (field.name === "document-import") {
+                    const fileDoc = document.getElementById('file-document-import');
                     fileDoc.style.borderColor = 'red';
                 }
                 allFieldsFilled = false;
                 field.style.borderColor = 'red';
             } else {
                 field.style.borderColor = '';
-                fileDoc.style.borderColor = '';
+                if (typeof fileDoc !== 'undefined' && fileDoc !== null) {
+                    fileDoc.style.borderColor = '';
+                }
             }
         });
 
@@ -212,6 +218,27 @@ if (isset($document["id"])) {
         $(".file-message").text($(".file-message").text().replace("ou drag & drop", fileName));
     }
 
+    function dargAndDropAttachment() {
+        var fileName = $("#attachement-document").val().split('\\').pop();
+        $(".file-message").text($(".file-message").text().replace("ou drag & drop", fileName));
+    }
+
+    function deleteAttachment(id){ 
+        const elementsCadre = $('#attach-' + id);
+        const elementsAlerte = $('#select-attach-' + id);
+        const elementsButton = $('#button-attach-' + id);
+        if($('#del-jquery-' + id).length) {
+            const elementsRevert = $('#del-jquery-' + id);
+            elementsCadre.css('background-color', '');
+            elementsAlerte.html('');
+            elementsButton.html('<i class="bi bi-trash"></i>');
+        } else {
+            elementsCadre.css('background-color', '#f8d7da');
+            elementsAlerte.html('Ce document sera supprimé à la validation du formulaire.<input id="del-jquery-' + id + '" type="hidden" name="delete-attachement[]" value="' + id + '">');
+            elementsButton.html('<i class="bi bi-x-square-fill"></i>');
+        }   
+    }
+
     function upperCase(input) {
         input.value = input.value.toUpperCase();
     }