2022-10-11 19:04:43 +03:00
|
|
|
<?php declare(strict_types=1);
|
|
|
|
namespace openvk\Web\Presenters;
|
|
|
|
use openvk\Web\Models\Entities\Poll;
|
|
|
|
use openvk\Web\Models\Repositories\Polls;
|
|
|
|
|
|
|
|
final class PollPresenter extends OpenVKPresenter
|
|
|
|
{
|
|
|
|
private $polls;
|
|
|
|
|
|
|
|
function __construct(Polls $polls)
|
|
|
|
{
|
|
|
|
$this->polls = $polls;
|
|
|
|
|
|
|
|
parent::__construct();
|
|
|
|
}
|
|
|
|
|
|
|
|
function renderView(int $id): void
|
|
|
|
{
|
|
|
|
$poll = $this->polls->get($id);
|
|
|
|
if(!$poll)
|
|
|
|
$this->notFound();
|
|
|
|
|
|
|
|
$this->template->id = $poll->getId();
|
|
|
|
$this->template->title = $poll->getTitle();
|
|
|
|
$this->template->isAnon = $poll->isAnonymous();
|
|
|
|
$this->template->multiple = $poll->isMultipleChoice();
|
|
|
|
$this->template->unlocked = $poll->isRevotable();
|
|
|
|
$this->template->until = $poll->endsAt();
|
|
|
|
$this->template->votes = $poll->getVoterCount();
|
|
|
|
$this->template->meta = $poll->getMetaDescription();
|
2022-10-11 21:26:08 +03:00
|
|
|
$this->template->ended = $ended = $poll->hasEnded();
|
|
|
|
if((is_null($this->user) || $poll->canVote($this->user->identity)) && !$ended) {
|
2022-10-11 19:04:43 +03:00
|
|
|
$this->template->options = $poll->getOptions();
|
|
|
|
|
|
|
|
$this->template->_template = "Poll/Poll.xml";
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2022-10-11 21:26:08 +03:00
|
|
|
if(is_null($this->user)) {
|
|
|
|
$this->template->voted = false;
|
|
|
|
$this->template->results = $poll->getResults();
|
|
|
|
} else {
|
|
|
|
$this->template->voted = $poll->hasVoted($this->user->identity);
|
|
|
|
$this->template->results = $poll->getResults($this->user->identity);
|
|
|
|
}
|
2022-10-11 19:04:43 +03:00
|
|
|
|
|
|
|
$this->template->_template = "Poll/PollResults.xml";
|
|
|
|
}
|
|
|
|
|
|
|
|
function renderVoters(int $pollId): void
|
|
|
|
{
|
|
|
|
$poll = $this->polls->get($pollId);
|
|
|
|
if(!$poll)
|
|
|
|
$this->notFound();
|
|
|
|
|
|
|
|
if($poll->isAnonymous())
|
|
|
|
$this->flashFail("err", tr("forbidden"), tr("poll_err_anonymous"));
|
|
|
|
|
|
|
|
$options = $poll->getOptions();
|
|
|
|
$option = (int) base_convert($this->queryParam("option"), 32, 10);
|
|
|
|
if(!in_array($option, array_keys($options)))
|
|
|
|
$this->notFound();
|
|
|
|
|
|
|
|
$page = (int) ($this->queryParam("p") ?? 1);
|
|
|
|
$voters = $poll->getVoters($option, $page);
|
|
|
|
|
|
|
|
$this->template->pollId = $pollId;
|
|
|
|
$this->template->options = $options;
|
|
|
|
$this->template->option = [$option, $options[$option]];
|
|
|
|
$this->template->tabs = $options;
|
|
|
|
$this->template->iterator = $voters;
|
|
|
|
$this->template->count = $poll->getVoterCount($option);
|
|
|
|
$this->template->page = $page;
|
|
|
|
}
|
|
|
|
}
|