PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / trunk
GiveWP – Donation Plugin and Fundraising Platform vtrunk
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 8 months ago MigrateFormsToCampaignForms.php 1 year ago
CacheCampaignsData.php
189 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.12.0 add early return if no campaigns found
57 * @since 4.8.0
58 *
59 * @throws DatabaseMigrationException
60 */
61 public function runBatch($firstId, $lastId)
62 {
63 try {
64 $query = $this->query();
65
66 // Migration Runner will pass null for lastId in the last step
67 if (is_null($lastId)) {
68 $query->where('id', $firstId, '>');
69 } else {
70 $query->whereBetween('id', $firstId, $lastId);
71 }
72
73 $campaigns = $query->getAll();
74 $campaignIds = array_map(function ($campaign) {
75 return $campaign->id;
76 }, $campaigns);
77
78 if (empty($campaignIds)) {
79 return;
80 }
81
82 $donations = CampaignsDataQuery::donations($campaignIds);
83
84 $campaignsData = get_option('give_campaigns_data', []);
85
86 update_option('give_campaigns_data', [
87 'amounts' => array_merge(
88 $campaignsData['amounts'] ?? [],
89 $donations->collectIntendedAmounts()
90 ),
91 'donationsCount' => array_merge(
92 $campaignsData['donationsCount'] ?? [],
93 $donations->collectDonations()
94 ),
95 'donorsCount' => array_merge(
96 $campaignsData['donationsCount'] ?? [],
97 $donations->collectDonors()
98 ),
99 ]);
100
101 // Set subscriptions data
102 if (defined('GIVE_RECURRING_VERSION')) {
103 $subscriptionsData = get_option('give_campaigns_data', []);
104 $subscriptions = CampaignsDataQuery::subscriptions($campaignIds);
105
106 update_option('give_campaigns_subscriptions_data', [
107 'amounts' => array_merge(
108 $subscriptionsData['amounts'] ?? [],
109 $subscriptions->collectInitialAmounts()
110 ),
111 'donationsCount' => array_merge(
112 $subscriptionsData['donationsCount'] ?? [],
113 $subscriptions->collectDonations()
114 ),
115 'donorsCount' => array_merge(
116 $subscriptionsData['donorsCount'] ?? [],
117 $subscriptions->collectDonors()
118 ),
119 ]);
120 }
121 } catch (DatabaseQueryException $exception) {
122 throw new DatabaseMigrationException("An error occurred while caching campaign data", 0, $exception);
123 }
124 }
125
126 /**
127 * @inheritDoc
128 */
129 public function getItemsCount(): int
130 {
131 return $this->query()->count();
132 }
133
134 /**
135 * @inheritDoc
136 *
137 * @since 4.12.0 Add campaign type filter
138 */
139 public function getBatchItemsAfter($lastId): ?array
140 {
141 $item = DB::get_row(sprintf(
142 'SELECT MIN(id) AS first_id, MAX(id) AS last_id FROM (SELECT id FROM %1s WHERE campaign_type = %2s AND id > %d ORDER BY id ASC LIMIT %d) as batch',
143 DB::prefix('give_campaigns'),
144 DB::prepare('%s', CampaignType::CORE),
145 $lastId,
146 $this->getBatchSize()
147 ));
148
149 if (!$item) {
150 return null;
151 }
152
153 return [
154 $item->first_id,
155 $item->last_id,
156 ];
157 }
158
159 /**
160 * @inheritDoc
161 */
162 public function getBatchSize(): int
163 {
164 return 10;
165 }
166
167 /**
168 * @inheritDoc
169 */
170 public function hasMoreItemsToBatch($lastProcessedId): ?bool
171 {
172 return $this->query()
173 ->where('id', $lastProcessedId, '>')
174 ->limit(1)
175 ->count();
176 }
177
178 /**
179 * @inheritDoc
180 *
181 * @since 4.8.0
182 */
183 public function reverse(): void
184 {
185 delete_option('give_campaigns_data');
186 delete_option('give_campaigns_subscriptions_data');
187 }
188 }
189