Logo ShareMyCode.io ShareMyCode.io
Partagez un extrait de code en quelques secondes.
Voici votre URL de partage
Cliquer pour copier dans le presse-papiers. Copié
Nom du fichier : Sans nom
<?php
class TaskChatPage
{
    private $controllerObj;
    private $controllerType;
    private $taskDetails;
    private $msgList;
    private $chatTasksData;
    private $TasksData;
    private $taskId;
    private $sessionId;
    private $sessionTache;

    public function __construct($controllerObj, $controllerType, $sessionId, $sessionTache)
    {
        $this->controllerObj = $controllerObj;
        $this->controllerType = $controllerType;
        $this->sessionId = $sessionId;
        $this->sessionTache = $sessionTache;

        $this->msgList = $this->fetchMessageList($this->sessionTache);

        $this->TasksData = $this->fetchTasksData();
        $this->chatTasksData = $this->fetchTasksChatData();
    }

    public function fetchTaskDetails($taskID)
    {
        $this->taskId = htmlspecialchars($taskID);
        $this->taskDetails = $this->taskId ? $this->controllerObj->with_tache($this->taskId) ?? [] : null;
    }

    private function fetchMessageList($sessionTache)
    {



        if ($_SESSION['Users_types'] == SUPERADMIN_USERSTYPE) {

            return $this->controllerObj->Tache_chat_all();
        } else {
            // Pour les autres utilisateurs, récupérez les chats par référence de tâche
            $result = $this->controllerObj->getChatsParReferencesTaches($sessionTache);

            // Vérifiez si le résultat est valide
            if ($result !== false) {
                return $result; // Retourne le résultat si valide
            } else {
                // Retourne un tableau vide si le résultat est faux
                return []; // Ou une autre gestion d'erreur appropriée
            }
        }
    }


    private function fetchTasksChatData()
    {

        if ($_SESSION['Users_types'] == SUPERADMIN_USERSTYPE) {
            $taches_chat = $this->controllerObj->Tache_chat_all();
        } else {
            $result = $this->controllerObj->getChatsParReferencesTaches($this->sessionTache);

            if ($result !== false) {
                $taches_chat = $result;
            } else {
                $taches_chat = []; // Ou une autre gestion d'erreur appropriée
            }
        }


        $chatTasksData = [];
        foreach ($taches_chat as $row) {

            $tache = $this->controllerObj->with_taches_nom($row['Id_tache_a_faire']) ?? [];
            $user = $this->controllerObj->Select_One_user($row["Id_users"])[0] ?? [];


            $attachment = $this->controllerObj->one_Tache_chat_Attachment($row['Code_attachement'] ?? null);
            $chatTasksData[] = [
                'id' => $row['Id'],
                'id_tache_a_faire' => $row['Id_tache_a_faire'],
                'title' => $tache['Designation'] ?? 'Titre non disponible',
                'Id_users' => $row['Id_users'] ?? 'user non disponible',
                'Message' => $row['Message'] ?? 'Message non disponible',
                'Sending_Date' => $this->controllerObj->wkDateTimeFormat($row['Sending_Date']) ?? 'Sending_Date non disponible',
                'user' => ($user['Prenom'] ?? 'N/A') . " " . ($user['Nom'] ?? 'N/A'),
                'attachment' => $attachment['Destination'] ?? 'N/A',
            ];
        }

        return $chatTasksData;
    }

    private function fetchTasksData()
    {

        if ($_SESSION['Users_types'] == SUPERADMIN_USERSTYPE) {
            $taches = $this->controllerObj->tache_a_faire_all();
        } else {
            $result = $this->controllerObj->getTachesParReferences($this->sessionTache);

            if ($result !== false) {
                $taches = $result;
            } else {
                $taches = []; // Ou une autre gestion d'erreur appropriée
            }
        }


        $TasksData = [];
        foreach ($taches as $row) {

            $tache = $this->controllerObj->with_taches_nom($row['Id_tache']) ?? [];
            $Admin_user = $this->controllerObj->getUserById($row["Id_admin"]) ?? [];
            $Service = $this->controllerObj->reference_service($row['Id_service']) ?? [];
            $enteprise = $this->controllerObj->one_entreprise($row['Id_entreprise']) ?? [];
            $contrat = $this->controllerObj->reference_contrat($row['Reference_contrat']) ?? [];
            $livrable = $this->controllerObj->reference_livrable($row["Reference_livrable"]) ?? [];

            $TasksData[] = [
                'id' => $row['Id'],
                'reference' => $row['Reference'],
                'title' => $tache['Designation'] ?? 'Titre non disponible',
                'id_livrable' => $row["Reference_livrable"],
                'livrable' => $livrable["Nom_livrable"] ?? "Livrable non définie",
                'admin' => ($Admin_user['Prenom'] ?? 'N/A') . " " . ($Admin_user['Nom'] ?? 'N/A'),
                'contrat' => $contrat['Designation'] ?? 'N/A',
                'service' => $Service["Designation"] ?? 'N/A',
                'id_entreprise' => $row['Id_entreprise'],
                'entreprise' => $enteprise["Denomination_sociale"] ?? 'N/A',
                'start' => date("Y-m-d", strtotime($row['Date_de_fin'] ?? date("Y-m-d"))),
                'end' => date("Y-m-d", strtotime($row['Date_de_fin'] ?? date("Y-m-d"))),
                'url' => '?controller=Admin&task=tache_report&IdF=' . $row['Id'] . '&IdT=' . $row['Id_tache']
            ];
        }

        return $TasksData;
    }

    private function generateHead()
    {
        return <<<HTML
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Modern Messaging Interface</title>
        <link rel="stylesheet" href="views/common/css/Taches_chat_detail.css">
        <link href="https://cdn.jsdelivr.net/npm/tailwindcss@2.2.19/dist/tailwind.min.css" rel="stylesheet">
        <script src="https://cdn.jsdelivr.net/npm/alpinejs@3.x.x/dist/cdn.min.js" defer></script>

        <style>
            .selected {
                background-color: #e0f7fa; 
                color: #007bff; 
            }
        </style>
    </head>
    HTML;
    }

    // Function to generate the page header
    private function generateHeader()
    {
        $dashboard = Dashboard;
        $MESSAGERIE = MESSAGERIE;
        return <<<HTML
        <div class="page-header">
            <div class="breadcrumb-nav">
                <i class="fas fa-home"></i>
                <a href="index.php?controller=Admin&task=dashboard">{$dashboard}</a>
                <i class="fas fa-chevron-right"></i>
                <span class="active" style="color: var(--bg-sidebar);">
                    <i class="fa-solid fa-envelope me-2"></i>
                    {$MESSAGERIE}
                </span>
            </div>
        </div>
    HTML;
    }

    // Function to generate the sidebar
    private function generateSidebar()
    {
        $messages = [];
        if (!empty($this->msgList) && is_array($this->msgList)) {
            foreach ($this->msgList as $tmp) {
                $messages[] = $tmp;
            }
        } else {
            // Handle the case where $msgReq is not valid
            $No_messages_available = No_messages_available;
            error_log("Invalid result set provided to generateSidebar.");
            return <<<HTML
        <div class="w-2/5 border-r p-4 sidebar" :class="{ 'hidden': !isSidebarOpen }">

            <div class="mb-4 flex items-center space-x-2 shadow-md rounded-b-lg">
                <div class="text-lg font-bold text-center flex-1">INBOX</div>
                <div class="search-container w-1/2">
                    <input type="text" placeholder="Search messages..." class="w-full p-2 border rounded">
                </div>
            </div>
            
            <div class="space-y-2 overflow-y-auto max-h-150 shadow-md rounded-b-lg" id="taskList">
                <div class="p-2 text-red-500">$No_messages_available</div>
            </div>
        </div>
        HTML;
        }

        // Sort messages by date (newest first)
        usort($messages, function ($a, $b) {
            return strtotime($b['Sending_Date']) - strtotime($a['Sending_Date']);
        });

        // Group messages by task and company
        $groupedTasks = [];
        foreach ($messages as $msgList) {
            $taskToDoId = $msgList["Id_tache_a_faire"];
            $companyId = $msgList["Id_entreprise"];
            $key = $taskToDoId . '_' . $companyId;

            if (!isset($groupedTasks[$key])) {
                $groupedTasks[$key] = $msgList;
            }
        }

        // Generate sidebar content
        $sidebarContent = '';
        foreach ($groupedTasks as $msgList) {

            $gettaskDetails = $this->controllerObj->with_tache_a_faire($msgList["Id_tache_a_faire"]) ?? [];

            $taskDetails = null;

            if (!empty($gettaskDetails) && !empty($gettaskDetails['Id_tache'])) {
                $result = $this->controllerObj->with_taches_nom($gettaskDetails['Id_tache']);
                $taskDetails = $result ? $result ?? [] : null;
            }


            $designation = isset($taskDetails["Designation"]) ? htmlspecialchars($taskDetails["Designation"]) : "Tâche non définie";

            $sendingDate = isset($msgList['Sending_Date']) ? $this->controllerObj->wkDateTimeFormat($msgList['Sending_Date']) : "Date inconnue";
            $taskToDoId = htmlspecialchars($msgList["Id_tache_a_faire"]);
            $companyId = htmlspecialchars($msgList["Id_entreprise"]);

            $sidebarContent .= <<<HTML
        <div class="p-2 hover:bg-gray-100 rounded shadow-md rounded-b-lg cursor-pointer task-item" data-task-id="{$taskToDoId}" data-company-id="{$companyId}">
            <div class="flex justify-between items-center">
                <h6 class="truncate flex-1">$designation</h6>
                <h6 class="font-semibold whitespace-nowrap ml-2">$sendingDate</h6>
            </div>
        </div>
        HTML;
        }

        return <<<HTML
    <div class="w-2/5 border-r p-4 sidebar" :class="{ 'hidden': !isSidebarOpen }">
        <div class="mb-4 flex items-center shadow-md rounded-b-lg">
            <div class="search-container w-full">
                <input  type="text" id="messageSearch" placeholder="Search messages..." class="w-full p-3 border rounded text-lg" >
            </div>
        </div>
       
        <div class="space-y-2 shadow-md rounded-b-lg sidebar" id="taskList" style="max-height: 480px; overflow-y: auto; margin-bottom:10px; background: linear-gradient(180deg, var(--primary-color), var(--primary-dark)); padding: 1rem;">
            $sidebarContent
        </div>

    </div>
    HTML;
    }

    private function generateMessageInput(): string
    {
        return <<<HTML
    <div class="new-message bg-light p-3 border-top position-relative">
        <div id="emoji-picker" class="emoji-picker"></div>
        <form action="" method="POST" enctype="multipart/form-data" class="d-flex align-items-stretch">
            <input type="hidden" name="Id_tache_a_faire" value="" id="tache_id">
            <input type="hidden" name="Id_entreprise" value="" id="tache_id_entreprise">

            <div class="textarea-content flex-grow-1 me-3">
                <textarea name="Message" id="messageIcon" class="form-control" rows="6" maxlength="5000" 
                    placeholder="{$this->controllerObj->escapeHtml(WRITE_MESSAGE)}" required></textarea>
            </div>

            <div class="button-group d-flex flex-column justify-content-between">
                <div class="file-upload mb-2">
                    <label for="attachments" class="btn btn-outline-secondary btn-sm">
                        <i class="fa-solid fa-paperclip"></i>
                        <span id="file-name">{$this->controllerObj->escapeHtml(ATTACH_FILE)}</span>
                        <input type="file" id="attachments" name="myfile" style="display:none;" onchange="displayFileName()">
                    </label>
                </div>
                <button type="submit" name="send_message" class="btn btn-primary align-self-end">
                    {$this->controllerObj->escapeHtml(SEND_MESSAGE)}
                </button>
            </div>
        </form>
    </div>
    HTML;
    }

    private function generate_select_options($data, $selectedValue, $displayName, $valueName)
    {
        $options = "<option value=''>Choose</option>";
        foreach ($data as $item) {
            $selected = ($item[$valueName] == $selectedValue) ? 'selected' : '';
            $displayText = htmlspecialchars($item[$displayName], ENT_QUOTES, 'UTF-8');
            $options .= "<option value='{$item[$valueName]}' {$selected}>{$displayText}</option>";
        }
        return $options;
    }

    public function handleFormSubmission()
    {
        if (isset($_POST["action"]) && $_POST["action"] == "supprimerMessageSeul") {
            $messageId = $_POST["messageId"];
            // Vous devez créer cette méthode dans votre contrôleur
            $this->controllerObj->supprimerMessage($messageId);
            header('Location: ' . $_SERVER['REQUEST_URI']);
            exit();
        }

        if (isset($_POST["Envoyer"])) {
            $taskToDoId = $_POST["Id_tache_a_faire"] ?? $this->taskDetails["Id"];
            $companyId = $_POST["Id_entreprise"] ?? null;
            $message = $_POST["Message"] ?? null;
            $gettaskDetails = $this->controllerObj->with_tache_a_faire($taskToDoId) ?? [];

            $error = $this->controllerObj->add_tache_chat($companyId, $taskToDoId, $message, $gettaskDetails['Reference']);

            header('Location: index.php?controller=' . $this->controllerType . '&task=tache_report');

            exit();
        }

        if (isset($_POST["send_message"])) {
            $taskToDoId = $_POST["Id_tache_a_faire"] ?? $this->taskDetails["Id"];
            $companyId = $_POST["Id_entreprise"] ?? null;
            $message = $_POST["Message"] ?? null;
            $gettaskDetails = $this->controllerObj->with_tache_a_faire($taskToDoId) ?? [];
            $error = $this->controllerObj->add_tache_chat($companyId, $taskToDoId, $message, $gettaskDetails['Reference']);
            header("Refresh: 0");

            //header('Refresh: 0; url=index.php?controller=' . $this->controllerType . '&task=tache_report');
            // exit();
        }

        if (isset($_POST["download"])) {
            $this->controllerObj->download_attachement();
            header("Refresh: 0");
            exit();
        }
    }


    public function rendertemplate()
    {
        $this->handleFormSubmission();
        $pageHead = $this->generateHead();
        $headerContent = $this->generateHeader();
        $sidebarContent = $this->generateSidebar();

        // Générer le modal
        $modalContent = $this->generateMyModal($this->controllerObj);

        echo $pageHead;
?>
        <!DOCTYPE html>
        <html>

        <body class="bg-gray-100">
            <div class="w-full p-4" x-data="{ isSidebarOpen: true }">
                <?php echo $headerContent; ?>
                <div class="flex mt-4 bg-white" style="height: 82vh;">
                    <?php echo $sidebarContent; ?>
                    <div class="main-content">
                        <div class="header flex items-center w-full shadow-md rounded-b-lg " id="message-header"></div>
                        <div id="message-container" class="flex-1 overflow-y-auto space-y-4 p-4" style="max-height: 70vh;"></div>
                        <?php echo $this->generateMessageInput(); ?>
                    </div>
                </div>
            </div>

            <!-- Intégrer le modal généré par PHP -->
            <?php echo $modalContent; ?>
            <!-- Pass PHP variables to JavaScript -->
            <script>
                // Pass data to JavaScript
                const tasksData = <?= json_encode($this->chatTasksData) ?>;
                const tasksFaire = <?= json_encode($this->TasksData) ?>;
                const SESSION_USER_ID = <?= json_encode($this->sessionId) ?>;
            </script>

            <!-- Inclure le fichier JS externe -->
            <script src="<?= VIEWS_COMMON ?>/js/Taches_chat_detail.js" defer></script>

        </body>

        </html>
    <?php
    }

    public function generateMyModal($controllerObj)
    {
        ob_start();
    ?>
        <div class="modal fade" id="myModal" tabindex="-1" aria-labelledby="myModalLabel" aria-hidden="true">
            <div class="modal-dialog">
                <div class="modal-content">
                    <div class="modal-header text-center" style="background-color: var(--bg-sidebar);">
                        <h5 class="modal-title" id="myModalLabel"><?= Add_Messages ?></h5>
                        <button type="button" class="btn-close bg-white" data-bs-dismiss="modal" aria-label="Close"></button>
                    </div>
                    <div class="modal-body">
                        <form action="#" method="POST">
                            <?php
                            $Id_tache_a_faire = isset($_GET["IdT"]) && is_numeric($_GET["IdT"])
                                ? (int) $_GET["IdT"]
                                : null;

                            $Id_entreprise = isset($_GET["Id_entreprise"])
                                ? htmlspecialchars($_GET["Id_entreprise"])
                                : null;

                            $taches = $Id_tache_a_faire !== null
                                ? $controllerObj->with_tache($Id_tache_a_faire)
                                : [];

                            $nomtaches = null;

                            // Vérifie que "Id_tache" existe et est numérique
                            if (!empty($taches) && isset($taches['Id_tache']) && is_numeric($taches['Id_tache'])) {
                                $detailsNom = $controllerObj->with_taches_nom((int)$taches['Id_tache']);
                                $nomtaches = $detailsNom['Designation'] ?? null;
                            }

                            ?>
                            <input type="hidden" name="Id_tache_a_faire" value="<?= $Id_tache_a_faire ?? '' ?>">
                            <input type="hidden" name="Id_entreprise" value="<?= $Id_entreprise ?? '' ?>">


                            <div class="w-full">
                                <label for="depone" class="form-label text-sm font-medium text-gray-700"> <?= Objet ?></label>
                                <input type="text" class="form-control mt-1 block w-full p-3 rounded-lg border border-gray-300 focus:ring-2 focus:ring-blue-500" name="" id="depone_objet" readonly value="<?= isset($nomtaches) ? htmlspecialchars($nomtaches, ENT_QUOTES, 'UTF-8') : ''; ?>">
                            </div>

                            <div class="mt-4">
                                <label for="Description" class="form-label text-sm font-medium text-gray-700"><?= MESSAGE ?></label>
                                <textarea name="Message" id="Description" class="form-control mt-1 block w-full p-3 rounded-lg border border-gray-300 focus:ring-2 focus:ring-blue-500" rows="5" required></textarea>
                            </div>
                    </div>
                    <div class="modal-footer bg-gray-100 rounded-b-lg">
                        <button type="submit" name="Envoyer" class="btn btn-success"> <?= Send ?></button>
                    </div>
                    </form>
                </div>
            </div>
        </div>
<?php
        return ob_get_clean();
    }
}

?>
Informations
Cet extrait a été créé le
10 Feb 2026 à 15:34:19
Cet extrait expire le
12 Mar 2026 à 15:34:19
Langage :
php
Lien
Demander la suppression