PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 4.13.1
GiveWP – Donation Plugin and Fundraising Platform v4.13.1
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 / Campaigns / Actions / CacheCampaignData.php
give / src / Campaigns / Actions Last commit date
AddCampaignFormFromRequest.php 1 year ago AddNewBadgeToAdminMenuItem.php 1 year ago ArchiveCampaignFormsAsDraftStatus.php 1 year ago ArchiveCampaignPagesAsDraftStatus.php 1 year ago AssignDuplicatedFormToCampaign.php 1 year ago AssociateCampaignPageWithCampaign.php 1 year ago CacheCampaignData.php 7 months ago ConvertQueryDataToCampaign.php 1 year ago CreateCampaignPage.php 1 year ago CreateDefaultCampaignForm.php 1 year ago CreateDefaultLayoutForCampaignPage.php 1 year ago DuplicateCampaign.php 7 months ago EnqueueCampaignPageEditorAssets.php 1 year ago FormInheritsCampaignGoal.php 1 year ago LoadCampaignAdminOptions.php 11 months ago LoadCampaignDetailsAssets.php 1 year ago LoadCampaignPublicOptions.php 11 months ago LoadCampaignsListTableAssets.php 11 months ago PreventDeleteDefaultForm.php 1 year ago RedirectLegacyCreateFormToCreateCampaign.php 1 year ago RegisterCampaignBlocks.php 11 months ago RegisterCampaignIdRestField.php 1 year ago RegisterCampaignShortcodes.php 10 months ago RenderDonateButton.php 9 months ago ReplaceGiveFormsCptLabels.php 1 year ago UnarchiveCampaignFormAsPublishStatus.php 1 year ago
CacheCampaignData.php
181 lines
1 <?php
2
3 namespace Give\Campaigns\Actions;
4
5 use Give\Campaigns\CampaignsDataQuery;
6 use Give\Campaigns\Models\Campaign;
7 use Give\Donations\Models\Donation;
8
9 /**
10 * @since 4.8.0
11 *
12 * @uses give_insert_payment hook
13 * @uses give_update_payment_status hook
14 * @uses give_recurring_add_subscription_payment hook
15 * @uses givewp_campaigns_merged hook
16 *
17 * Action used to update campaign's stats data
18 *
19 */
20 class CacheCampaignData
21 {
22 /**
23 * @since 4.13.1 added dispatch method
24 * @since 4.8.0
25 */
26 public function __invoke(int $donationId): void
27 {
28 $donation = Donation::find($donationId);
29
30 if (!$donation) {
31 return;
32 }
33
34 if ($donation->status->isComplete() || $donation->status->isRenewal()) {
35 $this->dispatch($donation->campaignId);
36 }
37 }
38
39 /**
40 * Dispatch the cache campaign data action
41 * @since 4.13.1
42 */
43 public function dispatch(int $campaignId): void
44 {
45 as_enqueue_async_action('givewp_cache_campaign_data', [$campaignId], 'givewp_campaigns_cache');
46 }
47
48 /**
49 * Handle campaign cache
50 * @since 4.8.0
51 */
52 public function handleCache(int $campaignId): void
53 {
54 $campaign = Campaign::find($campaignId);
55
56 if (!$campaign) {
57 return;
58 }
59
60 $campaignsData = get_option('give_campaigns_data', []);
61 $campaignsSubscriptionData = get_option('give_campaigns_subscription_data', []);
62
63 // Prefill cache structure to ensure keys exist
64 $campaignsData = array_merge([
65 'amounts' => [],
66 'donationsCount' => [],
67 'donorsCount' => []
68 ], $campaignsData);
69
70 $campaignsSubscriptionData = array_merge([
71 'amounts' => [],
72 'donationsCount' => [],
73 'donorsCount' => []
74 ], $campaignsSubscriptionData);
75
76 $donations = CampaignsDataQuery::donations([$campaign->id]);
77
78 $isCached = $isSubscriptionCached = false;
79
80 // Update cache only if it exists for this campaign
81 foreach ($campaignsData['amounts'] as $i => $data) {
82 if ($data['campaign_id'] == $campaign->id) {
83 $isCached = true;
84
85 $campaignsData['amounts'][$i] = $donations->collectIntendedAmounts()[0];
86 break;
87 }
88 }
89
90 foreach ($campaignsData['donationsCount'] as $i => $data) {
91 if ($data['campaign_id'] == $campaign->id) {
92 $campaignsData['donationsCount'][$i] = $donations->collectDonations()[0];
93 break;
94 }
95 }
96
97 foreach ($campaignsData['donorsCount'] as $i => $data) {
98 if ($data['campaign_id'] == $campaign->id) {
99 $campaignsData['donorsCount'][$i] = $donations->collectDonors()[0];
100 break;
101 }
102 }
103
104
105 // Update campaign subscriptions data
106 if (defined('GIVE_RECURRING_VERSION')) {
107
108 $subscriptions = CampaignsDataQuery::subscriptions([$campaign->id]);
109
110 foreach ($campaignsSubscriptionData['amounts'] as $i => $data) {
111 if ($data['campaign_id'] == $campaign->id) {
112 $isSubscriptionCached = true;
113
114 $campaignsSubscriptionData['amounts'][$i] = $subscriptions->collectInitialAmounts()[0];
115 break;
116 }
117 }
118
119 foreach ($campaignsSubscriptionData['donationsCount'] as $i => $data) {
120 if ($data['campaign_id'] == $campaign->id) {
121 $campaignsSubscriptionData['donationsCount'][$i] = $subscriptions->collectDonations()[0];
122 break;
123 }
124 }
125
126 foreach ($campaignsSubscriptionData['donorsCount'] as $i => $data) {
127 if ($data['campaign_id'] == $campaign->id) {
128 $campaignsSubscriptionData['donorsCount'][$i] = $subscriptions->collectDonors()[0];
129 break;
130 }
131 }
132 }
133
134
135 // Save updated cache
136 if ($isCached) {
137 update_option('give_campaigns_data', $campaignsData);
138 }
139
140 if ($isSubscriptionCached) {
141 update_option('give_campaigns_subscriptions_data', $campaignsSubscriptionData);
142 }
143
144 if ($isCached || $isSubscriptionCached) {
145 return;
146 }
147
148 update_option('give_campaigns_data', [
149 'amounts' => array_merge(
150 $campaignsData['amounts'] ?? [],
151 $donations->collectIntendedAmounts()
152 ),
153 'donationsCount' => array_merge(
154 $campaignsData['donationsCount'] ?? [],
155 $donations->collectDonations()
156 ),
157 'donorsCount' => array_merge(
158 $campaignsData['donorsCount'] ?? [],
159 $donations->collectDonors()
160 ),
161 ]);
162
163 if (defined('GIVE_RECURRING_VERSION')) {
164 update_option('give_campaigns_subscriptions_data', [
165 'amounts' => array_merge(
166 $campaignsSubscriptionData['amounts'] ?? [],
167 $subscriptions->collectIntendedAmounts()
168 ),
169 'donationsCount' => array_merge(
170 $campaignsSubscriptionData['donationsCount'] ?? [],
171 $subscriptions->collectDonations()
172 ),
173 'donorsCount' => array_merge(
174 $campaignsSubscriptionData['donorsCount'] ?? [],
175 $subscriptions->collectDonors()
176 ),
177 ]);
178 }
179 }
180 }
181