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 / ServiceProvider.php
give / src / Campaigns Last commit date
Actions 1 year ago Blocks 1 year ago Controllers 1 year ago DataTransferObjects 1 year ago Factories 1 year ago ListTable 1 year ago Migrations 1 year ago Models 1 year ago Repositories 1 year ago Routes 1 year ago ValueObjects 1 year ago ViewModels 1 year ago resources 1 year ago CampaignDonationQuery.php 1 year ago CampaignSubscriptionQuery.php 1 year ago CampaignsAdminPage.php 1 year ago CampaignsDataQuery.php 1 year ago ServiceProvider.php 1 year ago
ServiceProvider.php
254 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\CreateCampaignPage;
11 use Give\Campaigns\Actions\CreateDefaultCampaignForm;
12 use Give\Campaigns\Actions\FormInheritsCampaignGoal;
13 use Give\Campaigns\Actions\LoadCampaignOptions;
14 use Give\Campaigns\Actions\RedirectLegacyCreateFormToCreateCampaign;
15 use Give\Campaigns\Actions\RenderDonateButton;
16 use Give\Campaigns\Actions\ReplaceGiveFormsCptLabels;
17 use Give\Campaigns\Migrations\Donations\AddCampaignId as DonationsAddCampaignId;
18 use Give\Campaigns\Migrations\MigrateFormsToCampaignForms;
19 use Give\Campaigns\Migrations\P2P\SetCampaignType;
20 use Give\Campaigns\Migrations\RevenueTable\AddCampaignID as RevenueTableAddCampaignID;
21 use Give\Campaigns\Migrations\RevenueTable\AddIndexes;
22 use Give\Campaigns\Migrations\RevenueTable\AssociateDonationsToCampaign;
23 use Give\Campaigns\Migrations\Tables\CreateCampaignFormsTable;
24 use Give\Campaigns\Migrations\Tables\CreateCampaignsTable;
25 use Give\Campaigns\Repositories\CampaignRepository;
26 use Give\DonationForms\Blocks\DonationFormBlock\Controllers\BlockRenderController;
27 use Give\Campaigns\ValueObjects\CampaignPageMetaKeys;
28 use Give\DonationForms\V2\DonationFormsAdminPage;
29 use Give\Framework\Migrations\MigrationsRegister;
30 use Give\Helpers\Hooks;
31 use Give\ServiceProviders\ServiceProvider as ServiceProviderInterface;
32
33 /**
34 * @since 4.0.0
35 */
36 class ServiceProvider implements ServiceProviderInterface
37 {
38 /**
39 * @since 4.0.0
40 * @inheritDoc
41 */
42 public function register(): void
43 {
44 give()->singleton('campaigns', CampaignRepository::class);
45 give()->bind(RenderDonateButton::class, function () {
46 return new RenderDonateButton(
47 new BlockRenderController()
48 );
49 });
50 $this->registerTableNames();
51 }
52
53 /**
54 * @since 4.0.0
55 * @inheritDoc
56 */
57 public function boot(): void
58 {
59 $this->registerMenus();
60 $this->replaceGiveFormsCptLabels();
61 $this->registerActions();
62 $this->setupCampaignPages();
63 $this->registerMigrations();
64 $this->registerRoutes();
65 $this->registerCampaignEntity();
66 $this->registerCampaignBlocks();
67 $this->setupCampaignForms();
68 $this->loadCampaignOptions();
69 $this->addNewBadgeToMenu();
70 }
71
72 /**
73 * @since 4.0.0
74 */
75 private function registerRoutes()
76 {
77 Hooks::addAction('rest_api_init', Routes\RegisterCampaignRoutes::class);
78 Hooks::addAction('rest_api_init', Routes\GetCampaignsListTable::class, 'registerRoute');
79 Hooks::addAction('rest_api_init', Routes\DeleteCampaignListTable::class, 'registerRoute');
80 Hooks::addAction('rest_api_init', Routes\GetCampaignStatistics::class, 'registerRoute');
81 Hooks::addAction('rest_api_init', Routes\GetCampaignRevenue::class, 'registerRoute');
82 Hooks::addAction('rest_api_init', Routes\GetCampaignComments::class, 'registerRoute');
83 }
84
85 /**
86 * @since 4.0.0
87 */
88 private function registerMigrations(): void
89 {
90 give(MigrationsRegister::class)->addMigrations(
91 [
92 CreateCampaignsTable::class,
93 SetCampaignType::class,
94 CreateCampaignFormsTable::class,
95 MigrateFormsToCampaignForms::class,
96 RevenueTableAddCampaignID::class,
97 AssociateDonationsToCampaign::class,
98 AddIndexes::class,
99 DonationsAddCampaignId::class,
100 ]
101 );
102 }
103
104 /**
105 * @since 4.0.0
106 */
107 private function registerTableNames(): void
108 {
109 global $wpdb;
110
111 $wpdb->give_campaigns = $wpdb->prefix . 'give_campaigns';
112 $wpdb->give_campaign_forms = $wpdb->prefix . 'give_campaign_forms';
113 }
114
115 /**
116 * @since 4.0.0
117 */
118 private function registerActions(): void
119 {
120 Hooks::addAction('givewp_campaign_updated', ArchiveCampaignFormsAsDraftStatus::class);
121 Hooks::addAction('givewp_campaign_updated', ArchiveCampaignPagesAsDraftStatus::class);
122 Hooks::addAction('givewp_donation_form_creating', FormInheritsCampaignGoal::class);
123 Hooks::addAction('givewp_campaign_page_created', AssociateCampaignPageWithCampaign::class);
124 Hooks::addAction('give_form_duplicated', Actions\AssignDuplicatedFormToCampaign::class, '__invoke', 10, 2);
125
126 $noticeActions = [
127 'givewp_campaign_interaction_notice',
128 'givewp_campaign_existing_user_intro_notice',
129 ];
130
131 foreach ($noticeActions as $metaKey) {
132 register_meta('user', $metaKey, [
133 'type' => 'boolean',
134 'show_in_rest' => true,
135 'single' => true,
136 ]);
137 }
138 // notices
139 $notices = [
140 'givewp_campaign_interaction_notice',
141 'givewp_campaign_listtable_notice',
142 'givewp_campaign_form_notice',
143 'givewp_campaign_settings_notice'
144 ];
145
146 foreach ($notices as $name) {
147 add_action('wp_ajax_' . $name, static function () use ($name) {
148 add_user_meta(
149 get_current_user_id(),
150 $name,
151 time(),
152 true
153 );
154 });
155 }
156 }
157
158 /**
159 * @since 4.0.0
160 */
161 private function registerMenus()
162 {
163 Hooks::addAction('admin_menu', CampaignsAdminPage::class, 'addCampaignsSubmenuPage', 999);
164 }
165
166 /**
167 * @since 4.0.0
168 */
169 private function replaceGiveFormsCptLabels()
170 {
171 Hooks::addFilter('give_forms_labels', ReplaceGiveFormsCptLabels::class);
172 }
173
174 private function setupCampaignPages()
175 {
176 Hooks::addAction('enqueue_block_editor_assets', Actions\EnqueueCampaignPageEditorAssets::class);
177 }
178
179 /**
180 * @since 4.0.0
181 */
182 private function registerCampaignEntity()
183 {
184 Hooks::addAction('init', Actions\RegisterCampaignEntity::class);
185 }
186
187 /**
188 * @since 4.0.0
189 */
190 private function setupCampaignForms()
191 {
192 if (CampaignsAdminPage::isShowingDetailsPage()) {
193 Hooks::addAction('admin_enqueue_scripts', DonationFormsAdminPage::class, 'loadScripts');
194 }
195
196 /**
197 * We implemented a feature to load the stats columns ("Goal", "Donations" and "Revenue") using an async approach,
198 * so we could prevent a long page load on websites with lots of forms. However, the campaign details page's current
199 * "Forms" tab still doesn't support it. Still, it's using the same Form List Table that active the async approach by
200 * default, so the line below is necessary to disable it while we still don't have support for async loading on this screen.
201 *
202 * @see https://github.com/impress-org/givewp/pull/7483
203 */
204 if (!defined('GIVE_IS_ALL_STATS_COLUMNS_ASYNC_ON_ADMIN_FORM_LIST_VIEWS')) {
205 define('GIVE_IS_ALL_STATS_COLUMNS_ASYNC_ON_ADMIN_FORM_LIST_VIEWS', false);
206 }
207
208 Hooks::addAction('admin_init', RedirectLegacyCreateFormToCreateCampaign::class);
209
210 Hooks::addAction('save_post_give_forms', AddCampaignFormFromRequest::class, 'optionBasedFormEditor', 10, 3);
211 Hooks::addAction('givewp_donation_form_created', AddCampaignFormFromRequest::class, 'visualFormBuilder');
212 Hooks::addAction('givewp_campaign_created', CreateDefaultCampaignForm::class);
213 Hooks::addAction('givewp_campaign_created', CreateCampaignPage::class);
214 }
215
216 /**
217 * @since 4.0.0
218 */
219 private function registerCampaignBlocks()
220 {
221 register_meta('post',
222 CampaignPageMetaKeys::CAMPAIGN_ID,
223 [
224 'type' => 'integer',
225 'description' => 'Campaign ID for GiveWP',
226 'single' => true,
227 'show_in_rest' => true,
228 ]
229 );
230
231 Hooks::addAction('rest_api_init', Actions\RegisterCampaignIdRestField::class);
232 Hooks::addAction('init', Actions\RegisterCampaignBlocks::class);
233 Hooks::addAction('enqueue_block_editor_assets', Actions\RegisterCampaignBlocks::class, 'loadBlockEditorAssets');
234 }
235
236 /**
237 * @since 4.0.0
238 */
239 private function loadCampaignOptions()
240 {
241 Hooks::addAction('init', LoadCampaignOptions::class);
242 }
243
244 /**
245 * @since 4.0.0
246 *
247 * @return void
248 */
249 private function addNewBadgeToMenu(): void
250 {
251 (new AddNewBadgeToAdminMenuItem())();
252 }
253 }
254