[buddypress-trac] [BuddyPress Trac] #6645: `BP_Activity_Activity::get()` args should be translated into `BP_Activity_Query`

buddypress-trac noreply at wordpress.org
Wed Oct 7 01:33:29 UTC 2015


#6645: `BP_Activity_Activity::get()` args should be translated into
`BP_Activity_Query`
----------------------------------+-----------------------------
 Reporter:  boonebgorges          |       Owner:
     Type:  enhancement           |      Status:  new
 Priority:  normal                |   Milestone:  Future Release
Component:  Component - Activity  |     Version:
 Severity:  normal                |  Resolution:
 Keywords:  has-patch             |
----------------------------------+-----------------------------

Comment (by boonebgorges):

 > I might be overlooking what you are proposing so if I am
 misunderstanding something, please let me know!

 No, this is totally right. I thought about the SQL filter, but I don't
 really care much about that. (If you are filtering a SQL statement, and
 doing it in a way that isn't resilient, then you shouldn't be filtering a
 SQL statement.)

 The complexity issue is more pertinent. Even something simple like
 `hide_sitewide=false` becomes

 {{{
 array(
     'column' => 'hide_sitewide',
     'value' => 1,
 )
 }}}

 I definitely think your patch is an improvement, though it still requires
 filtering `where_conditions` to drop the 'scope' clause if you want
 `filter_array` to work in an unfettered way. I guess I'd argue that, while
 it may be overkill to convert *all* params to `BP_Activity_Query` clauses,
 it might make sense to do it in the case of the 'scope' clause. (Plus,
 it's already happening internally, we're just not exposing it - we return
 the SQL fragment.)

 > Before it even gets to this stage, I think arguments should be filtered
 through 'bp_after_has_activities_parse_args' to remove the complexity of
 the query args.

 Yes, absolutely.

 And actually, here's something I just thought of, which would make the
 `bp_parse_args()` filter and the scope/filter_array separation even more
 useful. What if `scope` were translated into a `filter_query` somewhere
 further up the stack - say, in `bp_activity_get()` or
 `bp_has_activities()`? This way, the `bp_parse_args()` filter in
 `BP_Activity_Activity::get()` would, in most cases, receive a more robust
 and explicit set of arguments, making it easier for devs to figure out
 what needs to be changed if they want to tweak the logic. (We'd continue
 to accept 'scope' in `BP_Activity_Activity::get()`, but we'd never pass
 the param down that far in core.)

 I guess this is all coming from a strong dislike for 'scope'. It's a black
 box that hides a lot of complexity and assumptions. Unraveling them
 systematically so that they can be modified in a filter often means
 reverse-engineering what the various values of 'scope' are intended to do.
 'user_id', 'item_id', 'hide_sitewide', and even 'filter_query' can easily
 be parsed programatically. 'scope' is opaque, and depends on context. I'd
 be happy if it were never passed to a low-level function or filter.

 I won't beat the drum for much longer :) If @r-a-y and others think it's a
 good idea not to touch the flow of 'scope', that's OK with me. But I will
 say this: every time I have to deal with it in a plugin, I am confused.
 And if I'm getting confused, there's not much hope for most people trying
 to modify activity queries in a systematic way.

 @r-a-y - I'm happy to defer to your wisdom here.

--
Ticket URL: <https://buddypress.trac.wordpress.org/ticket/6645#comment:2>
BuddyPress Trac <http://buddypress.org/>
BuddyPress Trac


More information about the buddypress-trac mailing list