/** * @EXT\Route( * "/study_card/deck/{deck}/session/{sessionId}/card/{card}/result/{result}", * name="claroline_study_card" * ) * * @param Deck $deck * @param int $sessionId * @param Card $card * @param $result * * @return JsonResponse */ public function studyCardAction(Deck $deck, $sessionId, Card $card, $result) { $this->assertCanOpen($deck); $user = $this->tokenStorage->getToken()->getUser(); $cardLearning = $this->cardLearningMgr->getCardLearning($card, $user); $isNewCard = $cardLearning === null; if ($isNewCard) { $cardLearning = new cardLearning(); $cardLearning->setCard($card); $cardLearning->setUser($user); } else { $cardLog = new CardLog(); $cardLog->setFactor($cardLearning->getFactor()); $cardLog->setPainful($cardLearning->getPainful()); $cardLog->setNumberRepeated($cardLearning->getNumberRepeated()); $cardLog->setDueDate($cardLearning->getDueDate()); $cardLog->setDate(new \DateTime()); $cardLog->setCard($cardLearning->getCard()); $cardLog->setUser($cardLearning->getUser()); } $cardLearning->study($result); $this->cardLearningMgr->save($cardLearning); // Log the current state of the card if it's not a new card if (!$isNewCard) { $this->cardLogMgr->save($cardLog); } // Save the session if ($sessionId > 0) { $session = $this->sessionMgr->get($sessionId); } else { $session = new Session(); $session->setDeck($deck); $session->setUser($user); } if ($isNewCard) { $session->addNewCard($card); } else { $session->addOldCard($card); } $now = new \DateTime(); $interval = $now->getTimestamp() - $session->getDate()->getTimestamp(); $session->setDuration($session->getDuration() + $interval); $session = $this->sessionMgr->save($session); return new JsonResponse($session->getId()); }