public static function getGeneralSettingsForm()
 {
     global $lng;
     $form = new ilPropertyFormGUI();
     require_once 'Services/Notifications/classes/class.ilNotificationDatabaseHelper.php';
     $channels = ilNotificationDatabaseHandler::getAvailableChannels(array(), true);
     $options = array('set_by_user' => $lng->txt('set_by_user'), 'set_by_admin' => $lng->txt('set_by_admin'));
     /**
      * @todo dirty...
      */
     $form->restored_values = array();
     $store_values = array();
     foreach ($channels as $channel) {
         $chb = new ilCheckboxInputGUI($lng->txt('enable_' . $channel['name']), 'enable_' . $channel['name']);
         $store_values[] = 'enable_' . $channel['name'];
         $select = new ilSelectInputGUI($lng->txt('config_type'), 'notifications[' . $channel['name'] . ']');
         $select->setOptions($options);
         $select->setValue($channel['config_type']);
         $chb->addSubItem($select);
         /**
          * @todo dirty...
          */
         $form->restored_values['notifications[' . $channel['name'] . ']'] = $channel['config_type'];
         require_once $channel['include'];
         // let the channel display their own settings below the "enable channel"
         // checkbox
         $result = call_user_func(array($channel['handler'], 'showSettings'), $chb);
         if ($result) {
             $store_values = array_merge($result, $store_values);
         }
         $form->addItem($chb);
     }
     /**
      * @todo dirty...
      */
     $form->store_values = $store_values;
     return $form;
 }
 public function showConfigMatrixObject()
 {
     global $ilTabs;
     $ilTabs->activateSubTab('notification_admin_matrix');
     require_once 'Services/Notifications/classes/class.ilNotificationDatabaseHelper.php';
     require_once 'Services/Notifications/classes/class.ilNotificationSettingsTable.php';
     global $ilCtrl, $lng;
     $userdata = ilNotificationDatabaseHandler::loadUserConfig(-1);
     $table = new ilNotificationSettingsTable($this, 'a title', ilNotificationDatabaseHandler::getAvailableChannels(), $userdata, true);
     $table->setFormAction($ilCtrl->getFormAction($this, 'saveConfigMatrix'));
     $table->setData(ilNotificationDatabaseHandler::getAvailableTypes());
     $table->setDescription($lng->txt('notification_admin_matrix_settings_table_desc'));
     $table->addCommandButton('saveConfigMatrix', $lng->txt('save'));
     $table->addCommandButton('showConfigMatrix', $lng->txt('cancel'));
     $this->tpl->setContent($table->getHtml());
 }
 /**
  * Creates the user notifications and send them. If processAsync is true
  * the notifications will be serialized and persisted to the database
  * 
  * @param ilNotificationConfig $notification
  * @param type $users
  * @param type $processAsync 
  */
 private function toUsers(ilNotificationConfig $notification, $users, $processAsync = false)
 {
     require_once 'Services/Notifications/classes/class.ilNotificationUserIterator.php';
     require_once 'Services/Notifications/classes/class.ilNotificationDatabaseHelper.php';
     // if async processing is disabled send them immediately
     if ($processAsync == false) {
         // loading the default configuration
         $adminConfig = ilNotificationDatabaseHandler::loadUserConfig(-1);
         $usersWithCustomConfig = ilNotificationDatabaseHandler::getUsersWithCustomConfig($users);
         // @todo this loop might be obsolet :)
         foreach ($users as $user_id) {
             if ($usersWithCustomConfig[$user_id]) {
                 /** @todo was ist hier? **/
             }
         }
         // load all available channels
         $channels = ilNotificationDatabaseHandler::getAvailableChannels();
         // load all available types
         $types = ilNotificationDatabaseHandler::getAvailableTypes();
         // preload translation vars
         $lang = ilNotificationDatabaseHandler::getTranslatedLanguageVariablesOfNotificationParameters($notification->getLanguageParameters());
         $user_by_handler = array();
         // check if the type allows custom user configurations for determining
         // the output channel (e.g. send chat notifications only via osd)
         if ($types[$notification->getType()]['config_type'] == 'set_by_user') {
             $it = new ilNotificationUserIterator($notification->getType(), $users);
             $channelsByAdmin = false;
             // add the user to each channel he configured in his own configuration
             foreach ($it as $usr_id => $data) {
                 // the configured user channel is (currently) not known
                 if (!$channels[$data['channel']]) {
                     continue;
                 }
                 if (!$user_by_handler[$data['channel']]) {
                     $user_by_handler[$data['channel']] = array();
                 }
                 $user_by_handler[$data['channel']][] = $usr_id;
             }
         } else {
             if ($types[$notification->getType()]['config_type'] != 'disabled') {
                 $channelsByAdmin = true;
                 //$user_by_handler = array();
                 if (isset($adminConfig[$notification->getType()])) {
                     foreach ($adminConfig[$notification->getType()] as $channel) {
                         if (!$channels[$channel]) {
                             continue;
                         }
                         $user_by_handler[$channel] = $users;
                     }
                 }
             }
         }
         $userCache = array();
         // process the notifications for each output channel
         foreach ($user_by_handler as $handler => $users) {
             $handler = $this->handler[$handler];
             // and process each user for the current output channel
             foreach ($users as $userId) {
                 if (!$userCache[$userId]) {
                     $userCache[$userId] = new ilObjUser($userId);
                 }
                 $user = $userCache[$userId];
                 // optain the message instance for the user
                 // @todo this step could be cached on a per user basis
                 //       as it is independed from the output handler
                 $instance = $notification->getUserInstance($user, $lang, $this->defaultLanguage);
                 foreach ($handler as $h) {
                     // fire the notification
                     $h->notify($instance);
                 }
             }
         }
     } else {
         // just enque the current configuration
         ilNotificationDatabaseHandler::enqueueByUsers($notification, $users);
     }
 }
 private function getAvailableChannels($types = array())
 {
     return ilNotificationDatabaseHandler::getAvailableChannels($types);
 }