PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 4.0.0
GiveWP – Donation Plugin and Fundraising Platform v4.0.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
116 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 3.20.0
105 */
106 private function isFormGoalEnabled(int $formId): bool
107 {
108 if ($donationForm = DonationForm::find($formId)) {
109 return $donationForm->settings->enableDonationGoal;
110 }
111
112 return give_is_setting_enabled(Give()->form_meta->get_meta($formId,
113 DonationFormMetaKeys::GOAL_OPTION()->getKeyAsCamelCase(), true));
114 }
115 }
116