Completed
Push — master ( 8e591c...fd0c8a )
by
unknown
04:42 queued 02:15
created

functions.php ➔ smallworld_tolink()   A

Complexity

Conditions 4
Paths 3

Size

Total Lines 37

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 4
nc 3
nop 2
dl 0
loc 37
rs 9.328
c 0
b 0
f 0
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
/**
13
 * SmallWorld
14
 *
15
 * @package      \XoopsModules\Smallworld
16
 * @license      GNU GPL (https://www.gnu.org/licenses/gpl-2.0.html/)
17
 * @copyright    The XOOPS Project (https://xoops.org)
18
 * @copyright    2011 Culex
19
 * @author       Michael Albertsen (http://culex.dk) <[email protected]>
20
 * @link         https://github.com/XoopsModules25x/smallworld
21
 * @since        1.0
22
 */
23
24
use Xmf\FilterInput;
25
use XoopsModules\Smallworld;
26
use XoopsModules\Smallworld\Constants;
27
use XoopsModules\Smallworld\Helper;
28
29
//require_once __DIR__ . '/common.php';
30
include dirname(__DIR__) . '/preloads/autoloader.php';
31
32
/**
33
 * Get array of timestamps based on the timetype configured in preferences
34
 *
35
 * @return array
36
 */
37
function SmallworldGetTimestampsToForm()
38
{
39
    $timearray = []; // init time array
40
    $end       = date('Y');
41
    $start     = $end - 120; // set to 120 years ago
42
    for ($i = $start; $i <= $end; ++$i) {
43
        $timearray[$i] = $i;
44
    }
45
    ksort($timearray);
46
47
    return $timearray;
48
}
49
50
/**
51
 * Clean vars or arrays
52
 *
53
 * If array check for magicQuotes.
54
 * Pass string to XoopsModules\Smallworld\MyFunctions\cleanupString function
55
 *
56
 * @param array|string $text
57
 * @return array|mixed
58
 */
59
function smallworld_cleanup($text)
60
{
61
    if (is_array($text)) {
62
        foreach ($text as $key => $value) {
63
            $text[$key] = smallworld_cleanup_string($value);
64
        }
65
    } else {
66
        $text = smallworld_cleanup_string($text);
67
    }
68
69
    return $text;
70
}
71
72
/**
73
 * Sanitize string
74
 *
75
 * @param $text
76
 * @return mixed
77
 */
78
function smallworld_cleanup_string($text)
79
{
80
    /** @var \MyTextSanitizer $myts */
81
    $myts = \MyTextSanitizer::getInstance();
82
    $text = $myts->displayTarea($text, $html = 1, $smiley = 1, $xcode = 1, $image = 1, $br = 1);
83
84
    return $text;
85
}
86
87
/**
88
 * Clean Array for mysql insertion
89
 *
90
 * @param string|array $text
91
 * @return string|array
92
 */
93
function smallworld_sanitize($text)
94
{
95
    $retVal = [];
96
    if (is_array($text) && 0 < count($text)) {
97
        foreach ($text as $key => $value) {
98
            $retVal[$key] = smallworld_sanitize_string($value);
99
        }
100
    } else {
101
        $retVal = smallworld_sanitize_string($text);
102
    }
103
104
    return $retVal;
105
}
106
107
/**
108
 * Santize string for insert into dB
109
 *
110
 * @param $value
111
 * @return mixed
112
 */
113
function smallworld_sanitize_string($value)
114
{
115
    return $GLOBALS['xoopsDB']->escape($value);
116
}
117
118
/**
119
 * @deprecated
120
 *
121
 * @param $array
122
 * @return array
123
 */
124
function smallworld_DateOfArray($array)
125
{
126
    $data = [];
127
    foreach ($array as $k => $v) {
128
        $data[$k] = strtotime($v);
129
    }
130
131
    return $data;
132
}
133
134
/**
135
 * YearOfArray
136
 *
137
 * @todo - figure out what this is suppose to do,
138
 * currently it doesn't really do anything.
139
 *
140
 * @param $array
141
 * @return array
142
 */
143
function smallworld_YearOfArray($array)
144
{
145
    $data = [];
146
    foreach ($array as $k => $v) {
147
        $data[$k] = $v;
148
    }
149
150
    return $data;
151
}
152
153
/**
154
 * Create an index file in
155
 *
156
 * @deprecated - no longer used
157
 * @param $folderUrl
158
 */
159
function smallworld_CreateIndexFiles($folder)
160
{
161
    file_put_contents($folder . 'index.html', '<script>history.go(-1);</script>');
162
}
163
164
/**
165
 * @deprecated
166
 * @param string $glue
167
 * @param array  $pieces
168
 * @return string
169
 */
170
function smallworld_ImplodeArray($glue, $pieces)
171
{
172
    return implode($glue, $pieces);
173
}
174
175
/** Recursively reduces deep arrays to single-dimensional arrays
176
 *
177
 * $preserve_keys: (0=>never, 1=>strings, 2=>always)
178
 *
179
 * @param       $array
180
 * @param int   $preserve_keys
181
 * @param array $newArray
182
 * @return array
183
 */
184
function smallworld_array_flatten($array, $preserve_keys = 1, &$newArray = [])
185
{
186
    foreach ($array as $key => $child) {
187
        if (is_array($child)) {
188
            $newArray = smallworld_array_flatten($child, $preserve_keys, $newArray);
189
        } elseif ($preserve_keys + is_string($key) > 1) {
190
            $newArray[$key] = $child;
191
        } else {
192
            $newArray[] = $child;
193
        }
194
    }
195
196
    return $newArray;
197
}
198
199
/*
200
 * Calculate years from date format (YYYY-MM-DD)
201
 *
202
 * @param string $birth
203
 * @return int
0 ignored issues
show
Documentation introduced by
Should the return type not be integer|double?

This check compares the return type specified in the @return annotation of a function or method doc comment with the types returned by the function and raises an issue if they mismatch.

Loading history...
204
 */
205
function smallworld_Birthday($birth)
206
{
207
    list($year, $month, $day) = explode('-', $birth);
208
    $yearDiff  = date('Y') - $year;
209
    $monthDiff = date('m') - $month;
210
    $dayDiff   = date('d') - $day;
211
    if (0 == $monthDiff) {
212
        if ($dayDiff < 0) {
213
            $yearDiff--;
214
        }
215
    }
216
    if ($monthDiff < 0) {
217
        $yearDiff--;
218
    }
219
220
    return $yearDiff;
221
}
222
223
/**
224
 * Get SW userid from username
225
 *
226
 * @deprecated - use Smallworld\SwUserHandler::getByName() method instead
227
 * @param $check
228
 * @return bool|int
229
 */
230
function smallworld_isset_or($check)
231
{
232
    $depMsg = __FUNCTION__ . " is deprecated, use SwUserHandler::getByName() instead";
233 View Code Duplication
    if (isset($GLOBALS['xoopsLogger'])) {
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...
234
        $GLOBALS['xoopsLogger']->addDeprecated($depMsg);
235
    } else {
236
        trigger_error($depMsg, E_USER_WARNING);
237
    }
238
    $query  = 'SELECT * FROM ' . $GLOBALS['xoopsDB']->prefix('smallworld_user') . " WHERE username = '" . $check . "' LIMIT 1";
239
    $result = $GLOBALS['xoopsDB']->queryF($query);
240
    while (false !== ($row = $GLOBALS['xoopsDB']->fetchArray($result))) {
241
        if ('' == $row['userid']) {
242
            return false;
243
        }
244
245
        return $row['userid'];
246
    }
247
}
248
249
//Srinivas Tamada http://9lessons.info
250
//Loading Comments link with load_updates.php
251
/**
252
 * @param $session_time
253
 * @return string
254
 */
255
function smallworld_time_stamp($session_time)
256
{
257
    $time_difference = time() - $session_time;
258
    $seconds         = $time_difference;
259
    $minutes         = round($time_difference / 60);
260
    $hours           = round($time_difference / 3600);
261
    $days            = round($time_difference / 86400);
262
    $weeks           = round($time_difference / 604800);
263
    $months          = round($time_difference / 2419200);
264
    $years           = round($time_difference / 29030400);
265
    if ($seconds <= 60) {
266
        $t = (string)$seconds . _SMALLWORLD_SECONDSAGO;
267
    } elseif ($minutes <= 60) {
268
        if (1 == $minutes) {
269
            $t = _SMALLWORLD_ONEMINUTEAGO;
270
        } else {
271
            $t = (string)$minutes . _SMALLWORLD_MINUTESAGO;
272
        }
273
    } elseif ($hours <= 24) {
274
        if (1 == $hours) {
275
            $t = _SMALLWORLD_ONEHOURAGO;
276
        } else {
277
            $t = (string)$hours . _SMALLWORLD_HOURSAGO;
278
        }
279
    } elseif ($days <= 7) {
280
        if (1 == $days) {
281
            $t = _SMALLWORLD_ONEDAYAGO;
282
        } else {
283
            $t = (string)$days . _SMALLWORLD_DAYSAGO;
284
        }
285
    } elseif ($weeks <= 4) {
286
        if (1 == $weeks) {
287
            $t = _SMALLWORLD_ONEWEEKAGO;
288
        } else {
289
            $t = (string)$weeks . _SMALLWORLD_WEEKSAGO;
290
        }
291
    } elseif ($months <= 12) {
292
        if (1 == $months) {
293
            $t = _SMALLWORLD_ONEMONTHAGO;
294
        } else {
295
            $t = (string)$months . _SMALLWORLD_MONTHSAGO;
296
        }
297
    } else {
298
        if (1 == $years) {
299
            $t = _SMALLWORLD_ONEYEARAGO;
300
        } else {
301
            $t = (string)$years . _SMALLWORLD_YEARSAGO;
302
        }
303
    }
304
305
    return $t;
306
}
307
308
/**
309
 * Return only url/link
310
 *
311
 * if url is image link return <img>
312
 *
313
 * @param string $text
314
 * @param int $uid user id
315
 * @return string
316
 */
317
function smallworld_tolink($text, $uid)
318
{
319
    $ext        = mb_substr($text, -4, 4);
320
    $ext2       = mb_substr($text, -5, 5);
321
    $xUser      = new \XoopsUser($uid);
322
    $xUserUname = $xUser->uname();
323
    $gallery    = \XoopsModules\Smallworld\Helper::getInstance()->url('galleryshow.php?username=' . $xUserUname());
324
325
    if (in_array(strtolower($ext), ['.jpg', '.bmp', '.gif', '.png']) || in_array(strtolower($ext2), ['.jpeg'])) {
326
        if (false !== mb_strpos($text, 'UPLIMAGE')) {
327
            $text = str_replace('UPLIMAGE', '', $text);
328
            $text = preg_replace(
329
                '/(((f|ht){1}tp:\/\/)[-a-zA-Z0-9@:%_\+.~#?&\/\/=]+)/i',
330
                '<span class="smallworldUplImgTxt"><br><img class="smallworldAttImg" src="\\1"><br><br><a id="smallworldUplImgLnk" href="' . $gallery . '" target="_SELF">' . $xUserUname . _SMALLWORLD_UPLOADEDSOMEIMAGES . '</a><br></span>',
331
                $text
332
            );
333
            $text = preg_replace('/(((f|ht){1}tps:\/\/)[-a-zA-Z0-9@:%_\+.~#?&\/\/=]+)/i', '<a href="\\1">lala</a>', $text);
334
            $text = preg_replace(
335
                '/([[:space:]()[{}])(www.[-a-zA-Z0-9@:%_\+.~#?&\/\/=]+)/i',
336
                '\\1<span class="smallworldUplImgTxt"><br><img class="smallworldAttImg" src="//\\2"><br><br><a id="smallworldUplImgLnk" href="' . $gallery . '" target="_SELF">' . $xUserUname . _SMALLWORLD_UPLOADEDSOMEIMAGES . '</a><br></span>',
337
                $text
338
            );
339
            $text = html_entity_decode($text, ENT_QUOTES, 'UTF-8');
340
        } else {
341
            $text = preg_replace('/(((f|ht){1}tp:\/\/)[-a-zA-Z0-9@:%_\+.~#?&\/\/=]+)/i', '<img class="smallworldAttImg" src="\\1"><a class="smallworldAttImgTxt" href="\\1">' . _SMALLWORLD_CLICKIMAGETHUMB . ' </a><br>', $text);
342
            $text = preg_replace('/(((f|ht){1}tps:\/\/)[-a-zA-Z0-9@:%_\+.~#?&\/\/=]+)/i', '<img class="smallworldAttImg" src="\\1"><a class="smallworldAttImgTxt" href="\\1">' . _SMALLWORLD_CLICKIMAGETHUMB . ' </a><br>', $text);
343
            $text = preg_replace('/([[:space:]()[{}])(www.[-a-zA-Z0-9@:%_\+.~#?&\/\/=]+)/i', '\\1<img class="smallworldAttImg" src="//\\2"><a class="smallworldAttImgTxt" href="//\\2">' . _SMALLWORLD_CLICKIMAGETHUMB . '</a><br>', $text);
344
            $text = html_entity_decode($text, ENT_QUOTES, 'UTF-8');
345
        }
346
    } else {
347
        $text = html_entity_decode($text, ENT_QUOTES, 'UTF-8');
348
        $text = ' ' . $text;
349
        $text = str_replace('UPLIMAGE', '', $text);
350
    }
351
352
    return linkify_twitter_status($text);
353
}
354
355
/**
356
 * @param $text
357
 * @return mixed
358
 */
359
function smallworld_stripWordsKeepUrl($text)
360
{
361
    preg_replace('/(((f|ht){1}tps:\/\/)[-a-zA-Z0-9@:%_\+.~#?&\/\/=]+)/i', '<div class=".embed"><a href="\\1">\\1</a></div>', $text);
362
363
    return $text;
364
}
365
366
/**
367
 * Get social image and link HTML
368
 *
369
 * @param int $num
370
 * @param string $name
371
 * @return string
372
 */
373
function smallworld_sociallinks($num, $name)
374
{
375
    /** @var \XoopsModules\Smallworld\Helper $helper */
376
    $helper = Helper::getInstance();
377
    switch ($num) {
378 View Code Duplication
        case 0:
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...
379
            $image = '<img title="Msn" id="Smallworld_socialnetworkimg" src="' . $helper->url('assets/images/socialnetworkicons/msn.png') . '">';
380
            $link  = '<a title="Msn" id="Smallworld_socialnetwork" target="_blank" href="http://members.msn.com/' . $name . '">';
381
            break;
382 View Code Duplication
        case 1:
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...
383
            $image = '<img title="facebook" id="Smallworld_socialnetworkimg" src="' . $helper->url('assets/images/socialnetworkicons/facebook.png') . '">';
384
            $link  = '<a title="facebook" id="Smallworld_socialnetwork" target="_blank" href="http://www.facebook.com/' . $name . '">';
385
            break;
386 View Code Duplication
        case 2:
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...
387
            $image = '<img title="GooglePlus" id="Smallworld_socialnetworkimg" src="' . $helper->url('assets/images/socialnetworkicons/googleplus.png') . '">';
388
            $link  = '<a title="GooglePlus" id="Smallworld_socialnetwork" target="_blank" href="https://plus.google.com/' . $name . '">';
389
            break;
390 View Code Duplication
        case 3:
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...
391
            $image = '<img title="icq" id="Smallworld_socialnetworkimg" src="' . $helper->url('assets/images/socialnetworkicons/icq.png') . '">';
392
            $link  = '<a title="icq" id="Smallworld_socialnetwork" target="_blank" href="http://www.icq.com/people/' . $name . '/">';
393
            break;
394 View Code Duplication
        case 4:
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...
395
            $image = '<img title="Skype" id="Smallworld_socialnetworkimg" src="' . $helper->url('assets/images/socialnetworkicons/skype.png') . '">';
396
            $link  = '<a title="Skype" id="Smallworld_socialnetwork" target="_blank" href="skype:' . $name . '?userinfo">';
397
            break;
398 View Code Duplication
        case 5:
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...
399
            $image = '<img title="Twitter" id="Smallworld_socialnetworkimg" src="' . $helper->url('assets/images/socialnetworkicons/twitter.png') . '">';
400
            $link  = '<a title="Twitter" id="Smallworld_socialnetwork" target="_blank" href="http://twitter.com/#!/' . $name . '">';
401
            break;
402 View Code Duplication
        case 6:
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...
403
            $image = '<img title="MySpace" id="Smallworld_socialnetworkimg" src="' . $helper->url('assets/images/socialnetworkicons/myspace.png') . '">';
404
            $link  = '<a title="MySpace" id="Smallworld_socialnetwork" target="_blank" href="http://www.myspace.com/' . $name . '">';
405
            break;
406 View Code Duplication
        case 7:
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...
407
            $image = '<img title="XOOPS" id="Smallworld_socialnetworkimg" src="' . $helper->url('assets/images/socialnetworkicons/xoops.png') . '">';
408
            $link  = '<a title="XOOPS" id="Smallworld_socialnetwork" target="_blank" href="https://xoops.org/modules/profile/userinfo.php?uid=' . $name . '">';
409
            break;
410 View Code Duplication
        case 8:
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...
411
            $image = '<img title="Yahoo Messenger" id="Smallworld_socialnetworkimg" src="' . $helper->url('assets/images/socialnetworkicons/yahoo.png') . '">';
412
            $link  = '<a title="Yahoo Messenger" id="Smallworld_socialnetwork" target="_blank" href="ymsgr:sendim?' . $name . '">';
413
            break;
414 View Code Duplication
        case 9:
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...
415
            $image = '<img title="Youtube" id="Smallworld_socialnetworkimg" src="' . $helper->url('assets/images/socialnetworkicons/youtube.png') . '">';
416
            $link  = '<a title="Youtube" id="Smallworld_socialnetwork" target="_blank" href="http://www.youtube.com/user/' . $name . '">';
417
            break;
418
    }
419
420
    return $image . $link;
0 ignored issues
show
Bug introduced by
The variable $image 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...
Bug introduced by
The variable $link 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...
421
}
422
423
/**
424
 * @param string $option name of config option to read
0 ignored issues
show
Documentation introduced by
Should the type for parameter $option not be string|null?

This check looks for @param annotations where the type inferred by our type inference engine differs from the declared type.

It makes a suggestion as to what type it considers more descriptive.

Most often this is a case of a parameter that can be null in addition to its declared types.

Loading history...
425
 * @param string $repmodule name of module
426
 * @param bool   $flushFirst true causes configs to be loaded again, false read from cache
427
 * @return bool|mixed
428
 */
429
function smallworld_GetModuleOption($option = null, $repmodule = 'smallworld', $flushFirst = false)
430
{
431
    static $modOptions = [];
432
    if ($flushFirst) { // clears the 'cache', forces reload of configs
433
        $modOptions = [];
434
    }
435
    if (!array_key_exists($repmodule, $modOptions)) {
436
        //this module's options aren't set
437
        $modHelper = Helper::getInstance()->getHelper($repmodule);
438
        if (!$modHelper instanceof \Xmf\Module\Helper) { // check to see if module is installed & active
0 ignored issues
show
Bug introduced by
The class Xmf\Module\Helper does not exist. Did you forget a USE statement, or did you not list all dependencies?

This error could be the result of:

1. Missing dependencies

PHP Analyzer uses your composer.json file (if available) to determine the dependencies of your project and to determine all the available classes and functions. It expects the composer.json to be in the root folder of your repository.

Are you sure this class is defined by one of your dependencies, or did you maybe not list a dependency in either the require or require-dev section?

2. Missing use statement

PHP does not complain about undefined classes in ìnstanceof checks. For example, the following PHP code will work perfectly fine:

if ($x instanceof DoesNotExist) {
    // Do something.
}

If you have not tested against this specific condition, such errors might go unnoticed.

Loading history...
439
            return null;
440
        }
441
        // first time to get configs for this module so read them all into an array
442
        $modOptions[$repmodule] = $modHelper->getConfig();
443
        // now return the specific config/option requested
444 View Code Duplication
        if (null == $option) { // return the array if no specific option was requested
0 ignored issues
show
Bug introduced by
It seems like you are loosely comparing $option of type string|null against null; this is ambiguous if the string can be empty. Consider using a strict comparison === instead.
Loading history...
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...
445
            return $modOptions[$repmodule];
446
        } elseif (isset($modOptions[$repmodule][$option])) {
447
            return $modOptions[$repmodule][$option];
448
        } else {
449
            return null;
450
        }
451 View Code Duplication
    } else {
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...
452
        // module options are in 'cache' so see if the one requested is valid
453
        if (null == $option) { // return the array if no specific option was requested
0 ignored issues
show
Bug introduced by
It seems like you are loosely comparing $option of type string|null against null; this is ambiguous if the string can be empty. Consider using a strict comparison === instead.
Loading history...
454
            return $modOptions[$repmodule];
455
        } elseif (isset($modOptions[$repmodule][$option])) {
456
            return $modOptions[$repmodule][$option];
457
        } else {
458
            return null;
459
        }
460
    }
461
462
    return null;
0 ignored issues
show
Unused Code introduced by
return null; does not seem to be reachable.

This check looks for unreachable code. It uses sophisticated control flow analysis techniques to find statements which will never be executed.

Unreachable code is most often the result of return, die or exit statements that have been added for debug purposes.

function fx() {
    try {
        doSomething();
        return true;
    }
    catch (\Exception $e) {
        return false;
    }

    return false;
}

In the above example, the last return false will never be executed, because a return statement has already been met in every possible execution path.

Loading history...
463
/*
464
    static $tbloptions = [];
465
    if (is_array($tbloptions) && array_key_exists($option, $tbloptions)) {
466
        return $tbloptions[$option];
467
    }
468
    $retval = false;
469
    if (isset($GLOBALS['xoopsModuleConfig']) && (is_object($GLOBALS['xoopsModule']) && $GLOBALS['xoopsModule']->getVar('dirname') == $repmodule && $GLOBALS['xoopsModule']->getVar('isactive'))) {
470
        if (isset($GLOBALS['xoopsModuleConfig'][$option])) {
471
            $retval = $GLOBALS['xoopsModuleConfig'][$option];
472
        }
473
    } else {
474
        $moduleHandler = xoops_getHandler('module');
475
        $module        = $moduleHandler->getByDirname($repmodule);
476
        $configHandler = xoops_getHandler('config');
477
        if ($module) {
478
            $moduleConfig = $configHandler->getConfigsByCat(0, $module->getVar('mid'));
479
            if (isset($moduleConfig[$option])) {
480
                $retval = $moduleConfig[$option];
481
            }
482
        }
483
    }
484
    $tbloptions[$option] = $retval;
485
486
    return $retval;
487
    */
488
}
489
490
/**
491
 * Check image extension and users gender.
492
 *
493
 * If image is legal image extension return avatar, else return default gender based image
494
 * @deprecated
495
 * @param int    $userid
496
 * @param string $image
497
 * @return string
498
 */
499
function smallworld_getAvatarLink($userid, $image)
500
{
501
    $depMsg = __FUNCTION__ . " is deprecated use SwUserHandler::getAvatarLink() instead.";
502 View Code Duplication
    if (isset($GLOBALS['xoopsLogger'])) {
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...
503
        $GLOBALS['xoopsLogger']->addDeprecated($depMsg);
504
    } else {
505
        trigger_error($depMsg, E_USER_WARNING);
506
    }
507
    $ext     = pathinfo(mb_strtolower($image), PATHINFO_EXTENSION);
508
    $sql     = 'SELECT gender FROM ' . $GLOBALS['xoopsDB']->prefix('smallworld_user') . " WHERE userid = '" . (int)$userid . "'";
509
    $result  = $GLOBALS['xoopsDB']->queryF($sql);
510
    //$counter = $GLOBALS['xoopsDB']->getRowsNum($result);
511
    $gender  = Constants::GENDER_UNKNOWN;
512
    while (false !== ($row = $GLOBALS['xoopsDB']->fetchArray($result))) {
513
        $gender = $row['gender'];
514
    }
515
516
    if (preg_match('/avatars/i', $image)) {
517
        $link = XOOPS_UPLOAD_URL . '/' . $image;
518
    } else {
519
        $link = $image;
520
    }
521
522 View Code Duplication
    if (in_array($ext, ['jpg', 'bmp', 'gif', 'png', 'jpeg']) || '' == $image || 'blank.gif' == $image) {
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...
523
        switch ($gender) {
524
            case Constants::FEMALE:
525
                $pict = 'ano_woman.png';
526
                break;
527
            case Constants::MALE:
528
                $pict = 'ano_man.png';
529
                break;
530
            case Constants::GENDER_UNKNOWN:
531
            default:
532
                $pict = 'genderless.png';
533
                break;
534
        }
535
        $link = Helper::getInstance()->url("assets/images/{$pict}");
536
    }
537
538
    return $link;
539
}
540
541
/**
542
 * Check if Xim module is installed and active
543
 *
544
 * @return bool
545
 */
546
function smallworld_checkForXim()
547
{
548
    $ximHelper = Helper::getInstance()->getHelper('xim');
549
550
    return ($ximHelper instanceof \Xmf\Module\Helper) ? true : false;
0 ignored issues
show
Bug introduced by
The class Xmf\Module\Helper does not exist. Did you forget a USE statement, or did you not list all dependencies?

This error could be the result of:

1. Missing dependencies

PHP Analyzer uses your composer.json file (if available) to determine the dependencies of your project and to determine all the available classes and functions. It expects the composer.json to be in the root folder of your repository.

Are you sure this class is defined by one of your dependencies, or did you maybe not list a dependency in either the require or require-dev section?

2. Missing use statement

PHP does not complain about undefined classes in ìnstanceof checks. For example, the following PHP code will work perfectly fine:

if ($x instanceof DoesNotExist) {
    // Do something.
}

If you have not tested against this specific condition, such errors might go unnoticed.

Loading history...
551
    /*
552
    $filename = XOOPS_ROOT_PATH . '/modules/xim/chat.php';
553
    if (file_exists($filename)) {
554
        return true;
555
    }
556
557
    return false;
558
    */
559
}
560
561
/**
562
 * Get version number of xim module if exists
563
 *
564
 * @return int $version returns 0 if not found
565
 */
566
function smallworld_XIMversion()
567
{
568
    $version   = 0; // init version var
569
    $ximHelper = Helper::getInstance()->getHelper('xim');
570
    if ($ximHelper instanceof \Xmf\Module\Helper) {
0 ignored issues
show
Bug introduced by
The class Xmf\Module\Helper does not exist. Did you forget a USE statement, or did you not list all dependencies?

This error could be the result of:

1. Missing dependencies

PHP Analyzer uses your composer.json file (if available) to determine the dependencies of your project and to determine all the available classes and functions. It expects the composer.json to be in the root folder of your repository.

Are you sure this class is defined by one of your dependencies, or did you maybe not list a dependency in either the require or require-dev section?

2. Missing use statement

PHP does not complain about undefined classes in ìnstanceof checks. For example, the following PHP code will work perfectly fine:

if ($x instanceof DoesNotExist) {
    // Do something.
}

If you have not tested against this specific condition, such errors might go unnoticed.

Loading history...
571
        $version = $ximHelper->getModule()->version();
572
    }
573
    /*
574
    $sql    = 'SELECT version FROM ' . $GLOBALS['xoopsDB']->prefix('modules') . " WHERE dirname = 'xim'";
575
    $result = $GLOBALS['xoopsDB']->queryF($sql);
576
    if ($GLOBALS['xoopsDB']->getRowsNum($result) > 0) {
577
        while (false !== ($r = $GLOBALS['xoopsDB']->fetchArray($result))) {
578
            $version = $r['version'];
579
        }
580
    } else {
581
        $version = 0;
582
    }
583
    */
584
    return $version;
585
}
586
587
/**
588
* Input: Message Id,
589
*
590
* Return owner of thread (original poster)
591
* Return Integer
592
*/
593
/**
594
 * @param $msg_id_fk
595
 * @return bool|int false if not found, integer of uid otherwise
596
 */
597 View Code Duplication
function smallworld_getOwnerFromComment($msg_id_fk)
0 ignored issues
show
Duplication introduced by
This function 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...
598
{
599
    $owner = false;
600
    /** @todo looks like this should have LIMIT set to 1 to reduce execution time & possible ambiguity */
601
    $sql    = 'SELECT uid_fk FROM ' . $GLOBALS['xoopsDB']->prefix('smallworld_messages') . " WHERE msg_id = '" . $msg_id_fk . "'";
602
    $result = $GLOBALS['xoopsDB']->queryF($sql);
603
    while (false !== ($r = $GLOBALS['xoopsDB']->fetchArray($result))) {
604
        $owner = $r['uid_fk'];
605
    }
606
607
    return $owner;
608
}
609
610
/**
611
 * Get username from userID
612
 *
613
 * @deprecated - moved to SwUserHandler::getName() method
614
 * @param $userID
615
 * @return array
616
 */
617
function smallworld_getName($userID)
618
{
619
    $depMsg = __FUNCTION__ . " is deprecated, use SwUserHandler::getName() instead";
620 View Code Duplication
    if (isset($GLOBALS['xoopsLogger'])) {
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...
621
        $GLOBALS['xoopsLogger']->addDeprecated($depMsg);
622
    } else {
623
        trigger_error($depMsg, E_USER_WARNING);
624
    }
625
626
    $name = [];
627
    $sql    = 'SELECT username FROM ' . $GLOBALS['xoopsDB']->prefix('smallworld_user') . " WHERE userid = '" . (int)$userID . "'";
628
    $result = $GLOBALS['xoopsDB']->queryF($sql);
629
    while (false !== ($row = $GLOBALS['xoopsDB']->fetchArray($result))) {
630
        $name = $row['username'];
631
    }
632
633
    return $name;
634
}
635
636
/**
637
 * Check if user has been taken down for inspection by admin
638
 *
639
 * @param int $userid user to check
640
 * @return array
641
 */
642
function smallworld_isInspected($userid)
643
{
644
    $data   = [];
645
    $sql    = 'SELECT inspect_start, inspect_stop FROM ' . $GLOBALS['xoopsDB']->prefix('smallworld_admin') . " WHERE userid = '" . (int)$userid . "' AND (inspect_start+inspect_stop) > " . time() . '';
646
    $result = $GLOBALS['xoopsDB']->queryF($sql);
647
    if ($GLOBALS['xoopsDB']->getRowsNum($result) > 0) {
648
        while (false !== ($row = $GLOBALS['xoopsDB']->fetchArray($result))) {
649
            $data['inspect']   = 'yes';
650
            $data['totaltime'] = ($row['inspect_start'] + $row['inspect_stop']) - time();
651
        }
652
    } else {
653
        $data['inspect'] = 'no';
654
    }
655
656
    return $data;
657
}
658
659
/**
660
 * Auto delete all inspects from DB where time has passed
661
 *
662
 * inspect_start + inspect_stop - time() is deleted if negative intval
663
 *
664
 * @return bool
665
 */
666 View Code Duplication
function SmallworldDeleteOldInspects()
0 ignored issues
show
Duplication introduced by
This function 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...
667
{
668
    $sql    = 'UPDATE ' . $GLOBALS['xoopsDB']->prefix('smallworld_admin') . " SET inspect_start = '', inspect_stop = '' WHERE (inspect_start+inspect_stop) <= " . time() . '';
669
    $result = $GLOBALS['xoopsDB']->queryF($sql);
670
671
    return ($result) ? true : false;
672
}
673
674
/**
675
 * Function to get sum of users in your following array
676
 *
677
 * Used to calculate new message flash in jQuery intval fetch
678
 *
679
 * @return int
680
 */
681
function smallworld_getCountFriendMessagesEtc()
682
{
683
    $total     = 0;
684
    $wall      = new Smallworld\WallUpdates();
685
    $userid    = $GLOBALS['xoopsUser']->uid();
686
    $followers = smallworld_array_flatten($wall->getFollowers($userid), 0);
687
    if (1 == Helper::getInstance()->getConfig('usersownpostscount')) {
688
        $followers[] = $userid;
689
    }
690
    if (0 < count($followers)) {
691
        $ids    = implode(',', $followers);
692
        $sql    = 'SELECT COUNT(*) AS total '
693
                  . ' FROM ( '
694
                  . ' SELECT com_id , COUNT( * ) AS comments FROM '
695
                  . $GLOBALS['xoopsDB']->prefix('smallworld_comments')
696
                  . " WHERE uid_fk IN ($ids) GROUP BY com_id "
697
                  . ' UNION ALL '
698
                  . ' SELECT msg_id , COUNT( * ) AS messages FROM '
699
                  . $GLOBALS['xoopsDB']->prefix('smallworld_messages')
700
                  . " WHERE uid_fk IN ($ids) GROUP BY msg_id "
701
                  . ' ) as d';
702
        $result = $GLOBALS['xoopsDB']->queryF($sql);
703
        while (false !== ($r = $GLOBALS['xoopsDB']->fetchArray($result))) {
704
            $total = $r['total'];
705
        }
706
    }
707
708
    return (int)$total;
709
}
710
711
/**
712
 * Function to get sum of users in you following array
713
 *
714
 * Used to calculate new message flash in jQuery intval fetch
715
 *
716
 *@ deprecated - not used
717
 * @param $id
718
 * @return mixed
719
 */
720
function smallworld_countUsersMessages($id)
721
{
722
    $id     = int($id);
723
    $total  = 0;
724
    if (0 < $id ) {
725
        $sql    = 'SELECT COUNT(*) AS total '
726
                . ' FROM ( ' . ' SELECT com_id , COUNT( * ) AS comments FROM '
727
                . $GLOBALS['xoopsDB']->prefix('smallworld_comments')
728
                . ' WHERE uid_fk = ' . (int)$id
729
                . ' GROUP BY com_id ' . ' UNION ALL '
730
                . ' SELECT msg_id , COUNT( * ) AS messages FROM '
731
                . $GLOBALS['xoopsDB']->prefix('smallworld_messages')
732
                . ' WHERE uid_fk = ' . (int)$id . 'group BY msg_id ' . ' ) AS d';
733
        $result = $GLOBALS['xoopsDB']->queryF($sql);
734
        while (false !== ($r = $GLOBALS['xoopsDB']->fetchArray($result))) {
735
            $total = $r['total'];
736
        }
737
    }
738
739
    return $total;
740
}
741
742
/**
743
 * Get the three newest members to array
744
 *
745
 * @deprecated - no longer used
746
 * @return array
747
 */
748
function smallworld_Stats_newest()
749
{
750
    $depMsg = __FUNCTION__ . " is deprecated";
751 View Code Duplication
    if (isset($GLOBALS['xoopsLogger'])) {
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...
752
        $GLOBALS['xoopsLogger']->addDeprecated($depMsg);
753
    } else {
754
        trigger_error($depMsg, E_USER_WARNING);
755
    }
756
    $swUserHandler = Helper::getInstance()->getHandler('SwUser');
757
    $nu     = [];
758
    $sql    = 'SELECT * FROM ' . $GLOBALS['xoopsDB']->prefix('smallworld_user') . ' ORDER BY regdate DESC LIMIT 3';
759
    $result = $GLOBALS['xoopsDB']->queryF($sql);
760
    if ($GLOBALS['xoopsDB']->getRowsNum($result) > 0) {
761
        $i = 0;
762
        while (false !== ($r = $GLOBALS['xoopsDB']->fetchArray($result))) {
763
            $nu[$i]['userid']         = $r['userid'];
764
            $nu[$i]['username']       = $r['username'];
765
            $nu[$i]['regdate']        = date('d-m-Y', $r['regdate']);
766
            $nu[$i]['username_link']  = "<a href = '" . $helper->url('userprofile.php?username=' . $r['username']) . "'>";
0 ignored issues
show
Bug introduced by
The variable $helper does not exist. Did you forget to declare it?

This check marks access to variables or properties that have not been declared yet. While PHP has no explicit notion of declaring a variable, accessing it before a value is assigned to it is most likely a bug.

Loading history...
767
            $nu[$i]['username_link']  .= $r['username'] . ' (' . $r['realname'] . ') [' . $nu[$i]['regdate'] . '] </a>';
768
            $nu[$i]['userimage']      = $r['userimage'];
769
            $nu[$i]['userimage_link'] = $swUserHandler->getAvatarLink($r['userid'], $swUserHandler->gravatar($r['userid']));
770
            ++$i;
771
        }
772
    }
773
774
    return $nu;
775
}
776
777
//Avatar Image
778
/**
779
 * @deprecated - use Smallworld\SwUserHandler::gravatar()
780
 * @param $uid
781
 * @return string
782
 */
783
function smallworld_Gravatar($uid)
784
{
785
    $depMsg = __FUNCTION__ . " is deprecated use SwUserHandler::gravatar() instead.";
786 View Code Duplication
    if (isset($GLOBALS['xoopsLogger'])) {
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...
787
        $GLOBALS['xoopsLogger']->addDeprecated($depMsg);
788
    } else {
789
        trigger_error($depMsg, E_USER_WARNING);
790
    }
791
    $image  = '';
792
    $sql    = 'SELECT userimage FROM ' . $GLOBALS['xoopsDB']->prefix('smallworld_user') . " WHERE userid = '" . (int)$uid . "'";
793
    $result = $GLOBALS['xoopsDB']->queryF($sql);
794
    while (false !== ($r = $GLOBALS['xoopsDB']->fetchArray($result))) {
795
        $image = $r['userimage'];
796
    }
797
798
    $image = ('' == $image || 'blank.gif' === $image) ? smallworld_getAvatarLink($uid, $image) : $image;
0 ignored issues
show
Deprecated Code introduced by
The function smallworld_getAvatarLink() has been deprecated.

This function has been deprecated.

Loading history...
799
800
    $type = [
801
        1 => 'jpg',
802
        2 => 'jpeg',
803
        3 => 'png',
804
        4 => 'gif',
805
    ];
806
807
    $ext = explode('.', $image);
808
809
    $avatar = '';
810 View Code Duplication
    if (array_key_exists(1, $ext) && in_array(mb_strtolower($ext[1]), $type)) {
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...
811
        $avatar = '';
812
    }
813
814
    return $avatar;
815
}
816
817
// find user with most posted messages
818
/**
819
 * @return array
820
 */
821
function smallworld_mostactiveusers_allround()
822
{
823
    $msg     = [];
824
    $sql     = 'SELECT uid_fk, COUNT( * ) as cnt ';
825
    $sql     .= 'FROM ( ';
826
    $sql     .= 'SELECT uid_fk ';
827
    $sql     .= 'FROM ' . $GLOBALS['xoopsDB']->prefix('smallworld_messages') . ' ';
828
    $sql     .= 'UNION ALL SELECT uid_fk ';
829
    $sql     .= 'FROM ' . $GLOBALS['xoopsDB']->prefix('smallworld_comments') . ' ';
830
    $sql     .= ') AS u ';
831
    $sql     .= 'GROUP BY uid_fk ';
832
    $sql     .= 'ORDER BY count( * ) DESC limit 3';
833
    $result  = $GLOBALS['xoopsDB']->queryF($sql);
834
    $counter = $GLOBALS['xoopsDB']->getRowsNum($result);
835
    if ($counter < 1) {
836
    } else {
837
        $helper        = Helper::getInstance();
838
        $swUserHandler = $helper->getHandler('SwUser');
839
        $counter = 1;
840
        while (false !== ($row = $GLOBALS['xoopsDB']->fetchArray($result))) {
841
            $msg[$counter]['counter']       = $counter;
842
            $msg[$counter]['img']           = $swUserHandler->getAvatarLink($row['uid_fk'], $swUserHandler->gravatar($row['uid_fk']));
843
            $msg[$counter]['msgs']          = _SMALLWORLD_TOTALPOSTS . ' : ' . $row['cnt'];
844
            $msg[$counter]['cnt']           = $row['cnt'];
845
            $msg[$counter]['username']      = $GLOBALS['xoopsUser']->getUnameFromId($row['uid_fk']);
846
            $msg[$counter]['username_link'] = "<a href = '" . $helper->url('userprofile.php?username=' . $msg[$counter]['username']) . "'>";
847
            $msg[$counter]['username_link'] .= $msg[$counter]['username'] . ' (' . $msg[$counter]['msgs'] . ')</a>';
848
            ++$counter;
849
        }
850
    }
851
852
    return $msg;
853
}
854
855
// Find worst rated users overall
856
/**
857
 * @return array
858
 */
859 View Code Duplication
function smallworld_worstratedusers()
0 ignored issues
show
Duplication introduced by
This function 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...
860
{
861
    $swUserHandler = Helper::getInstance()->getHandler('SwUser');
862
    $array   = [];
863
    $counter = 1;
864
    $sql     = 'SELECT owner, (';
865
    $sql     .= 'sum( up ) - sum( down )';
866
    $sql     .= ') AS total';
867
    $sql     .= ' FROM ' . $GLOBALS['xoopsDB']->prefix('smallworld_vote') . '';
868
    $sql     .= ' GROUP BY owner ORDER by total ASC LIMIT 5';
869
    $result  = $GLOBALS['xoopsDB']->queryF($sql);
870
    while (false !== ($row = $GLOBALS['xoopsDB']->fetchArray($result))) {
871
        $array[$counter]['counter']   = $counter;
872
        $array[$counter]['img']       = $swUserHandler->getAvatarLink($row['owner'], $swUserHandler->gravatar($row['owner']));
873
        $array[$counter]['user']      = $GLOBALS['xoopsUser']->getUnameFromId($row['owner']);
874
        $array[$counter]['rating']    = $row['total'];
875
        $array[$counter]['user_link'] = "<a href = '" . Helper::getInstance()->url('userprofile.php?username=' . $array[$counter]['user']) . "'>";
876
        $array[$counter]['user_link'] .= $array[$counter]['user'] . ' (' . $array[$counter]['rating'] . ')</a>';
877
        ++$counter;
878
    }
879
880
    return $array;
881
}
882
883
// Find best rated users overall
884
/**
885
 * @return array
886
 */
887 View Code Duplication
function smallworld_topratedusers()
0 ignored issues
show
Duplication introduced by
This function 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...
888
{
889
    $swUserHandler = Helper::getInstance()->getHandler('SwUser');
890
    $array   = [];
891
    $counter = 1;
892
    $sql     = 'SELECT owner, (';
893
    $sql     .= 'sum( up ) - sum( down )';
894
    $sql     .= ') AS total';
895
    $sql     .= ' FROM ' . $GLOBALS['xoopsDB']->prefix('smallworld_vote') . '';
896
    $sql     .= ' GROUP BY owner ORDER by total DESC LIMIT 5';
897
    $result  = $GLOBALS['xoopsDB']->queryF($sql);
898
    while (false !== ($row = $GLOBALS['xoopsDB']->fetchArray($result))) {
899
        $array[$counter]['counter']   = $counter;
900
        $array[$counter]['img']       = $swUserHandler->getAvatarLink($row['owner'], $swUserHandler->gravatar($row['owner']));
901
        $array[$counter]['user']      = $GLOBALS['xoopsUser']->getUnameFromId($row['owner']);
902
        $array[$counter]['rating']    = $row['total'];
903
        $array[$counter]['user_link'] = "<a href = '" . $helper->url('userprofile.php?username=' . $array[$counter]['user']) . "'>";
0 ignored issues
show
Bug introduced by
The variable $helper does not exist. Did you forget to declare it?

This check marks access to variables or properties that have not been declared yet. While PHP has no explicit notion of declaring a variable, accessing it before a value is assigned to it is most likely a bug.

Loading history...
904
        $array[$counter]['user_link'] .= $array[$counter]['user'] . ' (' . $array[$counter]['rating'] . ')</a>';
905
        ++$counter;
906
    }
907
908
    return $array;
909
}
910
911
/**
912
 * @return array
913
 */
914
function smallworld_nextBirthdays()
915
{
916
    $swUserHandler = Helper::getInstance()->getHandler('SwUser');
917
    $now       = date('d-m');
0 ignored issues
show
Unused Code introduced by
$now 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...
918
    $res       = [];
919
    $sql       = 'SELECT userid, username, userimage, realname, birthday, CURDATE(),'
920
               . ' DATE_FORMAT(birthday, "%d / %m") AS daymon , '
921
               . ' (YEAR(CURDATE())-YEAR(birthday))'
922
               . ' - (RIGHT(CURDATE(),5)<RIGHT(birthday,5))'
923
               . ' AS age_now'
924
               . ' FROM '
925
               . $GLOBALS['xoopsDB']->prefix('smallworld_user')
926
               . ' WHERE right(birthday,5) = right(CURDATE(),5)'
927
               . ' ORDER BY MONTH( birthday ) , DAY( birthday ) '
928
               . ' LIMIT 10 ';
929
    $result    = $GLOBALS['xoopsDB']->queryF($sql);
930
    $counter   = $GLOBALS['xoopsDB']->getRowsNum($result);
931
    $i         = 0;
932
    while (false !== ($r = $GLOBALS['xoopsDB']->fetchArray($result))) {
933
        $res[$i]['amount']        = $counter;
934
        $res[$i]['userid']        = $r['userid'];
935
        $res[$i]['userimage']     = $swUserHandler->getAvatarLink($r['userid'], $swUserHandler->gravatar($r['userid']));
936
        $res[$i]['birthday']      = $r['daymon'];
937
        $res[$i]['agenow']        = $r['age_now'];
938
        $res[$i]['username']      = $GLOBALS['xoopsUser']->getUnameFromId($r['userid']);
939
        $res[$i]['username_link'] = "<a href = '" . $helper->url('userprofile.php?username=' . $res[$i]['username']) . "'>";
0 ignored issues
show
Bug introduced by
The variable $helper does not exist. Did you forget to declare it?

This check marks access to variables or properties that have not been declared yet. While PHP has no explicit notion of declaring a variable, accessing it before a value is assigned to it is most likely a bug.

Loading history...
940
        $res[$i]['username_link'] .= $res[$i]['username'] . ' (' . $r['daymon'] . ') ' . $r['age_now'] . ' ' . _SMALLWORLD_BDAY_YEARS;
941
        $res[$i]['username_link'] .= '</a>';
942
        ++$i;
943
    }
944
945
    return $res;
946
}
947
948
/*
949
 * Return date format (YYYY-MM-DD) for MySql
950
 * @param date $stringDate
951
 * $returns date
952
*/
953
/**
954
 * @param $stringDate
955
 * @return string
956
 */
957 View Code Duplication
function smallworld_euroToUsDate($stringDate)
0 ignored issues
show
Duplication introduced by
This function 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...
958
{
959
    if (0 != $stringDate || '' != $stringDate) {
960
        $theData = explode('-', trim($stringDate));
961
        $ret     = $theData[2] . '-' . $theData[1] . '-' . $theData[0];
962
963
        return $ret;
964
    }
965
966
    return '1900-01-01';
967
}
968
969
/*
970
 * Return date format (DD-MM-YYYY) for display
971
 * @param date $stringDate
972
 * $returns date
973
*/
974
/**
975
 * @param $stringDate
976
 * @return string
977
 */
978 View Code Duplication
function smallworld_UsToEuroDate($stringDate)
0 ignored issues
show
Duplication introduced by
This function 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...
979
{
980
    if (0 != $stringDate || '' != $stringDate) {
981
        $theData = explode('-', trim($stringDate));
982
        $ret     = $theData[2] . '-' . $theData[1] . '-' . $theData[0];
983
984
        return $ret;
985
    }
986
987
    return '01-01-1900';
988
}
989
990
/**
991
 * @return array
992
 */
993
function smallworld_sp()
994
{
995
    $sp = [0 => ['spimage' => "<img id='smallworld_img_sp' src='" . Helper::getInstance()->url('assets/images/sp.png') . "' height='30px' width='30px' >"]];
996
    return $sp;
997
}
998
999
//Check privacy settings in permapage
1000
/**
1001
 * @param $id
1002
 * @return mixed
1003
 */
1004 View Code Duplication
function smallworldCheckPriv($id)
0 ignored issues
show
Duplication introduced by
This function 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...
1005
{
1006
    $public = 'SELECT priv FROM ' . $GLOBALS['xoopsDB']->prefix('smallworld_messages') . ' WHERE msg_id = ' . $id . '';
1007
    $result = $GLOBALS['xoopsDB']->queryF($public);
1008
    while (false !== ($row = $GLOBALS['xoopsDB']->fetchArray($result))) {
1009
        $priv = $row['priv'];
1010
    }
1011
1012
    return $priv;
0 ignored issues
show
Bug introduced by
The variable $priv 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...
1013
}
1014
1015
/**
1016
 * Function to calculate remaining seconds until user's birthday
1017
 *
1018
 * Input $d : date('Y-m-d') format
1019
 * return seconds until date at midnight, or
1020
 * return 0 if date ('Y-m-d') is equal to today
1021
 *
1022
 * @param $d
1023
 * @return bool|int|string
1024
 */
1025
function smallworldNextBDaySecs($d)
1026
{
1027
    $olddate   = mb_substr($d, 4);
1028
    $exactdate = date('Y') . '' . $olddate;
1029
    $newdate   = date('Y') . '' . $olddate . ' 00:00:00';
1030
    $nextyear  = date('Y') + 1 . '' . $olddate . ' 00:00:00';
1031
    if ($exactdate != date('Y-m-d')) {
1032
        if ($newdate > date('Y-m-d H:i:s')) {
1033
            $start_ts = strtotime($newdate);
1034
            $end_ts   = strtotime(date('Y-m-d H:i:s'));
1035
            $diff     = $end_ts - $start_ts;
1036
            $n        = round($diff);
1037
            $return   = mb_substr($n, 1);
1038
1039
            return $return;
1040
        }
1041
        $start_ts = strtotime($nextyear);
1042
        $end_ts   = strtotime(date('Y-m-d H:i:s'));
1043
        $diff     = $end_ts - $start_ts;
1044
        $n        = round($diff);
1045
        $return   = mb_substr($n, 1);
1046
1047
        return $return;
1048
    }
1049
1050
    return 0;
1051
}
1052
1053
/**
1054
 * Function to get value from xoopsConfig array
1055
/**
1056
 * @param string $key
1057
 * @param array $array
1058
 * @return int
1059
 */
1060
function smallworldGetValfromArray($key, $array)
1061
{
1062
    $ret = 0;
1063
    $ar  = Helper::getInstance()->getConfig($array);
1064
    if (in_array($key, $ar, true)) {
1065
        $ret = 1;
1066
    }
1067
1068
    return $ret;
1069
}
1070
1071
/**
1072
 * Resize images proportionally
1073
 *
1074
 * Using imagesize($imageurl) returns $img[0], $img[1]
1075
 * Target = new max height or width in px
1076
 *
1077
 * @param int $width
1078
 * @param int $height
1079
 * @param int $target
1080
 * @return string returns the new sizes in html image tag format
1081
 */
1082
function smallworld_imageResize($width, $height, $target)
1083
{
1084
    //takes the larger size of the width and height and applies the
1085
    //formula accordingly...this is so this script will work
1086
    //dynamically with any size image
1087
    if ($width > $height) {
1088
        $percentage = ($target / $width);
1089
    } else {
1090
        $percentage = ($target / $height);
1091
    }
1092
    //gets the new value and applies the percentage, then rounds the value
1093
    $width  = round($width * $percentage);
1094
    $height = round($height * $percentage);
1095
    //returns the new sizes in html image tag format...this is so you
1096
    //can plug this function inside an image tag and just get the
1097
1098
    return "width='{$width}' height='{$height}'";
1099
}
1100
1101
/**
1102
 * Fetch image width and height
1103
 *
1104
 * will attempt to use the getimagesize method first, then curl
1105
 *
1106
 * @param int $w
1107
 * @param int $h
1108
 * @param string $url
1109
 * @returns array
1110
 * @return array
1111
 */
1112
function smallworld_getImageSize($w, $h, $url)
1113
{
1114
    $bn        = basename($url);
1115
    $w         = (int)$w;
1116
    $h         = (int)$h;
1117
    $imagesize = [0 => '0', 1 => '0']; // init image size
1118
1119
    if ('blank.gif' !== $bn
1120
        && 'blank.png' !== $bn
1121
        && 'blank.jpg' !== $bn
1122
        && 'image_missing.png' !== $bn)
1123
    {
1124
        $imagesize = [0 => $w, 1 => $h];
1125
        if (ini_get('allow_url_fopen')) {
1126
            $imagesize = getimagesize($url);
1127
        }
1128
1129
        if (!ini_get('allow_url_fopen')) {
1130
            $imagesize = [0 => $w, 1 => $h];
1131
            if (function_exists('curl_init')) {
1132
                $ch = curl_init();
1133
                curl_setopt($ch, CURLOPT_URL, $url);
1134
                curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
1135
                $result       = curl_exec($ch);
1136
                $img          = imagecreatefromstring($result);
1137
                $imagesize[0] = imagesx($img);
1138
                $imagesize[1] = imagesy($img);
1139
            }
1140
        }
1141
    }
1142
1143
    return $imagesize;
1144
}
1145
1146
/**
1147
 * Check whether requests are set or not
1148
 *
1149
 * If not return '' else return false
1150
 *
1151
 * @param string $req
1152
 * @returns string or void
1153
 * @return string|null
1154
 * @return string|null
1155
 */
1156
function smallworld_isset($req)
1157
{
1158
    return (isset($req) && !empty($req)) ? $req : '';
1159
}
1160
1161
/**
1162
 * Do db query for images upload last 5 minutes by spec. userid and return random
1163
 * @param int $userid
1164
 * @return bool|string  false if no image found
1165
 */
1166 View Code Duplication
function smallworld_getRndImg($userid)
0 ignored issues
show
Duplication introduced by
This function 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...
1167
{
1168
    $sql    = 'SELECT imgname FROM ' . $GLOBALS['xoopsDB']->prefix('smallworld_images')
1169
            . ' WHERE userid = ' . (int)$userid . ' AND time BETWEEN UNIX_TIMESTAMP( ) - 3000 AND UNIX_TIMESTAMP() ORDER BY rand() LIMIT 1';
1170
    $result = $GLOBALS['xoopsDB']->queryF($sql);
1171
    while (false !== ($r = $GLOBALS['xoopsDB']->fetchArray($result))) {
1172
        $img = $r['imgname'];
1173
    }
1174
    if (!empty($img)) {
1175
        return $img;
1176
    }
1177
1178
    return false;
1179
}
1180
1181
/**
1182
 * Get url of smallworld
1183
 *
1184
 * @returns string
1185
 */
1186
function smallworld_getHostRequest()
1187
{
1188
    $protocol   = false === mb_stripos($_SERVER['SERVER_PROTOCOL'], 'https') ? 'http' : 'https';
1189
    $host       = $_SERVER['HTTP_HOST'];
1190
    $script     = $_SERVER['SCRIPT_NAME'];
0 ignored issues
show
Unused Code introduced by
$script 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...
1191
    $params     = $_SERVER['QUERY_STRING'];
0 ignored issues
show
Unused Code introduced by
$params 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...
1192
    $currentUrl = $protocol . '://' . $host;
1193
1194
    return $currentUrl;
1195
}
1196
1197
/**
1198
 * Get htmlentities
1199
 *
1200
 * @param string $text
1201
 * @return string translated string to utf-8
1202
 */
1203
function smallworld_decodeEntities($text)
1204
{
1205
    $text = html_entity_decode($text, ENT_QUOTES, 'ISO-8859-1'); /**{@internal NOTE: UTF-8 does not work!}} */
1206
    $text = preg_replace('/&#(\d+);/me', 'chr(\\1)', $text); #decimal notation
1207
    $text = preg_replace('/&#x([a-f0-9]+);/mei', 'chr(0x\\1)', $text);  #hex notation
1208
    return $text;
1209
}
1210
1211
/**
1212
 * Get string and shorten so contains only # of chars
1213
 *
1214
 * @param string $text
1215
 * @param int $numChars
1216
 * @return string
1217
 */
1218
function smallworld_shortenText($text, $numChars)
1219
{
1220
    $text .= ' ';
1221
    $text = mb_substr($text, 0, $numChars);
1222
    $text = mb_substr($text, 0, mb_strrpos($text, ' '));
1223
    $text .= '...';
1224
1225
    return $text;
1226
}
1227
1228
/**
1229
 * Get language file if constants are not defined
1230
 *
1231
 * @param string $def
1232
 * @param string $file
1233
 * @return void
1234
 */
1235
function smallworld_isDefinedLanguage($def, $file)
1236
{
1237
    /** @var \XoopsModules\Smallworld\Helper $helper */
1238
    $helper = Helper::getInstance();
1239
    if (!defined($def)) {
1240
        // language files (main.php)
1241
        if (file_exists($helper->path('language/' . $GLOBALS['xoopsConfig']['language'] . '/' . $file))) {
1242
            require_once $helper->path('language/' . $GLOBALS['xoopsConfig']['language'] . '/' . $file);
1243
        } else {
1244
            // fallback english
1245
            require_once $helper->path('language/english/' . $file);
1246
        }
1247
    }
1248
}
1249
1250
/**
1251
 * @Check if smallworld is for private or public access
1252
 * return value for config
1253
 */
1254
function smallworld_checkPrivateOrPublic()
1255
{
1256
    $opt                   = [];
1257
    $helper                = \XoopsModules\Smallworld\Helper::getInstance();
1258
    $set                   = $helper->getConfig('smallworldprivorpub');
1259
    $opt['access']         = (0 !== $set) ? Constants::HAS_ACCESS : Constants::NO_ACCESS;
1260
    $opt['xoopsuser']      = Constants::IS_NOT_USER;
1261
    $opt['smallworlduser'] = Constants::IS_NOT_USER;
1262
1263
    if ($GLOBALS['xoopsUser'] && ($GLOBALS['xoopsUser'] instanceof \XoopsUser)) {
0 ignored issues
show
Bug introduced by
The class XoopsUser does not exist. Did you forget a USE statement, or did you not list all dependencies?

This error could be the result of:

1. Missing dependencies

PHP Analyzer uses your composer.json file (if available) to determine the dependencies of your project and to determine all the available classes and functions. It expects the composer.json to be in the root folder of your repository.

Are you sure this class is defined by one of your dependencies, or did you maybe not list a dependency in either the require or require-dev section?

2. Missing use statement

PHP does not complain about undefined classes in ìnstanceof checks. For example, the following PHP code will work perfectly fine:

if ($x instanceof DoesNotExist) {
    // Do something.
}

If you have not tested against this specific condition, such errors might go unnoticed.

Loading history...
1264
        $id                    = $GLOBALS['xoopsUser']->uid();
1265
        //$user                  = new \XoopsUser($id);
1266
        //$check                 = new \XoopsModules\Smallworld\User();
1267
        //$profile               = $check->checkIfProfile($id);
1268
        $swUserHandler         = $helper->getHandler('SwUser');
1269
        $profile               = $swUserHandler->checkIfProfile($id);
1270
        $opt['xoopsuser']      = Constants::IS_USER;
1271
        $opt['smallworlduser'] = (Constants::PROFILE_HAS_BOTH !== $profile) ? Constants::IS_NOT_USER : Constants::IS_USER;
1272
    }
1273
1274
    return $opt;
1275
}
1276
1277
/**
1278
 * Get an array of all Users
1279
 *
1280
 * @todo move this to Smallworld\SwUserHandler class
1281
 * @return array 'userid' as keys, 'username' as values
1282
 */
1283
function smallworld_xv_getGroupd()
1284
{
1285
    /** @var \XoopsModules\Smallworld\Helper $helper */
1286
    $helper          = Helper::getInstance();
1287
    $helper->loadLanguage('modinfo');
1288
    $swUserHandler   = $helper->getHandler('SwUser');
1289
    $criteria        = new \Criteria('');
1290
    $criteria->setSort('userid');
1291
    $criteria->order = 'ASC';
1292
    $userObjArray    = $swUserHandler->getAll($criteria, ['userid', 'username'], false);
1293
    $retArray        = [0 => _MI_SMALLWORLD_ALL]; // initialize the array
1294
    foreach ($userObjArray as $swUser) {
1295
        $retArray[$swUser['userid']] = $swUser['username'];
1296
    }
1297
1298
    return $retArray;
1299
    /*
1300
    $db     = \XoopsDatabaseFactory::getDatabaseConnection();
1301
    $sql    = 'SELECT userid, username FROM ' . $db->prefix('smallworld_user') . ' ORDER BY userid';
1302
    $result = $db->queryF($sql);
1303
    $num    = $db->getRowsNum($result);
1304
    if (0 == $num) {
1305
        $ndata = [0 => _MI_SMALLWORLD_ALL];
1306
    } else {
1307
        while (false !== ($r = $db->fetchArray($result))) {
1308
            $data[$r['userid']] = $r['username'];
1309
        }
1310
        $ndata = array_merge([0 => _MI_SMALLWORLD_ALL], $data);
1311
    }
1312
1313
    return $ndata;
1314
    */
1315
}
1316
1317
/**
1318
 * Set javascript vars to theme using various values
1319
 * Return void
1320
 */
1321
function smallworld_SetCoreScript()
1322
{
1323
    /** @var \XoopsModules\Smallworld\Helper $helper */
1324
    $helper = Helper::getInstance();
1325
1326
    // IF logged in define xoops / smallworld user id
1327
    $myId = ($GLOBALS['xoopsUser'] && ($GLOBALS['xoopsUser'] instanceof \XoopsUser)) ? $GLOBALS['xoopsUser']->uid() : Constants::DEFAULT_UID;
0 ignored issues
show
Bug introduced by
The class XoopsUser does not exist. Did you forget a USE statement, or did you not list all dependencies?

This error could be the result of:

1. Missing dependencies

PHP Analyzer uses your composer.json file (if available) to determine the dependencies of your project and to determine all the available classes and functions. It expects the composer.json to be in the root folder of your repository.

Are you sure this class is defined by one of your dependencies, or did you maybe not list a dependency in either the require or require-dev section?

2. Missing use statement

PHP does not complain about undefined classes in ìnstanceof checks. For example, the following PHP code will work perfectly fine:

if ($x instanceof DoesNotExist) {
    // Do something.
}

If you have not tested against this specific condition, such errors might go unnoticed.

Loading history...
1328
1329
    // Check if option is et to allow public reading
1330
    $pub    = smallworld_checkPrivateOrPublic();
1331
    $access = $pub['access'];
0 ignored issues
show
Unused Code introduced by
$access 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...
1332
1333
    // GET various variables from language folder
1334
    if (file_exists($helper->path('language/' . $GLOBALS['xoopsConfig']['language'] . '/js/variables.js'))) {
1335
        $GLOBALS['xoTheme']->addScript($helper->url('language/' . $GLOBALS['xoopsConfig']['language'] . '/js/variables.js'));
1336
    } else {
1337
        $GLOBALS['xoTheme']->addScript($helper->url('language/english/js/variables.js'));
1338
    }
1339
1340
    // Check if USER is smallworld-registered user
1341
    $chkUser = new Smallworld\User();
1342
    //$profile = ($GLOBALS['xoopsUser'] && ($GLOBALS['xoopsUser'] instanceof \XoopsUser)) ? $chkUser->checkIfProfile($myId) : Constants::DEFAULT_UID;
1343
    $swUserHandler = $helper->getHandler('SwUser');
1344
    $profile       = $swUserHandler->checkIfProfile($myId);
1345
1346
    // Check if there are requests pending
1347
    $count_invit = ($GLOBALS['xoopsUser'] && ($GLOBALS['xoopsUser'] instanceof \XoopsUser)) ? count($chkUser->getRequests($myId)) : Constants::DEFAULT_UID;
0 ignored issues
show
Bug introduced by
The class XoopsUser does not exist. Did you forget a USE statement, or did you not list all dependencies?

This error could be the result of:

1. Missing dependencies

PHP Analyzer uses your composer.json file (if available) to determine the dependencies of your project and to determine all the available classes and functions. It expects the composer.json to be in the root folder of your repository.

Are you sure this class is defined by one of your dependencies, or did you maybe not list a dependency in either the require or require-dev section?

2. Missing use statement

PHP does not complain about undefined classes in ìnstanceof checks. For example, the following PHP code will work perfectly fine:

if ($x instanceof DoesNotExist) {
    // Do something.
}

If you have not tested against this specific condition, such errors might go unnoticed.

Loading history...
1348
1349
    // Get module config for validation and place in javascript
1350
    $validate = $helper->getConfig('validationstrength');
1351
1352
    // Check to see if smallworld should use username links to point to default xoops or smallworld
1353
    $takeoverlinks   = $helper->getConfig('takeoveruserlinks');
1354
    $fieldstoshow    = array_flip($helper->getConfig('smallworldusethesefields'));
0 ignored issues
show
Unused Code introduced by
$fieldstoshow 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...
1355
    $useverification = $helper->getConfig('smallworldmandatoryfields');
1356
    $smallworldUV    = implode(',', $useverification);
1357
1358
    // Use googlemaps ?
1359
    $googlemaps = $helper->getConfig('smallworldUseGoogleMaps');
1360
1361
    // Get users messages count based on users followerArray
1362
    $getUserMsgNum = ($GLOBALS['xoopsUser'] && ($GLOBALS['xoopsUser'] instanceof \XoopsUser)) ? smallworld_getCountFriendMessagesEtc() : 0;
0 ignored issues
show
Bug introduced by
The class XoopsUser does not exist. Did you forget a USE statement, or did you not list all dependencies?

This error could be the result of:

1. Missing dependencies

PHP Analyzer uses your composer.json file (if available) to determine the dependencies of your project and to determine all the available classes and functions. It expects the composer.json to be in the root folder of your repository.

Are you sure this class is defined by one of your dependencies, or did you maybe not list a dependency in either the require or require-dev section?

2. Missing use statement

PHP does not complain about undefined classes in ìnstanceof checks. For example, the following PHP code will work perfectly fine:

if ($x instanceof DoesNotExist) {
    // Do something.
}

If you have not tested against this specific condition, such errors might go unnoticed.

Loading history...
1363
1364
    // Check if request url is with www or without
1365
    $urltest   = smallworld_getHostRequest();
1366
    $xoops_url = XOOPS_URL;
1367
    if (false === mb_strpos($urltest, 'www.')) {
1368
        $xoops_url = str_replace('www.', '', $xoops_url);
1369
    }
1370
1371
    // Set javascript vars but only if not already defined.
1372
    // Check prevents multiple loads
1373
    $script = 'var Smallworld_myID;' . "\n";
1374
    $script .= "if (typeof Smallworld_myID === 'undefined') {" . "\n";
1375
    $script .= "var smallworld_url = '" . $xoops_url . '/modules/smallworld/' . "';\n";
1376
    $script .= "var smallworld_uploaddir = '" . $xoops_url . '/uploads/avatars/' . "';\n";
1377
    $script .= 'var smallworld_urlReferer = document.referrer;' . "\n";
1378
    $script .= "var xoops_smallworld = jQuery.noConflict();\n";
1379
    $script .= 'var Smallworld_myID = ' . $myId . ";\n";
1380
    $script .= 'var Smallworld_userHasProfile = ' . $profile . ";\n";
1381
    $script .= 'var smallworldTakeOverLinks = ' . $takeoverlinks . ";\n";
1382
    $script .= 'var Smallworld_geocomplete = ' . $googlemaps . ";\n";
1383
    $script .= "var smallworldVerString = '" . $smallworldUV . "';\n";
1384
    $script .= "var smallworlduseverification = new Array();\n";
1385
    $script .= "smallworlduseverification = smallworldVerString.split(',');\n";
1386
    $script .= 'var Smallworld_hasmessages = ' . $count_invit . ";\n";
1387
    $script .= 'var smallworldvalidationstrength = ' . $validate . ";\n";
1388
    $script .= 'var smallworld_getFriendsMsgComCount = ' . $getUserMsgNum . ";\n";
1389
    //$script .= "var $ = jQuery();\n";
1390
    $script .= '}' . "\n";
1391
    $GLOBALS['xoTheme']->addScript('', '', $script);
1392
1393
    // Include geolocate styling
1394
    if (1 == $googlemaps) {
1395
        $GLOBALS['xoTheme']->addScript('https://maps.googleapis.com/maps/api/js?sensor=false&language=' . _LANGCODE);
1396
        $GLOBALS['xoTheme']->addScript($helper->url('assets/js/ui.geo_autocomplete.js'));
1397
        $GLOBALS['xoTheme']->addScript($helper->url('assets/js/ui.geo_autocomplete_now.js'));
1398
    }
1399
1400
    smallworld_includeScripts();
1401
}
1402
1403
/**
1404
 * Include script files based on $page
1405
 */
1406
function smallworld_includeScripts()
1407
{
1408
    /** @var \XoopsModules\Smallworld\Helper $helper */
1409
    $helper = Helper::getInstance();
1410
    $page = basename($_SERVER['PHP_SELF'], '.php');
1411
    switch ($page) {
1412 View Code Duplication
        case 'register':
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...
1413
            $GLOBALS['xoTheme']->addScript($helper->url('assets/js/jquery.colorbox.js'));
1414
            $GLOBALS['xoTheme']->addScript($helper->url('assets/js/jquery.validate.js'));
1415
            $GLOBALS['xoTheme']->addScript($helper->url('assets/js/jquery.validation.functions.js'));
1416
            $GLOBALS['xoTheme']->addScript($helper->url('assets/js/jquery.stepy.js'));
1417
            $GLOBALS['xoTheme']->addScript($helper->url('assets/js/jquery.elastic.source.js'));
1418
            $GLOBALS['xoTheme']->addStylesheet($helper->url('assets/css/smallworld.css'));
1419
            break;
1420 View Code Duplication
        case 'publicindex':
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...
1421
            $GLOBALS['xoTheme']->addScript($helper->url('assets/js/jquery.oembed.js'));
1422
            $GLOBALS['xoTheme']->addScript($helper->url('assets/js/jquery.elastic.source.js'));
1423
            $GLOBALS['xoTheme']->addScript($helper->url('assets/js/wall.js'));
1424
            $GLOBALS['xoTheme']->addScript($helper->url('assets/js/ajaxupload.3.5.js'));
1425
            $GLOBALS['xoTheme']->addScript($helper->url('assets/js/jquery.avatar_helper.js'));
1426
            $GLOBALS['xoTheme']->addScript($helper->url('assets/js/jquery.bookmark.js'));
1427
            $GLOBALS['xoTheme']->addStylesheet($helper->url('assets/css/oembed.css'));
1428
            $GLOBALS['xoTheme']->addScript($helper->url('assets/js/jquery.colorbox.js'));
1429
            $GLOBALS['xoTheme']->addStylesheet($helper->url('assets/css/smallworld.css'));
1430
            break;
1431
        case 'permalink':
1432
            $GLOBALS['xoTheme']->addScript($helper->url('assets/js/jquery.oembed.js'));
1433
            $GLOBALS['xoTheme']->addScript($helper->url('assets/js/wall.js'));
1434
            $GLOBALS['xoTheme']->addStylesheet($helper->url('assets/css/oembed.css'));
1435
            $GLOBALS['xoTheme']->addStylesheet($helper->url('assets/css/smallworld.css'));
1436
            $GLOBALS['xoTheme']->addScript($helper->url('assets/js/jquery.innerfade.js'));
1437
            $GLOBALS['xoTheme']->addScript($helper->url('assets/js/jquery.elastic.source.js'));
1438
            $GLOBALS['xoTheme']->addScript($helper->url('assets/js/jquery.bookmark.js'));
1439
            $GLOBALS['xoTheme']->addScript($helper->url('assets/js/jquery.colorbox.js'));
1440
            break;
1441
        case 'index':
1442
            $GLOBALS['xoTheme']->addScript($helper->url('assets/js/jquery.oembed.js'));
1443
            $GLOBALS['xoTheme']->addScript($helper->url('assets/js/jquery.elastic.source.js'));
1444
            $GLOBALS['xoTheme']->addScript($helper->url('assets/js/wall.js'));
1445
            $GLOBALS['xoTheme']->addScript($helper->url('assets/js/ajaxupload.3.5.js'));
1446
            $GLOBALS['xoTheme']->addScript($helper->url('assets/js/jquery.avatar_helper.js'));
1447
            $GLOBALS['xoTheme']->addScript($helper->url('assets/js/jquery.bookmark.js'));
1448
            $GLOBALS['xoTheme']->addStylesheet($helper->url('assets/css/oembed.css'));
1449
            $GLOBALS['xoTheme']->addScript($helper->url('assets/js/jquery.colorbox.js'));
1450
            $GLOBALS['xoTheme']->addScript($helper->url('assets/js/tag-it.js'));
1451
            $GLOBALS['xoTheme']->addStylesheet($helper->url('assets/css/smallworld.css'));
1452
            break;
1453
        case 'img_upload':
1454
            $GLOBALS['xoTheme']->addStylesheet($helper->url('assets/css/uploader/bootstrap.min.css'));
1455
            $GLOBALS['xoTheme']->addStylesheet($helper->url('assets/css/uploader/style.css'));
1456
            $GLOBALS['xoTheme']->addStylesheet($helper->url('assets/css/uploader/bootstrap-responsive.min.css'));
1457
            $GLOBALS['xoTheme']->addStylesheet($helper->url('assets/css/uploader/bootstrap-image-gallery.min.css'));
1458
1459
            $GLOBALS['xoTheme']->addScript($helper->url('assets/js/vendor/jquery.ui.widget.js'));
1460
            $GLOBALS['xoTheme']->addScript($helper->url('assets/js/uploader/tmpl.js'));
1461
            $GLOBALS['xoTheme']->addScript($helper->url('assets/js/uploader/load-image.js'));
1462
            $GLOBALS['xoTheme']->addScript($helper->url('assets/js/uploader/canvas-to-blob.js'));
1463
            $GLOBALS['xoTheme']->addScript($helper->url('assets/js/uploader/bootstrap.js'));
1464
            $GLOBALS['xoTheme']->addScript($helper->url('assets/js/uploader/bootstrap-image-gallery.js'));
1465
            $GLOBALS['xoTheme']->addScript($helper->url('assets/js/jquery.iframe-transport.js'));
1466
            $GLOBALS['xoTheme']->addScript($helper->url('assets/js/jquery.fileupload.js'));
1467
            $GLOBALS['xoTheme']->addScript($helper->url('assets/js/jquery.fileupload-fp.js'));
1468
            $GLOBALS['xoTheme']->addScript($helper->url('assets/js/jquery.fileupload-ui.js'));
1469
            $GLOBALS['xoTheme']->addScript($helper->url('assets/js/main.js'));
1470
            $GLOBALS['xoTheme']->addScript($helper->url('assets/js/jquery.colorbox.js'));
1471
            break;
1472 View Code Duplication
        case 'galleryshow':
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...
1473
            $GLOBALS['xoTheme']->addStylesheet($helper->url('assets/css/galleriffic-5.css'));
1474
            $GLOBALS['xoTheme']->addScript($helper->url('assets/js/jquery.galleriffic.js'));
1475
            $GLOBALS['xoTheme']->addScript($helper->url('assets/js/jquery.history.js'));
1476
            $GLOBALS['xoTheme']->addScript($helper->url('assets/js/jquery.opacityrollover.js'));
1477
            $GLOBALS['xoTheme']->addScript($helper->url('assets/js/gallery_mod.js'));
1478
            $GLOBALS['xoTheme']->addScript($helper->url('assets/js/jquery.innerfade.js'));
1479
            $GLOBALS['xoTheme']->addScript($helper->url('assets/js/jquery.colorbox.js'));
1480
            break;
1481 View Code Duplication
        case 'friends':
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...
1482
            $GLOBALS['xoTheme']->addScript($helper->url('assets/js/apprise-1.5.full.js'));
1483
            $GLOBALS['xoTheme']->addStylesheet($helper->url('assets/css/jquery.fileupload-ui.css'));
1484
            $GLOBALS['xoTheme']->addStylesheet($helper->url('assets/css/oembed.css'));
1485
            $GLOBALS['xoTheme']->addScript($helper->url('assets/js/jquery.oembed.js'));
1486
            $GLOBALS['xoTheme']->addScript($helper->url('assets/js/wall.js'));
1487
            $GLOBALS['xoTheme']->addScript($helper->url('assets/js/ajaxupload.3.5.js'));
1488
            $GLOBALS['xoTheme']->addScript($helper->url('assets/js/jquery.avatar_helper.js'));
1489
            $GLOBALS['xoTheme']->addScript($helper->url('assets/js/jquery.innerfade.js'));
1490
            $GLOBALS['xoTheme']->addScript($helper->url('assets/js/jquery.colorbox.js'));
1491
            //$GLOBALS['xoTheme']->addStylesheet($helper->url('assets/css/colorbox.css'));
1492
            break;
1493 View Code Duplication
        case 'editprofile':
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...
1494
            $GLOBALS['xoTheme']->addScript($helper->url('assets/js/jquery.colorbox.js'));
1495
            $GLOBALS['xoTheme']->addScript($helper->url('assets/js/jquery.validate.js'));
1496
            $GLOBALS['xoTheme']->addScript($helper->url('assets/js/jquery.validation.functions.js'));
1497
            $GLOBALS['xoTheme']->addScript($helper->url('assets/js/jquery.stepy.js'));
1498
            $GLOBALS['xoTheme']->addScript($helper->url('assets/js/jquery.elastic.source.js'));
1499
            $GLOBALS['xoTheme']->addStylesheet($helper->url('assets/css/smallworld.css'));
1500
            break;
1501 View Code Duplication
        case 'smallworldshare':
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...
1502
            $GLOBALS['xoTheme']->addScript($helper->url('assets/js/jquery.oembed.js'));
1503
            $GLOBALS['xoTheme']->addScript($helper->url('assets/js/wall.js'));
1504
            $GLOBALS['xoTheme']->addScript($helper->url('assets/js/jquery.innerfade.js'));
1505
            $GLOBALS['xoTheme']->addScript($helper->url('assets/js/jquery.bookmark.js'));
1506
            $GLOBALS['xoTheme']->addStylesheet($helper->url('assets/css/oembed.css'));
1507
            $GLOBALS['xoTheme']->addStylesheet($helper->url('assets/css/smallworld.css'));
1508
            $GLOBALS['xoTheme']->addScript($helper->url('assets/js/jquery.colorbox.js'));
1509
            break;
1510
        case 'userprofile':
1511
            $GLOBALS['xoTheme']->addScript($helper->url('assets/js/apprise-1.5.full.js'));
1512
            $GLOBALS['xoTheme']->addStylesheet($helper->url('assets/css/jquery.fileupload-ui.css'));
1513
            $GLOBALS['xoTheme']->addStylesheet($helper->url('assets/css/oembed.css'));
1514
            $GLOBALS['xoTheme']->addScript($helper->url('assets/js/jquery.oembed.js'));
1515
            $GLOBALS['xoTheme']->addScript($helper->url('assets/js/wall.js'));
1516
            $GLOBALS['xoTheme']->addScript($helper->url('assets/js/ajaxupload.3.5.js'));
1517
            $GLOBALS['xoTheme']->addScript($helper->url('assets/js/jquery.avatar_helper.js'));
1518
            $GLOBALS['xoTheme']->addScript($helper->url('assets/js/jquery.bookmark.js'));
1519
            $GLOBALS['xoTheme']->addScript($helper->url('assets/js/jquery.colorbox.js'));
1520
            $GLOBALS['xoTheme']->addScript($helper->url('assets/js/jquery.elastic.source.js'));
1521
            $GLOBALS['xoTheme']->addScript($helper->url('assets/js/jquery.countdown.js'));
1522
            $GLOBALS['xoTheme']->addStylesheet($helper->url('assets/css/smallworld.css'));
1523
            break;
1524
    }
1525
}
1526
1527
/**
1528
 * Check if permission is set for userid to post publicly
1529
 *
1530
 * @return array
1531
 */
1532
function smallworld_checkUserPubPostPerm()
1533
{
1534
1535
    $helper     = Helper::getInstance();
1536
    $userPerPub = $helper->getConfig('smallworldshowPoPubPage');
1537
    $pub = (0 !== $userPerPub[0]) ? $userPerPub : $helper->getHandler('SwUser')->allUsers();
1538
    /*
1539
    $check      = new Smallworld\User();
1540
    $userPerPub = smallworld_GetModuleOption('smallworldshowPoPubPage');
1541
    $allUsers   = $check->allUsers();
1542
    if (0 != $userPerPub[0]) {
1543
        $pub = $userPerPub;
1544
    } else {
1545
        $pub = $check->allUsers();
1546
    }
1547
    */
1548
    return $pub;
1549
}
1550
1551
/**
1552
 * Change @username to urls
1553
 *
1554
 * @param string|null $status_text
1555
 * @return string $status_text
1556
 */
1557
function linkify_twitter_status($status_text)
1558
{
1559
    // linkify twitter users
1560
    //$keywords = preg_split("/[\s,]+/", "hypertext language, programming");
1561
    $status_text = preg_replace('/(^|\s)@(\w+)/', '\1<a href="' . XOOPS_URL . '/modules/smallworld/userprofile.php?username=\2">' . '@\2</a> ', $status_text);
1562
1563
    return $status_text;
1564
}
1565
1566
/**
1567
 * Extract users from @tags
1568
 * @param $name
1569
 * @return array @users
1570
 */
1571 View Code Duplication
function smallworld_getUidFromName($name)
0 ignored issues
show
Duplication introduced by
This function 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...
1572
{
1573
    $id     = [];
1574
    $sql    = 'SELECT userid FROM ' . $GLOBALS['xoopsDB']->prefix('smallworld_user') . " WHERE username = '" . $name . "'";
1575
    $result = $GLOBALS['xoopsDB']->queryF($sql);
1576
    while (false !== ($r = $GLOBALS['xoopsDB']->fetchArray($result))) {
1577
        $id = $r['userid'];
1578
    }
1579
1580
    return $id;
1581
}
1582
1583
/**
1584
 * Extract users from @tags
1585
 * @param        $txt
1586
 * @param        $sender
1587
 * @param string $permalink
1588
 * @throws \phpmailerException
1589
 */
1590
function smallworld_getTagUsers($txt, $sender, $permalink = '')
1591
{
1592
    $dBase = new Smallworld\SwDatabase();
1593
    $mail  = new Smallworld\Mail();
1594
    preg_match_all('/@([a-zA-Z0-9]+|\\[[a-zA-Z0-9]+\\])/', $txt, $matches);
1595
    $users = array_unique($matches[1]);
1596
    foreach ($users as $user) {
1597
        $uid    = smallworld_getUidFromName($user);
1598
        $notify = json_decode($dBase->getSettings($uid), true);
1599
        if (isset($notify['notify'])) {
1600
            if (0 != $notify['notify']) {
1601
                $mail->sendMails($sender, $uid, 'tag', $permalink, [$txt]);
0 ignored issues
show
Documentation introduced by
$uid is of type array, but the function expects a integer.

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...
1602
            }
1603
        }
1604
    }
1605
}
1606
1607
/**
1608
 * Function to get count of messages in wall
1609
 * @param int $uid
1610
 * @return int $count
1611
 */
1612
function smallworld_countUserWallMsges($uid)
1613
{
1614
    $db     = \XoopsDatabaseFactory::getDatabaseConnection();
1615
    $sql    = 'SELECT message FROM ' . $db->prefix('smallworld_messages') . " WHERE uid_fk='" . $uid . "'";
1616
    $result = $db->queryF($sql);
1617
    $count  = $db->getRowsNum($result);
1618
1619
    return $count;
1620
}
1621