Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
20.00% covered (danger)
20.00%
6 / 30
20.00% covered (danger)
20.00%
1 / 5
CRAP
0.00% covered (danger)
0.00%
0 / 1
TwigExtensionsAndFilter
20.00% covered (danger)
20.00%
6 / 30
20.00% covered (danger)
20.00%
1 / 5
114.35
0.00% covered (danger)
0.00%
0 / 1
 getFilters
100.00% covered (success)
100.00%
6 / 6
100.00% covered (success)
100.00%
1 / 1
1
 decodeEntities
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
6
 msort
0.00% covered (danger)
0.00%
0 / 17
0.00% covered (danger)
0.00%
0 / 1
72
 getObjectName
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 sanitizeHtml
0.00% covered (danger)
0.00%
0 / 5
0.00% covered (danger)
0.00%
0 / 1
6
1<?php
2
3/**
4 * @package   BO Slim
5 * @copyright BerlinOnline Stadtportal GmbH & Co. KG
6 **/
7
8namespace BO\Slim;
9
10/**
11  * Extension for Twig and Slim
12  *
13  */
14class TwigExtensionsAndFilter extends TwigExtension
15{
16    #[\Override]
17    public function getFilters()
18    {
19        return array(
20            new \Twig\TwigFilter('msort', array($this, 'msort')),
21            new \Twig\TwigFilter('getObjectName', array($this, 'getObjectName')),
22            new \Twig\TwigFilter('decodeEntities', array($this, 'decodeEntities')),
23            new \Twig\TwigFilter('sanitize_html', array($this, 'sanitizeHtml'), ['is_safe' => ['html']])
24        );
25    }
26
27    public function decodeEntities($string)
28    {
29        return $string === null ? '' : trim(nl2br(html_entity_decode($string)));
30    }
31
32    public function msort($array, $key, $sort_flags = SORT_REGULAR)
33    {
34        if (is_array($array) && count($array) > 0) {
35            if (!empty($key)) {
36                $mapping = array();
37                foreach ($array as $k => $v) {
38                    $sort_key = '';
39                    if (!is_array($key)) {
40                        $sort_key = $v[$key];
41                    } else {
42                        // @TODO This should be fixed, now it will be sorted as string
43                        foreach ($key as $key_key) {
44                            $sort_key .= $v[$key_key];
45                        }
46                        $sort_flags = SORT_STRING;
47                    }
48                    $mapping[$k] = $sort_key;
49                }
50                asort($mapping, $sort_flags);
51                $sorted = array();
52                foreach ($mapping as $k => $v) {
53                    $sorted[] = $array[$k];
54                }
55                return $sorted;
56            }
57        }
58        return $array;
59    }
60
61    public function getObjectName($object)
62    {
63        return (new \ReflectionClass($object))->getShortName();
64    }
65
66    public function sanitizeHtml($html)
67    {
68        static $purifier = null;
69        if ($purifier === null) {
70            $config = \HTMLPurifier_Config::createDefault();
71            $purifier = new \HTMLPurifier($config);
72        }
73        return $purifier->purify($html);
74    }
75}