188 lines
7.6 KiB
PHP
Executable File
188 lines
7.6 KiB
PHP
Executable File
<?php
|
|
defined('APP_VERSION') || define('APP_VERSION', date('YmdHi'));
|
|
|
|
// Initialisation de la langue par défaut si non définie
|
|
$_SESSION['lang'] = isset($_SESSION['lang']) ? $_SESSION['lang'] : 'fr_FR';
|
|
|
|
// Raccourci booléen réutilisable dans ce fichier
|
|
$isEn = ($_SESSION['lang'] === 'en_US');
|
|
?>
|
|
<!doctype html>
|
|
<html lang="<?= $isEn ? 'en' : 'fr' ?>">
|
|
<head>
|
|
<meta charset="UTF-8" />
|
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
<base href="<?= $racineWeb ?>">
|
|
<link rel="icon" href="Bootstrap_new/images/favicon.ico" />
|
|
|
|
<!-- Bootstrap -->
|
|
<link rel="stylesheet" href="Bootstrap_new/login/vendor/bootstrap/css/bootstrap.min.css">
|
|
<!-- Font Awesome 5 -->
|
|
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/all.min.css">
|
|
<!-- SweetAlert2 -->
|
|
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/sweetalert2@11.14.1/dist/sweetalert2.min.css">
|
|
<!-- Portail — feuille de styles centralisée -->
|
|
<link rel="stylesheet" href="Bootstrap_new/css/style-portail.css?ver=<?= APP_VERSION ?>">
|
|
|
|
<title><?= $titre ?></title>
|
|
</head>
|
|
<body>
|
|
|
|
<div class="portail-wrapper">
|
|
|
|
<!-- ======================================================
|
|
PANNEAU GAUCHE — Carrousel
|
|
====================================================== -->
|
|
<div class="slide-container">
|
|
|
|
<div class="slides">
|
|
<img src="assets/img/slides/image01.jpg" alt="slide 1" class="slide active" />
|
|
<img src="assets/img/slides/image02.jpg" alt="slide 2" class="slide" />
|
|
<img src="assets/img/slides/image03.jpg" alt="slide 3" class="slide" />
|
|
<img src="assets/img/slides/image04.jpg" alt="slide 4" class="slide" />
|
|
<img src="assets/img/slides/image05.jpg" alt="slide 5" class="slide" />
|
|
<img src="assets/img/slides/image06.jpg" alt="slide 6" class="slide" />
|
|
<img src="assets/img/slides/image07.jpg" alt="slide 7" class="slide" />
|
|
<img src="assets/img/slides/image08.jpg" alt="slide 8" class="slide" />
|
|
<img src="assets/img/slides/image09.jpeg" alt="slide 9" class="slide" />
|
|
</div>
|
|
|
|
<button class="slide-btn prev" aria-label="<?= $isEn ? 'Previous' : 'Précédent' ?>">
|
|
<i class="fas fa-chevron-left"></i>
|
|
</button>
|
|
<button class="slide-btn next" aria-label="<?= $isEn ? 'Next' : 'Suivant' ?>">
|
|
<i class="fas fa-chevron-right"></i>
|
|
</button>
|
|
|
|
<div class="dotsContainer">
|
|
<div class="dot active" attr="0" onclick="switchImage(this)"></div>
|
|
<div class="dot" attr="1" onclick="switchImage(this)"></div>
|
|
<div class="dot" attr="2" onclick="switchImage(this)"></div>
|
|
<div class="dot" attr="3" onclick="switchImage(this)"></div>
|
|
<div class="dot" attr="4" onclick="switchImage(this)"></div>
|
|
<div class="dot" attr="5" onclick="switchImage(this)"></div>
|
|
<div class="dot" attr="6" onclick="switchImage(this)"></div>
|
|
<div class="dot" attr="7" onclick="switchImage(this)"></div>
|
|
<div class="dot" attr="8" onclick="switchImage(this)"></div>
|
|
</div>
|
|
|
|
<!-- Badge marque + caption bilingue synchronisé avec le carrousel -->
|
|
<div class="slide-brand">
|
|
<h2>INTER SANTE © — v2026</h2>
|
|
<p class="slide-subtitle">
|
|
ERP SaaS —
|
|
<span id="description">Solution de Gestion Santé Intégrée</span>
|
|
</p>
|
|
<p class="slide-caption" id="slideCaption"></p>
|
|
</div>
|
|
|
|
</div><!-- /Carrousel -->
|
|
|
|
|
|
<!-- ======================================================
|
|
PANNEAU DROIT — Formulaire de connexion
|
|
====================================================== -->
|
|
<div class="form-panel">
|
|
|
|
<!-- Champ technique racineWeb (lu par les scripts JS existants) -->
|
|
<input class="sr-only" type="text" id="racineWeb" name="racineWeb" value="<?= $racineWeb ?>">
|
|
|
|
<!-- Logo -->
|
|
<img src="assets/img/logo_portail_gestionnaire.png"
|
|
alt="Logo INTER SANTE"
|
|
class="form-logo">
|
|
|
|
<!-- Contenu injecté par le contrôleur (index.php → french.php / english.php) -->
|
|
<?= $contenu ?>
|
|
|
|
</div><!-- /Formulaire -->
|
|
|
|
</div><!-- /portail-wrapper -->
|
|
|
|
|
|
<!-- ======================================================
|
|
SCRIPTS
|
|
====================================================== -->
|
|
<script src="Bootstrap_new/login/vendor/jquery/jquery-3.2.1.min.js"></script>
|
|
<script src="Bootstrap_new/login/vendor/bootstrap/js/popper.js"></script>
|
|
<script src="Bootstrap_new/login/vendor/bootstrap/js/bootstrap.min.js"></script>
|
|
<script src="https://cdn.jsdelivr.net/npm/sweetalert2@11.14.1/dist/sweetalert2.all.min.js"></script>
|
|
|
|
<script>
|
|
|
|
/* ----------------------------------------------------------
|
|
Protection clic droit
|
|
---------------------------------------------------------- */
|
|
if (document.addEventListener) {
|
|
document.addEventListener('contextmenu', function (e) { e.preventDefault(); }, false);
|
|
} else {
|
|
document.attachEvent('oncontextmenu', function () { window.event.returnValue = false; });
|
|
}
|
|
|
|
/* ----------------------------------------------------------
|
|
Carrousel
|
|
---------------------------------------------------------- */
|
|
var slideImages = document.querySelectorAll('.slide');
|
|
var nextBtn = document.querySelector('.next');
|
|
var prevBtn = document.querySelector('.prev');
|
|
var dots = document.querySelectorAll('.dot');
|
|
var counter = 0;
|
|
var deletInterval;
|
|
|
|
// Affiche le caption de la première slide au chargement
|
|
updateCaption(0);
|
|
|
|
nextBtn.addEventListener('click', slideNext);
|
|
prevBtn.addEventListener('click', slidePrev);
|
|
|
|
function slideNext() {
|
|
slideImages[counter].style.animation = 'next1 0.5s ease-in forwards';
|
|
counter = (counter >= slideImages.length - 1) ? 0 : counter + 1;
|
|
slideImages[counter].style.animation = 'next2 0.5s ease-in forwards';
|
|
indicators();
|
|
updateCaption(counter);
|
|
}
|
|
|
|
function slidePrev() {
|
|
slideImages[counter].style.animation = 'prev1 0.5s ease-in forwards';
|
|
counter = (counter === 0) ? slideImages.length - 1 : counter - 1;
|
|
slideImages[counter].style.animation = 'prev2 0.5s ease-in forwards';
|
|
indicators();
|
|
updateCaption(counter);
|
|
}
|
|
|
|
function autoSliding() {
|
|
deletInterval = setInterval(function () { slideNext(); }, 3000);
|
|
}
|
|
autoSliding();
|
|
|
|
var sliderEl = document.querySelector('.slide-container');
|
|
sliderEl.addEventListener('mouseover', function () { clearInterval(deletInterval); });
|
|
sliderEl.addEventListener('mouseout', autoSliding);
|
|
|
|
function indicators() {
|
|
dots.forEach(function (d) { d.classList.remove('active'); });
|
|
dots[counter].classList.add('active');
|
|
}
|
|
|
|
function switchImage(el) {
|
|
var id = parseInt(el.getAttribute('attr'));
|
|
if (id === counter) return;
|
|
if (id > counter) {
|
|
slideImages[counter].style.animation = 'next1 0.5s ease-in forwards';
|
|
counter = id;
|
|
slideImages[counter].style.animation = 'next2 0.5s ease-in forwards';
|
|
} else {
|
|
slideImages[counter].style.animation = 'prev1 0.5s ease-in forwards';
|
|
counter = id;
|
|
slideImages[counter].style.animation = 'prev2 0.5s ease-in forwards';
|
|
}
|
|
indicators();
|
|
updateCaption(counter);
|
|
}
|
|
</script>
|
|
|
|
</body>
|
|
</html>
|