Passed
Pull Request — master (#267)
by Felipe
07:20
created

HelperTrait::dump()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 1
c 0
b 0
f 0
nc 1
nop 1
dl 0
loc 3
rs 10
1
<?php
2
3
/**
4
 * PHPPgAdmin v6.0.0-RC9-3-gd93ec300
5
 */
6
7
namespace PHPPgAdmin\Traits;
8
9
/**
10
 * @file
11
 * A trait with helpers methods to debug, halt the app and format text to html
12
 */
13
14
/**
15
 * A trait with helpers methods to debug, halt the app and format text to html.
16
 */
17
trait HelperTrait
18
{
19
    /**
20
     * static reference to subfolder in which the app is running.
21
     *
22
     * @var null|string
23
     */
24
    public static $subFolder = null;
25
26
    /**
27
     * Gets the subfolder.
28
     *
29
     * @param string $path The path
30
     *
31
     * @return string the subfolder
32
     */
33
    public function getSubfolder(string $path = ''): string
34
    {
35
        if (null === self::$subFolder) {
36
            self::$subFolder = $this->container->subfolder;
37
        }
38
39
        return \implode(\DIRECTORY_SEPARATOR, [self::$subFolder, $path]);
40
    }
41
42
    /**
43
     * Halts the execution of the program. It's like calling exit() but using builtin Slim Exceptions.
44
     *
45
     * @param string $msg The message to show to the user
46
     *
47
     * @throws \Slim\Exception\SlimException (description)
48
     */
49
    public function halt($msg = 'An error has happened'): void
50
    {
51
        $body = $this->container->responseobj->getBody();
52
        $body->write($msg);
53
54
        throw new \Slim\Exception\SlimException($this->container->requestobj, $this->container->responseobj);
55
    }
56
57
    public static function getBackTrace($offset = 0)
58
    {
59
        $i0        = $offset;
60
        $i1        = $offset + 1;
61
        $backtrace = \debug_backtrace(\DEBUG_BACKTRACE_IGNORE_ARGS, $offset + 3);
62
63
        return [
64
            'class'    => 'Closure' === $backtrace[$i1]['class'] ?
65
            $backtrace[$i0]['file'] :
66
            $backtrace[$i1]['class'],
67
68
            'type'     => $backtrace[$i1]['type'],
69
70
            'function' => '{closure}' === $backtrace[$i1]['function']
71
            ? $backtrace[$i0]['function'] :
72
            $backtrace[$i1]['function'],
73
74
            'spacer4'  => ' ',
75
            'line'     => $backtrace[$i0]['line'],
76
        ];
77
        //dump($backtrace);
78
    }
79
80
    /**
81
     * Converts an ADORecordSet to an array.
82
     *
83
     * @param \ADORecordSet $set   The set
84
     * @param string                   $field optionally the field to query for
85
     *
86
     * @return array the parsed array
87
     */
88
    public static function recordSetToArray($set, $field = '')
89
    {
90
        $result = [];
91
92
        if (0 >= $set->recordCount()) {
93
            return $result;
94
        }
95
96
        while (!$set->EOF) {
97
            $result[] = $field ? $set->fields[$field] : $set;
98
            $set->moveNext();
99
        }
100
101
        return $result;
102
    }
103
104
    /**
105
     * Checks if a variable is defined, in which case assign its value to $var1
106
     * If it isn't and $set is true, assign the default value. Otherwise don't
107
     * assign anything to $var1.
108
     *
109
     * @param mixed $var1    The variable to manipulate if $set if true
110
     * @param mixed $var2    The value to assign to $var1 if it's defined
111
     * @param mixed $default The default value to set, it $set is true
112
     * @param bool  $set     True to set the default value if $var2 isn't defined
113
     *
114
     * @return mixed the value of $var2 is $var2 is set, or $default otherwise
115
     */
116
    public function setIfIsset(&$var1, $var2, $default = null, $set = true)
117
    {
118
        if (isset($var2)) {
119
            $var1 = $var2;
120
121
            return $var1;
122
        }
123
124
        if (true === $set) {
125
            $var1 = $default;
126
127
            return $var1;
128
        }
129
130
        return $default;
131
    }
132
133
    /**
134
     * Checks if the $key of an $array is set. If it isn't, optionally set it to
135
     * the default parameter.
136
     *
137
     * @param array      $array   The array to check
138
     * @param int|string $key     The key to check
139
     * @param mixed      $default The default value to set, it $set is true
140
     * @param bool       $set     True to set the default value if $key isn't
141
     *                            set
142
     *
143
     * @return array the original array
144
     */
145
    public function coalesceArr(&$array, $key, $default = null, $set = true)
146
    {
147
        if (!isset($array[$key]) && true === $set) {
148
            $array[$key] = $default;
149
        }
150
151
        return $array;
152
    }
153
154
    public static function formatSizeUnits($bytes, $lang)
155
    {
156
        if (-1 === $bytes) {
157
            $bytes = $lang['strnoaccess'];
158
        } elseif (1099511627776 <= $bytes) {
159
            $bytes = \sprintf('%s %s', \number_format($bytes / 1099511627776, 0), $lang['strtb']);
160
        } elseif (1073741824 <= $bytes) {
161
            $bytes = \sprintf('%s %s', \number_format($bytes / 1073741824, 0), $lang['strgb']);
162
        } elseif (1048576 <= $bytes) {
163
            $bytes = \sprintf('%s %s', \number_format($bytes / 1048576, 0), $lang['strmb']);
164
        } elseif (1024 <= $bytes) {
165
            $bytes = \sprintf('%s %s', \number_format($bytes / 1024, 0), $lang['strkb']);
166
        } else {
167
            $bytes = \sprintf('%s %s', $bytes, $lang['strbytes']);
168
        }
169
170
        return $bytes;
171
    }
172
173
    /**
174
     * Returns a string with html <br> variant replaced with a new line.
175
     *
176
     * @param string $msg message to parse (<br> separated)
177
     *
178
     * @return string parsed message (linebreak separated)
179
     */
180
    public static function br2ln($msg)
181
    {
182
        return \str_replace(['<br>', '<br/>', '<br />'], \PHP_EOL, $msg);
183
    }
184
185
    /**
186
     * Receives N parameters and sends them to the console adding where was it called from.
187
     *
188
     * @param mixed ...$args
189
     */
190
    public function prtrace(...$args): void
191
    {
192
        self::staticTrace(...$args);
193
    }
194
195
    /**
196
     * Just a proxy for prtrace.
197
     *
198
     * @param mixed ...$args The arguments
199
     */
200
    public function dump(...$args): void
201
    {
202
        self::staticTrace(...$args);
203
    }
204
205
    /**Claveunica.,219
0 ignored issues
show
Coding Style introduced by
The open comment tag must be the only content on the line
Loading history...
Coding Style introduced by
Doc comment short description must be on the first line
Loading history...
206
     * Dumps and die.
207
     *
208
     * @param mixed ...$args The arguments
209
     */
210
    public function dumpAndDie(...$args): void
211
    {
212
        self::staticTrace(...$args);
213
        exit();
0 ignored issues
show
Best Practice introduced by
Using exit here is not recommended.

In general, usage of exit should be done with care and only when running in a scripting context like a CLI script.

Loading history...
214
    }
215
216
    /**
217
     * Receives N parameters and sends them to the console adding where was it
218
     * called from.
219
     *
220
     * @param mixed  $variablesToDump
0 ignored issues
show
Coding Style introduced by
Doc comment for parameter $variablesToDump does not match actual variable name ...$variablesToDump
Loading history...
221
     */
222
    private static function staticTrace(
223
        ...$variablesToDump
224
    ): void {
225
        if (!$variablesToDump) {
0 ignored issues
show
Bug Best Practice introduced by
The expression $variablesToDump of type array is implicitly converted to a boolean; are you sure this is intended? If so, consider using empty($expr) instead to make it clear that you intend to check for an array without elements.

This check marks implicit conversions of arrays to boolean values in a comparison. While in PHP an empty array is considered to be equal (but not identical) to false, this is not always apparent.

Consider making the comparison explicit by using empty(..) or ! empty(...) instead.

Loading history...
226
            $variablesToDump = \func_get_args();
227
        }
228
229
        $calledFrom = \str_replace(
230
            dirname(
231
                dirname(__DIR__)
232
            ),
233
            '',
234
            implode(
235
                '',
236
                self::getBackTrace(2)
237
            )
238
        );
239
240
        if (\function_exists('dump')) {
241
            dump([
0 ignored issues
show
Bug introduced by
The call to dump() has too few arguments starting with str. ( Ignorable by Annotation )

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

241
            /** @scrutinizer ignore-call */ 
242
            dump([

This check compares calls to functions or methods with their respective definitions. If the call has less arguments than are defined, it raises an issue.

If a function is defined several times with a different number of parameters, the check may pick up the wrong definition and report false positives. One codebase where this has been known to happen is Wordpress. Please note the @ignore annotation hint above.

Loading history...
242
                'args' => $variablesToDump,
243
                'from' => $calledFrom,
244
            ]);
245
        }
246
    }
247
}
248