Refactoring: Config cleanup / moved to class
This commit is contained in:
parent
740026a9de
commit
8506d6d27e
|
@ -21,6 +21,9 @@
|
||||||
"autoload": {
|
"autoload": {
|
||||||
"psr-4": {
|
"psr-4": {
|
||||||
"Engelsystem\\": "src/"
|
"Engelsystem\\": "src/"
|
||||||
}
|
},
|
||||||
|
"files": [
|
||||||
|
"src/helpers.php"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,70 +1,106 @@
|
||||||
<?php
|
<?php
|
||||||
// Set to development to enable debugging messages
|
|
||||||
$environment = 'production';
|
// To change settings create a config.php
|
||||||
|
|
||||||
|
return [
|
||||||
|
// MySQL-Connection Settings
|
||||||
|
'database' => [
|
||||||
|
'host' => 'localhost',
|
||||||
|
'user' => 'root',
|
||||||
|
'pw' => '',
|
||||||
|
'db' => 'engelsystem',
|
||||||
|
],
|
||||||
|
|
||||||
|
// For accessing stats
|
||||||
|
'api_key' => '',
|
||||||
|
|
||||||
// Enable maintenance mode (show a static page)
|
// Enable maintenance mode (show a static page)
|
||||||
$maintenance_mode = false;
|
'maintenance' => false,
|
||||||
|
|
||||||
|
// Set to development to enable debugging messages
|
||||||
|
'environment' => 'production',
|
||||||
|
|
||||||
// URL to the angel faq and job description
|
// URL to the angel faq and job description
|
||||||
$faq_url = 'https://events.ccc.de/congress/2013/wiki/Static:Volunteers';
|
'faq_url' => 'https://events.ccc.de/congress/2013/wiki/Static:Volunteers',
|
||||||
|
|
||||||
// contact email address, linked on every page
|
// Contact email address, linked on every page
|
||||||
$contact_email = 'mailto:ticket@c3heaven.de';
|
'contact_email' => 'mailto:ticket@c3heaven.de',
|
||||||
|
|
||||||
// Default-Theme auf der Startseite, 1=style1.css usw.
|
// Default theme of the start page, 1=style1.css
|
||||||
$default_theme = 1;
|
'default_theme' => 1,
|
||||||
|
|
||||||
// Anzahl der News, die auf einer Seite ausgeben werden koennen...
|
// Number of News shown on one site
|
||||||
$display_news = 6;
|
'display_news' => 6,
|
||||||
|
|
||||||
// Anzahl Stunden bis zum Austragen eigener Schichten
|
// Anzahl Stunden bis zum Austragen eigener Schichten
|
||||||
$last_unsubscribe = 3;
|
'last_unsubscribe' => 3,
|
||||||
|
|
||||||
// Setzt den zu verwendenden Crypto-Algorismus (entsprechend der Dokumentation von crypt()).
|
// Setzt den zu verwendenden Crypto-Algorismus (entsprechend der Dokumentation von crypt()).
|
||||||
// Falls ein Benutzerpasswort in einem anderen Format gespeichert ist,
|
// Falls ein Benutzerpasswort in einem anderen Format gespeichert ist,
|
||||||
// wird es bei der ersten Benutzung des Klartext-Passworts in das neue Format
|
// wird es bei der ersten Benutzung des Klartext-Passworts in das neue Format
|
||||||
// konvertiert.
|
// konvertiert.
|
||||||
// $crypt_alg = '$1'; // MD5
|
// MD5 '$1'
|
||||||
// $crypt_alg = '$2y$13'; // Blowfish
|
// Blowfish '$2y$13'
|
||||||
// $crypt_alg = '$5$rounds=5000'; // SHA-256
|
// SHA-256 '$5$rounds=5000'
|
||||||
$crypt_alg = '$6$rounds=5000'; // SHA-512
|
// SHA-512 '$6$rounds=5000'
|
||||||
|
'crypt_alg' => '$6$rounds=5000', // SHA-512
|
||||||
|
|
||||||
$min_password_length = 8;
|
'min_password_length' => 8,
|
||||||
|
|
||||||
// Wenn Engel beim Registrieren oder in ihrem Profil eine T-Shirt Größe angeben sollen, auf true setzen:
|
// Wenn Engel beim Registrieren oder in ihrem Profil eine T-Shirt Größe angeben sollen, auf true setzen:
|
||||||
$enable_tshirt_size = true;
|
'enable_tshirt_size' => true,
|
||||||
|
|
||||||
// Number of shifts to freeload until angel is locked for shift signup.
|
// Number of shifts to freeload until angel is locked for shift signup.
|
||||||
$max_freeloadable_shifts = 2;
|
'max_freeloadable_shifts' => 2,
|
||||||
|
|
||||||
// local timezone
|
// local timezone
|
||||||
date_default_timezone_set('Europe/Berlin');
|
'timezone' => 'Europe/Berlin',
|
||||||
|
|
||||||
// multiply 'night shifts' and freeloaded shifts (start or end between 2 and 6 exclusive) by 2
|
// multiply 'night shifts' and freeloaded shifts (start or end between 2 and 6 exclusive) by 2
|
||||||
$shift_sum_formula = 'SUM(
|
'shift_sum_formula' => '
|
||||||
(1+(
|
SUM(
|
||||||
|
(1 +
|
||||||
|
(
|
||||||
(HOUR(FROM_UNIXTIME(`Shifts`.`end`)) > 2 AND HOUR(FROM_UNIXTIME(`Shifts`.`end`)) < 6)
|
(HOUR(FROM_UNIXTIME(`Shifts`.`end`)) > 2 AND HOUR(FROM_UNIXTIME(`Shifts`.`end`)) < 6)
|
||||||
OR (HOUR(FROM_UNIXTIME(`Shifts`.`start`)) > 2 AND HOUR(FROM_UNIXTIME(`Shifts`.`start`)) < 6)
|
OR (HOUR(FROM_UNIXTIME(`Shifts`.`start`)) > 2 AND HOUR(FROM_UNIXTIME(`Shifts`.`start`)) < 6)
|
||||||
OR (HOUR(FROM_UNIXTIME(`Shifts`.`start`)) <= 2 AND HOUR(FROM_UNIXTIME(`Shifts`.`end`)) >= 6)
|
OR (HOUR(FROM_UNIXTIME(`Shifts`.`start`)) <= 2 AND HOUR(FROM_UNIXTIME(`Shifts`.`end`)) >= 6)
|
||||||
))*(`Shifts`.`end` - `Shifts`.`start`)*(1 - 3 * `ShiftEntry`.`freeloaded`)
|
)
|
||||||
)';
|
)
|
||||||
|
* (`Shifts`.`end` - `Shifts`.`start`)
|
||||||
|
* (1 - 3 * `ShiftEntry`.`freeloaded`)
|
||||||
|
)
|
||||||
|
',
|
||||||
|
// weigh every shift the same
|
||||||
|
//'shift_sum_formula' => 'SUM(`end` - `start`)',
|
||||||
|
|
||||||
// voucher calculation
|
// voucher calculation
|
||||||
$voucher_settings = [
|
'voucher_settings' => [
|
||||||
'initial_vouchers' => 2,
|
'initial_vouchers' => 2,
|
||||||
'shifts_per_voucher' => 1
|
'shifts_per_voucher' => 1,
|
||||||
];
|
],
|
||||||
|
|
||||||
// weigh every shift the same
|
// Available locales in /locale/
|
||||||
// $shift_sum_formula = 'SUM(`end` - `start`)';
|
'locales' => [
|
||||||
|
'de_DE.UTF-8' => 'Deutsch',
|
||||||
// For accessing stats
|
'en_US.UTF-8' => 'English',
|
||||||
$api_key = '';
|
],
|
||||||
|
|
||||||
// MySQL-Connection Settings
|
'default_locale' => 'en_US.UTF-8',
|
||||||
$config = [
|
|
||||||
'host' => 'localhost',
|
// Available T-Shirt sizes, set value to null if not available
|
||||||
'user' => 'root',
|
'tshirt_sizes' => [
|
||||||
'pw' => '',
|
'' => _('Please select...'),
|
||||||
'db' => 'engelsystem'
|
'S' => 'S',
|
||||||
|
'M' => 'M',
|
||||||
|
'L' => 'L',
|
||||||
|
'XL' => 'XL',
|
||||||
|
'2XL' => '2XL',
|
||||||
|
'3XL' => '3XL',
|
||||||
|
'4XL' => '4XL',
|
||||||
|
'5XL' => '5XL',
|
||||||
|
'S-G' => 'S Girl',
|
||||||
|
'M-G' => 'M Girl',
|
||||||
|
'L-G' => 'L Girl',
|
||||||
|
'XL-G' => 'XL Girl',
|
||||||
|
],
|
||||||
];
|
];
|
||||||
|
|
|
@ -329,9 +329,9 @@ function shift_next_controller()
|
||||||
*/
|
*/
|
||||||
function shifts_json_export_all_controller()
|
function shifts_json_export_all_controller()
|
||||||
{
|
{
|
||||||
global $api_key;
|
$api_key = config('api_key');
|
||||||
|
|
||||||
if ($api_key == '') {
|
if (empty($api_key)) {
|
||||||
engelsystem_error('Config contains empty apikey.');
|
engelsystem_error('Config contains empty apikey.');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -282,7 +282,6 @@ function users_list_controller()
|
||||||
*/
|
*/
|
||||||
function user_password_recovery_set_new_controller()
|
function user_password_recovery_set_new_controller()
|
||||||
{
|
{
|
||||||
global $min_password_length;
|
|
||||||
$user_source = User_by_password_recovery_token($_REQUEST['token']);
|
$user_source = User_by_password_recovery_token($_REQUEST['token']);
|
||||||
if ($user_source == null) {
|
if ($user_source == null) {
|
||||||
error(_('Token is not correct.'));
|
error(_('Token is not correct.'));
|
||||||
|
@ -292,7 +291,10 @@ function user_password_recovery_set_new_controller()
|
||||||
if (isset($_REQUEST['submit'])) {
|
if (isset($_REQUEST['submit'])) {
|
||||||
$valid = true;
|
$valid = true;
|
||||||
|
|
||||||
if (isset($_REQUEST['password']) && strlen($_REQUEST['password']) >= $min_password_length) {
|
if (
|
||||||
|
isset($_REQUEST['password'])
|
||||||
|
&& strlen($_REQUEST['password']) >= config('min_password_length')
|
||||||
|
) {
|
||||||
if ($_REQUEST['password'] != $_REQUEST['password2']) {
|
if ($_REQUEST['password'] != $_REQUEST['password2']) {
|
||||||
$valid = false;
|
$valid = false;
|
||||||
error(_('Your passwords don\'t match.'));
|
error(_('Your passwords don\'t match.'));
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
use Engelsystem\Config\Config;
|
||||||
use Engelsystem\Database\Db;
|
use Engelsystem\Database\Db;
|
||||||
use Engelsystem\Exceptions\Handler as ExceptionHandler;
|
use Engelsystem\Exceptions\Handler as ExceptionHandler;
|
||||||
|
|
||||||
|
@ -12,6 +13,60 @@ if (!is_readable(__DIR__ . '/../vendor/autoload.php')) {
|
||||||
}
|
}
|
||||||
require __DIR__ . '/../vendor/autoload.php';
|
require __DIR__ . '/../vendor/autoload.php';
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Load configuration
|
||||||
|
*/
|
||||||
|
$config = new Config();
|
||||||
|
Config::setInstance($config);
|
||||||
|
$config->set(require __DIR__ . '/../config/config.default.php');
|
||||||
|
|
||||||
|
if (file_exists(__DIR__ . '/../config/config.php')) {
|
||||||
|
$config->set(array_replace_recursive(
|
||||||
|
$config->get(null),
|
||||||
|
require __DIR__ . '/../config/config.php'
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
date_default_timezone_set($config->get('timezone'));
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check for maintenance
|
||||||
|
*/
|
||||||
|
if ($config->get('maintenance')) {
|
||||||
|
echo file_get_contents(__DIR__ . '/../public/maintenance.html');
|
||||||
|
die();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Register error handler
|
||||||
|
*/
|
||||||
|
$errorHandler = new ExceptionHandler();
|
||||||
|
if (config('environment') == 'development') {
|
||||||
|
$errorHandler->setEnvironment(ExceptionHandler::ENV_DEVELOPMENT);
|
||||||
|
ini_set('display_errors', true);
|
||||||
|
error_reporting(E_ALL);
|
||||||
|
} else {
|
||||||
|
ini_set('display_errors', false);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Connect to database
|
||||||
|
*/
|
||||||
|
Db::connect(
|
||||||
|
'mysql:host=' . config('database')['host'] . ';dbname=' . config('database')['db'] . ';charset=utf8',
|
||||||
|
config('database')['user'],
|
||||||
|
config('database')['pw']
|
||||||
|
) || die('Error: Unable to connect to database');
|
||||||
|
Db::getPdo()->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Include legacy code
|
||||||
|
*/
|
||||||
require_once realpath(__DIR__ . '/../includes/sys_auth.php');
|
require_once realpath(__DIR__ . '/../includes/sys_auth.php');
|
||||||
require_once realpath(__DIR__ . '/../includes/sys_form.php');
|
require_once realpath(__DIR__ . '/../includes/sys_form.php');
|
||||||
require_once realpath(__DIR__ . '/../includes/sys_log.php');
|
require_once realpath(__DIR__ . '/../includes/sys_log.php');
|
||||||
|
@ -71,17 +126,6 @@ require_once realpath(__DIR__ . '/../includes/helper/email_helper.php');
|
||||||
require_once realpath(__DIR__ . '/../includes/mailer/shifts_mailer.php');
|
require_once realpath(__DIR__ . '/../includes/mailer/shifts_mailer.php');
|
||||||
require_once realpath(__DIR__ . '/../includes/mailer/users_mailer.php');
|
require_once realpath(__DIR__ . '/../includes/mailer/users_mailer.php');
|
||||||
|
|
||||||
$config = [];
|
|
||||||
require_once realpath(__DIR__ . '/../config/config.default.php');
|
|
||||||
if (file_exists(realpath(__DIR__ . '/../config/config.php'))) {
|
|
||||||
require_once realpath(__DIR__ . '/../config/config.php');
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($maintenance_mode) {
|
|
||||||
echo file_get_contents(__DIR__ . '/../public/maintenance.html');
|
|
||||||
die();
|
|
||||||
}
|
|
||||||
|
|
||||||
require_once realpath(__DIR__ . '/../includes/pages/admin_active.php');
|
require_once realpath(__DIR__ . '/../includes/pages/admin_active.php');
|
||||||
require_once realpath(__DIR__ . '/../includes/pages/admin_arrive.php');
|
require_once realpath(__DIR__ . '/../includes/pages/admin_arrive.php');
|
||||||
require_once realpath(__DIR__ . '/../includes/pages/admin_free.php');
|
require_once realpath(__DIR__ . '/../includes/pages/admin_free.php');
|
||||||
|
@ -100,20 +144,10 @@ require_once realpath(__DIR__ . '/../includes/pages/user_questions.php');
|
||||||
require_once realpath(__DIR__ . '/../includes/pages/user_settings.php');
|
require_once realpath(__DIR__ . '/../includes/pages/user_settings.php');
|
||||||
require_once realpath(__DIR__ . '/../includes/pages/user_shifts.php');
|
require_once realpath(__DIR__ . '/../includes/pages/user_shifts.php');
|
||||||
|
|
||||||
$errorHandler = new ExceptionHandler(
|
|
||||||
($environment == 'development'
|
|
||||||
? ExceptionHandler::ENV_DEVELOPMENT
|
|
||||||
: ExceptionHandler::ENV_PRODUCTION
|
|
||||||
)
|
|
||||||
);
|
|
||||||
|
|
||||||
Db::connect(
|
|
||||||
'mysql:host=' . $config['host'] . ';dbname=' . $config['db'] . ';charset=utf8',
|
|
||||||
$config['user'],
|
|
||||||
$config['pw']
|
|
||||||
) || die('Error: Unable to connect to database');
|
|
||||||
Db::getPdo()->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Init application
|
||||||
|
*/
|
||||||
session_start();
|
session_start();
|
||||||
|
|
||||||
gettext_init();
|
gettext_init();
|
||||||
|
|
|
@ -1,10 +1,4 @@
|
||||||
<?php
|
<?php
|
||||||
$locales = [
|
|
||||||
'de_DE.UTF-8' => 'Deutsch',
|
|
||||||
'en_US.UTF-8' => 'English'
|
|
||||||
];
|
|
||||||
|
|
||||||
$default_locale = 'en_US.UTF-8';
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return currently active locale
|
* Return currently active locale
|
||||||
|
@ -31,7 +25,8 @@ function locale_short()
|
||||||
*/
|
*/
|
||||||
function gettext_init()
|
function gettext_init()
|
||||||
{
|
{
|
||||||
global $locales, $default_locale;
|
$locales = config('locales');
|
||||||
|
$default_locale = config('default_locale');
|
||||||
|
|
||||||
if (isset($_REQUEST['set_locale']) && isset($locales[$_REQUEST['set_locale']])) {
|
if (isset($_REQUEST['set_locale']) && isset($locales[$_REQUEST['set_locale']])) {
|
||||||
$_SESSION['locale'] = $_REQUEST['set_locale'];
|
$_SESSION['locale'] = $_REQUEST['set_locale'];
|
||||||
|
@ -67,11 +62,10 @@ function gettext_locale($locale = null)
|
||||||
*/
|
*/
|
||||||
function make_langselect()
|
function make_langselect()
|
||||||
{
|
{
|
||||||
global $locales;
|
|
||||||
$url = $_SERVER['REQUEST_URI'] . (strpos($_SERVER['REQUEST_URI'], '?') > 0 ? '&' : '?') . 'set_locale=';
|
$url = $_SERVER['REQUEST_URI'] . (strpos($_SERVER['REQUEST_URI'], '?') > 0 ? '&' : '?') . 'set_locale=';
|
||||||
|
|
||||||
$items = [];
|
$items = [];
|
||||||
foreach ($locales as $locale => $name) {
|
foreach (config('locales') as $locale => $name) {
|
||||||
$items[] = toolbar_item_link(
|
$items[] = toolbar_item_link(
|
||||||
htmlspecialchars($url) . $locale,
|
htmlspecialchars($url) . $locale,
|
||||||
'',
|
'',
|
||||||
|
|
|
@ -215,9 +215,9 @@ function Users($order_by = 'Nick')
|
||||||
*/
|
*/
|
||||||
function User_is_freeloader($user)
|
function User_is_freeloader($user)
|
||||||
{
|
{
|
||||||
global $max_freeloadable_shifts, $user;
|
global $user;
|
||||||
|
|
||||||
return count(ShiftEntries_freeloaded_by_user($user)) >= $max_freeloadable_shifts;
|
return count(ShiftEntries_freeloaded_by_user($user)) >= config('max_freeloadable_shifts');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -542,8 +542,7 @@ function User_generate_password_recovery_token(&$user)
|
||||||
*/
|
*/
|
||||||
function User_get_eligable_voucher_count(&$user)
|
function User_get_eligable_voucher_count(&$user)
|
||||||
{
|
{
|
||||||
global $voucher_settings;
|
$voucher_settings = config('voucher_settings');
|
||||||
|
|
||||||
$shifts_done = count(ShiftEntries_finished_by_user($user));
|
$shifts_done = count(ShiftEntries_finished_by_user($user));
|
||||||
|
|
||||||
$earned_vouchers = $user['got_voucher'] - $voucher_settings['initial_vouchers'];
|
$earned_vouchers = $user['got_voucher'] - $voucher_settings['initial_vouchers'];
|
||||||
|
|
|
@ -15,7 +15,8 @@ function admin_active_title()
|
||||||
*/
|
*/
|
||||||
function admin_active()
|
function admin_active()
|
||||||
{
|
{
|
||||||
global $tshirt_sizes, $shift_sum_formula;
|
$tshirt_sizes = config('tshirt_sizes');
|
||||||
|
$shift_sum_formula = config('shift_sum_formula');
|
||||||
|
|
||||||
$msg = '';
|
$msg = '';
|
||||||
$search = '';
|
$search = '';
|
||||||
|
@ -208,7 +209,7 @@ function admin_active()
|
||||||
|
|
||||||
$shirt_statistics = [];
|
$shirt_statistics = [];
|
||||||
foreach (array_keys($tshirt_sizes) as $size) {
|
foreach (array_keys($tshirt_sizes) as $size) {
|
||||||
if ($size != '') {
|
if (!empty($size)) {
|
||||||
$sc = DB::select(
|
$sc = DB::select(
|
||||||
'SELECT count(*) FROM `User` WHERE `Size`=? AND `Gekommen`=1',
|
'SELECT count(*) FROM `User` WHERE `Size`=? AND `Gekommen`=1',
|
||||||
[$size]
|
[$size]
|
||||||
|
|
|
@ -15,7 +15,14 @@ function admin_user_title()
|
||||||
*/
|
*/
|
||||||
function admin_user()
|
function admin_user()
|
||||||
{
|
{
|
||||||
global $user, $tshirt_sizes, $privileges;
|
global $user, $privileges;
|
||||||
|
$tshirt_sizes = config('tshirt_sizes');
|
||||||
|
|
||||||
|
foreach ($tshirt_sizes as $key => $size) {
|
||||||
|
if (empty($size)) {
|
||||||
|
unset($tshirt_sizes[$key]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$html = '';
|
$html = '';
|
||||||
|
|
||||||
|
|
|
@ -33,8 +33,10 @@ function logout_title()
|
||||||
*/
|
*/
|
||||||
function guest_register()
|
function guest_register()
|
||||||
{
|
{
|
||||||
global $tshirt_sizes, $enable_tshirt_size, $default_theme, $user, $min_password_length;
|
global $user;
|
||||||
|
$tshirt_sizes = config('tshirt_sizes');
|
||||||
|
$enable_tshirt_size = config('enable_tshirt_size');
|
||||||
|
$min_password_length = config('min_password_length');
|
||||||
$event_config = EventConfig();
|
$event_config = EventConfig();
|
||||||
|
|
||||||
$msg = '';
|
$msg = '';
|
||||||
|
@ -65,6 +67,12 @@ function guest_register()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
foreach ($tshirt_sizes as $key => $size) {
|
||||||
|
if (empty($size)) {
|
||||||
|
unset($tshirt_sizes[$key]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (isset($_REQUEST['submit'])) {
|
if (isset($_REQUEST['submit'])) {
|
||||||
$valid = true;
|
$valid = true;
|
||||||
|
|
||||||
|
@ -201,7 +209,7 @@ function guest_register()
|
||||||
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, NOW(), ?, NULL, ?)
|
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, NOW(), ?, NULL, ?)
|
||||||
',
|
',
|
||||||
[
|
[
|
||||||
$default_theme,
|
config('default_theme'),
|
||||||
$nick,
|
$nick,
|
||||||
$preName,
|
$preName,
|
||||||
$lastName,
|
$lastName,
|
||||||
|
|
|
@ -4,10 +4,10 @@ use Engelsystem\Database\DB;
|
||||||
|
|
||||||
function guest_stats()
|
function guest_stats()
|
||||||
{
|
{
|
||||||
global $api_key;
|
$apiKey = config('api_key');
|
||||||
|
|
||||||
if (isset($_REQUEST['api_key'])) {
|
if (isset($_REQUEST['api_key'])) {
|
||||||
if ($_REQUEST['api_key'] == $api_key) {
|
if ($_REQUEST['api_key'] == $apiKey && !empty($apiKey)) {
|
||||||
$stats = [];
|
$stats = [];
|
||||||
|
|
||||||
list($user_count) = DB::select('SELECT count(*) AS `user_count` FROM `User`');
|
list($user_count) = DB::select('SELECT count(*) AS `user_count` FROM `User`');
|
||||||
|
|
|
@ -7,7 +7,7 @@ use Engelsystem\Database\DB;
|
||||||
*/
|
*/
|
||||||
function user_atom()
|
function user_atom()
|
||||||
{
|
{
|
||||||
global $user, $display_news;
|
global $user;
|
||||||
|
|
||||||
if (!isset($_REQUEST['key']) || !preg_match('/^[\da-f]{32}$/', $_REQUEST['key'])) {
|
if (!isset($_REQUEST['key']) || !preg_match('/^[\da-f]{32}$/', $_REQUEST['key'])) {
|
||||||
engelsystem_error('Missing key.');
|
engelsystem_error('Missing key.');
|
||||||
|
@ -27,7 +27,7 @@ function user_atom()
|
||||||
FROM `News`
|
FROM `News`
|
||||||
' . (empty($_REQUEST['meetings']) ? '' : 'WHERE `Treffen` = 1 ') . '
|
' . (empty($_REQUEST['meetings']) ? '' : 'WHERE `Treffen` = 1 ') . '
|
||||||
ORDER BY `ID`
|
ORDER BY `ID`
|
||||||
DESC LIMIT ' . (int)$display_news
|
DESC LIMIT ' . (int)config('display_news')
|
||||||
);
|
);
|
||||||
|
|
||||||
$output = make_atom_entries_from_news($news);
|
$output = make_atom_entries_from_news($news);
|
||||||
|
|
|
@ -17,7 +17,6 @@ function myshifts_title()
|
||||||
*/
|
*/
|
||||||
function user_myshifts()
|
function user_myshifts()
|
||||||
{
|
{
|
||||||
global $last_unsubscribe;
|
|
||||||
global $user, $privileges;
|
global $user, $privileges;
|
||||||
|
|
||||||
if (
|
if (
|
||||||
|
@ -144,7 +143,10 @@ function user_myshifts()
|
||||||
);
|
);
|
||||||
if (count($shift) > 0) {
|
if (count($shift) > 0) {
|
||||||
$shift = array_shift($shift);
|
$shift = array_shift($shift);
|
||||||
if (($shift['start'] > time() + $last_unsubscribe * 3600) || in_array('user_shifts_admin', $privileges)) {
|
if (
|
||||||
|
($shift['start'] > time() + config('last_unsubscribe') * 3600)
|
||||||
|
|| in_array('user_shifts_admin', $privileges)
|
||||||
|
) {
|
||||||
$result = ShiftEntry_delete($user_id);
|
$result = ShiftEntry_delete($user_id);
|
||||||
if ($result === false) {
|
if ($result === false) {
|
||||||
engelsystem_error('Unable to delete shift entry.');
|
engelsystem_error('Unable to delete shift entry.');
|
||||||
|
|
|
@ -31,8 +31,7 @@ function meetings_title()
|
||||||
*/
|
*/
|
||||||
function user_meetings()
|
function user_meetings()
|
||||||
{
|
{
|
||||||
global $display_news;
|
$display_news = config('display_news');
|
||||||
|
|
||||||
$html = '<div class="col-md-12"><h1>' . meetings_title() . '</h1>' . msg();
|
$html = '<div class="col-md-12"><h1>' . meetings_title() . '</h1>' . msg();
|
||||||
|
|
||||||
if (isset($_REQUEST['page']) && preg_match('/^\d{1,}$/', $_REQUEST['page'])) {
|
if (isset($_REQUEST['page']) && preg_match('/^\d{1,}$/', $_REQUEST['page'])) {
|
||||||
|
@ -178,7 +177,8 @@ function user_news_comments()
|
||||||
*/
|
*/
|
||||||
function user_news()
|
function user_news()
|
||||||
{
|
{
|
||||||
global $display_news, $privileges, $user;
|
global $privileges, $user;
|
||||||
|
$display_news = config('display_news');
|
||||||
|
|
||||||
$html = '<div class="col-md-12"><h1>' . news_title() . '</h1>' . msg();
|
$html = '<div class="col-md-12"><h1>' . news_title() . '</h1>' . msg();
|
||||||
|
|
||||||
|
|
|
@ -97,13 +97,12 @@ function user_settings_main($user_source, $enable_tshirt_size, $tshirt_sizes)
|
||||||
*/
|
*/
|
||||||
function user_settings_password($user_source)
|
function user_settings_password($user_source)
|
||||||
{
|
{
|
||||||
global $min_password_length;
|
|
||||||
if (
|
if (
|
||||||
!isset($_REQUEST['password'])
|
!isset($_REQUEST['password'])
|
||||||
|| !verify_password($_REQUEST['password'], $user_source['Passwort'], $user_source['UID'])
|
|| !verify_password($_REQUEST['password'], $user_source['Passwort'], $user_source['UID'])
|
||||||
) {
|
) {
|
||||||
error(_('-> not OK. Please try again.'));
|
error(_('-> not OK. Please try again.'));
|
||||||
} elseif (strlen($_REQUEST['new_password']) < $min_password_length) {
|
} elseif (strlen($_REQUEST['new_password']) < config('min_password_length')) {
|
||||||
error(_('Your password is to short (please use at least 6 characters).'));
|
error(_('Your password is to short (please use at least 6 characters).'));
|
||||||
} elseif ($_REQUEST['new_password'] != $_REQUEST['new_password2']) {
|
} elseif ($_REQUEST['new_password'] != $_REQUEST['new_password2']) {
|
||||||
error(_('Your passwords don\'t match.'));
|
error(_('Your passwords don\'t match.'));
|
||||||
|
@ -195,8 +194,11 @@ function user_settings_locale($user_source, $locales)
|
||||||
*/
|
*/
|
||||||
function user_settings()
|
function user_settings()
|
||||||
{
|
{
|
||||||
global $enable_tshirt_size, $tshirt_sizes, $themes, $locales;
|
global $themes, $user;
|
||||||
global $user;
|
|
||||||
|
$enable_tshirt_size = config('enable_tshirt_size');
|
||||||
|
$tshirt_sizes = config('tshirt_sizes');
|
||||||
|
$locales = config('locales');
|
||||||
|
|
||||||
$buildup_start_date = null;
|
$buildup_start_date = null;
|
||||||
$teardown_end_date = null;
|
$teardown_end_date = null;
|
||||||
|
@ -210,6 +212,12 @@ function user_settings()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
foreach ($tshirt_sizes as $key => $size) {
|
||||||
|
if (empty($size)) {
|
||||||
|
unset($tshirt_sizes[$key]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$user_source = $user;
|
$user_source = $user;
|
||||||
|
|
||||||
if (isset($_REQUEST['submit'])) {
|
if (isset($_REQUEST['submit'])) {
|
||||||
|
|
|
@ -59,7 +59,6 @@ function generate_salt($length = 16)
|
||||||
*/
|
*/
|
||||||
function set_password($uid, $password)
|
function set_password($uid, $password)
|
||||||
{
|
{
|
||||||
global $crypt_alg;
|
|
||||||
$result = DB::update('
|
$result = DB::update('
|
||||||
UPDATE `User`
|
UPDATE `User`
|
||||||
SET `Passwort` = ?,
|
SET `Passwort` = ?,
|
||||||
|
@ -68,7 +67,7 @@ function set_password($uid, $password)
|
||||||
LIMIT 1
|
LIMIT 1
|
||||||
',
|
',
|
||||||
[
|
[
|
||||||
crypt($password, $crypt_alg . '$' . generate_salt(16) . '$'),
|
crypt($password, config('crypt_alg') . '$' . generate_salt(16) . '$'),
|
||||||
$uid
|
$uid
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
|
@ -89,7 +88,7 @@ function set_password($uid, $password)
|
||||||
*/
|
*/
|
||||||
function verify_password($password, $salt, $uid = null)
|
function verify_password($password, $salt, $uid = null)
|
||||||
{
|
{
|
||||||
global $crypt_alg;
|
$crypt_alg = config('crypt_alg');
|
||||||
$correct = false;
|
$correct = false;
|
||||||
if (substr($salt, 0, 1) == '$') { // new-style crypt()
|
if (substr($salt, 0, 1) == '$') { // new-style crypt()
|
||||||
$correct = crypt($password, $salt) == $salt;
|
$correct = crypt($password, $salt) == $salt;
|
||||||
|
|
|
@ -443,14 +443,12 @@ function AngelTypes_about_view_angeltype($angeltype)
|
||||||
*/
|
*/
|
||||||
function AngelTypes_about_view($angeltypes, $user_logged_in)
|
function AngelTypes_about_view($angeltypes, $user_logged_in)
|
||||||
{
|
{
|
||||||
global $faq_url;
|
|
||||||
|
|
||||||
$content = [
|
$content = [
|
||||||
buttons([
|
buttons([
|
||||||
!$user_logged_in ? button(page_link_to('register'), register_title()) : '',
|
!$user_logged_in ? button(page_link_to('register'), register_title()) : '',
|
||||||
!$user_logged_in ? button(page_link_to('login'), login_title()) : '',
|
!$user_logged_in ? button(page_link_to('login'), login_title()) : '',
|
||||||
$user_logged_in ? button(page_link_to('angeltypes'), angeltypes_title(), 'back') : '',
|
$user_logged_in ? button(page_link_to('angeltypes'), angeltypes_title(), 'back') : '',
|
||||||
button($faq_url, _('FAQ'), 'btn-primary')
|
button(config('faq_url'), _('FAQ'), 'btn-primary')
|
||||||
]),
|
]),
|
||||||
'<p>' . _('Here is the list of teams and their tasks. If you have questions, read the FAQ.') . '</p>',
|
'<p>' . _('Here is the list of teams and their tasks. If you have questions, read the FAQ.') . '</p>',
|
||||||
'<hr />'
|
'<hr />'
|
||||||
|
|
|
@ -1,24 +1,5 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
/**
|
|
||||||
* Available T-Shirt sizes
|
|
||||||
*/
|
|
||||||
$tshirt_sizes = [
|
|
||||||
'' => _('Please select...'),
|
|
||||||
'S' => 'S',
|
|
||||||
'M' => 'M',
|
|
||||||
'L' => 'L',
|
|
||||||
'XL' => 'XL',
|
|
||||||
'2XL' => '2XL',
|
|
||||||
'3XL' => '3XL',
|
|
||||||
'4XL' => '4XL',
|
|
||||||
'5XL' => '5XL',
|
|
||||||
'S-G' => 'S Girl',
|
|
||||||
'M-G' => 'M Girl',
|
|
||||||
'L-G' => 'L Girl',
|
|
||||||
'XL-G' => 'XL Girl'
|
|
||||||
];
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Renders user settings page
|
* Renders user settings page
|
||||||
*
|
*
|
||||||
|
@ -335,7 +316,7 @@ function User_view_shiftentries($needed_angel_type)
|
||||||
*/
|
*/
|
||||||
function User_view_myshift($shift, $user_source, $its_me)
|
function User_view_myshift($shift, $user_source, $its_me)
|
||||||
{
|
{
|
||||||
global $last_unsubscribe, $privileges;
|
global $privileges;
|
||||||
|
|
||||||
$shift_info = '<a href="' . shift_link($shift) . '">' . $shift['name'] . '</a>';
|
$shift_info = '<a href="' . shift_link($shift) . '">' . $shift['name'] . '</a>';
|
||||||
if ($shift['title']) {
|
if ($shift['title']) {
|
||||||
|
@ -371,7 +352,10 @@ function User_view_myshift($shift, $user_source, $its_me)
|
||||||
'btn-xs'
|
'btn-xs'
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
if (($shift['start'] > time() + $last_unsubscribe * 3600) || in_array('user_shifts_admin', $privileges)) {
|
if (
|
||||||
|
($shift['start'] > time() + config('last_unsubscribe') * 3600)
|
||||||
|
|| in_array('user_shifts_admin', $privileges)
|
||||||
|
) {
|
||||||
$myshift['actions'][] = button(
|
$myshift['actions'][] = button(
|
||||||
page_link_to('user_myshifts') . ((!$its_me) ? '&id=' . $user_source['UID'] : '') . '&cancel=' . $shift['id'],
|
page_link_to('user_myshifts') . ((!$its_me) ? '&id=' . $user_source['UID'] : '') . '&cancel=' . $shift['id'],
|
||||||
glyph('trash') . _('sign off'),
|
glyph('trash') . _('sign off'),
|
||||||
|
@ -646,12 +630,12 @@ function render_user_departure_date_hint()
|
||||||
*/
|
*/
|
||||||
function render_user_freeloader_hint()
|
function render_user_freeloader_hint()
|
||||||
{
|
{
|
||||||
global $user, $max_freeloadable_shifts;
|
global $user;
|
||||||
|
|
||||||
if (User_is_freeloader($user)) {
|
if (User_is_freeloader($user)) {
|
||||||
return sprintf(
|
return sprintf(
|
||||||
_('You freeloaded at least %s shifts. Shift signup is locked. Please go to heavens desk to be unlocked again.'),
|
_('You freeloaded at least %s shifts. Shift signup is locked. Please go to heavens desk to be unlocked again.'),
|
||||||
$max_freeloadable_shifts
|
config('max_freeloadable_shifts')
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -679,9 +663,9 @@ function render_user_arrived_hint()
|
||||||
*/
|
*/
|
||||||
function render_user_tshirt_hint()
|
function render_user_tshirt_hint()
|
||||||
{
|
{
|
||||||
global $enable_tshirt_size, $user;
|
global $user;
|
||||||
|
|
||||||
if ($enable_tshirt_size && $user['Size'] == '') {
|
if (config('enable_tshirt_size') && $user['Size'] == '') {
|
||||||
return _('You need to specify a tshirt size in your settings!');
|
return _('You need to specify a tshirt size in your settings!');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -169,7 +169,7 @@ if (
|
||||||
$event_config = EventConfig();
|
$event_config = EventConfig();
|
||||||
|
|
||||||
echo template_render(__DIR__ . '/../templates/layout.html', [
|
echo template_render(__DIR__ . '/../templates/layout.html', [
|
||||||
'theme' => isset($user) ? $user['color'] : $default_theme,
|
'theme' => isset($user) ? $user['color'] : config('default_theme'),
|
||||||
'title' => $title,
|
'title' => $title,
|
||||||
'atom_link' => ($page == 'news' || $page == 'user_meetings')
|
'atom_link' => ($page == 'news' || $page == 'user_meetings')
|
||||||
? ' <link href="' . page_link_to('atom') . (($page == 'user_meetings') ? '&meetings=1' : '')
|
? ' <link href="' . page_link_to('atom') . (($page == 'user_meetings') ? '&meetings=1' : '')
|
||||||
|
@ -179,8 +179,8 @@ echo template_render(__DIR__ . '/../templates/layout.html', [
|
||||||
'menu' => make_menu(),
|
'menu' => make_menu(),
|
||||||
'content' => msg() . $content,
|
'content' => msg() . $content,
|
||||||
'header_toolbar' => header_toolbar(),
|
'header_toolbar' => header_toolbar(),
|
||||||
'faq_url' => $faq_url,
|
'faq_url' => config('faq_url'),
|
||||||
'contact_email' => $contact_email,
|
'contact_email' => config('contact_email'),
|
||||||
'locale' => locale(),
|
'locale' => locale(),
|
||||||
'event_info' => EventConfig_info($event_config) . ' <br />'
|
'event_info' => EventConfig_info($event_config) . ' <br />'
|
||||||
]);
|
]);
|
||||||
|
|
|
@ -0,0 +1,128 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Engelsystem\Config;
|
||||||
|
|
||||||
|
use ErrorException;
|
||||||
|
|
||||||
|
class Config
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @var self
|
||||||
|
*/
|
||||||
|
protected static $instance;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The config values
|
||||||
|
*
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
protected $data = [];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string|null $key
|
||||||
|
* @param mixed $default
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function get($key, $default = null)
|
||||||
|
{
|
||||||
|
if (is_null($key)) {
|
||||||
|
return $this->data;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($this->has($key)) {
|
||||||
|
return $this->data[$key];
|
||||||
|
}
|
||||||
|
|
||||||
|
return $default;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string|array $key
|
||||||
|
* @param mixed $value
|
||||||
|
*/
|
||||||
|
public function set($key, $value = null)
|
||||||
|
{
|
||||||
|
if (is_array($key)) {
|
||||||
|
foreach ($key as $configKey => $configValue) {
|
||||||
|
$this->set($configKey, $configValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->data[$key] = $value;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $key
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function has($key)
|
||||||
|
{
|
||||||
|
return isset($this->data[$key]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $key
|
||||||
|
*/
|
||||||
|
public function remove($key)
|
||||||
|
{
|
||||||
|
unset($this->data[$key]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $key
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function __get($key)
|
||||||
|
{
|
||||||
|
return $this->get($key);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $key
|
||||||
|
* @param mixed $value
|
||||||
|
*/
|
||||||
|
public function __set($key, $value)
|
||||||
|
{
|
||||||
|
$this->set($key, $value);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $key
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function __isset($key)
|
||||||
|
{
|
||||||
|
return $this->has($key);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $key
|
||||||
|
*/
|
||||||
|
public function __unset($key)
|
||||||
|
{
|
||||||
|
$this->remove($key);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return Config
|
||||||
|
* @throws ErrorException
|
||||||
|
*/
|
||||||
|
public static function getInstance()
|
||||||
|
{
|
||||||
|
if (!self::$instance instanceof self) {
|
||||||
|
throw new ErrorException('Config not initialized');
|
||||||
|
}
|
||||||
|
|
||||||
|
return self::$instance;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param self $instance
|
||||||
|
*/
|
||||||
|
public static function setInstance($instance)
|
||||||
|
{
|
||||||
|
self::$instance = $instance;
|
||||||
|
}
|
||||||
|
}
|
|
@ -11,7 +11,6 @@ class Handler
|
||||||
|
|
||||||
const ENV_PRODUCTION = 'prod';
|
const ENV_PRODUCTION = 'prod';
|
||||||
const ENV_DEVELOPMENT = 'dev';
|
const ENV_DEVELOPMENT = 'dev';
|
||||||
const ENV_DEBUGGING = 'debug';
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Handler constructor.
|
* Handler constructor.
|
||||||
|
@ -48,7 +47,8 @@ class Handler
|
||||||
$e->getCode(),
|
$e->getCode(),
|
||||||
get_class($e) . ': ' . $e->getMessage(),
|
get_class($e) . ': ' . $e->getMessage(),
|
||||||
$e->getFile(),
|
$e->getFile(),
|
||||||
$e->getLine()
|
$e->getLine(),
|
||||||
|
['exception' => $e]
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -71,13 +71,13 @@ class Handler
|
||||||
json_encode($context)
|
json_encode($context)
|
||||||
));
|
));
|
||||||
|
|
||||||
if ($this->environment == self::ENV_DEVELOPMENT || $this->environment == self::ENV_DEBUGGING) {
|
if ($this->environment == self::ENV_DEVELOPMENT) {
|
||||||
echo '<pre style="background-color:#333;color:#ccc;z-index:1000;position:fixed;bottom:1em;padding:1em;width:97%;overflow-y:auto;">';
|
echo '<pre style="background-color:#333;color:#ccc;z-index:1000;position:fixed;bottom:1em;padding:1em;width:97%;overflow-y:auto;">';
|
||||||
echo sprintf('%s: (%s)' . PHP_EOL, ucfirst($type), $number);
|
echo sprintf('%s: (%s)' . PHP_EOL, ucfirst($type), $number);
|
||||||
var_export([
|
var_export([
|
||||||
'string' => $string,
|
'string' => $string,
|
||||||
'file' => $file . ':' . $line,
|
'file' => $file . ':' . $line,
|
||||||
'context' => ($this->environment == self::ENV_DEBUGGING ? $context : null),
|
'context' => ($this->environment == self::ENV_DEVELOPMENT ? $context : null),
|
||||||
]);
|
]);
|
||||||
echo '</pre>';
|
echo '</pre>';
|
||||||
die();
|
die();
|
||||||
|
|
|
@ -0,0 +1,24 @@
|
||||||
|
<?php
|
||||||
|
// Some useful functions
|
||||||
|
|
||||||
|
use Engelsystem\Config\Config;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get or set config values
|
||||||
|
*
|
||||||
|
* @param string|array $key
|
||||||
|
* @param mixed $default
|
||||||
|
* @return mixed|Config
|
||||||
|
*/
|
||||||
|
function config($key = null, $default = null)
|
||||||
|
{
|
||||||
|
if (empty($key)) {
|
||||||
|
return Config::getInstance();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (is_array($key)) {
|
||||||
|
Config::getInstance()->set($key);
|
||||||
|
}
|
||||||
|
|
||||||
|
return Config::getInstance()->get($key, $default);
|
||||||
|
}
|
Loading…
Reference in New Issue