diff --git a/mod/assign/feedback/file/importzipform.php b/mod/assign/feedback/file/importzipform.php index 4ed2bfa5d57..433d205251d 100644 --- a/mod/assign/feedback/file/importzipform.php +++ b/mod/assign/feedback/file/importzipform.php @@ -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) { diff --git a/mod/assign/feedback/file/importziplib.php b/mod/assign/feedback/file/importziplib.php index c59477f634f..b5f40c19a3d 100644 --- a/mod/assign/feedback/file/importziplib.php +++ b/mod/assign/feedback/file/importziplib.php @@ -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++; diff --git a/mod/assign/locallib.php b/mod/assign/locallib.php index 5d44ce84494..e7b7b5f6ef1 100644 --- a/mod/assign/locallib.php +++ b/mod/assign/locallib.php @@ -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; } } } diff --git a/mod/assign/submission/file/locallib.php b/mod/assign/submission/file/locallib.php index 506eeaa7c0e..c2e9dcffb7f 100644 --- a/mod/assign/submission/file/locallib.php +++ b/mod/assign/submission/file/locallib.php @@ -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; }