var/cache/dev/twig/7a/7a0cb9aa0749c21dc44fc893eb6cda1e.php line 45

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. /* school/index.html.twig */
  16. class __TwigTemplate_9fead5845ecafbb027012398c54b664e 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. 'name' => [$this, 'block_name'],
  29. 'body' => [$this, 'block_body'],
  30. 'javascripts' => [$this, 'block_javascripts'],
  31. ];
  32. }
  33. protected function doGetParent(array $context): bool|string|Template|TemplateWrapper
  34. {
  35. // line 1
  36. return "layout/frontEndLayout.html.twig";
  37. }
  38. protected function doDisplay(array $context, array $blocks = []): iterable
  39. {
  40. $macros = $this->macros;
  41. $__internal_5a27a8ba21ca79b61932376b2fa922d2 = $this->extensions["Symfony\\Bundle\\WebProfilerBundle\\Twig\\WebProfilerExtension"];
  42. $__internal_5a27a8ba21ca79b61932376b2fa922d2->enter($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "template", "school/index.html.twig"));
  43. $__internal_6f47bbe9983af81f1e7450e9a3e3768f = $this->extensions["Symfony\\Bridge\\Twig\\Extension\\ProfilerExtension"];
  44. $__internal_6f47bbe9983af81f1e7450e9a3e3768f->enter($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "template", "school/index.html.twig"));
  45. $this->parent = $this->load("layout/frontEndLayout.html.twig", 1);
  46. yield from $this->parent->unwrap()->yield($context, array_merge($this->blocks, $blocks));
  47. $__internal_5a27a8ba21ca79b61932376b2fa922d2->leave($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof);
  48. $__internal_6f47bbe9983af81f1e7450e9a3e3768f->leave($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof);
  49. }
  50. // line 3
  51. /**
  52. * @return iterable<null|scalar|\Stringable>
  53. */
  54. public function block_name(array $context, array $blocks = []): iterable
  55. {
  56. $macros = $this->macros;
  57. $__internal_5a27a8ba21ca79b61932376b2fa922d2 = $this->extensions["Symfony\\Bundle\\WebProfilerBundle\\Twig\\WebProfilerExtension"];
  58. $__internal_5a27a8ba21ca79b61932376b2fa922d2->enter($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block", "name"));
  59. $__internal_6f47bbe9983af81f1e7450e9a3e3768f = $this->extensions["Symfony\\Bridge\\Twig\\Extension\\ProfilerExtension"];
  60. $__internal_6f47bbe9983af81f1e7450e9a3e3768f->enter($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block", "name"));
  61. // line 4
  62. yield " Welcome to LiveEdu
  63. ";
  64. $__internal_6f47bbe9983af81f1e7450e9a3e3768f->leave($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof);
  65. $__internal_5a27a8ba21ca79b61932376b2fa922d2->leave($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof);
  66. yield from [];
  67. }
  68. // line 8
  69. /**
  70. * @return iterable<null|scalar|\Stringable>
  71. */
  72. public function block_body(array $context, array $blocks = []): iterable
  73. {
  74. $macros = $this->macros;
  75. $__internal_5a27a8ba21ca79b61932376b2fa922d2 = $this->extensions["Symfony\\Bundle\\WebProfilerBundle\\Twig\\WebProfilerExtension"];
  76. $__internal_5a27a8ba21ca79b61932376b2fa922d2->enter($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block", "body"));
  77. $__internal_6f47bbe9983af81f1e7450e9a3e3768f = $this->extensions["Symfony\\Bridge\\Twig\\Extension\\ProfilerExtension"];
  78. $__internal_6f47bbe9983af81f1e7450e9a3e3768f->enter($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block", "body"));
  79. // line 9
  80. yield "
  81. <div id=\"carouselExampleControls\" class=\"carousel slide bs-slider box-slider\" data-ride=\"carousel\" data-pause=\"hover\" data-interval=\"false\">
  82. <!-- Indicators -->
  83. <ol class=\"carousel-indicators\">
  84. <li data-target=\"#carouselExampleControls\" data-slide-to=\"0\" class=\"active\"></li>
  85. <li data-target=\"#carouselExampleControls\" data-slide-to=\"1\"></li>
  86. <li data-target=\"#carouselExampleControls\" data-slide-to=\"2\"></li>
  87. </ol>
  88. <div class=\"carousel-inner\" role=\"listbox\" data-ride=\"carousel\"
  89. data-interval=\"5000\">
  90. <div class=\"carousel-item active\">
  91. <div id=\"home\" class=\"first-section\" style=\"background-image:url(";
  92. // line 20
  93. yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl("assets/images/slider-01.jpg"), "html", null, true);
  94. yield ");\">
  95. <div class=\"dtab\">
  96. <div class=\"container\">
  97. <div class=\"row\">
  98. <div class=\"col-md-12 col-sm-12 text-right\">
  99. <div class=\"big-tagline\">
  100. <h2>
  101. Bilingual Secondary Institute BETHESDA implements
  102. \t\t\t\t\t\t\t\t\t\t\t
  103. <strong>
  104. \t\t\t\t\t\t\t\t\t\t\t
  105. LiveEdu
  106. </strong>
  107. </h2>
  108. </div>
  109. </div>
  110. </div>
  111. <!-- end row -->
  112. <br/>
  113. <br/>
  114. <br/>
  115. <br/>
  116. <br/>
  117. <br/>
  118. <br/>
  119. <br/>
  120. <br/>
  121. <br/>
  122. <br/>
  123. <br/>
  124. <br/>
  125. <br/>
  126. </div>
  127. <!-- end container -->
  128. </div>
  129. </div>
  130. <!-- end section -->
  131. </div>
  132. <div class=\"carousel-item\">
  133. <div id=\"home\" class=\"first-section\" style=\"background-image:url(";
  134. // line 125
  135. yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl("assets/images/slider-02.jpg"), "html", null, true);
  136. yield ");\">
  137. <div class=\"dtab\">
  138. <div class=\"container\">
  139. <div class=\"row\">
  140. <div class=\"col-md-12 col-sm-12 text-left\">
  141. <div class=\"big-tagline\">
  142. <h2 data-animation=\"animated zoomInRight\">
  143. LiveEdu
  144. \t\t\t\t\t\t\t\t\t\t\t
  145. <strong>
  146. software online services
  147. </strong>
  148. </h2>
  149. </div>
  150. </div>
  151. </div>
  152. <!-- end row -->
  153. <br/>
  154. <br/>
  155. <br/>
  156. <br/>
  157. <br/>
  158. <br/>
  159. <br/>
  160. <br/>
  161. <br/>
  162. <br/>
  163. <br/>
  164. <br/>
  165. <br/>
  166. <br/>
  167. </div>
  168. <!-- end container -->
  169. </div>
  170. </div>
  171. <!-- end section -->
  172. </div>
  173. <div class=\"carousel-item\">
  174. <div id=\"home\" class=\"first-section\" style=\"background-image:url(";
  175. // line 228
  176. yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl("assets/images/slide_04.PNG"), "html", null, true);
  177. yield ");\">
  178. <div class=\"dtab\">
  179. <div class=\"container\">
  180. <div class=\"row\">
  181. <div class=\"col-md-12 col-sm-12 text-left\">
  182. <div class=\"big-tagline\">
  183. <h2 data-animation=\"animated zoomInRight\">
  184. \t\t\t\t\t\t\t\t\t\t\t
  185. <strong>
  186. LiveEdu adds transparancy
  187. </strong>
  188. for quality education
  189. </h2>
  190. </div>
  191. </div>
  192. </div>
  193. <!-- end row -->
  194. <br/>
  195. <br/>
  196. <br/>
  197. <br/>
  198. <br/>
  199. <br/>
  200. <br/>
  201. <br/>
  202. <br/>
  203. <br/>
  204. <br/>
  205. <br/>
  206. <br/>
  207. <br/>
  208. </div>
  209. <!-- end container -->
  210. </div>
  211. </div>
  212. <!-- end section -->
  213. </div>
  214. <!-- Left Control -->
  215. <a class=\"new-effect carousel-control-prev\" href=\"#carouselExampleControls\" role=\"button\" data-slide=\"prev\">
  216. <span class=\"fa fa-angle-left\" aria-hidden=\"true\"></span>
  217. <span class=\"sr-only\">
  218. Previous
  219. </span>
  220. </a>
  221. <!-- Right Control -->
  222. <a class=\"new-effect carousel-control-next\" href=\"#carouselExampleControls\" role=\"button\" data-slide=\"next\">
  223. <span class=\"fa fa-angle-right\" aria-hidden=\"true\"></span>
  224. <span class=\"sr-only\">
  225. Next
  226. </span>
  227. </a>
  228. </div>
  229. </div>
  230. <section class=\"card\">
  231. <article class=\"row card-body\" id=\"officialExams\">
  232. <h1 class=\"card-title text-center\">Taux de reussite aux examens officiels session ";
  233. // line 446
  234. yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, (isset($context["year"]) || array_key_exists("year", $context) ? $context["year"] : (function () { throw new RuntimeError('Variable "year" does not exist.', 446, $this->source); })()), "code", [], "any", false, false, false, 446), "html", null, true);
  235. yield "</h1>
  236. ";
  237. // line 447
  238. $context['_parent'] = $context;
  239. $context['_seq'] = CoreExtension::ensureTraversable(Twig\Extension\CoreExtension::keys((isset($context["results"]) || array_key_exists("results", $context) ? $context["results"] : (function () { throw new RuntimeError('Variable "results" does not exist.', 447, $this->source); })())));
  240. foreach ($context['_seq'] as $context["_key"] => $context["key"]) {
  241. // line 448
  242. yield " <div class=\"col-6 col-md-3 \" >
  243. <canvas id=";
  244. // line 449
  245. yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($context["key"], "html", null, true);
  246. yield " height=\"120\" data-exam-objects=\" ";
  247. yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, (isset($context["results"]) || array_key_exists("results", $context) ? $context["results"] : (function () { throw new RuntimeError('Variable "results" does not exist.', 449, $this->source); })()), $context["key"], [], "array", false, false, false, 449), "html", null, true);
  248. yield "\"></canvas>
  249. </div>
  250. ";
  251. }
  252. $_parent = $context['_parent'];
  253. unset($context['_seq'], $context['_key'], $context['key'], $context['_parent']);
  254. $context = array_intersect_key($context, $_parent) + $_parent;
  255. // line 452
  256. yield " </article>
  257. </section>
  258. ";
  259. $__internal_6f47bbe9983af81f1e7450e9a3e3768f->leave($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof);
  260. $__internal_5a27a8ba21ca79b61932376b2fa922d2->leave($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof);
  261. yield from [];
  262. }
  263. // line 457
  264. /**
  265. * @return iterable<null|scalar|\Stringable>
  266. */
  267. public function block_javascripts(array $context, array $blocks = []): iterable
  268. {
  269. $macros = $this->macros;
  270. $__internal_5a27a8ba21ca79b61932376b2fa922d2 = $this->extensions["Symfony\\Bundle\\WebProfilerBundle\\Twig\\WebProfilerExtension"];
  271. $__internal_5a27a8ba21ca79b61932376b2fa922d2->enter($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block", "javascripts"));
  272. $__internal_6f47bbe9983af81f1e7450e9a3e3768f = $this->extensions["Symfony\\Bridge\\Twig\\Extension\\ProfilerExtension"];
  273. $__internal_6f47bbe9983af81f1e7450e9a3e3768f->enter($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block", "javascripts"));
  274. // line 458
  275. yield " ";
  276. yield from $this->yieldParentBlock("javascripts", $context, $blocks);
  277. yield "
  278. <script type=\"text/javascript\">
  279. //Generate a random color
  280. const randomRgbColor = (type) => {
  281. if (type === \"ECHEC\") {
  282. return \"rgb(255,0,0)\"; // rouge pur
  283. } else {
  284. // Couleurs aléatoires pour les autres
  285. let r = Math.floor(Math.random() * 256);
  286. let g = Math.floor(Math.random() * 256);
  287. let b = Math.floor(Math.random() * 256);
  288. return `rgb(\${r},\${g},\${b})`;
  289. }
  290. ;
  291. };
  292. const colors=[], datasets = [];
  293. const troisiemeAllExamsGraph = \$(\"#troisiemeall\"), troisiemeEspExamsGraph = \$(\"#troisiemeesp\") ,
  294. premiereCExamsGraph = \$(\"#premiere_c\"), premiereDExamsGraph = \$(\"#premiere_d\") ,
  295. premiereAEspExamsGraph = \$(\"#premierea4esp\"), premiereAAllExamsGraph = \$(\"#premierea4all\"),
  296. terminaleCExamsGraph = \$(\"#terminalec\"), terminaleDExamsGraph = \$(\"#terminale_d\") ,
  297. terminaleAEspExamsGraph = \$(\"#terminaleaesp\"), terminaleAAllExamsGraph = \$(\"#terminaleaall\"),
  298. formvArtExamsGraph = \$(\"#formvarts\"), formvScienceExamsGraph = \$(\"#formvscience\")
  299. ;
  300. const troisiemeAllExamsData = troisiemeAllExamsGraph.data('examObjects'), troisiemeEspExamsData = troisiemeEspExamsGraph.data('examObjects'),
  301. premiereCExamsData = premiereCExamsGraph.data('examObjects'), premiereDExamsData = premiereDExamsGraph.data('examObjects'),
  302. premiereAEspExamsData = premiereAEspExamsGraph.data('examObjects'), premiereAAllExamsData = premiereAAllExamsGraph.data('examObjects'),
  303. terminaleCExamsData = terminaleCExamsGraph.data('examObjects'), terminaleDExamsData = terminaleDExamsGraph.data('examObjects'),
  304. terminaleAEspExamsData = terminaleAEspExamsGraph.data('examObjects'), terminaleAAllExamsData = terminaleAAllExamsGraph.data('examObjects'),
  305. formvArtExamsData = formvArtExamsGraph.data('examObjects'),formvScienceExamsData = formvScienceExamsGraph.data('examObjects');
  306. // Draw the graph of official exam results
  307. // Draw the graph of official exam results
  308. const drawCanvas = (examData, examGraph, name) => {
  309. // Parser une seule fois au lieu de 3
  310. const parsedData = JSON.parse(examData);
  311. // Convertir explicitement en nombres
  312. const values = parsedData[\"mentionCountCategories\"].map(v => Number(v));
  313. // Vérifier si des valeurs sont invalides
  314. console.log(\"➡️ Graph:\", name, \"Labels:\", parsedData[\"mentionCategories\"], \"Values:\", values);
  315. // Générer les couleurs
  316. const colors = parsedData[\"mentionCategories\"].map(cat => randomRgbColor(cat));
  317. // Créer le graphe
  318. const examChart = new Chart(examGraph, {
  319. type: \"doughnut\",
  320. data: {
  321. labels: parsedData[\"mentionCategories\"],
  322. datasets: [{
  323. data: values,
  324. backgroundColor: colors
  325. }]
  326. },
  327. options: {
  328. cutout: \"70%\",
  329. plugins: {
  330. title: {
  331. display: true,
  332. text: name,
  333. font: {
  334. size: 16,
  335. family: 'Helvetica Neue',
  336. },
  337. position: 'bottom',
  338. }
  339. }
  340. }
  341. });
  342. };
  343. // Disposition des canVas dans le frontEnd
  344. drawCanvas(terminaleDExamsData,terminaleDExamsGraph , \"Terminale D\" );
  345. drawCanvas(terminaleCExamsData,terminaleCExamsGraph , \"Terminale C\" );
  346. drawCanvas(terminaleAAllExamsData,terminaleAAllExamsGraph , \"Terminale A All\" );
  347. drawCanvas(terminaleAEspExamsData,terminaleAEspExamsGraph , \"Terminale A Esp\" );
  348. drawCanvas(premiereAAllExamsData,premiereAAllExamsGraph , \"Premiere A All\" );
  349. drawCanvas(premiereAEspExamsData,premiereAEspExamsGraph , \"Premiere A Esp\" );
  350. drawCanvas(premiereCExamsData,premiereCExamsGraph , \"Premiere C\" );
  351. drawCanvas(premiereDExamsData,premiereDExamsGraph , \"Premiere D\" );
  352. drawCanvas(troisiemeAllExamsData,troisiemeAllExamsGraph , \"Troisieme All\" );
  353. drawCanvas(troisiemeEspExamsData,troisiemeEspExamsGraph , \"Troisieme Esp\" );
  354. drawCanvas(formvArtExamsData,formvArtExamsGraph , \"FORM 5 Art(.../5)\" );
  355. drawCanvas(formvScienceExamsData,formvScienceExamsGraph , \"FORM 5 Science(../5)\" );
  356. </script>
  357. ";
  358. $__internal_6f47bbe9983af81f1e7450e9a3e3768f->leave($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof);
  359. $__internal_5a27a8ba21ca79b61932376b2fa922d2->leave($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof);
  360. yield from [];
  361. }
  362. /**
  363. * @codeCoverageIgnore
  364. */
  365. public function getTemplateName(): string
  366. {
  367. return "school/index.html.twig";
  368. }
  369. /**
  370. * @codeCoverageIgnore
  371. */
  372. public function isTraitable(): bool
  373. {
  374. return false;
  375. }
  376. /**
  377. * @codeCoverageIgnore
  378. */
  379. public function getDebugInfo(): array
  380. {
  381. return array ( 602 => 458, 589 => 457, 574 => 452, 563 => 449, 560 => 448, 556 => 447, 552 => 446, 331 => 228, 225 => 125, 117 => 20, 104 => 9, 91 => 8, 78 => 4, 65 => 3, 42 => 1,);
  382. }
  383. public function getSourceContext(): Source
  384. {
  385. return new Source("{% extends 'layout/frontEndLayout.html.twig' %}
  386. {% block name %}
  387. Welcome to LiveEdu
  388. {% endblock %}
  389. {% block body %}
  390. <div id=\"carouselExampleControls\" class=\"carousel slide bs-slider box-slider\" data-ride=\"carousel\" data-pause=\"hover\" data-interval=\"false\">
  391. <!-- Indicators -->
  392. <ol class=\"carousel-indicators\">
  393. <li data-target=\"#carouselExampleControls\" data-slide-to=\"0\" class=\"active\"></li>
  394. <li data-target=\"#carouselExampleControls\" data-slide-to=\"1\"></li>
  395. <li data-target=\"#carouselExampleControls\" data-slide-to=\"2\"></li>
  396. </ol>
  397. <div class=\"carousel-inner\" role=\"listbox\" data-ride=\"carousel\"
  398. data-interval=\"5000\">
  399. <div class=\"carousel-item active\">
  400. <div id=\"home\" class=\"first-section\" style=\"background-image:url({{ asset('assets/images/slider-01.jpg') }});\">
  401. <div class=\"dtab\">
  402. <div class=\"container\">
  403. <div class=\"row\">
  404. <div class=\"col-md-12 col-sm-12 text-right\">
  405. <div class=\"big-tagline\">
  406. <h2>
  407. Bilingual Secondary Institute BETHESDA implements
  408. \t\t\t\t\t\t\t\t\t\t\t
  409. <strong>
  410. \t\t\t\t\t\t\t\t\t\t\t
  411. LiveEdu
  412. </strong>
  413. </h2>
  414. </div>
  415. </div>
  416. </div>
  417. <!-- end row -->
  418. <br/>
  419. <br/>
  420. <br/>
  421. <br/>
  422. <br/>
  423. <br/>
  424. <br/>
  425. <br/>
  426. <br/>
  427. <br/>
  428. <br/>
  429. <br/>
  430. <br/>
  431. <br/>
  432. </div>
  433. <!-- end container -->
  434. </div>
  435. </div>
  436. <!-- end section -->
  437. </div>
  438. <div class=\"carousel-item\">
  439. <div id=\"home\" class=\"first-section\" style=\"background-image:url({{ asset('assets/images/slider-02.jpg') }});\">
  440. <div class=\"dtab\">
  441. <div class=\"container\">
  442. <div class=\"row\">
  443. <div class=\"col-md-12 col-sm-12 text-left\">
  444. <div class=\"big-tagline\">
  445. <h2 data-animation=\"animated zoomInRight\">
  446. LiveEdu
  447. \t\t\t\t\t\t\t\t\t\t\t
  448. <strong>
  449. software online services
  450. </strong>
  451. </h2>
  452. </div>
  453. </div>
  454. </div>
  455. <!-- end row -->
  456. <br/>
  457. <br/>
  458. <br/>
  459. <br/>
  460. <br/>
  461. <br/>
  462. <br/>
  463. <br/>
  464. <br/>
  465. <br/>
  466. <br/>
  467. <br/>
  468. <br/>
  469. <br/>
  470. </div>
  471. <!-- end container -->
  472. </div>
  473. </div>
  474. <!-- end section -->
  475. </div>
  476. <div class=\"carousel-item\">
  477. <div id=\"home\" class=\"first-section\" style=\"background-image:url({{ asset('assets/images/slide_04.PNG') }});\">
  478. <div class=\"dtab\">
  479. <div class=\"container\">
  480. <div class=\"row\">
  481. <div class=\"col-md-12 col-sm-12 text-left\">
  482. <div class=\"big-tagline\">
  483. <h2 data-animation=\"animated zoomInRight\">
  484. \t\t\t\t\t\t\t\t\t\t\t
  485. <strong>
  486. LiveEdu adds transparancy
  487. </strong>
  488. for quality education
  489. </h2>
  490. </div>
  491. </div>
  492. </div>
  493. <!-- end row -->
  494. <br/>
  495. <br/>
  496. <br/>
  497. <br/>
  498. <br/>
  499. <br/>
  500. <br/>
  501. <br/>
  502. <br/>
  503. <br/>
  504. <br/>
  505. <br/>
  506. <br/>
  507. <br/>
  508. </div>
  509. <!-- end container -->
  510. </div>
  511. </div>
  512. <!-- end section -->
  513. </div>
  514. <!-- Left Control -->
  515. <a class=\"new-effect carousel-control-prev\" href=\"#carouselExampleControls\" role=\"button\" data-slide=\"prev\">
  516. <span class=\"fa fa-angle-left\" aria-hidden=\"true\"></span>
  517. <span class=\"sr-only\">
  518. Previous
  519. </span>
  520. </a>
  521. <!-- Right Control -->
  522. <a class=\"new-effect carousel-control-next\" href=\"#carouselExampleControls\" role=\"button\" data-slide=\"next\">
  523. <span class=\"fa fa-angle-right\" aria-hidden=\"true\"></span>
  524. <span class=\"sr-only\">
  525. Next
  526. </span>
  527. </a>
  528. </div>
  529. </div>
  530. <section class=\"card\">
  531. <article class=\"row card-body\" id=\"officialExams\">
  532. <h1 class=\"card-title text-center\">Taux de reussite aux examens officiels session {{year.code}}</h1>
  533. {% for key in results|keys %}
  534. <div class=\"col-6 col-md-3 \" >
  535. <canvas id={{key}} height=\"120\" data-exam-objects=\" {{results[key]}}\"></canvas>
  536. </div>
  537. {% endfor %}
  538. </article>
  539. </section>
  540. {% endblock %}
  541. {% block javascripts %}
  542. {{ parent() }}
  543. <script type=\"text/javascript\">
  544. //Generate a random color
  545. const randomRgbColor = (type) => {
  546. if (type === \"ECHEC\") {
  547. return \"rgb(255,0,0)\"; // rouge pur
  548. } else {
  549. // Couleurs aléatoires pour les autres
  550. let r = Math.floor(Math.random() * 256);
  551. let g = Math.floor(Math.random() * 256);
  552. let b = Math.floor(Math.random() * 256);
  553. return `rgb(\${r},\${g},\${b})`;
  554. }
  555. ;
  556. };
  557. const colors=[], datasets = [];
  558. const troisiemeAllExamsGraph = \$(\"#troisiemeall\"), troisiemeEspExamsGraph = \$(\"#troisiemeesp\") ,
  559. premiereCExamsGraph = \$(\"#premiere_c\"), premiereDExamsGraph = \$(\"#premiere_d\") ,
  560. premiereAEspExamsGraph = \$(\"#premierea4esp\"), premiereAAllExamsGraph = \$(\"#premierea4all\"),
  561. terminaleCExamsGraph = \$(\"#terminalec\"), terminaleDExamsGraph = \$(\"#terminale_d\") ,
  562. terminaleAEspExamsGraph = \$(\"#terminaleaesp\"), terminaleAAllExamsGraph = \$(\"#terminaleaall\"),
  563. formvArtExamsGraph = \$(\"#formvarts\"), formvScienceExamsGraph = \$(\"#formvscience\")
  564. ;
  565. const troisiemeAllExamsData = troisiemeAllExamsGraph.data('examObjects'), troisiemeEspExamsData = troisiemeEspExamsGraph.data('examObjects'),
  566. premiereCExamsData = premiereCExamsGraph.data('examObjects'), premiereDExamsData = premiereDExamsGraph.data('examObjects'),
  567. premiereAEspExamsData = premiereAEspExamsGraph.data('examObjects'), premiereAAllExamsData = premiereAAllExamsGraph.data('examObjects'),
  568. terminaleCExamsData = terminaleCExamsGraph.data('examObjects'), terminaleDExamsData = terminaleDExamsGraph.data('examObjects'),
  569. terminaleAEspExamsData = terminaleAEspExamsGraph.data('examObjects'), terminaleAAllExamsData = terminaleAAllExamsGraph.data('examObjects'),
  570. formvArtExamsData = formvArtExamsGraph.data('examObjects'),formvScienceExamsData = formvScienceExamsGraph.data('examObjects');
  571. // Draw the graph of official exam results
  572. // Draw the graph of official exam results
  573. const drawCanvas = (examData, examGraph, name) => {
  574. // Parser une seule fois au lieu de 3
  575. const parsedData = JSON.parse(examData);
  576. // Convertir explicitement en nombres
  577. const values = parsedData[\"mentionCountCategories\"].map(v => Number(v));
  578. // Vérifier si des valeurs sont invalides
  579. console.log(\"➡️ Graph:\", name, \"Labels:\", parsedData[\"mentionCategories\"], \"Values:\", values);
  580. // Générer les couleurs
  581. const colors = parsedData[\"mentionCategories\"].map(cat => randomRgbColor(cat));
  582. // Créer le graphe
  583. const examChart = new Chart(examGraph, {
  584. type: \"doughnut\",
  585. data: {
  586. labels: parsedData[\"mentionCategories\"],
  587. datasets: [{
  588. data: values,
  589. backgroundColor: colors
  590. }]
  591. },
  592. options: {
  593. cutout: \"70%\",
  594. plugins: {
  595. title: {
  596. display: true,
  597. text: name,
  598. font: {
  599. size: 16,
  600. family: 'Helvetica Neue',
  601. },
  602. position: 'bottom',
  603. }
  604. }
  605. }
  606. });
  607. };
  608. // Disposition des canVas dans le frontEnd
  609. drawCanvas(terminaleDExamsData,terminaleDExamsGraph , \"Terminale D\" );
  610. drawCanvas(terminaleCExamsData,terminaleCExamsGraph , \"Terminale C\" );
  611. drawCanvas(terminaleAAllExamsData,terminaleAAllExamsGraph , \"Terminale A All\" );
  612. drawCanvas(terminaleAEspExamsData,terminaleAEspExamsGraph , \"Terminale A Esp\" );
  613. drawCanvas(premiereAAllExamsData,premiereAAllExamsGraph , \"Premiere A All\" );
  614. drawCanvas(premiereAEspExamsData,premiereAEspExamsGraph , \"Premiere A Esp\" );
  615. drawCanvas(premiereCExamsData,premiereCExamsGraph , \"Premiere C\" );
  616. drawCanvas(premiereDExamsData,premiereDExamsGraph , \"Premiere D\" );
  617. drawCanvas(troisiemeAllExamsData,troisiemeAllExamsGraph , \"Troisieme All\" );
  618. drawCanvas(troisiemeEspExamsData,troisiemeEspExamsGraph , \"Troisieme Esp\" );
  619. drawCanvas(formvArtExamsData,formvArtExamsGraph , \"FORM 5 Art(.../5)\" );
  620. drawCanvas(formvScienceExamsData,formvScienceExamsGraph , \"FORM 5 Science(../5)\" );
  621. </script>
  622. {% endblock javascripts %}
  623. ", "school/index.html.twig", "/var/www/prod/liveedu/templates/school/index.html.twig");
  624. }
  625. }