PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 2.24.2
GiveWP – Donation Plugin and Fundraising Platform v2.24.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 / DonationFormsAdminPage.php
give / src / DonationForms Last commit date
DataTransferObjects 3 years ago Endpoints 3 years ago ListTable 3 years ago Models 3 years ago Properties 3 years ago Repositories 3 years ago ValueObjects 3 years ago resources 3 years ago DonationFormsAdminPage.php 3 years ago ServiceProvider.php 3 years ago
DonationFormsAdminPage.php
205 lines
1 <?php
2
3 namespace Give\DonationForms;
4
5 use Give\DonationForms\ListTable\DonationFormsListTable;
6 use Give\Helpers\EnqueueScript;
7 use WP_REST_Request;
8
9 /**
10 * @since 2.19.0
11 */
12 class DonationFormsAdminPage
13 {
14 /**
15 * @var string
16 */
17 protected $apiRoot;
18 /**
19 * @var string
20 */
21 protected $apiNonce;
22 /**
23 * @var string
24 */
25 protected $adminUrl;
26
27 public function __construct()
28 {
29 $this->apiRoot = esc_url_raw(rest_url('give-api/v2/admin/forms'));
30 $this->apiNonce = wp_create_nonce('wp_rest');
31 $this->adminUrl = admin_url();
32 }
33
34 /**
35 * Register menu item
36 */
37 public function register()
38 {
39 remove_submenu_page('edit.php?post_type=give_forms', 'edit.php?post_type=give_forms');
40 add_submenu_page(
41 'edit.php?post_type=give_forms',
42 esc_html__('Donation Forms', 'give'),
43 esc_html__('All Forms', 'give'),
44 'edit_give_forms',
45 'give-forms',
46 [$this, 'render'],
47 // Do not change the submenu position unless you have a strong reason.
48 // We use this position value to access this menu data in $submenu to add a custom class.
49 // Check DonationFormsAdminPage::highlightAllFormsMenuItem
50 0
51 );
52 }
53
54 /**
55 * @since 2.20.0
56 */
57 public function highlightAllFormsMenuItem()
58 {
59 global $submenu;
60 $pages = [
61 '/wp-admin/admin.php?page=give-forms', // Donation main menu page.
62 '/wp-admin/edit.php?post_type=give_forms' // Legacy donation form listing page.
63 ];
64
65 if (in_array($_SERVER['REQUEST_URI'], $pages)) {
66 // Add class to highlight 'All Forms' submenu.
67 $submenu['edit.php?post_type=give_forms'][0][4] = add_cssclass(
68 'current',
69 isset($submenu['edit.php?post_type=give_forms'][0][4]) ? $submenu['edit.php?post_type=give_forms'][0][4] : ''
70 );
71 }
72 }
73
74 /**
75 * Load scripts
76 */
77 public function loadScripts()
78 {
79 $data = [
80 'apiRoot' => $this->apiRoot,
81 'apiNonce' => $this->apiNonce,
82 'preload' => $this->preloadDonationForms(),
83 'authors' => $this->getAuthors(),
84 'table' => give(DonationFormsListTable::class)->toArray(),
85 'adminUrl' => $this->adminUrl,
86 ];
87
88 EnqueueScript::make('give-admin-donation-forms', 'assets/dist/js/give-admin-donation-forms.js')
89 ->loadInFooter()
90 ->registerTranslations()
91 ->registerLocalizeData('GiveDonationForms', $data)->enqueue();
92
93 wp_enqueue_style(
94 'give-admin-ui-font',
95 'https://fonts.googleapis.com/css2?family=Open+Sans:wght@400..700&display=swap',
96 [],
97 null
98 );
99 }
100
101 /**
102 * Get first page of results from REST API to display as initial table data
103 *
104 * @since 2.20.0
105 * @return array
106 */
107 private function preloadDonationForms()
108 {
109 $queryParameters = [
110 'page' => 1,
111 'perPage' => 30,
112 ];
113
114 $request = WP_REST_Request::from_url(add_query_arg(
115 $queryParameters,
116 $this->apiRoot
117 ));
118
119 return rest_do_request($request)->get_data();
120 }
121
122 /**
123 * Get a list of author user IDs and names
124 * @since 2.20.0
125 */
126 public function getAuthors()
127 {
128 $author_users = get_users([
129 'role__in' => ['author', 'administrator']
130 ]);
131 return array_map(function($user){
132 return [
133 'id' => $user->ID,
134 'name' => $user->display_name,
135 ];
136 }, $author_users);
137 }
138
139 /**
140 * Render admin page
141 */
142 public function render()
143 {
144 echo '<div id="give-admin-donation-forms-root"></div>';
145 }
146
147 /**
148 * Display a button on the old donation forms table that switches to the React view
149 *
150 * @since 2.20.0
151 */
152 public function renderReactSwitch()
153 {
154 ?>
155 <script type="text/javascript">
156 function showReactTable () {
157 fetch( '<?php echo esc_url_raw(rest_url('give-api/v2/admin/forms/view?isLegacy=0')) ?>', {
158 method: 'GET',
159 headers: {
160 ['X-WP-Nonce']: '<?php echo wp_create_nonce('wp_rest') ?>'
161 }
162 })
163 .then((res) => {
164 window.location = window.location.href = '/wp-admin/edit.php?post_type=give_forms&page=give-forms';
165 });
166 }
167 jQuery( function() {
168 jQuery(jQuery(".wrap .page-title-action")[0]).after(
169 '<button class="page-title-action" onclick="showReactTable()">Switch to New View</button>'
170 );
171 });
172 </script>
173 <?php
174 }
175
176 /**
177 * Helper function to determine if current page is Give Add-ons admin page
178 *
179 * @since 2.20.0
180 */
181 public static function isShowing(): bool
182 {
183 return isset($_GET['page']) && $_GET['page'] === 'give-forms';
184 }
185
186 /**
187 * Helper function to determine if the current page is the legacy donation forms list page
188 *
189 * @since 2.20.1
190 */
191 public static function isShowingLegacyPage(): bool
192 {
193 return isset($_GET['post_type']) && $_GET['post_type'] === 'give_forms' && empty($_GET['page']);
194 }
195
196 /**
197 * @since 2.20.0
198 * @return string
199 */
200 public static function getUrl()
201 {
202 return add_query_arg(['page' => 'give-forms'], admin_url('edit.php?post_type=give_forms'));
203 }
204 }
205