/** * Fired when a ResourceNode of type Path is duplicated * @param \Claroline\CoreBundle\Event\CopyResourceEvent $event * @throws \Exception */ public function onCopy(CopyResourceEvent $event) { $om = $this->container->get('claroline.persistence.object_manager'); // Start the transaction. We'll copy every resource in one go that way. $om->startFlushSuite(); // Get Path to duplicate $pathToCopy = $event->getResource(); // Create new Path $path = new Path(); // Set up new Path properties $path->setName($pathToCopy->getName()); $path->setDescription($pathToCopy->getDescription()); $parent = $event->getParent(); $structure = json_decode($pathToCopy->getStructure()); // Process steps $processedNodes = array(); foreach ($structure->steps as $step) { $processedNodes = $this->copyStepContent($step, $parent, $processedNodes); } // End the transaction $om->endFlushSuite(); // We need the resources ids $om->forceFlush(); //update the structure tree foreach ($structure->steps as $step) { $this->updateStep($step, $processedNodes); } $path->setStructure(json_encode($structure)); $event->setCopy($path); // Force the unpublished state (the publication will recreate the correct links, and create new Activities) // If we directly copy all the published Entities we can't remap some relations $event->setPublish(false); $event->stopPropagation(); }
/** * Fired when a ResourceNode of type Path is duplicated * @param \Claroline\CoreBundle\Event\CopyResourceEvent $event * @throws \Exception */ public function onCopy(CopyResourceEvent $event) { // Get Path to duplicate $pathToCopy = $event->getResource(); // Create new Path $path = new Path(); // Set up new Path properties $path->setName($pathToCopy->getName()); $path->setDescription($pathToCopy->getDescription()); $parent = $event->getParent(); $structure = json_decode($pathToCopy->getStructure()); // Process steps $processedNodes = array(); foreach ($structure->steps as $step) { $processedNodes = $this->copyStepContent($step, $parent, $processedNodes); } // Store the new structure of the Path $path->setStructure(json_encode($structure)); $event->setCopy($path); // Force the unpublished state (the publication will recreate the correct links, and create new Activities) // If we directly copy all the published Entities we can't remap some relations $event->setPublish(false); $event->stopPropagation(); }