PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 3.14.2
GiveWP – Donation Plugin and Fundraising Platform v3.14.2
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 1 year ago ListTable 1 year ago Models 3 years ago Properties 3 years ago Repositories 3 years ago ValueObjects 2 years ago resources 2 years ago DonationFormsAdminPage.php 1 year ago ServiceProvider.php 2 years ago
DonationFormsAdminPage.php
390 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.14.0 Added support for Razorpay
320 * @since 3.4.2 Added support for Gift Aid
321 * @since 3.3.0 Add support to the Funds and Designations addon
322 * @since 3.0.0
323 * @return array
324 */
325 public function getSupportedAddons(): array
326 {
327 $supportedAddons = [
328 'Recurring Donation' => class_exists('Give_Recurring'),
329 'Fee Recovery' => class_exists('Give_Fee_Recovery'),
330 'Currency Switcher' => class_exists('Give_Currency_Switcher'),
331 'Form Field Manager' => class_exists('Give_Form_Fields_Manager'),
332 'Tributes' => class_exists('Give_Tributes'),
333 'Google Analytics Donation Tracking' => class_exists('Give_Google_Analytics'),
334 'PDF Receipts' => class_exists('Give_PDF_Receipts'),
335 'Annual Receipts' => class_exists('Give_Annual_Receipts'),
336 'Webhooks' => defined('GIVE_WEBHOOKS_VERSION'),
337 'Email Reports' => defined('GIVE_EMAIL_REPORTS_VERSION'),
338 'Zapier' => defined('GIVE_ZAPIER_VERSION'),
339 'Salesforce' => defined('GIVE_SALESFORCE_VERSION'),
340 'Donation Upsells for WooCommerce' => class_exists('Give_WooCommerce'),
341 'Constant Contact' => class_exists('Give_Constant_Contact'),
342 'MailChimp' => class_exists('Give_MailChimp'),
343 // 'Manual Donations' => class_exists('Give_Manual_Donations'),
344 'Funds' => defined('GIVE_FUNDS_ADDON_NAME'),
345 'Peer-to-Peer' => defined('GIVE_P2P_NAME'),
346 'Gift Aid' => class_exists('Give_Gift_Aid'),
347 // 'Text-to-Give' => defined('GIVE_TEXT_TO_GIVE_ADDON_NAME'),
348 // 'Donation Block for Stripe' => defined('DONATION_BLOCK_FILE'),
349 'Double the Donation' => defined('GIVE_DTD_NAME'),
350 // 'Simple Social Shout' => class_exists('SIMPLE_SOCIAL_SHARE_4_GIVEWP'),
351 // 'Receipt Attachments' => defined('GIVERA_VERSION'),
352 'Per Form Gateways' => class_exists('Give_Per_Form_Gateways'),
353 // 'Per Form Confirmations' => class_exists('Per_Form_Confirmations_4_GIVEWP'),
354 // 'Form Countdown' => class_exists('Give_Form_Countdown'),
355 'ConvertKit' => defined('GIVE_CONVERTKIT_VERSION'),
356 'ActiveCampaign' => class_exists('Give_ActiveCampaign'),
357 'Razorpay' => class_exists('Give_Razorpay_Gateway'),
358 ];
359
360 $output = [];
361
362 foreach ($supportedAddons as $name => $isInstalled) {
363 if ($isInstalled) {
364 $output[] = $name;
365 }
366 }
367
368 return $output;
369 }
370
371 /**
372 * Get an array of supported gateways
373 *
374 * @since 3.0.0
375 * @return array
376 */
377 public function getSupportedGateways(): array
378 {
379 $gateways = give_get_payment_gateways();
380 $supportedGateways = array_intersect_key($gateways, give()->gateways->getPaymentGateways(3));
381
382 ksort($supportedGateways);
383 unset($supportedGateways['manual']);
384
385 return array_map(function ($gateway) {
386 return $gateway['admin_label'];
387 }, $supportedGateways);
388 }
389 }
390