public function do_upload_student_solution($solution_id) { $this->_transaction_isolation(); $this->db->trans_begin(); $solution = new Solution(); $solution->include_related('task_set', '*', TRUE, TRUE); $solution->include_related('student'); $solution->get_by_id((int) $solution_id); if ($solution->exists()) { if ($solution->task_set->exists()) { $allowed_file_types_array = trim($solution->task_set->allowed_file_types) != '' ? array_map('trim', explode(',', $solution->task_set->allowed_file_types)) : array(); $config['upload_path'] = 'private/uploads/solutions/task_set_' . intval($solution->task_set->id) . '/'; $config['allowed_types'] = 'zip' . (count($allowed_file_types_array) ? '|' . implode('|', $allowed_file_types_array) : ''); $config['max_size'] = intval($this->config->item('maximum_solition_filesize')); $config['file_name'] = $solution->student_id . '_' . $this->normalize_student_name($solution->student_fullname) . '_' . substr(md5(time() . rand(-500000, 500000)), 0, 4) . '_' . $solution->task_set->get_student_file_next_version($solution->student_id) . '.zip'; @mkdir($config['upload_path'], DIR_READ_MODE); $this->load->library('upload', $config); if ($this->upload->do_upload('upload')) { $upload_data = $this->upload->data(); $mimes = $this->upload->mimes_types('zip'); if (is_array($mimes) && !in_array($upload_data['file_type'], $mimes) || is_string($mimes) && $upload_data['file_type'] != $mimes) { if (!$this->zip_plain_file_to_archive($upload_data['full_path'], $upload_data['client_name'], $upload_data['file_path'])) { $this->messages->add_message('lang:admin_solutions_upload_cant_zip_file', Messages::MESSAGE_TYPE_ERROR); redirect(create_internal_url('admin_solutions/student_solution_upload/' . intval($solution_id))); die; } } $solution->revalidate = 1; $solution->save(); if ($this->db->trans_status()) { $log = new Log(); $log->add_teacher_solution_upload_log(sprintf($this->lang->line('admin_solutions_upload_log_message'), $config['file_name']), $this->usermanager->get_teacher_id(), $solution->student_id, $solution->id); $this->db->trans_commit(); $this->messages->add_message('lang:admin_solutions_upload_success', Messages::MESSAGE_TYPE_SUCCESS); $this->_action_success(); $this->output->set_internal_value('student_id', $solution->student_id); } else { $this->db->trans_rollback(); @unlink($config['upload_path'] . $config['file_name']); $this->messages->add_message('lang:admin_solutions_upload_failed', Messages::MESSAGE_TYPE_ERROR); } redirect(create_internal_url('admin_solutions/student_solution_upload/' . intval($solution_id))); } else { $this->db->trans_rollback(); $this->parser->assign('file_error_message', $this->upload->display_errors('', '')); $this->student_solution_upload($solution_id); } } else { $this->db->trans_rollback(); $this->messages->add_message('lang:admin_solutions_upload_task_set_not_found', Messages::MESSAGE_TYPE_ERROR); } } else { $this->db->trans_rollback(); $this->student_solution_upload($solution_id); } }
public function details($log_id) { $log = new Log(); $log->include_related('student'); $log->include_related('teacher'); $log->get_by_id($log_id); if ($log->exists()) { if ($log->log_type == Log::LOG_TYPE_STUDENT_SOLUTION_UPLOAD || $log->log_type == Log::LOG_TYPE_TEACHER_SOLUTION_UPLOAD) { $solution = new Solution(); $solution->include_related('student'); $solution->include_related('task_set'); $solution->include_related('task_set/course'); $solution->include_related('task_set/course/period'); $solution->get_by_id((int) $log->affected_row_primary_id); $this->parser->assign('solution', $solution); } elseif ($log->log_type == Log::LOG_TYPE_STUDENT_SOLUTION_DOWNLOAD) { $additional_data = unserialize($log->additional_data); $task_set = new Task_set(); $task_set->include_related('course'); $task_set->include_related('course/period'); $task_set->get_by_id(@$additional_data['task_set_id']); $this->parser->assign(array('task_set' => $task_set, 'filename' => @$additional_data['solution_file'])); } } $this->parser->add_css_file('admin_logs.css'); $this->parser->parse('backend/logs/details.tpl', array('log' => $log)); }