You are here

class MatchingResponse in Quiz 6.6

Same name and namespace in other branches
  1. 6.3 question_types/matching/matching.classes.inc \MatchingResponse
  2. 6.4 question_types/matching/matching.classes.inc \MatchingResponse
  3. 6.5 question_types/matching/matching.classes.inc \MatchingResponse
  4. 7.6 question_types/matching/matching.classes.inc \MatchingResponse
  5. 7 question_types/matching/matching.classes.inc \MatchingResponse
  6. 7.4 question_types/matching/matching.classes.inc \MatchingResponse
  7. 7.5 question_types/matching/matching.classes.inc \MatchingResponse

Class that describes a "Directions question response". For the most part, no real scoring takes place for a direction node. However, there are a few behind-the-scenes tricks that are done here to make the quiz-taking process a little easier.

Hierarchy

Expanded class hierarchy of MatchingResponse

1 string reference to 'MatchingResponse'
matching_quiz_question_info in question_types/matching/matching.module
Implementation of hook_quiz_question_info().

File

question_types/matching/matching.classes.inc, line 220
matching.classes

View source
class MatchingResponse extends AbstractQuizQuestionResponse {
  public function __construct($rid, $question, $answer = NULL) {
    $this->rid = $rid;
    $this->question = $question;
    $this->answer = $answer;
    $this->is_correct = $this
      ->isCorrect();
  }
  public function save() {
    $user_answers = isset($this->answer) ? $this->answer : array();

    // to prevent warning : Invalid argument supplied for foreach()
    foreach ((array) $user_answers as $key => $value) {
      $score = $key == $value ? 1 : 0;
      $sql = "INSERT INTO {quiz_matching_user_answers} (match_id, result_id, answer, score) VALUES (%d, %d, %d, %d)";

      // This is expensive need to be changed
      db_query($sql, $key, $this->rid, (int) $value, $score);
    }
  }
  public function delete() {

    //$sql = 'DELETE FROM {quiz_matching_user_answers} WHERE question_nid = %d AND question_vid = %d AND result_id = %d';

    //db_query($sql, $this->question->nid, $this->question->vid, $this->rid);
  }
  public function score() {
    $wrong_answer = 0;
    $correct_answer = 0;
    $user_answers = isset($this->answer) ? $this->answer : $this
      ->getUserAnswers();
    $user_answers = isset($user_answers) ? $user_answers : array();

    // to prevent warning : Invalid argument supplied for foreach()
    foreach ((array) $user_answers as $key => $value) {
      if ($key != $value) {
        $wrong_answer++;
      }
      else {
        $correct_answer++;
      }
    }
    $score = $correct_answer - $wrong_answer;
    return $score < 0 ? 0 : $score;
  }
  public function getResponse() {
    return $this->answer;
  }
  public function getUserAnswers() {
    $user_answers = array();

    // answer_id  match_id  result_id   score   answer #{quiz_matching_user_answers} fields
    $results = db_query("SELECT match_id, answer FROM {quiz_matching_user_answers} WHERE result_id = %d", $this->rid);
    while ($result = db_fetch_object($results)) {
      $user_answers[$result->match_id] = $result->answer;
    }
    return $user_answers;
  }
  public function formatReport($showpoints = TRUE, $showfeedback = TRUE) {
    $rows = $innerheader = array();

    // Build the question answers header (add blank space for IE).
    $innerheader[] = t('Match');
    if ($showpoints) {
      $innerheader[] = t('Correct Answer');
    }
    $innerheader[] = t('User Answer');
    if ($showfeedback) {
      $innerheader[] = '&nbsp;';
    }

    //if (empty($this->question->answers)) {

    //  return t('Missing question.');

    //}
    $MatchingQuestion = new MatchingQuestion($this->question);
    $correct_answers = $MatchingQuestion
      ->getCorrectAnswer();
    $user_answers = $this
      ->getUserAnswers();
    foreach ($correct_answers as $correct_answer) {
      $id = $user_answers[$correct_answer['match_id']];
      $theme = $correct_answer['answer'] == $correct_answers[$id]['answer'] ? 'quiz_score_correct' : 'quiz_score_incorrect';
      $rows[] = array(
        'match' => $correct_answer['question'],
        'correct_answer' => $showpoints ? $correct_answer['answer'] : '',
        'user_answer' => $showfeedback ? $correct_answers[$id]['answer'] : '',
        'image' => $showfeedback ? array(
          'data' => theme($theme),
          'class' => 'quiz_summary_qcell',
        ) : '',
      );
    }

    // Add the cell with the question and the answers.
    $q_output = '<div class="quiz_summary_question"><span class="quiz_question_bullet">Q:</span> ' . check_markup($this->question->body) . '</div>';
    $q_output .= theme('table', $innerheader, $rows) . '<br />';
    return $q_output;
  }

}

Members