Example #1
0
 /**
  * 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();
 }
Example #2
0
 /**
  * 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();
 }