src/Controller/SettingsController.php line 28

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Form\FluxDurationGetDurationMoodleYpareoSettingsType;
  4. use App\Form\FluxDurationSendDurationMoodleYpareoSettingsType;
  5. use App\Form\FluxGeneralSettingsType;
  6. use App\Form\FluxInscriptionYpareoMoodleSettingsType;
  7. use App\Service\Settings\SettingsFlux;
  8. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  9. use Symfony\Component\HttpFoundation\Request;
  10. use Symfony\Component\HttpFoundation\Response;
  11. use Symfony\Component\Routing\Annotation\Route;
  12. use Symfony\Component\Yaml\Exception\ParseException;
  13. class SettingsController extends AbstractController
  14. {
  15.     private SettingsFlux $settingsFlux;
  16.     public function __construct(SettingsFlux $settingsFlux)
  17.     {
  18.         $this->settingsFlux $settingsFlux;
  19.     }
  20.     /**
  21.      * @Route("/", name="app_settings")
  22.      */
  23.     public function index(): Response
  24.     {
  25.         try {
  26.             // Recupération des settings
  27.             $settingsGeneral $this->settingsFlux->getFluxGeneralSettings();
  28.             $settingsFluxInscription $this->settingsFlux->getFluxInscriptionYpareoMoodleSettings();
  29.             $settingsFluxDurationGetDuration $this->settingsFlux->getFluxDurationGetDurationMoodleYpareo();
  30.             $settingsFluxDurationSendDuration $this->settingsFlux->getFluxDurationSendDurationMoodleYpareo();
  31.         } catch (ParseException $exception) {
  32.             printf('Unable to parse the YAML array: %s'$exception->getMessage());
  33.         }
  34.         return $this->render('settings_flux/index.html.twig', [
  35.             SettingsFlux::FLUX_GENERAL => [
  36.                 'fields_order' => [
  37.                     'notification',
  38.                     'ypareo',
  39.                 ],
  40.                 'settings' => $settingsGeneral,
  41.             ],
  42.             SettingsFlux::FLUX_INSCRIPTION_YPAREO_MOODLE => [
  43.                 'fields_order' => [
  44.                     'cron_is_enabled',
  45.                     'cron_schedule',
  46.                     'groupe_formation_limit',
  47.                     'formation_period',
  48.                     'formation_api_filters',
  49.                     'prefixes',
  50.                     'student_role',
  51.                     'access_formation_period',
  52.                 ],
  53.                 'settings' => $settingsFluxInscription,
  54.             ],
  55.             SettingsFlux::FLUX_DURATION_GET_DURATION_MOODLE_YPAREO => [
  56.                 'fields_order' => [
  57.                     'cron_is_enabled',
  58.                     'cron_schedule',
  59.                     'groupe_formation_limit',
  60.                     'formation_period',
  61.                 ],
  62.                 'settings' => $settingsFluxDurationGetDuration,
  63.             ],
  64.             SettingsFlux::FLUX_DURATION_SEND_DURATION_MOODLE_YPAREO => [
  65.                 'fields_order' => [
  66.                     'cron_is_enabled',
  67.                     'cron_schedule',
  68.                 ],
  69.                 'settings' => $settingsFluxDurationSendDuration,
  70.             ],
  71.         ]);
  72.     }
  73.     /**
  74.      * @Route("/config/general", name="app_general_settings")
  75.      */
  76.     public function generalSettings(Request $request): Response
  77.     {
  78.         return $this->manageFluxSettingsForm(
  79.             $request,
  80.             FluxGeneralSettingsType::class,
  81.             'fluxGeneralSettings',
  82.             'settings_flux/flux_general.html.twig'
  83.         );
  84.     }
  85.     /**
  86.      * @Route("/config/flux-inscription-ypareo-moodle", name="app_flux_inscription_ypareo_moodle_settings")
  87.      */
  88.     public function fluxInscriptionYpareoMoodleSettings(Request $request): Response
  89.     {
  90.         return $this->manageFluxSettingsForm(
  91.             $request,
  92.             FluxInscriptionYpareoMoodleSettingsType::class,
  93.             'fluxInscriptionYpareoMoodleSettings',
  94.             'settings_flux/flux_inscription_ypareo_moodle.html.twig'
  95.         );
  96.     }
  97.     /**
  98.      * @Route("/config/flux-duration-get-duration", name="app_flux_duration_get_duration_ypareo_moodle_settings")
  99.      */
  100.     public function fluxDurationGetDurationMoodleYpareoSettings(Request $request): Response
  101.     {
  102.         return $this->manageFluxSettingsForm(
  103.             $request,
  104.             FluxDurationGetDurationMoodleYpareoSettingsType::class,
  105.             'fluxDurationGetDurationMoodleYpareo',
  106.             'settings_flux/flux_duration_get_duration_moodle_ypareo.html.twig'
  107.         );
  108.     }
  109.     /**
  110.      * @Route("/config/flux-duration-not-sent", name="app_flux_duration_send_duration_ypareo_moodle_settings")
  111.      */
  112.     public function fluxDurationSendDurationMoodleYpareoSettings(Request $request): Response
  113.     {
  114.         return $this->manageFluxSettingsForm(
  115.             $request,
  116.             FluxDurationSendDurationMoodleYpareoSettingsType::class,
  117.             'fluxDurationSendDurationMoodleYpareo',
  118.             'settings_flux/flux_duration_send_duration_moodle_ypareo.html.twig'
  119.         );
  120.     }
  121.     protected function manageFluxSettingsForm(
  122.         Request $request,
  123.         string $formType,
  124.         string $fluxAttribute,
  125.         string $template
  126.     ): Response {
  127.         $getSettingsMethodName 'get'.ucfirst($fluxAttribute);
  128.         $setSettingsMethodName 'set'.ucfirst($fluxAttribute);
  129.         // Récupération des settings
  130.         $settings $this->settingsFlux->{$getSettingsMethodName}();
  131.         // Gestion du formulaire
  132.         $form $this->createForm($formType$settings);
  133.         $form->handleRequest($request);
  134.         // Si le formulaire a été envoyé et les données sont valides
  135.         if ($form->isSubmitted() && $form->isValid()) {
  136.             if ($form->getData() !== $settings) {
  137.                 // Mis à jour des settings
  138.                 $this->settingsFlux->{$setSettingsMethodName}($form->getData());
  139.                 $this->addFlash('success''La configuration du flux a bien été mise à jour');
  140.             }
  141.             return $this->redirectToRoute('app_settings');
  142.         }
  143.         return $this->render($template, [
  144.             'form' => $form->createView(),
  145.         ]);
  146.     }
  147. }