ILIAS  release_5-0 Revision 5.0.0-1144-gc4397b1f870
ilUserQuery Class Reference

User query class. More...

+ Collaboration diagram for ilUserQuery:

Public Member Functions

 __construct ()
 Constructor. More...
 
 setOrderField ($a_order)
 Set order field (column in usr_data) Default order is 'login'. More...
 
 setOrderDirection ($a_dir)
 Set order direction 'asc' or 'desc' Default is 'asc'. More...
 
 setOffset ($a_offset)
 Set offset. More...
 
 setLimit ($a_limit)
 Set result limit Default is 50. More...
 
 setTextFilter ($a_filter)
 Text (like) filter in login, firstname, lastname or email. More...
 
 setActionFilter ($a_activation)
 Set activation filter 'active' or 'inactive' or empty. More...
 
 setLastLogin (ilDateTime $dt=NULL)
 Set last login filter. More...
 
 setLimitedAccessFilter ($a_status)
 Enable limited access filter. More...
 
 setNoCourseFilter ($a_no_course)
 Enable no course filter. More...
 
 setNoGroupFilter ($a_no_group)
 Enable no group filter. More...
 
 setCourseGroupFilter ($a_cg_id)
 Set course / group filter object_id of course or group. More...
 
 setRoleFilter ($a_role_id)
 Set role filter obj_id of role. More...
 
 setUserFolder ($a_fold_id)
 Set user folder filter reference id of user folder or category (local user administration) More...
 
 setAdditionalFields ($a_add)
 Set additional fields (columns in usr_data or 'online_time') More...
 
 setUserFilter ($a_filter)
 Array with user ids to query against. More...
 
 setFirstLetterLastname ($a_fll)
 set first letter lastname filter More...
 
 query ()
 Query usr_data. More...
 

Static Public Member Functions

static getUserListData ($a_order_field, $a_order_dir, $a_offset, $a_limit, $a_string_filter="", $a_activation_filter="", $a_last_login_filter=null, $a_limited_access_filter=false, $a_no_courses_filter=false, $a_course_group_filter=0, $a_role_filter=0, $a_user_folder_filter=null, $a_additional_fields='', $a_user_filter=null, $a_first_letter="")
 Get data for user administration list. More...
 

Private Attributes

 $order_field = 'login'
 
 $order_dir = 'asc'
 
 $offset = 0
 
 $limit = 50
 
 $text_filter = ''
 
 $activation = ''
 
 $last_login = NULL
 
 $limited_access = false
 
 $no_courses = false
 
 $no_groups = false
 
 $crs_grp = 0
 
 $role = 0
 
 $user_folder = 0
 
 $additional_fields = array()
 
 $users = array()
 
 $first_letter = ''
 
 $default_fields
 

Detailed Description

User query class.

Put any complex that queries for a set of users into this class and keep ilObjUser "small".

Author
Alex Killing alex..nosp@m.kill.nosp@m.ing@g.nosp@m.mx.d.nosp@m.e
Version
$Id$

Definition at line 12 of file class.ilUserQuery.php.

Constructor & Destructor Documentation

◆ __construct()

ilUserQuery::__construct ( )

Constructor.

Definition at line 47 of file class.ilUserQuery.php.

48 {
49 ;
50 }

Member Function Documentation

◆ getUserListData()

static ilUserQuery::getUserListData (   $a_order_field,
  $a_order_dir,
  $a_offset,
  $a_limit,
  $a_string_filter = "",
  $a_activation_filter = "",
  $a_last_login_filter = null,
  $a_limited_access_filter = false,
  $a_no_courses_filter = false,
  $a_course_group_filter = 0,
  $a_role_filter = 0,
  $a_user_folder_filter = null,
  $a_additional_fields = '',
  $a_user_filter = null,
  $a_first_letter = "" 
)
static

Get data for user administration list.

Deprecated:

Definition at line 484 of file class.ilUserQuery.php.

489 {
490
491 $query = new ilUserQuery();
492 $query->setOrderField($a_order_field);
493 $query->setOrderDirection($a_order_dir);
494 $query->setOffset($a_offset);
495 $query->setLimit($a_limit);
496 $query->setTextFilter($a_string_filter);
497 $query->setActionFilter($a_activation_filter);
498 $query->setLastLogin($a_last_login_filter);
499 $query->setLimitedAccessFilter($a_limited_access_filter);
500 $query->setNoCourseFilter($a_no_courses_filter);
501 $query->setCourseGroupFilter($a_course_group_filter);
502 $query->setRoleFilter($a_role_filter);
503 $query->setUserFolder($a_user_folder_filter);
504 $query->setAdditionalFields($a_additional_fields);
505 $query->setUserFilter($a_user_filter);
506 $query->setFirstLetterLastname($a_first_letter);
507 return $query->query();
508 }
User query class.

References $query.

Referenced by ilAssignedUsersTableGUI\getItems(), ilUserLPTableGUI\getItems(), ilGroupParticipantsTableGUI\parse(), ilCourseParticipantsTableGUI\parse(), ilRepositoryUserResultTableGUI\parseUserIds(), ilSubscriberTableGUI\readSubscriberData(), and ilWaitingListTableGUI\readUserData().

+ Here is the caller graph for this function:

◆ query()

ilUserQuery::query ( )

Query usr_data.

Returns
array ('cnt', 'set')

Definition at line 208 of file class.ilUserQuery.php.

209 {
210 global $ilDB;
211
212 $ut_join = "";
213 if (is_array($this->additional_fields))
214 {
215 foreach ($this->additional_fields as $f)
216 {
217 if (!in_array($f, $this->default_fields))
218 {
219 if($f == "online_time")
220 {
221 $this->default_fields[] = "ut_online.online_time";
222 $ut_join = " LEFT JOIN ut_online ON usr_data.usr_id = ut_online.usr_id";
223 }
224 else
225 {
226 $this->default_fields[] = $f;
227 }
228 }
229 }
230 }
231 // count query
232 $count_query = "SELECT count(usr_id) cnt".
233 " FROM usr_data";
234
235 $all_multi_fields = array("interests_general", "interests_help_offered", "interests_help_looking");
236 $multi_fields = array();
237
238 $sql_fields = array();
239 foreach($this->default_fields as $idx => $field)
240 {
241 if(!$field)
242 {
243 continue;
244 }
245
246 if(in_array($field, $all_multi_fields))
247 {
248 $multi_fields[] = $field;
249 }
250 else if(!stristr($field, "."))
251 {
252 $sql_fields[] = "usr_data.".$field;
253 }
254 else
255 {
256 $sql_fields[] = $field;
257 }
258 }
259
260 // basic query
261 $query = "SELECT ".implode($sql_fields, ",").
262 " FROM usr_data".
263 $ut_join;
264
265 // filter
266 $query.= " WHERE usr_data.usr_id <> ".$ilDB->quote(ANONYMOUS_USER_ID, "integer");
267
268 // User filter
269 if($this->users and is_array(($this->users)))
270 {
271 $query .= ' AND '.$ilDB->in('usr_data.usr_id',$this->users,false,'integer');
272 }
273
274 $count_query.= " WHERE usr_data.usr_id <> ".$ilDB->quote(ANONYMOUS_USER_ID, "integer");
275 $where = " AND";
276
277 if ($this->first_letter != "")
278 {
279 $add = $where." (".$ilDB->upper($ilDB->substr("usr_data.lastname", 1, 1))." = ".$ilDB->upper($ilDB->quote($this->first_letter, "text")).") ";
280 $query.= $add;
281 $count_query.= $add;
282 $where = " AND";
283 }
284
285 if ($this->text_filter != "") // email, name, login
286 {
287 $add = $where." (".$ilDB->like("usr_data.login", "text", "%".$this->text_filter."%")." ".
288 "OR ".$ilDB->like("usr_data.firstname", "text", "%".$this->text_filter."%")." ".
289 "OR ".$ilDB->like("usr_data.lastname", "text", "%".$this->text_filter."%")." ".
290 "OR ".$ilDB->like("usr_data.email", "text", "%".$this->text_filter."%").") ";
291 $query.= $add;
292 $count_query.= $add;
293 $where = " AND";
294 }
295
296 if ($this->activation != "") // activation
297 {
298 if ($this->activation == "inactive")
299 {
300 $add = $where." usr_data.active = ".$ilDB->quote(0, "integer")." ";
301 }
302 else
303 {
304 $add = $where." usr_data.active = ".$ilDB->quote(1, "integer")." ";
305 }
306 $query.= $add;
307 $count_query.= $add;
308 $where = " AND";
309 }
310
311 if($this->last_login instanceof ilDateTime) // last login
312 {
313 if(ilDateTime::_before($this->last_login, new ilDateTime(time(),IL_CAL_UNIX),IL_CAL_DAY))
314 {
315 $add = $where." usr_data.last_login < ".
316 $ilDB->quote($this->last_login->get(IL_CAL_DATETIME), "timestamp");
317 $query.= $add;
318 $count_query.= $add;
319 $where = " AND";
320 }
321 }
322 if ($this->limited_access) // limited access
323 {
324 $add = $where." usr_data.time_limit_unlimited= ".$ilDB->quote(0, "integer");
325 $query.= $add;
326 $count_query.= $add;
327 $where = " AND";
328 }
329 if ($this->no_courses) // no courses assigned
330 {
331 $add = $where." usr_data.usr_id NOT IN (".
332 "SELECT DISTINCT ud.usr_id ".
333 "FROM usr_data ud join rbac_ua ON (ud.usr_id = rbac_ua.usr_id) ".
334 "JOIN object_data od ON (rbac_ua.rol_id = od.obj_id) ".
335 "WHERE od.title LIKE 'il_crs_%')";
336 $query.= $add;
337 $count_query.= $add;
338 $where = " AND";
339 }
340 if ($this->no_groups) // no groups assigned
341 {
342 $add = $where." usr_data.usr_id NOT IN (".
343 "SELECT DISTINCT ud.usr_id ".
344 "FROM usr_data ud join rbac_ua ON (ud.usr_id = rbac_ua.usr_id) ".
345 "JOIN object_data od ON (rbac_ua.rol_id = od.obj_id) ".
346 "WHERE od.title LIKE 'il_grp_%')";
347 $query.= $add;
348 $count_query.= $add;
349 $where = " AND";
350 }
351 if ($this->crs_grp > 0) // members of course/group
352 {
353 $cgtype = ilObject::_lookupType($this->crs_grp, true);
354 $add = $where." usr_data.usr_id IN (".
355 "SELECT DISTINCT ud.usr_id ".
356 "FROM usr_data ud join rbac_ua ON (ud.usr_id = rbac_ua.usr_id) ".
357 "JOIN object_data od ON (rbac_ua.rol_id = od.obj_id) ".
358 "WHERE od.title = ".$ilDB->quote("il_".$cgtype."_member_".$this->crs_grp, "text").")";
359 $query.= $add;
360 $count_query.= $add;
361 $where = " AND";
362 }
363 if ($this->role > 0) // global role
364 {
365 $add = $where." usr_data.usr_id IN (".
366 "SELECT DISTINCT ud.usr_id ".
367 "FROM usr_data ud join rbac_ua ON (ud.usr_id = rbac_ua.usr_id) ".
368 "WHERE rbac_ua.rol_id = ".$ilDB->quote($this->role, "integer").")";
369 $query.= $add;
370 $count_query.= $add;
371 $where = " AND";
372 }
373
374 if($this->user_folder)
375 {
376 $add = $where." ".$ilDB->in('usr_data.time_limit_owner',$this->user_folder,false,'integer');
377 $query.= $add;
378 $count_query.= $add;
379 $where = " AND";
380 }
381
382 // order by
383 switch($this->order_field)
384 {
385 case "access_until":
386 if ($this->order_dir == "desc")
387 {
388 $query.= " ORDER BY usr_data.active DESC, usr_data.time_limit_unlimited DESC, usr_data.time_limit_until DESC";
389 }
390 else
391 {
392 $query.= " ORDER BY usr_data.active ASC, usr_data.time_limit_unlimited ASC, usr_data.time_limit_until ASC";
393 }
394 break;
395
396 case "online_time":
397 if ($this->order_dir == "desc")
398 {
399 $query.= " ORDER BY ut_online.online_time DESC";
400 }
401 else
402 {
403 $query.= " ORDER BY ut_online.online_time ASC";
404 }
405 break;
406
407 default:
408 if (!in_array($this->order_field, $this->default_fields))
409 {
410 $this->order_field = "login";
411 }
412 if ($this->order_dir != "asc" && $this->order_dir != "desc")
413 {
414 $this->order_dir = "asc";
415 }
416 $query .= " ORDER BY usr_data.".$this->order_field." ".strtoupper($this->order_dir);
417 break;
418 }
419
420 // count query
421 $set = $ilDB->query($count_query);
422 $cnt = 0;
423 if ($rec = $ilDB->fetchAssoc($set))
424 {
425 $cnt = $rec["cnt"];
426 }
427
428 $offset = (int) $this->offset;
429 $limit = (int) $this->limit;
430
431 // #9866: validate offset against rowcount
432 if($offset >= $cnt)
433 {
434 $offset = 0;
435 }
436
437 $ilDB->setLimit($limit, $offset);
438
439 if(sizeof($multi_fields))
440 {
441 $usr_ids = array();
442 }
443
444 // set query
445 $set = $ilDB->query($query);
446 $result = array();
447 while($rec = $ilDB->fetchAssoc($set))
448 {
449 $result[] = $rec;
450
451 if(sizeof($multi_fields))
452 {
453 $usr_ids[] = $rec["usr_id"];
454 }
455 }
456
457 // add multi-field-values to user-data
458 if(sizeof($multi_fields) && sizeof($usr_ids))
459 {
460 $usr_multi = array();
461 $set = $ilDB->query("SELECT * FROM usr_data_multi".
462 " WHERE ".$ilDB->in("usr_id", $usr_ids, "", "integer"));
463 while($row = $ilDB->fetchAssoc($set))
464 {
465 $usr_multi[$row["usr_id"]][$row["field_id"]][] = $row["value"];
466 }
467 foreach($result as $idx => $item)
468 {
469 if(isset($usr_multi[$item["usr_id"]]))
470 {
471 $result[$idx] = array_merge($item, $usr_multi[$item["usr_id"]]);
472 }
473 }
474 }
475
476 return array("cnt" => $cnt, "set" => $result);
477 }
$result
const IL_CAL_UNIX
const IL_CAL_DATETIME
const IL_CAL_DAY
@classDescription Date and time handling
static _before(ilDateTime $start, ilDateTime $end, $a_compare_field='', $a_tz='')
compare two dates and check start is before end This method does not consider tz offsets.
static _lookupType($a_id, $a_reference=false)
lookup object type
global $ilDB

References $ilDB, $limit, $offset, $query, $result, $row, ilDateTime\_before(), ilObject\_lookupType(), IL_CAL_DATETIME, IL_CAL_DAY, and IL_CAL_UNIX.

+ Here is the call graph for this function:

◆ setActionFilter()

ilUserQuery::setActionFilter (   $a_activation)

Set activation filter 'active' or 'inactive' or empty.

Parameters
string$a_activation

Definition at line 106 of file class.ilUserQuery.php.

107 {
108 $this->activation = $a_activation;
109 }

◆ setAdditionalFields()

ilUserQuery::setAdditionalFields (   $a_add)

Set additional fields (columns in usr_data or 'online_time')

Parameters
array$additional_fields

Definition at line 181 of file class.ilUserQuery.php.

182 {
183 $this->additional_fields = (array) $a_add;
184 }

◆ setCourseGroupFilter()

ilUserQuery::setCourseGroupFilter (   $a_cg_id)

Set course / group filter object_id of course or group.

Parameters
int$a_cg_id

Definition at line 152 of file class.ilUserQuery.php.

153 {
154 $this->crs_grp = $a_cg_id;
155 }

◆ setFirstLetterLastname()

ilUserQuery::setFirstLetterLastname (   $a_fll)

set first letter lastname filter

Parameters
string$a_fll

Definition at line 199 of file class.ilUserQuery.php.

200 {
201 $this->first_letter = $a_fll;
202 }

◆ setLastLogin()

ilUserQuery::setLastLogin ( ilDateTime  $dt = NULL)

Set last login filter.

Parameters
ilDateTime$dt

Definition at line 115 of file class.ilUserQuery.php.

116 {
117 $this->last_login = $dt;
118 }

◆ setLimit()

ilUserQuery::setLimit (   $a_limit)

Set result limit Default is 50.

Parameters
int$a_limit

Definition at line 87 of file class.ilUserQuery.php.

88 {
89 $this->limit = $a_limit;
90 }

◆ setLimitedAccessFilter()

ilUserQuery::setLimitedAccessFilter (   $a_status)

Enable limited access filter.

Parameters
bool

Definition at line 124 of file class.ilUserQuery.php.

125 {
126 $this->limited_access = $a_status;
127 }

◆ setNoCourseFilter()

ilUserQuery::setNoCourseFilter (   $a_no_course)

Enable no course filter.

Parameters
bool$a_no_course

Definition at line 133 of file class.ilUserQuery.php.

134 {
135 $this->no_courses = $a_no_course;
136 }

◆ setNoGroupFilter()

ilUserQuery::setNoGroupFilter (   $a_no_group)

Enable no group filter.

Parameters
bool$a_no_group

Definition at line 142 of file class.ilUserQuery.php.

143 {
144 $this->no_groups = $a_no_group;
145 }

◆ setOffset()

ilUserQuery::setOffset (   $a_offset)

Set offset.

Parameters
int$a_offset

Definition at line 77 of file class.ilUserQuery.php.

78 {
79 $this->offset = $a_offset;
80 }

◆ setOrderDirection()

ilUserQuery::setOrderDirection (   $a_dir)

Set order direction 'asc' or 'desc' Default is 'asc'.

Parameters
string$a_dir

Definition at line 68 of file class.ilUserQuery.php.

69 {
70 $this->order_dir = $a_dir;
71 }

◆ setOrderField()

ilUserQuery::setOrderField (   $a_order)

Set order field (column in usr_data) Default order is 'login'.

Parameters
string

Definition at line 57 of file class.ilUserQuery.php.

58 {
59 $this->order_field = $a_order;
60 }

◆ setRoleFilter()

ilUserQuery::setRoleFilter (   $a_role_id)

Set role filter obj_id of role.

Parameters
int$a_role_id

Definition at line 162 of file class.ilUserQuery.php.

163 {
164 $this->role = $a_role_id;
165 }

◆ setTextFilter()

ilUserQuery::setTextFilter (   $a_filter)

Text (like) filter in login, firstname, lastname or email.

Parameters
stringfilter

Definition at line 96 of file class.ilUserQuery.php.

97 {
98 $this->text_filter = $a_filter;
99 }

◆ setUserFilter()

ilUserQuery::setUserFilter (   $a_filter)

Array with user ids to query against.

Parameters
array$a_filter

Definition at line 190 of file class.ilUserQuery.php.

191 {
192 $this->users = $a_filter;
193 }

◆ setUserFolder()

ilUserQuery::setUserFolder (   $a_fold_id)

Set user folder filter reference id of user folder or category (local user administration)

Parameters
type$a_fold_id

Definition at line 172 of file class.ilUserQuery.php.

173 {
174 $this->user_folder = $a_fold_id;
175 }

Field Documentation

◆ $activation

ilUserQuery::$activation = ''
private

Definition at line 19 of file class.ilUserQuery.php.

◆ $additional_fields

ilUserQuery::$additional_fields = array()
private

Definition at line 27 of file class.ilUserQuery.php.

◆ $crs_grp

ilUserQuery::$crs_grp = 0
private

Definition at line 24 of file class.ilUserQuery.php.

◆ $default_fields

ilUserQuery::$default_fields
private
Initial value:
= array(
"usr_id",
"login",
"firstname",
"lastname",
"email",
"time_limit_until",
"time_limit_unlimited",
"time_limit_owner",
"last_login",
"active"
)

Definition at line 31 of file class.ilUserQuery.php.

◆ $first_letter

ilUserQuery::$first_letter = ''
private

Definition at line 29 of file class.ilUserQuery.php.

◆ $last_login

ilUserQuery::$last_login = NULL
private

Definition at line 20 of file class.ilUserQuery.php.

◆ $limit

ilUserQuery::$limit = 50
private

Definition at line 17 of file class.ilUserQuery.php.

Referenced by query().

◆ $limited_access

ilUserQuery::$limited_access = false
private

Definition at line 21 of file class.ilUserQuery.php.

◆ $no_courses

ilUserQuery::$no_courses = false
private

Definition at line 22 of file class.ilUserQuery.php.

◆ $no_groups

ilUserQuery::$no_groups = false
private

Definition at line 23 of file class.ilUserQuery.php.

◆ $offset

ilUserQuery::$offset = 0
private

Definition at line 16 of file class.ilUserQuery.php.

Referenced by query().

◆ $order_dir

ilUserQuery::$order_dir = 'asc'
private

Definition at line 15 of file class.ilUserQuery.php.

◆ $order_field

ilUserQuery::$order_field = 'login'
private

Definition at line 14 of file class.ilUserQuery.php.

◆ $role

ilUserQuery::$role = 0
private

Definition at line 25 of file class.ilUserQuery.php.

◆ $text_filter

ilUserQuery::$text_filter = ''
private

Definition at line 18 of file class.ilUserQuery.php.

◆ $user_folder

ilUserQuery::$user_folder = 0
private

Definition at line 26 of file class.ilUserQuery.php.

◆ $users

ilUserQuery::$users = array()
private

Definition at line 28 of file class.ilUserQuery.php.


The documentation for this class was generated from the following file: