PluginProbe ʕ •ᴥ•ʔ
FAPI Member / 2.2.32
FAPI Member v2.2.32
2.2.33 2.2.32 trunk 1.9.47 2.1.18 2.2.24 2.2.25 2.2.26 2.2.28 2.2.29 2.2.30 2.2.31
fapi-member / src / Service / EmailService.php
fapi-member / src / Service Last commit date
ApiService.php 2 weeks ago ElementService.php 2 weeks ago EmailService.php 2 weeks ago FormService.php 2 weeks ago LevelOrderService.php 2 weeks ago LevelService.php 2 weeks ago MembershipService.php 2 weeks ago RedirectService.php 2 weeks ago SanitizationService.php 2 weeks ago StatisticsService.php 2 weeks ago UserService.php 2 weeks ago
EmailService.php
191 lines
1 <?php
2
3 namespace FapiMember\Service;
4
5 use FapiMember\Api\V2\ApiController;
6 use FapiMember\Container\Container;
7 use FapiMember\FapiMemberPlugin;
8 use FapiMember\Model\Enums\Keys\OptionKey;
9 use FapiMember\Model\Enums\Types\EmailType;
10 use FapiMember\Model\MemberLevel;
11 use FapiMember\Repository\EmailRepository;
12 use FapiMember\Utils\EmailHelper;
13 use FapiMember\Utils\SecurityValidator;
14
15 class EmailService
16 {
17 private ApiService $apiService;
18 private EmailRepository $emailRepository;
19 private ApiController $apiController;
20
21 public function __construct()
22 {
23 $this->apiService = Container::get(ApiService::class);
24 $this->emailRepository = Container::get(EmailRepository::class);
25 $this->apiController = Container::get(ApiController::class);
26 }
27
28 public function sendEmail(string $email, string $type, int $levelId, array $props): bool
29 {
30 $emails = $this->emailRepository->getTemplatesForLevel($levelId, true);
31
32 if (!isset($emails[$type])) {
33 return false;
34 }
35
36 $subject = $emails[$type]['s'];
37 $body = $emails[$type]['b'];
38 $subject = EmailHelper::replaceShortcodes($subject, $props);
39 $body = EmailHelper::replaceShortcodes($body, $props);
40
41 return wp_mail($email, $subject, $body);
42 }
43
44 /**
45 * @param array<MemberLevel> $levels
46 * @return array<array<string|MemberLevel>>
47 */
48 public function findEmailsToSend(
49 array $levels,
50 bool $wasUserCreated,
51 bool $newToMembership,
52 ): array
53 {
54 $toSend = [];
55
56 foreach ($levels as $level) {
57 if ($wasUserCreated === true) {
58 $toSend[] = [EmailType::AFTER_REGISTRATION, $level];
59
60 return $toSend;
61 }
62
63 if ($newToMembership) {
64 $toSend[] = [EmailType::AFTER_ADDING, $level];
65
66 continue;
67 }
68
69 $toSend[] = [EmailType::AFTER_MEMBERSHIP_PROLONGED, $level];
70 }
71
72 return $toSend;
73 }
74
75 public function getEmailFromValidVoucher(array $data): array
76 {
77 $voucherId = $data['voucher'];
78 $voucher = $this->apiService->getVoucher($voucherId);
79
80 if ($voucher === false) {
81 $this->apiController->callbackError(
82 array(
83 'class' => self::class,
84 'description' => 'Error getting voucher.',
85 'errors' => $this->apiService->getLastErrors(),
86 )
87 );
88 }
89
90 if (!isset($voucher['status']) || $voucher['status'] !== 'applied') {
91 $this->apiController->callbackError(
92 array(
93 'class' => self::class,
94 'description' => 'Voucher is not applied.',
95 )
96 );
97 }
98
99 if (!isset($voucher['applicant']['email'])) {
100 $this->apiController->callbackError(
101 array(
102 'class' => self::class,
103 'description' => 'Cannot find applicant email in API response.',
104 )
105 );
106 }
107
108 return array('email' => $voucher['applicant']['email']);
109 }
110
111 public function getEmailFromPaidInvoice(array $data): array
112 {
113 $invoice = $this->apiService->getInvoice((int) $data['id']);
114
115 if ($invoice === false) {
116 $this->apiController->callbackError(
117 array(
118 'class' => self::class,
119 'description' => 'Error getting invoice.',
120 'errors' => $this->apiService->getLastErrors(),
121 )
122 );
123 }
124
125 if (!FapiMemberPlugin::isDevelopment() &&
126 !SecurityValidator::isInvoiceSecurityValid($invoice, $data['time'], $data['security'])
127 ) {
128 $this->apiController->callbackError(
129 array(
130 'class' => self::class,
131 'description' => 'Invoice security is not valid.',
132 )
133 );
134 }
135
136 if (isset($invoice['parent'])) {
137 $this->apiController->callbackError(
138 array(
139 'class' => self::class,
140 'description' => 'Invoice parent is set and not null.',
141 )
142 );
143 }
144
145 if (!isset($invoice['customer']['email'])) {
146 $this->apiController->callbackError(
147 array(
148 'class' => self::class,
149 'description' => 'Cannot find customer email in API response.',
150 )
151 );
152 }
153
154 return array(
155 'email' => $invoice['customer']['email'],
156 'first_name' => isset($invoice['customer']['first_name']) ? $invoice['customer']['first_name'] : null,
157 'last_name' => isset($invoice['customer']['last_name']) ? $invoice['customer']['last_name'] : null,
158 );
159 }
160
161 public function getEmailFromBodyWithValidToken(array $data): array
162 {
163 $token = get_option(OptionKey::TOKEN, null);
164
165 if ($data['token'] !== $token) {
166 $this->apiController->callbackError(
167 array(
168 'class' => self::class,
169 'description' => 'Invalid token provided. Check token correctness.',
170 )
171 );
172 }
173
174 if (!isset($data['email'])) {
175 $this->apiController->callbackError(
176 array(
177 'class' => self::class,
178 'description' => 'Parameter email is missing.',
179 )
180 );
181 }
182
183 return array(
184 'email' => $data['email'],
185 'first_name' => isset($data['first_name']) ? $data['first_name'] : null,
186 'last_name' => isset($data['last_name']) ? $data['last_name'] : null,
187 );
188 }
189
190 }
191