PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 4.4.0
GiveWP – Donation Plugin and Fundraising Platform v4.4.0
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 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 / AsyncData / Actions / GetAsyncFormDataForListView.php
give / src / DonationForms / AsyncData / Actions Last commit date
GetAsyncFormDataForListView.php 1 year ago GiveGoalProgressStats.php 1 year ago LoadAsyncDataAssets.php 1 year ago
GetAsyncFormDataForListView.php
117 lines
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