241 lines
5.9 KiB
PHP
241 lines
5.9 KiB
PHP
<?php
|
|
/**
|
|
* This class has been generated by TheliaStudio
|
|
* For more information, see https://github.com/thelia-modules/TheliaStudio
|
|
*/
|
|
|
|
namespace Contest\Controller\Base;
|
|
|
|
use Symfony\Component\HttpFoundation\RedirectResponse;
|
|
use Thelia\Controller\Admin\AbstractCrudController;
|
|
use Thelia\Core\Security\Resource\AdminResources;
|
|
use Thelia\Tools\URL;
|
|
use Contest\Event\QuestionEvent;
|
|
use Contest\Event\QuestionEvents;
|
|
use Contest\Model\QuestionQuery;
|
|
use Thelia\Core\Event\ToggleVisibilityEvent;
|
|
|
|
/**
|
|
* Class QuestionController
|
|
* @package Contest\Controller\Base
|
|
* @author TheliaStudio
|
|
*/
|
|
class QuestionController extends AbstractCrudController
|
|
{
|
|
public function __construct()
|
|
{
|
|
parent::__construct(
|
|
"question",
|
|
"id",
|
|
"order",
|
|
AdminResources::MODULE,
|
|
QuestionEvents::CREATE,
|
|
QuestionEvents::UPDATE,
|
|
QuestionEvents::DELETE,
|
|
QuestionEvents::TOGGLE_VISIBILITY,
|
|
null,
|
|
"Contest"
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Return the creation form for this object
|
|
*/
|
|
protected function getCreationForm()
|
|
{
|
|
return $this->createForm("question.create");
|
|
}
|
|
|
|
/**
|
|
* Return the update form for this object
|
|
*/
|
|
protected function getUpdateForm($data = array())
|
|
{
|
|
if (!is_array($data)) {
|
|
$data = array();
|
|
}
|
|
|
|
return $this->createForm("question.update", "form", $data);
|
|
}
|
|
|
|
/**
|
|
* Hydrate the update form for this object, before passing it to the update template
|
|
*
|
|
* @param mixed $object
|
|
*/
|
|
protected function hydrateObjectForm($object)
|
|
{
|
|
$data = array(
|
|
"id" => $object->getId(),
|
|
"visible" => (bool) $object->getVisible(),
|
|
"title" => $object->getTitle(),
|
|
"description" => $object->getDescription(),
|
|
"game_id" => $object->getGameId(),
|
|
);
|
|
|
|
return $this->getUpdateForm($data);
|
|
}
|
|
|
|
/**
|
|
* Creates the creation event with the provided form data
|
|
*
|
|
* @param mixed $formData
|
|
* @return \Thelia\Core\Event\ActionEvent
|
|
*/
|
|
protected function getCreationEvent($formData)
|
|
{
|
|
$event = new QuestionEvent();
|
|
|
|
$event->setVisible($formData["visible"]);
|
|
$event->setTitle($formData["title"]);
|
|
$event->setDescription($formData["description"]);
|
|
$event->setGameId($formData["game_id"]);
|
|
|
|
return $event;
|
|
}
|
|
|
|
/**
|
|
* Creates the update event with the provided form data
|
|
*
|
|
* @param mixed $formData
|
|
* @return \Thelia\Core\Event\ActionEvent
|
|
*/
|
|
protected function getUpdateEvent($formData)
|
|
{
|
|
$event = new QuestionEvent();
|
|
|
|
$event->setId($formData["id"]);
|
|
$event->setVisible($formData["visible"]);
|
|
$event->setTitle($formData["title"]);
|
|
$event->setDescription($formData["description"]);
|
|
$event->setGameId($formData["game_id"]);
|
|
|
|
return $event;
|
|
}
|
|
|
|
/**
|
|
* Creates the delete event with the provided form data
|
|
*/
|
|
protected function getDeleteEvent()
|
|
{
|
|
$event = new QuestionEvent();
|
|
|
|
$event->setId($this->getRequest()->request->get("question_id"));
|
|
|
|
return $event;
|
|
}
|
|
|
|
/**
|
|
* Return true if the event contains the object, e.g. the action has updated the object in the event.
|
|
*
|
|
* @param mixed $event
|
|
*/
|
|
protected function eventContainsObject($event)
|
|
{
|
|
return null !== $this->getObjectFromEvent($event);
|
|
}
|
|
|
|
/**
|
|
* Get the created object from an event.
|
|
*
|
|
* @param mixed $event
|
|
*/
|
|
protected function getObjectFromEvent($event)
|
|
{
|
|
return $event->getQuestion();
|
|
}
|
|
|
|
/**
|
|
* Load an existing object from the database
|
|
*/
|
|
protected function getExistingObject()
|
|
{
|
|
return QuestionQuery::create()
|
|
->findPk($this->getRequest()->query->get("question_id"))
|
|
;
|
|
}
|
|
|
|
/**
|
|
* Returns the object label form the object event (name, title, etc.)
|
|
*
|
|
* @param mixed $object
|
|
*/
|
|
protected function getObjectLabel($object)
|
|
{
|
|
return $object->getTitle();
|
|
}
|
|
|
|
/**
|
|
* Returns the object ID from the object
|
|
*
|
|
* @param mixed $object
|
|
*/
|
|
protected function getObjectId($object)
|
|
{
|
|
return $object->getId();
|
|
}
|
|
|
|
/**
|
|
* Render the main list template
|
|
*
|
|
* @param mixed $currentOrder , if any, null otherwise.
|
|
*/
|
|
protected function renderListTemplate($currentOrder)
|
|
{
|
|
$this->getParser()
|
|
->assign("order", $currentOrder)
|
|
;
|
|
|
|
return $this->render("questions");
|
|
}
|
|
|
|
/**
|
|
* Render the edition template
|
|
*/
|
|
protected function renderEditionTemplate()
|
|
{
|
|
$this->getParserContext()
|
|
->set(
|
|
"question_id",
|
|
$this->getRequest()->query->get("question_id")
|
|
)
|
|
;
|
|
|
|
return $this->render("question-edit");
|
|
}
|
|
|
|
/**
|
|
* Must return a RedirectResponse instance
|
|
* @return \Symfony\Component\HttpFoundation\RedirectResponse
|
|
*/
|
|
protected function redirectToEditionTemplate()
|
|
{
|
|
$id = $this->getRequest()->query->get("question_id");
|
|
|
|
return new RedirectResponse(
|
|
URL::getInstance()->absoluteUrl(
|
|
"/admin/module/Contest/question/edit",
|
|
[
|
|
"question_id" => $id,
|
|
]
|
|
)
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Must return a RedirectResponse instance
|
|
* @return \Symfony\Component\HttpFoundation\RedirectResponse
|
|
*/
|
|
protected function redirectToListTemplate()
|
|
{
|
|
return new RedirectResponse(
|
|
URL::getInstance()->absoluteUrl("/admin/module/Contest/question")
|
|
);
|
|
}
|
|
|
|
protected function createToggleVisibilityEvent()
|
|
{
|
|
return new ToggleVisibilityEvent($this->getRequest()->query->get("question_id"));
|
|
}
|
|
}
|