echo \$my_tasks_dot stand vor dem <li>, sodass der rote Badge als
freies Element zwischen den Navigationspunkten erschien. Badge-Span
wird jetzt innerhalb des <a>-Tags gerendert (analog zu \$collection_dot),
und \$my_tasks_dot wird zu Beginn jeder Loop-Iteration auf "" gesetzt.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
bootstrap.php rief session_start() mit Standard-Name PHPSESSID auf,
weil start.inc.php für Endpoint-Requests bewusst nicht geladen wird.
Das führte zu einer leeren Session → contactId = 0 → "Keine Berechtigung".
Lösung: Vor session_start() prüfen ob ein sid*-Cookie vorhanden ist
und ggf. session_name() entsprechend setzen, damit Endpoints und
Monolith dieselbe Session nutzen.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Sitepart 68 ("Bearbeitungsmaske") hatte den falschen Typ 36
(user/task_detail.php). Dadurch wurde beim Öffnen der "neue Aufgabe"-
Seite der User-Task-Detail-Action aufgerufen, die ohne assignment_id
mit "Ungültige Assignment-ID." abbricht.
Lösung: Typ 40 in intranet.php für admin/task_form.php eingetragen,
Sitepart 68 in der DB auf Typ 40 gesetzt.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- ALTER TABLE knowledgecenter_post_versions ADD COLUMN summary TEXT NULL AFTER content
- Add summary textarea to post edit form (after Quill editor)
- Include summary in insert_post_version() and update_post_version()
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
The forum module (topic table) does not exist. Remove the comment count
query to prevent a fatal crash when loading a post detail page.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Create module/shared_components/quill/ with toolbar_presets.js,
quill_resize.js and quill_resize.css — missing files caused a JS crash
in $(document).ready() before the save button's click handler was
registered, so clicking save did nothing
- Fix filesgallery.php session detection to search any sid* cookie
dynamically (site session name is 'sidawo', not the hardcoded
'sidintranet'), fixing the popup showing the homepage instead of
the gallery
- Revert categories_cardform.php from 3-tab layout back to original
sidebar layout with full-width permissions section below
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- post_cardform.php: remove Diskussion tab (forum module doesn't exist)
- post_cardform_contacts.php: guard get_contact_cards AJAX so it doesn't
fire with post_id=0 on new posts (caused "Ungültige Beitrags-ID" error)
- post_cardform_settings.php: remove Produkte section entirely — the
product/product_translation tables don't exist in this installation,
which caused a fatal crash when opening the settings tab
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
categories_cardform.php now uses a 3-tab layout (Allgemein / Berechtigungen /
Unterkategorien) instead of a content+sidebar layout. The permissions section
spans full width with a 6-column grid: Mandanten/Abteilungen/Rollen each in
2 cols, Einrichtungen/Fachbereiche each in 3 cols for more space.
post_cardform.php: the Diskussion tab crashed with a fatal require_once when
the forum module doesn't exist. Now guarded with file_exists() and shows a
placeholder message for new posts and missing modules.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
categories_cardform.php now loads and displays tagify pickers for
Einrichtungen and Fachbereiche alongside the existing Mandant/Abteilung/Rolle
pickers. The saveTagifyData() function passes all 5 types to update_category_links.
Also ran DB migration: all permission data from the 5 old _link tables has been
copied into the new permission tables (mandant: 178, department: 1108,
role: 2159, einricht: 10023, fachbereich: 2722 rows).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Added 293 new keys from 'weitere konstanten.php' (1429 → 1722 total).
Master file is now grouped into 45 thematic sections (Allgemein, Login,
Navigation, Intranet, Tasks, Events, Wiki, etc.), each alphabetically
sorted. 'weitere konstanten.php' is no longer needed.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
The previous merge used a greedy (.*?); regex that stopped at the first
semicolon — breaking on HTML entities like ö inside string values.
Switched to a quoted-string-aware regex ("..." / '...') that correctly
captures full PHP string literals including embedded semicolons.
Key count: 1429 (root file was untracked and never loaded, not a loss).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Four separate text_constants.inc.php files (root, mysyde/common,
mysyde/common/classes, mysyde/admin) contained overlapping and
diverging constants. Merged all 1596 unique keys—zero value conflicts—
into mysyde/admin/text_constants.inc.php, which Translate.php already
loads. The three other files are now thin stubs that require_once the
admin file, so all existing include paths continue to work.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
The new tasks and knowledgecenter_update modules were built against a
main_contact_link table that does not exist in this system. All 7 active
query sites now target main_contact_department (same column names,
active_d → active).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Statt $type_array (1-basiert) + $type_name_array (0-basiert) gibt es
jetzt ein einziges assoziatives Array $types [typ_nummer => name].
input_select bekommt array_keys/array_values — keine Verhaltensänderung,
aber das Muster ist ab sofort konsistent und erweiterbar.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Knowledgecenter Update, Globale Suche und alle Task/Zertifikate-Seiten
(Admin + User) ab Typ 28 fortlaufend eingetragen — kein Offset mehr
zwischen Label und Case-Nummer wie im Quellprojekt.
Nicht eingetragen: my_certificates.php (Datei existiert nicht im
tasks-Modul) und Search (Modul noch nicht vorhanden).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
main_contact_id wird jetzt mitgespeichert + UNIQUE (login_date, main_contact_id).
Damit zählt ein User der sich mehrfach ein-/ausloggt trotzdem nur einmal pro Tag.
Im Chart bleibt nur die anonyme Tagessumme sichtbar.
ALTER TABLE stat_login_daily
ADD COLUMN main_contact_id INT NOT NULL DEFAULT 0 AFTER login_date,
ADD UNIQUE KEY uq_user_day (login_date, main_contact_id);
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Zeigt anonyme Anmeldungen der letzten 30 Tage als Bar-Chart
(Chart.js, bereits im Admin geladen). Nur Tagessummen sichtbar,
keine Rückschlüsse auf einzelne Nutzer möglich.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Neue Tabelle stat_login_daily (nur Datum, keine User-ID).
Bei jedem erfolgreichen Login wird ein Eintrag geschrieben —
egal ob über Microsoft OAuth, Dev-Bypass oder klassisches Passwort-Login.
CREATE TABLE stat_login_daily (
id INT AUTO_INCREMENT PRIMARY KEY,
login_date DATE NOT NULL,
INDEX idx_login_date (login_date)
);
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Beim Abmelden wurde bisher immer auf login.microsoftonline.com weitergeleitet,
was lokal ins Leere läuft. Bei DISABLE_MS_AUTH=1 wird stattdessen
/?action=intranet_logout verwendet (Desktop- und Mobile-Button).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Im lokalen Docker-Betrieb funktioniert der Microsoft-OAuth-Flow nicht.
DISABLE_MS_AUTH=1 in docker-compose.yml schaltet ihn ab und zeigt
stattdessen ein einfaches Dev-Login-Formular (Eingabe der User-ID
aus main_contact). Auf 0 setzen, um MS-Auth wieder zu aktivieren.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Updated formatting and structure of functions in edit_contact.inc.php for better readability and consistency.
- Added comments to clarify the purpose of certain code sections, especially regarding mandant handling.
- Removed the deprecated phpinfo.php file to clean up the codebase.