PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 4.9.0
GiveWP – Donation Plugin and Fundraising Platform v4.9.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 / Campaigns / Migrations / CacheCampaignsData.php
give / src / Campaigns / Migrations Last commit date
Donations 11 months ago P2P 1 year ago RevenueTable 1 year ago Tables 1 year ago CacheCampaignsData.php 9 months ago MigrateFormsToCampaignForms.php 1 year ago
CacheCampaignsData.php
182 lines
1 <?php
2
3 namespace Give\Campaigns\Migrations;
4
5 use Give\Campaigns\CampaignsDataQuery;
6 use Give\Campaigns\ValueObjects\CampaignType;
7 use Give\Framework\Database\DB;
8 use Give\Framework\Database\Exceptions\DatabaseQueryException;
9 use Give\Framework\Migrations\Contracts\BatchMigration;
10 use Give\Framework\Migrations\Contracts\ReversibleMigration;
11 use Give\Framework\Migrations\Exceptions\DatabaseMigrationException;
12 use Give\Framework\QueryBuilder\QueryBuilder;
13
14 /**
15 * @since 4.8.0
16 */
17 class CacheCampaignsData extends BatchMigration implements ReversibleMigration
18 {
19 /**
20 * @inheritDoc
21 */
22 public static function id(): string
23 {
24 return 'cache_campaign_data';
25 }
26
27 /**
28 * @inheritDoc
29 */
30 public static function title(): string
31 {
32 return 'Cache campaign data';
33 }
34
35 /**
36 * @inheritdoc
37 */
38 public static function timestamp(): string
39 {
40 return strtotime('2025-07-25 00:00:00');
41 }
42
43 /**
44 * Base query
45 *
46 * @since 4.8.0
47 */
48 protected function query(): QueryBuilder
49 {
50 return DB::table('give_campaigns')->where('campaign_type', CampaignType::CORE);
51 }
52
53 /**
54 * @inheritDoc
55 *
56 * @since 4.8.0
57 *
58 * @throws DatabaseMigrationException
59 */
60 public function runBatch($firstId, $lastId)
61 {
62 try {
63 $query = $this->query();
64
65 // Migration Runner will pass null for lastId in the last step
66 if (is_null($lastId)) {
67 $query->where('id', $firstId, '>');
68 } else {
69 $query->whereBetween('id', $firstId, $lastId);
70 }
71
72 $campaigns = $query->getAll();
73 $campaignIds = array_map(function ($campaign) {
74 return $campaign->id;
75 }, $campaigns);
76
77 $donations = CampaignsDataQuery::donations($campaignIds);
78
79 $campaignsData = get_option('give_campaigns_data', []);
80
81 update_option('give_campaigns_data', [
82 'amounts' => array_merge(
83 $campaignsData['amounts'] ?? [],
84 $donations->collectIntendedAmounts()
85 ),
86 'donationsCount' => array_merge(
87 $campaignsData['donationsCount'] ?? [],
88 $donations->collectDonations()
89 ),
90 'donorsCount' => array_merge(
91 $campaignsData['donationsCount'] ?? [],
92 $donations->collectDonors()
93 ),
94 ]);
95
96 // Set subscriptions data
97 if (defined('GIVE_RECURRING_VERSION')) {
98 $subscriptionsData = get_option('give_campaigns_data', []);
99 $subscriptions = CampaignsDataQuery::subscriptions($campaignIds);
100
101 update_option('give_campaigns_subscriptions_data', [
102 'amounts' => array_merge(
103 $subscriptionsData['amounts'] ?? [],
104 $subscriptions->collectInitialAmounts()
105 ),
106 'donationsCount' => array_merge(
107 $subscriptionsData['donationsCount'] ?? [],
108 $subscriptions->collectDonations()
109 ),
110 'donorsCount' => array_merge(
111 $subscriptionsData['donorsCount'] ?? [],
112 $subscriptions->collectDonors()
113 ),
114 ]);
115 }
116
117 } catch (DatabaseQueryException $exception) {
118 throw new DatabaseMigrationException("An error occurred while caching campaign data", 0, $exception);
119 }
120 }
121
122 /**
123 * @inheritDoc
124 */
125 public function getItemsCount(): int
126 {
127 return $this->query()->count();
128 }
129
130 /**
131 * @inheritDoc
132 */
133 public function getBatchItemsAfter($lastId): ?array
134 {
135 $item = DB::get_row(sprintf(
136 'SELECT MIN(id) AS first_id, MAX(id) AS last_id FROM (SELECT id FROM %1s WHERE id > %d ORDER BY id ASC LIMIT %d) as batch',
137 DB::prefix('give_campaigns'),
138 $lastId,
139 $this->getBatchSize()
140 ));
141
142 if ( ! $item) {
143 return null;
144 }
145
146 return [
147 $item->first_id,
148 $item->last_id,
149 ];
150 }
151
152 /**
153 * @inheritDoc
154 */
155 public function getBatchSize(): int
156 {
157 return 10;
158 }
159
160 /**
161 * @inheritDoc
162 */
163 public function hasMoreItemsToBatch($lastProcessedId): ?bool
164 {
165 return $this->query()
166 ->where('id', $lastProcessedId, '>')
167 ->limit(1)
168 ->count();
169 }
170
171 /**
172 * @inheritDoc
173 *
174 * @since 4.8.0
175 */
176 public function reverse(): void
177 {
178 delete_option('give_campaigns_data');
179 delete_option('give_campaigns_subscriptions_data');
180 }
181 }
182