diff --git a/lib/models/ConsultationSlot.php b/lib/models/ConsultationSlot.php index d3d96160819302ed439e9d1db987302268080f05..8356a34bac07005c8cfefdaf9815a93e14b8c924 100644 --- a/lib/models/ConsultationSlot.php +++ b/lib/models/ConsultationSlot.php @@ -22,6 +22,8 @@ */ class ConsultationSlot extends SimpleORMap { + private const EVENT_PREFIX = 'Stud.IP-Consultation-Event#'; + /** * Configures the model. * @param array $config Configuration @@ -137,6 +139,14 @@ class ConsultationSlot extends SimpleORMap ]); } + /** + * Returns whether the given event is an event for a consultation slot. + */ + public static function isSlotEvent(CalendarDate $event): bool + { + return str_starts_with($event->unique_id, self::EVENT_PREFIX); + } + /** * Returns whether this slot is occupied (by a given user). * @@ -195,10 +205,9 @@ class ConsultationSlot extends SimpleORMap * @param User $user [description] * @return string unique event id */ - protected function createEventId(User $user) + protected function createEventId(User $user): string { - $rand_id = md5(uniqid(self::class, true)); - return "Termin{$rand_id}-{$user->id}"; + return self::EVENT_PREFIX . "{$this->id}:{$user->id}"; } /** diff --git a/lib/models/calendar/CalendarDate.class.php b/lib/models/calendar/CalendarDate.class.php index 7026ece1d8a2dad5d54f0b2fa4a1227c13a35ea2..89b9d3142d06a30caf5a0ebabd5defa61e84e327 100644 --- a/lib/models/calendar/CalendarDate.class.php +++ b/lib/models/calendar/CalendarDate.class.php @@ -189,6 +189,15 @@ class CalendarDate extends SimpleORMap implements PrivacyObject public function isWritable(string $range_id) { + if (ConsultationSlot::isSlotEvent($this)) { + return false; + } + + if ($this->author_id === $range_id) { + //The author may always modify one of their dates: + return true; + } + if (CalendarDateAssignment::exists([$range_id, $this->id])) { //The date is in the calendar of the user/course //and therefore, the user or course administrator (tutor, dozent) diff --git a/lib/models/calendar/CalendarDateAssignment.class.php b/lib/models/calendar/CalendarDateAssignment.class.php index bdde5caae63872532ad25d025de73d6c6da58748..8edf87f64bfe3ed8e231f8667004cc334b00011c 100644 --- a/lib/models/calendar/CalendarDateAssignment.class.php +++ b/lib/models/calendar/CalendarDateAssignment.class.php @@ -521,10 +521,6 @@ class CalendarDateAssignment extends SimpleORMap implements Event public function isWritable(string $user_id): bool { - if ($this->calendar_date->author_id === $user_id) { - //The author may always modify one of their dates: - return true; - } if ($this->calendar_date->isWritable($user_id)) { //The date is writable. return true;