/** * Display the notification settings of a user. */ public function index_action() { $group_field = UserConfig::get($this->user->user_id)->MY_COURSES_GROUPING ?: 'not_grouped'; $add_fields = $add_query = ''; if ($group_field == 'sem_tree_id') { $add_fields = ',sem_tree_id'; $add_query = "LEFT JOIN seminar_sem_tree sst ON (sst.seminar_id=seminare.Seminar_id)"; } else { if ($group_field == 'dozent_id') { $add_fields = ', su1.user_id as dozent_id'; $add_query = "LEFT JOIN seminar_user as su1 ON (su1.seminar_id=seminare.Seminar_id AND su1.status='dozent')"; } } $dbv = DbView::getView('sem_tree'); $query = "SELECT seminare.VeranstaltungsNummer AS sem_nr, seminare.Name, seminare.Seminar_id,\n seminare.status AS sem_status, seminar_user.gruppe, seminare.visible,\n {$dbv->sem_number_sql} AS sem_number, {$dbv->sem_number_end_sql} AS sem_number_end\n {$add_fields}\n FROM seminar_user\n LEFT JOIN seminare USING (Seminar_id)\n {$add_query}\n WHERE seminar_user.user_id = ?"; if (get_config('DEPUTIES_ENABLE')) { $query .= " UNION " . getMyDeputySeminarsQuery('notification', $dbv->sem_number_sql, $dbv->sem_number_end_sql, $add_fields, $add_query); } $query .= " ORDER BY sem_nr ASC"; $statement = DBManager::get()->prepare($query); $statement->execute(array($this->user->user_id)); $seminars = $statement->fetchAll(PDO::FETCH_ASSOC); if (!count($seminars)) { $message = sprintf(_('Sie haben zur Zeit keine Veranstaltungen belegt. Bitte nutzen Sie %s<b>Veranstaltung suchen / hinzufügen</b>%s um sch für Veranstaltungen anzumdelden.'), '<a href="' . URLHelper::getLink('dispatch.php/search/courses') . '">', '</a>'); PageLayout::postMessage(MessageBox::info($message)); $this->set_layout($GLOBALS['template_factory']->open('layouts/base_without_infobox')); $this->render_nothing(); return; } $modules = new ModulesNotification(); $enabled_modules = $modules->getGlobalEnabledNotificationModules('sem'); $groups = array(); $my_sem = array(); foreach ($seminars as $seminar) { $my_sem[$seminar['Seminar_id']] = array('obj_type' => "sem", 'sem_nr' => $seminar['sem_nr'], 'name' => $seminar['Name'], 'visible' => $seminar['visible'], 'gruppe' => $seminar['gruppe'], 'sem_status' => $seminar['sem_status'], 'sem_number' => $seminar['sem_number'], 'sem_number_end' => $seminar['sem_number_end']); if ($group_field) { fill_groups($groups, $seminar[$group_field], array('seminar_id' => $seminar['Seminar_id'], 'sem_nr' => $seminar['sem_nr'], 'name' => $seminar['Name'], 'gruppe' => $seminar['gruppe'])); } } if ($group_field == 'sem_number') { correct_group_sem_number($groups, $my_sem); } else { add_sem_name($my_sem); } sort_groups($group_field, $groups); $group_names = get_group_names($group_field, $groups); $notifications = $modules->getModuleNotification(); $open = UserConfig::get($this->user->user_id)->MY_COURSES_OPEN_GROUPS; $checked = array(); foreach ($groups as $group_id => $group_members) { if ($group_id !== 'not_grouped' && !isset($open[$group_id])) { continue; } foreach ($group_members as $member) { $checked[$member['seminar_id']] = array(); foreach (array_values($enabled_modules) as $index => $m_data) { $checked[$member['seminar_id']][$index] = $modules->isBit($notifications[$member['seminar_id']], $m_data['id']); } $checked[$member['seminar_id']]['all'] = count($enabled_modules) === count(array_filter($checked[$member['seminar_id']])); } } $this->modules = $enabled_modules; $this->groups = $groups; $this->group_names = $group_names; $this->group_field = $group_field; $this->open = $open; $this->seminars = $my_sem; $this->notifications = $modules->getModuleNotification(); $this->checked = $checked; }