From 0544f72c5e7d8cf6aadb600cfb43e94a9cf875d4 Mon Sep 17 00:00:00 2001
From: Jonathan Weth <git@jonathanweth.de>
Date: Fri, 15 Mar 2024 11:10:57 +0100
Subject: [PATCH] Add default color for calendar feeds

---
 aleksis/apps/chronos/models.py      | 11 +++++++++-
 aleksis/apps/chronos/preferences.py | 32 ++++++++++++++++++++++++++++-
 2 files changed, 41 insertions(+), 2 deletions(-)

diff --git a/aleksis/apps/chronos/models.py b/aleksis/apps/chronos/models.py
index 7a4701cb..bf4b3f86 100644
--- a/aleksis/apps/chronos/models.py
+++ b/aleksis/apps/chronos/models.py
@@ -67,7 +67,7 @@ from aleksis.core.mixins import (
     SchoolTermRelatedExtensibleModel,
 )
 from aleksis.core.models import CalendarEvent, DashboardWidget, Group, Person, Room, SchoolTerm
-from aleksis.core.util.core_helpers import has_person
+from aleksis.core.util.core_helpers import get_site_preferences, has_person
 
 
 class ValidityRange(ExtensibleModel):
@@ -1476,6 +1476,10 @@ class LessonEvent(CalendarEvent):
         """Get the description of the lesson event."""
         return render_to_string("chronos/lesson_event_description.txt", {"event": reference_object})
 
+    @classmethod
+    def get_color(cls, request: HttpRequest | None = None) -> str:
+        return get_site_preferences()["chronos__lesson_color"]
+
     @classmethod
     def value_color(cls, reference_object: LessonEvent, request: HttpRequest | None = None) -> str:
         """Get the color of the lesson event."""
@@ -1522,6 +1526,7 @@ class LessonEvent(CalendarEvent):
             "amends": cls.value_meta(reference_object.amends, request)
             if reference_object.amends
             else None,
+            "title": reference_object.title,
             "teachers": [
                 {
                     "id": t.pk,
@@ -1627,6 +1632,10 @@ class SupervisionEvent(LessonEvent):
             "chronos/supervision_event_description.txt", {"event": reference_object}
         )
 
+    @classmethod
+    def get_color(cls, request: HttpRequest | None = None) -> str:
+        return get_site_preferences()["chronos__supervision_color"]
+
     @classmethod
     def get_objects(
         cls, request: HttpRequest | None = None, params: dict[str, any] | None = None
diff --git a/aleksis/apps/chronos/preferences.py b/aleksis/apps/chronos/preferences.py
index 5fac608e..d319001c 100644
--- a/aleksis/apps/chronos/preferences.py
+++ b/aleksis/apps/chronos/preferences.py
@@ -2,8 +2,14 @@ from datetime import time
 
 from django.utils.translation import gettext_lazy as _
 
+from colorfield.widgets import ColorWidget
 from dynamic_preferences.preferences import Section
-from dynamic_preferences.types import BooleanPreference, IntegerPreference, TimePreference
+from dynamic_preferences.types import (
+    BooleanPreference,
+    IntegerPreference,
+    StringPreference,
+    TimePreference,
+)
 
 from aleksis.core.registries import person_preferences_registry, site_preferences_registry
 
@@ -107,3 +113,27 @@ class SendNotificationsPerson(BooleanPreference):
     name = "send_notifications"
     default = True
     verbose_name = _("Send notifications for current timetable changes")
+
+
+@site_preferences_registry.register
+class LessonEventFeedColor(StringPreference):
+    """Color for the lesson calendar feed."""
+
+    section = chronos
+    name = "lesson_color"
+    default = "#a7ffeb"
+    verbose_name = _("Lesson calendar feed color")
+    widget = ColorWidget
+    required = True
+
+
+@site_preferences_registry.register
+class SupervisionEventFeedColor(StringPreference):
+    """Color for the supervision calendar feed."""
+
+    section = chronos
+    name = "supervision_color"
+    default = "#e6ee9c"
+    verbose_name = _("Supervision calendar feed color")
+    widget = ColorWidget
+    required = True
-- 
GitLab