Ejemplo n.º 1
0
 /**
  * Update the flashcard review status (uiFlashcardReview callback)
  * 
  * Note: uiFlashcardReview callback, must sanitize data!
  * 
  * Flashcard answer data is set by the front end code (review.js):
  * 
  *    id     Flashcard id = framenum
  *    r      Answer (1=No  2=Yes  3=Easy)`
  *    
  * @param  mixed    $id     Flashcard id
  * @param  object   $oData  Flashcard answer data
  * @return boolean  True if update went succesfully
  */
 public static function putFlashcardData($id, $oData)
 {
     // sanitize JSON data
     if (!preg_match('/^[0-9]+$/', $id) || ($id < 1 || $id > rtkBook::MAXKANJI_VOL3) || !isset($oData->r) || !preg_match('/^[1-3]$/', $oData->r)) {
         throw new coreException('updateFlashcard :: invalid data');
     }
     $user = coreContext::getInstance()->getUser();
     $userId = $user->getUserId();
     // get current review status
     $select = self::getInstance()->select(array('totalreviews', 'leitnerbox', 'failurecount', 'successcount', 'lastreview'))->where('framenum = ?', $id);
     self::filterByUserId($select, $userId)->query();
     $curData = self::$db->fetchObject();
     if (!$curData) {
         throw new coreException('updateFlashcard :: no record for id');
     }
     $oUpdateData = LeitnerSRS::rateCard($curData, $oData->r);
     //echo '<p>UPDATE framenum '.$id.' with '.print_r($oUpdateData, true);
     //return true;
     $result = self::getInstance()->update($oUpdateData, 'userid = ? AND framenum = ?', array($userId, $id));
     if ($result && $oData->r > 1) {
         // clear relearned kanji if successfull answer
         LearnedKanjiPeer::clearKanji($userId, $id);
     }
     return $result;
 }