Merge branch '5.2' into 5.3
[GitHub/WoltLab/WCF.git] / wcfsetup / install / files / lib / page / PaidSubscriptionListPage.class.php
1 <?php
2 namespace wcf\page;
3 use wcf\data\paid\subscription\user\PaidSubscriptionUserList;
4 use wcf\system\cache\builder\PaidSubscriptionCacheBuilder;
5 use wcf\system\exception\PermissionDeniedException;
6 use wcf\system\menu\user\UserMenu;
7 use wcf\system\WCF;
8
9 /**
10 * Shows a list of the available paid subscriptions.
11 *
12 * @author Marcel Werk
13 * @copyright 2001-2019 WoltLab GmbH
14 * @license GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
15 * @package WoltLabSuite\Core\Page
16 */
17 class PaidSubscriptionListPage extends AbstractPage {
18 /**
19 * @inheritDoc
20 */
21 public $loginRequired = true;
22
23 /**
24 * @inheritDoc
25 */
26 public $neededModules = ['MODULE_PAID_SUBSCRIPTION'];
27
28 /**
29 * @inheritDoc
30 */
31 public $neededPermissions = ['user.profile.payment.canBuyPaidSubscription'];
32
33 /**
34 * list of available paid subscriptions
35 * @var array
36 */
37 public $subscriptions = [];
38
39 /**
40 * list of user subscriptions
41 * @var PaidSubscriptionUserList
42 */
43 public $userSubscriptionList = [];
44
45 /**
46 * @inheritDoc
47 */
48 public function checkPermissions() {
49 parent::checkPermissions();
50
51 if (WCF::getUser()->pendingActivation()) {
52 throw new PermissionDeniedException();
53 }
54 }
55
56 /**
57 * @inheritDoc
58 */
59 public function readData() {
60 parent::readData();
61
62 // get available subscriptions
63 $this->subscriptions = PaidSubscriptionCacheBuilder::getInstance()->getData();
64
65 // get user subscriptions
66 $this->userSubscriptionList = new PaidSubscriptionUserList();
67 $this->userSubscriptionList->getConditionBuilder()->add('userID = ?', [WCF::getUser()->userID]);
68 $this->userSubscriptionList->getConditionBuilder()->add('isActive = ?', [1]);
69 $this->userSubscriptionList->readObjects();
70
71 foreach ($this->userSubscriptionList as $userSubscription) {
72 if (isset($this->subscriptions[$userSubscription->subscriptionID])) {
73 $userSubscription->setSubscription($this->subscriptions[$userSubscription->subscriptionID]);
74 unset($this->subscriptions[$userSubscription->subscriptionID]);
75 }
76 }
77 foreach ($this->userSubscriptionList as $userSubscription) {
78 if ($userSubscription->getSubscription()->excludedSubscriptionIDs) {
79 foreach (explode(',', $userSubscription->getSubscription()->excludedSubscriptionIDs) as $subscriptionID) {
80 if (isset($this->subscriptions[$subscriptionID])) unset($this->subscriptions[$subscriptionID]);
81 }
82 }
83 }
84 }
85
86 /**
87 * @inheritDoc
88 */
89 public function assignVariables() {
90 parent::assignVariables();
91
92 WCF::getTPL()->assign([
93 'subscriptions' => $this->subscriptions,
94 'userSubscriptions' => $this->userSubscriptionList
95 ]);
96 }
97
98 /**
99 * @inheritDoc
100 */
101 public function show() {
102 // set active tab
103 UserMenu::getInstance()->setActiveMenuItem('wcf.user.menu.settings.paidSubscription');
104
105 parent::show();
106 }
107 }