| @@ -26,15 +26,8 @@ | ||
| 26 | 26 | */ |
| 27 | 27 | const META_KEY = 'frmx_profile_avatar'; |
| 28 | 28 | |
| 29 | 29 | /** |
| 30 | - * Attachment meta marking an image as a user's uploaded avatar (value: user ID). | |
| 31 | - * | |
| 32 | - * @var string | |
| 33 | - */ | |
| 34 | - const OWNER_META_KEY = '_frmx_avatar_owner'; | |
| 35 | - | |
| 36 | - /** | |
| 37 | 30 | * Register all hooks. |
| 38 | 31 | */ |
| 39 | 32 | public function __construct() { |
| 40 | 33 | // Render the avatar upload field before the Name fieldset. |
| @@ -100,9 +93,10 @@ | ||
| 100 | 93 | $has_avatar = ! empty( $avatar_url ); |
| 101 | 94 | |
| 102 | 95 | // Fall-back to Gravatar when no custom avatar is set. |
| 103 | 96 | if ( ! $has_avatar ) { |
| 104 | - $avatar_url = get_avatar_url( $user_id, array( 'size' => 150 ) ); | |
| 97 | + $user = get_userdata( $user_id ); | |
| 98 | + $avatar_url = get_avatar_url( $user->user_email, array( 'size' => 150 ) ); | |
| 105 | 99 | } |
| 106 | 100 | ?> |
| 107 | 101 | <fieldset class="bbp-form frmx-avatar-fieldset"> |
| 108 | 102 | <legend><?php esc_html_e( 'Profile Photo', 'forumax' ); ?></legend> |
| @@ -202,12 +196,13 @@ | ||
| 202 | 196 | if ( is_wp_error( $attachment_id ) ) { |
| 203 | 197 | wp_send_json_error( array( 'message' => $attachment_id->get_error_message() ) ); |
| 204 | 198 | } |
| 205 | 199 | |
| 206 | - update_post_meta( $attachment_id, self::OWNER_META_KEY, $user_id ); | |
| 207 | - | |
| 208 | 200 | // Delete the old avatar attachment if exists. |
| 209 | - $this->delete_avatar_file( $user_id, (int) get_user_meta( $user_id, self::META_KEY, true ) ); | |
| 201 | + $old_avatar_id = (int) get_user_meta( $user_id, self::META_KEY, true ); | |
| 202 | + if ( $old_avatar_id ) { | |
| 203 | + wp_delete_attachment( $old_avatar_id, true ); | |
| 204 | + } | |
| 210 | 205 | |
| 211 | 206 | // Save the new avatar. |
| 212 | 207 | update_user_meta( $user_id, self::META_KEY, $attachment_id ); |
| 213 | 208 | |
| @@ -244,14 +239,15 @@ | ||
| 244 | 239 | |
| 245 | 240 | $avatar_id = (int) get_user_meta( $user_id, self::META_KEY, true ); |
| 246 | 241 | |
| 247 | 242 | if ( $avatar_id ) { |
| 248 | - $this->delete_avatar_file( $user_id, $avatar_id ); | |
| 243 | + wp_delete_attachment( $avatar_id, true ); | |
| 249 | 244 | delete_user_meta( $user_id, self::META_KEY ); |
| 250 | 245 | } |
| 251 | 246 | |
| 252 | 247 | // Return the default Gravatar URL. |
| 253 | - $default_gravatar = get_avatar_url( $user_id, array( 'size' => 150 ) ); | |
| 248 | + $user = get_userdata( $user_id ); | |
| 249 | + $default_gravatar = get_avatar_url( $user->user_email, array( 'size' => 150 ) ); | |
| 254 | 250 | |
| 255 | 251 | wp_send_json_success( array( |
| 256 | 252 | 'avatar_url' => esc_url( $default_gravatar ), |
| 257 | 253 | 'message' => esc_html__( 'Profile photo removed.', 'forumax' ), |
| @@ -276,62 +272,12 @@ | ||
| 276 | 272 | if ( isset( $_POST['frmx_avatar_id'] ) ) { |
| 277 | 273 | $avatar_id = absint( $_POST['frmx_avatar_id'] ); |
| 278 | 274 | |
| 279 | 275 | if ( $avatar_id ) { |
| 280 | - // Only accept an avatar uploaded for this user, not any media ID. | |
| 281 | - if ( $this->is_user_avatar( $user_id, $avatar_id ) ) { | |
| 282 | - update_user_meta( $user_id, self::META_KEY, $avatar_id ); | |
| 283 | - } | |
| 276 | + update_user_meta( $user_id, self::META_KEY, $avatar_id ); | |
| 284 | 277 | } else { |
| 285 | 278 | delete_user_meta( $user_id, self::META_KEY ); |
| 286 | 279 | } |
| 287 | - } | |
| 288 | - } | |
| 289 | - | |
| 290 | - /** | |
| 291 | - * Whether an attachment was uploaded as this user's avatar. | |
| 292 | - * | |
| 293 | - * Older avatars (before the owner meta existed) are accepted when they | |
| 294 | - * are the user's current avatar. | |
| 295 | - * | |
| 296 | - * @param int $user_id User ID. | |
| 297 | - * @param int $attachment_id Attachment ID. | |
| 298 | - * @return bool | |
| 299 | - */ | |
| 300 | - private function is_user_avatar( $user_id, $attachment_id ) { | |
| 301 | - if ( ! $attachment_id || ! wp_attachment_is_image( $attachment_id ) ) { | |
| 302 | - return false; | |
| 303 | - } | |
| 304 | - | |
| 305 | - $owner = get_post_meta( $attachment_id, self::OWNER_META_KEY, true ); | |
| 306 | - if ( '' !== $owner ) { | |
| 307 | - return (int) $owner === (int) $user_id; | |
| 308 | - } | |
| 309 | - | |
| 310 | - return (int) get_user_meta( $user_id, self::META_KEY, true ) === (int) $attachment_id; | |
| 311 | - } | |
| 312 | - | |
| 313 | - /** | |
| 314 | - * Delete a user's previous avatar file, never other media. | |
| 315 | - * | |
| 316 | - * @param int $user_id User ID. | |
| 317 | - * @param int $attachment_id Attachment ID. | |
| 318 | - * @return void | |
| 319 | - */ | |
| 320 | - private function delete_avatar_file( $user_id, $attachment_id ) { | |
| 321 | - if ( ! $attachment_id ) { | |
| 322 | - return; | |
| 323 | - } | |
| 324 | - | |
| 325 | - $owner = get_post_meta( $attachment_id, self::OWNER_META_KEY, true ); | |
| 326 | - | |
| 327 | - // Avatars saved before the owner meta existed: the user uploaded them themselves. | |
| 328 | - if ( '' === $owner ) { | |
| 329 | - $owner = (int) get_post_field( 'post_author', $attachment_id ); | |
| 330 | - } | |
| 331 | - | |
| 332 | - if ( (int) $owner === (int) $user_id ) { | |
| 333 | - wp_delete_attachment( $attachment_id, true ); | |
| 334 | 280 | } |
| 335 | 281 | } |
| 336 | 282 | |
| 337 | 283 | /** |