. */ /* */ /*************************************************************************************/ namespace Thelia\Controller; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\DependencyInjection\ContainerAware; use Thelia\Core\Security\SecurityContext; use Thelia\Tools\URL; use Thelia\Tools\Redirect; use Thelia\Core\Template\ParserContext; use Thelia\Core\Event\ActionEvent; use Symfony\Component\EventDispatcher\EventDispatcher; use Thelia\Core\Factory\ActionEventFactory; use Thelia\Form\BaseForm; use Thelia\Form\Exception\FormValidationException; use Symfony\Component\EventDispatcher\Event; /** * * The defaut administration controller. Basically, display the login form if * user is not yet logged in, or back-office home page if the user is logged in. * * @author Franck Allimant * @author Manuel Raynaud */ class BaseController extends ContainerAware { /** * Return an empty response (after an ajax request, for example) */ protected function nullResponse() { return new Response(); } /** * Dispatch a Thelia event * * @param string $eventName a TheliaEvent name, as defined in TheliaEvents class * @param Event $event the event */ protected function dispatch($eventName, Event $event = null) { $this->getDispatcher()->dispatch($eventName, $event); } /** * Return the event dispatcher, * * @return \Symfony\Component\EventDispatcher\EventDispatcher */ public function getDispatcher() { return $this->container->get('event_dispatcher'); } /** * Return the parser context, * * @return ParserContext */ protected function getParserContext() { return $this->container->get('thelia.parser.context'); } /** * Return the security context, by default in admin mode. * * @return \Thelia\Core\Security\SecurityContext */ protected function getSecurityContext() { return $this->container->get('thelia.securityContext'); } /** * @return \Symfony\Component\HttpFoundation\Request */ protected function getRequest() { return $this->container->get('request'); } /** * Returns the session from the current request * * @return \Symfony\Component\HttpFoundation\Session\SessionInterface */ protected function getSession() { $request = $this->getRequest(); return $request->getSession(); } /** * Validate a BaseForm * * @param BaseForm $aBaseForm the form * @param string $expectedMethod the expected method, POST or GET, or null for any of them * @throws FormValidationException is the form contains error, or the method is not the right one * @return \Symfony\Component\Form\Form Form the symfony form object */ protected function validateForm(BaseForm $aBaseForm, $expectedMethod = null) { $form = $aBaseForm->getForm(); if ($expectedMethod == null || $aBaseForm->getRequest()->isMethod($expectedMethod)) { $form->bind($aBaseForm->getRequest()); if ($form->isValid()) { return $form; } else { throw new FormValidationException("Missing or invalid data"); } } else { throw new FormValidationException(sprintf("Wrong form method, %s expected.", $expectedMethod)); } } /** * * redirect request to specify url * @param string $url */ public function redirect($url) { Redirect::exec($url); } /** * If success_url param is present in request, follow this link. */ protected function redirectSuccess() { if (null !== $url = $this->getRequest()->get("success_url")) { $this->redirect($url); } } }