/** * Creates a new exercise paper for a given user. * * @param Exercise $exercise * @param User $user * * @return Paper */ public function createPaper(Exercise $exercise, User $user = null) { // Get the number of the new Paper $paperNum = 1; if ($user) { $lastPaper = $this->om->getRepository('UJMExoBundle:Paper')->findOneBy(['user' => $user, 'exercise' => $exercise], ['start' => 'DESC']); if ($lastPaper) { $paperNum = $lastPaper->getNumPaper() + 1; } } // Generate the list of Steps and Questions for the Paper $order = ''; if (!empty($lastPaper) && $exercise->getKeepSteps()) { // Get steps order from the last user Paper $order = $lastPaper->getOrdreQuestion(); } else { // Generate paper step order $questions = $this->pickQuestions($exercise); foreach ($questions as $question) { $order .= $question->getId() . ';'; } } // Create the new Paper entity $paper = new Paper(); $paper->setExercise($exercise); $paper->setUser($user); $paper->setNumPaper($paperNum); $paper->setOrdreQuestion($order); $paper->setAnonymous($exercise->getAnonymous()); $this->om->persist($paper); $this->om->flush(); return $paper; }