예제 #1
0
 public function render()
 {
     if (isset($this->config['course_id'])) {
         $course = new Course();
         $course->include_related('period');
         $course->get_by_id((int) $this->config['course_id']);
         $this->parser->assign('course', $course);
         if ($course->exists()) {
             $task_sets = new Task_set();
             $task_sets->where_related($course);
             $task_sets->where('published', 1);
             $task_sets->where('content_type', 'task_set');
             $task_sets_count = $task_sets->count();
             $this->parser->assign('task_sets_count', $task_sets_count);
             $task_sets->where_related($course);
             $task_sets->where('published', 1);
             $task_sets->where('content_type', 'project');
             $projects_count = $task_sets->count();
             $this->parser->assign('projects_count', $projects_count);
             $groups = new Group();
             $groups->where_related($course);
             $groups_count = $groups->count();
             $this->parser->assign('groups_count', $groups_count);
             $students = new Student();
             $students->where_related('participant/course', 'id', $course->id);
             $students->where_related('participant', 'allowed', 1);
             $students_count = $students->count();
             $this->parser->assign('students_count', $students_count);
             $task_set_permissions = new Task_set_permission();
             $task_set_permissions->select_func('COUNT', '*', 'count');
             $task_set_permissions->where('enabled', 1);
             $task_set_permissions->where_related('task_set', 'id', '${parent}.id');
             $now = date('Y-m-d H:i:s');
             $plus_two_weeks = date('Y-m-d H:i:s', strtotime($now . ' + 2 weeks'));
             $minus_one_week = date('Y-m-d H:i:s', strtotime($now . ' - 1 week'));
             $task_sets->select('id, name, upload_end_time AS min_upload_end_time, upload_end_time AS max_upload_end_time');
             $task_sets->where_related($course);
             $task_sets->where('published', 1);
             $task_sets->where_subquery('0', $task_set_permissions);
             $task_sets->where('upload_end_time >=', $minus_one_week);
             $task_sets->where('upload_end_time <=', $plus_two_weeks);
             $task_sets_2 = new Task_set();
             $task_sets_2->select('id, name');
             $task_sets_2->where_related($course);
             $task_sets_2->where('published', 1);
             $task_sets_2->select_min('task_set_permissions.upload_end_time', 'min_upload_end_time');
             $task_sets_2->select_max('task_set_permissions.upload_end_time', 'max_upload_end_time');
             $task_sets_2->where_related('task_set_permission', 'enabled', 1);
             $task_sets_2->having('(MAX(`task_set_permissions`.`upload_end_time`) >= ' . $this->db->escape($minus_one_week) . ' AND MAX(`task_set_permissions`.`upload_end_time`) <= ' . $this->db->escape($plus_two_weeks) . ')');
             $task_sets_2->or_having('(MIN(`task_set_permissions`.`upload_end_time`) >= ' . $this->db->escape($minus_one_week) . ' AND MIN(`task_set_permissions`.`upload_end_time`) <= ' . $this->db->escape($plus_two_weeks) . ')');
             $task_sets_2->group_by('id');
             $task_sets->union_iterated($task_sets_2, FALSE, 'min_upload_end_time DESC, max_upload_end_time DESC', isset($this->config['number_of_task_sets']) ? (int) $this->config['number_of_task_sets'] : 5);
             $this->parser->assign('task_sets', $task_sets);
         }
     }
     $this->parser->parse('widgets/admin/course_overview/main.tpl');
 }
예제 #2
0
 public function update_permission($task_set_id, $task_set_permission_id)
 {
     $this->load->library('form_validation');
     $this->form_validation->set_rules('task_set_permission[group_id]', 'lang:admin_task_sets_form_field_group_id', 'required');
     $task_set_permission_data = $this->input->post('task_set_permission');
     $this->form_validation->set_rules('task_set_permission[deadline_notification_emails_handler]', 'lang:admin_task_sets_form_field_deadline_notification_emails_handler', 'required');
     if (isset($task_set_permission_data['deadline_notification_emails_handler']) && $task_set_permission_data['deadline_notification_emails_handler'] == 2) {
         $this->form_validation->set_rules('task_set_permission[deadline_notification_emails]', 'lang:admin_task_sets_form_field_deadline_notification_emails', 'required|valid_emails');
     } else {
         $this->form_validation->set_rules('task_set_permission[deadline_notification_emails]', 'lang:admin_task_sets_form_field_deadline_notification_emails', 'zero_or_more_valid_emails');
     }
     if ($this->form_validation->run()) {
         $this->_transaction_isolation();
         $this->db->trans_begin();
         $task_set = new Task_set();
         $task_set->get_by_id((int) $task_set_id);
         $task_set_permission = new Task_set_permission();
         $task_set_permission->get_by_id((int) $task_set_permission_id);
         if ($task_set->exists() && !is_null($task_set->course_id)) {
             if ($task_set_permission->exists() && $task_set_permission->is_related_to($task_set)) {
                 $task_set_permission_upload_end_time = $task_set_permission->upload_end_time;
                 $task_set_permission->enabled = isset($task_set_permission_data['enabled']) ? 1 : 0;
                 $task_set_permission->group_id = $task_set_permission_data['group_id'];
                 $task_set_permission->room_id = intval($task_set_permission_data['room_id']) > 0 ? intval($task_set_permission_data['room_id']) : NULL;
                 $task_set_permission->publish_start_time = preg_match(Task_sets::REGEXP_PATTERN_DATETYME, $task_set_permission_data['publish_start_time']) ? $task_set_permission_data['publish_start_time'] : NULL;
                 $task_set_permission->upload_end_time = preg_match(Task_sets::REGEXP_PATTERN_DATETYME, $task_set_permission_data['upload_end_time']) ? $task_set_permission_data['upload_end_time'] : NULL;
                 $task_set_permission->deadline_notification_emails = $task_set_permission_data['deadline_notification_emails'];
                 $task_set_permission->deadline_notification_emails_handler = $task_set_permission_data['deadline_notification_emails_handler'];
                 if ($task_set_permission->upload_end_time !== $task_set_permission_upload_end_time) {
                     $task_set_permission->deadline_notified = 0;
                 }
                 if ($task_set_permission->save()) {
                     $task_set_permissions = new Task_set_permission();
                     $task_set_permissions->where_related($task_set);
                     $task_set_permissions->where('group_id', $task_set_permission->group_id);
                     if ($task_set_permissions->count() > 1) {
                         $this->db->trans_rollback();
                         $this->messages->add_message('lang:admin_task_set_permissions_error_message_cant_save_for_the_same_group', Messages::MESSAGE_TYPE_ERROR);
                     } else {
                         $this->db->trans_commit();
                         $this->messages->add_message('lang:admin_task_set_permissions_success_message_saved', Messages::MESSAGE_TYPE_SUCCESS);
                         $this->_action_success();
                     }
                 } else {
                     $this->db->trans_rollback();
                     $this->messages->add_message('lang:admin_task_set_permissions_error_message_cant_save', Messages::MESSAGE_TYPE_ERROR);
                 }
             } else {
                 $this->db->trans_rollback();
                 $this->messages->add_message('lang:admin_task_set_permissions_error_message_cant_find_task_set_permission_or_is_not_related_to_task_set', Messages::MESSAGE_TYPE_ERROR);
             }
         } else {
             $this->db->trans_rollback();
             $this->messages->add_message('lang:admin_task_set_permissions_error_message_cant_find_task_set_or_course', Messages::MESSAGE_TYPE_ERROR);
         }
         redirect(create_internal_url('admin_task_set_permissions/edit_permission/' . (int) $task_set_id) . '/' . (int) $task_set_permission_id);
     } else {
         $this->edit_permission($task_set_id, $task_set_permission_id);
     }
 }
예제 #3
0
 private function inject_batch_valuation($task_set_id)
 {
     $filter = $this->input->post('filter');
     $filter = is_array($filter) && count($filter) > 0 ? $filter : $this->get_batch_valuation_filter((int) $task_set_id);
     $this->store_batch_valuation_filter($filter, (int) $task_set_id);
     $task_set = new Task_set();
     $task_set->get_by_id($task_set_id);
     $task_set_permissions = new Task_set_permission();
     $task_set_permissions->where_related($task_set);
     $task_set_permissions->where('enabled', 1);
     $task_set_permissions->get_iterated();
     $solutions = new Solution();
     $solutions->where_related($task_set);
     $solutions->group_by('student_id');
     if (isset($filter['group']) && (int) $filter['group'] > 0) {
         $solutions->where_related('student/participant/group', 'id', (int) $filter['group']);
     }
     $solutions->get_iterated();
     $additional_student_ids = array(0);
     foreach ($solutions as $solution) {
         $additional_student_ids[] = $solution->student_id;
     }
     $data = array();
     if ($task_set->exists()) {
         $students = new Student();
         $students->where_related('participant', 'allowed', 1);
         $students->where_related('participant/course/task_set', 'id', intval($task_set_id));
         if ($task_set_permissions->result_count() == 0) {
             if (!is_null($task_set->group_id)) {
                 $students->where_related('participant/group', 'id', intval($task_set->group_id));
             }
         } else {
             $group_ids = array();
             foreach ($task_set_permissions as $task_set_permission) {
                 $group_ids[] = (int) $task_set_permission->group_id;
             }
             $students->where_in_related('participant/group', 'id', $group_ids);
         }
         $students->include_related('solution');
         $students->add_join_condition('`solutions`.`task_set_id` = ?', array($task_set->id));
         $students->order_by_as_fullname('fullname', 'asc');
         $students->order_by('email', 'asc');
         if (isset($filter['group']) && (int) $filter['group'] > 0) {
             $students->where_related('participant/group', 'id', (int) $filter['group']);
         }
         $students->or_where_in('id', $additional_student_ids);
         $students->get_iterated();
         foreach ($students as $student) {
             $data[$student->id] = clone $student;
         }
     }
     $this->parser->assign('batch_valuation_students', $data);
 }
예제 #4
0
 public function clone_task_set()
 {
     $url = $this->uri->ruri_to_assoc(3);
     $task_set_id = isset($url['task_set_id']) ? intval($url['task_set_id']) : 0;
     $result = new stdClass();
     $result->result = FALSE;
     $result->message = $this->lang->line('admin_task_sets_error_task_set_not_found');
     if ($task_set_id !== 0) {
         $this->_transaction_isolation();
         $this->db->trans_begin();
         $task_set = new Task_set();
         $task_set->get_by_id($task_set_id);
         if ($task_set->exists()) {
             $new_task_set = $task_set->get_copy();
             $new_task_set->published = 0;
             if ($new_task_set->save()) {
                 $this->lang->clone_overlays('task_sets', $task_set->id, $new_task_set->id);
                 $tasks = new Task();
                 $tasks->include_join_fields();
                 $tasks->where_related_task_set($task_set);
                 $tasks->get_iterated();
                 foreach ($tasks as $task) {
                     $new_task_set->save_task($task);
                     $task->set_join_field($new_task_set, 'sorting', $task->join_sorting);
                     $task->set_join_field($new_task_set, 'points_total', $task->join_points_total);
                     $task->set_join_field($new_task_set, 'test_min_points', $task->join_test_min_points);
                     $task->set_join_field($new_task_set, 'test_max_points', $task->join_test_max_points);
                     $task->set_join_field($new_task_set, 'bonus_task', $task->join_bonus_task);
                     $task->set_join_field($new_task_set, 'max_projects_selections', $task->join_max_projects_selections);
                 }
                 $task_set_permissions = new Task_set_permission();
                 $task_set_permissions->where_related($task_set);
                 $task_set_permissions->get_iterated();
                 foreach ($task_set_permissions as $task_set_permission) {
                     $new_task_set_permission = $task_set_permission->get_copy();
                     $new_task_set_permission->save($new_task_set);
                 }
                 if ($this->db->trans_status()) {
                     $this->db->trans_commit();
                     $result->result = TRUE;
                     $result->message = $this->lang->line('admin_task_sets_success_task_set_cloned');
                     $this->_action_success();
                 } else {
                     $this->db->trans_rollback();
                     $result->message = $this->lang->line('admin_task_sets_error_task_set_cant_be_cloned');
                 }
             } else {
                 $this->db->trans_rollback();
                 $result->message = $this->lang->line('admin_task_sets_error_task_set_cant_be_cloned');
             }
         } else {
             $this->db->trans_rollback();
         }
     }
     $this->output->set_content_type('application/json');
     $this->output->set_output(json_encode($result));
 }