templates/common/navbar.html.twig line 1

Open in your IDE?
  1. {# templates/common/navbar.html.twig #}
  2. {# --- Lógica de Colores --- #}
  3. {% set navbarBg = '#101230' %}
  4. {% if branding_current is defined and branding_current is not null and branding_current.primaryColor is not empty %}
  5. {% set navbarBg = branding_current.primaryColor %}
  6. {% endif %}
  7. <nav class="navbar navbar-default navbar-static-top mante-navbar"
  8.     style="background-color: {{ navbarBg }}; border-color: transparent;">
  9.     <div class="container-fluid">
  10.         {# --- HEADER / LOGO --- #}
  11.         <div class="navbar-header">
  12.             <ul class="nav navbar-nav visible-xs-block visible-sm-block pull-left" style="margin: 0; list-style: none;">
  13.                 <li>
  14.                     <a class="sidebar-mobile-main-toggle"
  15.                         style="color: #fff; padding: 20px 15px; cursor: pointer; display: block;">
  16.                         <i class="glyphicon glyphicon-menu-hamburger" style="font-size: 16px;"></i>
  17.                     </a>
  18.                 </li>
  19.             </ul>
  20.             <button type="button" class="navbar-toggle collapsed" data-toggle="collapse"
  21.                 data-target="#main-navbar-collapse" aria-expanded="false" style="margin-top: 13px;">
  22.                 <span class="sr-only">{% trans %}Toggle navigation{% endtrans %}</span>
  23.                 <span class="icon-bar" style="background-color: #fff;"></span>
  24.                 <span class="icon-bar" style="background-color: #fff;"></span>
  25.                 <span class="icon-bar" style="background-color: #fff;"></span>
  26.             </button>
  27.         </div>
  28.         {# --- CONTENIDO COLAPSABLE --- #}
  29.         <div class="collapse navbar-collapse" id="main-navbar-collapse">
  30.             {# Lógica de Permisos #}
  31.             {% set current_access = app.session.get('current_access_type') ?? null %}
  32.             {% set modules = app.session.get('_modules') %}
  33.             {% set can_access_venues = modules.mvenues %}
  34.             {% set can_access_catering = modules.mcatering %}
  35.             {% set can_access_av = modules.mav %}
  36.             {# --- BOTONES CENTRALES (Módulos) --- #}
  37.             <div class="nav navbar-nav navbar-center-container">
  38.                 <ul class="nav navbar-nav">
  39.                     {% if can_access_venues and current_access != 'venues' %}
  40.                     <li>
  41.                         <a href="{{ path('switch_access', { type: 'venues' }) }}" class="mante-nav-pill pill-venues">
  42.                             {# Imagen por defecto (Blanca/Normal) #}
  43.                             <img src="/uploads/branding/venues/logo.png" class="img-def" alt="Venues">
  44.                             {# Imagen al pasar el ratón (Color/ManteVenues) #}
  45.                             <img src="/uploads/branding/venues/logo_ManteVenues.png" class="img-hov" alt="Venues Hover">
  46.                         </a>
  47.                     </li>
  48.                     {% endif %}
  49.                     {% if can_access_catering and current_access != 'catering' %}
  50.                     <li>
  51.                         <a href="{{ path('switch_access', { type: 'catering' }) }}"
  52.                             class="mante-nav-pill pill-catering">
  53.                             <img src="/uploads/branding/catering/logo.png" class="img-def" alt="Catering">
  54.                             <img src="/uploads/branding/catering/logo_ManteCatering.png" class="img-hov"
  55.                                 alt="Catering Hover">
  56.                         </a>
  57.                     </li>
  58.                     {% endif %}
  59.                     {% if can_access_av and current_access != 'av' %}
  60.                     <li>
  61.                         <a href="{{ path('switch_access', { type: 'av' }) }}" class="mante-nav-pill pill-av">
  62.                             <img src="/uploads/branding/av/logo.png" class="img-def" alt="AV">
  63.                             <img src="/uploads/branding/av/logo_ManteAv.png" class="img-hov" alt="AV Hover">
  64.                         </a>
  65.                     </li>
  66.                     {% endif %}
  67.                 </ul>
  68.             </div>
  69.             {# --- MENÚ USUARIO (Derecha) --- #}
  70.             <ul class="nav navbar-nav navbar-right">
  71.                 <li class="dropdown dropdown-user">
  72.                     <a href="#" id="userMenu" class="dropdown-toggle user-link" role="button" aria-haspopup="true"
  73.                         aria-expanded="false">
  74.                         {% set avatarPath = app.user.picture is not empty ? app.user.picture : 'assets/images/user.png'
  75.                         %}
  76.                         <div class="user-avatar-wrapper">
  77.                             <img src="{{ asset(avatarPath) }}" class="img-circle user-img" alt="">
  78.                         </div>
  79.                         <span class="user-name hidden-sm">{{ app.user.name }} {{ app.user.lastname }}</span>
  80.                         <span class="caret text-white"></span>
  81.                     </a>
  82.                     <ul class="dropdown-menu dropdown-menu-right" aria-labelledby="userMenu"
  83.                         style="background-color: {{ navbarBg }}; border: 1px solid rgba(255,255,255,0.2);">
  84.                         {% if app.user.id != 122 %}
  85.                         <li>
  86.                             <a href="/users/view/{{ app.user.id }}">
  87.                                 <i class="glyphicon glyphicon-user"></i> {% trans %}My profile{% endtrans %}
  88.                             </a>
  89.                         </li>
  90.                         <li>
  91.                             <a href="{{ path('me_notifications_list') }}">
  92.                                 <i class="glyphicon glyphicon-exclamation-sign"></i> {% trans %}Notifications{% endtrans
  93.                                 %}
  94.                             </a>
  95.                         </li>
  96.                         <li role="separator" class="divider"></li>
  97.                         {% endif %}
  98.                         <li>
  99.                             <a href="/logout">
  100.                                 <i class="glyphicon glyphicon-log-out"></i> {% trans %}Logout{% endtrans %}
  101.                             </a>
  102.                         </li>
  103.                     </ul>
  104.                 </li>
  105.             </ul>
  106.         </div>
  107.     </div>
  108. </nav>
  109. {# --- JAVASCRIPT --- #}
  110. <script>
  111.     document.addEventListener('DOMContentLoaded', function () {
  112.         // Lógica simple para dropdown sin dependencia estricta de jQuery/Bootstrap JS
  113.         var trigger = document.getElementById('userMenu');
  114.         var item = trigger ? trigger.closest('.dropdown') : null;
  115.         var menu = item ? item.querySelector('.dropdown-menu') : null;
  116.         if (!trigger || !item || !menu) return;
  117.         function toggleDropdown(e) {
  118.             e.preventDefault();
  119.             e.stopPropagation();
  120.             item.classList.toggle('open');
  121.             // Compatibilidad Bootstrap 4+ si se actualiza a futuro
  122.             menu.classList.toggle('show');
  123.             var expanded = trigger.getAttribute('aria-expanded') === 'true';
  124.             trigger.setAttribute('aria-expanded', !expanded);
  125.         }
  126.         trigger.addEventListener('click', toggleDropdown);
  127.         document.addEventListener('click', function (e) {
  128.             if (!item.contains(e.target)) {
  129.                 item.classList.remove('open');
  130.                 menu.classList.remove('show');
  131.                 trigger.setAttribute('aria-expanded', 'false');
  132.             }
  133.         });
  134.         // Toggle sidebar en móviles
  135.         var toggleSidebarBtn = document.querySelector('.sidebar-mobile-main-toggle');
  136.         if (toggleSidebarBtn) {
  137.             toggleSidebarBtn.addEventListener('click', function (e) {
  138.                 e.preventDefault();
  139.                 var sidebar = document.querySelector('.sidebar-main');
  140.                 if (sidebar) {
  141.                     sidebar.classList.toggle('sidebar-mobile-expanded');
  142.                 }
  143.             });
  144.         }
  145.     });
  146. </script>