PluginProbe
The Innovative Form Builder – IvyForms / 1.5.1
The Innovative Form Builder – IvyForms v1.5.1
1.5.1 1.5 1.4.1 1.4 trunk 0.1.2 0.2 0.2.1 0.3 0.3.1 0.4 0.5 0.6 0.6.1 0.6.1-backup 0.6.1.1 0.7 0.8 0.8.1 0.8.2 0.9 0.9.1 1.0 1.1 1.1.1 All 27 releases
ivyforms / backend / src / Controllers / Permissions / GetPermissionsMetaController.php

GetPermissionsMetaController.php in The Innovative Form Builder – IvyForms 1.5.1, at backend/src/Controllers/Permissions/GetPermissionsMetaController.php

100 lines 2.9 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 /**
4 * @copyright © Melograno Venture Studio. All rights reserved.
5 */
6
7 namespace IvyForms\Controllers\Permissions;
8
9 // phpcs:disable PSR1.Files.SideEffects
10 if (!defined('ABSPATH')) {
11 exit;
12 }
13
14 use IvyForms\Common\Exceptions\ForbiddenException;
15 use IvyForms\Common\Sanitizer\Sanitizer;
16 use IvyForms\Controllers\Controller;
17 use IvyForms\Repository\Permissions\AccessRulesRepository;
18 use IvyForms\Repository\Form\FormRepositoryInterface;
19 use IvyForms\Services\Permissions\PermissionCatalog;
20 use IvyForms\Services\Translations\BackendStrings;
21 use WP_REST_Request;
22 use WP_REST_Response;
23
24 class GetPermissionsMetaController extends Controller
25 {
26 private AccessRulesRepository $accessRulesRepository;
27 private FormRepositoryInterface $formRepository;
28
29 public function __construct(
30 AccessRulesRepository $accessRulesRepository,
31 FormRepositoryInterface $formRepository
32 ) {
33 $this->accessRulesRepository = $accessRulesRepository;
34 $this->formRepository = $formRepository;
35 }
36
37 /**
38 * @throws ForbiddenException
39 */
40 public function handle(WP_REST_Request $data): WP_REST_Response
41 {
42 Sanitizer::verifyNonce($data->get_header('X-WP-Nonce'));
43
44 $assignedRoleSlugs = $this->getAssignedRoleSlugs();
45 $roles = $this->buildRoles($assignedRoleSlugs);
46
47 return new WP_REST_Response(
48 [
49 'message' => BackendStrings::getCommonStrings()['ok'],
50 'permission_definitions' => PermissionCatalog::definitions(),
51 'dependency_map' => PermissionCatalog::dependencyMap(),
52 'roles' => $roles,
53 'forms' => $this->formRepository->getIdNamePairs(),
54 ],
55 200
56 );
57 }
58
59 /**
60 * @return list<string>
61 */
62 private function getAssignedRoleSlugs(): array
63 {
64 $assignedRoleSlugs = [];
65 $payload = $this->accessRulesRepository->getPayload();
66
67 foreach ($payload['rules'] as $rule) {
68 if (($rule['type'] ?? '') !== 'role' || empty($rule['role_slug'])) {
69 continue;
70 }
71 $assignedRoleSlugs[] = (string) $rule['role_slug'];
72 }
73
74 return array_values(array_unique($assignedRoleSlugs));
75 }
76
77 /**
78 * @param list<string> $assignedRoleSlugs
79 * @return list<array{slug:string,name:string,assigned:bool}>
80 */
81 private function buildRoles(array $assignedRoleSlugs): array
82 {
83 $wpRoles = wp_roles();
84 $roles = [];
85
86 foreach ($wpRoles->roles as $slug => $info) {
87 if ($slug === 'administrator') {
88 continue;
89 }
90 $roles[] = [
91 'slug' => $slug,
92 'name' => translate_user_role($info['name'] ?? $slug),
93 'assigned' => in_array($slug, $assignedRoleSlugs, true),
94 ];
95 }
96
97 return $roles;
98 }
99 }
100