add_action( 'init', $this, 'maybe_add_roles' ); } /** * Called on 'init': idempotently creates roles if not present. * This covers cases where the plugin is loaded without a fresh activation * (e.g. direct DB restore or multisite clone). */ public function maybe_add_roles(): void { if ( ! get_role( 'academiccrew_admin' ) || ! get_role( 'academiccrew_member' ) ) { static::add_roles(); } } // ------------------------------------------------------------------------- // Static helpers — called by Activator::activate() and uninstall.php // ------------------------------------------------------------------------- public static function add_roles(): void { if ( ! get_role( 'academiccrew_admin' ) ) { add_role( 'academiccrew_admin', __( 'AcademicCrew Admin', 'academiccrew' ), [ 'read' => true, 'edit_posts' => true, 'edit_others_posts' => true, 'publish_posts' => true, 'read_private_posts' => true, 'delete_posts' => true, 'delete_private_posts' => true, 'delete_published_posts' => true, 'delete_others_posts' => true, 'edit_private_posts' => true, 'edit_published_posts' => true, 'upload_files' => true, 'academiccrew_sync' => true, 'academiccrew_import' => true, 'academiccrew_manage_settings' => true, ] ); } if ( ! get_role( 'academiccrew_member' ) ) { add_role( 'academiccrew_member', __( 'AcademicCrew Member', 'academiccrew' ), [ 'read' => true, 'upload_files' => true, 'academiccrew_edit_profile' => true, ] ); } // Grant custom caps to administrator role so they see sync / import menus. $administrator = get_role( 'administrator' ); if ( $administrator ) { foreach ( [ 'academiccrew_sync', 'academiccrew_import', 'academiccrew_manage_settings', 'academiccrew_edit_profile' ] as $cap ) { $administrator->add_cap( $cap ); } } } public static function remove_roles(): void { remove_role( 'academiccrew_admin' ); remove_role( 'academiccrew_member' ); $administrator = get_role( 'administrator' ); if ( $administrator ) { foreach ( [ 'academiccrew_sync', 'academiccrew_import', 'academiccrew_manage_settings', 'academiccrew_edit_profile' ] as $cap ) { $administrator->remove_cap( $cap ); } } } }