PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 4.0.0
GiveWP – Donation Plugin and Fundraising Platform v4.0.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 / Repositories / CampaignPageRepository.php
give / src / Campaigns / Repositories Last commit date
CampaignPageRepository.php 1 year ago CampaignRepository.php 1 year ago CampaignsDataRepository.php 1 year ago
CampaignPageRepository.php
230 lines
1 <?php
2
3 namespace Give\Campaigns\Repositories;
4
5 use Give\Campaigns\Actions\CreateDefaultLayoutForCampaignPage;
6 use Give\Campaigns\Models\CampaignPage;
7 use Give\Campaigns\ValueObjects\CampaignPageMetaKeys;
8 use Give\Campaigns\ValueObjects\CampaignPageStatus;
9 use Give\Framework\Database\DB;
10 use Give\Framework\Exceptions\Primitives\Exception;
11 use Give\Framework\Exceptions\Primitives\InvalidArgumentException;
12 use Give\Framework\Models\ModelQueryBuilder;
13 use Give\Framework\Support\Facades\DateTime\Temporal;
14 use Give\Helpers\Hooks;
15 use Give\Log\Log;
16
17 /**
18 * @since 4.0.0
19 */
20 class CampaignPageRepository
21 {
22 /**
23 * @since 4.0.0
24 */
25 protected $requiredProperties = [
26 'campaignId',
27 ];
28
29 /**
30 * @since 4.0.0
31 */
32 public function getById(int $id): ?CampaignPage
33 {
34 return $this->prepareQuery()
35 ->where('id', $id)
36 ->get();
37 }
38
39 /**
40 * @since 4.0.0
41 */
42 public function queryByCampaignId(int $campaignId): ModelQueryBuilder
43 {
44 return $this->prepareQuery()
45 ->where('postmeta_attach_meta_campaignId.meta_value', $campaignId);
46 }
47
48 /**
49 * @since 4.0.0
50 */
51 public function findByCampaignId(int $campaignId): ?CampaignPage
52 {
53 return $this->queryByCampaignId($campaignId)->get();
54 }
55
56 /**
57 * @since 4.0.0
58 * @throws Exception
59 */
60 public function insert(CampaignPage $campaignPage): void
61 {
62 $this->validate($campaignPage);
63
64 Hooks::doAction('givewp_campaign_page_creating', $campaignPage);
65
66 $dateCreated = Temporal::withoutMicroseconds($campaignPage->createdAt ?: Temporal::getCurrentDateTime());
67 $dateCreatedFormatted = Temporal::getFormattedDateTime($dateCreated);
68 $dateUpdated = $campaignPage->updatedAt ?? $dateCreated;
69 $dateUpdatedFormatted = Temporal::getFormattedDateTime($dateUpdated);
70 $status = $campaignPage->status ?? CampaignPageStatus::DRAFT();
71 $campaign = $campaignPage->campaign();
72
73 if (!$campaign) {
74 throw new Exception('Campaign not found');
75 }
76
77 DB::query('START TRANSACTION');
78
79 try {
80 $campaignPage->id = wp_insert_post([
81 'post_title' => $campaign->title,
82 'post_name' => sanitize_title($campaign->title),
83 'post_date' => $dateCreatedFormatted,
84 'post_modified' => $dateUpdatedFormatted,
85 'post_status' => $status->getValue(),
86 'post_type' => 'page',
87 'post_content' => give(CreateDefaultLayoutForCampaignPage::class)(
88 $campaign->id,
89 $campaign->shortDescription
90 ),
91 ]);
92
93 if (!$campaignPage->id) {
94 throw new Exception('Failed creating a campaign page');
95 }
96
97 $campaignPage->createdAt = $dateCreated;
98 $campaignPage->updatedAt = $dateUpdated;
99 $campaignPage->status = $status;
100
101 update_post_meta($campaignPage->id, CampaignPageMetaKeys::CAMPAIGN_ID, $campaignPage->campaignId);
102
103 if ($campaign->image && $imageId = attachment_url_to_postid($campaign->image)) {
104 set_post_thumbnail($campaignPage->id, $imageId);
105 }
106 } catch (Exception $exception) {
107 DB::query('ROLLBACK');
108
109 Log::error('Failed creating a campaign page', [$campaignPage]);
110
111 throw new $exception('Failed creating a campaign page');
112 }
113
114 DB::query('COMMIT');
115
116 Hooks::doAction('givewp_campaign_page_created', $campaignPage);
117 }
118
119 /**
120 * @since 4.0.0
121 * @throws Exception
122 */
123 public function update(CampaignPage $campaignPage): void
124 {
125 $this->validate($campaignPage);
126
127 Hooks::doAction('givewp_campaign_page_updating', $campaignPage);
128
129 $now = Temporal::withoutMicroseconds(Temporal::getCurrentDateTime());
130 $nowFormatted = Temporal::getFormattedDateTime($now);
131 $status = $campaignPage->status ?? CampaignPageStatus::PUBLISH();
132
133 DB::query('START TRANSACTION');
134
135 try {
136 DB::table('posts')
137 ->where('ID', $campaignPage->id)
138 ->update([
139 'post_modified' => $nowFormatted,
140 'post_modified_gmt' => get_gmt_from_date($nowFormatted),
141 'post_status' => $status->getValue(),
142 ]);
143
144 $campaignPage->updatedAt = $now;
145 $campaignPage->status = $status;
146
147 update_post_meta($campaignPage->id, CampaignPageMetaKeys::CAMPAIGN_ID, $campaignPage->campaignId);
148 } catch (Exception $exception) {
149 DB::query('ROLLBACK');
150
151 Log::error('Failed updating a campaign page', [$campaignPage]);
152
153 throw new $exception('Failed updating a campaign page');
154 }
155
156 DB::query('COMMIT');
157
158 Hooks::doAction('givewp_campaign_page_updated', $campaignPage);
159 }
160
161 /**
162 * @since 4.0.0
163 * @throws Exception
164 */
165 public function delete(CampaignPage $campaignPage): bool
166 {
167 DB::query('START TRANSACTION');
168
169 Hooks::doAction('givewp_campaign_page_deleting', $campaignPage);
170
171 try {
172 DB::table('posts')
173 ->where('id', $campaignPage->id)
174 ->delete();
175
176 DB::table('postmeta')
177 ->where('post_id', $campaignPage->id)
178 ->delete();
179 } catch (Exception $exception) {
180 DB::query('ROLLBACK');
181
182 Log::error('Failed deleting a campaign page', [$campaignPage]);
183
184 throw new $exception('Failed deleting a campaign page');
185 }
186
187 DB::query('COMMIT');
188
189 Hooks::doAction('givewp_campaign_page_deleted', $campaignPage);
190
191 return true;
192 }
193
194 /**
195 * @since 4.0.0
196 *
197 * @return ModelQueryBuilder<CampaignPage>
198 */
199 public function prepareQuery(): ModelQueryBuilder
200 {
201 $builder = new ModelQueryBuilder(CampaignPage::class);
202
203 return $builder->from('posts')
204 ->select(
205 ['ID', 'id'],
206 ['post_date', 'createdAt'],
207 ['post_modified', 'updatedAt'],
208 ['post_status', 'status']
209 )
210 ->attachMeta(
211 'postmeta',
212 'ID',
213 'post_id',
214 ...CampaignPageMetaKeys::getColumnsForAttachMetaQuery()
215 );
216 }
217
218 /**
219 * @since 4.0.0
220 */
221 public function validate(CampaignPage $campaignPage)
222 {
223 foreach ($this->requiredProperties as $key) {
224 if (!isset($campaignPage->$key)) {
225 throw new InvalidArgumentException("'$key' is required.");
226 }
227 }
228 }
229 }
230