/**
  * Returns whether a hint is related to a paper.
  *
  * @param Paper $paper
  * @param Hint  $hint
  *
  * @return bool
  */
 public function hasHint(Paper $paper, Hint $hint)
 {
     $qb = $this->createQueryBuilder('p');
     $count = $qb->select('COUNT(p)')->join('p.exercise', 'e')->join('e.steps', 's')->join('s.stepQuestions', 'sq')->where('e = :exercise')->andWhere('sq.question = :question')->setParameters(['question' => $hint->getQuestion(), 'exercise' => $paper->getExercise()])->getQuery()->getSingleScalarResult();
     return 0 < $count;
 }
Example #2
0
 /**
  * Check if the score of the Paper is available to User.
  *
  * @param Exercise $exercise
  * @param Paper    $paper
  *
  * @return bool
  */
 public function isScoreAvailable(Exercise $exercise, Paper $paper)
 {
     $markMode = $exercise->getMarkMode();
     switch ($markMode) {
         case MarkMode::AFTER_END:
             $available = !empty($paper->getEnd());
             break;
         case MarkMode::NEVER:
             $available = false;
             break;
         case MarkMode::WITH_CORRECTION:
         default:
             $available = $this->isSolutionAvailable($exercise, $paper);
             break;
     }
     return $available;
 }
 /**
  * For the navigation in a paper
  * Finds and displays the question selectionned by the User in an assesment
  *
  * @access private
  *
  * @param integer $numQuestionToDisplayed position of the question in the paper
  * @param \UJM\ExoBundle\Entity\Interaction $interactionToDisplay interaction (question) to displayed
  * @param String $typeInterToDisplayed
  * @param boolean $dispButtonInterrupt to display or no the button "Interrupt"
  * @param integer $maxAttempsAllowed the number of max attemps allowed for the exercise
  * @param Claroline workspace $workspace
  * @param \UJM\ExoBundle\Entity\Paper $paper current paper
  *
  * @return \Symfony\Component\HttpFoundation\Response
  */
 private function displayQuestion($numQuestionToDisplayed, $interactionToDisplay, $typeInterToDisplayed, $dispButtonInterrupt, $maxAttempsAllowed, $workspace, $paper)
 {
     $em = $this->getDoctrine()->getManager();
     $session = $this->getRequest()->getSession();
     $tabOrderInter = $session->get('tabOrderInter');
     switch ($typeInterToDisplayed) {
         case "InteractionQCM":
             $interactionToDisplayed = $this->getDoctrine()->getManager()->getRepository('UJMExoBundle:InteractionQCM')->getInteractionQCM($interactionToDisplay->getId());
             if ($interactionToDisplayed[0]->getShuffle()) {
                 $interactionToDisplayed[0]->shuffleChoices();
             } else {
                 $interactionToDisplayed[0]->sortChoices();
             }
             $responseGiven = $this->getDoctrine()->getManager()->getRepository('UJMExoBundle:Response')->getAlreadyResponded($session->get('paper'), $interactionToDisplay->getId());
             if (count($responseGiven) > 0) {
                 $responseGiven = $responseGiven[0]->getResponse();
             } else {
                 $responseGiven = '';
             }
             break;
         case "InteractionGraphic":
             $interactionToDisplayed = $this->getDoctrine()->getManager()->getRepository('UJMExoBundle:InteractionGraphic')->getInteractionGraphic($interactionToDisplay->getId());
             $coords = $em->getRepository('UJMExoBundle:Coords')->findBy(array('interactionGraphic' => $interactionToDisplayed[0]->getId()));
             $responseGiven = $this->getDoctrine()->getManager()->getRepository('UJMExoBundle:Response')->getAlreadyResponded($session->get('paper'), $interactionToDisplay->getId());
             if (count($responseGiven) > 0) {
                 $responseGiven = $responseGiven[0]->getResponse();
             } else {
                 $responseGiven = '';
             }
             $array['listCoords'] = $coords;
             break;
         case "InteractionHole":
             $interactionToDisplayed = $this->getDoctrine()->getManager()->getRepository('UJMExoBundle:InteractionHole')->getInteractionHole($interactionToDisplay->getId());
             $responseGiven = $this->getDoctrine()->getManager()->getRepository('UJMExoBundle:Response')->getAlreadyResponded($session->get('paper'), $interactionToDisplay->getId());
             if (count($responseGiven) > 0) {
                 $responseGiven = $responseGiven[0]->getResponse();
             } else {
                 $responseGiven = '';
             }
             break;
         case "InteractionOpen":
             $interactionToDisplayed = $this->getDoctrine()->getManager()->getRepository('UJMExoBundle:InteractionOpen')->getInteractionOpen($interactionToDisplay->getId());
             $responseGiven = $this->getDoctrine()->getManager()->getRepository('UJMExoBundle:Response')->getAlreadyResponded($session->get('paper'), $interactionToDisplay->getId());
             if (count($responseGiven) > 0) {
                 $responseGiven = $responseGiven[0]->getResponse();
             } else {
                 $responseGiven = '';
             }
             break;
         case "InteractionMatching":
             $interactionToDisplayed = $this->getDoctrine()->getManager()->getRepository('UJMExoBundle:InteractionMatching')->getInteractionMatching($interactionToDisplay->getId());
             if ($interactionToDisplayed[0]->getShuffle()) {
                 $interactionToDisplayed[0]->shuffleProposals();
                 $interactionToDisplayed[0]->shuffleLabels();
             } else {
                 $interactionToDisplayed[0]->sortProposals();
                 $interactionToDisplayed[0]->sortLabels();
             }
             $responseMatch = $this->getDoctrine()->getManager()->getRepository('UJMExoBundle:Response')->getAlreadyResponded($session->get('paper'), $interactionToDisplay->getId());
             if (count($responseMatch) > 0) {
                 $responseGiven = $this->container->get('ujm.exercise_services')->getTabResponseIndex($responseMatch[0]->getResponse());
             } else {
                 $responseGiven = '';
             }
             break;
     }
     $array['workspace'] = $workspace;
     $array['tabOrderInter'] = $tabOrderInter;
     $array['interactionToDisplayed'] = $interactionToDisplayed[0];
     $array['interactionType'] = $typeInterToDisplayed;
     $array['numQ'] = $numQuestionToDisplayed;
     $array['paper'] = $session->get('paper');
     $array['numAttempt'] = $paper->getNumPaper();
     $array['response'] = $responseGiven;
     $array['dispButtonInterrupt'] = $dispButtonInterrupt;
     $array['maxAttempsAllowed'] = $maxAttempsAllowed;
     $array['_resource'] = $paper->getExercise();
     return $this->render('UJMExoBundle:Exercise:paper.html.twig', $array);
 }
 /**
  * Checks whether a User has access to a Paper
  * ATTENTION : As is, anonymous have access to all the other anonymous Papers !!!
  *
  * @param Paper     $paper
  * @param User|null $user
  */
 private function assertHasPaperAccess(Paper $paper, User $user = null)
 {
     if ($paper->getEnd() || $user !== $paper->getUser()) {
         throw new AccessDeniedHttpException();
     }
 }
 /**
  * To control if the user is allowed to display the paper
  *
  * @access private
  *
  * @param \Claroline\CoreBundle\Entity\User $user user connected
  * @param \UJM\ExoBundle\Entity\Paper $paper paper to display
  *
  * @return \Symfony\Component\HttpFoundation\Response
  */
 private function ctrlDisplayPaper($user, $paper)
 {
     $display = 'none';
     if ($this->container->get('ujm.exercise_services')->isExerciseAdmin($paper->getExercise()) || $user->getId() == $paper->getUser()->getId() && ($paper->getExercise()->getCorrectionMode() == 1 || $paper->getExercise()->getCorrectionMode() == 3 && $paper->getExercise()->getDateCorrection()->format('Y-m-d H:i:s') <= date("Y-m-d H:i:s") || $paper->getExercise()->getCorrectionMode() == 2 && $paper->getExercise()->getMaxAttempts() <= $this->container->get('ujm.exercise_services')->getNbPaper($user->getId(), $paper->getExercise()->getId()))) {
         $display = 'all';
     } else {
         if ($user->getId() == $paper->getUser()->getId() && $paper->getExercise()->getMarkMode() == 2) {
             $display = 'score';
         }
     }
     return $display;
 }
Example #6
0
 /**
  * For the navigation in a paper
  * Finds and displays the question selected by the User in an assessment.
  *
  *
  * @param int                               $numQuestionToDisplayed position of the question in the paper
  * @param \UJM\ExoBundle\Entity\Interaction $interactionToDisplay   interaction (question) to displayed
  * @param string                            $typeInterToDisplayed
  * @param bool                              $dispButtonInterrupt    to display or no the button "Interrupt"
  * @param int                               $maxAttempsAllowed      the number of max attemps allowed for the exercise
  * @param Claroline workspace               $workspace
  * @param \UJM\ExoBundle\Entity\Paper       $paper                  current paper
  * @param SessionInterface session
  *
  * @return array
  */
 public function displayQuestion($numQuestionToDisplayed, $interactionToDisplay, $typeInterToDisplayed, $dispButtonInterrupt, $maxAttempsAllowed, $workspace, Paper $paper, SessionInterface $session)
 {
     $tabOrderInter = $session->get('tabOrderInter');
     $interSer = $this->container->get('ujm.exo_' . $interactionToDisplay->getType());
     $interactionToDisplayed = $interSer->getInteractionX($interactionToDisplay->getId());
     $responseGiven = $interSer->getResponseGiven($interactionToDisplay, $session, $interactionToDisplayed);
     $array['workspace'] = $workspace;
     $array['tabOrderInter'] = $tabOrderInter;
     $array['interactionToDisplayed'] = $interactionToDisplayed;
     $array['interactionType'] = $typeInterToDisplayed;
     $array['numQ'] = $numQuestionToDisplayed;
     $array['paper'] = $session->get('paper');
     $array['numAttempt'] = $paper->getNumPaper();
     $array['response'] = $responseGiven;
     $array['dispButtonInterrupt'] = $dispButtonInterrupt;
     $array['maxAttempsAllowed'] = $maxAttempsAllowed;
     $array['_resource'] = $paper->getExercise();
     return $array;
 }