{"id":1780,"date":"2026-06-27T22:02:35","date_gmt":"2026-06-28T03:02:35","guid":{"rendered":"https:\/\/evolutatv.com\/?page_id=1780"},"modified":"2026-06-27T22:02:35","modified_gmt":"2026-06-28T03:02:35","slug":"login-agents","status":"publish","type":"page","link":"https:\/\/evolutatv.com\/index.php\/login-agents\/","title":{"rendered":"Login agents"},"content":{"rendered":"<p><?php\n\/*\n  EvolutaTV - Statut agents Messenger\n  Version : login s\u00e9curis\u00e9 par agent\n  \u00c0 placer dans : \/Agents\/agent-status.php\n\n  Liens :\n  - Connexion agents : https:\/\/evolutatv.com\/Agents\/agent-status.php\n  - API widget      : https:\/\/evolutatv.com\/Agents\/agent-status.php?api=1\n*\/\n\nsession_start();\n\n\/* ============================\n   CONFIGURATION DES AGENTS\n   ============================\n\n   Les mots de passe sont s\u00e9curis\u00e9s avec password_hash().\n   Ne pas mettre les mots de passe en clair ici.\n*\/\n\n$AGENTS = [\n    'sam' => [<br \/>\n        &lsquo;username&rsquo; => &lsquo;sam&rsquo;,<br \/>\n        &lsquo;name&rsquo; => &lsquo;Sam &#8211; Service client&rsquo;,<br \/>\n        &lsquo;avatar&rsquo; => &lsquo;S&rsquo;,<br \/>\n        &lsquo;password_hash&rsquo; => &lsquo;$2y$12$vSGeeQYLVXTWbcuabwCabeeC26eepHwleiaYbaogitlpdiBLCrriK&rsquo;<br \/>\n    ],<br \/>\n    &lsquo;bruno&rsquo; => [<br \/>\n        &lsquo;username&rsquo; => &lsquo;bruno&rsquo;,<br \/>\n        &lsquo;name&rsquo; => &lsquo;Bruno &#8211; Service client&rsquo;,<br \/>\n        &lsquo;avatar&rsquo; => &lsquo;B&rsquo;,<br \/>\n        &lsquo;password_hash&rsquo; => &lsquo;$2y$12$YcMcAxuTdfV5W4DgYaurX.8oGXtpPq3R0WpTZVooG3BTBFB1M71ZO&rsquo;<br \/>\n    ]<br \/>\n];<\/p>\n<p>$statusFile = __DIR__ . &lsquo;\/agents-status.json&rsquo;;<\/p>\n<p>$defaultStatus = [];<br \/>\nforeach ($AGENTS as $agentKey => $agentData) {<br \/>\n    $defaultStatus[$agentKey] = false;<br \/>\n}<\/p>\n<p>\/* ============================<br \/>\n   CR\u00c9ATION \/ LECTURE STATUS<br \/>\n   ============================ *\/<\/p>\n<p>if (!file_exists($statusFile)) {<br \/>\n    file_put_contents($statusFile, json_encode($defaultStatus, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE));<br \/>\n}<\/p>\n<p>$status = json_decode(file_get_contents($statusFile), true);<\/p>\n<p>if (!is_array($status)) {<br \/>\n    $status = $defaultStatus;<br \/>\n}<\/p>\n<p>foreach ($defaultStatus as $agentKey => $value) {<br \/>\n    if (!array_key_exists($agentKey, $status)) {<br \/>\n        $status[$agentKey] = false;<br \/>\n    }<br \/>\n}<\/p>\n<p>\/* ============================<br \/>\n   API POUR LE WIDGET<br \/>\n   ============================ *\/<\/p>\n<p>if (isset($_GET[&lsquo;api&rsquo;]) &#038;&#038; $_GET[&lsquo;api&rsquo;] === &lsquo;1&rsquo;) {<br \/>\n    header(&lsquo;Content-Type: application\/json; charset=utf-8&rsquo;);<br \/>\n    header(&lsquo;Cache-Control: no-store, no-cache, must-revalidate, max-age=0&rsquo;);<br \/>\n    echo json_encode($status, JSON_UNESCAPED_UNICODE);<br \/>\n    exit;<br \/>\n}<\/p>\n<p>\/* ============================<br \/>\n   D\u00c9CONNEXION<br \/>\n   ============================ *\/<\/p>\n<p>if (isset($_GET[&lsquo;logout&rsquo;])) {<br \/>\n    session_destroy();<br \/>\n    header(&lsquo;Location: agent-status.php&rsquo;);<br \/>\n    exit;<br \/>\n}<\/p>\n<p>\/* ============================<br \/>\n   CONNEXION<br \/>\n   ============================ *\/<\/p>\n<p>$error = \u00a0\u00bb;<\/p>\n<p>if ($_SERVER[&lsquo;REQUEST_METHOD&rsquo;] === &lsquo;POST&rsquo; &#038;&#038; isset($_POST[&lsquo;login&rsquo;])) {<br \/>\n    $username = strtolower(trim($_POST[&lsquo;username&rsquo;] ?? \u00a0\u00bb));<br \/>\n    $password = $_POST[&lsquo;password&rsquo;] ?? \u00a0\u00bb;<\/p>\n<p>    $foundAgentKey = null;<\/p>\n<p>    foreach ($AGENTS as $agentKey => $agentData) {<br \/>\n        if (strtolower($agentData[&lsquo;username&rsquo;]) === $username) {<br \/>\n            $foundAgentKey = $agentKey;<br \/>\n            break;<br \/>\n        }<br \/>\n    }<\/p>\n<p>    if ($foundAgentKey !== null &#038;&#038; password_verify($password, $AGENTS[$foundAgentKey][&lsquo;password_hash&rsquo;])) {<br \/>\n        session_regenerate_id(true);<br \/>\n        $_SESSION[&lsquo;agent_key&rsquo;] = $foundAgentKey;<br \/>\n        header(&lsquo;Location: agent-status.php&rsquo;);<br \/>\n        exit;<br \/>\n    } else {<br \/>\n        $error = &lsquo;Nom d\u2019utilisateur ou mot de passe incorrect.&rsquo;;<br \/>\n    }<br \/>\n}<\/p>\n<p>\/* ============================<br \/>\n   CHANGEMENT DE STATUT<br \/>\n   Chaque agent change seulement son propre statut.<br \/>\n   ============================ *\/<\/p>\n<p>if (isset($_SESSION[&lsquo;agent_key&rsquo;]) &#038;&#038; isset($_POST[&lsquo;set_status&rsquo;])) {<br \/>\n    $agentKey = $_SESSION[&lsquo;agent_key&rsquo;];<\/p>\n<p>    if (array_key_exists($agentKey, $AGENTS)) {<br \/>\n        $newStatus = $_POST[&lsquo;set_status&rsquo;] === &lsquo;1&rsquo;;<br \/>\n        $status[$agentKey] = $newStatus;<\/p>\n<p>        file_put_contents($statusFile, json_encode($status, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE));<\/p>\n<p>        header(&lsquo;Location: agent-status.php&rsquo;);<br \/>\n        exit;<br \/>\n    }<br \/>\n}<\/p>\n<p>$isLoggedIn = isset($_SESSION[&lsquo;agent_key&rsquo;]) &#038;&#038; array_key_exists($_SESSION[&lsquo;agent_key&rsquo;], $AGENTS);<br \/>\n$currentAgentKey = $isLoggedIn ? $_SESSION[&lsquo;agent_key&rsquo;] : null;<br \/>\n$currentAgent = $isLoggedIn ? $AGENTS[$currentAgentKey] : null;<br \/>\n$currentStatus = $isLoggedIn ? (bool)$status[$currentAgentKey] : false;<\/p>\n<p>?><br \/>\n<!DOCTYPE html><br \/>\n<html lang=\"fr\"><br \/>\n<head><br \/>\n  <meta charset=\"UTF-8\"><br \/>\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"><br \/>\n  <title>Connexion agents EvolutaTV<\/title><\/p>\n<style>\n    * {\n      box-sizing: border-box;\n    }<\/p>\n<p>    body {\n      margin: 0;\n      min-height: 100vh;\n      font-family: Arial, sans-serif;\n      background: radial-gradient(circle at top, #123247 0%, #0d1117 55%, #05070a 100%);\n      color: white;\n      display: flex;\n      align-items: center;\n      justify-content: center;\n      padding: 20px;\n    }<\/p>\n<p>    .box {\n      width: 100%;\n      max-width: 430px;\n      background: #111827;\n      border: 2px solid #2ee6ff;\n      border-radius: 20px;\n      box-shadow: 0 0 25px rgba(46,230,255,0.35);\n      overflow: hidden;\n    }<\/p>\n<p>    .header {\n      padding: 22px;\n      background: linear-gradient(135deg, #0d1117, #122033);\n      border-bottom: 3px solid #ff7a00;\n      text-align: center;\n    }<\/p>\n<p>    .header h1 {\n      margin: 0 0 6px 0;\n      color: #ffffff;\n      font-size: 23px;\n    }<\/p>\n<p>    .header p {\n      margin: 0;\n      color: #c9f8ff;\n      font-size: 14px;\n    }<\/p>\n<p>    .content {\n      padding: 22px;\n    }<\/p>\n<p>    label {\n      display: block;\n      margin-bottom: 6px;\n      font-weight: bold;\n      font-size: 14px;\n      color: #e5e7eb;\n    }<\/p>\n<p>    input[type=\"text\"],\n    input[type=\"password\"] {\n      width: 100%;\n      padding: 12px;\n      margin-bottom: 15px;\n      border: 1px solid #374151;\n      border-radius: 10px;\n      background: #0b1220;\n      color: white;\n      font-size: 15px;\n      outline: none;\n    }<\/p>\n<p>    input[type=\"text\"]:focus,\n    input[type=\"password\"]:focus {\n      border-color: #2ee6ff;\n      box-shadow: 0 0 0 2px rgba(46,230,255,0.15);\n    }<\/p>\n<p>    .btn {\n      width: 100%;\n      border: none;\n      border-radius: 12px;\n      padding: 12px 14px;\n      font-weight: bold;\n      font-size: 15px;\n      cursor: pointer;\n      color: white;\n      text-decoration: none;\n      display: inline-block;\n      text-align: center;\n      transition: transform 0.15s ease, opacity 0.15s ease;\n    }<\/p>\n<p>    .btn:hover {\n      transform: translateY(-1px);\n      opacity: 0.92;\n    }<\/p>\n<p>    .btn-login {\n      background: linear-gradient(135deg, #00cfff, #0b74ff);\n    }<\/p>\n<p>    .btn-online {\n      background: #22c55e;\n      margin-bottom: 10px;\n    }<\/p>\n<p>    .btn-offline {\n      background: #ef4444;\n      margin-bottom: 10px;\n    }<\/p>\n<p>    .btn-logout {\n      background: #374151;\n      margin-top: 10px;\n    }<\/p>\n<p>    .error {\n      background: rgba(239,68,68,0.15);\n      border: 1px solid #ef4444;\n      color: #fecaca;\n      padding: 10px;\n      border-radius: 10px;\n      margin-bottom: 15px;\n      font-size: 14px;\n    }<\/p>\n<p>    .agent-card {\n      background: #1f2937;\n      border-radius: 16px;\n      padding: 18px;\n      margin-bottom: 15px;\n      display: flex;\n      align-items: center;\n      gap: 14px;\n    }<\/p>\n<p>    .avatar {\n      width: 52px;\n      height: 52px;\n      border-radius: 50%;\n      background: linear-gradient(135deg, #ff7a00, #ff9d2f);\n      display: flex;\n      align-items: center;\n      justify-content: center;\n      color: white;\n      font-weight: bold;\n      font-size: 24px;\n      flex-shrink: 0;\n    }<\/p>\n<p>    .agent-name {\n      font-size: 18px;\n      font-weight: bold;\n      margin-bottom: 4px;\n    }<\/p>\n<p>    .status-online {\n      color: #22c55e;\n      font-weight: bold;\n      font-size: 14px;\n    }<\/p>\n<p>    .status-offline {\n      color: #ef4444;\n      font-weight: bold;\n      font-size: 14px;\n    }<\/p>\n<p>    .small {\n      color: #9ca3af;\n      font-size: 12px;\n      text-align: center;\n      margin-top: 14px;\n      line-height: 1.4;\n    }\n  <\/style>\n<p><\/head><br \/>\n<body><\/p>\n<div class=\"box\">\n<div class=\"header\">\n<h1>Agents EvolutaTV<\/h1>\n<p>Connexion s\u00e9curis\u00e9e<\/p>\n<\/p><\/div>\n<div class=\"content\">\n    <?php if (!$isLoggedIn): ?><\/p>\n<p>      <?php if ($error): ?><\/p>\n<div class=\"error\"><?= htmlspecialchars($error) ?><\/div>\n<p>      <?php endif; ?><\/p>\n<form method=\"post\" action=\"agent-status.php\" autocomplete=\"off\">\n        <label for=\"username\">Nom d\u2019utilisateur<\/label><br \/>\n        <input type=\"text\" id=\"username\" name=\"username\" required><\/p>\n<p>        <label for=\"password\">Mot de passe<\/label><br \/>\n        <input type=\"password\" id=\"password\" name=\"password\" required><\/p>\n<p>        <button class=\"btn btn-login\" type=\"submit\" name=\"login\" value=\"1\">Se connecter<\/button><br \/>\n      <\/form>\n<div class=\"small\">\n        Chaque agent peut seulement modifier son propre statut.\n      <\/div>\n<p>    <?php else: ?><\/p>\n<div class=\"agent-card\">\n<div class=\"avatar\"><?= htmlspecialchars($currentAgent['avatar']) ?><\/div>\n<div>\n<div class=\"agent-name\"><?= htmlspecialchars($currentAgent['name']) ?><\/div>\n<p>          <?php if ($currentStatus): ?><\/p>\n<div class=\"status-online\">\u25cf Pr\u00e9sentement en ligne<\/div>\n<p>          <?php else: ?><\/p>\n<div class=\"status-offline\">\u25cf Pr\u00e9sentement hors ligne<\/div>\n<p>          <?php endif; ?>\n        <\/div>\n<\/p><\/div>\n<form method=\"post\" action=\"agent-status.php\">\n        <?php if ($currentStatus): ?><br \/>\n          <button class=\"btn btn-offline\" type=\"submit\" name=\"set_status\" value=\"0\">Me mettre hors ligne<\/button><br \/>\n        <?php else: ?><br \/>\n          <button class=\"btn btn-online\" type=\"submit\" name=\"set_status\" value=\"1\">Me mettre en ligne<\/button><br \/>\n        <?php endif; ?><br \/>\n      <\/form>\n<p>      <a class=\"btn btn-logout\" href=\"agent-status.php?logout=1\">D\u00e9connexion<\/a><\/p>\n<div class=\"small\">\n        Le widget du site se mettra \u00e0 jour automatiquement.\n      <\/div>\n<p>    <?php endif; ?>\n  <\/div>\n<\/div>\n<p><\/body><br \/>\n<\/html><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Connexion agents EvolutaTV Agents EvolutaTV Connexion s\u00e9curis\u00e9e Nom d\u2019utilisateur Mot de passe Se connecter Chaque agent peut seulement modifier son propre statut. \u25cf Pr\u00e9sentement en ligne \u25cf Pr\u00e9sentement hors ligne Me mettre hors ligne Me mettre en ligne D\u00e9connexion Le widget du site se mettra \u00e0 jour automatiquement.<\/p>\n","protected":false},"author":2,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_uag_custom_page_level_css":"","site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"class_list":["post-1780","page","type-page","status-publish","hentry"],"uagb_featured_image_src":{"full":false,"thumbnail":false,"medium":false,"medium_large":false,"large":false,"1536x1536":false,"2048x2048":false,"woocommerce_thumbnail":false,"woocommerce_single":false,"woocommerce_gallery_thumbnail":false},"uagb_author_info":{"display_name":"admin iptv","author_link":"https:\/\/evolutatv.com\/index.php\/author\/admin\/"},"uagb_comment_info":0,"uagb_excerpt":"Connexion agents EvolutaTV Agents EvolutaTV Connexion s\u00e9curis\u00e9e Nom d\u2019utilisateur Mot de passe Se connecter Chaque agent peut seulement modifier son propre statut. \u25cf Pr\u00e9sentement en ligne \u25cf Pr\u00e9sentement hors ligne Me mettre hors ligne Me mettre en ligne D\u00e9connexion Le widget du site se mettra \u00e0 jour automatiquement.","_links":{"self":[{"href":"https:\/\/evolutatv.com\/index.php\/wp-json\/wp\/v2\/pages\/1780","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/evolutatv.com\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/evolutatv.com\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/evolutatv.com\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/evolutatv.com\/index.php\/wp-json\/wp\/v2\/comments?post=1780"}],"version-history":[{"count":1,"href":"https:\/\/evolutatv.com\/index.php\/wp-json\/wp\/v2\/pages\/1780\/revisions"}],"predecessor-version":[{"id":1781,"href":"https:\/\/evolutatv.com\/index.php\/wp-json\/wp\/v2\/pages\/1780\/revisions\/1781"}],"wp:attachment":[{"href":"https:\/\/evolutatv.com\/index.php\/wp-json\/wp\/v2\/media?parent=1780"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}