user->ID, $capability ); } } return $result; } /** * Extend user capabilities with Groups user capabilities. * * @param array $allcaps the capabilities the user has * @param unknown_type $caps * @param unknown_type $args */ public static function user_has_cap( $allcaps, $caps, $args ) { $user_id = isset( $args[1] ) ? $args[1] : null; $groups_user = new Groups_User( $user_id ); if ( is_array( $caps ) ) { // we need to deactivate this because invoking $groups_user->can() // would trigger this same function and we would end up // in an infinite loop remove_filter( 'user_has_cap', array( __CLASS__, 'user_has_cap' ), 10, 3 ); foreach( $caps as $cap ) { if ( $groups_user->can( $cap ) ) { $allcaps[$cap] = true; } } add_filter( 'user_has_cap', array( __CLASS__, 'user_has_cap' ), 10, 3 ); } return $allcaps; } /** * Adds WordPress capabilities to Groups capabilities. * Must be called explicitly. * @see Groups_Controller::activate() */ public static function activate() { global $wp_roles; $capabilities = array(); if ( !isset( $wp_roles ) ) { // just trigger initialization get_role( 'administrator' ); } $roles = $wp_roles->roles; if ( is_array( $roles ) ) { foreach ( $roles as $rolename => $atts ) { if ( isset( $atts['capabilities'] ) && is_array( $atts['capabilities'] ) ) { foreach ( $atts['capabilities'] as $capability => $value ) { if ( !in_array( $capability, $capabilities ) ) { $capabilities[] = $capability; } } } } } foreach ( $capabilities as $capability ) { if ( !Groups_Capability::read_by_capability( $capability ) ) { Groups_Capability::create( array( 'capability' => $capability ) ); } } } } Groups_WordPress::init();