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