base.html.twig 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8" />
  5. <meta name="viewport" content="width=device-width, initial-scale=1">
  6. <title>{% block title %}Videothèque{% endblock %}</title>
  7. {{ encore_entry_link_tags('app') }}
  8. {% block stylesheets %}{% endblock %}
  9. <link rel="icon" type="image/x-icon" href="{{ asset('favicon.ico') }}" />
  10. </head>
  11. <body style="padding-top:7rem;padding-bottom:4rem;">
  12. {% for type, messages in app.session.flashBag.all %}
  13. {% for message in messages %}
  14. {% if type == 'error' %}{% set type = 'danger' %} {% endif %}
  15. <div class="position-fixed top-5 end-0 p-2" style="z-index: 11">
  16. <div id="liveToast" class="toast bg-gradient bg-{{ type }} text-white" role="alert" aria-live="assertive" aria-atomic="true" {{ stimulus_controller('toast') }}>
  17. <div class="toast-header">
  18. <strong class="me-auto">Info</strong>
  19. <button type="button" class="btn-close" data-bs-dismiss="toast" aria-label="Close"></button>
  20. </div>
  21. <div class="toast-body">
  22. {{ message }}
  23. </div>
  24. </div>
  25. </div>
  26. {% endfor %}
  27. {% endfor %}
  28. <nav class="navbar navbar-expand-md navbar-dark bg-dark fixed-top">
  29. <a class="navbar-brand" href="{{ path('videotheque_liste') }}">Videothèque</a>
  30. <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
  31. <span class="navbar-toggler-icon"></span>
  32. </button>
  33. <div class="collapse navbar-collapse" id="navbarSupportedContent">
  34. {% if not is_granted('IS_AUTHENTICATED_REMEMBERED') %}
  35. <ul class="navbar-nav mr-auto">
  36. <li class="nav-item
  37. {% if app.request.attributes.get('_route') == 'videotheque_liste' %}active{% endif %}">
  38. <a class="nav-link" href="{{ path('videotheque_liste') }}">Liste des films<span class="sr-only">(current)</span></a>
  39. </li>
  40. </ul>
  41. {% endif %}
  42. {% if is_granted('IS_AUTHENTICATED_REMEMBERED') %}
  43. <ul class="navbar-nav mr-auto">
  44. <li class="nav-item
  45. {% if app.request.attributes.get('_route') == 'videothequepersonnelle_maliste' %}active{% endif %}">
  46. <a class="nav-link" href="{{ path('videothequepersonnelle_maliste') }}">Ma liste à voir<span class="sr-only">(current)</span></a>
  47. </li>
  48. <li class="nav-item
  49. {% if app.request.attributes.get('_route') == 'videotheque_liste' %}active{% endif %}">
  50. <a class="nav-link" href="{{ path('videotheque_liste') }}">Films<span class="sr-only">(current)</span></a>
  51. </li>
  52. <li class="nav-item
  53. {% if app.request.attributes.get('_route') == 'realisateur_liste' %}active{% endif %}">
  54. <a class="nav-link" href="{{ path('realisateur_liste') }}">Réalisateurs<span class="sr-only">(current)</span></a>
  55. </li>
  56. {% if is_granted('ROLE_MODERATEUR') %}
  57. <ul class="navbar-nav">
  58. <li class="nav-item dropdown">
  59. <a class="nav-link dropdown-toggle" href="#" id="navbarDropdownAdmin" role="button" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
  60. Administration
  61. </a>
  62. <div class="dropdown-menu" aria-labelledby="navbarDropdown">
  63. {% if is_granted('ROLE_ADMIN') %}
  64. <a class="dropdown-item" href="{{ path('admin_index') }}">Utilisateurs</a>
  65. <div class="dropdown-divider"></div>
  66. {% endif %}
  67. <a class="dropdown-item" href="{{ path('genre_liste') }}">Liste des genres</a>
  68. </div>
  69. </li>
  70. </ul>
  71. {% endif %}
  72. </ul>
  73. {% endif %}
  74. {#{% if is_granted('IS_AUTHENTICATED_REMEMBERED') %}#}
  75. {#{% endif %}#}
  76. {% if not is_granted('IS_AUTHENTICATED_REMEMBERED') %}
  77. <ul class="navbar-nav">
  78. <li class="nav-item"><a class="nav-link" href="{{ path('app_login') }}">Se connecter</a></li>
  79. </ul>
  80. {% else %}
  81. <ul class="navbar-nav">
  82. <li class="nav-item dropdown">
  83. <a class="nav-link dropdown-toggle" href="#" id="navbarUserDropdown" role="button" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
  84. {{ app.user.nomComplet }}
  85. </a>
  86. <div class="dropdown-menu dropdown-menu-right" aria-labelledby="navbarUserDropdown">
  87. <a class="dropdown-item" href="{{ path('user_profil') }}">Profil</a>
  88. <div class="dropdown-divider"></div>
  89. <a class="dropdown-item" href="{{ path('app_logout') }}">Se déconnecter</a>
  90. </div>
  91. </li>
  92. </ul>
  93. {% endif %}
  94. <ul class="navbar-nav">
  95. <li class="nav-item">
  96. <a href="#" class="nav-link" data-bs-toggle="modal" data-bs-target="#modalWindow"><i class="fa fa-info-circle fa-lg text-light nav-link" aria-hidden="true"></i></a>
  97. <li>
  98. </ul>
  99. <ul class="navbar-nav">
  100. <li class="nav-item dropdown">
  101. <a class="nav-link dropdown-toggle" href="#" id="navbarBellDropdown" role="button" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
  102. <i class="fa fa-bell fa-lg"></i>
  103. </a>
  104. <div class="dropdown-menu dropdown-menu-right" aria-labelledby="navbarBellDropdown" style="width: 400px;">
  105. <div class="list-group px-4 py-3">
  106. {{ afficheNouveautes() | raw }}
  107. </div>
  108. </div>
  109. </li>
  110. </ul>
  111. </div>
  112. </nav>
  113. <div class="container-fluid">
  114. <header>
  115. <div class="grid">
  116. <div class="g-col-8">
  117. <h1>{% block titre %}{% endblock %}</h1>
  118. </div>
  119. <div class="g-col-4">
  120. {% if is_granted('IS_AUTHENTICATED_REMEMBERED') %}
  121. <div class="text-right">
  122. <a data-bs-toggle="collapse" role="button" href="#collapseAide" aria-expanded="false" aria-controls="collapseAide">Aide <i class="fa fa-chevron-down"></i></a>
  123. </div>
  124. <div class="card collapse" id="collapseAide">
  125. <div class="card-body">
  126. <p><i class="fa fa-bookmark fa-lg text-primary"></i> : Films que l'on souhaite voir. On les retrouve dans "Liste de mes films"</p>
  127. <p><i class="fa fa-eye fa-lg text-success"></i> : Film qu'on a vu</p>
  128. <p><i class="fa fa-eye-slash fa-lg text-secondary"></i> : Film qu'on n'a pas vu</p>
  129. </div>
  130. </div>
  131. {% endif %}
  132. </div>
  133. </div>
  134. <!-- Modal -->
  135. <div class="modal fade" id="modalWindow" tabindex="-1" role="dialog" aria-labelledby="ModalWindow" aria-hidden="true">
  136. <div class="modal-dialog modal-dialog-centered" role="document">
  137. <div class="modal-content">
  138. <div class="modal-header">
  139. <h5 class="modal-title" id="information">Vidéothèque partagée</h5>
  140. <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close">
  141. <span aria-hidden="true">&times;</span>
  142. </button>
  143. </div>
  144. <div class="modal-body">
  145. <p>
  146. Ceci est une vidéothèque partagée entre les copains.
  147. Le but, c'est de poser les films qu'on vient de voir où qu'on souhaite voir rapidement et donner des idées aux copains quand ils ne savent plus quoi regarder.
  148. </p>
  149. <p>
  150. On n'est pas là pour recréer IMDB ou Allociné, c'est plutôt une liste de films à voir.
  151. </p>
  152. <p>
  153. D'ailleurs, le but, c'est de cocher les boutons
  154. <i class="fa fa-eye fa-lg text-success"></i> ou <i class="fa fa-eye-slash fa-lg text-secondary"></i>
  155. pour que les autres sachent qui a vu quoi et le bouton <i class="fa fa-bookmark text-primary"></i>
  156. pour suivre un film, ça permet de trier les films dans l'onglet "Ma liste de films".
  157. </p>
  158. <p>
  159. Bon partage à tous !
  160. </p>
  161. <p>
  162. La bise dans vous.
  163. </p>
  164. </div>
  165. <div class="modal-footer">
  166. <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Fermer</button>
  167. </div>
  168. </div>
  169. </div>
  170. </div>
  171. </header>
  172. <main role="main">
  173. {% block body %}{% endblock %}
  174. </main>
  175. <footer class="footer">
  176. <div class="text-center fixed-bottom bg-white">
  177. <span class="text-muted small">Cette application est développée en Symfony 5.3.3 - Code source disponible sur <a target="_blank" href="https://gogs.fdlibre.eu/sangfroid/films-symfony-4-2">Gogs</a><br>Licence <a target="_blank" href="http://www.wtfpl.net">WTFLP</a></span>
  178. </div>
  179. {% block footer %}
  180. {% endblock %}
  181. </footer>
  182. </div>
  183. {{ encore_entry_script_tags('app') }}
  184. {% block javascripts %}{% endblock %}
  185. </body>
  186. </html>