Failed Conditions
Push — psr2 ( ccc4c7...2140e7 )
by Andreas
26s queued 20s
created

StyleUtils::cssStyleini()   F

Complexity

Conditions 18
Paths 100

Size

Total Lines 97

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 18
nc 100
nop 2
dl 0
loc 97
rs 3.9587
c 0
b 0
f 0

How to fix   Long Method    Complexity   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
<?php
2
3
namespace dokuwiki;
4
5
class StyleUtils
6
{
7
    /**
8
     * Load style ini contents
9
     *
10
     * Loads and merges style.ini files from template and config and prepares
11
     * the stylesheet modes
12
     *
13
     * @author Andreas Gohr <[email protected]>
14
     *
15
     * @param string $tpl the used template
16
     * @param bool   $preview load preview replacements
17
     * @return array with keys 'stylesheets' and 'replacements'
18
     */
19
    public function cssStyleini($tpl, $preview=false) {
20
        global $conf;
21
22
        $stylesheets = array(); // mode, file => base
23
        // guaranteed placeholder => value
24
        $replacements = array(
25
            '__text__' => "#000",
26
            '__background__' => "#fff",
27
            '__text_alt__' => "#999",
28
            '__background_alt__' => "#eee",
29
            '__text_neu__' => "#666",
30
            '__background_neu__' => "#ddd",
31
            '__border__' => "#ccc",
32
            '__highlight__' => "#ff9",
33
            '__link__' => "#00f",
34
        );
35
36
        // load template's style.ini
37
        $incbase = tpl_incdir($tpl);
38
        $webbase = tpl_basedir($tpl);
39
        $ini = $incbase.'style.ini';
40
        if(file_exists($ini)){
41
            $data = parse_ini_file($ini, true);
42
43
            // stylesheets
44
            if(is_array($data['stylesheets'])) foreach($data['stylesheets'] as $file => $mode){
45
                if (!file_exists($incbase . $file)) {
46
                    list($extension, $basename) = array_map('strrev', explode('.', strrev($file), 2));
47
                    $newExtension = $extension === 'css' ? 'less' : 'css';
48
                    if (file_exists($incbase . $basename . '.' . $newExtension)) {
49
                        $stylesheets[$mode][$incbase . $basename . '.' . $newExtension] = $webbase;
50
                        if ($conf['allowdebug']) {
51
                            msg(
52
                                "Stylesheet $file not found, using $basename.$newExtension instead.  
53
                                Please contact developer of \"{$conf['template']}\" template.",
54
                                2
55
                            );
56
                        }
57
                        continue;
58
                    }
59
                }
60
                $stylesheets[$mode][$incbase . $file] = $webbase;
61
            }
62
63
            // replacements
64
            if(is_array($data['replacements'])){
65
                $replacements = array_merge(
66
                    $replacements,
67
                    $this->cssFixreplacementurls($data['replacements'], $webbase)
68
                );
69
            }
70
        }
71
72
        // load configs's style.ini
73
        $webbase = DOKU_BASE;
74
        $ini = DOKU_CONF."tpl/$tpl/style.ini";
75
        $incbase = dirname($ini).'/';
76
        if(file_exists($ini)){
77
            $data = parse_ini_file($ini, true);
78
79
            // stylesheets
80
            if(isset($data['stylesheets']) && is_array($data['stylesheets'])) {
81
                foreach($data['stylesheets'] as $file => $mode) {
82
                    $stylesheets[$mode][$incbase . $file] = $webbase;
83
                }
84
            }
85
86
            // replacements
87
            if(isset($data['replacements']) && is_array($data['replacements'])){
88
                $replacements = array_merge(
89
                    $replacements,
90
                    $this->cssFixreplacementurls($data['replacements'], $webbase)
91
                );
92
            }
93
        }
94
95
        // allow replacement overwrites in preview mode
96
        if($preview) {
97
            $webbase = DOKU_BASE;
98
            $ini     = $conf['cachedir'].'/preview.ini';
99
            if(file_exists($ini)) {
100
                $data = parse_ini_file($ini, true);
101
                // replacements
102
                if(is_array($data['replacements'])) {
103
                    $replacements = array_merge(
104
                        $replacements,
105
                        $this->cssFixreplacementurls($data['replacements'], $webbase)
106
                    );
107
                }
108
            }
109
        }
110
111
        return array(
112
            'stylesheets' => $stylesheets,
113
            'replacements' => $replacements
114
        );
115
    }
116
117
118
    /**
119
     * Amend paths used in replacement relative urls, refer FS#2879
120
     *
121
     * @author Chris Smith <[email protected]>
122
     *
123
     * @param array $replacements with key-value pairs
124
     * @param string $location
125
     * @return array
126
     */
127
    protected function cssFixreplacementurls($replacements, $location) {
128
        foreach($replacements as $key => $value) {
129
            $replacements[$key] = preg_replace(
130
                '#(url\([ \'"]*)(?!/|data:|http://|https://| |\'|")#',
131
                '\\1' . $location,
132
                $value
133
            );
134
        }
135
        return $replacements;
136
    }
137
}
138