/** * Handle the persisting of the currently loaded model. * * @return void */ private function doPersist() { if (!$this->model->getMeta(ModelInterface::IS_CHANGED)) { return; } $this->handlePrePersist(); // FIXME: manual sorting property handling is not enabled here as it originates from the backend defininiton. // Save the model. $dataProvider = $this->environment->getDataProvider($this->model->getProviderName()); $dataProvider->save($this->model); $this->handlePostPersist(); $this->storeVersion($this->model); }
/** * Handle the persisting of the currently loaded model. * * @return bool True means everything is okay, False error. */ protected function doPersist() { $environment = $this->getEnvironment(); $dataProvider = $environment->getDataProvider($this->model->getProviderName()); $inputProvider = $environment->getInputProvider(); if (!$this->model->getMeta(ModelInterface::IS_CHANGED)) { return true; } $this->handlePrePersist(); if ($this->model->getId() === null && $this->getManualSortingProperty()) { $models = $dataProvider->getEmptyCollection(); $models->push($this->model); $controller = $environment->getController(); if ($inputProvider->hasParameter('after')) { $after = IdSerializer::fromSerialized($inputProvider->getParameter('after')); $previousDataProvider = $environment->getDataProvider($after->getDataProviderName()); $previousFetchConfig = $previousDataProvider->getEmptyConfig(); $previousFetchConfig->setId($after->getId()); $previousModel = $previousDataProvider->fetch($previousFetchConfig); if ($previousModel) { $controller->pasteAfter($previousModel, $models, $this->getManualSortingProperty()); } else { $controller->pasteTop($models, $this->getManualSortingProperty()); } } elseif ($inputProvider->hasParameter('into')) { $into = IdSerializer::fromSerialized($inputProvider->getParameter('into')); $parentDataProvider = $environment->getDataProvider($into->getDataProviderName()); $parentFetchConfig = $parentDataProvider->getEmptyConfig(); $parentFetchConfig->setId($into->getId()); $parentModel = $parentDataProvider->fetch($parentFetchConfig); if ($parentModel) { $controller->pasteInto($parentModel, $models, $this->getManualSortingProperty()); } else { $controller->pasteTop($models, $this->getManualSortingProperty()); } } else { $controller->pasteTop($models, $this->getManualSortingProperty()); } $environment->getClipboard()->clear()->saveTo($environment); } else { if (!$this->allValuesUnique()) { return false; } // Save the model. $dataProvider->save($this->model); } $this->handlePostPersist(); $this->storeVersion($this->model); return true; }
/** * Recursively determine all child ids of the passed model. * * @param ModelInterface $model The model to fetch the ids from. * * @return string[] */ private function getChildIds(ModelInterface $model) { if (null === ($childCollections = $model->getMeta($model::CHILD_COLLECTIONS))) { return array(); } $result = array(ModelId::fromModel($model)->getSerialized()); foreach ($childCollections as $collection) { foreach ($collection as $child) { $result += $this->getChildIds($child); } } return $result; }
/** * Render a given model. * * @param ModelInterface $objModel The model to render. * * @param string $strToggleID The id of the toggler. * * @return string */ protected function parseModel($objModel, $strToggleID) { $event = new FormatModelLabelEvent($this->environment, $objModel); $this->environment->getEventDispatcher()->dispatch(DcGeneralEvents::FORMAT_MODEL_LABEL, $event); $objModel->setMeta($objModel::LABEL_VALUE, $event->getLabel()); $objTemplate = $this->getTemplate('dcbe_general_treeview_entry'); if ($objModel->getMeta($objModel::SHOW_CHILDREN)) { $toggleTitle = $this->getEnvironment()->getTranslator()->translate('collapseNode', 'MSC'); } else { $toggleTitle = $this->getEnvironment()->getTranslator()->translate('expandNode', 'MSC'); } $toggleScript = sprintf('Backend.getScrollOffset(); return BackendGeneral.loadSubTree(this, ' . '{\'toggler\':\'%s\', \'id\':\'%s\', \'providerName\':\'%s\', \'level\':\'%s\', \'mode\':\'%s\'});', $strToggleID, $objModel->getId(), $objModel->getProviderName(), $objModel->getMeta('dc_gen_tv_level'), 6); $toggleUrlEvent = new AddToUrlEvent('ptg=' . $objModel->getId() . '&provider=' . $objModel->getProviderName()); $this->getEnvironment()->getEventDispatcher()->dispatch(ContaoEvents::BACKEND_ADD_TO_URL, $toggleUrlEvent); $this->addToTemplate('environment', $this->getEnvironment(), $objTemplate)->addToTemplate('objModel', $objModel, $objTemplate)->addToTemplate('select', $this->isSelectModeActive(), $objTemplate)->addToTemplate('intMode', 6, $objTemplate)->addToTemplate('strToggleID', $strToggleID, $objTemplate)->addToTemplate('toggleUrl', $toggleUrlEvent->getUrl(), $objTemplate)->addToTemplate('toggleTitle', $toggleTitle, $objTemplate)->addToTemplate('toggleScript', $toggleScript, $objTemplate); return $objTemplate->parse(); }