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