}
//Unblock user session
session_write_close();
$zip = new ZipArchive();
$zipfilename = tempnam($CFG->dataroot . '/temp/', 'vpl_zipdownloadall');
if ($zip->open($zipfilename, ZIPARCHIVE::CREATE)) {
    foreach ($all_data as $data) {
        $user = $data->userinfo;
        $fgm = $data->submission->get_submitted_fgm();
        $zipdirname = vpl_selzipdirname($user->lastname . ' ' . $user->firstname);
        //Create directory
        $zip->addEmptyDir($zipdirname);
        $zipdirname .= '/';
        $sourcedir = $data->submission->get_submission_directory() . '/';
        foreach ($fgm->getFileList() as $filename) {
            $source = file_group_process::encodeFileName($filename);
            $zip->addFile($sourcedir . $source, $zipdirname . $filename);
        }
        if ($includeCE) {
            $CE = $data->submission->getCE();
            if (!($CE['compilation'] === 0)) {
                $zip->addFromString($zipdirname . 'vpl_data/compilation.txt', $CE['compilation']);
                if ($CE['executed']) {
                    $zip->addFromString($zipdirname . 'vpl_data/execution.txt', $CE['execution']);
                }
            }
        }
    }
    $zip->close();
    //Get zip data
    $data = file_get_contents($zipfilename);
 /**
  * Get list of files
  *
  * @return string[]
  */
 function getFileList()
 {
     return array_values(array_unique(array_merge(self::$base_files, parent::getFileList())));
 }