Passed
Pull Request — master (#584)
by Richard
17:37
created

AbstractHelper   A

Complexity

Total Complexity 16

Size/Duplication

Total Lines 121
Duplicated Lines 0 %

Test Coverage

Coverage 60%

Importance

Changes 0
Metric Value
eloc 34
dl 0
loc 121
ccs 21
cts 35
cp 0.6
rs 10
c 0
b 0
f 0
wmc 16

5 Methods

Rating   Name   Duplication   Size   Complexity  
A setDebug() 0 3 1
A dirname() 0 3 1
A addLog() 0 8 4
A __construct() 0 27 6
A serializeForHelperLog() 0 9 4
1
<?php
2
/*
3
 You may not change or alter any portion of this comment or credits
4
 of supporting developers from this source code or any supporting source code
5
 which is considered copyrighted (c) material of the original comment or credit authors.
6
7
 This program is distributed in the hope that it will be useful,
8
 but WITHOUT ANY WARRANTY; without even the implied warranty of
9
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
10
 */
11
12
namespace Xmf\Module\Helper;
13
14
/**
15
 * Xmf\Module\Helper\AbstractHelper defines the basis for various
16
 * helpers that simplify routine module tasks.
17
 *
18
 * @category  Xmf\Module\Helper\AbstractHelper
19
 * @package   Xmf
20
 * @author    trabis <[email protected]>
21
 * @author    Richard Griffith <[email protected]>
22
 * @copyright 2016-2018 XOOPS Project (https://xoops.org)
23
 * @license   GNU GPL 2 or later (http://www.gnu.org/licenses/gpl-2.0.html)
24
 * @link      https://xoops.org
25
 */
26
abstract class AbstractHelper
27
{
28
    /**
29
     * @var string module directory name
30
     */
31
    protected $dirname;
32
33
    /**
34
     * @var XoopsModule
0 ignored issues
show
Bug introduced by
The type Xmf\Module\Helper\XoopsModule was not found. Did you mean XoopsModule? If so, make sure to prefix the type with \.
Loading history...
35
     */
36
    protected $module;
37
38
    /**
39
     * @var bool true if debug is enabled
40
     */
41
    protected $debug;
42
43
    /**
44
     * Instantiate a XoopsModule object for the helper to use.
45
     * The module is determined as follows:
46
     * - if null is passed, use the current module
47
     * - if a string is passed, use as dirname to load
48
     *
49
     * @param string|null $dirname dirname
50
     */
51 3
    public function __construct($dirname = null)
52
    {
53 3
        $this->module = null;
54
55 3
        if (class_exists('Xoops', false)) {
56 3
            $xoops = \Xoops::getInstance();
57
        }
58 3
        if (empty($dirname)) {
59
            // nothing specified, use current module
60 2
            if (isset($xoops)) {
61 2
                $this->module = $xoops->module;
62
            } else {
63 2
                $this->module = $GLOBALS['xoopsModule'];
64
            }
65
        } else {
66
            // assume dirname specified, try to get a module object
67 1
            if (isset($xoops)) {
68 1
                $moduleHandler = $xoops->getHandlerModule();
69
            } else {
70
                /* @var \XoopsModuleHandler $moduleHandler */
71
                $moduleHandler = xoops_getHandler('module');
0 ignored issues
show
Deprecated Code introduced by
The function xoops_getHandler() has been deprecated. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-deprecated  annotation

71
                $moduleHandler = /** @scrutinizer ignore-deprecated */ xoops_getHandler('module');
Loading history...
72
            }
73 1
            $this->module = $moduleHandler->getByDirname($dirname);
74
        }
75 3
        if (is_object($this->module)) {
76 1
            $this->dirname = $this->module->getVar('dirname');
77 1
            $this->init();
78
        }
79 3
    }
80
81
    /**
82
     * init() is called once/if __construct has a module object.
83
     * $this->module will have a module object that any further
84
     * initialization can use.
85
     *
86
     * @return void
87
     */
88
    abstract public function init();
89
90
    /**
91
     * Return the dirname for this helper
92
     *
93
     * @return string|null a dirname
94
     */
95
    public function dirname()
96
    {
97
        return $this->dirname;
98
    }
99
100
    /**
101
     * Set debug option on or off
102
     *
103
     * @param bool $bool true to turn on debug logging, false for off
104
     *
105
     * @return void
106
     */
107 1
    public function setDebug($bool = true)
108
    {
109 1
        $this->debug = (bool) $bool;
110 1
    }
111
112
    /**
113
     * Add a message to the module log
114
     *
115
     * @param mixed $log log item, can be message or variable
116
     *
117
     * @return void
118
     */
119 1
    public function addLog($log)
120
    {
121 1
        if ($this->debug) {
122
            $message = $this->serializeForHelperLog($log);
123
            if (class_exists('Xoops', false)) {
124
                \Xoops::getInstance()->logger()->debug($message, array('channel'=>'Extra'));
125
            } elseif (is_object($GLOBALS['xoopsLogger'])) {
126
                $GLOBALS['xoopsLogger']->addExtra(get_called_class(), $message);
127
            }
128
        }
129 1
    }
130
131
    /**
132
     * Serialize an arbitrary value to string. Intended for data being addLog()ed
133
     *
134
     * @param mixed $value
135
     *
136
     * @return string
137
     */
138
    protected function serializeForHelperLog($value)
139
    {
140
        if (is_resource($value) || !is_null(@get_resource_type($value))) {
0 ignored issues
show
introduced by
The condition is_null(@get_resource_type($value)) is always false.
Loading history...
141
            $value = '(resource)';
142
        }
143
        if (!is_string($value)) {
0 ignored issues
show
introduced by
The condition is_string($value) is always true.
Loading history...
144
            $value = json_encode($value);
145
        }
146
        return (string) $value;
147
    }
148
}
149