PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 3.4.1
GiveWP – Donation Plugin and Fundraising Platform v3.4.1
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
385 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()">Switch to New View</button>',
253 );
254 });
255 </script>
256 <?php
257 }
258
259 /**
260 * Helper function to determine if current page is Give Add-ons admin page
261 *
262 * @since 2.20.0
263 */
264 public static function isShowing(): bool
265 {
266 return isset($_GET['page']) && $_GET['page'] === 'give-forms';
267 }
268
269 /**
270 * Helper function to determine if current page is the edit v2 form page
271 *
272 * @since 3.2.1 added global $post to isset
273 * @since 3.0.0
274 *
275 * @return bool
276 */
277 private function isShowingEditV2FormPage(): bool
278 {
279 return isset($_GET['action'], $GLOBALS['post']) && $_GET['action'] === 'edit' && $GLOBALS['post']->post_type === 'give_forms';
280 }
281
282 /**
283 * Helper function to determine if current page is the add v2 form page
284 *
285 * @since 3.0.0
286 *
287 * @return bool
288 */
289 private function isShowingAddV2FormPage(): bool
290 {
291 return ! isset($_GET['page']) && isset($_GET['post_type']) && $_GET['post_type'] === 'give_forms';
292 }
293
294 /**
295 * Helper function to determine if the current page is the legacy donation forms list page
296 *
297 * @since 2.20.1
298 */
299 public static function isShowingLegacyPage(): bool
300 {
301 return isset($_GET['post_type']) && $_GET['post_type'] === 'give_forms' && empty($_GET['page']);
302 }
303
304 /**
305 * @since 2.20.0
306 * @return string
307 */
308 public static function getUrl(): string
309 {
310 return add_query_arg(['page' => 'give-forms'], admin_url('edit.php?post_type=give_forms'));
311 }
312
313 /**
314 * Get an array of supported addons
315 *
316 * @unreleased Added support for Gift Aid
317 * @since 3.3.0 Add support to the Funds and Designations addon
318 * @since 3.0.0
319 * @return array
320 */
321 public function getSupportedAddons(): array
322 {
323 $supportedAddons = [
324 'Recurring Donation' => class_exists('Give_Recurring'),
325 'Fee Recovery' => class_exists('Give_Fee_Recovery'),
326 'Currency Switcher' => class_exists('Give_Currency_Switcher'),
327 'Form Field Manager' => class_exists('Give_Form_Fields_Manager'),
328 'Tributes' => class_exists('Give_Tributes'),
329 'Google Analytics Donation Tracking' => class_exists('Give_Google_Analytics'),
330 'PDF Receipts' => class_exists('Give_PDF_Receipts'),
331 'Annual Receipts' => class_exists('Give_Annual_Receipts'),
332 'Webhooks' => defined('GIVE_WEBHOOKS_VERSION'),
333 'Email Reports' => defined('GIVE_EMAIL_REPORTS_VERSION'),
334 'Zapier' => defined('GIVE_ZAPIER_VERSION'),
335 'Salesforce' => defined('GIVE_SALESFORCE_VERSION'),
336 'Donation Upsells for WooCommerce' => class_exists('Give_WooCommerce'),
337 'MailChimp' => class_exists('Give_MailChimp'),
338 // 'Manual Donations' => class_exists('Give_Manual_Donations'),
339 'Funds' => defined('GIVE_FUNDS_ADDON_NAME'),
340 // 'Peer-to-Peer' => defined('GIVE_P2P_NAME'),
341 'Gift Aid' => class_exists('Give_Gift_Aid'),
342 // 'MailChimp' => class_exists('Give_MailChimp'),
343 // 'Text-to-Give' => defined('GIVE_TEXT_TO_GIVE_ADDON_NAME'),
344 // 'Donation Block for Stripe' => defined('DONATION_BLOCK_FILE'),
345 // 'Double the Donation' => defined('GIVE_DTD_NAME'),
346 // 'Simple Social Shout' => class_exists('SIMPLE_SOCIAL_SHARE_4_GIVEWP'),
347 // 'Receipt Attachments' => defined('GIVERA_VERSION'),
348 'Per Form Gateways' => class_exists('Give_Per_Form_Gateways'),
349 // 'Per Form Confirmations' => class_exists('Per_Form_Confirmations_4_GIVEWP'),
350 // 'Form Countdown' => class_exists('Give_Form_Countdown'),
351 // 'ActiveCampaign' => class_exists('Give_ActiveCampaign'),
352 // 'Constant Contact' => class_exists('Give_Constant_Contact'),
353 ];
354
355 $output = [];
356
357 foreach ($supportedAddons as $name => $isInstalled) {
358 if ($isInstalled) {
359 $output[] = $name;
360 }
361 }
362
363 return $output;
364 }
365
366 /**
367 * Get an array of supported gateways
368 *
369 * @since 3.0.0
370 * @return array
371 */
372 public function getSupportedGateways(): array
373 {
374 $gateways = give_get_payment_gateways();
375 $supportedGateways = array_intersect_key($gateways, give()->gateways->getPaymentGateways(3));
376
377 ksort($supportedGateways);
378 unset($supportedGateways['manual']);
379
380 return array_map(function ($gateway) {
381 return $gateway['admin_label'];
382 }, $supportedGateways);
383 }
384 }
385