File size: 2.51Kb
<?php
namespace xenMade\ACPE\Admin\Controller;
use XF\Mvc\ParameterBag;
class WhoVoted extends \XF\Admin\Controller\AbstractController
{
public function actionIndex()
{
$page = $this->filterPage();
$perPage = 10;
$finder = $this->finder('XF:Thread');
$finder->with('Poll');
$finder->limitByPage($page, $perPage);
$finder->where('discussion_state', '=', 'visible');
$finder->where('discussion_type', '=', 'poll');
$finder->order('post_date', 'DESC');
$viewParams = array(
'threads' => $finder->fetch(),
'total' => $finder->total(),
'page' => $page,
'perPage' => $perPage,
);
return $this->view('xenMade:ACPE\WhoVoted\List', 'acpe_who_voted_list', $viewParams);
}
public function actionView(ParameterBag $params)
{
/** @var \XF\Entity\Poll $post */
$poll = $this->em()->find('XF:Poll', $params->poll_id);
if (!$poll)
{
throw $this->exception($this->notFound(\XF::phrase('acpe_requested_poll_not_found')));
}
$responses = $this->finder('XF:PollResponse')
->where('poll_id', $poll->poll_id)
->order('poll_response_id');
$users = [];
$answers = [];
foreach ($responses->fetch() AS $response)
{
$users = array_merge($users, array_keys($response->voters));
}
if(!empty($users))
{
/** @var \XF\Entity\Poll $post */
$users = $this->em()->findByIds('XF:User', $users);
}
foreach ($responses->fetch() AS $response)
{
$voters = [];
if($response->voters)
{
foreach (array_keys($response->voters) as $voter)
{
if(!empty($users[$voter]))
{
$voters[] = $users[$voter];
}
}
}
$answers[$response->poll_response_id] = [
'response' => $response->response,
'response_vote_count' => $response->response_vote_count,
'voters' => $voters
];
}
unset($users);
$viewParams = [
'poll' => $poll,
'answers' => $answers,
];
return $this->view('xenMade:ACPE\WhoVoted\View', 'acpe_who_voted_view', $viewParams);
}
}