Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 11
0.00% covered (danger)
0.00%
0 / 4
CRAP
0.00% covered (danger)
0.00%
0 / 1
Application
0.00% covered (danger)
0.00%
0 / 11
0.00% covered (danger)
0.00%
0 / 4
90
0.00% covered (danger)
0.00%
0 / 1
 initializeCache
0.00% covered (danger)
0.00%
0 / 4
0.00% covered (danger)
0.00%
0 / 1
12
 validateCacheDirectory
0.00% covered (danger)
0.00%
0 / 4
0.00% covered (danger)
0.00%
0 / 1
20
 setupCache
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
2
 initialize
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
1<?php
2
3/**
4 * @package Zmsdb
5 * @copyright BerlinOnline Stadtportal GmbH & Co. KG
6 **/
7
8namespace BO\Zmsdb;
9
10use Psr\SimpleCache\CacheInterface;
11use Symfony\Component\Cache\Adapter\FilesystemAdapter;
12use Symfony\Component\Cache\Psr16Cache;
13
14define(
15    'ZMSDB_SESSION_DURATION',
16    getenv('ZMSDB_SESSION_DURATION') ? getenv('ZMSDB_SESSION_DURATION') : 28800
17);
18
19class Application extends \BO\Slim\Application
20{
21    /**
22     * Name of the application
23     */
24    const IDENTIFIER = 'zms';
25
26    const MODULE_NAME = 'zmsdb';
27
28    const DEBUG = false;
29
30    const SESSION_DURATION = ZMSDB_SESSION_DURATION;
31
32    public static ?CacheInterface $cache = null;
33    // Cache config
34    public static string $CACHE_DIR;
35    public static int $SOURCE_CACHE_TTL;
36
37    /**
38     * Default parameters for templates
39     */
40    public static $templatedefaults = array();
41
42    /**
43     * Default parameters for middleware HttpBasicAuth
44     */
45    public static $httpBasicAuth = array();
46
47    /**
48     * image preferences
49     */
50    public static $isImageAllowed = false;
51
52    /**
53     * language preferences
54     */
55    const MULTILANGUAGE = true;
56    public static $locale = 'de';
57    public static $supportedLanguages = array(
58        // Default language
59        'de' => array(
60            'name'    => 'Deutsch',
61            'locale'  => 'de_DE',
62            'default' => true,
63        ),
64        // Other languages
65        'en' => array(
66            'name'    => 'English',
67            'locale'  => 'en_GB',
68        )
69    );
70
71    private static function initializeCache(): void
72    {
73        self::$CACHE_DIR = getenv('CACHE_DIR') ?: __DIR__ . '/cache';
74        self::$SOURCE_CACHE_TTL = (int) (getenv('SOURCE_CACHE_TTL') ?: 3600);
75        self::validateCacheDirectory();
76        self::setupCache();
77    }
78
79    private static function validateCacheDirectory(): void
80    {
81        if (!is_dir(self::$CACHE_DIR) && !mkdir(self::$CACHE_DIR, 0750, true)) {
82            throw new \RuntimeException(sprintf('Cache directory "%s" could not be created', self::$CACHE_DIR));
83        }
84
85        if (!is_writable(self::$CACHE_DIR)) {
86            throw new \RuntimeException(sprintf('Cache directory "%s" is not writable', self::$CACHE_DIR));
87        }
88    }
89
90    private static function setupCache(): void
91    {
92        $psr6 = new FilesystemAdapter(namespace: '', defaultLifetime: self::$SOURCE_CACHE_TTL, directory: self::$CACHE_DIR);
93        self::$cache = new Psr16Cache($psr6);
94    }
95
96    public static function initialize(): void
97    {
98        self::initializeCache();
99    }
100}
101
102Application::initialize();