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