PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 3.1.0
GiveWP – Donation Plugin and Fundraising Platform v3.1.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 / 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
384 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 scripts for the edit v2 form page
128 *
129 * @since 3.0.0
130 * @return void
131 */
132 public function loadEditFormScripts()
133 {
134 $data = [
135 'supportedAddons' => $this->getSupportedAddons(),
136 'supportedGateways' => $this->getSupportedGateways(),
137 'migrationApiRoot' => $this->migrationApiRoot,
138 'apiNonce' => $this->apiNonce,
139 'isMigrated' => _give_is_form_migrated((int)$_GET['post'])
140 ];
141
142 EnqueueScript::make('give-edit-v2form', 'assets/dist/js/give-edit-v2form.js')
143 ->loadInFooter()
144 ->registerTranslations()
145 ->registerLocalizeData('GiveDonationForms', $data)
146 ->enqueue();
147
148 wp_enqueue_style('givewp-design-system-foundation');
149 }
150
151 public function loadAddFormScripts()
152 {
153 $data = [
154 'supportedAddons' => $this->getSupportedAddons(),
155 'supportedGateways' => $this->getSupportedGateways(),
156 ];
157
158 EnqueueScript::make('give-add-v2form', 'assets/dist/js/give-add-v2form.js')
159 ->loadInFooter()
160 ->registerTranslations()
161 ->registerLocalizeData('GiveDonationForms', $data)
162 ->enqueue();
163
164 wp_enqueue_style('givewp-design-system-foundation');
165 }
166
167 /**
168 * Get first page of results from REST API to display as initial table data
169 *
170 * @since 2.20.0
171 * @return array
172 */
173 private function preloadDonationForms()
174 {
175 $queryParameters = [
176 'page' => 1,
177 'perPage' => 30,
178 ];
179
180 $request = WP_REST_Request::from_url(
181 add_query_arg(
182 $queryParameters,
183 $this->apiRoot
184 )
185 );
186
187 return rest_do_request($request)->get_data();
188 }
189
190 /**
191 * Get a list of author user IDs and names
192 * @since 2.20.0
193 */
194 public function getAuthors()
195 {
196 $author_users = get_users([
197 'role__in' => ['author', 'administrator'],
198 ]);
199
200 return array_map(function ($user) {
201 return [
202 'id' => $user->ID,
203 'name' => $user->display_name,
204 ];
205 }, $author_users);
206 }
207
208 /**
209 * Render admin page
210 */
211 public function render()
212 {
213 echo '<div id="give-admin-donation-forms-root"></div>';
214 }
215
216 /**
217 * Render the migration guide box on the old edit donation form page
218 *
219 * @since 3.0.0
220 *
221 * @param WP_Post $post
222 *
223 * @return void
224 */
225 public function renderMigrationGuideBox(WP_Post $post)
226 {
227 if ($post->post_type === 'give_forms') {
228 echo '<div id="give-admin-edit-v2form"></div>';
229 }
230 }
231
232 /**
233 * Display a button on the old donation forms table that switches to the React view
234 *
235 * @since 2.20.0
236 */
237 public function renderReactSwitch()
238 {
239 ?>
240 <script type="text/javascript">
241 function showReactTable() {
242 fetch('<?php echo esc_url_raw(rest_url('give-api/v2/admin/forms/view?isLegacy=0')) ?>', {
243 method: 'GET',
244 headers: {
245 ['X-WP-Nonce']: '<?php echo wp_create_nonce('wp_rest') ?>',
246 },
247 })
248 .then((res) => {
249 window.location = window.location.href = '/wp-admin/edit.php?post_type=give_forms&page=give-forms';
250 });
251 }
252
253 jQuery(function () {
254 jQuery(jQuery(".wrap .page-title-action")[0]).after(
255 '<button class="page-title-action" onclick="showReactTable()">Switch to New View</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.0.0
276 *
277 * @return bool
278 */
279 public static function isShowingEditV2FormPage(): bool
280 {
281 return ! isset($_GET['page']) && isset($_GET['action']) && $_GET['action'] === 'edit';
282 }
283
284 /**
285 * Helper function to determine if current page is the add v2 form page
286 *
287 * @since 3.0.0
288 *
289 * @return bool
290 */
291 public static function isShowingAddV2FormPage(): bool
292 {
293 return ! isset($_GET['page']) && isset($_GET['post_type']) && $_GET['post_type'] === 'give_forms';
294 }
295
296 /**
297 * Helper function to determine if the current page is the legacy donation forms list page
298 *
299 * @since 2.20.1
300 */
301 public static function isShowingLegacyPage(): bool
302 {
303 return isset($_GET['post_type']) && $_GET['post_type'] === 'give_forms' && empty($_GET['page']);
304 }
305
306 /**
307 * @since 2.20.0
308 * @return string
309 */
310 public static function getUrl(): string
311 {
312 return add_query_arg(['page' => 'give-forms'], admin_url('edit.php?post_type=give_forms'));
313 }
314
315 /**
316 * Get an array of supported addons
317 *
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 // 'Manual Donations' => class_exists('Give_Manual_Donations'),
338 // 'Funds' => defined('GIVE_FUNDS_ADDON_NAME'),
339 // 'Peer-to-Peer' => defined('GIVE_P2P_NAME'),
340 // 'Gift Aid' => class_exists('Give_Gift_Aid'),
341 // 'MailChimp' => class_exists('Give_MailChimp'),
342 // 'Text-to-Give' => defined('GIVE_TEXT_TO_GIVE_ADDON_NAME'),
343 // 'Donation Block for Stripe' => defined('DONATION_BLOCK_FILE'),
344 // 'Double the Donation' => defined('GIVE_DTD_NAME'),
345 // 'Simple Social Shout' => class_exists('SIMPLE_SOCIAL_SHARE_4_GIVEWP'),
346 // 'Receipt Attachments' => defined('GIVERA_VERSION'),
347 // 'Per Form Gateways' => class_exists('Give_Per_Form_Gateways'),
348 // 'Per Form Confirmations' => class_exists('Per_Form_Confirmations_4_GIVEWP'),
349 // 'Form Countdown' => class_exists('Give_Form_Countdown'),
350 // 'ActiveCampaign' => class_exists('Give_ActiveCampaign'),
351 // 'Constant Contact' => class_exists('Give_Constant_Contact'),
352 ];
353
354 $output = [];
355
356 foreach ($supportedAddons as $name => $isInstalled) {
357 if ($isInstalled) {
358 $output[] = $name;
359 }
360 }
361
362 return $output;
363 }
364
365 /**
366 * Get an array of supported gateways
367 *
368 * @since 3.0.0
369 * @return array
370 */
371 public function getSupportedGateways(): array
372 {
373 $gateways = give_get_payment_gateways();
374 $supportedGateways = array_intersect_key($gateways, give()->gateways->getPaymentGateways(3));
375
376 ksort($supportedGateways);
377 unset($supportedGateways['manual']);
378
379 return array_map(function ($gateway) {
380 return $gateway['admin_label'];
381 }, $supportedGateways);
382 }
383 }
384