public function fetchSumQuestionPoints()
 {
     $m = new WpProQuiz_Model_QuizMapper();
     return $m->sumQuestionPoints($this->_id);
 }
 private function handleShortCodeToplist($quizId, $inQuiz = false)
 {
     $quizMapper = new WpProQuiz_Model_QuizMapper();
     $view = new WpProQuiz_View_FrontToplist();
     $quiz = $quizMapper->fetch($quizId);
     if ($quiz->getId() <= 0 || !$quiz->isToplistActivated()) {
         echo '';
         return;
     }
     $view->quiz = $quiz;
     $view->points = $quizMapper->sumQuestionPoints($quizId);
     $view->inQuiz = $inQuiz;
     $view->show();
 }
 private function handleAddInToplist(WpProQuiz_Model_Quiz $quiz)
 {
     if (!wp_verify_nonce($this->_post['token'], 'wpProQuiz_toplist')) {
         return array('text' => __('An error has occurred.', 'wp-pro-quiz'), 'clear' => true);
     }
     if (!isset($this->_post['points']) || !isset($this->_post['totalPoints'])) {
         return array('text' => __('An error has occurred.', 'wp-pro-quiz'), 'clear' => true);
     }
     $quizId = $quiz->getId();
     $userId = get_current_user_id();
     $points = (int) $this->_post['points'];
     $totalPoints = (int) $this->_post['totalPoints'];
     $name = !empty($this->_post['name']) ? trim($this->_post['name']) : '';
     $email = !empty($this->_post['email']) ? trim($this->_post['email']) : '';
     $ip = filter_var($_SERVER['REMOTE_ADDR'], FILTER_VALIDATE_IP);
     $captchaAnswer = !empty($this->_post['captcha']) ? trim($this->_post['captcha']) : '';
     $prefix = !empty($this->_post['prefix']) ? trim($this->_post['prefix']) : '';
     $quizMapper = new WpProQuiz_Model_QuizMapper();
     $toplistMapper = new WpProQuiz_Model_ToplistMapper();
     if ($quiz == null || $quiz->getId() == 0 || !$quiz->isToplistActivated()) {
         return array('text' => __('An error has occurred.', 'wp-pro-quiz'), 'clear' => true);
     }
     if (!$this->preCheck($quiz->getToplistDataAddPermissions(), $userId)) {
         return array('text' => __('An error has occurred.', 'wp-pro-quiz'), 'clear' => true);
     }
     $numPoints = $quizMapper->sumQuestionPoints($quizId);
     if ($totalPoints > $numPoints || $points > $numPoints) {
         return array('text' => __('An error has occurred.', 'wp-pro-quiz'), 'clear' => true);
     }
     $clearTime = null;
     if ($quiz->isToplistDataAddMultiple()) {
         $clearTime = $quiz->getToplistDataAddBlock() * 60;
     }
     if ($userId > 0) {
         if ($toplistMapper->countUser($quizId, $userId, $clearTime)) {
             return array('text' => __('You can not enter again.', 'wp-pro-quiz'), 'clear' => true);
         }
         $user = wp_get_current_user();
         $email = $user->user_email;
         $name = $user->display_name;
     } else {
         if ($toplistMapper->countFree($quizId, $name, $email, $ip, $clearTime)) {
             return array('text' => __('You can not enter again.', 'wp-pro-quiz'), 'clear' => true);
         }
         if (empty($name) || empty($email) || filter_var($email, FILTER_VALIDATE_EMAIL) === false) {
             return array('text' => __('No name or e-mail entered.', 'wp-pro-quiz'), 'clear' => false);
         }
         if (strlen($name) > 15) {
             return array('text' => __('Your name can not exceed 15 characters.', 'wp-pro-quiz'), 'clear' => false);
         }
         if ($quiz->isToplistDataCaptcha()) {
             $captcha = WpProQuiz_Helper_Captcha::getInstance();
             if ($captcha->isSupported()) {
                 if (!$captcha->check($prefix, $captchaAnswer)) {
                     return array('text' => __('You entered wrong captcha code.', 'wp-pro-quiz'), 'clear' => false);
                 }
             }
         }
     }
     $toplist = new WpProQuiz_Model_Toplist();
     $toplist->setQuizId($quizId)->setUserId($userId)->setDate(time())->setName($name)->setEmail($email)->setPoints($points)->setResult(round($points / $totalPoints * 100, 2))->setIp($ip);
     $toplistMapper->save($toplist);
     return true;
 }
 /**
  * @deprecated
  */
 public static function ajaxLoadFormOverview($data, $func)
 {
     if (!current_user_can('wpProQuiz_show_statistics')) {
         return json_encode(array());
     }
     $statisticRefMapper = new WpProQuiz_Model_StatisticRefMapper();
     $quizMapper = new WpProQuiz_Model_QuizMapper();
     $quizId = $data['quizId'];
     $page = isset($data['page']) && $data['page'] > 0 ? $data['page'] : 1;
     $limit = $data['pageLimit'];
     $start = $limit * ($page - 1);
     $statisticModel = $statisticRefMapper->fetchFormOverview($quizId, $start, $limit, $data['onlyUser']);
     $items = array();
     $maxPoints = $quizMapper->sumQuestionPoints($quizId);
     $sumQuestion = $quizMapper->countQuestion($quizId);
     foreach ($statisticModel as $model) {
         /*@var $model WpProQuiz_Model_StatisticFormOverview */
         if (!$model->getUserId()) {
             $model->setUserName(__('Anonymous', 'wp-pro-quiz'));
         }
         $sum = $model->getCorrectCount() + $model->getIncorrectCount();
         $result = round(100 * $model->getPoints() / ($sum * $maxPoints / $sumQuestion), 2) . '%';
         $items[] = array('userName' => $model->getUserName(), 'userId' => $model->getUserId(), 'testId' => $model->getStatisticRefId(), 'date' => WpProQuiz_Helper_Until::convertTime($model->getCreateTime(), get_option('wpProQuiz_statisticTimeFormat', 'Y/m/d g:i A')), 'result' => $result);
     }
     $d = array('items' => $items);
     if (isset($data['nav']) && $data['nav']) {
         $count = $statisticRefMapper->countFormOverview($quizId, $data['onlyUser']);
         $d['page'] = ceil(($count > 0 ? $count : 1) / $limit);
     }
     return json_encode($d);
 }