PluginProbe
The Innovative Form Builder – IvyForms / 1.5
The Innovative Form Builder – IvyForms v1.5
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
← All changes | backend/src/Routes/Entry/Entry.php +196 -0 0.6.1 → 1.5 View file →
@@ -1,0 +1,196 @@
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 +}