fix(theme): Farben erben wieder den Standard statt ihn einzufrieren
Fuenf Farbspalten trugen einen fest eingebauten Vorgabewert — primary_color #4285f4, accent_color #ea4335, today_color #4285f4, month_divider_color und month_label_color #7090c0. Damit hatte *jeder* Nutzer immer eine eigene Farbe, und der Fallback settings.X || baseColor(X) kam nie zum Zug. Das Admin-Versprechen "Gilt fuer alle Nutzer ohne eigene Farbe" war fuer diese fuenf unerfuellbar, und die Werte widersprachen DEFAULT_COLORS im Frontend, das laut Kommentar die einzige Quelle sein soll. Das betraf nicht nur Altbestand: UserSettings wird ohne Farbwerte angelegt, also bekam auch jeder heute neu angelegte Nutzer das Blau. - models.py: die fuenf Spalten sind nullable, NULL heisst "erbt". - settings_router: NULL wird ausgeliefert statt durch einen Standard ersetzt, und ein explizites null wird gespeichert (NULLABLE_OVERRIDES). - main.py: einmalige Migration setzt genau die alten Vorgabewerte auf NULL. Bewusst gewaehlte Farben bleiben unangetastet. - calendar.js: eine erbende Zeile merkt sich das und sendet beim Speichern null. "Zurueck" heisst wieder erben, statt den aktuellen Standard in die Nutzerzeile zu kopieren — sonst erreichen spaetere Aenderungen des Standards den Nutzer nie mehr. Verifiziert: frische Installation liefert --primary #58B900 statt #4285f4; zurueckgeschriebenes Alt-Blau wird beim Neustart geleert; eine eigene Farbe (#FF00AA) ueberlebt die Migration. Suite 129 gruen, davon 5 neue. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
aaecfc435d
commit
8bc32faa7f
@@ -383,6 +383,28 @@ def _migrate():
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
# ── Theme inheritance ────────────────────────────────────────────
|
||||
# These five colours used to carry a hardcoded column default, so every
|
||||
# user row held a concrete value and the admin instance default could
|
||||
# never apply. Clear the ones that still hold exactly that old default
|
||||
# so they inherit again. A user who deliberately picked the same colour
|
||||
# also inherits now — which is the same colour, until an admin changes
|
||||
# the instance default.
|
||||
for col, old_default in (("primary_color", "#4285f4"),
|
||||
("accent_color", "#ea4335"),
|
||||
("today_color", "#4285f4"),
|
||||
("month_divider_color", "#7090c0"),
|
||||
("month_label_color", "#7090c0")):
|
||||
try:
|
||||
conn.execute(text(
|
||||
f"UPDATE user_settings SET {col} = NULL "
|
||||
f"WHERE lower({col}) = lower(:old)"
|
||||
), {"old": old_default})
|
||||
conn.commit()
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
|
||||
_migrate()
|
||||
|
||||
app = FastAPI(title="Calendarr", docs_url=None, redoc_url=None,
|
||||
|
||||
Reference in New Issue
Block a user