templates/bundles/FOSUserBundle/layout.html.twig line 1

Open in your IDE?
  1. {# LG 20221003 passé + bas {% include "@Paa/Default/post_imports.html.twig" %} #}
  2. <!DOCTYPE html>
  3. <html lang="fr">
  4.     <head>
  5. {# LG 20221003 début
  6.         <meta charset="UTF-8" />
  7.         <meta name="author" content="Limoog">
  8.         <meta name="viewport" content="width=device-width" initial-scale="1">
  9.         {% if not estDemo() %}
  10.             <meta name="robots" content="noindex"/>
  11.             <title>Logiciel planning médico-social et Alternance gratuit</title>
  12.         {% else %}
  13.             <title>PAA</title>
  14.         {% endif %}
  15.         <link rel="icon" type="image/x-icon" href="{{ asset_version('Images/PAA.ICO') }}" />
  16.         <link rel="stylesheet" type="text/css" href="{{asset_version('Limoog/Partages/css/Emma.css')}}">
  17.         <link rel="stylesheet" type="text/css" href="{{asset_version('vendor/bootstrap/4.5.0/css/bootstrap.min.css')}}">
  18. #}
  19.         {% include "@Paa/Default/pre_imports.html.twig" %}
  20.         <meta name="description" content="PAA, le logiciel de planning médico-social (IME, IMPro, ...) et formation en alternance est gratuit en version limitée">
  21.         {% include "@Paa/Default/post_imports.html.twig" %}
  22. {# LG 20221003 fin #}
  23.     </head>
  24.     <body>
  25. <!--PAADemo-->      {#Ne pas enlever ce commentaire : utilisé en JavaScript pour enlever ce contenu inutile dans le popup#}
  26.     {% if estDemo() %}
  27.         <div id="background">
  28.             <div id="screen-splitter">
  29.                 <div id="card-wrapper">
  30.                     <div id="cards">
  31.                         <div class="alert alert-light text-center" style="font-size: .80vw; color: black;">
  32.                             <h1>Créer et présenter les emplois du temps</H1>
  33.                         </div>
  34.                         <img src="{{ asset_version("Images/Captures/Planning.png") }}" class="rounded" alt="Construisez vos plannings d'activité et de présences en toute simplicité">
  35.                     </div>
  36.                     <div id="cards">
  37.                         <div class="alert alert-light text-center" style="font-size: .80vw; color: black;">
  38.                             <h1>Gérer le personnel, les usagers, les équipements</h1>
  39.                         </div>
  40.                         <img src="{{ asset_version("Images/Captures/SaisieIntervenants-Général.png") }} " class="rounded" alt="Gérez le personnel, ses activités, ses contrats et ses horaires">
  41.                     </div>
  42.                     <div id="cards">
  43.                         <div class="alert alert-light text-center" style="font-size: .80vw; color: black;">
  44.                             <h1>Combiner activités collectives et individuelles</h1>
  45.                         </div>
  46.                         <img src="{{ asset_version("Images/Captures/ChoixParticipantsUsagers.png") }}" class="rounded" alt="Définissez simplement les participants de chaque séance">
  47.                     </div>
  48.                 </div>
  49.             </div>
  50.             <div id="screen-splitter"></div>
  51.             <div id="screen-splitter">
  52.                 <div id="card-wrapper">
  53.                     <div id="cards">
  54.                         <div class="alert alert-light text-center" style="font-size: .80vw; color: black;">
  55.                             <h1>Gérer des bilans d'activités, présence, absences ...</h1>
  56.                         </div>
  57.                         <img src="{{ asset_version("Images/Captures/EditionsRapports.png") }}" class="rounded" alt="Editez les plannings générés dans une multitude de formats">
  58.                     </div>
  59.                     <div id="cards">
  60.                         <div class="alert alert-light text-center" style="font-size: .80vw; color: black;">
  61.                             <h1>Gérer les données des usagers</h1>
  62.                         </div>
  63.                         <img src="{{ asset_version("Images/Captures/Usagers_Statuts.png") }}" class="rounded" alt="Gérez les données des usagers an plus de leur planning">
  64.                     </div>
  65.                     <div id="cards">
  66.                         <div class="alert alert-light text-center" style="font-size: .80vw; color: black;">
  67.                             <h1>Automatiser la construction des emplois du temps</h1>
  68.                         </div>
  69.                         <img src="{{ asset_version("Images/Captures/CréerUneSemaine.png") }}" class="rounded" alt="Simplifiez les emplois du temps en utilisant des modèles évolutifs">
  70.                     </div>
  71.                 </div>
  72.             </div>
  73.         </div>
  74.    <style>
  75.         body, html {
  76.             overflow: hidden;
  77.         }
  78.         ::-webkit-scrollbar {
  79.             display:none;
  80.         }
  81.         #background {
  82.             display: flex;
  83.             position: fixed;
  84.             transition: opacity .4s;
  85.             background: rgb(230, 230, 230);
  86.             width: 100%;
  87.             height: 100%;
  88.             z-index: -1;
  89.             overflow: hidden;
  90.         }
  91.         #screen-splitter {
  92.             flex: 1;
  93.             flex-direction: column;
  94.         }
  95.         #card-wrapper {
  96.             flex: 1;
  97.             display: flex;
  98.             height: 90%;
  99.             margin-top: 10%;
  100.             width: 100%;
  101.             flex-direction: column;
  102.             justify-content: space-around;
  103.         }
  104.         #card-wrapper * {
  105.             width: 90%;
  106.             display: flex;
  107.             align-self: center;
  108.             justify-content: center;
  109.         }
  110.         #cards {
  111.             display: flex;
  112.             flex: 1;
  113.             flex-direction: column;
  114.         }
  115.         #cards :nth-child(2) {
  116.             margin-bottom: 5%;
  117.         }
  118.         
  119.         @media (max-width: 1100px) {
  120.             #background {
  121.                 opacity: 0;
  122.                 transition: opacity .4s;
  123.             }
  124.         }
  125.         #card-title {
  126.             display: flex;
  127.             align-self: center;
  128.             justify-content: center;
  129.             background-color: gray;
  130.         }
  131.         #card-title p {
  132.             padding: 15px;
  133.         }
  134.         @keyframes fade-in {
  135.             0% {
  136.                 opacity: 0;
  137.                 transform: translateY(-50vh);
  138.             }
  139.             60% {
  140.                 opacity: 0;
  141.             }
  142.         }
  143.         #wrapper {
  144.             display: flex;
  145.             align-items: center;
  146.             justify-content: space-around;
  147.         }
  148.         {# #login_container {
  149.             padding-top: 1.5rem;
  150.             padding-bottom: 1.5rem;
  151.             padding-right: 1.5rem;
  152.         } #}
  153.         #sinscrire{
  154.             display: block !important ;
  155.         }
  156.         h1{
  157.             font-size: .80vw;
  158.             font-weight: bolder;
  159.         }
  160.     </style>
  161.     {% endif %}
  162. <!--PAADemo-->      {#Ne pas enlever ce commentaire : utilisé en JavaScript pour enlever ce contenu inutile dans le popup#}
  163. <!--PAALoginForm--> {#Ne pas enlever ce commentaire : utilisé en JavaScript pour savoir que c'est une demande de login#}
  164.     <style>
  165.         #login_container {
  166.             animation: fade-in 1s;
  167.             display: block;
  168.             box-shadow: 5px 5px 16px -5px rgba(0,0,0,0.3);
  169.             {# padding-top: 1.5rem;
  170.             padding-left: 1.5rem; #}
  171.         }
  172.         #login_container label[for="username"]
  173.                 , #login_container label[for="fos_user_change_password_form_current_password"]
  174.                 , #login_container label[for="fos_user_resetting_form_plainPassword_first"] {
  175.             padding: 0 40px 0 0;
  176.             margin: 0 0 0 5%;
  177.         }
  178.         #login_container label[for="password"]
  179.                 , #login_container label[for="fos_user_change_password_form_plainPassword_first"]
  180.                 , #login_container label[for="fos_user_change_password_form_plainPassword_second"]
  181.                 , #login_container label[for="fos_user_resetting_form_plainPassword_second"] {
  182.             padding: 15px 40px 0 0;
  183.             margin: 0 0 0 5%;
  184.         }
  185.         #login_container input[type="text"], #login_container input[type="password"], #login_container input[type="submit"] {
  186.             width: 90%;
  187.             margin-left: 5%;
  188.         }
  189.         #login_container input[type="checkbox"] {
  190.             width: 50px;
  191.             margin-top: 10px;
  192.         }
  193.         #login_container input[name='_remember_me'], #login_container label[for='remember_me'] {
  194.             margin-top: 15px;
  195.             margin-bottom: 15px;
  196.         }
  197.         label {
  198.             font-size: inherit;
  199.         }
  200.         a {
  201.             color: mediumseagreen;
  202.         }
  203.         p {
  204. /* LG 20230112 déac : perturbe l'affichage de la page par-dessus laquelle le popup arrive (changelog notemment)            font-size: 12px;
  205.             text-align: center; */
  206.         }
  207.         .btn-block {
  208.             background-color: #DCEAD7;
  209.         }
  210.         #login-alert {
  211.             margin-top: 15px;
  212.             margin-bottom: 15px;
  213.             background: #9BBC8A;
  214.             border-radius: 5px;
  215.             text-align: center;
  216.         }
  217.         .login-div{
  218.             width: 90%;
  219.             margin-left: 5%;
  220.             margin-bottom: 15px;
  221.         }
  222.         .login-error{
  223.             color: red ;;
  224.         }
  225.         #sinscrire{
  226.             display: none ;
  227.         }
  228.         #password{
  229.             border-bottom-right-radius: 0 !important;
  230.             border-top-right-radius: 0 !important;
  231.         }
  232.         #ctnAfficheMDP{
  233.             border-top-left-radius: 0;
  234.             border-bottom-left-radius: 0;
  235.             box-shadow: 0 0 7px 1px var(--paa-menu-color);            
  236.         }
  237.     </style>
  238.     {# <div style="height: 100%;"> #}
  239. {#         <div>
  240.             {{ dump(csrf_token('authenticate')) }} = valeur csrf token, qui est un hash de la session actuelle
  241.         </div>
  242.  #}
  243.         <div class = "flex-column d-flex justify-content-center align-items-center h-100">
  244.             <div id="login_container" class = "bg-white p-4" style="width: 400px;">
  245.                 <div class="login-div" style="margin-top: 0px; margin-bottom: 40px; margin-left: -17px;">
  246.                     <a href = "http://www.limoog.net" tabIndex = "-1">      {# LG 20220914 tabIndex = "-1" permet de rendre non focusable le lien, et d'éviter qu'il apparaisse avec un cadre rouge sur certains navigateurs #}
  247.                         <img src="{{ asset_version("Images/logoPAA.png") }} " alt = "Planning Accueil Accompagnement" class = "logo resizeTel" style="width:360px">
  248.                     </a>
  249.                 </div>
  250. {# LG 20231009 old                {% if is_granted("IS_AUTHENTICATED_REMEMBERED") %} #}
  251.                 {% if is_granted("IS_AUTHENTICATED_FULLY") %}
  252.                 <div id="login-alert" class="login-div">
  253.                         {#Affiche "Connecté en tant que ... Déconnexion"#}
  254.                         Vous êtes actuellement connecté en tant que {{ app.user.username }}
  255.                 </div>
  256.                 <div style="display: flex;" class="login-div">
  257.                     <div style="flex: 1;">
  258.                         <a href="{{ path('fos_user_security_logout') }}">
  259.                             {{ 'layout.logout'|trans({}, 'FOSUserBundle') }}
  260.                         </a>
  261.                     </div>
  262.                     <div>
  263.                         <a href="{{ path('index') }}">
  264.                             Aller à l'accueil
  265.                         </a>
  266.                     </div>
  267.                 </div>
  268. {# LG 20231009 déplacé de login.html.twig début #}
  269.                 <div style="m" class="login-div">
  270.                     Vous pouvez aussi vous reconnecter avec une autre identité
  271.                 </div>
  272. {# LG 20231009 déplacé de login.html.twig fin #}
  273.                 {% endif %}
  274.                 {% block pre_fos_user_content %}{% endblock pre_fos_user_content %}
  275.                 {% block fos_user_content %}{% endblock fos_user_content %}
  276.                 {% block post_fos_user_content %}{% endblock post_fos_user_content %}
  277. {# LG 20221007 : déplacé dans Login.html.twig
  278.                 <div id="sinscrire" class="login-div" style="margin-top: 15px">
  279.                 {% if estDemo() %}
  280.                    <a href="https://www.limoog.net/inscription/" target="_blank">Obtenir un accès gratuit</a>
  281.                 {% endif%}
  282.                 </div>
  283. #}           
  284. {# SM 20240515 début de afficher MDP#}
  285.                 <script>
  286. // LG 20240822 old                if (!document.getElementById("afficheMDP")){
  287.                 if (document.getElementById("password") && !document.getElementById("afficheMDP")){
  288.                     //bouton afficher mdp n'existe pas,crée si il n'existe pas, et ne pas le crée si il existe
  289.                         var lab = document.getElementById("remember_me"); //récupérer la position de se souvenir de moi
  290.                         var pass = document.getElementById("password");  //récupérer password
  291.                         var ctn = document.createElement("div"); //création de ladiv final
  292.                         ctn.classList="d-flex ";//class de la div
  293.                         ctn.id="alligneMDP"; //id de la div
  294.                         ctn.style=style="max-width: 307;width: 335px;"//taille de la div du MDP
  295.                         pass.parentElement.append(ctn);//crétion du lien parent enfant entre ctn et pass
  296.                         ctn.append(pass);//on rajoute le mots de passe
  297.                         var dav = document.createElement("div");//on crée la div du span(bouton)
  298.                         dav.id = "ctnAfficheMDP" ;     // LG 20240725
  299.                         dav.classList="input-group-text shadow-form-control";//class de la div
  300.                         ctn.parentElement.append(dav);//on crée le lien parents enfant entre dav et ctn
  301.                         var btn = document.createElement("span");//on crée le span(bouton en forme d'oeil)
  302.                         btn.classList="far fa-eye";//class du span
  303.                         btn.id="afficheMDP";//id du span
  304.                         btn.title="Afficher le mot de passe";//title du span
  305.                         dav.parentElement.append(btn);//création du lien parent enfant entre btn et dav
  306.                         dav.append(btn);//on rajoute le span dans la div
  307.                         ctn.append(dav);//on rajoute la div dans la div principale
  308.                         lab.before(ctn);//on le place avant la position de se souvenir de moi
  309.                         var mdp=document.getElementById("password");
  310.                         var eye = document.getElementById("afficheMDP") ;       // LG 20240809
  311.                         var afficherMDP=document.getElementById("afficheMDP");
  312.                         afficherMDP.addEventListener('click', () => {//quand on clicke 
  313.                         if (mdp.type === "password"){
  314.                             // dans ce cas, si le mots de passe est cachée, le rendre visible
  315.                             mdp.type="text";
  316.                             eye.classList = "fa fa-eye-slash" ;       // LG 20240809
  317.                             btn.title="Masquer le mot de passe";      // LG 20240809
  318.                         } else{
  319.                         // dans les autres cas, le mots de passe est visible, le rendre ilisible
  320.                             mdp.type="password";
  321.                             eye.classList = "fa fa-eye" ;           // LG 20240809
  322.                             btn.title="Afficher le mot de passe";   // LG 20240809
  323.                         }
  324.                     })}
  325.                 </script>
  326. {# SM 20240515 fin de afficher MDP#}
  327.             </div>
  328.         {# </div> #}
  329.         <script>
  330.             // custom-control-label control-label m-0 mr-3
  331. {# LG 20220914 début : quand le form login est appellé dans un popup plusieurs fois, il y a une erreur "Redéclaration de Let usernameTb" #}
  332. {#          let usernameTb = document.getElementById("username");
  333.             let passwdTb = document.getElementById("password");
  334.             let btnSubmit = document.getElementById("_submit")
  335.             usernameTb.classList.add("shadow-form-control", "border-0", "form-control");
  336.             passwdTb.classList.add("shadow-form-control", "border-0", "form-control");
  337.             btnSubmit.classList.add("btn-menu-planning", "btn", "btn-block", "shadow-form-control"); #}
  338.             {# AV 20221007 old document.getElementById("username").classList.add("shadow-form-control", "border-0", "form-control");
  339.             document.getElementById("password").classList.add("shadow-form-control", "border-0", "form-control");
  340.             document.getElementById("_submit").classList.add("btn-menu-planning", "btn", "btn-block", "shadow-form-control"); #}
  341.             // AV 20221007 début les id doivent correspondre en fonction des différents éléments des form: changer le mdp, réinitialiser le mdp et connexion
  342.             if(document.getElementById("username") !== null) {
  343.                 document.getElementById("username").classList.add("shadow-form-control", "border-0", "form-control");
  344. {# //LG 20221008 début : pour préécrire le login de l'utilisateur actuel, quand on peut le connaitre #}
  345.                 {% if psLogin is not defined %}
  346.                     {% set psLogin = '' %}
  347. // LG 20231009 début
  348.                 {% elseif is_granted("IS_AUTHENTICATED_REMEMBERED") %}
  349.                     {% set psLogin = app.user.username %}
  350. // LG 20231009 fin
  351.                 {% endif %}
  352.                 if ("{{ psLogin }}") {
  353.                     {# // Un login a été fourni au twig #}
  354.                     $("#username").val("{{psLogin}}") ;
  355.                 } else if (window.currentUser) {
  356.                     {# // La page actuelle dispose de l'information #}
  357.                     $("#username").val(window.currentUser) ;
  358.                 }
  359. {# //LG 20221008 fin #}
  360.             }
  361.             if(document.getElementById("password") !== null) {
  362.                 document.getElementById("password").classList.add("shadow-form-control", "border-0", "form-control");
  363.             }
  364.             if(document.getElementById("_submit") !== null) {
  365.                 document.getElementById("_submit").classList.add("btn-menu-planning", "btn", "btn-block", "shadow-form-control");
  366.             }
  367.             if($("input[type=submit]").length) {
  368.                 $("input[type=submit]")[0].classList.add("btn-menu-planning", "btn", "btn-block", "shadow-form-control");
  369.                 $("input[type=submit]").css("margin-top", "15px");
  370.             }
  371.             if(document.getElementById("fos_user_change_password_form_current_password") !== null) {
  372.                 document.getElementById("fos_user_change_password_form_current_password").classList.add("shadow-form-control", "border-0", "form-control");
  373.             }
  374.             if(document.getElementById("fos_user_change_password_form_plainPassword_first") !== null) {
  375.                 document.getElementById("fos_user_change_password_form_plainPassword_first").classList.add("shadow-form-control", "border-0", "form-control");
  376.             }
  377.             if(document.getElementById("fos_user_change_password_form_plainPassword_second") !== null) {
  378.                 document.getElementById("fos_user_change_password_form_plainPassword_second").classList.add("shadow-form-control", "border-0", "form-control");
  379.             }
  380.             if(document.getElementById("fos_user_resetting_form_plainPassword_first") !== null) {
  381.                 document.getElementById("fos_user_resetting_form_plainPassword_first").classList.add("shadow-form-control", "border-0", "form-control");
  382.             }
  383.             if(document.getElementById("fos_user_resetting_form_plainPassword_second") !== null) {
  384.                 document.getElementById("fos_user_resetting_form_plainPassword_second").classList.add("shadow-form-control", "border-0", "form-control");
  385.             }
  386.             if(document.getElementById("fos_user_change_password_form__token") !== null) {
  387.                 document.getElementById("fos_user_change_password_form__token").classList.add("btn-menu-planning", "btn", "btn-block", "shadow-form-control");
  388.             }
  389.             // AV 20221007 fin
  390. {# LG 20220927 old            var loNext = $("#flashbag").next()[0] ; #}
  391.             var loNext = $("#aide").next()[0] ;
  392.             if (loNext && loNext.tagName == "DIV" ) {
  393.                 // L'élément flashbag a derierre lui une div : elle a été ajoutée dans vendor/friendsofsymfony/user-bundle/Resources/views/Security/login_content.html.twig
  394.                 // pour afficher l'erreur d'authentification
  395.                 // Lui affecter la classe login-div
  396.                 loNext.classList.add("login-div", "login-error") ;
  397.                 {% if estDemo() %}
  398.                     if ($(loNext).html() == "Identifiants invalides.") {
  399.                         $(loNext).html("Identifiants invalides.<br>Si vous doutez de votre nom d'utilisateur, utilisez plutôt l'adresse mail que vous avez fournie lors de votre inscription.") ;
  400.                     }
  401.                 {% endif %}
  402.             }
  403.         </script>
  404. <!--PAALoginForm--> {#Ne pas enlever ce commentaire : utilisé en JavaScript pour savoir que c'est une demande de login#}
  405.     </body>
  406. </html>