brix:papilio is built on a [LAMP](https://en.wikipedia.org/wiki/LAMP_(software_bundle))-stack and uses [PDFlib+PDI](http://www.pdflib.com/products/pdflib-family/pdflib-pdi) as its primary rendering engine. [MINITOC] ## Requirements: * PHP 7.x * MySQL 5.5 or higher (with ONLY_FULL_GROUP_BY disabled) * [PDFlib+PDI](http://www.pdflib.com/products/pdflib-family/pdflib-pdi) 9.x * PHP Modules: rewrite, php-gd, php-pear, php-imagick, php-xml, php-zip, php-mbstring, php-curl, php-soap, php-imagick, php-ldap (optional) * Tools: graphviz, ghostscript, exiftool ## Architecture The application largely follows the MVC pattern: * **Model** with ReadBean ORM and Model_-Classes * **View** rendered by Smarty and uses jQuery * **Controller** triggered by a dynamic dispatcher ![Architecture](arch.png) One notable exception to this are the jFormer forms, which are created in the controllers themselves. ### Access Control In order to protect certain areas from unauthorized access, ACLs are used. There are quite a few predefined and named ACLs, which should cover most use cases. But you can also add custom ACLs for special cases. |ROLE | create Orders | approve Orders | editUser Orders | layout Orders | print Orders | edit Users | switch User | edit Editable Elements | edit Templates | edit Clients | edit Divisions | edit Labels | view System | view Statistics | edit Visible Elements | edit User Groups | translate Orders | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |SUPERADMIN | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |ADMIN | 1 | 1 | 1 | 0 | 0 | 1 | 1 | 1 | 0 | 0 | 1 | 1 | 0 | 1 | 1 | 1 | 0 |CONTROLLER | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |USER | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |PRINT_OPERATOR | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |GRAPHIC_ARTIST | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |LAYOUTER | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 |GROUP_ADMIN | 1 | 1 | 1 | 0 | 0 | 1 | 1 | 1 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 0 #### Multi-Tennancy Additionally, brix:papilio is a multi-tennant system. This means that all top-level objects also store their client ID along with the other properties. This filter is applied throughout the system in order to separate the tennants. Only superadmins and users with the "switch client" flag (this may be useful for print operators) are able to switch clients. ### States Orders use the following state machine (note that an order can have multiple states): ![states](order_states.png)