templates/base.html.twig line 1

Open in your IDE?
  1. <!DOCTYPE html>
  2. <html lang="fr" class="h-100">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <title>
  6. {% block title %}
  7. ComPass
  8. {% endblock %}
  9. </title>
  10. {# Run `composer require symfony/webpack-encore-bundle` to start using Symfony UX #}
  11. {% if app.session.get('parametre') is not null %}
  12. {% set favicon = logo_url('favicon') %}
  13. {% if favicon %}
  14. <link rel="icon" href="{{ asset(favicon) }}" />
  15. {% endif %}
  16. {% endif %}
  17. {% block stylesheets %}
  18. {{ encore_entry_link_tags('app') }}
  19. {% endblock %}
  20. {% block javascripts %}
  21. {{ encore_entry_script_tags('app') }}
  22. {% endblock %}
  23. </head>
  24. {% if app.session.get('parametre') is not null %}
  25. {% set parametre = app.session.get('parametre') %}
  26. {% set darken = "color-mix(in srgb," ~ parametre.colorprimary ~ ", black 20%)" %}
  27. {% set darkenDarken = "color-mix(in srgb," ~ parametre.colorprimary ~ ", black 40%)" %}
  28. {% set lighten = "color-mix(in srgb," ~ parametre.colorprimary ~ ", white 20%)" %}
  29. {% set lightenLighten = "color-mix(in srgb," ~ parametre.colorprimary ~ ", white 40%)" %}
  30. {% set darkenSecondary = "color-mix(in srgb," ~ parametre.colorsecondary ~ ", black 20%)" %}
  31. {% set darkenDarkenSecondary = "color-mix(in srgb," ~ parametre.colorsecondary ~ ", black 40%)" %}
  32. {% set lightenSecondary = "color-mix(in srgb," ~ parametre.colorsecondary ~ ", white 20%)" %}
  33. {% set lightenLightenSecondary = "color-mix(in srgb," ~ parametre.colorsecondary ~ ", white 40%)" %}
  34. <style>
  35. /* ------- H -------- */
  36. h1 {
  37. color: {{ parametre.colorprimary }};
  38. }
  39. h2 {
  40. color: {{ parametre.colorsecondary }};
  41. }
  42. /* ------- Loader -------- */
  43. #loader:before {
  44. border-top-color: {{ parametre.colorsecondary }};
  45. }
  46. #loader:after {
  47. border-top-color: {{ parametre.colorprimary }};
  48. }
  49. /* ------- Placeholder Image -------- */
  50. .placeholderLink:hover {
  51. color: {{ parametre.colorprimary }} !important;
  52. }
  53. /* ------- NavBarre -------- */
  54. .nav-link-menu:hover {
  55. background-color: {{ parametre.colorprimary }};
  56. }
  57. .btn-nav-active {
  58. background-color: {{ parametre.colorprimary }};
  59. }
  60. /* ------- ProgressBar -------- */
  61. .progress,
  62. .progress-stacked {
  63. background-color: {{ parametre.colorprimary }};
  64. }
  65. .progress-bar {
  66. background-color: {{ parametre.colorprimary }};
  67. }
  68. /* ------- Background -------- */
  69. .bg-primary {
  70. background-color: {{ parametre.colorprimary }} !important;
  71. }
  72. .bg-secondary {
  73. background-color: {{ parametre.colorsecondary }} !important;
  74. }
  75. /* ------- Text -------- */
  76. .text-primary {
  77. color: {{ parametre.colorprimary }} !important;
  78. }
  79. .text-secondary {
  80. color: {{ parametre.colorsecondary }} !important;
  81. }
  82. /* ------- DataTable -------- */
  83. .active>.page-link {
  84. background-color: {{ parametre.colorprimary }};
  85. border-color: {{ darken }};
  86. }
  87. .page-link {
  88. color: {{ parametre.colorprimary }};
  89. }
  90. .page-link:hover {
  91. color: {{ darken }};
  92. }
  93. /* ------- Bootstrap -------- */
  94. .dropdown-item:active {
  95. background-color: {{ parametre.colorprimary }};
  96. border-color: {{ parametre.colorprimary }};
  97. }
  98. .form-check-input:checked {
  99. background-color: {{ parametre.colorprimary }};
  100. border-color: {{ parametre.colorprimary }};
  101. }
  102. /* ------- Buttons -------- */
  103. .btn-primary {
  104. color: #FFFFFF;
  105. background-color: {{ parametre.colorprimary }};
  106. border-color: {{ darken }};
  107. }
  108. .btn-primary:hover {
  109. color: #FFFFFF;
  110. background-color: {{ darken }};
  111. border-color: {{ darkenDarken }};
  112. }
  113. .btn-primary.disabled,
  114. .btn-primary:disabled {
  115. color: #FFFFFF;
  116. background-color: {{ parametre.colorprimary }};
  117. border-color: {{ darken }};
  118. }
  119. .btn-primary:not(:disabled):not(.disabled):active,
  120. .btn-primary:not(:disabled):not(.disabled).active,
  121. .show>.btn-primary.dropdown-toggle {
  122. color: #FFFFFF;
  123. background-color: {{ darken }};
  124. border-color: {{ darkenDarken }};
  125. }
  126. .btn-outline-primary {
  127. color: {{ parametre.colorprimary }};
  128. background-color: transparent;
  129. background-image: none;
  130. border-color: {{ parametre.colorprimary }};
  131. }
  132. .btn-outline-primary:hover {
  133. color: #FFFFFF;
  134. background-color: {{ darken }};
  135. border-color: {{ parametre.colorprimary }};
  136. }
  137. .btn-outline-primary.disabled,
  138. .btn-outline-primary:disabled {
  139. color: {{ parametre.colorprimary }};
  140. background-color: transparent
  141. }
  142. .btn-outline-primary:not(:disabled):not(.disabled):active,
  143. .btn-outline-primary:not(:disabled):not(.disabled).active,
  144. .show>.btn-outline-primary.dropdown-toggle {
  145. color: #FFFFFF;
  146. background-color: {{ darken }};
  147. border-color: {{ parametre.colorprimary }};
  148. }
  149. .btn-secondary {
  150. color: #FFFFFF;
  151. background-color: {{ parametre.colorsecondary }};
  152. border-color: {{ darkenSecondary }};
  153. }
  154. .btn-secondary:hover {
  155. color: #FFFFFF;
  156. background-color: {{ darkenSecondary }};
  157. border-color: {{ darkenDarkenSecondary }};
  158. }
  159. .btn-secondary.disabled,
  160. .btn-secondary:disabled {
  161. color: #FFFFFF;
  162. background-color: {{ parametre.colorsecondary }};
  163. border-color: {{ darkenSecondary }};
  164. }
  165. .btn-secondary:not(:disabled):not(.disabled):active,
  166. .btn-secondary:not(:disabled):not(.disabled).active,
  167. .show>.btn-secondary.dropdown-toggle {
  168. color: #FFFFFF;
  169. background-color: {{ darkenSecondary }};
  170. border-color: {{ darkenDarkenSecondary }};
  171. }
  172. .btn-outline-secondary {
  173. color: {{ parametre.colorsecondary }};
  174. background-color: transparent;
  175. background-image: none;
  176. border-color: {{ parametre.colorsecondary }};
  177. }
  178. .btn-outline-secondary:hover {
  179. color: #FFFFFF;
  180. background-color: {{ darkenSecondary }};
  181. border-color: {{ parametre.colorsecondary }};
  182. }
  183. .btn-outline-secondary.disabled,
  184. .btn-outline-secondary:disabled {
  185. color: {{ parametre.colorsecondary }};
  186. background-color: transparent
  187. }
  188. .btn-outline-secondary:not(:disabled):not(.disabled):active,
  189. .btn-outline-secondary:not(:disabled):not(.disabled).active,
  190. .show>.btn-outline-secondary.dropdown-toggle {
  191. color: #FFFFFF;
  192. background-color: {{ darkenSecondary }};
  193. border-color: {{ parametre.colorsecondary }};
  194. }
  195. </style>
  196. {% endif %}
  197. {% if app.user %}
  198. {% if app.session.get('vueAdministrateur') %}
  199. {% set vueEspace = 'Administrateur' %}
  200. {% else %}
  201. {% if app.session.get('typeUtilisateur') == 'Administrateur' %}
  202. {% set vueEspace = 'Enseignant' %}
  203. {% else %}
  204. {% set vueEspace = app.session.get('typeUtilisateur') %}
  205. {% endif %}
  206. {% endif %}
  207. {% endif %}
  208. <body class="text-center d-flex flex-column h-100">
  209. <header style="z-index: 4;">
  210. <nav class="navbar sticky-top navbar-expand-lg bg-light shadow">
  211. <div class="container-fluid">
  212. {% if app.user %}
  213. {% set path = path('app_eclac_secure-index') %}
  214. {% else %}
  215. {% set path = path('app_public_index') %}
  216. {% endif %}
  217. <a class="navbar-brand" href="{{ path }}">
  218. <div class="flex row col-md-6">
  219. <div class="col-md-4 mx-auto my-auto ms-0 p-0">
  220. <img src="{{ asset(logo_url('navbarre')) }}" alt="Logo" style="max-height: 65px;" class="mx-2"/>
  221. </div>
  222. </div>
  223. </a>
  224. {% if eleve is defined %}
  225. <h1>{{ eleve.nomeleve }} {{ eleve.prenomeleve }} - <u>{{ 'espace_eleve'|trans({}, 'libelles')|capitalize|raw }}</u></h1>
  226. {% else %}
  227. <h1>
  228. {% if enseignant is defined %}
  229. {{ enseignant.nomenseignant }} {{ enseignant.prenomenseignant }} -
  230. {% endif %}
  231. {% if vueEspace is defined %}
  232. {% set transVueEspace = 'espace_' ~ vueEspace|lower %}
  233. <u>{{ transVueEspace|trans({}, 'libelles')|capitalize|raw }}</u>
  234. {% endif %}
  235. </h1>
  236. {% endif %}
  237. <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation"><span class="navbar-toggler-icon"></span></button>
  238. <div class="collapse navbar-collapse" id="navbarNav">
  239. <ul class="navbar-nav me-auto mb-2 mb-lg-0">
  240. {% if contents is defined %}
  241. {% for content in contents %}
  242. <li class="col-md-4 nav-item m-1 rounded-3 shadow">
  243. <a class="{{ content.class }} btn btn-default300 btn-nav" aria-current="{{ content.current }}" href="{{ content.href }}">{{ content.nom|raw }}</a>
  244. </li>
  245. {% endfor %}
  246. {% endif %}
  247. </ul>
  248. {# Instance de préproduction (PARAMETRE.modepreprod, modifié uniquement en SQL) #}
  249. {% if app.session.get('parametre') is not null and app.session.get('parametre').modepreprod %}
  250. <span class="badge bg-warning text-dark fs-4 me-4" data-toggle="tooltip" title="{{ 'explications_mode_preprod'|trans({}, 'libelles')|raw }}"><i class="bi bi-cone-striped"></i>&nbsp;{{ 'mode_preprod'|trans({}, 'libelles')|raw }}</span>
  251. {% endif %}
  252. {% if app.session.get('modeMaintenance') == true and app.session.get('droitadmin') == true %}
  253. <span class="text-danger fs-3 me-1">{{ 'mode_maintenance_actif'|trans({}, 'libelles')|capitalize|raw }}</span>
  254. &nbsp;
  255. <i class="bi bi-exclamation-triangle-fill text-danger fs-2 me-5" data-toggle="tooltip" title="{{ 'explications_mode_maintenance_actif'|trans({}, 'libelles')|raw }}"></i>
  256. {% elseif app.session.get('modeMaintenance') == true %}
  257. <span class="text-danger fs-4 me-5"><i class="bi bi-exclamation-triangle-fill"></i>&nbsp;L'application ComPass est actuellement en cours de maintenance.</span>
  258. {% endif %}
  259. {# Drop down #}
  260. <ul class="navbar-nav d-flex flex-row">
  261. <li class="nav-item dropdown nav-item mx-auto">
  262. {% if app.session.get('utilisateurconnecte') %}
  263. {% if app.session.get('vueAdministrateur') %}
  264. {% set vueEspace = 'Administrateur' %}
  265. {% else %}
  266. {% if app.session.get('typeUtilisateur') == 'Administrateur' %}
  267. {% set vueEspace = 'Enseignant' %}
  268. {% else %}
  269. {% set vueEspace = app.session.get('typeUtilisateur') %}
  270. {% endif %}
  271. {% endif %}
  272. <a class="nav-link dropdown-toggle show" href="" data-bs-toggle="dropdown" aria-expanded="true">{{ app.session.get('utilisateur') }}&nbsp;<i class="bi bi-person-fill"></i></a>
  273. <ul class="dropdown-menu hide" data-bs-popper="static">
  274. {% if app.session.get('typeUtilisateur') == 'Élève' %}
  275. <li>
  276. <a class="dropdown-item" href="{{ path('app_ecleleve_index') }}">{{ 'mon_espace'|trans({}, 'libelles')|capitalize|raw }}</a>
  277. </li>
  278. {% else %}
  279. <li>
  280. <a class="dropdown-item" href="{{ path('app_eclenseignant_index') }}">{{ 'mon_espace'|trans({}, 'libelles')|capitalize|raw }}</a>
  281. </li>
  282. {% if app.session.get('droitadmin') == true %}
  283. {% if app.session.get('vueAdministrateur') %}
  284. <li>
  285. <a class="dropdown-item" href="{{ path('app_eclac_choix-espace') }}" data-turbo="false">{{ 'view.administrator.disabled'|trans({}, 'messages')|capitalize|raw }}</a>
  286. </li>
  287. <li>
  288. <a class="dropdown-item" href="{{ path('app_eclac_parametre') }}" data-turbo="false">{{ 'parametres'|trans({}, 'libelles')|capitalize|raw }}</a>
  289. </li>
  290. {% else %}
  291. <li>
  292. <a class="dropdown-item" href="{{ path('app_eclac_choix-espace') }}" data-turbo="false">{{ 'view.administrator.enabled'|trans({}, 'messages')|capitalize|raw }}</a>
  293. </li>
  294. {% endif %}
  295. {% else %}
  296. {% set test = app.session.get('typeUtilisateur') %}
  297. {{ test }}
  298. {% endif %}
  299. {% endif %}
  300. <li>
  301. <a class="dropdown-item" href="{{ path('app_public_logout') }}" data-turbo="false">{{ 'logout'|trans({}, 'libelles')|capitalize|raw }}</a>
  302. </li>
  303. </ul>
  304. {% else %}
  305. <a class="col-md-12 mx-auto btn btn-text text-dark" href="{{ path('app_eclac_choix-espace') }}" data-turbo="false"><i class="bi bi-person-fill"></i>&nbsp;{{ 'se_connecter'|trans({}, 'libelles')|capitalize|raw }}</a>
  306. {% endif %}
  307. </li>
  308. </ul>
  309. </div>
  310. </div>
  311. </nav>
  312. </header>
  313. {# Nav barres #}
  314. {% if app.session.get('afficheNavbarre') != false and (app.session.get('modeMaintenance') == false or app.session.get('droitadmin') == true) %}
  315. <div class="container-fluid col-md-12 p-0 m-0" style="z-index: 1;">
  316. {% set vueEspace = '' %}
  317. {% if app.user %}
  318. {% if app.session.get('vueAdministrateur') %}
  319. {% set vueEspace = 'Administrateur' %}
  320. {% else %}
  321. {% if app.session.get('typeUtilisateur') == 'Administrateur' %}
  322. {% set vueEspace = 'Enseignant' %}
  323. {% else %}
  324. {% set vueEspace = app.session.get('typeUtilisateur') %}
  325. {% endif %}
  326. {% endif %}
  327. {% endif %}
  328. {% if eleve is defined and eleve is not null %}
  329. <nav class="navbar navbar-expand-lg bg-light shadow">
  330. <div class="col-md-2 mx-auto my-1">
  331. <a class="btn btn-primary col-md-12 mx-auto" href="{{ path('app_ecleleve_index') }}"><i class="bi bi-person-vcard-fill"></i>&nbsp;{{ 'synthese'|trans({}, 'libelles')|capitalize|raw }}</a>
  332. </div>
  333. <div class="col-md-2 mx-auto my-1">
  334. <a class="btn btn-primary col-md-12 mx-auto" href="{{ path('app_ecleleve_note') }}"><i class="bi bi-star-fill"></i>&nbsp;{{ 'notes'|trans({}, 'libelles')|capitalize|raw }}</a>
  335. </div>
  336. <div class="col-md-2 mx-auto my-1">
  337. <a class="btn btn-primary col-md-12 mx-auto" href="{{ path('app_ecleleve_prochaines-evaluations') }}"><i class="bi bi-clock"></i>&nbsp;{{ 'evaluations'|trans({}, 'libelles')|capitalize|raw }}&nbsp;{{ 'a_venir'|trans({}, 'libelles')|lower|raw }}</a>
  338. </div>
  339. <div class="col-md-2 mx-auto my-1">
  340. <a class="btn btn-primary col-md-12 mx-auto" href="{{ path('app_ecleleve_cours') }}" data-turbo="false"><i class="bi bi-list-ul"></i>&nbsp;{{ 'cours'|trans({}, 'libelles')|capitalize|raw }}</a>
  341. </div>
  342. {% set classDiplome = "disabled" %}
  343. {% set chemin = "" %}
  344. {% set nomDiplome = "" %}
  345. {% if diplome is defined and diplome is not null %}
  346. {% if diplome.generer and diplome.disponible %}
  347. {% set classDiplome = "" %}
  348. {% set chemin = path('app_ecleleve_certificat') %}
  349. {% set nomDiplome = diplome.numerodiplome %}
  350. {% endif %}
  351. {% endif %}
  352. <div class="col-md-2 mx-auto my-1">
  353. <a class="btn-warning btn btn-primary col-md-12 mx-auto {{ classDiplome }}" href="{{ chemin }}" data-turbo="false" data-toggle="tooltip" title="{{ 'telecharger'|trans({}, 'libelles')|capitalize|raw }} {{ 'certificat'|trans({}, 'libelles')|lower|raw }}" download="{{nomDiplome}}.pdf"><i class="bi bi-download"></i>&nbsp;{{ 'certificat'|trans({}, 'libelles')|capitalize|raw }}</a>
  354. </div>
  355. </nav>
  356. {% if vueEspace == 'Enseignant' %}
  357. <nav class="navbar navbar-expand-lg bg-light">
  358. <div class="col-md-2 mx-auto my-1">
  359. <a class="btn btn-primary col-md-12 mx-auto btn-warning" href="{{ path('app_eclenseignant_index') }}" data-turbo="false"><i class="bi bi-person-fill"></i>&nbsp;{{ 'retour'|trans({}, 'libelles')|capitalize|raw }}&nbsp;{{ 'espace_enseignant'|trans({}, 'libelles')|lower|raw }}</a>
  360. </div>
  361. </nav>
  362. {% endif %}
  363. {% if vueEspace == 'Administrateur' %}
  364. <nav class="navbar navbar-expand-lg bg-light">
  365. <div class="col-md-2 mx-auto my-1">
  366. <a class="btn-warning btn btn-primary col-md-12 mx-auto" href="{{ path('app_ecladmin_eleves') }}" data-turbo="false"><i class="bi bi-people-fill"></i>&nbsp;{{ 'retour'|trans({}, 'libelles')|capitalize|raw }}&nbsp;{{ 'espace_enseignant'|trans({}, 'libelles')|lower|raw }}</a>
  367. </div>
  368. </nav>
  369. {% endif %}
  370. {% else %}
  371. {% if vueEspace == 'Enseignant' or vueEspace == 'Administrateur' %}
  372. <nav class="navbar navbar-expand-lg bg-light">
  373. <div class="col-md-2 mx-auto my-1 p-1">
  374. <a class="btn btn-primary col-md-12 mx-auto" href="{{ path('app_eclenseignant_mescours') }}" data-turbo="false"><i class="bi bi-list-ul"></i>&nbsp;{{ 'mes_cours'|trans({}, 'libelles')|capitalize|raw }}</a>
  375. </div>
  376. <div class="col-md-2 mx-auto my-1 p-1">
  377. <a class="btn btn-primary col-md-12 mx-auto" href="{{ path('app_eclenseignant_lescours') }}" data-turbo="false"><i class="bi bi-list-ul"></i>&nbsp;{{ 'cours'|trans({}, 'libelles')|capitalize|raw }}</a>
  378. </div>
  379. <div class="col-md-2 mx-auto my-1 p-1">
  380. <a class="btn btn-primary col-md-12 mx-auto" href="{{ path('app_eclenseignant_note') }}"><i class="bi bi-star-fill"></i>&nbsp;{{ 'notes'|trans({}, 'libelles')|capitalize|raw }}</a>
  381. </div>
  382. <div class="col-md-2 mx-auto my-1 p-1">
  383. {% if app.session.get('jeanneDupont') %}
  384. <a class="btn btn btn-secondary col-md-12 mx-auto" href="{{ path('app_eclenseignant_switchdemo') }}"><i class="bi bi-person-fill"></i>&nbsp;{{ app.session.get('jeanneDupontNom')|default('Élève DEMO') }}</a>
  385. {% else %}
  386. <div data-toggle="tooltip" title="{{ 'eleve_non_disponible'|trans({}, 'libelles')|capitalize|raw }}"><button class="btn btn btn-secondary col-md-12 mx-auto" disabled><i class="bi bi-person-fill"></i>&nbsp;{{ app.session.get('jeanneDupontNom')|default('Élève DEMO') }}</button></div>
  387. {% endif %}
  388. </div>
  389. {% if app.session.get('vueAdministrateur') %}
  390. <div class="col-md-2 mx-auto my-1 p-1">
  391. {% if app.session.get('jeanDupont') %}
  392. <a class="btn btn btn-secondary col-md-12 mx-auto" href="{{ path('app_eclenseignant_switchdemofinale') }}"><i class="bi bi-person-fill"></i>&nbsp;{{ app.session.get('jeanDupontNom')|default('Élève DEMOFINALE') }}</a>
  393. {% else %}
  394. <div data-toggle="tooltip" title="{{ 'eleve_non_disponible'|trans({}, 'libelles')|capitalize|raw }}"><button class="btn btn btn-secondary col-md-12 mx-auto" disabled><i class="bi bi-person-fill"></i>&nbsp;{{ app.session.get('jeanDupontNom')|default('Élève DEMOFINALE') }}</button></div>
  395. {% endif %}
  396. </div>
  397. {% endif %}
  398. </nav>
  399. {% if app.session.get('vueAdministrateur') %}
  400. <nav class="navbar navbar-expand-lg bg-light">
  401. <div class="col-md-2 mx-auto my-1 p-1">
  402. <a class="btn btn-primary col-md-12 mx-auto" href="{{ path('app_ecladmin_eleves') }}" data-turbo="false"><i class="bi bi-people-fill"></i>&nbsp;{{ 'eleves'|trans({}, 'libelles')|capitalize|raw }}</a>
  403. </div>
  404. <div class="col-md-2 mx-auto my-1 p-1">
  405. <a class="btn btn-primary col-md-12 mx-auto" href="{{ path('app_ecladmin_enseignants') }}" data-turbo="false"><i class="bi bi-people-fill"></i>&nbsp;{{ 'enseignants'|trans({}, 'libelles')|capitalize|raw }}</a>
  406. </div>
  407. <div class="col-md-2 mx-auto my-1 p-21">
  408. <a class="btn btn-primary col-md-12 mx-auto" href="{{ path('app_eclenseignant_notifenseignantcourscours') }}"><i class="bi bi-send-fill"></i>&nbsp;{{ 'notifications'|trans({}, 'libelles')|capitalize|raw }}</a>
  409. </div>
  410. <div class="col-md-2 mx-auto my-1 p-1">
  411. <a class="btn btn-primary col-md-12 mx-auto" href="{{ path('app_ecladmin_certificat-competence') }}"><i class="bi bi-award-fill"></i>&nbsp;{{ 'certificats'|trans({}, 'libelles')|capitalize|raw }}</a>
  412. </div>
  413. <div class="col-md-2 mx-auto my-1 p-1">
  414. <a class="btn btn-primary position-relative col-md-12 mx-auto" data-turbo="false" href="{{ path('app_import_gestion') }}">
  415. <i class="bi bi-database-fill-gear"></i>&nbsp;{{ 'imports'|trans({}, 'libelles')|capitalize|raw }}
  416. {% if app.session.get('importEnErreur') == true %}
  417. <span class="position-absolute top-0 start-100 translate-middle badge rounded-pill">
  418. <i data-toggle="tooltip" title="{{ 'imports_en_erreur'|trans({}, 'libelles')|capitalize|raw }}" class="bi bi-exclamation-circle-fill text-danger fs-4 ms-1"></i>
  419. </span>
  420. {% endif %}
  421. </a>
  422. </div>
  423. </nav>
  424. {% endif %}
  425. {% endif %}
  426. {% endif %}
  427. </div>
  428. {% endif %}
  429. <main class="mb-5">
  430. {% block body %}
  431. {% endblock %}
  432. </main>
  433. <!-- Footer -->
  434. <footer class="footer mt-auto bg-light text-center shadow-lg" style="z-index: -5;">
  435. <div class="pb-0 pt-4 bg-light" style="z-index : -5;">
  436. {% set parametreContact = NULL %}
  437. {% if app.session.get('parametre') is not null %}
  438. {% set parametreContact = app.session.get('parametre').contactfooter %}
  439. {% endif %}
  440. <p class="text-center text-muted">{{ 'contact'|trans({}, 'libelles')|capitalize|raw }} : {{ parametreContact }}</p>
  441. <img src="{{ asset('build/images/Logo-ComPass-min.webp') }}" alt="Logo" style="max-height: 35px;" class="mt-2 mb-3"/>
  442. <p class="text-center text-muted">ComPass - {{ parametre.versionapp }}</p>
  443. </div>
  444. </footer>
  445. <div id="toast-container" class="toast-container position-fixed bottom-0 end-0 p-3" style="z-index: 4;">
  446. {% for flash in app.flashes('success') %}
  447. {{ include('_toast.html.twig', { context: 'success', title: 'succes'|trans({}, 'libelles')|capitalize|raw, body: flash }) }}
  448. {% endfor %}
  449. {% for flash in app.flashes('error') %}
  450. {{ include('_toast.html.twig', { context: 'danger', title: 'erreur'|trans({}, 'libelles')|capitalize|raw, body: flash }) }}
  451. {% endfor %}
  452. {% for flash in app.flashes('warning') %}
  453. {{ include('_toast.html.twig', { context: 'warning', title: 'attention'|trans({}, 'libelles')|capitalize|raw, body: flash }) }}
  454. {% endfor %}
  455. </div>
  456. </body>
  457. </html>