admin-notices
6 months ago
features
6 months ago
plugin-capabilities
6 months ago
redirects
6 months ago
roles
6 months ago
admin-load.php
6 months ago
admin.php
6 months ago
backup-handler.php
6 months ago
backup.php
6 months ago
cap-helper.php
6 months ago
dashboard.php
6 months ago
extractor-capabilities.php
6 months ago
filters-admin.php
6 months ago
filters-woocommerce.php
6 months ago
filters-wp_rest_workarounds.php
6 months ago
filters.php
6 months ago
functions-admin.php
6 months ago
functions.php
6 months ago
handler.php
6 months ago
inflect-cme.php
6 months ago
manager.php
6 months ago
network.php
6 months ago
plugin-capabilities.php
6 months ago
pp-handler.php
6 months ago
pp-ui.php
6 months ago
publishpress-roles.php
6 months ago
settings-handler.php
6 months ago
settings-ui.php
6 months ago
settings.php
6 months ago
test-user-ui.php
6 months ago
test-user.php
6 months ago
network.php
86 lines
| 1 | <?php |
| 2 | /* |
| 3 | * PublishPress Capabilities [Free] |
| 4 | * |
| 5 | * Multisite-related functions / filter handlers |
| 6 | * |
| 7 | */ |
| 8 | |
| 9 | add_action( 'wpmu_new_blog', '_cme_new_blog' ); |
| 10 | function _cme_new_blog( $new_blog_id ) { |
| 11 | if ( $autocreate_roles = get_site_option( 'cme_autocreate_roles' ) ) { |
| 12 | global $wp_roles, $blog_id; |
| 13 | |
| 14 | $restore_blog_id = $blog_id; |
| 15 | |
| 16 | $main_site_id = (function_exists('get_main_site_id')) ? get_main_site_id() : 1; |
| 17 | |
| 18 | switch_to_blog($main_site_id); |
| 19 | ( method_exists( $wp_roles, 'for_site' ) ) ? $wp_roles->for_site() : $wp_roles->reinit(); |
| 20 | |
| 21 | $main_site_caps = array(); |
| 22 | $role_captions = array(); |
| 23 | |
| 24 | $admin_role = $wp_roles->get_role('administrator'); |
| 25 | $main_admin_caps = $admin_role->capabilities; |
| 26 | |
| 27 | if ( defined('PRESSPERMIT_ACTIVE') ) { |
| 28 | $main_pp_only = (array) pp_capabilities_get_permissions_option( 'supplemental_role_defs' ); |
| 29 | } |
| 30 | |
| 31 | foreach( $autocreate_roles as $role_name ) { |
| 32 | if ( $role = get_role( $role_name ) ) { |
| 33 | $main_site_caps[$role_name] = $role->capabilities; |
| 34 | $role_captions[$role_name] = $wp_roles->role_names[$role_name]; |
| 35 | } |
| 36 | } |
| 37 | |
| 38 | switch_to_blog($new_blog_id); |
| 39 | ( method_exists( $wp_roles, 'for_site' ) ) ? $wp_roles->for_site() : $wp_roles->reinit(); |
| 40 | |
| 41 | if ( defined('PRESSPERMIT_ACTIVE') ) { |
| 42 | pp_refresh_options(); |
| 43 | $blog_pp_only = (array) pp_capabilities_get_permissions_option( 'supplemental_role_defs' ); |
| 44 | } |
| 45 | |
| 46 | foreach( $main_site_caps as $role_name => $caps ) { |
| 47 | if ( $blog_role = $wp_roles->get_role( $role_name ) ) { |
| 48 | $stored_role_caps = ( ! empty($blog_role->capabilities) && is_array($blog_role->capabilities) ) ? array_intersect( $blog_role->capabilities, array(true, 1) ) : array(); |
| 49 | |
| 50 | // Find caps to add and remove |
| 51 | $add_caps = array_diff_key($caps, $stored_role_caps); |
| 52 | $del_caps = array_intersect_key( array_diff_key($stored_role_caps, $caps), $main_admin_caps ); // don't mess with caps that are totally unused on main site |
| 53 | |
| 54 | // Add new capabilities to role |
| 55 | foreach ( $add_caps as $cap => $grant ) |
| 56 | $blog_role->add_cap($cap); |
| 57 | |
| 58 | // Remove capabilities from role |
| 59 | foreach ( $del_caps as $cap => $grant) |
| 60 | $blog_role->remove_cap($cap); |
| 61 | } else { |
| 62 | $wp_roles->add_role( $role_name, $role_captions[$role_name], $caps ); |
| 63 | } |
| 64 | |
| 65 | if ( defined('PRESSPERMIT_ACTIVE') ) { |
| 66 | if ( in_array( $role_name, $main_pp_only ) ) { |
| 67 | _cme_pp_default_pattern_role( $role_name ); |
| 68 | $blog_pp_only []= $role_name; |
| 69 | } else |
| 70 | array_diff( $blog_pp_only, array( $role_name ) ); |
| 71 | } |
| 72 | } |
| 73 | |
| 74 | if ( defined('PRESSPERMIT_ACTIVE') ) { |
| 75 | pp_capabilities_update_permissions_option('supplemental_role_defs', $blog_pp_only); |
| 76 | } |
| 77 | |
| 78 | restore_current_blog(); |
| 79 | ( method_exists( $wp_roles, 'for_site' ) ) ? $wp_roles->for_site() : $wp_roles->reinit(); |
| 80 | |
| 81 | if ( defined('PRESSPERMIT_ACTIVE') ) |
| 82 | pp_refresh_options(); |
| 83 | } |
| 84 | } |
| 85 | |
| 86 |