PluginProbe
Charitable – Donation & Fundraising Platform (Donation Forms, Recurring Donations & Fundraising Campaigns) / 1.7.0.9
Charitable – Donation & Fundraising Platform (Donation Forms, Recurring Donations & Fundraising Campaigns) v1.7.0.9
1.8.13.1 1.8.13 1.8.12.3 1.8.12.2 1.8.12.1 1.8.12 1.8.11.3 1.8.11.2 1.8.11.1 1.8.11 1.6.6 1.6.60 1.6.7 1.6.8 1.6.9 1.7.0 1.7.0.1 1.7.0.11 1.7.0.12 1.7.0.14 1.7.0.2 1.7.0.3 1.7.0.5 1.7.0.6 1.7.0.7 All 212 releases
charitable / includes / admin / class-charitable-admin-pages.php

class-charitable-admin-pages.php in Charitable – Donation & Fundraising Platform (Donation Forms, Recurring Donations & Fundraising Campaigns) 1.7.0.9, at includes/admin/class-charitable-admin-pages.php

343 lines 8.4 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * This class is responsible for adding the Charitable admin pages.
4 *
5 * @package Charitable/Classes/Charitable_Admin_Pages
6 * @author David Bisset
7 * @copyright Copyright (c) 2022, WP Charitable LLC
8 * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
9 * @since 1.0.0
10 * @version 1.6.39
11 */
12
13 // Exit if accessed directly.
14 if ( ! defined( 'ABSPATH' ) ) {
15 exit;
16 }
17
18 if ( ! class_exists( 'Charitable_Admin_Pages' ) ) :
19
20 /**
21 * Charitable_Admin_Pages
22 *
23 * @since 1.0.0
24 */
25 final class Charitable_Admin_Pages {
26
27 /**
28 * The single instance of this class.
29 *
30 * @var Charitable_Admin_Pages|null
31 */
32 private static $instance = null;
33
34 /**
35 * The page to use when registering sections and fields.
36 *
37 * @var string
38 */
39 private $admin_menu_parent_page;
40
41 /**
42 * The capability required to view the admin menu.
43 *
44 * @var string
45 */
46 private $admin_menu_capability;
47
48 /**
49 * Create class object.
50 *
51 * @since 1.0.0
52 */
53 private function __construct() {
54 /**
55 * The default capability required to view Charitable pages.
56 *
57 * @since 1.0.0
58 *
59 * @param string $cap The capability required.
60 */
61 $this->admin_menu_capability = apply_filters( 'charitable_admin_menu_capability', 'view_charitable_sensitive_data' );
62 $this->admin_menu_parent_page = 'charitable';
63 }
64
65 /**
66 * Returns and/or create the single instance of this class.
67 *
68 * @since 1.2.0
69 *
70 * @return Charitable_Admin_Pages
71 */
72 public static function get_instance() {
73 if ( is_null( self::$instance ) ) {
74 self::$instance = new self();
75 }
76
77 return self::$instance;
78 }
79
80 /**
81 * This forces the charitable menu to be open for category and tag pages.
82 *
83 * @since 1.7.0
84 *
85 * @return string
86 */
87 public function menu_highlight( $parent_file ) {
88 global $current_screen;
89
90 $taxonomy = isset( $current_screen->taxonomy ) ? $current_screen->taxonomy : false;
91 if ( false !== $taxonomy && ( 'campaign_category' === $taxonomy || 'campaign_tag' === $taxonomy ) ) {
92 $parent_file = 'charitable';
93 }
94
95 $post_type = isset( $current_screen->post_type ) ? $current_screen->post_type : false;
96 if ( false !== $post_type && ( 'campaign' === $post_type || 'donation' === $post_type ) ) {
97 $parent_file = 'charitable';
98 }
99
100 return $parent_file;
101 }
102
103 /**
104 * Add Settings menu item under the Campaign menu tab.
105 *
106 * @since 1.0.0
107 *
108 * @return void
109 */
110 public function add_menu() {
111 add_menu_page(
112 'Charitable',
113 'Charitable',
114 'edit_campaigns',
115 $this->admin_menu_parent_page,
116 array( $this, 'render_welcome_page' )
117 );
118
119 foreach ( $this->get_submenu_pages() as $page ) {
120 if ( ! isset( $page['page_title'] )
121 || ! isset( $page['menu_title'] )
122 || ! isset( $page['menu_slug'] ) ) {
123 continue;
124 }
125
126 $page_title = $page['page_title'];
127 $menu_title = $page['menu_title'];
128 $capability = isset( $page['capability'] ) ? $page['capability'] : $this->admin_menu_capability;
129 $menu_slug = $page['menu_slug'];
130 $function = isset( $page['function'] ) ? $page['function'] : '';
131
132 add_submenu_page(
133 $this->admin_menu_parent_page,
134 $page_title,
135 $menu_title,
136 $capability,
137 $menu_slug,
138 $function
139 );
140 }
141 }
142
143 /**
144 * Returns an array with all the submenu pages.
145 *
146 * @since 1.0.0
147 *
148 * @return array
149 */
150 private function get_submenu_pages() {
151 $campaign_post_type = get_post_type_object( 'campaign' );
152 $donation_post_type = get_post_type_object( 'donation' );
153
154 /**
155 * Filter the list of submenu pages that come
156 * under the Charitable menu tab.
157 *
158 * @since 1.0.0
159 *
160 * @param array $pages Every page is an array with at least a page_title,
161 * menu_title and menu_slug set.
162 */
163 return apply_filters(
164 'charitable_submenu_pages',
165 array(
166 array(
167 'page_title' => $campaign_post_type->labels->menu_name,
168 'menu_title' => $campaign_post_type->labels->menu_name,
169 'menu_slug' => 'edit.php?post_type=campaign',
170 'capability' => 'edit_campaigns',
171 ),
172 array(
173 'page_title' => $campaign_post_type->labels->add_new,
174 'menu_title' => $campaign_post_type->labels->add_new,
175 'menu_slug' => 'post-new.php?post_type=campaign',
176 'capability' => 'edit_campaigns',
177 ),
178 array(
179 'page_title' => $donation_post_type->labels->menu_name,
180 'menu_title' => $donation_post_type->labels->menu_name,
181 'menu_slug' => 'edit.php?post_type=donation',
182 'capability' => 'edit_donations',
183 ),
184 array(
185 'page_title' => __( 'Campaign Categories', 'charitable' ),
186 'menu_title' => __( 'Categories', 'charitable' ),
187 'menu_slug' => 'edit-tags.php?taxonomy=campaign_category&post_type=campaign',
188 'capability' => 'manage_campaign_terms',
189 ),
190 array(
191 'page_title' => __( 'Campaign Tags', 'charitable' ),
192 'menu_title' => __( 'Tags', 'charitable' ),
193 'menu_slug' => 'edit-tags.php?taxonomy=campaign_tag&post_type=campaign',
194 'capability' => 'manage_campaign_terms',
195 ),
196 array(
197 'page_title' => __( 'Customize', 'charitable' ),
198 'menu_title' => __( 'Customize', 'charitable' ),
199 'menu_slug' => 'customize.php?autofocus[panel]=charitable&url=' . $this->get_customizer_campaign_preview_url(),
200 'capability' => 'manage_charitable_settings',
201 ),
202 array(
203 'page_title' => __( 'Charitable Settings', 'charitable' ),
204 'menu_title' => __( 'Settings', 'charitable' ),
205 'menu_slug' => 'charitable-settings',
206 'function' => array( $this, 'render_settings_page' ),
207 'capability' => 'manage_charitable_settings',
208 ),
209 array(
210 'page_title' => __( 'Charitable Addons', 'charitable' ),
211 'menu_title' => '<span style="color:#f18500">' . __( 'Addons', 'charitable' ) . '</span>',
212 'menu_slug' => 'charitable-addons',
213 'function' => array( $this, 'render_addons_directory_page' ),
214 'capability' => 'manage_charitable_settings',
215 ),
216 )
217 );
218 }
219
220 /**
221 * Set up the redirect to the welcome page.
222 *
223 * @since 1.3.0
224 *
225 * @return void
226 */
227 public function setup_welcome_redirect() {
228 add_action( 'admin_init', array( self::get_instance(), 'redirect_to_welcome' ) );
229 }
230
231 /**
232 * Redirect to the welcome page.
233 *
234 * @since 1.3.0
235 *
236 * @return void
237 */
238 public function redirect_to_welcome() {
239 wp_safe_redirect( admin_url( 'admin.php?page=charitable&install=true' ) );
240 exit;
241 }
242
243 /**
244 * Display the Charitable settings page.
245 *
246 * @since 1.0.0
247 *
248 * @return void
249 */
250 public function render_settings_page() {
251 charitable_admin_view( 'settings/settings' );
252 }
253
254 /**
255 * Display the Charitable addons page.
256 *
257 * @since 1.7.0.4
258 *
259 * @return void
260 */
261 public function render_addons_directory_page() {
262 charitable_admin_view( 'addons-directory/addons-directory' );
263 }
264
265 /**
266 * Display the Charitable donations page.
267 *
268 * @since 1.0.0
269 *
270 * @return void
271 *
272 * @deprecated 1.4.0
273 */
274 public function render_donations_page() {
275 charitable_get_deprecated()->deprecated_function(
276 __METHOD__,
277 '1.4.0',
278 __( 'Donations page now rendered by WordPress default manage_edit-donation_columns', 'charitable' )
279 );
280
281 charitable_admin_view( 'donations-page/page' );
282 }
283
284 /**
285 * Display the Charitable welcome page.
286 *
287 * @since 1.0.0
288 *
289 * @return void
290 */
291 public function render_welcome_page() {
292 charitable_admin_view( 'welcome-page/page' );
293 }
294
295 /**
296 * Return a preview URL for the customizer.
297 *
298 * @since 1.6.0
299 *
300 * @return string
301 */
302 private function get_customizer_campaign_preview_url() {
303 $campaign = Charitable_Campaigns::query(
304 array(
305 'posts_per_page' => 1,
306 'post_status' => 'publish',
307 'fields' => 'ids',
308 'meta_query' => array(
309 'relation' => 'OR',
310 array(
311 'key' => '_campaign_end_date',
312 'value' => date( 'Y-m-d H:i:s' ),
313 'compare' => '>=',
314 'type' => 'datetime',
315 ),
316 array(
317 'key' => '_campaign_end_date',
318 'value' => 0,
319 'compare' => '=',
320 ),
321 ),
322 )
323 );
324
325 if ( $campaign->found_posts ) {
326 $url = charitable_get_permalink(
327 'campaign_donation',
328 array(
329 'campaign_id' => current( $campaign->posts ),
330 )
331 );
332 }
333
334 if ( ! isset( $url ) || false === $url ) {
335 $url = home_url();
336 }
337
338 return urlencode( $url );
339 }
340 }
341
342 endif;
343