/** * prepPageRevisionForDisplay * * @param Page $page * @param null $pageRevisionId * * @return void|Response */ public function prepPageRevisionForDisplay(Page $page, $pageRevisionId = null) { // First Check for a page Revision if (!empty($pageRevisionId)) { $userCanSeeRevisions = $this->shouldShowRevisions($page->getSite()->getSiteId(), $page->getName(), $page->getPageType()); if ($userCanSeeRevisions) { $revision = $page->getRevisionById($pageRevisionId); if (!empty($revision) || $revision instanceof Revision) { $page->setCurrentRevision($revision); } return; } else { return $this->redirectToPage($page->getName(), $page->getPageType()); } } // Check for staging if ($this->rcmIsSiteAdmin($page->getSite())) { $revision = $page->getStagedRevision(); if (!empty($revision) || $revision instanceof Revision) { $page->setCurrentRevision($revision); return; } } // Finally look for published revision $revision = $page->getPublishedRevision(); if (!empty($revision) || $revision instanceof Revision) { $page->setCurrentRevision($revision); } return; }
/** * Copy a page * * @param SiteEntity $destinationSite Site Entity to copy page to * @param PageEntity $pageToCopy Page Entity to copy * @param array $pageData Array of data to populate the page entity * @param null $pageRevisionId Page Revision ID to use for copy. Defaults to currently published * @param bool $publishNewPage Publish page instead of setting to staged * @param bool $doFlush Force flush * * @return PageEntity */ public function copyPage(SiteEntity $destinationSite, PageEntity $pageToCopy, $pageData, $pageRevisionId = null, $publishNewPage = false, $doFlush = true) { if (empty($pageData['name'])) { throw new InvalidArgumentException('Missing needed information (name) to create page copy.'); } if (empty($pageData['author'])) { throw new InvalidArgumentException('Missing needed information (author) to create page copy.'); } // Values cannot be changed unset($pageData['pageId']); unset($pageData['createdDate']); unset($pageData['lastPublished']); $pageData['site'] = $destinationSite; $clonedPage = clone $pageToCopy; $clonedPage->populate($pageData); $revisionToUse = $clonedPage->getStagedRevision(); if (!empty($pageRevisionId)) { $sourceRevision = $pageToCopy->getRevisionById($pageRevisionId); if (empty($sourceRevision)) { throw new PageNotFoundException('Page revision not found.'); } $revisionToUse = clone $sourceRevision; $clonedPage->setRevisions([]); $clonedPage->addRevision($revisionToUse); } if (empty($revisionToUse)) { throw new RuntimeException('Page revision not found.'); } if ($publishNewPage) { $clonedPage->setPublishedRevision($revisionToUse); } else { $clonedPage->setStagedRevision($revisionToUse); } $destinationSite->addPage($clonedPage); $this->_em->persist($clonedPage); if ($doFlush) { $this->_em->flush($clonedPage); } return $clonedPage; }