Skip to:
Content

BuddyPress.org

Changeset 9957


Ignore:
Timestamp:
06/20/2015 01:54:56 PM (11 years ago)
Author:
boonebgorges
Message:

Convert second parameter of bp_current_user_can() to an $args array.

This makes the syntax simpler for the vast majority of use cases, where an
explicit blog_id doesn't need to be specified. It also makes it possible to
pass additional arguments, such as an item_id, to bp_current_user_can().

An integer passed as the second parameter will trigger the backward-
compatibility layer.

Props thebrandonallen, r-a-y.
See #5121. Fixes #6501.

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/bp-core/bp-core-caps.php

    r9945 r9957  
    264264 * Check whether the current user has a given capability.
    265265 *
    266  * Can be passed blog ID, or will use the root blog by default.
    267  *
    268  * @since BuddyPress (1.6.0)
    269  *
    270  * @param string $capability Capability or role name.
    271  * @param int $blog_id Optional. Blog ID. Defaults to the BP root blog.
    272  * @return bool True if the user has the cap for the given blog.
    273  */
    274 function bp_current_user_can( $capability, $blog_id = 0 ) {
     266 * @since BuddyPress (1.6.0)
     267 * @since BuddyPress (2.4.0) Second argument modified to accept an array, rather than `$blog_id`.
     268 *
     269 * @param string    $capability Capability or role name.
     270 * @param array|int $args {
     271 *     Array of extra arguments applicable to the capability check.
     272 *     @type int   $blog_id Optional. Blog ID. Defaults to the BP root blog.
     273 *     @type mixed $a,...   Optional. Extra arguments applicable to the capability check.
     274 * }
     275 * @return bool True if the user has the cap for the given parameters.
     276 */
     277function bp_current_user_can( $capability, $args = array() ) {
     278        $blog_id = 0;
     279
     280        // Backward compatibility for older $blog_id parameter.
     281        if ( is_int( $args ) ) {
     282                $blog_id = $args;
     283                $args = array();
     284
     285        // New format for second parameter.
     286        } elseif ( is_array( $args ) && isset( $args['blog_id'] ) ) {
     287                // Get the blog ID if set, but don't pass along to `current_user_can_for_blog()`.
     288                $blog_id = (int) $args['blog_id'];
     289                unset( $args['blog_id'] );
     290        }
    275291
    276292        // Use root blog if no ID passed
    … …  
    279295        }
    280296
    281         $retval = current_user_can_for_blog( $blog_id, $capability );
     297        $args   = array( $blog_id, $capability, $args );
     298        $retval = call_user_func_array( 'current_user_can_for_blog', $args );
    282299
    283300        /**
    … …  
    285302         *
    286303         * @since BuddyPress (1.6.0)
     304         * @since BuddyPress (2.4.0) Pass `$args` variable.
    287305         *
    288306         * @param bool   $retval     Whether or not the current user has the capability.
    289307         * @param string $capability The capability being checked for.
    290308         * @param int    $blog_id    Blog ID. Defaults to the BP root blog.
    291          */
    292         return (bool) apply_filters( 'bp_current_user_can', $retval, $capability, $blog_id );
     309         * @param array  $args       Array of extra arguments passed.
     310         */
     311        return (bool) apply_filters( 'bp_current_user_can', $retval, $capability, $blog_id, $args );
    293312}
    294313
  • trunk/tests/phpunit/testcases/core/caps.php

    r9956 r9957  
    2525        }
    2626
     27        /**
     28         * @ticket BP6501
     29         */
     30        public function test_bp_current_user_can_should_respect_blog_id_passed_in_args_array() {
     31                if ( ! is_multisite() ) {
     32                        $this->markTestSkipped( __METHOD__ . ' requires multisite.' );
     33                }
     34
     35                $b = $this->factory->blog->create();
     36                $u = $this->factory->user->create();
     37
     38                $this->set_current_user( $u );
     39
     40                add_filter( 'user_has_cap', array( $this, 'grant_cap_foo' ), 10, 2 );
     41                $can  = bp_current_user_can( 'foo', array( 'blog_id' => bp_get_root_blog_id() ) );
     42                $cant = bp_current_user_can( 'foo', array( 'blog_id' => $b ) );
     43                remove_filter( 'user_has_cap', array( $this, 'grant_cap_foo' ), 10, 2 );
     44
     45                $this->assertTrue( $can );
     46                $this->assertFalse( $cant );
     47        }
     48
    2749        public function grant_cap_foo( $allcaps, $caps ) {
    2850                if ( bp_is_root_blog() ) {
Note: See TracChangeset for help on using the changeset viewer.