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

namespace XF\ControllerPlugin;

use
XF\Mvc\Entity\Entity;

class
Poll extends AbstractPlugin
{
    public function
actionCreate($contentType, Entity $content, array $breadcrumbs = [])
    {
       
/** @var \XF\Repository\Poll $pollRepo */
       
$pollRepo = $this->repository('XF:Poll');
       
$handler = $pollRepo->getPollHandler($contentType);

        if (!
$handler->canCreate($content, $error))
        {
            return
$this->noPermission();
        }

        if (
$this->isPost())
        {
           
$creator = $this->setupPollCreate($contentType, $content);

            if (!
$creator->validate($errors))
            {
                return
$this->error($errors);
            }

           
$creator->save();

            return
$this->redirect($this->getDynamicRedirect());
        }
        else
        {
           
$viewParams = [
               
'createFormUrl' => $handler->getPollLink('create', $content),

               
'breadcrumbs' => $breadcrumbs
           
];
            return
$this->view('XF:Poll\Create', 'poll_create', $viewParams);
        }
    }

   
/**
     * @param $contentType
     * @param Entity $content
     *
     * @return \XF\Service\Poll\Creator
     */
   
public function setupPollCreate($contentType, Entity $content)
    {
       
/** @var \XF\Helper\Poll $pollHelper */
       
$pollHelper = $this->helper('XF:Poll');

       
/** @var \XF\Service\Poll\Creator $creator */
       
$creator = $this->service('XF:Poll\Creator', $contentType, $content);

        return
$pollHelper->configureCreatorFromInput(
           
$creator,
           
$pollHelper->getPollInput($this->request)
        );
    }

    public function
actionEdit($poll, array $breadcrumbs = [])
    {
        if (!(
$poll instanceof \XF\Entity\Poll))
        {
            return
$this->notFound();
        }

       
/** @var \XF\Poll\AbstractHandler $handler */
       
$handler = $poll->Handler;
       
$contentType = $poll->content_type;
       
$content = $poll->Content;

        if (!
$poll->canEdit($error))
        {
            return
$this->noPermission($error);
        }

        if (
$this->isPost())
        {
           
$editor = $this->setupPollEdit($poll, $contentType, $content, $handler);
            if (!
$editor->validate($errors))
            {
                return
$this->error($errors);
            }

           
$editor->save();

            return
$this->redirect($this->getDynamicRedirect());
        }
        else
        {
           
$viewParams = [
               
'poll' => $poll,
               
'breadcrumbs' => $breadcrumbs
           
];
            return
$this->view('XF:Poll\Edit', 'poll_edit', $viewParams);
        }
    }

   
/**
     * @param \XF\Entity\Poll $poll
     * @param string $contentType
     * @param Entity $content
     * @param \XF\Poll\AbstractHandler $handler
     *
     * @return \XF\Service\Poll\Editor
     */
   
protected function setupPollEdit(\XF\Entity\Poll $poll, $contentType, Entity $content, \XF\Poll\AbstractHandler $handler)
    {
       
$pollInput = $this->getPollInput();

       
/** @var \XF\Service\Poll\Editor $editor */
       
$editor = $this->service('XF:Poll\Editor', $poll);

        if (
$poll->canEditDetails())
        {
           
$editor->setQuestion($pollInput['question']);
           
$editor->updateExistingResponses($pollInput['existing_responses']);
        }
       
$editor->addResponses($pollInput['new_responses']);

        if (
$poll->canEditMaxVotes())
        {
           
$editor->setMaxVotes($pollInput['max_votes_type'], $pollInput['max_votes_value']);
        }

        if (
$poll->canChangePollVisibility())
        {
           
$editor->setPublicVotes($pollInput['public_votes']);
        }

        if (
$pollInput['close'])
        {
           
$editor->setCloseDateRelative($pollInput['close_length'], $pollInput['close_units']);
        }
        else if (!
$pollInput['remove_close'])
        {
           
$editor->removeCloseDate();
        }

       
$editor->setOptions([
           
'change_vote' => $pollInput['change_vote'],
           
'view_results_unvoted' => $pollInput['view_results_unvoted']
        ]);

        return
$editor;
    }

    public function
actionDelete($poll, array $breadcrumbs = [])
    {
        if (!(
$poll instanceof \XF\Entity\Poll))
        {
            return
$this->notFound();
        }

        if (!
$poll->canDelete($error))
        {
            return
$this->noPermission($error);
        }

        if (
$this->isPost())
        {
           
$action = $this->filter('poll_action', 'str');

            if (
$action == 'remove')
            {
               
$this->service('XF:Poll\Deleter', $poll)->delete();
            }
            else if (
$action == 'reset')
            {
               
$this->service('XF:Poll\Resetter', $poll)->reset();
            }

            return
$this->redirect($this->getDynamicRedirect());
        }
        else
        {
           
$viewParams = [
               
'poll' => $poll,
               
'breadcrumbs' => $breadcrumbs
           
];
            return
$this->view('XF:Poll\Delete', 'poll_delete', $viewParams);
        }
    }

    public function
actionVote($poll, array $breadcrumbs = [])
    {
        if (!(
$poll instanceof \XF\Entity\Poll))
        {
            return
$this->notFound();
        }

        if (!
$poll->canVote($error))
        {
            return
$this->noPermission($error);
        }

        if (
$this->isPost())
        {
           
$voteResponseIds = $this->filter('responses', 'array-uint');

           
/** @var \XF\Service\Poll\Voter $voter */
           
$voter = $this->service('XF:Poll\Voter', $poll, $voteResponseIds);
            if (!
$voter->validate($errors))
            {
                return
$this->error($errors);
            }

           
$voter->save();

           
$viewParams = [
               
'poll' => $poll,
               
'breadcrumbs' => $breadcrumbs,
               
'simpleDisplay' => $this->filter('simple_display', 'bool')
            ];
            return
$this->view('XF:Poll\Block', 'poll_block', $viewParams);
        }
        else
        {
           
$viewParams = [
               
'poll' => $poll,
               
'breadcrumbs' => $breadcrumbs,
               
'simpleDisplay' => $this->filter('simple_display', 'bool')
            ];
            return
$this->view('XF:Poll\Vote', 'poll_vote', $viewParams);
        }
    }

    public function
actionResults($poll, array $breadcrumbs = [])
    {
        if (!(
$poll instanceof \XF\Entity\Poll))
        {
            return
$this->notFound();
        }

        if (!
$poll->canViewResults($error))
        {
            return
$this->noPermission($error);
        }

       
$responseId = $this->filter('response', 'uint');

        if (
$responseId)
        {
            if (!isset(
$poll->Responses[$responseId]))
            {
                return
$this->notFound();
            }

            if (!
$poll->public_votes)
            {
                return
$this->noPermission();
            }

           
$viewParams = [
               
'poll' => $poll,
               
'response' => $poll->Responses[$responseId],
               
'breadcrumbs' => $breadcrumbs
           
];
            return
$this->view('XF:Poll\Voters', 'poll_voters', $viewParams);
        }
        else
        {
           
$viewParams = [
               
'poll' => $poll,
               
'breadcrumbs' => $breadcrumbs
           
];
            return
$this->view('XF:Poll\Results', 'poll_results', $viewParams);
        }
    }

    public function
getPollInput()
    {
        return
$this->helper('XF:Poll')->getPollInput($this->request);
    }
}