PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 3.19.4
GiveWP – Donation Plugin and Fundraising Platform v3.19.4
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 2.3.2 2.30.0 2.31.0 2.31.1 2.32.0 2.33.0 2.33.1 2.33.2 2.33.3 2.33.4 2.33.5 2.4.0 2.4.1 2.4.2 2.4.3 2.4.4 2.4.5 2.4.6 2.4.7 2.5.0 2.5.1 2.5.10 2.5.11 2.5.12 2.5.13 2.5.2 2.5.3 2.5.4 2.5.5 2.5.6 2.5.7 2.5.8 2.5.9 2.6.0 2.6.1 2.6.2 2.6.3 2.7.0 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.8.0 2.8.1 2.9.0 2.9.1 2.9.2 2.9.3 2.9.4 2.9.5 2.9.6 2.9.7 3.0.0 3.0.1 3.0.2 3.0.3 3.0.4 3.1.0 3.1.1 3.1.2 3.10.0 3.11.0 3.12.0 3.12.1 3.12.2 3.12.3 3.13.0 3.14.0 3.14.1 3.14.2 3.15.0 3.15.1 3.16.0 3.16.1 3.16.2 3.16.3 3.16.4 3.16.5 3.17.0 3.17.1 3.17.2 3.18.0 3.19.0 3.19.1 3.19.2 3.19.3 3.19.4 3.2.0 3.2.1 3.2.2 3.20.0 3.21.0 3.21.1 3.22.0 3.22.1 3.22.2 3.3.0 3.3.1 3.4.0 3.4.1 3.4.2 3.5.0 3.5.1 3.6.0 3.6.1 3.6.2 3.7.0 3.8.0 3.9.0 4.0.0 4.1.0 4.1.1 4.10.0 4.10.1 4.11.0 4.12.0 4.13.0 4.13.1 4.13.2 4.14.0 4.14.1 4.14.2 4.14.3 4.14.4 4.14.5 4.14.6 4.2.0 4.2.1 4.3.0 4.3.1 4.3.2 4.4.0 4.5.0 4.6.1 4.7.0 4.7.1 4.8.0 4.8.1 4.9.0 trunk 1.9.0 2.0.0 2.0.1 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.1.7 2.1.8 2.10.0 2.10.1 2.10.2 2.10.3 2.10.4 2.11.0 2.11.1 2.11.2 2.11.3 2.12.0 2.12.1 2.12.2 2.12.3 2.13.0 2.13.1 2.13.2 2.13.3 2.13.4 2.14.0 2.15.0 2.16.0 2.16.1 2.17.0 2.17.1 2.17.3 2.18.0 2.18.1 2.19.1 2.19.2 2.19.3 2.19.4 2.19.5 2.19.6 2.19.7 2.19.8 2.2.0 2.2.1 2.2.2 2.2.3 2.2.4 2.2.5 2.2.6 2.20.0 2.20.1 2.20.2 2.21.0 2.21.1 2.21.2 2.21.3 2.21.4 2.22.0 2.22.1 2.22.2 2.22.3 2.23.0 2.23.1 2.23.2 2.24.0 2.24.1 2.24.2 2.25.0 2.25.1 2.25.2 2.25.3 2.26.0 2.27.0 2.27.1 2.27.2 2.27.3 2.28.0 2.29.0 2.29.1 2.29.2
give / src / DonationForms / Routes / DonateRoute.php
give / src / DonationForms / Routes Last commit date
AuthenticationRoute.php 2 years ago DonateRoute.php 1 year ago DonateRouteSignature.php 2 years ago ValidationRoute.php 2 years ago
DonateRoute.php
121 lines
1 <?php
2
3 namespace Give\DonationForms\Routes;
4
5
6 use Exception;
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 3.0.0
43 *
44 * @return void
45 */
46 public function __invoke(array $request)
47 {
48 // create DTO from GET request
49 $routeData = DonateRouteData::fromRequest(give_clean($_GET));
50
51 // validate signature
52 $routeData->validateSignature();
53
54 // create DTO from POST request
55 $formData = DonateFormRouteData::fromRequest($request);
56
57 try {
58 $data = $formData->validated();
59
60 /**
61 * Allow for additional validation of the donation form data.
62 * The donation flow can be interrupted by throwing an Exception.
63 *
64 * @since 3.15.0
65 *
66 * @param DonateControllerData $data
67 */
68 do_action('givewp_donate_form_data_validated', $data);
69
70 $this->donateController->donate($data, $data->getGateway());
71 } catch (DonationFormFieldErrorsException $exception) {
72 $type = DonationFormErrorTypes::VALIDATION;
73 $this->logError($type, $exception->getMessage(), $formData);
74 $this->sendJsonError($type, $exception->getError());
75 } catch (PaymentGatewayException $exception) {
76 $type = DonationFormErrorTypes::GATEWAY;
77 $this->logError($type, $exception->getMessage(), $formData);
78 $this->sendJsonError($type, new WP_Error($type, $exception->getMessage()));
79 } catch (DonationFormForbidden $exception) {
80 wp_die($exception->getMessage(), 403);
81 } catch (Exception $exception) {
82 $type = DonationFormErrorTypes::UNKNOWN;
83 $this->logError($type, $exception->getMessage(), $formData);
84 $this->sendJsonError($type, new WP_Error($type, $exception->getMessage()));
85 }
86
87 exit;
88 }
89
90 /**
91 * @since 3.0.0
92 */
93 private function logError(
94 string $type,
95 string $exceptionMessage,
96 DonateFormRouteData $formData
97 ) {
98 Log::error(
99 "Donation Route Error: $type",
100 [
101 'error_type' => $type,
102 'exceptionMessage' => $exceptionMessage,
103 'formData' => $formData->toArray(),
104 ]
105 );
106 }
107
108 /**
109 * @param string $type
110 * @param array|string|WP_Error $errors
111 * @return void
112 */
113 protected function sendJsonError(string $type, WP_Error $errors)
114 {
115 wp_send_json_error([
116 'type' => $type,
117 'errors' => $errors,
118 ]);
119 }
120 }
121