⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 findusers.php

📁 讲的是网络编程
💻 PHP
📖 第 1 页 / 共 2 页
字号:
<?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, "&nbsp;");
			    $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, "&nbsp;-&nbsp;&nbsp;");
			    $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, "&nbsp;");
			    $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 + -