{
    "schema": "eupdate-package-specification-v1",
    "author": "PB <pavel.bartos.pb@gmail.com>",
    "project_id": "15b70c7d025661ed",
    "software_id": "eloader",
    "software": "eLoader",
    "module": null,
    "release_id": "d2955059e6510db370d0e8f9690cd6d3",
    "version": "1.1.0",
    "release_date": "2026-09-12",
    "published_at": "2026-09-12T17:08:30+00:00",
    "bytes": 1119079,
    "sha256": "1a48e1457862dfbd3870cf538d8954f859f87924a07dd8c4f67eab05713b561e",
    "file_count": 191,
    "languages": {
        "PHP": {
            "bytes": 652656,
            "files": 109
        },
        "CSS": {
            "bytes": 8857,
            "files": 1
        },
        "HTML": {
            "bytes": 7610,
            "files": 29
        },
        "JavaScript": {
            "bytes": 1554,
            "files": 1
        },
        "SQL": {
            "bytes": 1036,
            "files": 1
        }
    },
    "installation_url": "https://update.estudium.eu/package.php?software_id=eloader&version=1.1.0",
    "update_url": "https://update.estudium.eu/package.php?software_id=eloader",
    "install_json": {
        "software": "eLoader",
        "software_id": "eloader",
        "version": "1.1.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-12T17:08:30+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": "CC0-1.0",
        "license_custom": "",
        "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
            }
        },
        "project": {
            "website": ""
        },
        "homepage": ""
    },
    "readme": "# eLoader 1.1.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## 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. Příkaz vypíše jednorázový token a přesný příkaz pro cron.\n\nOtevřete doménu, zadejte token a vytvořte prvního superadmina: jméno, e-mail, volitelný login, heslo nejméně 12 znaků a výchozí jazyk. Token platí 24 hodin; po dokončení jej nelze použít znovu. Neexistuje výchozí heslo.\n\nNastavte SMTP a v **Mail templateru** odešlete testovací zprávu. Heslo superadmina slouží také k přístupu při poruše doručování PINu.\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\nTím vznikne `var/` vedle `public/`. 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.1.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\nZ projektu zkopírujte instalační odkaz. Pro tento identifikátor bude jeho tvar:\n\n```text\nhttps://update.estudium.eu/package.php?software_id=eloader\n```\n\nJde o očekávaný odkaz **po publikování**, nikoli o potvrzení, že projekt už na serveru existuje. Balíček zde nebyl publikován na váš produkční eUpdate. Připravený klient používá skutečný kontrakt `eupdate-installation-v1` z eUpdate 1.7.8.\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** nastavte odkaz na projekt `eloader` v eUpdate. U neveřejného projektu doplňte SecretID.\n2. Zapněte autoupdate a nastavte čas kontroly; předvolba je **03:30 v Europe/Prague**.\n3. Do cronu konkrétního 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\nCron kontroluje plán každých pět minut; stažení a aktualizaci provede nejvýše jednou denně po zvoleném čase. Bez cronu automatické aktualizace neběží. Výchozí stav je vypnuto, dokud správce nenastaví publikovaný zdroj. Samostatná ruční kontrola je dostupná tlačítkem.\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 současně vypne autoupdate jádra i Composeru. Aktualizace, která neprojde kontrolou, se neaktivuje. Verze 1.1.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## 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** 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## 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\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 v této verzi sám neprovádí registraci/licenční check-in; povolení musí již existovat v 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 STARTTLS a implicitní TLS. SMS brána používá HTTPS POST JSON `{\"to\":\"+420...\",\"message\":\"...\"}` a Bearer token; očekává HTTP 2xx. Pro poskytovatele s jiným protokolem je potřeba 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=d2955059e6510db370d0e8f9690cd6d3",
    "package_target": "hosting",
    "requirements": {
        "php": ">=8.2 <9.0"
    },
    "license": {
        "id": "CC0-1.0",
        "name": "CC0 1.0",
        "custom_text": ""
    },
    "deployment": {
        "archive_root": ".",
        "web_root": "public"
    },
    "project_type": "application",
    "hosting": null
}