Configuration

The Engelsystem can be fully configured by an administrator (Developer permission) after the database is set up and configured. A minimal config/config.php to connect to a database requires the four MySQL connection parameters:

<?php
return [
    'database' => [
        'host' => 'localhost', // The database host to connect to
        'database' => 'engelsystem', // Name of the MySQL database
        'username' => 'engelsystem', // Database user
        'password' => '<your password here>', // Password for the database user
    ],
];

When using a config file, the Engelsystem default values are overwritten.
A . in the setting name splits the array sub-keys, see database.host config and the code above as an example.
Environment variables (env vars) can be used for most options (for example in a Docker deployment). When the config type is multi_select the env var values must be comma separated:

REQUIRED_USER_FIELDS=tshirt_size,mobile,pronoun

Options defined below as “Hidden” can only be changed using a config file or env variables.
A static config type marks options that are not migrated to the settings page (yet) and thus are hidden. They can be changed by env vars or config file only.

The following page lists all available settings and their usage.

Event

Event Name

  • Name: name
  • Type: text
  • Env var: NAME
  • Default: null

The event name is shown on the start page

Event Welcome Message

  • Name: welcome_msg
  • Type: text
  • Env var: WELCOME_MSG
  • Default: null

The welcome message is shown after successful registration. Markdown can be used.

Registration enabled

  • Name: registration_enabled
  • Type: boolean
  • Env var: REGISTRATION_ENABLED
  • Default: true

Buildup

  • Name: buildup_start
  • Type: datetime-local
  • Env var: BUILDUP_START
  • Default: null

Event start

  • Name: event_start
  • Type: datetime-local
  • Env var: EVENT_START
  • Default: null

Event end

  • Name: event_end
  • Type: datetime-local
  • Env var: EVENT_END
  • Default: null

Teardown end

  • Name: teardown_end
  • Type: datetime-local
  • Env var: TEARDOWN_END
  • Default: null

Day of event

  • Name: enable_day_of_event
  • Type: boolean
  • Env var: ENABLE_DAY_OF_EVENT
  • Default: false

Whether to show the current day of the event (-2, -1, 0, 1, 2…) in the footer and on the dashboard. The event start date has to be set for it to appear.

Event has day 0

  • Name: event_has_day0
  • Type: boolean
  • Env var: EVENT_HAS_DAY0
  • Default: true

If enabled there will be a day 0 (-1, 0, 1…). If not there won’t (-1, 1…).

FAQ text

  • Name: faq_text
  • Type: text
  • Env var: FAQ_TEXT
  • Default: null

Additional text displayed on the FAQ page. Markdown can be used.

privacy@ contact e-mail

  • Name: privacy_email
  • Type: text
  • Env var: PRIVACY_EMAIL
  • Default: null

Features

DECT

  • Name: enable_dect
  • Type: boolean
  • Env var: ENABLE_DECT
  • Default: false

Enables DECT numbers for users, locations and angel types

Display mobile number

  • Name: enable_mobile_show
  • Type: boolean
  • Env var: ENABLE_MOBILE_SHOW
  • Default: false

Whether the mobile number will be shown to all users

First / last name

  • Name: enable_full_name
  • Type: boolean
  • Env var: ENABLE_FULL_NAME
  • Default: false

Display full name

  • Name: display_full_name
  • Type: boolean
  • Env var: DISPLAY_FULL_NAME
  • Default: false

Show a user’s first name and last name instead of username

Pronouns

  • Name: enable_pronoun
  • Type: boolean
  • Env var: ENABLE_PRONOUN
  • Default: true

Required user fields

  • Name: required_user_fields
  • Type: select_multi
  • Env var: REQUIRED_USER_FIELDS

Default:

[
  'tshirt_size',
]

Possible values:

[
  'pronoun',
  'firstname',
  'lastname',
  'tshirt_size',
  'mobile',
  'dect',
]

Planned arrival / departure

  • Name: enable_planned_arrival
  • Type: boolean
  • Env var: ENABLE_PLANNED_ARRIVAL
  • Default: true

Force active

  • Name: enable_force_active
  • Type: boolean
  • Env var: ENABLE_FORCE_ACTIVE
  • Default: true

Allows enforcing goodies

(Food-) vouchers

  • Name: enable_voucher
  • Type: boolean
  • Env var: ENABLE_VOUCHER
  • Default: true

Initial vouchers

  • Name: voucher_settings.initial_vouchers
  • Type: number
  • Env var: INITIAL_VOUCHERS
  • Default: 0

Shifts per voucher

  • Name: voucher_settings.shifts_per_voucher
  • Type: number
  • Env var: SHIFTS_PER_VOUCHER
  • Default: 0

Hours per voucher

  • Name: voucher_settings.hours_per_voucher
  • Type: number
  • Env var: HOURS_PER_VOUCHER
  • Default: 2

Voucher start

  • Name: voucher_settings.voucher_start
  • Type: date
  • Env var: VOUCHER_START
  • Default: null

Unlimited food vouchers

  • Name: enable_force_food
  • Type: boolean
  • Env var: ENABLE_FORCE_FOOD
  • Default: false

Allows getting unlimited food vouchers

Own work logs

  • Name: enable_self_worklog
  • Type: boolean
  • Env var: ENABLE_SELF_WORKLOG
  • Default: true

Allow users with sufficient permission to add worklogs for themselves

Shift sign up requires arrival

  • Name: signup_requires_arrival
  • Type: boolean
  • Env var: SIGNUP_REQUIRES_ARRIVAL
  • Default: false

Only arrived users can sign up for shifts

Auto arrive

  • Name: autoarrive
  • Type: boolean
  • Env var: AUTOARRIVE
  • Default: false

Set newly registered users automatically as arrived

Supporters can promote

  • Name: supporters_can_promote
  • Type: boolean
  • Env var: SUPPORTERS_CAN_PROMOTE
  • Default: false

Supporters of an angel type (team) can promote other users of the angel type to supporter

Join QR code

  • Name: join_qr_code
  • Type: boolean
  • Env var: JOIN_QR_CODE
  • Default: true

Allow joining an angel type via generated QR code, requires app_key

Certificates

Driving license

  • Name: driving_license_enabled
  • Type: boolean
  • Env var: DRIVING_LICENSE_ENABLED
  • Default: true

Health instruction

  • Name: ifsg_enabled
  • Type: boolean
  • Env var: IFSG_ENABLED
  • Default: false

Instruction in accordance with § 43 Para. 1 of the German Infection Protection Act (IfSG)

Health instruction on site

  • Name: ifsg_light_enabled
  • Type: boolean
  • Env var: IFSG_LIGHT_ENABLED
  • Default: false

Instruction only onsite in accordance with § 43 Para. 1 of the German Infection Protection Act (IfSG)

Shifts

Sign up before start

  • Name: signup_advance_hours
  • Type: number
  • Env var: SIGNUP_ADVANCE_HOURS
  • Default: 0

Only allow shift signup this number of hours in advance. Setting it to 0 disables the feature.

Sign up after start

  • Name: signup_post_minutes
  • Type: number
  • Env var: SIGNUP_POST_MINUTES
  • Default: 0

Allow shift signup this number of minutes after start of shift. If “Sign up after start fraction” is set, it is applied first before adding the number of minutes specified here.

Sign up after start fraction

  • Name: signup_post_fraction
  • Type: number
  • Env var: SIGNUP_POST_FRACTION
  • Default: 0

Allow sign up this fraction of the shift length after the start of the shift. If it’s 1, sign up is allowed until the end of the shift; 0.5 means the first half of the shift. If “Sign up minutes after start” is set, this is applied first and then the minutes are added on top.

Last unsubscribe

  • Name: last_unsubscribe
  • Type: number
  • Env var: LAST_UNSUBSCRIBE
  • Default: 3

Minimum hours before a shift starts where a user can still sign out of their own shifts

Maximum freeloadable shifts

  • Name: max_freeloadable_shifts
  • Type: number
  • Env var: MAX_FREELOADABLE_SHIFTS
  • Default: 2

Number of shifts to freeload until a user is locked from shift signup

Goodie

Goodie Type

  • Name: goodie_type
  • Type: select
  • Env var: GOODIE_TYPE
  • Default: goodie

Possible values:

[
  'none',
  'goodie',
  'tshirt',
]

E-mail opt-in

  • Name: enable_email_goodie
  • Type: boolean
  • Env var: ENABLE_EMAIL_GOODIE
  • Default: false

Show opt-in on user profile and registration pages to save some personal data after the event

  • Name: tshirt_link
  • Type: url
  • Env var: TSHIRT_LINK
  • Default: null

Night shifts enabled

  • Name: night_shifts.enabled
  • Type: boolean
  • Env var: NIGHT_SHIFTS
  • Default: true

Multiplies ’night shifts’ between start and end (numbers as hours) by multiplier for goodie score. Goodies must be enabled!

Night shifts start hour

  • Name: night_shifts.start
  • Type: number
  • Env var: NIGHT_SHIFTS_START
  • Default: 2

Night shifts end hour (exclusive)

  • Name: night_shifts.end
  • Type: number
  • Env var: NIGHT_SHIFTS_END
  • Default: 8

Night shifts multiplier

  • Name: night_shifts.multiplier
  • Type: number
  • Env var: NIGHT_SHIFTS_MULTIPLIER
  • Default: 2

System

Application name (not event name)

  • Name: app_name
  • Type: text
  • Env var: APP_NAME
  • Default: Engelsystem

Customizes the application name displayed throughout the interface

Languages

  • Name: locales
  • Type: select_multi
  • Env var: LOCALES
  • Required

Default:

[
  'de_DE',
  'en_US',
]

Possible values:

[
  'de_DE',
  'en_US',
]

Default language

  • Name: default_locale
  • Type: select
  • Env var: DEFAULT_LOCALE
  • Default: en_US
  • Required

Possible values:

[
  'de_DE',
  'en_US',
]

Default theme

  • Name: theme
  • Type: select
  • Env var: THEME
  • Default: 1
  • Required

Possible values:

[21,20,19,18,17,16,15,14,13,12,10,9,8,7,6,5,4,3,2,11,0,1]

Time zone

  • Name: timezone
  • Type: select
  • Env var: TIMEZONE
  • Default: Europe/Berlin
  • Required

Possible values:

[
  'Africa/Abidjan',
  'Africa/Accra',
  'Africa/Addis_Ababa',
  'Africa/Algiers',
  'Africa/Asmara',
  'Africa/Bamako',
  'Africa/Bangui',
  'Africa/Banjul',
  'Africa/Bissau',
  // ...
  'Pacific/Port_Moresby',
  'Pacific/Rarotonga',
  'Pacific/Saipan',
  'Pacific/Tahiti',
  'Pacific/Tarawa',
  'Pacific/Tongatapu',
  'Pacific/Wake',
  'Pacific/Wallis',
  'UTC',
]

App key

  • Name: app_key
  • Type: password
  • Env var: APP_KEY
  • Default: ``

Random, long (at least 32 characters) alphanumeric or base64 encoded key, used for signing

Database type

  • Name: database.driver
  • Type: select
  • Env var: MYSQL_TYPE
  • Default: mysql
  • Required

Possible values:

[
  'mysql',
  'mariadb',
]

Database host

  • Name: database.host
  • Type: text
  • Env var: MYSQL_HOST
  • Default: localhost
  • Required

Database name

  • Name: database.database
  • Type: text
  • Env var: MYSQL_DATABASE
  • Default: engelsystem
  • Required

Database username

  • Name: database.username
  • Type: text
  • Env var: MYSQL_USER
  • Default: root
  • Required

Database password

  • Name: database.password
  • Type: password
  • Env var: MYSQL_PASSWORD
  • Default: ``
  • Required

E-mail driver

  • Name: email.driver
  • Type: select
  • Env var: MAIL_DRIVER
  • Default: mail
  • Required

Configuring a Symfony mailer dsn like smtps://[user]:[password]@smtp.[domain]:465 is possible via config file or env variable

Possible values:

[
  'smtp',
  'sendmail',
  'mail',
  'log',
]

E-mail sender name

  • Name: email.from.name
  • Type: text
  • Env var: MAIL_FROM_NAME
  • Default: Engelsystem

E-mail sender address

  • Name: email.from.address
  • Type: email
  • Env var: MAIL_FROM_ADDRESS
  • Default: noreply@example.com
  • Required

E-mail host

  • Name: email.host
  • Type: text
  • Env var: MAIL_HOST
  • Default: localhost

E-mail port

  • Name: email.port
  • Type: number
  • Env var: MAIL_PORT
  • Default: 465

465 for TLS, 587 for STARTTLS

E-mail using TLS transport encryption

  • Name: email.tls
  • Type: boolean
  • Env var: MAIL_TLS
  • Default: true

E-mail username

  • Name: email.username
  • Type: text
  • Env var: MAIL_USERNAME
  • Default: null

E-mail password

  • Name: email.password
  • Type: password
  • Env var: MAIL_PASSWORD
  • Default: null

Sendmail command

  • Name: email.sendmail
  • Type: text
  • Env var: MAIL_SENDMAIL
  • Default: /usr/sbin/sendmail -bs
  • Hidden

Home site

  • Name: home_site
  • Type: select
  • Env var: HOME_SITE
  • Default: news
  • Required

Redirects to this site after logging in or when clicking the page name

Possible values:

[
  'news',
  'meetings',
  'user-shifts',
  'angeltypes',
  'questions',
]

Displayed news

  • Name: display_news
  • Type: number
  • Env var: DISPLAY_NEWS
  • Default: 10
  • Required

Number of news items shown on one page and for feed readers

Displayed users

  • Name: display_users
  • Type: number
  • Env var: DISPLAY_USERS
  • Default: 100
  • Required

Number of users shown in a table

Shifts filter

  • Name: filter_max_duration
  • Type: number
  • Env var: FILTER_MAX_DURATION
  • Default: 0

Set max number of hours that can be shown at once on shifts overview, 0 means no limit

Minimum password length

  • Name: password_min_length
  • Type: number
  • Env var: PASSWORD_MIN_LENGTH
  • Default: 8
  • Required

Password

  • Name: enable_password
  • Type: boolean
  • Env var: ENABLE_PASSWORD
  • Default: true

Whether the login and registration via password should be enabled (login will be hidden if false). This is useful when using OAuth, disabling it also disables normal registration without oauth.

External registration URL

  • Name: external_registration_url
  • Type: url
  • Env var: EXTERNAL_REGISTRATION_URL
  • Default: null

URL to external registration page, linked from login page

Application URL

  • Name: url
  • Type: url
  • Env var: APP_URL
  • Default: null

URL and base path to use instead of the auto-detected one

API key for /metrics

  • Name: api_key
  • Type: text
  • Env var: API_KEY
  • Default: ``

The API key is used to protect access to the Engelsystem /metrics endpoint. It has no restrictions on length or character classes and must be included in the HTTP request as the request parameter api_key.

Session storage

  • Name: session.driver
  • Type: select
  • Env var: SESSION_DRIVER
  • Default: pdo
  • Required

Possible values:

[
  'pdo',
  'native',
]
  • Name: session.name
  • Type: text
  • Env var: SESSION_NAME
  • Default: session
  • Required

Session lifetime in days

  • Name: session.lifetime
  • Type: number
  • Env var: SESSION_LIFETIME
  • Default: 30
  • Required

JWT expiration time in minutes

  • Name: jwt_expiration_time
  • Type: number
  • Env var: JWT_EXPIRATION_TIME
  • Default: 10080
  • Required

Number of minutes after a JWT must expire, for example max angel type join time

Maintenance mode

  • Name: maintenance
  • Type: boolean
  • Env var: MAINTENANCE
  • Default: false
  • Hidden

If enabled it takes the Engelsystem offline for maintenance and shows a static page to all requests

Environment

  • Name: environment
  • Type: select
  • Env var: ENVIRONMENT
  • Default: production
  • Required
  • Hidden

Use “development” to enable debugging messages (Might show sensitive content like passwords on requests!)

Possible values:

[
  'production',
  'development',
]
  • Name: header_items
  • Type: static
  • Env var: -
  • Default: []
  • Hidden

Available link placeholder: %lang%, see config/app.php for examples

  • Name: footer_items
  • Type: static
  • Env var: -
  • Hidden

Available link placeholder: %lang%, see config/app.php for examples

Default:

[
  'faq.faq' => [
    '/faq',
    'faq.view',
  ],
]

Contact options

  • Name: contact_options
  • Type: static
  • Env var: -
  • Default: []
  • Hidden

Other ways to ask heaven, see config/app.php for examples

Documentation URL

  • Name: documentation_url
  • Type: url
  • Env var: DOCUMENTATION_URL
  • Default: https://engelsystem.de/doc/
  • Hidden

Link to documentation/help

Credits

  • Name: credits
  • Type: static
  • Env var: -
  • Hidden

A list of credits to be shown on the credits page, Markdown can be used, should not be changed

Default:

[
  'Contribution' => 'Please visit [engelsystem/engelsystem](https://github.com/engelsystem/engelsystem) if you want to contribute, have found any [bugs](https://github.com/engelsystem/engelsystem/issues) or need help.',
]

Setup admin password

  • Name: setup_admin_password
  • Type: text
  • Env var: SETUP_ADMIN_PASSWORD
  • Default: null
  • Hidden

Initial admin password, configured on first setup migration

Password algorithm

  • Name: password_algorithm
  • Type: text
  • Env var: PASSWORD_ALGORITHM
  • Default: 2y
  • Required
  • Hidden

Define the algorithm to use for password_verify(). If a user password is hashed with an old algorithm, the password will be converted to the new format on login. See https://secure.php.net/manual/en/password.constants.php for a complete list.

Username filter regex

  • Name: username_regex
  • Type: text
  • Env var: USERNAME_REGEX
  • Default: /([^\p{L}\p{N}_.-]+)/ui
  • Required
  • Hidden

Regular expression describing an invalid username. By default, usernames must only contain alphanumeric characters, “-”, “_”, or “.”.

Hidden user table columns

  • Name: disabled_user_view_columns
  • Type: select
  • Env var: DISABLED_USER_VIEW_COLUMNS
  • Default: []
  • Hidden

Hide columns in backend user view, possible values are any sortable parameters of the table

Trusted proxies

  • Name: trusted_proxies
  • Type: select_multi
  • Env var: TRUSTED_PROXIES
  • Hidden

IP addresses of reverse proxies that are trusted, can be an array or a comma separated list

Default:

[
  '127.0.0.0/8',
  '::ffff:127.0.0.0/8',
  '::1/128',
]

HTTP response headers

  • Name: headers
  • Type: static
  • Env var: -
  • Hidden

See config/app.php for examples

Default:

[
  'X-Content-Type-Options' => 'nosniff',
  'X-Frame-Options' => 'sameorigin',
  'Referrer-Policy' => 'strict-origin-when-cross-origin',
  'Content-Security-Policy' => 'default-src \'self\';  style-src \'self\' \'unsafe-inline\'; img-src \'self\' data:;',
  'X-XSS-Protection' => '1; mode=block',
  'Feature-Policy' => 'autoplay \'none\'',
]

Add additional headers

  • Name: add_headers
  • Type: boolean
  • Env var: ADD_HEADERS
  • Default: true
  • Hidden

OAuth providers

  • Name: oauth
  • Type: static
  • Env var: -
  • Default: []
  • Hidden

Setup external authentication providers, see config/app.php for examples

Available T-shirt sizes

  • Name: tshirt_sizes
  • Type: static
  • Env var: -
  • Hidden

See config/app.php for examples

Default:

[
  'S' => 'Small Straight-Cut',
  'S-F' => 'Small Fitted-Cut',
  'M' => 'Medium Straight-Cut',
  'M-F' => 'Medium Fitted-Cut',
  'L' => 'Large Straight-Cut',
  'L-F' => 'Large Fitted-Cut',
  'XL' => 'XLarge Straight-Cut',
  'XL-F' => 'XLarge Fitted-Cut',
  '2XL' => '2XLarge Straight-Cut',
  '3XL' => '3XLarge Straight-Cut',
  '4XL' => '4XLarge Straight-Cut',
]

Supported themes

  • Name: themes
  • Type: static
  • Env var: -
  • Hidden

See config/app.php for examples

Default:

[
  [
    'name' => 'Engelsystem 39c3 (2025)',
    'type' => 'dark',
    'navbar_classes' => 'navbar-dark',
  ],
  [
    'name' => 'Engelsystem eh22-light (2025)',
    'type' => 'light',
    'navbar_classes' => 'navbar-light',
  // ...
    'name' => 'Engelsystem light',
    'type' => 'light',
    'navbar_classes' => 'navbar-light bg-light',
  ],
  [
    'name' => 'Engelsystem dark',
    'type' => 'dark',
    'navbar_classes' => 'navbar-dark bg-black border-dark',
  ],
]

JWT algorithm

  • Name: jwt_algorithm
  • Type: select
  • Env var: JWT_ALGORITHM
  • Default: HS256
  • Required
  • Hidden

Possible values:

[
  'HS256',
]

/metrics buckets

  • Name: metrics
  • Type: static
  • Env var: -
  • Hidden

Default:

[
  'work' => [3600,5400,7200,10800,18000,36000,72000],
  'voucher' => [0,1,2,3,5,10,15,20],
]

var_dump server

  • Name: var_dump_server
  • Type: static
  • Env var: -
  • Hidden

Default:

[
  'host' => '127.0.0.1',
  'port' => '9912',
  'enable' => false,
]