public function get_solution_version_metadata($task_set_id, $solution_id, $solution_file) { $task_set = new Task_set(); $task_set->where_related('solution', 'id', $solution_id); $task_set->include_related('solution/student', 'id'); $task_set->get_by_id($task_set_id); if ($task_set->exists()) { $file_name = decode_from_url($solution_file); $file_info = $task_set->get_specific_file_info($file_name); $this->parser->assign('file_last_modified', $file_info['last_modified']); $solution_version = new Solution_version(); $solution_version->where('version', $file_info['version']); $solution_version->where_related('solution', 'id', $solution_id); $solution_version->get(); if (!$solution_version->exists()) { $solution_version = new Solution_version(); $solution_version->version = (int) $file_info['version']; $solution_version->solution_id = (int) $solution_id; $solution_version->save(); } //$solution_version->check_last_query(); $this->parser->assign('solution_version', $solution_version); $this->parser->assign('task_set', $task_set); } $this->parser->parse('backend/solutions/version_metadata.tpl'); }
public function download_solution($task_set_id, $file) { if ($this->usermanager->is_student_session_valid() && !Restriction::check_restriction_for_ip_address() || $this->usermanager->is_teacher_session_valid()) { $task_set = new Task_set(); $task_set->get_by_id(intval($task_set_id)); if ($task_set->exists()) { $filename = decode_from_url($file); $file_info = $task_set->get_specific_file_info($filename); if ($file_info !== FALSE) { $allow_download = TRUE; if (!$this->usermanager->is_teacher_session_valid()) { $solution_version = new Solution_version(); $solution_version->where('version', $file_info['version']); $solution_version->where_related('solution/task_set', 'id', $task_set_id); $solution_version->get(); if ($solution_version->exists()) { if ((bool) $solution_version->download_lock) { $allow_download = FALSE; } } } if ($allow_download) { $log = new Log(); if (!$this->usermanager->is_teacher_session_valid()) { $log->add_student_solution_download_log($this->lang->line('tasks_log_message_student_solution_download'), $this->usermanager->get_student_id(), $filename, $task_set->id); } $filename = $file_info['file_name'] . '_' . $file_info['version'] . '.zip'; $finfo = finfo_open(FILEINFO_MIME_TYPE); $mime_type = finfo_file($finfo, $file_info['filepath']); finfo_close($finfo); header('Content-Description: File Transfer'); header('Content-Type: ' . $mime_type); header('Content-Disposition: attachment; filename=' . $filename); header('Content-Transfer-Encoding: binary'); header('Expires: 0'); header('Cache-Control: must-revalidate'); header('Pragma: public'); header('Content-Length: ' . filesize($file_info['filepath'])); ob_clean(); flush(); $f = fopen($file_info['filepath'], 'r'); while (!feof($f)) { echo fread($f, 1024); } fclose($f); exit; } else { $this->parser->parse('frontend/tasks/download_solution.tpl', array('version_download_disabled' => TRUE)); } } else { $this->output->set_status_header(404, 'Not found'); } } else { $this->output->set_status_header(404, 'Not found'); } } else { $this->parser->parse('frontend/tasks/download_solution.tpl'); } }