EaseFramework based MultiFlexi web interface
Find a file
CyberVitexus 7f1dcf1199 Use jobgraph.php on jobs, dashboard, and status pages.
Fix JobGraphWidget call args, drop duplicate runtemplate graph, and serve status image from jobgraph.php.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-02 18:08:05 +02:00
debian fix(debian/Jenkinsfile): ensure .git/objects writable during unstash; disable forky 2026-10-02 17:25:04 +02:00
doc refactor(multiflexi-web5): remove redundant GDPR migration script 2026-07-23 23:34:22 +02:00
i18n feat(multiflexi): add Czech and English translations for new strings in RunTemplate panel 2026-08-13 16:44:33 +02:00
src Use jobgraph.php on jobs, dashboard, and status pages. 2026-10-02 18:08:05 +02:00
tests feat(multiflexi-web5): add contextual breadcrumb navigation across the app 2026-08-22 18:14:01 +02:00
.agent.md Add RBAC role management and user listing features 2026-06-06 14:02:41 +02:00
.gitignore fix(multiflexi-web5): commit generated DataTables/Buttons assets for Debian packaging 2026-07-17 15:47:49 +02:00
.php-cs-fixer.dist.php update fixer conf 2026-03-16 16:09:32 +01:00
.phpunit.result.cache Guard against empty credential IDs in Euri calls 2026-06-06 10:35:55 +02:00
AGENTS.md Fix Event Rules DataTables Ajax and enrich rule editor UI. 2026-10-02 17:59:54 +02:00
composer.json Require ease-html-widgets 1.1.2 for BrowsingHistory fix. 2026-09-21 07:17:24 +02:00
composer.lock Require ease-html-widgets 1.1.2 for BrowsingHistory fix. 2026-09-21 07:17:24 +02:00
copy-datatables-assets.php fix(multiflexi-web5): commit generated DataTables/Buttons assets for Debian packaging 2026-07-17 15:47:49 +02:00
IMPLEMENTATION_COMPLETE.md feat: Add filtered listers for credential types and run templates based on user access 2026-06-06 16:25:44 +02:00
Makefile refactor(multiflexi-web5): remove redundant GDPR migration script 2026-07-23 23:34:22 +02:00
multiflexi-web5.svg multiflexi-web5.svg introduced 2026-08-23 15:58:27 +02:00
phpstan-default-baseline.neon source code moved from original project 2026-03-15 23:04:23 +01:00
phpstan-default.neon.dist source code moved from original project 2026-03-15 23:04:23 +01:00
phpstan.neon source code moved from original project 2026-03-15 23:04:23 +01:00
phpunit.xml source code moved from original project 2026-03-15 23:04:23 +01:00
RBAC_SUMMARY.md feat: Implement company-level RBAC with access control enforcement 2026-06-06 15:22:56 +02:00
README.md docs(README): add Debian packaging shield 2026-07-29 16:03:21 +02:00

MultiFlexi Web Interface

License: MIT PHP Bootstrap 5 Packaging: deb

The web front-end for MultiFlexi — a launcher that runs a catalogue of tools and jobs against accounting/ERP servers such as AbraFlexi and Stormware Pohoda. This package provides the browser UI: dashboards, company and credential management, job scheduling and history, executor configuration, administrative tooling, and a GDPR-compliant consent and data-rights workflow.

This is the Bootstrap 5 generation of the interface. The Debian package multiflexi-web5 is a drop-in replacement for the older multiflexi-web (it Conflicts/Replaces/Provides it), so only one web interface can be installed at a time.

Features

  • Dashboard & monitoring — overview of companies, applications, jobs, and recent run results with exit-code status indicators.
  • Company & application management — register companies, assign apps, manage per-company configuration and environment overrides.
  • Credentials — credential types, prototypes, wizards, and per-company credential storage (with Vaultwarden integration available in core).
  • Jobs & scheduling — run templates, ad-hoc launches, schedules, queues, reschedule/delay controls, live job output, and job history graphs.
  • Executors — configure and inspect execution backends.
  • Event rules & sources — automate actions in response to events.
  • GDPR tooling — cookie consent, privacy/cookie policy pages, consent preferences API, Article 16 data-rectification workflow, data export, deletion requests, data-retention administration, and audit logging.
  • Security — session hardening, CSRF protection, AES-256 encryption of sensitive data, API rate limiting, and IP whitelisting for admin access.
  • Internationalisation — English and Czech translations (gettext .mo).
  • Integrations — OpenTelemetry tracing, Zabbix, WebSocket live updates, and a REST API server.

Architecture

src/
├── *.php                  # ~99 page controllers (index, dashboard, job, …)
├── init.php               # bootstrap: Shared::init(), session, CSRF
├── MultiFlexi/            # application classes (PSR-4: MultiFlexi\)
│   ├── Ui/                #   Bootstrap 5 widgets & page rendering
│   ├── Api/               #   REST API server & auth
│   ├── Security/          #   sessions, CSRF, encryption
│   ├── GDPR/  Consent/  DataExport/  DataRetention/  DataErasure/
│   ├── Audit/  Notifications/  Telemetry/  Email/  Command/
│   └── *Lister.php        #   list/query helpers
├── css/  js/  images/  assets/
└── api/                   # REST API entry point

The UI builds on the VitexSoftware EaseFramework stack (ease-twbootstrap5, ease-bootstrap5-widgets, ease-fluentpdo) and the shared multiflexi-core package. Page controllers are thin; most logic lives in MultiFlexi\* classes and in core.

Requirements

  • PHP 8.1+ with ext-yaml, ext-simplexml, ext-intl
  • A database supported by core (SQLite, MySQL/MariaDB, or PostgreSQL)
  • Composer (for development) or the Debian package (for deployment)
  • A web server (Apache configuration is shipped with the package)

Installation

sudo apt install multiflexi-web5

The package installs the UI under /usr/share/multiflexi-web, ships an Apache config exposing it at /multiflexi, and reads its configuration from /etc/multiflexi/multiflexi.env.

From source (development)

git clone https://github.com/Vitexus/multiflexi-web5.git
cd multiflexi-web5
make vendor                  # composer install (+ copies DataTables assets)
cp debian/conf/.env.template .env   # then edit DB_* and ENCRYPTION_MASTER_KEY
php -S localhost:8080 -t src # serve the src/ directory

Configuration

Configuration is read from the .env file (in the package this is /etc/multiflexi/multiflexi.env). Key variables:

Variable Description
DB_CONNECTION sqlite, mysql, or pgsql
DB_HOST / DB_PORT Database host and port
DB_DATABASE Database name or SQLite path
DB_USERNAME / DB_PASSWORD Database credentials
ENCRYPTION_MASTER_KEY Master key for AES-256 field encryption
APP_DEBUG true/false — verbose error output
MULTIFLEXI_TIMEZONE Timezone (autodetected if unset)
ENABLE_GOOGLE_ANALYTICS Opt-in analytics (self-hosted advised)
SESSION_TIMEOUT Session lifetime in seconds (def. 14400)

Development

Common make targets (run make help for the full list):

Target Purpose
make vendor Install Composer dependencies
make phpunit Run the PHPUnit test suite
make static-code-analysis Run PHPStan
make cs Apply coding standards (php-cs-fixer)
make debs Build the Debian package
make redeb Rebuild and reinstall the .deb locally
make docs Build the Sphinx HTML documentation
make gdpr-migration Run the GDPR Article 16 DB migration

Tests

make phpunit
# or directly:
vendor/bin/phpunit -c phpunit.xml

Coding standards & static analysis

make cs                    # friendsofphp/php-cs-fixer
make static-code-analysis  # phpstan/phpstan

Packaging notes

The Debian package keeps runtime paths under multiflexi-web (so web5 stays a true drop-in replacement) while staging into debian/multiflexi-web5/. At build time debian/rules stamps APP_NAME/APP_VERSION into the installed autoload.php from the project-root composer.json and debian/changelog. Generated build artifacts are ignored via debian/.gitignore.

Documentation

Full documentation lives in the multiflexi-doc project and at multiflexi.eu.

License

MIT © Vítězslav Dvořák / VitexSoftware. See debian/copyright for full details.