templates/layout/backEndLayout.html.twig line 73

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