Skip to:
Content

BuddyPress.org

Changeset 12496


Ignore:
Timestamp:
11/11/2019 12:48:27 PM (6 years ago)
Author:
imath
Message:

Make it possible to fetch a blog's avatar outside of the blogs loop

Passing 2 new parameters ($blog_id & $admin_user_id) to the bp_get_blog_avatar() function will return the corresponding blog's avatar without the need to run a blogs loop.

Props espellcaste

Fixes #8150

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/bp-blogs/bp-blogs-template.php

    r11447 r12496  
    302302     *
    303303     * @since 2.4.0 Introduced `$title` argument.
     304     * @since 6.0.0 Introduced the `$blog_id` & `$admin_user_id` arguments.
    304305     *
    305306     * @see bp_core_fetch_avatar() For a description of arguments and
     
    310311     *     For more information about the arguments, see
    311312     *     {@link bp_core_fetch_avatar()}.
    312      *     @type string   $alt     Default: 'Profile picture of site author [user name]'.
    313      *     @type string   $class   Default: 'avatar'.
    314      *     @type string   $type    Default: 'full'.
    315      *     @type int|bool $width   Default: false.
    316      *     @type int|bool $height  Default: false.
    317      *     @type bool     $id      Currently unused.
    318      *     @type bool     $no_grav Default: true.
     313     *     @type string   $alt           Default: 'Profile picture of site author [user name]'.
     314     *     @type string   $class         Default: 'avatar'.
     315     *     @type string   $type          Default: 'full'.
     316     *     @type int|bool $width         Default: false.
     317     *     @type int|bool $height        Default: false.
     318     *     @type bool     $id            Currently unused.
     319     *     @type bool     $no_grav       Default: false.
     320     *     @type int      $blog_id       The blog ID. Default: O.
     321     *     @type int      $admin_user_id The Blog Admin user ID. Default: 0.
    319322     * }
    320323     * @return string User avatar string.
     
    329332        }
    330333
    331         $author_displayname = bp_core_get_user_displayname( $blogs_template->blog->admin_user_id );
     334        // Set default values.
     335        $author_displayname = '';
     336        $admin_user_id      = 0;
     337        $blog_id            = 0;
     338
     339        if ( ! $blogs_template && isset( $args['admin_user_id'] ) && $args['admin_user_id'] ) {
     340            $admin_user_id      = (int) $args['admin_user_id'];
     341            $author_displayname = bp_core_get_user_displayname( $admin_user_id );
     342        } else {
     343            $admin_user_id      = $blogs_template->blog->admin_user_id;
     344            $author_displayname = bp_core_get_user_displayname( $blogs_template->blog->admin_user_id );
     345        }
     346
     347        if ( ! $blogs_template && isset( $args['blog_id'] ) && $args['blog_id'] ) {
     348            $blog_id = (int) $args['blog_id'];
     349        } else {
     350            $blog_id = bp_get_blog_id();
     351        }
    332352
    333353        // Parse the arguments.
     
    339359            'id'      => false,
    340360            'alt'     => sprintf( __( 'Profile picture of site author %s', 'buddypress' ), esc_attr( $author_displayname ) ),
    341             'no_grav' => true,
     361            'no_grav' => false,
    342362        ) );
    343363
    344364        // Use site icon if available.
    345365        $avatar = '';
    346         if ( bp_is_active( 'blogs', 'site-icon' ) && function_exists( 'has_site_icon' ) ) {
    347             $site_icon = bp_blogs_get_blogmeta( bp_get_blog_id(), "site_icon_url_{$r['type']}" );
     366        if ( bp_is_active( 'blogs', 'site-icon' ) ) {
     367            $site_icon = bp_blogs_get_blogmeta( $blog_id, "site_icon_url_{$r['type']}" );
    348368
    349369            // Never attempted to fetch site icon before; do it now!
    350370            if ( '' === $site_icon ) {
    351                 switch_to_blog( bp_get_blog_id() );
     371                switch_to_blog( $blog_id );
    352372
    353373                // Fetch the other size first.
     
    367387
    368388                // Sync site icon for other size to blogmeta.
    369                 bp_blogs_update_blogmeta( bp_get_blog_id(), "site_icon_url_{$save_size}", $site_icon );
     389                bp_blogs_update_blogmeta( $blog_id, "site_icon_url_{$save_size}", $site_icon );
    370390
    371391                // Now, fetch the size we want.
     
    376396
    377397                // Sync site icon to blogmeta.
    378                 bp_blogs_update_blogmeta( bp_get_blog_id(), "site_icon_url_{$r['type']}", $site_icon );
     398                bp_blogs_update_blogmeta( $blog_id, "site_icon_url_{$r['type']}", $site_icon );
    379399
    380400                restore_current_blog();
     
    389409                }
    390410
     411                $alt_attribute = __( 'Site icon for the blog', 'buddypress' );
     412                if ( $blogs_template ) {
     413                    /* translators: %s is the placeholder for the name of the blog */
     414                    $alt_attribute = sprintf( __( 'Site icon for %s', 'buddypress' ), bp_get_blog_name() );
     415                }
     416
    391417                $avatar = sprintf( '<img src="%1$s" class="%2$s" width="%3$s" height="%3$s" alt="%4$s" />',
    392418                    esc_url( $site_icon ),
    393419                    esc_attr( "{$r['class']} avatar-{$size}" ),
    394420                    esc_attr( $size ),
    395                     sprintf( esc_attr__( 'Site icon for %s', 'buddypress' ), bp_get_blog_name() )
     421                    esc_attr( $alt_attribute )
    396422                );
    397423            }
     
    401427        if ( '' === $avatar ) {
    402428            $avatar = bp_core_fetch_avatar( array(
    403                 'item_id'    => $blogs_template->blog->admin_user_id,
     429                'item_id'    => $admin_user_id,
    404430                // 'avatar_dir' => 'blog-avatars',
    405431                // 'object'     => 'blog',
     
    409435                'class'      => $r['class'],
    410436                'width'      => $r['width'],
    411                 'height'     => $r['height']
     437                'height'     => $r['height'],
     438                'no_grav'    => $r['no_grav'],
    412439            ) );
    413440        }
     
    421448         * Use the 'bp_get_blog_avatar' filter instead.
    422449         */
    423         $avatar = apply_filters( 'bp_get_blog_avatar_' . $blogs_template->blog->blog_id, $avatar );
     450        $avatar = apply_filters( 'bp_get_blog_avatar_' . $blog_id, $avatar );
    424451
    425452        /**
     
    433460         * @param array  $r       Array of arguments used when fetching avatar.
    434461         */
    435         return apply_filters( 'bp_get_blog_avatar', $avatar, $blogs_template->blog->blog_id, $r );
     462        return apply_filters( 'bp_get_blog_avatar', $avatar, $blog_id, $r );
    436463    }
    437464
  • trunk/tests/phpunit/testcases/blogs/template.php

    r12244 r12496  
    368368    }
    369369
     370    /**
     371     * @group avatar
     372     * @group BP_Blogs_Template
     373     * @group bp_get_blog_avatar
     374     */
     375    public function test_bp_get_blog_avatar_ids_provided() {
     376        if ( ! is_multisite() ) {
     377            $this->markTestSkipped();
     378        }
     379
     380        if ( function_exists( 'wp_initialize_site' ) ) {
     381            $this->setExpectedDeprecated( 'wpmu_new_blog' );
     382        }
     383
     384        global $blogs_template;
     385        $reset_blogs_template = $blogs_template;
     386        $blogs_template = null;
     387
     388        $u = self::factory()->user->create();
     389        $b = self::factory()->blog->create( array(
     390            'title' => 'The Foo Bar Blog',
     391            'user_id' => $u,
     392        ) );
     393
     394        $avatar = bp_get_blog_avatar( array(
     395            'type'          => 'full',
     396            'admin_user_id' => $u,
     397            'blog_id'       => $b,
     398            'alt'           => 'test',
     399            'no_grav'       => true,
     400            'class'         => 'avatar',
     401        ) );
     402
     403        $blogs_template = $reset_blogs_template;
     404
     405        $this->assertTrue( $avatar === bp_core_fetch_avatar( array(
     406            'type'          => 'full',
     407            'item_id'       => $u,
     408            'alt'           => 'test',
     409            'no_grav'       => true,
     410            'class'         => 'avatar',
     411        ) ) );
     412    }
     413
     414    /**
     415     * @group avatar
     416     * @group BP_Blogs_Template
     417     * @group bp_get_blog_avatar
     418     */
     419    public function test_bp_get_blog_avatar_has_site_icon() {
     420        if ( ! is_multisite() ) {
     421            $this->markTestSkipped();
     422        }
     423
     424        if ( function_exists( 'wp_initialize_site' ) ) {
     425            $this->setExpectedDeprecated( 'wpmu_new_blog' );
     426        }
     427
     428        global $blogs_template;
     429        $reset_blogs_template = $blogs_template;
     430        $blogs_template = null;
     431
     432        $u = self::factory()->user->create();
     433        $b = self::factory()->blog->create( array(
     434            'title' => 'The Bar Foo Blog',
     435            'user_id' => $u,
     436        ) );
     437
     438        add_filter( 'get_site_icon_url', array( $this, 'filter_blog_avatar' ) );
     439
     440        $avatar = bp_get_blog_avatar( array(
     441            'type'          => 'full',
     442            'admin_user_id' => $u,
     443            'blog_id'       => $b,
     444            'alt'           => 'test',
     445            'no_grav'       => true,
     446            'class'         => 'avatar',
     447        ) );
     448
     449        remove_filter( 'get_site_icon_url', array( $this, 'filter_blog_avatar' ) );
     450        $blogs_template = $reset_blogs_template;
     451
     452        $this->assertTrue( false !== strpos( $avatar, BP_TESTS_DIR . 'assets/upside-down.jpg' ) );
     453    }
     454
     455    public function filter_blog_avatar() {
     456        return BP_TESTS_DIR . 'assets/upside-down.jpg';
     457    }
    370458}
Note: See TracChangeset for help on using the changeset viewer.