formService = $formService; $this->adminFormListPermissionService = $adminFormListPermissionService; } /** * @param WP_REST_Request $data * * @return WP_REST_Response * @throws ForbiddenException */ public function handle(WP_REST_Request $data): WP_REST_Response { Sanitizer::verifyNonce($data->get_header('X-WP-Nonce')); $allForms = $this->formService->getAllForms() ?? []; $forms = []; if (IvyFormsAccess::hasImplicitElevatedAccess()) { foreach ($allForms as $form) { $forms[] = ['id' => (int) $form->getId(), 'name' => (string) $form->getName()]; } return $this->buildResponse($forms); } $allFormIds = array_map(static fn($form) => (int) $form->getId(), $allForms); $visibleIds = array_flip($this->adminFormListPermissionService->filterFormIdsVisibleInEntryLists($allFormIds)); foreach ($allForms as $form) { if (!isset($visibleIds[(int) $form->getId()])) { continue; } $forms[] = ['id' => (int) $form->getId(), 'name' => (string) $form->getName()]; } return $this->buildResponse($forms); } /** * @param list $forms */ private function buildResponse(array $forms): WP_REST_Response { return new WP_REST_Response(['forms' => $forms], 200); } }