Installation steps, external libraries, migrations and environment

The installer steps, rules of the base schema and migrations, location and installation modes of external libraries, the update manager, language files and the system check measurements.

Installation runs on the "System check and installation" tab of the extension's edit page as separate, idempotent AJAX steps: check → composer → schema → migrate → defaults → register → finish. The install button is only active without red errors.

Steps

  1. Base schema: install/schema/baseline.sql (only CREATE TABLE IF NOT EXISTS), then the migrations.
  2. The defaults step generates the cron secret if missing and writes the cron rows.
  3. External libraries when web installation cannot run (e.g. exec disabled): extract libraries.zip into the storage folder with the cPanel file manager, then "Install libraries"; on a terminal without Composer php install/composer/install.php <storage> --from=<package or vendor folder> (the temporary folder is removed even on failure); with Composer php install/composer/install.php <storage> [--composer=<path>] — Composer is found on the PATH, at /opt/cpanel/composer/bin/composer and as ~/composer.phar.
  4. Running cron: every minute php cron.php from the framework root (recommended), or the worker URL with the masterdata/cronqueue.run endpoint and the cron secret (the secret is not shown in lists or logs).

External libraries

Composer packages (install/composer/composer.json, PHP ≥ 8.0, platform 8.0.30) in the framework's shared vendor folder with a package manifest; updated stock packages are moved into place from a stage folder. The system check's package row shows the version and the location.

PackageVersionPurpose
tecnickcom/tcpdf^6.7PDF generation (the PDF base only swallows the 6.9+ deprecation notice from TCPDF files)
setasign/fpdi, setasign/fpdf^2.6, ^1.8importing PDF pages (watermark, merging)
smalot/pdfparser^2.11PDF text extraction
google/apiclient^2.15Drive storage, conversion (Drive service only)
guzzlehttp/guzzle, psr7, promises, psr/http-message^7.15.2, ^2.13.2, ^2.6, ^1.1HTTP; stock packages are updated within the same major version for security
qualityunit/tnef-decoder^1.0e-mail attachments (optional)

Migrations and updates

  • Global SemVer (install.json, currently 1.1.0). New migrations only under install/migrations/<version>/, with a header (@id, @requires, @skip-if, @post, @reversible), a prefix placeholder in table names, expand-only (no DROP, RENAME, narrowing, UPDATE without WHERE).
  • The runner splits conditional DDL to stay portable to MySQL 5.7, runs in exception mode and logs (migration table: version, batch, times, duration, error, SHA-256 checksum, kind, reversibility). The file of an applied migration must not change.
  • Update manager: signed package (Ed25519); preparation (approval, download, signature and hash, staging, pre-check, backup) and activation (maintenance, delta backup, migration from the staging code, atomic code switch, library sync, health check; automatic code rollback on failure). Independent recovery tool (CLI; web only in an allowed window).

Languages

Every caption comes from a language key in three language folders (en-gb, hu-hu, de-de). The Hungarian language pack re-merges the extension's own translations after copying the pack. Document language: the template language; recipients' e-mails in the person's notification language; the data room switches language without a page reload.

Environment

AreaRequirement
PHP≥ 8.0.0 (≥ 8.2 recommended), 64-bit recommended; framework 4.0.2.x
Required extensionsmysqli, curl, mbstring, zip, dom, simplexml, libxml, openssl, sodium, gd, zlib, iconv, json, ctype
Recommended, optionalfileinfo, OPcache, soap; imap, exif, imagick, intl
inimemory_limit ≥ 128M (512M suggested), max_execution_time ≥ 120 (300 suggested), upload_max_filesize ≥ 32M (64M suggested), post_max_size ≥ upload, max_input_vars ≥ 3000 (5000 suggested), file_uploads = On
DatabaseMariaDB ≥ 10.2.7 or MySQL ≥ 5.7.8; privileges: CREATE, ALTER, INDEX, DROP, CREATE TEMPORARY TABLES; GET_LOCK(); utf8mb4
Writable foldersstorage, logs, cache, upload, image (required); extension (recommended)
Optional programsghostscript, pdftotext, qpdf, tesseract (+hun), imagemagick, composer