templates/layout/backEndLayout.html.twig line 74

Open in your IDE?
  1. {% extends 'layout/base.html.twig' %}
  2. {% block stylesheets %}
  3. {{ parent() }}
  4. <link rel="stylesheet" href="{{ asset('assets/css/style.blue.css') }}">
  5. <link rel="stylesheet" href="{{ asset('assets/css/jquery.mCustomScrollbar.css') }}">
  6. <link rel="stylesheet" href="{{ asset('assets/cdnjs.cloudflare.com/ajax/libs/Chart.js/2.9.3/Chart.min.css') }}">
  7. <style>
  8. /* Sidebar */
  9. .side-navbar {
  10. position: fixed;
  11. top: 0;
  12. left: 0;
  13. width: 220px;
  14. height: 100vh;
  15. background: #2f3e47;
  16. color: white;
  17. overflow-y: auto;
  18. transition: all 0.3s ease;
  19. z-index: 999;
  20. }
  21. .side-navbar a { color: #d1d4d6; display:block; padding:10px 15px; }
  22. .side-navbar a:hover { background:#1e2a31; color:white; }
  23. .sidenav-header img { width:70px; border-radius:50%; margin-bottom:10px; }
  24. /* Collapsed sidebar (mobile) */
  25. .side-navbar.collapsed {
  26. left: -220px;
  27. }
  28. /* Content */
  29. .flex-grow-1 {
  30. margin-left: 220px;
  31. transition: margin 0.3s ease;
  32. }
  33. .side-navbar.collapsed ~ .flex-grow-1 {
  34. margin-left: 0;
  35. }
  36. /* Header */
  37. .header { background:white; border-bottom:1px solid #eee; padding:10px 20px; display:flex; justify-content:space-between; align-items:center; }
  38. /* Dashboard cards */
  39. .dashboard-card { background:white; border-radius:8px; padding:15px; box-shadow:0 2px 6px rgba(0,0,0,0.1); text-align:center; }
  40. .dashboard-card i { font-size:2em; margin-bottom:5px; }
  41. /* Toggle button */
  42. #toggle-btn { font-size:1.3em; cursor:pointer; color:#2f3e47; }
  43. /* Responsive */
  44. @media (max-width: 768px) {
  45. .flex-grow-1 { margin-left: 0; }
  46. .side-navbar { left: -220px; }
  47. .side-navbar.collapsed { left: 0; }
  48. }
  49. </style>
  50. {% endblock %}
  51. {% block title %}
  52. {{ parent() }} / Administration
  53. {% endblock %}
  54. {% block main %}
  55. <div class="d-flex">
  56. {# Sidebar #}
  57. {% block sidebar %}
  58. <nav class="side-navbar">
  59. <div class="side-navbar-wrapper">
  60. {% block identification %}
  61. <div class="sidenav-header d-flex align-items-center justify-content-center">
  62. <div class="sidenav-header-inner text-center">
  63. <img src={% if is_granted("IS_AUTHENTICATED_REMEMBERED") %} "{{ app.user.avatar(75) }}" {% else %} {{ asset("img/avatar-2.jpg") }} {% endif %} class="img-fluid rounded-circle" alt="user-avatar">
  64. <h2 class="h5 text-uppercase"></h2>
  65. <span class="text-uppercase">
  66. {% if is_granted("IS_AUTHENTICATED_REMEMBERED") %}
  67. {{ app.user.username }}
  68. {% endif %}
  69. </span>
  70. </div>
  71. <div class="sidenav-header-logo">
  72. <a href="index.html" class="brand-small text-center">
  73. <strong></strong>
  74. <strong class="text-primary">D</strong>
  75. </a>
  76. </div>
  77. </div>
  78. {% endblock identification %}
  79. {% block menu %}
  80. <div class="main-menu">
  81. <ul id="side-main-menu" class="side-menu list-unstyled">
  82. {% if is_granted('ROLE_ADMIN') %}
  83. <li class="{% if app.request.attributes.get('_route') == "admin_school_years" %}active{% endif %}">
  84. <a href="{{ path('admin_school_years') }}">
  85. <i class="fa fa-calendar" aria-hidden="true"></i>
  86. <span>Années scolaires</span>
  87. </a>
  88. </li>
  89. <li class="{% if app.request.attributes.get('_route') == "admin_quaters" %}active{% endif %}">
  90. <a href="{{ path('admin_quaters') }}">
  91. <i class="fa fa-calendar-check-o" aria-hidden="true"></i>
  92. <span>Trimestres</span>
  93. </a>
  94. </li>
  95. <li class="{% if app.request.attributes.get('_route') == "admin_sequences" %}active{% endif %}">
  96. <a href="{{ path('admin_sequences') }}">
  97. <i class="fa fa-calendar-minus-o" aria-hidden="true"></i>
  98. <span>Séquences</span>
  99. </a>
  100. </li>
  101. <li class="{% if app.request.attributes.get('_route') == "admin_programs" %}active{% endif %}">
  102. <a href="{{ path('admin_programs') }}">
  103. <i class="fa fa-table" aria-hidden="true"></i>
  104. <span>Programmes</span>
  105. </a>
  106. </li>
  107. <li class="{% if app.request.attributes.get('_route') == "admin_sections" %}active{% endif %}">
  108. <a href="{{ path('admin_sections') }}">
  109. <i class="fa fa-th-large" aria-hidden="true"></i>
  110. <span>Sections</span>
  111. </a>
  112. </li>
  113. <li class="{% if app.request.attributes.get('_route') == "admin_cycles" %}active{% endif %}">
  114. <a href="{{ path('admin_cycles') }}">
  115. <i class="fa fa-th-list" aria-hidden="true"></i>
  116. <span>Cycles</span>
  117. </a>
  118. </li>
  119. <li class="{% if app.request.attributes.get('_route') == "admin_levels" %}active{% endif %}">
  120. <a href="{{ path('admin_levels') }}">
  121. <i class="fa fa-list-ul" aria-hidden="true"></i>
  122. <span>Niveaux</span>
  123. </a>
  124. </li>
  125. <li class="{% if app.request.attributes.get('_route') == "admin_classrooms" %}active{% endif %}">
  126. <a href="{{ path('admin_classrooms') }}">
  127. <i class="fa fa-indent" aria-hidden="true"></i>
  128. <span>Classes</span>
  129. </a>
  130. </li>
  131. <li class="{% if app.request.attributes.get('_route') == "admin_modules" %}active{% endif %}">
  132. <a href="{{ path('admin_modules') }}">
  133. <i class="fa fa-folder-open-o" aria-hidden="true"></i>
  134. <span>Module</span>
  135. </a>
  136. </li>
  137. <li class="{% if app.request.attributes.get('_route') == "admin_domains" %}active{% endif %}">
  138. <a href="{{ path('admin_domains') }}">
  139. <i class="fa fa-user-md" aria-hidden="true"></i>
  140. <span>Departement.</span>
  141. </a>
  142. </li>
  143. <li class="{% if app.request.attributes.get('_route') == "admin_courses" %}active{% endif %}">
  144. <a href="{{ path('admin_courses') }}">
  145. <i class="fa fa-book" aria-hidden="true"></i>
  146. <span>Matières</span>
  147. </a>
  148. </li>
  149. <li class="{% if app.request.attributes.get('_route') == "admin_subscriptions" %}active{% endif %}">
  150. <a href="{{ path('admin_subscriptions') }}">
  151. <i class="fa fa-exchange" aria-hidden="true"></i>
  152. <span>Inscriptions</span>
  153. </a>
  154. </li>
  155. <li class="{% if app.request.attributes.get('_route') == "admin_students" %}active{% endif %}">
  156. <a href="{{ path('admin_students', { 'type': "new_students_not_yet_registered_checkbox" }) }}">
  157. <i class="fa fa-users"></i>
  158. <span>Eleves</span>
  159. </a>
  160. </li>
  161. <li class="{% if app.request.attributes.get('_route') == "admin_attributions" %}active{% endif %}">
  162. <a href="{{ path('admin_attributions') }}">
  163. <i class="fa fa-map-signs" aria-hidden="true"></i>
  164. <span>Attributions</span>
  165. </a>
  166. </li>
  167. <li class="{% if app.request.attributes.get('_route') == "admin_users" %}active{% endif %}">
  168. <a href="{{ path('admin_users') }}">
  169. <i class="fa fa-user" aria-hidden="true"></i>
  170. <span>Personnel</span>
  171. </a>
  172. </li>
  173. {# ================================================= #}
  174. {# ================= MENU FINANCES ================= #}
  175. {# ================================================= #}
  176. <li class="
  177. {% if app.request.attributes.get('_route') starts with 'app_finance_' %}
  178. active
  179. {% endif %}
  180. ">
  181. <a href="{{ path('app_finance_dashboard') }}">
  182. <i class="fa fa-money"></i>
  183. <span>Finances</span>
  184. </a>
  185. <ul class="list-unstyled">
  186. <li class="{% if app.request.attributes.get('_route') == 'app_finance_dashboard' %}active{% endif %}">
  187. <a href="{{ path('app_finance_dashboard') }}">
  188. <i class="fa fa-dashboard"></i>
  189. Tableau de bord
  190. </a>
  191. </li>
  192. <li class="{% if app.request.attributes.get('_route') starts with 'app_finance_fee_definition' %}active{% endif %}">
  193. <a href="{{ path('app_finance_fee_definition_index') }}">
  194. <i class="fa fa-list-alt"></i>
  195. Définitions des frais
  196. </a>
  197. </li>
  198. <li class="{% if app.request.attributes.get('_route') starts with 'app_finance_payment_' %}active{% endif %}">
  199. <a href="{{ path('app_finance_payment_list') }}">
  200. <i class="fa fa-credit-card"></i>
  201. Paiements
  202. </a>
  203. </li>
  204. </ul>
  205. </li>
  206. {# ============== FIN MENU FINANCES ============== #}
  207. <li class="{% if app.request.attributes.get('_route') == "financial_scope_index" %}active{% endif %}">
  208. <a href="{{ path('financial_scope_index') }}">
  209. <i class="fa fa-hand-holding-usd" aria-hidden="true"></i>
  210. <span>Financier</span>
  211. </a>
  212. </li>
  213. <li class="{% if app.request.attributes.get('_route') == "admin_statistics" %}active{% endif %}">
  214. <a href="{{ path('admin_statistics') }}">
  215. <i class="fa fa-area-chart" aria-hidden="true"></i>
  216. <span>Statistiques</span>
  217. </a>
  218. </li>
  219. {% endif %}
  220. <li class="{% if app.request.attributes.get('_route') == "admin_evaluations" %}active{% endif %}">
  221. <a href="{{ path('admin_evaluations') }}">
  222. <i class="fa fa-file-pdf-o" aria-hidden="true"></i>
  223. <span>Evaluations</span>
  224. </a>
  225. </li>
  226. {% if is_granted('ROLE_DISCIPLINE') %}
  227. <li class="{% if app.request.attributes.get('_route') == "admin_abscences_sheet_index" %}active{% endif %}">
  228. <a href="{{ path('admin_abscences_sheet_index') }}">
  229. <i class="fa fa-exclamation-triangle" aria-hidden="true"></i>
  230. <span>Discipline</span>
  231. </a>
  232. </li>
  233. {% endif %}
  234. {% if is_granted('ROLE_FINANCIAL') %}
  235. <li class="{% if app.request.attributes.get('_route') == "app_payment_index" %}active{% endif %}">
  236. <a href="{{ path('app_payment_index') }}">
  237. <i class="fa fa-credit-card" aria-hidden="true"></i>
  238. <span>Payment</span>
  239. </a>
  240. </li>
  241. <li class="{% if app.request.attributes.get('_route') == "admin_paymentPlans" %}active{% endif %}">
  242. <a href="{{ path('admin_paymentPlans') }}">
  243. <i class="fa fa-clock-o" aria-hidden="true"></i>
  244. <span>Scolarite</span>
  245. </a>
  246. </li>
  247. {% endif %}
  248. <li class="{% if app.request.attributes.get('_route') == "app_account" %}active{% endif %}">
  249. <a href="{{ path('app_account') }}">
  250. <i class="fa fa-user-circle"></i>
  251. <span>Account</span>
  252. </a>
  253. </li>
  254. </ul>
  255. </div>
  256. {% endblock menu %}
  257. </div>
  258. </nav>
  259. {% endblock sidebar %}
  260. <div class="page home-page">
  261. {% block header %}
  262. <header class="header d-flex align-items-center justify-content-between">
  263. <a id="toggle-btn" href="#" class="menu-btn"><i class="fa fa-bars"></i></a>
  264. <a href="{{ path('app_home') }}" class="navbar-brand text-center">
  265. <strong class="text-primary">SCHOOL MANAGEMENT SYSTEM</strong>
  266. </a>
  267. {% if app.user %}
  268. <a id="logout_btn" href="#" onclick="event.preventDefault(); document.getElementById('js-logout-form').submit();" class="btn btn-warning">
  269. <i class="fa fa-sign-out"></i>
  270. </a>
  271. <form id="js-logout-form" action="{{ path('app_logout') }}" style="display:none;" method="POST">
  272. <input type="hidden" name="_csrf_token" value="{{ csrf_token('logout') }}">
  273. </form>
  274. {% endif %}
  275. </header>
  276. {% endblock %}
  277. <section class="container-fluid mt-4">
  278. {% if is_granted('ROLE_ADMIN') %}
  279. <div class="row mb-4">
  280. <div class="col-md-3">
  281. <div class="dashboard-card text-center">
  282. <i class="fa fa-graduation-cap text-primary"></i>
  283. <h4>{{ students_count() }}</h4>
  284. <p>Élèves</p>
  285. </div>
  286. </div>
  287. <div class="col-md-3">
  288. <div class="dashboard-card text-center">
  289. <i class="fa fa-users text-success"></i>
  290. <h4>{{ teachers_count() }}</h4>
  291. <p>Enseignants</p>
  292. </div>
  293. </div>
  294. <div class="col-md-3">
  295. <div class="dashboard-card text-center">
  296. <i class="fa fa-home text-warning"></i>
  297. <h4>{{ rooms_count() }}</h4>
  298. <p>Classes</p>
  299. </div>
  300. </div>
  301. <div class="col-md-3">
  302. <select class="form-control" id="select_year">
  303. {% for year in years()|reverse %}
  304. <option value="{{ year.id }}" {% if app.session.get('session_school_year') == year.id %}selected{% endif %}>{{ year.code }}</option>
  305. {% endfor %}
  306. </select>
  307. </div>
  308. </div>
  309. {% endif %}
  310. {% block content %}{% endblock %}
  311. </section>
  312. </div>
  313. </div>
  314. {% endblock %}
  315. {% block footer %}{% endblock %}
  316. {% block javascripts %}
  317. {{ parent() }}
  318. <script src="{{ asset('assets/js/jquery.cookie.js') }}"></script>
  319. <script src="{{ asset('assets/js/grasp_mobile_progress_circle-1.0.0.min.js') }}"></script>
  320. <script src="{{ asset('assets/js/jquery.validate.min.js') }}"></script>
  321. <script src="{{ asset('assets/js/jquery.mCustomScrollbar.concat.min.js') }}"></script>
  322. <script>
  323. // Toggle sidebar menu
  324. $('#toggle-btn').on('click', function(e) {
  325. e.preventDefault();
  326. $('.side-navbar').toggleClass('collapsed');
  327. });
  328. // Changement d'année scolaire
  329. $('#select_year').on('change', function() {
  330. $.ajax({
  331. type: "POST",
  332. url: "{{ path('update_school_year') }}",
  333. data: { selectedSchoolYear: $(this).val() },
  334. success: function(){ location.reload(); },
  335. error: function(e){ console.log(e); alert("Echec."); }
  336. });
  337. });
  338. </script>
  339. {% endblock %}