3 namespace wcf\system\box
;
5 use wcf\data\user\trophy\UserTrophyList
;
6 use wcf\system\cache\builder\UserOptionCacheBuilder
;
7 use wcf\system\cache\runtime\UserProfileRuntimeCache
;
8 use wcf\system\database\util\PreparedStatementConditionBuilder
;
12 * Box controller for a list of articles.
14 * @author Joshua Ruesweg
15 * @copyright 2001-2019 WoltLab GmbH
16 * @license GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
17 * @package WoltLabSuite\Core\System\Box
20 * @property UserTrophyList $objectList
22 class UserTrophyListBoxController
extends AbstractDatabaseObjectListBoxController
27 public $defaultLimit = 10;
32 public $maximumLimit = 50;
37 public $minimumLimit = 3;
42 protected static $supportedPositions = [
54 public $sortOrder = 'DESC';
59 public $sortField = 'time';
64 protected $conditionDefinition = 'com.woltlab.wcf.box.userTrophyList.condition';
69 protected function getObjectList()
71 $list = new UserTrophyList();
73 if (!empty($list->sqlJoins
)) {
74 $list->sqlJoins
.= ' ';
76 if (!empty($list->sqlConditionJoins
)) {
77 $list->sqlConditionJoins
.= ' ';
80 LEFT JOIN wcf' . WCF_N
. '_trophy trophy
81 ON user_trophy.trophyID = trophy.trophyID';
82 $list->sqlConditionJoins
.= '
83 LEFT JOIN wcf' . WCF_N
. '_trophy trophy
84 ON user_trophy.trophyID = trophy.trophyID';
86 // trophy category join
88 LEFT JOIN wcf' . WCF_N
. '_category category
89 ON trophy.categoryID = category.categoryID';
90 $list->sqlConditionJoins
.= '
91 LEFT JOIN wcf' . WCF_N
. '_category category
92 ON trophy.categoryID = category.categoryID';
94 $list->getConditionBuilder()->add('trophy.isDisabled = ?', [0]);
95 $list->getConditionBuilder()->add('category.isDisabled = ?', [0]);
97 if (!WCF
::getUser()->userID
) {
98 $list->getConditionBuilder()->add('user_trophy.userID IN (
100 FROM wcf' . WCF_N
. '_user_option_value
101 WHERE userOption' . UserOptionCacheBuilder
::getInstance()->getData()['options']['canViewTrophies']->optionID
. ' = 0
103 } elseif (!WCF
::getSession()->getPermission('admin.general.canViewPrivateUserOptions')) {
104 $conditionBuilder = new PreparedStatementConditionBuilder(false, 'OR');
105 $conditionBuilder->add('user_trophy.userID IN (
107 FROM wcf' . WCF_N
. '_user_option_value
109 userOption' . UserOptionCacheBuilder
::getInstance()->getData()['options']['canViewTrophies']->optionID
. ' = 0
110 OR userOption' . UserOptionCacheBuilder
::getInstance()->getData()['options']['canViewTrophies']->optionID
. ' = 1
114 $friendshipConditionBuilder = new PreparedStatementConditionBuilder(false);
115 $friendshipConditionBuilder->add('user_trophy.userID IN (
117 FROM wcf' . WCF_N
. '_user_option_value
118 WHERE userOption' . UserOptionCacheBuilder
::getInstance()->getData()['options']['canViewTrophies']->optionID
. ' = 2
120 $friendshipConditionBuilder->add(
121 'user_trophy.userID IN (
123 FROM wcf' . WCF_N
. '_user_follow
124 WHERE followUserID = ?
126 [WCF
::getUser()->userID
]
128 $conditionBuilder->add(
129 '(' . $friendshipConditionBuilder . ')',
130 $friendshipConditionBuilder->getParameters()
132 $conditionBuilder->add('user_trophy.userID = ?', [WCF
::getUser()->userID
]);
134 $list->getConditionBuilder()->add('(' . $conditionBuilder . ')', $conditionBuilder->getParameters());
143 public function getTemplate()
147 foreach ($this->objectList
->getObjects() as $trophy) {
148 $userIDs[] = $trophy->userID
;
151 UserProfileRuntimeCache
::getInstance()->cacheObjectIDs(\array_unique
($userIDs));
153 return WCF
::getTPL()->fetch('boxUserTrophyList', 'wcf', [
154 'boxUserTrophyList' => $this->objectList
,
155 'boxPosition' => $this->box
->position
,