PluginProbe ʕ •ᴥ•ʔ
FAPI Member / 2.2.30
FAPI Member v2.2.30
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 / Api / V2 / Endpoints / PagesController.php
fapi-member / src / Api / V2 / Endpoints Last commit date
ApiConnectionsController.php 3 months ago EmailsController.php 3 months ago MembershipsController.php 3 months ago PagesController.php 3 months ago SectionsController.php 3 months ago StatisticsController.php 3 months ago UsersController.php 3 months ago
PagesController.php
216 lines
1 <?php
2
3 namespace FapiMember\Api\V2\Endpoints;
4
5 use FapiMember\Api\V2\ApiController;
6 use FapiMember\Container\Container;
7 use FapiMember\Library\SmartEmailing\Types\Arrays;
8 use FapiMember\Library\SmartEmailing\Types\IntType;
9 use FapiMember\Model\Enums\Keys\SettingsKey;
10 use FapiMember\Model\Enums\Types\RequestMethodType;
11 use FapiMember\Model\Enums\Types\ServicePageType;
12 use FapiMember\Model\Settings;
13 use FapiMember\Repository\LevelRepository;
14 use FapiMember\Repository\PageRepository;
15 use FapiMember\Repository\SettingsRepository;
16 use Throwable;
17 use WP_REST_Request;
18
19 class PagesController
20 {
21 private PageRepository $pageRepository;
22 private SettingsRepository $settingsRepository;
23 private LevelRepository $levelRepository;
24 private ApiController $apiController;
25
26 public function __construct()
27 {
28 $this->pageRepository = Container::get(PageRepository::class);
29 $this->settingsRepository = Container::get(SettingsRepository::class);
30 $this->levelRepository = Container::get(LevelRepository::class);
31 $this->apiController = Container::get(ApiController::class);
32 }
33
34 public function list(): array
35 {
36 $pages = $this->pageRepository->getAllPages();
37 $pageData = [];
38
39 foreach ($pages as $page) {
40 $pageData[] = $page->toArray();
41 }
42
43 return $pageData;
44 }
45
46 public function listWithCpts(): array
47 {
48 $pages = $this->pageRepository->getAllPages(true);
49 $pageData = [];
50
51 foreach ($pages as $page) {
52 $pageData[] = $page->toArray();
53 }
54
55 return $pageData;
56 }
57
58 public function getIdsByAllLevels(WP_REST_Request $request): array
59 {
60 $this->apiController->checkRequestMethod($request, RequestMethodType::GET);
61
62 $levels = $this->levelRepository->getAllAsLevels();
63 $pageIds = [];
64
65 foreach ($levels as $level) {
66 $pageIds[$level->getId()] = $this->pageRepository->getPageIdsByLevelId($level->getId());
67 }
68
69 return $pageIds;
70 }
71
72 public function getIdsByLevel(WP_REST_Request $request): array
73 {
74 $this->apiController->checkRequestMethod($request, RequestMethodType::POST);
75 $body = json_decode($request->get_body(), true);
76
77 $levelId = $this->apiController->extractParam($body, 'level_id', IntType::class);
78
79 return $this->pageRepository->getPageIdsByLevelId($levelId);
80 }
81
82
83 public function updatePagesForLevel(WP_REST_Request $request): bool
84 {
85 $this->apiController->checkRequestMethod($request, RequestMethodType::POST);
86 $body = json_decode($request->get_body(), true);
87
88 $levelId = $this->apiController->extractParam($body, 'level_id', IntType::class);
89 $pages = $this->apiController->extractParam($body, 'pages', Arrays::class);
90
91
92 try{
93 $this->pageRepository->updatePagesForLevel($levelId, $pages);
94 } catch (Throwable) {
95 $this->apiController->callbackError([
96 'class'=> self::class,
97 'description' => "Page update failed",
98 ]);
99 }
100
101 $this->apiController->callbackSettingsSaved();
102 }
103
104 public function addPagesToLevel(WP_REST_Request $request): bool
105 {
106 $this->apiController->checkRequestMethod($request, RequestMethodType::POST);
107 $body = json_decode($request->get_body(), true);
108
109 $levelId = $this->apiController->extractParam($body, 'level_id', IntType::class);
110 $pages = $this->apiController->extractParam($body, 'pages', Arrays::class);
111
112 try{
113 $data = [];
114 $data['pages'] = $this->pageRepository->addPages($levelId, $pages);
115 } catch (Throwable) {
116 $this->apiController->callbackError([
117 'class'=> self::class,
118 'description' => "Page update failed",
119 ]);
120 }
121
122 $this->apiController->callbackSettingsSaved($data);
123 }
124
125 public function getServicePagesByLevel(WP_REST_Request $request): array
126 {
127 $this->apiController->checkRequestMethod($request, RequestMethodType::POST);
128 $body = json_decode($request->get_body(), true);
129
130 $levelId = $this->apiController->extractParam($body, 'level_id', IntType::class);
131
132 return [
133 ServicePageType::NO_ACCESS => $this->pageRepository->getNoAccessPageId($levelId),
134 ServicePageType::LOGIN => $this->pageRepository->getLoginPageId($levelId),
135 ServicePageType::AFTER_LOGIN => $this->pageRepository->getAfterLoginPageId($levelId),
136 ];
137
138 }
139
140 public function updateServicePagesForLevel(WP_REST_Request $request): void
141 {
142 $this->apiController->checkRequestMethod($request, RequestMethodType::POST);
143 $body = json_decode($request->get_body(), true);
144
145 $levelId = $this->apiController->extractParam($body, 'level_id', IntType::class);
146
147 $pages = [];
148
149 if (isset($body['pages']) && is_array($body['pages'])) {
150 $pages = $body['pages'];
151 } else {
152 $this->apiController->invalidParameterError('pages');
153 }
154
155 try {
156 foreach ($pages as $type => $page) {
157 if (ServicePageType::isValidValue($type)) {
158 $this->pageRepository->updateServicePage($levelId, $type, $page);
159 }
160 }
161 } catch (Throwable) {
162 $this->apiController->callbackError([
163 'class'=> self::class,
164 'description' => "Failed to update service pages",
165 ]);
166 }
167
168 $this->apiController->callbackSettingsSaved();
169 }
170
171 public function getCommonPagesByLevel(WP_REST_Request $request): array
172 {
173 $this->apiController->checkRequestMethod($request, RequestMethodType::POST);
174
175 return [
176 SettingsKey::LOGIN_PAGE => $this->pageRepository->getCommonLoginPageId(),
177 SettingsKey::DASHBOARD_PAGE => $this->pageRepository->getCommonDashboardPageId(),
178 SettingsKey::TIME_LOCKED_PAGE => $this->pageRepository->getTimedUnlockNoAccessPageId(),
179 ];
180
181 }
182
183 public function updateCommonPagesForLevel(WP_REST_Request $request): void
184 {
185 $this->apiController->checkRequestMethod($request, RequestMethodType::POST);
186 $body = json_decode($request->get_body(), true);
187
188 $pages = [];
189
190 if (isset($body['pages']) && is_array($body['pages'])) {
191 $pages = $body['pages'];
192 } else {
193 $this->apiController->invalidParameterError('pages');
194 }
195
196 try {
197 $settingsData = [];
198 foreach ($pages as $type => $page) {
199 if (SettingsKey::isValidValue($type)) {
200 $settingsData[$type] = $page;
201 }
202 }
203 $this->settingsRepository->updateSettings(new Settings($settingsData));
204 } catch (Throwable) {
205 $this->apiController->callbackError([
206 'class'=> self::class,
207 'description' => "Failed to update common pages",
208 ]);
209 }
210
211 $this->apiController->callbackSettingsSaved();
212 }
213
214
215 }
216