1: | <?php
|
2: | |
3: | |
4: | |
5: | |
6: | |
7: | |
8: | |
9: | |
10: | |
11: | |
12: | |
13: | |
14: | |
15: | |
16: | |
17: |
|
18: |
|
19: |
|
20: | use Xmf\Request;
|
21: |
|
22: | include_once dirname(__DIR__) . '/mainfile.php';
|
23: |
|
24: | xoops_header(false);
|
25: |
|
26: | $denied = true;
|
27: | if (Request::hasVar('token') && is_object($xoopsUser)) {
|
28: | if ($GLOBALS['xoopsSecurity']->validateToken(Request::getString('token'), false)) {
|
29: | $denied = false;
|
30: | }
|
31: | } elseif (is_object($xoopsUser) && $xoopsUser->isAdmin()) {
|
32: | $denied = false;
|
33: | }
|
34: |
|
35: | if ($denied) {
|
36: | xoops_error(_NOPERM);
|
37: | exit();
|
38: | }
|
39: |
|
40: | $token = Request::getString('token', '');
|
41: | $name_form = 'memberslist';
|
42: | $multiple = Request::getInt('multiple', 0);
|
43: | $name_userid = 'uid' . ((0 != $multiple) ? '[]' : '');
|
44: | $name_username = 'uname' . ((0 != $multiple) ? '[]' : '');
|
45: |
|
46: | xoops_loadLanguage('findusers');
|
47: |
|
48: | |
49: | |
50: | |
51: |
|
52: | class XoopsRank extends XoopsObject
|
53: | {
|
54: |
|
55: | public $rank_id;
|
56: | public $rank_title;
|
57: | public $rank_min;
|
58: | public $rank_max;
|
59: | public $rank_special;
|
60: | public $rank_image;
|
61: |
|
62: | |
63: | |
64: | |
65: |
|
66: | public function __construct()
|
67: | {
|
68: | parent::__construct();
|
69: | $this->initVar('rank_id', XOBJ_DTYPE_INT, null, false);
|
70: | $this->initVar('rank_title', XOBJ_DTYPE_TXTBOX, null, false);
|
71: | $this->initVar('rank_min', XOBJ_DTYPE_INT, 0);
|
72: | $this->initVar('rank_max', XOBJ_DTYPE_INT, 0);
|
73: | $this->initVar('rank_special', XOBJ_DTYPE_INT, 0);
|
74: | $this->initVar('rank_image', XOBJ_DTYPE_TXTBOX, '');
|
75: | }
|
76: | }
|
77: |
|
78: | |
79: | |
80: | |
81: |
|
82: | class XoopsRankHandler extends XoopsObjectHandler
|
83: | {
|
84: | |
85: | |
86: | |
87: | |
88: |
|
89: | public function __construct(XoopsDatabase $db)
|
90: | {
|
91: | parent::__construct($db);
|
92: | }
|
93: |
|
94: | |
95: | |
96: | |
97: | |
98: | |
99: |
|
100: | public function create($isNew = true)
|
101: | {
|
102: | $obj = new XoopsRank();
|
103: | if ($isNew === true) {
|
104: | $obj->setNew();
|
105: | }
|
106: |
|
107: | return $obj;
|
108: | }
|
109: |
|
110: | |
111: | |
112: | |
113: | |
114: | |
115: |
|
116: | public function get($id = 0)
|
117: | {
|
118: | $object = $this->create(false);
|
119: | $sql = 'SELECT * FROM ' . $this->db->prefix('ranks') . ' WHERE rank_id = ' . $this->db->quoteString($id);
|
120: | $result = $this->db->query($sql);
|
121: | if (!$this->db->isResultSet($result)) {
|
122: | $ret = null;
|
123: |
|
124: | return $ret;
|
125: | }
|
126: |
|
127: | while (false !== ($row = $this->db->fetchArray($result))) {
|
128: | $object->assignVars($row);
|
129: | }
|
130: |
|
131: | return $object;
|
132: | }
|
133: |
|
134: | |
135: | |
136: | |
137: | |
138: | |
139: | |
140: | |
141: |
|
142: | public function getList(CriteriaElement $criteria = null, $limit = 0, $start = 0)
|
143: | {
|
144: | $ret = array();
|
145: | if ($criteria == null) {
|
146: | $criteria = new CriteriaCompo();
|
147: | }
|
148: |
|
149: | $sql = 'SELECT rank_id, rank_title FROM ' . $this->db->prefix('ranks');
|
150: | if (isset($criteria) && \method_exists($criteria, 'renderWhere')) {
|
151: | $sql .= ' ' . $criteria->renderWhere();
|
152: | if ($criteria->getSort() != '') {
|
153: | $sql .= ' ORDER BY ' . $criteria->getSort() . ' ' . $criteria->getOrder();
|
154: | }
|
155: | $limit = $criteria->getLimit();
|
156: | $start = $criteria->getStart();
|
157: | }
|
158: | $result = $this->db->query($sql, $limit, $start);
|
159: | if (!$this->db->isResultSet($result)) {
|
160: | return $ret;
|
161: | }
|
162: | $myts = \MyTextSanitizer::getInstance();
|
163: |
|
164: | while (false !== ($myrow = $this->db->fetchArray($result))) {
|
165: | $ret[$myrow['rank_id']] = $myts->htmlSpecialChars($myrow['rank_title']);
|
166: | }
|
167: |
|
168: | return $ret;
|
169: | }
|
170: | }
|
171: |
|
172: | |
173: | |
174: | |
175: |
|
176: | class XoUser extends XoopsUser
|
177: | {
|
178: | |
179: | |
180: | |
181: |
|
182: | public function __construct()
|
183: | {
|
184: | parent::__construct();
|
185: | $unsets = array(
|
186: | 'actkey',
|
187: | 'pass',
|
188: | 'theme',
|
189: | 'umode',
|
190: | 'uorder',
|
191: | 'notify_mode');
|
192: | foreach ($unsets as $var) {
|
193: | unset($this->vars[$var]);
|
194: | }
|
195: | }
|
196: | }
|
197: |
|
198: | |
199: | |
200: | |
201: |
|
202: | class XoUserHandler extends XoopsObjectHandler
|
203: | {
|
204: | |
205: | |
206: | |
207: | |
208: |
|
209: | public function __construct(XoopsDatabase $db)
|
210: | {
|
211: | parent::__construct($db);
|
212: | }
|
213: |
|
214: | |
215: | |
216: | |
217: | |
218: | |
219: |
|
220: | public function create($isNew = true)
|
221: | {
|
222: | $obj = new XoUser();
|
223: | if ($isNew === true) {
|
224: | $obj->setNew();
|
225: | }
|
226: |
|
227: | return $obj;
|
228: | }
|
229: |
|
230: | |
231: | |
232: | |
233: | |
234: | |
235: | |
236: |
|
237: | public function getCount(CriteriaElement $criteria = null, $groups = array())
|
238: | {
|
239: | if (!is_array($groups)) {
|
240: | $groups = array(
|
241: | $groups);
|
242: | }
|
243: | $groups = array_filter($groups);
|
244: | if (empty($groups)) {
|
245: | $sql = ' SELECT COUNT(DISTINCT u.uid) FROM ' . $this->db->prefix('users') . ' AS u' . ' WHERE 1=1';
|
246: | } else {
|
247: | $sql = ' SELECT COUNT(DISTINCT u.uid) FROM ' . $this->db->prefix('users') . ' AS u' . ' LEFT JOIN ' . $this->db->prefix('groups_users_link') . ' AS g ON g.uid = u.uid' . ' WHERE g.groupid IN (' . implode(', ', array_map('intval', $groups)) . ')';
|
248: | }
|
249: | if (isset($criteria) && is_subclass_of($criteria, 'CriteriaElement')) {
|
250: |
|
251: | if ($render = $criteria->render()) {
|
252: | $sql .= ' AND ' . $render;
|
253: | }
|
254: | }
|
255: | $result = $this->db->query($sql);
|
256: | if (!$this->db->isResultSet($result)) {
|
257: | throw new \RuntimeException(
|
258: | \sprintf(_DB_QUERY_ERROR, $sql) . $this->db->error(), E_USER_ERROR
|
259: | );
|
260: | }
|
261: | list($count) = $this->db->fetchRow($result);
|
262: |
|
263: | return (int)$count;
|
264: | }
|
265: |
|
266: | |
267: | |
268: | |
269: | |
270: | |
271: | |
272: |
|
273: | public function getAll(CriteriaElement $criteria = null, $groups = array())
|
274: | {
|
275: | if (!is_array($groups)) {
|
276: | $groups = array(
|
277: | $groups);
|
278: | }
|
279: | $groups = array_filter($groups);
|
280: | $limit = null;
|
281: | $start = null;
|
282: | if (empty($groups)) {
|
283: | $sql = ' SELECT u.* FROM ' . $this->db->prefix('users') . ' AS u' . ' WHERE 1=1';
|
284: | } else {
|
285: | $sql = ' SELECT u.* FROM ' . $this->db->prefix('users') . ' AS u' . ' LEFT JOIN ' . $this->db->prefix('groups_users_link') . ' AS g ON g.uid = u.uid' . ' WHERE g.groupid IN (' . implode(', ', array_map('intval', $groups)) . ')';
|
286: | }
|
287: | if (isset($criteria) && is_subclass_of($criteria, 'CriteriaElement')) {
|
288: | if ($render = $criteria->render()) {
|
289: | $sql .= ' AND ' . $render;
|
290: | }
|
291: | if ($sort = $criteria->getSort()) {
|
292: | $sql .= ' ORDER BY ' . $sort . ' ' . $criteria->getOrder();
|
293: | $orderSet = true;
|
294: | }
|
295: | $limit = $criteria->getLimit();
|
296: | $start = $criteria->getStart();
|
297: | }
|
298: | if (empty($orderSet)) {
|
299: | $sql .= ' ORDER BY u.uid ASC';
|
300: | }
|
301: | $result = $this->db->query($sql, $limit, $start);
|
302: | if (!$this->db->isResultSet($result)) {
|
303: | throw new \RuntimeException(
|
304: | \sprintf(_DB_QUERY_ERROR, $sql) . $this->db->error(), E_USER_ERROR
|
305: | );
|
306: | }
|
307: | $ret = array();
|
308: |
|
309: | while (false !== ($myrow = $this->db->fetchArray($result))) {
|
310: | $object = $this->create(false);
|
311: | $object->assignVars($myrow);
|
312: | $ret[$myrow['uid']] = $object;
|
313: | unset($object);
|
314: | }
|
315: |
|
316: | return $ret;
|
317: | }
|
318: | }
|
319: |
|
320: | $rank_handler = new XoopsRankHandler($xoopsDB);
|
321: | $user_handler = new XoUserHandler($xoopsDB);
|
322: |
|
323: | $items_match = array(
|
324: | 'uname' => _MA_USER_UNAME,
|
325: | 'name' => _MA_USER_REALNAME,
|
326: | 'email' => _MA_USER_EMAIL,
|
327: |
|
328: |
|
329: |
|
330: |
|
331: | );
|
332: |
|
333: | $items_range = array(
|
334: | 'user_regdate' => _MA_USER_RANGE_USER_REGDATE,
|
335: | 'last_login' => _MA_USER_RANGE_LAST_LOGIN,
|
336: | 'posts' => _MA_USER_RANGE_POSTS);
|
337: |
|
338: | define('FINDUSERS_MODE_SIMPLE', 0);
|
339: | define('FINDUSERS_MODE_ADVANCED', 1);
|
340: |
|
341: | $modes = array(
|
342: | FINDUSERS_MODE_SIMPLE => _MA_USER_MODE_SIMPLE,
|
343: | FINDUSERS_MODE_ADVANCED => _MA_USER_MODE_ADVANCED,
|
344: | );
|
345: |
|
346: | if (!Request::hasVar('user_submit', 'POST')) {
|
347: | include_once $GLOBALS['xoops']->path('class/xoopsformloader.php');
|
348: |
|
349: | $form = new XoopsThemeForm(_MA_USER_FINDUS, 'user_findform', 'findusers.php', 'post', true);
|
350: | $mode = Request::getInt('mode', 0);
|
351: | if (FINDUSERS_MODE_ADVANCED == $mode) {
|
352: | foreach ($items_match as $var => $title) {
|
353: | $text = new XoopsFormText('', $var, 30, 100, Request::getString($var, '', 'POST'));
|
354: | $match = new XoopsFormSelectMatchOption('', "{$var}_match", Request::getInt("{$var}_match", 0));
|
355: | $match_tray = new XoopsFormElementTray($title, ' ');
|
356: | $match_tray->addElement($match);
|
357: | $match_tray->addElement($text);
|
358: | $form->addElement($match_tray);
|
359: | unset($text, $match, $match_tray);
|
360: | }
|
361: |
|
362: | $url_text = new XoopsFormText(_MA_USER_URLC, 'url', 30, 100, Request::getUrl('url', '', 'POST'));
|
363: | $location_text = new XoopsFormText(_MA_USER_LOCATION, 'user_from', 30, 100, Request::getString('user_from', '', 'POST'));
|
364: | $occupation_text = new XoopsFormText(_MA_USER_OCCUPATION, 'user_occ', 30, 100, Request::getString('user_occ', '', 'POST'));
|
365: | $interest_text = new XoopsFormText(_MA_USER_INTEREST, 'user_intrest', 30, 100, Request::getString('user_intrest', '', 'POST'));
|
366: | foreach ($items_range as $var => $title) {
|
367: | $more = new XoopsFormText('', "{$var}_more", 10, 5, Request::getString("{$var}_more", '', 'POST'));
|
368: | $less = new XoopsFormText('', "{$var}_less", 10, 5, Request::getString("{$var}_less", '', 'POST'));
|
369: | $range_tray = new XoopsFormElementTray($title, ' - ');
|
370: | $range_tray->addElement($less);
|
371: | $range_tray->addElement($more);
|
372: | $form->addElement($range_tray);
|
373: | unset($more, $less, $range_tray);
|
374: | }
|
375: |
|
376: | $mailok_radio = new XoopsFormRadio(_MA_USER_SHOWMAILOK, 'user_mailok', Request::getString('user_mailok', 'both', 'POST'));
|
377: | $mailok_radio->addOptionArray(array(
|
378: | 'mailok' => _MA_USER_MAILOK,
|
379: | 'mailng' => _MA_USER_MAILNG,
|
380: | 'both' => _MA_USER_BOTH
|
381: | ));
|
382: | $avatar_radio = new XoopsFormRadio(_MA_USER_HASAVATAR, 'user_avatar', Request::getString('user_avatar', 'both', 'POST'));
|
383: | $avatar_radio->addOptionArray(array(
|
384: | 'y' => _YES,
|
385: | 'n' => _NO,
|
386: | 'both' => _MA_USER_BOTH
|
387: | ));
|
388: |
|
389: | $level_radio = new XoopsFormRadio(_MA_USER_LEVEL, 'level', Request::getString('level', '', 'POST'));
|
390: | $levels = array(
|
391: | 0 => _ALL,
|
392: | 1 => _MA_USER_LEVEL_ACTIVE,
|
393: | 2 => _MA_USER_LEVEL_INACTIVE,
|
394: | 3 => _MA_USER_LEVEL_DISABLED
|
395: | );
|
396: | $level_radio->addOptionArray($levels);
|
397: |
|
398: |
|
399: | $member_handler = xoops_getHandler('member');
|
400: | $groups = $member_handler->getGroupList();
|
401: | $groups[0] = _ALL;
|
402: | $group_select = new XoopsFormSelect(_MA_USER_GROUP, 'groups', Request::getInt('groups', 0), 3, true);
|
403: | $group_select->addOptionArray($groups);
|
404: |
|
405: | $ranks = $rank_handler->getList();
|
406: | $ranks[0] = _ALL;
|
407: | $rank_select = new XoopsFormSelect(_MA_USER_RANK, 'rank', Request::getInt('rank', 0) );
|
408: | $rank_select->addOptionArray($ranks);
|
409: | $form->addElement($url_text);
|
410: | $form->addElement($location_text);
|
411: | $form->addElement($occupation_text);
|
412: | $form->addElement($interest_text);
|
413: | $form->addElement($mailok_radio);
|
414: | $form->addElement($avatar_radio);
|
415: | $form->addElement($level_radio);
|
416: | $form->addElement($group_select);
|
417: | $form->addElement($rank_select);
|
418: | } else {
|
419: | foreach (array('uname', 'email') as $var) {
|
420: | $title = $items_match[$var];
|
421: | $text = new XoopsFormText('', $var, 30, 100, Request::getString($var, '', 'POST'));
|
422: | $match = new XoopsFormSelectMatchOption('', "{$var}_match", Request::getInt("{$var}_match", 0));
|
423: | $match_tray = new XoopsFormElementTray($title, ' ');
|
424: | $match_tray->addElement($match);
|
425: | $match_tray->addElement($text);
|
426: | $form->addElement($match_tray);
|
427: | unset($text, $match, $match_tray);
|
428: | }
|
429: | }
|
430: |
|
431: | $sort_select = new XoopsFormSelect(_MA_USER_SORT, 'user_sort', Request::getString('user_sort', '', 'POST'));
|
432: | $sort_select->addOptionArray(array(
|
433: | 'uname' => _MA_USER_UNAME,
|
434: | 'last_login' => _MA_USER_LASTLOGIN,
|
435: | 'user_regdate' => _MA_USER_REGDATE,
|
436: | 'posts' => _MA_USER_POSTS
|
437: | ));
|
438: | $order_select = new XoopsFormSelect(_MA_USER_ORDER, 'user_order', Request::getString('user_order', '', 'POST'));
|
439: | $order_select->addOptionArray(array(
|
440: | 'ASC' => _MA_USER_ASC,
|
441: | 'DESC' => _MA_USER_DESC
|
442: | ));
|
443: |
|
444: | $form->addElement($sort_select);
|
445: | $form->addElement($order_select);
|
446: |
|
447: | $form->addElement(new XoopsFormText(_MA_USER_LIMIT, 'limit', 6, 6, Request::getInt('limit', 50, 'POST')));
|
448: | $form->addElement(new XoopsFormHidden('mode', $mode));
|
449: | $form->addElement(new XoopsFormHidden('target', Request::getString('target', '', 'POST')));
|
450: | $form->addElement(new XoopsFormHidden('multiple', $multiple));
|
451: | $form->addElement(new XoopsFormHidden('token', $token));
|
452: | $form->addElement(new XoopsFormButton('', 'user_submit', _SUBMIT, 'submit'));
|
453: |
|
454: | $acttotal = $user_handler->getCount(new Criteria('level', 0, '>'));
|
455: | $inacttotal = $user_handler->getCount(new Criteria('level', 0, '<='));
|
456: | echo '</html><body>';
|
457: | echo "<h2 style='text-align:left;'>" . _MA_USER_FINDUS . ' - ' . $modes[$mode] . '</h2>';
|
458: | $modes_switch = array();
|
459: | foreach ($modes as $_mode => $title) {
|
460: | if ($mode == $_mode) {
|
461: | continue;
|
462: | }
|
463: | $modes_switch[] = "<a href='findusers.php?target=" . htmlspecialchars(Request::getString('target', ''), ENT_QUOTES) . '&multiple=' . (string)$multiple . '&token=' . htmlspecialchars($token, ENT_QUOTES) . "&mode={$_mode}'>{$title}</a>";
|
464: | }
|
465: | echo '<h4>' . implode(' | ', $modes_switch) . '</h4>';
|
466: | echo '(' . sprintf(_MA_USER_ACTUS, "<span style='color:#ff0000;'>$acttotal</span>") . ' ' . sprintf(_MA_USER_INACTUS, "<span style='color:#ff0000;'>$inacttotal</span>") . ')';
|
467: | $form->display();
|
468: | } else {
|
469: | $myts = \MyTextSanitizer::getInstance();
|
470: | $limit = Request::getInt('limit', 50, 'POST');
|
471: | $start = Request::getInt('start', 0, 'POST');
|
472: | if (Request::hasVar('query', 'POST')) {
|
473: | unset($_POST['query']);
|
474: | $query = '';
|
475: | }
|
476: |
|
477: | $criteria = new CriteriaCompo();
|
478: | foreach (array_keys($items_match) as $var) {
|
479: | if (Request::hasVar($var, 'POST')) {
|
480: | $match = Request::getInt("{$var}_match", XOOPS_MATCH_START, 'POST');
|
481: | $value = $xoopsDB->escape(Request::getString($var, '', 'POST'));
|
482: | switch ($match) {
|
483: | case XOOPS_MATCH_START:
|
484: | $criteria->add(new Criteria($var, $value . '%', 'LIKE'));
|
485: | break;
|
486: | case XOOPS_MATCH_END:
|
487: | $criteria->add(new Criteria($var, '%' . $value, 'LIKE'));
|
488: | break;
|
489: | case XOOPS_MATCH_EQUAL:
|
490: | $criteria->add(new Criteria($var, $value));
|
491: | break;
|
492: | case XOOPS_MATCH_CONTAIN:
|
493: | $criteria->add(new Criteria($var, '%' . $value . '%', 'LIKE'));
|
494: | break;
|
495: | }
|
496: | }
|
497: | }
|
498: | if (Request::hasVar('url', 'POST')) {
|
499: | $url = formatURL(trim(Request::getUrl('url', '', 'POST')));
|
500: | $criteria->add(new Criteria('url', $url . '%', 'LIKE'));
|
501: | }
|
502: | if (Request::hasVar('user_from', 'POST')) {
|
503: | $criteria->add(new Criteria('user_from', '%' . $xoopsDB->escape(Request::getString('user_from', '', 'POST')) . '%', 'LIKE'));
|
504: | }
|
505: | if (Request::hasVar('user_intrest', 'POST')) {
|
506: | $criteria->add(new Criteria('user_intrest', '%' . $xoopsDB->escape(Request::getString('user_intrest', '', 'POST')) . '%', 'LIKE'));
|
507: | }
|
508: | if (Request::hasVar('user_occ', 'POST')) {
|
509: | $criteria->add(new Criteria('user_occ', '%' . $xoopsDB->escape(Request::getString('user_occ', '', 'POST')) . '%', 'LIKE'));
|
510: | }
|
511: | foreach (array('last_login', 'user_regdate') as $var) {
|
512: | if (Request::hasVar("{$var}_more", 'POST') && is_numeric($_POST["{$var}_more"])) {
|
513: | $time = time() - (60 * 60 * 24 * Request::getInt("{$var}_more", 0, 'POST'));
|
514: | if ($time > 0) {
|
515: | $criteria->add(new Criteria($var, $time, '<='));
|
516: | }
|
517: | }
|
518: | if (Request::hasVar("{$var}_less", 'POST') && is_numeric($_POST["{$var}_less"])) {
|
519: | $time = time() - (60 * 60 * 24 * Request::getInt("{$var}_less", 0, 'POST'));
|
520: | if ($time > 0) {
|
521: | $criteria->add(new Criteria($var, $time, '>='));
|
522: | }
|
523: | }
|
524: | }
|
525: | if (Request::hasVar('posts_more', 'POST') && is_numeric($_POST['posts_more'])) {
|
526: | $criteria->add(new Criteria('posts', Request::getInt('posts_more', 0, 'POST'), '<='));
|
527: | }
|
528: | if (Request::hasVar('posts_less', 'POST') && is_numeric($_POST['posts_less'])) {
|
529: | $criteria->add(new Criteria('posts', Request::getInt('posts_less', 0, 'POST'), '>='));
|
530: | }
|
531: | if (Request::hasVar('user_mailok', 'POST')) {
|
532: | if (Request::getString('user_mailok', '', 'POST') === 'mailng') {
|
533: | $criteria->add(new Criteria('user_mailok', 0));
|
534: | } elseif (Request::getString('user_mailok', '', 'POST') === 'mailok') {
|
535: | $criteria->add(new Criteria('user_mailok', 1));
|
536: | }
|
537: | }
|
538: | if (Request::hasVar('user_avatar', 'POST')) {
|
539: | if (Request::getString('user_avatar', '', 'POST') === 'y') {
|
540: | $criteria->add(new Criteria('user_avatar', "('', 'blank.gif')", 'NOT IN'));
|
541: | } elseif (Request::getString('user_avatar', '', 'POST') === 'n') {
|
542: | $criteria->add(new Criteria('user_avatar', "('', 'blank.gif')", 'IN'));
|
543: | }
|
544: | }
|
545: | if (Request::hasVar('level', 'POST')) {
|
546: |
|
547: |
|
548: |
|
549: |
|
550: |
|
551: | $level = Request::getInt('level', 0, 'POST');
|
552: | if ($level > 0) {
|
553: | $criteria->add(new Criteria('level', $level));
|
554: | }
|
555: | }
|
556: | if (Request::hasVar('rank', 'POST')) {
|
557: | $rank_obj = $rank_handler->get(Request::getInt('rank', 0, 'POST'));
|
558: | if ($rank_obj->getVar('rank_special')) {
|
559: | $criteria->add(new Criteria('rank', Request::getInt('rank', 0, 'POST')));
|
560: | } else {
|
561: | if ($rank_obj->getVar('rank_min')) {
|
562: | $criteria->add(new Criteria('posts', $rank_obj->getVar('rank_min'), '>='));
|
563: | }
|
564: | if ($rank_obj->getVar('rank_max')) {
|
565: | $criteria->add(new Criteria('posts', $rank_obj->getVar('rank_max'), '<='));
|
566: | }
|
567: | }
|
568: | }
|
569: | $total = $user_handler->getCount($criteria, Request::getArray('groups', [], 'POST'));
|
570: | $validsort = array(
|
571: | 'uname',
|
572: | 'email',
|
573: | 'last_login',
|
574: | 'user_regdate',
|
575: | 'posts'
|
576: | );
|
577: | $sort = (!in_array(Request::getString('user_sort', '', 'POST'), $validsort)) ? 'uname' : Request::getString('user_sort', '', 'POST');
|
578: | $order = 'ASC';
|
579: | if (Request::hasVar('user_order', 'POST') && Request::getString('user_order', '', 'POST') === 'DESC') {
|
580: | $order = 'DESC';
|
581: | }
|
582: | $criteria->setSort($sort);
|
583: | $criteria->setOrder($order);
|
584: | $criteria->setLimit($limit);
|
585: | $criteria->setStart($start);
|
586: | $foundusers = $user_handler->getAll($criteria, Request::getArray('groups', array(), 'POST'));
|
587: |
|
588: | echo $js_adduser = '
|
589: | <script type="text/javascript">
|
590: | var multiple=' . (string) $multiple . ';
|
591: | function addusers()
|
592: | {
|
593: | var sel_str = "";
|
594: | var num = 0;
|
595: | var mForm = document.forms["' . $name_form . '"];
|
596: | for (var i=0;i!=mForm.elements.length;i++) {
|
597: | var id=mForm.elements[i];
|
598: | if ( ( (multiple > 0 && id.type == "checkbox") || (multiple == 0 && id.type == "radio") ) && (id.checked == true) && ( id.name == "' . $name_userid . '" ) ) {
|
599: | var name = mForm.elements[++i];
|
600: | var len = id.value.length + name.value.length;
|
601: | sel_str += len + ":" + id.value + ":" + name.value;
|
602: | num ++;
|
603: | }
|
604: | }
|
605: | if (num == 0) {
|
606: | alert("' . _MA_USER_NOUSERSELECTED . '");
|
607: | return false;
|
608: | }
|
609: | sel_str = num + ":" + sel_str;
|
610: | window.opener.addusers(sel_str);
|
611: | alert("' . _MA_USER_USERADDED . '");
|
612: | if (multiple == 0) {
|
613: | window.close();
|
614: | window.opener.focus();
|
615: | }
|
616: | return true;
|
617: | }
|
618: | </script>
|
619: | ';
|
620: |
|
621: | echo '</html><body>';
|
622: | echo "<a href='findusers.php?target=" . htmlspecialchars(Request::getString('target', '', 'POST'), ENT_QUOTES) . '&multiple=' . (string)$multiple . '&token=' . htmlspecialchars($token, ENT_QUOTES) . "'>" . _MA_USER_FINDUS . "</a> <span style='font-weight:bold;'>»</span> " . _MA_USER_RESULTS . '<br><br>';
|
623: | if (empty($start) && empty($foundusers)) {
|
624: | echo '<h4>' . _MA_USER_NOFOUND, '</h4>';
|
625: | $hiddenform = "<form name='findnext' action='findusers.php' method='post'>";
|
626: | foreach ($_POST as $k => $v) {
|
627: | if ($k === 'XOOPS_TOKEN_REQUEST') {
|
628: |
|
629: | $hiddenform .= $GLOBALS['xoopsSecurity']->getTokenHTML() . "\n";
|
630: | } elseif (is_array($v)) {
|
631: | foreach ($v as $temp) {
|
632: | $hiddenform .= "<input type='hidden' name='". htmlspecialchars($k, ENT_QUOTES)."' value='" . htmlspecialchars($temp, ENT_QUOTES) . "' />\n";
|
633: | }
|
634: | } else {
|
635: | $hiddenform .= "<input type='hidden' name='" . htmlspecialchars($k, ENT_QUOTES) . "' value='" . htmlspecialchars($v, ENT_QUOTES) . "' />\n";
|
636: | }
|
637: | }
|
638: | if (!Request::hasVar('limit', 'POST')) {
|
639: | $hiddenform .= "<input type='hidden' name='limit' value='{$limit}' />\n";
|
640: | }
|
641: | if (!Request::hasVar('start', 'POST')) {
|
642: | $hiddenform .= "<input type='hidden' name='start' value='{$start}' />\n";
|
643: | }
|
644: | $hiddenform .= "<input type='hidden' name='token' value='" . htmlspecialchars($token, ENT_QUOTES) . "' />\n";
|
645: | $hiddenform .= '</form>';
|
646: |
|
647: | echo '<div>' . $hiddenform;
|
648: | echo "<a href='#' onclick='document.findnext.start.value=0;document.findnext.user_submit.value=0;document.findnext.submit();'>" . _MA_USER_SEARCHAGAIN . "</a>\n";
|
649: | echo '</div>';
|
650: | } elseif ($start < $total) {
|
651: | if (!empty($total)) {
|
652: | echo sprintf(_MA_USER_USERSFOUND, $total) . '<br>';
|
653: | }
|
654: | if (!empty($foundusers)) {
|
655: | echo "<form action='findusers.php' method='post' name='{$name_form}' id='{$name_form}'>
|
656: | <table width='100%' border='0' cellspacing='1' cellpadding='4' class='outer'>
|
657: | <tr>
|
658: | <th align='center' width='5px'>";
|
659: | if ($multiple > 0 ) {
|
660: | echo "<input type='checkbox' name='memberslist_checkall' id='memberslist_checkall' onclick='xoopsCheckAll(\"{$name_form}\", \"memberslist_checkall\");' />";
|
661: | }
|
662: | echo "</th>
|
663: | <th align='center'>" . _MA_USER_UNAME . "</th>
|
664: | <th align='center'>" . _MA_USER_REALNAME . "</th>
|
665: | <th align='center'>" . _MA_USER_REGDATE . "</th>
|
666: | <th align='center'>" . _MA_USER_LASTLOGIN . "</th>
|
667: | <th align='center'>" . _MA_USER_POSTS . '</th>
|
668: | </tr>';
|
669: | $ucount = 0;
|
670: | foreach (array_keys($foundusers) as $j) {
|
671: | $class = 'odd';
|
672: | if ($ucount % 2 == 0) {
|
673: | $class = 'even';
|
674: | }
|
675: | ++$ucount;
|
676: | $fuser_name = $foundusers[$j]->getVar('name') ?: ' ';
|
677: | echo "<tr class='$class'>
|
678: | <td align='center'>";
|
679: | if ($multiple > 0) {
|
680: | echo "<input type='checkbox' name='{$name_userid}' id='{$name_userid}' value='" . $foundusers[$j]->getVar('uid') . "' />";
|
681: | echo "<input type='hidden' name='{$name_username}' id='{$name_username}' value='" . $foundusers[$j]->getVar('uname') . "' />";
|
682: | } else {
|
683: | echo "<input type='radio' name='{$name_userid}' id='{$name_userid}' value='" . $foundusers[$j]->getVar('uid') . "' />";
|
684: | echo "<input type='hidden' name='{$name_username}' id='{$name_username}' value='" . $foundusers[$j]->getVar('uname') . "' />";
|
685: | }
|
686: | echo "</td>
|
687: | <td><a href='" . XOOPS_URL . '/userinfo.php?uid=' . $foundusers[$j]->getVar('uid') . "' target='_blank'>" . $foundusers[$j]->getVar('uname') . '</a></td>
|
688: | <td>' . $fuser_name . "</td>
|
689: | <td align='center'>" . ($foundusers[$j]->getVar('user_regdate') ? date('Y-m-d', $foundusers[$j]->getVar('user_regdate')) : '') . "</td>
|
690: | <td align='center'>" . ($foundusers[$j]->getVar('last_login') ? date('Y-m-d H:i', $foundusers[$j]->getVar('last_login')) : '') . "</td>
|
691: | <td align='center'>" . $foundusers[$j]->getVar('posts') . '</td>';
|
692: | echo "</tr>\n";
|
693: | }
|
694: | echo "<tr class='foot'><td colspan='6'>";
|
695: |
|
696: |
|
697: | if (!Request::hasVar('target', 'POST')) {
|
698: | echo "<select name='fct'><option value='users'>" . _DELETE . "</option><option value='mailusers'>" . _MA_USER_SENDMAIL . '</option>';
|
699: | echo '</select> ';
|
700: | echo $GLOBALS['xoopsSecurity']->getTokenHTML() . "<input type='submit' value='" . _SUBMIT . "' />";
|
701: |
|
702: |
|
703: | } else {
|
704: | echo "<input type='button' value='" . _MA_USER_ADD_SELECTED . "' onclick='addusers();' />";
|
705: | }
|
706: | echo "<input type='hidden' name='token' value='" . htmlspecialchars($token, ENT_QUOTES) . "' />\n";
|
707: | echo "</td></tr></table></form>\n";
|
708: | }
|
709: |
|
710: | $hiddenform = "<form name='findnext' action='findusers.php' method='post'>";
|
711: | foreach ($_POST as $k => $v) {
|
712: | if ($k === 'XOOPS_TOKEN_REQUEST') {
|
713: |
|
714: | $hiddenform .= $GLOBALS['xoopsSecurity']->getTokenHTML() . "\n";
|
715: | } elseif (is_array($v)) {
|
716: | foreach ($v as $temp) {
|
717: | $hiddenform .= "<input type='hidden' name='". htmlspecialchars($k, ENT_QUOTES)."' value='" . htmlspecialchars($temp, ENT_QUOTES) . "' />\n";
|
718: | }
|
719: | } else {
|
720: |
|
721: | $hiddenform .= "<input type='hidden' name='" . htmlspecialchars($k, ENT_QUOTES) . "' value='" . htmlspecialchars($myts->stripSlashesGPC($v), ENT_QUOTES) . "' />\n";
|
722: | }
|
723: | }
|
724: | if (!Request::hasVar('limit', 'POST')) {
|
725: | $hiddenform .= "<input type='hidden' name='limit' value='" . $limit . "' />\n";
|
726: | }
|
727: | if (!Request::hasVar('start', 'POST')) {
|
728: | $hiddenform .= "<input type='hidden' name='start' value='" . $start . "' />\n";
|
729: | }
|
730: | $hiddenform .= "<input type='hidden' name='token' value='" . htmlspecialchars($token, ENT_QUOTES) . "' />\n";
|
731: | if (!isset($total) || ($totalpages = ceil($total / $limit)) > 1) {
|
732: | $prev = $start - $limit;
|
733: | if ($start - $limit >= 0) {
|
734: | $hiddenform .= "<a href='#0' onclick='document.findnext.start.value=" . $prev . ";document.findnext.submit();'>" . _MA_USER_PREVIOUS . "</a> \n";
|
735: | }
|
736: | $counter = 1;
|
737: | $currentpage = ($start + $limit) / $limit;
|
738: | if (!isset($total)) {
|
739: | while ($counter <= $currentpage) {
|
740: | if ($counter == $currentpage) {
|
741: | $hiddenform .= '<strong>' . $counter . '</strong> ';
|
742: | } elseif (($counter > $currentpage - 4 && $counter < $currentpage + 4) || $counter == 1) {
|
743: | $hiddenform .= "<a href='#" . $counter . "' onclick='document.findnext.start.value=" . ($counter - 1) * $limit . ";document.findnext.submit();'>" . $counter . '</a> ';
|
744: | if ($counter == 1 && $currentpage > 5) {
|
745: | $hiddenform .= '... ';
|
746: | }
|
747: | }
|
748: | ++$counter;
|
749: | }
|
750: | } else {
|
751: | while ($counter <= $totalpages) {
|
752: | if ($counter == $currentpage) {
|
753: | $hiddenform .= '<strong>' . $counter . '</strong> ';
|
754: | } elseif (($counter > $currentpage - 4 && $counter < $currentpage + 4) || $counter == 1 || $counter == $totalpages) {
|
755: | if ($counter == $totalpages && $currentpage < $totalpages - 4) {
|
756: | $hiddenform .= '... ';
|
757: | }
|
758: | $hiddenform .= "<a href='#" . $counter . "' onclick='document.findnext.start.value=" . ($counter - 1) * $limit . ";document.findnext.submit();'>" . $counter . '</a> ';
|
759: | if ($counter == 1 && $currentpage > 5) {
|
760: | $hiddenform .= '... ';
|
761: | }
|
762: | }
|
763: | ++$counter;
|
764: | }
|
765: | }
|
766: |
|
767: | $next = $start + $limit;
|
768: | if ((isset($total) && $total > $next) || (!isset($total) && count($foundusers) >= $limit)) {
|
769: | $hiddenform .= " <a href='#" . $total . "' onclick='document.findnext.start.value=" . $next . ";document.findnext.submit();'>" . _MA_USER_NEXT . "</a>\n";
|
770: | }
|
771: | }
|
772: | $hiddenform .= '</form>';
|
773: |
|
774: | echo '<div>' . $hiddenform;
|
775: | if (isset($total)) {
|
776: | echo '<br>' . sprintf(_MA_USER_USERSFOUND, $total) . ' ';
|
777: | }
|
778: | echo "<a href='#' onclick='document.findnext.start.value=0;document.findnext.user_submit.value=0;document.findnext.submit();'>" . _MA_USER_SEARCHAGAIN . "</a>\n";
|
779: | echo '</div>';
|
780: | }
|
781: | }
|
782: |
|
783: | xoops_footer();
|
784: | |