diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..62c8935 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.idea/ \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..d6ca2bf --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "dart.flutterSdkPath": "C:\\flutter" +} \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..08b5268 --- /dev/null +++ b/README.md @@ -0,0 +1,23 @@ +# Projet 3iL Élève + +Bienvenue dans le projet de l'application élève de l'école 3iL Ingénieurs et son groupe le groupe 3iL. Cette application est conçue pour faciliter la gestion de l'emploi du temps des élèves ainsi que leur suivi académique. Actuellement, elle permet de visualiser l'emploi du temps, tandis que la partie pour consulter les notes, les absences et d'autres informations est en cours de développement. + +## Structure du projet + +Le projet est organisé en deux parties principales : + +- **frontend** : Contient l'application Flutter. +- **backend** : Contient l'API en PHP (Symfony) qui fournit les données nécessaires à l'application. + +## Installation + +Pour installer le projet, veuillez suivre les instructions fournies dans les README des dossiers correspondants : + +- Pour le frontend, consultez le README dans le dossier `frontend`. +- Pour le backend, consultez le README dans le dossier `backend`. + +## Contributeurs + +Ce projet a été réalisé par Lukas, Jules et Yan dans le cadre de leurs études. + +--- diff --git a/backend/.env b/backend/.env index 77f1375..29628db 100644 --- a/backend/.env +++ b/backend/.env @@ -15,6 +15,8 @@ # https://symfony.com/doc/current/best_practices.html#use-environment-variables-for-infrastructure-configuration ###> symfony/framework-bundle ### -APP_ENV=dev -APP_SECRET=1493bafee09d036a0900844998c5ad7f +APP_ENV= +APP_SECRET= ###< symfony/framework-bundle ### + +APP_3IL_SCHEDULE_URL= \ No newline at end of file diff --git a/backend/README.md b/backend/README.md new file mode 100644 index 0000000..e025826 --- /dev/null +++ b/backend/README.md @@ -0,0 +1,30 @@ +# API Symfony pour Gestion de l'Emploi du Temps + +Bienvenue dans l'API Symfony pour la gestion de l'emploi du temps. Cette API est développée en Symfony 6.4 et offre deux endpoints principaux pour récupérer des données sur les emplois du temps des classes. + +## Configuration requise + +Avant de pouvoir utiliser cette API, assurez-vous que votre environnement répond aux exigences suivantes : + +- **PHP 8.1 ou version ultérieure** : Cette API nécessite au minimum PHP 8.1 pour fonctionner correctement. +- **Composer** : Vous aurez besoin de Composer pour installer les dépendances nécessaires au fonctionnement de l'API. + +## Installation + +Pour installer l'API et ses dépendances, suivez les étapes ci-dessous : + +1. Clonez ce dépôt sur votre machine locale. +2. Naviguez vers le répertoire `/backend` dans votre terminal. +3. Exécutez la commande `composer install` pour installer toutes les dépendances nécessaires. + +## Endpoints + +L'API offre les endpoints suivants : + +- `/api/timetable?class_param=XX` : Permet de récupérer l'emploi du temps d'une classe spécifique. +- `/api/classes` : Permet de récupérer la liste des classes disponibles. + +## Utilisation + +Une fois l'API installée et configurée, vous pouvez commencer à l'utiliser en effectuant des requêtes HTTP vers les endpoints mentionnés ci-dessus. Assurez-vous de respecter les méthodes HTTP appropriées (GET, POST, etc.) pour interagir avec les données de l'API. + diff --git a/backend/composer.json b/backend/composer.json index f930e91..d9c98f8 100644 --- a/backend/composer.json +++ b/backend/composer.json @@ -16,7 +16,8 @@ "symfony/http-client": "6.4.*", "symfony/requirements-checker": "^2.0", "symfony/runtime": "6.4.*", - "symfony/yaml": "6.4.*" + "symfony/yaml": "6.4.*", + "ext-simplexml": "*" }, "require-dev": { "symfony/maker-bundle": "^1.53" diff --git a/backend/config/services.yaml b/backend/config/services.yaml index 8934f12..4c316f4 100644 --- a/backend/config/services.yaml +++ b/backend/config/services.yaml @@ -4,7 +4,7 @@ # Put parameters here that don't need to change on each machine where the app is deployed # https://symfony.com/doc/current/best_practices.html#use-parameters-for-application-configuration parameters: - + app.schedule_url: '%env(APP_3IL_SCHEDULE_URL)%' services: # default configuration for services in *this* file _defaults: @@ -22,5 +22,9 @@ services: # add more service definitions when explicit configuration is needed # please note that last definitions always *replace* previous ones - App\Service\ClassesScraperService: ~ - App\Service\AnotherService: ~ + App\Service\ClassesScraperService: + arguments: + $schedule_url: '%app.schedule_url%' + App\Service\TimetableService: + arguments: + $schedule_url: '%app.schedule_url%' diff --git a/backend/src/Controller/Api/ClassesController.php b/backend/src/Controller/Api/ClassesController.php index 74fb702..ea1b0cb 100644 --- a/backend/src/Controller/Api/ClassesController.php +++ b/backend/src/Controller/Api/ClassesController.php @@ -19,7 +19,7 @@ public function __construct(ClassesScraperService $classesScraperService) #[Route('/api/classes', name: 'api_classes')] public function getClasses(): JsonResponse { - $classes = $this->classesScraperService->scrapeClasses('https://eleves.groupe3il.fr/edt_eleves/00_index.php'); + $classes = $this->classesScraperService->scrapeClasses(); return $this->json($classes); } } diff --git a/backend/src/Controller/Api/TimetableController.php b/backend/src/Controller/Api/TimetableController.php index 770b36d..2187dad 100644 --- a/backend/src/Controller/Api/TimetableController.php +++ b/backend/src/Controller/Api/TimetableController.php @@ -31,7 +31,11 @@ public function index(Request $request): JsonResponse $parsedJson = $this->timetableService->fetchAndParseData($xmlUrl); return $this->json($parsedJson); } else { +<<<<<<< HEAD + return $this->json(['error' => 'Invalid XML url'], JsonResponse::HTTP_BAD_REQUEST); +======= return $this->json(['error' => 'Invalid xml url'], JsonResponse::HTTP_BAD_REQUEST); +>>>>>>> dev } } } diff --git a/backend/src/Service/ClassesScraperService.php b/backend/src/Service/ClassesScraperService.php index 447272b..b81d3a5 100644 --- a/backend/src/Service/ClassesScraperService.php +++ b/backend/src/Service/ClassesScraperService.php @@ -7,10 +7,16 @@ class ClassesScraperService { - public function scrapeClasses(string $url): array + private string $schedule_url; + + public function __construct(string $schedule_url) + { + $this->schedule_url = $schedule_url; + } + public function scrapeClasses(): array { $httpClient = HttpClient::create(); - $htmlContent = $httpClient->request('GET', $url)->getContent(); + $htmlContent = $httpClient->request('GET', $this->schedule_url.'00_index.php')->getContent(); $crawler = new Crawler($htmlContent); $classes = []; diff --git a/backend/src/Service/TimetableService.php b/backend/src/Service/TimetableService.php index d4cb56d..a9b038c 100644 --- a/backend/src/Service/TimetableService.php +++ b/backend/src/Service/TimetableService.php @@ -8,21 +8,22 @@ class TimetableService { private $classesScraperService; + private $schedule_url; - public function __construct(ClassesScraperService $classesScraperService) + public function __construct(ClassesScraperService $classesScraperService, string $schedule_url) { $this->classesScraperService = $classesScraperService; + $this->schedule_url = $schedule_url; } public function getXmlFile(string $classParam): ?string { - - $classesList = $this->classesScraperService->scrapeClasses('https://eleves.groupe3il.fr/edt_eleves/00_index.php'); + $classesList = $this->classesScraperService->scrapeClasses(); foreach ($classesList as $class) { if ($class['name'] === $classParam) { $encodedClassFile = str_replace(' ', '%20', $class['file']); - return "https://eleves.groupe3il.fr/edt_eleves/{$encodedClassFile}"; + return $this->schedule_url . $encodedClassFile; } } diff --git a/frontend/app_student/.fvmrc b/frontend/app_student/.fvmrc new file mode 100644 index 0000000..090816f --- /dev/null +++ b/frontend/app_student/.fvmrc @@ -0,0 +1,3 @@ +{ + "flutter": "3.19.2" +} \ No newline at end of file diff --git a/frontend/app_student/.gitignore b/frontend/app_student/.gitignore index 29a3a50..75dfa95 100644 --- a/frontend/app_student/.gitignore +++ b/frontend/app_student/.gitignore @@ -41,3 +41,6 @@ app.*.map.json /android/app/debug /android/app/profile /android/app/release + +# FVM Version Cache +.fvm/ \ No newline at end of file diff --git a/frontend/app_student/.vscode/settings.json b/frontend/app_student/.vscode/settings.json new file mode 100644 index 0000000..64c9e34 --- /dev/null +++ b/frontend/app_student/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "dart.flutterSdkPath": ".fvm\\versions\\3.19.2" +} \ No newline at end of file