Passed
Push — master ( b149e1...cca0b5 )
by
unknown
06:07 queued 03:08
created

searchuser.php (2 issues)

1
<?php
2
/**
3
 * Extended User Profile
4
 *
5
 * You may not change or alter any portion of this comment or credits
6
 * of supporting developers from this source code or any supporting source code
7
 * which is considered copyrighted (c) material of the original comment or credit authors.
8
 * This program is distributed in the hope that it will be useful,
9
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
11
 *
12
 * @copyright       (c) 2000-2016 XOOPS Project (www.xoops.org)
13
 * @license             GNU GPL 2 (http://www.gnu.org/licenses/gpl-2.0.html)
14
 * @package             profile
15
 * @since               2.3.0
16
 * @author              Jan Pedersen
17
 * @author              Taiwen Jiang <[email protected]>
18
 */
19
20
use Xmf\Request;
21
use XoopsModules\Yogurt;
22
use XoopsModules\Yogurt\IndexController;
23
24
$op               = isset($_REQUEST['op']) ? $_REQUEST['op'] : 'search';
25
26
switch ($op) {
27
    default:
28
    case 'search':
29
        
30
		$GLOBALS['xoopsOption']['template_main'] = 'yogurt_search.tpl';
31
		require __DIR__ . '/header.php';
32
		
33
		$myts = MyTextSanitizer::getInstance();
34
		$controller = new IndexController($xoopsDB, $xoopsUser, $xoopsModule);
0 ignored issues
show
The call to XoopsModules\Yogurt\IndexController::__construct() has too many arguments starting with $xoopsModule. ( Ignorable by Annotation )

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

34
		$controller = /** @scrutinizer ignore-call */ new IndexController($xoopsDB, $xoopsUser, $xoopsModule);

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

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

Loading history...
35
		$nbSections = $controller->getNumbersSections();
36
        
37
		$limit_default    = 20;
38
		
39
		$groups           = $GLOBALS['xoopsUser'] ? $GLOBALS['xoopsUser']->getGroups() : array(XOOPS_GROUP_ANONYMOUS);
40
		$xoopsOption['cache_group']   = implode('', $groups);
41
		$searchable_types = array(
42
			'textbox',
43
			'select',
44
			'radio',
45
			'yesno',
46
			'date',
47
			'datetime',
48
			'timezone',
49
			'language');
50
			
51
		$sortby_arr      = array();
52
53
        // Dynamic fields
54
        $profile_handler = xoops_getModuleHandler('profile');
55
        // Get fields
56
        $fields = $profile_handler->loadFields();
57
        // Get ids of fields that can be searched
58
        /* @var  XoopsGroupPermHandler $gperm_handler */
59
        $gperm_handler     = xoops_getHandler('groupperm');
60
        $searchable_fields = $gperm_handler->getItemIds('profile_search', $groups, $GLOBALS['xoopsModule']->getVar('mid'));
61
62
        include_once $GLOBALS['xoops']->path('class/xoopsformloader.php');
63
        $searchform = new XoopsThemeForm('', 'searchform', 'searchuser.php', 'post');
64
65
        $name_tray = new XoopsFormElementTray(_US_NICKNAME);
66
        $name_tray->addElement(new XoopsFormSelectMatchOption('', 'uname_match'));
67
        $name_tray->addElement(new XoopsFormText('', 'uname', 35, 255));
68
        $searchform->addElement($name_tray);
69
70
        $email_tray = new XoopsFormElementTray(_US_EMAIL);
71
        $email_tray->addElement(new XoopsFormSelectMatchOption('', 'email_match'));
72
        $email_tray->addElement(new XoopsFormText('', 'email', 35, 255));
73
        $searchform->addElement($email_tray);
74
75
        // add search groups , only for Webmasters
76
        if ($GLOBALS['xoopsUser'] && $GLOBALS['xoopsUser']->isAdmin()) {
77
            $group_tray = new XoopsFormElementTray(_US_GROUPS);
78
            $group_tray->addElement(new XoopsFormSelectGroup('', 'selgroups', null, false, 5, true));
79
            $searchform->addElement($group_tray);
80
        }
81
82
        foreach (array_keys($fields) as $i) {
83
            if (!in_array($fields[$i]->getVar('field_id'), $searchable_fields) || !in_array($fields[$i]->getVar('field_type'), $searchable_types)) {
84
                continue;
85
            }
86
            $sortby_arr[$i] = $fields[$i]->getVar('field_title');
87
            switch ($fields[$i]->getVar('field_type')) {
88
                case 'textbox':
89
                    if ($fields[$i]->getVar('field_valuetype') == XOBJ_DTYPE_INT) {
90
                        $searchform->addElement(new XoopsFormText(sprintf(_MD_YOGURT_LARGERTHAN, $fields[$i]->getVar('field_title')), $fields[$i]->getVar('field_name') . '_larger', 35, 35));
91
                        $searchform->addElement(new XoopsFormText(sprintf(_MD_YOGURT_SMALLERTHAN, $fields[$i]->getVar('field_title')), $fields[$i]->getVar('field_name') . '_smaller', 35, 35));
92
                    } else {
93
                        $tray = new XoopsFormElementTray($fields[$i]->getVar('field_title'));
94
                        $tray->addElement(new XoopsFormSelectMatchOption('', $fields[$i]->getVar('field_name') . '_match'));
95
                        $tray->addElement(new XoopsFormText('', $fields[$i]->getVar('field_name'), 35, $fields[$i]->getVar('field_maxlength')));
96
                        $searchform->addElement($tray);
97
                        unset($tray);
98
                    }
99
                    break;
100
101
                case 'radio':
102
                case 'select':
103
                    $options = $fields[$i]->getVar('field_options');
104
                    $size    = min(count($options), 10);
105
                    $element = new XoopsFormSelect($fields[$i]->getVar('field_title'), $fields[$i]->getVar('field_name'), null, $size, true);
106
                    asort($options);
107
                    $element->addOptionArray($options);
108
                    $searchform->addElement($element);
109
                    unset($element);
110
                    break;
111
112
                case 'yesno':
113
                    $element = new XoopsFormSelect($fields[$i]->getVar('field_title'), $fields[$i]->getVar('field_name'), null, 2, true);
114
                    $element->addOption(1, _YES);
115
                    $element->addOption(0, _NO);
116
                    $searchform->addElement($element);
117
                    unset($element);
118
                    break;
119
120
                case 'date':
121
                case 'datetime':
122
                    $searchform->addElement(new XoopsFormTextDateSelect(sprintf(_MD_YOGURT_LATERTHAN, $fields[$i]->getVar('field_title')), $fields[$i]->getVar('field_name') . '_larger', 15, 1));
123
                    $searchform->addElement(new XoopsFormTextDateSelect(sprintf(_MD_YOGURT_EARLIERTHAN, $fields[$i]->getVar('field_title')), $fields[$i]->getVar('field_name') . '_smaller', 15, time()));
124
                    break;
125
126
                case 'timezone':
127
                    $element = new XoopsFormSelect($fields[$i]->getVar('field_title'), $fields[$i]->getVar('field_name'), null, 6, true);
128
                    include_once $GLOBALS['xoops']->path('class/xoopslists.php');
129
                    $element->addOptionArray(XoopsLists::getTimeZoneList());
130
                    $searchform->addElement($element);
131
                    unset($element);
132
                    break;
133
134
                case 'language':
135
                    $element = new XoopsFormSelectLang($fields[$i]->getVar('field_title'), $fields[$i]->getVar('field_name'), null, 6);
136
                    $searchform->addElement($element);
137
                    unset($element);
138
                    break;
139
            }
140
        }
141
        asort($sortby_arr);
142
        $sortby_arr    = array_merge(array('' => _NONE, 'uname' => _US_NICKNAME, 'email' => _US_EMAIL), $sortby_arr);
143
        $sortby_select = new XoopsFormSelect(_MD_YOGURT_SORTBY, 'sortby');
144
        $sortby_select->addOptionArray($sortby_arr);
145
        $searchform->addElement($sortby_select);
146
147
        $order_select = new XoopsFormRadio(_MD_YOGURT_ORDER, 'order', 0);
148
        $order_select->addOption(0, _ASCENDING);
149
        $order_select->addOption(1, _DESCENDING);
150
        $searchform->addElement($order_select);
151
152
        $limit_text = new XoopsFormText(_MD_YOGURT_PERPAGE, 'limit', 15, 10, $limit_default);
153
        $searchform->addElement($limit_text);
154
        $searchform->addElement(new XoopsFormHidden('op', 'results'));
155
        $searchform->addElement(new XoopsFormButton('', 'submit', _SUBMIT, 'submit'));
156
157
        $searchform->assign($GLOBALS['xoopsTpl']);
158
        $GLOBALS['xoopsTpl']->assign('page_title', _MD_YOGURT_SEARCH);
159
160
        //added count user
161
        /* @var XoopsMemberHandler $member_handler */
162
        $member_handler = xoops_getHandler('member');
163
        $acttotal       = $member_handler->getUserCount(new Criteria('level', 0, '>'));
164
        $total          = sprintf(_MD_YOGURT_ACTUS, "<span style='color:#ff0000;'>{$acttotal}</span>");
165
        $GLOBALS['xoopsTpl']->assign('total_users', $total);
166
        break;
167
168
    case 'results':
169
		$GLOBALS['xoopsOption']['template_main'] = 'yogurt_results.tpl';
170
		require __DIR__ . '/header.php';
171
172
		$myts = MyTextSanitizer::getInstance();
173
		$controller = new IndexController($xoopsDB, $xoopsUser, $xoopsModule);
174
		$nbSections = $controller->getNumbersSections();
175
        
176
		
177
        $GLOBALS['xoopsTpl']->assign('page_title', _MD_YOGURT_RESULTS);
178
        $xoBreadcrumbs[] = array(
179
            'link'  => XOOPS_URL . '/modules/' . $GLOBALS['xoopsModule']->getVar('dirname', 'n') . '/searchuser.php',
180
            'title' => _SEARCH);
181
        $xoBreadcrumbs[] = array('title' => _MD_YOGURT_RESULTS);
182
        /* @var XoopsMemberHandler $member_handler */
183
        $member_handler = xoops_getHandler('member');
184
        // Dynamic fields
185
        $profile_handler = xoops_getModuleHandler('profile');
186
        // Get fields
187
        $fields = $profile_handler->loadFields();
188
        // Get ids of fields that can be searched
189
        /* @var  XoopsGroupPermHandler $gperm_handler */
190
        $gperm_handler     = xoops_getHandler('groupperm');
191
        $searchable_fields = $gperm_handler->getItemIds('profile_search', $groups, $GLOBALS['xoopsModule']->getVar('mid'));
192
        $searchvars        = array();
193
        $search_url        = array();
194
195
        $criteria = new CriteriaCompo(new Criteria('level', 0, '>'));
196
197
        if (isset($_REQUEST['uname']) && $_REQUEST['uname'] !== '') {
198
            $string = $myts->addSlashes(trim($_REQUEST['uname']));
199
            switch ($_REQUEST['uname_match']) {
200
                case XOOPS_MATCH_START:
201
                    $string .= '%';
202
                    break;
203
204
                case XOOPS_MATCH_END:
205
                    $string = '%' . $string;
206
                    break;
207
208
                case XOOPS_MATCH_CONTAIN:
209
                    $string = '%' . $string . '%';
210
                    break;
211
            }
212
            $criteria->add(new Criteria('uname', $string, 'LIKE'));
213
            $search_url[] = 'uname=' . $_REQUEST['uname'];
214
            $search_url[] = 'uname_match=' . $_REQUEST['uname_match'];
215
            $searchvars[] = 'uname';
216
        }
217
        if (isset($_REQUEST['email']) && $_REQUEST['email'] !== '') {
218
            $string = $myts->addSlashes(trim($_REQUEST['email']));
219
            switch ($_REQUEST['email_match']) {
220
                case XOOPS_MATCH_START:
221
                    $string .= '%';
222
                    break;
223
224
                case XOOPS_MATCH_END:
225
                    $string = '%' . $string;
226
                    break;
227
228
                case XOOPS_MATCH_CONTAIN:
229
                    $string = '%' . $string . '%';
230
                    break;
231
            }
232
            $searchvars[] = 'email';
233
            $search_url[] = 'email=' . $_REQUEST['email'];
234
            $search_url[] = 'email_match=' . $_REQUEST['email_match'];
235
            $criteria->add(new Criteria('email', $string, 'LIKE'));
236
            $criteria->add(new Criteria('user_viewemail', 1));
237
        }
238
239
        //$search_url = array();
240
        foreach (array_keys($fields) as $i) {
241
            //Radio and Select fields
242
            if (!in_array($fields[$i]->getVar('field_id'), $searchable_fields) || !in_array($fields[$i]->getVar('field_type'), $searchable_types)) {
243
                continue;
244
            }
245
            $fieldname = $fields[$i]->getVar('field_name');
246
            if (in_array($fields[$i]->getVar('field_type'), array('select', 'radio'))) {
247
                if (empty($_REQUEST[$fieldname])) {
248
                    continue;
249
                }
250
251
                //If field value is sent through request and is not an empty value
252
                switch ($fields[$i]->getVar('field_valuetype')) {
253
                    case XOBJ_DTYPE_OTHER:
254
                    case XOBJ_DTYPE_INT:
255
                        $value        = array_map('intval', $_REQUEST[$fieldname]);
256
                        $searchvars[] = $fieldname;
257
                        $criteria->add(new Criteria($fieldname, '(' . implode(',', $value) . ')', 'IN'));
258
                        break;
259
260
                    case XOBJ_DTYPE_URL:
261
                    case XOBJ_DTYPE_TXTBOX:
262
                    case XOBJ_DTYPE_TXTAREA:
263
                        $value        = array_map(array($GLOBALS['xoopsDB'], 'quoteString'), $_REQUEST[$fieldname]);
264
                        $searchvars[] = $fieldname;
265
                        $criteria->add(new Criteria($fieldname, '(' . implode(',', $value) . ')', 'IN'));
266
                        break;
267
                }
268
                foreach ($_REQUEST[$fieldname] as $value) {
269
                    $search_url[] = $fieldname . '[]=' . $value;
270
                }
271
            } else {
272
                //Other fields (not radio, not select)
273
                switch ($fields[$i]->getVar('field_valuetype')) {
274
                    case XOBJ_DTYPE_OTHER:
275
                    case XOBJ_DTYPE_INT:
276
                        switch ($fields[$i]->getVar('field_type')) {
277
                            case 'date':
278
                            case 'datetime':
279
                                $value = $_REQUEST[$fieldname . '_larger'];
280
                                if (!($value = strtotime($_REQUEST[$fieldname . '_larger']))) {
281
                                    $value = (int)$_REQUEST[$fieldname . '_larger'];
282
                                }
283
                                if ($value > 0) {
284
                                    $search_url[] = $fieldname . '_larger=' . $value;
285
                                    $searchvars[] = $fieldname;
286
                                    $criteria->add(new Criteria($fieldname, $value, '>='));
287
                                }
288
289
                                $value = $_REQUEST[$fieldname . '_smaller'];
290
                                if (!($value = strtotime($_REQUEST[$fieldname . '_smaller']))) {
291
                                    $value = (int)$_REQUEST[$fieldname . '_smaller'];
292
                                }
293
                                if ($value > 0) {
294
                                    $search_url[] = $fieldname . '_smaller=' . $value;
295
                                    $searchvars[] = $fieldname;
296
                                    $criteria->add(new Criteria($fieldname, $value + 24 * 3600, '<='));
297
                                }
298
                                break;
299
300
                            default:
301
                                if (isset($_REQUEST[$fieldname . '_larger']) && (int)$_REQUEST[$fieldname . '_larger'] !== 0) {
302
                                    $value        = (int)$_REQUEST[$fieldname . '_larger'];
303
                                    $search_url[] = $fieldname . '_larger=' . $value;
304
                                    $searchvars[] = $fieldname;
305
                                    $criteria->add(new Criteria($fieldname, $value, '>='));
306
                                }
307
308
                                if (isset($_REQUEST[$fieldname . '_smaller']) && (int)$_REQUEST[$fieldname . '_smaller'] !== 0) {
309
                                    $value        = (int)$_REQUEST[$fieldname . '_smaller'];
310
                                    $search_url[] = $fieldname . '_smaller=' . $value;
311
                                    $searchvars[] = $fieldname;
312
                                    $criteria->add(new Criteria($fieldname, $value, '<='));
313
                                }
314
                                break;
315
                        }
316
317
                        if (isset($_REQUEST[$fieldname]) && !isset($_REQUEST[$fieldname . '_smaller']) && !isset($_REQUEST[$fieldname . '_larger'])) {
318
                            if (!is_array($_REQUEST[$fieldname])) {
319
                                $value        = (int)$_REQUEST[$fieldname];
320
                                $search_url[] = $fieldname . '=' . $value;
321
                                $criteria->add(new Criteria($fieldname, $value, '='));
322
                            } else {
323
                                $value = array_map('intval', $_REQUEST[$fieldname]);
324
                                foreach ($value as $thisvalue) {
325
                                    $search_url[] = $fieldname . '[]=' . $thisvalue;
326
                                }
327
                                $criteria->add(new Criteria($fieldname, '(' . implode(',', $value) . ')', 'IN'));
328
                            }
329
330
                            $searchvars[] = $fieldname;
331
                        }
332
                        break;
333
334
                    case XOBJ_DTYPE_URL:
335
                    case XOBJ_DTYPE_TXTBOX:
336
                    case XOBJ_DTYPE_TXTAREA:
337
                        if (isset($_REQUEST[$fieldname]) && $_REQUEST[$fieldname] !== '') {
338
                            $value = $myts->addSlashes(trim($_REQUEST[$fieldname]));
339
                            switch ($_REQUEST[$fieldname . '_match']) {
340
                                case XOOPS_MATCH_START:
341
                                    $value .= '%';
342
                                    break;
343
344
                                case XOOPS_MATCH_END:
345
                                    $value = '%' . $value;
346
                                    break;
347
348
                                case XOOPS_MATCH_CONTAIN:
349
                                    $value = '%' . $value . '%';
350
                                    break;
351
                            }
352
                            $search_url[] = $fieldname . '=' . $_REQUEST[$fieldname];
353
                            $search_url[] = $fieldname . '_match=' . $_REQUEST[$fieldname . '_match'];
354
                            $operator     = 'LIKE';
355
                            $criteria->add(new Criteria($fieldname, $value, $operator));
356
                            $searchvars[] = $fieldname;
357
                        }
358
                        break;
359
                }
360
            }
361
        }
362
363
        //        if ($_REQUEST['sortby'] == "name") {
364
        //            $criteria->setSort("name");
365
        //        } else if ($_REQUEST['sortby'] == "email") {
366
        //            $criteria->setSort("email");
367
        //        } else if ($_REQUEST['sortby'] == "uname") {
368
        //            $criteria->setSort("uname");
369
        //        } else if (isset($fields[$_REQUEST['sortby']])) {
370
        //            $criteria->setSort($fields[$_REQUEST['sortby']]->getVar('field_name'));
371
        //        }
372
373
        // change by zyspec:
374
        $sortby = 'uname';
375
        if (!empty($_REQUEST['sortby'])) {
376
            switch ($_REQUEST['sortby']) {
377
                case 'name':
378
                case 'email':
379
                case 'uname':
380
                    $sortby = $_REQUEST['sortby'];
381
                    break;
382
                default:
383
                    if (isset($fields[$_REQUEST['sortby']])) {
384
                        $sortby = $fields[$_REQUEST['sortby']]->getVar('field_name');
385
                    }
386
                    break;
387
            }
388
            $criteria->setSort($sortby);
389
        }
390
391
        // add search groups , only for Webmasters
392
        $searchgroups = array();
393
        if ($GLOBALS['xoopsUser'] && $GLOBALS['xoopsUser']->isAdmin()) {
394
            $searchgroups = empty($_REQUEST['selgroups']) ? array() : array_map('intval', $_REQUEST['selgroups']);
395
            foreach ($searchgroups as $group) {
396
                $search_url[] = 'selgroups[]=' . $group;
397
            }
398
        }
399
400
        $order = $_REQUEST['order'] == 0 ? 'ASC' : 'DESC';
401
        $criteria->setOrder($order);
402
403
        $limit = empty($_REQUEST['limit']) ? $limit_default : (int)$_REQUEST['limit'];
404
        $criteria->setLimit($limit);
405
406
        $start = isset($_REQUEST['start']) ? (int)$_REQUEST['start'] : 0;
407
        $criteria->setStart($start);
408
409
        list($users, $profiles, $total_users) = $profile_handler->search($criteria, $searchvars, $searchgroups);
0 ignored issues
show
The method search() does not exist on XoopsObjectHandler. It seems like you code against a sub-type of XoopsObjectHandler such as XoopsPersistableObjectHandler. ( Ignorable by Annotation )

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

409
        /** @scrutinizer ignore-call */ 
410
        list($users, $profiles, $total_users) = $profile_handler->search($criteria, $searchvars, $searchgroups);
Loading history...
410
411
        $total = sprintf(_MD_YOGURT_FOUNDUSER, "<span class='red'>{$total_users}</span>") . ' ';
412
        $GLOBALS['xoopsTpl']->assign('total_users', $total);
413
414
        //Sort information
415
        foreach (array_keys($users) as $k) {
416
            $userarray             = array();
417
            $userarray['output'][] = "<a href='userinfo.php?uid=" . $users[$k]->getVar('uid') . "' title=''>" . $users[$k]->getVar('uname') . '</a>';
418
            $userarray['output'][] = ($users[$k]->getVar('user_viewemail') == 1 || (is_object($GLOBALS['xoopsUser']) && $GLOBALS['xoopsUser']->isAdmin())) ? $users[$k]->getVar('email') : '';
419
420
            foreach (array_keys($fields) as $i) {
421
                if (in_array($fields[$i]->getVar('field_id'), $searchable_fields) && in_array($fields[$i]->getVar('field_type'), $searchable_types) && in_array($fields[$i]->getVar('field_name'), $searchvars)) {
422
                    $userarray['output'][] = $fields[$i]->getOutputValue($users[$k], $profiles[$k]);
423
                }
424
            }
425
            $GLOBALS['xoopsTpl']->append('users', $userarray);
426
            unset($userarray);
427
        }
428
429
        //Get captions
430
        $captions[] = _US_NICKNAME;
431
        $captions[] = _US_EMAIL;
432
        foreach (array_keys($fields) as $i) {
433
            if (in_array($fields[$i]->getVar('field_id'), $searchable_fields) && in_array($fields[$i]->getVar('field_type'), $searchable_types) && in_array($fields[$i]->getVar('field_name'), $searchvars)) {
434
                $captions[] = $fields[$i]->getVar('field_title');
435
            }
436
        }
437
        $GLOBALS['xoopsTpl']->assign('captions', $captions);
438
439
        if ($total_users > $limit) {
440
            $search_url[] = 'op=results';
441
            $search_url[] = 'order=' . $order;
442
            //TODO remove it for final release
443
            //            $search_url[] = "sortby=" . htmlspecialchars($_REQUEST['sortby']);
444
            $search_url[] = 'sortby=' . htmlspecialchars($sortby); // change by zyspec
445
            $search_url[] = 'limit=' . $limit;
446
            if (isset($search_url)) {
447
                $args = implode('&amp;', $search_url);
448
            }
449
450
            include_once $GLOBALS['xoops']->path('class/pagenav.php');
451
            $nav = new XoopsPageNav($total_users, $limit, $start, 'start', $args);
452
            $GLOBALS['xoopsTpl']->assign('nav', $nav->renderNav(5));
453
        }
454
        break;
455
}
456
require __DIR__ . '/footer.php';
457
require dirname(__DIR__, 2) . '/footer.php';
458