# Galileo Kanban - Developer Documentation / Vývojářská dokumentace

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

---

<a id="english"></a>
## 🇬🇧 English: Developer Documentation (Detailed File Reference)

Galileo Kanban relies on a strictly structured vanilla stack. The entire logic is split between self-explanatory files acting as Controllers.

### 1. Database and Setup Wrapper
- **`api/db.php`**: Contains the `Database` Singleton class. It spins up the PDO connection reading configurations from `api/config.php`. Ensures only one concurrent DB connection is open during any HTTP request.
- **`api/config.php`**: Holds logic toggles (LDAP, SMTP) and environment constants.

### 2. The API Endpoints (Controllers)
Every file under the `api/` folder functions as a REST-like controller parsing `$_GET['action']` and `$php://input`.

- **`api/auth.php`**: Resolves sessions (`session_start()`), intercepts the user, checks LDAP binds (via Active Directory), manages passwords, and issues the `mobile_token` used in Android transitions.
- **`api/users.php`**: Enables frontend searching queries for mentioning and assigning tasks. Powers the user lookup autocomplete fields in modals. 
- **`api/boards.php`**: Validates whether the current authenticated user has permission (Owner/Editor/Viewer) before querying standard SQL `SELECT * FROM boards`. Also handles Board deletions and creations.
- **`api/columns.php`**: Manages the horizontal pillars within a board. Handles repositioning weights logic for Drag & Drop sorting.
- **`api/tasks.php`**: The most vital file. Handles CRUD (Create/Read/Update/Delete) for individual cards. It evaluates dragging tasks between different columns or re-arranging them in the exact same column using integer sorting.
- **`api/comments.php`**: Handles inserting and retrieving timeline messages inside the Task Detail modal popup.
- **`api/teams.php`**: Handles assigning roles (Editor, Viewer) to extra users so they can collaborate on the board.
- **`api/admin.php`**: Strictly protected endpoint. Refuses any connection if `$_SESSION['role'] !== 'admin'`. Handles forced password changes, user deactivations, and user wipeouts.
- **`api/board_chat.php`**: Handles real-time (polling/fetch-based) discussion for the entire project board's sidebar chat.
- **`api/messages.php`**: Responsible for the Direct Message (Inbox) functionality.

### 3. Frontend Ecosystem (`assets/js/`)
- **`api.js`**: An abstraction layer. Instead of writing raw `fetch` calls, the app uses namespaced functions: e.g. `window.api.loadBoard(id)`, `window.api.moveTask(data)`. Returns structured JSON Promises.
- **`app.js`**: The massive DOM manipulation brain. It attaches `.addEventListener` to static DOM buttons (like `#btn-login`, `#btn-new-board`) and dynamically generates HTML strings for columns via template literals (e.g. ``<div class="task">${task.title}</div>``). Interacts directly with `api.js` to redraw the screen upon successful operations without forcing a page reload.

---

<a id="čeština"></a>
## 🇨🇿 Čeština: Vývojářská dokumentace (Detailní reference souborů)

Galileo Kanban je strukturován tak, jak se vyvíjely klasické a ověřené PHP systémy, ale s nádechem moderních Single Page Aplikací komunikující skrze JSON endpointy.

### 1. Jádro a připojení k datům
- **`api/db.php`**: Extrémně kritický soubor, který ukrývá třídu (Návrhový vzor Singleton). Ta zaručuje, že nedochází k duplicitním instancím databáze. Zajišťuje absolutní bezpečí přenosu přes abstraktní PDO vrstvu (zabrání zranitelnostem typu SQL Injection).
- **`api/config.php`**: Definiční soubor veškerých konstant, na které se systém v chodu doptává (Např. IP adresa databáze, rozhodnutí o LDAP loginu a heslo k emailovému serveru).

### 2. Řadiče (Endpointy v API složce)
Každý soubor zde slouží jako křižovatka. Dívá se na zadanou URL proměnnou `action` a podle ní volí funkci.

- **`api/auth.php`**: Komplexní soubor vyřizující `session_start()`. Umí číst PHP/LDAP balíčky z doménového AD řadiče Windows. Ošetřuje zašifrování hesla uživatelů přes `password_hash()` a odesílá tzv. `mobile_token` pro přepnutí z mobilní aplikace.
- **`api/users.php`**: Velmi drobný soubor, který dělá jedinou věc – našeptává. Na vstupu vezme písmeno a z databáze vrátí relevantní kolegy, abychom je mohli přidat do týmu nebo jim přidělit úkol.
- **`api/boards.php`**: Kontrola autorizace (např. dotaz na tabulku `board_users`, zdali máte do projektu oprávnění vstoupit). Zodpovídá za veškerý výčet vašich nástěnek v bočním menu a za nebezpečné mazání celého projektu z databáze.
- **`api/columns.php`**: Spravuje vertikální pruhy (sloupce). Vyřizuje složitou matematickou rovnici při Drag&Drop algoritmu (mění klíče `sort_order`, aby se tabulky nepřeházely po obnovení okna).
- **`api/tasks.php`**: Největší kódová základna pracující se čtením úkolů, přiřazováním deadlinů, uživatelů a stavů. Mění cizí klíče `column_id` úkolu, čímž úkol cestuje podél nástěnky.
- **`api/comments.php`**: Izolovaná tabulka historie diskuzí u samotných úkolů (poznámky k dané kartičce).
- **`api/teams.php`**: Uděluje lidem práva. Propojuje uživatele a nástěnku skrz průsečíkovou tabulku s označením role (Editor/Viewer).
- **`api/admin.php`**: Extrémně chráněná logika. Vždy začíná kontrolou, zdali má odesílatel v Session roli `admin`. Následně provádí ty nejhrubější databázové čistky (změny cizích hesel, mazání profilů plošně z DB).
- **`api/board_chat.php`**: Píše a tahá do postranního panelu všeobecnou projektovou diskuzi (Board Chat).
- **`api/messages.php`**: Samostatný modul "Inboxu", který vytváří matici vztahů 1-on-1 (Direct Messaging mezi kolegy mimo jakýkoli projekt).

### 3. Ekosystém Frontend Souborů (`assets/js/`)
- **`api.js`**: JavaScriptová fasáda. Uvnitř najdete pouze zformalizované funkce zjednodušující odesílání klasického prohlížečového síťového dotazu `fetch()`. Třeba `window.api.deleteTask(125)` automaticky vytvoří patřičnou asynchronní POST výzvu.
- **`app.js`**: Samotný "motor" vnitřností. Jsou tu stovky řádek reagujících na vaše kliknutí myší. Obsluhuje vykreslení HTML z proměnných přijatých právě z API vrstvy, animuje vyskakující modální okénka (Modals) a přepíná tvořivé náhledy mezi login kartou, nástěnkou a administrací bez mrknutí klasického načítání stránky (Single Page App filozofie).
