| 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: | |