{
    "schema": "eupdate-package-specification-v1",
    "author": "PB <pavel.bartos.pb@gmail.com>",
    "project_id": "722cefc7e20e6bc9",
    "software_id": "isedu",
    "software": "isEDU",
    "module": null,
    "release_id": "22f2c32dd692c99b26037ac08aeee45c",
    "version": "0.1.0",
    "release_date": "2026-09-13",
    "published_at": "2026-09-13T13:00:50+00:00",
    "bytes": 63419,
    "sha256": "c425742a12d999d6c2ef97738b8db7ee88c7256e5ca3dcc1ec00de4ee7876f43",
    "file_count": 56,
    "languages": {
        "PHP": {
            "bytes": 125051,
            "files": 15
        },
        "SQL": {
            "bytes": 9448,
            "files": 1
        },
        "CSS": {
            "bytes": 3718,
            "files": 1
        },
        "HTML": {
            "bytes": 2669,
            "files": 24
        }
    },
    "installation_url": "https://update.estudium.eu/package.php?software_id=isedu&version=0.1.0",
    "update_url": "https://update.estudium.eu/package.php?software_id=isedu",
    "install_json": {
        "software": "isEDU",
        "software_id": "isedu",
        "version": "0.1.0",
        "release_date": "2026-09-13",
        "author": {
            "name": "PB",
            "email": "pavel.bartos.pb@gmail.com",
            "website": ""
        },
        "description": {
            "cs": "Studijní evidence více škol, studenti, lektoři, programy, předměty a sylaby. Centrální přihlášení a MySQL přes eLoader.",
            "en": "Multi-school student information system with central eLoader authentication and MySQL."
        },
        "package": {
            "type": "release",
            "target": "eloader_app"
        },
        "requirements": {
            "php": ">=8.2 <9.0",
            "eloader": ">=1.14.0 <2.0"
        },
        "eloader": {
            "api": 1,
            "data_schema": 1,
            "entry": "app.php"
        },
        "installation": {
            "web_root": ".",
            "commands": {
                "linux": {
                    "command": null,
                    "supported": false,
                    "mode": "unsupported"
                },
                "windows": {
                    "command": null,
                    "supported": false,
                    "mode": "unsupported"
                },
                "macos": {
                    "command": null,
                    "supported": false,
                    "mode": "unsupported"
                },
                "other": {
                    "command": null,
                    "supported": false,
                    "mode": "unsupported"
                },
                "source": {
                    "command": null,
                    "supported": false,
                    "mode": "manual"
                }
            }
        },
        "license": "custom",
        "license_custom": "Copyright (c) 2026 PB. All rights reserved.",
        "compatibility": {
            "os_types": [
                "source"
            ],
            "os_versions": [],
            "distribution_ids": [],
            "distributions": [],
            "native_windows_supported": false,
            "native_macos_supported": false,
            "any_linux_distribution": false
        },
        "documentation": {
            "readme": "README.md"
        },
        "project": {
            "website": ""
        },
        "homepage": "",
        "archive_metadata": {
            "working_directory": ".",
            "publisher": "dcf6d41fbcdf0e16",
            "updated_at": "2026-09-13T13:00:50+00:00",
            "application_author": "PB <pavel.bartos.pb@gmail.com>"
        }
    },
    "readme": "# isEDU 0.1.0\n\nAutor: PB · 13. 9. 2026\n\nPrvní 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í.\n\n## Instalace\n\n1. 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.\n2. 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.\n3. 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.\n4. V **Databázová připojení → Přidělení aplikacím** vyberte isEDU, typ MySQL, vytvořený profil a jméno databáze.\n5. Otevřete isEDU jako superadmin. Zadejte název organizace a vytvořte tabulky. Vzniknou pouze tabulky `isedu_*` v přidělené MySQL.\n6. V **Školy** založte své tři školy. Nejsou dodána smyšlená jména ani omezení počtu škol.\n7. Volitelně spusťte **Import SQLite** podle postupu níže. Import se nespustí při instalaci, otevření aplikace, vložení souboru ani aktualizaci.\n8. 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.\n9. 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í.\n\n## První rozsah\n\n- Více škol v jedné organizaci; oddělené rozsahy oprávnění zaměstnanců.\n- Studentské a lektorské profily nad společnou evidencí osob a přihlašovacích účtů.\n- Více studií jedné osoby, vazba na konkrétní publikovanou verzi studijního plánu.\n- Programy, předměty, ECTS, EQF, zakončení, třídy a členství.\n- Verze studijních plánů: koncept lze upravovat, publikovaný plán je uzamčen. Kopie vytváří novou verzi.\n- Sylaby CZ/EN, cíle, výstupy, osnova, literatura, rozsah, historie verzí a publikování.\n- Seznamy, hledání, řazení, stránkování, formuláře, mobilní zobrazení.\n- Ruční import, centrální logy, instalace modulů a aktualizace z eUpdate i ZIPu.\n\n## Přihlašování a stav účtu\n\nKoř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>`.\n\n- 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.\n- Aktivovaný student: `active`. Aktivní studium není podmínkou přístupu.\n- Absolvent: `graduated`. Nemá studentský přístup. Historie jeho dat zůstává zachována.\n- Blokovaný student: `blocked`. Nemá studentský přístup.\n- 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.\n- 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`.\n- 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.\n\nStudent 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.\n\n## Ruční import\n\nSQLite 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.\n\n1. **Načíst a zkontrolovat**: ověří integritu a zobrazí počty zdrojových tabulek. Nic nezapisuje do MySQL.\n2. 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ů.\n3. Používejte stále stejný identifikátor zdroje, například `legacy-main`.\n4. 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.\n5. Zkontrolujte souhrn a centrální události `isedu.import.*`.\n\nImport 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.\n\nChybě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ý.\n\nImport 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.\n\n## Aktualizace a moduly\n\nSekce **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.\n\nPří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`.\n\nKonfigurace 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.\n\n## Logy\n\nisEDU 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.\n\nHledá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.\n\n## Technické požadavky\n\nPHP 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.\n\nPř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.",
    "download_url": "https://update.estudium.eu/download.php?project=722cefc7e20e6bc9&release=22f2c32dd692c99b26037ac08aeee45c",
    "package_target": "eloader_app",
    "requirements": {
        "php": ">=8.2 <9.0",
        "eloader": ">=1.14.0 <2.0"
    },
    "license": {
        "id": "custom",
        "name": "Vlastní",
        "custom_text": "Copyright (c) 2026 PB. All rights reserved."
    },
    "deployment": {
        "archive_root": ".",
        "web_root": "."
    },
    "project_type": "application",
    "hosting": null
}