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 inject_task_set_possible_groups($task_set_id) { $task_sets = new Task_set(); $task_sets->where('group_id', NULL); $task_sets->include_related('course/group'); $task_sets->where('id', (int) $task_set_id); $task_sets->where_subquery(0, '(SELECT COUNT(`tsp`.`id`) AS `count` FROM `task_set_permissions` tsp WHERE `tsp`.`task_set_id` = `task_sets`.`id` AND `tsp`.`enabled` = 1)'); $task_sets2 = new Task_set(); $task_sets2->where('id', (int) $task_set_id); $task_sets2->include_related('task_set_permission/group', '*', 'course_group'); $task_sets2->where_related('task_set_permission', 'enabled', 1); $task_sets2->group_start(' NOT '); $task_sets2->or_where_subquery(0, '(SELECT COUNT(`tsp`.`id`) AS `count` FROM `task_set_permissions` tsp WHERE `tsp`.`task_set_id` = `task_sets`.`id` AND `tsp`.`enabled` = 1)'); $task_sets2->or_where_subquery(1, '(SELECT COUNT(`tsp`.`id`) AS `count` FROM `task_set_permissions` tsp WHERE `tsp`.`task_set_id` = `task_sets`.`id` AND `tsp`.`enabled` = 1)'); $task_sets2->group_end(); $task_sets->union_iterated($task_sets2, FALSE, $task_sets->union_order_by_constant('course_group_name', 'asc')); $data = array('' => ''); foreach ($task_sets as $task_set) { $data[$task_set->course_group_id] = $task_set->course_group_name; } $this->parser->assign('possible_groups', $data); }
public function send_deadline_notifications($lang_idiom = NULL) { $this->load->database(); $this->load->model('translations'); if (!is_null($lang_idiom)) { $this->lang->reinitialize_for_idiom($lang_idiom); } $translations = $this->translations->get_translations_for_idiom($this->lang->get_current_idiom()); $this->lang->add_custom_translations($translations); $this->lang->load('cli'); $current_time = Date('Y-m-d H:i:s'); $one_day_back_time = Date('Y-m-d H:i:s', strtotime('now -1 day')); $task_sets1 = new Task_set(); $task_sets1->select('id, name, course_id, group_id AS common_group_id, upload_end_time AS common_upload_end_time, deadline_notified AS common_deadline_notified, deadline_notification_emails AS common_deadline_notification_emails, deadline_notification_emails_handler AS common_deadline_notification_emails_handler'); $task_sets1->select('null AS `task_set_permission_id`', FALSE); $task_sets1->where('deadline_notified', 0); $task_sets1->where('deadline_notification_emails_handler >', 0); $task_sets1->group_start(); $task_sets1->not_group_start(); $task_sets1->where('upload_end_time', NULL); $task_sets1->group_end(); $task_sets1->where('upload_end_time <', $current_time); $task_sets1->where('upload_end_time >=', $one_day_back_time); $task_sets1->group_end(); $task_sets1->where_subquery(0, '(SELECT COUNT(`tsp`.`id`) AS `count` FROM `task_set_permissions` tsp WHERE `tsp`.`task_set_id` = `task_sets`.`id` AND `tsp`.`enabled` = 1)'); $task_sets1->where('published', 1); $task_sets2 = new Task_set(); $task_sets2->select('id, name, course_id'); $task_sets2->include_related('task_set_permission', 'group_id', 'common'); $task_sets2->include_related('task_set_permission', 'upload_end_time', 'common'); $task_sets2->include_related('task_set_permission', 'deadline_notified', 'common'); $task_sets2->include_related('task_set_permission', 'deadline_notification_emails', 'common'); $task_sets2->include_related('task_set_permission', 'deadline_notification_emails_handler', 'common'); $task_sets2->include_related('task_set_permission', 'id'); $task_sets2->where_related('task_set_permission', 'enabled', 1); $task_sets2->where_related('task_set_permission', 'deadline_notified', 0); $task_sets2->where_related('task_set_permission', 'deadline_notification_emails_handler >', 0); $task_sets2->group_start(); $task_sets2->not_group_start(); $task_sets2->where_related('task_set_permission', 'upload_end_time', NULL); $task_sets2->group_end(); $task_sets2->where_related('task_set_permission', 'upload_end_time <', $current_time); $task_sets2->where_related('task_set_permission', 'upload_end_time >=', $one_day_back_time); $task_sets2->group_end(); $task_sets2->where('published', 1); $task_sets1->union_iterated($task_sets2, TRUE); $this->load->library('email'); $sent_notifications = 0; foreach ($task_sets1 as $task_set) { if ($task_set->common_deadline_notification_emails_handler > 0) { $emails = trim($task_set->common_deadline_notification_emails) != '' ? explode(',', $task_set->common_deadline_notification_emails) : array(); array_walk($emails, function (&$email, $key) { $email = trim($email); }); if ($task_set->common_deadline_notification_emails_handler == 1) { $groups = new Group(); $groups->where_related('course', 'id', $task_set->course_id); $groups->include_related('room/teacher', '*'); $groups->group_start('NOT'); $groups->where_related('room', 'id', null); $groups->or_where_related('room/teacher', 'id', null); $groups->group_end(); $groups->group_by_related('room/teacher', 'email'); if (!is_null($task_set->common_group_id)) { $groups->where('id', $task_set->common_group_id); } $groups->get_iterated(); foreach ($groups as $teacher) { if (trim($teacher->room_teacher_email) != '') { $email = trim($teacher->room_teacher_email); if (!in_array($email, $emails)) { $emails[] = $email; } } } } $group = new Group(); if (!is_null($task_set->common_group_id)) { $group->get_by_id((int) $task_set->common_group_id); } if (count($emails)) { $this->email->from_system(); $this->email->reply_to_system(); $this->email->build_message_body('file:emails/cli/deadline_notification.tpl', array('task_set' => $task_set, 'group' => $group)); if ($this->config->item('email_multirecipient_batch_mode')) { $this->email->to($emails); $this->email->subject('LIST: ' . $this->lang->line('cli_deadline_notification_subject')); $this->email->send(); } else { foreach ($emails as $email) { $this->email->to($email); $this->email->subject('TEST'); $this->email->send(); } } $sent_notifications++; if (!is_null($task_set->task_set_permission_id)) { $task_set_permission = new Task_set_permission(); $task_set_permission->get_by_id($task_set->task_set_permission_id); if ($task_set_permission->exists()) { $task_set_permission->deadline_notified = 1; $task_set_permission->save(); } } else { $task_set_update = new Task_set(); $task_set_update->get_by_id($task_set->id); if ($task_set_update->exists()) { $task_set_update->deadline_notified = 1; $task_set_update->save(); } } } } } echo "Process finished, {$sent_notifications} notifications were sent ...\n"; }