templates\bundles\EasyAdminBundle\layout.html.twig line 1

Open in your IDE?
  1. {% extends '@!EasyAdmin/layout.html.twig' %}
  2. {% macro render_hidden_fields(name, value) %}
  3.     {% if value is iterable %}
  4.         {% for subkey, subvalue in value %}
  5.             {{ _self.render_hidden_fields(name ~ '[' ~ subkey ~ ']', subvalue) }}
  6.         {% endfor %}
  7.     {% else %}
  8.         <input type="hidden" name="{{ name }}" value="{{ value }}">
  9.     {% endif %}
  10. {% endmacro %}
  11. {% block head_metas %}
  12.     <link rel="icon" type="image/png" href="{{ asset('assets/img/favicon.png') }}"/>
  13. {% endblock %}
  14. {% block head_stylesheets %}
  15.     <link href="https://fonts.googleapis.com/css?family=Open+Sans:300,400,600,700" rel="stylesheet">
  16.     {{ encore_entry_script_tags('css/nucleo-icons') }}
  17.     {{ encore_entry_script_tags('css/nucleo-svg') }}
  18.     {#    <script src="https://kit.fontawesome.com/e0f81bff05.js" crossorigin="anonymous"></script> #}
  19.     <script src="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.6.0/js/all.min.js"
  20.             integrity="sha512-6sSYJqDreZRZGkJ3b+YfdhB3MzmuP9R7X1QZ6g5aIXhRvR1Y/N/P47jmnkENm7YL3oqsmI6AK+V6AD99uWDnIw=="
  21.             crossorigin="anonymous" referrerpolicy="no-referrer"></script>
  22.     <!-- CSS Files -->
  23.     {{ encore_entry_link_tags('css/admin') }}
  24.     {{ encore_entry_link_tags('css/material-dashboard') }}
  25. {% endblock %}
  26. {% block body %}
  27.     <body id="{% block body_id %}{% endblock %}"
  28.           class="{% block body_class %}{% endblock %} g-sidenav-show bg-gray-300">
  29.     {% block javascript_page_layout %}
  30.         {{ encore_entry_script_tags('js/must-be-at-top') }}
  31.         <script>
  32.             document.body.classList.add('ea-content-width-' + (
  33.                 localStorage.getItem('ea/content/width') || '{{ ea.crud.contentWidth ?? ea.dashboardContentWidth ?? 'normal' }}'
  34.             ), 'ea-sidebar-width-' + (
  35.                 localStorage.getItem('ea/sidebar/width') || '{{ ea.crud.sidebarWidth ?? ea.dashboardSidebarWidth ?? 'normal' }}'
  36.             ));
  37.         </script>
  38.     {% endblock javascript_page_layout %}
  39.     {% block wrapper_wrapper %}
  40.         {% set user_menu_avatar %}
  41.             {% if null == ea.userMenu.avatarUrl %}
  42.                 <span class="user-avatar">
  43.                     <span class="fa-stack">
  44.                         <i class="user-avatar-icon-background fas fa-square fa-stack-2x"></i>
  45.                         <i class="user-avatar-icon-foreground {{ ea.user is not null ? 'fa fa-user' : 'fas fa-user-slash' }} fa-stack-1x fa-inverse"></i>
  46.                     </span>
  47.                 </span>
  48.             {% else %}
  49.                 <img class="user-avatar" src="{{ ea.userMenu.avatarUrl }}"/>
  50.             {% endif %}
  51.         {% endset %}
  52.         {% set impersonator_permission = constant('Symfony\\Component\\Security\\Core\\Authorization\\Voter\\AuthenticatedVoter::IS_IMPERSONATOR') is defined ? 'IS_IMPERSONATOR' : 'ROLE_PREVIOUS_ADMIN' %}
  53.         {% set user_menu_dropdown %}
  54.             <div class="dropdown-menu dropdown-menu-end">
  55.                 <div class="dropdown-item">{{ user_menu_avatar }}</div>
  56.                 <div class="dropdown-item">
  57.                     <span class="user-label">{{ 'user.logged_in_as'|trans(domain = 'EasyAdminBundle') }}</span>
  58.                     <span
  59.                             class="user-name">{{ ea.user is null ? 'user.anonymous'|trans(domain = 'EasyAdminBundle') : ea.userMenu.name }}</span>
  60.                 </div>
  61.                 <hr class="dropdown-divider">
  62.                 {% block user_menu %}
  63.                     {% if ea.userMenu.items|length > 0 %}
  64.                         {% for item in ea.userMenu.items %}
  65.                             {% if item.isMenuSection and not loop.first %}
  66.                                 <hr class="dropdown-divider">
  67.                             {% elseif not item.isMenuSection %}
  68.                                 <a href="{{ item.linkUrl }}" class="dropdown-item user-action {{ item.cssClass }}"
  69.                                    target="{{ item.linkTarget }}" rel="{{ item.linkRel }}"
  70.                                    referrerpolicy="origin-when-cross-origin">
  71.                                     {% if item.icon is not empty %}
  72.                                         <i class="fa fa-fw {{ item.icon }}"></i>
  73.                                     {% endif %}
  74.                                     <span>{{ item.label }}</span>
  75.                                 </a>
  76.                             {% endif %}
  77.                         {% endfor %}
  78.                     {% endif %}
  79.                 {% endblock user_menu %}
  80.             </div>
  81.         {% endset %}
  82.         {% block wrapper %}
  83.             <aside
  84.                     class="sidenav navbar navbar-vertical navbar-expand-xs border-0 border-radius-xl my-3 fixed-start ms-3 bg-gradient-dark bg-white">
  85.                 {% block sidebar %}
  86.                     <div class="sidenav-header">
  87.                         {% block header %}
  88.                             <a class="navbar-brand m-0" title="{{ ea.dashboardTitle|striptags }}"
  89.                                href="{{ path('easyadmin_index') }}">
  90.                                 <span class="logo-custom">{{ ea.dashboardTitle|raw }}</span>
  91.                             </a>
  92.                         {% endblock header %}
  93.                     </div>
  94.                     <hr class="horizontal light mt-2 mb-2">
  95.                     {% block main_menu_wrapper %}
  96.                         {{ include(ea.templatePath('main_menu')) }}
  97.                     {% endblock main_menu_wrapper %}
  98.                 {% endblock sidebar %}
  99.             </aside>
  100.             <main class="main-content position-relative max-height-vh-100 h-100 border-radius-lg ">
  101.                 {% set has_search = ea.crud is not null and ea.crud.isSearchEnabled %}
  102.                 <nav
  103.                         class="navbar navbar-main navbar-expand-lg card position-sticky mt-4 top-1 px-0 mx-4 shadow-none border-radius-xl z-index-sticky {{ has_search ? 'ea-search-enabled' : 'ea-search-disabled' }}"
  104.                         id="navbarBlur" data-scroll="true">
  105.                     <div class="container-fluid py-1 px-3">
  106.                         {% block content_top_header %}
  107.                             <div class="collapse navbar-collapse mt-sm-0 mt-2 me-md-0">
  108.                                 <div class="ms-md-auto d-flex align-items-center col-md-10" id="navbar">
  109.                                     {% if has_search %}
  110.                                         {% block search %}
  111.                                             <form class="form-action-search  w-100" method="get">
  112.                                                 {% block search_form %}
  113.                                                     {% block search_form_filters %}
  114.                                                         {{ parent() }}
  115.                                                     {% endblock %}
  116.                                                     {% for key, value in app.request.query.get('filters', {}) %}
  117.                                                         {{ _self.render_hidden_fields('filters[' ~ key ~ ']', value) }}
  118.                                                     {% endfor %}
  119.                                                     <input type="hidden" name="crudAction" value="index">
  120.                                                     <input type="hidden" name="crudControllerFqcn"
  121.                                                            value="{{ ea.request.query.get('crudControllerFqcn') }}">
  122.                                                     <input type="hidden" name="menuIndex"
  123.                                                            value="{{ ea.request.query.get('menuIndex') }}">
  124.                                                     <input type="hidden" name="submenuIndex"
  125.                                                            value="{{ ea.request.query.get('submenuIndex') }}">
  126.                                                     <input type="hidden" name="page" value="1">
  127.                                                     <input type="hidden" name="signature"
  128.                                                            value="{{ ea_url().unsetAll().setAction('index').setController(ea.request.query.get('crudControllerFqcn')).getSignature() }}">
  129.                                                     <div class="form-group">
  130.                                                         <div class="input-group input-group-outline">
  131.                                                             <label class="content-search-label"
  132.                                                                    data-value="{{ app.request.get('query') }}"></label>
  133.                                                             <input
  134.                                                                     class="form-control {{ app.request.get('query') is null ? 'is-blank' }}"
  135.                                                                     type="search" name="query"
  136.                                                                     value="{{ app.request.get('query') ?? '' }}"
  137.                                                                     placeholder="{{ 'action.search'|trans(ea.i18n.translationParameters, 'EasyAdminBundle') }}"
  138.                                                                     spellcheck="false" autocorrect="false"
  139.                                                                     oninput="this.parentNode.dataset.value=this.value">
  140.                                                         </div>
  141.                                                     </div>
  142.                                                 {% endblock %}
  143.                                             </form>
  144.                                         {% endblock search %}
  145.                                     {% endif %}
  146.                                 </div>
  147.                                 <ul class="navbar-nav justify-content-center col-md-2">
  148.                                     {% block header_custom_menu %}
  149.                                         {% if impersonator_permission is not defined %}
  150.                                             {% set impersonator_permission = constant('Symfony\\Component\\Security\\Core\\Authorization\\Voter\\AuthenticatedVoter::IS_IMPERSONATOR') is defined ? 'IS_IMPERSONATOR' : 'ROLE_PREVIOUS_ADMIN' %}
  151.                                         {% endif %}
  152.                                         {% if user_menu_avatar is not defined %}
  153.                                             {% set user_menu_avatar %}
  154.                                                 {% if null == ea.userMenu.avatarUrl %}
  155.                                                     <span class="user-avatar">
  156.                                                         <span class="fa-stack">
  157.                                                             <i class="user-avatar-icon-background fas fa-square fa-stack-2x"></i>
  158.                                                             <i class="user-avatar-icon-foreground {{ ea.user is not null ? 'fa fa-user' : 'fas fa-user-slash' }} fa-stack-1x fa-inverse"></i>
  159.                                                         </span>
  160.                                                     </span>
  161.                                                 {% else %}
  162.                                                     <img class="user-avatar" src="{{ ea.userMenu.avatarUrl }}"/>
  163.                                                 {% endif %}
  164.                                             {% endset %}
  165.                                         {% endif %}
  166.                                         <li class="nav-item dropdown user-menu-wrapper {{ is_granted(impersonator_permission) ? 'user-is-impersonated' }}">
  167.                                             <a class="user-details nav-link p-0 position-relative text-body"
  168.                                                type="button" data-toggle="dropdown" aria-expanded="false">
  169.                                                 {{ user_menu_avatar }}
  170.                                                 {% if ea.userMenu.isNameDisplayed %}
  171.                                                     <span class="user-name">{{ ea.userMenu.name }}</span>
  172.                                                 {% endif %}
  173.                                             </a>
  174.                                             {{ user_menu_dropdown }}
  175.                                         </li>
  176.                                     {% endblock header_custom_menu %}
  177.                                 </ul>
  178.                             </div>
  179.                         {% endblock content_top_header %}
  180.                     </div>
  181.                 </nav>
  182.                 <div class="container-fluid py-4">
  183.                     {% block flash_messages %}
  184.                         {{ include(ea.templatePath('flash_messages')) }}
  185.                     {% endblock flash_messages %}
  186.                     {% block content %}
  187.                         <div class="row content">
  188.                             <div class="col-12">
  189.                                 <div class="card mb-5">
  190.                                     <div class="card-header d-flex flex-wrap">
  191.                                         {% block content_header_wrapper %}
  192.                                             {% set has_help_message = (ea.crud.helpMessage ?? '') is not empty %}
  193.                                             {% block content_header %}
  194.                                                 <h4 class="title align-items-center mt-1">
  195.                                                     {% block content_title %}{% endblock %}
  196.                                                     {% block content_help %}
  197.                                                         {% if has_help_message %}
  198.                                                             <span class="content-header-help">
  199.                                                                     <i class="far fa-question-circle"
  200.                                                                        data-bs-toggle="tooltip"
  201.                                                                        title="{{ ea.crud.helpMessage|e('html_attr') }}"></i>
  202.                                                                 </span>
  203.                                                         {% endif %}
  204.                                                     {% endblock %}
  205.                                                 </h4>
  206.                                                 {% block page_actions_wrapper %}
  207.                                                     <div class="ms-md-auto pe-md-3 d-flex align-items-end">
  208.                                                         {% block page_actions %}{% endblock %}
  209.                                                         {% if app.request.query.get('crudControllerFqcn') is not null and app.request.query.get('crudControllerFqcn')|getClass == 'UserSurveyCrudController' %}
  210.                                                             <div id="robotMonitor" class="text-right"
  211.                                                                  data-path="{{ path('admin_getax_monitor_robot') }}">
  212.                                                                 <button type="button" class="btn btn-light">
  213.                                                                     <i class="fas fa-spinner"></i>
  214.                                                                     Chargement...
  215.                                                                 </button>
  216.                                                             </div>
  217.                                                         {% endif %}
  218.                                                     </div>
  219.                                                 {% endblock %}
  220.                                             {% endblock content_header %}
  221.                                         {% endblock content_header_wrapper %}
  222.                                     </div>
  223.                                     {% block main %}{% endblock %}
  224.                                     {% block content_footer_wrapper %}
  225.                                         {% set content_footer = block('content_footer') is defined ? block('content_footer') : '' %}
  226.                                         {% if content_footer is not empty %}
  227.                                             <section class="content-footer">
  228.                                                 {{ content_footer }}
  229.                                             </section>
  230.                                         {% endif %}
  231.                                     {% endblock %}
  232.                                 </div>
  233.                             </div>
  234.                         </div>
  235.                     {% endblock content %}
  236.                 </div>
  237.             </main>
  238.         {% endblock wrapper %}
  239.     {% endblock wrapper_wrapper %}
  240.     {% block configured_body_contents %}
  241.         {% for htmlContent in ea.assets.bodyContents ?? [] %}
  242.             {{ htmlContent|raw }}
  243.         {% endfor %}
  244.     {% endblock %}
  245.     {{ include('admin/modals/modalChartTable.html.twig') }}
  246.     {{ include('admin/modals/robotModal.html.twig') }}
  247.     {{ include('admin/modals/customModal.html.twig') }}
  248.     {{ include('admin/modals/customModal2.html.twig') }}
  249.     {{ include('admin/modals/customModalPDF.html.twig') }}
  250.     {% block body_javascript %}
  251.         {{ parent() }}
  252.         {{ encore_entry_script_tags('js/modals') }}
  253.         {{ encore_entry_script_tags('js/admin') }}
  254.         {{ encore_entry_script_tags('js/popper') }}
  255.         {{ encore_entry_script_tags('js/bootstrap') }}
  256.         {{ encore_entry_script_tags('js/material-dashboard') }}
  257.         {{ encore_entry_script_tags('js/datatables') }}
  258.         {{ encore_entry_script_tags('js/onload') }}
  259.         {{ encore_entry_script_tags('js/tags') }}
  260.         {{ encore_entry_script_tags('js/select-dropdown') }}
  261.     {% endblock body_javascript %}
  262.     </body>
  263. {% endblock body %}