templates/base.html.twig line 1

  1. <!DOCTYPE html>
  2. <html lang="en">
  3.     <head>
  4.         <meta charset="UTF-8">
  5.         <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
  6.         <link rel="icon" href="{{ asset('images/favicon.png') }}"/>
  7.         <title>
  8.             {% block title %}
  9.                 NEOCOGNITION (by Chrysippe-R&D) \n Collaborative Artificial Inteligence
  10.             {% endblock %}
  11.         </title>
  12.         {% block stylesheets %}
  13.       {# Bootstrap datepicker #}
  14.       <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-datepicker/1.10.0/css/bootstrap-datepicker.standalone.min.css" integrity="sha512-D5/oUZrMTZE/y4ldsD6UOeuPR4lwjLnfNMWkjC0pffPTCVlqzcHTNvkn3dhL7C0gYifHQJAIrRTASbMvLmpEug==" crossorigin="anonymous" referrerpolicy="no-referrer" />
  15.       {# Select2 #}
  16.             <link href="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/css/select2.min.css" rel="stylesheet"/>
  17.       {# Fonts #}
  18.             <link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200"/>
  19.             <link rel="preconnect" href="https://fonts.googleapis.com">
  20.             <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
  21.             <link href="https://fonts.googleapis.com/css2?family=Outfit:wght@500&family=Roboto&display=swap" rel="stylesheet">
  22.       {# Custom tooltip #}
  23.       <link href="/css/custom-tooltip.css" rel="stylesheet"/>
  24.       <link href="/css/toggle-list.css" rel="stylesheet"/>
  25.       <link href="/css/style.css" rel="stylesheet"/>
  26.             {{ encore_entry_link_tags('app') }}
  27.         {% endblock %}
  28.         {% block javascripts %}
  29.       {# Jquery #}
  30.             <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.3/jquery.min.js" integrity="sha512-STof4xm1wgkfm7heWqFJVn58Hm3EtS31XFaagaa8VMReCXAkQnJZ+jEy8PCC/iT18dFy95WcExNHFTqLyp72eQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
  31.       {# Bootstrap #}
  32.       <script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap/5.3.8/js/bootstrap.min.js" integrity="sha512-nKXmKvJyiGQy343jatQlzDprflyB5c+tKCzGP3Uq67v+lmzfnZUi/ZT+fc6ITZfSC5HhaBKUIvr/nTLCV+7F+Q==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
  33.       <script>
  34.         $(document).ready(function() {
  35.           $('.js-datepicker').datepicker({
  36.             format: 'dd/mm/yyyy',
  37.             language: {{ app.request.locale|json_encode|raw }}
  38.           });
  39.         });
  40.       </script>
  41.       {# Bootstrap datepicker #}
  42.       <script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-datepicker/1.10.0/js/bootstrap-datepicker.min.js" integrity="sha512-LsnSViqQyaXpD4mBBdRYeP6sRwJiJveh2ZIbW41EBrNmKxgr/LFZIiWT6yr+nycvhvauz8c2nYMhrP80YhG7Cw==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
  43.       <script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-datepicker/1.10.0/locales/bootstrap-datepicker.fr.min.js" integrity="sha512-fx3aztaUjb4NyoD+Tso5g7R1l29bU3jnnTfNRKBiY9fdQOHzVhKJ10wEAgQ1zM/WXCzB9bnVryHD1M40775Tsw==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
  44.       {# Select2 #}
  45.             <script src="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/js/select2.full.min.js"></script>
  46.       {# Sortable #}
  47.       <script src="https://cdnjs.cloudflare.com/ajax/libs/Sortable/1.15.6/Sortable.min.js" integrity="sha512-csIng5zcB+XpulRUa+ev1zKo7zRNGpEaVfNB9On1no9KYTEY/rLGAEEpvgdw6nim1WdTuihZY1eqZ31K7/fZjw==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
  48.             <script>
  49.                 setTimeout(() => {
  50.           jQuery(document).ready(function () {
  51.             jQuery('.form-select').select2();
  52.           });
  53.         }, 500);
  54.             </script>
  55.       <script src="/js/custom-tooltip.js" defer></script>
  56.       <script src="/js/toggle-list.js" defer></script>
  57.             {{ encore_entry_script_tags('app') }}
  58.             <script src="{{ asset('js/tarteaucitron.js' )}}"></script>
  59.             <script src="{{ asset('js/html2canvas.min.js' )}}"></script>
  60.             <script>
  61.                 tarteaucitron.init({
  62.           "privacyUrl": "", /* Privacy policy url */
  63.           "bodyPosition": "bottom", /* or top to bring it as first element for accessibility */
  64.           "hashtag": "#tarteaucitron", /* Open the panel with this hashtag */
  65.           "cookieName": "tarteaucitron", /* Cookie name */
  66.           "orientation": "middle", /* Banner position (top - bottom - middle - popup) */
  67.           "groupServices": false, /* Group services by category */
  68.           "showAlertSmall": false, /* Show the small banner on bottom right */
  69.           "cookieslist": false, /* Show the cookie list */
  70.           "showIcon": true,
  71.           /* Show cookie icon to manage cookies */
  72.           // "iconSrc": "", /* Optionnal: URL or base64 encoded image */
  73.           "iconPosition": "BottomRight", /* Position of the icon between BottomRight, BottomLeft, TopRight and TopLeft */
  74.           "adblocker": false, /* Show a Warning if an adblocker is detected */
  75.           "DenyAllCta": true, /* Show the deny all button */
  76.           "AcceptAllCta": true, /* Show the accept all button when highPrivacy on */
  77.           "highPrivacy": true, /* HIGHLY RECOMMANDED Disable auto consent */
  78.           "handleBrowserDNTRequest": false, /* If Do Not Track == 1, disallow all */
  79.           "removeCredit": false, /* Remove credit link */
  80.           "moreInfoLink": true, /* Show more info link */
  81.           "useExternalCss": false,
  82.           /* If false, the tarteaucitron.css file will be loaded */
  83.           // "cookieDomain": ".my-multisite-domaine.fr", /* Shared cookie for subdomain website */
  84.           "readmoreLink": "", /* Change the default readmore link pointing to tarteaucitron.io */
  85.           "mandatory": true /* Show a message about mandatory cookies */
  86.         });
  87.             </script>
  88.             <script type="text/javascript">
  89.                 tarteaucitron.user.googleFonts = [
  90.           'Asap:wght@500',
  91.           'Montserrat:wght@400',
  92.           'Montserrat:wght@700',
  93.           'Roboto+Slab:wght@400',
  94.           'Roboto+Slab:wght@100',
  95.           'Roboto+Slab:wght@300',
  96.           'Roboto+Slab:wght@700'
  97.         ];
  98.         {# Google fonts #}
  99.         (tarteaucitron.job = tarteaucitron.job || []).push('googlefonts');
  100.             </script>
  101.         {% endblock %}
  102.         {% block javascriptsApp %}{% endblock %}
  103.     {% block stylesheetsApp %}{% endblock %}
  104.     </head>
  105.     <body data-bs-theme="dark">
  106.         {% include 'header.html.twig' %}
  107.     {% if block('container_start') is not empty and block('container_end') is not empty %}
  108.       {% block container_start %}{% endblock %}
  109.     {% else %}
  110.       <div class="container-md mt-4">
  111.     {% endif %}
  112.             {% if error is defined and error is not empty %}
  113.                 {% if error.type is defined %}
  114.                     <div class="alert alert-{{error.type}}" role="alert">
  115.                         {{error.content}}
  116.                     </div>
  117.                 {% else %}
  118.                     <div class="alert alert-danger" role="alert">
  119.                         {{error}}
  120.                     </div>
  121.                 {% endif %}
  122.             {% endif %}
  123.       {# Alert for missing organisation #}
  124.             {% if app.user != null and (app.user.organisation == null or app.user.organisation == "") %}
  125.                 {% if '/profile' in app.request.requestURI %}
  126.                     <div class="alert alert-chrysippe">
  127.                         {{'Bonjour'|trans}}
  128.                         {{app.user.firstname}}
  129.                         {{'pourriez-vous s\'il-vous-plaît indiquer de façon détaillée et claire votre entreprise dans la rubrique "Entreprise" de votre profil ?' | trans}}
  130.           </div>
  131.         {% else %}
  132.           <div class="modal fade" id="alert-organisation-modal" tabindex="-1" role="dialog" aria-hidden="true" aria-labelledby="alert-job-modal-label">
  133.             <div class="modal-dialog" role="document">
  134.               <div class="modal-content">
  135.                 <div class="modal-header">
  136.                   <h5 class="modal-title" id="alert-organisation-modal-label">{{'Bonjour'|trans}} {{app.user.firstname}}</h5>
  137.                   <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close" />
  138.                 </div>
  139.                 <div class="modal-body">
  140.                     {{'pourriez-vous s\'il-vous-plaît indiquer de façon détaillée et claire votre entreprise dans la rubrique "Entreprise" de votre profil ?' | trans}}
  141.                 </div>
  142.                 <div class="modal-footer">
  143.                   <a class="btn btn-chrysippe" role="button" href="{{ path('app_user_profile') }}?origin={{ app.request.attributes.get('_route') }}&origin_params={{ app.request.attributes.get('_route_params') | json_encode }}">{{'Cliquez ici' | trans}}</a>
  144.                 </div>
  145.               </div>
  146.             </div>
  147.           </div>
  148.           <script type="text/javascript">
  149.             $(window).on('load', function () {
  150.               $('#alert-organisation-modal').modal('show');
  151.             });
  152.           </script>
  153.         {% endif %}
  154.       {% endif %}
  155.       {# Alert for missing job #}
  156.             {% if app.user != null and (app.user.job == null or app.user.job == "") %}
  157.                 {% if '/profile' in app.request.requestURI %}
  158.                     <div class="alert alert-chrysippe">
  159.                         {{'Bonjour'|trans}}
  160.                         {{app.user.firstname}}
  161.                         {{'pourriez-vous s\'il-vous-plaît indiquer de façon détaillée et claire votre intitulé de poste (en indiquant de façon précise votre secteur professionnel) dans la rubrique "Poste" de votre profil ?' | trans}}
  162.           </div>
  163.         {% else %}
  164.           <div class="modal fade" id="alert-job-modal" tabindex="-1" role="dialog" aria-hidden="true" aria-labelledby="alert-job-modal-label">
  165.             <div class="modal-dialog" role="document">
  166.               <div class="modal-content">
  167.                 <div class="modal-header">
  168.                   <h5 class="modal-title" id="alert-job-modal-label">{{'Bonjour'|trans}} {{app.user.firstname}}</h5>
  169.                   <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close" />
  170.                 </div>
  171.                 <div class="modal-body">
  172.                   {{'pourriez-vous s\'il-vous-plaît indiquer de façon détaillée et claire votre intitulé de poste (en indiquant de façon précise votre secteur professionnel) dans la rubrique "Poste" de votre profil ?' | trans}}
  173.                 </div>
  174.                 <div class="modal-footer">
  175.                   <a class="btn btn-chrysippe" role="button" href="{{ path('app_user_profile') }}?origin={{ app.request.attributes.get('_route') }}&origin_params={{ app.request.attributes.get('_route_params') | json_encode }}">{{'Cliquez ici' | trans}}</a>
  176.                 </div>
  177.               </div>
  178.             </div>
  179.           </div>
  180.           <script type="text/javascript">
  181.             $(window).on('load', function () {
  182.               $('#alert-job-modal').modal('show');
  183.             });
  184.           </script>
  185.         {% endif %}
  186.       {% endif %}
  187.       {% block body %}{% endblock %}
  188.     {% if block('container_start') is not empty and block('container_end') is not empty %}
  189.       {% block container_end %}{% endblock %}
  190.     {% else %}
  191.       </div>
  192.     {% endif %}
  193.     {% if block('bodyFluid') is not empty %}
  194.       <div class="container-md mb-4">
  195.         {% block bodyFluid %}{% endblock %}
  196.       </div>
  197.     {% endif %}
  198.   </body>
  199. </html>