예제 #1
0
 /**
  * creates a zip of all assignment submissions and sends a zip to the browser
  */
 public function download_submissions()
 {
     global $CFG, $DB;
     raise_memory_limit(MEMORY_EXTRA);
     $submissions = $this->get_submissions('', '');
     if (empty($submissions)) {
         print_error('errornosubmissions', 'assignment');
     }
     $filesforzipping = array();
     //NOTE: do not create any stuff in temp directories, we now support unicode file names and that would not work, sorry
     //online assignment can use html
     $filextn = ".html";
     $groupmode = groups_get_activity_groupmode($this->cm);
     $groupid = 0;
     // All users
     $groupname = '';
     if ($groupmode) {
         $groupid = groups_get_activity_group($this->cm, true);
         $groupname = groups_get_group_name($groupid) . '-';
     }
     $filename = str_replace(' ', '_', clean_filename($this->course->shortname . '-' . $this->assignment->name . '-' . $groupname . $this->assignment->id . ".zip"));
     //name of new zip file.
     foreach ($submissions as $submission) {
         $a_userid = $submission->userid;
         //get userid
         if (groups_is_member($groupid, $a_userid) or !$groupmode or !$groupid) {
             $a_assignid = $submission->assignment;
             //get name of this assignment for use in the file names.
             $a_user = $DB->get_record("user", array("id" => $a_userid), 'id,username,firstname,lastname');
             //get user firstname/lastname
             $submissioncontent = "<html><body>" . format_text($submission->data1, $submission->data2) . "</body></html>";
             //fetched from database
             //get file name.html
             $fileforzipname = clean_filename(fullname($a_user) . "_" . $a_userid . $filextn);
             $filesforzipping[$fileforzipname] = array($submissioncontent);
         }
     }
     //end of foreach
     if ($zipfile = assignment_pack_files($filesforzipping)) {
         send_temp_file($zipfile, $filename);
         //send file and delete after sending.
     }
 }
예제 #2
0
    /**
     * creates a zip of all assignment submissions and sends a zip to the browser
     */
    public function download_submissions() {
        global $CFG,$DB;
        require_once($CFG->libdir.'/filelib.php');
        $submissions = $this->get_submissions('','');
        if (empty($submissions)) {
            print_error('errornosubmissions', 'assignment', new moodle_url('/mod/assignment/submissions.php', array('id'=>$this->cm->id)));
        }
        $filesforzipping = array();
        $fs = get_file_storage();

        $groupmode = groups_get_activity_groupmode($this->cm);
        $groupid = 0;   // All users
        $groupname = '';
        if ($groupmode) {
            $groupid = groups_get_activity_group($this->cm, true);
            $groupname = groups_get_group_name($groupid).'-';
        }
        $filename = str_replace(' ', '_', clean_filename($this->course->shortname.'-'.$this->assignment->name.'-'.$groupname.$this->assignment->id.".zip")); //name of new zip file.
        foreach ($submissions as $submission) {
            // If assignment is open and submission is not finalized then don't add it to zip.
            $submissionstatus = $this->is_finalized($submission);
            if ($this->isopen() && empty($submissionstatus)) {
                continue;
            }
            $a_userid = $submission->userid; //get userid
            if ((groups_is_member($groupid,$a_userid)or !$groupmode or !$groupid)) {
                $a_assignid = $submission->assignment; //get name of this assignment for use in the file names.
                $a_user = $DB->get_record("user", array("id"=>$a_userid),'id,username,firstname,lastname'); //get user firstname/lastname

                $files = $fs->get_area_files($this->context->id, 'mod_assignment', 'submission', $submission->id, "timemodified", false);
                foreach ($files as $file) {
                    //get files new name.
                    $fileext = strstr($file->get_filename(), '.');
                    $fileoriginal = str_replace($fileext, '', $file->get_filename());
                    $fileforzipname =  clean_filename(fullname($a_user) . "_" . $fileoriginal."_".$a_userid.$fileext);
                    //save file name to array for zipping.
                    $filesforzipping[$fileforzipname] = $file;
                }
            }
        } // end of foreach loop

        // Throw error if no files are added.
        if (empty($filesforzipping)) {
            print_error('errornosubmissions', 'assignment', new moodle_url('/mod/assignment/submissions.php', array('id'=>$this->cm->id)));
        }

        if ($zipfile = assignment_pack_files($filesforzipping)) {
            send_temp_file($zipfile, $filename); //send file and delete after sending.
        }
    }