MDL-39359 - mod/assign: Allow zipped folder to be uploaded for returning feedback files

The "Upload multiple feedback files in a zip" feature is convenient, but requires that
the files sit directly within the zip file. As the files will most likely be extracted
to a folder after downloading, it's quite reasonable to expect teachers to zip the
folder up rather than selecting all files and zipping them.  This patch allows for a
zipped folder to be uploaded; if the only file found after extracting is a directory,
the contents of the directory are used instead of the results of the extraction.
This commit is contained in:
Paul Nicholls 2013-04-26 12:38:42 +12:00
parent ffc3f5308b
commit 381e6d7359

View file

@ -194,6 +194,17 @@ class assignfeedback_file_zip_importer {
$USER->id,
'/import/');
$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;
}
@ -205,7 +216,7 @@ class assignfeedback_file_zip_importer {
* @return string - The html response
*/
public function import_zip_files($assignment, $fileplugin) {
global $USER, $CFG, $PAGE, $DB;
global $CFG, $PAGE, $DB;
@set_time_limit(ASSIGNFEEDBACK_FILE_MAXFILEUNZIPTIME);
$packer = get_file_packer('application/zip');
@ -216,11 +227,7 @@ class assignfeedback_file_zip_importer {
$contextid = $assignment->get_context()->id;
$fs = get_file_storage();
$files = $fs->get_directory_files($contextid,
'assignfeedback_file',
ASSIGNFEEDBACK_FILE_IMPORT_FILEAREA,
$USER->id,
'/import/');
$files = $this->get_import_files($contextid);
$currentgroup = groups_get_activity_group($assignment->get_course_module(), true);
$allusers = $assignment->list_participants($currentgroup, false);