[buddypress-trac] [BuddyPress] #4636: Reinstate activity item for user profile changes

buddypress-trac noreply at wordpress.org
Mon May 13 11:42:34 UTC 2013


#4636: Reinstate activity item for user profile changes
--------------------------+------------------
 Reporter:  DJPaul        |       Owner:
     Type:  defect (bug)  |      Status:  new
 Priority:  normal        |   Milestone:  1.8
Component:  XProfile      |     Version:  1.1
 Severity:  normal        |  Resolution:
 Keywords:  needs-patch   |
--------------------------+------------------

Comment (by boonebgorges):

 Thanks for the patch, ericlewis.

 In general, I'm a big fan of returning `WP_Error` objects rather than a
 dummy `false` value. It's possible (however unlikely) that changing the
 return value of these functions will break something else, though. For
 example, if someone runs a check like this:

 `$success = xprofile_set_field_data( $foo, $bar, $baz );
 if ( false === $success ) { // or even ! $success
    echo 'oh noez';
 }`

 It's fairly unlikely that we're doing anything like this in BuddyPress,
 but could you please grep through the codebase to be sure? It's almost
 certain that we'll cause problems with at least some plugins, but IMO it's
 worth it in this case, because the `WP_Error` objects are just so much
 better (though I'd like to hear another dev chime in with an opinion on
 that).

 I'm particularly concerned about your 'same_value' return value. This is a
 case where the function currently returns *true*. Check this out:
 https://buddypress.trac.wordpress.org/browser/trunk/bp-xprofile/bp-
 xprofile-classes.php?annotate=blame#L1033 When the value exists, it'll hit
 the first `if` case (`UPDATE...`). Even when the $value is the same as
 previously, the $last_updated value is *different*, so the UPDATE query
 returns 1 rather than 0. (Side note: in what is, I believe, a bug
 introduced in r5643 #4930, the function returns true *even if the
 last_updated value is the same*. It seems like a bug to me because in this
 case no "update" has taken place, but then again `update_metadata()` also
 appears to return true in similar cases, so maybe I have the wrong
 intuition here.)

 I know you need this functionality to make your activity logic work. So,
 suggestions welcome. One is to do something like this inside of
 xprofile_set_field_data():

 {{{
 // Before doing anything, get the existing value
 $prev_value = xprofile_get_field_data( $field, $user_id );

 // ... do all of the update logic, then at the end of the function

 $updated = $field->save();
 do_action( 'xprofile_set_field_data', $updated, $field, $user_id, $value,
 $is_required, $prev_value );
 return $updated;
 }}}

 Then you can hook your activity logic to the `'xprofile_set_field_data'`,
 and check $value against $prev_value. This maintains backward
 compatibility for all current return values. (It also makes your
 `WP_Error` improvements irrelevant for the current task, though I like
 them independently.) Other ideas are welcome.

 A general note on your use of `bp_activity_add()`. We definitely want to
 keep this out of the database class. Use a hook, and if you don't have the
 hook that you need in the place that you need it, create a new hook (like
 I did in my suggestion above).

 Thanks for your work on this!

-- 
Ticket URL: <https://buddypress.trac.wordpress.org/ticket/4636#comment:7>
BuddyPress <http://buddypress.org/>
BuddyPress


More information about the buddypress-trac mailing list