diff --git a/as-talange-core/src/main/java/com/astalange/core/entity/Saison.java b/as-talange-core/src/main/java/com/astalange/core/entity/Saison.java index a9d1b04..9906d7c 100644 --- a/as-talange-core/src/main/java/com/astalange/core/entity/Saison.java +++ b/as-talange-core/src/main/java/com/astalange/core/entity/Saison.java @@ -17,6 +17,9 @@ public class Saison { @Column(name = "est_active", nullable = false) private Boolean estActive = false; + @Column(name = "inscriptions_ouvertes", nullable = false) + private Boolean inscriptionsOuvertes = false; + // Getters and Setters public Long getId() { @@ -43,10 +46,20 @@ public class Saison { this.estActive = estActive; } + public Boolean getInscriptionsOuvertes() { + return inscriptionsOuvertes != null ? inscriptionsOuvertes : false; + } + + public void setInscriptionsOuvertes(Boolean inscriptionsOuvertes) { + this.inscriptionsOuvertes = inscriptionsOuvertes; + } + @Override public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; + if (this == o) + return true; + if (o == null || getClass() != o.getClass()) + return false; Saison saison = (Saison) o; return Objects.equals(id, saison.id); } diff --git a/as-talange-web/src/main/java/com/astalange/web/controller/PublicInscriptionController.java b/as-talange-web/src/main/java/com/astalange/web/controller/PublicInscriptionController.java index 4174c95..3610b54 100644 --- a/as-talange-web/src/main/java/com/astalange/web/controller/PublicInscriptionController.java +++ b/as-talange-web/src/main/java/com/astalange/web/controller/PublicInscriptionController.java @@ -35,12 +35,21 @@ public class PublicInscriptionController { } @GetMapping("/demarrer") - public String showDemarrer() { + public String showDemarrer(Model model) { + Saison activeSaison = saisonRepository.findByEstActiveTrue().orElse(null); + if (activeSaison == null || !activeSaison.getInscriptionsOuvertes()) { + model.addAttribute("inscriptionsFermees", true); + } return "public/demarrer"; } @PostMapping("/demarrer") public String processDemarrer(@RequestParam("cf-turnstile-response") String captchaResponse, RedirectAttributes redirectAttributes) { + Saison activeSaison = saisonRepository.findByEstActiveTrue().orElse(null); + if (activeSaison == null || !activeSaison.getInscriptionsOuvertes()) { + redirectAttributes.addFlashAttribute("error", "Les inscriptions ne sont pas ouvertes pour le moment, veuillez contacter un responsable du club."); + return "redirect:/inscription-public/demarrer"; + } // En vrai, captchaResponse dépend du fournisseur. Cloudflare Turnstile = cf-turnstile-response if (!captchaValidationService.validateCaptcha(captchaResponse)) { redirectAttributes.addFlashAttribute("error", "Validation CAPTCHA échouée. Veuillez réessayer."); @@ -56,7 +65,13 @@ public class PublicInscriptionController { } @GetMapping("/formulaire") - public String showFormulaire(@RequestParam("token") String tokenUuid, Model model) { + public String showFormulaire(@RequestParam("token") String tokenUuid, Model model, RedirectAttributes redirectAttributes) { + Saison activeSaison = saisonRepository.findByEstActiveTrue().orElse(null); + if (activeSaison == null || !activeSaison.getInscriptionsOuvertes()) { + redirectAttributes.addFlashAttribute("error", "Les inscriptions ne sont pas ouvertes pour le moment, veuillez contacter un responsable du club."); + return "redirect:/inscription-public/demarrer"; + } + TokenPreInscription token = tokenRepository.findByValeurUuid(tokenUuid).orElse(null); if (token == null || !token.isValide()) { return "public/lien-expire"; @@ -77,8 +92,8 @@ public class PublicInscriptionController { } Saison activeSaison = saisonRepository.findByEstActiveTrue().orElse(null); - if (activeSaison == null) { - redirectAttributes.addFlashAttribute("error", "Les inscriptions sont actuellement fermées."); + if (activeSaison == null || !activeSaison.getInscriptionsOuvertes()) { + redirectAttributes.addFlashAttribute("error", "Les inscriptions ne sont pas ouvertes pour le moment, veuillez contacter un responsable du club."); return "redirect:/inscription-public/demarrer"; } diff --git a/as-talange-web/src/main/java/com/astalange/web/controller/SaisonController.java b/as-talange-web/src/main/java/com/astalange/web/controller/SaisonController.java index dd8f6e1..f006e91 100644 --- a/as-talange-web/src/main/java/com/astalange/web/controller/SaisonController.java +++ b/as-talange-web/src/main/java/com/astalange/web/controller/SaisonController.java @@ -58,4 +58,13 @@ public class SaisonController { return "redirect:/saisons"; } + + @PostMapping("/{id}/toggle-inscriptions") + public String toggleInscriptions(@PathVariable Long id) { + Saison saison = saisonRepository.findById(id) + .orElseThrow(() -> new IllegalArgumentException("Saison introuvable : " + id)); + saison.setInscriptionsOuvertes(!saison.getInscriptionsOuvertes()); + saisonRepository.save(saison); + return "redirect:/saisons"; + } } diff --git a/as-talange-web/src/main/resources/templates/parametrage/saisons_list.html b/as-talange-web/src/main/resources/templates/parametrage/saisons_list.html index ff58571..47c9d21 100644 --- a/as-talange-web/src/main/resources/templates/parametrage/saisons_list.html +++ b/as-talange-web/src/main/resources/templates/parametrage/saisons_list.html @@ -30,12 +30,13 @@