Exemplo n.º 1
0
 /**
  * Copy given sco and its children.
  *
  * @param Scorm2004Sco      $sco
  * @param Scorm2004Resource $resource
  * @param Scorm2004Sco      $scoParent
  */
 private function copySco(Scorm2004Sco $sco, Scorm2004Resource $resource, Scorm2004Sco $scoParent = null)
 {
     $scoCopy = new Scorm2004Sco();
     $scoCopy->setScormResource($resource);
     $scoCopy->setScoParent($scoParent);
     $scoCopy->setEntryUrl($sco->getEntryUrl());
     $scoCopy->setIdentifier($sco->getIdentifier());
     $scoCopy->setIsBlock($sco->getIsBlock());
     $scoCopy->setLaunchData($sco->getLaunchData());
     $scoCopy->setParameters($sco->getParameters());
     $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);
     }
 }
Exemplo n.º 2
0
 /**
  * @EXT\Route(
  *     "/scorm/2004/render/sco/{scoId}",
  *     name = "claro_render_scorm_2004_sco"
  * )
  * @EXT\ParamConverter(
  *      "scorm2004Sco",
  *      class="ClarolineScormBundle:Scorm2004Sco",
  *      options={"id" = "scoId", "strictId" = true}
  * )
  * @EXT\Template("ClarolineScormBundle::scorm2004MenuSco.html.twig")
  *
  * @param Scorm2004Sco $scorm2004Sco
  *
  * @return Response
  */
 public function renderScorm2004ScoAction(Scorm2004Sco $scorm2004Sco)
 {
     $user = $this->tokenStorage->getToken()->getUser();
     $scorm = $scorm2004Sco->getScormResource();
     $this->checkScorm2004ResourceAccess('OPEN', $scorm);
     $canEdit = $this->hasScorm2004Right($scorm, 'EDIT');
     $isAnon = $user === 'anon.';
     $scos = $scorm->getScos();
     $entryUrl = $scorm2004Sco->getEntryUrl();
     if (is_string($entryUrl) && preg_match('/^http/', $entryUrl)) {
         $scormPath = $entryUrl . $scorm2004Sco->getParameters();
     } else {
         $scormPath = 'uploads/scormresources/' . $scorm->getHashName() . DIRECTORY_SEPARATOR . $scorm2004Sco->getEntryUrl() . $scorm2004Sco->getParameters();
     }
     $rootScos = [];
     foreach ($scos as $sco) {
         if (is_null($sco->getScoParent())) {
             $rootScos[] = $sco;
         }
     }
     if ($isAnon) {
         $scoTracking = $this->scormManager->createEmptyScorm2004ScoTracking($scorm2004Sco);
         $details = [];
         $details['cmi.learner_id'] = -1;
         $details['cmi.learner_name'] = 'anon., anon.';
     } else {
         $scoTracking = $this->scormManager->getScorm2004ScoTrackingByUserAndSco($user, $scorm2004Sco);
         if (is_null($scoTracking)) {
             $scoTracking = $this->scormManager->createScorm2004ScoTracking($user, $scorm2004Sco);
         }
         $details = !is_null($scoTracking->getDetails()) ? $scoTracking->getDetails() : [];
         $details['cmi.learner_id'] = $user->getId();
         $details['cmi.learner_name'] = $user->getFirstName() . ', ' . $user->getLastName();
     }
     $timeLimitAction = $scorm2004Sco->getTimeLimitAction();
     $totalTime = $scoTracking->getTotalTime();
     $completionThreshold = $scorm2004Sco->getCompletionThreshold();
     $maxTimeAllowed = $scorm2004Sco->getMaxTimeAllowed();
     $scaledPassingScore = $scorm2004Sco->getScaledPassingScore();
     $details['cmi.time_limit_action'] = !is_null($timeLimitAction) ? $timeLimitAction : 'continue,no message';
     $details['cmi.total_time'] = !is_null($totalTime) ? $totalTime : 'PT0S';
     $details['cmi.launch_data'] = $scorm2004Sco->getLaunchData();
     $details['cmi.completion_threshold'] = !is_null($completionThreshold) ? $completionThreshold : '';
     $details['cmi.max_time_allowed'] = !is_null($maxTimeAllowed) ? $maxTimeAllowed : '';
     $details['cmi.scaled_passing_score'] = !is_null($scaledPassingScore) ? $scaledPassingScore : '';
     return ['resource' => $scorm, '_resource' => $scorm, 'currentSco' => $scorm2004Sco, 'scos' => $rootScos, 'scoTracking' => $scoTracking, 'scoTrackingDetails' => json_encode($details), 'scormUrl' => $scormPath, 'workspace' => $scorm->getResourceNode()->getWorkspace(), 'isAnon' => $isAnon, 'canEdit' => $canEdit];
 }