/** * savePluginWrapper Save a plugin wrapper * * @param array $pluginData * @param SiteEntity $site * @param null $oldWrapper * * @return null|PluginWrapperEntity */ public function savePluginWrapper($pluginData, SiteEntity $site, $oldWrapper = null) { if (!empty($oldWrapper) && !is_a($oldWrapper, '\\Rcm\\Entity\\PluginWrapper')) { throw new RuntimeException('Wrapper passed in is not a valid plugin wrapper.'); } /** @var \Rcm\Repository\PluginInstance $pluginInstanceRepo */ $pluginInstanceRepo = $this->_em->getRepository('\\Rcm\\Entity\\PluginInstance'); $pluginData = $this->prepareData($pluginData); $pluginInstance = $pluginInstanceRepo->updatePlugin($pluginData, $site); if (!empty($oldWrapper) && ($pluginData['siteWide'] || $oldWrapper->getInstance()->isSiteWide()) && $pluginInstance->getInstanceId() != $oldWrapper->getInstance()->getInstanceId()) { $queryBuilder = $this->_em->createQueryBuilder(); $queryBuilder->update('\\Rcm\\Entity\\PluginWrapper', 'wrapper')->set('wrapper.instance', $pluginInstance->getInstanceId())->where('wrapper.instance = :oldInstance')->setParameter('oldInstance', $oldWrapper->getInstance()); $queryBuilder->getQuery()->execute(); } if (!empty($oldWrapper) && $oldWrapper->getRenderOrderNumber() == $pluginData['rank'] && $oldWrapper->getRowNumber() == $pluginData['rowNumber'] && $oldWrapper->getColumnClass() == $pluginData['columnClass'] && $oldWrapper->getLayoutContainer() == $pluginData['containerName'] && ($oldWrapper->getInstance()->getInstanceId() == $pluginInstance->getInstanceId() || $pluginData['siteWide'])) { return $oldWrapper; } $pluginWrapper = new PluginWrapperEntity(); $pluginWrapper->populate($pluginData); $pluginWrapper->setInstance($pluginInstance); $this->_em->persist($pluginWrapper); $this->_em->flush($pluginWrapper); return $pluginWrapper; }
/** * @param $pluginName * @param $data * @param $pageLayoutContainer * * @return \Rcm\Entity\PluginWrapper * @throws \Exception */ protected function getNewPluginWrapper($pluginName, $data, $pageLayoutContainer = null) { $em = $this->entityManager; $pluginWrapper = new PluginWrapper(); $pluginWrapper->setRenderOrderNumber($data['renderOrder']); $pluginWrapper->setRowNumber($data['row']); if (!empty($pageLayoutContainer)) { $pluginWrapper->setLayoutContainer($pageLayoutContainer); } if (!empty($data['columnClass'])) { $pluginWrapper->setColumnClass($data['columnClass']); } $pluginWrapper->setInstance($this->getNewPlugin($pluginName, $data['instanceConfig'])); $em->persist($pluginWrapper); return $pluginWrapper; }
/** * Test Clone * * @return void * * @covers \Rcm\Entity\Revision */ public function testClone() { $revision = ['revisionId' => 100, 'author' => 'Westin Shafer', 'createdDate' => new \DateTime('yesterday'), 'publishedDate' => new \DateTime('yesterday'), 'published' => true, 'md5' => 'revisionMD5', 'instances' => [0 => ['pluginWrapperId' => 43, 'layoutContainer' => 'layoutOne', 'renderOrder' => 0, 'height' => 32, 'width' => 100, 'divFloat' => 'right', 'instance' => ['pluginInstanceId' => 44, 'plugin' => 'MockPlugin', 'siteWide' => false, 'displayName' => null, 'instanceConfig' => ['var1' => 1, 'var2' => 2], 'md5' => 'firstMd5']], 1 => ['pluginWrapperId' => 45, 'layoutContainer' => 'layoutTwo', 'renderOrder' => 1, 'height' => 33, 'width' => 101, 'divFloat' => 'none', 'instance' => ['pluginInstanceId' => 46, 'plugin' => 'MockPlugin2', 'siteWide' => true, 'displayName' => 'TestSiteWide', 'instanceConfig' => ['var3' => 3, 'var4' => 4], 'md5' => 'secondMd5']]]]; $this->revision->setRevisionId($revision['revisionId']); $this->revision->setAuthor($revision['author']); $this->revision->setCreatedDate($revision['createdDate']); $this->revision->publishRevision(); $this->revision->setPublishedDate($revision['publishedDate']); $this->revision->setMd5($revision['md5']); foreach ($revision['instances'] as $instance) { $plugin = new PluginInstance(); $plugin->setInstanceId($instance['instance']['pluginInstanceId']); $plugin->setPlugin($instance['instance']['plugin']); if ($instance['instance']['siteWide']) { $plugin->setSiteWide(); } $plugin->setDisplayName($instance['instance']['displayName']); $plugin->setInstanceConfig($instance['instance']['instanceConfig']); $plugin->setMd5($instance['instance']['md5']); $wrapper = new PluginWrapper(); $wrapper->setPluginWrapperId($instance['pluginWrapperId']); $wrapper->setLayoutContainer($instance['layoutContainer']); $wrapper->setRenderOrderNumber($instance['renderOrder']); $wrapper->setHeight($instance['height']); $wrapper->setWidth($instance['width']); $wrapper->setDivFloat($instance['divFloat']); $wrapper->setInstance($plugin); $this->revision->addPluginWrapper($wrapper); } $clonedRevision = clone $this->revision; /* Test Revision */ $this->assertNotEquals($this->revision->getRevisionId(), $clonedRevision->getRevisionId()); $this->assertNull($clonedRevision->getRevisionId()); $this->assertEquals($this->revision->getAuthor(), $clonedRevision->getAuthor()); $this->assertNotEquals($this->revision->getCreatedDate(), $clonedRevision->getCreatedDate()); $this->assertNotEquals($this->revision->getPublishedDate(), $clonedRevision->getPublishedDate()); $this->assertTrue($this->revision->wasPublished()); $this->assertEquals($this->revision->getMd5(), $clonedRevision->getMd5()); $clonedWrappers = $clonedRevision->getPluginWrappers(); $revisionWrappers = $this->revision->getPluginWrappers(); $this->assertNotEquals($revisionWrappers, $clonedWrappers); /** @var \Rcm\Entity\PluginWrapper $clonedWrapper */ foreach ($clonedWrappers as $clonedWrapper) { if (!$clonedWrapper->getInstance()->isSiteWide()) { $this->assertNull($clonedWrapper->getInstance()->getInstanceId()); } else { $this->assertNotNull($clonedWrapper->getInstance()->getInstanceId()); } } }
/** * Test Clone * * @return void * * @covers \Rcm\Entity\Page */ public function testClone() { $site = new Site(); $site->setSiteId(55); $container = ['pageId' => '200', 'name' => 'pageOne', 'author' => 'Westin Shafer', 'createdDate' => new \DateTime('yesterday'), 'lastPublished' => new \DateTime('yesterday'), 'revisions' => [0 => ['revisionId' => 100, 'author' => 'Westin Shafer', 'createdDate' => new \DateTime('yesterday'), 'publishedDate' => new \DateTime('yesterday'), 'published' => true, 'md5' => 'revisionMD5', 'instances' => [0 => ['pluginWrapperId' => 43, 'layoutContainer' => 'layoutOne', 'renderOrder' => 0, 'height' => 32, 'width' => 100, 'divFloat' => 'right', 'instance' => ['pluginInstanceId' => 44, 'plugin' => 'MockPlugin', 'siteWide' => false, 'displayName' => null, 'instanceConfig' => ['var1' => 1, 'var2' => 2], 'md5' => 'firstMd5']], 1 => ['pluginWrapperId' => 45, 'layoutContainer' => 'layoutTwo', 'renderOrder' => 1, 'height' => 33, 'width' => 101, 'divFloat' => 'none', 'instance' => ['pluginInstanceId' => 46, 'plugin' => 'MockPlugin2', 'siteWide' => true, 'displayName' => 'TestSiteWide', 'instanceConfig' => ['var3' => 3, 'var4' => 4], 'md5' => 'secondMd5']]]], 1 => ['revisionId' => 101, 'author' => 'Westin Shafer', 'createdDate' => new \DateTime('-1 month'), 'publishedDate' => new \DateTime('-1 month'), 'published' => false, 'md5' => 'revision2MD5', 'instances' => [0 => ['pluginWrapperId' => 47, 'layoutContainer' => 'layoutThree', 'renderOrder' => 2, 'height' => 33, 'width' => 102, 'divFloat' => 'right', 'instance' => ['pluginInstanceId' => 48, 'plugin' => 'MockPlugin3', 'siteWide' => false, 'displayName' => null, 'instanceConfig' => ['var1' => 1, 'var2' => 2], 'md5' => 'firstMd5']], 1 => ['pluginWrapperId' => 49, 'layoutContainer' => 'layoutFour', 'renderOrder' => 3, 'height' => 34, 'width' => 103, 'divFloat' => 'left', 'instance' => ['pluginInstanceId' => 50, 'plugin' => 'MockPlugin4', 'siteWide' => true, 'displayName' => 'TestSiteWide2', 'instanceConfig' => ['var3' => 3, 'var4' => 4], 'md5' => 'secondMd5']]]]]]; $this->page->setPageId($container['pageId']); $this->page->setName($container['name']); $this->page->setAuthor($container['author']); $this->page->setCreatedDate($container['createdDate']); $this->page->setLastPublished($container['lastPublished']); $this->page->setSite($site); foreach ($container['revisions'] as $index => $revisionData) { $revision = new Revision(); $revision->setRevisionId($revisionData['revisionId']); $revision->setAuthor($revisionData['author']); $revision->setCreatedDate($revisionData['createdDate']); $revision->publishRevision(); $revision->setPublishedDate($revisionData['publishedDate']); $revision->setMd5($revisionData['md5']); foreach ($revisionData['instances'] as $instance) { $plugin = new PluginInstance(); $plugin->setInstanceId($instance['instance']['pluginInstanceId']); $plugin->setPlugin($instance['instance']['plugin']); if ($instance['instance']['siteWide']) { $plugin->setSiteWide(); } $plugin->setDisplayName($instance['instance']['displayName']); $plugin->setInstanceConfig($instance['instance']['instanceConfig']); $plugin->setMd5($instance['instance']['md5']); $wrapper = new PluginWrapper(); $wrapper->setPluginWrapperId($instance['pluginWrapperId']); $wrapper->setLayoutContainer($instance['layoutContainer']); $wrapper->setRenderOrderNumber($instance['renderOrder']); $wrapper->setHeight($instance['height']); $wrapper->setWidth($instance['width']); $wrapper->setDivFloat($instance['divFloat']); $wrapper->setInstance($plugin); $revision->addPluginWrapper($wrapper); } if ($index === 0) { $this->page->setPublishedRevision($revision); } elseif ($index === 1) { $this->page->setStagedRevision($revision); } $this->page->addRevision($revision); } $this->assertCount(2, $this->page->getRevisions()); $clonedContainer = clone $this->page; /* Test Container */ $this->assertNotEquals($this->page->getPageId(), $clonedContainer->getPageId()); $this->assertNull($clonedContainer->getPageId()); $this->assertNull($clonedContainer->getPublishedRevision()); $this->assertCount(1, $clonedContainer->getRevisions()); $containerName = $clonedContainer->getName(); $containerIsempty = empty($containerName); $this->assertTrue($containerIsempty); $this->assertNull($clonedContainer->getParent()); $currentRevision = $this->page->getPublishedRevision(); $clonedCurrentRev = $clonedContainer->getStagedRevision(); /* Test Revision */ $this->assertNotEquals($currentRevision->getRevisionId(), $clonedCurrentRev->getRevisionId()); $this->assertNull($clonedCurrentRev->getRevisionId()); $this->assertEquals($currentRevision->getAuthor(), $clonedCurrentRev->getAuthor()); $this->assertNotEquals($currentRevision->getCreatedDate(), $clonedCurrentRev->getCreatedDate()); $this->assertFalse($clonedCurrentRev->wasPublished()); $this->assertEquals($currentRevision->getMd5(), $clonedCurrentRev->getMd5()); $revisionWrappers = $currentRevision->getPluginWrappers(); $clonedWrappers = $clonedCurrentRev->getPluginWrappers(); $this->assertNotEquals($revisionWrappers, $clonedWrappers); /** @var \Rcm\Entity\PluginWrapper $clonedWrapper */ foreach ($clonedWrappers as $clonedWrapper) { if (!$clonedWrapper->getInstance()->isSiteWide()) { $this->assertNull($clonedWrapper->getInstance()->getInstanceId()); } else { $this->assertNotNull($clonedWrapper->getInstance()->getInstanceId()); } } $page = new Page(); $clone = clone $page; $this->assertInstanceOf('\\Rcm\\Entity\\Page', $clone); }
/** * Get a container revision * * @param $revisionData * * @return Revision */ private function getRevision($revisionData) { $revision = new Revision(); $revision->setRevisionId($revisionData['revisionId']); $revision->setAuthor($revisionData['author']); $revision->setCreatedDate($revisionData['createdDate']); $revision->publishRevision(); $revision->setPublishedDate($revisionData['publishedDate']); $revision->setMd5($revisionData['md5']); foreach ($revisionData['instances'] as $instance) { $plugin = new PluginInstance(); $plugin->setInstanceId($instance['instance']['pluginInstanceId']); $plugin->setPlugin($instance['instance']['plugin']); $plugin->setDisplayName($instance['instance']['displayName']); $plugin->setInstanceConfig($instance['instance']['instanceConfig']); $plugin->setMd5($instance['instance']['md5']); if ($instance['instance']['siteWide']) { $plugin->setSiteWide(); $this->site->addSiteWidePlugin($plugin); } $wrapper = new PluginWrapper(); $wrapper->setPluginWrapperId($instance['pluginWrapperId']); $wrapper->setLayoutContainer($instance['layoutContainer']); $wrapper->setRenderOrderNumber($instance['renderOrder']); $wrapper->setHeight($instance['height']); $wrapper->setWidth($instance['width']); $wrapper->setDivFloat($instance['divFloat']); $wrapper->setInstance($plugin); $revision->addPluginWrapper($wrapper); } return $revision; }
/** * Get Plugin Html * * @param PluginWrapper $pluginWrapper Plugin Wrapper * * @return string */ protected function getPluginHtml(PluginWrapper $pluginWrapper) { $this->pluginManager->prepPluginForDisplay($pluginWrapper->getInstance()); $this->getPluginCss($pluginWrapper->getInstance()); $this->getPluginHeadScript($pluginWrapper->getInstance()); $plugin = $pluginWrapper->getInstance(); $displayName = str_replace(' ', '', $plugin->getDisplayName()); if ($displayName !== '') { $displayName = ' ' . $displayName; } $html = '<div class="rcmPlugin ' . $plugin->getPlugin() . $displayName . ' ' . $pluginWrapper->getColumnClass() . '"' . ' data-rcmPluginName="' . $plugin->getPlugin() . '"' . ' data-rcmPluginDefaultClass="rcmPlugin ' . $plugin->getPlugin() . $displayName . '"' . ' data-rcmPluginColumnClass="' . $pluginWrapper->getColumnClass() . '"' . ' data-rcmPluginRowNumber="' . $pluginWrapper->getRowNumber() . '"' . ' data-rcmPluginRenderOrderNumber="' . $pluginWrapper->getRenderOrderNumber() . '"' . ' data-rcmPluginInstanceId="' . $plugin->getInstanceId() . '"' . ' data-rcmPluginWrapperId="' . $pluginWrapper->getPluginWrapperId() . '"' . ' data-rcmSiteWidePlugin="' . $plugin->isSiteWide() . '"' . ' data-rcmPluginDisplayName="' . $plugin->getDisplayName() . '"' . '>'; $html .= '<div class="rcmPluginContainer">'; $html .= $plugin->getRenderedHtml(); $html .= '</div>'; $html .= '</div>'; return $html; }
public function testUtilities() { $data = []; $data['layoutContainer'] = 'TESTCONT'; $data['renderOrder'] = 3; $data['height'] = 123; $data['width'] = 321; $data['divFloat'] = 'left'; $data['instance'] = new PluginInstance(); $obj1 = new PluginWrapper(); $obj1->populate($data); $this->assertEquals($data['layoutContainer'], $obj1->getLayoutContainer()); $this->assertEquals($data['renderOrder'], $obj1->getRenderOrderNumber()); // Why does this return an altered data format? // $this->assertEquals($data['height'] . 'px', $obj1->getHeight()); // $this->assertEquals($data['width'] . 'px', $obj1->getWidth()); // // $this->assertEquals($data['divFloat'], $obj1->getDivFloat()); $this->assertEquals($data['instance'], $obj1->getInstance()); $json = json_encode($obj1); $this->assertJson($json); $iterator = $obj1->getIterator(); $this->assertInstanceOf('\\ArrayIterator', $iterator); $array = $obj1->toArray(); $this->assertEquals($data['layoutContainer'], $array['layoutContainer']); $this->assertEquals($data['renderOrder'], $array['renderOrder']); // $this->assertEquals($data['height'], $array['height']); // $this->assertEquals($data['width'], $array['width']); // $this->assertEquals($data['divFloat'], $array['divFloat']); $this->assertEquals($data['instance'], $array['instance']); }