Skip to:
Content

BuddyPress.org

Ticket #5958: 5958.2.patch

File 5958.2.patch, 14.4 KB (added by dcavins, 12 years ago)

Removes extract() from bp_core_fetch_avatar()

  • src/bp-core/bp-core-avatars.php

    diff --git src/bp-core/bp-core-avatars.php src/bp-core/bp-core-avatars.php
    index 7992132..6499535 100644
    add_action( 'bp_setup_globals', 'bp_core_set_avatar_globals' ); 
    174174 * @return string Formatted HTML <img> element, or raw avatar URL based on $html arg.
    175175 */
    176176function bp_core_fetch_avatar( $args = '' ) {
     177        $bp = buddypress();
    177178
    178179        // If avatars are disabled for the root site, obey that request and bail
    179         if ( ! buddypress()->avatar->show_avatars )
     180        if ( ! $bp->avatar->show_avatars )
    180181                return;
    181182
    182183        global $current_blog;
    183184
    184         $bp = buddypress();
    185 
    186         // Set a few default variables
    187         $def_object = 'user';
    188         $def_type   = 'thumb';
    189         $def_class  = 'avatar';
    190 
    191         // Set the default variables array
     185        // Set the default variables array and parse it against incoming $args array.
    192186        $params = wp_parse_args( $args, array(
    193187                'item_id'    => false,
    194                 'object'     => $def_object, // user/group/blog/custom type (if you use filters)
    195                 'type'       => $def_type,  // thumb or full
     188                'object'     => 'user',          // user/group/blog/custom type (if you use filters)
     189                'type'       => 'thumb',        // thumb or full
    196190                'avatar_dir' => false,       // Specify a custom avatar directory for your object
    197191                'width'      => false,       // Custom width (int)
    198192                'height'     => false,       // Custom height (int)
    199                 'class'      => $def_class, // Custom <img> class (string)
     193                'class'      => 'avatar',        // Custom <img> class (string)
    200194                'css_id'     => false,       // Custom <img> ID (string)
    201195                'alt'        => '',          // Custom <img> alt (string)
    202196                'email'      => false,       // Pass the user email (for gravatar) to prevent querying the DB for it
    function bp_core_fetch_avatar( $args = '' ) { 
    204198                'html'       => true,        // Wrap the return img URL in <img />
    205199                'title'      => ''           // Custom <img> title (string)
    206200        ) );
    207         extract( $params, EXTR_SKIP );
    208201
    209202        /** Set item_id ***********************************************************/
    210203
    211         if ( empty( $item_id ) ) {
     204        if ( empty( $params['item_id'] ) ) {
    212205
    213                 switch ( $object ) {
     206                switch ( $params['object'] ) {
    214207
    215208                        case 'blog'  :
    216                                 $item_id = $current_blog->id;
     209                                $params['item_id'] = $current_blog->id;
    217210                                break;
    218211
    219212                        case 'group' :
    220213                                if ( bp_is_active( 'groups' ) ) {
    221                                         $item_id = $bp->groups->current_group->id;
     214                                        $params['item_id'] = $bp->groups->current_group->id;
    222215                                } else {
    223                                         $item_id = false;
     216                                        $params['item_id'] = false;
    224217                                }
    225218
    226219                                break;
    227220
    228221                        case 'user'  :
    229222                        default      :
    230                                 $item_id = bp_displayed_user_id();
     223                                $params['item_id'] = bp_displayed_user_id();
    231224                                break;
    232225                }
    233226
    234                 $item_id = apply_filters( 'bp_core_avatar_item_id', $item_id, $object, $params );
     227                $params['item_id'] = apply_filters( 'bp_core_avatar_item_id', $params['item_id'], $params['object'], $params );
    235228
    236                 if ( empty( $item_id ) ) {
     229                if ( empty( $params['item_id'] ) ) {
    237230                        return false;
    238231                }
    239232        }
    240233
    241         $class = apply_filters( 'bp_core_avatar_class', $class, $item_id, $object, $params );
    242 
    243234        /** Set avatar_dir ********************************************************/
    244235
    245         if ( empty( $avatar_dir ) ) {
     236        if ( empty( $params['avatar_dir'] ) ) {
    246237
    247                 switch ( $object ) {
     238                switch ( $params['object'] ) {
    248239
    249240                        case 'blog'  :
    250                                 $avatar_dir = 'blog-avatars';
     241                                $params['avatar_dir'] = 'blog-avatars';
    251242                                break;
    252243
    253244                        case 'group' :
    254245                                if ( bp_is_active( 'groups' ) ) {
    255                                         $avatar_dir = 'group-avatars';
     246                                        $params['avatar_dir'] = 'group-avatars';
    256247                                } else {
    257                                         $avatar_dir = false;
     248                                        $params['avatar_dir'] = false;
    258249                                }
    259250
    260251                                break;
    261252
    262253                        case 'user'  :
    263254                        default      :
    264                                 $avatar_dir = 'avatars';
     255                                $params['avatar_dir'] = 'avatars';
    265256                                break;
    266257                }
    267258
    268                 $avatar_dir = apply_filters( 'bp_core_avatar_dir', $avatar_dir, $object, $params );
     259                $params['avatar_dir'] = apply_filters( 'bp_core_avatar_dir', $params['avatar_dir'], $params['object'], $params );
    269260
    270                 if ( empty( $avatar_dir ) ) {
     261                if ( empty( $params['avatar_dir'] ) ) {
    271262                        return false;
    272263                }
    273264        }
    274265
    275266        /** <img> alt *************************************************************/
    276267
    277         if ( false !== strpos( $alt, '%s' ) || false !== strpos( $alt, '%1$s' ) ) {
     268        if ( false !== strpos( $params['alt'], '%s' ) || false !== strpos( $params['alt'], '%1$s' ) ) {
    278269
    279                 switch ( $object ) {
     270                switch ( $params['object'] ) {
    280271
    281272                        case 'blog'  :
    282                                 $item_name = get_blog_option( $item_id, 'blogname' );
     273                                $item_name = get_blog_option( $params['item_id'], 'blogname' );
    283274                                break;
    284275
    285276                        case 'group' :
    286                                 $item_name = bp_get_group_name( groups_get_group( array( 'group_id' => $item_id ) ) );
     277                                $item_name = bp_get_group_name( groups_get_group( array( 'group_id' => $params['item_id'] ) ) );
    287278                                break;
    288279
    289280                        case 'user'  :
    290281                        default :
    291                                 $item_name = bp_core_get_user_displayname( $item_id );
     282                                $item_name = bp_core_get_user_displayname( $params['item_id'] );
    292283                                break;
    293284                }
    294285
    295                 $item_name = apply_filters( 'bp_core_avatar_alt', $item_name, $item_id, $object, $params );
    296                 $alt       = sprintf( $alt, $item_name );
     286                $item_name = apply_filters( 'bp_core_avatar_alt', $item_name, $params['item_id'], $params['object'], $params );
     287                $params['alt'] = sprintf( $params['alt'], $item_name );
    297288        }
    298289
    299290        /** Sanity Checks *********************************************************/
    300291
    301         // Get a fallback for the 'alt' parameter
    302         if ( empty( $alt ) )
    303                 $alt = __( 'Profile Photo', 'buddypress' );
     292        // Get a fallback for the 'alt' parameter, create html output
     293        if ( empty( $params['alt'] ) ) {
     294                $params['alt'] = __( 'Profile Photo', 'buddypress' );
     295        }
     296        $html_alt = ' alt="' . esc_attr( $params['alt'] ) . '"';
    304297
    305         $html_alt = ' alt="' . esc_attr( $alt ) . '"';
     298        // Filter image title and create html string
     299        $html_title = '';
     300        $params['title'] = apply_filters( 'bp_core_avatar_title', $params['title'], $params['item_id'], $params['object'], $params );
    306301
    307         // Set title tag, if it's been provided
    308         if ( !empty( $title ) ) {
    309                 $title = " title='" . esc_attr( apply_filters( 'bp_core_avatar_title', $title, $item_id, $object, $params ) ) . "'";
     302        if ( ! empty( $params['title'] ) ) {
     303                $html_title = ' title="' . esc_attr( $params['title'] ) . '"';
    310304        }
    311305
    312         // Set CSS ID if passed
    313         if ( !empty( $css_id ) ) {
    314                 $css_id = ' id="' . esc_attr( $css_id ) . '"';
     306        // Set CSS ID and create html string
     307        $html_css_id = '';
     308        $params['css_id'] = apply_filters( 'bp_core_css_id', $params['css_id'], $params['item_id'], $params['object'], $params );
     309       
     310        if ( ! empty( $params['css_id'] ) ) {
     311                $html_css_id = ' id="' . esc_attr( $params['css_id'] ) . '"';
    315312        }
    316313
    317314        // Set image width
    318         if ( false !== $width ) {
    319                 $html_width = ' width="' . $width . '"';
    320         } elseif ( 'thumb' == $type ) {
    321                 $html_width = ' width="' . bp_core_avatar_thumb_width() . '"';
     315        if ( false !== $params['width'] ) {
     316                // Width has been specified. No modification necessary.
     317        } else if ( 'thumb' == $params['type'] ) {
     318                $params['width'] = bp_core_avatar_thumb_width();
    322319        } else {
    323                 $html_width = ' width="' . bp_core_avatar_full_width() . '"';
     320                $params['width'] = bp_core_avatar_full_width();
    324321        }
     322        $html_width = ' width="' . $params['width'] . '"';
    325323
    326324        // Set image height
    327         if ( false !== $height ) {
    328                 $html_height = ' height="' . $height . '"';
    329         } elseif ( 'thumb' == $type ) {
    330                 $html_height = ' height="' . bp_core_avatar_thumb_height() . '"';
     325        if ( false !== $params['height'] ) {
     326                // Height has been specified. No modification necessary.
     327        } else if ( 'thumb' == $params['type'] ) {
     328                $params['height'] = bp_core_avatar_thumb_height();
    331329        } else {
    332                 $html_height = ' height="' . bp_core_avatar_full_height() . '"';
     330                $params['height'] = bp_core_avatar_full_height();
    333331        }
     332        $html_height = ' height="' . $params['height'] . '"';
     333
     334        // Create CSS class html string
     335        $params['class'] = apply_filters( 'bp_core_avatar_class', $params['class'], $params['item_id'], $params['object'], $params );
     336        $html_class = ' class="' . sanitize_html_class( $params['class'] ) . ' ' . sanitize_html_class( $params['object'] . '-' . $params['item_id'] . '-avatar' ) . ' ' . sanitize_html_class( 'avatar-' . $params['width'] ) . ' photo"';
    334337
    335338        // Set img URL and DIR based on prepopulated constants
    336339        $avatar_loc        = new stdClass();
    337340        $avatar_loc->path  = trailingslashit( bp_core_avatar_upload_path() );
    338341        $avatar_loc->url   = trailingslashit( bp_core_avatar_url() );
    339342
    340         $avatar_loc->dir   = trailingslashit( $avatar_dir );
    341         $avatar_folder_url = apply_filters( 'bp_core_avatar_folder_url', ( $avatar_loc->url  . $avatar_loc->dir . $item_id ), $item_id, $object, $avatar_dir );
    342         $avatar_folder_dir = apply_filters( 'bp_core_avatar_folder_dir', ( $avatar_loc->path . $avatar_loc->dir . $item_id ), $item_id, $object, $avatar_dir );
    343 
    344         // Add an identifying class
    345         $class .= ' ' . $object . '-' . $item_id . '-avatar ' . sanitize_html_class( "avatar-$width" ) . ' photo';
     343        $avatar_loc->dir   = trailingslashit( $params['avatar_dir'] );
     344        $avatar_folder_url = apply_filters( 'bp_core_avatar_folder_url', ( $avatar_loc->url  . $avatar_loc->dir . $params['item_id'] ), $params['item_id'], $params['object'], $params['avatar_dir'] );
     345        $avatar_folder_dir = apply_filters( 'bp_core_avatar_folder_dir', ( $avatar_loc->path . $avatar_loc->dir . $params['item_id'] ), $params['item_id'], $params['object'], $params['avatar_dir'] );
    346346
    347347        /**
    348348         * Look for uploaded avatar first. Use it if it exists.
    349349         * Set the file names to search for, to select the full size
    350350         * or thumbnail image.
    351351         */
    352         $avatar_size              = ( 'full' == $type ) ? '-bpfull' : '-bpthumb';
    353         $legacy_user_avatar_name  = ( 'full' == $type ) ? '-avatar2' : '-avatar1';
    354         $legacy_group_avatar_name = ( 'full' == $type ) ? '-groupavatar-full' : '-groupavatar-thumb';
     352        $avatar_size              = ( 'full' == $params['type'] ) ? '-bpfull' : '-bpthumb';
     353        $legacy_user_avatar_name  = ( 'full' == $params['type'] ) ? '-avatar2' : '-avatar1';
     354        $legacy_group_avatar_name = ( 'full' == $params['type'] ) ? '-groupavatar-full' : '-groupavatar-thumb';
    355355
    356356        // Check for directory
    357357        if ( file_exists( $avatar_folder_dir ) ) {
    function bp_core_fetch_avatar( $args = '' ) { 
    405405                if ( isset( $avatar_url ) ) {
    406406
    407407                        // Return it wrapped in an <img> element
    408                         if ( true === $html ) {
    409                                 return apply_filters( 'bp_core_fetch_avatar', '<img src="' . $avatar_url . '" class="' . esc_attr( $class ) . '"' . $css_id . $html_width . $html_height . $html_alt . $title . ' />', $params, $item_id, $avatar_dir, $css_id, $html_width, $html_height, $avatar_folder_url, $avatar_folder_dir );
     408                        if ( true === $params['html'] ) {
     409                                return apply_filters( 'bp_core_fetch_avatar', '<img src="' . $avatar_url . '"' . $html_class . $html_css_id  . $html_width . $html_height . $html_alt . $html_title . ' />', $params, $params['item_id'], $params['avatar_dir'], $html_css_id, $html_width, $html_height, $avatar_folder_url, $avatar_folder_dir );
    410410
    411411                        // ...or only the URL
    412412                        } else {
    function bp_core_fetch_avatar( $args = '' ) { 
    417417
    418418        // If no avatars could be found, try to display a gravatar
    419419
    420         // Skips gravatar check if $no_grav is passed
    421         if ( ! apply_filters( 'bp_core_fetch_avatar_no_grav', $no_grav ) ) {
    422 
    423                 // Set gravatar size
    424                 if ( false !== $width ) {
    425                         $grav_size = $width;
    426                 } else if ( 'full' == $type ) {
    427                         $grav_size = bp_core_avatar_full_width();
    428                 } else if ( 'thumb' == $type ) {
    429                         $grav_size = bp_core_avatar_thumb_width();
    430                 }
     420        // Skips gravatar check if $params['no_grav'] is passed
     421        if ( ! apply_filters( 'bp_core_fetch_avatar_no_grav', $params['no_grav'], $params ) ) {
    431422
    432423                // Set gravatar type
    433                 if ( empty( $bp->grav_default->{$object} ) ) {
     424                if ( empty( $bp->grav_default->{$params['object']} ) ) {
    434425                        $default_grav = 'wavatar';
    435                 } else if ( 'mystery' == $bp->grav_default->{$object} ) {
    436                         $default_grav = apply_filters( 'bp_core_mysteryman_src', 'mm', $grav_size );
     426                } else if ( 'mystery' == $bp->grav_default->{$params['object']} ) {
     427                        $default_grav = apply_filters( 'bp_core_mysteryman_src', 'mm', $params['width'] );
    437428                } else {
    438                         $default_grav = $bp->grav_default->{$object};
     429                        $default_grav = $bp->grav_default->{$params['object']};
    439430                }
    440431
    441432                // Set gravatar object
    442                 if ( empty( $email ) ) {
    443                         if ( 'user' == $object ) {
    444                                 $email = bp_core_get_user_email( $item_id );
    445                         } else if ( 'group' == $object || 'blog' == $object ) {
    446                                 $email = "{$item_id}-{$object}@{bp_get_root_domain()}";
     433                if ( empty( $params['email'] ) ) {
     434                        if ( 'user' == $params['object'] ) {
     435                                $params['email'] = bp_core_get_user_email( $params['item_id'] );
     436                        } else if ( 'group' == $params['object'] || 'blog' == $params['object'] ) {
     437                                $params['email'] = $params['item_id'] . '-' . $params['object'] . '@' . bp_get_root_domain();
    447438                        }
    448439                }
    449440
    function bp_core_fetch_avatar( $args = '' ) { 
    454445                }
    455446
    456447                // Filter gravatar vars
    457                 $email    = apply_filters( 'bp_core_gravatar_email', $email, $item_id, $object );
    458                 $gravatar = apply_filters( 'bp_gravatar_url', $host ) . md5( strtolower( $email ) ) . '?d=' . $default_grav . '&amp;s=' . $grav_size;
     448                $params['email'] = apply_filters( 'bp_core_gravatar_email', $params['email'], $params['item_id'], $params['object'] );
     449                $gravatar = apply_filters( 'bp_gravatar_url', $host ) . md5( strtolower( $params['email'] ) ) . '?d=' . $default_grav . '&amp;s=' . $params['width'];
    459450
    460451                // Gravatar rating; http://bit.ly/89QxZA
    461452                $rating = get_option( 'avatar_rating' );
    function bp_core_fetch_avatar( $args = '' ) { 
    465456
    466457        // No avatar was found, and we've been told not to use a gravatar.
    467458        } else {
    468                 $gravatar = apply_filters( "bp_core_default_avatar_$object", bp_core_avatar_default( 'local' ), $params );
     459                $gravatar = apply_filters( 'bp_core_default_avatar_' . $params['object'], bp_core_avatar_default( 'local' ), $params );
    469460        }
    470461
    471         if ( true === $html ) {
    472                 return apply_filters( 'bp_core_fetch_avatar', '<img src="' . $gravatar . '" class="' . esc_attr( $class ) . '"' . $css_id . $html_width . $html_height . $html_alt . $title . ' />', $params, $item_id, $avatar_dir, $css_id, $html_width, $html_height, $avatar_folder_url, $avatar_folder_dir );
     462        if ( true === $params['html'] ) {
     463                return apply_filters( 'bp_core_fetch_avatar', '<img src="' . $gravatar . '"' . $html_css_id . $html_class . $html_width . $html_height . $html_alt . $html_title . ' />', $params, $params['item_id'], $params['avatar_dir'], $html_css_id, $html_width, $html_height, $avatar_folder_url, $avatar_folder_dir );
    473464        } else {
    474465                return apply_filters( 'bp_core_fetch_avatar_url', $gravatar, $params );
    475466        }