From e3aff55567093a4e36ae28e16bbbf2082782b56a Mon Sep 17 00:00:00 2001 From: Mathieu Perrin Date: Sun, 17 Nov 2024 22:39:47 +0100 Subject: [PATCH 1/5] =?UTF-8?q?276:=20Add=20vehicle=20functionality=20?= =?UTF-8?q?=F0=9F=9A=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/pages/events/view/event_view.php | 29 ++++- app/pages/vehicle/vehicle_delete.php | 39 +++++++ app/pages/vehicle/vehicle_edit.php | 69 +++++++++++ app/pages/vehicle/vehicle_register.php | 108 ++++++++++++++++++ assets/css/event_view.css | 61 ++++++++++ assets/css/main.css | 6 + .../Version20241007062815.php | 41 +++++++ .../Version20241114165603.php | 37 ++++++ database/models/vehicles.db.php | 39 +++++++ routes.php | 6 + 10 files changed, 429 insertions(+), 6 deletions(-) create mode 100644 app/pages/vehicle/vehicle_delete.php create mode 100644 app/pages/vehicle/vehicle_edit.php create mode 100644 app/pages/vehicle/vehicle_register.php create mode 100644 database/migrations_sqlite/Version20241007062815.php create mode 100644 database/migrations_sqlite/Version20241114165603.php create mode 100644 database/models/vehicles.db.php diff --git a/app/pages/events/view/event_view.php b/app/pages/events/view/event_view.php index 7af33a7b..a22b6a27 100644 --- a/app/pages/events/view/event_view.php +++ b/app/pages/events/view/event_view.php @@ -1,13 +1,17 @@ id); +$user_id = User::getCurrent()->id; +$event = EventService::getEventWithAllData(get_route_param('event_id'), $user_id); if (!$event->open) { restrict_access(Access::$ADD_EVENTS); } +$vehicles = em()->createQuery('SELECT v FROM Vehicle v WHERE v.event = ?1')->setParameter( + 1, + $event->id +)->getResult(); + $can_edit = check_auth(Access::$ADD_EVENTS); $today_date = date_create("today"); $deadline_in_future = $event->deadline >= $today_date; @@ -105,7 +109,7 @@ class="fa fa-paperclip">

-

+

@@ -122,7 +126,7 @@ class="fa fa-paperclip"> -

+

@@ -143,4 +147,17 @@ class="fa fa-paperclip"> text($event->description) ?> - \ No newline at end of file + + +

Véhicules

+ + +
+
+ + + + Ajouter un véhicule + + \ No newline at end of file diff --git a/app/pages/vehicle/vehicle_delete.php b/app/pages/vehicle/vehicle_delete.php new file mode 100644 index 00000000..35e44f24 --- /dev/null +++ b/app/pages/vehicle/vehicle_delete.php @@ -0,0 +1,39 @@ +find(Event::class, $event_id); +$vehicle = em()->find(Vehicle::class, $vehicle_id); +if (!$event) { + force_404("the event of id $event_id doesn't exist"); +} +if (!$vehicle) { + force_404("the vehicle of id $vehicle_id doesn't exist"); +} +if ($form->valid()) { + logger()->info("Véhicule {vehicle_id} deleted by user {currentUserLogin}", ['vehicle_id' => $vehicle_id, 'currentUserLogin' => User::getCurrent()->login]); + em()->remove($vehicle); + em()->flush(); + Toast::error("Véhicule supprimé"); + redirect("/evenements/$event_id"); +} + +page("Confirmation de suppression"); +?> +
+
+ render_validation() ?> +

Sûr de vouloir supprimer le véhicule + id" ?> ? Il sera définitivement supprimé!! +

+
+ Annuler +
+
+ +
+
+
\ No newline at end of file diff --git a/app/pages/vehicle/vehicle_edit.php b/app/pages/vehicle/vehicle_edit.php new file mode 100644 index 00000000..61d2eda2 --- /dev/null +++ b/app/pages/vehicle/vehicle_edit.php @@ -0,0 +1,69 @@ +find(Event::class, $event_id); +if (!$event) { + force_404("the event of id $event_id doesn't exist"); +} +$vehicle_id = get_route_param("vehicle_id", strict: false); +if ($vehicle_id) { + $vehicle = em()->find(Vehicle::class, $vehicle_id); + if ($vehicle == null) { + force_404("Error: the vehicle with id $vehicle_id does not exist"); + } + $vehicle_mapping = [ + "name" => $vehicle->name, + "start_location" => $vehicle->start_location, + "return_location" => $vehicle->return_location, + "capacity" => $vehicle->capacity, + ]; +} else { + $vehicle = new Vehicle(); +} + + +$v = new Validator($vehicle_mapping ?? []); +$name = $v->text("name")->label("Nom du véhicule")->placeholder()->required(); +$start_location = $v->text("start_location")->label("Lieu de départ")->placeholder()->required(); +$return_location = $v->text("return_location")->label("Lieu de retour")->placeholder()->required(); +$capacity = $v->number("capacity")->label("Capacité du véhicule")->min($vehicle_id ? count(($vehicle->passengers)) : 1)->placeholder()->required(); + + +if ($v->valid()) { + $vehicle->name = $name->value; + $vehicle->start_location = $start_location->value; + $vehicle->return_location = $return_location->value; + $vehicle->manager = $user; + $vehicle->event = $event; + $vehicle->capacity = $capacity->value; + em()->persist($vehicle); + em()->flush(); + redirect("/evenements/$event->id"); +} + +page(($vehicle_id ? "Modifier le véhicule" : "Ajouter un véhicule") . " pour $event->name"); +?> + +
+ back("/evenements/$event_id", "Annuler")->submit($vehicle_id ? "Modifier" : "Ajouter") ?> +
+
+ render_validation() ?> +
+ render() ?> +
+
+ render() ?> +
+
+ render() ?> +
+
+ render() ?> +
+
+
+
\ No newline at end of file diff --git a/app/pages/vehicle/vehicle_register.php b/app/pages/vehicle/vehicle_register.php new file mode 100644 index 00000000..4f805627 --- /dev/null +++ b/app/pages/vehicle/vehicle_register.php @@ -0,0 +1,108 @@ +find(Vehicle::class, $vehicle_id); +$event = em()->find(Event::class, $event_id); +$can_edit = check_auth(Access::$ADD_EVENTS); + +if (!$vehicle) { + return "Le véhicule en question n'existe pas."; +} + +$method = $_SERVER['REQUEST_METHOD']; + +if ($method == "POST") { + $is_in_passengers = in_array($user, $vehicle->passengers->getValues()); + + if (!$is_in_passengers && count($vehicle->passengers) < $vehicle->capacity) { + $vehicle->passengers->add($user); + em()->persist($vehicle); + em()->flush(); + Toast::success("Ajouté au véhicule"); + } elseif (!$is_in_passengers) { + Toast::error("Le véhicule est complet"); + } + + if ($is_in_passengers) { + $vehicle->passengers->removeElement($user); + em()->persist($vehicle); + em()->flush(); + Toast::error("Enlevé du véhicule"); + } +} + +?> +
+
> + +
+ name ?> +
+
+ + start_location ?> + + + + start_location ?> + +
+
+ passengers) ?> / capacity ?> +
+
+ +
+
+
Passagers
+ passengers[0]): ?> + Pas de passagers pour l'instant 🚘 + +

+ passengers as $i => $passenger): ?> + > + first_name ?> last_name ?> + +

+
+
+
Responsable
+

+ > + manager->first_name ?> + manager->last_name ?> + +

+
+
+
+ passengers->contains($user)): ?> + + + S'enlever + + + + S'ajouter + + + + + Modifier + + + Supprimer + +
+
+
\ No newline at end of file diff --git a/assets/css/event_view.css b/assets/css/event_view.css index 1799518d..40ec4574 100644 --- a/assets/css/event_view.css +++ b/assets/css/event_view.css @@ -11,3 +11,64 @@ details summary:focus:not([role="button"]) { .description { white-space: pre-wrap; } + +.vehicle-article details { + margin: 0; +} + +.vehicle-article details summary { + display: grid; + grid-template-columns: 1fr 1fr 1fr auto; + grid-template-areas: "vehicle-name location capacity button"; +} + +.vehicle-article:where(:hover, :focus, :focus-within) { + background-color: var(--secondary-focus) !important; + outline: none; +} + +.vehicle-name { + grid-area: vehicle-name; + text-align: center; + align-self: center; + justify-self: start; +} + +.vehicle-grid { + display: grid; + gap: 10px; + grid-template-columns: 1fr auto; + grid-template-areas: "vehicle-article register vehicle-delete"; +} + +.location { + grid-area: location; + text-align: center; + align-self: center; +} + +.capacity { + grid-area: capacity; + text-align: center; + align-self: center; +} + +.register { + grid-area: register; + text-align: center; + align-self: center; + margin: 0 0 var(--spacing); +} + +.vehicle-delete { + grid-area: vehicle-delete; + text-align: center; + align-self: center; + margin: 0 0 var(--spacing); +} + +.passenger-flex { + display: flex; + gap: 10px; + flex-wrap: wrap; +} diff --git a/assets/css/main.css b/assets/css/main.css index 54ae9fc7..19c0068c 100644 --- a/assets/css/main.css +++ b/assets/css/main.css @@ -371,6 +371,12 @@ article.notice > header, gap: 1rem; } +.buttons-grid { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(8rem, 1fr)); + grid-gap: 0.5rem; +} + /* User card */ .user-card { diff --git a/database/migrations_sqlite/Version20241007062815.php b/database/migrations_sqlite/Version20241007062815.php new file mode 100644 index 00000000..bf3e6589 --- /dev/null +++ b/database/migrations_sqlite/Version20241007062815.php @@ -0,0 +1,41 @@ +addSql('CREATE TABLE orm_vehicles (id INT AUTO_INCREMENT NOT NULL, manager_id INT DEFAULT NULL, event_id INT DEFAULT NULL, name VARCHAR(255) NOT NULL, start_location VARCHAR(255) NOT NULL, return_location VARCHAR(255) NOT NULL, capacity VARCHAR(255) NOT NULL, INDEX IDX_744369D0783E3463 (manager_id), INDEX IDX_744369D071F7E88B (event_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB'); + $this->addSql('CREATE TABLE orm_vehicle_user (vehicle_id INT NOT NULL, user_id INT NOT NULL, INDEX IDX_64CCF499545317D1 (vehicle_id), INDEX IDX_64CCF499A76ED395 (user_id), PRIMARY KEY(vehicle_id, user_id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB'); + $this->addSql('ALTER TABLE orm_vehicles ADD CONSTRAINT FK_744369D0783E3463 FOREIGN KEY (manager_id) REFERENCES orm_users (id)'); + $this->addSql('ALTER TABLE orm_vehicles ADD CONSTRAINT FK_744369D071F7E88B FOREIGN KEY (event_id) REFERENCES orm_events (id)'); + $this->addSql('ALTER TABLE orm_vehicle_user ADD CONSTRAINT FK_64CCF499545317D1 FOREIGN KEY (vehicle_id) REFERENCES orm_vehicles (id) ON DELETE CASCADE'); + $this->addSql('ALTER TABLE orm_vehicle_user ADD CONSTRAINT FK_64CCF499A76ED395 FOREIGN KEY (user_id) REFERENCES orm_users (id) ON DELETE CASCADE'); + } + + public function down(Schema $schema): void + { + // this down() migration is auto-generated, please modify it to your needs + $this->addSql('ALTER TABLE orm_vehicles DROP FOREIGN KEY FK_744369D0783E3463'); + $this->addSql('ALTER TABLE orm_vehicles DROP FOREIGN KEY FK_744369D071F7E88B'); + $this->addSql('ALTER TABLE orm_vehicle_user DROP FOREIGN KEY FK_64CCF499545317D1'); + $this->addSql('ALTER TABLE orm_vehicle_user DROP FOREIGN KEY FK_64CCF499A76ED395'); + $this->addSql('DROP TABLE orm_vehicles'); + $this->addSql('DROP TABLE orm_vehicle_user'); + } +} diff --git a/database/migrations_sqlite/Version20241114165603.php b/database/migrations_sqlite/Version20241114165603.php new file mode 100644 index 00000000..a3fcb524 --- /dev/null +++ b/database/migrations_sqlite/Version20241114165603.php @@ -0,0 +1,37 @@ +addSql('CREATE TABLE orm_vehicles (id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, manager_id INTEGER DEFAULT NULL, event_id INTEGER DEFAULT NULL, name VARCHAR(255) NOT NULL, start_location VARCHAR(255) NOT NULL, return_location VARCHAR(255) NOT NULL, capacity VARCHAR(255) NOT NULL, CONSTRAINT FK_744369D0783E3463 FOREIGN KEY (manager_id) REFERENCES orm_users (id) NOT DEFERRABLE INITIALLY IMMEDIATE, CONSTRAINT FK_744369D071F7E88B FOREIGN KEY (event_id) REFERENCES orm_events (id) NOT DEFERRABLE INITIALLY IMMEDIATE)'); + $this->addSql('CREATE INDEX IDX_744369D0783E3463 ON orm_vehicles (manager_id)'); + $this->addSql('CREATE INDEX IDX_744369D071F7E88B ON orm_vehicles (event_id)'); + $this->addSql('CREATE TABLE orm_vehicle_user (vehicle_id INTEGER NOT NULL, user_id INTEGER NOT NULL, PRIMARY KEY(vehicle_id, user_id), CONSTRAINT FK_64CCF499545317D1 FOREIGN KEY (vehicle_id) REFERENCES orm_vehicles (id) ON DELETE CASCADE NOT DEFERRABLE INITIALLY IMMEDIATE, CONSTRAINT FK_64CCF499A76ED395 FOREIGN KEY (user_id) REFERENCES orm_users (id) ON DELETE CASCADE NOT DEFERRABLE INITIALLY IMMEDIATE)'); + $this->addSql('CREATE INDEX IDX_64CCF499545317D1 ON orm_vehicle_user (vehicle_id)'); + $this->addSql('CREATE INDEX IDX_64CCF499A76ED395 ON orm_vehicle_user (user_id)'); + } + + public function down(Schema $schema): void + { + // this down() migration is auto-generated, please modify it to your needs + $this->addSql('DROP TABLE orm_vehicles'); + $this->addSql('DROP TABLE orm_vehicle_user'); + } +} diff --git a/database/models/vehicles.db.php b/database/models/vehicles.db.php new file mode 100644 index 00000000..d11e6c1a --- /dev/null +++ b/database/models/vehicles.db.php @@ -0,0 +1,39 @@ + */ + #[ManyToMany(targetEntity: User::class)] + public Collection $passengers; + +} \ No newline at end of file diff --git a/routes.php b/routes.php index f6cfe176..8ad21078 100644 --- a/routes.php +++ b/routes.php @@ -49,6 +49,12 @@ Router::add('/evenements/$event_id/supprimer', __DIR__ . '/app/pages/events/delete/event_delete.php'); Router::add('/evenements/$event_id/event_form', __DIR__ . '/app/pages/events/edit/EventEditForm.php'); +//Vehicles +Router::add('/evenements/$event_id/vehicule/nouveau', 'pages/vehicle/vehicle_edit'); +Router::add('/evenements/$event_id/vehicule/$vehicle_id', 'pages/vehicle/vehicle_edit'); +Router::add('/evenements/$event_id/vehicule/$vehicle_id/supprimer', 'pages/vehicle/vehicle_delete'); +Router::add('/evenements/$event_id/vehicule/$vehicle_id/inscription/$user_id', 'pages/vehicle/vehicle_register'); + // Event entry lists Router::add('/evenements/$event_id/participants', __DIR__ . '/app/pages/events/entry_list/entry_list.php'); Router::add('/evenements/$event_id/participants/tabs', __DIR__ . '/app/pages/events/entry_list/entry_list_tabs.php'); From ab9967596fbf0679425cb395179a3f9a4b59be37 Mon Sep 17 00:00:00 2001 From: Mathieu Perrin Date: Fri, 29 Nov 2024 09:33:07 +0100 Subject: [PATCH 2/5] 276: Car management 2.0 --- app/pages/events/entry_list/entry_list.php | 17 +- .../entry_list/entry_list_tab_activity.php | 2 + app/pages/events/view/event_view.php | 233 +++++++++--------- app/pages/vehicle/vehicle_delete.php | 4 +- app/pages/vehicle/vehicle_edit.php | 2 +- app/pages/vehicle/vehicle_view.php | 20 ++ app/template/shoelace.php | 9 +- assets/css/entry_list.css | 11 +- assets/css/event_view.css | 5 + .../Version20241007062815.php | 2 +- ...14165603.php => Version20241128071722.php} | 2 +- routes.php | 9 +- 12 files changed, 175 insertions(+), 141 deletions(-) create mode 100644 app/pages/vehicle/vehicle_view.php rename database/{migrations_sqlite => migrations}/Version20241007062815.php (98%) rename database/migrations_sqlite/{Version20241114165603.php => Version20241128071722.php} (97%) diff --git a/app/pages/events/entry_list/entry_list.php b/app/pages/events/entry_list/entry_list.php index c52a42b6..1d0ea755 100644 --- a/app/pages/events/entry_list/entry_list.php +++ b/app/pages/events/entry_list/entry_list.php @@ -2,22 +2,19 @@ $event_id = get_route_param("event_id"); $event_infos = EventService::getEventInfos($event_id); -page($event_infos->name . " : Inscrits")->css("entry_list.css") ?> - -back("/evenements/$event_id") - ->if( - $event_infos->open && check_auth(Access::$ADD_EVENTS), - fn($a) => $a->button("Copier le tableau", attributes: ["onclick" => "selectTable()"]) - ) ?> +$is_simple = get_query_param("is_simple", false, false); +?> +open && check_auth(Access::$ADD_EVENTS)): ?> +
+ open): ?>

- +

- render(["event_id" => $event_id]) ?> + render(["activity_id" => EventService::getActivityIdList($event_id)[0]->id]) : component(__DIR__ . "/entry_list_tabs.php")->render(["event_id" => $event_id]) ?>
diff --git a/app/pages/events/entry_list/entry_list_tab_activity.php b/app/pages/events/entry_list/entry_list_tab_activity.php index a0740197..33992786 100644 --- a/app/pages/events/entry_list/entry_list_tab_activity.php +++ b/app/pages/events/entry_list/entry_list_tab_activity.php @@ -1,4 +1,6 @@ diff --git a/app/pages/events/view/event_view.php b/app/pages/events/view/event_view.php index a22b6a27..952895cd 100644 --- a/app/pages/events/view/event_view.php +++ b/app/pages/events/view/event_view.php @@ -7,10 +7,7 @@ restrict_access(Access::$ADD_EVENTS); } -$vehicles = em()->createQuery('SELECT v FROM Vehicle v WHERE v.event = ?1')->setParameter( - 1, - $event->id -)->getResult(); +$tab = get_query_param("tab", false, false); $can_edit = check_auth(Access::$ADD_EVENTS); $today_date = date_create("today"); @@ -20,7 +17,7 @@ $totalEntryCount = EventService::getEntryCount($event->id); $is_simple = $event->type == EventType::Simple; -page($event->name)->css("event_view.css"); +page($event->name)->css("event_view.css")->css("entry_list.css"); ?> @@ -44,120 +41,122 @@ activities[0], $can_register) : RenderEventEntry($entry, $event, $can_edit) ?> -present ? "completed" : "missed"); -$start_class = $event->start_date < $today_date ? $deadline_class : ""; -$end_class = $event->end_date < $today_date ? $deadline_class : ""; - -?> -
-
-
-
- present) ?> -
-
-
- bulletin_url): ?> -
- - Bulletin - + + > + Informations + + " + hx-target="#entry-list" > + Participants + + > + Véhicules + + + + present ? "completed" : "missed"); + $start_class = $event->start_date < $today_date ? $deadline_class : ""; + $end_class = $event->end_date < $today_date ? $deadline_class : ""; + + ?> +
-
-
-
- activities)): ?> -

Activités

- activities as $i => $activity): - $activity_entry = $activity->entries[0] ?? null; ?> -
- - present) . " " ?> - name ?> - type->toName() ?>> - - -

- - date) ?> - - location_label): ?> - - - location_url): ?> - location_url ?> target="_blank">location_label ?> - - location_label ?> +

+
+ bulletin_url): ?> + - - -

- +
-
-
- - - - - -

- - Ajouter une activité -

- -
- description): ?> -
-
-

Description

- text($event->description) ?> -
- -
- -

Véhicules

- - -
-
- - - - Ajouter un véhicule + +
+ activities)): ?> +

Activités

+ activities as $i => $activity): + $activity_entry = $activity->entries[0] ?? null; ?> +
+ + present) . " " ?> + name ?> + type->toName() ?>> + + +

+ + date) ?> + + location_label): ?> + + + location_url): ?> + location_url ?> target="_blank">location_label ?> + + location_label ?> + + + +

+ +
+
+ + + + + +

+ + Ajouter une activité +

+ + description): ?> +
+
+

Description

+ text($event->description) ?> +
+ + Pas encore de description pour cet événement 🪶 + +
+ + + + + + \ No newline at end of file diff --git a/app/pages/vehicle/vehicle_delete.php b/app/pages/vehicle/vehicle_delete.php index 35e44f24..78b1496a 100644 --- a/app/pages/vehicle/vehicle_delete.php +++ b/app/pages/vehicle/vehicle_delete.php @@ -18,7 +18,7 @@ em()->remove($vehicle); em()->flush(); Toast::error("Véhicule supprimé"); - redirect("/evenements/$event_id"); + redirect("/evenements/$event_id?tab=vehicules"); } page("Confirmation de suppression"); @@ -30,7 +30,7 @@ id" ?> ? Il sera définitivement supprimé!!

diff --git a/app/pages/vehicle/vehicle_edit.php b/app/pages/vehicle/vehicle_edit.php index 61d2eda2..1c96d1c7 100644 --- a/app/pages/vehicle/vehicle_edit.php +++ b/app/pages/vehicle/vehicle_edit.php @@ -48,7 +48,7 @@ ?>
- back("/evenements/$event_id", "Annuler")->submit($vehicle_id ? "Modifier" : "Ajouter") ?> + back("/evenements/$event_id?tab=vehicules", "Annuler")->submit($vehicle_id ? "Modifier" : "Ajouter") ?>
render_validation() ?> diff --git a/app/pages/vehicle/vehicle_view.php b/app/pages/vehicle/vehicle_view.php new file mode 100644 index 00000000..9c50801e --- /dev/null +++ b/app/pages/vehicle/vehicle_view.php @@ -0,0 +1,20 @@ +id; +$event = EventService::getEventWithAllData(get_route_param('event_id'), $user_id); + +$vehicles = em()->createQuery('SELECT v FROM Vehicle v WHERE v.event = ?1')->setParameter( + 1, + $event->id +)->getResult(); + +?> + + +
+
+ + + + Ajouter un véhicule \ No newline at end of file diff --git a/app/template/shoelace.php b/app/template/shoelace.php index 052aeab2..7e8699ea 100644 --- a/app/template/shoelace.php +++ b/app/template/shoelace.php @@ -2,9 +2,16 @@ // These scripts load shoelace from CDN. The files should be cached forever so it is very convenient. ?> - + + \ No newline at end of file diff --git a/assets/css/entry_list.css b/assets/css/entry_list.css index 00e2aac0..ce873a6e 100644 --- a/assets/css/entry_list.css +++ b/assets/css/entry_list.css @@ -1,13 +1,16 @@ .tab-list { - border-bottom: solid var(--contrast) 2px; white-space: nowrap; overflow-x: auto; } .tab-list > button { - margin: 0; - border-radius: 1rem 1rem 0 0; - border-bottom: none; + margin: 0.1rem; + border-radius: 1.5rem; } .filter-panel { padding: 1rem; } + +.entries-header { + display: grid; + justify-items: end; +} diff --git a/assets/css/event_view.css b/assets/css/event_view.css index 40ec4574..639fce32 100644 --- a/assets/css/event_view.css +++ b/assets/css/event_view.css @@ -72,3 +72,8 @@ details summary:focus:not([role="button"]) { gap: 10px; flex-wrap: wrap; } + +sl-tab-group { + --indicator-color: var(--primary); + --sl-color-primary-600: var(--primary); +} diff --git a/database/migrations_sqlite/Version20241007062815.php b/database/migrations/Version20241007062815.php similarity index 98% rename from database/migrations_sqlite/Version20241007062815.php rename to database/migrations/Version20241007062815.php index bf3e6589..be84def2 100644 --- a/database/migrations_sqlite/Version20241007062815.php +++ b/database/migrations/Version20241007062815.php @@ -14,7 +14,7 @@ final class Version20241007062815 extends AbstractMigration { public function getDescription(): string { - return 'Add vehicles'; + return ''; } public function up(Schema $schema): void diff --git a/database/migrations_sqlite/Version20241114165603.php b/database/migrations_sqlite/Version20241128071722.php similarity index 97% rename from database/migrations_sqlite/Version20241114165603.php rename to database/migrations_sqlite/Version20241128071722.php index a3fcb524..2b52dc67 100644 --- a/database/migrations_sqlite/Version20241114165603.php +++ b/database/migrations_sqlite/Version20241128071722.php @@ -10,7 +10,7 @@ /** * Auto-generated Migration: Please modify to your needs! */ -final class Version20241114165603 extends AbstractMigration +final class Version20241128071722 extends AbstractMigration { public function getDescription(): string { diff --git a/routes.php b/routes.php index 8ad21078..6c69d1e8 100644 --- a/routes.php +++ b/routes.php @@ -50,10 +50,11 @@ Router::add('/evenements/$event_id/event_form', __DIR__ . '/app/pages/events/edit/EventEditForm.php'); //Vehicles -Router::add('/evenements/$event_id/vehicule/nouveau', 'pages/vehicle/vehicle_edit'); -Router::add('/evenements/$event_id/vehicule/$vehicle_id', 'pages/vehicle/vehicle_edit'); -Router::add('/evenements/$event_id/vehicule/$vehicle_id/supprimer', 'pages/vehicle/vehicle_delete'); -Router::add('/evenements/$event_id/vehicule/$vehicle_id/inscription/$user_id', 'pages/vehicle/vehicle_register'); +Router::add('/evenements/$event_id/vehicules', __DIR__ . '/app/pages/vehicle/vehicle_view.php'); +Router::add('/evenements/$event_id/vehicule/nouveau', __DIR__ . '/app/pages/vehicle/vehicle_edit.php'); +Router::add('/evenements/$event_id/vehicule/$vehicle_id', __DIR__ . '/app/pages/vehicle/vehicle_edit.php'); +Router::add('/evenements/$event_id/vehicule/$vehicle_id/supprimer', __DIR__ . '/app/pages/vehicle/vehicle_delete.php'); +Router::add('/evenements/$event_id/vehicule/$vehicle_id/inscription/$user_id', __DIR__ . '/app/pages/vehicle/vehicle_register.php'); // Event entry lists Router::add('/evenements/$event_id/participants', __DIR__ . '/app/pages/events/entry_list/entry_list.php'); From 719152dd75e0bf4c8c0ca1efef80b76bcd8a0f92 Mon Sep 17 00:00:00 2001 From: Mathieu Perrin Date: Sat, 7 Dec 2024 15:23:35 +0100 Subject: [PATCH 3/5] 276: add dates to vehicles --- app/pages/events/entry_list/entry_list.php | 4 +- app/pages/vehicle/vehicle_edit.php | 12 +++ app/pages/vehicle/vehicle_register.php | 93 +++++++++++++------ assets/css/event_view.css | 49 ++-------- ...28071722.php => Version20241207011522.php} | 4 +- database/models/vehicles.db.php | 6 ++ 6 files changed, 92 insertions(+), 76 deletions(-) rename database/migrations_sqlite/{Version20241128071722.php => Version20241207011522.php} (81%) diff --git a/app/pages/events/entry_list/entry_list.php b/app/pages/events/entry_list/entry_list.php index 1d0ea755..03e8ffca 100644 --- a/app/pages/events/entry_list/entry_list.php +++ b/app/pages/events/entry_list/entry_list.php @@ -17,6 +17,4 @@ render(["activity_id" => EventService::getActivityIdList($event_id)[0]->id]) : component(__DIR__ . "/entry_list_tabs.php")->render(["event_id" => $event_id]) ?>
- - - \ No newline at end of file + \ No newline at end of file diff --git a/app/pages/vehicle/vehicle_edit.php b/app/pages/vehicle/vehicle_edit.php index 1c96d1c7..32fd1e01 100644 --- a/app/pages/vehicle/vehicle_edit.php +++ b/app/pages/vehicle/vehicle_edit.php @@ -19,6 +19,8 @@ "start_location" => $vehicle->start_location, "return_location" => $vehicle->return_location, "capacity" => $vehicle->capacity, + "start_date" => date_format($vehicle->start_date, 'Y-m-d'), + "return_date" => date_format($vehicle->return_date, 'Y-m-d'), ]; } else { $vehicle = new Vehicle(); @@ -30,6 +32,8 @@ $start_location = $v->text("start_location")->label("Lieu de départ")->placeholder()->required(); $return_location = $v->text("return_location")->label("Lieu de retour")->placeholder()->required(); $capacity = $v->number("capacity")->label("Capacité du véhicule")->min($vehicle_id ? count(($vehicle->passengers)) : 1)->placeholder()->required(); +$start_date = $v->date("start_date")->label("Date de départ")->required(); +$return_date = $v->date("return_date")->label("Date de retour")->required(); if ($v->valid()) { @@ -39,6 +43,8 @@ $vehicle->manager = $user; $vehicle->event = $event; $vehicle->capacity = $capacity->value; + $vehicle->start_date = date_create($start_date->value); + $vehicle->return_date = date_create($return_date->value); em()->persist($vehicle); em()->flush(); redirect("/evenements/$event->id"); @@ -64,6 +70,12 @@
render() ?>
+
+ render() ?> +
+
+ render() ?> +
\ No newline at end of file diff --git a/app/pages/vehicle/vehicle_register.php b/app/pages/vehicle/vehicle_register.php index 4f805627..f9cc03ad 100644 --- a/app/pages/vehicle/vehicle_register.php +++ b/app/pages/vehicle/vehicle_register.php @@ -39,46 +39,79 @@
> -
- name ?> +
+
+ name ?> +
-
- - start_location ?> - - - - start_location ?> - +
passengers) ?> / capacity ?>
-
-
-
Passagers
- passengers[0]): ?> - Pas de passagers pour l'instant 🚘 - -

- passengers as $i => $passenger): ?> +

+
+
+
Départ
+
+ + start_location ?> - + + start_date->format("d M") ?> +
+
+
+
+
+
Retour
+
+ + return_location ?> - + + return_date->format("d M") ?> +
+
+
+
+
+
Capacité
+
+ passengers) ?> / capacity ?> +
+
+
+
+
+
Responsable
+
> - first_name ?> last_name ?> - -

+ manager->first_name ?> + manager->last_name ?> + +
+
-
-
Responsable
-

- > - manager->first_name ?> - manager->last_name ?> - -

+
+
+
Passagers
+ passengers[0]): ?> +
Pas de passagers pour l'instant 🚘
+ +
+ passengers as $i => $passenger): ?> + > + first_name ?> last_name ?> + +
+
diff --git a/assets/css/event_view.css b/assets/css/event_view.css index 639fce32..08631537 100644 --- a/assets/css/event_view.css +++ b/assets/css/event_view.css @@ -19,7 +19,6 @@ details summary:focus:not([role="button"]) { .vehicle-article details summary { display: grid; grid-template-columns: 1fr 1fr 1fr auto; - grid-template-areas: "vehicle-name location capacity button"; } .vehicle-article:where(:hover, :focus, :focus-within) { @@ -27,46 +26,6 @@ details summary:focus:not([role="button"]) { outline: none; } -.vehicle-name { - grid-area: vehicle-name; - text-align: center; - align-self: center; - justify-self: start; -} - -.vehicle-grid { - display: grid; - gap: 10px; - grid-template-columns: 1fr auto; - grid-template-areas: "vehicle-article register vehicle-delete"; -} - -.location { - grid-area: location; - text-align: center; - align-self: center; -} - -.capacity { - grid-area: capacity; - text-align: center; - align-self: center; -} - -.register { - grid-area: register; - text-align: center; - align-self: center; - margin: 0 0 var(--spacing); -} - -.vehicle-delete { - grid-area: vehicle-delete; - text-align: center; - align-self: center; - margin: 0 0 var(--spacing); -} - .passenger-flex { display: flex; gap: 10px; @@ -77,3 +36,11 @@ sl-tab-group { --indicator-color: var(--primary); --sl-color-primary-600: var(--primary); } + +dt { + font-weight: bold; +} + +dd { + margin-inline-start: 0; +} diff --git a/database/migrations_sqlite/Version20241128071722.php b/database/migrations_sqlite/Version20241207011522.php similarity index 81% rename from database/migrations_sqlite/Version20241128071722.php rename to database/migrations_sqlite/Version20241207011522.php index 2b52dc67..11a7754c 100644 --- a/database/migrations_sqlite/Version20241128071722.php +++ b/database/migrations_sqlite/Version20241207011522.php @@ -10,7 +10,7 @@ /** * Auto-generated Migration: Please modify to your needs! */ -final class Version20241128071722 extends AbstractMigration +final class Version20241207011522 extends AbstractMigration { public function getDescription(): string { @@ -20,7 +20,7 @@ public function getDescription(): string public function up(Schema $schema): void { // this up() migration is auto-generated, please modify it to your needs - $this->addSql('CREATE TABLE orm_vehicles (id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, manager_id INTEGER DEFAULT NULL, event_id INTEGER DEFAULT NULL, name VARCHAR(255) NOT NULL, start_location VARCHAR(255) NOT NULL, return_location VARCHAR(255) NOT NULL, capacity VARCHAR(255) NOT NULL, CONSTRAINT FK_744369D0783E3463 FOREIGN KEY (manager_id) REFERENCES orm_users (id) NOT DEFERRABLE INITIALLY IMMEDIATE, CONSTRAINT FK_744369D071F7E88B FOREIGN KEY (event_id) REFERENCES orm_events (id) NOT DEFERRABLE INITIALLY IMMEDIATE)'); + $this->addSql('CREATE TABLE orm_vehicles (id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, manager_id INTEGER DEFAULT NULL, event_id INTEGER DEFAULT NULL, name VARCHAR(255) NOT NULL, start_location VARCHAR(255) NOT NULL, return_location VARCHAR(255) NOT NULL, capacity VARCHAR(255) NOT NULL, start_date DATETIME NOT NULL, return_date DATETIME NOT NULL, CONSTRAINT FK_744369D0783E3463 FOREIGN KEY (manager_id) REFERENCES orm_users (id) NOT DEFERRABLE INITIALLY IMMEDIATE, CONSTRAINT FK_744369D071F7E88B FOREIGN KEY (event_id) REFERENCES orm_events (id) NOT DEFERRABLE INITIALLY IMMEDIATE)'); $this->addSql('CREATE INDEX IDX_744369D0783E3463 ON orm_vehicles (manager_id)'); $this->addSql('CREATE INDEX IDX_744369D071F7E88B ON orm_vehicles (event_id)'); $this->addSql('CREATE TABLE orm_vehicle_user (vehicle_id INTEGER NOT NULL, user_id INTEGER NOT NULL, PRIMARY KEY(vehicle_id, user_id), CONSTRAINT FK_64CCF499545317D1 FOREIGN KEY (vehicle_id) REFERENCES orm_vehicles (id) ON DELETE CASCADE NOT DEFERRABLE INITIALLY IMMEDIATE, CONSTRAINT FK_64CCF499A76ED395 FOREIGN KEY (user_id) REFERENCES orm_users (id) ON DELETE CASCADE NOT DEFERRABLE INITIALLY IMMEDIATE)'); diff --git a/database/models/vehicles.db.php b/database/models/vehicles.db.php index d11e6c1a..b0fcb934 100644 --- a/database/models/vehicles.db.php +++ b/database/models/vehicles.db.php @@ -26,6 +26,12 @@ class Vehicle #[Column] public string $capacity; + #[Column] + public DateTime $start_date; + + #[Column] + public DateTime $return_date; + #[ManyToOne] public User|null $manager = null; From 653fc4aed9d357c9bf26b3146d99033fd43ddf4b Mon Sep 17 00:00:00 2001 From: Mathieu Perrin Date: Sat, 7 Dec 2024 15:28:11 +0100 Subject: [PATCH 4/5] 276: add feature handling --- app/pages/events/view/event_view.php | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/app/pages/events/view/event_view.php b/app/pages/events/view/event_view.php index 952895cd..a44b6eb6 100644 --- a/app/pages/events/view/event_view.php +++ b/app/pages/events/view/event_view.php @@ -50,10 +50,12 @@ hx-target="#entry-list" > Participants - > - Véhicules - + on()): ?> + > + Véhicules + + - + on()): ?> + + \ No newline at end of file From a3ed7b87f0b058530ac7f7a03d5945ecca36fe08 Mon Sep 17 00:00:00 2001 From: Atmos4 Date: Wed, 11 Dec 2024 20:17:47 +0100 Subject: [PATCH 5/5] 276: remove unused migration flie --- database/migrations/Version20241007062815.php | 41 ------------------- 1 file changed, 41 deletions(-) delete mode 100644 database/migrations/Version20241007062815.php diff --git a/database/migrations/Version20241007062815.php b/database/migrations/Version20241007062815.php deleted file mode 100644 index be84def2..00000000 --- a/database/migrations/Version20241007062815.php +++ /dev/null @@ -1,41 +0,0 @@ -addSql('CREATE TABLE orm_vehicles (id INT AUTO_INCREMENT NOT NULL, manager_id INT DEFAULT NULL, event_id INT DEFAULT NULL, name VARCHAR(255) NOT NULL, start_location VARCHAR(255) NOT NULL, return_location VARCHAR(255) NOT NULL, capacity VARCHAR(255) NOT NULL, INDEX IDX_744369D0783E3463 (manager_id), INDEX IDX_744369D071F7E88B (event_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB'); - $this->addSql('CREATE TABLE orm_vehicle_user (vehicle_id INT NOT NULL, user_id INT NOT NULL, INDEX IDX_64CCF499545317D1 (vehicle_id), INDEX IDX_64CCF499A76ED395 (user_id), PRIMARY KEY(vehicle_id, user_id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB'); - $this->addSql('ALTER TABLE orm_vehicles ADD CONSTRAINT FK_744369D0783E3463 FOREIGN KEY (manager_id) REFERENCES orm_users (id)'); - $this->addSql('ALTER TABLE orm_vehicles ADD CONSTRAINT FK_744369D071F7E88B FOREIGN KEY (event_id) REFERENCES orm_events (id)'); - $this->addSql('ALTER TABLE orm_vehicle_user ADD CONSTRAINT FK_64CCF499545317D1 FOREIGN KEY (vehicle_id) REFERENCES orm_vehicles (id) ON DELETE CASCADE'); - $this->addSql('ALTER TABLE orm_vehicle_user ADD CONSTRAINT FK_64CCF499A76ED395 FOREIGN KEY (user_id) REFERENCES orm_users (id) ON DELETE CASCADE'); - } - - public function down(Schema $schema): void - { - // this down() migration is auto-generated, please modify it to your needs - $this->addSql('ALTER TABLE orm_vehicles DROP FOREIGN KEY FK_744369D0783E3463'); - $this->addSql('ALTER TABLE orm_vehicles DROP FOREIGN KEY FK_744369D071F7E88B'); - $this->addSql('ALTER TABLE orm_vehicle_user DROP FOREIGN KEY FK_64CCF499545317D1'); - $this->addSql('ALTER TABLE orm_vehicle_user DROP FOREIGN KEY FK_64CCF499A76ED395'); - $this->addSql('DROP TABLE orm_vehicles'); - $this->addSql('DROP TABLE orm_vehicle_user'); - } -}