/**
  * Get all selectable columns
  *
  * @return array
  *
  * @global ilRbacReview $rbacreview
  */
 public function getSelectableColumns()
 {
     global $rbacreview, $ilUser;
     if (!self::$all_selectable_cols) {
         include_once './Services/Search/classes/class.ilUserSearchOptions.php';
         $columns = ilUserSearchOptions::getSelectableColumnInfo($rbacreview->isAssigned($ilUser->getId(), SYSTEM_ROLE_ID));
         if ($this->admin_mode) {
             // #11293
             $columns['access_until'] = array('txt' => $this->lng->txt('access_until'));
             $columns['last_login'] = array('txt' => $this->lng->txt('last_login'));
         }
         self::$all_selectable_cols = $columns;
     }
     return self::$all_selectable_cols;
 }
 function __performUserSearch()
 {
     include_once 'Services/Search/classes/class.ilUserSearchOptions.php';
     include_once 'Services/Search/classes/class.ilObjectSearchFactory.php';
     foreach (ilUserSearchOptions::_getSearchableFieldsInfo(!$this->isSearchableCheckEnabled()) as $info) {
         $name = $info['db'];
         $query_string = $_SESSION['rep_query']['usr'][$name];
         // continue if no query string is given
         if (!$query_string) {
             continue;
         }
         if (!is_object($query_parser = $this->__parseQueryString($query_string))) {
             ilUtil::sendInfo($query_parser);
             return false;
         }
         switch ($info['type']) {
             case FIELD_TYPE_UDF_SELECT:
                 // Do a phrase query for select fields
                 $query_parser = $this->__parseQueryString('"' . $query_string . '"');
             case FIELD_TYPE_UDF_TEXT:
                 $udf_search = ilObjectSearchFactory::_getUserDefinedFieldSearchInstance($query_parser);
                 $udf_search->setFields(array($name));
                 $result_obj = $udf_search->performSearch();
                 // Store entries
                 $this->__storeEntries($result_obj);
                 break;
             case FIELD_TYPE_SELECT:
                 // Do a phrase query for select fields
                 $query_parser = $this->__parseQueryString('"' . $query_string . '"');
             case FIELD_TYPE_TEXT:
                 $user_search =& ilObjectSearchFactory::_getUserSearchInstance($query_parser);
                 $user_search->setFields(array($name));
                 $result_obj = $user_search->performSearch();
                 // store entries
                 $this->__storeEntries($result_obj);
                 break;
         }
     }
 }
 function saveGlobalUserSettingsObject($action = "")
 {
     include_once 'Services/Search/classes/class.ilUserSearchOptions.php';
     include_once 'Services/PrivacySecurity/classes/class.ilPrivacySettings.php';
     global $ilias, $ilSetting;
     // see ilUserFieldSettingsTableGUI
     include_once "./Services/User/classes/class.ilUserProfile.php";
     $up = new ilUserProfile();
     $up->skipField("username");
     $field_properties = $up->getStandardFields();
     $profile_fields = array_keys($field_properties);
     $valid = true;
     foreach ($profile_fields as $field) {
         if ($_POST["chb"]["required_" . $field] && !(int) $_POST['chb']['visib_reg_' . $field]) {
             $valid = false;
             break;
         }
     }
     if (!$valid) {
         global $lng;
         ilUtil::sendFailure($lng->txt('invalid_visible_required_options_selected'));
         $this->confirm_change = 1;
         $this->settingsObject();
         return;
     }
     // For the following fields, the required state can not be changed
     $fixed_required_fields = array("firstname" => 1, "lastname" => 1, "upload" => 0, "password" => 0, "language" => 0, "skin_style" => 0, "hits_per_page" => 0, "show_users_online" => 0, "hide_own_online_status" => 0);
     // check if a course export state of any field has been added
     $privacy = ilPrivacySettings::_getInstance();
     if ($privacy->enabledCourseExport() == true && $privacy->courseConfirmationRequired() == true && $action != "save") {
         foreach ($profile_fields as $field) {
             if (!$ilias->getSetting("usr_settings_course_export_" . $field) && $_POST["chb"]["course_export_" . $field] == "1") {
                 #ilUtil::sendQuestion($this->lng->txt('confirm_message_course_export'));
                 #$this->confirm_change = 1;
                 #$this->settingsObject();
                 #return;
             }
         }
     }
     // Reset user confirmation
     if ($action == 'save') {
         include_once 'Services/Membership/classes/class.ilMemberAgreement.php';
         ilMemberAgreement::_reset();
     }
     foreach ($profile_fields as $field) {
         // Enable disable searchable
         if (ilUserSearchOptions::_isSearchable($field)) {
             ilUserSearchOptions::_saveStatus($field, (bool) $_POST['chb']['searchable_' . $field]);
         }
         if (!$_POST["chb"]["visible_" . $field] && !$field_properties[$field]["visible_hide"]) {
             $ilias->setSetting("usr_settings_hide_" . $field, "1");
         } else {
             $ilias->deleteSetting("usr_settings_hide_" . $field);
         }
         if (!$_POST["chb"]["changeable_" . $field] && !$field_properties[$field]["changeable_hide"]) {
             $ilias->setSetting("usr_settings_disable_" . $field, "1");
         } else {
             $ilias->deleteSetting("usr_settings_disable_" . $field);
         }
         // registration visible
         if ((int) $_POST['chb']['visib_reg_' . $field] && !$field_properties[$field]["visib_reg_hide"]) {
             $ilSetting->set('usr_settings_visib_reg_' . $field, '1');
         } else {
             $ilSetting->set('usr_settings_visib_reg_' . $field, '0');
         }
         if ((int) $_POST['chb']['visib_lua_' . $field]) {
             $ilSetting->set('usr_settings_visib_lua_' . $field, '1');
         } else {
             $ilSetting->set('usr_settings_visib_lua_' . $field, '0');
         }
         if ((int) $_POST['chb']['changeable_lua_' . $field]) {
             $ilSetting->set('usr_settings_changeable_lua_' . $field, '1');
         } else {
             $ilSetting->set('usr_settings_changeable_lua_' . $field, '0');
         }
         if ($_POST["chb"]["export_" . $field] && !$field_properties[$field]["export_hide"]) {
             $ilias->setSetting("usr_settings_export_" . $field, "1");
         } else {
             $ilias->deleteSetting("usr_settings_export_" . $field);
         }
         // Course export/visibility
         if ($_POST["chb"]["course_export_" . $field] && !$field_properties[$field]["course_export_hide"]) {
             $ilias->setSetting("usr_settings_course_export_" . $field, "1");
         } else {
             $ilias->deleteSetting("usr_settings_course_export_" . $field);
         }
         // Group export/visibility
         if ($_POST["chb"]["group_export_" . $field] && !$field_properties[$field]["group_export_hide"]) {
             $ilias->setSetting("usr_settings_group_export_" . $field, "1");
         } else {
             $ilias->deleteSetting("usr_settings_group_export_" . $field);
         }
         $is_fixed = array_key_exists($field, $fixed_required_fields);
         if ($is_fixed && $fixed_required_fields[$field] || !$is_fixed && $_POST["chb"]["required_" . $field]) {
             $ilias->setSetting("require_" . $field, "1");
         } else {
             $ilias->deleteSetting("require_" . $field);
         }
     }
     if ($_POST["select"]["default_hits_per_page"]) {
         $ilias->setSetting("hits_per_page", $_POST["select"]["default_hits_per_page"]);
     }
     if ($_POST["select"]["default_show_users_online"]) {
         $ilias->setSetting("show_users_online", $_POST["select"]["default_show_users_online"]);
     }
     if ($_POST["chb"]["export_preferences"]) {
         $ilias->setSetting("usr_settings_export_preferences", $_POST["chb"]["export_preferences"]);
     } else {
         $ilias->deleteSetting("usr_settings_export_preferences");
     }
     $ilias->setSetting('mail_incoming_mail', (int) $_POST['select']['default_mail_incoming_mail']);
     ilUtil::sendSuccess($this->lng->txt("usr_settings_saved"));
     $this->settingsObject();
 }
 /**
  * Fill table row
  */
 protected function fillRow($a_set)
 {
     global $lng, $ilSetting;
     $field = $a_set["key"];
     $props = array("visible" => "user_visible_in_profile", "changeable" => "changeable", "searchable" => "header_searchable", "required" => "required_field", "export" => "export", "course_export" => "course_export", 'group_export' => 'group_export', "visib_reg" => "header_visible_registration", 'visib_lua' => 'usr_settings_visib_lua', 'changeable_lua' => 'usr_settings_changeable_lua');
     foreach ($props as $prop => $lv) {
         $up_prop = strtoupper($prop);
         if ($prop != "searchable" && $a_set[$prop . "_hide"] != true || $prop == "searchable" && ilUserSearchOptions::_isSearchable($field)) {
             $this->tpl->setCurrentBlock($prop);
             $this->tpl->setVariable("HEADER_" . $up_prop, $lng->txt($lv));
             $this->tpl->setVariable("PROFILE_OPTION_" . $up_prop, $prop . "_" . $field);
             // determine checked status
             $checked = false;
             if ($prop == "visible" && $ilSetting->get("usr_settings_hide_" . $field) != "1") {
                 $checked = true;
             }
             if ($prop == "changeable" && $ilSetting->get("usr_settings_disable_" . $field) != "1") {
                 $checked = true;
             }
             if ($prop == "searchable" && ilUserSearchOptions::_isEnabled($field)) {
                 $checked = true;
             }
             if ($prop == "required" && $ilSetting->get("require_" . $field) == "1") {
                 $checked = true;
             }
             if ($prop == "export" && $ilSetting->get("usr_settings_export_" . $field) == "1") {
                 $checked = true;
             }
             if ($prop == "course_export" && $ilSetting->get("usr_settings_course_export_" . $field) == "1") {
                 $checked = true;
             }
             if ($prop == "group_export" && $ilSetting->get("usr_settings_group_export_" . $field) == "1") {
                 $checked = true;
             }
             if ($prop == "visib_reg" && (int) $ilSetting->get('usr_settings_visib_reg_' . $field, '1')) {
                 $checked = true;
             }
             if ($prop == "visib_lua" && (int) $ilSetting->get('usr_settings_visib_lua_' . $field, '1')) {
                 $checked = true;
             }
             if ($prop == "changeable_lua" && (int) $ilSetting->get('usr_settings_changeable_lua_' . $field, '1')) {
                 $checked = true;
             }
             if ($this->confirm_change == 1) {
                 $checked = $_POST["chb"][$prop . "_" . $field];
             }
             if (isset($a_set[$prop . "_fix_value"])) {
                 $checked = $a_set[$prop . "_fix_value"];
             }
             if ($checked) {
                 $this->tpl->setVariable("CHECKED_" . $up_prop, " checked=\"checked\"");
             }
             if (isset($a_set[$prop . "_fix_value"])) {
                 $this->tpl->setVariable("DISABLE_" . $up_prop, " disabled=\"disabled\"");
             }
             $this->tpl->parseCurrentBlock();
         }
     }
     // default
     if ($a_set["default"] != "") {
         switch ($a_set["input"]) {
             case "selection":
             case "hitsperpage":
                 $selected_option = $ilSetting->get($field);
                 if ($selected_option == "") {
                     $selected_option = $a_set["default"];
                 }
                 foreach ($a_set["options"] as $k => $v) {
                     $this->tpl->setCurrentBlock("def_sel_option");
                     $this->tpl->setVariable("OPTION_VALUE", $k);
                     $text = $a_set["input"] == "selection" ? $lng->txt($v) : $v;
                     if ($a_set["input"] == "hitsperpage" && $k == 9999) {
                         $text = $lng->txt("no_limit");
                     }
                     if ($selected_option == $k) {
                         $this->tpl->setVariable("OPTION_SELECTED", ' selected="selected" ');
                     }
                     $this->tpl->setVariable("OPTION_TEXT", $text);
                     $this->tpl->parseCurrentBlock();
                 }
                 $this->tpl->setCurrentBlock("def_selection");
                 $this->tpl->setVariable("PROFILE_OPTION_DEFAULT_VALUE", "default_" . $field);
                 $this->tpl->parseCurrentBlock();
                 break;
         }
         $this->tpl->setCurrentBlock("default");
         $this->tpl->parseCurrentBlock();
     }
     // group name
     $this->tpl->setVariable("TXT_GROUP", $lng->txt($a_set["group"]));
     // field name
     $lv = $a_set["lang_var"] == "" ? $a_set["key"] : $a_set["lang_var"];
     if ($a_set["key"] == "country") {
         $lv = "country_free_text";
     }
     if ($a_set["key"] == "sel_country") {
         $lv = "country_selection";
     }
     $this->tpl->setVariable("TXT_FIELD", $lng->txt($lv));
 }
 public static function __appendUserDefinedFields($fields, $counter)
 {
     include_once './Services/User/classes/class.ilUserDefinedFields.php';
     $user_defined_fields = ilUserDefinedFields::_getInstance();
     foreach ($user_defined_fields->getSearchableDefinitions() as $definition) {
         $fields[$counter]['values'] = ilUserSearchOptions::__prepareValues($definition['field_values']);
         $fields[$counter]['lang'] = $definition['field_name'];
         $fields[$counter]['db'] = $definition['field_id'];
         switch ($definition['field_type']) {
             case UDF_TYPE_TEXT:
                 $fields[$counter]['type'] = FIELD_TYPE_UDF_TEXT;
                 break;
             case UDF_TYPE_SELECT:
                 $fields[$counter]['type'] = FIELD_TYPE_UDF_SELECT;
                 break;
         }
         ++$counter;
     }
     return $fields ? $fields : array();
 }
 /**
  * Get completion list
  * @param string $a_str
  * @return string
  */
 public function getList($a_str)
 {
     /**
      * @var $ilDB  ilDB
      * @var $ilLog ilLog
      */
     global $ilDB, $ilLog;
     $select_part = $this->getSelectPart();
     $where_part = $this->getWherePart($a_str);
     $order_by_part = $this->getOrderByPart();
     $query = implode(" ", array('SELECT ' . $select_part, 'FROM ' . $this->getFromPart(), $where_part ? 'WHERE ' . $where_part : '', $order_by_part ? 'ORDER BY ' . $order_by_part : ''));
     $ilLog->write(__METHOD__ . ': Query: ' . $query);
     $res = $ilDB->query($query);
     // add email only if it is "searchable"
     $add_email = true;
     include_once 'Services/Search/classes/class.ilUserSearchOptions.php';
     if ($this->isFieldSearchableCheckEnabled() && !ilUserSearchOptions::_isEnabled("email")) {
         $add_email = false;
     }
     include_once './Services/Search/classes/class.ilSearchSettings.php';
     $max = $this->getLimit() ? $this->getLimit() : ilSearchSettings::getInstance()->getAutoCompleteLength();
     $cnt = 0;
     $more_results = FALSE;
     $result = array();
     while (($rec = $ilDB->fetchAssoc($res)) && $cnt < $max + 1) {
         if ($cnt >= $max) {
             $more_results = TRUE;
             break;
         }
         // @todo: Open discussion: We should remove all non public fields from result
         $label = $rec['lastname'] . ', ' . $rec['firstname'] . ' [' . $rec['login'] . ']';
         if ($add_email && $rec['email'] && (self::PRIVACY_MODE_RESPECT_USER_SETTING != $this->getPrivacyMode() || 'y' == $rec['email_value'])) {
             $label .= ', ' . $rec['email'];
         }
         $result[$cnt]['value'] = (string) $rec[$this->result_field];
         $result[$cnt]['label'] = $label;
         $result[$cnt]['id'] = $rec['usr_id'];
         $cnt++;
     }
     include_once 'Services/JSON/classes/class.ilJsonUtil.php';
     $result_json['items'] = $result;
     $result_json['hasMoreResults'] = $more_results;
     $GLOBALS['ilLog']->write(__METHOD__ . ': ' . print_r($result_json, TRUE));
     return ilJsonUtil::encode($result_json);
 }