PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 3.15.1
GiveWP – Donation Plugin and Fundraising Platform v3.15.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 1 year ago ListTable 1 year ago Models 3 years ago Properties 3 years ago Repositories 3 years ago ValueObjects 2 years ago resources 1 year ago DonationFormsAdminPage.php 1 year ago ServiceProvider.php 2 years ago
DonationFormsAdminPage.php
389 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 'showUpgradedTooltip' => !get_user_meta(get_current_user_id(), 'givewp-show-upgraded-tooltip', true),
106 'supportedAddons' => $this->getSupportedAddons(),
107 'supportedGateways' => $this->getSupportedGateways(),
108 ];
109
110 EnqueueScript::make('give-admin-donation-forms', 'assets/dist/js/give-admin-donation-forms.js')
111 ->loadInFooter()
112 ->registerTranslations()
113 ->registerLocalizeData('GiveDonationForms', $data)->enqueue();
114
115 wp_enqueue_style(
116 'give-admin-ui-font',
117 'https://fonts.googleapis.com/css2?family=Open+Sans:wght@400..700&display=swap',
118 [],
119 null
120 );
121
122 wp_enqueue_style('givewp-design-system-foundation');
123 }
124
125 /**
126 * Load migration onboarding scripts
127 * @since 3.2.0
128 *
129 * @return void
130 */
131 public function loadMigrationScripts()
132 {
133 if ($this->isShowingAddV2FormPage()) {
134 EnqueueScript::make('give-add-v2form', 'assets/dist/js/give-add-v2form.js')
135 ->loadInFooter()
136 ->registerTranslations()
137 ->registerLocalizeData('GiveDonationForms', [
138 'supportedAddons' => $this->getSupportedAddons(),
139 'supportedGateways' => $this->getSupportedGateways(),
140 ])
141 ->enqueue();
142
143 wp_enqueue_style('givewp-design-system-foundation');
144 }
145
146 if ($this->isShowingEditV2FormPage()) {
147 EnqueueScript::make('give-edit-v2form', 'assets/dist/js/give-edit-v2form.js')
148 ->loadInFooter()
149 ->registerTranslations()
150 ->registerLocalizeData('GiveDonationForms', [
151 'supportedAddons' => $this->getSupportedAddons(),
152 'supportedGateways' => $this->getSupportedGateways(),
153 'migrationApiRoot' => $this->migrationApiRoot,
154 'apiNonce' => $this->apiNonce,
155 'isMigrated' => _give_is_form_migrated((int)$_GET['post']),
156 ])
157 ->enqueue();
158
159 wp_enqueue_style('givewp-design-system-foundation');
160 }
161 }
162
163 /**
164 * Get first page of results from REST API to display as initial table data
165 *
166 * @since 2.20.0
167 * @return array
168 */
169 private function preloadDonationForms()
170 {
171 $queryParameters = [
172 'page' => 1,
173 'perPage' => 30,
174 ];
175
176 $request = WP_REST_Request::from_url(
177 add_query_arg(
178 $queryParameters,
179 $this->apiRoot
180 )
181 );
182
183 return rest_do_request($request)->get_data();
184 }
185
186 /**
187 * Get a list of author user IDs and names
188 * @since 2.20.0
189 */
190 public function getAuthors()
191 {
192 $author_users = get_users([
193 'role__in' => ['author', 'administrator'],
194 ]);
195
196 return array_map(function ($user) {
197 return [
198 'id' => $user->ID,
199 'name' => $user->display_name,
200 ];
201 }, $author_users);
202 }
203
204 /**
205 * Render admin page
206 */
207 public function render()
208 {
209 echo '<div id="give-admin-donation-forms-root"></div>';
210 }
211
212 /**
213 * Render the migration guide box on the old edit donation form page
214 *
215 * @since 3.0.0
216 *
217 * @param WP_Post $post
218 *
219 * @return void
220 */
221 public function renderMigrationGuideBox(WP_Post $post)
222 {
223 if ($post->post_type === 'give_forms') {
224 echo '<div id="give-admin-edit-v2form"></div>';
225 }
226 }
227
228 /**
229 * Display a button on the old donation forms table that switches to the React view
230 *
231 * @since 2.20.0
232 */
233 public function renderReactSwitch()
234 {
235 ?>
236 <script type="text/javascript">
237 function showReactTable() {
238 fetch('<?php echo esc_url_raw(rest_url('give-api/v2/admin/forms/view?isLegacy=0')) ?>', {
239 method: 'GET',
240 headers: {
241 ['X-WP-Nonce']: '<?php echo wp_create_nonce('wp_rest') ?>'
242 }
243 })
244 .then((res) => {
245 window.location = window.location.href = '/wp-admin/edit.php?post_type=give_forms&page=give-forms';
246 });
247 }
248
249 jQuery(function() {
250 jQuery(jQuery('.wrap .page-title-action')[0]).after(
251 '<button class="page-title-action" onclick="showReactTable()"><?php _e(
252 'Switch to New View',
253 'give'
254 ) ?></button>'
255 );
256 });
257 </script>
258 <?php
259 }
260
261 /**
262 * Helper function to determine if current page is Give Add-ons admin page
263 *
264 * @since 2.20.0
265 */
266 public static function isShowing(): bool
267 {
268 return isset($_GET['page']) && $_GET['page'] === 'give-forms';
269 }
270
271 /**
272 * Helper function to determine if current page is the edit v2 form page
273 *
274 * @since 3.2.1 added global $post to isset
275 * @since 3.0.0
276 *
277 * @return bool
278 */
279 private function isShowingEditV2FormPage(): bool
280 {
281 return isset($_GET['action'], $GLOBALS['post']) && $_GET['action'] === 'edit' && $GLOBALS['post']->post_type === 'give_forms';
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 private 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.14.0 Added support for Razorpay
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 'Razorpay' => class_exists('Give_Razorpay_Gateway'),
357 ];
358
359 $output = [];
360
361 foreach ($supportedAddons as $name => $isInstalled) {
362 if ($isInstalled) {
363 $output[] = $name;
364 }
365 }
366
367 return $output;
368 }
369
370 /**
371 * Get an array of supported gateways
372 *
373 * @since 3.0.0
374 * @return array
375 */
376 public function getSupportedGateways(): array
377 {
378 $gateways = give_get_payment_gateways();
379 $supportedGateways = array_intersect_key($gateways, give()->gateways->getPaymentGateways(3));
380
381 ksort($supportedGateways);
382 unset($supportedGateways['manual']);
383
384 return array_map(function ($gateway) {
385 return $gateway['admin_label'];
386 }, $supportedGateways);
387 }
388 }
389