? mod/assignment/type/turnitin
Index: mod/assignment/lib.php
===================================================================
RCS file: /cvsroot/moodle/moodle/mod/assignment/lib.php,v
retrieving revision 1.277.2.46
diff -u -r1.277.2.46 lib.php
--- mod/assignment/lib.php	23 Sep 2008 07:46:53 -0000	1.277.2.46
+++ mod/assignment/lib.php	6 Nov 2008 09:56:03 -0000
@@ -1336,6 +1336,13 @@
         }
         /// End of fast grading form
 
+        // print button offering zip file function to teacher
+        $options["id"] = "$cm->id";
+        $options["download"] = "zip";
+        echo '<div align="center">';
+        print_single_button("submissions.php",$options, "Zip & Download all submissions");
+        echo '</div>';
+
         /// Mini form for setting user preference
         echo '<div class="qgprefs">';
         echo '<form id="options" action="submissions.php?id='.$this->cm->id.'" method="post"><div>';
Index: mod/assignment/submissions.php
===================================================================
RCS file: /cvsroot/moodle/moodle/mod/assignment/submissions.php,v
retrieving revision 1.43
diff -u -r1.43 submissions.php
--- mod/assignment/submissions.php	28 Aug 2006 08:42:30 -0000	1.43
+++ mod/assignment/submissions.php	6 Nov 2008 09:56:03 -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: mod/assignment/type/online/assignment.class.php
===================================================================
RCS file: /cvsroot/moodle/moodle/mod/assignment/type/online/assignment.class.php,v
retrieving revision 1.46.2.8
diff -u -r1.46.2.8 assignment.class.php
--- mod/assignment/type/online/assignment.class.php	24 Jul 2008 11:11:58 -0000	1.46.2.8
+++ mod/assignment/type/online/assignment.class.php	6 Nov 2008 09:56:03 -0000
@@ -261,6 +261,90 @@
 
     }
 
+    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";
+		
+
+
+        $course     = $this->course;
+        $assignment = $this->assignment;
+        $cm         = $this->cm;
+        $context    = get_context_instance(CONTEXT_MODULE, $cm->id);
+	$groupmode = groupmode($course,$cm);
+	$groupid = 0;	// All users
+	if($groupmode) $groupid = get_current_group($course->id, $full = false);
+	$count = 0;
+
+     
+
+
+
+	foreach ($submit as $tp) {
+		$a_userid = $tp->userid; //get userid
+		if ( (groups_is_member( $groupid,$a_userid)or !$groupmode or !$groupid)) {
+		$count = $count + 1;
+			
+		$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,0777,true); 
+			    }
+
+	              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
+
+
+
+	        if ($count) zip_files($filesforzipping, $desttemp.$filename);  // check for no files
+
+	        //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: mod/assignment/type/upload/assignment.class.php
===================================================================
RCS file: /cvsroot/moodle/moodle/mod/assignment/type/upload/assignment.class.php,v
retrieving revision 1.32.2.15
diff -u -r1.32.2.15 assignment.class.php
--- mod/assignment/type/upload/assignment.class.php	9 Oct 2008 11:22:14 -0000	1.32.2.15
+++ mod/assignment/type/upload/assignment.class.php	6 Nov 2008 09:56:03 -0000
@@ -1054,6 +1054,91 @@
 
     }
 
+    function download_submissions() {
+	        global $CFG;
+
+	        $submissions = $this->get_submissions('','');
+
+	        $filesforzipping = array();
+	        $filesnewname = array();
+	        $desttemp = "";
+
+	        //create prefix of new filename
+		$filenewname = clean_filename($this->assignment->name. "_");
+		$course     = $this->course;
+		$assignment = $this->assignment;
+		$cm         = $this->cm;
+		$context    = get_context_instance(CONTEXT_MODULE, $cm->id);
+		$groupmode = groupmode($course,$cm);
+		$groupid = 0;	// All users
+		if($groupmode) $groupid = get_current_group($course->id, $full = false);
+		$count = 0;
+
+
+	        foreach ($submissions as $submission) {
+			    
+
+
+		$a_userid = $submission->userid; //get userid
+		if ( (groups_is_member( $groupid,$a_userid)or !$groupmode or !$groupid)) {
+		$count = $count + 1;
+
+			    $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');
+				$filecleaned = clean_filename($file);  //remove any slashes
+
+	                        //get files new name.
+	   $filesforzip = $desttemp . $a_user->username . "_" . $filenewname . "_" . $filecleaned;  
+
+
+	                        //get files old name
+	                        $fileold = $CFG->dataroot . "/" . $filearea . "/" . $file;
+
+	                        if (!copy($fileold, $filesforzip)) {
+						        error ("failed to copy file<br>" . $filesforzip . "<br>" .$fileold);
+						    }
+
+	                        //save file name to array for zipping.
+	                        $filesforzipping[] = $filesforzip;
+	                    }
+	                }
+	            }
+	    }    }		// end of foreach loop
+
+	        //zip files
+	        $filename = "assignment.zip"; //name of new zip file.
+	        if ($count) 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: mod/assignment/type/uploadsingle/assignment.class.php
===================================================================
RCS file: /cvsroot/moodle/moodle/mod/assignment/type/uploadsingle/assignment.class.php,v
retrieving revision 1.33.2.5
diff -u -r1.33.2.5 assignment.class.php
--- mod/assignment/type/uploadsingle/assignment.class.php	8 Apr 2008 03:02:49 -0000	1.33.2.5
+++ mod/assignment/type/uploadsingle/assignment.class.php	6 Nov 2008 09:56:03 -0000
@@ -180,6 +180,84 @@
 
     }
 
+    function download_submissions() {
+	        global $CFG;
+
+	        $submissions = $this->get_submissions('','');
+
+	        $filesforzipping = array();
+	        $filesnewname = array();
+	        $desttemp = "";
+
+	        //create prefix of new filename
+		$filenewname = clean_filename($this->assignment->name. "_");
+		$course     = $this->course;
+		$assignment = $this->assignment;
+		$cm         = $this->cm;
+		$context    = get_context_instance(CONTEXT_MODULE, $cm->id);
+		$groupmode = groupmode($course,$cm);
+		$groupid = 0;	// All users
+		if($groupmode) $groupid = get_current_group($course->id, $full = false);
+		$count = 0;
+
+	        foreach ($submissions as $submission) {
+		$a_userid = $submission->userid; //get userid
+		if ( (groups_is_member( $groupid,$a_userid)or !$groupmode or !$groupid)) {
+		$count = $count + 1;
+
+			    $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<br>" . $filesforzip . "<br>" .$fileold);
+						    }
+
+	                        //save file name to array for zipping.
+	                        $filesforzipping[] = $filesforzip;
+	                    }
+	                }
+	            }
+	        }   }     // End of foreach
+
+	        //zip files
+	        $filename = "assignment.zip"; //name of new zip file.
+	        if ($count) zip_files($filesforzipping, $desttemp.$filename);
+		// skip if no files zipped
+	        //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);
+	        }
+	    }
+
 }
 
 ?>
