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 / UsersController.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
UsersController.php
138 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\IntType;
8 use FapiMember\Library\SmartEmailing\Types\StringType;
9 use FapiMember\Model\Enums\Alert;
10 use FapiMember\Model\Enums\Types\RequestMethodType;
11 use FapiMember\Repository\MembershipRepository;
12 use FapiMember\Repository\UserRepository;
13 use FapiMember\Service\ApiService;
14 use FapiMember\Service\UserService;
15 use WP_REST_Request;
16
17 class UsersController
18 {
19 private UserRepository $userRepository;
20 private MembershipRepository $membershipRepository;
21 private UserService $userService;
22 private ApiService $apiService;
23 private ApiController $apiController;
24
25 public function __construct()
26 {
27 $this->userRepository = Container::get(UserRepository::class);
28 $this->membershipRepository = Container::get(MembershipRepository::class);
29 $this->userService = Container::get(UserService::class);
30 $this->apiService = Container::get(ApiService::class);
31 $this->apiController = Container::get(ApiController::class);
32 }
33
34 public function list(): array
35 {
36 $users = $this->userRepository->getAllUsers();
37 $userData = [];
38
39 foreach ($users as $user) {
40 $userData[] = $user->toArray();
41 }
42 return $userData;
43 }
44
45 public function getByEmail(WP_REST_Request $request): array|null
46 {
47 $this->apiController->checkRequestMethod($request, RequestMethodType::POST);
48 $body = json_decode($request->get_body(), true);
49
50 $email = $this->apiController->extractParamOrNull($body, 'email', StringType::class);
51
52 $user = $this->userService->getUser($email);
53
54 if ($user === null) {
55 return null;
56 }
57
58 $memberships = $this->membershipRepository->getActiveByUserId($user->getId());
59 $levelIds = [];
60
61 foreach ($memberships as $membership) {
62 $levelIds[] = $membership->getLevelId();
63 }
64
65 $user->setLevelIds($levelIds);
66
67 return $this->userService->getUser($email)?->toArray();
68 }
69
70 public function create(array $body): bool
71 {
72 $email = $this->apiController->extractParamOrNull($body, 'email', StringType::class);
73
74 if ($email === null) {
75 $this->apiController->callbackError([
76 'class'=> self::class,
77 'description' => "Missing paramater: email.",
78 ], Alert::MISSING_EMAIL);
79 }
80
81 if (!is_email($email)) {
82 $this->apiController->callbackError([
83 'class' => self::class,
84 'description' => 'Invalid email provided. Email given: ' . $email,
85 ], Alert::INVALID_EMAIL);
86 }
87
88 $user = $this->userService->getOrCreateUser($body);
89
90 return $user !== null;
91 }
92
93 public function listMembers(WP_REST_Request $request): array
94 {
95 $this->apiController->checkRequestMethod($request, RequestMethodType::GET);
96 $users = $this->userRepository->getAllMemberUsers();
97 $usersData = [];
98
99 foreach ($users as $user) {
100 $memberships = $this->membershipRepository->getActiveByUserId($user->getId());
101 $levelIds = [];
102
103 foreach ($memberships as $membership) {
104 $levelIds[] = $membership->getLevelId();
105 }
106
107 $user->setLevelIds($levelIds);
108
109 $usersData[] = $user->toArray();
110 }
111
112 return $usersData;
113 }
114
115 public function getByLevel(WP_REST_Request $request): array
116 {
117 $this->apiController->checkRequestMethod($request, RequestMethodType::POST);
118 $body = json_decode($request->get_body(), true);
119
120 $levelId = $this->apiController->extractParam($body, 'level_id', IntType::class);
121
122 $memberships = $this->membershipRepository->getAllByLevelId($levelId);
123 $users = $this->userRepository->getAllUsers();
124 $userData = [];
125
126 foreach ($memberships as $membership) {
127 foreach ($users as $user) {
128 if ($user->getId() === $membership->getUserId()) {
129 $userData[] = $user->toArray();
130 }
131 }
132 }
133
134 return $userData;
135 }
136
137 }
138