src/Controller/IndexController.php line 14

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  4. use Symfony\Component\HttpFoundation\Response;
  5. use Symfony\Component\HttpFoundation\Request;
  6. use Symfony\Component\HttpFoundation\JsonResponse;
  7. use Symfony\Component\Routing\Annotation\Route;
  8. class IndexController extends AbstractController
  9. {
  10. #[Route('/', name: 'app_home')]
  11. public function index(): Response
  12. {
  13. // Récupérer les derniers numéros du JO
  14. $derniersNumeros = [
  15. // Exemple de données - à remplacer par votre logique métier
  16. ['id' => 1, 'numero' => '2026-015', 'datePublication' => new \DateTime('2026-03-01'), 'nbActes' => 12],
  17. ['id' => 2, 'numero' => '2026-014', 'datePublication' => new \DateTime('2026-02-25'), 'nbActes' => 8],
  18. ['id' => 3, 'numero' => '2026-013', 'datePublication' => new \DateTime('2026-02-20'), 'nbActes' => 15],
  19. ['id' => 4, 'numero' => '2026-012', 'datePublication' => new \DateTime('2026-02-15'), 'nbActes' => 10],
  20. ];
  21. $stats = [
  22. 'nombreActes' => 1250,
  23. 'nombreNumeros' => 45,
  24. 'nombreAbonnes' => 8,
  25. ];
  26. return $this->render('index/index.html.twig', [
  27. 'derniersNumeros' => $derniersNumeros,
  28. 'stats' => $stats,
  29. ]);
  30. }
  31. #[Route('/search', name: 'app_search')]
  32. public function search(Request $request): Response
  33. {
  34. $query = $request->query->get('q', '');
  35. $institution = $request->query->get('institution', '');
  36. $period = $request->query->get('period', '');
  37. $type = $request->query->get('type', '');
  38. $page = $request->query->getInt('page', 1);
  39. // Simulation de résultats - à remplacer par votre logique de recherche
  40. $results = [];
  41. $isPremium = false; // À déterminer selon l'abonnement de l'utilisateur
  42. if ($query) {
  43. $results = [
  44. [
  45. 'id' => 1,
  46. 'type' => 'loi',
  47. 'numero' => '2026-015/AU',
  48. 'titre' => 'Loi portant modernisation du Journal Officiel',
  49. 'resume' => 'Cette loi établit les nouvelles dispositions pour la publication numérique des textes officiels...',
  50. 'institution' => 'Assemblée nationale',
  51. 'datePublication' => new \DateTime('2026-03-01'),
  52. 'relevance' => 0.95,
  53. 'extrait' => 'Article 1 : Le Journal Officiel de l\'Union des Comores est désormais publié sous format numérique...'
  54. ],
  55. // Ajoutez d'autres résultats
  56. ];
  57. }
  58. return $this->render('search/index.html.twig', [
  59. 'query' => $query,
  60. 'institution' => $institution,
  61. 'period' => $period,
  62. 'type' => $type,
  63. 'results' => $results,
  64. 'isPremium' => $isPremium,
  65. 'currentPage' => $page,
  66. 'totalPages' => 1,
  67. ]);
  68. }
  69. #[Route('/chatbot/send', name: 'app_chatbot_send', methods: ['POST'])]
  70. public function chatbotSend(Request $request): JsonResponse
  71. {
  72. $data = json_decode($request->getContent(), true);
  73. $message = $data['message'] ?? '';
  74. // Logique IA pour répondre aux questions
  75. $response = $this->processAIChat($message);
  76. return $this->json([
  77. 'success' => true,
  78. 'response' => $response
  79. ]);
  80. }
  81. private function processAIChat(string $message): string
  82. {
  83. $message = strtolower($message);
  84. // Logique simple de réponse - à remplacer par une véritable intégration IA
  85. if (str_contains($message, 'bonjour') || str_contains($message, 'salut')) {
  86. return "Bonjour ! Je suis Ibunas.IA, votre assistant pour le Journal Officiel des Comores. Je peux vous aider à rechercher des textes juridiques, des annonces légales, ou vous renseigner sur nos services d'abonnement.";
  87. }
  88. if (str_contains($message, 'recherche') || str_contains($message, 'trouver')) {
  89. return "Pour effectuer une recherche, utilisez notre barre de recherche en haut de page. Vous pouvez filtrer par institution émettrice, période et type d'acte. Les abonnés Premium bénéficient d'une recherche enrichie par IA dans le contenu des textes.";
  90. }
  91. if (str_contains($message, 'abonnement') || str_contains($message, 'prix')) {
  92. return "Notre offre d'abonnement Standard est à 50 000 KMF/an et offre l'accès aux textes isolés de moins de 5 ans. L'offre Premium à 90 000 KMF/an donne accès à tous les textes archivés, à la recherche enrichie par IA et aux alertes personnalisées.";
  93. }
  94. if (str_contains($message, 'publication') || str_contains($message, 'annonce')) {
  95. return "Pour publier une annonce légale, créez un compte annonceur sur notre plateforme. Vous pourrez ensuite déposer votre document, recevoir un devis automatique et effectuer le paiement en ligne via Mobile Money.";
  96. }
  97. // Réponse par défaut
  98. return "Je vous remercie pour votre question. Pour vous aider au mieux, pourriez-vous préciser votre demande ? Je peux vous assister pour :\n- Rechercher des textes juridiques\n- Publier une annonce légale\n- Vous abonner au Journal Officiel\n- Consulter les archives\n- Obtenir des informations sur nos services";
  99. }
  100. }