Index: lib.php =================================================================== RCS file: /cvsroot/moodle/moodle/mod/assignment/lib.php,v retrieving revision 1.219.2.10 diff -u -r1.219.2.10 lib.php --- lib.php 15 May 2007 18:27:12 -0000 1.219.2.10 +++ lib.php 7 Jun 2007 22:40:25 -0000 @@ -1183,6 +1183,13 @@ } /// End of fast grading form + // print button offering zip file function to teacher + $options["id"] = "$cm->id"; + $options["download"] = "zip"; + echo '
'; + print_single_button("submissions.php",$options, "Zip & Download all submissions"); + echo '
'; + /// Mini form for setting user preference echo '
'; echo '
'; Index: submissions.php =================================================================== RCS file: /cvsroot/moodle/moodle/mod/assignment/submissions.php,v retrieving revision 1.43 diff -u -r1.43 submissions.php --- submissions.php 28 Aug 2006 08:42:30 -0000 1.43 +++ submissions.php 7 Jun 2007 22:32:32 -0000 @@ -6,6 +6,7 @@ $id = optional_param('id', 0, PARAM_INT); // Course module ID $a = optional_param('a', 0, PARAM_INT); // Assignment ID $mode = optional_param('mode', 'all', PARAM_ALPHA); // What mode are we in? + $download = optional_param('download' , 'none', PARAM_ALPHA); //ZIP download asked for? if ($id) { if (! $cm = get_coursemodule_from_id('assignment', $id)) { @@ -40,6 +41,10 @@ $assignmentclass = 'assignment_'.$assignment->assignmenttype; $assignmentinstance = new $assignmentclass($cm->id, $assignment, $cm, $course); - $assignmentinstance->submissions($mode); // Display or process the submissions +if($download == "zip") { + $assignmentinstance->download_submissions(); + } else { + $assignmentinstance->submissions($mode); // Display or process the submissions + } ?> Index: type/online/assignment.class.php =================================================================== RCS file: /cvsroot/moodle/moodle/mod/assignment/type/online/assignment.class.php,v retrieving revision 1.43.2.1 diff -u -r1.43.2.1 assignment.class.php --- type/online/assignment.class.php 30 Mar 2007 02:09:07 -0000 1.43.2.1 +++ type/online/assignment.class.php 7 Jun 2007 22:34:08 -0000 @@ -259,6 +259,73 @@ } + function download_submissions() { + global $CFG; + $submit = $this->get_submissions('',''); + + $filesforzipping = array(); + $filesnewname = array(); + $desttemp = ""; + + //create zip filename + $filename = "online_assignment.zip"; + + //online assignment can use html + $file=".html"; + + + foreach ($submit as $tp) { + $a_userid = $tp->userid; //get userid + $a_assignid = $tp->assignment; //get name of this assignment for use in the file names. + + $a_user = get_complete_user_data("id", $a_userid); //get user + + $filearea = $this->file_area_name($a_userid); + + $submission = $tp->data1; //fetched from mysql database + + $desttemp = $CFG->dataroot . "/" . substr($filearea, 0, strripos($filearea, "/")). "/temp/"; + //get temp directory name + + if (!file_exists($desttemp)) { //create temp dir if it doesn't already exist. + mkdir($desttemp); + } + + require_once($CFG->libdir.'/filelib.php'); + + //get file name.html + $filesforzip = $desttemp . $a_user->firstname ."_". $a_user->lastname . $file; + + + $fd = fopen($filesforzip,'wb'); //create if not exist, write binary + fwrite( $fd, $submission); + fclose( $fd ); + + //save file name to array for zipping. + $filesforzipping[] = $filesforzip; + } //end of foreach + + //zip files + + + + zip_files($filesforzipping, $desttemp.$filename); + + //delete old temp files + foreach ($filesforzipping as $filefor) { + unlink($filefor); + } + + //send file to user. + if (file_exists($desttemp.$filename)) { + header ("Cache-Control: must-revalidate, post-check=0, pre-check=0"); + header ("Content-Type: application/octet-stream"); + header ("Content-Length: " . filesize($desttemp.$filename)); + header ("Content-Disposition: attachment; filename=$filename"); + readfile($desttemp.$filename); + } + } + } class mod_assignment_online_edit_form extends moodleform { Index: type/upload/assignment.class.php =================================================================== RCS file: /cvsroot/moodle/moodle/mod/assignment/type/upload/assignment.class.php,v retrieving revision 1.29.2.1 diff -u -r1.29.2.1 assignment.class.php --- type/upload/assignment.class.php 5 Apr 2007 02:11:24 -0000 1.29.2.1 +++ type/upload/assignment.class.php 7 Jun 2007 22:32:49 -0000 @@ -953,6 +953,73 @@ } + function download_submissions() { + global $CFG; + + $submissions = $this->get_submissions('',''); + + $filesforzipping = array(); + $filesnewname = array(); + $desttemp = ""; + + //create prefix of new filename + $filenewname = $this->assignment->name. "_"; + + foreach ($submissions as $submission) { + $a_userid = $submission->userid; //get userid + $a_assignid = $submission->assignment; //get name of this assignment for use in the file names. + + $a_user = get_complete_user_data("id", $a_userid); //get user + + $filearea = $this->file_area_name($a_userid); + + $desttemp = $CFG->dataroot . "/" . substr($filearea, 0, strrpos($filearea, "/")). "/temp/"; //get temp directory name + + if (!file_exists($desttemp)) { //create temp dir if it doesn't already exist. + mkdir($desttemp); + } + + if ($basedir = $this->file_area($a_userid)) { + if ($files = get_directory_list($basedir)) { + foreach ($files as $key => $file) { + require_once($CFG->libdir.'/filelib.php'); + + //get files new name. + $filesforzip = $desttemp . $a_user->username . "_" . $filenewname . "_" . $file; + + //get files old name + $fileold = $CFG->dataroot . "/" . $filearea . "/" . $file; + + if (!copy($fileold, $filesforzip)) { + error ("failed to copy file
" . $filesforzip . "
" .$fileold); + } + + //save file name to array for zipping. + $filesforzipping[] = $filesforzip; + } + } + } + } + + //zip files + $filename = "assignment.zip"; //name of new zip file. + zip_files($filesforzipping, $desttemp.$filename); + + //delete old temp files + foreach ($filesforzipping as $filefor) { + unlink($filefor); + } + + //send file to user. + if (file_exists($desttemp.$filename)) { + header ("Cache-Control: must-revalidate, post-check=0, pre-check=0"); + header ("Content-Type: application/octet-stream"); + header ("Content-Length: " . filesize($desttemp.$filename)); + header ("Content-Disposition: attachment; filename=$filename"); + readfile($desttemp.$filename); + } + } + } class mod_assignment_upload_notes_form extends moodleform { Index: type/uploadsingle/assignment.class.php =================================================================== RCS file: /cvsroot/moodle/moodle/mod/assignment/type/uploadsingle/assignment.class.php,v retrieving revision 1.30.2.1 diff -u -r1.30.2.1 assignment.class.php --- type/uploadsingle/assignment.class.php 5 Apr 2007 03:18:45 -0000 1.30.2.1 +++ type/uploadsingle/assignment.class.php 7 Jun 2007 22:37:37 -0000 @@ -180,6 +180,73 @@ } + function download_submissions() { + global $CFG; + + $submissions = $this->get_submissions('',''); + + $filesforzipping = array(); + $filesnewname = array(); + $desttemp = ""; + + //create prefix of new filename + $filenewname = $this->assignment->name. "_"; + + foreach ($submissions as $submission) { + $a_userid = $submission->userid; //get userid + $a_assignid = $submission->assignment; //get name of this assignment for use in the file names. + + $a_user = get_complete_user_data("id", $a_userid); //get user + + $filearea = $this->file_area_name($a_userid); + + $desttemp = $CFG->dataroot . "/" . substr($filearea, 0, strrpos($filearea, "/")). "/temp/"; //get temp directory name + + if (!file_exists($desttemp)) { //create temp dir if it doesn't already exist. + mkdir($desttemp); + } + + if ($basedir = $this->file_area($a_userid)) { + if ($files = get_directory_list($basedir)) { + foreach ($files as $key => $file) { + require_once($CFG->libdir.'/filelib.php'); + + //get files new name. + $filesforzip = $desttemp . $a_user->username . "_" . $filenewname . "_" . $file; + + //get files old name + $fileold = $CFG->dataroot . "/" . $filearea . "/" . $file; + + if (!copy($fileold, $filesforzip)) { + error ("failed to copy file
" . $filesforzip . "
" .$fileold); + } + + //save file name to array for zipping. + $filesforzipping[] = $filesforzip; + } + } + } + } + + //zip files + $filename = "assignment.zip"; //name of new zip file. + zip_files($filesforzipping, $desttemp.$filename); + + //delete old temp files + foreach ($filesforzipping as $filefor) { + unlink($filefor); + } + + //send file to user. + if (file_exists($desttemp.$filename)) { + header ("Cache-Control: must-revalidate, post-check=0, pre-check=0"); + header ("Content-Type: application/octet-stream"); + header ("Content-Length: " . filesize($desttemp.$filename)); + header ("Content-Disposition: attachment; filename=$filename"); + readfile($desttemp.$filename); + } + } + } ?>