Seditio Source
Root |
./othercms/xenForo 2.2.8/src/XF/Service/Poll/Voter.php
<?php

namespace XF\Service\Poll;

use
XF\Entity\Poll;

use function
count;

class
Voter extends \XF\Service\AbstractService
{
    use \
XF\Service\ValidateAndSavableTrait;

   
/** @var Poll */
   
protected $poll;

    protected
$votes = [];

    public function
__construct(\XF\App $app, Poll $poll, array $votes = [])
    {
       
parent::__construct($app);
       
$this->poll = $poll;
       
$this->setVotes($votes);
    }

    public function
getPoll()
    {
        return
$this->poll;
    }

    public function
setVotes(array $votes)
    {
       
$responses = $this->poll->responses;
        foreach (
$votes AS $k => $responseId)
        {
            if (!isset(
$responses[$responseId]))
            {
                unset(
$votes[$k]);
            }
        }

       
$this->votes = array_values($votes);
    }

    protected function
_validate()
    {
       
$totalVotes = count($this->votes);
       
$maxVotes = $this->poll->max_votes;
       
$errors = [];

        if (
$maxVotes && $totalVotes > $maxVotes)
        {
           
$errors[] = \XF::phrase('you_may_select_up_to_x_choices', ['max' => $maxVotes]);
        }
        else if (!
$totalVotes)
        {
           
$errors[] = \XF::phrase('please_vote_for_at_least_one_option');
        }

        return
$errors;
    }

    protected function
_save()
    {
        return
$this->repository('XF:Poll')->voteOnPoll($this->poll, $this->votes);
    }
}