templates/bundles/EasyAdminBundle/layout.html.twig line 1
{# @var ea \EasyCorp\Bundle\EasyAdminBundle\Context\AdminContext #}{% trans_default_domain ea.i18n.translationDomain %}<!DOCTYPE html ><html lang="{{ ea.i18n.htmlLocale }}" dir="{{ ea.i18n.textDirection }}" ><head>{% set sessionLifetimeSeconds = app.session.getMetadataBag().getLifetime() %}<style>.session-badge {display: inline-block;padding: 0.25em 0.5em;font-size: 75%;font-weight: 700;line-height: 1;color: #fff;text-align: center;white-space: nowrap;vertical-align: baseline;border-radius: 0.25rem;background-color: #007bff;}</style><!-- <script>document.addEventListener('DOMContentLoaded', function() {var sessionBadge = document.querySelector('.session-badge');var sessionLifetimeSeconds = {{ sessionLifetimeSeconds }};var updateInterval = 1000; // Mettez à jour toutes les secondesfunction updateSessionCounter() {var minutes = Math.floor(sessionLifetimeSeconds / 60);var seconds = sessionLifetimeSeconds % 60;sessionBadge.textContent = minutes + 'm ' + seconds + 's';sessionLifetimeSeconds--;}// Mettez à jour le compteur initialementupdateSessionCounter();// Mettez à jour le compteur toutes les secondessetInterval(updateSessionCounter, updateInterval);});</script>--><script>document.addEventListener("turbo:load", function() {// Votre code existant pour le compteur de sessionvar sessionBadge = document.querySelector('.session-badge');var sessionLifetimeSeconds = {{ sessionLifetimeSeconds }};var updateInterval = 1000; // Mettez à jour toutes les secondesfunction updateSessionCounter() {if (sessionLifetimeSeconds > 0) {var hours = Math.floor(sessionLifetimeSeconds / 3600);var minutes = Math.floor((sessionLifetimeSeconds % 3600) / 60);var seconds = sessionLifetimeSeconds % 60;sessionBadge.textContent = hours + 'h ' + minutes + 'm ' + seconds + 's';sessionLifetimeSeconds--;} else {// Arrêtez le compteur et effectuez toute autre action nécessaireclearInterval(intervalId);sessionBadge.textContent = 'Session expirée';}}// Mettez à jour le compteur initialementupdateSessionCounter();// Mettez à jour le compteur toutes les secondesvar intervalId = setInterval(updateSessionCounter, updateInterval);});</script>{% block head_metas %}<meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="robots" content="noindex, nofollow, noarchive, nosnippet, noodp, noimageindex, notranslate, nocache" /><meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport"><meta name="generator" content="EasyAdmin" /><meta name="turbo-cache-control" content="no-cache">{% endblock head_metas %}{% set page_title_block_output %}{% block page_title %}{{ block('content_title') }}{% endblock %}{% endset %}<title>{{ page_title_block_output|striptags|raw }}</title>{% block head_stylesheets %}<link rel="stylesheet" href="{{ asset('app.css', ea.assets.defaultAssetPackageName) }}">{{ encore_entry_link_tags('app') }}{% if is_granted("ROLE_CUSTOMER") %}<link rel="stylesheet" href="{{ asset('themes/'~ settings.get.assetFolderName|lower ~ '/admin/admin-customer.css') }}">{% else %}<link rel="stylesheet" href="{{ asset('themes/'~ settings.get.assetFolderName|lower ~ '/admin/admin.css') }}">{% endif %}{% endblock %}{% block configured_stylesheets %}{{ include('@EasyAdmin/includes/_css_assets.html.twig', { assets: ea.assets.cssAssets ?? [] }, with_context = false) }}{{ include('@EasyAdmin/includes/_encore_link_tags.html.twig', { assets: ea.assets.webpackEncoreAssets ?? [] }, with_context = false) }}{% endblock %}{% block head_favicon %}<link rel="shortcut icon" href="{{ asset(ea.dashboardFaviconPath) }}">{% endblock %}{% block head_javascript %}{{ encore_entry_script_tags('app') }}{% endblock head_javascript %}{% if 'rtl' == ea.i18n.textDirection %}<link rel="stylesheet" href="{{ asset('app.rtl.css', ea.assets.defaultAssetPackageName) }}">{% endif %}{% block configured_head_contents %}{% for htmlContent in ea.assets.headContents ?? [] %}{{ htmlContent|raw }}{% endfor %}{% endblock %}</head>{% block body %}<body {% block body_attr %}{% endblock %}id="{% block body_id %}{% endblock %}"class="ea {% block body_class %}{% endblock %} "data-ea-content-width="{{ ea.crud.contentWidth ?? ea.dashboardContentWidth ?? 'normal' }}"data-ea-sidebar-width="{{ ea.crud.sidebarWidth ?? ea.dashboardSidebarWidth ?? 'normal' }}"data-ea-dark-scheme-is-enabled="{{ ea.dashboardHasDarkModeEnabled ? 'true' : 'false' }}">{% block wrapper_wrapper %}{% block flash_messages %}{{ include(ea.templatePath('flash_messages')) }}{% endblock flash_messages %}{% set user_menu_avatar %}{% if null == ea.userMenu.avatarUrl %}<span class="user-avatar"><span class="fa-stack"><i class="user-avatar-icon-background fas fa-square fa-stack-2x"></i><i class="user-avatar-icon-foreground {{ ea.user is not null ? 'fa fa-user' : 'fas fa-user-slash' }} fa-stack-1x fa-inverse"></i></span></span>{% else %}<img class="user-avatar" src="{{ ea.userMenu.avatarUrl }}" />{% endif %}{% endset %}{% set impersonator_permission = constant('Symfony\\Component\\Security\\Core\\Authorization\\Voter\\AuthenticatedVoter::IS_IMPERSONATOR') is defined ? 'IS_IMPERSONATOR' : 'ROLE_PREVIOUS_ADMIN' %}{% set user_menu_dropdown %}<ul class="dropdown-menu dropdown-menu-end"><li class="dropdown-user-details"><div>{{ user_menu_avatar }}</div><div><span class="user-label">{{ 'user.logged_in_as'|trans(domain = 'EasyAdminBundle') }}</span><span class="user-name">{{ ea.user is null ? 'user.anonymous'|trans(domain = 'EasyAdminBundle') : ea.userMenu.name }}</span></div></li>{% block user_menu %}{% if ea.userMenu.items|length > 0 %}<li><hr class="dropdown-divider"></li>{% for item in ea.userMenu.items %}<li>{% if item.isMenuSection and not loop.first %}<hr class="dropdown-divider">{% elseif not item.isMenuSection %}<a href="{{ item.linkUrl }}" class="dropdown-item user-action {{ item.cssClass }}"target="{{ item.linkTarget }}" rel="{{ item.linkRel }}"referrerpolicy="origin-when-cross-origin">{% if item.icon is not empty %}<i class="fa fa-fw {{ item.icon }}"></i>{% endif %}<span>{{ item.label|trans }}</span></a>{% endif %}</li>{% endfor %}{% endif %}{% endblock user_menu %}</ul>{% endset %}{% set settings_dropdown %}{% if ea.dashboardLocales or ea.dashboardHasDarkModeEnabled %}<div class="dropdown dropdown-settings"><a class="dropdown-settings-button" type="button" data-bs-toggle="dropdown" data-bs-offset="0,5" aria-expanded="false"><i class="fas fa-gear"></i></a><ul class="dropdown-menu dropdown-menu-end">{% if ea.dashboardLocales %}<li><span class="dropdown-header dropdown-locales-label">{{ 'settings.locale'|trans(domain = 'EasyAdminBundle') }}</span></li>{% for localeDto in ea.dashboardLocales %}<li><a href="{{ ea_url().set('_locale', localeDto.locale) }}" class="dropdown-item{% if app.request.locale == localeDto.locale %} active{% endif %}">{% if localeDto.icon %}<i class="{{ localeDto.icon }}"></i>{% endif %}{{ localeDto.name }}</a></li>{% endfor %}{% endif %}{% if ea.dashboardHasDarkModeEnabled %}{% if ea.dashboardLocales %}<div class="dropdown-divider"></div>{% endif %}<li><span class="dropdown-header dropdown-appearance-label">{{ 'settings.appearance.label'|trans(domain = 'EasyAdminBundle') }}</span></li><li><a href="#" class="dropdown-item dropdown-appearance-item" data-ea-color-scheme="light"><i class="far fa-sun"></i> <span>{{ 'settings.appearance.light'|trans(domain = 'EasyAdminBundle') }}</span></a></li><li><a href="#" class="dropdown-item dropdown-appearance-item" data-ea-color-scheme="dark"><i class="far fa-moon"></i> <span>{{ 'settings.appearance.dark'|trans(domain = 'EasyAdminBundle') }}</span></a></li><li><a href="#" class="dropdown-item dropdown-appearance-item active" data-ea-color-scheme="auto"><i class="fas fa-desktop"></i> <span>{{ 'settings.appearance.auto'|trans(domain = 'EasyAdminBundle') }}</span></a></li>{% endif %}</ul></div>{% endif %}{% endset %}<div class="wrapper">{% block wrapper %}<div class="responsive-header">{% block responsive_header %}<button id="navigation-toggler" type="button" aria-label="Toggle navigation"><i class="fa fa-fw fa-bars"></i></button><div id="responsive-header-logo" class="text-truncate ms-auto">{% block responsive_header_logo %}<a class="responsive-logo" title="{{ ea.dashboardTitle|striptags }}" href="{{ path(ea.dashboardRouteName) }}">{{ ea.dashboardTitle|raw }}</a>{% endblock responsive_header_logo %}</div><div class="dropdown user-menu-wrapper {{ is_granted(impersonator_permission) ? 'user-is-impersonated' }} ms-auto"><a class="user-details" type="button" data-bs-toggle="dropdown" data-bs-offset="0,5" aria-expanded="false">{# to make the site design consistent, always display the user avatar in responsive headerand hide the user name (because there's no space left) regardless of the user config #}{% if ea.userMenu.avatarDisplayed %}{{ user_menu_avatar }}{% else %}<i class="user-avatar fa fa-fw {{ ea.user is not null ? 'fa-user' : 'fa-user-times' }}"></i>{% endif %}</a>{{ user_menu_dropdown }}</div>{{ settings_dropdown }}{% endblock responsive_header %}</div><div class="sidebar-wrapper" ><aside class="sidebar" >{% block sidebar %}<header class="main-header" >{% block header %}<nav class="navbar" role="navigation" >{% block header_navbar %}<div id="header-logo">{% block header_logo %}<a class="logo" title="{{ ea.dashboardTitle|striptags }}" href="{{ path(ea.dashboardRouteName) }}"><span class="logo-custom">{{ ea.dashboardTitle|raw }}</span><span class="logo-compact"><i class="fas fa-home"></i></span></a>{% endblock header_logo %}</div>{% endblock header_navbar %}</nav>{% endblock header %}</header>{% block main_menu_wrapper %}{{ include(ea.templatePath('main_menu')) }}{% endblock main_menu_wrapper %}{% endblock sidebar %}<div id="sidebar-resizer-handler" class="resizer-handler resizer-handler-left"></div></aside></div><section class="main-content" >{% set has_search = ea.crud is not null and ea.crud.isSearchEnabled %}<aside class="content-top {{ has_search ? 'ea-search-enabled' : 'ea-search-disabled' }}">{% block content_top_header %}<div class="content-search">{% if has_search %}{% block search %}<form class="form-action-search" method="get">{% block search_form %}{% block search_form_filters %}{% for field, array in ea.search.appliedFilters %}{% for key, value in array %}{# This code re-applies your filters on searches, an iterable check is needed in cases we have more than one object for a filter #}{% if value is iterable %}{% for index, iterValue in value %}{# This sub-level iterable check is needed in cases we have more complex filters like the DateTimeFilter cf. issue #5038 #}{% if iterValue is iterable %}{% for subIndex, subIterValue in iterValue %}<input type="hidden" name="filters[{{ field }}][{{ key }}][{{ index }}][{{ subIndex }}]" value="{{ subIterValue }}">{% endfor %}{% else %}<input type="hidden" name="filters[{{ field }}][{{ key }}][{{ index }}]" value="{{ iterValue }}">{% endif %}{% endfor %}{% else %}<input type="hidden" name="filters[{{ field }}][{{ key }}]" value="{{ value }}">{% endif %}{% endfor %}{% endfor %}{% endblock %}<input type="hidden" name="crudAction" value="index"><input type="hidden" name="crudControllerFqcn" value="{{ ea.request.query.get('crudControllerFqcn') }}"><input type="hidden" name="menuIndex" value="{{ ea.request.query.get('menuIndex') }}"><input type="hidden" name="submenuIndex" value="{{ ea.request.query.get('submenuIndex') }}"><input type="hidden" name="page" value="1"><div class="form-group"><div class="form-widget"><i class="fas fa-search content-search-icon"></i><label class="content-search-label" data-value="{{ app.request.get('query') }}"><input class="form-control {{ app.request.get('query') is null ? 'is-blank' }}" type="search" name="query" value="{{ app.request.get('query') ?? '' }}" placeholder="{{ t('action.search', ea.i18n.translationParameters, 'EasyAdminBundle')|trans }}" spellcheck="false" autocorrect="off" onInput="this.parentNode.dataset.value=this.value"{% if ea.crud.currentAction == 'index' and ea.crud.autofocusSearch == true %} autofocus="autofocus"{% endif %}></label>{% if app.request.get('query') %}<a href="{{ ea_url().unset('query') }}" class="content-search-reset"><i class="fas fa-fw fa-times"></i></a>{% endif %}</div></div>{% endblock %}</form>{% endblock search %}{% endif %}</div>{% if is_granted("ROLE_AGENT") %}<div class="navbar-custom-menu p-1" >{% set urlSessionHistory = ea_url().setRoute("toggleSession") %}{% if settings.session %}{% if settings.session.endAt != null %}<a href="{{urlSessionHistory}}" class="btn bg-green-dark text-white"><i class="fa-solid fa-power-off"></i>Commencer ma session</a>{% else %}<a href="{{urlSessionHistory}}" class="btn bg-pink-dark text-white"><i class="fa-solid fa-power-off"></i>Fermer ma session <small style="font-size:9px;">(Commencé á {{settings.session.startAt|date("H:i:s")}})</small></a>{% endif %}{% else %}<a href="{{urlSessionHistory}}" class="btn bg-green-dark text-white"><i class="fa-solid fa-power-off"></i>Commencer ma session</a>{% endif %}</a></div>{% endif %}<div class="navbar-custom-menu p-1" style="position:relative;"><div style="position:absolute;bottom:0;left:18px;z-index:9;opacity:0.8;"><span class="badge badge-primary" >1</span></div><small style="color: rgb(78, 48, 158);">La durée de la session restante : </small><span class="session-badge">0h 0m 0s</span><div class="dropdown user-menu-wrapper {{ is_granted(impersonator_permission) ? 'user-is-impersonated' }}"><a class="user-details" type="button" data-bs-toggle="dropdown" data-bs-offset="0,5" aria-expanded="false"><span class="user-avatar"><span class="fa-stack"><i class="user-avatar-icon-background fas fa-square fa-stack-2x"></i><i class="user-avatar-icon-foreground fa fa-bell fa-stack-1x fa-inverse"></i></span></span><span class="user-name">Notifications</span></a><ul class="dropdown-menu dropdown-menu-end"><li class="dropdown-user-details">Nouveau adhérent : Ayman Bantala</li></ul></div></div><div class="navbar-custom-menu">{% block header_custom_menu %}<div class="dropdown user-menu-wrapper {{ is_granted(impersonator_permission) ? 'user-is-impersonated' }}"><a class="user-details" type="button" data-bs-toggle="dropdown" data-bs-offset="0,5" aria-expanded="false">{{ user_menu_avatar }}{% if ea.userMenu.isNameDisplayed %}<span class="user-name">{{ ea.userMenu.name }}</span>{% endif %}</a>{{ user_menu_dropdown }}</div>{% endblock header_custom_menu %}</div>{{ settings_dropdown }}{% endblock content_top_header %}</aside><div class="content-wrapper ">{% block content %}<article class="content">{% block content_header_wrapper %}{% set has_help_message = (ea.crud.helpMessage ?? '') is not empty %}<section class="content-header">{% block content_header %}<div class="content-header-title"><h1 class="title">{% block content_title %}{% endblock %}{% block content_help %}{% if has_help_message %}<a tabindex="0" class="content-header-help" data-bs-toggle="popover" data-bs-custom-class="ea-content-help-popover" data-bs-animation="true" data-bs-html="true" data-bs-placement="bottom" data-bs-trigger="focus" data-bs-content="{{ ea.crud.helpMessage|trans|e('html_attr') }}"><i class="far fa-question-circle"></i></a>{% endif %}{% endblock %}</h1></div>{% block page_actions_wrapper %}<div class="page-actions">{% block page_actions %}{% endblock %}</div>{% endblock %}{% endblock content_header %}</section>{% endblock content_header_wrapper %}<section id="main" class="content-body animate__animated animate__fadeIn">{% block main %}{% endblock %}</section>{% block content_footer_wrapper %}{% set content_footer = block('content_footer') is defined ? block('content_footer') : '' %}{% if content_footer is not empty %}<section class="content-footer">{{ content_footer }}</section>{% endif %}{% endblock %}</article>{% endblock content %}<div id="content-resizer-handler" class="resizer-handler resizer-handler-right"></div></div></section>{% endblock wrapper %}</div>{% endblock wrapper_wrapper %}{% block body_javascript %}<script>var notificationSound = new Audio('flexy/sounds/notification_sound.mp3');document.addEventListener("turbo:load",function(){{% if settings.get.isMercureEnabled %}const eventSource = new EventSource("{{ mercure('https://hello.com/books/1')|escape('js') }}");eventSource.onmessage = event => {// Will be called every time an update is published by the servervar data = JSON.parse(event.data);if(data.status == "success"){if(data.entity == "VisitCustomer"){//notificationSound.loop = true;notificationSound.play();const flashMessages = document.getElementById('flash-messages');/*$("#flash-messages").append('<div class="alert alert-success alert-dismissible fade show" role="alert"><button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>Nouvelle commande a été crée</div>');*/{% set urlOrders = ea_url().setController('App\\Flexy\\POSBundle\\Controller\\OrderCrudController').setAction('index') %}Turbo.visit("{{urlOrders|escape('js')}}");}if(data.status == "success"){if(data.entity == "Order"){//notificationSound.loop = true;notificationSound.play();const flashMessages = document.getElementById('flash-messages');/*$("#flash-messages").append('<div class="alert alert-success alert-dismissible fade show" role="alert"><button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>Nouvelle commande a été crée</div>');*/{% set urlOrders = ea_url().setController('App\\Flexy\\POSBundle\\Controller\\OrderCrudController').setAction('index') %}Turbo.visit("{{urlOrders|escape('js')}}");}//alert(data.status);}console.log(JSON.parse(event.data));}{% endif %}});document.addEventListener("turbo:click",function(){notificationSound.pause();notificationSound.currentTime = 0;});</script>{% endblock body_javascript %}{% block configured_body_contents %}{% for htmlContent in ea.assets.bodyContents ?? [] %}{{ htmlContent|raw }}{% endfor %}{% endblock %}</body>{% endblock body %}</html>