Utility::isTable()   A
last analyzed

Complexity

Conditions 3
Paths 3

Size

Total Lines 18

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 3
nc 3
nop 1
dl 0
loc 18
rs 9.6666
c 0
b 0
f 0
1
<?php namespace XoopsModules\Smartobject;
2
3
use Xmf\Request;
4
use XoopsModules\Smartobject;
5
use XoopsModules\Smartobject\Common;
6
7
/**
8
 * Class Utility
9
 */
10
class Utility
11
{
12
    use Common\VersionChecks; //checkVerXoops, checkVerPhp Traits
13
14
    use Common\ServerStats; // getServerStats Trait
15
16
    use Common\FilesManagement; // Files Management Trait
17
18
    //--------------- Custom module methods -----------------------------
19
20
21
22
    /**
23
     * @param $cssfile
24
     * @return string
25
     */
26
    public static function getCssLink($cssfile)
27
    {
28
        $ret = '<link rel="stylesheet" type="text/css" href="' . $cssfile . '">';
29
30
        return $ret;
31
    }
32
33
    /**
34
     * @return string
35
     */
36
    public static function getPageBeforeForm()
37
    {
38
        global $smart_previous_page;
39
40
        return isset($_POST['smart_page_before_form']) ? $_POST['smart_page_before_form'] : $smart_previous_page;
41
    }
42
43
    /**
44
     * Checks if a user is admin of $module
45
     *
46
     * @param  bool $module
47
     * @return bool: true if user is admin
0 ignored issues
show
Documentation introduced by
The doc-type bool: could not be parsed: Unknown type name "bool:" at position 0. (view supported doc-types)

This check marks PHPDoc comments that could not be parsed by our parser. To see which comment annotations we can parse, please refer to our documentation on supported doc-types.

Loading history...
48
     */
49
    public static function userIsAdmin($module = false)
50
    {
51
        global $xoopsUser;
52
        static $smart_isAdmin;
53
        if (!$module) {
54
            global $xoopsModule;
55
            $module = $xoopsModule->getVar('dirname');
56
        }
57
        if (isset($smart_isAdmin[$module])) {
58
            return $smart_isAdmin[$module];
59
        }
60
        if (!$xoopsUser) {
61
            $smart_isAdmin[$module] = false;
62
63
            return $smart_isAdmin[$module];
64
        }
65
        $smart_isAdmin[$module] = false;
66
        $smartModule            = static::getModuleInfo($module);
67
        if (!is_object($smartModule)) {
68
            return false;
69
        }
70
        $module_id              = $smartModule->getVar('mid');
71
        $smart_isAdmin[$module] = $xoopsUser->isAdmin($module_id);
72
73
        return $smart_isAdmin[$module];
74
    }
75
76
    /**
77
     * @return bool
78
     */
79
    public static function isXoops22()
80
    {
81
        $xoops22 = false;
82
        $xv      = str_replace('XOOPS ', '', XOOPS_VERSION);
83
        if ('2' == substr($xv, 2, 1)) {
84
            $xoops22 = true;
85
        }
86
87
        return $xoops22;
88
    }
89
90
    /**
91
     * @param  bool $withLink
92
     * @param  bool $forBreadCrumb
93
     * @param  bool $moduleName
94
     * @return string
95
     */
96
    public static function getModuleName($withLink = true, $forBreadCrumb = false, $moduleName = false)
97
    {
98
        if (!$moduleName) {
99
            global $xoopsModule;
100
            $moduleName = $xoopsModule->getVar('dirname');
101
        }
102
        $smartModule       = static::getModuleInfo($moduleName);
103
        $smartModuleConfig = static::getModuleConfig($moduleName);
104
        if (!isset($smartModule)) {
105
            return '';
106
        }
107
108
        if ($forBreadCrumb
109
            && (isset($smartModuleConfig['show_mod_name_breadcrumb'])
110
                && !$smartModuleConfig['show_mod_name_breadcrumb'])) {
111
            return '';
112
        }
113
        if (!$withLink) {
114
            return $smartModule->getVar('name');
115
        } else {
116
            $seoMode = static::getModuleModeSEO($moduleName);
117
            if ('rewrite' === $seoMode) {
118
                $seoModuleName = static::getModuleNameForSEO($moduleName);
119
                $ret           = XOOPS_URL . '/' . $seoModuleName . '/';
120
            } elseif ('pathinfo' === $seoMode) {
121
                $ret = XOOPS_URL . '/modules/' . $moduleName . '/seo.php/' . $seoModuleName . '/';
0 ignored issues
show
Bug introduced by
The variable $seoModuleName seems only to be defined at a later point. Did you maybe move this code here without moving the variable definition?

This error can happen if you refactor code and forget to move the variable initialization.

Let’s take a look at a simple example:

function someFunction() {
    $x = 5;
    echo $x;
}

The above code is perfectly fine. Now imagine that we re-order the statements:

function someFunction() {
    echo $x;
    $x = 5;
}

In that case, $x would be read before it is initialized. This was a very basic example, however the principle is the same for the found issue.

Loading history...
122
            } else {
123
                $ret = XOOPS_URL . '/modules/' . $moduleName . '/';
124
            }
125
126
            return '<a href="' . $ret . '">' . $smartModule->getVar('name') . '</a>';
127
        }
128
    }
129
130
    /**
131
     * @param  bool $moduleName
132
     * @return string
133
     */
134
    public static function getModuleNameForSEO($moduleName = false)
135
    {
136
        $smartModule       = static::getModuleInfo($moduleName);
0 ignored issues
show
Unused Code introduced by
$smartModule is not used, you could remove the assignment.

This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.

$myVar = 'Value';
$higher = false;

if (rand(1, 6) > 3) {
    $higher = true;
} else {
    $higher = false;
}

Both the $myVar assignment in line 1 and the $higher assignment in line 2 are dead. The first because $myVar is never used and the second because $higher is always overwritten for every possible time line.

Loading history...
137
        $smartModuleConfig = static::getModuleConfig($moduleName);
138
        if (isset($smartModuleConfig['seo_module_name'])) {
139
            return $smartModuleConfig['seo_module_name'];
140
        }
141
        $ret = static::getModuleName(false, false, $moduleName);
142
143
        return strtolower($ret);
144
    }
145
146
    /**
147
     * @param  bool $moduleName
148
     * @return bool
149
     */
150
    public static function getModuleModeSEO($moduleName = false)
151
    {
152
        $smartModule       = static::getModuleInfo($moduleName);
0 ignored issues
show
Unused Code introduced by
$smartModule is not used, you could remove the assignment.

This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.

$myVar = 'Value';
$higher = false;

if (rand(1, 6) > 3) {
    $higher = true;
} else {
    $higher = false;
}

Both the $myVar assignment in line 1 and the $higher assignment in line 2 are dead. The first because $myVar is never used and the second because $higher is always overwritten for every possible time line.

Loading history...
153
        $smartModuleConfig = static::getModuleConfig($moduleName);
154
155
        return isset($smartModuleConfig['seo_mode']) ? $smartModuleConfig['seo_mode'] : false;
156
    }
157
158
    /**
159
     * @param  bool $moduleName
160
     * @return bool
161
     */
162
    public static function getModuleIncludeIdSEO($moduleName = false)
163
    {
164
        $smartModule       = static::getModuleInfo($moduleName);
0 ignored issues
show
Unused Code introduced by
$smartModule is not used, you could remove the assignment.

This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.

$myVar = 'Value';
$higher = false;

if (rand(1, 6) > 3) {
    $higher = true;
} else {
    $higher = false;
}

Both the $myVar assignment in line 1 and the $higher assignment in line 2 are dead. The first because $myVar is never used and the second because $higher is always overwritten for every possible time line.

Loading history...
165
        $smartModuleConfig = static::getModuleConfig($moduleName);
166
167
        return !empty($smartModuleConfig['seo_inc_id']);
168
    }
169
170
    /**
171
     * @param $key
172
     * @return string
173
     */
174
    public static function getEnv($key)
175
    {
176
        $ret = '';
0 ignored issues
show
Unused Code introduced by
$ret is not used, you could remove the assignment.

This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.

$myVar = 'Value';
$higher = false;

if (rand(1, 6) > 3) {
    $higher = true;
} else {
    $higher = false;
}

Both the $myVar assignment in line 1 and the $higher assignment in line 2 are dead. The first because $myVar is never used and the second because $higher is always overwritten for every possible time line.

Loading history...
177
        $ret = isset($_SERVER[$key]) ? $_SERVER[$key] : (isset($_ENV[$key]) ? $_ENV[$key] : '');
178
179
        return $ret;
180
    }
181
182
    public static function getXoopsCpHeader()
183
    {
184
        xoops_cp_header();
185
        global $xoopsModule, $xoopsConfig;
186
        /**
187
         * include SmartObject admin language file
188
         */
189
        /** @var Smartobject\Helper $helper */
190
        $helper = Smartobject\Helper::getInstance();
191
        $helper->loadLanguage('admin'); ?>
192
193
        <script type='text/javascript'>
194
            <!--
195
            var smart_url = '<?php echo SMARTOBJECT_URL ?>';
196
            var smart_modulename = '<?php echo $xoopsModule->getVar('dirname') ?>';
197
            // -->
198
        </script>
199
200
        <script
201
            type='text/javascript'
202
            src='<?php echo SMARTOBJECT_URL ?>include/smart.js'></script>
203
        <?php
204
205
        /**
206
         * Include the admin language constants for the SmartObject Framework
207
         */
208
        /** @var Smartobject\Helper $helper */
209
        $helper = Smartobject\Helper::getInstance();
210
        $helper->loadLanguage('admin');
211
    }
212
213
    /**
214
     * Detemines if a table exists in the current db
215
     *
216
     * @param  string $table the table name (without XOOPS prefix)
217
     * @return bool   True if table exists, false if not
218
     *
219
     * @access public
220
     * @author xhelp development team
221
     */
222
    public static function isTable($table)
223
    {
224
        $bRetVal = false;
225
        //Verifies that a MySQL table exists
226
        $xoopsDB  = \XoopsDatabaseFactory::getDatabaseConnection();
227
        $realname = $xoopsDB->prefix($table);
228
        $sql      = 'SHOW TABLES FROM ' . XOOPS_DB_NAME;
229
        $ret      = $xoopsDB->queryF($sql);
230
        while (false !== (list($m_table) = $xoopsDB->fetchRow($ret))) {
231
            if ($m_table == $realname) {
232
                $bRetVal = true;
233
                break;
234
            }
235
        }
236
        $xoopsDB->freeRecordSet($ret);
237
238
        return $bRetVal;
239
    }
240
241
    /**
242
     * Gets a value from a key in the xhelp_meta table
243
     *
244
     * @param  string $key
245
     * @param  bool   $moduleName
246
     * @return string $value
247
     *
248
     * @access public
249
     * @author xhelp development team
250
     */
251
    public static function getMeta($key, $moduleName = false)
252
    {
253
        if (!$moduleName) {
254
            $moduleName = static::getCurrentModuleName();
255
        }
256
        $xoopsDB = \XoopsDatabaseFactory::getDatabaseConnection();
257
        $sql     = sprintf('SELECT metavalue FROM `%s` WHERE metakey=%s', $xoopsDB->prefix($moduleName . '_meta'), $xoopsDB->quoteString($key));
258
        $ret     = $xoopsDB->query($sql);
259
        if (!$ret) {
260
            $value = false;
261
        } else {
262
            list($value) = $xoopsDB->fetchRow($ret);
263
        }
264
265
        return $value;
266
    }
267
268
    /**
269
     * @return bool
270
     */
271
    public static function getCurrentModuleName()
272
    {
273
        global $xoopsModule;
274
        if (is_object($xoopsModule)) {
275
            return $xoopsModule->getVar('dirname');
276
        } else {
277
            return false;
278
        }
279
    }
280
281
    /**
282
     * Sets a value for a key in the xhelp_meta table
283
     *
284
     * @param  string $key
285
     * @param  string $value
286
     * @param  bool   $moduleName
287
     * @return bool   TRUE if success, FALSE if failure
288
     *
289
     * @access public
290
     * @author xhelp development team
291
     */
292
    public static function setMeta($key, $value, $moduleName = false)
293
    {
294
        if (!$moduleName) {
295
            $moduleName = static::getCurrentModuleName();
296
        }
297
        $xoopsDB = \XoopsDatabaseFactory::getDatabaseConnection();
298
        $ret     = static::getMeta($key, $moduleName);
299
        if ('0' === $ret || $ret > 0) {
300
            $sql = sprintf('UPDATE %s SET metavalue = %s WHERE metakey = %s', $xoopsDB->prefix($moduleName . '_meta'), $xoopsDB->quoteString($value), $xoopsDB->quoteString($key));
301
        } else {
302
            $sql = sprintf('INSERT INTO %s (metakey, metavalue) VALUES (%s, %s)', $xoopsDB->prefix($moduleName . '_meta'), $xoopsDB->quoteString($key), $xoopsDB->quoteString($value));
303
        }
304
        $ret = $xoopsDB->queryF($sql);
305
        if (!$ret) {
306
            return false;
307
        }
308
309
        return true;
310
    }
311
312
    // Thanks to Mithrandir:-)
313
    /**
314
     * @param         $str
315
     * @param         $start
316
     * @param         $length
317
     * @param  string $trimmarker
318
     * @return string
319
     */
320
    public static function getSubstr($str, $start, $length, $trimmarker = '...')
321
    {
322
        // if the string is empty, let's get out ;-)
323
        if ('' === $str) {
324
            return $str;
325
        }
326
        // reverse a string that is shortened with '' as trimmarker
327
        $reversed_string = strrev(xoops_substr($str, $start, $length, ''));
328
        // find first space in reversed string
329
        $position_of_space = strpos($reversed_string, ' ', 0);
330
        // truncate the original string to a length of $length
331
        // minus the position of the last space
332
        // plus the length of the $trimmarker
333
        $truncated_string = xoops_substr($str, $start, $length - $position_of_space + strlen($trimmarker), $trimmarker);
334
335
        return $truncated_string;
336
    }
337
338
    /**
339
     * @param              $key
340
     * @param  bool        $moduleName
341
     * @param  string      $default
342
     * @return null|string
343
     */
344
    public static function getConfig($key, $moduleName = false, $default = 'default_is_undefined')
345
    {
346
        if (!$moduleName) {
347
            $moduleName = static::getCurrentModuleName();
348
        }
349
        $configs = static::getModuleConfig($moduleName);
350
        if (isset($configs[$key])) {
351
            return $configs[$key];
352
        } else {
353
            if ('default_is_undefined' === $default) {
354
                return null;
355
            } else {
356
                return $default;
357
            }
358
        }
359
    }
360
361
    /**
362
     * Copy a file, or a folder and its contents
363
     *
364
     * @author      Aidan Lister <[email protected]>
365
     * @param  string $source The source
366
     * @param  string $dest   The destination
367
     * @return bool   Returns true on success, false on failure
368
     */
369
    public static function copyr($source, $dest)
370
    {
371
        // Simple copy for a file
372
        if (is_file($source)) {
373
            return copy($source, $dest);
374
        }
375
        // Make destination directory
376
        if (!is_dir($dest)) {
377
            mkdir($dest);
378
        }
379
        // Loop through the folder
380
        $dir = dir($source);
381
        while (false !== $entry = $dir->read()) {
382
            // Skip pointers
383
            if ('.' === $entry || '..' === $entry) {
384
                continue;
385
            }
386
            // Deep copy directories
387
            if (is_dir("$source/$entry") && ("$source/$entry" !== $dest)) {
388
                static::copyr("$source/$entry", "$dest/$entry");
389
            } else {
390
                copy("$source/$entry", "$dest/$entry");
391
            }
392
        }
393
        // Clean up
394
        $dir->close();
395
396
        return true;
397
    }
398
399
    /**
400
     * Thanks to the NewBB2 Development Team
401
     * @param $target
402
     * @return bool
403
     */
404
    public static function mkdirAsAdmin($target)
405
    {
406
        // http://www.php.net/manual/en/function.mkdir.php
407
        // saint at corenova.com
408
        // bart at cdasites dot com
409
        if (is_dir($target) || empty($target)) {
410
            return true; // best case check first
411
        }
412
        if (file_exists($target) && !is_dir($target)) {
413
            return false;
414
        }
415
        if (static::mkdirAsAdmin(substr($target, 0, strrpos($target, '/')))) {
416
            if (!file_exists($target)) {
417
                $res = mkdir($target, 0777); // crawl back up & create dir tree
418
                static::chmodAsAdmin($target);
419
420
                return $res;
421
            }
422
        }
423
        $res = is_dir($target);
424
425
        return $res;
426
    }
427
428
    /**
429
     * Thanks to the NewBB2 Development Team
430
     * @param       $target
431
     * @param  int  $mode
432
     * @return bool
433
     */
434
    public static function chmodAsAdmin($target, $mode = 0777)
435
    {
436
        return @ chmod($target, $mode);
437
    }
438
439
    /**
440
     * @param $src
441
     * @param $maxWidth
442
     * @param $maxHeight
443
     * @return array
444
     */
445
    public static function imageResize($src, $maxWidth, $maxHeight)
446
    {
447
        $width  = '';
448
        $height = '';
449
        $type   = '';
450
        $attr   = '';
451
        if (file_exists($src)) {
452
            list($width, $height, $type, $attr) = getimagesize($src);
0 ignored issues
show
Unused Code introduced by
The assignment to $attr is unused. Consider omitting it like so list($first,,$third).

This checks looks for assignemnts to variables using the list(...) function, where not all assigned variables are subsequently used.

Consider the following code example.

<?php

function returnThreeValues() {
    return array('a', 'b', 'c');
}

list($a, $b, $c) = returnThreeValues();

print $a . " - " . $c;

Only the variables $a and $c are used. There was no need to assign $b.

Instead, the list call could have been.

list($a,, $c) = returnThreeValues();
Loading history...
453
            if ($width > $maxWidth) {
454
                $originalWidth = $width;
455
                $width         = $maxWidth;
456
                $height        = $width * $height / $originalWidth;
457
            }
458
            if ($height > $maxHeight) {
459
                $originalHeight = $height;
460
                $height         = $maxHeight;
461
                $width          = $height * $width / $originalHeight;
462
            }
463
            $attr = " width='$width' height='$height'";
464
        }
465
466
        return [
467
            $width,
468
            $height,
469
            $type,
470
            $attr
471
        ];
472
    }
473
474
    /**
475
     * @param  bool $moduleName
476
     * @return mixed
477
     */
478
    public static function getModuleInfo($moduleName = false)
479
    {
480
        static $smartModules;
481
        if (isset($smartModules[$moduleName])) {
482
            $ret =& $smartModules[$moduleName];
483
484
            return $ret;
485
        }
486
        global $xoopsModule;
487
        if (!$moduleName) {
488
            if (isset($xoopsModule) && is_object($xoopsModule)) {
489
                $smartModules[$xoopsModule->getVar('dirname')] = $xoopsModule;
490
491
                return $smartModules[$xoopsModule->getVar('dirname')];
492
            }
493
        }
494
        if (!isset($smartModules[$moduleName])) {
495
            if (isset($xoopsModule) && is_object($xoopsModule) && $xoopsModule->getVar('dirname') == $moduleName) {
496
                $smartModules[$moduleName] = $xoopsModule;
497
            } else {
498
                $hModule = xoops_getHandler('module');
499
                if ('xoops' !== $moduleName) {
500
                    $smartModules[$moduleName] = $hModule->getByDirname($moduleName);
501
                } else {
502
                    $smartModules[$moduleName] = $hModule->getByDirname('system');
503
                }
504
            }
505
        }
506
507
        return $smartModules[$moduleName];
508
    }
509
510
    /**
511
     * @param  bool $moduleName
512
     * @return bool
513
     */
514
    public static function getModuleConfig($moduleName = false)
515
    {
516
        static $smartConfigs;
517
        if (isset($smartConfigs[$moduleName])) {
518
            $ret =& $smartConfigs[$moduleName];
519
520
            return $ret;
521
        }
522
        global $xoopsModule, $xoopsModuleConfig;
523
        if (!$moduleName) {
524
            if (isset($xoopsModule) && is_object($xoopsModule)) {
525
                $smartConfigs[$xoopsModule->getVar('dirname')] = $xoopsModuleConfig;
526
527
                return $smartConfigs[$xoopsModule->getVar('dirname')];
528
            }
529
        }
530
        // if we still did not found the xoopsModule, this is because there is none
531
        if (!$moduleName) {
532
            $ret = false;
533
534
            return $ret;
535
        }
536
        if (isset($xoopsModule) && is_object($xoopsModule) && $xoopsModule->getVar('dirname') == $moduleName) {
537
            $smartConfigs[$moduleName] = $xoopsModuleConfig;
538
        } else {
539
            $module = static::getModuleInfo($moduleName);
540
            if (!is_object($module)) {
541
                $ret = false;
542
543
                return $ret;
544
            }
545
            $hModConfig                = xoops_getHandler('config');
546
            $smartConfigs[$moduleName] =& $hModConfig->getConfigsByCat(0, $module->getVar('mid'));
547
        }
548
549
        return $smartConfigs[$moduleName];
550
    }
551
552
    /**
553
     * @param $dirname
554
     * @return bool
555
     */
556
    public static function deleteFile($dirname)
557
    {
558
        // Simple delete for a file
559
        if (is_file($dirname)) {
560
            return unlink($dirname);
561
        }
562
    }
563
564
    /**
565
     * @param  array $errors
566
     * @return string
567
     */
568
    public static function formatErrors($errors = [])
569
    {
570
        $ret = '';
571
        foreach ($errors as $key => $value) {
572
            $ret .= '<br> - ' . $value;
573
        }
574
575
        return $ret;
576
    }
577
578
    /**
579
     * getLinkedUnameFromId()
580
     *
581
     * @param  integer $userid Userid of poster etc
582
     * @param  integer $name   :  0 Use Usenamer 1 Use realname
583
     * @param  array   $users
584
     * @param  bool    $withContact
585
     * @return string
586
     */
587
    public static function getLinkedUnameFromId($userid = 0, $name = 0, $users = [], $withContact = false)
588
    {
589
        if (!is_numeric($userid)) {
590
            return $userid;
591
        }
592
        $userid = (int)$userid;
593
        if ($userid > 0) {
594
            if ($users == []) {
595
                //fetching users
596
                $memberHandler = xoops_getHandler('member');
597
                $user          =& $memberHandler->getUser($userid);
598
            } else {
599
                if (!isset($users[$userid])) {
600
                    return $GLOBALS['xoopsConfig']['anonymous'];
601
                }
602
                $user =& $users[$userid];
603
            }
604
            if (is_object($user)) {
605
                $ts        = \MyTextSanitizer:: getInstance();
606
                $username  = $user->getVar('uname');
607
                $fullname  = '';
608
                $fullname2 = $user->getVar('name');
609
                if ($name && !empty($fullname2)) {
610
                    $fullname = $user->getVar('name');
611
                }
612
                if (!empty($fullname)) {
613
                    $linkeduser = "$fullname [<a href='" . XOOPS_URL . '/userinfo.php?uid=' . $userid . "'>" . $ts->htmlSpecialChars($username) . '</a>]';
614
                } else {
615
                    $linkeduser = "<a href='" . XOOPS_URL . '/userinfo.php?uid=' . $userid . "'>" . ucwords($ts->htmlSpecialChars($username)) . '</a>';
616
                }
617
                // add contact info: email + PM
618
                if ($withContact) {
619
                    $linkeduser .= ' <a href="mailto:' . $user->getVar('email') . '"><img style="vertical-align: middle;" src="' . XOOPS_URL . '/images/icons/email.gif' . '" alt="' . _CO_SOBJECT_SEND_EMAIL . '" title="' . _CO_SOBJECT_SEND_EMAIL . '"></a>';
620
                    $js         = "javascript:openWithSelfMain('" . XOOPS_URL . '/pmlite.php?send2=1&to_userid=' . $userid . "', 'pmlite',450,370);";
621
                    $linkeduser .= ' <a href="' . $js . '"><img style="vertical-align: middle;" src="' . XOOPS_URL . '/images/icons/pm.gif' . '" alt="' . _CO_SOBJECT_SEND_PM . '" title="' . _CO_SOBJECT_SEND_PM . '"></a>';
622
                }
623
624
                return $linkeduser;
625
            }
626
        }
627
628
        return $GLOBALS['xoopsConfig']['anonymous'];
629
    }
630
631
    /**
632
     * @param int    $currentoption
633
     * @param string $breadcrumb
634
     * @param bool   $submenus
635
     * @param int    $currentsub
636
     */
637
    public static function getAdminMenu($currentoption = 0, $breadcrumb = '', $submenus = false, $currentsub = -1)
638
    {
639
        global $xoopsModule, $xoopsConfig;
640
        require_once XOOPS_ROOT_PATH . '/class/template.php';
641
642
643
        /** @var Smartobject\Helper $helper */
644
        $helper = Smartobject\Helper::getInstance();
645
        $helper->loadLanguage('admin');
646
        $helper->loadLanguage('modinfo');
647
        $headermenu  = [];
648
        $adminObject = [];
649
        include XOOPS_ROOT_PATH . '/modules/' . $xoopsModule->getVar('dirname') . '/admin/menu.php';
650
        $tpl = new \XoopsTpl();
651
        $tpl->assign([
652
                         'headermenu'      => $headermenu,
653
                         'adminmenu'       => $adminObject,
654
                         'current'         => $currentoption,
655
                         'breadcrumb'      => $breadcrumb,
656
                         'headermenucount' => count($headermenu),
657
                         'submenus'        => $submenus,
658
                         'currentsub'      => $currentsub,
659
                         'submenuscount'   => count($submenus)
660
                     ]);
661
        $tpl->display('db:smartobject_admin_menu.tpl');
662
    }
663
664
    /**
665
     * @param string $id
666
     * @param string $title
667
     * @param string $dsc
668
     */
669 View Code Duplication
    public static function getCollapsableBar($id = '', $title = '', $dsc = '')
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
670
    {
671
        global $xoopsModule;
672
        echo "<h3 style=\"color: #2F5376; font-weight: bold; font-size: 14px; margin: 6px 0 0 0; \"><a href='javascript:;' onclick=\"togglecollapse('" . $id . "'); toggleIcon('" . $id . "_icon')\";>";
673
        echo "<img id='" . $id . "_icon' src=" . SMARTOBJECT_URL . "assets/images/close12.gif alt=''></a>&nbsp;" . $title . '</h3>';
674
        echo "<div id='" . $id . "'>";
675
        if ('' !== $dsc) {
676
            echo '<span style="color: #567; margin: 3px 0 12px 0; font-size: small; display: block; ">' . $dsc . '</span>';
677
        }
678
    }
679
680
    /**
681
     * @param string $id
682
     * @param string $title
683
     * @param string $dsc
684
     */
685 View Code Duplication
    public static function getAjaxCollapsableBar($id = '', $title = '', $dsc = '')
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
686
    {
687
        global $xoopsModule;
688
        $onClick = "ajaxtogglecollapse('$id')";
689
        //$onClick = "togglecollapse('$id'); toggleIcon('" . $id . "_icon')";
690
        echo '<h3 style="border: 1px solid; color: #2F5376; font-weight: bold; font-size: 14px; margin: 6px 0 0 0; " onclick="' . $onClick . '">';
691
        echo "<img id='" . $id . "_icon' src=" . SMARTOBJECT_URL . "assets/images/close12.gif alt=''></a>&nbsp;" . $title . '</h3>';
692
        echo "<div id='" . $id . "'>";
693
        if ('' !== $dsc) {
694
            echo '<span style="color: #567; margin: 3px 0 12px 0; font-size: small; display: block; ">' . $dsc . '</span>';
695
        }
696
    }
697
698
    /**
699
     * Ajax testing......
700
     * @param $name
701
     */
702
    /*
703
     public static function getCollapsableBar($id = '', $title = '', $dsc='')
704
     {
705
    
706
     global $xoopsModule;
707
     //echo "<h3 style=\"color: #2F5376; font-weight: bold; font-size: 14px; margin: 6px 0 0 0; \"><a href='javascript:;' onclick=\"toggle('" . $id . "'); toggleIcon('" . $id . "_icon')\";>";
708
    
709
     ?>
710
     <h3 class="smart_collapsable_title"><a href="javascript:Effect.Combo('<?php echo $id ?>');"><?php echo $title ?></a></h3>
711
     <?php
712
    
713
     echo "<img id='" . $id . "_icon' src=" . SMARTOBJECT_URL . "assets/images/close12.gif alt=''></a>&nbsp;" . $title . "</h3>";
714
     echo "<div id='" . $id . "'>";
715
     if ($dsc != '') {
716
     echo "<span style=\"color: #567; margin: 3px 0 12px 0; font-size: small; display: block; \">" . $dsc . "</span>";
717
     }
718
     }
719
     */
720
    public static function opencloseCollapsable($name)
721
    {
722
        $urls        = static::getCurrentUrls();
723
        $path        = $urls['phpself'];
724
        $cookie_name = $path . '_smart_collaps_' . $name;
725
        $cookie_name = str_replace('.', '_', $cookie_name);
726
        $cookie      = static::getCookieVar($cookie_name, '');
727
        if ('none' === $cookie) {
728
            echo '
729
                <script type="text/javascript"><!--
730
                togglecollapse("' . $name . '"); toggleIcon("' . $name . '_icon");
731
                    //-->
732
                </script>
733
                ';
734
        }
735
        /*  if ($cookie == 'none') {
736
         echo '
737
         <script type="text/javascript"><!--
738
         hideElement("' . $name . '");
739
         //-->
740
         </script>
741
         ';
742
         }
743
         */
744
    }
745
746
    /**
747
     * @param $name
748
     */
749
    public static function closeCollapsable($name)
750
    {
751
        echo '</div>';
752
        static::opencloseCollapsable($name);
753
        echo '<br>';
754
    }
755
756
    /**
757
     * @param     $name
758
     * @param     $value
759
     * @param int $time
760
     */
761
    public static function setCookieVar($name, $value, $time = 0)
762
    {
763
        if (0 == $time) {
764
            $time = time() + 3600 * 24 * 365;
765
            //$time = '';
766
        }
767
        setcookie($name, $value, $time, '/');
768
    }
769
770
    /**
771
     * @param         $name
772
     * @param  string $default
773
     * @return string
774
     */
775
    public static function getCookieVar($name, $default = '')
776
    {
777
        $name = str_replace('.', '_', $name);
778
        if (isset($_COOKIE[$name]) && ($_COOKIE[$name] > '')) {
779
            return $_COOKIE[$name];
780
        } else {
781
            return $default;
782
        }
783
    }
784
785
    /**
786
     * @return array
787
     */
788
    public static function getCurrentUrls()
789
    {
790
        $urls        = [];
0 ignored issues
show
Unused Code introduced by
$urls is not used, you could remove the assignment.

This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.

$myVar = 'Value';
$higher = false;

if (rand(1, 6) > 3) {
    $higher = true;
} else {
    $higher = false;
}

Both the $myVar assignment in line 1 and the $higher assignment in line 2 are dead. The first because $myVar is never used and the second because $higher is always overwritten for every possible time line.

Loading history...
791
        $http        = (false === strpos(XOOPS_URL, 'https://')) ? 'http://' : 'https://';
792
        $phpself     = $_SERVER['PHP_SELF'];
793
        $httphost    = $_SERVER['HTTP_HOST'];
794
        $querystring = $_SERVER['QUERY_STRING'];
795
        if ('' !== $querystring) {
796
            $querystring = '?' . $querystring;
797
        }
798
        $currenturl           = $http . $httphost . $phpself . $querystring;
799
        $urls                 = [];
800
        $urls['http']         = $http;
801
        $urls['httphost']     = $httphost;
802
        $urls['phpself']      = $phpself;
803
        $urls['querystring']  = $querystring;
804
        $urls['full_phpself'] = $http . $httphost . $phpself;
805
        $urls['full']         = $currenturl;
806
        $urls['isHomePage']   = (XOOPS_URL . '/index.php') == ($http . $httphost . $phpself);
807
808
        return $urls;
809
    }
810
811
    /**
812
     * @return mixed
813
     */
814
    public static function getCurrentPage()
815
    {
816
        $urls = static::getCurrentUrls();
817
818
        return $urls['full'];
819
    }
820
821
    /**
822
     * Create a title for the short_url field of an article
823
     *
824
     * @credit psylove
825
     *
826
     * @var    string $title   title of the article
827
     * @var    string $withExt do we add an html extension or not
828
     * @return string sort_url for the article
829
     */
830
    /**
831
     * Moved in SmartMetaGenClass
832
     */
833
    /*
834
     public static function smart_seo_title($title='', $withExt=true)
835
     {
836
     // Transformation de la chaine en minuscule
837
     // Codage de la chaine afin d'éviter les erreurs 500 en cas de caractères imprévus
838
     $title   = rawurlencode(strtolower($title));
839
    
840
     // Transformation des ponctuations
841
     //                 Tab     Space      !        "        #        %        &        '        (        )        ,        /       :        ;        <        =        >        ?        @        [        \        ]        ^        {        |        }        ~       .
842
     $pattern = array("/%09/", "/%20/", "/%21/", "/%22/", "/%23/", "/%25/", "/%26/", "/%27/", "/%28/", "/%29/", "/%2C/", "/%2F/", "/%3A/", "/%3B/", "/%3C/", "/%3D/", "/%3E/", "/%3F/", "/%40/", "/%5B/", "/%5C/", "/%5D/", "/%5E/", "/%7B/", "/%7C/", "/%7D/", "/%7E/", "/\./");
843
     $rep_pat = array(  "-"  ,   "-"  ,   ""   ,   ""   ,   ""   , "-100" ,   ""   ,   "-"  ,   ""   ,   ""   ,   ""   ,   "-"  ,   ""   ,   ""   ,   ""   ,   "-"  ,   ""   ,   ""   , "-at-" ,   ""   ,   "-"   ,  ""   ,   "-"  ,   ""   ,   "-"  ,   ""   ,   "-"  ,  ""  );
844
     $title   = preg_replace($pattern, $rep_pat, $title);
845
    
846
     // Transformation des caractères accentués
847
        $pattern = array(
848
            '/%B0/', // °
849
            '/%E8/', // è
850
            '/%E9/', // é
851
            '/%EA/', // ê
852
            '/%EB/', // ë
853
            '/%E7/', // ç
854
            '/%E0/', // à
855
            '/%E2/', // â
856
            '/%E4/', // ä
857
            '/%EE/', // î
858
            '/%EF/', // ï
859
            '/%F9/', // ù
860
            '/%FC/', // ü
861
            '/%FB/', // û
862
            '/%F4/', // ô
863
            '/%F6/', // ö
864
        );
865
     $rep_pat = array(  "e"  ,   "e"  ,   "e"  ,   "e"  ,   "c"  ,   "a"  ,   "a"  ,   "a"  ,   "i"  ,   "i"  ,   "u"  ,   "u"  ,   "u"  ,   "o"  ,   "o"  );
866
     $title   = preg_replace($pattern, $rep_pat, $title);
867
    
868
     if (count($title) > 0) {
869
     if ($withExt) {
870
     $title .= '.html';
871
     }
872
    
873
     return $title;
874
     } else
875
    
876
     return '';
877
     }
878
     */
879
    public static function getModFooter()
880
    {
881
        global $xoopsConfig, $xoopsModule;
882
883
        require_once XOOPS_ROOT_PATH . '/class/template.php';
884
        $tpl = new \XoopsTpl();
885
886
        $hModule      = xoops_getHandler('module');
887
        $versioninfo  =& $hModule->get($xoopsModule->getVar('mid'));
888
        $modfootertxt = 'Module ' . $versioninfo->getInfo('name') . ' - Version ' . $versioninfo->getInfo('version') . '';
889
        $modfooter    = "<a href='" . $versioninfo->getInfo('support_site_url') . "' target='_blank'><img src='" . XOOPS_URL . '/modules/' . $xoopsModule->getVar('dirname') . "/assets/images/cssbutton.gif' title='" . $modfootertxt . "' alt='" . $modfootertxt . "'></a>";
890
        $tpl->assign('modfooter', $modfooter);
891
892
        if (!defined('_AM_SOBJECT_XOOPS_PRO')) {
893
            define('_AM_SOBJECT_XOOPS_PRO', 'Do you need help with this module ?<br>Do you need new features not yet available?');
894
        }
895
        $smartobjectConfig = static::getModuleConfig('smartobject');
0 ignored issues
show
Documentation introduced by
'smartobject' is of type string, but the function expects a boolean.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
896
        $tpl->assign('smartobject_enable_admin_footer', $smartobjectConfig['enable_admin_footer']);
897
        $tpl->display(SMARTOBJECT_ROOT_PATH . 'templates/smartobject_admin_footer.tpl');
898
    }
899
900
    public static function getXoopsCpFooter()
901
    {
902
        static::getModFooter();
903
        xoops_cp_footer();
904
    }
905
906
    /**
907
     * @param $text
908
     * @return mixed
909
     */
910
    public static function sanitizeForCommonTags($text)
911
    {
912
        global $xoopsConfig;
913
        $text = str_replace('{X_SITENAME}', $xoopsConfig['sitename'], $text);
914
        $text = str_replace('{X_ADMINMAIL}', $xoopsConfig['adminmail'], $text);
915
916
        return $text;
917
    }
918
919
    /**
920
     * @param $src
921
     */
922
    public static function addScript($src)
923
    {
924
        echo '<script src="' . $src . '" type="text/javascript"></script>';
925
    }
926
927
    /**
928
     * @param $src
929
     */
930
    public static function addStyle($src)
931
    {
932
        if ('smartobject' === $src) {
933
            $src = SMARTOBJECT_URL . 'assets/css/module.css';
934
        }
935
        echo static::getCssLink($src);
936
    }
937
938
    public static function addAdminAjaxSupport()
939
    {
940
        static::addScript(SMARTOBJECT_URL . 'include/scriptaculous/lib/prototype.js');
941
        static::addScript(SMARTOBJECT_URL . 'include/scriptaculous/src/scriptaculous.js');
942
        static::addScript(SMARTOBJECT_URL . 'include/scriptaculous/src/smart.js');
943
    }
944
945
    /**
946
     * @param $text
947
     * @return mixed
948
     */
949
    public static function sanitizeForSmartpopupLink($text)
950
    {
951
        $patterns[]     = "/\[smartpopup=(['\"]?)([^\"'<>]*)\\1](.*)\[\/smartpopup\]/sU";
0 ignored issues
show
Coding Style Comprehensibility introduced by
$patterns was never initialized. Although not strictly required by PHP, it is generally a good practice to add $patterns = array(); before regardless.

Adding an explicit array definition is generally preferable to implicit array definition as it guarantees a stable state of the code.

Let’s take a look at an example:

foreach ($collection as $item) {
    $myArray['foo'] = $item->getFoo();

    if ($item->hasBar()) {
        $myArray['bar'] = $item->getBar();
    }

    // do something with $myArray
}

As you can see in this example, the array $myArray is initialized the first time when the foreach loop is entered. You can also see that the value of the bar key is only written conditionally; thus, its value might result from a previous iteration.

This might or might not be intended. To make your intention clear, your code more readible and to avoid accidental bugs, we recommend to add an explicit initialization $myArray = array() either outside or inside the foreach loop.

Loading history...
952
        $replacements[] = "<a href=\"javascript:openWithSelfMain('\\2', 'smartpopup', 700, 519);\">\\3</a>";
0 ignored issues
show
Coding Style Comprehensibility introduced by
$replacements was never initialized. Although not strictly required by PHP, it is generally a good practice to add $replacements = array(); before regardless.

Adding an explicit array definition is generally preferable to implicit array definition as it guarantees a stable state of the code.

Let’s take a look at an example:

foreach ($collection as $item) {
    $myArray['foo'] = $item->getFoo();

    if ($item->hasBar()) {
        $myArray['bar'] = $item->getBar();
    }

    // do something with $myArray
}

As you can see in this example, the array $myArray is initialized the first time when the foreach loop is entered. You can also see that the value of the bar key is only written conditionally; thus, its value might result from a previous iteration.

This might or might not be intended. To make your intention clear, your code more readible and to avoid accidental bugs, we recommend to add an explicit initialization $myArray = array() either outside or inside the foreach loop.

Loading history...
953
        $ret            = preg_replace($patterns, $replacements, $text);
954
955
        return $ret;
956
    }
957
958
    /**
959
     * Finds the width and height of an image (can also be a flash file)
960
     *
961
     * @credit phppp
962
     *
963
     * @var    string $url    path of the image file
964
     * @var    string $width  reference to the width
965
     * @var    string $height reference to the height
966
     * @return bool   false if impossible to find dimension
967
     */
968
    public static function getImageSize($url, & $width, & $height)
969
    {
970
        if (empty($width) || empty($height)) {
971
            if (!$dimension = @ getimagesize($url)) {
972
                return false;
973
            }
974
            if (!empty($width)) {
975
                $height = $dimension[1] * $width / $dimension[0];
976
            } elseif (!empty($height)) {
977
                $width = $dimension[0] * $height / $dimension[1];
978
            } else {
979
                list($width, $height) = [
980
                    $dimension[0],
981
                    $dimension[1]
982
                ];
983
            }
984
985
            return true;
986
        } else {
987
            return true;
988
        }
989
    }
990
991
    /**
992
     * Convert characters to decimal values
993
     *
994
     * @author eric.wallet at yahoo.fr
995
     * @link   http://ca.php.net/manual/en/function.htmlentities.php#69913
996
     * @param $str
997
     * @return mixed
998
     */
999
    public static function getHtmlnumericentities($str)
1000
    {
1001
        //    return preg_replace('/[^!-%\x27-;=?-~ ]/e', '"&#".ord("$0").chr(59)', $str);
1002
        return preg_replace_callback('/[^!-%\x27-;=?-~ ]/', function ($m) {
1003
            return '&#' . ord($m[0]) . chr(59);
1004
        }, $str);
1005
    }
1006
1007
    /**
1008
     * @param        $name
1009
     * @param  bool  $optional
1010
     * @return mixed
1011
     */
1012
    public static function getCoreHandler($name, $optional = false)
1013
    {
1014
        static $handlers;
1015
        $name = strtolower(trim($name));
1016
        if (!isset($handlers[$name])) {
1017
            if (file_exists($hnd_file = XOOPS_ROOT_PATH . '/kernel/' . $name . '.php')) {
1018
                require_once $hnd_file;
1019
            }
1020
            $class = 'Xoops' . ucfirst($name) . 'Handler';
1021
            if (class_exists($class)) {
1022
                $handlers[$name] = new $class($GLOBALS['xoopsDB'], 'xoops');
1023
            }
1024
        }
1025
        if (!isset($handlers[$name]) && !$optional) {
1026
            trigger_error('Class <b>' . $class . '</b> does not exist<br>Handler Name: ' . $name, E_USER_ERROR);
0 ignored issues
show
Bug introduced by
The variable $class does not seem to be defined for all execution paths leading up to this point.

If you define a variable conditionally, it can happen that it is not defined for all execution paths.

Let’s take a look at an example:

function myFunction($a) {
    switch ($a) {
        case 'foo':
            $x = 1;
            break;

        case 'bar':
            $x = 2;
            break;
    }

    // $x is potentially undefined here.
    echo $x;
}

In the above example, the variable $x is defined if you pass “foo” or “bar” as argument for $a. However, since the switch statement has no default case statement, if you pass any other value, the variable $x would be undefined.

Available Fixes

  1. Check for existence of the variable explicitly:

    function myFunction($a) {
        switch ($a) {
            case 'foo':
                $x = 1;
                break;
    
            case 'bar':
                $x = 2;
                break;
        }
    
        if (isset($x)) { // Make sure it's always set.
            echo $x;
        }
    }
    
  2. Define a default value for the variable:

    function myFunction($a) {
        $x = ''; // Set a default which gets overridden for certain paths.
        switch ($a) {
            case 'foo':
                $x = 1;
                break;
    
            case 'bar':
                $x = 2;
                break;
        }
    
        echo $x;
    }
    
  3. Add a value for the missing path:

    function myFunction($a) {
        switch ($a) {
            case 'foo':
                $x = 1;
                break;
    
            case 'bar':
                $x = 2;
                break;
    
            // We add support for the missing case.
            default:
                $x = '';
                break;
        }
    
        echo $x;
    }
    
Loading history...
1027
        }
1028
        if (isset($handlers[$name])) {
1029
            return $handlers[$name];
1030
        }
1031
        $inst = false;
0 ignored issues
show
Unused Code introduced by
$inst is not used, you could remove the assignment.

This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.

$myVar = 'Value';
$higher = false;

if (rand(1, 6) > 3) {
    $higher = true;
} else {
    $higher = false;
}

Both the $myVar assignment in line 1 and the $higher assignment in line 2 are dead. The first because $myVar is never used and the second because $higher is always overwritten for every possible time line.

Loading history...
1032
    }
1033
1034
    /**
1035
     * @param $matches
1036
     * @return string
1037
     */
1038
    public static function sanitizeAdsenses_callback($matches)
1039
    {
1040
        global $smartobjectAdsenseHandler;
1041
        if (isset($smartobjectAdsenseHandler->objects[$matches[1]])) {
1042
            $adsenseObj = $smartobjectAdsenseHandler->objects[$matches[1]];
1043
            $ret        = $adsenseObj->render();
1044
1045
            return $ret;
1046
        } else {
1047
            return '';
1048
        }
1049
    }
1050
1051
    /**
1052
     * @param $text
1053
     * @return mixed
1054
     */
1055 View Code Duplication
    public static function sanitizeAdsenses($text)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
1056
    {
1057
        $patterns     = [];
1058
        $replacements = [];
0 ignored issues
show
Unused Code introduced by
$replacements is not used, you could remove the assignment.

This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.

$myVar = 'Value';
$higher = false;

if (rand(1, 6) > 3) {
    $higher = true;
} else {
    $higher = false;
}

Both the $myVar assignment in line 1 and the $higher assignment in line 2 are dead. The first because $myVar is never used and the second because $higher is always overwritten for every possible time line.

Loading history...
1059
1060
        $patterns[] = "/\[adsense](.*)\[\/adsense\]/sU";
1061
        $text       = preg_replace_callback($patterns, 'Smartobject\Utility::sanitizeAdsenses_callback', $text);
1062
1063
        return $text;
1064
    }
1065
1066
    /**
1067
     * @param $matches
1068
     * @return string
1069
     */
1070
    public static function sanitizeCustomtags_callback($matches)
1071
    {
1072
        global $smartobjectCustomtagHandler;
1073
        if (isset($smartobjectCustomtagHandler->objects[$matches[1]])) {
1074
            $customObj = $smartobjectCustomtagHandler->objects[$matches[1]];
1075
            $ret       = $customObj->renderWithPhp();
1076
1077
            return $ret;
1078
        } else {
1079
            return '';
1080
        }
1081
    }
1082
1083
    /**
1084
     * @param $text
1085
     * @return mixed
1086
     */
1087 View Code Duplication
    public static function sanitizeCustomtags($text)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
1088
    {
1089
        $patterns     = [];
1090
        $replacements = [];
0 ignored issues
show
Unused Code introduced by
$replacements is not used, you could remove the assignment.

This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.

$myVar = 'Value';
$higher = false;

if (rand(1, 6) > 3) {
    $higher = true;
} else {
    $higher = false;
}

Both the $myVar assignment in line 1 and the $higher assignment in line 2 are dead. The first because $myVar is never used and the second because $higher is always overwritten for every possible time line.

Loading history...
1091
1092
        $patterns[] = "/\[customtag](.*)\[\/customtag\]/sU";
1093
        $text       = preg_replace_callback($patterns, 'Smartobject\Utility::sanitizeCustomtags_callback', $text);
1094
1095
        return $text;
1096
    }
1097
1098
    /**
1099
     * @param $module
1100
     * @param $file
1101
     */
1102
    public static function loadLanguageFile($module, $file)
1103
    {
1104
        global $xoopsConfig;
1105
1106
        $filename = XOOPS_ROOT_PATH . '/modules/' . $module . '/language/' . $xoopsConfig['language'] . '/' . $file . '.php';
1107
        if (!file_exists($filename)) {
1108
            $filename = XOOPS_ROOT_PATH . '/modules/' . $module . '/language/english/' . $file . '.php';
1109
        }
1110
        if (file_exists($filename)) {
1111
            require_once $filename;
1112
        }
1113
    }
1114
1115
    public static function loadCommonLanguageFile()
1116
    {
1117
        static::loadLanguageFile('smartobject', 'common');
1118
    }
1119
1120
    /**
1121
     * @param               $text
1122
     * @param  bool         $keyword
1123
     * @return mixed|string
1124
     */
1125
    public static function purifyText($text, $keyword = false)
1126
    {
1127
        global $myts;
1128
        $text = str_replace('&nbsp;', ' ', $text);
1129
        $text = str_replace('<br>', ' ', $text);
1130
        $text = str_replace('<br>', ' ', $text);
1131
        $text = str_replace('<br', ' ', $text);
1132
        $text = strip_tags($text);
1133
        $text = html_entity_decode($text);
1134
        $text = $myts->undoHtmlSpecialChars($text);
1135
        $text = str_replace(')', ' ', $text);
1136
        $text = str_replace('(', ' ', $text);
1137
        $text = str_replace(':', ' ', $text);
1138
        $text = str_replace('&euro', ' euro ', $text);
1139
        $text = str_replace('&hellip', '...', $text);
1140
        $text = str_replace('&rsquo', ' ', $text);
1141
        $text = str_replace('!', ' ', $text);
1142
        $text = str_replace('?', ' ', $text);
1143
        $text = str_replace('"', ' ', $text);
1144
        $text = str_replace('-', ' ', $text);
1145
        $text = str_replace('\n', ' ', $text);
1146
        $text = str_replace('&#8213;', ' ', $text);
1147
1148
        if ($keyword) {
1149
            $text = str_replace('.', ' ', $text);
1150
            $text = str_replace(',', ' ', $text);
1151
            $text = str_replace('\'', ' ', $text);
1152
        }
1153
        $text = str_replace(';', ' ', $text);
1154
1155
        return $text;
1156
    }
1157
1158
    /**
1159
     * @param $document
1160
     * @return mixed
1161
     */
1162
    public static function getHtml2text($document)
1163
    {
1164
        // PHP Manual:: function preg_replace
1165
        // $document should contain an HTML document.
1166
        // This will remove HTML tags, javascript sections
1167
        // and white space. It will also convert some
1168
        // common HTML entities to their text equivalent.
1169
        // Credits: newbb2
1170
        $search = [
1171
            "'<script[^>]*?>.*?</script>'si", // Strip out javascript
1172
            "'<img.*?>'si", // Strip out img tags
1173
            "'<[\/\!]*?[^<>]*?>'si", // Strip out HTML tags
1174
            "'([\r\n])[\s]+'", // Strip out white space
1175
            "'&(quot|#34);'i", // Replace HTML entities
1176
            "'&(amp|#38);'i",
1177
            "'&(lt|#60);'i",
1178
            "'&(gt|#62);'i",
1179
            "'&(nbsp|#160);'i",
1180
            "'&(iexcl|#161);'i",
1181
            "'&(cent|#162);'i",
1182
            "'&(pound|#163);'i",
1183
            "'&(copy|#169);'i"
1184
        ]; // evaluate as php
1185
1186
        $replace = [
1187
            '',
1188
            '',
1189
            '',
1190
            "\\1",
1191
            '"',
1192
            '&',
1193
            '<',
1194
            '>',
1195
            ' ',
1196
            chr(161),
1197
            chr(162),
1198
            chr(163),
1199
            chr(169),
1200
        ];
1201
1202
        $text = preg_replace($search, $replace, $document);
1203
1204
        preg_replace_callback('/&#(\d+);/', function ($matches) {
1205
            return chr($matches[1]);
1206
        }, $document);
1207
1208
        return $text;
1209
    }
1210
1211
    /**
1212
     * @author pillepop2003 at yahoo dot de
1213
     *
1214
     * Use this snippet to extract any float out of a string. You can choose how a single dot is treated with the (bool) 'single_dot_as_decimal' directive.
1215
     * This function should be able to cover almost all floats that appear in an european environment.
1216
     * @param            $str
1217
     * @param  bool      $set
1218
     * @return float|int
1219
     */
1220
    public static function getFloat($str, $set = false)
1221
    {
1222
        if (preg_match("/([0-9\.,-]+)/", $str, $match)) {
1223
            // Found number in $str, so set $str that number
1224
            $str = $match[0];
1225
            if (false !== strpos($str, ',')) {
1226
                // A comma exists, that makes it easy, cos we assume it separates the decimal part.
1227
                $str = str_replace('.', '', $str);    // Erase thousand seps
1228
                $str = str_replace(',', '.', $str);    // Convert , to . for floatval command
1229
1230
                return (float)$str;
1231
            } else {
1232
                // No comma exists, so we have to decide, how a single dot shall be treated
1233
                if (true === preg_match("/^[0-9\-]*[\.]{1}[0-9-]+$/", $str) && true === $set['single_dot_as_decimal']) {
1234
                    // Treat single dot as decimal separator
1235
                    return (float)$str;
1236
                } else {
1237
                    //echo "str: ".$str; echo "ret: ".str_replace('.', '', $str); echo "<br><br> ";
1238
                    // Else, treat all dots as thousand seps
1239
                    $str = str_replace('.', '', $str);    // Erase thousand seps
1240
1241
                    return (float)$str;
1242
                }
1243
            }
1244
        } else {
1245
            // No number found, return zero
1246
            return 0;
1247
        }
1248
    }
1249
1250
    /**
1251
     * @param                         $var
1252
     * @param  bool                   $currencyObj
1253
     * @return float|int|mixed|string
1254
     */
1255
    public static function getCurrency($var, $currencyObj = false)
1256
    {
1257
        $ret = static::getFloat($var, ['single_dot_as_decimal' => true]);
0 ignored issues
show
Documentation introduced by
array('single_dot_as_decimal' => true) is of type array<string,boolean,{"s...as_decimal":"boolean"}>, but the function expects a boolean.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
1258
        $ret = round($ret, 2);
1259
        // make sur we have at least .00 in the $var
1260
        $decimal_section_original = strstr($ret, '.');
1261
        $decimal_section          = $decimal_section_original;
1262 View Code Duplication
        if ($decimal_section) {
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated across your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
1263
            if (1 == strlen($decimal_section)) {
1264
                $decimal_section = '.00';
1265
            } elseif (2 == strlen($decimal_section)) {
1266
                $decimal_section .= '0';
1267
            }
1268
            $ret = str_replace($decimal_section_original, $decimal_section, $ret);
1269
        } else {
1270
            $ret .= '.00';
1271
        }
1272
        if ($currencyObj) {
1273
            $ret = $ret . ' ' . $currencyObj->getCode();
0 ignored issues
show
Bug introduced by
The method getCode cannot be called on $currencyObj (of type boolean).

Methods can only be called on objects. This check looks for methods being called on variables that have been inferred to never be objects.

Loading history...
1274
        }
1275
1276
        return $ret;
1277
    }
1278
1279
    /**
1280
     * @param $var
1281
     * @return float|int|mixed|string
1282
     */
1283
    public static function float($var)
1284
    {
1285
        return static::getCurrency($var);
1286
    }
1287
1288
    /**
1289
     * @param  bool $moduleName
1290
     * @return string
1291
     */
1292
    public static function getModuleAdminLink($moduleName = false)
1293
    {
1294
        global $xoopsModule;
1295
        if (!$moduleName && (isset($xoopsModule) && is_object($xoopsModule))) {
1296
            $moduleName = $xoopsModule->getVar('dirname');
1297
        }
1298
        $ret = '';
1299
        if ($moduleName) {
1300
            $ret = "<a href='" . XOOPS_URL . "/modules/$moduleName/admin/index.php'>" . _CO_SOBJECT_ADMIN_PAGE . '</a>';
1301
        }
1302
1303
        return $ret;
1304
    }
1305
1306
    /**
1307
     * @return array|bool
1308
     */
1309
    public static function getEditors()
1310
    {
1311
        $filename = XOOPS_ROOT_PATH . '/class/xoopseditor/xoopseditor.php';
1312
        if (!file_exists($filename)) {
1313
            return false;
1314
        }
1315
        require_once $filename;
1316
        $xoopseditorHandler = \XoopsEditorHandler::getInstance();
1317
        $aList              = $xoopseditorHandler->getList();
1318
        $ret                = [];
1319
        foreach ($aList as $k => $v) {
1320
            $ret[$v] = $k;
1321
        }
1322
1323
        return $ret;
1324
    }
1325
1326
    /**
1327
     * @param $moduleName
1328
     * @param $items
1329
     * @return array
1330
     */
1331
    public static function getTablesArray($moduleName, $items)
1332
    {
1333
        $ret = [];
1334
        foreach ($items as $item) {
1335
            $ret[] = $moduleName . '_' . $item;
1336
        }
1337
        $ret[] = $moduleName . '_meta';
1338
1339
        return $ret;
1340
    }
1341
    
1342
    
1343
}
1344