Пример #1
0
 /**
  * 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;
 }