Вход Регистрация
Файл: concrete5.7.5.6/concrete/src/Legacy/UserList.php
Строк: 130
<?php

namespace ConcreteCoreLegacy;

use 
ConcreteCoreLegacyDatabaseItemList;
use 
UserAttributeKey;
use 
UserInfo;
use 
Core;
use 
Database;
use 
Group;

/**
 * An object that allows a filtered list of users to be returned.
 * @package Files
 * @author Tony Trupp <tony@concrete5.org>
 * @category Concrete
 * @copyright  Copyright (c) 2003-2008 Concrete5. (http://www.concrete5.org)
 * @license    http://www.concrete5.org/license/     MIT License
 */
class UserList extends DatabaseItemList
{
    protected 
$attributeFilters = array();
    protected 
$autoSortColumns = array('uName''uEmail''uDateAdded''uLastLogin''uNumLogins''uLastOnline');
    protected 
$itemsPerPage 10;
    protected 
$attributeClass 'UserAttributeKey';

    public 
$showInactiveUsers;
    public 
$showInvalidatedUsers 0;
    public 
$searchAgainstEmail 0;

    
//Filter by uName
    
public function filterByUserName($username)
    {
        
$this->filter('u.uName'$username'=');
    }

    public function 
filterByKeywords($keywords)
    {
        
$db Database::connection();
        
$qkeywords $db->quote('%' $keywords '%');
        
$keys UserAttributeKey::getSearchableIndexedList();
        
$emailSearchStr ' OR u.uEmail like '.$qkeywords.' ';
        
$attribsStr '';
        foreach (
$keys as $ak) {
            
$cnt $ak->getController();
            
$attribsStr .= ' OR ' $cnt->searchKeywords($keywords);
        }
        
$this->filter(false'( u.uName like ' $qkeywords $emailSearchStr $attribsStr ')');
    }

    
/**
     * Filters the user list for only users within the provided group.  Accepts an instance of a group object or a string group name.
     *
     * @param Group|string $group
     * @param bool $inGroup
     */
    
public function filterByGroup($group ''$inGroup true)
    {
        if (!
$group instanceof Group) {
            
$group Group::getByName($group);
        }
        
$tbl 'ug_'.$group->getGroupID();
        
$this->addToQuery("left join UserGroups $tbl on {$tbl}.uID = u.uID ");
        if (
$inGroup) {
            
$this->filter(false"{$tbl}.gID=".intval($group->getGroupID()));
        } else {
            
$this->filter(false"{$tbl}.gID is null");
        }
    }

    public function 
excludeUsers($uo)
    {
        if (
is_object($uo)) {
            
$uID $uo->getUserID();
        } else {
            
$uID $uo;
        }
        
$this->filter('u.uID'$uID'!=');
    }

    public function 
filterByGroupID($gID)
    {
        if (!
Core::make('helper/validation/numbers')->integer($gID)) {
            
$gID 0;
        }
        
$tbl 'ug_'.$gID;
        
$this->addToQuery("left join UserGroups $tbl on {$tbl}.uID = u.uID ");
        
$this->filter(false"{$tbl}.gID=".$gID);
    }

    public function 
filterByDateAdded($date$comparison '=')
    {
        
$this->filter('u.uDateAdded'$date$comparison);
    }

    
/**
     * Returns an array of userInfo objects based on current filter settings.
     *
     * @return UserInfo[]
     */
    
public function get($itemsToGet 100$offset 0)
    {
        
$userInfos = array();
        
$this->createQuery();
        
$r parent::get($itemsToGetintval($offset));
        foreach (
$r as $row) {
            
$ui UserInfo::getByID($row['uID']);
            
$userInfos[] = $ui;
        }

        return 
$userInfos;
    }

    
/**
     * Similar to get except it returns an array of userIDs.
     * Much faster than getting a UserInfo object for each result if all you need is the user's id.
     *
     * @return array $userIDs
     */
    
public function getUserIDs($itemsToGet 100$offset 0)
    {
        
$this->createQuery();
        
$userIDs = array();
        
$r parent::get($itemsToGetintval($offset));
        foreach (
$r as $row) {
            
$userIDs[] = $row['uID'];
        }

        return 
$userIDs;
    }

    public function 
getTotal()
    {
        
$this->createQuery();

        return 
parent::getTotal();
    }

    public function 
filterByIsActive($val)
    {
        
$this->showInactiveUsers $val;
        
$this->filter('u.uIsActive'$val);
    }

    
//this was added because calling both getTotal() and get() was duplicating some of the query components
    
protected function createQuery()
    {
        if (!
$this->queryCreated) {
            
$this->setBaseQuery();
            if (!isset(
$this->showInactiveUsers)) {
                
$this->filter('u.uIsActive'1);
            }
            if (!
$this->showInvalidatedUsers) {
                
$this->filter('u.uIsValidated'0'!=');
            }
            
$this->setupAttributeFilters("left join UserSearchIndexAttributes on (UserSearchIndexAttributes.uID = u.uID)");
            
$this->queryCreated 1;
        }
    }

    protected function 
setBaseQuery()
    {
        
$this->setQuery('SELECT DISTINCT u.uID, u.uName FROM Users u ');
    }

    
/* magic method for filtering by page attributes. */
    
public function __call($nm$a)
    {
        if (
substr($nm08) == 'filterBy') {
            
$txt Core::make('helper/text');
            
$attrib $txt->uncamelcase(substr($nm8));
            if (
count($a) == 2) {
                
$this->filterByAttribute($attrib$a[0], $a[1]);
            } else {
                
$this->filterByAttribute($attrib$a[0]);
            }
        }
    }
}
Онлайн: 0
Реклама