<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[BuddyPress][7951] trunk: Add 'offset' parameter to bp_has_activities() function stack</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://buddypress.trac.wordpress.org/changeset/7951">7951</a></dd>
<dt>Author</dt> <dd>boonebgorges</dd>
<dt>Date</dt> <dd>2014-02-21 14:49:28 +0000 (Fri, 21 Feb 2014)</dd>
</dl>

<h3>Log Message</h3>
<pre>Add 'offset' parameter to bp_has_activities() function stack

This param allows plugins and themes to filter results to only those activity
items whose IDs are greater than the 'offset' parameter. See eg the "load
new items" integration with the Heartbeat API.

See <a href="http://buddypress.trac.wordpress.org/ticket/5328">#5328</a>

Props imath, boonebgorges</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkbpactivitybpactivityclassesphp">trunk/bp-activity/bp-activity-classes.php</a></li>
<li><a href="#trunkbpactivitybpactivitytemplatephp">trunk/bp-activity/bp-activity-template.php</a></li>
<li><a href="#trunkteststestcasesactivityclassBP_Activity_Activityphp">trunk/tests/testcases/activity/class.BP_Activity_Activity.php</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkbpactivitybpactivityclassesphp"></a>
<div class="modfile"><h4>Modified: trunk/bp-activity/bp-activity-classes.php (7950 => 7951)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/bp-activity/bp-activity-classes.php        2014-02-21 14:35:15 UTC (rev 7950)
+++ trunk/bp-activity/bp-activity-classes.php   2014-02-21 14:49:28 UTC (rev 7951)
</span><span class="lines">@@ -1145,6 +1145,11 @@
</span><span class="cx">                          $filter_sql[] = $sid_sql;
</span><span class="cx">          }
</span><span class="cx"> 
</span><ins>+               if ( ! empty( $filter_array['offset'] ) ) {
+                       $sid_sql = absint( $filter_array['offset'] );
+                       $filter_sql[] = "a.id >= {$sid_sql}";
+               }
+
</ins><span class="cx">           if ( empty( $filter_sql ) )
</span><span class="cx">                  return false;
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkbpactivitybpactivitytemplatephp"></a>
<div class="modfile"><h4>Modified: trunk/bp-activity/bp-activity-template.php (7950 => 7951)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/bp-activity/bp-activity-template.php       2014-02-21 14:35:15 UTC (rev 7950)
+++ trunk/bp-activity/bp-activity-template.php  2014-02-21 14:49:28 UTC (rev 7951)
</span><span class="lines">@@ -454,6 +454,9 @@
</span><span class="cx">  *           column in the database. The meaning of 'secondary_id' differs
</span><span class="cx">  *           between components/types. Accepts a single ID, or an array of
</span><span class="cx">  *           multiple IDs. Defaults to false.
</span><ins>+ *     @type int $offset Return only activity items with an ID greater than or
+ *           equal to this one. Note that providing an offset will disable
+ *           pagination. Default: false.
</ins><span class="cx">  *     @type string|bool $display_comments How to handle activity comments.
</span><span class="cx">  *           Possible values:
</span><span class="cx">  *             - 'threaded' - comments appear in a threaded tree, under their
</span><span class="lines">@@ -543,6 +546,7 @@
</span><span class="cx">          'action'            => false,        // action to filter on e.g. activity_update, new_forum_post, profile_updated
</span><span class="cx">          'primary_id'        => $primary_id,  // object ID to filter on e.g. a group_id or forum_id or blog_id etc.
</span><span class="cx">          'secondary_id'      => false,        // secondary object ID to filter on e.g. a post_id
</span><ins>+               'offset'            => false,        // return only items >= this ID
</ins><span class="cx"> 
</span><span class="cx">          'meta_query'        => false,        // filter on activity meta. See WP_Meta_Query for format
</span><span class="cx"> 
</span><span class="lines">@@ -561,6 +565,11 @@
</span><span class="cx">          $display_comments = false;
</span><span class="cx">  }
</span><span class="cx"> 
</span><ins>+       // Ignore pagination if an offset is passed
+       if ( ! empty( $offset ) ) {
+               $page = 0;
+       }
+
</ins><span class="cx">   if ( empty( $search_terms ) && ! empty( $_REQUEST['s'] ) )
</span><span class="cx">          $search_terms = $_REQUEST['s'];
</span><span class="cx"> 
</span><span class="lines">@@ -632,8 +641,8 @@
</span><span class="cx">  // into bp-custom.php or your theme's functions.php
</span><span class="cx">  if ( isset( $_GET['afilter'] ) && apply_filters( 'bp_activity_enable_afilter_support', false ) )
</span><span class="cx">          $filter = array( 'object' => $_GET['afilter'] );
</span><del>-       else if ( !empty( $user_id ) || !empty( $object ) || !empty( $action ) || !empty( $primary_id ) || !empty( $secondary_id ) )
-               $filter = array( 'user_id' => $user_id, 'object' => $object, 'action' => $action, 'primary_id' => $primary_id, 'secondary_id' => $secondary_id );
</del><ins>+        else if ( ! empty( $user_id ) || ! empty( $object ) || ! empty( $action ) || ! empty( $primary_id ) || ! empty( $secondary_id ) || ! empty( $offset ) )
+               $filter = array( 'user_id' => $user_id, 'object' => $object, 'action' => $action, 'primary_id' => $primary_id, 'secondary_id' => $secondary_id, 'offset' => $offset );
</ins><span class="cx">   else
</span><span class="cx">          $filter = false;
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkteststestcasesactivityclassBP_Activity_Activityphp"></a>
<div class="modfile"><h4>Modified: trunk/tests/testcases/activity/class.BP_Activity_Activity.php (7950 => 7951)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/tests/testcases/activity/class.BP_Activity_Activity.php    2014-02-21 14:35:15 UTC (rev 7950)
+++ trunk/tests/testcases/activity/class.BP_Activity_Activity.php       2014-02-21 14:49:28 UTC (rev 7951)
</span><span class="lines">@@ -257,6 +257,32 @@
</span><span class="cx">  }
</span><span class="cx"> 
</span><span class="cx">  /**
</span><ins>+        * @group get
+        */
+       public function test_get_with_offset() {
+               $now = time();
+               $a1 = $this->factory->activity->create( array(
+                       'content' => 'Life Rules',
+                       'recorded_time' => date( 'Y-m-d H:i:s', $now - 100 ),
+               ) );
+               $a2 = $this->factory->activity->create( array(
+                       'content' => 'Life Drools',
+                       'recorded_time' => date( 'Y-m-d H:i:s', $now - 50 ),
+               ) );
+               $a3 = $this->factory->activity->create( array(
+                       'content' => 'Life Drools',
+                       'recorded_time' => date( 'Y-m-d H:i:s', $now - 10 ),
+               ) );
+
+               $activity = BP_Activity_Activity::get( array(
+                       'filter' => array(
+                               'offset' => $a2,
+                       ),
+               ) );
+               $ids = wp_list_pluck( $activity['activities'], 'id' );
+               $this->assertEquals( array( $a3, $a2 ), $ids );
+       }
+       /**
</ins><span class="cx">    * @group get_id
</span><span class="cx">   */
</span><span class="cx">  public function test_get_id_with_item_id() {
</span></span></pre>
</div>
</div>

</body>
</html>