GcContent\Controller\DocumentController::editAction PHP Method

editAction() public method

Edit Document
public editAction ( ) : Zend\View\Model\ViewModel | array
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);
    }