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