Skip to:
Content

BuddyPress.org

Changeset 12496


Ignore:
Timestamp:
11/11/2019 12:48:27 PM (7 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.