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

namespace XF\Service\Poll;

use
XF\Mvc\Entity\Entity;
use
XF\Entity\Poll;

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

    protected
$contentType;

   
/** @var Entity */
   
protected $content;

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

   
/** @var \XF\Poll\AbstractHandler */
   
protected $handler;

   
/** @var \XF\Poll\ResponseEditor */
   
protected $responseEditor;

    protected
$maxResponses = 0;

    public function
__construct(\XF\App $app, Poll $poll)
    {
       
parent::__construct($app);
       
$this->poll = $poll;
       
$this->contentType = $poll->content_type;
       
$this->content = $poll->Content;
       
$this->handler = $poll->Handler;
       
$this->responseEditor = $poll->getResponseEditor();

       
$this->maxResponses = $this->app->options()->pollMaximumResponses;
    }

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

    public function
getContent()
    {
        return
$this->content;
    }

    public function
setMaxResponses($max)
    {
       
$this->maxResponses = $max;
    }

    public function
getMaxResponses()
    {
        return
$this->maxResponses;
    }

    public function
setQuestion($question)
    {
       
$this->poll->question = $question;
    }

    public function
updateExistingResponses(array $existingResponses)
    {
       
$this->responseEditor->updateResponses($existingResponses);
    }

    public function
addResponses(array $responses)
    {
       
$this->responseEditor->addResponses($responses);
    }

    public function
setMaxVotes($type, $value = null)
    {
       
$this->poll->setMaxVotes($type, $value);
    }

    public function
setCloseDateRelative($value, $unit)
    {
       
$this->poll->setCloseDateRelative($value, $unit);
    }

    public function
removeCloseDate()
    {
       
$this->poll->close_date = 0;
    }

    public function
setClose($close, $value, $unit)
    {
        if (!
$close)
        {
           
$this->poll->close_date = 0;
        }
        else
        {
            if (!
$value)
            {
                return;
            }

           
$this->poll->close_date = min(
               
pow(2,32) - 1, strtotime("+$value $unit")
            );
        }
    }

    public function
setPublicVotes($public)
    {
       
$this->poll->public_votes = $public;
    }

    public function
setOptions(array $options)
    {
       
$this->poll->bulkSet($options);
    }

    protected function
_validate()
    {
       
$this->poll->preSave();

       
$errors = $this->poll->getErrors();

       
$responseError = $this->responseEditor->getResponseCountErrorMessage($this->maxResponses);
        if (
$responseError)
        {
           
$errors['responses'] = $responseError;
        }

        return
$errors;
    }

    protected function
_save()
    {
       
$poll = $this->poll;

       
$poll->save();
       
$this->responseEditor->saveChanges();

        if (
$this->content->User && $this->content->User->user_id != \XF::visitor()->user_id)
        {
           
$this->app->logger()->logModeratorAction($this->contentType, $this->content, 'poll_edit');
        }

        return
$poll;
    }
}