Ejemplo n.º 1
0
 public function getCompetitionResults()
 {
     if (!self::canShowCompetitionResults($this->competition_id)) {
         return Yii::t('app', 'Competition results are not available yet.');
     }
     $points = 0;
     $wrong = array();
     $not = array();
     $startpoints = 0;
     $maxpoints = 0;
     foreach ($this->competitionUserQuestions as $competitionUserQuestion) {
         $cache_key = "CQAnswer-" . $competitionUserQuestion->competition_question_id . '-' . $this->competition_category_id;
         $cache = Yii::app()->cache->get($cache_key);
         if ($cache == null) {
             $right_answer = unserialize($competitionUserQuestion->competitionQuestion->question->verification_function);
             $correct_points = 1;
             $wrong_points = 0;
             $competitonQuestionDifficulty = CompetitionQuestionDifficulty::model()->with("competitionQuestionCategories")->find("competitionQuestionCategories.competition_question_id=:competition_question_id and competitionQuestionCategories.competition_category_id=:competition_category_id", array(":competition_question_id" => $competitionUserQuestion->competition_question_id, ":competition_category_id" => $this->competition_category_id));
             if ($competitonQuestionDifficulty != null) {
                 $correct_points = $competitonQuestionDifficulty->correct_answer_points;
                 $wrong_points = $competitonQuestionDifficulty->wrong_answer_points;
             }
             $cache = array('right_answer' => $right_answer, 'correct_points' => $correct_points, 'wrong_points' => $wrong_points);
             Yii::app()->cache->set($cache_key, serialize($cache), 60);
         } else {
             $cache = unserialize($cache);
         }
         $startpoints += abs($cache['wrong_points']);
         $maxpoints += $cache['correct_points'];
         if ($competitionUserQuestion->custom_answer != '' && $competitionUserQuestion->custom_answer != null) {
             if (in_array($competitionUserQuestion->custom_answer, $cache['right_answer'])) {
                 $points += $cache['correct_points'];
             } else {
                 $points += $cache['wrong_points'];
                 $wrong[] = CompetitionQuestion::getQuestionTitle($competitionUserQuestion->competition_question_id);
             }
         } else {
             $not[] = CompetitionQuestion::getQuestionTitle($competitionUserQuestion->competition_question_id);
         }
     }
     sort($wrong);
     sort($not);
     return $startpoints + $points . '/' . ($startpoints + $maxpoints) . (count($wrong) > 0 ? ' | napačni: ' . implode(', ', $wrong) : '') . (count($not) > 0 ? ' | neodgov.: ' . implode(',', $not) : '');
 }