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' ); |
| 174 | 174 | * @return string Formatted HTML <img> element, or raw avatar URL based on $html arg. |
| 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; |
| 181 | 182 | |
| 182 | 183 | global $current_blog; |
| 183 | 184 | |
| 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. |
| 192 | 186 | $params = wp_parse_args( $args, array( |
| 193 | 187 | '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 |
| 196 | 190 | 'avatar_dir' => false, // Specify a custom avatar directory for your object |
| 197 | 191 | 'width' => false, // Custom width (int) |
| 198 | 192 | 'height' => false, // Custom height (int) |
| 199 | | 'class' => $def_class, // Custom <img> class (string) |
| | 193 | 'class' => 'avatar', // Custom <img> class (string) |
| 200 | 194 | 'css_id' => false, // Custom <img> ID (string) |
| 201 | 195 | 'alt' => '', // Custom <img> alt (string) |
| 202 | 196 | 'email' => false, // Pass the user email (for gravatar) to prevent querying the DB for it |
| … |
… |
function bp_core_fetch_avatar( $args = '' ) { |
| 204 | 198 | 'html' => true, // Wrap the return img URL in <img /> |
| 205 | 199 | 'title' => '' // Custom <img> title (string) |
| 206 | 200 | ) ); |
| 207 | | extract( $params, EXTR_SKIP ); |
| 208 | 201 | |
| 209 | 202 | /** Set item_id ***********************************************************/ |
| 210 | 203 | |
| 211 | | if ( empty( $item_id ) ) { |
| | 204 | if ( empty( $params['item_id'] ) ) { |
| 212 | 205 | |
| 213 | | switch ( $object ) { |
| | 206 | switch ( $params['object'] ) { |
| 214 | 207 | |
| 215 | 208 | case 'blog' : |
| 216 | | $item_id = $current_blog->id; |
| | 209 | $params['item_id'] = $current_blog->id; |
| 217 | 210 | break; |
| 218 | 211 | |
| 219 | 212 | case 'group' : |
| 220 | 213 | if ( bp_is_active( 'groups' ) ) { |
| 221 | | $item_id = $bp->groups->current_group->id; |
| | 214 | $params['item_id'] = $bp->groups->current_group->id; |
| 222 | 215 | } else { |
| 223 | | $item_id = false; |
| | 216 | $params['item_id'] = false; |
| 224 | 217 | } |
| 225 | 218 | |
| 226 | 219 | break; |
| 227 | 220 | |
| 228 | 221 | case 'user' : |
| 229 | 222 | default : |
| 230 | | $item_id = bp_displayed_user_id(); |
| | 223 | $params['item_id'] = bp_displayed_user_id(); |
| 231 | 224 | break; |
| 232 | 225 | } |
| 233 | 226 | |
| 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 ); |
| 235 | 228 | |
| 236 | | if ( empty( $item_id ) ) { |
| | 229 | if ( empty( $params['item_id'] ) ) { |
| 237 | 230 | return false; |
| 238 | 231 | } |
| 239 | 232 | } |
| 240 | 233 | |
| 241 | | $class = apply_filters( 'bp_core_avatar_class', $class, $item_id, $object, $params ); |
| 242 | | |
| 243 | 234 | /** Set avatar_dir ********************************************************/ |
| 244 | 235 | |
| 245 | | if ( empty( $avatar_dir ) ) { |
| | 236 | if ( empty( $params['avatar_dir'] ) ) { |
| 246 | 237 | |
| 247 | | switch ( $object ) { |
| | 238 | switch ( $params['object'] ) { |
| 248 | 239 | |
| 249 | 240 | case 'blog' : |
| 250 | | $avatar_dir = 'blog-avatars'; |
| | 241 | $params['avatar_dir'] = 'blog-avatars'; |
| 251 | 242 | break; |
| 252 | 243 | |
| 253 | 244 | case 'group' : |
| 254 | 245 | if ( bp_is_active( 'groups' ) ) { |
| 255 | | $avatar_dir = 'group-avatars'; |
| | 246 | $params['avatar_dir'] = 'group-avatars'; |
| 256 | 247 | } else { |
| 257 | | $avatar_dir = false; |
| | 248 | $params['avatar_dir'] = false; |
| 258 | 249 | } |
| 259 | 250 | |
| 260 | 251 | break; |
| 261 | 252 | |
| 262 | 253 | case 'user' : |
| 263 | 254 | default : |
| 264 | | $avatar_dir = 'avatars'; |
| | 255 | $params['avatar_dir'] = 'avatars'; |
| 265 | 256 | break; |
| 266 | 257 | } |
| 267 | 258 | |
| 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 ); |
| 269 | 260 | |
| 270 | | if ( empty( $avatar_dir ) ) { |
| | 261 | if ( empty( $params['avatar_dir'] ) ) { |
| 271 | 262 | return false; |
| 272 | 263 | } |
| 273 | 264 | } |
| 274 | 265 | |
| 275 | 266 | /** <img> alt *************************************************************/ |
| 276 | 267 | |
| 277 | | if ( false !== strpos( $alt, '%s' ) || false !== strpos( $alt, '%1$s' ) ) { |
| | 268 | if ( false !== strpos( $params['alt'], '%s' ) || false !== strpos( $params['alt'], '%1$s' ) ) { |
| 278 | 269 | |
| 279 | | switch ( $object ) { |
| | 270 | switch ( $params['object'] ) { |
| 280 | 271 | |
| 281 | 272 | case 'blog' : |
| 282 | | $item_name = get_blog_option( $item_id, 'blogname' ); |
| | 273 | $item_name = get_blog_option( $params['item_id'], 'blogname' ); |
| 283 | 274 | break; |
| 284 | 275 | |
| 285 | 276 | 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'] ) ) ); |
| 287 | 278 | break; |
| 288 | 279 | |
| 289 | 280 | case 'user' : |
| 290 | 281 | default : |
| 291 | | $item_name = bp_core_get_user_displayname( $item_id ); |
| | 282 | $item_name = bp_core_get_user_displayname( $params['item_id'] ); |
| 292 | 283 | break; |
| 293 | 284 | } |
| 294 | 285 | |
| 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 ); |
| 297 | 288 | } |
| 298 | 289 | |
| 299 | 290 | /** Sanity Checks *********************************************************/ |
| 300 | 291 | |
| 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'] ) . '"'; |
| 304 | 297 | |
| 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 ); |
| 306 | 301 | |
| 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'] ) . '"'; |
| 310 | 304 | } |
| 311 | 305 | |
| 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'] ) . '"'; |
| 315 | 312 | } |
| 316 | 313 | |
| 317 | 314 | // 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(); |
| 322 | 319 | } else { |
| 323 | | $html_width = ' width="' . bp_core_avatar_full_width() . '"'; |
| | 320 | $params['width'] = bp_core_avatar_full_width(); |
| 324 | 321 | } |
| | 322 | $html_width = ' width="' . $params['width'] . '"'; |
| 325 | 323 | |
| 326 | 324 | // 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(); |
| 331 | 329 | } else { |
| 332 | | $html_height = ' height="' . bp_core_avatar_full_height() . '"'; |
| | 330 | $params['height'] = bp_core_avatar_full_height(); |
| 333 | 331 | } |
| | 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"'; |
| 334 | 337 | |
| 335 | 338 | // Set img URL and DIR based on prepopulated constants |
| 336 | 339 | $avatar_loc = new stdClass(); |
| 337 | 340 | $avatar_loc->path = trailingslashit( bp_core_avatar_upload_path() ); |
| 338 | 341 | $avatar_loc->url = trailingslashit( bp_core_avatar_url() ); |
| 339 | 342 | |
| 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'] ); |
| 346 | 346 | |
| 347 | 347 | /** |
| 348 | 348 | * Look for uploaded avatar first. Use it if it exists. |
| 349 | 349 | * Set the file names to search for, to select the full size |
| 350 | 350 | * or thumbnail image. |
| 351 | 351 | */ |
| 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'; |
| 355 | 355 | |
| 356 | 356 | // Check for directory |
| 357 | 357 | if ( file_exists( $avatar_folder_dir ) ) { |
| … |
… |
function bp_core_fetch_avatar( $args = '' ) { |
| 405 | 405 | if ( isset( $avatar_url ) ) { |
| 406 | 406 | |
| 407 | 407 | // 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 ); |
| 410 | 410 | |
| 411 | 411 | // ...or only the URL |
| 412 | 412 | } else { |
| … |
… |
function bp_core_fetch_avatar( $args = '' ) { |
| 417 | 417 | |
| 418 | 418 | // If no avatars could be found, try to display a gravatar |
| 419 | 419 | |
| 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 ) ) { |
| 431 | 422 | |
| 432 | 423 | // Set gravatar type |
| 433 | | if ( empty( $bp->grav_default->{$object} ) ) { |
| | 424 | if ( empty( $bp->grav_default->{$params['object']} ) ) { |
| 434 | 425 | $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'] ); |
| 437 | 428 | } else { |
| 438 | | $default_grav = $bp->grav_default->{$object}; |
| | 429 | $default_grav = $bp->grav_default->{$params['object']}; |
| 439 | 430 | } |
| 440 | 431 | |
| 441 | 432 | // 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(); |
| 447 | 438 | } |
| 448 | 439 | } |
| 449 | 440 | |
| … |
… |
function bp_core_fetch_avatar( $args = '' ) { |
| 454 | 445 | } |
| 455 | 446 | |
| 456 | 447 | // 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 . '&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 . '&s=' . $params['width']; |
| 459 | 450 | |
| 460 | 451 | // Gravatar rating; http://bit.ly/89QxZA |
| 461 | 452 | $rating = get_option( 'avatar_rating' ); |
| … |
… |
function bp_core_fetch_avatar( $args = '' ) { |
| 465 | 456 | |
| 466 | 457 | // No avatar was found, and we've been told not to use a gravatar. |
| 467 | 458 | } 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 ); |
| 469 | 460 | } |
| 470 | 461 | |
| 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 ); |
| 473 | 464 | } else { |
| 474 | 465 | return apply_filters( 'bp_core_fetch_avatar_url', $gravatar, $params ); |
| 475 | 466 | } |