# Galileo Kanban - Administrator Manual / Administrátorská příručka

[English Version](#english) | [Česká verze](#čeština)

---

<a id="english"></a>
## 🇬🇧 English: Administrator Manual (In-depth Systems Documentation)

This manual provides an exhaustive, highly technical overview of managing, installing, and maintaining the Galileo Kanban operational framework.

### 1. Low-Level Provisioning & DB Engineering
**Automatic Build System:**
The backend logic utilizes dynamic PDO table evaluation in `db.php`. Unless bypassed, Kanban will auto-generate an SQLite file (`api/database.sqlite`) upon the absolute first web request.
Be aware: If your directory permissions forbid writing, this step will crash immediately.

**Manual DB Setup:**
Two raw SQL files are provided: `database.sql` and `new_database.sql`. They contain `CREATE TABLE` constraints formatted explicitly for MySQL/MariaDB structures. 
- **`setup_reset_db.php`**: This extremely powerful root script loops through tables and truncates (or DROPs) them completely, seeding initial architecture. *This script must be deleted from your webroot once deployment is finalized to avoid catastrophic arbitrary resets by malicious visitors.*
- **`fix_db.php`**: Used safely when pulling an update to your software. It checks for missing columns (like a new `dueDate` or `mobile_token` field) and softly patches the database using `ALTER TABLE ... ADD COLUMN` statements without erasing existing records.

### 2. Comprehensive Deep-Dive into `api/config.php`
Every single environmental execution variable is sourced from `config.php`.

**Enterprise Features:**
LDAP Configuration behaves directly with Microsoft OS architectures:
1. `USE_LDAP_AUTH` -> set to `true`.
2. When a user logs into `auth.php`, the system abandons parsing table `users.password_hash`. It instead executes a pure `ldap_bind()` request targeting `LDAP_SERVER` via the active port 389.
3. If `REQUIRE_ADMIN_APPROVAL = true`, successfully bound Active Directory workers are halted with a warning UI prompt, demanding an Admin manually goes to "Admin Panel" and flips their user module flag to `active = 1`. This stops wildcard AD intrusions.

**Transport Security (Sessions & Proxies):**
Because Kanban is built on bare PHP Sessions:
- `session.cookie_httponly = 1;` hard-blocks frontend JS injected payloads from scraping the literal hex value of the user's active token.
- If reverse-proxying Kanban behind NGINX SSL on a NAS, you *MUST* define `ini_set('session.cookie_secure', 1);`.

### 3. Absolute Breakdown of the Admin Panel Functions
The `role: admin` capability (assigned sequentially to userId=1) opens the exact capabilities listed below:
- **Toggling accounts (Deactivate):** Runs `UPDATE users SET is_active=0`. The user receives a JSON block upon login attempting to resolve their session and kicks them straight out. However, `board_users` correlations persist, so their legacy chat names remain intact.
- **Forced Restructuring (Ownership Bypass):** If an Executive leaves, an admin queries their unique board footprint. The system requires picking a secondary user ID target. The DB engine then executes `UPDATE boards SET owner_id = :newTarget` guaranteeing workflow continuity.
- **Wiping Data completely:** A pure cascading `DELETE` clause targeting user rows, decoupling any related tokens or internal metadata globally. 

---

<a id="čeština"></a>
## 🇨🇿 Čeština: Administrátorská příručka (Hluboce analytická dokumentace systémů)

Tato rozsáhlá analytická dokumentace proniká do nejhlubších technických rovin nasazení aplikace a konfigurace Kanbanu.

### 1. Inženýrství aplikačních dat & Databázové Skripty
Kanban dokáže přežít v bezdatabázovém prostředí díky auto-generaci lokální souborové SQLite varianty (což se vyvolá zavoláním abstraktního mechanismu v `db.php`). Pokud ovšem napojujete MariaDB/MySQL přes váš NAS nebo server, setkáte se s údržbárenskými komponentami:

- **`setup_reset_db.php`**: Tzv. "The Nuclear Option" (Nukleární řešení). Spuštění tohoto PHP skriptu vyhledá všechny tabulky, zcela je svrhne dotazy `DROP TABLE IF EXISTS` a přeskládá od čistého základu. **Po startu produkční éry firmy tento soubor nezapomeňte ihned ručně ze serveru SMAZAT**, jinak by ho např. náhodný procházející bot mohl vyvolat.
- **`fix_db.php`**: Relativně bezpečný migrační skript. Funguje na principu "Soft patch" (jemná aktualizace). Vyhledává sloupce a pokud na cílové databázi chybí nová úprava kódu (třeba přidání nového cizího klíče nebo proměnné z updatu), bezpečně je dotazem `ALTER TABLE` doplní k tělům bez úhony na datech stávajících objektů a úkolů.
- **`export_db.php`**: Jednorázový SQL Dump – provede lokální záložní sjetí databáze do textového streamu.

### 2. Anatomie řídícího souboru `api/config.php`
Soubor Config určuje úplně veškerá restrikční pravidla, jak se vaše instance chová na úrovni hardware-sítě.

**Autentizace Korporátním Řadičem Domény (LDAP/AD):**
Tato unikátní vlastnost dokáže překlenout nutnost vlastních hesel a přesunout ověření přímo k jádru vašich Windows Firemních PC kontrolerů.
1. Klíčem je `define('USE_LDAP_AUTH', true);`.
2. Při pokusu o klik na "Přihlásit" přeskočí `auth.php` všechny kontroly tabulky `users` a pošle tzv. protokolární `ldap_bind()` příkaz přímo vstříc definovanému `LDAP_SERVER` portu na doméně (například `ldap://firma.local`).
3. Pokud doménový řadič vydá příkaz, že uživatel k Windows má přístup, je zapsán. Pokud ale máte z bezpečnostních důvodů aktivovaného strážce `REQUIRE_ADMIN_APPROVAL = true`, systém zaměstnance okamžitě zablokuje a nedovolí mu vejít, dokud administrátor Kanbanu neklikne v sekci Správa Uživatelů na políčko jeho schválení.

**Zabezpečení přenosů (Security Layers):**
- Protože je aplikační vrstva závislá na cookies, má natvrdo vtištěno `session.cookie_httponly = 1;`. Toto zajišťuje nemožnost odcizit přihlašovací razítko (`PHPSESSID`) nakaženým JavaScriptem uživatelského stroje.
- Pro HTTPS Reverse proxy nasazení přes servery NGINX nebo Synology otevírejte pravidlo `session.cookie_secure = 1`.

### 3. Anatomie Akcí Administrovaného Účtu
Máte-li status admina (zřizuje se historicky automaticky u prvního zapsaného účtu na platformu), máte plnou DB moc s následujícím vlivem na infrastrukturu:
- **Tlačítko Deaktivace:** Vyžene příkaz `UPDATE users SET is_active=0`. Od tohoto okamžiku se `auth.php` ihned odmítne zabývat ověřením dané osoby. Kouzlo deaktivace však spočívá v tom, že cizí klíče oné osobou dokončených úkolů či zpráv navždy na nástěnkách zůstanou – jméno "odejitého" zaměstnance není smazáno s ním.
- **Migrace Majetku Nástěnek (Vynucený převod vůdce projektu):** Při kliku na smazat uživatele, pokud je dotyčný jediný `owner_id` stávajících nástěnek, Kanban ho odmítne zmizíkovat, aby nástěnka nepropadla v černé díře. Systém nejprve přinutí Administrátora vybrat jinou osobu k provolení na pozici ředitele dané domény (`boardu`), načež vykoná překlenovací dotaz.
- **Smazání uživatele:** Čistí účet natvrdo. Cascade delete zlikviduje všechny jeho chat-lines, zruší mu pozice v `board_users` a fyzicky ho zničí v primární entitní tabulce.
