PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 4.7.0
GiveWP – Donation Plugin and Fundraising Platform v4.7.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
232 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' => $campaignPage->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 'post_content' => $campaignPage->content,
143 ]);
144
145 $campaignPage->updatedAt = $now;
146 $campaignPage->status = $status;
147
148 update_post_meta($campaignPage->id, CampaignPageMetaKeys::CAMPAIGN_ID, $campaignPage->campaignId);
149 } catch (Exception $exception) {
150 DB::query('ROLLBACK');
151
152 Log::error('Failed updating a campaign page', [$campaignPage]);
153
154 throw new $exception('Failed updating a campaign page');
155 }
156
157 DB::query('COMMIT');
158
159 Hooks::doAction('givewp_campaign_page_updated', $campaignPage);
160 }
161
162 /**
163 * @since 4.0.0
164 * @throws Exception
165 */
166 public function delete(CampaignPage $campaignPage): bool
167 {
168 DB::query('START TRANSACTION');
169
170 Hooks::doAction('givewp_campaign_page_deleting', $campaignPage);
171
172 try {
173 DB::table('posts')
174 ->where('id', $campaignPage->id)
175 ->delete();
176
177 DB::table('postmeta')
178 ->where('post_id', $campaignPage->id)
179 ->delete();
180 } catch (Exception $exception) {
181 DB::query('ROLLBACK');
182
183 Log::error('Failed deleting a campaign page', [$campaignPage]);
184
185 throw new $exception('Failed deleting a campaign page');
186 }
187
188 DB::query('COMMIT');
189
190 Hooks::doAction('givewp_campaign_page_deleted', $campaignPage);
191
192 return true;
193 }
194
195 /**
196 * @since 4.0.0
197 *
198 * @return ModelQueryBuilder<CampaignPage>
199 */
200 public function prepareQuery(): ModelQueryBuilder
201 {
202 $builder = new ModelQueryBuilder(CampaignPage::class);
203
204 return $builder->from('posts')
205 ->select(
206 ['ID', 'id'],
207 ['post_date', 'createdAt'],
208 ['post_modified', 'updatedAt'],
209 ['post_status', 'status'],
210 ['post_content', 'content']
211 )
212 ->attachMeta(
213 'postmeta',
214 'ID',
215 'post_id',
216 ...CampaignPageMetaKeys::getColumnsForAttachMetaQuery()
217 );
218 }
219
220 /**
221 * @since 4.0.0
222 */
223 public function validate(CampaignPage $campaignPage)
224 {
225 foreach ($this->requiredProperties as $key) {
226 if (!isset($campaignPage->$key)) {
227 throw new InvalidArgumentException("'$key' is required.");
228 }
229 }
230 }
231 }
232