PluginProbe
Fluent Forms – Customizable Contact Forms, Survey, Quiz, & Conversational Form Builder / 4.3.21
Fluent Forms – Customizable Contact Forms, Survey, Quiz, & Conversational Form Builder v4.3.21
6.2.14 6.2.13 6.2.12 6.2.10 6.2.11 6.2.9 6.2.8 6.2.7 6.2.6 6.2.5 6.2.4 6.2.3 6.2.2 3.6.22 3.6.31 3.6.40 3.6.41 3.6.42 3.6.50 3.6.51 3.6.60 3.6.61 3.6.62 3.6.64 3.6.65 All 196 releases
fluentform / app / Modules / Acl / Managers.php

Managers.php in Fluent Forms – Customizable Contact Forms, Survey, Quiz, & Conversational Form Builder 4.3.21, at app/Modules/Acl/Managers.php

165 lines 4.2 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace FluentForm\App\Modules\Acl;
4
5 use FluentValidator\Validator;
6 use FluentForm\Framework\Helpers\ArrayHelper;
7
8 class Managers
9 {
10 /**
11 * Request object
12 *
13 * @var \FluentForm\Framework\Request\Request $request
14 */
15 protected $request;
16
17 public function __construct()
18 {
19 $this->request = wpFluentForm('request');
20 }
21
22 public function get()
23 {
24 $limit = $this->request->get('per_page', 10);
25 $page = $this->request->get('page', 1);
26
27 $query = new \WP_User_Query([
28 'meta_key' => '_fluent_forms_has_role',
29 'meta_value' => 1,
30 'meta_compare' => '=',
31 'number' => $limit,
32 'paged' => $page,
33 ]);
34
35 $managers = [];
36
37 foreach ($query->get_results() as $user) {
38 $managers[] = [
39 'id' => $user->ID,
40 'first_name' => $user->first_name,
41 'last_name' => $user->last_name,
42 'email' => $user->user_email,
43 'permissions' => Acl::getUserPermissions($user),
44 ];
45 }
46
47 wp_send_json([
48 'managers' => [
49 'data' => $managers,
50 'total' => $query->get_total(),
51 ],
52 'permissions' => Acl::getReadablePermissions(),
53 ], 200);
54 }
55
56 public function store()
57 {
58 $manager = $this->request->get('manager');
59
60 $this->validate();
61
62 $permissions = ArrayHelper::get($manager, 'permissions', []);
63
64 $user = get_user_by('email', $manager['email']);
65
66 Acl::attachPermissions($user, $permissions);
67
68 update_user_meta($user->ID, '_fluent_forms_has_role', 1);
69
70 wp_send_json([
71 'message' => __('Manager has been saved.', 'fluentform'),
72 ], 200);
73 }
74
75 public function remove()
76 {
77 $user = get_user_by('ID', $this->request->get('id'));
78
79 if (!$user) {
80 return $this->sendError([
81 'message' => __('Associate user could not be found', 'fluentform'),
82 ]);
83 }
84
85 Acl::attachPermissions($user, []);
86
87 delete_user_meta($user->ID, '_fluent_forms_has_role');
88
89 wp_send_json([
90 'message' => __('Manager has been removed.', 'fluentform'),
91 ], 200);
92 }
93
94 private function validate()
95 {
96 $manager = $this->request->get('manager');
97
98 $rules = [
99 'permissions' => 'required',
100 'email' => 'required|email',
101 ];
102
103 $validator = Validator::make($manager, $rules);
104
105 $errors = null;
106
107 if ($validator->validate()->fails()) {
108 $errors = $validator->errors();
109 }
110
111 if (!isset($errors['email'])) {
112 $user = get_user_by('email', $manager['email']);
113
114 if (!$user) {
115 $errors['email'] = [
116 'no_user' => __('We could not found any user with this email.', 'fluentform'),
117 ];
118 }
119 }
120
121 if (!isset($errors['permissions'])) {
122 $message = $this->dependencyValidate($manager['permissions']);
123
124 if ($message) {
125 $errors['permissions'] = [
126 'dependency' => $message,
127 ];
128 }
129 }
130
131 if ($errors) {
132 $this->sendError([
133 'errors' => $errors,
134 ]);
135 }
136
137 return true;
138 }
139
140 private function sendError($data, $code = 423)
141 {
142 wp_send_json($data, $code);
143 }
144
145 public function dependencyValidate($permissions)
146 {
147 $allPermissions = Acl::getReadablePermissions();
148
149 foreach ($permissions as $permission) {
150 $depends = ArrayHelper::get($allPermissions, $permission . '.depends', []);
151
152 if ($depends && $more = array_values(array_diff($depends, $permissions))) {
153 $message = $allPermissions[$permission]['title'] . ' requires permission: ';
154
155 foreach ($more as $i => $p) {
156 $joiner = $i ? ', ' : '';
157 $message = $message . $joiner . $allPermissions[$p]['title'];
158 }
159
160 return $message;
161 }
162 }
163 }
164 }
165