production/Vue/head.php
2026-02-02 18:09:18 +00:00

124 lines
6.1 KiB
PHP
Executable File

<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="description" content="INTER SANTÉ - Gestionnaire de santé">
<meta name="author" content="INTER SANTÉ">
<meta name="robots" content="noindex, nofollow">
<base href="<?= $racineWeb ?>">
<!-- Favicon -->
<link rel="icon" href="Bootstrap_new/images/favicon.ico" type="image/x-icon">
<link rel="apple-touch-icon" href="Bootstrap_new/images/apple-touch-icon.png">
<!-- Preconnect pour améliorer les performances -->
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="dns-prefetch" href="https://cdn.jsdelivr.net">
<!-- Google Fonts -->
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&family=Poppins:wght@400;500;600&display=swap" rel="stylesheet" media="print" onload="this.media='all'">
<!-- Bootstrap 5 CSS -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-9ndCyUaIbzAi2FUVXJi0CjmCapSmO7SnpJef0486qhLnuZ2cdeRhO02iuK6FUUVM" crossorigin="anonymous">
<!-- Font Awesome avec fallback -->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.0/css/all.min.css" integrity="sha512-Avb2QiuDEEvB4bZJYdft2mNjVShBftLdPG8FJ0V7irTLQ8Uo0qcPxh4Plq7G5tGm0rU+1SPhVotteLpBERwTkw==" crossorigin="anonymous" referrerpolicy="no-referrer">
<!-- Vendor CSS - Chargement différé -->
<link href="Bootstrap/vendor/boxicons/css/boxicons.min.css" rel="stylesheet" media="print" onload="this.media='all'">
<!-- Toastr CSS -->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/toastr.js/latest/toastr.min.css" integrity="sha512-vKMx8UnXk60zUwyUnUPM3HbQo8QfmNx7+ltw8Pm5zLusl1XIfwcxo8DbWCqMGKaWeNxWA8yrx5v3SaVpMvR3CA==" crossorigin="anonymous" referrerpolicy="no-referrer">
<!-- SweetAlert2 -->
<link href="https://cdn.jsdelivr.net/npm/sweetalert2@11.14.1/dist/sweetalert2.min.css" rel="stylesheet">
<!-- Animate.css - version locale recommandée -->
<link href="Bootstrap_new/css/animate.min.css" rel="stylesheet">
<!-- Vendor CSS spécifiques (chargement conditionnel) -->
<?php if (strpos($_SERVER['REQUEST_URI'], 'quill') !== false): ?>
<link href="Bootstrap/vendor/quill/quill.snow.css" rel="stylesheet">
<?php endif; ?>
<!-- DataTables CSS (seulement si nécessaire) -->
<?php if (isset($needDatatables) && $needDatatables): ?>
<link href="Bootstrap_new/css/datatables.min.css" rel="stylesheet">
<?php endif; ?>
<!-- Select2 CSS (seulement si nécessaire) -->
<?php if (isset($needSelect2) && $needSelect2): ?>
<link href="Bootstrap_new/css/select2.min.css" rel="stylesheet">
<?php endif; ?>
<!-- Chart.js - déplacé en bas du body pour les performances -->
<!-- Styles personnalisés -->
<link href="Bootstrap_new/css/style_moderne.css?ver=<?= date('Y.m.d.H') ?>" rel="stylesheet">
<title><?= htmlspecialchars($_SESSION['vue'] ?? 'Dashboard') ?> - INTER SANTÉ</title>
<!-- Scripts de prévention de clic droit en mode production -->
<script type="text/javascript">
// Marquer le body comme loading
document.documentElement.className = 'js-loading';
var modeDev = <?= json_encode($modeDev ?? '0') ?>;
// Charger toastr seulement si disponible
function safeToastr() {
if (typeof toastr !== 'undefined') {
return toastr;
}
return {
warning: function(msg) { console.warn(msg); },
error: function(msg) { console.error(msg); },
success: function(msg) { console.log(msg); },
info: function(msg) { console.info(msg); }
};
}
if (modeDev != "1") {
document.addEventListener('DOMContentLoaded', function() {
document.addEventListener('contextmenu', function(e) {
e.preventDefault();
safeToastr().warning('<?= _("Le clic droit est désactivé en mode production") ?>');
});
// Prévention des raccourcis clavier
document.addEventListener('keydown', function(e) {
// Ctrl+U (afficher le code source)
if (e.ctrlKey && e.keyCode === 85) {
e.preventDefault();
safeToastr().warning('<?= _("Cette fonctionnalité est désactivée") ?>');
}
// F12 (outils de développement)
if (e.keyCode === 123) {
e.preventDefault();
safeToastr().warning('<?= _("Les outils de développement sont désactivés") ?>');
}
// Ctrl+Shift+I, Ctrl+Shift+J, Ctrl+Shift+C
if (e.ctrlKey && e.shiftKey && [73, 74, 67].includes(e.keyCode)) {
e.preventDefault();
safeToastr().warning('<?= _("Cette fonctionnalité est désactivée") ?>');
}
});
});
}
// Retirer la classe loading quand la page est chargée
window.addEventListener('load', function() {
document.documentElement.className = document.documentElement.className.replace('js-loading', '');
});
</script>
<!-- Polyfill pour les vieux navigateurs -->
<script>
// Polyfill pour les fonctions ES6 si nécessaire
if (!window.Promise) {
document.write('<script src="https://cdn.jsdelivr.net/npm/promise-polyfill@8/dist/polyfill.min.js"><\/script>');
}
</script>
</head>