isEDU
Studijní evidence více škol, studenti, lektoři, programy, předměty a sylaby. Centrální přihlášení a MySQL přes eLoader.
Documentation and check-in manual
Releases
Older versions (16)
- 0.3.10 · 2026-09-17 · ZIP · JSON
- 0.3.9 · 2026-09-17 · ZIP · JSON
- 0.3.8 · 2026-09-16 · ZIP · JSON
- 0.3.7 · 2026-09-16 · ZIP · JSON
- 0.3.6 · 2026-09-16 · ZIP · JSON
- 0.3.5 · 2026-09-16 · ZIP · JSON
- 0.3.4 · 2026-09-16 · ZIP · JSON
- 0.3.3 · 2026-09-16 · ZIP · JSON
- 0.3.1 · 2026-09-16 · ZIP · JSON
- 0.3.0 · 2026-09-15 · ZIP · JSON
- 0.2.4 · 2026-09-14 · ZIP · JSON
- 0.2.3 · 2026-09-14 · ZIP · JSON
- 0.2.2 · 2026-09-14 · ZIP · JSON
- 0.2.1 · 2026-09-14 · ZIP · JSON
- 0.2.0 · 2026-09-13 · ZIP · JSON
- 0.1.0 · 2026-09-13 · ZIP · JSON
README
# isEDU 0.1.0
Autor: PB · 13. 9. 2026
První provozní etapa studijního informačního systému pro více škol. Aplikace běží v eLoaderu, používá jeho společné knihovny `./lib/`, templates, přihlášení, MySQL spojení a centrální log. Dokumenty a testy patří do dalších samostatných aplikací.
## Instalace
1. Aktualizujte eLoader **1.12.0 nebo 1.13.0** na přiloženou **1.14.0**. Vydání zachovává nové funkce 1.13.0 (Composer, CentralLog a databázové profily) a doplňuje deklarativní `login.json` a informace pro SDK isEDU.
2. V eLoaderu otevřete **Nastavení → Databázová připojení**. Založte povolený profil MariaDB/MySQL s hostem, portem, uživatelem a heslem. U profilu vyplňte existující databázi a použijte **Testovat spojení**. Heslo spravuje výhradně eLoader.
3. V **Aplikace → ZIP** nahrajte `isedu-0.1.0.zip`, prohlédněte balíček a nainstalujte jej. Stejný ZIP lze publikovat jako projekt isEDU na eUpdate a instalovat z jeho odkazu.
4. V **Databázová připojení → Přidělení aplikacím** vyberte isEDU, typ MySQL, vytvořený profil a jméno databáze.
5. Otevřete isEDU jako superadmin. Zadejte název organizace a vytvořte tabulky. Vzniknou pouze tabulky `isedu_*` v přidělené MySQL.
6. V **Školy** založte své tři školy. Nejsou dodána smyšlená jména ani omezení počtu škol.
7. Volitelně spusťte **Import SQLite** podle postupu níže. Import se nespustí při instalaci, otevření aplikace, vložení souboru ani aktualizaci.
8. V eLoaderu ve správě aplikací povolte isEDU jako zdroj přihlášení. E-mailové SSO pro další aplikace povolujte samostatně podle požadované důvěry. Nastavte doručování PINů v eLoaderu.
9. Přidělte zaměstnancům role a lektorům programy, předměty nebo třídy. Účet bez takového přiřazení studenty neuvidí.
## První rozsah
- Více škol v jedné organizaci; oddělené rozsahy oprávnění zaměstnanců.
- Studentské a lektorské profily nad společnou evidencí osob a přihlašovacích účtů.
- Více studií jedné osoby, vazba na konkrétní publikovanou verzi studijního plánu.
- Programy, předměty, ECTS, EQF, zakončení, třídy a členství.
- Verze studijních plánů: koncept lze upravovat, publikovaný plán je uzamčen. Kopie vytváří novou verzi.
- Sylaby CZ/EN, cíle, výstupy, osnova, literatura, rozsah, historie verzí a publikování.
- Seznamy, hledání, řazení, stránkování, formuláře, mobilní zobrazení.
- Ruční import, centrální logy, instalace modulů a aktualizace z eUpdate i ZIPu.
## Přihlašování a stav účtu
Kořenový **login.json** popisuje tabulky, sloupce a podmínky. MySQL čte eLoader; isEDU neimplementuje vlastní ověřování PINu nebo hesla. Přihlašovací identita má stabilní tvar `u:<id účtu>`. Lze hledat přihlašovacím jménem, e-mailem a původním ID; při nejednoznačném výsledku se přihlášení odmítne. Importované loginy mají tvar `s:<původní ID>` a `l:<původní ID>`.
- Nový student: `pending`. Po ověření kontaktu PINem má přístup pouze k aktivaci. Stisknutím **Aktivovat můj účet** získá běžný přístup.
- Aktivovaný student: `active`. Aktivní studium není podmínkou přístupu.
- Absolvent: `graduated`. Nemá studentský přístup. Historie jeho dat zůstává zachována.
- Blokovaný student: `blocked`. Nemá studentský přístup.
- Lektor musí mít `active=1`. Vidí studenty přiřazeného programu, předmětu nebo třídy, vždy v příslušné škole.
- Další zaměstnanecká nebo lektorská role téže osoby se posuzuje samostatně. Pro zákaz všech rolí vypněte přihlašovací účet `enabled=0`.
- Stav **studia** `completed` neoznačuje automaticky celou osobu za absolventa; může mít souběžná studia. Celkový stav absolventa nastavuje studijní oddělení na kartě studenta.
Student upravuje vlastní jméno, tituly a kontaktní údaje. Přihlašovací e-mail a telefon pro PIN jsou oddělené od kontaktů a spravuje je administrátor. Student si nemůže změnit roli, aktivaci/absolvování ani studijní zařazení prostřednictvím editace profilu.
## Ruční import
SQLite vložte do `./import/` isEDU nebo nahrajte ve formuláři. Podporován je také trvalý adresář `private/app/isedu/import/` při standardním nasazení eLoaderu a soukromá složka `Context::dataPath()/import/`. Všechny tyto cesty mají zůstat mimo veřejný kořen hostingu. Preferujte trvalou složku; adresář konkrétního vydání může být při aktualizaci nahrazen.
1. **Načíst a zkontrolovat**: ověří integritu a zobrazí počty zdrojových tabulek. Nic nezapisuje do MySQL.
2. Přiřaďte každý program a třídu ke škole. Zvolte školu pro osoby bez studia i bez třídy. Zdroj nerozlišuje školy dostatečně jednoznačně, proto nejsou hádány z číselných rozsahů.
3. Používejte stále stejný identifikátor zdroje, například `legacy-main`.
4. Potvrďte přiřazení a stiskněte **Spustit import**. Import ověří i SHA-256 souboru proti náhledu a provede zápis v jedné MySQL transakci.
5. Zkontrolujte souhrn a centrální události `isedu.import.*`.
Import zachovává původní ID a mapuje je do nových vnitřních ID/UUID. Předměty zachovávají textové kódy. Zdroj je otevřen pouze pro čtení. Opakovaný import nevytváří duplicity a nepřepisuje nové editace; změněné původní řádky se hlásí jako konflikty. Jde o vložení/mapování dat, nikoli trvalou obousměrnou synchronizaci.
Chybějící rodičovský záznam se nevymýšlí. Řádek zůstane v importním archivu MySQL a nevyřešená vazba se zapíše do centrálního logu. Neznámý stav studia dostane `unmapped`, nikoli domyšlený běžný stav. Importovaný historický `students.active=1` je považován za již aktivovaný účet; stav 2 je absolvent a 9 blokovaný/stornovaný.
Import nepřenáší staré PINy, API klíče ani implicitní administrátorská práva. Nepřenáší automaticky nejednoznačné přiřazení výuky z volného textu `lectors.teach`. Administrátor je nastaví v novém modelu. Data pro dokumentovou a testovou aplikaci zůstávají v původním souboru; odpovídající aplikace dostanou vlastní importní kroky.
## Aktualizace a moduly
Sekce **Moduly a aktualizace** nabízí kontrolu uloženého zdroje isEDU, nový odkaz na eUpdate, modul z eUpdate a ruční ZIP. Operace přechází do instalačního náhledu eLoaderu, který kontroluje kompatibilitu a aktivuje vydání. isEDU samo nepřepisuje sdílené knihovny. Instalace je oprávnění superadmina eLoaderu.
Příklad instalovatelného modulu je `examples/student-list-1.0.0.zip`. Je volitelný a ukazuje použití filtrovaného `ModuleApi`. Uživatel jej spouští v sekci **Doplňky**. Dokumentace je v `docs/MODULES.md`.
Konfigurace isEDU obsahuje pouze lokální nastavení organizace, nikoli databázové heslo. MySQL data zůstávají ve společné DB. Před budoucí nekompatibilní migrací použijte konzistentní zálohu DB a kódu; návrat ZIPu nenahrazuje obnovu databáze. Verze 0.1.0 vytváří schéma 1 při ručním prvním zprovoznění a neprovádí automatické následné migrace.
## Logy
isEDU nemá vlastní logovací databázi ani logové soubory. Události zapisuje přes `Context::log()` do CentralLogu eLoaderu. Zápis obsahuje zdroj aplikace, identitu aktéra, čas, událost, typ/ID dotčeného záznamu a názvy změněných polí. Rodná čísla, obsah sylabů, databázová hesla ani celé importované řádky se do logu nevkládají. Audit eviduje operaci a měněná pole, nikoli kompletní historii předchozích osobních hodnot.
Hledání, filtry, stránkování, retence a výmaz jsou v **eLoader → Diagnostika → CentralLog**. Uchování zpráv i aplikačních událostí je společné (1–3650 dní, výchozí 30). Události isEDU mají prefix `isedu.` a samostatně vyplněné ID aplikace. Konzistentní záloha centrálního SQLite patří k záloze privátních dat eLoaderu.
## Technické požadavky
PHP 8.2–8.x, rozšíření `pdo_mysql`, `pdo_sqlite`, `mbstring` a požadavky eLoaderu. SQL používá InnoDB, utf8mb4, připravené dotazy, cizí klíče a transakce. Ověřeno na PHP 8.3.6 a MariaDB 10.11.7. MySQL 8 je cílově kompatibilní, samostatný běh na serveru MySQL 8 nebyl proveden. Nepotřebuje Node.js ani Composer na produkčním serveru; knihovny dodává eLoader.
Při připojování provozní databáze doporučujeme nejprve provést ruční import do testovací kopie a zkontrolovat přiřazení škol. Distribuční balíček neobsahuje osobní údaje ani původní SQLite.