View file upload/src/addons/xenMade/ACPE/Admin/Controller/WhoVoted.php

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);
    }
}