formService = $formService; $this->fieldService = $fieldService; $this->notificationService = $notificationService; $this->mailerService = $mailerService; } /** * @param WP_REST_Request $data * * @return WP_REST_Response * * @throws InvalidArgumentException|NotFoundException|ForbiddenException */ public function handle(WP_REST_Request $data): WP_REST_Response { // Verify the nonce Sanitizer::verifyNonce($data->get_header('X-WP-Nonce')); // Validate request data if (empty($data->get_params())) { throw new InvalidArgumentException('Invalid request data.'); } // Get form ID from submission $formId = Sanitizer::sanitizeId($data->get_param('formId')); // Verify the submission nonce Sanitizer::verifySubmissionNonce($data->get_param('nonce'), $formId); if ($formId <= 0) { throw new InvalidArgumentException('Invalid form ID.'); } // Get form details $form = $this->formService->getFormById($formId); // Get form fields $formFields = $this->fieldService->getAllFields($form->getId()); // Sanitize form submission data based on field types $submissionData = Sanitizer::sanitizeFormSubmissionData($data->get_params(), $formFields); // Get active notifications for this form $activeNotifications = $this->notificationService->getActiveNotificationsByFormId($form->getId()); // Process each active notification foreach ($activeNotifications as $notification) { // Skip notifications with empty receivers if (empty($notification->getReceiver())) { continue; } // Send email using our mailer service $sent = $this->mailerService->sendEmail($notification, $submissionData); if (!$sent) { if (defined('WP_DEBUG') && WP_DEBUG) { error_log('Failed to send email notification for form ID: ' . $formId); } return new WP_REST_Response([ 'message' => BackendStrings::getCommonStrings()['ok'], 'data' => [ 'success' => false ], ], 200); } } return new WP_REST_Response([ 'message' => BackendStrings::getCommonStrings()['ok'], 'data' => [ 'success' => true ], ], 200); } }