mirror of
https://github.com/openvk/openvk
synced 2024-12-23 17:12:01 +03:00
70 lines
2.4 KiB
PHP
70 lines
2.4 KiB
PHP
|
<?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();
|
||
|
if(is_null($this->user) || $poll->canVote($this->user->identity)) {
|
||
|
$this->template->options = $poll->getOptions();
|
||
|
|
||
|
$this->template->_template = "Poll/Poll.xml";
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
$this->template->voted = $poll->hasVoted($this->user->identity);
|
||
|
$this->template->ended = $poll->hasEnded();
|
||
|
$this->template->results = $poll->getResults($this->user->identity);
|
||
|
|
||
|
$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;
|
||
|
}
|
||
|
}
|