public function makePageSnapshot(PageInterface $page) { /** @var \JMS\Serializer\SerializerInterface $serializer */ $serializer = $this->getService('serializer'); if ($this->getParameter('networking_init_cms.db_driver') == 'orm') { /** @var \Doctrine\Common\Persistence\ObjectManager $em */ $em = $this->getService('doctrine')->getManager(); } else { /** @var \Doctrine\Common\Persistence\ObjectManager $manager */ $em = $this->getService('doctrine_mongodb')->getManager(); } foreach ($page->getLayoutBlock() as $layoutBlock) { /** @var \Networking\InitCmsBundle\Model\layoutBlockInterface $layoutBlock */ $layoutBlockContent = $em->getRepository($layoutBlock->getClassType())->find($layoutBlock->getObjectId()); $layoutBlock->takeSnapshot($serializer->serialize($layoutBlockContent, 'json')); } /** @var \Networking\InitCmsBundle\Model\PageSnapshotManagerInterface $pageSnapshotManager */ $pageSnapshotManager = $this->getService('networking_init_cms.page_snapshot_manager'); $pageSnapshotClass = $pageSnapshotManager->getClassName(); /** @var \Networking\InitCmsBundle\Model\PageSnapshotInterface $pageSnapshot */ $pageSnapshot = new $pageSnapshotClass($page); $pageSnapshot->setVersionedData($serializer->serialize($page, 'json'))->setPage($page); if ($oldPageSnapshot = $page->getSnapshot()) { $snapshotContentRoute = $oldPageSnapshot->getContentRoute(); } else { $contentRouteManager = $this->getService('networking_init_cms.content_route_manager'); $contentRouteClass = $contentRouteManager->getClass(); /** @var \Networking\InitCmsBundle\Model\ContentRouteInterface $snapshotContentRoute */ $snapshotContentRoute = new $contentRouteClass(); } $pageSnapshot->setContentRoute($snapshotContentRoute); $pageSnapshot->setPath(self::getPageRoutePath($page->getPath())); $em->persist($pageSnapshot); $em->flush(); $snapshotContentRoute->setPath(self::getPageRoutePath($page->getPath())); $snapshotContentRoute->setObjectId($pageSnapshot->getId()); if ($oldPageSnapshot && $oldPageSnapshot->getPath() != self::getPageRoutePath($page->getPath())) { /** @var \Networking\InitCmsBundle\Lib\PhpCacheInterface $phpCache */ $phpCache = $this->getService('networking_init_cms.lib.php_cache'); $phpCache->clean(); } $em->persist($snapshotContentRoute); $em->flush(); }