b3c83bcc9b63a2e531aa9c5e0900b5402d99e314
[GitHub/WoltLab/WCF.git] /
1 <?php
2 declare(strict_types=1);
3 namespace wcf\system\user\notification\event;
4 use wcf\data\paid\subscription\user\PaidSubscriptionUser;
5 use wcf\data\paid\subscription\user\PaidSubscriptionUserAction;
6 use wcf\data\paid\subscription\user\PaidSubscriptionUserList;
7 use wcf\data\paid\subscription\PaidSubscription;
8 use wcf\data\paid\subscription\PaidSubscriptionAction;
9 use wcf\data\user\UserProfile;
10 use wcf\system\request\LinkHandler;
11 use wcf\system\user\notification\object\PaidSubscriptionUserUserNotificationObject;
12 use wcf\system\WCF;
13
14 /**
15 * Notification event for expiring paid subscriptions.
16 *
17 * @author Matthias Schmidt
18 * @copyright 2001-2018 WoltLab GmbH
19 * @license GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
20 * @package WoltLabSuite\Core\System\User\Notification\Event
21 * @since 3.1
22 *
23 * @method PaidSubscriptionUserUserNotificationObject getUserNotificationObject()
24 */
25 class ExpiringPaidSubscriptionUserUserNotificationEvent extends AbstractUserNotificationEvent implements ITestableUserNotificationEvent {
26 use TTestableUserNotificationEvent;
27
28 /**
29 * @inheritDoc
30 */
31 public function getLink() {
32 return LinkHandler::getInstance()->getLink('PaidSubscriptionList', ['forceFrontend' => true]);
33 }
34
35 /**
36 * @inheritDoc
37 */
38 public function getMessage() {
39 return $this->getLanguage()->getDynamicVariable('wcf.paidSubscription.expiringSubscription.notification.message', [
40 'author' => $this->author,
41 'notification' => $this->notification,
42 'userNotificationObject' => $this->getUserNotificationObject()
43 ]);
44 }
45
46 /**
47 * @inheritDoc
48 */
49 public function getEmailMessage($notificationType = 'instant') {
50 return [
51 'template' => 'email_notification_expiringPaidSubscription',
52 'application' => 'wcf',
53 'variables' => [
54 'notification' => $this->notification,
55 'subscription' => $this->getUserNotificationObject()
56 ]
57 ];
58 }
59
60 /**
61 * @inheritDoc
62 */
63 public function getTitle() {
64 return $this->getLanguage()->get('wcf.paidSubscription.expiringSubscription.notification.title');
65 }
66
67 /**
68 * @inheritDoc
69 */
70 public function isVisible() {
71 $userSubscriptionList = new PaidSubscriptionUserList();
72 $userSubscriptionList->getConditionBuilder()->add('userID = ?', [WCF::getUser()->userID]);
73 $userSubscriptionList->getConditionBuilder()->add('isActive = ?', [1]);
74
75 return $userSubscriptionList->countObjects() > 0;
76 }
77
78 /**
79 * @inheritDoc
80 * @return PaidSubscriptionUserUserNotificationObject[]
81 * @since 3.1
82 */
83 public static function getTestObjects(UserProfile $recipient, UserProfile $author) {
84 /** @var PaidSubscription $paidSubscription */
85 $paidSubscription = (new PaidSubscriptionAction([], 'create', [
86 'data' => [
87 'title' => 'Test Subscription'
88 ]
89 ]))->executeAction()['returnValues'];
90
91 /** @var PaidSubscriptionUser $paidSubscriptionUser */
92 $paidSubscriptionUser = (new PaidSubscriptionUserAction([], 'create', [
93 'data' => [
94 'startDate' => TIME_NOW - 24 * 24 * 60 * 60,
95 'endDate' => TIME_NOW + 24 * 60 * 60,
96 'isActive' => 1,
97 'sentExpirationNotification' => 0
98 ],
99 'subscription' => $paidSubscription,
100 'user' => $recipient
101 ]))->executeAction()['returnValues'];
102
103 $paidSubscriptionUser->setSubscription($paidSubscription);
104
105 return [new PaidSubscriptionUserUserNotificationObject($paidSubscriptionUser)];
106 }
107 }