System Guide

brix:papilio is built on a LAMP-stack and uses PDFlib+PDI as its primary rendering engine.

Requirements:

  • PHP 7.x
  • MySQL 5.5 or higher (with ONLY_FULL_GROUP_BY disabled)
  • 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

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