Файл: 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 === 0 || (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(23, 59, 59);
$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(0 => true, 1 => true),
'gender' => array('male' => true, 'female' => true, 'unspecified' => true),
'no_secondary_group_ids' => 0,
'message_count_end' => -1,
'trophy_points_end' => -1
);
}
}