From 6ad4b78fcf4db2bfe4d1f845e91d1daa7ff7c493 Mon Sep 17 00:00:00 2001 From: aparup Date: Tue, 13 Jul 2010 09:54:59 +0000 Subject: [PATCH] Assignment MDL-22893 - response files uploading now uses the new file manager element in advanced upload type. (@TODO: single upload->use file picker) - fixed file manager using $USER->id, now using the submission->userid to display the file area files. --- .../type/upload/assignment.class.php | 51 +++++++++---------- mod/assignment/type/upload/upload.php | 34 +++++++++++-- mod/assignment/type/upload/upload_form.php | 2 + 3 files changed, 57 insertions(+), 30 deletions(-) diff --git a/mod/assignment/type/upload/assignment.class.php b/mod/assignment/type/upload/assignment.class.php index f6e6fbc509a..b67891ec223 100644 --- a/mod/assignment/type/upload/assignment.class.php +++ b/mod/assignment/type/upload/assignment.class.php @@ -200,7 +200,7 @@ class assignment_upload extends assignment_base { } else { $str = get_string('uploadfiles', 'assignment'); } - echo $OUTPUT->single_button(new moodle_url('/mod/assignment/type/upload/upload.php', array('contextid'=>$this->context->id)), $str, 'get'); + echo $OUTPUT->single_button(new moodle_url('/mod/assignment/type/upload/upload.php', array('contextid'=>$this->context->id, 'userid'=>$submission->userid)), $str, 'get'); } } @@ -265,21 +265,23 @@ class assignment_upload extends assignment_base { } function custom_feedbackform($submission, $return=false) { - global $CFG; + global $CFG, $OUTPUT; $mode = optional_param('mode', '', PARAM_ALPHA); $offset = optional_param('offset', 0, PARAM_INT); $forcerefresh = optional_param('forcerefresh', 0, PARAM_BOOL); - $mform = new mod_assignment_upload_response_form("$CFG->wwwroot/mod/assignment/upload.php", $this); - - $mform->set_data(array('id'=>$this->cm->id, 'offset'=>$offset, 'forcerefresh'=>$forcerefresh, 'userid'=>$submission->userid, 'mode'=>$mode)); + if ($this->count_responsefiles($submission->userid) > 0) { + $str = get_string('editthesefiles', 'assignment'); + } else { + $str = get_string('uploadfiles', 'assignment'); + } $output = get_string('responsefiles', 'assignment').': '; - ob_start(); - $mform->display(); - $output = ob_get_clean(); + $output .= $OUTPUT->single_button(new moodle_url('/mod/assignment/type/upload/upload.php', + array('contextid'=>$this->context->id,'id'=>$this->cm->id, 'offset'=>$offset, + 'forcerefresh'=>$forcerefresh, 'userid'=>$submission->userid, 'mode'=>$mode)), $str, 'get'); if ($forcerefresh) { $output .= $this->update_main_listing($submission); @@ -418,7 +420,6 @@ class assignment_upload extends assignment_base { */ function upload($mform = null, $filemanager_options = null) { $action = required_param('action', PARAM_ALPHA); - error_log($action); switch ($action) { case 'finalize': $this->finalize(); @@ -430,7 +431,7 @@ class assignment_upload extends assignment_base { $this->unfinalize(); break; case 'uploadresponse': - $this->upload_responsefile(); + $this->upload_responsefile($mform, $filemanager_options); break; case 'uploadfile': $this->upload_file($mform, $filemanager_options); @@ -508,7 +509,7 @@ class assignment_upload extends assignment_base { die; } - function upload_responsefile() { + function upload_responsefile($mform, $options) { global $CFG, $USER, $OUTPUT, $PAGE; $userid = required_param('userid', PARAM_INT); @@ -516,17 +517,13 @@ class assignment_upload extends assignment_base { $offset = required_param('offset', PARAM_INT); $returnurl = new moodle_url("submissions.php", array('id'=>$this->cm->id,'userid'=>$userid,'mode'=>$mode,'offset'=>$offset)); //not xhtml, just url. - $mform = new mod_assignment_upload_response_form(null, $this); - if ($mform->get_data() and $this->can_manage_responsefiles()) { + + if ($formdata = $mform->get_data() and $this->can_manage_responsefiles()) { $fs = get_file_storage(); - $filename = $mform->get_new_filename('newfile'); - if ($filename !== false) { - $submission = $this->get_submission($userid, true, true); - if (!$fs->file_exists($this->context->id, 'mod_assignment', 'response', $submission->id, '/', $filename)) { - if ($file = $mform->save_stored_file('newfile', $this->context->id, 'mod_assignment', 'response', $submission->id, '/', $filename, false, $USER->id)) { - redirect($returnurl->out(false)); - } - } + $submission = $this->get_submission($userid, true, true); + if ($formdata = file_postupdate_standard_filemanager($formdata, 'files', $options, $this->context, 'mod_assignment', 'response', $submission->id)) { + $returnurl = new moodle_url("/mod/assignment/submissions.php", array('id'=>$this->cm->id,'userid'=>$formdata->userid,'mode'=>$formdata->mode,'offset'=>$formdata->offset)); + redirect($returnurl->out(false)); } } $PAGE->set_title(get_string('upload')); @@ -1187,20 +1184,22 @@ class mod_assignment_upload_response_form extends moodleform { $instance = $this->_customdata; // visible elements - $mform->addElement('file', 'newfile', get_string('uploadafile')); + $mform->addElement('filemanager', 'files_filemanager', get_string('uploadafile'), null, $instance->options); // hidden params $mform->addElement('hidden', 'id', $instance->cm->id); $mform->setType('id', PARAM_INT); + $mform->addElement('hidden', 'contextid', $instance->contextid); + $mform->setType('contextid', PARAM_INT); $mform->addElement('hidden', 'action', 'uploadresponse'); $mform->setType('action', PARAM_ALPHA); - $mform->addElement('hidden', 'mode'); + $mform->addElement('hidden', 'mode', $instance->mode); $mform->setType('mode', PARAM_ALPHA); - $mform->addElement('hidden', 'offset'); + $mform->addElement('hidden', 'offset', $instance->offset); $mform->setType('offset', PARAM_INT); - $mform->addElement('hidden', 'forcerefresh'); + $mform->addElement('hidden', 'forcerefresh' , $instance->forcerefresh); $mform->setType('forcerefresh', PARAM_INT); - $mform->addElement('hidden', 'userid'); + $mform->addElement('hidden', 'userid', $instance->userid); $mform->setType('userid', PARAM_INT); // buttons diff --git a/mod/assignment/type/upload/upload.php b/mod/assignment/type/upload/upload.php index 866b0078406..cea36529470 100644 --- a/mod/assignment/type/upload/upload.php +++ b/mod/assignment/type/upload/upload.php @@ -28,8 +28,16 @@ require_once(dirname(__FILE__).'/assignment.class.php'); require_once("$CFG->dirroot/repository/lib.php"); $contextid = required_param('contextid', PARAM_INT); +$id = optional_param('id', null, PARAM_INT); -$url = new moodle_url('/mod/assignment/type/upload/upload.php', array('contextid'=>$contextid)); +$formdata = new object(); +$formdata->userid = required_param('userid', PARAM_INT); +$formdata->offset = optional_param('offset', null, PARAM_INT); +$formdata->forcerefresh = optional_param('forcerefresh', null, PARAM_INT); +$formdata->mode = optional_param('mode', null, PARAM_ALPHA); + +$url = new moodle_url('/mod/assignment/type/upload/upload.php', array('contextid'=>$contextid, + 'id'=>$id,'offset'=>$formdata->offset,'forcerefresh'=>$formdata->forcerefresh,'userid'=>$formdata->userid,'mode'=>$formdata->mode)); list($context, $course, $cm) = get_context_info_array($contextid); @@ -49,14 +57,26 @@ $PAGE->set_title($title); $PAGE->set_heading($title); $instance = new assignment_upload($cm->id, $assignment, $cm, $course); -$submission = $instance->get_submission($USER->id, true); +$submission = $instance->get_submission($formdata->userid, true); $filemanager_options = array('subdirs'=>1, 'maxbytes'=>$assignment->maxbytes, 'maxfiles'=>$assignment->var1, 'accepted_types'=>'*', 'return_types'=>FILE_INTERNAL); -$mform = new mod_assignment_upload_form(null, array('contextid'=>$contextid, 'options'=>$filemanager_options)); +if ($id==null) { + $mform = new mod_assignment_upload_form(null, array('contextid'=>$contextid, 'userid'=>$formdata->userid, 'options'=>$filemanager_options)); +} else { + $formdata->cm->id = $id; + $formdata->contextid = $contextid; + $formdata->options = $filemanager_options; + $mform = new mod_assignment_upload_response_form(null, $formdata); +} if ($mform->is_cancelled()) { - redirect(new moodle_url('/mod/assignment/view.php', array('id'=>$cm->id))); + if ($id==null) { + redirect(new moodle_url('/mod/assignment/view.php', array('id'=>$cm->id))); + } else { + $instance->display_submission($formdata->offset, $formdata->userid); + die(); + } } else if ($formdata = $mform->get_data()) { $instance->upload($mform, $filemanager_options); die; @@ -72,6 +92,12 @@ if ($instance->can_upload_file($submission)) { // set file manager itemid, so it will find the files in draft area $mform->set_data($data); $mform->display(); +} else if ($instance->can_manage_responsefiles() && !($id==null)) { //a 'response' files upload + // move submission files to user draft area + $formdata = file_prepare_standard_filemanager($formdata, 'files', $filemanager_options, $context, 'mod_assignment', 'response', $submission->id); + // set file manager itemid, so it will find the files in draft area + $mform->set_data($formdata); + $mform->display(); } else { echo $OUTPUT->notification(get_string('uploaderror', 'assignment')); echo $OUTPUT->continue_button(new moodle_url('/mod/assignment/view.php', array('id'=>$cm->id))); diff --git a/mod/assignment/type/upload/upload_form.php b/mod/assignment/type/upload/upload_form.php index e7fbd436267..ecfa5d3bc6d 100644 --- a/mod/assignment/type/upload/upload_form.php +++ b/mod/assignment/type/upload/upload_form.php @@ -32,6 +32,8 @@ class mod_assignment_upload_form extends moodleform { // hidden params $mform->addElement('hidden', 'contextid', $instance['contextid']); $mform->setType('contextid', PARAM_INT); + $mform->addElement('hidden', 'userid', $instance['userid']); + $mform->setType('userid', PARAM_INT); $mform->addElement('hidden', 'action', 'uploadfile'); $mform->setType('action', PARAM_ALPHA);