You are here

class QuizfileuploadResponse in Quiz File Upload 6

Same name and namespace in other branches
  1. 7.5 quizfileupload.classes.inc \QuizfileuploadResponse
  2. 7 quizfileupload.classes.inc \QuizfileuploadResponse
  3. 7.4 quizfileupload.classes.inc \QuizfileuploadResponse

Extension of QuizQuestionResponse

Hierarchy

Expanded class hierarchy of QuizfileuploadResponse

1 string reference to 'QuizfileuploadResponse'
quizfileupload_quiz_question_info in ./quizfileupload.module
Implementation of hook_quiz_question_info().

File

./quizfileupload.classes.inc, line 171
The main classes for the multichoice question type.

View source
class QuizfileuploadResponse extends QuizQuestionResponse {

  /**
   * Constructor
   */
  public function __construct($result_id, stdClass $question_node, $tries = NULL) {
    $tries = $_FILES;
    $this->answer = $tries;
    $result->is_correct = TRUE;
    $this->question->score_weight = NULL;
    parent::__construct($result_id, $question_node, $tries);
    if (!isset($answer)) {

      // Question has been answered allready. We fetch the answer data from the database.
      $sql = 'SELECT * FROM {quiz_fileupload_user_answers}
        WHERE question_nid = %d AND question_vid = %d AND result_id = %d';
      $r = db_fetch_object(db_query($sql, $question_node->nid, $question_node->vid, $result_id));
      if (!empty($r)) {
        $this->score = $r->score;
        $this->evaluated = $r->is_evaluated;
        $this->answer_id = $r->answer_id;
      }
    }
    else {
      $this->score = variable_get('quizfileupload_default_score', 0);
      $this->evaluated = TRUE;
    }
  }

  /**
   * Implementation of isValid
   *
   * @see QuizQuestionResponse#isValid()
   */
  public function isValid() {
    $dir = variable_get('file_directory_path', 'sites/default/files');
    $is_writable = file_check_directory($dir, 1);
    if (!$is_writable) {
      return t('File system path is not writable. Contact administrator to check settings at url /admin/settings/file-system');
    }
    if (isset($this->answer['files']['type']['tries']) && empty($this->answer['files']['type']['tries'])) {
      $file = db_fetch_object(db_query('SELECT filename, filepath FROM {files} f
        INNER JOIN {quiz_fileupload_user_answers} qf ON (f.fid = qf.fid)
        WHERE answer_id = %d', $this->answer_id));
      if (is_object($file)) {

        // Don't throw error as the file has been already attached.
        return TRUE;
      }
      else {
        return t('Please upload a valid file.');
      }
    }
    if (isset($this->answer['files']['type']['tries']) && !empty($this->answer['files']['type']['tries'])) {
      $file = file_save_upload('tries', array(), file_directory_path());
      if (!$file) {
        form_set_error('field', 'Error uploading file.');
        return;
      }
      $message = quizfileupload_validate_extensions($file, $this->question->filetypes);
      return empty($message) ? TRUE : $message[0];
    }
    return FALSE;
  }

  /**
   * Implementation of save
   *
   * @see QuizQuestionResponse#save()
   */
  public function save() {
    if ($this
      ->isValid() !== TRUE) {
      return;
    }
    $file = file_save_upload('tries', array(), file_directory_path());
    file_set_status($file, FILE_STATUS_PERMANENT);
    $sql = 'INSERT INTO {quiz_fileupload_user_answers}
          (result_id, question_vid, question_nid, fid, score)
          VALUES (%d, %d, %d, "%s", %d)';
    db_query($sql, $this->rid, $this->question->vid, $this->question->nid, $file->fid, $this
      ->score());
    $this->answer_id = db_last_insert_id('quiz_fileupload_user_answers', 'answer_id');
  }

  /**
   * Implementation of delete
   *
   * @see QuizQuestionResponse#delete()
   */
  public function delete() {
    $sql = 'DELETE FROM {quiz_fileupload_user_answers} WHERE result_id = %d AND question_nid = %d AND question_vid = %d';
    db_query($sql, $this->rid, $this->question->nid, $this->question->vid);
  }

  /**
   * Implementation of score
   *
   * @return uint
   *
   * @see QuizQuestionResponse#score()
   */
  public function score() {
    return variable_get('quizfileupload_default_score', 0);
  }

  /**
   * Implementation of getResponse
   *
   * @return answer
   *
   * @see QuizQuestionResponse#getResponse()
   */
  public function getResponse() {
    return $this->answer;
  }

  /**
   * Implementation of getReportFormResponse
   *
   * @see getReportFormResponse($showpoints, $showfeedback, $allow_scoring)
   */
  public function getReportFormResponse($showpoints = TRUE, $showfeedback = TRUE, $allow_scoring = FALSE) {
    $answer_id = $this->answer_id;
    $file = db_fetch_object(db_query('SELECT filename, filepath FROM {files} f
      INNER JOIN {quiz_fileupload_user_answers} qf ON (f.fid = qf.fid)
      WHERE answer_id = %d', $answer_id));

    // Return themed report
    return array(
      '#type' => 'markup',
      '#value' => is_object($file) ? l($file->filename, file_create_url($file->filepath)) : t('n/a'),
    );
  }

}

Members

Namesort descending Modifiers Type Description Overrides
QuizfileuploadResponse::delete public function Implementation of delete
QuizfileuploadResponse::getReportFormResponse public function Implementation of getReportFormResponse
QuizfileuploadResponse::getResponse public function Implementation of getResponse
QuizfileuploadResponse::isValid public function Implementation of isValid
QuizfileuploadResponse::save public function Implementation of save
QuizfileuploadResponse::score public function Implementation of score
QuizfileuploadResponse::__construct public function Constructor