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 * @copyright    XOOPS Project http://xoops.org/
14 * @license      GNU GPL 2 or later (http://www.gnu.org/licenses/gpl-2.0.html)
15 * @package
16 * @since
17 * @author       XOOPS Development Team, Kazumi Ono (AKA onokazu)
18 */
19/* @var XoopsUser $xoopsUser */
20/* @var XoopsModule $xoopsModule */
21
22// Check users rights
23if (!is_object($xoopsUser) || !is_object($xoopsModule) || !$xoopsUser->isAdmin($xoopsModule->mid())) {
24    exit(_NOPERM);
25}
26
27include_once XOOPS_ROOT_PATH . '/modules/system/admin/users/users.php';
28// Get Action type
29$op = system_CleanVars($_REQUEST, 'op', 'default', 'string');
30/* @var XoopsMemberHandler $member_handler */
31$member_handler = xoops_getHandler('member', 'system');
32// Define main template
33$GLOBALS['xoopsOption']['template_main'] = 'system_users.tpl';
34// Call Header
35xoops_cp_header();
36
37$myts = MyTextSanitizer::getInstance();
38// Define Stylesheet
39$xoTheme->addStylesheet(XOOPS_URL . '/modules/system/css/admin.css');
40$xoTheme->addStylesheet(XOOPS_URL . '/modules/system/css/ui/' . xoops_getModuleOption('jquery_theme', 'system') . '/ui.all.css');
41// Define scripts
42$xoTheme->addScript('modules/system/js/admin.js');
43// Define Breadcrumb and tips
44$xoBreadCrumb->addLink(_AM_SYSTEM_USERS_NAV_MAIN, system_adminVersion('users', 'adminpath'));
45
46$uid = system_CleanVars($_REQUEST, 'uid', 0);
47switch ($op) {
48
49    // Edit user
50    case 'users_edit':
51        // Assign Breadcrumb menu
52        $xoBreadCrumb->addHelp(system_adminVersion('users', 'help') . '#edit');
53        $xoBreadCrumb->addLink(_AM_SYSTEM_USERS_NAV_EDIT_USER);
54        $xoBreadCrumb->render();
55        form_user(false, $uid);
56        break;
57
58    // Add user
59    case 'users_add':
60        // Assign Breadcrumb menu
61        $xoBreadCrumb->addHelp(system_adminVersion('users', 'help') . '#add');
62        $xoBreadCrumb->addLink(_AM_SYSTEM_USERS_NAV_ADD_USER);
63        $xoBreadCrumb->render();
64        form_user(true);
65        break;
66
67    // Delete user
68    case 'users_delete':
69        $xoBreadCrumb->render();
70        $user = $member_handler->getUser($uid);
71        if (isset($_REQUEST['ok']) && $_REQUEST['ok'] == 1) {
72            if (!$GLOBALS['xoopsSecurity']->check()) {
73                redirect_header('admin.php?fct=users', 3, implode('<br>', $GLOBALS['xoopsSecurity']->getErrors()));
74            }
75
76            $groups = $user->getGroups();
77            if (in_array(XOOPS_GROUP_ADMIN, $groups)) {
78                xoops_error(sprintf(_AM_SYSTEM_USERS_NO_ADMINSUPP, $user->getVar('uname')));
79            } elseif (!$member_handler->deleteUser($user)) {
80                xoops_error(sprintf(_AM_SYSTEM_USERS_NO_SUPP, $user->getVar('uname')));
81            } else {
82                /* @var XoopsOnlineHandler $online_handler */
83                $online_handler = xoops_getHandler('online');
84                $online_handler->destroy($uid);
85                // RMV-NOTIFY
86                xoops_notification_deletebyuser($uid);
87                redirect_header('admin.php?fct=users', 1, _AM_SYSTEM_DBUPDATED);
88            }
89        } else {
90            //Assign Breadcrumb menu
91            $xoBreadCrumb->addHelp(system_adminVersion('users', 'help') . '#delete');
92            $xoBreadCrumb->addLink(_AM_SYSTEM_USERS_NAV_DELETE_USER);
93            $xoBreadCrumb->render();
94            xoops_confirm(array(
95                              'ok'  => 1,
96                              'uid' => $uid,
97                              'op'  => 'users_delete'), $_SERVER['REQUEST_URI'], sprintf(_AM_SYSTEM_USERS_FORM_SURE_DEL, $user->getVar('uname')));
98        }
99        break;
100
101    // Delete users
102    case 'action_group':
103        if (!$GLOBALS['xoopsSecurity']->check()) {
104            redirect_header('admin.php?fct=users', 3, implode('<br>', $GLOBALS['xoopsSecurity']->getErrors()));
105        }
106
107        if (@isset($_REQUEST['memberslist_id']) || @$_REQUEST['memberslist_id'] !== '') {
108            $xoBreadCrumb->render();
109            $error = '';
110            foreach ($_REQUEST['memberslist_id'] as $del) {
111                $del    = (int)$del;
112                $user   = $member_handler->getUser($del);
113                $groups = $user->getGroups();
114                if (in_array(XOOPS_GROUP_ADMIN, $groups)) {
115                    $error .= sprintf(_AM_SYSTEM_USERS_NO_ADMINSUPP, $user->getVar('uname'));
116                } elseif (!$member_handler->deleteUser($user)) {
117                    $error .= sprintf(_AM_SYSTEM_USERS_NO_SUPP, $user->getVar('uname'));
118                } else {
119                    /* @var XoopsOnlineHandler $online_handler */
120                    $online_handler = xoops_getHandler('online');
121                    $online_handler->destroy($del);
122                    // RMV-NOTIFY
123                    xoops_notification_deletebyuser($del);
124                }
125            }
126            if ($error !== '') {
127                redirect_header('admin.php?fct=users', 3, sprintf(_AM_SYSTEM_USERS_ERROR, $error));
128            } else {
129                redirect_header('admin.php?fct=users', 1, _AM_SYSTEM_DBUPDATED);
130            }
131        }
132        break;
133
134    // Save user
135    case 'users_save':
136        global $xoopsConfig, $xoopsModule, $xoopsUser;
137
138        if (isset($_REQUEST['uid'])) {
139            //Update user
140            if (!$GLOBALS['xoopsSecurity']->check()) {
141                redirect_header('admin.php?fct=users', 3, implode('<br>', $GLOBALS['xoopsSecurity']->getErrors()));
142            }
143            // RMV-NOTIFY
144            $user_avatar = $theme = null;
145            if (!isset($_REQUEST['attachsig'])) {
146                $attachsig = null;
147            }
148            if (!isset($_REQUEST['user_viewemail'])) {
149                $user_viewemail = null;
150            }
151
152            $edituser = $member_handler->getUser($uid);
153            if ($edituser->getVar('uname', 'n') != $_REQUEST['username'] && $member_handler->getUserCount(new Criteria('uname', $myts->addSlashes($_REQUEST['username']))) > 0) {
154                xoops_cp_header();
155                xoops_error(sprintf(_AM_SYSTEM_USERS_PSEUDO_ERROR, htmlspecialchars($_REQUEST['username'])));
156                xoops_cp_footer();
157            } elseif ($edituser->getVar('email', 'n') != $_REQUEST['email'] && $member_handler->getUserCount(new Criteria('email', $myts->addSlashes($_REQUEST['email']))) > 0) {
158                xoops_cp_header();
159                xoops_error(sprintf(_AM_SYSTEM_USERS_MAIL_ERROR, htmlspecialchars($_REQUEST['email'])));
160                xoops_cp_footer();
161            } else {
162                $edituser->setVar('name', $_REQUEST['name']);
163                $edituser->setVar('uname', $_REQUEST['username']);
164                $edituser->setVar('email', $_REQUEST['email']);
165                $url = isset($_REQUEST['url']) ? formatURL($_REQUEST['url']) : '';
166                $edituser->setVar('url', $url);
167                $edituser->setVar('user_icq', $_REQUEST['user_icq']);
168                $edituser->setVar('user_from', $_REQUEST['user_from']);
169                $edituser->setVar('user_sig', $_REQUEST['user_sig']);
170                $user_viewemail = (isset($_REQUEST['user_viewemail']) && $_REQUEST['user_viewemail'] == 1) ? 1 : 0;
171                $edituser->setVar('user_viewemail', $user_viewemail);
172                $edituser->setVar('user_aim', $_REQUEST['user_aim']);
173                $edituser->setVar('user_yim', $_REQUEST['user_yim']);
174                $edituser->setVar('user_msnm', $_REQUEST['user_msnm']);
175                $attachsig = (isset($_REQUEST['attachsig']) && $_REQUEST['attachsig'] == 1) ? 1 : 0;
176                $edituser->setVar('attachsig', $attachsig);
177                $edituser->setVar('timezone_offset', $_REQUEST['timezone_offset']);
178                $edituser->setVar('uorder', $_REQUEST['uorder']);
179                $edituser->setVar('umode', $_REQUEST['umode']);
180                // RMV-NOTIFY
181                $edituser->setVar('notify_method', $_REQUEST['notify_method']);
182                $edituser->setVar('notify_mode', $_REQUEST['notify_mode']);
183                $edituser->setVar('bio', $_REQUEST['bio']);
184                $edituser->setVar('rank', $_REQUEST['rank']);
185                $edituser->setVar('user_occ', $_REQUEST['user_occ']);
186                $edituser->setVar('user_intrest', $_REQUEST['user_intrest']);
187                $edituser->setVar('user_mailok', $_REQUEST['user_mailok']);
188                if ($_REQUEST['pass2'] !== '') {
189                    if ($_REQUEST['password'] != $_REQUEST['pass2']) {
190                        xoops_cp_header();
191                        echo '
192                        <strong>' . _AM_SYSTEM_USERS_STNPDNM . '</strong>';
193                        xoops_cp_footer();
194                        exit();
195                    }
196                    $edituser->setVar('pass', password_hash($_REQUEST['password'], PASSWORD_DEFAULT));
197                }
198                if (!$member_handler->insertUser($edituser)) {
199                    xoops_cp_header();
200                    echo $edituser->getHtmlErrors();
201                    xoops_cp_footer();
202                } else {
203                    if ($_REQUEST['groups'] != array()) {
204                        global $xoopsUser;
205                        $oldgroups = $edituser->getGroups();
206                        //If the edited user is the current user and the current user WAS in the webmaster's group and is NOT in the new groups array
207                        if ($edituser->getVar('uid') == $xoopsUser->getVar('uid') && in_array(XOOPS_GROUP_ADMIN, $oldgroups) && !in_array(XOOPS_GROUP_ADMIN, $_REQUEST['groups'])) {
208                            //Add the webmaster's group to the groups array to prevent accidentally removing oneself from the webmaster's group
209                            $_REQUEST['groups'][] = XOOPS_GROUP_ADMIN;
210                        }
211                        /* @var XoopsMemberHandler $member_handler */
212                        $member_handler = xoops_getHandler('member');
213                        foreach ($oldgroups as $groupid) {
214                            $member_handler->removeUsersFromGroup($groupid, array($edituser->getVar('uid')));
215                        }
216                        foreach ($_REQUEST['groups'] as $groupid) {
217                            $member_handler->addUserToGroup($groupid, $edituser->getVar('uid'));
218                        }
219                    }
220                    redirect_header('admin.php?fct=users', 1, _AM_SYSTEM_DBUPDATED);
221                }
222            }
223            exit();
224        } else {
225            //Add user
226            if (!$GLOBALS['xoopsSecurity']->check()) {
227                redirect_header('admin.php?fct=users', 3, implode('<br>', $GLOBALS['xoopsSecurity']->getErrors()));
228            }
229            if (!$_REQUEST['username'] || !$_REQUEST['email'] || !$_REQUEST['password']) {
230                $adduser_errormsg = _AM_SYSTEM_USERS_YMCACF;
231            } else {
232                /* @var XoopsMemberHandler $member_handler */
233                $member_handler = xoops_getHandler('member');
234                // make sure the username doesnt exist yet
235                if ($member_handler->getUserCount(new Criteria('uname', $myts->addSlashes($_REQUEST['username']))) > 0) {
236                    $adduser_errormsg = 'User name ' . htmlspecialchars($_REQUEST['username']) . ' already exists';
237                } else {
238                    $newuser = $member_handler->createUser();
239                    if (isset($user_viewemail)) {
240                        $newuser->setVar('user_viewemail', $_REQUEST['user_viewemail']);
241                    }
242                    if (isset($attachsig)) {
243                        $newuser->setVar('attachsig', $_REQUEST['attachsig']);
244                    }
245                    $newuser->setVar('name', $_REQUEST['name']);
246                    $newuser->setVar('uname', $_REQUEST['username']);
247                    $newuser->setVar('email', $_REQUEST['email']);
248                    $newuser->setVar('url', formatURL($_REQUEST['url']));
249                    $newuser->setVar('user_avatar', 'avatars/blank.gif');
250                    $newuser->setVar('user_regdate', time());
251                    $newuser->setVar('user_icq', $_REQUEST['user_icq']);
252                    $newuser->setVar('user_from', $_REQUEST['user_from']);
253                    $newuser->setVar('user_sig', $_REQUEST['user_sig']);
254                    $newuser->setVar('user_aim', $_REQUEST['user_aim']);
255                    $newuser->setVar('user_yim', $_REQUEST['user_yim']);
256                    $newuser->setVar('user_msnm', $_REQUEST['user_msnm']);
257                    if ($_REQUEST['pass2'] !== '') {
258                        if ($_REQUEST['password'] != $_REQUEST['pass2']) {
259                            xoops_cp_header();
260                            echo '<strong>' . _AM_SYSTEM_USERS_STNPDNM . '</strong>';
261                            xoops_cp_footer();
262                            exit();
263                        }
264                        $newuser->setVar('pass', password_hash($_REQUEST['password'], PASSWORD_DEFAULT));
265                    }
266                    $newuser->setVar('timezone_offset', $_REQUEST['timezone_offset']);
267                    $newuser->setVar('uorder', $_REQUEST['uorder']);
268                    $newuser->setVar('umode', $_REQUEST['umode']);
269                    // RMV-NOTIFY
270                    $newuser->setVar('notify_method', $_REQUEST['notify_method']);
271                    $newuser->setVar('notify_mode', $_REQUEST['notify_mode']);
272                    $newuser->setVar('bio', $_REQUEST['bio']);
273                    $newuser->setVar('rank', $_REQUEST['rank']);
274                    $newuser->setVar('level', 1);
275                    $newuser->setVar('user_occ', $_REQUEST['user_occ']);
276                    $newuser->setVar('user_intrest', $_REQUEST['user_intrest']);
277                    $newuser->setVar('user_mailok', $_REQUEST['user_mailok']);
278                    if (!$member_handler->insertUser($newuser)) {
279                        $adduser_errormsg = _AM_SYSTEM_USERS_CNRNU;
280                    } else {
281                        $groups_failed = array();
282                        foreach ($_REQUEST['groups'] as $group) {
283                            $group = (int)$group;
284                            if (!$member_handler->addUserToGroup($group, $newuser->getVar('uid'))) {
285                                $groups_failed[] = $group;
286                            }
287                        }
288                        if (!empty($groups_failed)) {
289                            $group_names      = $member_handler->getGroupList(new Criteria('groupid', '(' . implode(', ', $groups_failed) . ')', 'IN'));
290                            $adduser_errormsg = sprintf(_AM_SYSTEM_USERS_CNRNU2, implode(', ', $group_names));
291                        } else {
292                            xoops_load('XoopsUserUtility');
293                            XoopsUserUtility::sendWelcome($newuser);
294                            redirect_header('admin.php?fct=users', 1, _AM_SYSTEM_DBUPDATED);
295                        }
296                    }
297                }
298            }
299            xoops_error($adduser_errormsg);
300        }
301        break;
302
303    // Activ member
304    case 'users_active':
305        if (isset($_REQUEST['uid'])) {
306            $obj = $member_handler->getUser($uid);
307            //echo $_REQUEST["uid"];
308            //print_r($obj);
309        }
310        $obj->setVar('level', 1);
311        if ($member_handler->insertUser($obj, true)) {
312            redirect_header('admin.php?fct=users', 1, _AM_SYSTEM_DBUPDATED);
313        }
314        echo $obj->getHtmlErrors();
315        break;
316
317    // Synchronize
318    case 'users_synchronize':
319        if (isset($_REQUEST['status']) && $_REQUEST['status'] == 1) {
320            synchronize($$uid, 'user');
321        } elseif (isset($_REQUEST['status']) && $_REQUEST['status'] == 2) {
322            synchronize('', 'all users');
323        }
324        redirect_header('admin.php?fct=users', 1, _AM_SYSTEM_DBUPDATED);
325        break;
326
327    default:
328        // Search and Display
329        // Define scripts
330        $xoTheme->addScript('browse.php?Frameworks/jquery/jquery.js');
331        $xoTheme->addScript('browse.php?Frameworks/jquery/plugins/jquery.ui.js');
332        //table sorting does not work with select boxes
333        //$xoTheme->addScript('browse.php?Frameworks/jquery/plugins/jquery.tablesorter.js');
334        $xoTheme->addScript('modules/system/js/admin.js');
335        //Recherche approfondie
336
337        if (isset($_REQUEST['complet_search'])) {
338            // Assign Breadcrumb menu
339            $xoBreadCrumb->addLink(_AM_SYSTEM_USERS_NAV_ADVANCED_SEARCH);
340            $xoBreadCrumb->addHelp(system_adminVersion('users', 'help'));
341            $xoBreadCrumb->addTips(_AM_SYSTEM_USERS_NAV_TIPS);
342            $xoBreadCrumb->render();
343
344            $acttotal   = $member_handler->getUserCount(new Criteria('level', 0, '>'));
345            $inacttotal = $member_handler->getUserCount(new Criteria('level', 0));
346
347            //$group_select = new XoopsFormSelectGroup(_AM_SYSTEM_USERS_GROUPS, "selgroups", null, false, 1, false);
348            $group_select = new XoopsFormSelect(_AM_SYSTEM_USERS_GROUPS, 'selgroups');
349            /* @var XoopsGroupHandler $group_handler */
350            $group_handler = xoops_getHandler('group');
351            $group_arr     = $group_handler->getObjects();
352            $group_select->addOption('', '--------------');
353            foreach (array_keys($group_arr) as $i) {
354                if ($group_arr[$i]->getVar('groupid') != XOOPS_GROUP_ANONYMOUS) {
355                    $group_select->addOption('' . $group_arr[$i]->getVar('groupid') . '', '' . $group_arr[$i]->getVar('name') . '');
356                }
357            }
358
359            $uname_text  = new XoopsFormText('', 'user_uname', 30, 60);
360            $uname_match = new XoopsFormSelectMatchOption('', 'user_uname_match');
361            $uname_tray  = new XoopsFormElementTray(_AM_SYSTEM_USERS_UNAME, '&nbsp;');
362            $uname_tray->addElement($uname_match);
363            $uname_tray->addElement($uname_text);
364            $name_text  = new XoopsFormText('', 'user_name', 30, 60);
365            $name_match = new XoopsFormSelectMatchOption('', 'user_name_match');
366            $name_tray  = new XoopsFormElementTray(_AM_SYSTEM_USERS_REALNAME, '&nbsp;');
367            $name_tray->addElement($name_match);
368            $name_tray->addElement($name_text);
369            $email_text  = new XoopsFormText('', 'user_email', 30, 60);
370            $email_match = new XoopsFormSelectMatchOption('', 'user_email_match');
371            $email_tray  = new XoopsFormElementTray(_AM_SYSTEM_USERS_EMAIL, '&nbsp;');
372            $email_tray->addElement($email_match);
373            $email_tray->addElement($email_text);
374            $url_text  = new XoopsFormText(_AM_SYSTEM_USERS_URLC, 'user_url', 30, 100);
375            $icq_text  = new XoopsFormText('', 'user_icq', 30, 100);
376            $icq_match = new XoopsFormSelectMatchOption('', 'user_icq_match');
377            $icq_tray  = new XoopsFormElementTray(_AM_SYSTEM_USERS_ICQ, '&nbsp;');
378            $icq_tray->addElement($icq_match);
379            $icq_tray->addElement($icq_text);
380            $aim_text  = new XoopsFormText('', 'user_aim', 30, 100);
381            $aim_match = new XoopsFormSelectMatchOption('', 'user_aim_match');
382            $aim_tray  = new XoopsFormElementTray(_AM_SYSTEM_USERS_AIM, '&nbsp;');
383            $aim_tray->addElement($aim_match);
384            $aim_tray->addElement($aim_text);
385            $yim_text  = new XoopsFormText('', 'user_yim', 30, 100);
386            $yim_match = new XoopsFormSelectMatchOption('', 'user_yim_match');
387            $yim_tray  = new XoopsFormElementTray(_AM_SYSTEM_USERS_YIM, '&nbsp;');
388            $yim_tray->addElement($yim_match);
389            $yim_tray->addElement($yim_text);
390            $msnm_text  = new XoopsFormText('', 'user_msnm', 30, 100);
391            $msnm_match = new XoopsFormSelectMatchOption('', 'user_msnm_match');
392            $msnm_tray  = new XoopsFormElementTray(_AM_SYSTEM_USERS_MSNM, '&nbsp;');
393            $msnm_tray->addElement($msnm_match);
394            $msnm_tray->addElement($msnm_text);
395            $location_text   = new XoopsFormText(_AM_SYSTEM_USERS_LOCATIONC, 'user_from', 30, 100);
396            $occupation_text = new XoopsFormText(_AM_SYSTEM_USERS_OCCUPATIONC, 'user_occ', 30, 100);
397            $interest_text   = new XoopsFormText(_AM_SYSTEM_USERS_INTERESTC, 'user_intrest', 30, 100);
398
399            $lastlog_more = new XoopsFormText(_AM_SYSTEM_USERS_LASTLOGMORE, 'user_lastlog_more', 10, 5);
400            $lastlog_less = new XoopsFormText(_AM_SYSTEM_USERS_LASTLOGLESS, 'user_lastlog_less', 10, 5);
401            $reg_more     = new XoopsFormText(_AM_SYSTEM_USERS_REGMORE, 'user_reg_more', 10, 5);
402            $reg_less     = new XoopsFormText(_AM_SYSTEM_USERS_REGLESS, 'user_reg_less', 10, 5);
403            $posts_more   = new XoopsFormText(_AM_SYSTEM_USERS_POSTSMORE, 'user_posts_more', 10, 5);
404            $posts_less   = new XoopsFormText(_AM_SYSTEM_USERS_POSTSLESS, 'user_posts_less', 10, 5);
405            $mailok_radio = new XoopsFormRadio(_AM_SYSTEM_USERS_SHOWMAILOK, 'user_mailok', 'both');
406            $mailok_radio->addOptionArray(array(
407                                              'mailok' => _AM_SYSTEM_USERS_MAILOK,
408                                              'mailng' => _AM_SYSTEM_USERS_MAILNG,
409                                              'both' => _AM_SYSTEM_USERS_BOTH));
410            $type_radio = new XoopsFormRadio(_AM_SYSTEM_USERS_SHOWTYPE, 'user_type', 'actv');
411            $type_radio->addOptionArray(array(
412                                            'actv' => _AM_SYSTEM_USERS_ACTIVE,
413                                            'inactv' => _AM_SYSTEM_USERS_INACTIVE,
414                                            'both' => _AM_SYSTEM_USERS_BOTH));
415            $sort_select = new XoopsFormSelect(_AM_SYSTEM_USERS_SORT, 'user_sort');
416            $sort_select->addOptionArray(array(
417                                             'uname' => _AM_SYSTEM_USERS_UNAME,
418                                             'email' => _AM_SYSTEM_USERS_EMAIL,
419                                             'last_login' => _AM_SYSTEM_USERS_LASTLOGIN,
420                                             'user_regdate' => _AM_SYSTEM_USERS_REGDATE,
421                                             'posts' => _AM_SYSTEM_USERS_POSTS));
422            $order_select = new XoopsFormSelect(_AM_SYSTEM_USERS_ORDER, 'user_order');
423            $order_select->addOptionArray(array('ASC' => _AM_SYSTEM_USERS_ASC, 'DESC' => _AM_SYSTEM_USERS_DESC));
424            $limit_text    = new XoopsFormText(_AM_SYSTEM_USERS_LIMIT, 'user_limit', 6, 2, 20);
425            $submit_button = new XoopsFormButton('', 'user_submit', _SUBMIT, 'submit');
426
427            $form = new XoopsThemeForm(_AM_SYSTEM_USERS_FINDUS, 'user_findform', 'admin.php?fct=users', 'post', true);
428            $form->addElement($uname_tray);
429            $form->addElement($name_tray);
430            $form->addElement($email_tray);
431            $form->addElement($group_select);
432            $form->addElement($icq_tray);
433            $form->addElement($aim_tray);
434            $form->addElement($yim_tray);
435            $form->addElement($msnm_tray);
436            $form->addElement($url_text);
437            $form->addElement($location_text);
438            $form->addElement($occupation_text);
439            $form->addElement($interest_text);
440            $form->addElement($lastlog_more);
441            $form->addElement($lastlog_less);
442            $form->addElement($reg_more);
443            $form->addElement($reg_less);
444            $form->addElement($posts_more);
445            $form->addElement($posts_less);
446            $form->addElement($mailok_radio);
447            $form->addElement($type_radio);
448            $form->addElement($sort_select);
449            $form->addElement($order_select);
450            $form->addElement($fct_hidden);
451            $form->addElement($limit_text);
452            $form->addElement($op_hidden);
453
454            // if this is to find users for a specific group
455            if (!empty($_GET['group']) && (int)$_GET['group'] > 0) {
456                $group_hidden = new XoopsFormHidden('group', (int)$_GET['group']);
457                $form->addElement($group_hidden);
458            }
459            $form->addElement($submit_button);
460            $form->display();
461        } else {
462            //Display data
463            // Assign Breadcrumb menu
464            $xoBreadCrumb->addHelp(system_adminVersion('users', 'help'));
465            $xoBreadCrumb->addTips(_AM_SYSTEM_USERS_NAV_TIPS);
466            $xoBreadCrumb->render();
467
468            $requete_search  = '<br><br><strong>See search request: </strong><br><br>';
469            $requete_pagenav = '';
470
471            $criteria = new CriteriaCompo();
472            if (!empty($_REQUEST['user_uname'])) {
473                $match = (!empty($_REQUEST['user_uname_match'])) ? (int)$_REQUEST['user_uname_match'] : XOOPS_MATCH_START;
474                switch ($match) {
475                    case XOOPS_MATCH_START:
476                        $criteria->add(new Criteria('uname', $myts->addSlashes(trim($_REQUEST['user_uname'])) . '%', 'LIKE'));
477                        break;
478                    case XOOPS_MATCH_END:
479                        $criteria->add(new Criteria('uname', '%' . $myts->addSlashes(trim($_REQUEST['user_uname'])), 'LIKE'));
480                        break;
481                    case XOOPS_MATCH_EQUAL:
482                        $criteria->add(new Criteria('uname', $myts->addSlashes(trim($_REQUEST['user_uname']))));
483                        break;
484                    case XOOPS_MATCH_CONTAIN:
485                        $criteria->add(new Criteria('uname', '%' . $myts->addSlashes(trim($_REQUEST['user_uname'])) . '%', 'LIKE'));
486                        break;
487                }
488                $requete_pagenav .= '&amp;user_uname=' . htmlspecialchars($_REQUEST['user_uname']) . '&amp;user_uname_match=' . htmlspecialchars($_REQUEST['user_uname_match']);
489                $requete_search .= 'uname : ' . $_REQUEST['user_uname'] . ' et user_uname_match=' . $_REQUEST['user_uname_match'] . '<br>';
490            }
491            if (!empty($_REQUEST['user_name'])) {
492                $match = (!empty($_REQUEST['user_name_match'])) ? (int)$_REQUEST['user_name_match'] : XOOPS_MATCH_START;
493                switch ($match) {
494                    case XOOPS_MATCH_START:
495                        $criteria->add(new Criteria('name', $myts->addSlashes(trim($_REQUEST['user_name'])) . '%', 'LIKE'));
496                        break;
497                    case XOOPS_MATCH_END:
498                        $criteria->add(new Criteria('name', '%' . $myts->addSlashes(trim($_REQUEST['user_name'])), 'LIKE'));
499                        break;
500                    case XOOPS_MATCH_EQUAL:
501                        $criteria->add(new Criteria('name', $myts->addSlashes(trim($_REQUEST['user_name']))));
502                        break;
503                    case XOOPS_MATCH_CONTAIN:
504                        $criteria->add(new Criteria('name', '%' . $myts->addSlashes(trim($_POST['user_name'])) . '%', 'LIKE'));
505                        break;
506                }
507                $requete_pagenav .= '&amp;user_name=' . htmlspecialchars($_REQUEST['user_name']) . '&amp;user_name_match=' . htmlspecialchars($_REQUEST['user_name_match']);
508                $requete_search .= 'name : ' . $_REQUEST['user_name'] . ' et user_name_match=' . $_REQUEST['user_name_match'] . '<br>';
509            }
510            if (!empty($_REQUEST['user_email'])) {
511                $match = (!empty($_REQUEST['user_email_match'])) ? (int)$_REQUEST['user_email_match'] : XOOPS_MATCH_START;
512                switch ($match) {
513                    case XOOPS_MATCH_START:
514                        $criteria->add(new Criteria('email', $myts->addSlashes(trim($_REQUEST['user_email'])) . '%', 'LIKE'));
515                        break;
516                    case XOOPS_MATCH_END:
517                        $criteria->add(new Criteria('email', '%' . $myts->addSlashes(trim($_REQUEST['user_email'])), 'LIKE'));
518                        break;
519                    case XOOPS_MATCH_EQUAL:
520                        $criteria->add(new Criteria('email', $myts->addSlashes(trim($_REQUEST['user_email']))));
521                        break;
522                    case XOOPS_MATCH_CONTAIN:
523                        $criteria->add(new Criteria('email', '%' . $myts->addSlashes(trim($_REQUEST['user_email'])) . '%', 'LIKE'));
524                        break;
525                }
526                $requete_pagenav .= '&amp;user_email=' . htmlspecialchars($_REQUEST['user_email']) . '&amp;user_email_match=' . htmlspecialchars($_REQUEST['user_email_match']);
527                $requete_search .= 'email : ' . $_REQUEST['user_email'] . ' et user_email_match=' . $_REQUEST['user_email_match'] . '<br>';
528            }
529            if (!empty($_REQUEST['user_url'])) {
530                $url = formatURL(trim($_REQUEST['user_url']));
531                $criteria->add(new Criteria('url', '%' . $myts->addSlashes($url) . '%', 'LIKE'));
532                $requete_pagenav .= '&amp;user_url=' . htmlspecialchars($_REQUEST['user_url']);
533                $requete_search .= 'url : ' . $_REQUEST['user_url'] . '<br>';
534            }
535            if (!empty($_REQUEST['user_icq'])) {
536                $match = (!empty($_REQUEST['user_icq_match'])) ? (int)$_REQUEST['user_icq_match'] : XOOPS_MATCH_START;
537                switch ($match) {
538                    case XOOPS_MATCH_START:
539                        $criteria->add(new Criteria('user_icq', $myts->addSlashes(trim($_REQUEST['user_icq'])) . '%', 'LIKE'));
540                        break;
541                    case XOOPS_MATCH_END:
542                        $criteria->add(new Criteria('user_icq', '%' . $myts->addSlashes(trim($_REQUEST['user_icq'])), 'LIKE'));
543                        break;
544                    case XOOPS_MATCH_EQUAL:
545                        $criteria->add(new Criteria('user_icq', $myts->addSlashes(trim($_REQUEST['user_icq']))));
546                        break;
547                    case XOOPS_MATCH_CONTAIN:
548                        $criteria->add(new Criteria('user_icq', '%' . $myts->addSlashes(trim($_REQUEST['user_icq'])) . '%', 'LIKE'));
549                        break;
550                }
551                $requete_pagenav .= '&amp;user_icq=' . htmlspecialchars($_REQUEST['user_icq']) . '&amp;user_icq_match=' . htmlspecialchars($_REQUEST['user_icq_match']);
552                $requete_search .= 'icq : ' . $_REQUEST['user_icq'] . ' et user_icq_match=' . $_REQUEST['user_icq_match'] . '<br>';
553            }
554            if (!empty($_REQUEST['user_aim'])) {
555                $match = (!empty($_REQUEST['user_aim_match'])) ? (int)$_REQUEST['user_aim_match'] : XOOPS_MATCH_START;
556                switch ($match) {
557                    case XOOPS_MATCH_START:
558                        $criteria->add(new Criteria('user_aim', $myts->addSlashes(trim($_REQUEST['user_aim'])) . '%', 'LIKE'));
559                        break;
560                    case XOOPS_MATCH_END:
561                        $criteria->add(new Criteria('user_aim', '%' . $myts->addSlashes(trim($_REQUEST['user_aim'])), 'LIKE'));
562                        break;
563                    case XOOPS_MATCH_EQUAL:
564                        $criteria->add(new Criteria('user_aim', $myts->addSlashes(trim($_REQUEST['user_aim']))));
565                        break;
566                    case XOOPS_MATCH_CONTAIN:
567                        $criteria->add(new Criteria('user_aim', '%' . $myts->addSlashes(trim($_REQUEST['user_aim'])) . '%', 'LIKE'));
568                        break;
569                }
570                $requete_pagenav .= '&amp;user_aim=' . htmlspecialchars($_REQUEST['user_aim']) . '&amp;user_aim_match=' . htmlspecialchars($_REQUEST['user_aim_match']);
571                $requete_search .= 'aim : ' . $_REQUEST['user_aim'] . ' et user_aim_match=' . $_REQUEST['user_aim_match'] . '<br>';
572            }
573            if (!empty($_REQUEST['user_yim'])) {
574                $match = (!empty($_REQUEST['user_yim_match'])) ? (int)$_REQUEST['user_yim_match'] : XOOPS_MATCH_START;
575                switch ($match) {
576                    case XOOPS_MATCH_START:
577                        $criteria->add(new Criteria('user_yim', $myts->addSlashes(trim($_REQUEST['user_yim'])) . '%', 'LIKE'));
578                        break;
579                    case XOOPS_MATCH_END:
580                        $criteria->add(new Criteria('user_yim', '%' . $myts->addSlashes(trim($_REQUEST['user_yim'])), 'LIKE'));
581                        break;
582                    case XOOPS_MATCH_EQUAL:
583                        $criteria->add(new Criteria('user_yim', $myts->addSlashes(trim($_REQUEST['user_yim']))));
584                        break;
585                    case XOOPS_MATCH_CONTAIN:
586                        $criteria->add(new Criteria('user_yim', '%' . $myts->addSlashes(trim($_REQUEST['user_yim'])) . '%', 'LIKE'));
587                        break;
588                }
589                $requete_pagenav .= '&amp;user_yim=' . htmlspecialchars($_REQUEST['user_yim']) . '&amp;user_yim_match=' . htmlspecialchars($_REQUEST['user_yim_match']);
590                $requete_search .= 'yim : ' . $_REQUEST['user_yim'] . ' et user_yim_match=' . $_REQUEST['user_yim_match'] . '<br>';
591            }
592            if (!empty($_REQUEST['user_msnm'])) {
593                $match = (!empty($_REQUEST['user_msnm_match'])) ? (int)$_REQUEST['user_msnm_match'] : XOOPS_MATCH_START;
594                switch ($match) {
595                    case XOOPS_MATCH_START:
596                        $criteria->add(new Criteria('user_msnm', $myts->addSlashes(trim($_REQUEST['user_msnm'])) . '%', 'LIKE'));
597                        break;
598                    case XOOPS_MATCH_END:
599                        $criteria->add(new Criteria('user_msnm', '%' . $myts->addSlashes(trim($_REQUEST['user_msnm'])), 'LIKE'));
600                        break;
601                    case XOOPS_MATCH_EQUAL:
602                        $criteria->add(new Criteria('user_msnm', $myts->addSlashes(trim($_REQUEST['user_msnm']))));
603                        break;
604                    case XOOPS_MATCH_CONTAIN:
605                        $criteria->add(new Criteria('user_msnm', '%' . $myts->addSlashes(trim($_REQUEST['user_msnm'])) . '%', 'LIKE'));
606                        break;
607                }
608                $requete_pagenav .= '&amp;user_msnm=' . htmlspecialchars($_REQUEST['user_msnm']) . '&amp;user_msnm_match=' . htmlspecialchars($_REQUEST['user_msnm_match']);
609                $requete_search .= 'msn : ' . $_REQUEST['user_msnm'] . ' et user_msnm_match=' . $_REQUEST['user_msnm_match'] . '<br>';
610            }
611
612            if (!empty($_REQUEST['user_from'])) {
613                $criteria->add(new Criteria('user_from', '%' . $myts->addSlashes(trim($_REQUEST['user_from'])) . '%', 'LIKE'));
614                $requete_pagenav .= '&amp;user_from=' . htmlspecialchars($_REQUEST['user_from']);
615                $requete_search .= 'from : ' . $_REQUEST['user_from'] . '<br>';
616            }
617
618            if (!empty($_REQUEST['user_intrest'])) {
619                $criteria->add(new Criteria('user_intrest', '%' . $myts->addSlashes(trim($_REQUEST['user_intrest'])) . '%', 'LIKE'));
620                $requete_pagenav .= '&amp;user_intrest=' . htmlspecialchars($_REQUEST['user_intrest']);
621                $requete_search .= 'interet : ' . $_REQUEST['user_intrest'] . '<br>';
622            }
623
624            if (!empty($_REQUEST['user_occ'])) {
625                $criteria->add(new Criteria('user_occ', '%' . $myts->addSlashes(trim($_REQUEST['user_occ'])) . '%', 'LIKE'));
626                $requete_pagenav .= '&amp;user_occ=' . htmlspecialchars($_REQUEST['user_occ']);
627                $requete_search .= 'location : ' . $_REQUEST['user_occ'] . '<br>';
628            }
629
630            if (!empty($_REQUEST['user_lastlog_more']) && is_numeric($_REQUEST['user_lastlog_more'])) {
631                $f_user_lastlog_more = (int)trim($_REQUEST['user_lastlog_more']);
632                $time                = time() - (60 * 60 * 24 * $f_user_lastlog_more);
633                if ($time > 0) {
634                    $criteria->add(new Criteria('last_login', $time, '<'));
635                }
636                $requete_pagenav .= '&amp;user_lastlog_more=' . htmlspecialchars($_REQUEST['user_lastlog_more']);
637                $requete_search .= 'derniere connexion apres : ' . $_REQUEST['user_lastlog_more'] . '<br>';
638            }
639
640            if (!empty($_REQUEST['user_lastlog_less']) && is_numeric($_REQUEST['user_lastlog_less'])) {
641                $f_user_lastlog_less = (int)trim($_REQUEST['user_lastlog_less']);
642                $time                = time() - (60 * 60 * 24 * $f_user_lastlog_less);
643                if ($time > 0) {
644                    $criteria->add(new Criteria('last_login', $time, '>'));
645                }
646                $requete_pagenav .= '&amp;user_lastlog_less=' . htmlspecialchars($_REQUEST['user_lastlog_less']);
647                $requete_search .= 'derniere connexion avant : ' . $_REQUEST['user_lastlog_less'] . '<br>';
648            }
649
650            if (!empty($_REQUEST['user_reg_more']) && is_numeric($_REQUEST['user_reg_more'])) {
651                $f_user_reg_more = (int)trim($_REQUEST['user_reg_more']);
652                $time            = time() - (60 * 60 * 24 * $f_user_reg_more);
653                if ($time > 0) {
654                    $criteria->add(new Criteria('user_regdate', $time, '<'));
655                }
656                $requete_pagenav .= '&amp;user_regdate=' . htmlspecialchars($_REQUEST['user_regdate']);
657                $requete_search .= 'enregistre apres : ' . $_REQUEST['user_reg_more'] . '<br>';
658            }
659
660            if (!empty($_REQUEST['user_reg_less']) && is_numeric($_REQUEST['user_reg_less'])) {
661                $f_user_reg_less = (int)$_REQUEST['user_reg_less'];
662                $time            = time() - (60 * 60 * 24 * $f_user_reg_less);
663                if ($time > 0) {
664                    $criteria->add(new Criteria('user_regdate', $time, '>'));
665                }
666                $requete_pagenav .= '&amp;user_reg_less=' . htmlspecialchars($_REQUEST['user_reg_less']);
667                $requete_search .= 'enregistre avant : ' . $_REQUEST['user_reg_less'] . '<br>';
668            }
669
670            if (!empty($_REQUEST['user_posts_more']) && is_numeric($_REQUEST['user_posts_more'])) {
671                $criteria->add(new Criteria('posts', (int)$_REQUEST['user_posts_more'], '>'));
672                $requete_pagenav .= '&amp;user_posts_more=' . htmlspecialchars($_REQUEST['user_posts_more']);
673                $requete_search .= 'posts plus de : ' . $_REQUEST['user_posts_more'] . '<br>';
674            }
675
676            if (!empty($_REQUEST['user_posts_less']) && is_numeric($_REQUEST['user_posts_less'])) {
677                $criteria->add(new Criteria('posts', (int)$_REQUEST['user_posts_less'], '<'));
678                $requete_pagenav .= '&amp;user_posts_less=' . htmlspecialchars($_REQUEST['user_posts_less']);
679                $requete_search .= 'post moins de : ' . $_REQUEST['user_posts_less'] . '<br>';
680            }
681
682            if (isset($_REQUEST['user_mailok'])) {
683                if ($_REQUEST['user_mailok'] === 'mailng') {
684                    $criteria->add(new Criteria('user_mailok', 0));
685                } elseif ($_REQUEST['user_mailok'] === 'mailok') {
686                    $criteria->add(new Criteria('user_mailok', 1));
687                } else {
688                    $criteria->add(new Criteria('user_mailok', 0, '>='));
689                }
690                $requete_pagenav .= '&amp;user_mailok=' . htmlspecialchars($_REQUEST['user_mailok']);
691                $requete_search .= 'accept email : ' . $_REQUEST['user_mailok'] . '<br>';
692            }
693
694            if (isset($_REQUEST['user_type']) && !empty($_REQUEST['user_type'])) {
695                if ($_REQUEST['user_type'] === 'inactv') {
696                    $criteria->add(new Criteria('level', 0, '='));
697                    $user_type = 'inactv';
698                    $requete_search .= 'actif ou inactif : inactif<br>';
699                } elseif ($_REQUEST['user_type'] === 'actv') {
700                    $criteria->add(new Criteria('level', 0, '>'));
701                    $user_type = 'actv';
702                    $requete_search .= 'actif ou inactif : actif<br>';
703                }
704                $requete_pagenav .= '&amp;user_type=' . htmlspecialchars($_REQUEST['user_type']);
705            } else {
706                $criteria->add(new Criteria('level', 0, '>='));
707                $user_type = '';
708                $requete_search .= 'actif ou inactif : admin et user<br>';
709            }
710
711            //$groups = empty($_REQUEST['selgroups']) ? array() : array_map("intval", $_REQUEST['selgroups']);
712            $validsort = array('uname', 'email', 'last_login', 'user_regdate', 'posts');
713            if (isset($_REQUEST['user_sort'])) {
714                $sort = (!in_array($_REQUEST['user_sort'], $validsort)) ? 'user_regdate' : $_REQUEST['user_sort'];
715                $requete_pagenav .= '&amp;user_sort=' . htmlspecialchars($_REQUEST['user_sort']);
716                $requete_search .= 'order by : ' . $sort . '<br>';
717            } else {
718                $sort = 'user_regdate';
719                $requete_pagenav .= '&amp;user_sort=user_regdate';
720                $requete_search .= 'order by : ' . $sort . '<br>';
721            }
722
723            $order = 'DESC';
724            if (isset($_REQUEST['user_order']) && $_REQUEST['user_order'] === 'ASC') {
725                $requete_pagenav .= '&amp;user_order=ASC';
726                $requete_search .= 'tris : ' . $order . '<br>';
727            } else {
728                //$order = "ASC";
729                $requete_pagenav .= '&amp;user_order=DESC';
730                $requete_search .= 'tris : ' . $order . '<br>';
731            }
732
733            $user_limit = xoops_getModuleOption('users_pager', 'system');
734            if (isset($_REQUEST['user_limit'])) {
735                $user_limit = $_REQUEST['user_limit'];
736                $requete_pagenav .= '&amp;user_limit=' . htmlspecialchars($_REQUEST['user_limit']);
737                $requete_search .= 'limit : ' . $user_limit . '<br>';
738            } else {
739                $requete_pagenav .= '&amp;user_limit=' . xoops_getModuleOption('users_pager', 'system');
740                $requete_search .= 'limit : ' . $user_limit . '<br>';
741            }
742
743            $start = (!empty($_REQUEST['start'])) ? (int)$_REQUEST['start'] : 0;
744
745            if (isset($_REQUEST['selgroups'])) {
746                if ($_REQUEST['selgroups'] != 0) {
747                    if (count($_REQUEST['selgroups']) == 1) {
748                        $groups = array( 0 => (int) $_REQUEST['selgroups']);
749                    } else {
750                        $groups = array_map('intval', $_REQUEST['selgroups']);
751                    }
752                } else {
753                    $groups = array();
754                }
755                $requete_pagenav .= '&amp;selgroups=' . htmlspecialchars($_REQUEST['selgroups']);
756            } else {
757                $groups = array();
758            }
759            //print_r($groups);
760            /* @var XoopsMemberHandler $member_handler */
761            $member_handler = xoops_getHandler('member');
762
763            if (empty($groups)) {
764                $users_count = $member_handler->getUserCount();
765            } else {
766                $users_count = $member_handler->getUserCountByGroupLink($groups, $criteria);
767            }
768            if ($start < $users_count) {
769                echo sprintf(_AM_SYSTEM_USERS_USERSFOUND, $users_count) . '<br>';
770                $criteria->setSort($sort);
771                $criteria->setOrder($order);
772                $criteria->setLimit($user_limit);
773                $criteria->setStart($start);
774                $users_arr = $member_handler->getUsersByGroupLink($groups, $criteria, true);
775                $ucount    = 0;
776            }
777
778            $xoopsTpl->assign('users_count', $users_count);
779            $xoopsTpl->assign('users_display', true);
780
781            //User limit
782            //$user_limit = (!isset($_REQUEST['user_limit'])) ? 20 : $_REQUEST['user_limit'];
783            //User type
784            $user_type = (!isset($_REQUEST['user_type'])) ? '' : $_REQUEST['user_type'];
785            //selgroups
786            $selgroups = (!isset($_REQUEST['selgroups'])) ? '' : $_REQUEST['selgroups'];
787
788            $user_uname = (!isset($_REQUEST['user_uname'])) ? '' : $_REQUEST['user_uname'];
789            //Form tris
790            $form          = '<form action="admin.php?fct=users" method="post">
791                    ' . _AM_SYSTEM_USERS_SEARCH_USER . '<input type="text" name="user_uname" value="' . $myts->htmlSpecialChars($user_uname) . '" size="15">
792                    <select name="selgroups">
793                        <option value="" selected>' . _AM_SYSTEM_USERS_ALLGROUP . '</option>';
794            /* @var XoopsGroupHandler $group_handler */
795            $group_handler = xoops_getHandler('group');
796            $group_arr     = $group_handler->getObjects();
797            foreach (array_keys($group_arr) as $i) {
798                if ($group_arr[$i]->getVar('groupid') != XOOPS_GROUP_ANONYMOUS) {
799                    $form .= '<option value="' . $group_arr[$i]->getVar('groupid') . '"  ' . ($selgroups == $group_arr[$i]->getVar('groupid') ? ' selected' : '') . '>' . $group_arr[$i]->getVar('name') . '</option>';
800                }
801            }
802            $form .= '</select>&nbsp;
803                <select name="user_type">
804                    <option value="" ' . ($user_type === '' ? ' selected' : '') . '>' . _AM_SYSTEM_USERS_ALLUSER . '</option>
805                    <option value="actv" ' . ($user_type === 'actv' ? ' selected' : '') . '>' . _AM_SYSTEM_USERS_ACTIVEUSER . '</option>
806                    <option value="inactv" ' . ($user_type === 'inactv' ? ' selected' : '') . '>' . _AM_SYSTEM_USERS_INACTIVEUSER . '</option>
807                </select>&nbsp;
808                <select name="user_limit">
809                    <option value="20" ' . ($user_limit == 20 ? ' selected' : '') . '>20</option>
810                    <option value="50" ' . ($user_limit == 50 ? ' selected' : '') . '>50</option>
811                    <option value="100" ' . ($user_limit == 100 ? ' selected' : '') . '>100</option>
812                </select>&nbsp;
813                <input type="hidden" name="user_uname_match" value="XOOPS_MATCH_START" />
814                <input type="submit" value="' . _AM_SYSTEM_USERS_SEARCH . '" name="speed_search">&nbsp;
815                <input type="submit" value="' . _AM_SYSTEM_USERS_ADVANCED_SEARCH . '" name="complet_search"></form>
816                ';
817
818            //select groupe
819            $form_select_groups = '<select  name="selgroups" id="selgroups"   style="display:none;"><option value="">---------</option>';
820            //$module_array[0] = _AM_SYSTEM_USERS_COMMENTS_FORM_ALL_MODS;
821            $group_handler = xoops_getHandler('group');
822            $group_arr     = $group_handler->getObjects();
823            foreach (array_keys($group_arr) as $i) {
824                if ($group_arr[$i]->getVar('groupid') != XOOPS_GROUP_ANONYMOUS) {
825                    $form_select_groups .= '<option value="' . $group_arr[$i]->getVar('groupid') . '"  ' . ($selgroups == $group_arr[$i]->getVar('groupid') ? ' selected' : '') . '>' . $group_arr[$i]->getVar('name') . '</option>';
826                }
827            }
828            $form_select_groups .= '</select><input type="hidden" name="op" value="users_add_delete_group">';
829
830            $xoopsTpl->assign('form_sort', $form);
831            $xoopsTpl->assign('form_select_groups', $form_select_groups);
832
833            // add token to render in template
834            $tokenElement = new XoopsFormHiddenToken();
835            $token = $tokenElement->render();
836            $xoopsTpl->assign('form_token', $token);
837
838            //echo $requete_search;
839            if ($users_count > 0) {
840                //echo $requete_search;
841                foreach (array_keys($users_arr) as $i) {
842                    //Display group
843                    $user_group = $member_handler->getGroupsByUser($users_arr[$i]->getVar('uid'));
844                    if (in_array(XOOPS_GROUP_ADMIN, $user_group)) {
845                        $users['group'] = system_AdminIcons('xoops/group_1.png');
846                        //$users['icon'] = '<img src="'.XOOPS_URL.'/modules/system/images/icons/admin.png" alt="'._AM_SYSTEM_USERS_ADMIN.'" title="'._AM_SYSTEM_USERS_ADMIN.'" />';
847                        $users['checkbox_user'] = false;
848                    } else {
849                        $users['group'] = system_AdminIcons('xoops/group_2.png');
850                        //$users['icon'] = '<img src="'.XOOPS_URL.'/modules/system/images/icons/user.png" alt="'._AM_SYSTEM_USERS_USER.'" title="'._AM_SYSTEM_USERS_USER.'" />';
851                        $users['checkbox_user'] = true;
852                    }
853                    $users['uid']         = $users_arr[$i]->getVar('uid');
854                    $users['name']        = $users_arr[$i]->getVar('name');
855                    $users['uname']       = $users_arr[$i]->getVar('uname');
856                    $users['email']       = $users_arr[$i]->getVar('email');
857                    $users['url']         = $users_arr[$i]->getVar('url');
858                    $users['user_avatar'] = ($users_arr[$i]->getVar('user_avatar') === 'blank.gif') ? system_AdminIcons('anonymous.png') : XOOPS_URL . '/uploads/' . $users_arr[$i]->getVar('user_avatar');
859                    $users['reg_date']    = formatTimestamp($users_arr[$i]->getVar('user_regdate'), 'm');
860                    if ($users_arr[$i]->getVar('last_login') > 0) {
861                        $users['last_login'] = formatTimestamp($users_arr[$i]->getVar('last_login'), 'm');
862                    } else {
863                        $users['last_login'] = _AM_SYSTEM_USERS_NOT_CONNECT;
864                    }
865                    $users['user_level'] = $users_arr[$i]->getVar('level');
866                    $users['user_icq']   = $users_arr[$i]->getVar('user_icq');
867                    $users['user_aim']   = $users_arr[$i]->getVar('user_aim');
868                    $users['user_yim']   = $users_arr[$i]->getVar('user_yim');
869                    $users['user_msnm']  = $users_arr[$i]->getVar('user_msnm');
870
871                    $users['posts'] = $users_arr[$i]->getVar('posts');
872
873                    $xoopsTpl->append_by_ref('users', $users);
874                    $xoopsTpl->append_by_ref('users_popup', $users);
875                    unset($users);
876                }
877            } else {
878                $xoopsTpl->assign('users_no_found', true);
879            }
880
881            if ($users_count > $user_limit) {
882                include_once XOOPS_ROOT_PATH . '/class/pagenav.php';
883                $nav = new XoopsPageNav($users_count, $user_limit, $start, 'start', 'fct=users&amp;op=default' . $requete_pagenav);
884                $xoopsTpl->assign('nav', $nav->renderNav());
885            }
886        }
887        break;
888}
889// Call Footer
890xoops_cp_footer();
891