Go to the documentation of this file.00001 <?php
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00037 include_once 'Services/Search/classes/class.ilObjectSearchFactory.php';
00038 include_once 'Services/Search/classes/class.ilSearchResult.php';
00039
00040 class ilUserFilter
00041 {
00042 var $limit = 0;
00043 var $limit_reached = false;
00044
00045
00046 var $search_fields = array('login' => true,
00047 'firstname' => true,
00048 'lastname' => true);
00049
00050 var $enabled_member_filter = false;
00051 var $possible_users = array();
00052
00053
00054
00055 var $usr_id = null;
00056 var $db = null;
00057
00058 function ilUserFilter($a_usr_id)
00059 {
00060 global $ilDB,$ilias;
00061
00062 $this->usr_id = $a_usr_id;
00063 $this->db =& $ilDB;
00064
00065
00066 $this->limit = $ilias->getSetting('search_max_hits',50);
00067 $this->result_obj = new ilSearchResult();
00068
00069 }
00070
00071 function enableField($key)
00072 {
00073 $this->search_fields[$key] = true;
00074 }
00075 function disableField($key)
00076 {
00077 $this->search_fields[$key] = true;
00078 }
00079 function enableMemberFilter($a_status)
00080 {
00081 $this->enabled_member_filter = $a_status;
00082 }
00083
00084 function setPossibleUsers($a_users)
00085 {
00086 $this->possible_users = $a_users ? $a_users : array();
00087 }
00088
00089
00090 function getLimit()
00091 {
00092 return $this->limit;
00093 }
00094
00095 function limitReached()
00096 {
00097 return $this->limit_reached;
00098 }
00099
00100 function getUserId()
00101 {
00102 return $this->usr_id;
00103 }
00104
00105 function storeQueryStrings($a_strings)
00106 {
00107 $_SESSION['search_usr_filter'] = $a_strings;
00108 }
00109
00110 function getQueryString($a_field)
00111 {
00112 return isset($_SESSION['search_usr_filter'][$a_field]) ? $_SESSION['search_usr_filter'][$a_field] : '';
00113 }
00114
00115
00116 function getUsers()
00117 {
00118
00119 foreach($this->search_fields as $field => $enabled)
00120 {
00121 if(!$enabled)
00122 {
00123 continue;
00124 }
00125 if(strlen($_SESSION['search_usr_filter'][$field]))
00126 {
00127 $search = true;
00128 break;
00129 }
00130 }
00131 if($search)
00132 {
00133 return $this->__searchObjects();
00134 }
00135 else
00136 {
00137 return $this->possible_users;
00138 }
00139 }
00140
00141
00142 function __searchObjects()
00143 {
00144 foreach($this->search_fields as $field => $enabled)
00145 {
00146
00147 if(!$enabled)
00148 {
00149 continue;
00150 }
00151
00152 $query_string = $_SESSION['search_usr_filter'][$field];
00153 if(!$query_string)
00154 {
00155 continue;
00156 }
00157 if(!is_object($query_parser = $this->__parseQueryString($query_string)))
00158 {
00159 sendInfo($query_parser);
00160 return false;
00161 }
00162 $user_search =& ilObjectSearchFactory::_getUserSearchInstance($query_parser);
00163 $user_search->setFields(array($field));
00164
00165
00166 $this->__storeEntries($result_obj = $user_search->performSearch());
00167 }
00168
00169
00170 if(is_object($this->result_obj))
00171 {
00172 if($this->enabled_member_filter)
00173 {
00174 $this->result_obj->addObserver($this,'memberFilter');
00175 }
00176 $this->result_obj->filter(ROOT_FOLDER_ID,QP_COMBINATION_OR);
00177
00178 return $this->__toArray($this->result_obj->getResults());
00179 }
00180 return array();
00181 }
00182
00188 function &__parseQueryString($a_string)
00189 {
00190 include_once 'Services/Search/classes/class.ilQueryParser.php';
00191
00192 $query_parser = new ilQueryParser(ilUtil::stripSlashes($a_string));
00193 $query_parser->setCombination(QP_COMBINATION_OR);
00194 $query_parser->setMinWordLength(1);
00195 $query_parser->parse();
00196
00197 if(!$query_parser->validate())
00198 {
00199 return $query_parser->getMessage();
00200 }
00201 return $query_parser;
00202 }
00203
00204
00205 function __storeEntries(&$new_res)
00206 {
00207 if($this->stored == false)
00208 {
00209 $this->result_obj->mergeEntries($new_res);
00210 $this->stored = true;
00211 return true;
00212 }
00213 else
00214 {
00215 $this->result_obj->intersectEntries($new_res);
00216 return true;
00217 }
00218 }
00219
00220 function __toArray($entries)
00221 {
00222 foreach($entries as $entry)
00223 {
00224 $users[] = $entry['obj_id'];
00225 }
00226 return $users ? $users : array();
00227 }
00228
00229 function memberFilter($a_usr_id,$entry_data)
00230 {
00231 return in_array($a_usr_id,$this->possible_users);
00232 }
00233 }
00234 ?>