options = (array) get_option( 'simple_local_avatars' );
$this->avatar_ratings = array(
'G' => __('G — Suitable for all audiences'),
'PG' => __('PG — Possibly offensive, usually for audiences 13 and above'),
'R' => __('R — Intended for adult audiences above 17'),
'X' => __('X — Even more mature than above')
);
// supplement remote avatars, but not if inside "local only" mode
if ( empty( $this->options['only'] ) )
add_filter( 'get_avatar', array( $this, 'get_avatar' ), 10, 5 );
add_action( 'admin_init', array( $this, 'admin_init' ) );
add_action( 'admin_enqueue_scripts', array( $this, 'admin_enqueue_scripts' ) );
add_action( 'show_user_profile', array( $this, 'edit_user_profile' ) );
add_action( 'edit_user_profile', array( $this, 'edit_user_profile' ) );
add_action( 'personal_options_update', array( $this, 'edit_user_profile_update' ) );
add_action( 'edit_user_profile_update', array( $this, 'edit_user_profile_update' ) );
add_action( 'admin_action_remove-simple-local-avatar', array( $this, 'action_remove_simple_local_avatar' ) );
add_action( 'wp_ajax_assign_simple_local_avatar_media', array( $this, 'ajax_assign_simple_local_avatar_media' ) );
add_action( 'wp_ajax_remove_simple_local_avatar', array( $this, 'action_remove_simple_local_avatar' ) );
add_action( 'user_edit_form_tag', array( $this, 'user_edit_form_tag' ) );
add_filter( 'avatar_defaults', array( $this, 'avatar_defaults' ) );
add_action( 'rest_api_init', array( $this, 'register_rest_fields' ) );
}
/**
* Retrieve the local avatar for a user who provided a user ID or email address.
*
* @param string $avatar Avatar return by original function
* @param int|string|object $id_or_email A user ID, email address, or comment object
* @param int $size Size of the avatar image
* @param string $default URL to a default image to use if no avatar is available
* @param string $alt Alternative text to use in image tag. Defaults to blank
* @return string tag for the user's avatar
*/
public function get_avatar( $avatar = '', $id_or_email = '', $size = 96, $default = '', $alt = '' ) {
if ( is_numeric( $id_or_email ) )
$user_id = (int) $id_or_email;
elseif ( is_string( $id_or_email ) && ( $user = get_user_by( 'email', $id_or_email ) ) )
$user_id = $user->ID;
elseif ( is_object( $id_or_email ) && ! empty( $id_or_email->user_id ) )
$user_id = (int) $id_or_email->user_id;
if ( empty( $user_id ) )
return $avatar;
// fetch local avatar from meta and make sure it's properly ste
$local_avatars = get_user_meta( $user_id, 'simple_local_avatar', true );
if ( empty( $local_avatars['full'] ) )
return $avatar;
// check rating
$avatar_rating = get_user_meta( $user_id, 'simple_local_avatar_rating', true );
if ( ! empty( $avatar_rating ) && 'G' != $avatar_rating && ( $site_rating = get_option( 'avatar_rating' ) ) ) {
$ratings = array_keys( $this->avatar_ratings );
$site_rating_weight = array_search( $site_rating, $ratings );
$avatar_rating_weight = array_search( $avatar_rating, $ratings );
if ( false !== $avatar_rating_weight && $avatar_rating_weight > $site_rating_weight )
return $avatar;
}
// handle "real" media
if ( ! empty( $local_avatars['media_id'] ) ) {
// has the media been deleted?
if ( ! $avatar_full_path = get_attached_file( $local_avatars['media_id'] ) ) {
return $avatar;
}
}
$size = (int) $size;
if ( empty( $alt ) )
$alt = get_the_author_meta( 'display_name', $user_id );
// generate a new size
if ( ! array_key_exists( $size, $local_avatars ) ) {
$local_avatars[$size] = $local_avatars['full']; // just in case of failure elsewhere
// allow automatic rescaling to be turned off
if ( $allow_dynamic_resizing = apply_filters( 'simple_local_avatars_dynamic_resize', true ) ) :
$upload_path = wp_upload_dir();
// get path for image by converting URL, unless its already been set, thanks to using media library approach
if ( ! isset( $avatar_full_path ) )
$avatar_full_path = str_replace( $upload_path['baseurl'], $upload_path['basedir'], $local_avatars['full'] );
// generate the new size
$editor = wp_get_image_editor( $avatar_full_path );
if ( ! is_wp_error( $editor ) ) {
$resized = $editor->resize( $size, $size, true );
if ( ! is_wp_error( $resized ) ) {
$dest_file = $editor->generate_filename();
$saved = $editor->save( $dest_file );
if ( ! is_wp_error( $saved ) )
$local_avatars[$size] = str_replace( $upload_path['basedir'], $upload_path['baseurl'], $dest_file );
}
}
// save updated avatar sizes
update_user_meta( $user_id, 'simple_local_avatar', $local_avatars );
endif;
}
if ( 'http' != substr( $local_avatars[$size], 0, 4 ) )
$local_avatars[$size] = home_url( $local_avatars[$size] );
$author_class = is_author( $user_id ) ? ' current-author' : '' ;
$avatar = "
";
return apply_filters( 'simple_local_avatar', $avatar );
}
public function admin_init() {
// upgrade pre 2.0 option
if ( $old_ops = get_option( 'simple_local_avatars_caps' ) ) {
if ( ! empty( $old_ops['simple_local_avatars_caps'] ) )
update_option( 'simple_local_avatars', array( 'caps' => 1 ) );
delete_option( 'simple_local_avatar_caps' );
}
register_setting( 'discussion', 'simple_local_avatars', array( $this, 'sanitize_options' ) );
add_settings_field(
'simple-local-avatars-only',
__('Local Avatars Only','simple-local-avatars'),
array( $this, 'avatar_settings_field' ),
'discussion',
'avatars',
array(
'key' => 'only',
'desc' => __( 'Only allow local avatars (still uses Gravatar for default avatars)', 'simple-local-avatars' )
)
);
add_settings_field(
'simple-local-avatars-caps',
__('Local Upload Permissions','simple-local-avatars'),
array( $this, 'avatar_settings_field' ),
'discussion',
'avatars',
array(
'key' => 'caps',
'desc' => __( 'Only allow users with file upload capabilities to upload local avatars (Authors and above)', 'simple-local-avatars' )
)
);
}
/**
* Add scripts to the profile editing page
*
* @param string $hook_suffix Page hook
*/
public function admin_enqueue_scripts( $hook_suffix ) {
if ( 'profile.php' != $hook_suffix && 'user-edit.php' != $hook_suffix )
return;
if ( current_user_can( 'upload_files' ) )
wp_enqueue_media();
$user_id = ( 'profile.php' == $hook_suffix ) ? get_current_user_id() : (int) $_GET['user_id'];
$this->remove_nonce = wp_create_nonce( 'remove_simple_local_avatar_nonce' );
$script_name_append = ( defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ) ? '.dev' : '';
wp_enqueue_script( 'simple-local-avatars', plugins_url( '', __FILE__ ) . '/simple-local-avatars' . $script_name_append . '.js', array('jquery'), false, true );
wp_localize_script( 'simple-local-avatars', 'i10n_SimpleLocalAvatars', array(
'user_id' => $user_id,
'insertMediaTitle' => __('Choose an Avatar','simple-local-avatars'),
'insertIntoPost' => __('Set as avatar','simple-local-avatars'),
'deleteNonce' => $this->remove_nonce,
'mediaNonce' => wp_create_nonce( 'assign_simple_local_avatar_nonce' ),
) );
}
/**
* Sanitize new settings field before saving
*
* @param array|string $input Passed input values to sanitize
* @return array|string Sanitized input fields
*/
public function sanitize_options( $input ) {
$new_input['caps'] = empty( $input['caps'] ) ? 0 : 1;
$new_input['only'] = empty( $input['only'] ) ? 0 : 1;
return $new_input;
}
/**
* Settings field for avatar upload capabilities
*
* @param array $args Field arguments
*/
public function avatar_settings_field( $args ) {
$args = wp_parse_args( $args, array(
'key' => '',
'desc' => '',
) );
if ( empty( $this->options[$args['key']] ) )
$this->options[$args['key']] = 0;
echo '
';
}
/**
* Output new Avatar fields to user editing / profile screen
*
* @param object $profileuser User object
*/
public function edit_user_profile( $profileuser ) {
?>
ID ); remove_filter( 'pre_option_avatar_rating', '__return_null' ); ?> |
options['caps'] );
if ( $upload_rights ) {
do_action( 'simple_local_avatar_notices' );
wp_nonce_field( 'simple_local_avatar_nonce', '_simple_local_avatar_nonce', false );
$remove_url = add_query_arg(array(
'action' => 'remove-simple-local-avatar',
'user_id' => $profileuser->ID,
'_wpnonce' => $this->remove_nonce,
) );
?>
simple_local_avatar ) ) echo ' style="display:none;"'; ?>> simple_local_avatar ) ) echo ' ' . __('No local avatar is set. Set up your avatar at Gravatar.com.','simple-local-avatars') . ''; else echo '' . __('You do not have media management permissions. To change your local avatar, contact the blog administrator.','simple-local-avatars') . ''; } ?> |
|