createForm('admin.selection.container.create'); } /** * Return the update form for this object * @param array $data * @return BaseForm */ protected function getUpdateForm($data = []) { if (!is_array($data)) { $data = array(); } return $this->createForm('admin.selection.container.update', 'form', $data); } /** * Hydrate the update form for this object, before passing it to the update template * @param SelectionContainer $object * @return BaseForm */ protected function hydrateObjectForm($object) { $this->hydrateSeoForm($object); $data = array( 'selection_container_id'=> $object->getId(), 'id' => $object->getId(), 'locale' => $object->getLocale(), 'selection_container_code' => $object->getCode(), 'selection_container_chapo' => $object->getChapo(), 'selection_container_title' => $object->getTitle(), 'selection_container_description' => $object->getDescription(), 'selection_container_postscriptum' => $object->getPostscriptum(), 'current_id' => $object->getId(), ); 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 SelectionContainerEvent(); $event->setTitle($formData['title']); $event->setCode($formData['code']); $event->setChapo($formData['chapo']); $event->setDescription($formData['description']); $event->setPostscriptum($formData['postscriptum']); $event->setLocale($this->getCurrentEditionLocale()); return $event; } /** * Creates the update event with the provided form data * @param mixed $formData * @return \Thelia\Core\Event\ActionEvent */ protected function getUpdateEvent($formData) { $selectionContainer = SelectionContainerQuery::create()->findPk($formData['selection_container_id']); $event = new SelectionContainerEvent($selectionContainer); $event->setId($formData['selection_container_id']); $event->setCode($formData['selection_container_code']); $event->setTitle($formData['selection_container_title']); $event->setChapo($formData['selection_container_chapo']); $event->setDescription($formData['selection_container_description']); $event->setPostscriptum($formData['selection_container_postscriptum']); $event->setLocale($this->getCurrentEditionLocale()); return $event; } /** * Creates the delete event with the provided form data * @return \Thelia\Core\Event\ActionEvent */ protected function getDeleteEvent() { $event = new SelectionContainerEvent(); $selectionId = $this->getRequest()->request->get('selection_container_id'); $event->setId($selectionId); return $event; } /** * Return true if the event contains the object, e.g. the action has updated the object in the event. * @param SelectionContainerEvent $event * @return bool */ protected function eventContainsObject($event) { return $event->hasSelection(); } /** * Get the created object from an event. * @param SelectionContainerEvent $event * @return SelectionContainer */ protected function getObjectFromEvent($event) { return $event->getSelectionContainer(); } /** * Load an existing object from the database */ protected function getExistingObject() { $selectionContainer = SelectionContainerQuery::create() ->findPk($this->getRequest()->get('selection_container_id', 0)); if (null !== $selectionContainer) { $selectionContainer->setLocale($this->getCurrentEditionLocale()); } return $selectionContainer; } /** * Returns the object label form the object event (name, title, etc.) * @param SelectionContainer|null $object * @return string */ protected function getObjectLabel($object) { return empty($object) ? '' : $object->getTitle(); } /** * Returns the object ID from the object * @param SelectionContainer|null $object * @return int */ protected function getObjectId($object) { return $object->getId(); } /** * Render the main list template * @param mixed $currentOrder , if any, null otherwise. * @return \Thelia\Core\HttpFoundation\Response */ protected function renderListTemplate($currentOrder) { return $this->render( 'selection-list', ['order' => $currentOrder] ); } /** * Render the edition template * @return \Thelia\Core\HttpFoundation\Response */ protected function renderEditionTemplate() { $selectionContainerId = $this->getRequest()->get('selection_container_id'); $currentTab = $this->getRequest()->get('current_tab'); return $this->render( "container-edit", [ 'selection_container_id' => $selectionContainerId, 'current_tab' => $currentTab ] ); } /** * Must return a RedirectResponse instance * @return RedirectResponse */ protected function redirectToEditionTemplate() { $id = $this->getRequest()->get('selection_container_id'); return new RedirectResponse( URL::getInstance()->absoluteUrl( "/admin/selection/container/update/".$id ) ); } /** * Must return a RedirectResponse instance * @return \Symfony\Component\HttpFoundation\RedirectResponse */ protected function redirectToListTemplate() { return new RedirectResponse( URL::getInstance()->absoluteUrl("/admin/selection") ); } /** * Online status toggle */ public function setToggleVisibilityAction() { // Check current user authorization if (null !== $response = $this->checkAuth($this->resourceCode, array(), AccessManager::UPDATE)) { return $response; } $event = new SelectionContainerEvent($this->getExistingObject()); try { $this->dispatch(SelectionEvents::SELECTION_CONTAINER_TOGGLE_VISIBILITY, $event); } catch (\Exception $ex) { // Any error return $this->errorPage($ex); } // Ajax response -> no action return $this->nullResponse(); } public function createSelectionContainerAction() { $form = new SelectionCreateForm($this->getRequest()); try { $validForm = $this->validateForm($form); $data = $validForm->getData(); $title = $data['title']; $chapo = $data['chapo']; $description = $data['description']; $postscriptum = $data['postscriptum']; $date = new \DateTime(); $selectionContainer = new SelectionContainer(); $lastSelection = SelectionContainerQuery::create()->orderByPosition(Criteria::DESC)->findOne(); if (null !== $lastSelection) { $position = $lastSelection->getPosition() + 1; } else { $position = 1; } $selectionContainer ->setCreatedAt($date->format('Y-m-d H:i:s')) ->setUpdatedAt($date->format('Y-m-d H:i:s')) ->setVisible(1) ->setPosition($position) ->setLocale($this->getCurrentEditionLocale()) ->setTitle($title) ->setChapo($chapo) ->setDescription($description) ->setPostscriptum($postscriptum); $selectionContainer->save(); return $this->generateRedirect("/admin/selection"); } catch (FormValidationException $ex) { // Form cannot be validated $error_msg = $this->createStandardFormValidationErrorMessage($ex); } catch (\Exception $ex) { // Any other error $error_msg = $ex->getMessage(); } if (false !== $error_msg) { $this->setupFormErrorContext( $this->getTranslator()->trans("%obj creation", ['%obj' => $this->objectName]), $error_msg, $form, $ex ); // At this point, the form has error, and should be redisplayed. return $this->renderList(); } } /** * Show the default template : selectionList * display selections inide the container * @param $selectionContainerId * @return \Thelia\Core\HttpFoundation\Response */ public function viewAction($selectionContainerId) { $this->getRequest()->request->set("selectionContainerId", $selectionContainerId); $selectionContainer = $this->getExistingObject(); if (!is_null($selectionContainer)) { $changeForm = $this->hydrateObjectForm($selectionContainer); $this->getParserContext()->addForm($changeForm); } return $this->render("container-view", array( 'selected_container_id' => $selectionContainerId )); } /** * @param $selectionContainerId * @return \Thelia\Core\HttpFoundation\Response */ public function updateContainerAction($selectionContainerId) { $this->getRequest()->request->set("selection_container_id", $selectionContainerId); return parent::updateAction(); } public function processUpdateSeoAction() { $selectionContainerId = $this->getRequest()->get('current_id'); $this->getRequest()->request->set("selection_container_id", $selectionContainerId); return parent::processUpdateSeoAction(); } }