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