MDL-52489 mod_assign: Download all submissions as a zip copy.

This commit is contained in:
evltuma
2016-02-26 12:09:30 +08:00
committed by Mark Nelson
parent 03b8b55f10
commit 18a5b4d85c
4 changed files with 26 additions and 24 deletions
+3 -2
View File
@@ -81,6 +81,7 @@ class assignfeedback_file_import_zip_form extends moodleform implements renderab
if ($importer->is_file_modified($assignment, $user, $plugin, $filename, $unzippedfile)) {
// Get a string we can show to identify this user.
$userdesc = fullname($user);
$path = pathinfo($filename);
if ($assignment->is_blind_marking()) {
$userdesc = get_string('hiddenuser', 'assign') .
$assignment->get_uniqueid_for_user($user->id);
@@ -93,8 +94,8 @@ class assignfeedback_file_import_zip_form extends moodleform implements renderab
'assignfeedback_file',
ASSIGNFEEDBACK_FILE_FILEAREA,
$grade->id,
'/',
$filename);
$path['dirname'],
$path['basename']);
}
if (!$grade || !$exists) {
+7 -15
View File
@@ -59,7 +59,7 @@ class assignfeedback_file_zip_importer {
return false;
}
$info = explode('_', $fileinfo->get_filename(), 5);
preg_match('#.*_([0-9]{1,})_(.*)_(.*)_(.*)#i', $fileinfo->get_filepath().$fileinfo->get_filename(), $info);
if (count($info) < 5) {
return false;
@@ -192,18 +192,9 @@ class assignfeedback_file_zip_importer {
'assignfeedback_file',
ASSIGNFEEDBACK_FILE_IMPORT_FILEAREA,
$USER->id,
'/import/');
'/import/', true); // Get files recursive (all levels).
$keys = array_keys($files);
if (count($files) == 1 && $files[$keys[0]]->is_directory()) {
// An entire folder was zipped, rather than its contents.
// We need to return the contents of the folder instead, so the import can continue.
$files = $fs->get_directory_files($contextid,
'assignfeedback_file',
ASSIGNFEEDBACK_FILE_IMPORT_FILEAREA,
$USER->id,
$files[$keys[0]]->get_filepath());
}
return $files;
}
@@ -245,13 +236,14 @@ class assignfeedback_file_zip_importer {
if ($this->is_valid_filename_for_import($assignment, $unzippedfile, $participants, $user, $plugin, $filename)) {
if ($this->is_file_modified($assignment, $user, $plugin, $filename, $unzippedfile)) {
$grade = $assignment->get_user_grade($user->id, true);
$path = pathinfo($filename);
if ($oldfile = $fs->get_file($contextid,
'assignfeedback_file',
ASSIGNFEEDBACK_FILE_FILEAREA,
$grade->id,
'/',
$filename)) {
$path['dirname'],
$path['basename'])) {
// Update existing feedback file.
$oldfile->replace_file_with($unzippedfile);
$feedbackfilesupdated++;
@@ -261,8 +253,8 @@ class assignfeedback_file_zip_importer {
$newfilerecord->contextid = $contextid;
$newfilerecord->component = 'assignfeedback_file';
$newfilerecord->filearea = ASSIGNFEEDBACK_FILE_FILEAREA;
$newfilerecord->filename = $filename;
$newfilerecord->filepath = '/';
$newfilerecord->filename = $path['basename'];
$newfilerecord->filepath = $path['dirname']."/";
$newfilerecord->itemid = $grade->id;
$fs->create_file_from_storedfile($newfilerecord, $unzippedfile);
$feedbackfilesadded++;
+15 -6
View File
@@ -2722,26 +2722,35 @@ class assign {
if ($this->is_blind_marking()) {
$prefix = str_replace('_', ' ', $groupname . get_string('participant', 'assign'));
$prefix = clean_filename($prefix . '_' . $this->get_uniqueid_for_user($userid) . '_');
$prefix = clean_filename($prefix . '_' . $this->get_uniqueid_for_user($userid));
} else {
$prefix = str_replace('_', ' ', $groupname . fullname($student));
$prefix = clean_filename($prefix . '_' . $this->get_uniqueid_for_user($userid) . '_');
$prefix = clean_filename($prefix . '_' . $this->get_uniqueid_for_user($userid));
}
if ($submission) {
foreach ($this->submissionplugins as $plugin) {
if ($plugin->is_enabled() && $plugin->is_visible()) {
$pluginfiles = $plugin->get_files($submission, $student);
foreach ($pluginfiles as $zipfilename => $file) {
foreach ($pluginfiles as $zipfilepath => $file) {
$subtype = $plugin->get_subtype();
$type = $plugin->get_type();
$zipfilename = basename($zipfilepath);
$prefixedfilename = clean_filename($prefix .
'_' .
$subtype .
'_' .
$type .
'_' .
$zipfilename);
$filesforzipping[$prefixedfilename] = $file;
'_');
if ($type == 'file') {
$pathfilename = $prefixedfilename . $file->get_filepath() . $zipfilename;
} else if ($type == 'onlinetext') {
$pathfilename = $prefixedfilename . '/' . $zipfilename;
} else {
$pathfilename = $prefixedfilename . '/' . $zipfilename;
}
$pathfilename = clean_param($pathfilename, PARAM_PATH);
$filesforzipping[$pathfilename] = $file;
}
}
}
+1 -1
View File
@@ -304,7 +304,7 @@ class assign_submission_file extends assign_submission_plugin {
false);
foreach ($files as $file) {
$result[$file->get_filename()] = $file;
$result[$file->get_filepath().$file->get_filename()] = $file;
}
return $result;
}