📄 findusers.php
字号:
<?php
/**
* user selection
*
* limit: Only work with javascript enabled
* TODO: plugins for external applications, including but not limited: sending massive emails/PMs, membership edit
*
* @copyright The XOOPS project http://www.xoops.org/
* @license http://www.fsf.org/copyleft/gpl.html GNU public license
* @author Taiwen Jiang (phppp or D.J.) <php_pp@hotmail.com>
* @since 1.00
* @version $Id$
*/
include "../mainfile.php";
xoops_header(false);
$denied = true;
if (!empty($_REQUEST['token'])) {
if ($GLOBALS['xoopsSecurity']->validateToken($_REQUEST['token'], false)) {
$denied = false;
}
} elseif ( is_object($xoopsUser) && $xoopsUser->isAdmin() ) {
$denied = false;
}
if ($denied) {
xoops_error(_NOPERM);
exit();
}
$token = @$_REQUEST["token"];
$name_form = 'memberslist';
$name_userid = 'uid' . ( @$_REQUEST['multiple'] ? "[]" : "" );
$name_username = 'uname' . ( @$_REQUEST['multiple'] ? "[]" : "" );
if (!@include_once XOOPS_ROOT_PATH."/language/".$xoopsConfig["language"]."/findusers.php") {
include_once XOOPS_ROOT_PATH."/language/english/findusers.php";
}
class XoopsRank extends XoopsObject
{
function __construct() {
$this->XoopsRank();
}
function XoopsRank()
{
$this->XoopsObject();
$this->initVar('rank_id', XOBJ_DTYPE_INT, null, false);
$this->initVar('rank_title', XOBJ_DTYPE_TXTBOX, null, false);
$this->initVar('rank_min', XOBJ_DTYPE_INT, 0);
$this->initVar('rank_max', XOBJ_DTYPE_INT, 0);
$this->initVar('rank_special', XOBJ_DTYPE_INT, 0);
$this->initVar('rank_image', XOBJ_DTYPE_TXTBOX, "");
}
}
class XoopsRankHandler extends XoopsObjectHandler
{
function __construct(&$db) {
$this->XoopsRankHandler($db);
}
function XoopsRankHandler(&$db) {
$this->XoopsObjectHandler($db);
}
function &create($isNew = true) {
$obj =& new XoopsRank();
if ($isNew === true) {
$obj->setNew();
}
return $obj;
}
function &get($id = 0)
{
$object =& $this->create(false);
$sql = "SELECT * FROM " . $this->db->prefix('ranks') . " WHERE rank_id = " . $this->db->quoteString($id);
if (!$result = $this->db->query($sql)) {
$ret = null;
return $ret;
}
while ($row = $this->db->fetchArray($result)) {
$object->assignVars($row);
}
return $object;
}
function getList($criteria = null, $limit = 0, $start = 0)
{
$ret = array();
if ($criteria == null) {
$criteria = new CriteriaCompo();
}
$sql = 'SELECT rank_id, rank_title FROM '.$this->db->prefix('ranks');
if (isset($criteria) && is_subclass_of($criteria, 'criteriaelement')) {
$sql .= ' '.$criteria->renderWhere();
if ($criteria->getSort() != '') {
$sql .= ' ORDER BY '.$criteria->getSort().' '.$criteria->getOrder();
}
$limit = $criteria->getLimit();
$start = $criteria->getStart();
}
$result = $this->db->query($sql, $limit, $start);
if (!$result) {
return $ret;
}
$myts =& MyTextSanitizer::getInstance();
while ($myrow = $this->db->fetchArray($result)) {
$ret[$myrow["rank_id"]] = $myts->htmlSpecialChars($myrow["rank_title"]);
}
return $ret;
}
}
class XoUser extends XoopsUser
{
function __construct() {
$this->XoUser();
}
function XoUser() {
$this->XoopsUser();
$unsets = array("actkey", "pass", "theme", "umode", "uorder", "notify_mode");
foreach($unsets as $var) {
unset($this->vars[$var]);
}
}
}
class XoUserHandler extends XoopsObjectHandler
{
function __construct(&$db) {
$this->XoUserHandler($db);
}
function XoUserHandler(&$db) {
$this->XoopsObjectHandler($db);
}
function &create($isNew = true) {
$obj =& new XoUser();
if ($isNew === true) {
$obj->setNew();
}
return $obj;
}
function getCount($criteria = null, $groups = array()) {
if (!is_array($groups)) {
$groups = array($groups);
}
$groups = array_filter($groups);
if (empty($groups)) {
$sql = ' SELECT COUNT(DISTINCT u.uid) FROM '.$this->db->prefix('users'). ' AS u'.
' WHERE 1=1';
} else {
$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)).')';
}
if (isset($criteria) && is_subclass_of($criteria, 'criteriaelement')) {
// Use the direct renderer, assuming no `uid` in criteria
if ($render = $criteria->render()) {
$sql .= ' AND '.$render;
}
}
$result = $this->db->query($sql);
list($count) = $this->db->fetchRow($result);
return $count;
}
function getAll($criteria = null, $groups = array()) {
if (!is_array($groups)) {
$groups = array($groups);
}
$groups = array_filter($groups);
$limit = null;
$start = null;
if (empty($groups)) {
$sql = ' SELECT u.* FROM '.$this->db->prefix('users'). ' AS u'.
' WHERE 1=1';
} else {
$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)).')';
}
if (isset($criteria) && is_subclass_of($criteria, "criteriaelement")) {
if ($render = $criteria->render()) {
$sql .= ' AND '.$render;
}
if ($sort = $criteria->getSort()) {
$sql .= " ORDER BY ".$sort." ".$criteria->getOrder();
$orderSet = true;
}
$limit = $criteria->getLimit();
$start = $criteria->getStart();
}
if (empty($orderSet)) $sql .= " ORDER BY u.uid ASC";
$result = $this->db->query($sql, $limit, $start);
$ret = array();
while ($myrow = $this->db->fetchArray($result)) {
$object =& $this->create(false);
$object->assignVars($myrow);
$ret[$myrow["uid"]] = $object;
unset($object);
}
return $ret;
}
}
$rank_handler = new XoopsRankHandler($xoopsDB);
$user_handler = new XoUserHandler($xoopsDB);
$items_match = array(
"uname" => _MA_USER_UNAME,
"name" => _MA_USER_REALNAME,
"email" => _MA_USER_EMAIL,
"user_icq" => _MA_USER_ICQ,
"user_aim" => _MA_USER_AIM,
"user_yim" => _MA_USER_YIM,
"user_msnm" => _MA_USER_MSNM
);
$items_range = array(
"user_regdate" => _MA_USER_RANGE_USER_REGDATE,
"last_login" => _MA_USER_RANGE_LAST_LOGIN,
"posts" => _MA_USER_RANGE_POSTS,
);
define("FINDUSERS_MODE_SIMPLE", 0);
define("FINDUSERS_MODE_ADVANCED", 1);
define("FINDUSERS_MODE_QUERY", 2);
$modes = array(
FINDUSERS_MODE_SIMPLE => _MA_USER_MODE_SIMPLE,
FINDUSERS_MODE_ADVANCED => _MA_USER_MODE_ADVANCED,
FINDUSERS_MODE_QUERY => _MA_USER_MODE_QUERY,
);
if ( empty($_POST["user_submit"]) ) {
include_once XOOPS_ROOT_PATH."/class/xoopsformloader.php";
$form = new XoopsThemeForm(_MA_USER_FINDUS, "uesr_findform", "findusers.php", 'post', true);
$mode = intval( @$_REQUEST["mode"] );
if ( FINDUSERS_MODE_QUERY == $mode ) {
$form->addElement(new XoopsFormTextArea(_MA_USER_QUERY, "query", @$_POST["query"]));
} else {
if ( FINDUSERS_MODE_ADVANCED == $mode ) {
foreach ($items_match as $var => $title) {
$text = new XoopsFormText("", $var, 30, 100, @$_POST[$var]);
$match = new XoopsFormSelectMatchOption("", "{$var}_match", @$_POST["{$var}_match"]);
$match_tray = new XoopsFormElementTray($title, " ");
$match_tray->addElement($match);
$match_tray->addElement($text);
$form->addElement($match_tray);
unset($text, $match, $match_tray);
}
$url_text = new XoopsFormText(_MA_USER_URLC, "url", 30, 100, @$_POST["url"]);
$location_text = new XoopsFormText(_MA_USER_LOCATION, "user_from", 30, 100, @$_POST["user_from"]);
$occupation_text = new XoopsFormText(_MA_USER_OCCUPATION, "user_occ", 30, 100, @$_POST["user_occ"]);
$interest_text = new XoopsFormText(_MA_USER_INTEREST, "user_intrest", 30, 100, @$_POST["user_intrest"]);
foreach ($items_range as $var => $title) {
$more = new XoopsFormText("", "{$var}_more", 10, 5, @$_POST["{$var}_more"]);
$less = new XoopsFormText("", "{$var}_less", 10, 5, @$_POST["{$var}_less"]);
$range_tray = new XoopsFormElementTray($title, " - ");
$range_tray->addElement($less);
$range_tray->addElement($more);
$form->addElement($range_tray);
unset($more, $less, $range_tray);
}
$mailok_radio = new XoopsFormRadio(_MA_USER_SHOWMAILOK, "user_mailok", empty($_POST["user_mailok"]) ? "both" : $_POST["user_mailok"]);
$mailok_radio->addOptionArray(array("mailok"=>_MA_USER_MAILOK, "mailng"=>_MA_USER_MAILNG, "both"=>_MA_USER_BOTH));
$avatar_radio = new XoopsFormRadio(_MA_USER_HASAVATAR, "user_avatar", empty($_POST["user_avatar"]) ? "both" : $_POST["user_avatar"]);
$avatar_radio->addOptionArray(array("y"=>_YES, "n"=>_NO, "both"=>_MA_USER_BOTH));
$level_radio = new XoopsFormRadio(_MA_USER_LEVEL, "level", @$_POST["level"]);
$levels = array( 0 => _ALL, 1 => _MA_USER_LEVEL_ACTIVE, 2 => _MA_USER_LEVEL_INACTIVE , 3 => _MA_USER_LEVEL_DISABLED);
$level_radio->addOptionArray($levels);
$member_handler =& xoops_gethandler('member');
$groups = $member_handler->getGroupList();
$groups[0] = _ALL;
$group_select = new XoopsFormSelect(_MA_USER_GROUP, 'groups', @$_POST['groups'], 3, true);
$group_select->addOptionArray($groups);
$ranks = $rank_handler->getList();
$ranks[0] = _ALL;
$rank_select = new XoopsFormSelect(_MA_USER_RANK, 'rank', intval( @$_POST['rank'] ));
$rank_select->addOptionArray($ranks);
$form->addElement($url_text);
$form->addElement($location_text);
$form->addElement($occupation_text);
$form->addElement($interest_text);
$form->addElement($mailok_radio);
$form->addElement($avatar_radio);
$form->addElement($level_radio);
$form->addElement($group_select);
$form->addElement($rank_select);
} else {
foreach (array("uname", "email") as $var) {
$title = $items_match[$var];
$text = new XoopsFormText("", $var, 30, 100, @$_POST[$var]);
$match = new XoopsFormSelectMatchOption("", "{$var}_match", @$_POST["{$var}_match"]);
$match_tray = new XoopsFormElementTray($title, " ");
$match_tray->addElement($match);
$match_tray->addElement($text);
$form->addElement($match_tray);
unset($text, $match, $match_tray);
}
}
$sort_select = new XoopsFormSelect(_MA_USER_SORT, "user_sort", @$_POST["user_sort"]);
$sort_select->addOptionArray(array("uname"=>_MA_USER_UNAME, "last_login"=>_MA_USER_LASTLOGIN, "user_regdate"=>_MA_USER_REGDATE, "posts"=>_MA_USER_POSTS));
$order_select = new XoopsFormSelect(_MA_USER_ORDER, "user_order", @$_POST["user_order"]);
$order_select->addOptionArray(array("ASC"=>_MA_USER_ASC,"DESC"=>_MA_USER_DESC));
$form->addElement($sort_select);
$form->addElement($order_select);
}
$form->addElement( new XoopsFormText(_MA_USER_LIMIT, "limit", 6, 6, empty($_REQUEST["limit"]) ? 50 : intval($_REQUEST["limit"])) );
$form->addElement( new XoopsFormHidden("mode", $mode) );
$form->addElement( new XoopsFormHidden("target", @$_REQUEST["target"]) );
$form->addElement( new XoopsFormHidden("multiple", @$_REQUEST["multiple"]) );
$form->addElement( new XoopsFormHidden("token", $token) );
$form->addElement( new XoopsFormButton("", "user_submit", _SUBMIT, "submit") );
$acttotal = $user_handler->getCount(new Criteria('level', 0, '>'));
$inacttotal = $user_handler->getCount(new Criteria('level', 0, '<='));
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -