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