82 $this->result_field =
'login';
90 $this->limit = $a_limit;
152 $this->searchable_check = $a_status;
171 $this->user_access_check = $a_status;
189 $this->possible_fields = $a_fields;
211 $available_fields = array();
214 include_once
'Services/Search/classes/class.ilUserSearchOptions.php';
217 $available_fields[] = $field;
220 return $available_fields;
229 $this->result_field = $a_field;
237 public function getList($a_str)
246 $where_part = $this->getWherePart($a_str);
248 $query = implode(
" ", array(
249 'SELECT ' . $select_part,
250 'FROM ' . $this->getFromPart(),
251 $where_part ?
'WHERE ' . $where_part :
'',
252 $order_by_part ?
'ORDER BY ' . $order_by_part :
'' 255 $ilLog->write(__METHOD__ .
': Query: ' .
$query);
257 $res = $ilDB->query($query);
261 include_once
'Services/Search/classes/class.ilUserSearchOptions.php';
267 include_once
'./Services/Search/classes/class.ilSearchSettings.php';
270 $more_results = FALSE;
272 while(($rec = $ilDB->fetchAssoc(
$res)) && $cnt < ($max + 1))
276 $more_results = TRUE;
281 $label = $rec[
'lastname'] .
', ' . $rec[
'firstname'] .
' [' . $rec[
'login'] .
']';
283 if($add_email && $rec[
'email'] && (self::PRIVACY_MODE_RESPECT_USER_SETTING != $this->
getPrivacyMode() ||
'y' == $rec[
'email_value']))
285 $label .=
', ' . $rec[
'email'];
288 $result[$cnt][
'value'] = (string)$rec[$this->result_field];
289 $result[$cnt][
'label'] = $label;
290 $result[$cnt][
'id'] = $rec[
'usr_id'];
294 include_once
'Services/JSON/classes/class.ilJsonUtil.php';
296 $result_json[
'items'] =
$result;
297 $result_json[
'hasMoreResults'] = $more_results;
299 $GLOBALS[
'ilLog']->write(__METHOD__.
': '.print_r($result_json,TRUE));
317 if(self::PRIVACY_MODE_RESPECT_USER_SETTING == $this->
getPrivacyMode())
319 $fields[] =
'profpref.value profile_value';
320 $fields[] =
'pubemail.value email_value';
323 return implode(
', ', $fields);
329 protected function getFromPart()
338 if(self::PRIVACY_MODE_RESPECT_USER_SETTING == $this->
getPrivacyMode())
340 $joins[] =
'LEFT JOIN usr_pref profpref 341 ON profpref.usr_id = ud.usr_id 342 AND profpref.keyword = ' . $ilDB->quote(
'public_profile',
'text');
344 $joins[] =
'LEFT JOIN usr_pref pubemail 345 ON pubemail.usr_id = ud.usr_id 346 AND pubemail.keyword = ' . $ilDB->quote(
'public_email',
'text');
351 return 'usr_data ud ' . implode(
' ', $joins);
355 return 'usr_data ud';
363 protected function getWherePart($search_query)
371 $outer_conditions = array();
374 if(self::PRIVACY_MODE_RESPECT_USER_SETTING == $this->
getPrivacyMode() &&
376 $this->
getUser()->isAnonymous()
379 if(!$ilSetting->get(
'enable_global_profiles', 0))
387 $outer_conditions[] =
'profpref.value = ' . $ilDB->quote(
'g',
'text');
391 $outer_conditions[] =
'ud.usr_id != ' . $ilDB->quote(ANONYMOUS_USER_ID,
'integer');
393 $field_conditions = array();
396 $field_condition = $this->getQueryConditionByFieldAndValue($field, $search_query);
398 if(
'email' == $field && self::PRIVACY_MODE_RESPECT_USER_SETTING == $this->
getPrivacyMode())
402 $email_query = array();
403 $email_query[] = $field_condition;
404 $email_query[] =
'pubemail.value = ' . $ilDB->quote(
'y',
'text');
405 $field_conditions[] =
'(' . implode(
' AND ', $email_query) .
')';
409 $field_conditions[] = $field_condition;
417 if(self::PRIVACY_MODE_RESPECT_USER_SETTING == $this->
getPrivacyMode() &&
422 $fields = implode(
' OR ', $field_conditions);
424 $field_conditions[] =
'(' . implode(
' AND ', array(
426 $ilDB->in(
'profpref.value', array(
'y',
'g'),
false,
'text')
432 $field_conditions[] = $this->getQueryConditionByFieldAndValue(
'login', $search_query);
434 include_once
'Services/User/classes/class.ilUserAccountSettings.php';
437 include_once
'./Services/User/classes/class.ilUserFilter.php';
441 if($field_conditions)
443 $outer_conditions[] =
'(' . implode(
' OR ', $field_conditions) .
')';
446 include_once
'./Services/Search/classes/class.ilSearchSettings.php';
451 $outer_conditions[] =
"ud.active = ". $ilDB->quote(1,
'integer');
456 $unlimited =
"ud.time_limit_unlimited = ". $ilDB->quote(1,
'integer');
457 $from =
"ud.time_limit_from < ". $ilDB->quote(time(),
'integer');
458 $until =
"ud.time_limit_until > ". $ilDB->quote(time(),
'integer');
460 $outer_conditions[] =
'(' .$unlimited.
' OR ('.$from.
' AND ' .$until.
'))';
463 return implode(
' AND ', $outer_conditions);
479 protected function getQueryConditionByFieldAndValue($field, $a_str)
487 if(!stristr($a_str,
'\\'))
489 $a_str = str_replace(
'%',
'\%', $a_str);
490 $a_str = str_replace(
'_',
'\_', $a_str);
495 return $ilDB->like($field,
'text', $a_str .
'%');
499 return $ilDB->like($field,
'text', $a_str);
510 $this->user_limitations = (bool) $a_limitations;
isFieldSearchableCheckEnabled()
Searchable check enabled.
setUserLimitations($a_limitations)
allow user limitations like inactive and access limitations
const PRIVACY_MODE_RESPECT_USER_SETTING
setMoreLinkAvailable($more_link_available)
IMPORTANT: remember to read request parameter 'fetchall' to use this function.
static getInstance()
Singelton get instance.
Auto completion class for user lists.
getFields()
Get searchable fields.
static encode($mixed, $suppress_native=false)
enableUserAccessCheck($a_status)
Enable user access check.
setPrivacyMode($privacy_mode)
getSearchFields()
get possible search fields
getUserLimitations()
allow user limitations like inactive and access limitations
setSearchType($search_type)
setResultField($a_field)
Set result field.
isUserAccessCheckEnabled()
Check if user access check is enabled.
enableFieldSearchableCheck($a_status)
Enable the check whether the field is searchable in Administration -> Settings -> Standard Fields...
__construct()
Default constructor.
static getInstance()
Singelton get instance.
setSearchFields($a_fields)
Set searchable fields.
$GLOBALS['PHPCAS_CLIENT']
This global variable is used by the interface class phpCAS.
const PRIVACY_MODE_IGNORE_USER_SETTING
static _isEnabled($a_key)