BP_Attachment_Avatar::crop( array $args = array() )
Crop the avatar.
Description
See also
- BP_Attachment::crop: for the list of parameters
Parameters
- $args
-
(Optional) Array of arguments for the cropping.
Default value: array()
Return
(array) The cropped avatars (full and thumb).
Source
File: bp-core/classes/class-bp-attachment-avatar.php
public function crop( $args = array() ) {
// Bail if the original file is missing.
if ( empty( $args['original_file'] ) ) {
return false;
}
if ( ! bp_attachments_current_user_can( 'edit_avatar', $args ) ) {
return false;
}
if ( 'user' === $args['object'] ) {
$avatar_dir = 'avatars';
} else {
$avatar_dir = sanitize_key( $args['object'] ) . '-avatars';
}
$args['item_id'] = (int) $args['item_id'];
/**
* Original file is a relative path to the image
* eg: /avatars/1/avatar.jpg
*/
$relative_path = sprintf( '/%s/%s/%s', $avatar_dir, $args['item_id'], basename( $args['original_file'] ) );
$absolute_path = $this->upload_path . $relative_path;
// Bail if the avatar is not available.
if ( ! file_exists( $absolute_path ) ) {
return false;
}
if ( empty( $args['item_id'] ) ) {
/** This filter is documented in bp-core/bp-core-avatars.php */
$avatar_folder_dir = apply_filters( 'bp_core_avatar_folder_dir', dirname( $absolute_path ), $args['item_id'], $args['object'], $args['avatar_dir'] );
} else {
/** This filter is documented in bp-core/bp-core-avatars.php */
$avatar_folder_dir = apply_filters( 'bp_core_avatar_folder_dir', $this->upload_path . '/' . $args['avatar_dir'] . '/' . $args['item_id'], $args['item_id'], $args['object'], $args['avatar_dir'] );
}
// Bail if the avatar folder is missing for this item_id.
if ( ! file_exists( $avatar_folder_dir ) ) {
return false;
}
// Delete the existing avatar files for the object.
$existing_avatar = bp_core_fetch_avatar( array(
'object' => $args['object'],
'item_id' => $args['item_id'],
'html' => false,
) );
/**
* Check that the new avatar doesn't have the same name as the
* old one before deleting
*/
if ( ! empty( $existing_avatar ) && $existing_avatar !== $this->url . $relative_path ) {
bp_core_delete_existing_avatar( array( 'object' => $args['object'], 'item_id' => $args['item_id'], 'avatar_path' => $avatar_folder_dir ) );
}
// Make sure we at least have minimal data for cropping.
if ( empty( $args['crop_w'] ) ) {
$args['crop_w'] = bp_core_avatar_full_width();
}
if ( empty( $args['crop_h'] ) ) {
$args['crop_h'] = bp_core_avatar_full_height();
}
// Get the file extension.
$data = @getimagesize( $absolute_path );
$ext = $data['mime'] == 'image/png' ? 'png' : 'jpg';
$args['original_file'] = $absolute_path;
$args['src_abs'] = false;
$avatar_types = array( 'full' => '', 'thumb' => '' );
foreach ( $avatar_types as $key_type => $type ) {
if ( 'thumb' === $key_type ) {
$args['dst_w'] = bp_core_avatar_thumb_width();
$args['dst_h'] = bp_core_avatar_thumb_height();
} else {
$args['dst_w'] = bp_core_avatar_full_width();
$args['dst_h'] = bp_core_avatar_full_height();
}
$filename = wp_unique_filename( $avatar_folder_dir, uniqid() . "-bp{$key_type}.{$ext}" );
$args['dst_file'] = $avatar_folder_dir . '/' . $filename;
$avatar_types[ $key_type ] = parent::crop( $args );
}
// Remove the original.
@unlink( $absolute_path );
// Return the full and thumb cropped avatars.
return $avatar_types;
}
Changelog
| Version | Description |
|---|---|
| BuddyPress 2.3.0 | Introduced. |
Questions?
We're always happy to help with code or other questions you might have! Search our developer docs, contact support, or connect with our sales team.