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 / Donations / AddCampaignId.php
give / src / Campaigns / Migrations / Donations Last commit date
AddCampaignId.php 11 months ago
AddCampaignId.php
177 lines
1 <?php
2
3 namespace Give\Campaigns\Migrations\Donations;
4
5 use Give\Donations\ValueObjects\DonationMetaKeys;
6 use Give\Framework\Database\DB;
7 use Give\Framework\Database\Exceptions\DatabaseQueryException;
8 use Give\Framework\Migrations\Contracts\BatchMigration;
9 use Give\Framework\Migrations\Contracts\ReversibleMigration;
10 use Give\Framework\Migrations\Exceptions\DatabaseMigrationException;
11 use Give\Framework\QueryBuilder\QueryBuilder;
12
13 /**
14 * @since 4.0.0
15 */
16 class AddCampaignId extends BatchMigration implements ReversibleMigration
17 {
18 /**
19 * @inheritDoc
20 */
21 public static function id(): string
22 {
23 return 'add_campaign_id_to_donations';
24 }
25
26 /**
27 * @inheritDoc
28 */
29 public static function title(): string
30 {
31 return 'Add campaign id to donations';
32 }
33
34 /**
35 * @inheritdoc
36 */
37 public static function timestamp(): string
38 {
39 return strtotime('2024-11-22 00:00:00');
40 }
41
42 /**
43 * Base query
44 *
45 * @since 4.0.0
46 */
47 protected function query(): QueryBuilder
48 {
49 return DB::table('posts')->where('post_type', 'give_payment');
50 }
51
52 /**
53 * @inheritDoc
54 *
55 * @since 4.0.0
56 *
57 * @throws DatabaseMigrationException
58 */
59 public function runBatch($firstId, $lastId)
60 {
61 $relationships = [];
62
63 try {
64 $data = DB::table('give_campaign_forms')
65 ->select('campaign_id', 'form_id')
66 ->getAll();
67
68 foreach ($data as $relationship) {
69 $relationships[$relationship->campaign_id][] = $relationship->form_id;
70 }
71
72 $query = $this->query()
73 ->select('ID')
74 ->attachMeta(
75 'give_donationmeta',
76 'ID',
77 'donation_id',
78 [DonationMetaKeys::FORM_ID(), 'formId']
79 );
80
81 // Migration Runner will pass null for lastId in the last step
82 if (is_null($lastId)) {
83 $query->where('ID', $firstId, '>');
84 } else {
85 $query->whereBetween('ID', $firstId, $lastId);
86 }
87
88 $donations = $query->getAll();
89
90 $donationMeta = [];
91
92 foreach ($donations as $donation) {
93 foreach ($relationships as $campaignId => $formIds) {
94 if (in_array($donation->formId, $formIds)) {
95 $donationMeta[] = [
96 'donation_id' => $donation->ID,
97 'meta_key' => DonationMetaKeys::CAMPAIGN_ID,
98 'meta_value' => $campaignId,
99 ];
100
101 break;
102 }
103 }
104 }
105
106 if ( ! empty($donationMeta)) {
107 DB::table('give_donationmeta')
108 ->insert($donationMeta, ['%d', '%s', '%d']);
109 }
110 } catch (DatabaseQueryException $exception) {
111 throw new DatabaseMigrationException("An error occurred while adding campaign ID to the donation meta table",
112 0, $exception);
113 }
114 }
115
116 /**
117 * @inheritDoc
118 */
119 public function getItemsCount(): int
120 {
121 return $this->query()->count();
122 }
123
124 /**
125 * @inheritDoc
126 */
127 public function getBatchItemsAfter($lastId): ?array
128 {
129 $item = DB::get_row(sprintf(
130 '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',
131 DB::prefix('posts'),
132 $lastId,
133 $this->getBatchSize()
134 ));
135
136 if ( ! $item) {
137 return null;
138 }
139
140 return [
141 $item->first_id,
142 $item->last_id,
143 ];
144 }
145
146 /**
147 * @inheritDoc
148 */
149 public function getBatchSize(): int
150 {
151 return 100;
152 }
153
154 /**
155 * @inheritDoc
156 */
157 public function hasMoreItemsToBatch($lastProcessedId): ?bool
158 {
159 return $this->query()
160 ->where('ID', $lastProcessedId, '>')
161 ->limit(1)
162 ->count();
163 }
164
165 /**
166 * @inheritDoc
167 *
168 * @since 4.6.0
169 */
170 public function reverse(): void
171 {
172 DB::table('give_donationmeta')
173 ->where('meta_key', DonationMetaKeys::CAMPAIGN_ID)
174 ->delete();
175 }
176 }
177