PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 2.27.0
GiveWP – Donation Plugin and Fundraising Platform v2.27.0
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
206 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 'pluginUrl' => GIVE_PLUGIN_URL,
87 ];
88
89 EnqueueScript::make('give-admin-donation-forms', 'assets/dist/js/give-admin-donation-forms.js')
90 ->loadInFooter()
91 ->registerTranslations()
92 ->registerLocalizeData('GiveDonationForms', $data)->enqueue();
93
94 wp_enqueue_style(
95 'give-admin-ui-font',
96 'https://fonts.googleapis.com/css2?family=Open+Sans:wght@400..700&display=swap',
97 [],
98 null
99 );
100 }
101
102 /**
103 * Get first page of results from REST API to display as initial table data
104 *
105 * @since 2.20.0
106 * @return array
107 */
108 private function preloadDonationForms()
109 {
110 $queryParameters = [
111 'page' => 1,
112 'perPage' => 30,
113 ];
114
115 $request = WP_REST_Request::from_url(add_query_arg(
116 $queryParameters,
117 $this->apiRoot
118 ));
119
120 return rest_do_request($request)->get_data();
121 }
122
123 /**
124 * Get a list of author user IDs and names
125 * @since 2.20.0
126 */
127 public function getAuthors()
128 {
129 $author_users = get_users([
130 'role__in' => ['author', 'administrator']
131 ]);
132 return array_map(function($user){
133 return [
134 'id' => $user->ID,
135 'name' => $user->display_name,
136 ];
137 }, $author_users);
138 }
139
140 /**
141 * Render admin page
142 */
143 public function render()
144 {
145 echo '<div id="give-admin-donation-forms-root"></div>';
146 }
147
148 /**
149 * Display a button on the old donation forms table that switches to the React view
150 *
151 * @since 2.20.0
152 */
153 public function renderReactSwitch()
154 {
155 ?>
156 <script type="text/javascript">
157 function showReactTable () {
158 fetch( '<?php echo esc_url_raw(rest_url('give-api/v2/admin/forms/view?isLegacy=0')) ?>', {
159 method: 'GET',
160 headers: {
161 ['X-WP-Nonce']: '<?php echo wp_create_nonce('wp_rest') ?>'
162 }
163 })
164 .then((res) => {
165 window.location = window.location.href = '/wp-admin/edit.php?post_type=give_forms&page=give-forms';
166 });
167 }
168 jQuery( function() {
169 jQuery(jQuery(".wrap .page-title-action")[0]).after(
170 '<button class="page-title-action" onclick="showReactTable()">Switch to New View</button>'
171 );
172 });
173 </script>
174 <?php
175 }
176
177 /**
178 * Helper function to determine if current page is Give Add-ons admin page
179 *
180 * @since 2.20.0
181 */
182 public static function isShowing(): bool
183 {
184 return isset($_GET['page']) && $_GET['page'] === 'give-forms';
185 }
186
187 /**
188 * Helper function to determine if the current page is the legacy donation forms list page
189 *
190 * @since 2.20.1
191 */
192 public static function isShowingLegacyPage(): bool
193 {
194 return isset($_GET['post_type']) && $_GET['post_type'] === 'give_forms' && empty($_GET['page']);
195 }
196
197 /**
198 * @since 2.20.0
199 * @return string
200 */
201 public static function getUrl()
202 {
203 return add_query_arg(['page' => 'give-forms'], admin_url('edit.php?post_type=give_forms'));
204 }
205 }
206