Split additional joins into multiple lines
[GitHub/WoltLab/WCF.git] / wcfsetup / install / files / lib / data / moderation / queue / ViewableModerationQueueList.class.php
1 <?php
2
3 namespace wcf\data\moderation\queue;
4
5 use wcf\system\cache\runtime\UserProfileRuntimeCache;
6 use wcf\system\moderation\queue\ModerationQueueManager;
7 use wcf\system\WCF;
8
9 /**
10 * Represents a viewable list of moderation queue entries.
11 *
12 * WARNING: This database object list uses the moderation_queue_to_user table as primary
13 * table and uses a full join for moderation_queue, otherwise the LEFT JOIN
14 * would not work (MySQL is retarded).
15 *
16 * @author Alexander Ebert
17 * @copyright 2001-2019 WoltLab GmbH
18 * @license GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
19 * @package WoltLabSuite\Core\Data\Moderation\Queue
20 *
21 * @method ViewableModerationQueue current()
22 * @method ViewableModerationQueue[] getObjects()
23 * @method ViewableModerationQueue|null search($objectID)
24 * @property ViewableModerationQueue[] $objects
25 */
26 class ViewableModerationQueueList extends ModerationQueueList
27 {
28 /**
29 * @inheritDoc
30 */
31 public $decoratorClassName = ViewableModerationQueue::class;
32
33 /**
34 * @inheritDoc
35 */
36 public $useQualifiedShorthand = false;
37
38 /**
39 * @inheritDoc
40 */
41 public function __construct()
42 {
43 parent::__construct();
44
45 $this->sqlSelects = "moderation_queue.*, assigned_user.username AS assignedUsername, user_table.username";
46 $this->sqlConditionJoins = ", wcf" . WCF_N . "_moderation_queue moderation_queue";
47 $this->sqlJoins = ", wcf" . WCF_N . "_moderation_queue moderation_queue";
48 $this->sqlJoins .= "
49 LEFT JOIN wcf" . WCF_N . "_user assigned_user
50 ON assigned_user.userID = moderation_queue.assignedUserID
51 LEFT JOIN wcf" . WCF_N . "_user user_table
52 ON user_table.userID = moderation_queue.userID";
53 $this->getConditionBuilder()->add("moderation_queue_to_user.queueID = moderation_queue.queueID");
54 $this->getConditionBuilder()->add("moderation_queue_to_user.userID = ?", [WCF::getUser()->userID]);
55 $this->getConditionBuilder()->add("moderation_queue_to_user.isAffected = ?", [1]);
56 }
57
58 /**
59 * @inheritDoc
60 */
61 public function readObjects()
62 {
63 parent::readObjects();
64
65 if (!empty($this->objects)) {
66 $objects = [];
67 foreach ($this->objects as $object) {
68 if (!isset($objects[$object->objectTypeID])) {
69 $objects[$object->objectTypeID] = [];
70 }
71
72 $objects[$object->objectTypeID][] = $object;
73 }
74
75 foreach ($objects as $objectTypeID => $queueItems) {
76 ModerationQueueManager::getInstance()->populate($objectTypeID, $queueItems);
77 }
78
79 // check for non-existent items
80 $queueIDs = [];
81 foreach ($this->objects as $index => $object) {
82 if ($object->isOrphaned()) {
83 $queueIDs[] = $object->queueID;
84 unset($this->objects[$index]);
85 }
86 }
87
88 // remove orphaned queues
89 if (!empty($queueIDs)) {
90 $this->indexToObject = \array_keys($this->objects);
91
92 ModerationQueueManager::getInstance()->removeOrphans($queueIDs);
93 }
94
95 $userIDs = [];
96 foreach ($this->objects as $object) {
97 $userIDs[] = $object->getAffectedObject()->getUserID();
98 if ($object->assignedUserID) {
99 $userIDs[] = $object->assignedUserID;
100 }
101 }
102
103 UserProfileRuntimeCache::getInstance()->cacheObjectIDs(\array_unique($userIDs));
104 }
105 }
106
107 /**
108 * Returns the name of the database table.
109 *
110 * @return string
111 */
112 public function getDatabaseTableName()
113 {
114 return parent::getDatabaseTableName() . '_to_user';
115 }
116
117 /**
118 * Returns the name of the database table alias.
119 *
120 * @return string
121 */
122 public function getDatabaseTableAlias()
123 {
124 return parent::getDatabaseTableAlias() . '_to_user';
125 }
126 }