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'); }
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); } }
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); }
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)); }