ILIAS  release_5-4 Revision v5.4.26-12-gabc799a52e6
class.ilAwarenessUserCollector.php
Go to the documentation of this file.
1<?php
2
3/* Copyright (c) 1998-2014 ILIAS open source, Extended GPL, see docs/LICENSE */
4
13{
14 protected static $instances = array();
15 protected static $online_users = false;
16 protected static $online_user_ids = array();
17
21 protected $collection;
22 protected $collections;
23 protected $user_id;
24 protected $ref_id;
25
29 protected $settings;
30
36 protected function __construct($a_user_id)
37 {
38 global $DIC;
39
40 $this->user_id = $a_user_id;
41 $this->settings = $DIC->settings();
42 }
43
49 public function setRefId($a_val)
50 {
51 $this->ref_id = $a_val;
52 }
53
59 public function getRefId()
60 {
61 return $this->ref_id;
62 }
63
70 public static function getInstance($a_user_id)
71 {
72 if (!isset(self::$instances[$a_user_id])) {
73 self::$instances[$a_user_id] = new ilAwarenessUserCollector($a_user_id);
74 }
75
76 return self::$instances[$a_user_id];
77 }
78
85 public static function getOnlineUsers()
86 {
87 if (self::$online_users === false) {
88 self::$online_user_ids = array();
89 self::$online_users = array();
90 include_once("./Services/User/classes/class.ilObjUser.php");
91 foreach (ilObjUser::_getUsersOnline() as $u) {
92 // ask context $u["context"] if it supports pushMessages
93 if ($u["context"] &&
94 ilContext::directCall($u["context"], "supportsPushMessages")) {
95 self::$online_users[$u["user_id"]] = $u;
96 self::$online_user_ids[] = $u["user_id"];
97 }
98 }
99 }
100 return self::$online_users;
101 }
102
103
109 public function collectUsers($a_online_only = false)
110 {
111 global $rbacreview;
112
113 $this->collections = array();
114
115 $awrn_logger = ilLoggerFactory::getLogger('awrn');
116
117 $awrn_logger->debug("Start, Online Only: " . $a_online_only . ", Current User: " . $this->user_id);
118
120 include_once("./Services/Awareness/classes/class.ilAwarenessUserProviderFactory.php");
121 $all_users = array();
123 $awrn_logger->debug("Provider: " . $prov->getProviderId() . ", Activation Mode: " . $prov->getActivationMode() . ", Current User: " . $this->user_id);
124
125 // overall collection of users
126 include_once("./Services/Awareness/classes/class.ilAwarenessUserCollection.php");
128
129 if ($prov->getActivationMode() != ilAwarenessUserProvider::MODE_INACTIVE) {
130 $prov->setUserId($this->user_id);
131 $prov->setRefId($this->ref_id);
132 $prov->setOnlineUserFilter(false);
133 if ($prov->getActivationMode() == ilAwarenessUserProvider::MODE_ONLINE_ONLY || $a_online_only) {
134 $awrn_logger->debug("Provider: " . $prov->getProviderId() . ", Online Filter Users: " . count(self::$online_user_ids) . ", Current User: " . $this->user_id);
135 $prov->setOnlineUserFilter(self::$online_user_ids);
136 }
137
138 $coll = $prov->collectUsers();
139 $awrn_logger->debug("Provider: " . $prov->getProviderId() . ", Collected Users: " . count($coll) . ", Current User: " . $this->user_id);
140
141 foreach ($coll->getUsers() as $user_id) {
142 // filter out the anonymous user
143 if ($user_id == ANONYMOUS_USER_ID) {
144 continue;
145 }
146
147 $awrn_logger->debug("Current User: " . $this->user_id . ", " .
148 "Provider: " . $prov->getProviderId() . ", Collected User: " . $user_id);
149
150 // cross check online, filter out offline users (if necessary)
151 if ((!$a_online_only && $prov->getActivationMode() == ilAwarenessUserProvider::MODE_INCL_OFFLINE)
152 || in_array($user_id, self::$online_user_ids)) {
153 $collection->addUser($user_id);
154 if (!in_array($user_id, $all_users)) {
155 $all_users[] = $user_id;
156 }
157 }
158 }
159 }
160 $this->collections[] = array(
161 "uc_title" => $prov->getTitle(),
162 "highlighted" => $prov->isHighlighted(),
163 "collection" => $collection
164 );
165 }
166
167 $remove_users = array();
168
169 if ($this->settings->get("hide_own_online_status") == "n") {
170 // remove all users with hide_own_online_status "y"
171 foreach (ilObjUser::getUserSubsetByPreferenceValue($all_users, "hide_own_online_status", "y") as $u) {
172 $remove_users[] = $u;
173 }
174 } else {
175 // remove all, except user with hide_own_online_status "n"
176 $show_users = ilObjUser::getUserSubsetByPreferenceValue($all_users, "hide_own_online_status", "n");
177 $remove_users = array_filter($all_users, function ($i) use ($show_users) {
178 return !in_array($i, $show_users);
179 });
180 }
181
182 // remove all users that have not accepted the terms of service yet
183 require_once 'Services/TermsOfService/classes/class.ilTermsOfServiceHelper.php';
185 foreach (ilObjUser::getUsersAgreed(false, $all_users) as $u) {
186 if ($u != SYSTEM_USER_ID && !$rbacreview->isAssigned($u, SYSTEM_ROLE_ID)) {
187 //if ($u != SYSTEM_USER_ID)
188 $remove_users[] = $u;
189 }
190 }
191 }
192
193 $this->removeUsersFromCollections($remove_users);
194
195 return $this->collections;
196 }
197
203 protected function removeUsersFromCollections($a_remove_users)
204 {
205 foreach ($this->collections as $c) {
206 reset($a_remove_users);
207 foreach ($a_remove_users as $u) {
208 $c["collection"]->removeUser($u);
209 }
210 }
211 }
212}
An exception for terminatinating execution or to throw for unit testing.
Collects users from all providers.
removeUsersFromCollections($a_remove_users)
Remove users from collection.
static getOnlineUsers()
Get online users.
static getInstance($a_user_id)
Get instance (for a user)
collectUsers($a_online_only=false)
Collect users.
static getAllProviders()
Get all awareness providers.
static directCall($a_type, $a_method)
Call context method directly without internal handling.
static getLogger($a_component_id)
Get component logger.
static getUserSubsetByPreferenceValue($a_user_ids, $a_keyword, $a_val)
For a given set of user IDs return a subset that has a given user preference set.
static getUsersAgreed($a_agreed=true, $a_users=null)
Get users that have or have not agreed to the user agreement.
$i
Definition: disco.tpl.php:19
global $DIC
Definition: saml.php:7
settings()
Definition: settings.php:2