MDL-20636 Essay question type, make is_same_response consider files. #216

This commit is contained in:
Tim Hunt
2011-03-31 12:45:07 +01:00
parent 217f9a618c
commit cd3557e64c
3 changed files with 38 additions and 12 deletions
+35 -2
View File
@@ -954,6 +954,12 @@ class question_file_saver {
/** @var string the file area name. */
protected $filearea;
/**
* @var string the value to store in the question_attempt_step_data to
* represent these files.
*/
protected $value = null;
/**
* Constuctor.
* @param int $draftitemid the draft area to save the files from.
@@ -966,9 +972,36 @@ class question_file_saver {
$this->filearea = $filearea;
}
protected function get_value() {
global $USER;
if (!is_null($this->value)) {
return $this->value;
}
$fs = get_file_storage();
$usercontext = get_context_instance(CONTEXT_USER, $USER->id);
$files = $fs->get_area_files($usercontext->id, 'user', 'draft',
$this->draftitemid, 'sortorder, filepath, filename', false);
$string = '';
foreach ($files as $file) {
$string .= $file->get_filepath() . $file->get_filename() . '|' .
$file->get_contenthash() . '|';
}
if ($string) {
$this->value = md5($string);
} else {
$this->value = '';
}
return $this->value;
}
public function __toString() {
// When stored in the database, we want this value to appear as 1.
return '1';
return $this->get_value();
}
/**
-9
View File
@@ -2086,8 +2086,6 @@ class question_attempt {
* behaves as if there were no files.
*/
protected function process_response_files($name, $postdata = null) {
global $USER;
if ($postdata) {
// There can be no files with test data (at the moment).
return null;
@@ -2098,13 +2096,6 @@ class question_attempt {
return null;
}
$fs = get_file_storage();
$usercontext = get_context_instance(CONTEXT_USER, $USER->id);
if ($fs->is_area_empty($usercontext->id, 'user', 'draft', $draftitemid)) {
return null;
}
return new question_file_saver($draftitemid, 'question', 'response_' .
str_replace($this->get_field_prefix(), '', $name));
}
+3 -1
View File
@@ -82,7 +82,9 @@ class qtype_essay_question extends question_with_responses {
public function is_same_response(array $prevresponse, array $newresponse) {
return question_utils::arrays_same_at_key_missing_is_blank(
$prevresponse, $newresponse, 'answer');
$prevresponse, $newresponse, 'answer') && ($this->attachments == 0 ||
question_utils::arrays_same_at_key_missing_is_blank(
$prevresponse, $newresponse, 'attachments'));
}
public function check_file_access($qa, $options, $component, $filearea, $args, $forcedownload) {