[buddypress-trac] [BuddyPress Trac] #6789: XProfile: do not store serialized arrays for multi-value profile field data

buddypress-trac noreply at wordpress.org
Thu Jan 7 16:11:38 UTC 2016

#6789: XProfile: do not store serialized arrays for multi-value profile field data
 Reporter:  Offereins             |       Owner:
     Type:  enhancement           |      Status:  new
 Priority:  normal                |   Milestone:  Future Release
Component:  Component - XProfile  |     Version:
 Severity:  normal                |  Resolution:
 Keywords:                        |
Changes (by boonebgorges):

 * milestone:  Awaiting Review => Future Release


 First, <3. It would be great to do away with this kind of serialized data.

 Second, some initial thoughts.

 * The most obvious way to store the data is to split individual entries
 into their own rows in `wp_bp_xprofile_data`.
 * But this will mean that user_id+field_id will no longer be a de facto
 unique identifier for `xprofile_data`. That is, a given user may have more
 than one row in `xprofile_data` corresponding to a given field.
 * Various parts of our query API expect to pull only a single row from the
 table. Eg, `BP_XProfile_ProfileData::populate()`, which does
 `$wpdb->get_row()`. In this case we'll probably need to do `get_results()`
 and then figure out how far up the stack we need to add support for
 arrays. Another example is `BP_XProfile_ProfileData::get_data_for_user()`,
 which keys data by field_id. Here, we'll either need to do the array
 conversion right in the query method (so the data structure can remain the
 same in, eg, `BP_XProfile_Group::get()`, or we'll have to change the way
 data is keyed and then make necessary modifications to consuming methods.
 * In all of these cases, we're going to have to weigh backward
 compatibility against design. Returning arrays from functions that didn't
 previous return arrays is almost certainly going to break something
 * We should do a scan for plugins that interact directly with the
 `xprofile_data` table, especially those that expect serialized data. If we
 find that lots of folks are doing this, we may decide to provide legacy
 support for it. We did something similar with user `last_activity` data
 (you can continue to access/modify the data in usermeta, though BP throws
 a bunch of `_doing_it_wrong()` notices). Ideally, we would simply drop
 support for this kind of direct access; but this will take some good
 documentation and publicity.
 * The migration/update routine is going to be pretty large, and will
 probably need to be broken into chunks. We can do some background
 migration (eg, fire off a cron job during update that migrates data in
 batches), but since this is asynchronous, we'd need to maintain backward
 compatibility for the old data format, at least for a version or two.

 Would love to hear more thoughts on any of the above, or anything I am
 overlooking :)

Ticket URL: <https://buddypress.trac.wordpress.org/ticket/6789#comment:4>
BuddyPress Trac <http://buddypress.org/>
BuddyPress Trac

More information about the buddypress-trac mailing list