PluginProbe
GiveWP – Donation Plugin and Fundraising Platform / 4.18.0
GiveWP – Donation Plugin and Fundraising Platform v4.18.0
4.18.0 4.17.0 4.16.9 4.16.8.1 4.16.8 4.16.7.2 4.16.7.1 4.16.7 4.16.6.1 4.16.6 4.16.5.1 4.16.5 4.16.4 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 All 257 releases
give / src / Campaigns / ServiceProvider.php

ServiceProvider.php in GiveWP – Donation Plugin and Fundraising Platform 4.18.0, at src/Campaigns/ServiceProvider.php

282 lines 9.8 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace Give\Campaigns;
4
5 use Give\Campaigns\Actions\AddCampaignFormFromRequest;
6 use Give\Campaigns\Actions\AddNewBadgeToAdminMenuItem;
7 use Give\Campaigns\Actions\ArchiveCampaignFormsAsDraftStatus;
8 use Give\Campaigns\Actions\ArchiveCampaignPagesAsDraftStatus;
9 use Give\Campaigns\Actions\AssociateCampaignPageWithCampaign;
10 use Give\Campaigns\Actions\CacheCampaignData;
11 use Give\Campaigns\Actions\CreateCampaignPage;
12 use Give\Campaigns\Actions\CreateDefaultCampaignForm;
13 use Give\Campaigns\Actions\FormInheritsCampaignGoal;
14 use Give\Campaigns\Actions\LoadCampaignAdminOptions;
15 use Give\Campaigns\Actions\PreventDeleteDefaultForm;
16 use Give\Campaigns\Actions\RedirectLegacyCreateFormToCreateCampaign;
17 use Give\Campaigns\Actions\ReplaceGiveFormsCptLabels;
18 use Give\Campaigns\Actions\UnarchiveCampaignFormAsPublishStatus;
19 use Give\Campaigns\ListTable\Routes\DeleteCampaignListTable;
20 use Give\Campaigns\ListTable\Routes\GetCampaignsListTable;
21 use Give\Campaigns\Migrations\CacheCampaignsData;
22 use Give\Campaigns\Migrations\FlushCampaignsDataCache;
23 use Give\Campaigns\Migrations\Donations\AddCampaignId as DonationsAddCampaignId;
24 use Give\Campaigns\Migrations\MigrateFormsToCampaignForms;
25 use Give\Campaigns\Migrations\P2P\SetCampaignType;
26 use Give\Campaigns\Migrations\RevenueTable\AddCampaignID as RevenueTableAddCampaignID;
27 use Give\Campaigns\Migrations\RevenueTable\AddIndexes;
28 use Give\Campaigns\Migrations\RevenueTable\AssociateDonationsToCampaign;
29 use Give\Campaigns\Migrations\Tables\CreateCampaignFormsTable;
30 use Give\Campaigns\Migrations\Tables\CreateCampaignsTable;
31 use Give\Campaigns\Models\Campaign;
32 use Give\Campaigns\Repositories\CampaignRepository;
33 use Give\Campaigns\ValueObjects\CampaignPageMetaKeys;
34 use Give\DonationForms\V2\DonationFormsAdminPage;
35 use Give\Donations\Models\Donation;
36 use Give\Framework\Migrations\MigrationsRegister;
37 use Give\Helpers\Hooks;
38 use Give\ServiceProviders\ServiceProvider as ServiceProviderInterface;
39 use Give_Payment;
40
41 /**
42 * @since 4.0.0
43 */
44 class ServiceProvider implements ServiceProviderInterface
45 {
46 /**
47 * @since 4.0.0
48 * @inheritDoc
49 */
50 public function register(): void
51 {
52 give()->singleton('campaigns', CampaignRepository::class);
53 $this->registerTableNames();
54 }
55
56 /**
57 * @since 4.8.0 add registerCampaignCache
58 * @since 4.0.0
59 * @inheritDoc
60 */
61 public function boot(): void
62 {
63 $this->registerMenus();
64 $this->replaceGiveFormsCptLabels();
65 $this->registerActions();
66 $this->setupCampaignPages();
67 $this->registerMigrations();
68 $this->registerListTableRoutes();
69 $this->registerCampaignBlocks();
70 $this->setupCampaignForms();
71 $this->loadCampaignAdminOptions();
72 $this->addNewBadgeToMenu();
73 $this->registerCampaignCache();
74 }
75
76 /**
77 * @since 4.2.0 Move V3 routes to top level API folder and rename method
78 * @since 4.0.0
79 */
80 private function registerListTableRoutes()
81 {
82 Hooks::addAction('rest_api_init', GetCampaignsListTable::class, 'registerRoute');
83 Hooks::addAction('rest_api_init', DeleteCampaignListTable::class, 'registerRoute');
84 }
85
86 /**
87 * @since 4.8.0 add CacheCampaignData
88 * @since 4.0.0
89 */
90 private function registerMigrations(): void
91 {
92 give(MigrationsRegister::class)->addMigrations(
93 [
94 CreateCampaignsTable::class,
95 SetCampaignType::class,
96 CreateCampaignFormsTable::class,
97 MigrateFormsToCampaignForms::class,
98 RevenueTableAddCampaignID::class,
99 AssociateDonationsToCampaign::class,
100 AddIndexes::class,
101 DonationsAddCampaignId::class,
102 CacheCampaignsData::class,
103 FlushCampaignsDataCache::class,
104 ]
105 );
106 }
107
108 /**
109 * @since 4.0.0
110 */
111 private function registerTableNames(): void
112 {
113 global $wpdb;
114
115 $wpdb->give_campaigns = $wpdb->prefix . 'give_campaigns';
116 $wpdb->give_campaign_forms = $wpdb->prefix . 'give_campaign_forms';
117 }
118
119 /**
120 * @since 4.0.0
121 */
122 private function registerActions(): void
123 {
124 Hooks::addAction('givewp_campaign_updated', ArchiveCampaignFormsAsDraftStatus::class);
125 Hooks::addAction('givewp_campaign_updated', UnarchiveCampaignFormAsPublishStatus::class);
126 Hooks::addAction('givewp_campaign_updated', ArchiveCampaignPagesAsDraftStatus::class);
127 Hooks::addAction('givewp_donation_form_creating', FormInheritsCampaignGoal::class);
128 Hooks::addAction('givewp_campaign_page_created', AssociateCampaignPageWithCampaign::class);
129 Hooks::addAction('give_form_duplicated', Actions\AssignDuplicatedFormToCampaign::class, '__invoke', 10, 2);
130
131 Hooks::addAction('before_delete_post', PreventDeleteDefaultForm::class);
132 Hooks::addAction('transition_post_status', PreventDeleteDefaultForm::class, 'preventTrashStatusChange', 10, 3);
133
134 $noticeActions = [
135 'givewp_campaign_interaction_notice',
136 'givewp_campaign_existing_user_intro_notice',
137 'givewp_campaign_form_goal_notice',
138 ];
139
140 foreach ($noticeActions as $metaKey) {
141 register_meta('user', $metaKey, [
142 'type' => 'boolean',
143 'show_in_rest' => true,
144 'single' => true,
145 ]);
146 }
147 // notices
148 $notices = [
149 'givewp_campaign_interaction_notice',
150 'givewp_campaign_listtable_notice',
151 'givewp_campaign_form_notice',
152 'givewp_campaign_settings_notice'
153 ];
154
155 foreach ($notices as $name) {
156 add_action('wp_ajax_' . $name, static function () use ($name) {
157 add_user_meta(
158 get_current_user_id(),
159 $name,
160 time(),
161 true
162 );
163 });
164 }
165 }
166
167 /**
168 * @since 4.0.0
169 */
170 private function registerMenus()
171 {
172 Hooks::addAction('admin_menu', CampaignsAdminPage::class, 'addCampaignsSubmenuPage', 999);
173 }
174
175 /**
176 * @since 4.0.0
177 */
178 private function replaceGiveFormsCptLabels()
179 {
180 Hooks::addFilter('give_forms_labels', ReplaceGiveFormsCptLabels::class);
181 }
182
183 /**
184 * @since 4.14.0 update permission capability to use facade
185 * @since 4.0.0
186 */
187 private function setupCampaignPages()
188 {
189 Hooks::addAction('enqueue_block_editor_assets', Actions\EnqueueCampaignPageEditorAssets::class);
190 Hooks::addFilter('map_meta_cap', Actions\AllowGiveRolesToEditCampaignPages::class, 'mapMetaCap', 10, 4);
191 Hooks::addFilter('user_has_cap', Actions\AllowGiveRolesToEditCampaignPages::class, 'grantPublishCapability', 10, 4);
192 }
193
194 /**
195 * @since 4.0.0
196 */
197 private function setupCampaignForms()
198 {
199 if (CampaignsAdminPage::isShowingDetailsPage()) {
200 Hooks::addAction('admin_enqueue_scripts', DonationFormsAdminPage::class, 'loadScripts');
201 }
202
203 Hooks::addAction('admin_init', RedirectLegacyCreateFormToCreateCampaign::class);
204
205 Hooks::addAction('save_post_give_forms', AddCampaignFormFromRequest::class, 'optionBasedFormEditor', 10, 3);
206 Hooks::addAction('givewp_donation_form_created', AddCampaignFormFromRequest::class, 'visualFormBuilder');
207 Hooks::addAction('givewp_campaign_created', CreateDefaultCampaignForm::class);
208 Hooks::addAction('givewp_campaign_created', CreateCampaignPage::class);
209 }
210
211 /**
212 * @since 4.0.0
213 */
214 private function registerCampaignBlocks()
215 {
216 register_meta('post',
217 CampaignPageMetaKeys::CAMPAIGN_ID,
218 [
219 'type' => 'integer',
220 'description' => 'Campaign ID for GiveWP',
221 'single' => true,
222 'show_in_rest' => true,
223 ]
224 );
225
226 Hooks::addAction('rest_api_init', Actions\RegisterCampaignIdRestField::class);
227 Hooks::addAction('init', Actions\RegisterCampaignBlocks::class);
228 Hooks::addAction('enqueue_block_assets', Actions\RegisterCampaignBlocks::class, 'loadBlockEditorAssets');
229 Hooks::addAction('init', Actions\RegisterCampaignShortcodes::class);
230 }
231
232 /**
233 * @since 4.6.1 Move to admin_enqueue_scripts hook
234 * @since 4.0.0
235 */
236 private function loadCampaignAdminOptions()
237 {
238 add_action('admin_enqueue_scripts', function () {
239 if (CampaignsAdminPage::isShowingDetailsPage()) {
240 give(LoadCampaignAdminOptions::class)();
241 }
242 });
243 }
244
245 /**
246 * @since 4.0.0
247 *
248 * @return void
249 */
250 private function addNewBadgeToMenu(): void
251 {
252 (new AddNewBadgeToAdminMenuItem())();
253 }
254
255 /**
256 * @since 4.14.0 dispatch cache campaign data action when donation is deleted
257 * @since 4.13.1 added givewp_campaigns_merged hook
258 * @since 4.8.0
259 */
260 private function registerCampaignCache(): void
261 {
262 add_action('givewp_cache_campaign_data', function (int $campaignId) {
263 give(CacheCampaignData::class)->handleCache($campaignId);
264 });
265
266 Hooks::addAction('give_insert_payment', CacheCampaignData::class, '__invoke', 11, 1);
267 Hooks::addAction('give_update_payment_status', CacheCampaignData::class, '__invoke', 11, 1);
268
269 add_action('givewp_donation_deleted', function (Donation $donation) {
270 give(CacheCampaignData::class)->dispatch($donation->campaignId);
271 });
272
273 add_action('give_recurring_add_subscription_payment', function (Give_Payment $legacyPayment) {
274 give(CacheCampaignData::class)((int)$legacyPayment->ID);
275 }, 11, 1);
276
277 add_action('givewp_campaigns_merged', function (Campaign $campaign) {
278 give(CacheCampaignData::class)->dispatch($campaign->id);
279 });
280 }
281 }
282