| @@ -9,8 +9,11 @@ | ||
| 9 | 9 | * @since 1.0 |
| 10 | 10 | */ |
| 11 | 11 | |
| 12 | 12 | // Exit if accessed directly. |
| 13 | +use Give\Campaigns\ValueObjects\CampaignPageMetaKeys; | |
| 14 | +use Give\Framework\Permissions\Facades\UserPermissions; | |
| 15 | + | |
| 13 | 16 | if ( ! defined( 'ABSPATH' ) ) { |
| 14 | 17 | exit; |
| 15 | 18 | } |
| 16 | 19 | |
| @@ -17,94 +20,90 @@ | ||
| 17 | 20 | /** |
| 18 | 21 | * Creates the admin submenu pages under the Give menu and assigns their |
| 19 | 22 | * links to global variables |
| 20 | 23 | * |
| 24 | + * @since 4.14.0 update permission capability to use facade | |
| 21 | 25 | * @since 1.0 |
| 22 | 26 | * |
| 23 | 27 | * @global $give_settings_page |
| 24 | 28 | * @global $give_payments_page |
| 25 | 29 | * @global $give_reports_page |
| 26 | - * @global $give_add_ons_page | |
| 27 | 30 | * @global $give_donors_page |
| 28 | 31 | * |
| 29 | 32 | * @return void |
| 30 | 33 | */ |
| 31 | -function give_add_options_links() { | |
| 32 | - global $give_settings_page, $give_payments_page, $give_reports_page, $give_add_ons_page, $give_donors_page, $give_tools_page; | |
| 34 | +function give_add_donations_subpage() { | |
| 35 | + global $give_payments_page; | |
| 33 | 36 | |
| 34 | - //Payments | |
| 35 | - $give_payment = get_post_type_object( 'give_payment' ); | |
| 36 | - $give_payments_page = add_submenu_page( | |
| 37 | - 'edit.php?post_type=give_forms', | |
| 38 | - $give_payment->labels->name, | |
| 39 | - $give_payment->labels->menu_name, | |
| 40 | - 'edit_give_payments', | |
| 41 | - 'give-payment-history', | |
| 42 | - 'give_payment_history_page' | |
| 43 | - ); | |
| 37 | + // Payments | |
| 38 | + /* @var WP_Post_Type $give_payment */ | |
| 39 | + $give_payment = get_post_type_object('give_payment'); | |
| 40 | + $give_payments_page = add_submenu_page( | |
| 41 | + 'edit.php?post_type=give_forms', | |
| 42 | + $give_payment->labels->name, | |
| 43 | + $give_payment->labels->menu_name, | |
| 44 | + UserPermissions::donations()->viewCap(), | |
| 45 | + 'give-payment-history', | |
| 46 | + 'give_payment_history_page' | |
| 47 | + ); | |
| 48 | +} | |
| 44 | 49 | |
| 45 | - //Donors | |
| 46 | - $give_donors_page = add_submenu_page( | |
| 47 | - 'edit.php?post_type=give_forms', | |
| 48 | - esc_html__( 'Donors', 'give' ), | |
| 49 | - esc_html__( 'Donors', 'give' ), | |
| 50 | - 'view_give_reports', | |
| 51 | - 'give-donors', | |
| 52 | - 'give_donors_page' | |
| 53 | - ); | |
| 50 | +add_action( 'admin_menu', 'give_add_donations_subpage', 20 ); | |
| 54 | 51 | |
| 55 | - //Reports` | |
| 56 | - $give_reports_page = add_submenu_page( | |
| 57 | - 'edit.php?post_type=give_forms', | |
| 58 | - esc_html__( 'Donation Reports', 'give' ), | |
| 59 | - esc_html__( 'Reports', 'give' ), | |
| 60 | - 'view_give_reports', | |
| 61 | - 'give-reports', | |
| 62 | - array( | |
| 63 | - Give()->give_settings, | |
| 64 | - 'output', | |
| 65 | - ) | |
| 66 | - ); | |
| 52 | +function give_add_donors_subpage() { | |
| 53 | + global $give_donors_page; | |
| 67 | 54 | |
| 68 | - //Settings | |
| 69 | - $give_settings_page = add_submenu_page( | |
| 70 | - 'edit.php?post_type=give_forms', | |
| 71 | - esc_html__( 'Give Settings', 'give' ), | |
| 72 | - esc_html__( 'Settings', 'give' ), | |
| 73 | - 'manage_give_settings', | |
| 74 | - 'give-settings', | |
| 75 | - array( | |
| 76 | - Give()->give_settings, | |
| 77 | - 'output', | |
| 78 | - ) | |
| 79 | - ); | |
| 55 | + $give_donors_page = add_submenu_page( | |
| 56 | + 'edit.php?post_type=give_forms', | |
| 57 | + esc_html__('Donors', 'give'), | |
| 58 | + esc_html__('Donors', 'give'), | |
| 59 | + UserPermissions::donors()->viewCap(), | |
| 60 | + 'give-donors', | |
| 61 | + 'give_donors_page' | |
| 62 | + ); | |
| 63 | +} | |
| 80 | 64 | |
| 81 | - //Tools. | |
| 82 | - $give_tools_page = add_submenu_page( | |
| 83 | - 'edit.php?post_type=give_forms', | |
| 84 | - esc_html__( 'Give Tools', 'give' ), | |
| 85 | - esc_html__( 'Tools', 'give' ), | |
| 86 | - 'manage_give_settings', | |
| 87 | - 'give-tools', | |
| 88 | - array( | |
| 89 | - Give()->give_settings, | |
| 90 | - 'output', | |
| 91 | - ) | |
| 92 | - ); | |
| 65 | +add_action('admin_menu', 'give_add_donors_subpage', 30); | |
| 93 | 66 | |
| 94 | - //Add-ons | |
| 95 | - $give_add_ons_page = add_submenu_page( | |
| 96 | - 'edit.php?post_type=give_forms', | |
| 97 | - esc_html__( 'Give Add-ons', 'give' ), | |
| 98 | - esc_html__( 'Add-ons', 'give' ), | |
| 99 | - 'install_plugins', | |
| 100 | - 'give-addons', | |
| 101 | - 'give_add_ons_page' | |
| 102 | - ); | |
| 67 | + | |
| 68 | +function give_add_settings_subpage() | |
| 69 | +{ | |
| 70 | + global $give_settings_page; | |
| 71 | + | |
| 72 | + $give_settings_page = add_submenu_page( | |
| 73 | + 'edit.php?post_type=give_forms', | |
| 74 | + esc_html__('GiveWP Settings', 'give'), | |
| 75 | + apply_filters('givewp_settings_menu_title_give-settings',esc_html__('Settings', 'give')), | |
| 76 | + UserPermissions::settings()->manageCap(), | |
| 77 | + 'give-settings', | |
| 78 | + [ | |
| 79 | + Give()->give_settings, | |
| 80 | + 'output', | |
| 81 | + ] | |
| 82 | + ); | |
| 103 | 83 | } |
| 104 | 84 | |
| 105 | -add_action( 'admin_menu', 'give_add_options_links', 10 ); | |
| 85 | +add_action('admin_menu', 'give_add_settings_subpage', 50); | |
| 106 | 86 | |
| 87 | +function give_add_tools_subpage() | |
| 88 | +{ | |
| 89 | + global $give_tools_page; | |
| 90 | + | |
| 91 | + $give_tools_page = add_submenu_page( | |
| 92 | + 'edit.php?post_type=give_forms', | |
| 93 | + esc_html__('GiveWP Tools', 'give'), | |
| 94 | + esc_html__('Tools', 'give'), | |
| 95 | + UserPermissions::settings()->manageCap(), | |
| 96 | + 'give-tools', | |
| 97 | + [ | |
| 98 | + Give()->give_settings, | |
| 99 | + 'output', | |
| 100 | + ] | |
| 101 | + ); | |
| 102 | +} | |
| 103 | + | |
| 104 | +add_action('admin_menu', 'give_add_tools_subpage', 60); | |
| 105 | + | |
| 107 | 106 | /** |
| 108 | 107 | * Determines whether the current admin page is a Give admin page. |
| 109 | 108 | * |
| 110 | 109 | * Only works after the `wp_loaded` hook, & most effective |
| @@ -111,8 +110,9 @@ | ||
| 111 | 110 | * starting on `admin_menu` hook. |
| 112 | 111 | * |
| 113 | 112 | * @since 1.0 |
| 114 | 113 | * @since 2.1 Simplified function. |
| 114 | + * @since 2.15.0 Use anonymous function in array_map to convert only strings to lowercase. | |
| 115 | 115 | * |
| 116 | 116 | * @param string $passed_page Optional. Main page's slug |
| 117 | 117 | * @param string $passed_view Optional. Page view ( ex: `edit` or `delete` ) |
| 118 | 118 | * |
| @@ -121,25 +121,36 @@ | ||
| 121 | 121 | function give_is_admin_page( $passed_page = '', $passed_view = '' ) { |
| 122 | 122 | global $pagenow, $typenow; |
| 123 | 123 | |
| 124 | 124 | $found = true; |
| 125 | - $get_query_args = ! empty( $_GET ) ? @array_map( 'strtolower', $_GET ) : array(); | |
| 125 | + $get_query_args = ! empty( $_GET ) ? | |
| 126 | + array_map( function ( $data ) { | |
| 127 | + return is_string( $data ) ? strtolower( $data ) : $data; | |
| 128 | + }, $_GET ) : | |
| 129 | + []; | |
| 126 | 130 | |
| 127 | 131 | // Set default argument, if not passed. |
| 128 | - $query_args = wp_parse_args( $get_query_args, array_fill_keys( array( 'post_type', 'action', 'taxonomy', 'page', 'view', 'tab' ), false ) ); | |
| 132 | + $query_args = wp_parse_args( $get_query_args, array_fill_keys( [ | |
| 133 | + 'post_type', | |
| 134 | + 'action', | |
| 135 | + 'taxonomy', | |
| 136 | + 'page', | |
| 137 | + 'view', | |
| 138 | + 'tab' | |
| 139 | + ], false ) ); | |
| 129 | 140 | |
| 130 | 141 | switch ( $passed_page ) { |
| 131 | 142 | case 'categories': |
| 132 | 143 | case 'tags': |
| 133 | - $has_view = in_array( $passed_view, array( 'list-table', 'edit', 'new' ), true ); | |
| 144 | + $has_view = in_array( $passed_view, [ 'list-table', 'edit', 'new' ], true ); | |
| 134 | 145 | |
| 135 | 146 | if ( |
| 136 | - ! in_array( $query_args['taxonomy'], array( 'give_forms_category', 'give_forms_tag' ), true ) && | |
| 147 | + ! in_array( $query_args['taxonomy'], [ 'give_forms_category', 'give_forms_tag' ], true ) && | |
| 137 | 148 | 'edit-tags.php' !== $pagenow && |
| 138 | 149 | ( |
| 139 | 150 | $has_view || |
| 140 | 151 | ( |
| 141 | - ( in_array( $passed_view, array( 'list-table', 'new' ), true ) && 'edit' === $query_args['action'] ) || | |
| 152 | + ( in_array( $passed_view, [ 'list-table', 'new' ], true ) && 'edit' === $query_args['action'] ) || | |
| 142 | 153 | ( 'edit' !== $passed_view && 'edit' !== $query_args['action'] ) && |
| 143 | 154 | ! $has_view |
| 144 | 155 | ) |
| 145 | 156 | ) |
| @@ -148,9 +159,9 @@ | ||
| 148 | 159 | } |
| 149 | 160 | break; |
| 150 | 161 | // Give Donation form page. |
| 151 | 162 | case 'give_forms': |
| 152 | - $has_view = in_array( $passed_view, array( 'new', 'list-table', 'edit' ), true ); | |
| 163 | + $has_view = in_array( $passed_view, [ 'new', 'list-table', 'edit' ], true ); | |
| 153 | 164 | |
| 154 | 165 | if ( |
| 155 | 166 | 'give_forms' !== $typenow && |
| 156 | 167 | ( |
| @@ -167,9 +178,9 @@ | ||
| 167 | 178 | } |
| 168 | 179 | break; |
| 169 | 180 | // Give Donors page. |
| 170 | 181 | case 'donors': |
| 171 | - $has_view = array_intersect( array( $passed_view, $query_args['view'] ), array( 'list-table', 'overview', 'notes' ) ); | |
| 182 | + $has_view = array_intersect( [ $passed_view, $query_args['view'] ], [ 'list-table', 'overview', 'notes' ] ); | |
| 172 | 183 | |
| 173 | 184 | if ( |
| 174 | 185 | ( 'give-donors' !== $query_args['page'] || 'edit.php' !== $pagenow ) && |
| 175 | 186 | ( |
| @@ -184,9 +195,9 @@ | ||
| 184 | 195 | case 'payments': |
| 185 | 196 | if ( |
| 186 | 197 | ( 'give-payment-history' !== $query_args['page'] || 'edit.php' !== $pagenow ) && |
| 187 | 198 | ( |
| 188 | - ! in_array( $passed_view, array( 'list-table', 'edit' ), true ) || | |
| 199 | + ! in_array( $passed_view, [ 'list-table', 'edit' ], true ) || | |
| 189 | 200 | ( |
| 190 | 201 | ( 'list-table' !== $passed_view && false !== $query_args['view'] ) || |
| 191 | 202 | ( 'edit' !== $passed_view && 'view-payment-details' !== $query_args['view'] ) |
| 192 | 203 | ) |
| @@ -199,9 +210,9 @@ | ||
| 199 | 210 | case 'settings': |
| 200 | 211 | case 'addons': |
| 201 | 212 | // Get current tab. |
| 202 | 213 | $current_tab = empty( $passed_view ) ? $query_args['tab'] : $passed_view; |
| 203 | - $give_setting_page = in_array( $query_args['page'], array( 'give-reports', 'give-settings', 'give-addons' ), true ); | |
| 214 | + $give_setting_page = in_array( $query_args['page'], [ 'give-reports', 'give-settings', 'give-addons' ], true ); | |
| 204 | 215 | |
| 205 | 216 | // Check if it's Give Setting page or not. |
| 206 | 217 | if ( |
| 207 | 218 | ( 'edit.php' !== $pagenow || ! $give_setting_page ) && |
| @@ -210,22 +221,23 @@ | ||
| 210 | 221 | $found = false; |
| 211 | 222 | } |
| 212 | 223 | break; |
| 213 | 224 | default: |
| 214 | - global $give_payments_page, $give_settings_page, $give_reports_page, $give_system_info_page, $give_add_ons_page, $give_settings_export, $give_donors_page, $give_tools_page; | |
| 215 | - $admin_pages = apply_filters( 'give_admin_pages', array( | |
| 216 | - $give_payments_page, | |
| 217 | - $give_settings_page, | |
| 218 | - $give_reports_page, | |
| 219 | - $give_system_info_page, | |
| 220 | - $give_add_ons_page, | |
| 221 | - $give_settings_export, | |
| 222 | - $give_donors_page, | |
| 223 | - $give_tools_page, | |
| 224 | - 'widgets.php', | |
| 225 | - ) ); | |
| 225 | + global $give_payments_page, $give_settings_page, $give_reports_page, $give_system_info_page, $give_settings_export, $give_donors_page, $give_tools_page; | |
| 226 | + $admin_pages = apply_filters( | |
| 227 | + 'give_admin_pages', | |
| 228 | + [ | |
| 229 | + //$give_payments_page, | |
| 230 | + $give_settings_page, | |
| 231 | + $give_reports_page, | |
| 232 | + $give_system_info_page, | |
| 233 | + $give_settings_export, | |
| 234 | + $give_donors_page, | |
| 235 | + $give_tools_page, | |
| 236 | + ] | |
| 237 | + ); | |
| 226 | 238 | |
| 227 | - $found = ( 'give_forms' === $typenow || in_array( $pagenow, array_merge( $admin_pages, array( 'index.php', 'post-new.php', 'post.php' ) ), true ) ) ? true : false; | |
| 239 | + $found = ( 'give_forms' === $typenow || in_array( $pagenow, array_merge( $admin_pages, [ 'index.php', 'post-new.php', 'post.php', 'widgets.php', 'customize.php' ] ), true ) ) ? true : false; | |
| 228 | 240 | } |
| 229 | 241 | return (bool) apply_filters( 'give_is_admin_page', $found, $query_args['page'], $query_args['view'], $passed_page, $passed_view ); |
| 230 | 242 | } |
| 231 | 243 | |
| @@ -236,34 +248,38 @@ | ||
| 236 | 248 | * @param array $settings |
| 237 | 249 | * @return array |
| 238 | 250 | */ |
| 239 | 251 | function give_settings_page_pages( $settings ) { |
| 240 | - include( 'abstract-admin-settings-page.php' ); | |
| 241 | - include( 'settings/class-settings-cmb2-backward-compatibility.php' ); | |
| 252 | + include 'abstract-admin-settings-page.php'; | |
| 242 | 253 | |
| 243 | - $settings = array( | |
| 254 | + $settings = [ | |
| 244 | 255 | // General settings. |
| 245 | - include( GIVE_PLUGIN_DIR . 'includes/admin/settings/class-settings-general.php' ), | |
| 256 | + include GIVE_PLUGIN_DIR . 'includes/admin/settings/class-settings-general.php', | |
| 246 | 257 | |
| 247 | 258 | // Payment Gateways Settings. |
| 248 | - include( GIVE_PLUGIN_DIR . 'includes/admin/settings/class-settings-gateways.php' ), | |
| 259 | + include GIVE_PLUGIN_DIR . 'includes/admin/settings/class-settings-gateways.php', | |
| 249 | 260 | |
| 250 | 261 | // Display settings. |
| 251 | - include( GIVE_PLUGIN_DIR . 'includes/admin/settings/class-settings-display.php' ), | |
| 262 | + include GIVE_PLUGIN_DIR . 'includes/admin/settings/class-settings-display.php', | |
| 252 | 263 | |
| 253 | 264 | // Emails settings. |
| 254 | - include( GIVE_PLUGIN_DIR . 'includes/admin/settings/class-settings-email.php' ), | |
| 265 | + include GIVE_PLUGIN_DIR . 'includes/admin/settings/class-settings-email.php', | |
| 255 | 266 | |
| 256 | 267 | // Addons settings. |
| 257 | - include( GIVE_PLUGIN_DIR . 'includes/admin/settings/class-settings-addon.php' ), | |
| 268 | + include GIVE_PLUGIN_DIR . 'includes/admin/settings/class-settings-addon.php', | |
| 258 | 269 | |
| 259 | 270 | // License settings. |
| 260 | - include( GIVE_PLUGIN_DIR . 'includes/admin/settings/class-settings-license.php' ), | |
| 271 | + include GIVE_PLUGIN_DIR . 'includes/admin/settings/class-settings-license.php', | |
| 261 | 272 | |
| 262 | 273 | // Advanced settings. |
| 263 | - include( GIVE_PLUGIN_DIR . 'includes/admin/settings/class-settings-advanced.php' ), | |
| 264 | - ); | |
| 274 | + include GIVE_PLUGIN_DIR . 'includes/admin/settings/class-settings-advanced.php', | |
| 275 | + ]; | |
| 265 | 276 | |
| 277 | + // Recurring Donations settings. | |
| 278 | + if ( !defined('GIVE_RECURRING_VERSION') ) { | |
| 279 | + $settings[] = include GIVE_PLUGIN_DIR . 'includes/admin/settings/class-settings-recurring.php'; | |
| 280 | + } | |
| 281 | + | |
| 266 | 282 | // Output. |
| 267 | 283 | return $settings; |
| 268 | 284 | } |
| 269 | 285 | add_filter( 'give-settings_get_settings_pages', 'give_settings_page_pages', 0, 1 ); |
| @@ -276,21 +292,21 @@ | ||
| 276 | 292 | * @param array $settings |
| 277 | 293 | * @return array |
| 278 | 294 | */ |
| 279 | 295 | function give_reports_page_pages( $settings ) { |
| 280 | - include( 'abstract-admin-settings-page.php' ); | |
| 296 | + include 'abstract-admin-settings-page.php'; | |
| 281 | 297 | |
| 282 | - $settings = array( | |
| 298 | + $settings = [ | |
| 283 | 299 | // Earnings. |
| 284 | - include( 'reports/class-earnings-report.php' ), | |
| 300 | + include 'reports/class-earnings-report.php', | |
| 285 | 301 | |
| 286 | 302 | // Forms. |
| 287 | - include( 'reports/class-forms-report.php' ), | |
| 303 | + include 'reports/class-forms-report.php', | |
| 288 | 304 | |
| 289 | 305 | // Gateways. |
| 290 | - include( 'reports/class-gateways-report.php' ), | |
| 306 | + include 'reports/class-gateways-report.php', | |
| 291 | 307 | |
| 292 | - ); | |
| 308 | + ]; | |
| 293 | 309 | |
| 294 | 310 | // Output. |
| 295 | 311 | return $settings; |
| 296 | 312 | } |
| @@ -303,30 +319,30 @@ | ||
| 303 | 319 | * @param array $settings |
| 304 | 320 | * @return array |
| 305 | 321 | */ |
| 306 | 322 | function give_tools_page_pages( $settings ) { |
| 307 | - include( 'abstract-admin-settings-page.php' ); | |
| 323 | + include 'abstract-admin-settings-page.php'; | |
| 308 | 324 | |
| 309 | - $settings = array( | |
| 325 | + $settings = [ | |
| 310 | 326 | |
| 311 | 327 | // Export. |
| 312 | - include( GIVE_PLUGIN_DIR . 'includes/admin/tools/class-settings-export.php' ), | |
| 328 | + include GIVE_PLUGIN_DIR . 'includes/admin/tools/class-settings-export.php', | |
| 313 | 329 | |
| 314 | 330 | // Import |
| 315 | - include_once( GIVE_PLUGIN_DIR . 'includes/admin/tools/class-settings-import.php' ), | |
| 331 | + include_once GIVE_PLUGIN_DIR . 'includes/admin/tools/class-settings-import.php', | |
| 316 | 332 | |
| 317 | 333 | // Logs. |
| 318 | - include( GIVE_PLUGIN_DIR . 'includes/admin/tools/class-settings-logs.php' ), | |
| 334 | + include GIVE_PLUGIN_DIR . 'includes/admin/tools/class-settings-logs.php', | |
| 319 | 335 | |
| 320 | 336 | // API. |
| 321 | - include( GIVE_PLUGIN_DIR . 'includes/admin/tools/class-settings-api.php' ), | |
| 337 | + include GIVE_PLUGIN_DIR . 'includes/admin/tools/class-settings-api.php', | |
| 322 | 338 | |
| 323 | 339 | // Data. |
| 324 | - include( GIVE_PLUGIN_DIR . 'includes/admin/tools/class-settings-data.php' ), | |
| 340 | + include GIVE_PLUGIN_DIR . 'includes/admin/tools/class-settings-data.php', | |
| 325 | 341 | |
| 326 | 342 | // System Info. |
| 327 | - include( GIVE_PLUGIN_DIR . 'includes/admin/tools/class-settings-system-info.php' ), | |
| 328 | - ); | |
| 343 | + include GIVE_PLUGIN_DIR . 'includes/admin/tools/class-settings-system-info.php', | |
| 344 | + ]; | |
| 329 | 345 | |
| 330 | 346 | // Output. |
| 331 | 347 | return $settings; |
| 332 | 348 | } |
| @@ -362,9 +378,9 @@ | ||
| 362 | 378 | * Add a page display state for special Give pages in the page list table. |
| 363 | 379 | * |
| 364 | 380 | * @since 1.8.18 |
| 365 | 381 | * |
| 366 | - * @param array $post_states An array of post display states. | |
| 382 | + * @param array $post_states An array of post display states. | |
| 367 | 383 | * @param WP_Post $post The current post object. |
| 368 | 384 | * |
| 369 | 385 | * @return array |
| 370 | 386 | */ |
| @@ -381,8 +397,11 @@ | ||
| 381 | 397 | |
| 382 | 398 | case give_get_option( 'history_page' ): |
| 383 | 399 | $post_states['give_history_page'] = __( 'Donation History Page', 'give' ); |
| 384 | 400 | break; |
| 401 | + case (bool)get_post_meta( $post->ID, CampaignPageMetaKeys::CAMPAIGN_ID, true ): | |
| 402 | + $post_states['give_campaign_page'] = __( 'GiveWP Campaign Page', 'give' ); | |
| 403 | + break; | |
| 385 | 404 | } |
| 386 | 405 | |
| 387 | 406 | return $post_states; |
| 388 | 407 | } |