/** * Copy given sco and its children. * * @param Scorm12Sco $sco * @param Scorm12Resource $resource * @param Scorm12Sco $scoParent */ private function copySco(Scorm12Sco $sco, Scorm12Resource $resource, Scorm12Sco $scoParent = null) { $scoCopy = new Scorm12Sco(); $scoCopy->setScormResource($resource); $scoCopy->setScoParent($scoParent); $scoCopy->setEntryUrl($sco->getEntryUrl()); $scoCopy->setIdentifier($sco->getIdentifier()); $scoCopy->setIsBlock($sco->getIsBlock()); $scoCopy->setLaunchData($sco->getLaunchData()); $scoCopy->setMasteryScore($sco->getMasteryScore()); $scoCopy->setMaxTimeAllowed($sco->getMaxTimeAllowed()); $scoCopy->setParameters($sco->getParameters()); $scoCopy->setPrerequisites($sco->getPrerequisites()); $scoCopy->setTimeLimitAction($sco->getTimeLimitAction()); $scoCopy->setTitle($sco->getTitle()); $scoCopy->setVisible($sco->isVisible()); $this->om->persist($scoCopy); foreach ($sco->getScoChildren() as $scoChild) { $this->copySco($scoChild, $resource, $scoCopy); } }
/** * @EXT\Route( * "/scorm/12/render/sco/{scoId}", * name = "claro_render_scorm_12_sco" * ) * @EXT\ParamConverter( * "scorm12Sco", * class="ClarolineScormBundle:Scorm12Sco", * options={"id" = "scoId", "strictId" = true} * ) * @EXT\Template("ClarolineScormBundle::scorm12MenuSco.html.twig") * * @param Scorm12Sco $scorm12Sco * * @return Response */ public function renderScorm12ScoAction(Scorm12Sco $scorm12Sco) { $user = $this->tokenStorage->getToken()->getUser(); $scorm = $scorm12Sco->getScormResource(); $canEdit = $this->hasScorm12Right($scorm, 'EDIT'); $this->checkAccess('OPEN', $scorm); $isAnon = $user === 'anon.'; $scos = $scorm->getScos(); $entryUrl = $scorm12Sco->getEntryUrl(); if (is_string($entryUrl) && preg_match('/^http/', $entryUrl)) { $scormPath = $entryUrl . $scorm12Sco->getParameters(); } else { $scormPath = 'uploads/scormresources/' . $scorm->getHashName() . DIRECTORY_SEPARATOR . $scorm12Sco->getEntryUrl() . $scorm12Sco->getParameters(); } $rootScos = []; foreach ($scos as $sco) { if (is_null($sco->getScoParent())) { $rootScos[] = $sco; } } if ($isAnon) { $scoTracking = $this->scormManager->createEmptyScorm12ScoTracking($scorm12Sco); } else { $scoTracking = $this->scormManager->getScorm12ScoTrackingByUserAndSco($user, $scorm12Sco); if (is_null($scoTracking)) { $scoTracking = $this->scormManager->createScorm12ScoTracking($user, $scorm12Sco); } } return ['resource' => $scorm, '_resource' => $scorm, 'currentSco' => $scorm12Sco, 'scos' => $rootScos, 'scoTracking' => $scoTracking, 'scormUrl' => $scormPath, 'workspace' => $scorm->getResourceNode()->getWorkspace(), 'isAnon' => $isAnon, 'canEdit' => $canEdit]; }