PluginProbe
Fluent Forms – Customizable Contact Forms, Survey, Quiz, & Conversational Form Builder / 4.3.13
Fluent Forms – Customizable Contact Forms, Survey, Quiz, & Conversational Form Builder v4.3.13
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.13, at app/Modules/Acl/Managers.php

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