PluginProbe
Forumax – AI Powered Advanced Community Forum Plugin / 2.5.0
Forumax – AI Powered Advanced Community Forum Plugin v2.5.0
2.5.0 2.4.4 2.4.3 2.4.2 2.4.1 2.4.0 trunk 1.0.8 1.1.0 1.2.1 1.2.2 1.2.3 1.2.4 1.2.5 1.2.6 1.2.7 1.2.8 1.2.9 1.3.0 1.3.1 1.3.2 1.3.3 1.4.0 1.4.1 2.0.0 All 30 releases
← All changes | includes/features/frmx-profile-avatar.php +10 -64 trunk → 2.5.0 View file →
@@ -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 /**