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 / Routes / Entry / Entry.php

Entry.php in The Innovative Form Builder – IvyForms 1.5.1, at backend/src/Routes/Entry/Entry.php

197 lines 7.2 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace IvyForms\Routes\Entry;
4
5 use IvyForms\Vendor\DI\Container;
6 use IvyForms\Vendor\DI\DependencyException;
7 use IvyForms\Vendor\DI\NotFoundException;
8 use IvyForms\Controllers\Entry\BulkUpdateEntryController;
9 use IvyForms\Controllers\Entry\DeleteEntriesController;
10 use IvyForms\Controllers\Entry\DeleteEntryController;
11 use IvyForms\Controllers\Entry\GetEntryController;
12 use IvyForms\Controllers\Entry\GetEntryCountController;
13 use IvyForms\Controllers\Entry\GetEntryFormsController;
14 use IvyForms\Controllers\Entry\SearchEntriesController;
15 use IvyForms\Controllers\Entry\UpdateEntryStarredController;
16 use IvyForms\Controllers\Entry\UpdateEntryStatusController;
17 use IvyForms\Infrastructure\WP\REST\RestRouteParamReader;
18 use IvyForms\Services\Permissions\PermissionResourceResolver;
19 use IvyForms\Services\Permissions\RoutePermissionService;
20 use WP_REST_Server;
21
22 class Entry
23 {
24 /**
25 * @throws DependencyException
26 * @throws NotFoundException
27 */
28 public static function registerRoutes(Container $container, string $routeNamespace): void
29 {
30 self::registerEntryReadRoutes($container, $routeNamespace);
31 self::registerEntryWriteRoutes($container, $routeNamespace);
32 }
33
34 /**
35 * @throws DependencyException
36 * @throws NotFoundException
37 */
38 private static function registerEntryReadRoutes(Container $container, string $routeNamespace): void
39 {
40 $routePermissionService = $container->get(RoutePermissionService::class);
41 $permissionResourceResolver = $container->get(PermissionResourceResolver::class);
42
43 register_rest_route(
44 $routeNamespace,
45 '/entry/(?P<id>\d+)',
46 [
47 'methods' => WP_REST_Server::READABLE,
48 'callback' => $container->get(GetEntryController::class),
49 'permission_callback' => self::permissionForEntryForm(
50 $permissionResourceResolver,
51 static function (int $formId) use ($routePermissionService): bool {
52 return $routePermissionService->canViewEntries($formId);
53 }
54 ),
55 ]
56 );
57
58 register_rest_route(
59 $routeNamespace,
60 '/entries/forms',
61 [
62 'methods' => WP_REST_Server::READABLE,
63 'callback' => $container->get(GetEntryFormsController::class),
64 'permission_callback' => static function () use ($routePermissionService) {
65 return $routePermissionService->canViewEntries();
66 },
67 ]
68 );
69
70 register_rest_route(
71 $routeNamespace,
72 '/entries/search',
73 [
74 'methods' => WP_REST_Server::READABLE,
75 'callback' => $container->get(SearchEntriesController::class),
76 'permission_callback' => static function () use ($routePermissionService) {
77 return $routePermissionService->canViewEntries();
78 },
79 ]
80 );
81
82 register_rest_route(
83 $routeNamespace,
84 '/entries/count',
85 [
86 'methods' => WP_REST_Server::READABLE,
87 'callback' => $container->get(GetEntryCountController::class),
88 'permission_callback' => static function () use ($routePermissionService) {
89 return $routePermissionService->canViewEntries();
90 },
91 ]
92 );
93 }
94
95 /**
96 * @throws DependencyException
97 * @throws NotFoundException
98 */
99 private static function registerEntryWriteRoutes(Container $container, string $routeNamespace): void
100 {
101 $routePermissionService = $container->get(RoutePermissionService::class);
102 $permissionResourceResolver = $container->get(PermissionResourceResolver::class);
103
104 register_rest_route(
105 $routeNamespace,
106 '/entries/delete',
107 [
108 'methods' => WP_REST_Server::CREATABLE,
109 'callback' => $container->get(DeleteEntriesController::class),
110 'permission_callback' => static function () use ($routePermissionService) {
111 return $routePermissionService->canDeleteEntries();
112 },
113 ]
114 );
115
116 register_rest_route(
117 $routeNamespace,
118 '/entry/delete/(?P<id>\d+)',
119 [
120 'methods' => WP_REST_Server::CREATABLE,
121 'callback' => $container->get(DeleteEntryController::class),
122 'permission_callback' => self::permissionForEntryForm(
123 $permissionResourceResolver,
124 static function (int $formId) use ($routePermissionService): bool {
125 return $routePermissionService->canDeleteEntries($formId);
126 }
127 ),
128 ]
129 );
130
131 register_rest_route(
132 $routeNamespace,
133 '/entry/update/starred/(?P<id>\d+)',
134 [
135 'methods' => WP_REST_Server::CREATABLE,
136 'callback' => $container->get(UpdateEntryStarredController::class),
137 'permission_callback' => self::permissionForEntryForm(
138 $permissionResourceResolver,
139 static function (int $formId) use ($routePermissionService): bool {
140 return $routePermissionService->canEditEntries($formId);
141 }
142 ),
143 ]
144 );
145
146 register_rest_route(
147 $routeNamespace,
148 '/entry/update/status/(?P<id>\d+)',
149 [
150 'methods' => WP_REST_Server::CREATABLE,
151 'callback' => $container->get(UpdateEntryStatusController::class),
152 'permission_callback' => self::permissionForEntryForm(
153 $permissionResourceResolver,
154 static function (int $formId) use ($routePermissionService): bool {
155 return $routePermissionService->canEditEntries($formId);
156 }
157 ),
158 ]
159 );
160
161 register_rest_route(
162 $routeNamespace,
163 '/entries/batch-actions',
164 [
165 'methods' => WP_REST_Server::CREATABLE,
166 'callback' => [$container->get(BulkUpdateEntryController::class), 'handle'],
167 'permission_callback' => static function () use ($routePermissionService) {
168 return $routePermissionService->canEditEntries();
169 },
170 ]
171 );
172 }
173
174 /**
175 * @param callable(int): bool $canAccessForm
176 * @return callable
177 */
178 private static function permissionForEntryForm(
179 PermissionResourceResolver $permissionResourceResolver,
180 callable $canAccessForm
181 ): callable {
182 return static function ($request) use ($permissionResourceResolver, $canAccessForm): bool {
183 $entryId = RestRouteParamReader::getPositiveIntParam($request);
184 if ($entryId === null) {
185 return false;
186 }
187
188 $formId = $permissionResourceResolver->formIdFromEntryId($entryId);
189 if ($formId === null) {
190 return false;
191 }
192
193 return $canAccessForm($formId);
194 };
195 }
196 }
197