/**
  * @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());
 }