<?php
class SortMem_ControllerPublic_Member extends XFCP_SortMem_ControllerPublic_Member
{
public function actionIndex()
{
$options = Xenforo_Application::get('options');
$visitor = XenForo_Visitor::getInstance();
$userModel = $this->_getUserModel();
$usergroups = XenForo_Model::create('SortMem_Model_UserGroups');
$sortables = Xenforo_Application::getSimpleCacheData('sort_mem_sortables');
$userId = $this->_input->filterSingle('user_id', XenForo_Input::UINT);
$ordermem = $this->_request->getParam('sort');
$directmem = $this->_request->getParam('dir');
$userfilter = array();
$userfilter = $this->_request->getParam('userfilter');
$defaultOrder = $options->sort_default_order;
$defaultDir = $options->sort_default_direct;
$canUseFilter = $visitor->hasPermission('general', 'CanFilterUsersSortMem');
if ($userId)
{
return $this->responseReroute('XenForo_ControllerPublic_Member','member');
}
else if ($this->_input->inRequest('user_id'))
{
return $this->responseError(new XenForo_Phrase('posted_by_guest_no_profile'));
}
$username = $this->_input->filterSingle('username', XenForo_Input::STRING);
if ($username !== '')
{
$user = $userModel->getUserByName($username);
if ($user)
{
return $this->responseRedirect(
XenForo_ControllerResponse_Redirect::SUCCESS,
XenForo_Link::buildPublicLink('members', $user)
);
}
else
{
$userNotFound = true;
}
}
else
{
$userNotFound = false;
}
$page = $this->_input->filterSingle('page', XenForo_Input::UINT);
$usersPerPage = XenForo_Application::get('options')->membersPerPage;
$criteria = array(
'user_state' => 'valid',
'is_banned' => 0
);
$canUseSortCriteria = 0;
foreach ($sortables AS &$sortcriteria){
$sortcriteria['sort_phrase'] = new XenForo_Phrase($sortcriteria['sort_phrase']);
$sortcriteria['show_phrase'] = new XenForo_Phrase($sortcriteria['show_phrase']);
if(($ordermem == $sortcriteria['title']) && $sortcriteria['enable_sort'])
$canUseSortCriteria = 1;
$sortcriteria['column'] = explode('.', $sortcriteria['sort_column']);
}
if(!$canUseSortCriteria)
$ordermem = '';
if (($visitor->get('is_admin') && $options->sort_view_admin) OR ($visitor->get('is_moderator') && $options->sort_view_mod))
{
$groups = ($usergroups);
if($userfilter)
$groupscrit = $userfilter;
else
$groupscrit = '';
}
else
{
if($options->sort_filter_banned == 1)
{
$criteria['is_banned'] = 1;
}
if($options->SortMem_usergroups_user && $options->SortMem_usergroups)
$groupschoose = array_intersect($options->SortMem_usergroups_user,$options->SortMem_usergroups);
else
$groupschoose = $options->SortMem_usergroups_user;
if($groupschoose)
$groups = ($usergroups->get_user_groups($userfilter,$groupschoose));
else
$groups = array();
if($userfilter && $canUseFilter)
$groupscrit = array_intersect($userfilter,$options->SortMem_usergroups_user);
else
$groupscrit = $options->SortMem_usergroups;
if (!$groupscrit)
$groupscrit = $options->SortMem_usergroups;
if($options->sort_filter_admins == 1)
{
$criteria['is_admin'] = 0;
}
if($options->sort_filter_mods == 1)
{
$criteria['is_moderator'] = 0;
}
}
$criteria['user_group_id'] = $groupscrit;
$criteria['secondary_group_ids'] = $groupscrit;
if(!$ordermem && !$directmem){
foreach ($sortables AS &$sortcriteria){
if ($sortcriteria['is_default']){
$ordermem = $sortcriteria['title'];
$directmem = $sortcriteria['default_order'];
}
}
}
elseif(!$directmem){
foreach ($sortables AS &$sortcriteria){
if ($sortcriteria['title'] == $ordermem){
$directmem = $sortcriteria['default_order'];
}
}
}
// users for the member list
$users = $userModel->getUsersSM($criteria, array(
'join' => XenForo_Model_User::FETCH_USER_FULL,
'perPage' => $usersPerPage,
'page' => $page,
'order' => $ordermem,
'direction' => $directmem
));
// most recent registrations
$latestUsers = $userModel->getLatestUsersSM($criteria, array('limit' => $options->sort_mlu));
// most active users (highest post count)
$activeUsers = $userModel->getMostActiveUsersSM($criteria, array('limit' => $options->sort_mau));
$pageNavParams['sort'] = $ordermem;
$pageNavParams['dir'] = $directmem;
$pageNavParams['userfilter'] = $userfilter;
$viewParams = array(
'users' => $users,
'totalUsers' => $userModel->countUsersSM($criteria),
'page' => $page,
'usersPerPage' => $usersPerPage,
'ordermem' => $ordermem,
'directmem' => $directmem,
'pageNavParams' => $pageNavParams,
'latestUsers' => $latestUsers,
'activeUsers' => $activeUsers,
'userNotFound' => $userNotFound,
'groups' => $groups,
'userfilter' => $userfilter,
'canUseFilter' => $canUseFilter,
'sortables' => $sortables
);
return $this->responseView('XenForo_ViewPublic_Member_List', 'member_list', $viewParams);
}
protected function _getUserModel()
{
return $this->getModelFromCache('XenForo_Model_User');
}
}