{
    "schema": "eupdate-package-specification-v1",
    "author": "PB <pavel.bartos.pb@gmail.com>",
    "project_id": "15b70c7d025661ed",
    "software_id": "eloader",
    "software": "eLoader",
    "module": null,
    "release_id": "10533949562b6c8e590d66b178cd321d",
    "version": "1.6.0",
    "release_date": "2026-09-12",
    "published_at": "2026-09-12T21:28:44+00:00",
    "bytes": 1224337,
    "sha256": "fb660d9c08810674e2c5c28101a14a2af8098db8c137f3f9ca6e967ccf7a1944",
    "file_count": 288,
    "languages": {
        "PHP": {
            "bytes": 763933,
            "files": 124
        },
        "CSS": {
            "bytes": 24011,
            "files": 1
        },
        "HTML": {
            "bytes": 23641,
            "files": 98
        },
        "JavaScript": {
            "bytes": 6082,
            "files": 1
        },
        "SQL": {
            "bytes": 1036,
            "files": 1
        }
    },
    "installation_url": "https://update.estudium.eu/package.php?software_id=eloader&version=1.6.0",
    "update_url": "https://update.estudium.eu/package.php?software_id=eloader",
    "install_json": {
        "software": "eLoader",
        "software_id": "eloader",
        "version": "1.6.0",
        "release_date": "2026-09-12",
        "description": {
            "cs": "Společné prostředí pro aplikace: přihlášení, oprávnění, instalace aplikací a modulů, eUpdate autoupdate a CZ/EN mail templater. JSON úložiště jádra a automatické aktualizace knihoven přes Composer.",
            "en": "Shared application environment: sign-in, permissions, application and module installation, eUpdate autoupdate and CZ/EN mail templater. JSON core storage and automatic Composer dependency updates."
        },
        "author": {
            "name": "PB",
            "email": "pavel.bartos.pb@gmail.com",
            "website": ""
        },
        "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"
        },
        "archive_metadata": {
            "working_directory": ".",
            "publisher": "dcf6d41fbcdf0e16",
            "updated_at": "2026-09-12T21:28:44+00:00",
            "application_author": "PB <pavel.bartos.pb@gmail.com>"
        },
        "installation": {
            "web_root": "public",
            "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": "eLoader: Copyright (c) 2026 PB. All rights reserved. Bundled third-party libraries retain their original licenses; see THIRD-PARTY.md.",
        "package": {
            "type": "release",
            "target": "hosting"
        },
        "requirements": {
            "php": ">=8.2 <9.0"
        },
        "eloader": {
            "api": 1,
            "data_schema": 1,
            "launcher_api": 1,
            "persistent_paths": [
                "var"
            ],
            "core_update": "atomic-private-release-pointer",
            "auto_update_endpoint": "https://update.estudium.eu/package.php?software_id=eloader",
            "storage": "json",
            "storage_schema": 1,
            "composer_autoupdate": {
                "enabled_by_default": true,
                "time": "03:45",
                "activation": "private-release-pointer",
                "constraints": "composer.json",
                "scripts": false,
                "plugins": false
            },
            "app_directory": "../app",
            "app_layout_version": 2,
            "html_themes": [
                "academic-blue",
                "b-w"
            ],
            "auto_update_project": "https://update.estudium.eu/pavel852/eloader",
            "checkin": {
                "schema": "eupdate-checkin-v1",
                "endpoint": "/check/",
                "enabled_by_default": true,
                "interval_hours": 24,
                "includes": [
                    "applications",
                    "modules"
                ]
            }
        },
        "project": {
            "website": ""
        },
        "homepage": ""
    },
    "readme": "# eLoader 1.6.0\n\nAutor programu: **PB <pavel.bartos.pb@gmail.com>** — shodně s eUpdate. Vydání: 12. 9. 2026.\n\nSpolečné prostředí pro instalaci a spouštění aplikací. Obsahuje CZ/EN rozhraní, výsuvnou levou nabídku, společné přihlášení, správu superadminů, SMTP/SMS, mail templater a instalaci/aktualizaci aplikací i modulů ze ZIPu nebo z eUpdate. Jádro má vlastní automatické aktualizace z eUpdate.\n\n## SMTP, SMS, logy a panely v 1.6.0\n\n- **Nastavení prostředí → SMTP**: formulář přidává pojmenované profily do tabulky pod ním. První profil se aktivuje automaticky; další aktivujte tlačítkem **Používat pro odesílání**. Aktivní je právě jeden. Odkaz **Upravit SMTP** načte konkrétní profil. Původní nastavení se při aktualizaci převede včetně šifrovaného hesla.\n- **Nastavení prostředí → SMS**: přímé **BulkGate transakční API v1** s Application ID/token a volbou typu i hodnoty odesílatele. Podporuje gSystem, gShort, gText, gMobile, gPush, gOwn a gProfile. Zachován vlastní HTTPS adaptér. **Přímé SMS.cz není implementováno: chybí ověřená dokumentace jeho API pro odesílání.**\n- **Nastavení prostředí → Logy → eWeb**: zapněte předávání, zadejte HTTPS adresu přijímajícího eWebu a hostname instalace. Cron nabídne připojení; v eWebu schvalte odpovídající ID a otisk. Tlačítko **Odeslat nabídku / čekající logy** provede stejný krok ručně. Předávání je při první instalaci vypnuté.\n- **Provozní záznamy**: zaznamenávají SMTP pokusy/výsledky/chyby, SMS a ostatní auditní události. Submenu **Poslední 3 check-iny** zobrazuje skutečné odesílané obsahy včetně stavu a počtu pokusů. Opakovaný pokus aktualizuje tentýž záznam. Starší reporty před 1.6.0 se nevytvářejí zpětně.\n- **Stažení a výmaz**: ZIP obsahuje všechny dosud uchované události a tři check-iny. Výmaz s potvrzovacím políčkem smaže místní události, historii i čekající frontu do eWebu. Již přijaté vzdálené kopie a dřívější zálohy se tím nemažou.\n- Druhá lišta **přepíná samostatné panely** pomocí `?page=settings&panel=smtp` apod. Ostatní panely se na stránce nevykreslují. Totéž platí pro aktualizace, balíčky, logy a přidání jazyka. Horní lišta zobrazuje cestu, například **eLoader | Nastavení | Nastavení prostředí | SMTP**. Obě nabídky se dále zalamují.\n\nPodrobné nastavení a protokoly: [DELIVERY-LOGS.md](docs/DELIVERY-LOGS.md). Přehled ověření: [VALIDATION.md](VALIDATION.md).\n\n## Další ovládání\n\n- Jazyk rozhraní přepnete také URL parametrem `?lang=en`, `?lang=cs` nebo `?lang=cz`. Funguje i spolu s `page` a dalšími parametry. Volba platí pro relaci a nemění výchozí jazyk profilu. Neznámý jazyk se ignoruje. Přidané jazyky jsou dostupné stejným způsobem i v horním přepínači.\n- Na přihlášení jsou přes celou šířku formuláře přepínací tlačítka. E-mail je předvolený; SMS se objeví s nastavenou a zapnutou bránou, WhatsApp a další kanály s odpovídajícím adaptérem. Odstraněn popisek „Doručení PINu“ a úvodní věta pod nadpisem.\n- **Nastavení → Způsoby přihlášení** řídí e-mail/SMS; v samostatném panelu dalších kanálů nastavíte WhatsApp nebo vlastní kanál. HTTPS adaptér přijímá JSON `to` a `message`, volitelný Bearer token a potvrzuje přijetí HTTP 2xx. Nejde o přímého klienta Meta WhatsApp API: potřebujete adaptér svého poskytovatele. SMS/WhatsApp využívá telefon uložený u účtu; vlastní kanál může používat i e-mail.\n- V panelu **Aktualizace → eLoader** jsou nahoře obě tlačítka **Zkontrolovat aktualizace** a **Aktualizovat**. Bez uloženého zdroje mají vysvětlení a jsou neaktivní. Po uložení zdroje je dostupná kontrola; aktualizace se zpřístupní pro nalezené novější vydání.\n- Hlavní menu se zalamuje do dalších řádků. Submenu je ve druhé liště s menšími zaoblenými tlačítky a také se zalamuje. Výška lišt se přizpůsobí obsahu; zůstávají pod pevnou 30px horní lištou. Nastavení ve workspace otevírá menší zaoblený čtverec se vystředěnou ikonou.\n\n### Editor jazyků\n\nSuperadmin otevře **Editor jazyků** z hlavního menu. Vybere jazyk v druhé liště, vyhledá klíč nebo text a uloží změny na zobrazené stránce (nejvýše 40 textů). Formulář **Přidat jazyk** vyžaduje kód, název a zdrojový jazyk, jehož texty zkopíruje. Překlady nového jazyka doplníte v editoru. Kód může být například `de`, `fr` nebo `en-gb`.\n\nDodané katalogy zůstávají oddělené v `lang/cz.json` a `lang/en.json`. Úpravy a nové jazyky se ukládají do trvalých `var/lang/<kód>.json` (čeština `var/lang/cz.json`) a přežijí aktualizaci jádra i Composeru. Nové texty přidané pozdějším vydáním mají výchozí překlad, i když soukromá úprava ještě neexistuje. Editor kontroluje původní proměnné ve složených závorkách a odmítne přepsání mezitím změněného katalogu.\n\n### Proměnné v e-mailových šablonách\n\nVlevo od editoru je sloupec dostupných proměnných: `{name}`, `{pin}`, `{expires}`, `{app_name}`, `{site_name}`, `{site_url}`, `{message}` a `{action_url}`. Najeďte myší nebo přejděte klávesnicí na tlačítko pro popis. Proměnnou lze přetáhnout do předmětu, HTML či textu nebo kliknutím vložit na uloženou pozici kurzoru. Vkládá se doslovná symbolika; skutečné údaje se doplní při odeslání.\n\nTyp e-mailu vybírá druhá lišta a jazyk samostatný přepínač **Jazyk e-mailové šablony**. Nový jazyk může mít vlastní soubory v `var/mail/`; do první úpravy používá anglickou výchozí šablonu. Parametr `mail_lang` volí jazyk šablony, zatímco `lang` přepíná společné rozhraní. Před náhledem uložené šablony proveďte uložení.\n\n## Požadavky\n\n- PHP **8.2–8.x**, Linux, PHP CLI a PHP-FPM pod stejným uživatelem hostingu.\n- Rozšíření: `zip`, `curl`, `mbstring`, `dom`, `openssl`, `sodium`, `tokenizer`, `ctype`, `phar`, `iconv`.\n- Povolené `proc_open` pro oddělenou kontrolu nového vydání. Knihovny jsou přibalené; na produkci není potřeba spouštět Composer.\n- HTTPS. Zapisovatelná soukromá složka pro stav aplikace; veřejný kořen pouze `public/`.\n- Pro upload nastavte `upload_max_filesize=64M`, `post_max_size=70M`, `memory_limit=256M` a odpovídající limit Nginxu. Instalátor omezuje ZIP na 64 MiB a rozbalený obsah na 128 MiB.\n- Jádro používá soukromý `var/core.json` se zámkem a atomickými zápisy. SQLite není pro nový provoz jádra potřeba. Jednorázový převod staré instalace vyžaduje `pdo_sqlite`; ukázková Demo Notes používá vlastní SQLite. Databáze připojených aplikací jsou samostatné.\n\n## Nejrychlejší instalace do eWebu\n\nBalíček nejprve rozbalte **mimo veřejnou webovou složku**, například do pracovního adresáře doménového uživatele. Následující příkazy spouštějte pod uživatelem konkrétního hostingu.\n\nMáte-li doménový adresář s existujícími složkami `web/` a `private/`, použijte:\n\n```bash\nphp bin/install-hosting.php /cesta/k/adresari-domeny https://vase-domena.cz\n```\n\nVeřejná složka `web/` musí být prázdná. Instalátor existující web nepřepíše. Kód uloží do `private/eloader/`, trvalá data do `private/eloader/var/` a do `web/index.php` vloží veřejný vstup. Aplikace a jejich moduly patří do `private/app/`, vedle sourozenecké složky `private/eloader/`. Příkaz vypíše počáteční přístup a přesný příkaz pro cron.\n\nOtevřete doménu a rozbalte **Záchranné přihlášení superadmina**. Počáteční login je **`admin`**, heslo **`admin`**. První přihlášení otevře povinné dokončení profilu: předvyplněné jméno Pavel Bartoš, e-mail pavel.bartos.pb@gmail.com a login admin. Údaje můžete změnit; telefon doplňte v mezinárodním formátu pro SMS. Nové záchranné heslo musí mít nejméně **11 znaků**. Dokud počáteční heslo nezměníte, administrace zůstane na profilu. Existující účty se při aktualizaci nepřepisují ani nevracejí na admin:admin.\n\nBěžné přihlašování probíhá **PINem přes e-mail nebo SMS**. Nastavte SMTP/SMS a v **Mail templateru** ověřte doručování. Heslo je záchranný přístup pouze pro superadmina. Profil později otevřete kliknutím na jméno v horní liště nebo přes **Můj profil**.\n\n### Jiný hosting nebo přímé nasazení původního ZIPu\n\nZachovejte **celý obsah ZIPu**, nastavte document root na jeho `public/` a spusťte:\n\n```bash\nphp bin/console.php init https://vase-domena.cz\n```\n\nObsah distribučního ZIPu patří do složky `eloader/`. Inicializace vytvoří `eloader/var/` a sourozeneckou složku `app/`, tedy relativně k jádru `../app/`. Rodičovský soukromý adresář musí umožňovat její vytvoření. ZIP zůstává přímo použitelný pro eUpdate, s install.json v kořeni. Při přímém nasazení se nová instalace inicializuje i automaticky při první návštěvě domény. CLI umožní základní HTTPS adresu zadat výslovně. Alternativní umístění určuje `ELOADER_DATA`; pak musí mít PHP-FPM i cron stejnou hodnotu. Samotné zkopírování obsahu `public/` nestačí, protože jádro a knihovny musí zůstat dostupné mimo webový kořen.\n\n## Publikování v eUpdate 1.7.8+\n\nNahrajte distribuční ZIP jako hlavní program projektu **eLoader**, identifikátor **`eloader`**. Kořen archivu obsahuje připravený `install.json`:\n\n| Nastavení | Hodnota |\n| --- | --- |\n| Autor | PB, pavel.bartos.pb@gmail.com |\n| Verze | 1.6.0 |\n| `package.type` | `release` |\n| `package.target` | `hosting` |\n| `installation.web_root` | `public` |\n| `archive_metadata.working_directory` | `.` |\n| OS | Zdrojový kód / nezávislé na OS |\n| PHP | `>=8.2 <9.0` |\n| Licence jádra | Vlastní; text v `LICENSE` |\n\nDo nastavení aktualizací lze vložit přímo adresu projektu:\n\n```text\nhttps://update.estudium.eu/pavel852/eloader\n```\n\nKlient přijímá projektový odkaz i `https://update.estudium.eu/package.php?software_id=eloader`. Projektové odkazy převádí na metadata `package.php` podle globálně jedinečného software_id; u jádra vždy vyhledává nejnovější kompatibilní vydání. Dodání ZIPu samo nepublikuje vydání 1.6.0 do produkčního eUpdate.\n\nPrvotní automatické nasazení z rozhraní eWebu vyžaduje, aby jeho hostingový instalátor zachoval celý zdrojový strom a nastavil správný veřejný kořen. Pokud jeho export kopíruje jen `public/`, použijte výše uvedený `install-hosting.php`. Tento balíček nemění program eWeb.\n\n## Automatické aktualizace eLoaderu\n\n1. V **Aktualizace eLoaderu** uložte `https://update.estudium.eu/pavel852/eloader`. U neveřejného projektu doplňte SecretID.\n2. Uložení zapne automatické kontroly. Předvolba je každou **hodinu**; lze zvolit 15 minut, 1 hodinu, 6 hodin nebo 24 hodin. První kontrola proběhne při nejbližším cronu, případně tlačítkem **Zkontrolovat aktualizace**.\n3. Novou verzi nainstalujete tlačítkem **Aktualizovat**. Volba **Autoinstall** dovolí instalaci automaticky při kontrole; předvolba je nezaškrtnuto. U starého nastavení se zachová dosavadní povolení automatické instalace.\n4. Do cronu hostingu vložte přesný příkaz z rozhraní, například:\n\n```cron\n*/5 * * * * /usr/bin/php /cesta/k/adresari-domeny/private/eloader/bin/console.php cron\n```\n\nPoužívá se stejný cron jako pro Composer. Bez cronu neběží automatické kontroly ani check-in. Uložení formuláře nečeká na síť. Kontrola načte pouze metadata, ZIP se stáhne teprve při instalaci. Ruční instalace znovu ověří, že vydání i SHA-256 odpovídají zkontrolované nabídce. Změněné vydání vyžaduje novou kontrolu. Prázdný uložený zdroj kontroly vypne. Výsledek a poslední běh cronu jsou viditelné v rozhraní.\n\nOvěřuje se instalační cíl, identita, vyšší verze, PHP, závislosti aplikací, velikost a SHA-256, bezpečný obsah ZIPu a kontrola PHP v odděleném procesu. Nový kód vznikne v soukromém adresáři; aktivuje se atomickou změnou ukazatele. Neprovádí se příkazový skript z `installation.commands`.\n\nZůstává předchozí kód, dva konzistentní JSON snímky jádra a veškerá trvalá data. Tlačítko návratu jádra vypne autoinstall a automatické aktualizace Composeru; kontroly nových verzí mohou pokračovat. Aktualizace, která neprojde kontrolou, se neaktivuje. Verze 1.6.0 zachovává SDK/data API 1 a launcher API 1; formát úložiště jádra je `json`, `storage_schema: 1`. Návrat k vydání, které rozumí pouze SQLite, je odmítnut. Destruktivní migrační háky odmítá.\n\nNávrat přes CLI:\n\n```bash\nphp bin/console.php rollback eloader\n```\n\nVydání jádra běží pod stejným uživatelem hostingu. Výchozí veřejný vstup a `bootstrap.php` tvoří stabilní launcher; aktualizace jeho rozhraní nebo datového schématu vyžaduje samostatně připravené vydání. Starší adresáře vydání jsou uchovány; průběžně sledujte volné místo. Pro více uzlů/cluster tato verze nemá distribuovaný instalační zámek.\n\n## Check-in do eUpdate\n\nVýchozí stav je zapnuto. Při nejbližším cronu se odešle check-in do `/check/` nastaveného serveru eUpdate. Další se odesílá po 24 hodinách nebo po změně verze jádra či inventáře aplikací/modulů. Náhled obsahu, poslední výsledek, vypínač a ruční zařazení do fronty jsou v **Aktualizace eLoaderu**.\n\nObsahuje stabilní ID instalace, doménu, verzi eLoaderu/PHP/php-templates a instalované aplikace i moduly s verzemi a stavem zapnuto/vypnuto. Neobsahuje účty, kontakty, hesla, aplikační data ani místní cesty. Ověřovací klíč se posílá pouze v hlavičce `X-Checkin-API-Key` a lokálně se ukládá šifrovaně. Opakovaný pokus po chybě používá stejné ID hlášení, aby se záznam nezdvojil. Výpadek přijímače má odstupňované opakování a neblokuje kontrolu aktualizací.\n\n```bash\nphp bin/console.php checkin:preview\nphp bin/console.php checkin:send\n```\n\n`checkin:send` je výslovné ruční odeslání i při vypnuté automatice. Stav licence „pending“ neznamená chybu přijetí check-inu. Neměňte identitu ani šifrovací klíč stávající instalace.\n\n## Samostatné CZ/EN a jazyk profilu\n\nTexty společného rozhraní jsou v **`lang/cz.json`** a **`lang/en.json`** se stejnými klíči. Oba HTML vzhledy používají tyto katalogy; texty se neduplikují do HTML ani do JavaScriptu. Načítání HTML a e-mailových šablon nadále používá `tmpl_open(...)`. E-mailové šablony mají samostatné soubory `resources/mail/*.cs.json` a `*.en.json`; vlastní uložené úpravy zůstávají ve `var/mail/`.\n\nKaždý přihlášený uživatel i superadmin otevře **Můj profil** kliknutím na jméno v horní liště a uloží **Výchozí jazyk**. Volba se použije ihned, při dalším přihlášení a pro přihlašovací e-mail. Horní přepínač CZ/EN mění jazyk aktuální relace. Preference běžného účtu je oddělená podle zdrojové aplikace a ID účtu; shodný e-mail v jiné aplikaci ji nesdílí. Neuděluje administrační práva. Bez vlastní volby se použije jazyk účtu z aplikace, u superadmina výchozí jazyk prostředí. V HTML, relaci a SDK zůstává standardní kód češtiny `cs`, který se mapuje na soubor `cz.json`.\n\n## Převod existujícího eLoaderu na JSON\n\nPři prvním spuštění 1.1.0 se existující `core.sqlite` automaticky převede na `core.json`. Účty, ID, hashe hesel, SMTP/SMS tajemství, PINy, pověření aplikací, balíčky i audit zůstanou zachovány. Nastavení identity a šifrovací klíč nadále patří do `config.json`; relace zůstávají standardními PHP soubory v `sessions/`.\n\nMigrace vytváří samostatný snímek `backups/legacy-sqlite-*.json`. Původní SQLite ponechá čitelnou a zablokuje v ní další zápisy, aby dobíhající stará verze nevytvářela odlišný stav. Poškozený JSON se nikdy automaticky nenahradí prázdnými daty. Obnova přerušené migrace používá připravený soubor a uložený SHA-256.\n\nPo aktualizaci lze migraci vyvolat i přes CLI:\n\n```bash\nphp bin/console.php storage:migrate\n```\n\nBěžný rollback je určen pro vydání podporující JSON. Návrat na 1.0.0 po migraci by vyžadoval plánovanou obnovu celé předmigrační zálohy a ztratil by novější změny; automatický návrat na SQLite je proto blokován.\n\n## Automatické aktualizace knihoven přes Composer\n\n**Ve výchozím nastavení zapnuté, denně v 03:45** podle časového pásma eLoaderu. Platí i pro migrované instalace bez uložené volby. Běží ve stejném pětiminutovém cronu jako eUpdate. V **Aktualizace eLoaderu → Composer** lze automatiku vypnout, změnit čas a naplánovat ruční aktualizaci na příští cron. Stav posledního běhu a verze knihoven jsou na stejné stránce. Vypnutí aktualizací jádra nevypíná Composer.\n\nComposer je přibalený v `tools/composer.phar`. Aktualizuje závislosti v rozsahu `composer.json`: php-templates `^2.6.1`, latex `^3.3`, PHPMailer `^6.12`; hlavní verze knihoven tedy automaticky nepřeskakuje. `composer.lock` obsahuje přesné verze tohoto distribučního vydání. Samotný nástroj Composer se obměňuje s vydáním eLoaderu.\n\nAktualizace běží v soukromé pracovní kopii s vypnutými skripty a pluginy. Ověří požadavky aplikací, PHP syntaxi, Composer autoload a renderování šablon. Po kontrole aktivuje nové vydání atomickým ukazatelem a ponechá předchozí kopii. Při chybě zůstávají běžící knihovny i data zachovány. Kvůli načítání PHP tříd se Composer po právě dokončené aktualizaci jádra spustí až při dalším cronu.\n\n```bash\nphp bin/console.php composer:check   # vyřeší a otestuje knihovny, bez aktivace\nphp bin/console.php composer:update  # vyřeší, otestuje a aktivuje knihovny\n```\n\nWebové tlačítko pouze zařadí práci do cronu, takže nečeká na síťové operace Composeru v PHP-FPM. Hosting potřebuje odchozí HTTPS k Packagistu a distribučním archivům GitHubu a dostatek místa na pracovní kopii. Cron musí být skutečně nastaven; samotné zapnutí volby jej na serveru nevytvoří.\n\n## Přihlašování a oprávnění\n\n- V eLoaderu lze zadat **e-mail, login nebo ID** (u superadmina také uložený telefon) a zvolit zdroj účtu. Automatické hledání používá eLoader a pověřené nainstalované aplikace. Při více shodách vyžaduje konkrétní zdroj.\n- Společné prostředí vede vlastní **superadminy**. Běžné účty a jejich role/práva zůstávají u příslušných aplikací.\n- Aplikaci musí superadmin v **Aplikace a moduly → Přihlášení a pověření** výslovně pověřit přihlašováním. Instalace sama toto pověření neuděluje.\n- Přihlášení lze zahájit přímo pro pověřenou aplikaci odkazem `/?page=login&app=identifikator`. Vlastní přihlašovací obrazovka aplikace může vést na stejný společný vstup; nemá nastavovat relaci sama.\n- Běžný účet musí být aktivní, mít přidělenou roli a oprávnění `app.access` nebo `*`. Vstup do aplikace a její operace kontrolují aktuální práva na serveru.\n- Sdílené přihlášení podle ověřeného e-mailu je samostatná volba superadmina pro každou aplikaci. Ve druhé aplikaci musí existovat aktivní účet s vlastními právy. Shodný login či číselné ID účty nespojují.\n- Superadmin má přístup do celého prostředí a aplikací. Aplikační role se na superadmina eLoaderu nepovyšuje.\n- PIN má výchozí délku **4 číslice**, je stejný do konce kalendářního dne podle nastaveného časového pásma. Lze změnit délku i časovou platnost. PINy jsou chráněné proti hádání; záznamy neobsahují jejich otevřené hodnoty.\n- Relace platí výchozích **24 hodin od přihlášení**. Prodloužení nenastává při každém kliknutí. Změna délky se projeví u nových přihlášení.\n\n## Vzhled a workspace\n\nV **Nastavení → Vzhled** vyberte **Academic Blue · modrý** nebo **B-W · světlý černobílý**. Výběr ihned ukáže barevný náhled; tlačítkem Uložit jej nastavíte pro prostředí. Starší volby Academy a Mono se načtou jako odpovídající nové vzhledy.\n\nHTML šablony aktuálního jádra jsou rozdělené do `html/academic-blue/` a `html/b-w/`. Obě složky obsahují stejnou sadu názvů HTML souborů, včetně layout.html, login.html, profile.html a eloader-menu.html. Render vybírá soubory podle uloženého vzhledu a používá `tmpl_open(...)`. Složka templates/ už není součástí nového jádra. CSS a JavaScript zůstávají v resources/assets/; e-mailové šablony samostatně v resources/mail/ a var/mail/.\n\nWorkspace slouží k **přepínání mezi dostupnými aplikacemi**. Na levém okraji zůstává půlkruhová bublina se třemi čárkami, pulzováním a animovaným vysunutím nabídky šířky 154 px. Dole má superadmin kulatý ovladač s ozubeným kolem. Ten zavře workspace a vyvolá menu eLoaderu pod horní lištou, aniž opustí právě otevřenou aplikaci.\n\nNabídka eLoaderu má vodorovná menutlačítka: přehled, profil, aplikace a moduly, aktualizace, nastavení, mail templater, superadmini a provozní záznamy. Na stránkách jádra je viditelná; při otevření aplikace se schová a znovu ji vyvolá ovladač nastavení. Tlačítka se na úzkém displeji zalamují do dalších řádků; submenu má vlastní druhou lištu. Křížek nebo Escape nabídku zavře. Základní horní lišta je vysoká **30 px** a zůstává pevně nahoře i při posouvání. Klávesnice a omezení animací jsou podporované.\n\n## Aplikace a moduly\n\nV **Aplikace a moduly** přetáhněte ZIP nebo vložte instalační odkaz z eUpdate. Nejprve se zobrazí kontrola balíčku; až poté potvrďte důvěru vydavateli a instalaci. Všechen instalovaný PHP kód běží s právy uživatele hostingu; aplikace nejsou bezpečnostně izolované kontejnery.\n\nSkutečný kód se ukládá do `app/<aplikace>/releases/<verze-hash>/`; moduly do `app/<aplikace>/modules/<modul>/releases/<verze-hash>/`. `app/` je na stejné úrovni jako `eloader/`, na eWeb hostingu tedy `private/app/`. Zůstává tam i při aktualizaci jádra nebo Composeru. Cesta je uložená jako `app_root` v `var/config.json`. Trvalá data zůstávají ve `var/app-data/<aplikace>/`.\n\nPři prvním přechodu na 1.3.0 se dosavadní aplikace i historie návratů zkopírují ze staré `eloader/app/` (nebo starších `var/releases/`) do sourozenecké `app/`. Po ověření všech kopií se v jediné JSON transakci přepnou cesty. Původní kopie zůstanou zachované. Dostupnost místa a právo zápisu do `app/` jsou podmínkou převodu.\n\nAplikace potřebuje eLoader SDK vstup; obyčejná samostatná PHP aplikace se přejmenováním cíle nestane integrovanou aplikací. Přiložený `hosting-example-app-1.2.0.zip` posloužil jako vzor hostingového manifestu, nikoli jako nativní eLoader aplikace.\n\n- `examples/demo-notes-1.0.0.zip`: ukázková aplikace, účty viewer/editor, oddělená data a práva.\n- `examples/demo-summary-1.0.0.zip`: modul pro tuto aplikaci.\n- Zdrojové podoby ukázek jsou také v `examples/`.\n\nPostup: nainstalujte Demo Notes, jako superadmin je otevřete a vytvořte zkušební účet. Pověřte aplikaci přihlašováním. Nastavte SMTP a vyzkoušejte PIN e-mailem, loginem i ID. Pak přidejte Demo Summary. Žádné zkušební účty se automaticky nevytvářejí.\n\nPro placený modul lze použít SecretID nebo údaje už schválené licencované identity eUpdate: Server ID, hostname a check-in API klíč. Při požadavku se používají hlavičky `X-Project-Secret`, `X-Server-ID`, `X-Server-Hostname`, `X-Server-Checkin-Key`. eLoader odesílá vlastní check-in, ale přijetí hlášení samo neuděluje licenci k placenému modulu. Licenci schvaluje správce eUpdate.\n\n## Mail templater CZ/EN\n\nObsahuje zvlášť český a anglický předmět, HTML a textovou variantu pro PIN, uvítání a oznámení. Uložené šablony mají náhled a test odeslání přes SMTP. Před náhledem upravenou šablonu uložte. HTML editor odstraní aktivní obsah a nepovolené atributy. PIN šablona musí mít `{pin}` v HTML i textu.\n\nProměnné: `{name}`, `{pin}`, `{expires}`, `{app_name}`, `{site_name}`, `{site_url}`, `{message}`, `{action_url}`.\n\nŠablony UI i e-mailů používají **`tmpl_open(...)`** z publikované Composer verze `pavel852/php-templates` **2.6.1**. Dynamické hodnoty pro HTML se escapují. Přibalená knihovna pochází z Composeru bez lokálních změn.\n\nSMTP podporuje více uložených profilů, jeden aktivní, STARTTLS a implicitní TLS. BulkGate má přímý klient transakčního API v1 s kontrolou `data.status=accepted` a ID zprávy. Vlastní SMS brána používá HTTPS POST JSON `{\"to\":\"+420...\",\"message\":\"...\"}` a volitelný Bearer token; očekává HTTP 2xx. Pro jiné protokoly je potřeba dokumentovaný adaptér.\n\n## Provoz a další dokumentace\n\n- `docs/SDK.md`: kontrakt aplikací, rolí a modulů.\n- `docs/OPERATIONS.md`: soubory, zálohy, aktualizace a obnova přístupu.\n- `VALIDATION.md`: provedené kontroly a hranice ověření.\n- `README.en.md`: English quick start.\n\nPřed ostrým použitím ověřte doručování na vaší SMTP/SMS bráně a jeden instalační/aktualizační cyklus na testovací doméně s vaší verzí eWebu a eUpdate.",
    "download_url": "https://update.estudium.eu/download.php?project=15b70c7d025661ed&release=10533949562b6c8e590d66b178cd321d",
    "package_target": "hosting",
    "requirements": {
        "php": ">=8.2 <9.0"
    },
    "license": {
        "id": "custom",
        "name": "Vlastní",
        "custom_text": "eLoader: Copyright (c) 2026 PB. All rights reserved. Bundled third-party libraries retain their original licenses; see THIRD-PARTY.md."
    },
    "deployment": {
        "archive_root": ".",
        "web_root": "public"
    },
    "project_type": "application",
    "hosting": null
}