Пример #1
0
 public function solution_version_switch_download_lock($solution_version_id)
 {
     $this->_transaction_isolation();
     $this->db->trans_begin();
     $output = new stdClass();
     $output->status = FALSE;
     $output->value = FALSE;
     $output->message = $this->lang->line('admin_solutions_valuation_version_metadata_download_lock_error_cant_found');
     $solution_version = new Solution_version();
     $solution_version->include_related('solution');
     $solution_version->get_by_id((int) $solution_version_id);
     if ($solution_version->exists()) {
         $output->value = $solution_version->download_lock == 0 ? FALSE : TRUE;
         $solution_version->download_lock = $solution_version->download_lock == 0 ? 1 : 0;
         if ($solution_version->save()) {
             $output->value = $solution_version->download_lock == 0 ? FALSE : TRUE;
             $output->status = TRUE;
             if ($output->value) {
                 $output->message = $this->lang->line('admin_solutions_valuation_version_metadata_download_lock_enabled');
             } else {
                 $output->message = $this->lang->line('admin_solutions_valuation_version_metadata_download_lock_disabled');
             }
             $this->db->trans_commit();
             $this->_action_success();
             $this->output->set_internal_value('student_id', (int) $solution_version->solution_student_id);
         } else {
             $output->message = $this->lang->line('admin_solutions_valuation_version_metadata_download_lock_error_cant_save');
             $this->db->trans_rollback();
         }
     }
     $this->output->set_content_type('application/json');
     $this->output->set_output(json_encode($output));
 }
Пример #2
0
 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');
     }
 }