From 47b46cf41d0e6b15448f2369c3e2e8efdd0b0733 Mon Sep 17 00:00:00 2001 From: Philipp Hofer Date: Mon, 28 Apr 2025 22:20:06 +0200 Subject: [PATCH 1/2] format dtstart according to ics standard -> leading zero --- src/model/event.rs | 8 +++++++- src/model/trip.rs | 9 ++++++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/src/model/event.rs b/src/model/event.rs index 90eb9c0..6258efb 100644 --- a/src/model/event.rs +++ b/src/model/event.rs @@ -457,10 +457,16 @@ WHERE trip_details.id=? format!("event-{}@rudernlinz.at", self.id), "19900101T180000", ); + let time_str = self.planned_starting_time.replace(':', ""); + let formatted_time = if time_str.len() == 3 { + format!("0{}", time_str) + } else { + time_str.clone() // TODO: remove again + }; vevent.push(DtStart::new(format!( "{}T{}00", self.day.replace('-', ""), - self.planned_starting_time.replace(':', "") + formatted_time ))); let original_time = NaiveTime::parse_from_str(&self.planned_starting_time, "%H:%M") diff --git a/src/model/trip.rs b/src/model/trip.rs index 9b14133..98dd878 100644 --- a/src/model/trip.rs +++ b/src/model/trip.rs @@ -148,10 +148,17 @@ WHERE trip_details.id=? pub(crate) async fn get_vevent(self, user: &User) -> ics::Event { let mut vevent = ics::Event::new(format!("trip-{}@rudernlinz.at", self.id), "19900101T180000"); + let time_str = self.planned_starting_time.replace(':', ""); + let formatted_time = if time_str.len() == 3 { + format!("0{}", time_str) + } else { + time_str + }; + vevent.push(DtStart::new(format!( "{}T{}00", self.day.replace('-', ""), - self.planned_starting_time.replace(':', "") + formatted_time ))); let original_time = NaiveTime::parse_from_str(&self.planned_starting_time, "%H:%M") From 8059e5b8fc12b15f40b49d222c262ec2a4bc29c4 Mon Sep 17 00:00:00 2001 From: Philipp Hofer Date: Tue, 29 Apr 2025 20:36:32 +0200 Subject: [PATCH 2/2] log event updates --- src/model/event.rs | 16 +++++++++++++++- src/tera/admin/event.rs | 4 ++-- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/src/model/event.rs b/src/model/event.rs index 6258efb..5ef81e4 100644 --- a/src/model/event.rs +++ b/src/model/event.rs @@ -313,7 +313,7 @@ WHERE trip_details.id=? } //TODO: create unit test - pub async fn update(&self, db: &SqlitePool, update: &EventUpdate<'_>) { + pub async fn update(&self, db: &SqlitePool, user: &EventUser, update: &EventUpdate<'_>) { sqlx::query!( "UPDATE planned_event SET name = ?, planned_amount_cox = ? WHERE id = ?", update.name, @@ -340,6 +340,20 @@ WHERE trip_details.id=? .await .unwrap(); //Okay, as planned_event can only be created with proper DB backing + Log::create( + db, + format!( + "{} updated the event {} on {} at {} from {:?} to {:?}", + user.user.name, + self.name, + tripdetails.day, + tripdetails.planned_starting_time, + self, + update + ), + ) + .await; + if !tripdetails.always_show && update.always_show { Self::advertise( db, diff --git a/src/tera/admin/event.rs b/src/tera/admin/event.rs index e78c465..2bccdcf 100644 --- a/src/tera/admin/event.rs +++ b/src/tera/admin/event.rs @@ -65,7 +65,7 @@ struct UpdateEventForm<'r> { async fn update( db: &State, data: Form>, - _admin: EventUser, + user: EventUser, ) -> Flash { let update = event::EventUpdate { name: data.name, @@ -78,7 +78,7 @@ async fn update( }; match Event::find_by_id(db, data.id).await { Some(planned_event) => { - planned_event.update(db, &update).await; + planned_event.update(db, &user, &update).await; Flash::success(Redirect::to("/planned"), "Event erfolgreich bearbeitet") } None => Flash::error(Redirect::to("/planned"), "Planned event id not found"),