templates/header.html.twig line 1

  1. <!-- Navbar -->
  2. {% if app.user != null %}
  3.     <nav class="navbar navbar-expand-lg bg-secondary shadow-lg sticky">
  4.         <!-- Container wrapper -->
  5.         <div class="container-md flex-nowrap align-items-center">
  6.             <div class="dropdown show hide-sm ">
  7.                 <button class="navbar-toggler " role="button" id="dropdownMenu" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
  8.                     <span class="material-symbols-outlined">
  9.                         menu
  10.                     </span>
  11.                 </button>
  12.                 <div class="dropdown-menu" aria-labelledby="dropdownMenu">
  13.                     <ul class="navbar-nav me-auto mb-2 mb-lg-0">
  14.                         <a href="/" class="ms-3 text-decoration-none text-white">{{ 'Home'|trans }}</a>
  15.                         {% if is_granted('ROLE_PROGRAM_MANAGER') or is_granted('ROLE_SUPER_ADMIN') %}
  16.                             <a href="{{ path('app_bot_index') }}" class="ms-3 text-decoration-none text-white">{{ 'Bots'|trans }}</a>
  17.                         {% endif %}
  18.                     </ul>
  19.                 </div>
  20.             </div>
  21.             <a href="/" class="d-flex navbar-brand">
  22.                 <img src="{{ asset('images/logo.webp')}}" style="height: 48px; margin-left: 30px;" class="d-none d-sm-block"/>
  23.                 <img src="{{ asset('images/logo-2.png')}}" style="height: 48px; margin-left: 40px;" class="d-none d-sm-block"/>
  24.                 <img src="{{ asset('images/logo.webp')}}" style="height: 30px; margin-left: 10px" class="d-block d-sm-none"/>
  25.                 <img src="{{ asset('images/logo-2.png')}}" style="height: 30px; margin-left: 10px" class="d-block d-sm-none"/>
  26.             </a>
  27.             <nav class="navbar navbar-expand-lg hide-lg">
  28.                 <div class="collapse navbar-collapse" id="navbarToggler">
  29.                     <ul class="navbar-nav me-auto mb-2 mb-lg-0">
  30.                         <a href="/" class="ms-3 text-decoration-none text-white bold">{{ 'Home'|trans }}</a>
  31.                         {% if is_granted('ROLE_PROGRAM_MANAGER') or is_granted('ROLE_SUPER_ADMIN') %}
  32.                             <a href="{{ path('app_bot_index') }}" class="ms-3 text-decoration-none text-white bold">{{ 'Bots'|trans }}</a>
  33.                         {% endif %}
  34.                     </ul>
  35.                 </div>
  36.             </nav>
  37.             <!-- Right elements -->
  38.             <!-- Avatar -->
  39.       {# {% if app.user %} #}
  40.         <div class="dropdown show align-items-center">
  41.           <a class="btn" href="#" role="button" id="dropdownMenuLink" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
  42.             <span class="hide-lg" style="text-transform: capitalize; vertical-align: middle;padding-right: 10px;">
  43.               {{app.user.firstName}}
  44.               {{app.user.lastName}}
  45.             </span>
  46.             {% if app.user.image %}
  47.               <img src={{app.user.image}} class="rounded-circle" style="height: 40px; width: 40px;" loading="lazy"/>
  48.             {% endif %}
  49.             {% if is_granted('ROLE_PROGRAM_MANAGER') or is_granted('ROLE_SUPER_ADMIN') %}
  50.               <span class="token badge text-bg-cyellow ms-2">{{ app.user.programManager.getTokensPool()|round }}
  51.                 <i class="fal fa-coin"></i>
  52.               </span>
  53.             {% endif %}
  54.           </a>
  55.           <div class="dropdown-menu profileMenu" aria-labelledby="dropdownMenuLink">
  56.             <a href="{{ path('app_user_profile') }}?origin={{ app.request.attributes.get('_route') }}&origin_params={{ app.request.attributes.get('_route_params') | json_encode }}" class="dropdown-item text-white ">
  57.               {{ 'profile'|trans }}
  58.             </a>
  59.             <a class="dropdown-item text-white " href="/contact">{{ 'Aide'|trans }}</a>
  60.             <a class="dropdown-item text-white " href="/logout">{{ 'Logout'|trans }}</a>
  61.           </div>
  62.         </div>
  63.       {# {% endif %} #}
  64.             <!-- Language -->
  65.             <div class="switch">
  66.                 <select id="language-toggle">
  67.                     <option value="fr" {% if app.request.locale == "fr" %} selected {% endif %}>FR</option>
  68.                     <option value="en" {% if app.request.locale != "fr" %} selected {% endif %}>EN</option>
  69.                 </select>
  70.             </div>
  71.         </div>
  72.     </nav>
  73. {% endif %}
  74. <style>
  75.     .bold:hover {
  76.         opacity: .8;
  77.     }
  78.     .bg-nav {
  79.         font-family: 'Roboto', sans-serif;
  80.     }
  81.     .navbar-toggler {
  82.         background-color: #d3d3d39e;
  83.     }
  84.     .switch {
  85.         background-color: #d3d3d39e;
  86.         border-radius: 6px;
  87.         padding: 3px 4px;
  88.         cursor: pointer;
  89.         font-size: 70%;
  90.         font-weight: bold;
  91.         margin-bottom: 4px;
  92.     }
  93.     .bold {
  94.         font-weight: bold;
  95.     }
  96.     .material-symbols-outlined {
  97.         font-variation-settings: 'FILL' 0, 'wght' 400, 'GRAD' 0, 'opsz' 24;
  98.         color: #fff;
  99.     }
  100.     @media(min-width: 992px) {
  101.         .hide-sm {
  102.             display: none;
  103.         }
  104.     }
  105.     @media(max-width: 992px) {
  106.         .navbar-brand {
  107.             margin-right: 0;
  108.         }
  109.         .hide-lg {
  110.             display: none;
  111.         }
  112.         .dropdown-menu.show {
  113.             left: 0
  114.         }
  115.         .profileMenu {
  116.             left: -50px !important;
  117.         }
  118.     }
  119.     .sticky {
  120.         position: sticky;
  121.         top: 0;
  122.         width: 100%;
  123.         z-index: 1;
  124.     }
  125. </style>
  126. <script>
  127.     $(document).ready(function () {
  128.     var languageToggle = document.getElementById('language-toggle');
  129.     if (!languageToggle) return;
  130.     languageToggle.checked = {{ app.request.locale != "fr" ? "true" : "false" }};
  131.     languageToggle.onchange = function () {
  132.       var elem = (typeof this.selectedIndex === "undefined" ? window.event.srcElement : this);
  133.       var value = elem.value || elem.options[elem.selectedIndex].value;
  134.       changeLanguage(value);
  135.     }
  136.   });
  137.   function changeLanguage(lang) {
  138.     fetch('/profile/lang', {
  139.       method: 'POST',
  140.       headers: {
  141.         'Content-Type': 'application/json'
  142.       },
  143.       body: JSON.stringify(
  144.         {lang: lang}
  145.       )
  146.     })
  147.       .then(response => response.json())
  148.       .then(data => console.log(data))
  149.       .catch(error => console.error('Erreur:', error))
  150.       .finally(() => {
  151.         const url = new URL(window.location.href);
  152.         url.searchParams.set('lang', lang);
  153.         window.location.href = url.href;
  154.       });
  155.   }
  156. </script>