3 namespace wcf\data\user\activity\event
;
5 use wcf\system\cache\runtime\UserProfileRuntimeCache
;
6 use wcf\system\language\LanguageFactory
;
7 use wcf\system\user\activity\event\UserActivityEventHandler
;
11 * Represents a list of viewable user activity events.
13 * @author Alexander Ebert
14 * @copyright 2001-2019 WoltLab GmbH
15 * @license GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
16 * @package WoltLabSuite\Core\Data\User\Activity\Event
18 * @method ViewableUserActivityEvent current()
19 * @method ViewableUserActivityEvent[] getObjects()
20 * @method ViewableUserActivityEvent|null getSingleObject()
21 * @method ViewableUserActivityEvent|null seach($objectID)
22 * @property ViewableUserActivityEvent[] $objects
24 class ViewableUserActivityEventList
extends UserActivityEventList
29 public $className = UserActivityEvent
::class;
34 public $decoratorClassName = ViewableUserActivityEvent
::class;
39 public $sqlLimit = 20;
44 public $sqlOrderBy = 'user_activity_event.time DESC, user_activity_event.eventID DESC';
49 public function __construct()
51 parent
::__construct();
53 if (LanguageFactory
::getInstance()->multilingualismEnabled() && \
count(WCF
::getUser()->getLanguageIDs())) {
54 $this->getConditionBuilder()->add(
55 '(user_activity_event.languageID IN (?) OR user_activity_event.languageID IS NULL)',
56 [WCF
::getUser()->getLanguageIDs()]
64 public function readObjects()
66 parent
::readObjects();
70 foreach ($this->objects
as $event) {
71 $userIDs[] = $event->userID
;
73 if (!isset($eventGroups[$event->objectTypeID
])) {
74 $objectType = UserActivityEventHandler
::getInstance()->getObjectType($event->objectTypeID
);
75 $eventGroups[$event->objectTypeID
] = [
76 'className' => $objectType->className
,
81 $eventGroups[$event->objectTypeID
]['objects'][] = $event;
85 if (!empty($userIDs)) {
86 UserProfileRuntimeCache
::getInstance()->cacheObjectIDs(\array_unique
($userIDs));
90 foreach ($eventGroups as $eventData) {
91 $eventClass = \
call_user_func([$eventData['className'], 'getInstance']);
92 $eventClass->prepare($eventData['objects']);
97 * Returns timestamp of oldest entry fetched.
101 public function getLastEventTime()
104 foreach ($this->objects
as $event) {
105 if (!$lastEventTime) {
106 $lastEventTime = $event->time
;
109 $lastEventTime = \
min($lastEventTime, $event->time
);
112 return $lastEventTime;
116 * Validates event permissions and returns a list of orphaned event ids.
120 public function validateEvents()
122 $orphanedEventIDs = [];
124 foreach ($this->objects
as $index => $event) {
125 if ($event->isOrphaned()) {
126 $orphanedEventIDs[] = $event->eventID
;
127 unset($this->objects
[$index]);
128 } elseif (!$event->isAccessible()) {
129 unset($this->objects
[$index]);
132 $this->indexToObject
= \array_keys
($this->objects
);
134 return $orphanedEventIDs;
138 * Truncates the items in object list to given number of items.
142 public function truncate($limit)
144 $this->objects
= \array_slice
($this->objects
, 0, $limit, true);
145 $this->indexToObject
= \array_keys
($this->objects
);