templates/classroom/index.html.twig line 1

Open in your IDE?
  1. {% extends 'layout/backEndLayout.html.twig' %}
  2. {% block stylesheets %}
  3. {{ parent() }}
  4. <style>
  5. /* ── Tokens locaux ─────────────────────────────────────────── */
  6. :root {
  7. --ci-bg : #f5f7fa;
  8. --ci-card : #ffffff;
  9. --ci-border : rgba(0,0,0,.08);
  10. --ci-border-hi: rgba(0,0,0,.16);
  11. --ci-ink : #111827;
  12. --ci-dim : #4b5563;
  13. --ci-muted : #9ca3af;
  14. --ci-blue : #1d4ed8;
  15. --ci-blue-lt : rgba(29,78,216,.1);
  16. --ci-teal : #0d9488;
  17. --ci-teal-lt : rgba(13,148,136,.1);
  18. --ci-amber : #b45309;
  19. --ci-amber-lt : rgba(180,83,9,.1);
  20. --ci-rose : #be123c;
  21. --ci-rose-lt : rgba(190,18,60,.1);
  22. --ci-r : 12px;
  23. --ci-rs : 8px;
  24. --ci-shadow : 0 1px 4px rgba(0,0,0,.06), 0 4px 16px rgba(0,0,0,.06);
  25. }
  26. /* ── Layout page ───────────────────────────────────────────── */
  27. .ci-page { font-family:'DM Sans','Segoe UI',sans-serif; }
  28. /* ── Barre de tête ─────────────────────────────────────────── */
  29. .ci-topbar {
  30. display: flex;
  31. align-items: center;
  32. justify-content: space-between;
  33. flex-wrap: wrap;
  34. gap: 12px;
  35. margin-bottom: 24px;
  36. }
  37. .ci-topbar__title {
  38. font-size: 20px;
  39. font-weight: 700;
  40. color: var(--ci-ink);
  41. display: flex;
  42. align-items: center;
  43. gap: 10px;
  44. }
  45. .ci-topbar__title i { color: var(--ci-blue); font-size: 18px; }
  46. .ci-topbar__sub { font-size: 13px; color: var(--ci-muted); margin-top: 2px; }
  47. /* ── Statistiques globales ─────────────────────────────────── */
  48. .ci-stats {
  49. display: grid;
  50. grid-template-columns: repeat(auto-fill, minmax(160px, 1fr));
  51. gap: 12px;
  52. margin-bottom: 24px;
  53. }
  54. .ci-stat {
  55. background: var(--ci-card);
  56. border: 1px solid var(--ci-border);
  57. border-radius: var(--ci-r);
  58. padding: 16px;
  59. display: flex;
  60. align-items: center;
  61. gap: 12px;
  62. transition: box-shadow .2s;
  63. }
  64. .ci-stat:hover { box-shadow: var(--ci-shadow); }
  65. .ci-stat__icon {
  66. width: 40px; height: 40px;
  67. border-radius: var(--ci-rs);
  68. display: flex; align-items: center; justify-content: center;
  69. font-size: 16px; flex-shrink: 0;
  70. }
  71. .ic-blue { background: var(--ci-blue-lt); color: var(--ci-blue); }
  72. .ic-teal { background: var(--ci-teal-lt); color: var(--ci-teal); }
  73. .ic-amber { background: var(--ci-amber-lt); color: var(--ci-amber); }
  74. .ic-rose { background: var(--ci-rose-lt); color: var(--ci-rose); }
  75. .ci-stat__val { font-size: 22px; font-weight: 700; color: var(--ci-ink); line-height: 1; }
  76. .ci-stat__lbl { font-size: 11.5px; color: var(--ci-muted); margin-top: 2px; }
  77. /* ── Tableau ───────────────────────────────────────────────── */
  78. .ci-table-card {
  79. background: var(--ci-card);
  80. border: 1px solid var(--ci-border);
  81. border-radius: var(--ci-r);
  82. overflow: hidden;
  83. box-shadow: var(--ci-shadow);
  84. }
  85. .ci-table-head {
  86. display: flex;
  87. align-items: center;
  88. justify-content: space-between;
  89. flex-wrap: wrap;
  90. gap: 10px;
  91. padding: 16px 20px;
  92. border-bottom: 1px solid var(--ci-border);
  93. background: #fafbfc;
  94. }
  95. .ci-table-head__title {
  96. font-size: 14px;
  97. font-weight: 600;
  98. color: var(--ci-ink);
  99. display: flex;
  100. align-items: center;
  101. gap: 8px;
  102. }
  103. .ci-table-head__dot {
  104. width: 8px; height: 8px;
  105. border-radius: 50%;
  106. background: var(--ci-blue);
  107. box-shadow: 0 0 6px var(--ci-blue);
  108. }
  109. /* Bouton ajouter */
  110. .btn-add {
  111. display: inline-flex;
  112. align-items: center;
  113. gap: 6px;
  114. padding: 8px 16px;
  115. background: var(--ci-blue);
  116. color: #fff;
  117. border-radius: var(--ci-rs);
  118. font-size: 13px;
  119. font-weight: 600;
  120. text-decoration: none;
  121. border: none;
  122. cursor: pointer;
  123. transition: background .18s, transform .14s;
  124. }
  125. .btn-add:hover { background: #1e40af; color: #fff; transform: translateY(-1px); }
  126. /* Table */
  127. table.ci-tbl {
  128. width: 100%;
  129. border-collapse: collapse;
  130. font-size: 13.5px;
  131. }
  132. table.ci-tbl thead th {
  133. padding: 10px 16px;
  134. color: var(--ci-muted);
  135. font-size: 11px;
  136. font-weight: 600;
  137. text-transform: uppercase;
  138. letter-spacing: .06em;
  139. background: #fafbfc;
  140. border-bottom: 1px solid var(--ci-border);
  141. white-space: nowrap;
  142. }
  143. table.ci-tbl tbody td {
  144. padding: 12px 16px;
  145. border-bottom: 1px solid rgba(0,0,0,.04);
  146. color: var(--ci-ink);
  147. vertical-align: middle;
  148. }
  149. table.ci-tbl tbody tr:last-child td { border-bottom: none; }
  150. table.ci-tbl tbody tr { transition: background .12s; }
  151. table.ci-tbl tbody tr:hover td { background: rgba(29,78,216,.03); }
  152. /* Nom de la classe */
  153. .room-name {
  154. font-weight: 700;
  155. font-size: 14px;
  156. color: var(--ci-ink);
  157. }
  158. .room-link {
  159. display: inline-flex;
  160. align-items: center;
  161. gap: 6px;
  162. color: var(--ci-ink);
  163. text-decoration: none;
  164. }
  165. .room-link:hover { color: var(--ci-blue); }
  166. .room-link:hover .room-name { text-decoration: underline; }
  167. /* Niveau badge */
  168. .level-badge {
  169. display: inline-block;
  170. padding: 3px 10px;
  171. border-radius: 20px;
  172. font-size: 11.5px;
  173. font-weight: 600;
  174. background: var(--ci-blue-lt);
  175. color: var(--ci-blue);
  176. border: 1px solid rgba(29,78,216,.2);
  177. }
  178. /* Séquence active */
  179. .seq-badge {
  180. display: inline-flex;
  181. align-items: center;
  182. gap: 5px;
  183. padding: 3px 10px;
  184. border-radius: 20px;
  185. font-size: 11px;
  186. font-weight: 500;
  187. background: var(--ci-teal-lt);
  188. color: var(--ci-teal);
  189. border: 1px solid rgba(13,148,136,.2);
  190. }
  191. .seq-dot {
  192. width: 6px; height: 6px;
  193. border-radius: 50%;
  194. background: var(--ci-teal);
  195. animation: pulse-dot 1.6s ease infinite;
  196. }
  197. @keyframes pulse-dot {
  198. 0%,100% { opacity:1; } 50% { opacity:.35; }
  199. }
  200. /* Prof titulaire */
  201. .main-teacher {
  202. display: flex;
  203. align-items: center;
  204. gap: 7px;
  205. font-size: 13px;
  206. }
  207. .teacher-avatar {
  208. width: 26px; height: 26px;
  209. border-radius: 50%;
  210. background: linear-gradient(135deg, #1d4ed8, #0d9488);
  211. color: #fff;
  212. font-size: 10px;
  213. font-weight: 700;
  214. display: flex;
  215. align-items: center;
  216. justify-content: center;
  217. flex-shrink: 0;
  218. }
  219. .no-teacher {
  220. font-size: 12px;
  221. color: var(--ci-rose);
  222. font-style: italic;
  223. }
  224. /* Boutons action ligne */
  225. .ci-actions {
  226. display: flex;
  227. align-items: center;
  228. gap: 4px;
  229. justify-content: flex-end;
  230. }
  231. .ci-btn {
  232. display: inline-flex;
  233. align-items: center;
  234. gap: 5px;
  235. padding: 5px 10px;
  236. border-radius: 7px;
  237. font-size: 11.5px;
  238. font-weight: 500;
  239. text-decoration: none;
  240. border: 1px solid var(--ci-border);
  241. cursor: pointer;
  242. background: #fff;
  243. color: var(--ci-dim);
  244. transition: background .15s, border-color .15s, color .15s;
  245. white-space: nowrap;
  246. }
  247. .ci-btn:hover { border-color: var(--ci-border-hi); color: var(--ci-ink); background: #f8f9fa; }
  248. .ci-btn-primary { background: var(--ci-blue-lt); color: var(--ci-blue); border-color: rgba(29,78,216,.25); }
  249. .ci-btn-primary:hover { background: #1d4ed8; color: #fff; }
  250. .ci-btn-warning { background: var(--ci-amber-lt); color: var(--ci-amber); border-color: rgba(180,83,9,.25); }
  251. .ci-btn-warning:hover { background: #b45309; color: #fff; }
  252. .ci-btn-danger { background: var(--ci-rose-lt); color: var(--ci-rose); border-color: rgba(190,18,60,.25); }
  253. .ci-btn-danger:hover { background: #be123c; color: #fff; }
  254. /* ── Pagination ────────────────────────────────────────────── */
  255. .ci-pagination {
  256. display: flex;
  257. align-items: center;
  258. justify-content: space-between;
  259. flex-wrap: wrap;
  260. gap: 10px;
  261. padding: 14px 20px;
  262. border-top: 1px solid var(--ci-border);
  263. background: #fafbfc;
  264. }
  265. .ci-pagination__info { font-size: 12.5px; color: var(--ci-muted); }
  266. .ci-pager {
  267. display: flex;
  268. align-items: center;
  269. gap: 4px;
  270. list-style: none;
  271. margin: 0; padding: 0;
  272. }
  273. .ci-pager li a,
  274. .ci-pager li span {
  275. display: inline-flex;
  276. align-items: center;
  277. justify-content: center;
  278. min-width: 34px;
  279. height: 34px;
  280. padding: 0 8px;
  281. border-radius: 8px;
  282. border: 1px solid var(--ci-border);
  283. font-size: 13px;
  284. font-weight: 500;
  285. color: var(--ci-dim);
  286. text-decoration: none;
  287. background: #fff;
  288. transition: background .15s, border-color .15s, color .15s;
  289. }
  290. .ci-pager li a:hover { border-color: var(--ci-blue); color: var(--ci-blue); }
  291. .ci-pager li.active span {
  292. background: var(--ci-blue);
  293. color: #fff;
  294. border-color: var(--ci-blue);
  295. font-weight: 700;
  296. }
  297. .ci-pager li.disabled span { opacity: .4; cursor: default; }
  298. /* ── Vide ──────────────────────────────────────────────────── */
  299. .ci-empty {
  300. text-align: center;
  301. padding: 64px 24px;
  302. color: var(--ci-muted);
  303. }
  304. .ci-empty i { font-size: 40px; margin-bottom: 12px; display: block; }
  305. .ci-empty strong { display: block; font-size: 15px; color: var(--ci-dim); margin-bottom: 4px; }
  306. /* ── Animation ─────────────────────────────────────────────── */
  307. @keyframes fadeUp {
  308. from { opacity:0; transform:translateY(10px); }
  309. to { opacity:1; transform:none; }
  310. }
  311. .ci-table-card { animation: fadeUp .4s ease both; }
  312. </style>
  313. {% endblock %}
  314. {% block content %}
  315. <div class="container mt-4">
  316. <div class="d-flex justify-content-between align-items-center mb-3">
  317. <h4 class="text-uppercase">Liste des salles de classe</h4>
  318. {% if is_granted('ROLE_ADMIN') %}
  319. <a class="btn btn-info" href="{{ path('admin_classrooms_new') }}">
  320. <i class="fa fa-plus"></i> Ajouter
  321. </a>
  322. {% endif %}
  323. </div>
  324. <!-- Level Tabs -->
  325. <ul class="nav nav-tabs" id="levelTabs" role="tablist">
  326. {% for level in levels %}
  327. <li class="nav-item" role="presentation">
  328. <button class="nav-link {% if loop.first %}active{% endif %}" id="level-{{ level.id }}-tab"
  329. data-bs-toggle="tab" data-bs-target="#level-{{ level.id }}" type="button"
  330. role="tab" aria-controls="level-{{ level.id }}" aria-selected="{{ loop.first ? 'true' : 'false' }}">
  331. {{ level.fullName }}
  332. </button>
  333. </li>
  334. {% endfor %}
  335. </ul>
  336. <!-- Classes per Level -->
  337. <div class="tab-content mt-3" id="levelTabsContent">
  338. {% for level in levels %}
  339. <div class="tab-pane fade {% if loop.first %}show active{% endif %}" id="level-{{ level.id }}" role="tabpanel">
  340. {% if level.rooms|length > 0 %}
  341. <!-- Random Color Header -->
  342. {# pick a random color #}
  343. {% set colors = ['#ff7a00', '#2f2f2f', '#28a745', '#009688', '#6f42c1'] %}
  344. {% set color = random(colors) %}
  345. <div class="level-header" style="background-color: {{ color }};">
  346. <h5 class="m-0 text-white text-uppercase fw-bold level-title">
  347. {{ level.fullName }}
  348. </h5>
  349. </div>
  350. <div class="classroom-grid mt-3">
  351. {% for room in level.rooms %}
  352. <div class="classroom-card shadow-sm">
  353. <div class="card-header mb-2">
  354. <h5 class="mb-1 classroom-title">
  355. <a href="{{ path('admin_classrooms_show', {id: room.id}) }}">
  356. {{ room.name }}
  357. </a>
  358. </h5>
  359. {% if room.id in mainTeachers|keys %}
  360. <small class="text-muted">
  361. <i class="fa fa-user"></i> {{ mainTeachers[room.id].fullName }}
  362. </small>
  363. {% else %}
  364. <small class="text-danger">— Pas de titulaire —</small>
  365. {% endif %}
  366. </div>
  367. <!-- Flex Buttons -->
  368. <div class="card-actions mt-3">
  369. {% if is_granted('ROLE_ADMIN') %}
  370. <a class="btn btn-outline-warning" href="{{ path('admin_classrooms_edit', {id: room.id}) }}">
  371. <i class="fa fa-edit"></i> Modifier
  372. </a>
  373. <a class="btn btn-outline-dark" target="_blank" href="{{ path('admin_classroom_insolvent', {id: room.id}) }}">
  374. <i class="fa fa-users"></i> Débiteurs
  375. </a>
  376. <a class="btn btn-outline-success" target="_blank" href="{{ path('admin_payment_plan_print', {id: room.id}) }}">
  377. <i class="fa fa-money"></i> Échéancier
  378. </a>
  379. {% endif %}
  380. <a class="btn btn-outline-danger" target="_blank" href="{{ path('admin_classrooms_fichesimple', {id: room.id}) }}">
  381. <i class="fa fa-file-pdf-o"></i> Notes
  382. </a>
  383. <a class="btn btn-outline-info" target="_blank" href="{{ path('admin_classrooms_presentation', {id: room.id}) }}">
  384. <i class="fa fa-users"></i> Présentation
  385. </a>
  386. <a class="btn btn-outline-primary" target="_blank" href="{{ path('admin_classrooms_recapitulatif', {room: room.id, seq : seq}) }}">
  387. <i class="fa fa-file"></i> Récap.
  388. </a>
  389. <a class="btn btn-outline-secondary" target="_blank" href="{{ path('admin_classrooms_disciplinary_record', {id: room.id}) }}">
  390. <i class="fa fa-th-list"></i> Discipline
  391. </a>
  392. </div>
  393. </div>
  394. {% endfor %}
  395. </div>
  396. {% else %}
  397. <div class="alert alert-warning mt-3">Aucune classe trouvée pour ce niveau.</div>
  398. {% endif %}
  399. </div>
  400. {% endfor %}
  401. </div>
  402. <div class="ci-page">
  403. {# ── Barre de tête ──────────────────────────────────────────── #}
  404. <div class="ci-topbar">
  405. <div>
  406. <div class="ci-topbar__title">
  407. <i class="fa fa-th-large"></i>
  408. Classes
  409. </div>
  410. <div class="ci-topbar__sub">
  411. Gestion des classes — {% if year %}Année scolaire {{ year.code }}{% endif %}
  412. {% if seq > 0 %} · Séquence active{% endif %}
  413. </div>
  414. </div>
  415. {% if is_granted('ROLE_ADMIN') %}
  416. <a href="{{ path('admin_classrooms_new') }}" class="btn-add">
  417. <i class="fa fa-plus"></i> Nouvelle classe
  418. </a>
  419. {% endif %}
  420. </div>
  421. {# ── KPIs globaux ───────────────────────────────────────────── #}
  422. <div class="ci-stats">
  423. <div class="ci-stat">
  424. <div class="ci-stat__icon ic-blue"><i class="fa fa-home"></i></div>
  425. <div>
  426. <div class="ci-stat__val">{{ classrooms|length }}</div>
  427. <div class="ci-stat__lbl">Classes</div>
  428. </div>
  429. </div>
  430. <div class="ci-stat">
  431. <div class="ci-stat__icon ic-teal"><i class="fa fa-graduation-cap"></i></div>
  432. <div>
  433. <div class="ci-stat__val">{{ students_count() }}</div>
  434. <div class="ci-stat__lbl">Élèves inscrits</div>
  435. </div>
  436. </div>
  437. <div class="ci-stat">
  438. <div class="ci-stat__icon ic-amber"><i class="fa fa-users"></i></div>
  439. <div>
  440. <div class="ci-stat__val">{{ teachers_count() }}</div>
  441. <div class="ci-stat__lbl">Enseignants</div>
  442. </div>
  443. </div>
  444. <div class="ci-stat">
  445. <div class="ci-stat__icon ic-rose"><i class="fa fa-book"></i></div>
  446. <div>
  447. <div class="ci-stat__val">{{ rooms_count() }}</div>
  448. <div class="ci-stat__lbl">Salles actives</div>
  449. </div>
  450. </div>
  451. </div>
  452. {# ── Tableau des classes ─────────────────────────────────────── #}
  453. {% set items_per_page = 12 %}
  454. {% set current_page = app.request.query.get('page', 1)|number_format %}
  455. {% set total_pages = (classrooms|length / items_per_page)|round(0, 'ceil') %}
  456. <div class="ci-table-card">
  457. <div class="ci-table-head">
  458. <div class="ci-table-head__title">
  459. <span class="ci-table-head__dot"></span>
  460. Liste des classes
  461. <span style="font-size:11.5px;color:var(--ci-muted);font-weight:400;">({{ classrooms|length }} au total)</span>
  462. </div>
  463. <div style="display:flex;gap:8px;align-items:center;">
  464. <span class="seq-badge">
  465. <span class="seq-dot"></span>
  466. {% if seq > 0 %}Séquence active{% else %}Aucune séquence active{% endif %}
  467. </span>
  468. </div>
  469. </div>
  470. {% if classrooms is empty %}
  471. <div class="ci-empty">
  472. <i class="fa fa-inbox"></i>
  473. <strong>Aucune classe enregistrée</strong>
  474. Commencez par créer une classe.
  475. </div>
  476. {% else %}
  477. <div style="overflow-x:auto;">
  478. <table class="ci-tbl">
  479. <thead>
  480. <tr>
  481. <th style="width:4%">#</th>
  482. <th style="width:18%">Classe</th>
  483. <th style="width:12%">Niveau</th>
  484. <th style="width:22%">Professeur titulaire</th>
  485. <th style="width:10%" class="text-center">Modules</th>
  486. <th style="width:10%" class="text-center">Matières</th>
  487. <th style="width:24%" class="text-right">Actions</th>
  488. </tr>
  489. </thead>
  490. <tbody>
  491. {% for classroom in classrooms %}
  492. {# ── Pagination côté Twig ── #}
  493. {% if loop.index > (current_page - 1) * items_per_page and loop.index <= current_page * items_per_page %}
  494. <tr>
  495. <td style="color:var(--ci-muted);font-size:12px">{{ (current_page - 1) * items_per_page + loop.index - ((current_page - 1) * items_per_page) }}</td>
  496. <td>
  497. <a href="{{ path('admin_classrooms_show', {id: classroom.id}) }}" class="room-link">
  498. <span class="room-name">{{ classroom.name }}</span>
  499. </a>
  500. </td>
  501. <td>
  502. <span class="level-badge">{{ classroom.level }}</span>
  503. </td>
  504. <td>
  505. {% if mainTeachers[classroom.id] is defined %}
  506. <div class="main-teacher">
  507. <div class="teacher-avatar">
  508. {{ mainTeachers[classroom.id].fullName|slice(0,1)|upper }}{{ mainTeachers[classroom.id].fullName|split(' ')|last|slice(0,1)|upper }}
  509. </div>
  510. {{ mainTeachers[classroom.id].fullName }}
  511. </div>
  512. {% else %}
  513. <span class="no-teacher"><i class="fa fa-exclamation-triangle"></i> Non assigné</span>
  514. {% endif %}
  515. </td>
  516. <td class="text-center">
  517. <span style="font-weight:600;color:var(--ci-blue)">{{ classroom.modules|length }}</span>
  518. </td>
  519. <td class="text-center">
  520. {% set total_courses = 0 %}
  521. {% for module in classroom.modules %}
  522. {% set total_courses = total_courses + module.courses|length %}
  523. {% endfor %}
  524. <span style="font-weight:600;color:var(--ci-teal)">{{ total_courses }}</span>
  525. </td>
  526. <td>
  527. <div class="ci-actions">
  528. <a class="ci-btn ci-btn-primary" href="{{ path('admin_classrooms_show', {id: classroom.id}) }}" title="Voir">
  529. <i class="fa fa-eye"></i> Voir
  530. </a>
  531. {% if is_granted('ROLE_ADMIN') %}
  532. <a class="ci-btn ci-btn-warning" href="{{ path('admin_classrooms_edit', {id: classroom.id}) }}" title="Modifier">
  533. <i class="fa fa-pencil"></i>
  534. </a>
  535. {% if seq > 0 %}
  536. <a class="ci-btn" href="{{ path('admin_classrooms_recapitulatif', {room: classroom.id, seq: seq}) }}" title="Récapitulatif PDF">
  537. <i class="fa fa-file-pdf-o"></i>
  538. </a>
  539. {% endif %}
  540. <form method="post" action="{{ path('admin_classrooms_delete', {id: classroom.id}) }}" onsubmit="return confirm('Supprimer cette classe ?')" style="display:inline">
  541. <input type="hidden" name="_method" value="DELETE">
  542. <button class="ci-btn ci-btn-danger" type="submit" title="Supprimer">
  543. <i class="fa fa-trash"></i>
  544. </button>
  545. </form>
  546. {% endif %}
  547. </div>
  548. </td>
  549. </tr>
  550. {% endif %}
  551. {% endfor %}
  552. </tbody>
  553. </table>
  554. </div>
  555. {# ── Pagination ────────────────────────────────────────────── #}
  556. {% if total_pages > 1 %}
  557. <div class="ci-pagination">
  558. <div class="ci-pagination__info">
  559. Page {{ current_page }} sur {{ total_pages }} — {{ classrooms|length }} classe{{ classrooms|length > 1 ? 's' : '' }}
  560. </div>
  561. <ul class="ci-pager">
  562. <li class="{{ current_page <= 1 ? 'disabled' : '' }}">
  563. {% if current_page > 1 %}
  564. <a href="?page={{ current_page - 1 }}"><i class="fa fa-chevron-left"></i></a>
  565. {% else %}
  566. <span><i class="fa fa-chevron-left"></i></span>
  567. {% endif %}
  568. </li>
  569. {% for p in 1..total_pages %}
  570. {% if p == current_page %}
  571. <li class="active"><span>{{ p }}</span></li>
  572. {% elseif p == 1 or p == total_pages or (p >= current_page - 2 and p <= current_page + 2) %}
  573. <li><a href="?page={{ p }}">{{ p }}</a></li>
  574. {% elseif p == current_page - 3 or p == current_page + 3 %}
  575. <li><span style="border:none;background:transparent">…</span></li>
  576. {% endif %}
  577. {% endfor %}
  578. <li class="{{ current_page >= total_pages ? 'disabled' : '' }}">
  579. {% if current_page < total_pages %}
  580. <a href="?page={{ current_page + 1 }}"><i class="fa fa-chevron-right"></i></a>
  581. {% else %}
  582. <span><i class="fa fa-chevron-right"></i></span>
  583. {% endif %}
  584. </li>
  585. </ul>
  586. </div>
  587. {% else %}
  588. <div class="ci-pagination">
  589. <div class="ci-pagination__info">{{ classrooms|length }} classe{{ classrooms|length > 1 ? 's' : '' }} au total</div>
  590. </div>
  591. {% endif %}
  592. {% endif %}
  593. </div>
  594. </div>
  595. {% endblock %}