'view', 'aieo_report_edit' => 'edit', 'aieo_report_execute' => 'execute', 'aieo_report_export' => 'export', ); } public static function capability_for( $what ) { $map = array_flip( self::capabilities() ); return isset( $map[ $what ] ) ? $map[ $what ] : 'aieo_report_view'; } public static function labels() { return array( 'aieo_report_view' => __( 'View reports', 'ai-eshop-optimizer' ), 'aieo_report_edit' => __( 'Edit values in a report', 'ai-eshop-optimizer' ), 'aieo_report_execute' => __( 'Run report actions', 'ai-eshop-optimizer' ), 'aieo_report_export' => __( 'Export report data', 'ai-eshop-optimizer' ), ); } public static function roles() { return array( 'rooster_data_exporter' => array( 'label' => __( 'Rooster Data Exporter', 'ai-eshop-optimizer' ), 'caps' => array( 'read', 'aieo_report_view', 'aieo_report_export' ), ), 'rooster_data_editor' => array( 'label' => __( 'Rooster Data Editor', 'ai-eshop-optimizer' ), 'caps' => array( 'read', 'aieo_report_view', 'aieo_report_edit' ), ), ); } public static function ensure_roles() { $created = array(); foreach ( self::roles() as $slug => $spec ) { if ( null !== get_role( $slug ) ) { continue; } $caps = array(); foreach ( $spec['caps'] as $cap ) { $caps[ $cap ] = true; } add_role( $slug, $spec['label'], $caps ); $created[] = $slug; } return $created; } public static function seed_once() { if ( (int) get_option( self::SEEDED_OPTION, 0 ) >= self::SEED_VERSION ) { return false; } self::ensure_roles(); foreach ( array( 'administrator', 'shop_manager' ) as $slug ) { $role = get_role( $slug ); if ( ! $role ) { continue; } foreach ( array_keys( self::capabilities() ) as $cap ) { $role->add_cap( $cap ); } } update_option( self::SEEDED_OPTION, self::SEED_VERSION, false ); return true; } public static function grants() { $out = array(); foreach ( array_keys( self::capabilities() ) as $cap ) { $out[ $cap ] = array(); } foreach ( wp_roles()->roles as $slug => $role ) { $caps = isset( $role['capabilities'] ) ? (array) $role['capabilities'] : array(); foreach ( array_keys( self::capabilities() ) as $cap ) { if ( ! empty( $caps[ $cap ] ) ) { $out[ $cap ][] = $slug; } } } return $out; } public static function set_grant( $role_slug, $capability, $granted ) { if ( ! array_key_exists( (string) $capability, self::capabilities() ) ) { return false; } $role = get_role( (string) $role_slug ); if ( ! $role ) { return false; } if ( 'administrator' === (string) $role_slug && ! $granted ) { return false; } if ( $granted ) { $role->add_cap( (string) $capability ); } else { $role->remove_cap( (string) $capability ); } return true; } }