{
    "schema": "eupdate-package-specification-v1",
    "author": "PB <pavel.bartos.pb@gmail.com>",
    "project_id": "722cefc7e20e6bc9",
    "software_id": "isedu",
    "software": "isEDU",
    "module": null,
    "release_id": "acb7e399000ef38c054df6d64b1820d7",
    "version": "0.3.10",
    "release_date": "2026-09-17",
    "published_at": "2026-09-17T11:02:17+00:00",
    "bytes": 717429,
    "sha256": "67d9f719b65174e352e52dd2412a2e8ff7dafd8708b4a614ba67c40d1a582e6f",
    "file_count": 236,
    "languages": {
        "PHP": {
            "bytes": 390358,
            "files": 58
        },
        "SQL": {
            "bytes": 70489,
            "files": 11
        },
        "Python": {
            "bytes": 64482,
            "files": 6
        },
        "CSS": {
            "bytes": 37888,
            "files": 3
        },
        "HTML": {
            "bytes": 20714,
            "files": 101
        },
        "JavaScript": {
            "bytes": 7154,
            "files": 2
        }
    },
    "installation_url": "https://update.estudium.eu/package.php?software_id=isedu&version=0.3.10",
    "update_url": "https://update.estudium.eu/package.php?software_id=isedu",
    "install_json": {
        "software": "isEDU",
        "software_id": "isedu",
        "version": "0.3.10",
        "release_date": "2026-09-17",
        "author": {
            "name": "PB",
            "email": "pavel.bartos.pb@gmail.com",
            "website": ""
        },
        "description": {
            "cs": "Společná evidence studentů a lektorů; původní SQLite tabulky v MySQL, instituce u programů, centrální služby eLoaderu.",
            "en": "Shared student and lecturer register; original SQLite table names in MySQL, program institutions and central eLoader services."
        },
        "package": {
            "type": "release",
            "target": "eloader_app"
        },
        "requirements": {
            "php": ">=8.2 <9.0",
            "eloader": ">=1.21.0 <2.0.0"
        },
        "eloader": {
            "api": 1,
            "data_schema": 1,
            "entry": "app.php",
            "database_tables": {
                "mysql": {
                    "prefix": "isedu_"
                }
            },
            "shared_shell": 1,
            "authentication": {
                "login_enabled_by_default": true
            }
        },
        "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-17T11:02:17+00:00",
            "application_author": "PB <pavel.bartos.pb@gmail.com>"
        }
    },
    "readme": "# isEDU 0.3.10\n\n## Změny 0.3.10\n\nRychlé filtry **Vše / PK / SŠ / DVPP / MBA** zachovávají již použité hledání, instituci, stav účtu a řazení. Student má výrazné tmavé záhlaví; jeho programy následují jako oddělená odsazená sekce. **Čeká na aktivaci** se zobrazuje červeně ve všech vzhledech.\n\nPřehled opakovaně nenačítá nastavení a překlady při vykreslení každého drobného prvku. Sdílené šablony z eLoaderu se načtou jednou pro požadavek a každé vykreslení dostane čistou kopii. Nový požadavek načte aktuální vzhled a jazyk. Kontroly pro zápis a rozsah dostupných studentů zůstávají zachované. Lokální srovnání při 100 studentech na stránce: **33,27 s → 0,12 s**, 111 → 11 SQL dotazů; podmínky jsou v VALIDATION.md.\n\nStačí instalovat aktualizaci isEDU. Schéma zůstává 5, opakovaný import ani aktualizace eLoaderu nejsou nutné.\n\n\nVýběr oblastí ručního importu SQLite a nahrazení jejich dosavadních dat po potvrzeném náhledu. Dokumenty se zapojují přes Document Server 0.1.3. Nejdříve aktualizujte isEDU, potom modul. eLoader 1.21.0+ a databázové schéma 5 zůstávají beze změny; aktualizace nic neimportuje ani nemaže.\n\nNíže uvedené poznámky ke starším verzím popisují tehdejší chování. Aktuální postup importu je v části **Ruční import SQLite**.\n\n# 0.3.7\n\nSměrování POST požadavků modulů, jejich navigace ve společném menu, oprávnění documents.* a filtrované údaje pro dokumenty. Databázové schéma evidence zůstává 5.\n\n# isEDU 0.3.6\n\n## Oprava v 0.3.6\n\nIdentifikátory se zobrazují celé na jednom řádku: ID studentů, lektorů, osob, programů, tříd a podřízených záznamů, kódy předmětů a další identifikační sloupce. Společný vykreslovač označuje ID podle datového schématu a přeložených záhlaví; číselné buňky se také nerozdělují. ID uvnitř nadpisů a odkazů používají samostatný nezalamovaný prvek. Běžné názvy a popisy se mohou dál zalamovat.\n\nŠiroké tabulky mají vodorovné posouvání. Příliš dlouhé ID v nadpisu zůstává dostupné posunutím nadpisu. Doplněná chybějící uzavírací závorka mobilního CSS bloku zajišťuje, že pravidla společného vzhledu a ID platí i na větších obrazovkách. Všechny tři vzhledy zůstávají podporované.\n\nAktualizace z 0.3.5 nevyžaduje migraci ani import. Pro opravu skrytých popisků účtů na přihlašovací obrazovce je současně určen eLoader 1.20.1.\n\n## Nové v 0.3.5\n\nStránkování přebírá společné nastavení eLoaderu **Řádků na stránku**, výchozí 100. Zahrnuje studenty, lektory, programy, předměty, přihlašovací profily, podřízené záznamy a ostatní tabulky aplikace. Na stránce vzhledu je převzatá hodnota vidět; nastavuje ji správce v eLoaderu. Importní dávky a rozhraní API s výslovným limitem tím nezvětšujeme.\n\nManifest nyní deklaruje výchozí nativní přihlášení. Po instalaci isEDU se účty z jeho přidělené MySQL prohledávají i bez dalšího ručního vytvoření pověření v eLoaderu. Dříve uložené vypnutí má přednost. Přehled **eLoader → Přihlašování → Zdroje účtů** ukazuje aktuální stav a nabízí ověření ID/e-mailu/telefonu bez odeslání zprávy. Stejné upozornění a odkaz jsou v přehledu přihlášení isEDU pro superadmina.\n\nNa skutečně importované původní SQLite bylo ověřeno ID učitele `2007` včetně dokončení přihlášení. Shodný ověřovací e-mail nabízí správce eLoaderu, studenta a lektora zvlášť. Vypnutím zdroje isEDU lze reprodukovat jak neplatné ID, tak chybějící výběr role; konkrétní produkční nastavení ověřte v novém přehledu. Nouzové heslo je nadále pouze pro správce eLoaderu; pro výběr role slouží hlavní formulář PINu.\n\n## Opravy v 0.3.4\n\nUpload SQLite i pokračování dávkového importu používají správnou adresu formuláře i při přítomnosti skrytého pole `action`. Průběh přenosu a ruční potvrzení zůstávají zachované. Po instalaci obou ZIPů znovu otevřete import; rozpracovanou úlohu lze otevřít v uložených importech.\n\neLoader 1.19.1 hledá ID studenta/lektora, e-mail či telefon ve všech pověřených zdrojích a při shodě nabídne jednotlivé účty. Přihlašovací formulář uvádí seznam prohledávaných aplikací. Nouzové heslo správce eLoaderu slouží pouze pro jeho účet; pro výběr studentského nebo lektorského účtu použijte hlavní formulář PINu. Pokud mezi zdroji chybí isEDU, povolte jeho přihlašování v nastavení nainstalované aplikace eLoaderu a ověřte přiřazení MySQL.\n\nSpolečná evidence studentů a lektorů v eLoaderu. MySQL schéma 5 přebírá původní názvy a sloupce SQLite s prefixem `isedu_`. Instituce uskutečňuje studijní program; studenti ani třídy se mezi instituce nerozdělují. Dokumenty spravuje volitelný modul Document Server; testy patří do jiné aplikace. `students_exams` se nevytváří ani neimportuje.\n\n## Instalace a aktualizace\n\nVyžaduje eLoader **1.20.0 nebo novější 1.x**, PHP 8.2–8.x, PDO MySQL/SQLite a mbstring. Ověřeno na PHP 8.3 a MariaDB 10.11. SQL používá syntaxi společnou s MySQL 8; samostatný běh na MySQL 8 nebyl v tomto prostředí ověřen.\n\nPři aktualizaci **z 0.3.2–0.3.5** se schéma 5 nemění. Stačí nejdříve aktualizovat eLoader a potom nainstalovat tento ZIP; žádný import není nutný.\n\n1. V eLoaderu nainstalujte ZIP isEDU nebo nastavte jeho zdroj v eUpdate. V **Nastavení → Databázová spojení** přidělte aplikaci spojení a databázi. Přístupové údaje k MySQL spravuje eLoader.\n\n2. Při nové instalaci otevřete isEDU jako superadmin, zadejte název organizace a potvrďte vytvoření tabulek. DDL a výchozí role jsou v `sql/install.sql` a `sql/seed.sql`. Nevytváří se databáze serveru ani ukázkoví studenti.\n3. Při aktualizaci **z 0.3.0/0.3.1** otevřete isEDU jako superadmin a zvolte **Doplnit ukládání průběhu importu**. Schéma 5 přidá `isedu_import_jobs`; z verze 0.3.0 nejprve doplní také údaje institucí. Zachová stávající data a neimportuje SQLite. DDL je v `sql/upgrade-0.3.1-0.3.2.sql`, starší doplnění institucí v `sql/upgrade-0.3.0-0.3.1.sql`. Pro přechod ze schématu 4 stačí běžná práva aplikace a CREATE.\n   Při aktualizaci **z 0.1.x/0.2.x** nejdříve vypněte nekompatibilní moduly (např. Student List 1.0.1). Zvolte **Zálohovat a aktualizovat databázi**; převod zachová současné úpravy, pořídí soukromý SQL soubor v `backups/` a původní tabulky ponechá jako `isedu_backup2_*`. Vyžaduje navíc DDL, LOCK TABLES a TRIGGER. Následně doplní aktuální schéma. Pouhá instalace ZIPu nepřevádí databázi. Podrobnosti: [SCHEMA.md](docs/SCHEMA.md).\n4. Instituce založte v **Nastavení → Instituce** a přiřaďte je jednotlivým programům včetně údaje o akreditaci. Počet institucí není omezen. Studenta lze založit ještě před institucemi, bez studia.\n5. U dříve importované databáze převod doplní chybějící pole z již uloženého archivu a zachová současné úpravy. Tabulky, které starší isEDU nikdy neimportovalo, doplníte novým **ručním** importem stejné SQLite se stejným identifikátorem zdroje.\n\nNespouštějte `install.sql` přes stávající schéma 1/2 jako náhradu převodu. Přechod 2 → 3 koordinuje `src/SchemaUpgrade.php`; `sql/schema-2.sql` slouží pouze k jeho inventáři. Přechod ze schématu 1 nejdříve používá `sql/upgrade-0.1.0-0.2.0.sql`.\n\n## Údaje institucí a místa vzdělávání\n\nV **Nastavení → Instituce** jsou IČO / identifikátor, RED IZO, IZO, strukturovaná adresa sídla, telefon, e-mail, web a logo. Identifikátory jsou textové, zachovávají úvodní nuly a jsou volitelné. Neprobíhá dotaz do rejstříku. Web zadávejte včetně `https://` nebo `http://`.\n\nPo uložení instituce lze přidávat samostatná místa vzdělávání: název, volitelné IZO, adresu, kontakty a příznak aktivity. Míst může být více; upravují se jednotlivě. Sídlo je oddělené od těchto adres. Instituce je stále přiřazena programu; studenti ani třídy nedostávají vlastní instituci.\n\nLogo nahrajete jako PNG, JPEG nebo WebP do **2 MiB**, nejvýše 4096 pixelů na stranu. Lze je vyměnit nebo odstranit. Obrázek se ukládá v MySQL spolu s údaji instituce, takže patří do její databázové zálohy. Čtení obrázku vyžaduje oprávněný přístup. Pro navazující modul smluv je připraveno `ModuleApi::institutionForProgram(programId)`; samotná tvorba smluv do tohoto vydání nepatří.\n\n## Evidence a přístupy\n\n- Student má všechna původní osobní a kontaktní pole přímo v `isedu_students`, včetně dvou adresních řádků, zákonného zástupce, země narození a fakturačních údajů. Jejich oprávněná úprava se projeví ve všech jeho studiích.\n- Lektor má původní pole přímo v `isedu_lectors`, včetně veřejného e-mailu, popisů, obrázku a interních údajů. Starý příznak `administrator` je jen historický údaj a nepřiděluje roli.\n- Studijní programy, plány, předměty, sylaby, třídy a jejich vazby zachovávají názvy ze SQLite. Plány a sylaby mají navíc verze, aby úprava nepřepsala publikovanou historii.\n- Poznámky, platby a závěrečné práce jsou na kartě studenta. Původní `students_logs` je dostupná pouze oprávněným správcům ke čtení; nové logy jsou výhradně v CentralLog.\n- Lektor vidí jen studenty přiřazeného programu, předmětu nebo třídy. Přiřazení předmětu může zahrnout programy různých institucí. Studijní oddělení lze omezit podle institucí programů; tím nevzniká vlastnictví studenta institucí. Společné třídy a lektory spravují celkové role.\n- Student upravuje vlastní osobní údaje. Přihlašovací údaje, aktivaci, úhrady a interní agendu mění oprávněný správce. Veřejná přihláška se souhlasy a automatickým cenovým procesem se tímto vydáním nezavádí; [audit registrace](docs/POLOZKY-0.3.0.md) rozlišuje její datová a procesní pole.\n\n## Přihlášení a společné služby\n\nKořenový `login.json` čte `isedu_students` a `isedu_lectors`; zvláštní tabulka přihlášení neexistuje. Student `active=0` nejdříve uvidí upozornění, že účet musí aktivovat. Samostatným tlačítkem **Pokračovat k aktivaci** si nechá poslat PIN, který zpřístupní pouze aktivaci; `active=1` má přístup i bez aktivního studia, absolvent `active=2` a ostatní stavy přístup nemají. Lektor musí mít `active=1`. U obou zdrojů se vyžaduje `login_enabled=1`. Kontaktní e-mail je oddělen od ověřovacího `login_email`.\n\nPřihlásit se lze pomocí vlastního ID, původního ID, loginu, `login_email` nebo `login_phone` (včetně mezer a závorek). Shodné hodnoty v eLoaderu, u studenta/lektora nebo v dalších povolených aplikacích otevřou seznam účtů. PIN patří vybrané identitě; aktivní student a lektor téže osoby mají samostatnou volbu a odpovídající roli. Výslovné role osoby, například studijní oddělení, se zachovávají. Neexistující účet oznámí neplatné údaje, neaktivní účet nutnost aktivace. Absolvent a blokovaný účet nemají možnost samoaktivace.\n\nSQLite se nahraje přes výběr souboru nebo přetažení a tlačítko **Načíst a zkontrolovat**. Ukazatel přenosu zobrazuje procenta a MiB, po 100 % se kontroluje databáze. Teprve následující náhled umožní ručně potvrdit import. Při chybě přenosu nebo serveru se formulář znovu odblokuje a ukáže chybu; opakování nahrání neprovádí import. Limit aplikace zůstává 200 MiB. Server potřebuje prostor i pro multipart obálku, viz [UPLOAD-200MB.md](docs/UPLOAD-200MB.md).\n\n\neLoader zajišťuje přihlášení, přidělení MySQL, CentralLog, maily/SMS a další spárované komunikační brány, workspace, menu/submenu, hlavičku a patičku. Obsah používá `html/academic-blue`, `html/b-w`, `html/ea` a katalogy `lang/cz.json`, `lang/en.json`; nastavení vzhledu a systémové kolečko v menu přebírá z eLoaderu. Sdílené knihovny se nebalí do aplikace.\n\nModuly a aktualizace vyřizuje centrální správce balíčků eLoaderu. Manifest deklaruje prefix `isedu_` pro jeho odinstalaci, včetně záložních tabulek této aplikace. Budoucí aplikace pro testy potřebuje vlastní prefix a oprávnění. Ukázkový modul Student List 1.1.0 je v `examples/student-list/`; [rozhraní modulů](docs/MODULES.md).\n\n## Ruční import SQLite\n\n1. Otevřete **Nastavení → Import SQLite**, vyberte již uložený soubor nebo jej nahrajte / přetáhněte (limit 200 MiB, průběh nahrávání).\n2. Zaškrtněte požadované oblasti: studenti; lektoři; předměty a kategorie; programy; plány; třídy; studia a členství ve třídách; sylaby; poznámky; platby; závěrečné práce; historie; časové vzory a rozvrh; dokumenty a bloky. Volba **Vybrat vše / Zrušit výběr** respektuje dostupnost modulu. Testy včetně `students_exams` jsou vždy vyloučené.\n3. **Načíst a zkontrolovat** pouze vytvoří náhled. Ten uvádí vybrané zdrojové tabulky, počty dat k vymazání a případné vazby. Pouze vybrané programy potřebují přiřazení institucí. Náhled má vlastní token, přihlášený účet a platnost 60 minut.\n4. Před spuštěním potvrďte **vymazání dosavadních dat ve vybraných oblastech**. Současné úpravy v těchto oblastech budou nahrazeny SQLite. Smažou se také jejich stará importní mapování a přiřazení výuky přímo k nahrazovaným předmětům/programům/třídám/lektorům; náhled tato přiřazení počítá. Nevybrané oblasti, instituce a definice oprávnění se nemažou. Při návratu stejného nativního ID osoby se zachová její interní identita a přidělená práva. Osoby bez obnoveného profilu se odstraní po dokončení.\n5. Závislé záznamy v nevybrané oblasti mohou mazání zablokovat. Například existující studia brání samostatnému smazání studentů: vyberte také studia. Při dílčím importu vazeb na dříve importované oblasti použijte stejný identifikátor zdroje. Odkaz bez odpovídajícího mapování se odmítne před mazáním. Vybraná tabulka, která ve zdroji chybí, se uvede jako chybějící a její dosavadní data se nemažou.\n6. Potvrzení založí úlohu. První dávka smaže data a zapíše nové řádky v jedné MySQL transakci s kurzorem. Chyba této dávky vrátí i mazání. Další dávky už nic znovu nemažou. Každá zpracuje nejvýše 100 zdrojových řádků s cílovým časem 2 sekundy. **Při pozdější chybě se vrací jen běžící dávka, nikoli předchozí dokončené části.**\n7. Po přerušení otevřete stejnou úlohu v **Uložených importech** a pokračujte. Nezakládejte další import stejných oblastí, dokud se běžící úloha nedokončí. Opakování stejného požadavku neprovede další smazání. Nový, znovu potvrzený import znamená nové nahrazení vybraných dat.\n\n**Dokumenty:** vyžadují aktivní **Document Server 0.1.3**, jeho inicializované MySQL tabulky a oprávnění `import.run`, `documents.import` a `documents.write`. Modulové menu Import otevírá tentýž společný výběr s předvolenými dokumenty. SQLite může obsahovat pouze `document` a `document_data`. Obrázky se nahrávají zvlášť a při importu dokumentů se nemažou. Publikované dokumenty nejprve stáhněte z publikování, aby nezůstaly neplatné veřejné PDF odkazy. Nové dokumenty se importují jako neveřejné koncepty, neúplné dokumenty nejsou během dávek dostupné. Osamocené bloky se uchovají v `isedu_document_orphans`. Import `.ds` zůstává samostatný.\n\nRozpracované úlohy vytvořené před 0.3.8 zachovávají svůj původní postup bez mazání. Instalace aktualizace sama neprovádí import ani mazání. Zdrojová SQLite zůstává pouze pro čtení.\n\n## Přehled studentů od 0.3.9\n\nFiltr **Instituce** se řídí školou studijního programu; student nemá vlastní instituci. Lze jej kombinovat s textovým hledáním (osobní a kontaktní údaje, obor, název/kód programu, akreditace a instituce), typem studia a stavem účtu. Typy odpovídají původnímu `study_pgm`: PK >100 a <200, MBA >60 a <100, DVPP >200 a <300, SŠ <50. Rozhoduje číslo programu, nikoli jeho název. Výchozí řazení je od nejnovější registrace; počet studentů na stránce přebírá eLoader.\n\nŘádek studenta obsahuje osobní údaje a společné akce. Pod ním jsou studia odpovídající filtrům a přístupovým právům. Úhrady jsou označeny **za program**, protože více zápisů stejného programu sdílí programové platby. Částky v různých měnách se nesčítají. Starší úhrady s prázdným nebo nulovým programem zůstávají v souhrnu studenta jako nepřiřazené. Nečitelná částka se nezapočítá a zobrazí se výzva ke kontrole.\n\n**Dokumenty (N)** znamenají počet dostupných aktivních publikovaných odkazů. Stránka nabízí šablony i tyto odkazy. Původní nahrané soubory ze starého systému tato funkce nepředstírá ani automaticky nepřevádí. Tlačítka smluv se objeví, pokud je nainstalovaný a inicializovaný Document Server 0.3.0 a existuje přístupná odpovídající šablona. CZ používá 4014 pro SŠ, 4001 pro MBA a 4002 pro další programy; EN 4001. Otevře se generátor s aktuálním studentem a programem a cenou/daty konkrétního studia. Nevyplněné parametry lze doplnit před vytvořením PDF nebo odkazu.\n\n**Arch / export** stáhne JSON dostupných záznamů bez přihlašovacích tajemství a bez testů, neprovádí změnu stavu účtu. **SID** a odstranění studentského profilu jsou dostupné pouze globálním správcům s `students.write` i `roles.manage`. Vyžadují opsání ID a skončení rozpracovaného importu. SID se mění transakčně ve všech zde spravovaných studentských vazbách a v odkazech dokumentového serveru; UUID a historické ID importu zůstávají stejné. Vazby externích aplikací používající staré číselné ID musí správce upravit. Odstranění ponechává společnou osobu a případný lektorský profil, centrální audit a zdrojový archiv importu.\n\nPři aktualizaci z 0.3.8 není nutná migrace MySQL ani opakovaný import. Stačí nainstalovat tento ZIP jako aktualizaci isEDU. eLoader 1.23.0 a Document Server 0.3.0 lze ponechat.",
    "download_url": "https://update.estudium.eu/download.php?project=722cefc7e20e6bc9&release=acb7e399000ef38c054df6d64b1820d7",
    "package_target": "eloader_app",
    "requirements": {
        "php": ">=8.2 <9.0",
        "eloader": ">=1.21.0 <2.0.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
}