Вход Регистрация
Файл: library/XenForo/ControllerHelper/UserCriteria.php
Строк: 135
<?php

class XenForo_ControllerHelper_UserCriteria extends XenForo_ControllerHelper_Abstract
{
    public function 
filterUserSearchCriteria(array $criteria)
    {
        foreach (
$criteria AS $key => $value)
        {
            if (
$value === '')
            {
                unset(
$criteria[$key]);
            }
            else
            {
                switch (
$key)
                {
                    case 
'user_group_id':
                    case 
'message_count_start':
                    case 
'trophy_points_start':
                        if (
$value === '0' || $value === || (is_array($value) && in_array(0$value)))
                        {
                            unset(
$criteria[$key]);
                        }

                    case 
'message_count_end':
                    case 
'trophy_points_end':
                        if (
$value === '-1' || $value === -1)
                        {
                            unset(
$criteria[$key]);
                        }
                        break;

                    case 
'register_date_start':
                    case 
'register_date_end':
                    case 
'last_activity_start':
                    case 
'last_activity_end':
                        if (!
preg_match('/^d{4}-d{1,2}-d{1,2}$/'strval($value)))
                        {
                            unset(
$criteria[$key]);
                        }
                        break;
                }
            }
        }

        if (!empty(
$criteria['custom']) && is_array($criteria['custom']))
        {
            foreach (
$criteria['custom'] AS $key => &$custom)
            {
                if (
is_array($custom))
                {
                    foreach (
$custom AS $subKey => &$subValue)
                    {
                        
$subValue strval($subValue);
                        if (
$subValue === '')
                        {
                            unset(
$custom[$subKey]);
                        }
                    }
                    if (!
$custom)
                    {
                        unset(
$criteria['custom'][$key]);
                    }
                }
                else
                {
                    
$custom strval($custom);
                    if (
$custom === '')
                    {
                        unset(
$criteria['custom'][$key]);
                    }
                }

            }
        }
        if (empty(
$criteria['custom']))
        {
            unset(
$criteria['custom']);
        }

        if (!empty(
$criteria['custom_exact']) && is_array($criteria['custom_exact']))
        {
            
$criteria['custom_exact'] = array_map('intval'$criteria['custom_exact']);
        }

        if (isset(
$criteria['user_state']) && is_array($criteria['user_state']) && count($criteria['user_state']) == 5)
        {
            
// all types selected, no filtering
            
unset($criteria['user_state']);
        }
        if (isset(
$criteria['is_banned']) && is_array($criteria['is_banned']) && count($criteria['is_banned']) == 2)
        {
            
// both options selected, no filtering
            
unset($criteria['is_banned']);
        }
        if (isset(
$criteria['gender']) && is_array($criteria['gender']))
        {
            if (
count($criteria['gender']) == 3)
            {
                unset(
$criteria['gender']);
            }
            else
            {
                
$unspecifiedKey array_search('unspecified'$criteria['gender']);
                if (
$unspecifiedKey !== false)
                {
                    unset(
$criteria['gender'][$unspecifiedKey]);
                    
$criteria['gender'][] = '';
                }
            }
        }

        if (!empty(
$criteria['no_secondary_group_ids']))
        {
            unset(
$criteria['secondary_group_ids'], $criteria['not_secondary_group_ids']);
        }
        else
        {
            unset(
$criteria['no_secondary_group_ids']);
        }

        return 
$criteria;
    }

    public function 
prepareUserSearchCriteria(array $criteria)
    {
        if (isset(
$criteria['is_banned']) && is_array($criteria['is_banned']))
        {
            
$criteria['is_banned'] = reset($criteria['is_banned']);
        }

        foreach (array(
'register_date''last_activity') AS $field)
        {
            if (!empty(
$criteria["{$field}_start"]))
            {
                
$date = new DateTime($criteria["{$field}_start"], XenForo_Locale::getDefaultTimeZone());
                
$criteria["{$field}_start"]= $date->format('U');
            }

            if (!empty(
$criteria["{$field}_end"]))
            {
                
$date = new DateTime($criteria["{$field}_end"], XenForo_Locale::getDefaultTimeZone());
                
$date->setTime(235959);
                
$criteria["{$field}_end"] = $date->format('U');
            }
        }

        foreach (array(
'message_count' => 0'trophy_points' => 0'register_date' => 1'last_activity' => 1) AS $field => $upperMin)
        {
            
$lower null;
            
$upper null;

            if (!empty(
$criteria["{$field}_start"]) && intval($criteria["{$field}_start"]))
            {
                
$lower intval($criteria["{$field}_start"]);
            }

            if (isset(
$criteria["{$field}_end"]) && intval($criteria["{$field}_end"]) >= $upperMin)
            {
                
$upper intval($criteria["{$field}_end"]);
            }

            unset(
$criteria["{$field}_start"], $criteria["{$field}_end"]);

            if (
$lower !== null && $upper !== null)
            {
                
$criteria[$field] = array('>=<'$lower$upper);
            }
            else if (
$lower !== null)
            {
                
$criteria[$field] = array('>='$lower);
            }
            else if (
$upper !== null)
            {
                
$criteria[$field] = array('<='$upper);
            }
        }

        foreach (array(
'username''username2''email') AS $field)
        {
            if (isset(
$criteria[$field]) && is_string($criteria[$field]))
            {
                
$criteria[$field] = trim($criteria[$field]);
            }
        }

        if (isset(
$criteria['custom']))
        {
            if (!empty(
$criteria['custom']) && is_array($criteria['custom']))
            {
                
$criteria['customFields'] = $criteria['custom'];
                if (!empty(
$criteria['custom_exact']) && is_array($criteria['custom_exact']))
                {
                    
$criteria['customFieldsExact'] = $criteria['custom_exact'];
                }
            }

            unset(
$criteria['custom'], $criteria['custom_exact']);
        }

        return 
$criteria;
    }

    public function 
getDataForUserSearchForm()
    {
        
/** @var $userGroupModel XenForo_Model_UserGroup */
        
$userGroupModel XenForo_Model::create('XenForo_Model_UserGroup');

        
/** @var $fieldModel XenForo_Model_UserField */
        
$fieldModel XenForo_Model::create('XenForo_Model_UserField');

        return array(
            
'userGroups' => $userGroupModel->getAllUserGroupTitles(),
            
'customFields' => $fieldModel->prepareUserFields($fieldModel->getUserFields(), true)
        );
    }

    public function 
getDefaultUserSearchCriteria()
    {
        return array(
            
'user_state' => array(
                
'valid' => true,
                
'email_confirm' => true,
                
'email_confirm_edit' => true,
                
'email_bounce' => true,
                
'moderated' => true
            
),
            
'is_banned' => array(=> true=> true),
            
'gender' => array('male' => true'female' => true'unspecified' => true),
            
'no_secondary_group_ids' => 0,
            
'message_count_end' => -1,
            
'trophy_points_end' => -1
        
);
    }
}
Онлайн: 1
Реклама