PluginProbe
GiveWP – Donation Plugin and Fundraising Platform / 4.18.0
GiveWP – Donation Plugin and Fundraising Platform v4.18.0
4.18.0 4.17.0 4.16.9 4.16.8.1 4.16.8 4.16.7.2 4.16.7.1 4.16.7 4.16.6.1 4.16.6 4.16.5.1 4.16.5 4.16.4 4.16.3 4.16.2 4.16.1 4.16.0 4.15.5 4.15.4 4.15.3 4.15.2 4.15.1 4.15.0 2.3.0 2.3.1 All 257 releases
give / src / DonationForms / Routes / DonateRoute.php

DonateRoute.php in GiveWP – Donation Plugin and Fundraising Platform 4.18.0, at src/DonationForms/Routes/DonateRoute.php

124 lines 3.7 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace Give\DonationForms\Routes;
4
5 use Exception;
6 use Give\DonationForms\Actions\AuthenticateFormRequestWithToken;
7 use Give\DonationForms\Controllers\DonateController;
8 use Give\DonationForms\DataTransferObjects\DonateControllerData;
9 use Give\DonationForms\DataTransferObjects\DonateFormRouteData;
10 use Give\DonationForms\DataTransferObjects\DonateRouteData;
11 use Give\DonationForms\Exceptions\DonationFormFieldErrorsException;
12 use Give\DonationForms\Exceptions\DonationFormForbidden;
13 use Give\DonationForms\ValueObjects\DonationFormErrorTypes;
14 use Give\Framework\PaymentGateways\Exceptions\PaymentGatewayException;
15 use Give\Framework\PaymentGateways\Traits\HandleHttpResponses;
16 use Give\Log\Log;
17 use WP_Error;
18
19 /**
20 * @since 3.0.0
21 */
22 class DonateRoute
23 {
24 use HandleHttpResponses;
25
26 /**
27 * @var DonateController
28 */
29 private $donateController;
30
31 /**
32 * @since 3.0.0
33 *
34 * @param DonateController $donateController
35 */
36 public function __construct(DonateController $donateController)
37 {
38 $this->donateController = $donateController;
39 }
40
41 /**
42 * @since 4.17.0 Sign the donor in from the auth token when the login cookie is unavailable.
43 * @since 3.0.0
44 *
45 * @return void
46 */
47 public function __invoke(array $request)
48 {
49 // create DTO from GET request
50 $routeData = DonateRouteData::fromRequest(give_clean($_GET));
51
52 // validate signature
53 $routeData->validateSignature();
54
55 (new AuthenticateFormRequestWithToken())($request);
56
57 // create DTO from POST request
58 $formData = DonateFormRouteData::fromRequest($request);
59
60 try {
61 $data = $formData->validated();
62
63 /**
64 * Allow for additional validation of the donation form data.
65 * The donation flow can be interrupted by throwing an Exception.
66 *
67 * @since 3.15.0
68 *
69 * @param DonateControllerData $data
70 */
71 do_action('givewp_donate_form_data_validated', $data);
72
73 $this->donateController->donate($data, $data->getGateway());
74 } catch (DonationFormFieldErrorsException $exception) {
75 $type = DonationFormErrorTypes::VALIDATION;
76 $this->logError($type, $exception->getMessage(), $formData);
77 $this->sendJsonError($type, $exception->getError());
78 } catch (PaymentGatewayException $exception) {
79 $type = DonationFormErrorTypes::GATEWAY;
80 $this->logError($type, $exception->getMessage(), $formData);
81 $this->sendJsonError($type, new WP_Error($type, $exception->getMessage()));
82 } catch (DonationFormForbidden $exception) {
83 wp_die($exception->getMessage(), 403);
84 } catch (Exception $exception) {
85 $type = DonationFormErrorTypes::UNKNOWN;
86 $this->logError($type, $exception->getMessage(), $formData);
87 $this->sendJsonError($type, new WP_Error($type, $exception->getMessage()));
88 }
89
90 exit;
91 }
92
93 /**
94 * @since 3.0.0
95 */
96 private function logError(
97 string $type,
98 string $exceptionMessage,
99 DonateFormRouteData $formData
100 ) {
101 Log::error(
102 "Donation Route Error: $type",
103 [
104 'error_type' => $type,
105 'exceptionMessage' => $exceptionMessage,
106 'formData' => $formData->toArray(),
107 ]
108 );
109 }
110
111 /**
112 * @param string $type
113 * @param array|string|WP_Error $errors
114 * @return void
115 */
116 protected function sendJsonError(string $type, WP_Error $errors)
117 {
118 wp_send_json_error([
119 'type' => $type,
120 'errors' => $errors,
121 ]);
122 }
123 }
124