Changeset 9125
- Timestamp:
- 11/05/2014 03:22:56 PM (10 years ago)
- Location:
- trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/bp-core/bp-core-avatars.php
r9124 r9125 175 175 */ 176 176 function bp_core_fetch_avatar( $args = '' ) { 177 $bp = buddypress(); 177 178 178 179 // 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 ) { 180 181 return; 182 } 181 183 182 184 global $current_blog; … … 198 200 'title' => '', 199 201 ) ); 200 extract( $params, EXTR_SKIP );201 202 202 203 /** Set item_id ***********************************************************/ 203 204 204 if ( empty( $ item_id) ) {205 206 switch ( $ object) {205 if ( empty( $params['item_id'] ) ) { 206 207 switch ( $params['object'] ) { 207 208 208 209 case 'blog' : 209 $ item_id= $current_blog->id;210 $params['item_id'] = $current_blog->id; 210 211 break; 211 212 212 213 case 'group' : 213 214 if ( bp_is_active( 'groups' ) ) { 214 $ item_id= $bp->groups->current_group->id;215 $params['item_id'] = $bp->groups->current_group->id; 215 216 } else { 216 $ item_id= false;217 $params['item_id'] = false; 217 218 } 218 219 … … 221 222 case 'user' : 222 223 default : 223 $ item_id= bp_displayed_user_id();224 $params['item_id'] = bp_displayed_user_id(); 224 225 break; 225 226 } 226 227 227 $ item_id = apply_filters( 'bp_core_avatar_item_id', $item_id, $object, $params );228 229 if ( empty( $ item_id) ) {228 $params['item_id'] = apply_filters( 'bp_core_avatar_item_id', $params['item_id'], $params['object'], $params ); 229 230 if ( empty( $params['item_id'] ) ) { 230 231 return false; 231 232 } 232 233 } 233 234 234 $class = apply_filters( 'bp_core_avatar_class', $class, $item_id, $object, $params );235 236 235 /** Set avatar_dir ********************************************************/ 237 236 238 if ( empty( $ avatar_dir) ) {239 240 switch ( $ object) {237 if ( empty( $params['avatar_dir'] ) ) { 238 239 switch ( $params['object'] ) { 241 240 242 241 case 'blog' : 243 $ avatar_dir= 'blog-avatars';242 $params['avatar_dir'] = 'blog-avatars'; 244 243 break; 245 244 246 245 case 'group' : 247 246 if ( bp_is_active( 'groups' ) ) { 248 $ avatar_dir= 'group-avatars';247 $params['avatar_dir'] = 'group-avatars'; 249 248 } else { 250 $ avatar_dir= false;249 $params['avatar_dir'] = false; 251 250 } 252 251 … … 255 254 case 'user' : 256 255 default : 257 $ avatar_dir= 'avatars';256 $params['avatar_dir'] = 'avatars'; 258 257 break; 259 258 } 260 259 261 $ avatar_dir = apply_filters( 'bp_core_avatar_dir', $avatar_dir, $object, $params );262 263 if ( empty( $ avatar_dir) ) {260 $params['avatar_dir'] = apply_filters( 'bp_core_avatar_dir', $params['avatar_dir'], $params['object'], $params ); 261 262 if ( empty( $params['avatar_dir'] ) ) { 264 263 return false; 265 264 } … … 268 267 /** <img> alt *************************************************************/ 269 268 270 if ( false !== strpos( $ alt, '%s' ) || false !== strpos( $alt, '%1$s' ) ) {271 272 switch ( $ object) {269 if ( false !== strpos( $params['alt'], '%s' ) || false !== strpos( $params['alt'], '%1$s' ) ) { 270 271 switch ( $params['object'] ) { 273 272 274 273 case 'blog' : 275 $item_name = get_blog_option( $ item_id, 'blogname' );274 $item_name = get_blog_option( $params['item_id'], 'blogname' ); 276 275 break; 277 276 278 277 case 'group' : 279 $item_name = bp_get_group_name( groups_get_group( array( 'group_id' => $ item_id) ) );278 $item_name = bp_get_group_name( groups_get_group( array( 'group_id' => $params['item_id'] ) ) ); 280 279 break; 281 280 282 281 case 'user' : 283 282 default : 284 $item_name = bp_core_get_user_displayname( $ item_id);283 $item_name = bp_core_get_user_displayname( $params['item_id'] ); 285 284 break; 286 285 } 287 286 288 $item_name = apply_filters( 'bp_core_avatar_alt', $item_name, $ item_id, $object, $params );289 $ alt = sprintf( $alt, $item_name );287 $item_name = apply_filters( 'bp_core_avatar_alt', $item_name, $params['item_id'], $params['object'], $params ); 288 $params['alt'] = sprintf( $params['alt'], $item_name ); 290 289 } 291 290 292 291 /** Sanity Checks *********************************************************/ 293 292 294 // Get a fallback for the 'alt' parameter 295 if ( empty( $alt ) ) 296 $alt = __( 'Profile Photo', 'buddypress' ); 297 298 $html_alt = ' alt="' . esc_attr( $alt ) . '"'; 299 300 // Set title tag, if it's been provided 301 if ( !empty( $title ) ) { 302 $title = " title='" . esc_attr( apply_filters( 'bp_core_avatar_title', $title, $item_id, $object, $params ) ) . "'"; 303 } 304 305 // Set CSS ID if passed 306 if ( !empty( $css_id ) ) { 307 $css_id = ' id="' . esc_attr( $css_id ) . '"'; 293 // Get a fallback for the 'alt' parameter, create html output 294 if ( empty( $params['alt'] ) ) { 295 $params['alt'] = __( 'Profile Photo', 'buddypress' ); 296 } 297 $html_alt = ' alt="' . esc_attr( $params['alt'] ) . '"'; 298 299 // Filter image title and create html string 300 $html_title = ''; 301 $params['title'] = apply_filters( 'bp_core_avatar_title', $params['title'], $params['item_id'], $params['object'], $params ); 302 303 if ( ! empty( $params['title'] ) ) { 304 $html_title = ' title="' . esc_attr( $params['title'] ) . '"'; 305 } 306 307 // Set CSS ID and create html string 308 $html_css_id = ''; 309 $params['css_id'] = apply_filters( 'bp_core_css_id', $params['css_id'], $params['item_id'], $params['object'], $params ); 310 311 if ( ! empty( $params['css_id'] ) ) { 312 $html_css_id = ' id="' . esc_attr( $params['css_id'] ) . '"'; 308 313 } 309 314 310 315 // Set image width 311 if ( false !== $ width) {312 $html_width = ' width="' . $width . '"';313 } else if ( 'thumb' == $type) {314 $ html_width = ' width="' . bp_core_avatar_thumb_width() . '"';316 if ( false !== $params['width'] ) { 317 // Width has been specified. No modification necessary. 318 } else if ( 'thumb' == $params['type'] ) { 319 $params['width'] = bp_core_avatar_thumb_width(); 315 320 } else { 316 $html_width = ' width="' . bp_core_avatar_full_width() . '"'; 317 } 321 $params['width'] = bp_core_avatar_full_width(); 322 } 323 $html_width = ' width="' . $params['width'] . '"'; 318 324 319 325 // Set image height 320 if ( false !== $ height) {321 $html_height = ' height="' . $height . '"';322 } else if ( 'thumb' == $type) {323 $ html_height = ' height="' . bp_core_avatar_thumb_height() . '"';326 if ( false !== $params['height'] ) { 327 // Height has been specified. No modification necessary. 328 } else if ( 'thumb' == $params['type'] ) { 329 $params['height'] = bp_core_avatar_thumb_height(); 324 330 } else { 325 $html_height = ' height="' . bp_core_avatar_full_height() . '"'; 326 } 331 $params['height'] = bp_core_avatar_full_height(); 332 } 333 $html_height = ' height="' . $params['height'] . '"'; 334 335 // Create CSS class html string 336 $params['class'] = apply_filters( 'bp_core_avatar_class', $params['class'], $params['item_id'], $params['object'], $params ); 337 $html_class = ' class="' . sanitize_html_class( $params['class'] ) . ' ' . sanitize_html_class( $params['object'] . '-' . $params['item_id'] . '-avatar' ) . ' ' . sanitize_html_class( 'avatar-' . $params['width'] ) . ' photo"'; 327 338 328 339 // Set img URL and DIR based on prepopulated constants … … 331 342 $avatar_loc->url = trailingslashit( bp_core_avatar_url() ); 332 343 333 $avatar_loc->dir = trailingslashit( $avatar_dir ); 334 $avatar_folder_url = apply_filters( 'bp_core_avatar_folder_url', ( $avatar_loc->url . $avatar_loc->dir . $item_id ), $item_id, $object, $avatar_dir ); 335 $avatar_folder_dir = apply_filters( 'bp_core_avatar_folder_dir', ( $avatar_loc->path . $avatar_loc->dir . $item_id ), $item_id, $object, $avatar_dir ); 336 337 // Add an identifying class 338 $class .= ' ' . $object . '-' . $item_id . '-avatar ' . sanitize_html_class( "avatar-$width" ) . ' photo'; 344 $avatar_loc->dir = trailingslashit( $params['avatar_dir'] ); 345 $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'] ); 346 $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'] ); 339 347 340 348 /** … … 343 351 * or thumbnail image. 344 352 */ 345 $avatar_size = ( 'full' == $ type) ? '-bpfull' : '-bpthumb';346 $legacy_user_avatar_name = ( 'full' == $ type) ? '-avatar2' : '-avatar1';347 $legacy_group_avatar_name = ( 'full' == $ type) ? '-groupavatar-full' : '-groupavatar-thumb';353 $avatar_size = ( 'full' == $params['type'] ) ? '-bpfull' : '-bpthumb'; 354 $legacy_user_avatar_name = ( 'full' == $params['type'] ) ? '-avatar2' : '-avatar1'; 355 $legacy_group_avatar_name = ( 'full' == $params['type'] ) ? '-groupavatar-full' : '-groupavatar-thumb'; 348 356 349 357 // Check for directory … … 399 407 400 408 // Return it wrapped in an <img> element 401 if ( true === $ html) {402 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 );409 if ( true === $params['html'] ) { 410 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 ); 403 411 404 412 // ...or only the URL … … 411 419 // If no avatars could be found, try to display a gravatar 412 420 413 // Skips gravatar check if $no_grav is passed 414 if ( ! apply_filters( 'bp_core_fetch_avatar_no_grav', $no_grav ) ) { 415 416 // Set gravatar size 417 if ( false !== $width ) { 418 $grav_size = $width; 419 } else if ( 'full' == $type ) { 420 $grav_size = bp_core_avatar_full_width(); 421 } else if ( 'thumb' == $type ) { 422 $grav_size = bp_core_avatar_thumb_width(); 423 } 421 // Skips gravatar check if $params['no_grav'] is passed 422 if ( ! apply_filters( 'bp_core_fetch_avatar_no_grav', $params['no_grav'], $params ) ) { 424 423 425 424 // Set gravatar type 426 if ( empty( $bp->grav_default->{$ object} ) ) {425 if ( empty( $bp->grav_default->{$params['object']} ) ) { 427 426 $default_grav = 'wavatar'; 428 } else if ( 'mystery' == $bp->grav_default->{$ object} ) {429 $default_grav = apply_filters( 'bp_core_mysteryman_src', 'mm', $ grav_size);427 } else if ( 'mystery' == $bp->grav_default->{$params['object']} ) { 428 $default_grav = apply_filters( 'bp_core_mysteryman_src', 'mm', $params['width'] ); 430 429 } else { 431 $default_grav = $bp->grav_default->{$ object};430 $default_grav = $bp->grav_default->{$params['object']}; 432 431 } 433 432 434 433 // Set gravatar object 435 if ( empty( $ email) ) {436 if ( 'user' == $ object) {437 $ email = bp_core_get_user_email( $item_id);438 } else if ( 'group' == $ object || 'blog' == $object) {439 $ email = "{$item_id}-{$object}@{bp_get_root_domain()}";434 if ( empty( $params['email'] ) ) { 435 if ( 'user' == $params['object'] ) { 436 $params['email'] = bp_core_get_user_email( $params['item_id'] ); 437 } else if ( 'group' == $params['object'] || 'blog' == $params['object'] ) { 438 $params['email'] = $params['item_id'] . '-' . $params['object'] . '@' . bp_get_root_domain(); 440 439 } 441 440 } … … 448 447 449 448 // Filter gravatar vars 450 $ email = apply_filters( 'bp_core_gravatar_email', $email, $item_id, $object);451 $gravatar = apply_filters( 'bp_gravatar_url', $host ) . md5( strtolower( $ email ) ) . '?d=' . $default_grav . '&s=' . $grav_size;449 $params['email'] = apply_filters( 'bp_core_gravatar_email', $params['email'], $params['item_id'], $params['object'] ); 450 $gravatar = apply_filters( 'bp_gravatar_url', $host ) . md5( strtolower( $params['email'] ) ) . '?d=' . $default_grav . '&s=' . $params['width']; 452 451 453 452 // Gravatar rating; http://bit.ly/89QxZA … … 459 458 // No avatar was found, and we've been told not to use a gravatar. 460 459 } else { 461 $gravatar = apply_filters( "bp_core_default_avatar_$object", bp_core_avatar_default( 'local' ), $params );462 } 463 464 if ( true === $ html) {465 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 );460 $gravatar = apply_filters( 'bp_core_default_avatar_' . $params['object'], bp_core_avatar_default( 'local' ), $params ); 461 } 462 463 if ( true === $params['html'] ) { 464 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 ); 466 465 } else { 467 466 return apply_filters( 'bp_core_fetch_avatar_url', $gravatar, $params ); -
trunk/tests/phpunit/testcases/core/avatars.php
r8958 r9125 6 6 class BP_Tests_Avatars extends BP_UnitTestCase { 7 7 protected $old_current_user = 0; 8 9 private $params = array(); 8 10 9 11 public function setUp() { … … 111 113 return 'foo'; 112 114 } 115 116 /** 117 * @group bp_core_fetch_avatar 118 */ 119 public function test_bp_core_fetch_avatar_parameter_conservation() { 120 // First, run the check with custom parameters, specifying no gravatar. 121 $this->params = array( 122 'item_id' => 1406, 123 'object' => 'custom_object', 124 'type' => 'full', 125 'avatar_dir' => 'custom-dir', 126 'width' => 48, 127 'height' => 54, 128 'class' => 'custom-class', 129 'css_id' => 'custom-css-id', 130 'alt' => 'custom alt', 131 'email' => 'avatar@avatar.org', 132 'no_grav' => true, 133 'html' => true, 134 'title' => 'custom-title', 135 ); 136 137 // Check to make sure the custom parameters survived the function all the way up to output 138 add_filter( 'bp_core_fetch_avatar', array( $this, 'bp_core_fetch_avatar_filter_check' ), 12, 2 ); 139 $avatar = bp_core_fetch_avatar( $this->params ); 140 141 // Re-run check, allowing gravatars. 142 $this->params['no_grav'] = false; 143 $avatar = bp_core_fetch_avatar( $this->params ); 144 145 remove_filter( 'bp_core_fetch_avatar', array( $this, 'bp_core_fetch_avatar_filter_check' ), 12, 2 ); 146 147 unset( $this->params ); 148 } 149 150 public function bp_core_fetch_avatar_filter_check( $html, $params ) { 151 // Check that the passed parameters match the original custom parameters. 152 $this->assertEmpty( array_merge( array_diff( $params, $this->params ), array_diff( $this->params, $params ) ) ); 153 154 // Check the returned html to see that it matches an expected value. 155 // Get the correct default avatar, based on whether gravatars are allowed. 156 if ( $params['no_grav'] ) { 157 $avatar_url = bp_core_avatar_default( 'local' ); 158 } else { 159 // This test has the slight odor of hokum since it recreates so much code that could be changed at any time. 160 $bp = buddypress(); 161 // Set host based on if using ssl 162 $host = 'http://gravatar.com/avatar/'; 163 if ( is_ssl() ) { 164 $host = 'https://secure.gravatar.com/avatar/'; 165 } 166 // Set expected gravatar type 167 if ( empty( $bp->grav_default->{$this->params['object']} ) ) { 168 $default_grav = 'wavatar'; 169 } else if ( 'mystery' == $bp->grav_default->{$this->params['object']} ) { 170 $default_grav = apply_filters( 'bp_core_mysteryman_src', 'mm', $this->params['width'] ); 171 } else { 172 $default_grav = $bp->grav_default->{$this->params['object']}; 173 } 174 175 $avatar_url = $host . md5( strtolower( $this->params['email'] ) ) . '?d=' . $default_grav . '&s=' . $this->params['width']; 176 177 // Gravatar rating; http://bit.ly/89QxZA 178 $rating = get_option( 'avatar_rating' ); 179 if ( ! empty( $rating ) ) { 180 $avatar_url .= "&r={$rating}"; 181 } 182 } 183 184 $expected_html = '<img src="' . $avatar_url . '" id="' . $this->params['css_id'] . '" class="' . $this->params['class'] . ' ' . $this->params['object'] . '-' . $this->params['item_id'] . '-avatar avatar-' . $this->params['width'] . ' photo" width="' . $this->params['width'] . '" height="' . $this->params['height'] . '" alt="' . $this->params['alt'] . '" title="' . $this->params['title'] . '" />'; 185 186 $this->assertEquals( $html, $expected_html ); 187 } 113 188 }
Note: See TracChangeset
for help on using the changeset viewer.