From c08a67094cb848e8bcd8f631aa44adf57a33b7ab Mon Sep 17 00:00:00 2001 From: mac65 Date: Tue, 30 Sep 2008 20:12:33 -0400 Subject: Add support for since_id and before_id to Twitter API. Ticket #540. darcs-hash:20081001001233-e558a-3fcc269985050021ec9b44c052206c731cc4689d.gz --- classes/Notice.php | 28 +++++++++++++++++++++++++++- classes/User.php | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++---- 2 files changed, 77 insertions(+), 5 deletions(-) (limited to 'classes') diff --git a/classes/Notice.php b/classes/Notice.php index 7566136ce..cb153a2e5 100644 --- a/classes/Notice.php +++ b/classes/Notice.php @@ -308,12 +308,38 @@ class Notice extends Memcached_DataObject return $wrapper; } - function publicStream($offset=0, $limit=20) { + function publicStream($offset=0, $limit=20, $since_id=0, $before_id=0) { + $needAnd = FALSE; + $needWhere = TRUE; + $qry = 'SELECT * FROM notice '; if (common_config('public', 'localonly')) { $qry .= ' WHERE is_local = 1 '; + $needWhere = FALSE; + $needAnd = TRUE; + } + + // NOTE: since_id and before_id are extensions to Twitter API + if ($since_id > 0) { + if ($needWhere) + $qry .= ' WHERE '; + if ($needAnd) + $qry .= ' AND '; + $qry .= ' notice.id > ' . $since_id . ' '; + $needAnd = FALSE; + $needWhere = FALSE; + } + + if ($before_id > 0) { + if ($needWhere) + $qry .= ' WHERE '; + if ($needAnd) + $qry .= ' AND '; + $qry .= ' notice.id < ' . $before_id . ' '; + $needAnd = FALSE; + $needWhere = FALSE; } return Notice::getStream($qry, diff --git a/classes/User.php b/classes/User.php index 2d689fd2b..ce7632ec5 100644 --- a/classes/User.php +++ b/classes/User.php @@ -141,6 +141,19 @@ class User extends Memcached_DataObject return true; } + function noticesWithFriendsWindow() { + + + $notice = new Notice(); + + $notice->query('SELECT notice.* ' . + 'FROM notice JOIN subscription on notice.profile_id = subscription.subscribed ' . + 'WHERE subscription.subscriber = ' . $this->id . ' ' . + 'ORDER BY created DESC, notice.id DESC ' . + 'LIMIT 0, ' . WITHFRIENDS_CACHE_WINDOW); + + } + static function register($fields) { # MAGICALLY put fields into current scope @@ -291,23 +304,45 @@ class User extends Memcached_DataObject return $user; } - function getReplies($offset=0, $limit=NOTICES_PER_PAGE) { + function getReplies($offset=0, $limit=NOTICES_PER_PAGE, $since_id=0, $before_id=0) { $qry = 'SELECT notice.* ' . 'FROM notice JOIN reply ON notice.id = reply.notice_id ' . 'WHERE reply.profile_id = %d '; + if ($since_id > 0) { + $qry .= ' AND notice.id > ' . $since_id . ' '; + $needAnd = FALSE; + } + + // NOTE: before_id is an extension to Twitter API + if ($before_id > 0) { + $qry .= ' AND notice.id < ' . $before_id . ' '; + $needAnd = FALSE; + } + return Notice::getStream(sprintf($qry, $this->id), 'user:replies:'.$this->id, $offset, $limit); } - function getNotices($offset=0, $limit=NOTICES_PER_PAGE) { + function getNotices($offset=0, $limit=NOTICES_PER_PAGE, $since_id=0, $before_id=0) { $qry = 'SELECT * ' . 'FROM notice ' . 'WHERE profile_id = %d '; + if ($since_id > 0) { + $qry .= ' AND notice.id > ' . $since_id . ' '; + $needAnd = FALSE; + } + + // NOTE: before_id is an extension to Twitter API + if ($before_id > 0) { + $qry .= ' AND notice.id < ' . $before_id . ' '; + $needAnd = FALSE; + } + return Notice::getStream(sprintf($qry, $this->id), 'user:notices:'.$this->id, $offset, $limit); @@ -324,12 +359,23 @@ class User extends Memcached_DataObject $offset, $limit); } - function noticesWithFriends($offset=0, $limit=NOTICES_PER_PAGE) { + function noticesWithFriends($offset=0, $limit=NOTICES_PER_PAGE, $since_id=0, $before_id=0) { $qry = 'SELECT notice.* ' . 'FROM notice JOIN subscription ON notice.profile_id = subscription.subscribed ' . 'WHERE subscription.subscriber = %d '; - + + if ($since_id > 0) { + $qry .= ' AND notice.id > ' . $since_id . ' '; + $needAnd = FALSE; + } + + // NOTE: before_id is an extension to Twitter API + if ($before_id > 0) { + $qry .= ' AND notice.id < ' . $before_id . ' '; + $needAnd = FALSE; + } + return Notice::getStream(sprintf($qry, $this->id), 'user:notices_with_friends:' . $this->id, $offset, $limit); -- cgit v1.2.3-54-g00ecf