PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 3.12.3
GiveWP – Donation Plugin and Fundraising Platform v3.12.3
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 / DonationForms / V2 / DonationFormsAdminPage.php
give / src / DonationForms / V2 Last commit date
DataTransferObjects 3 years ago Endpoints 2 years ago ListTable 2 years ago Models 3 years ago Properties 3 years ago Repositories 3 years ago ValueObjects 2 years ago resources 2 years ago DonationFormsAdminPage.php 2 years ago ServiceProvider.php 2 years ago
DonationFormsAdminPage.php
388 lines
1 <?php
2
3 namespace Give\DonationForms\V2;
4
5 use Give\DonationForms\V2\ListTable\DonationFormsListTable;
6 use Give\Helpers\EnqueueScript;
7 use WP_Post;
8 use WP_REST_Request;
9
10 /**
11 * @since 2.19.0
12 */
13 class DonationFormsAdminPage
14 {
15 /**
16 * @var string
17 */
18 protected $apiRoot;
19 /**
20 * @var string
21 */
22 protected $apiNonce;
23 /**
24 * @var string
25 */
26 protected $adminUrl;
27 /**
28 * @var string
29 */
30 private $bannerActionUrl;
31 /**
32 * @var string
33 */
34 private $tooltipActionUrl;
35 /**
36 * @var string
37 */
38 protected $migrationApiRoot;
39
40 public function __construct()
41 {
42 $this->apiRoot = esc_url_raw(rest_url('give-api/v2/admin/forms'));
43 $this->bannerActionUrl = admin_url('admin-ajax.php?action=givewp_show_onboarding_banner');
44 $this->tooltipActionUrl = admin_url('admin-ajax.php?action=givewp_show_upgraded_tooltip');
45 $this->migrationApiRoot = esc_url_raw(rest_url('give-api/v2/admin/forms/migrate'));
46 $this->apiNonce = wp_create_nonce('wp_rest');
47 $this->adminUrl = admin_url();
48 }
49
50 /**
51 * Register menu item
52 */
53 public function register()
54 {
55 remove_submenu_page('edit.php?post_type=give_forms', 'edit.php?post_type=give_forms');
56 add_submenu_page(
57 'edit.php?post_type=give_forms',
58 esc_html__('Donation Forms', 'give'),
59 esc_html__('All Forms', 'give'),
60 'edit_give_forms',
61 'give-forms',
62 [$this, 'render'],
63 // Do not change the submenu position unless you have a strong reason.
64 // We use this position value to access this menu data in $submenu to add a custom class.
65 // Check DonationFormsAdminPage::highlightAllFormsMenuItem
66 0
67 );
68 }
69
70 /**
71 * @since 2.20.0
72 */
73 public function highlightAllFormsMenuItem()
74 {
75 global $submenu;
76 $pages = [
77 '/wp-admin/admin.php?page=give-forms', // Donation main menu page.
78 '/wp-admin/edit.php?post_type=give_forms', // Legacy donation form listing page.
79 ];
80
81 if (in_array($_SERVER['REQUEST_URI'], $pages)) {
82 // Add class to highlight 'All Forms' submenu.
83 $submenu['edit.php?post_type=give_forms'][0][4] = add_cssclass(
84 'current',
85 isset($submenu['edit.php?post_type=give_forms'][0][4]) ? $submenu['edit.php?post_type=give_forms'][0][4] : ''
86 );
87 }
88 }
89
90 /**
91 * Load scripts
92 */
93 public function loadScripts()
94 {
95 $data = [
96 'apiRoot' => $this->apiRoot,
97 'bannerActionUrl' => $this->bannerActionUrl,
98 'tooltipActionUrl' => $this->tooltipActionUrl,
99 'apiNonce' => $this->apiNonce,
100 'preload' => $this->preloadDonationForms(),
101 'authors' => $this->getAuthors(),
102 'table' => give(DonationFormsListTable::class)->toArray(),
103 'adminUrl' => $this->adminUrl,
104 'pluginUrl' => GIVE_PLUGIN_URL,
105 'showBanner' => !get_user_meta(get_current_user_id(), 'givewp-show-onboarding-banner', true),
106 'showUpgradedTooltip' => !get_user_meta(get_current_user_id(), 'givewp-show-upgraded-tooltip', true),
107 'supportedAddons' => $this->getSupportedAddons(),
108 'supportedGateways' => $this->getSupportedGateways(),
109 ];
110
111 EnqueueScript::make('give-admin-donation-forms', 'assets/dist/js/give-admin-donation-forms.js')
112 ->loadInFooter()
113 ->registerTranslations()
114 ->registerLocalizeData('GiveDonationForms', $data)->enqueue();
115
116 wp_enqueue_style(
117 'give-admin-ui-font',
118 'https://fonts.googleapis.com/css2?family=Open+Sans:wght@400..700&display=swap',
119 [],
120 null
121 );
122
123 wp_enqueue_style('givewp-design-system-foundation');
124 }
125
126 /**
127 * Load migration onboarding scripts
128 * @since 3.2.0
129 *
130 * @return void
131 */
132 public function loadMigrationScripts()
133 {
134 if ($this->isShowingAddV2FormPage()) {
135 EnqueueScript::make('give-add-v2form', 'assets/dist/js/give-add-v2form.js')
136 ->loadInFooter()
137 ->registerTranslations()
138 ->registerLocalizeData('GiveDonationForms', [
139 'supportedAddons' => $this->getSupportedAddons(),
140 'supportedGateways' => $this->getSupportedGateways(),
141 ])
142 ->enqueue();
143
144 wp_enqueue_style('givewp-design-system-foundation');
145 }
146
147 if ($this->isShowingEditV2FormPage()) {
148 EnqueueScript::make('give-edit-v2form', 'assets/dist/js/give-edit-v2form.js')
149 ->loadInFooter()
150 ->registerTranslations()
151 ->registerLocalizeData('GiveDonationForms', [
152 'supportedAddons' => $this->getSupportedAddons(),
153 'supportedGateways' => $this->getSupportedGateways(),
154 'migrationApiRoot' => $this->migrationApiRoot,
155 'apiNonce' => $this->apiNonce,
156 'isMigrated' => _give_is_form_migrated((int)$_GET['post']),
157 ])
158 ->enqueue();
159
160 wp_enqueue_style('givewp-design-system-foundation');
161 }
162 }
163
164 /**
165 * Get first page of results from REST API to display as initial table data
166 *
167 * @since 2.20.0
168 * @return array
169 */
170 private function preloadDonationForms()
171 {
172 $queryParameters = [
173 'page' => 1,
174 'perPage' => 30,
175 ];
176
177 $request = WP_REST_Request::from_url(
178 add_query_arg(
179 $queryParameters,
180 $this->apiRoot
181 )
182 );
183
184 return rest_do_request($request)->get_data();
185 }
186
187 /**
188 * Get a list of author user IDs and names
189 * @since 2.20.0
190 */
191 public function getAuthors()
192 {
193 $author_users = get_users([
194 'role__in' => ['author', 'administrator'],
195 ]);
196
197 return array_map(function ($user) {
198 return [
199 'id' => $user->ID,
200 'name' => $user->display_name,
201 ];
202 }, $author_users);
203 }
204
205 /**
206 * Render admin page
207 */
208 public function render()
209 {
210 echo '<div id="give-admin-donation-forms-root"></div>';
211 }
212
213 /**
214 * Render the migration guide box on the old edit donation form page
215 *
216 * @since 3.0.0
217 *
218 * @param WP_Post $post
219 *
220 * @return void
221 */
222 public function renderMigrationGuideBox(WP_Post $post)
223 {
224 if ($post->post_type === 'give_forms') {
225 echo '<div id="give-admin-edit-v2form"></div>';
226 }
227 }
228
229 /**
230 * Display a button on the old donation forms table that switches to the React view
231 *
232 * @since 2.20.0
233 */
234 public function renderReactSwitch()
235 {
236 ?>
237 <script type="text/javascript">
238 function showReactTable() {
239 fetch('<?php echo esc_url_raw(rest_url('give-api/v2/admin/forms/view?isLegacy=0')) ?>', {
240 method: 'GET',
241 headers: {
242 ['X-WP-Nonce']: '<?php echo wp_create_nonce('wp_rest') ?>'
243 }
244 })
245 .then((res) => {
246 window.location = window.location.href = '/wp-admin/edit.php?post_type=give_forms&page=give-forms';
247 });
248 }
249
250 jQuery(function() {
251 jQuery(jQuery('.wrap .page-title-action')[0]).after(
252 '<button class="page-title-action" onclick="showReactTable()"><?php _e(
253 'Switch to New View',
254 'give'
255 ) ?></button>'
256 );
257 });
258 </script>
259 <?php
260 }
261
262 /**
263 * Helper function to determine if current page is Give Add-ons admin page
264 *
265 * @since 2.20.0
266 */
267 public static function isShowing(): bool
268 {
269 return isset($_GET['page']) && $_GET['page'] === 'give-forms';
270 }
271
272 /**
273 * Helper function to determine if current page is the edit v2 form page
274 *
275 * @since 3.2.1 added global $post to isset
276 * @since 3.0.0
277 *
278 * @return bool
279 */
280 private function isShowingEditV2FormPage(): bool
281 {
282 return isset($_GET['action'], $GLOBALS['post']) && $_GET['action'] === 'edit' && $GLOBALS['post']->post_type === 'give_forms';
283 }
284
285 /**
286 * Helper function to determine if current page is the add v2 form page
287 *
288 * @since 3.0.0
289 *
290 * @return bool
291 */
292 private function isShowingAddV2FormPage(): bool
293 {
294 return !isset($_GET['page']) && isset($_GET['post_type']) && $_GET['post_type'] === 'give_forms';
295 }
296
297 /**
298 * Helper function to determine if the current page is the legacy donation forms list page
299 *
300 * @since 2.20.1
301 */
302 public static function isShowingLegacyPage(): bool
303 {
304 return isset($_GET['post_type']) && $_GET['post_type'] === 'give_forms' && empty($_GET['page']);
305 }
306
307 /**
308 * @since 2.20.0
309 * @return string
310 */
311 public static function getUrl(): string
312 {
313 return add_query_arg(['page' => 'give-forms'], admin_url('edit.php?post_type=give_forms'));
314 }
315
316 /**
317 * Get an array of supported addons
318 *
319 * @since 3.4.2 Added support for Gift Aid
320 * @since 3.3.0 Add support to the Funds and Designations addon
321 * @since 3.0.0
322 * @return array
323 */
324 public function getSupportedAddons(): array
325 {
326 $supportedAddons = [
327 'Recurring Donation' => class_exists('Give_Recurring'),
328 'Fee Recovery' => class_exists('Give_Fee_Recovery'),
329 'Currency Switcher' => class_exists('Give_Currency_Switcher'),
330 'Form Field Manager' => class_exists('Give_Form_Fields_Manager'),
331 'Tributes' => class_exists('Give_Tributes'),
332 'Google Analytics Donation Tracking' => class_exists('Give_Google_Analytics'),
333 'PDF Receipts' => class_exists('Give_PDF_Receipts'),
334 'Annual Receipts' => class_exists('Give_Annual_Receipts'),
335 'Webhooks' => defined('GIVE_WEBHOOKS_VERSION'),
336 'Email Reports' => defined('GIVE_EMAIL_REPORTS_VERSION'),
337 'Zapier' => defined('GIVE_ZAPIER_VERSION'),
338 'Salesforce' => defined('GIVE_SALESFORCE_VERSION'),
339 'Donation Upsells for WooCommerce' => class_exists('Give_WooCommerce'),
340 'Constant Contact' => class_exists('Give_Constant_Contact'),
341 'MailChimp' => class_exists('Give_MailChimp'),
342 // 'Manual Donations' => class_exists('Give_Manual_Donations'),
343 'Funds' => defined('GIVE_FUNDS_ADDON_NAME'),
344 'Peer-to-Peer' => defined('GIVE_P2P_NAME'),
345 'Gift Aid' => class_exists('Give_Gift_Aid'),
346 // 'Text-to-Give' => defined('GIVE_TEXT_TO_GIVE_ADDON_NAME'),
347 // 'Donation Block for Stripe' => defined('DONATION_BLOCK_FILE'),
348 'Double the Donation' => defined('GIVE_DTD_NAME'),
349 // 'Simple Social Shout' => class_exists('SIMPLE_SOCIAL_SHARE_4_GIVEWP'),
350 // 'Receipt Attachments' => defined('GIVERA_VERSION'),
351 'Per Form Gateways' => class_exists('Give_Per_Form_Gateways'),
352 // 'Per Form Confirmations' => class_exists('Per_Form_Confirmations_4_GIVEWP'),
353 // 'Form Countdown' => class_exists('Give_Form_Countdown'),
354 'ConvertKit' => defined('GIVE_CONVERTKIT_VERSION'),
355 'ActiveCampaign' => class_exists('Give_ActiveCampaign'),
356 ];
357
358 $output = [];
359
360 foreach ($supportedAddons as $name => $isInstalled) {
361 if ($isInstalled) {
362 $output[] = $name;
363 }
364 }
365
366 return $output;
367 }
368
369 /**
370 * Get an array of supported gateways
371 *
372 * @since 3.0.0
373 * @return array
374 */
375 public function getSupportedGateways(): array
376 {
377 $gateways = give_get_payment_gateways();
378 $supportedGateways = array_intersect_key($gateways, give()->gateways->getPaymentGateways(3));
379
380 ksort($supportedGateways);
381 unset($supportedGateways['manual']);
382
383 return array_map(function ($gateway) {
384 return $gateway['admin_label'];
385 }, $supportedGateways);
386 }
387 }
388