/** * Edit Document * * @return \Zend\View\Model\ViewModel|array */ public function editAction() { $documentId = $this->getRouteMatch()->getParam('id'); $document = DocumentModel::fromId($documentId); if (empty($document)) { $this->flashMessenger()->addErrorMessage('Document does not exists!'); return $this->redirect()->toRoute('content'); } $documentForm = new Form\Document(); $documentForm->init($this->url()->fromRoute('content/document/edit', array('id' => $documentId))); $hasError = false; $documentTypeId = $document->getDocumentTypeId(); $oldUrlKey = $document->getUrlKey(); if ($this->getRequest()->isPost()) { $documentVars = $this->getRequest()->getPost()->toArray(); $document->setName(empty($documentVars['document-name']) ? $document->getName() : $documentVars['document-name']); $document->setStatus(empty($documentVars['document-status']) ? DocumentModel::STATUS_DISABLE : DocumentModel::STATUS_ENABLE); $document->showInNav(empty($documentVars['document-show_in_nav']) ? false : $documentVars['document-show_in_nav']); $document->canBeCached(empty($documentVars['document-can_be_cached']) ? false : $documentVars['document-can_be_cached']); $document->setLayoutId(empty($documentVars['document-layout']) ? false : $documentVars['document-layout']); $document->setViewId(empty($documentVars['document-view']) ? $document->getViewId() : $documentVars['document-view']); $document->setUrlKey(empty($documentVars['document-url_key']) ? '' : $documentVars['document-url_key']); $document->setLocale(empty($documentVars['document-locale']) ? null : $documentVars['document-locale']); $tabs = $documentForm->loadTabs($documentTypeId); foreach ($tabs as $tab) { $properties = $documentForm->loadProperties($documentTypeId, $tab->getId(), $document->getId()); $connection = $document->getAdapter()->getDriver()->getConnection(); try { $connection->beginTransaction(); foreach ($properties as $property) { $property->setDocumentId($document->getId())->loadValue(); if (!Datatype\Model::saveEditor($this->getServiceLocator(), $property)) { $hasError = true; } } if ($hasError) { $connection->rollBack(); } else { $connection->commit(); } } catch (Exception $e) { $connection->rollBack(); } } } $tabsArray = $documentForm->load($documentTypeId, $document, $this->getServiceLocator()); $tabsArray[] = $this->getServiceLocator()->get('MvcTranslator')->translate('Document information'); $formDocumentAdd = $documentForm->get('tabs-' . count($tabsArray)); if ($this->getRequest()->isPost()) { $formDocumentAdd->setData($this->getRequest()->getPost()->toArray()); if ($hasError or !$formDocumentAdd->isValid()) { $document->setStatus(DocumentModel::STATUS_DISABLE); $document->setUrlKey($oldUrlKey); $this->flashMessenger()->addErrorMessage('This document cannot be saved because one or more properties values are required !'); $this->useFlashMessenger(); } else { $this->flashMessenger()->addSuccessMessage('This document has been saved'); $document->addData($formDocumentAdd->getInputFilter()->getValues()); $document->save(); return $this->redirect()->toRoute('content/document/edit', array('id' => $documentId)); } } $this->layout()->setVariable('documentId', $documentId); return array('form' => $documentForm, 'tabs' => new Component\Tabs($tabsArray), 'document' => $document); }