ILIAS  trunk Revision v11.0_alpha-2638-g80c1d007f79
class.ilMailUserCache.php
Go to the documentation of this file.
1 <?php
2 
19 declare(strict_types=1);
20 
22 {
24  protected static array $user_instances = [];
26  protected static array $requested_usr_ids = [];
28  protected static array $requested_usr_ids_key_map = [];
29 
33  public static function preloadUserObjects(array $usr_ids): void
34  {
35  global $DIC;
36 
37  $usr_ids_to_request = array_diff($usr_ids, self::$requested_usr_ids);
38  self::$requested_usr_ids = array_merge(self::$requested_usr_ids, $usr_ids_to_request);
39  self::$requested_usr_ids_key_map = array_flip(self::$requested_usr_ids);
40 
41  if ($usr_ids_to_request !== []) {
42  $in = $DIC->database()->in('ud.usr_id', $usr_ids_to_request, false, 'integer');
43  $query = "
44  SELECT ud.usr_id, login, firstname, lastname, title, gender,
45  pprof.value public_profile,pup.value public_upload, pupgen.value public_gender
46  FROM usr_data ud
47  LEFT JOIN usr_pref pprof ON pprof.usr_id = ud.usr_id AND pprof.keyword = %s
48  LEFT JOIN usr_pref pupgen ON pupgen.usr_id = ud.usr_id AND pupgen.keyword = %s
49  LEFT JOIN usr_pref pup ON pup.usr_id = ud.usr_id AND pup.keyword = %s
50  WHERE $in
51  ";
52 
53  $res = $DIC->database()->queryF(
54  $query,
55  ['text', 'text', 'text'],
56  ['public_profile', 'public_gender', 'public_upload']
57  );
58 
59  while ($row = $DIC->database()->fetchAssoc($res)) {
60  $user = new ilObjUser();
61  $user->setId((int) $row['usr_id']);
62  $user->setLogin((string) $row['login']);
63  $user->setGender((string) $row['gender']);
64  $user->setTitle((string) $row['title']);
65  $user->setFirstname((string) $row['firstname']);
66  $user->setLastname((string) $row['lastname']);
67  $user->setPref('public_profile', $row['public_profile']);
68  $user->setPref('public_upload', $row['public_upload']);
69  $user->setPref('public_gender', $row['public_gender']);
70 
71  self::$user_instances[(int) $row['usr_id']] = $user;
72  }
73  }
74  }
75 
76  public static function getUserObjectById(int $usr_id): ?ilObjUser
77  {
78  if ($usr_id < 1) {
79  return null;
80  }
81 
82  if (!array_key_exists($usr_id, self::$requested_usr_ids_key_map)) {
83  self::preloadUserObjects([$usr_id]);
84  }
85 
86  return self::$user_instances[$usr_id] ?? null;
87  }
88 }
$res
Definition: ltiservices.php:66
static array $user_instances
static getUserObjectById(int $usr_id)
while($session_entry=$r->fetchRow(ilDBConstants::FETCHMODE_ASSOC)) return null
static array $requested_usr_ids
global $DIC
Definition: shib_login.php:26
static preloadUserObjects(array $usr_ids)
static array $requested_usr_ids_key_map