PluginProbe
GiveWP – Donation Plugin and Fundraising Platform / 4.16.8.1
GiveWP – Donation Plugin and Fundraising Platform v4.16.8.1
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 2.3.2 2.30.0 All 255 releases
give / src / DonationForms / AsyncData / Actions / GetAsyncFormDataForListView.php

GetAsyncFormDataForListView.php in GiveWP – Donation Plugin and Fundraising Platform 4.16.8.1, at src/DonationForms/AsyncData/Actions/GetAsyncFormDataForListView.php

117 lines 3.5 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\AsyncData\Actions;
4
5 use Give\DonationForms\AsyncData\AdminFormListView\AdminFormListViewOptions;
6 use Give\DonationForms\AsyncData\AsyncDataHelpers;
7 use Give\DonationForms\AsyncData\FormGrid\FormGridViewOptions;
8 use Give\DonationForms\Models\DonationForm;
9 use Give\DonationForms\V2\ValueObjects\DonationFormMetaKeys;
10
11 /**
12 * @since 3.16.0
13 */
14 class GetAsyncFormDataForListView
15 {
16 /**
17 * @since 3.20.0 Check if form goal is enabled
18 * @since 3.16.0
19 */
20 public function __invoke()
21 {
22 $options = give_clean($_GET);
23
24 if ( ! isset($options['nonce']) || ! check_ajax_referer('GiveDonationFormsAsyncDataAjaxNonce', 'nonce')) {
25 wp_send_json_error([
26 'errorMsg' => __('The current user does not have permission to execute this operation.', 'give'),
27 ]);
28 }
29
30 if ( ! isset($options['formId'])) {
31 wp_send_json_error(['errorMsg' => __('Missing Form ID.', 'give')]);
32 }
33
34 $formId = absint($options['formId']);
35 if ('give_forms' !== get_post_type($formId)) {
36 wp_send_json_error(['errorMsg' => __('Invalid post type.', 'give')]);
37 }
38
39 $transientName = 'give_async_data_for_list_view_form_' . $formId;
40
41 $data = get_transient($transientName);
42
43 if ($data) {
44 wp_send_json_success($data);
45 }
46
47 $amountRaised = 0;
48 $percentComplete = 0;
49 if ($this->isAsyncProgressBar() && $this->isFormGoalEnabled($formId)) {
50 $goalStats = give_goal_progress_stats($formId);
51 $amountRaised = $goalStats['actual'];
52 $percentComplete = ('percentage' === $goalStats['format']) ? str_replace('%', '',
53 $goalStats['actual']) : max(min($goalStats['progress'], 100), 0);
54 }
55
56 $donationsCount = 0;
57 if ($this->isAsyncDonationCount()) {
58 $donationsCount = AsyncDataHelpers::getFormDonationsCountValue($formId);
59 }
60
61 $revenue = $amountRaised;
62 if (0 === $revenue && $this->isAsyncRevenue()) {
63 $revenue = AsyncDataHelpers::getFormRevenueValue($formId);
64 $revenue = give_currency_filter(give_format_amount($revenue));
65 }
66
67 $response = [
68 'amountRaised' => $amountRaised,
69 'percentComplete' => $percentComplete,
70 'donationsCount' => $donationsCount,
71 'revenue' => $revenue,
72 ];
73
74 set_transient($transientName, $response, MINUTE_IN_SECONDS * 5);
75
76 wp_send_json_success($response);
77 }
78
79 /**
80 * @since 3.16.0
81 */
82 private function isAsyncProgressBar(): bool
83 {
84 return AdminFormListViewOptions::isGoalColumnAsync() || FormGridViewOptions::isProgressBarAmountRaisedAsync();
85 }
86
87 /**
88 * @since 3.16.0
89 */
90 private function isAsyncDonationCount(): bool
91 {
92 return AdminFormListViewOptions::isDonationColumnAsync() || FormGridViewOptions::isProgressBarDonationsCountAsync();
93 }
94
95 /**
96 * @since 3.16.0
97 */
98 private function isAsyncRevenue(): bool
99 {
100 return AdminFormListViewOptions::isRevenueColumnAsync();
101 }
102
103 /**
104 * @since 4.2.0 get correct v2 goal option value
105 * @since 3.20.0
106 */
107 private function isFormGoalEnabled(int $formId): bool
108 {
109 if ($donationForm = DonationForm::find($formId)) {
110 return $donationForm->settings->enableDonationGoal;
111 }
112
113 return give_is_setting_enabled(Give()->form_meta->get_meta($formId,
114 DonationFormMetaKeys::GOAL_OPTION, true));
115 }
116 }
117