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

📄 admin.users.php

📁 Joomla15 - 最新开源CMS
💻 PHP
📖 第 1 页 / 共 2 页
字号:
<?php
/**
* @version		$Id: admin.users.php 8540 2007-08-24 12:36:22Z jinx $
* @package		Joomla
* @subpackage	Users
* @copyright	Copyright (C) 2005 - 2007 Open Source Matters. All rights reserved.
* @license		GNU/GPL, see LICENSE.php
* Joomla! is free software. This version may have been modified pursuant
* to the GNU General Public License, and as distributed it includes or
* is derivative of works licensed under the GNU General Public License or
* other free or open source software licenses.
* See COPYRIGHT.php for copyright notices and details.
*/

// no direct access
defined( '_JEXEC' ) or die( 'Restricted access' );

/*
 * Make sure the user is authorized to view this page
 */
$user = & JFactory::getUser();
if (!$user->authorize( 'com_users', 'manage' )) {
	$mainframe->redirect( 'index.php', JText::_('ALERTNOTAUTH') );
}

require_once( JPATH_COMPONENT.DS.'admin.users.html.php' );
require_once( JPATH_COMPONENT.DS.'users.class.php' );

switch (JRequest::getCmd('task'))
{
	case 'add' :
	case 'edit':
		editUser( );
		break;

	case 'save':
	case 'apply':
 		saveUser( );
		break;

	case 'remove':
		removeUsers( );
		break;

	case 'block':
		changeUserBlock( 1 );
		break;

	case 'unblock':
		changeUserBlock( 0 );
		break;

	case 'logout':
		logoutUser( );
		break;

	case 'flogout':
		logoutUser( );
		break;

	case 'cancel':
		cancelUser( );
		break;

	case 'contact':
		$contact_id = JRequest::getVar( 'contact_id', '', 'post', 'int' );
		$mainframe->redirect( 'index.php?option=com_contact&atask=edit&cid[]='. $contact_id );
		break;

	default:
		showUsers( );
		break;
}

/**
 * Display users in list form
 */
function showUsers( )
{
	global $mainframe, $option;

	$db				=& JFactory::getDBO();
	$currentUser	=& JFactory::getUser();
	$acl			=& JFactory::getACL();

	$filter_order		= $mainframe->getUserStateFromRequest( "$option.filter_order",		'filter_order',		'a.name',	'cmd' );
	$filter_order_Dir	= $mainframe->getUserStateFromRequest( "$option.filter_order_Dir",	'filter_order_Dir',	'',			'word' );
	$filter_type		= $mainframe->getUserStateFromRequest( "$option.filter_type",		'filter_type', 		0,			'string' );
	$filter_logged		= $mainframe->getUserStateFromRequest( "$option.filter_logged",		'filter_logged', 	0,			'int' );
	$search				= $mainframe->getUserStateFromRequest( "$option.search",			'search', 			'',			'string' );
	$search				= JString::strtolower( $search );

	$limit		= $mainframe->getUserStateFromRequest( 'global.list.limit', 'limit', $mainframe->getCfg('list_limit'), 'int' );
	$limitstart = $mainframe->getUserStateFromRequest( $option.'limitstart', 'limitstart', 0, 'int' );

	$where = array();
	if (isset( $search ) && $search!= '')
	{
		$searchEscaped = $db->Quote('%'.$search.'%');
		$where[] = 'a.username LIKE '.$searchEscaped.' OR a.email LIKE '.$searchEscaped.' OR a.name LIKE '.$searchEscaped;
	}
	if ( $filter_type )
	{
		if ( $filter_type == 'Public Frontend' )
		{
			$where[] = ' a.usertype = \'Registered\' OR a.usertype = \'Author\' OR a.usertype = \'Editor\' OR a.usertype = \'Publisher\' ';
		}
		else if ( $filter_type == 'Public Backend' )
		{
			$where[] = 'a.usertype = \'Manager\' OR a.usertype = \'Administrator\' OR a.usertype = \'Super Administrator\' ';
		}
		else
		{
			$where[] = 'a.usertype = LOWER( '.$db->Quote($filter_type).' ) ';
		}
	}
	if ( $filter_logged == 1 )
	{
		$where[] = 's.userid = a.id';
	}
	else if ($filter_logged == 2)
	{
		$where[] = 's.userid IS NULL';
	}

	// exclude any child group id's for this user
	$pgids = $acl->get_group_children( $currentUser->get('gid'), 'ARO', 'RECURSE' );

	if (is_array( $pgids ) && count( $pgids ) > 0)
	{
		JArrayHelper::toInteger($pgids);
		$where[] = 'a.gid NOT IN (' . implode( ',', $pgids ) . ')';
	}
	$filter = '';
	if ($filter_logged == 1 || $filter_logged == 2)
	{
		$filter = ' INNER JOIN #__session AS s ON s.userid = a.id';
	}

	$orderby = ' ORDER BY '. $filter_order .' '. $filter_order_Dir;
	$where = ( count( $where ) ? ' WHERE (' . implode( ') AND (', $where ) . ')' : '' );

	$query = 'SELECT COUNT(a.id)'
	. ' FROM #__users AS a'
	. $filter
	. $where
	;
	$db->setQuery( $query );
	$total = $db->loadResult();

	jimport('joomla.html.pagination');
	$pageNav = new JPagination( $total, $limitstart, $limit );

	$query = 'SELECT a.*, g.name AS groupname'
	. ' FROM #__users AS a'
	. ' INNER JOIN #__core_acl_aro AS aro ON aro.value = a.id'
	. ' INNER JOIN #__core_acl_groups_aro_map AS gm ON gm.aro_id = aro.id'
	. ' INNER JOIN #__core_acl_aro_groups AS g ON g.id = gm.group_id'
	. $filter
	. $where
	. ' GROUP BY a.id'
	. $orderby
	;
	$db->setQuery( $query, $pageNav->limitstart, $pageNav->limit );
	$rows = $db->loadObjectList();

	$n = count( $rows );
	$template = 'SELECT COUNT(s.userid)'
	. ' FROM #__session AS s'
	. ' WHERE s.userid = %d'
	;
	for ($i = 0; $i < $n; $i++)
	{
		$row = &$rows[$i];
		$query = sprintf( $template, intval( $row->id ) );
		$db->setQuery( $query );
		$row->loggedin = $db->loadResult();
	}

	// get list of Groups for dropdown filter
	$query = 'SELECT name AS value, name AS text'
	. ' FROM #__core_acl_aro_groups'
	. ' WHERE name != "ROOT"'
	. ' AND name != "USERS"'
	;
	$db->setQuery( $query );
	$types[] 		= JHTML::_('select.option',  '0', '- '. JText::_( 'Select Group' ) .' -' );
	foreach( $db->loadObjectList() as $obj )
	{
		$types[] = JHTML::_('select.option',  $obj->value, JText::_( $obj->text ) );
	}
	$lists['type'] 	= JHTML::_('select.genericlist',   $types, 'filter_type', 'class="inputbox" size="1" onchange="document.adminForm.submit( );"', 'value', 'text', "$filter_type" );

	// get list of Log Status for dropdown filter
	$logged[] = JHTML::_('select.option',  0, '- '. JText::_( 'Select Log Status' ) .' -');
	$logged[] = JHTML::_('select.option',  1, JText::_( 'Logged In' ) );
	$lists['logged'] = JHTML::_('select.genericlist',   $logged, 'filter_logged', 'class="inputbox" size="1" onchange="document.adminForm.submit( );"', 'value', 'text', "$filter_logged" );

	// table ordering
	$lists['order_Dir']	= $filter_order_Dir;
	$lists['order']		= $filter_order;

	// search filter
	$lists['search']= $search;

	HTML_users::showUsers( $rows, $pageNav, $option, $lists );
}

/**
 * Edit the user
 */
function editUser( )
{

	$option		= JRequest::getCmd( 'option');
	$cid		= JRequest::getVar( 'cid', array(0), '', 'array' );
	JArrayHelper::toInteger($cid, array(0));

	$db 		=& JFactory::getDBO();
	$user 		=& JUser::getInstance( $cid[0] );
	$myuser		=& JFactory::getUser();
	$acl		=& JFactory::getACL();

	// Check for post data in the event that we are returning
	// from a unsuccessful attempt to save data
	$post = JRequest::get('post');
	if ( $post )
	{
		$user->bind($post);
	}

	if ( $user->get('id') )
	{
		$query = 'SELECT *'
		. ' FROM #__contact_details'
		. ' WHERE user_id = '.(int) $cid[0]
		;
		$db->setQuery( $query );
		$contact = $db->loadObjectList();
	}
	else
	{
		$contact 	= NULL;
		// Get the default group id for a new user
		$config		= &JComponentHelper::getParams( 'com_users' );
		$newGrp		= $config->get( 'new_usertype' );
		$user->set( 'gid', $acl->get_group_id( $newGrp, null, 'ARO' ) );
	}

	$userObjectID 	= $acl->get_object_id( 'users', $user->get('id'), 'ARO' );
	$userGroups 	= $acl->get_object_groups( $userObjectID, 'ARO' );
	$userGroupName 	= strtolower( $acl->get_group_name( $userGroups[0], 'ARO' ) );

	$myObjectID 	= $acl->get_object_id( 'users', $myuser->get('id'), 'ARO' );
	$myGroups 		= $acl->get_object_groups( $myObjectID, 'ARO' );
	$myGroupName 	= strtolower( $acl->get_group_name( $myGroups[0], 'ARO' ) );;

	// ensure user can't add/edit group higher than themselves
	/* NOTE : This check doesn't work commented out for the time being
	if ( is_array( $myGroups ) && count( $myGroups ) > 0 )
	{
		$excludeGroups = (array) $acl->get_group_children( $myGroups[0], 'ARO', 'RECURSE' );
	}
	else
	{
		$excludeGroups = array();
	}

	if ( in_array( $userGroups[0], $excludeGroups ) )
	{
		echo 'not auth';
		$mainframe->redirect( 'index.php?option=com_users', JText::_('NOT_AUTH') );
	}
	*/

	/*
	if ( $userGroupName == 'super administrator' )
	{
		// super administrators can't change
	 	$lists['gid'] = '<input type="hidden" name="gid" value="'. $currentUser->gid .'" /><strong>'. JText::_( 'Super Administrator' ) .'</strong>';
	}
	else if ( $userGroupName == $myGroupName && $myGroupName == 'administrator' ) {
	*/

	if ( $userGroupName == $myGroupName && $myGroupName == 'administrator' )
	{
		// administrators can't change each other
		$lists['gid'] = '<input type="hidden" name="gid" value="'. $user->get('gid') .'" /><strong>'. JText::_( 'Administrator' ) .'</strong>';
	}
	else
	{
		$gtree = $acl->get_group_children_tree( null, 'USERS', false );

		// remove users 'above' me
		//$i = 0;
		//while ($i < count( $gtree )) {
		//	if ( in_array( $gtree[$i]->value, (array)$excludeGroups ) ) {
		//		array_splice( $gtree, $i, 1 );
		//	} else {
		//		$i++;
		//	}
		//}

		$lists['gid'] 	= JHTML::_('select.genericlist',   $gtree, 'gid', 'size="10"', 'value', 'text', $user->get('gid') );
	}

	// build the html select list
	$lists['block'] 	= JHTML::_('select.booleanlist',  'block', 'class="inputbox" size="1"', $user->get('block') );
	// build the html select list
	$lists['sendEmail'] = JHTML::_('select.booleanlist',  'sendEmail', 'class="inputbox" size="1"', $user->get('sendEmail') );

	HTML_users::edituser( $user, $contact, $lists, $option );
}

/**
 * Save current edit or addition
 */
function saveUser(  )
{
	global $mainframe;

	$task 	= JRequest::getCmd( 'task' );
	$option = JRequest::getCmd( 'option');

	// Initialize some variables
	$db			= & JFactory::getDBO();
	$me			= & JFactory::getUser();
	$MailFrom	= $mainframe->getCfg('mailfrom');
	$FromName	= $mainframe->getCfg('fromname');

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -