/** * Executes commit action on content and its draft. * * @param AbstractClassContent $content * @param Revision $draft * @return self */ private function executeCommit(AbstractClassContent $content, Revision $draft) { $content->setDraft(null); if ($content instanceof ContentSet) { $content->clear(); while ($subcontent = $draft->next()) { if ($subcontent instanceof AbstractClassContent) { $subcontent = $this->em->getRepository(ClassUtils::getRealClass($subcontent))->load($subcontent); if (null !== $subcontent) { $content->push($subcontent); } } } } else { foreach ($draft->getData() as $key => $values) { $values = is_array($values) ? $values : [$values]; foreach ($values as &$subcontent) { if ($subcontent instanceof AbstractClassContent) { $subcontent = $this->em->getRepository(ClassUtils::getRealClass($subcontent))->load($subcontent); } } $content->{$key} = $values; } } $draft->commit(); $content->setLabel($draft->getLabel()); foreach ($draft->getAllParams() as $key => $params) { $content->setParam($key, $params['value']); } $content->setRevision($draft->getRevision())->setState(AbstractClassContent::STATE_NORMAL)->addRevision($draft); return $this; }
/** * Executes revert action on content and its draft. * * @param AbstractClassContent $content * @param Revision $draft * @param array $data * * @return ClassContentManager */ private function executeRevert(AbstractClassContent $content, Revision $draft, array $data) { $content->setDraft(null); if ($content instanceof ContentSet) { if (isset($data['elements']) && true === $data['elements']) { $draft->clear(); foreach ($content->getData() as $element) { if ($element instanceof AbstractClassContent) { $draft->push($element); } } } } else { foreach ($content->getData() as $key => $element) { if (isset($data['elements']) && in_array($key, $data['elements'])) { $draft->{$key} = $content->{$key}; } if (in_array('Element\\Keyword', $content->getAccept()[$key])) { $this->entityManager->getRepository('BackBee\\ClassContent\\Element\\Keyword')->cleanKeywordLinks($content, $element); } } } if (isset($data['parameters'])) { foreach ($content->getDefaultParams() as $key => $params) { if (in_array($key, $data['parameters'])) { $draft->setParam($key, $content->getParamValue($key)); } } } return $this; }
/** * * @param AbstractClassContent $content * @param type $draft */ private function restoreDraft($content, Revision $draft = null) { if (null !== $draft && $content instanceof AbstractClassContent) { $content->setDraft($draft); } }