/** * Makes a block shared and creates a pointer block in it's place * * This method performs the change and persists/flushes to the database. * * @param integer $id * @param integer $rootVersion * * @return BlockPointer */ public function makeBlockShared($id) { if ($this->em->getFilters()->isEnabled('draftversion')) { $this->em->getFilters()->disable('draftversion'); } $block = $this->find($id); $version = $this->getNewVersion($block); // Duplicate some of the settings to the pointer $pointer = new PointerBlock(); $pointer->setOwner($block->getOwner()); $pointer->setParent($block->getParent()); $pointer->setReference($block); $pointer->setRootVersion($version); // Detach and make shared $block->setShared(true); $block->setParent(null); $block->setOwner(null); $block->setPosition(0); $block->setSort(0); $block->setRootVersion($version); $this->killLoggableListener(); $this->save($block)->save($pointer); return $pointer; }