var/cache/dev/twig/42/42f334731b3d01d9a7cce9eec39281bf.php line 344

Open in your IDE?
  1. <?php
  2. use Twig\Environment;
  3. use Twig\Error\LoaderError;
  4. use Twig\Error\RuntimeError;
  5. use Twig\Extension\CoreExtension;
  6. use Twig\Extension\SandboxExtension;
  7. use Twig\Markup;
  8. use Twig\Sandbox\SecurityError;
  9. use Twig\Sandbox\SecurityNotAllowedTagError;
  10. use Twig\Sandbox\SecurityNotAllowedFilterError;
  11. use Twig\Sandbox\SecurityNotAllowedFunctionError;
  12. use Twig\Source;
  13. use Twig\Template;
  14. use Twig\TemplateWrapper;
  15. /* layout/backEndLayout.html.twig */
  16. class __TwigTemplate_b50bbc2aedacfc0fd3e66e16b4273e81 extends Template
  17. {
  18. private Source $source;
  19. /**
  20. * @var array<string, Template>
  21. */
  22. private array $macros = [];
  23. public function __construct(Environment $env)
  24. {
  25. parent::__construct($env);
  26. $this->source = $this->getSourceContext();
  27. $this->blocks = [
  28. 'stylesheets' => [$this, 'block_stylesheets'],
  29. 'title' => [$this, 'block_title'],
  30. 'main' => [$this, 'block_main'],
  31. 'sidebar' => [$this, 'block_sidebar'],
  32. 'identification' => [$this, 'block_identification'],
  33. 'menu' => [$this, 'block_menu'],
  34. 'header' => [$this, 'block_header'],
  35. 'content' => [$this, 'block_content'],
  36. 'footer' => [$this, 'block_footer'],
  37. 'javascripts' => [$this, 'block_javascripts'],
  38. ];
  39. }
  40. protected function doGetParent(array $context): bool|string|Template|TemplateWrapper
  41. {
  42. // line 1
  43. return "layout/base.html.twig";
  44. }
  45. protected function doDisplay(array $context, array $blocks = []): iterable
  46. {
  47. $macros = $this->macros;
  48. $__internal_5a27a8ba21ca79b61932376b2fa922d2 = $this->extensions["Symfony\\Bundle\\WebProfilerBundle\\Twig\\WebProfilerExtension"];
  49. $__internal_5a27a8ba21ca79b61932376b2fa922d2->enter($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "template", "layout/backEndLayout.html.twig"));
  50. $__internal_6f47bbe9983af81f1e7450e9a3e3768f = $this->extensions["Symfony\\Bridge\\Twig\\Extension\\ProfilerExtension"];
  51. $__internal_6f47bbe9983af81f1e7450e9a3e3768f->enter($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "template", "layout/backEndLayout.html.twig"));
  52. $this->parent = $this->load("layout/base.html.twig", 1);
  53. yield from $this->parent->unwrap()->yield($context, array_merge($this->blocks, $blocks));
  54. $__internal_5a27a8ba21ca79b61932376b2fa922d2->leave($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof);
  55. $__internal_6f47bbe9983af81f1e7450e9a3e3768f->leave($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof);
  56. }
  57. // line 3
  58. /**
  59. * @return iterable<null|scalar|\Stringable>
  60. */
  61. public function block_stylesheets(array $context, array $blocks = []): iterable
  62. {
  63. $macros = $this->macros;
  64. $__internal_5a27a8ba21ca79b61932376b2fa922d2 = $this->extensions["Symfony\\Bundle\\WebProfilerBundle\\Twig\\WebProfilerExtension"];
  65. $__internal_5a27a8ba21ca79b61932376b2fa922d2->enter($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block", "stylesheets"));
  66. $__internal_6f47bbe9983af81f1e7450e9a3e3768f = $this->extensions["Symfony\\Bridge\\Twig\\Extension\\ProfilerExtension"];
  67. $__internal_6f47bbe9983af81f1e7450e9a3e3768f->enter($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block", "stylesheets"));
  68. // line 4
  69. yield " ";
  70. yield from $this->yieldParentBlock("stylesheets", $context, $blocks);
  71. yield "
  72. <link rel=\"stylesheet\" href=\"";
  73. // line 5
  74. yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl("assets/css/style.blue.css"), "html", null, true);
  75. yield "\">
  76. <link rel=\"stylesheet\" href=\"";
  77. // line 6
  78. yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl("assets/css/jquery.mCustomScrollbar.css"), "html", null, true);
  79. yield "\">
  80. <link rel=\"stylesheet\" href=\"";
  81. // line 7
  82. yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl("assets/cdnjs.cloudflare.com/ajax/libs/Chart.js/2.9.3/Chart.min.css"), "html", null, true);
  83. yield "\">
  84. <style>
  85. /* Sidebar */
  86. .side-navbar {
  87. position: fixed;
  88. top: 0;
  89. left: 0;
  90. width: 220px;
  91. height: 100vh;
  92. background: #2f3e47;
  93. color: white;
  94. overflow-y: auto;
  95. transition: all 0.3s ease;
  96. z-index: 999;
  97. }
  98. .side-navbar a { color: #d1d4d6; display:block; padding:10px 15px; }
  99. .side-navbar a:hover { background:#1e2a31; color:white; }
  100. .sidenav-header img { width:70px; border-radius:50%; margin-bottom:10px; }
  101. /* Collapsed sidebar (mobile) */
  102. .side-navbar.collapsed {
  103. left: -220px;
  104. }
  105. /* Content */
  106. .flex-grow-1 {
  107. margin-left: 220px;
  108. transition: margin 0.3s ease;
  109. }
  110. .side-navbar.collapsed ~ .flex-grow-1 {
  111. margin-left: 0;
  112. }
  113. /* Header */
  114. .header { background:white; border-bottom:1px solid #eee; padding:10px 20px; display:flex; justify-content:space-between; align-items:center; }
  115. /* Dashboard cards */
  116. .dashboard-card { background:white; border-radius:8px; padding:15px; box-shadow:0 2px 6px rgba(0,0,0,0.1); text-align:center; }
  117. .dashboard-card i { font-size:2em; margin-bottom:5px; }
  118. /* Toggle button */
  119. #toggle-btn { font-size:1.3em; cursor:pointer; color:#2f3e47; }
  120. /* Responsive */
  121. @media (max-width: 768px) {
  122. .flex-grow-1 { margin-left: 0; }
  123. .side-navbar { left: -220px; }
  124. .side-navbar.collapsed { left: 0; }
  125. }
  126. </style>
  127. ";
  128. $__internal_6f47bbe9983af81f1e7450e9a3e3768f->leave($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof);
  129. $__internal_5a27a8ba21ca79b61932376b2fa922d2->leave($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof);
  130. yield from [];
  131. }
  132. // line 60
  133. /**
  134. * @return iterable<null|scalar|\Stringable>
  135. */
  136. public function block_title(array $context, array $blocks = []): iterable
  137. {
  138. $macros = $this->macros;
  139. $__internal_5a27a8ba21ca79b61932376b2fa922d2 = $this->extensions["Symfony\\Bundle\\WebProfilerBundle\\Twig\\WebProfilerExtension"];
  140. $__internal_5a27a8ba21ca79b61932376b2fa922d2->enter($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block", "title"));
  141. $__internal_6f47bbe9983af81f1e7450e9a3e3768f = $this->extensions["Symfony\\Bridge\\Twig\\Extension\\ProfilerExtension"];
  142. $__internal_6f47bbe9983af81f1e7450e9a3e3768f->enter($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block", "title"));
  143. // line 61
  144. yield " ";
  145. yield from $this->yieldParentBlock("title", $context, $blocks);
  146. yield " / Administration
  147. ";
  148. $__internal_6f47bbe9983af81f1e7450e9a3e3768f->leave($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof);
  149. $__internal_5a27a8ba21ca79b61932376b2fa922d2->leave($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof);
  150. yield from [];
  151. }
  152. // line 64
  153. /**
  154. * @return iterable<null|scalar|\Stringable>
  155. */
  156. public function block_main(array $context, array $blocks = []): iterable
  157. {
  158. $macros = $this->macros;
  159. $__internal_5a27a8ba21ca79b61932376b2fa922d2 = $this->extensions["Symfony\\Bundle\\WebProfilerBundle\\Twig\\WebProfilerExtension"];
  160. $__internal_5a27a8ba21ca79b61932376b2fa922d2->enter($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block", "main"));
  161. $__internal_6f47bbe9983af81f1e7450e9a3e3768f = $this->extensions["Symfony\\Bridge\\Twig\\Extension\\ProfilerExtension"];
  162. $__internal_6f47bbe9983af81f1e7450e9a3e3768f->enter($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block", "main"));
  163. // line 65
  164. yield "<div class=\"d-flex\">
  165. ";
  166. // line 68
  167. yield " ";
  168. yield from $this->unwrap()->yieldBlock('sidebar', $context, $blocks);
  169. // line 105
  170. yield "
  171. ";
  172. // line 107
  173. yield " <div class=\"flex-grow-1\">
  174. ";
  175. // line 109
  176. yield from $this->unwrap()->yieldBlock('header', $context, $blocks);
  177. // line 125
  178. yield "
  179. <section class=\"container-fluid mt-4\">
  180. ";
  181. // line 127
  182. if ((($tmp = $this->extensions['Symfony\Bridge\Twig\Extension\SecurityExtension']->isGranted("ROLE_ADMIN")) && $tmp instanceof Markup ? (string) $tmp : $tmp)) {
  183. // line 128
  184. yield " <div class=\"row mb-4\">
  185. <div class=\"col-md-3\">
  186. <div class=\"dashboard-card text-center\">
  187. <i class=\"fa fa-graduation-cap text-primary\"></i>
  188. <h4>";
  189. // line 132
  190. yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['App\Twig\StatExtension']->students(), "html", null, true);
  191. yield "</h4>
  192. <p>Élèves</p>
  193. </div>
  194. </div>
  195. <div class=\"col-md-3\">
  196. <div class=\"dashboard-card text-center\">
  197. <i class=\"fa fa-users text-success\"></i>
  198. <h4>";
  199. // line 139
  200. yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['App\Twig\StatExtension']->teachers(), "html", null, true);
  201. yield "</h4>
  202. <p>Enseignants</p>
  203. </div>
  204. </div>
  205. <div class=\"col-md-3\">
  206. <div class=\"dashboard-card text-center\">
  207. <i class=\"fa fa-home text-warning\"></i>
  208. <h4>";
  209. // line 146
  210. yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['App\Twig\StatExtension']->rooms(), "html", null, true);
  211. yield "</h4>
  212. <p>Classes</p>
  213. </div>
  214. </div>
  215. <div class=\"col-md-3\">
  216. <select class=\"form-control\" id=\"select_year\">
  217. ";
  218. // line 152
  219. $context['_parent'] = $context;
  220. $context['_seq'] = CoreExtension::ensureTraversable(Twig\Extension\CoreExtension::reverse($this->env->getCharset(), $this->extensions['App\Twig\AppExtension']->years()));
  221. foreach ($context['_seq'] as $context["_key"] => $context["year"]) {
  222. // line 153
  223. yield " <option value=\"";
  224. yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["year"], "id", [], "any", false, false, false, 153), "html", null, true);
  225. yield "\" ";
  226. if ((CoreExtension::getAttribute($this->env, $this->source, CoreExtension::getAttribute($this->env, $this->source, (isset($context["app"]) || array_key_exists("app", $context) ? $context["app"] : (function () { throw new RuntimeError('Variable "app" does not exist.', 153, $this->source); })()), "session", [], "any", false, false, false, 153), "get", ["session_school_year"], "method", false, false, false, 153) == CoreExtension::getAttribute($this->env, $this->source, $context["year"], "id", [], "any", false, false, false, 153))) {
  227. yield "selected";
  228. }
  229. yield ">";
  230. yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["year"], "code", [], "any", false, false, false, 153), "html", null, true);
  231. yield "</option>
  232. ";
  233. }
  234. $_parent = $context['_parent'];
  235. unset($context['_seq'], $context['_key'], $context['year'], $context['_parent']);
  236. $context = array_intersect_key($context, $_parent) + $_parent;
  237. // line 155
  238. yield " </select>
  239. </div>
  240. </div>
  241. ";
  242. }
  243. // line 159
  244. yield "
  245. ";
  246. // line 160
  247. yield from $this->unwrap()->yieldBlock('content', $context, $blocks);
  248. // line 161
  249. yield " </section>
  250. </div>
  251. </div>
  252. ";
  253. $__internal_6f47bbe9983af81f1e7450e9a3e3768f->leave($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof);
  254. $__internal_5a27a8ba21ca79b61932376b2fa922d2->leave($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof);
  255. yield from [];
  256. }
  257. // line 68
  258. /**
  259. * @return iterable<null|scalar|\Stringable>
  260. */
  261. public function block_sidebar(array $context, array $blocks = []): iterable
  262. {
  263. $macros = $this->macros;
  264. $__internal_5a27a8ba21ca79b61932376b2fa922d2 = $this->extensions["Symfony\\Bundle\\WebProfilerBundle\\Twig\\WebProfilerExtension"];
  265. $__internal_5a27a8ba21ca79b61932376b2fa922d2->enter($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block", "sidebar"));
  266. $__internal_6f47bbe9983af81f1e7450e9a3e3768f = $this->extensions["Symfony\\Bridge\\Twig\\Extension\\ProfilerExtension"];
  267. $__internal_6f47bbe9983af81f1e7450e9a3e3768f->enter($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block", "sidebar"));
  268. // line 69
  269. yield " <nav class=\"side-navbar\">
  270. <div class=\"side-navbar-wrapper\">
  271. ";
  272. // line 71
  273. yield from $this->unwrap()->yieldBlock('identification', $context, $blocks);
  274. // line 77
  275. yield "
  276. ";
  277. // line 78
  278. yield from $this->unwrap()->yieldBlock('menu', $context, $blocks);
  279. // line 102
  280. yield " </div>
  281. </nav>
  282. ";
  283. $__internal_6f47bbe9983af81f1e7450e9a3e3768f->leave($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof);
  284. $__internal_5a27a8ba21ca79b61932376b2fa922d2->leave($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof);
  285. yield from [];
  286. }
  287. // line 71
  288. /**
  289. * @return iterable<null|scalar|\Stringable>
  290. */
  291. public function block_identification(array $context, array $blocks = []): iterable
  292. {
  293. $macros = $this->macros;
  294. $__internal_5a27a8ba21ca79b61932376b2fa922d2 = $this->extensions["Symfony\\Bundle\\WebProfilerBundle\\Twig\\WebProfilerExtension"];
  295. $__internal_5a27a8ba21ca79b61932376b2fa922d2->enter($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block", "identification"));
  296. $__internal_6f47bbe9983af81f1e7450e9a3e3768f = $this->extensions["Symfony\\Bridge\\Twig\\Extension\\ProfilerExtension"];
  297. $__internal_6f47bbe9983af81f1e7450e9a3e3768f->enter($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block", "identification"));
  298. // line 72
  299. yield " <div class=\"sidenav-header text-center py-4\">
  300. <img src=\"";
  301. // line 73
  302. if ((($tmp = $this->extensions['Symfony\Bridge\Twig\Extension\SecurityExtension']->isGranted("IS_AUTHENTICATED_REMEMBERED")) && $tmp instanceof Markup ? (string) $tmp : $tmp)) {
  303. yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, CoreExtension::getAttribute($this->env, $this->source, (isset($context["app"]) || array_key_exists("app", $context) ? $context["app"] : (function () { throw new RuntimeError('Variable "app" does not exist.', 73, $this->source); })()), "user", [], "any", false, false, false, 73), "avatar", [75], "method", false, false, false, 73), "html", null, true);
  304. } else {
  305. yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl("img/avatar-2.jpg"), "html", null, true);
  306. }
  307. yield "\" alt=\"user-avatar\">
  308. <h6 class=\"text-white mt-2\">";
  309. // line 74
  310. if ((($tmp = CoreExtension::getAttribute($this->env, $this->source, (isset($context["app"]) || array_key_exists("app", $context) ? $context["app"] : (function () { throw new RuntimeError('Variable "app" does not exist.', 74, $this->source); })()), "user", [], "any", false, false, false, 74)) && $tmp instanceof Markup ? (string) $tmp : $tmp)) {
  311. yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, CoreExtension::getAttribute($this->env, $this->source, (isset($context["app"]) || array_key_exists("app", $context) ? $context["app"] : (function () { throw new RuntimeError('Variable "app" does not exist.', 74, $this->source); })()), "user", [], "any", false, false, false, 74), "username", [], "any", false, false, false, 74), "html", null, true);
  312. }
  313. yield "</h6>
  314. </div>
  315. ";
  316. $__internal_6f47bbe9983af81f1e7450e9a3e3768f->leave($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof);
  317. $__internal_5a27a8ba21ca79b61932376b2fa922d2->leave($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof);
  318. yield from [];
  319. }
  320. // line 78
  321. /**
  322. * @return iterable<null|scalar|\Stringable>
  323. */
  324. public function block_menu(array $context, array $blocks = []): iterable
  325. {
  326. $macros = $this->macros;
  327. $__internal_5a27a8ba21ca79b61932376b2fa922d2 = $this->extensions["Symfony\\Bundle\\WebProfilerBundle\\Twig\\WebProfilerExtension"];
  328. $__internal_5a27a8ba21ca79b61932376b2fa922d2->enter($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block", "menu"));
  329. $__internal_6f47bbe9983af81f1e7450e9a3e3768f = $this->extensions["Symfony\\Bridge\\Twig\\Extension\\ProfilerExtension"];
  330. $__internal_6f47bbe9983af81f1e7450e9a3e3768f->enter($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block", "menu"));
  331. // line 79
  332. yield " <ul class=\"list-unstyled\">
  333. ";
  334. // line 80
  335. if ((($tmp = $this->extensions['Symfony\Bridge\Twig\Extension\SecurityExtension']->isGranted("ROLE_ADMIN")) && $tmp instanceof Markup ? (string) $tmp : $tmp)) {
  336. // line 81
  337. yield " <li><a href=\"";
  338. yield $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("admin_school_years");
  339. yield "\"><i class=\"fa fa-calendar\"></i> Années scolaires</a></li>
  340. <li><a href=\"";
  341. // line 82
  342. yield $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("admin_quaters");
  343. yield "\"><i class=\"fa fa-calendar-check-o\"></i> Trimestres</a></li>
  344. <li><a href=\"";
  345. // line 83
  346. yield $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("admin_sequences");
  347. yield "\"><i class=\"fa fa-calendar-minus-o\"></i> Séquences</a></li>
  348. <li><a href=\"";
  349. // line 84
  350. yield $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("admin_programs");
  351. yield "\"><i class=\"fa fa-table\"></i> Programmes</a></li>
  352. <li><a href=\"";
  353. // line 85
  354. yield $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("admin_sections");
  355. yield "\"><i class=\"fa fa-th-large\"></i> Sections</a></li>
  356. <li><a href=\"";
  357. // line 86
  358. yield $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("admin_cycles");
  359. yield "\"><i class=\"fa fa-th-list\"></i> Cycles</a></li>
  360. <li><a href=\"";
  361. // line 87
  362. yield $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("admin_levels");
  363. yield "\"><i class=\"fa fa-list-ul\"></i> Niveaux</a></li>
  364. <li><a href=\"";
  365. // line 88
  366. yield $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("admin_classrooms");
  367. yield "\"><i class=\"fa fa-indent\"></i> Classes</a></li>
  368. <li><a href=\"";
  369. // line 89
  370. yield $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("admin_modules");
  371. yield "\"><i class=\"fa fa-folder-open-o\"></i> Module</a></li>
  372. <li><a href=\"";
  373. // line 90
  374. yield $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("admin_domains");
  375. yield "\"><i class=\"fa fa-user-md\"></i> Département</a></li>
  376. <li><a href=\"";
  377. // line 91
  378. yield $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("admin_courses");
  379. yield "\"><i class=\"fa fa-book\"></i> Matières</a></li>
  380. <li><a href=\"";
  381. // line 92
  382. yield $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("admin_subscriptions");
  383. yield "\"><i class=\"fa fa-exchange\"></i> Inscriptions</a></li>
  384. <li><a href=\"";
  385. // line 93
  386. yield $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("admin_students", ["type" => "new_students_not_yet_registered_checkbox"]);
  387. yield "\"><i class=\"fa fa-users\"></i> Élèves</a></li>
  388. <li><a href=\"";
  389. // line 94
  390. yield $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("admin_attributions");
  391. yield "\"><i class=\"fa fa-map-signs\"></i> Attributions</a></li>
  392. <li><a href=\"";
  393. // line 95
  394. yield $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("admin_users");
  395. yield "\"><i class=\"fa fa-user\"></i> Personnel</a></li>
  396. <li><a href=\"";
  397. // line 96
  398. yield $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("admin_statistics");
  399. yield "\"><i class=\"fa fa-area-chart\"></i> Statistiques</a></li>
  400. ";
  401. }
  402. // line 98
  403. yield " <li><a href=\"";
  404. yield $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("admin_evaluations");
  405. yield "\"><i class=\"fa fa-file-pdf-o\"></i> Evaluations</a></li>
  406. <li><a href=\"";
  407. // line 99
  408. yield $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("app_account");
  409. yield "\"><i class=\"fa fa-user-circle\"></i> Account</a></li>
  410. </ul>
  411. ";
  412. $__internal_6f47bbe9983af81f1e7450e9a3e3768f->leave($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof);
  413. $__internal_5a27a8ba21ca79b61932376b2fa922d2->leave($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof);
  414. yield from [];
  415. }
  416. // line 109
  417. /**
  418. * @return iterable<null|scalar|\Stringable>
  419. */
  420. public function block_header(array $context, array $blocks = []): iterable
  421. {
  422. $macros = $this->macros;
  423. $__internal_5a27a8ba21ca79b61932376b2fa922d2 = $this->extensions["Symfony\\Bundle\\WebProfilerBundle\\Twig\\WebProfilerExtension"];
  424. $__internal_5a27a8ba21ca79b61932376b2fa922d2->enter($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block", "header"));
  425. $__internal_6f47bbe9983af81f1e7450e9a3e3768f = $this->extensions["Symfony\\Bridge\\Twig\\Extension\\ProfilerExtension"];
  426. $__internal_6f47bbe9983af81f1e7450e9a3e3768f->enter($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block", "header"));
  427. // line 110
  428. yield " <header class=\"header d-flex align-items-center justify-content-between\">
  429. <a id=\"toggle-btn\" href=\"#\" class=\"menu-btn\"><i class=\"fa fa-bars\"></i></a>
  430. <a href=\"";
  431. // line 112
  432. yield $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("app_home");
  433. yield "\" class=\"navbar-brand text-center\">
  434. <strong class=\"text-primary\">SCHOOL MANAGEMENT SYSTEM</strong>
  435. </a>
  436. ";
  437. // line 115
  438. if ((($tmp = CoreExtension::getAttribute($this->env, $this->source, (isset($context["app"]) || array_key_exists("app", $context) ? $context["app"] : (function () { throw new RuntimeError('Variable "app" does not exist.', 115, $this->source); })()), "user", [], "any", false, false, false, 115)) && $tmp instanceof Markup ? (string) $tmp : $tmp)) {
  439. // line 116
  440. yield " <a id=\"logout_btn\" href=\"#\" onclick=\"event.preventDefault(); document.getElementById('js-logout-form').submit();\" class=\"btn btn-warning\">
  441. <i class=\"fa fa-sign-out\"></i>
  442. </a>
  443. <form id=\"js-logout-form\" action=\"";
  444. // line 119
  445. yield $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("app_logout");
  446. yield "\" style=\"display:none;\" method=\"POST\">
  447. <input type=\"hidden\" name=\"_csrf_token\" value=\"";
  448. // line 120
  449. yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->env->getRuntime('Symfony\Component\Form\FormRenderer')->renderCsrfToken("logout"), "html", null, true);
  450. yield "\">
  451. </form>
  452. ";
  453. }
  454. // line 123
  455. yield " </header>
  456. ";
  457. $__internal_6f47bbe9983af81f1e7450e9a3e3768f->leave($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof);
  458. $__internal_5a27a8ba21ca79b61932376b2fa922d2->leave($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof);
  459. yield from [];
  460. }
  461. // line 160
  462. /**
  463. * @return iterable<null|scalar|\Stringable>
  464. */
  465. public function block_content(array $context, array $blocks = []): iterable
  466. {
  467. $macros = $this->macros;
  468. $__internal_5a27a8ba21ca79b61932376b2fa922d2 = $this->extensions["Symfony\\Bundle\\WebProfilerBundle\\Twig\\WebProfilerExtension"];
  469. $__internal_5a27a8ba21ca79b61932376b2fa922d2->enter($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block", "content"));
  470. $__internal_6f47bbe9983af81f1e7450e9a3e3768f = $this->extensions["Symfony\\Bridge\\Twig\\Extension\\ProfilerExtension"];
  471. $__internal_6f47bbe9983af81f1e7450e9a3e3768f->enter($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block", "content"));
  472. $__internal_6f47bbe9983af81f1e7450e9a3e3768f->leave($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof);
  473. $__internal_5a27a8ba21ca79b61932376b2fa922d2->leave($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof);
  474. yield from [];
  475. }
  476. // line 168
  477. /**
  478. * @return iterable<null|scalar|\Stringable>
  479. */
  480. public function block_footer(array $context, array $blocks = []): iterable
  481. {
  482. $macros = $this->macros;
  483. $__internal_5a27a8ba21ca79b61932376b2fa922d2 = $this->extensions["Symfony\\Bundle\\WebProfilerBundle\\Twig\\WebProfilerExtension"];
  484. $__internal_5a27a8ba21ca79b61932376b2fa922d2->enter($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block", "footer"));
  485. $__internal_6f47bbe9983af81f1e7450e9a3e3768f = $this->extensions["Symfony\\Bridge\\Twig\\Extension\\ProfilerExtension"];
  486. $__internal_6f47bbe9983af81f1e7450e9a3e3768f->enter($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block", "footer"));
  487. $__internal_6f47bbe9983af81f1e7450e9a3e3768f->leave($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof);
  488. $__internal_5a27a8ba21ca79b61932376b2fa922d2->leave($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof);
  489. yield from [];
  490. }
  491. // line 170
  492. /**
  493. * @return iterable<null|scalar|\Stringable>
  494. */
  495. public function block_javascripts(array $context, array $blocks = []): iterable
  496. {
  497. $macros = $this->macros;
  498. $__internal_5a27a8ba21ca79b61932376b2fa922d2 = $this->extensions["Symfony\\Bundle\\WebProfilerBundle\\Twig\\WebProfilerExtension"];
  499. $__internal_5a27a8ba21ca79b61932376b2fa922d2->enter($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block", "javascripts"));
  500. $__internal_6f47bbe9983af81f1e7450e9a3e3768f = $this->extensions["Symfony\\Bridge\\Twig\\Extension\\ProfilerExtension"];
  501. $__internal_6f47bbe9983af81f1e7450e9a3e3768f->enter($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block", "javascripts"));
  502. // line 171
  503. yield from $this->yieldParentBlock("javascripts", $context, $blocks);
  504. yield "
  505. <script src=\"";
  506. // line 172
  507. yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl("assets/js/jquery.cookie.js"), "html", null, true);
  508. yield "\"></script>
  509. <script src=\"";
  510. // line 173
  511. yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl("assets/js/grasp_mobile_progress_circle-1.0.0.min.js"), "html", null, true);
  512. yield "\"></script>
  513. <script src=\"";
  514. // line 174
  515. yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl("assets/js/jquery.validate.min.js"), "html", null, true);
  516. yield "\"></script>
  517. <script src=\"";
  518. // line 175
  519. yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl("assets/js/jquery.mCustomScrollbar.concat.min.js"), "html", null, true);
  520. yield "\"></script>
  521. <script>
  522. // Toggle sidebar menu
  523. \$('#toggle-btn').on('click', function(e) {
  524. e.preventDefault();
  525. \$('.side-navbar').toggleClass('collapsed');
  526. });
  527. // Changement d'année scolaire
  528. \$('#select_year').on('change', function() {
  529. \$.ajax({
  530. type: \"POST\",
  531. url: \"";
  532. // line 188
  533. yield $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("update_school_year");
  534. yield "\",
  535. data: { selectedSchoolYear: \$(this).val() },
  536. success: function(){ location.reload(); },
  537. error: function(e){ console.log(e); alert(\"Echec.\"); }
  538. });
  539. });
  540. </script>
  541. ";
  542. $__internal_6f47bbe9983af81f1e7450e9a3e3768f->leave($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof);
  543. $__internal_5a27a8ba21ca79b61932376b2fa922d2->leave($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof);
  544. yield from [];
  545. }
  546. /**
  547. * @codeCoverageIgnore
  548. */
  549. public function getTemplateName(): string
  550. {
  551. return "layout/backEndLayout.html.twig";
  552. }
  553. /**
  554. * @codeCoverageIgnore
  555. */
  556. public function isTraitable(): bool
  557. {
  558. return false;
  559. }
  560. /**
  561. * @codeCoverageIgnore
  562. */
  563. public function getDebugInfo(): array
  564. {
  565. return array ( 625 => 188, 609 => 175, 605 => 174, 601 => 173, 597 => 172, 593 => 171, 580 => 170, 558 => 168, 536 => 160, 524 => 123, 518 => 120, 514 => 119, 509 => 116, 507 => 115, 501 => 112, 497 => 110, 484 => 109, 470 => 99, 465 => 98, 460 => 96, 456 => 95, 452 => 94, 448 => 93, 444 => 92, 440 => 91, 436 => 90, 432 => 89, 428 => 88, 424 => 87, 420 => 86, 416 => 85, 412 => 84, 408 => 83, 404 => 82, 399 => 81, 397 => 80, 394 => 79, 381 => 78, 365 => 74, 357 => 73, 354 => 72, 341 => 71, 328 => 102, 326 => 78, 323 => 77, 321 => 71, 317 => 69, 304 => 68, 288 => 161, 286 => 160, 283 => 159, 277 => 155, 262 => 153, 258 => 152, 249 => 146, 239 => 139, 229 => 132, 223 => 128, 221 => 127, 217 => 125, 215 => 109, 211 => 107, 208 => 105, 205 => 68, 201 => 65, 188 => 64, 174 => 61, 161 => 60, 98 => 7, 94 => 6, 90 => 5, 85 => 4, 72 => 3, 49 => 1,);
  566. }
  567. public function getSourceContext(): Source
  568. {
  569. return new Source("{% extends 'layout/base.html.twig' %}
  570. {% block stylesheets %}
  571. {{ parent() }}
  572. <link rel=\"stylesheet\" href=\"{{ asset('assets/css/style.blue.css') }}\">
  573. <link rel=\"stylesheet\" href=\"{{ asset('assets/css/jquery.mCustomScrollbar.css') }}\">
  574. <link rel=\"stylesheet\" href=\"{{ asset('assets/cdnjs.cloudflare.com/ajax/libs/Chart.js/2.9.3/Chart.min.css') }}\">
  575. <style>
  576. /* Sidebar */
  577. .side-navbar {
  578. position: fixed;
  579. top: 0;
  580. left: 0;
  581. width: 220px;
  582. height: 100vh;
  583. background: #2f3e47;
  584. color: white;
  585. overflow-y: auto;
  586. transition: all 0.3s ease;
  587. z-index: 999;
  588. }
  589. .side-navbar a { color: #d1d4d6; display:block; padding:10px 15px; }
  590. .side-navbar a:hover { background:#1e2a31; color:white; }
  591. .sidenav-header img { width:70px; border-radius:50%; margin-bottom:10px; }
  592. /* Collapsed sidebar (mobile) */
  593. .side-navbar.collapsed {
  594. left: -220px;
  595. }
  596. /* Content */
  597. .flex-grow-1 {
  598. margin-left: 220px;
  599. transition: margin 0.3s ease;
  600. }
  601. .side-navbar.collapsed ~ .flex-grow-1 {
  602. margin-left: 0;
  603. }
  604. /* Header */
  605. .header { background:white; border-bottom:1px solid #eee; padding:10px 20px; display:flex; justify-content:space-between; align-items:center; }
  606. /* Dashboard cards */
  607. .dashboard-card { background:white; border-radius:8px; padding:15px; box-shadow:0 2px 6px rgba(0,0,0,0.1); text-align:center; }
  608. .dashboard-card i { font-size:2em; margin-bottom:5px; }
  609. /* Toggle button */
  610. #toggle-btn { font-size:1.3em; cursor:pointer; color:#2f3e47; }
  611. /* Responsive */
  612. @media (max-width: 768px) {
  613. .flex-grow-1 { margin-left: 0; }
  614. .side-navbar { left: -220px; }
  615. .side-navbar.collapsed { left: 0; }
  616. }
  617. </style>
  618. {% endblock %}
  619. {% block title %}
  620. {{ parent() }} / Administration
  621. {% endblock %}
  622. {% block main %}
  623. <div class=\"d-flex\">
  624. {# Sidebar #}
  625. {% block sidebar %}
  626. <nav class=\"side-navbar\">
  627. <div class=\"side-navbar-wrapper\">
  628. {% block identification %}
  629. <div class=\"sidenav-header text-center py-4\">
  630. <img src=\"{% if is_granted('IS_AUTHENTICATED_REMEMBERED') %}{{ app.user.avatar(75) }}{% else %}{{ asset('img/avatar-2.jpg') }}{% endif %}\" alt=\"user-avatar\">
  631. <h6 class=\"text-white mt-2\">{% if app.user %}{{ app.user.username }}{% endif %}</h6>
  632. </div>
  633. {% endblock %}
  634. {% block menu %}
  635. <ul class=\"list-unstyled\">
  636. {% if is_granted('ROLE_ADMIN') %}
  637. <li><a href=\"{{ path('admin_school_years') }}\"><i class=\"fa fa-calendar\"></i> Années scolaires</a></li>
  638. <li><a href=\"{{ path('admin_quaters') }}\"><i class=\"fa fa-calendar-check-o\"></i> Trimestres</a></li>
  639. <li><a href=\"{{ path('admin_sequences') }}\"><i class=\"fa fa-calendar-minus-o\"></i> Séquences</a></li>
  640. <li><a href=\"{{ path('admin_programs') }}\"><i class=\"fa fa-table\"></i> Programmes</a></li>
  641. <li><a href=\"{{ path('admin_sections') }}\"><i class=\"fa fa-th-large\"></i> Sections</a></li>
  642. <li><a href=\"{{ path('admin_cycles') }}\"><i class=\"fa fa-th-list\"></i> Cycles</a></li>
  643. <li><a href=\"{{ path('admin_levels') }}\"><i class=\"fa fa-list-ul\"></i> Niveaux</a></li>
  644. <li><a href=\"{{ path('admin_classrooms') }}\"><i class=\"fa fa-indent\"></i> Classes</a></li>
  645. <li><a href=\"{{ path('admin_modules') }}\"><i class=\"fa fa-folder-open-o\"></i> Module</a></li>
  646. <li><a href=\"{{ path('admin_domains') }}\"><i class=\"fa fa-user-md\"></i> Département</a></li>
  647. <li><a href=\"{{ path('admin_courses') }}\"><i class=\"fa fa-book\"></i> Matières</a></li>
  648. <li><a href=\"{{ path('admin_subscriptions') }}\"><i class=\"fa fa-exchange\"></i> Inscriptions</a></li>
  649. <li><a href=\"{{ path('admin_students', {'type': 'new_students_not_yet_registered_checkbox'}) }}\"><i class=\"fa fa-users\"></i> Élèves</a></li>
  650. <li><a href=\"{{ path('admin_attributions') }}\"><i class=\"fa fa-map-signs\"></i> Attributions</a></li>
  651. <li><a href=\"{{ path('admin_users') }}\"><i class=\"fa fa-user\"></i> Personnel</a></li>
  652. <li><a href=\"{{ path('admin_statistics') }}\"><i class=\"fa fa-area-chart\"></i> Statistiques</a></li>
  653. {% endif %}
  654. <li><a href=\"{{ path('admin_evaluations') }}\"><i class=\"fa fa-file-pdf-o\"></i> Evaluations</a></li>
  655. <li><a href=\"{{ path('app_account') }}\"><i class=\"fa fa-user-circle\"></i> Account</a></li>
  656. </ul>
  657. {% endblock %}
  658. </div>
  659. </nav>
  660. {% endblock %}
  661. {# Contenu principal #}
  662. <div class=\"flex-grow-1\">
  663. {% block header %}
  664. <header class=\"header d-flex align-items-center justify-content-between\">
  665. <a id=\"toggle-btn\" href=\"#\" class=\"menu-btn\"><i class=\"fa fa-bars\"></i></a>
  666. <a href=\"{{ path('app_home') }}\" class=\"navbar-brand text-center\">
  667. <strong class=\"text-primary\">SCHOOL MANAGEMENT SYSTEM</strong>
  668. </a>
  669. {% if app.user %}
  670. <a id=\"logout_btn\" href=\"#\" onclick=\"event.preventDefault(); document.getElementById('js-logout-form').submit();\" class=\"btn btn-warning\">
  671. <i class=\"fa fa-sign-out\"></i>
  672. </a>
  673. <form id=\"js-logout-form\" action=\"{{ path('app_logout') }}\" style=\"display:none;\" method=\"POST\">
  674. <input type=\"hidden\" name=\"_csrf_token\" value=\"{{ csrf_token('logout') }}\">
  675. </form>
  676. {% endif %}
  677. </header>
  678. {% endblock %}
  679. <section class=\"container-fluid mt-4\">
  680. {% if is_granted('ROLE_ADMIN') %}
  681. <div class=\"row mb-4\">
  682. <div class=\"col-md-3\">
  683. <div class=\"dashboard-card text-center\">
  684. <i class=\"fa fa-graduation-cap text-primary\"></i>
  685. <h4>{{ students_count() }}</h4>
  686. <p>Élèves</p>
  687. </div>
  688. </div>
  689. <div class=\"col-md-3\">
  690. <div class=\"dashboard-card text-center\">
  691. <i class=\"fa fa-users text-success\"></i>
  692. <h4>{{ teachers_count() }}</h4>
  693. <p>Enseignants</p>
  694. </div>
  695. </div>
  696. <div class=\"col-md-3\">
  697. <div class=\"dashboard-card text-center\">
  698. <i class=\"fa fa-home text-warning\"></i>
  699. <h4>{{ rooms_count() }}</h4>
  700. <p>Classes</p>
  701. </div>
  702. </div>
  703. <div class=\"col-md-3\">
  704. <select class=\"form-control\" id=\"select_year\">
  705. {% for year in years()|reverse %}
  706. <option value=\"{{ year.id }}\" {% if app.session.get('session_school_year') == year.id %}selected{% endif %}>{{ year.code }}</option>
  707. {% endfor %}
  708. </select>
  709. </div>
  710. </div>
  711. {% endif %}
  712. {% block content %}{% endblock %}
  713. </section>
  714. </div>
  715. </div>
  716. {% endblock %}
  717. {% block footer %}{% endblock %}
  718. {% block javascripts %}
  719. {{ parent() }}
  720. <script src=\"{{ asset('assets/js/jquery.cookie.js') }}\"></script>
  721. <script src=\"{{ asset('assets/js/grasp_mobile_progress_circle-1.0.0.min.js') }}\"></script>
  722. <script src=\"{{ asset('assets/js/jquery.validate.min.js') }}\"></script>
  723. <script src=\"{{ asset('assets/js/jquery.mCustomScrollbar.concat.min.js') }}\"></script>
  724. <script>
  725. // Toggle sidebar menu
  726. \$('#toggle-btn').on('click', function(e) {
  727. e.preventDefault();
  728. \$('.side-navbar').toggleClass('collapsed');
  729. });
  730. // Changement d'année scolaire
  731. \$('#select_year').on('change', function() {
  732. \$.ajax({
  733. type: \"POST\",
  734. url: \"{{ path('update_school_year') }}\",
  735. data: { selectedSchoolYear: \$(this).val() },
  736. success: function(){ location.reload(); },
  737. error: function(e){ console.log(e); alert(\"Echec.\"); }
  738. });
  739. });
  740. </script>
  741. {% endblock %}", "layout/backEndLayout.html.twig", "/var/www/bethesda/templates/layout/backEndLayout.html.twig");
  742. }
  743. }