Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
15 / 15
100.00% covered (success)
100.00%
5 / 5
CRAP
100.00% covered (success)
100.00%
1 / 1
TemplateSwitcher
100.00% covered (success)
100.00%
15 / 15
100.00% covered (success)
100.00%
5 / 5
10
100.00% covered (success)
100.00%
1 / 1
 setAvailableTemplates
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 setTemplateFallback
100.00% covered (success)
100.00%
3 / 3
100.00% covered (success)
100.00%
1 / 1
2
 getTemplate
100.00% covered (success)
100.00%
6 / 6
100.00% covered (success)
100.00%
1 / 1
4
 getAvailableTemplates
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 isTemplateAvailable
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
2
1<?php declare(strict_types=1);
2/**
3 * PrivateBin
4 *
5 * a zero-knowledge paste bin
6 *
7 * @link      https://github.com/PrivateBin/PrivateBin
8 * @copyright 2012 Sébastien SAUVAGE (sebsauvage.net)
9 * @license   https://www.opensource.org/licenses/zlib-license.php The zlib/libpng License
10 */
11
12namespace PrivateBin;
13
14/**
15 * TemplateSwitcher
16 *
17 * Provides tool to change application template
18 */
19class TemplateSwitcher
20{
21    /**
22     * template fallback
23     *
24     * @access protected
25     * @static
26     * @var    string
27     */
28    protected static $_templateFallback = 'bootstrap5';
29
30    /**
31     * available templates
32     *
33     * @access protected
34     * @static
35     * @var    array
36     */
37    protected static $_availableTemplates = [];
38
39    /**
40     * set available templates
41     *
42     * @access public
43     * @static
44     * @param  array $templates
45     */
46    public static function setAvailableTemplates(array $templates)
47    {
48        self::$_availableTemplates = $templates;
49    }
50
51    /**
52     * set the default template
53     *
54     * @access public
55     * @static
56     * @param  string $template
57     */
58    public static function setTemplateFallback(string $template)
59    {
60        if (self::isTemplateAvailable($template)) {
61            self::$_templateFallback = $template;
62        } else {
63            error_log('failed to set "' . $template . '" as a fallback, it needs to be added to the list of `availabletemplates` in the configuration file');
64        }
65    }
66
67    /**
68     * get user selected template or fallback
69     *
70     * @access public
71     * @static
72     * @return string
73     */
74    public static function getTemplate(): string
75    {
76        if (
77            array_key_exists('template', $_COOKIE) &&
78            is_string($_COOKIE['template'])
79        ) {
80            $template = basename($_COOKIE['template']);
81            if (self::isTemplateAvailable($template)) {
82                return $template;
83            }
84        }
85        return self::$_templateFallback;
86    }
87
88    /**
89     * get list of available templates
90     *
91     * @access public
92     * @static
93     * @return array
94     */
95    public static function getAvailableTemplates(): array
96    {
97        return self::$_availableTemplates;
98    }
99
100    /**
101     * check if the provided template is available
102     *
103     * @access public
104     * @static
105     * @return bool
106     */
107    public static function isTemplateAvailable(string $template): bool
108    {
109        if (in_array($template, self::getAvailableTemplates(), true)) {
110            return true;
111        }
112        error_log('template "' . $template . '" is not in the list of `availabletemplates` in the configuration file');
113        return false;
114    }
115}