templates/__includes__/header.html.twig line 1

Open in your IDE?
  1. <header class="header{% if app.user %}{% else %}{{ " header--alt" }}{% endif %}">
  2.   <div class="header__bar">
  3.     <div class="shell">
  4.         {% if not getenv('PROD_PARTIELLE') %}
  5.       <a href="ajax/popup1.html" class="header__link js-popup">> Inscrivez-vous à la newsletter</a>
  6.         {% endif %}
  7.       <nav class="nav-access">
  8.         {% if app.user %}
  9.           <ul>
  10.             <li>
  11.               <a href="{{ path('moncompte') }}" class="btn-user">
  12.                 <i class="ico-user"></i> Bienvenue {{ app.user.prenom }}
  13.               </a>
  14.             </li>
  15.             <li>
  16.               <a href="/logout">Déconnexion</a>
  17.             </li>
  18.           </ul>
  19.         {% else %}
  20.           <ul>
  21.             <li>
  22.               <a href="/login" class="btn-user">
  23.                 <i class="ico-user visible-mobile"></i> Connexion / Inscription
  24.               </a>
  25.             </li>
  26.           </ul>
  27.         {% endif %}
  28.       </nav><!-- /.nav -->
  29.     </div><!-- /.shell -->
  30.   </div><!-- /.header__bar -->
  31.   <div class="header__body">
  32.     <div class="shell">
  33.       <a href="/" class="logo"></a>
  34.       <a href="#" class="btn-burger">
  35.         <span></span>
  36.         <span></span>
  37.         <span></span>
  38.       </a>
  39.       <nav class="nav">
  40.         <ul>
  41.             {% if not getenv('PROD_PARTIELLE') %}
  42.           <li class="visible-mobile">
  43.             <a href="ajax/popup1.html" class="js-popup">> Inscrivez-vous à la newsletter</a>
  44.           </li>
  45.             {% endif %}
  46.           {% for onglet in onglets if onglet.isActive %}
  47.               {% if onglet.link == '/etablissement' and (not app.user or app.user.etablissement is not defined or not app.user.etablissement) %}
  48.                   {% if app.user and app.user.tutelle %}
  49.                     <li >
  50.                       <a href="/tutelle">Tutelle</a>
  51.                     </li>
  52.                   {% endif %}
  53.               {% else %}
  54.               {% if onglet.childrens|length %}
  55.                 <li>
  56.                     {% if onglet.link %}
  57.                       <a href="{{ onglet.link }}">{{ onglet.name }}</a>
  58.                     {% else %}
  59.                         {{ onglet.name }}
  60.                     {% endif %}
  61.                   <div class="dropdown dropdown--primary">
  62.                     <ul>
  63.                         {% for children in onglet.childrens if children.isActive %}
  64.                           <li >
  65.                             {% if children.link %}
  66.                               <a href="{{ children.link }}">{{ children.name }}</a>
  67.                             {% else %}
  68.                               {{ children.name }}
  69.                             {% endif %}
  70.                           </li>
  71.                         {% endfor %}
  72.                     </ul>
  73.                   </div>
  74.                 </li>
  75.               {% else %}
  76.                 <li >
  77.                     {% if onglet.link %}
  78.                       <a href="{{ onglet.link }}">{{ onglet.name }}</a>
  79.                     {% else %}
  80.                         {{ onglet.name }}
  81.                     {% endif %}
  82.                 </li>
  83.               {% endif %}
  84.             {% endif %}
  85.           {% endfor %}
  86.         </ul>
  87.       </nav><!-- /.nav -->
  88.       {% if app.user %}
  89.       <a href="#" class="btn-search search-toggle">
  90.         <i class="ico-search"></i>
  91.       </a>
  92.       {% endif %}
  93.       <div class="search-alt" id="barre_recherche">
  94.         <div >
  95.           <label for="q1" class="hidden">Search</label>
  96.           <div class="field search__field" id="searchbox"></div>
  97.           <button class="search__btn">
  98.             <i class="ico-search"></i>
  99.           </button>
  100.           <a href="#" class="btn-close search-toggle">
  101.             <i class="ico-x"></i>
  102.           </a>
  103.         </div>
  104.         <script src="https://cdn.jsdelivr.net/npm/algoliasearch@3.32.1/dist/algoliasearchLite.js" integrity="sha256-pMaJf0I78weeXGkRMBDO6jSulxC/q3sb0aPdtV2N8n0=" crossorigin="anonymous"></script>
  105.         <script src="https://cdn.jsdelivr.net/npm/instantsearch.js@3.2.0" integrity="sha256-/8usMtTwZ01jujD7KAZctG0UMk2S2NDNirGFVBbBZCM=" crossorigin="anonymous"></script>
  106.         <div class="search__dropdown">
  107.         </div><!-- /.search__dropdown -->
  108.         <script>
  109.             const searchClient = algoliasearch('EH2CXPFAPG', 'a8131490169e0d5bd8c543a47e1126ef');
  110.             const search = instantsearch({
  111.                 indexName: '{{ util_service.getEnv('SEARCH_PREFIX') }}_indexeur',
  112.                 searchClient,
  113.             });
  114.             search.addWidget(
  115.                 instantsearch.widgets.searchBox({
  116.                     container: '#searchbox',
  117.                     placeholder: 'Entrez votre recherche'
  118.                 })
  119.             );
  120.             search.on('render', function(eve) {
  121.                 let dd = $('.search__dropdown');
  122.                 dd.empty();
  123.                 if (!this.helper.lastResults.query) {
  124.                     dd.hide();
  125.                     return;
  126.                 }
  127.                 dd.show();
  128.                 let resultats = this.helper.lastResults;
  129.                 let hits = resultats.hits;
  130.                 let data = {};
  131.                 for (let i in hits) {
  132.                     let hit = hits[i];
  133.                     let clef = hit.objectID.split('\\').pop().split(':').shift().toLowerCase();
  134.                     if (clef === 'message') {
  135.                         if (hit.algoliaContribution) clef += '_contribution';
  136.                         if (hit.algoliaEtablissement) clef += '_etablissement';
  137.                         if (hit.algoliaTopic) clef += '_topic';
  138.                         if (hit.algoliaTutelle) clef += '_tutelle';
  139.                     }
  140.                     if (undefined === data[clef]) data[clef] = [];
  141.                     data[clef].push(hit);
  142.                 }
  143.                 // console.log(data);
  144.                 rempliResultats(data, 'contribution', 'Contributions', dd, 4);
  145.                 rempliResultats(data, 'topic', 'Forums', dd, 4);
  146.                 rempliResultats(data, 'actualite', 'Actualités', dd, 4);
  147.                 rempliResultats(data, 'evenement', 'Évènements', dd, 4);
  148.                 // rempliResultats(data, 'etablissement', 'Établissements', dd, 4);
  149.                 // rempliResultats(data, 'tutelle', 'Tutelles', dd, 4);
  150.                 // rempliResultats(data, 'message_contribution', 'Messages des contributions', dd, 2);
  151.                 // rempliResultats(data, 'message_topic', 'Messages des forums', dd, 2);
  152.                 // rempliResultats(data, 'message_etablissement', 'Messages des établissements', dd, 2);
  153.                 // rempliResultats(data, 'message_tutelle', 'Messages des tutelles', dd, 2);
  154.                 if (!dd.text().trim()) {
  155.                     dd.hide();
  156.                 }
  157.             });
  158.             search.start();
  159.             let rechercheEnCours;
  160.             $('#searchbox').keypress(function(event) {
  161.                 let keycode = (event.keyCode ? event.keyCode : event.which);
  162.                 let valeur = $('.ais-SearchBox-input').val().trim();
  163.                 if (!valeur) return;
  164.                 if (keycode === 13) { // Entrée
  165.                     event.preventDefault();
  166.                     window.location.href = '{{ path('recherche') }}' + '/' + valeur;
  167.                 }
  168.                 $('.search-alt').addClass('active');
  169.                 {#return;#}
  170.                 {#let keycode = (event.keyCode ? event.keyCode : event.which);#}
  171.                 {#if (keycode === 13) {#}
  172.                 {#event.preventDefault();#}
  173.                 {#}#}
  174.                 {#let soi = $(this);#}
  175.                 {#let valeur = soi.val().trim();#}
  176.                 {#if (!valeur) return;#}
  177.                 {#$('.search-alt').addClass('active');#}
  178.                 {#let dd = $('.search__dropdown');#}
  179.                 {#dd.html('<div class="articles-small"><br>Recherche en cours...</div>');#}
  180.                 {#if (rechercheEnCours) rechercheEnCours.abort();#}
  181.                 {#rechercheEnCours = $.post( "{{ path('chercher') }}", { 'valeur' : valeur }, function( data ) {#}
  182.                 {#if (!data.erreur) {#}
  183.                 {#$('.search-alt').addClass('active');#}
  184.                 {#dd.empty();#}
  185.                 {#rempliResultats(data.resultat, 'contribution', 'Contributions', dd, 4);#}
  186.                 {#rempliResultats(data.resultat, 'topic', 'Forums', dd, 4);#}
  187.                 {#rempliResultats(data.resultat, 'actualite', 'Actualités', dd, 4);#}
  188.                 {#rempliResultats(data.resultat, 'evenement', 'Évènements', dd, 4);#}
  189.                 {#rempliResultats(data.resultat, 'etablissement', 'Établissements', dd, 4);#}
  190.                 {#rempliResultats(data.resultat, 'tutelle', 'Tutelles', dd, 4);#}
  191.                 {#rempliResultats(data.resultat, 'message_contribution', 'Messages des contributions', dd, 2);#}
  192.                 {#rempliResultats(data.resultat, 'message_topic', 'Messages des forums', dd, 2);#}
  193.                 {#rempliResultats(data.resultat, 'message_etablissement', 'Messages des établissements', dd, 2);#}
  194.                 {#rempliResultats(data.resultat, 'message_tutelle', 'Messages des tutelles', dd, 2);#}
  195.                 {#}#}
  196.                 {#if (data.erreur) {#}
  197.                 {#}#}
  198.                 {#});#}
  199.             });
  200.             function troncate(val) {
  201.                 let original = val;
  202.                 let emDebut = val.indexOf('<em>');
  203.                 let emFin = val.indexOf('</em>');
  204.                 if (emDebut !== -1 && emFin !== -1) {
  205.                     val = val.substring(emDebut - 40, emFin + 40);
  206.                     if (emDebut > 40) val = '...' + val;
  207.                     if (original.length - 40 > emFin) val += '...';
  208.                 }
  209.                 return val;
  210.             }
  211.             function renvoieSurligne(ele, sanshl, ignorer) {
  212.                 if (typeof ele !== "object") return;
  213.                 let res = '';
  214.                 let obj = sanshl ? ele : ele._highlightResult;
  215.                 for (let i in obj) {
  216.                     if (ignorer.indexOf(i) !== -1) continue;
  217.                     let h = obj[i];
  218.                     if (undefined === h.matchLevel) res += renvoieSurligne(h, true, ignorer);
  219.                     if (h.matchLevel === 'none') continue;
  220.                     if (!h.value) continue;
  221.                     let val = troncate(h.value);
  222.                     res += '<div>' + val + '</div>';
  223.                 }
  224.                 return res;
  225.             }
  226.             function surligne(ele, clef) {
  227.                 let title = ele[clef];
  228.                 if (ele._highlightResult[clef].matchLevel !== 'none') {
  229.                     title = ele._highlightResult[clef].value;
  230.                 }
  231.                 return troncate(title);
  232.             }
  233.             function rempliResultats(tab, clef, nom, parent, limite) {
  234.                 if (!tab) return;
  235.                 tab = tab[clef];
  236.                 if (!tab) return;
  237.                 if (!tab.length) return;
  238.                 parent.append($('<h6 class="search__dropdown-title">'+nom+'</h6>'));
  239.                 let div;
  240.                 if (clef === 'contribution') {
  241.                     div = $('<div class="articles-small"></div>');
  242.                 }
  243.                 else {
  244.                     div = $('<ul class="list-results"></ul>');
  245.                 }
  246.                 let nb = 0;
  247.                 for (let i in tab) {
  248.                     let ele = tab[i];
  249.                     if (nb >= limite) break;
  250.                     nb++;
  251.                     if (clef === 'contribution') {
  252.                         let etiquette = ele.label.name;
  253.                         let couleur = ele.label.color;
  254.                         let resultat = $('\n' +
  255.                             '            <a href="'+ele.algoliaUrl+'" class="article-small article-small--secondary">\n' +
  256.                             '              <div class="article__image" style="height : 39px ; background-size : cover ; background-position : center ;  background-image : url(\'/assets/'+ (ele.image ? ('uploads/contribution/' + ele.id + '/' + ele.image) : 'uploads/contribution/default/contribution.jpg') +'\')" >\n' +
  257.                             '              </div><!-- /.article__image -->\n' +
  258.                             '\n' +
  259.                             '              <div class="article__body">\n' +
  260.                             '                <h6 class="label" style="background-color : '+couleur+'" >' + etiquette + '</h6>\n' +
  261.                             '\n' +
  262.                             '                <h5>' + surligne(ele, 'title') + '</h5>\n' + renvoieSurligne(ele, false, ['title']) +
  263.                             '              </div>\n' +
  264.                             '            </a>');
  265.                         div.append(resultat);
  266.                     }
  267.                     else if (clef === 'evenement') {
  268.                         let resultat = $('<li><a href="'+ele.algoliaUrl+'"><span style="font-weight: bold;">' + surligne(ele, 'title') + '</span>' + renvoieSurligne(ele, false, ['title']) +'</a></li>');
  269.                         div.append(resultat);
  270.                     }
  271.                     else if (clef === 'actualite') {
  272.                         let resultat = $('<li><a href="'+ele.algoliaUrl+'"><span style="font-weight: bold;">' + surligne(ele, 'title') + '</span>' + renvoieSurligne(ele, false, ['title']) +'</a></li>');
  273.                         div.append(resultat);
  274.                     }
  275.                     else if (clef === 'etablissement') {
  276.                         let resultat = $('<li><a href="'+ele.algoliaUrl+'">'+ surligne(ele, 'name') + renvoieSurligne(ele, false, ['name']) +'</a></li>');
  277.                         div.append(resultat);
  278.                     }
  279.                     else if (clef === 'tutelle') {
  280.                         let resultat = $('<li><a href="'+ele.algoliaUrl+'"><span style="font-weight: bold;">'+ surligne(ele, 'name') + '</span>' + renvoieSurligne(ele, false, ['name']) +'</a></li>');
  281.                         div.append(resultat);
  282.                     }
  283.                     else if (clef === 'topic') {
  284.                         let resultat = $('<li><a href="'+ele.algoliaUrl+'"><span style="font-weight: bold;">'+ surligne(ele, 'titre') + '</span>' + renvoieSurligne(ele, false, ['titre']) +'</a></li>');
  285.                         div.append(resultat);
  286.                     }
  287.                     else if (clef === 'message_topic') {
  288.                         let resultat = $('<li><a href="'+ele.algoliaUrl+'"><div style="font-weight: bold;">'+ele.algoliaTopic+'</div>'+ surligne(ele, 'textBrut') + renvoieSurligne(ele, false, ['textBrut', 'algoliaTopic']) +'</a></li>');
  289.                         div.append(resultat);
  290.                     }
  291.                     else if (clef === 'message_contribution') {
  292.                         let resultat = $('<li><a href="'+ele.algoliaUrl+'"><div style="font-weight: bold;">'+ele.algoliaContribution+'</div>'+ surligne(ele, 'textBrut') + renvoieSurligne(ele, false, ['textBrut', 'algoliaContribution']) +'</a></li>');
  293.                         div.append(resultat);
  294.                     }
  295.                     else if (clef === 'message_etablissement') {
  296.                         let resultat = $('<li><a href="'+ele.algoliaUrl+'"><div style="font-weight: bold;">'+ele.algoliaEtablissement+'</div>'+ surligne(ele, 'textBrut') + renvoieSurligne(ele, false, ['textBrut', 'algoliaEtablissement']) +'</a></li>');
  297.                         div.append(resultat);
  298.                     }
  299.                     else if (clef === 'message_tutelle') {
  300.                         let resultat = $('<li><a href="'+ele.algoliaUrl+'"><div style="font-weight: bold;">'+ele.algoliaTutelle+'</div>'+ surligne(ele, 'textBrut') + renvoieSurligne(ele, false, ['textBrut', 'algoliaTutelle']) +'</a></li>');
  301.                         div.append(resultat);
  302.                     }
  303.                 }
  304.                 parent.append(div);
  305.             }
  306.         </script>
  307.       </div><!-- /.search -->
  308.     </div><!-- /.shell -->
  309.   </div><!-- /.header__body -->
  310.   <div id="infoCookiesFond" >
  311.     <div id="infoCookies">
  312.       <p id="infoCookieTitre">Gestion des cookies</p>
  313.       <h3 class="infoCookieMessage">Nous utilisons des cookies afin d’assurer le bon fonctionnement de notre site.</h3>
  314.       <p class="infoCookieMessage">Pour personnaliser notre contenu, pour proposer des fonctionnalités disponibles sur les réseaux sociaux et afin d’analyser notre trafic. En poursuivant votre navigation sur notre site vous acceptez l’utilisation des cookies.</p>
  315.       {#<p class="infoCookieMessage">Les cookies sont des informations stockées par votre ordinateur ou récupérées par celui-ci qui peuvent porter sur vous, vos préférences, ou votre appareil et sont principalement utilisées pour s’assurer que le site fonctionne comme prévu. L'utilisateur peut à tout moment désactiver l'utilisation de ces cookies en sélectionnant les paramètres appropriés dans son navigateur.</p>#}
  316.       {#<p class="infoCookieMessage">Si vous ne souhaitez pas l’installation de cookies sur votre terminal, vous pouvez paramétrer votre navigateur pour accepter ou refuser au cas par cas les cookies préalablement à leur installation. Vous pouvez également régulièrement supprimer les cookies de votre terminal via votre navigateur. </p>#}
  317.       <p class="infoCookieMessage">Pour en savoir plus, nous vons invitons à consulter la page <a style="text-decoration: underline" href="{{ path('mentionslegales') }}">mentions légales</a> et <a style="text-decoration: underline" href="{{ path('cgu') }}">CGU</a>.</p>
  318.       <div id="paramsCookies">
  319.         <label>Cookies de fonctionnement</label>
  320.         <p class="infoCookieMessage">Ces cookies sont indispensables au bon fonctionnement du Site. Il peut s’agir par exemple de ceux liés à l’authentification du compte, aux préférences de sécurité et de confidentialité ou encore ceux permettant de faciliter la navigation sur le Site en mémorisant vos préférences de navigation etc. Ces cookies ne nécessitent pas le recueil de votre consentement dans la mesure où ils ont comme finalité exclusive de permettre ou de faciliter la communication par voie électronique.</p>
  321.         <label>Cookies réseaux sociaux</label>
  322.         <p class="infoCookieMessage">Sur certaines pages du Site figurent des boutons ou modules de réseaux tiers au Site. Ils vous permettent d’exploiter les fonctionnalités de ces réseaux et en particulier de partager des contenus présents sur le Site avec d’autres utilisateurs de ces réseaux. Des cookies sont directement déposés par ces réseaux sociaux dont nous n’avons pas la maîtrise. Nous vous invitons à consulter les politiques de confidentialité de chacun de ces réseaux (Facebook, Twitter, Scoop It) et notamment la partie sur les cookies afin de comprendre la finalité des informations qu’ils recueillent.</p>
  323.         <label>
  324.             <div class="checkbox">
  325.                 <input type="checkbox" checked="checked" id="cookieGA">
  326.                 <label for="cookieGA">Cookies de mesure d'audience</label>
  327.             </div>
  328.         </label>
  329.         <p class="infoCookieMessage">Ces cookies nous permettent d’analyser le trafic sur le Site et notamment de déterminer le nombre de visites, les sources du trafic, d’identifier les pages les plus ou les moins visitées et d’évaluer comment les internautes naviguent sur le Site. Ces cookies sont importants pour nous car ils nous permettent d’améliorer les performances du Site afin d’en mesureret d’en améliorer les performances. Les informations collectées par ces cookies sont agrégées et anonymisées. Pour plus d'informations concernant la politique Google Analytics, visitez <a target="_blank" style="text-decoration: underline" href="https://policies.google.com/?hl=en">https://policies.google.com/?hl=en</a></p>
  330.       </div>
  331.       <a id="infoCookiesBoutonPlus">Personnaliser</a>
  332.       <a id="infoCookiesBouton">Accepter</a>
  333.     </div>
  334.   </div>
  335.   <script>
  336.       function readCookie(name) {
  337.           var nameEQ = name + "=";
  338.           var ca = document.cookie.split(';');
  339.           for(var i=0;i < ca.length;i++) {
  340.               var c = ca[i];
  341.               while (c.charAt(0)==' ') c = c.substring(1,c.length);
  342.               if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
  343.           }
  344.           return null;
  345.       }
  346.       function createCookie(name,value,days,path) {
  347.           if (days) {
  348.               var date = new Date();
  349.               date.setTime(date.getTime()+(days*24*60*60*1000));
  350.               var expires = "; expires="+date.toGMTString();
  351.           }
  352.           else var expires = "";
  353.           document.cookie = name+"="+value+expires+"; path="+path;
  354.       }
  355.       var cookie_params = readCookie('cookie-param');
  356.       var cookie_params_analysis = true;
  357.       var cookie_params_ga = true;
  358.       var cookie_params_feature = true;
  359.       if (null !== cookie_params) {
  360.           cookie_params_analysis = !!(cookie_params & 1);
  361.           cookie_params_ga = !!(cookie_params & 2);
  362.           cookie_params_feature = !!(cookie_params & 4);
  363.       }
  364.       if (cookie_params_ga) {
  365.           window.dataLayer = window.dataLayer || [];
  366.           function gtag(){dataLayer.push(arguments);}
  367.           gtag('js', new Date());
  368.           gtag('config', 'UA-140409788-1');
  369.       }
  370.       else {
  371.           window.dataLayer = [];
  372.       }
  373.       var cookieMessage = document.getElementById("infoCookiesFond");
  374.       var infoCookiesBouton = document.getElementById("infoCookiesBouton");
  375.       var infoCookiesBoutonPlus = document.getElementById("infoCookiesBoutonPlus");
  376.       infoCookiesBouton.addEventListener('click', function() {
  377.           createCookie('seen-cookie-message','yes', 300, '/');
  378.           var cookieParams = 0;
  379.           // if (document.getElementById('cookieAnalysis').checked) cookieParams |= 1;
  380.           if (document.getElementById('cookieGA').checked) cookieParams |= 2;
  381.           // if (document.getElementById('cookieFeature').checked) cookieParams |= 4;
  382.           createCookie('cookie-param', cookieParams, 300, '/');
  383.           cookieMessage.style.display = 'none';
  384.       });
  385.       infoCookiesBoutonPlus.addEventListener('click', function() {
  386.           this.style.display = 'none';
  387.           document.getElementById("paramsCookies").classList.add('ouvert');
  388.       });
  389.       {% if (app.request.get('_route') != 'mentionslegales' and app.request.get('_route') != 'cgu') %}
  390.       var cookie_info = readCookie('seen-cookie-message');
  391.       {% else %}
  392.       var cookie_info = 'yes';
  393.       {% endif %}
  394.       if (cookie_info === 'yes') {
  395.           cookieMessage.style.display = 'none';
  396.       } else {
  397.           cookieMessage.style.display = 'block';
  398.       }
  399.       if (null !== cookie_params) {
  400.           // document.getElementById('cookieAnalysis').checked = cookie_params_analysis;
  401.           document.getElementById('cookieGA').checked = cookie_params_ga;
  402.           // document.getElementById('cookieFeature').checked = cookie_params_feature;
  403.       }
  404.   </script>
  405. </header><!-- /.header -->