diff --git a/apps/production/wikijs-config.py b/apps/production/wikijs-config.py index fb80f19..30becc6 100644 --- a/apps/production/wikijs-config.py +++ b/apps/production/wikijs-config.py @@ -310,8 +310,10 @@ def set_navigation(jwt: str): ] gql('mutation($m:NavigationMode!){navigation{updateConfig(mode:$m){responseResult{succeeded}}}}', jwt, {"m": "STATIC"}) + # Nav-Baum unter der Standard-Locale 'de' (die Seiten liegen nach der Migration unter + # de; getTree wird mit der Seiten-Locale abgefragt — ein en-Baum bliebe unsichtbar). gql('mutation($t:[NavigationTreeInput]!){navigation{updateTree(tree:$t)' - '{responseResult{succeeded message}}}}', jwt, {"t": [{"locale": "en", "items": items}]}) + '{responseResult{succeeded message}}}}', jwt, {"t": [{"locale": "de", "items": items}]}) log("Navigation gesetzt (Custom-Sidebar; Betrieb nur für Admins)") @@ -344,6 +346,62 @@ def ensure_html_rendering(jwt: str): log("HTML-Rendering aktiviert (markdownCore.allowHTML) — Neustart nötig auf frischer Instanz") +def ensure_locale(jwt: str): + # Deutsch als Standardsprache: die Inhalte sind deutsch, hingen aber an 'en'. + # updateLocale lädt live (setCurrentLocale + refreshNamespaces, KEIN Neustart); + # namespacing bleibt aus (eine Sprache, saubere /-URLs), 'en' bleibt als + # Namespace registriert. + loc = gql('{localization{locales{code isInstalled} config{locale namespaces}}}', + jwt)["localization"] + installed = {l["code"] for l in loc["locales"] if l["isInstalled"]} + if "de" not in installed: + # de muss in der locales-Tabelle liegen (updateLocale liest dort isRTL). Auf + # frischen Instanzen ggf. herunterladen (braucht Egress) — weich, kein Hard-Fail. + try: + gql('mutation{localization{downloadLocale(locale:"de")' + '{responseResult{succeeded message}}}}', jwt) + log("Locale 'de' heruntergeladen") + except Exception as e: # noqa: BLE001 + log(f"WARN: downloadLocale(de) fehlgeschlagen ({e}) — Locale-Umstellung übersprungen") + return + if loc["config"]["locale"] != "de": + ns = sorted(set((loc["config"].get("namespaces") or []) + ["de", "en"])) + gql('mutation($l:String!,$a:Boolean!,$n:Boolean!,$ns:[String]!){localization{' + 'updateLocale(locale:$l,autoUpdate:$a,namespacing:$n,namespaces:$ns)' + '{responseResult{succeeded message}}}}', + jwt, {"l": "de", "a": True, "n": False, "ns": ns}) + log("Standardsprache auf Deutsch gesetzt (de)") + # Inhalte en->de migrieren (patcht nur die pages-Tabelle; das ist auch Wiki.js' + # eigener Locale-Migrationsweg, kollisions-sicher via whereNotExists). Danach Tree + # + Suchindex neu bauen, aber NUR wenn wirklich migriert wurde — sonst teurer No-op + # bei jedem Job-Lauf. (git-storage-Frontmatter der Altdateien bleibt 'en' und heilt + # beim nächsten Bearbeiten; dormante Dateien werden nicht re-importiert.) + m = gql('mutation{pages{migrateToLocale(sourceLocale:"en",targetLocale:"de")' + '{responseResult{succeeded message} count}}}', jwt)["pages"]["migrateToLocale"] + if (m.get("count") or 0) > 0: + gql('mutation{pages{rebuildTree{responseResult{succeeded}}}}', jwt) + gql('mutation{search{rebuildIndex{responseResult{succeeded}}}}', jwt) + log(f"Inhalte nach de migriert ({m['count']} Seiten) + Tree/Suchindex neu gebaut") + else: + log("Locale-Migration: keine en-Seiten offen (bereits de)") + + +def ensure_timezones(jwt: str): + # Systemkonten auf Europe/Berlin statt Wiki.js-Default America/New_York: guest + # (id 2, treibt die anonyme/Standard-Anzeige) + der Admin. Menschliche OIDC-Nutzer + # setzen ihre TZ im Profil; NEUE Nutzer erben aber weiter den im Core hardcodierten + # New_York-Default (server/core/auth.js) — nur per Fork-Patch änderbar, nicht per + # Config. update patcht nur das timezone-Feld (kein Nulling, groups nur bei Array). + ids = {2} # guest + for u in gql("{users{list{id email}}}", jwt)["users"]["list"]: + if u["email"] == ADMIN_EMAIL: + ids.add(u["id"]) + for uid in sorted(ids): + gql('mutation($id:Int!){users{update(id:$id,timezone:"Europe/Berlin")' + '{responseResult{succeeded message}}}}', jwt, {"id": uid}) + log(f"Zeitzone Europe/Berlin für Systemkonten gesetzt (ids {sorted(ids)})") + + def group_id(jwt: str, name: str): for g in gql("{groups{list{id name}}}", jwt)["groups"]["list"]: if g["name"] == name: @@ -395,9 +453,11 @@ def main(): ensure_oidc(jwt) set_hide_local(jwt) ensure_theming(jwt) + ensure_locale(jwt) # Deutsch als Default + Inhalte en->de migrieren (vor der Nav) set_navigation(jwt) ensure_html_rendering(jwt) ensure_git_storage(jwt) + ensure_timezones(jwt) # Systemkonten auf Europe/Berlin log("fertig — Wiki.js konfiguriert")