diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/activity.php | 26 | ||||
-rw-r--r-- | lib/activitycontext.php | 6 | ||||
-rw-r--r-- | lib/atomusernoticefeed.php | 4 | ||||
-rw-r--r-- | lib/language.php | 1 | ||||
-rw-r--r-- | lib/router.php | 14 | ||||
-rw-r--r-- | lib/useractivitystream.php | 151 |
6 files changed, 184 insertions, 18 deletions
diff --git a/lib/activity.php b/lib/activity.php index 09a4daee8..f19f10e34 100644 --- a/lib/activity.php +++ b/lib/activity.php @@ -319,7 +319,7 @@ class Activity return null; } - function asString($namespace=false) + function asString($namespace=false, $author=true) { $xs = new XMLStringer(true); @@ -338,7 +338,7 @@ class Activity $xs->element('id', null, $this->id); $xs->element('title', null, $this->title); - $xs->element('published', null, common_date_iso8601($this->time)); + $xs->element('published', null, self::iso8601Date($this->time)); $xs->element('content', array('type' => 'html'), $this->content); if (!empty($this->summary)) { @@ -353,13 +353,15 @@ class Activity // XXX: add context - $xs->elementStart('author'); - $xs->element('uri', array(), $this->actor->id); - if ($this->actor->title) { - $xs->element('name', array(), $this->actor->title); + if ($author) { + $xs->elementStart('author'); + $xs->element('uri', array(), $this->actor->id); + if ($this->actor->title) { + $xs->element('name', array(), $this->actor->title); + } + $xs->elementEnd('author'); + $xs->raw($this->actor->asString('activity:actor')); } - $xs->elementEnd('author'); - $xs->raw($this->actor->asString('activity:actor')); $xs->element('activity:verb', null, $this->verb); @@ -386,4 +388,12 @@ class Activity { return ActivityUtils::child($element, $tag, $namespace); } + + static function iso8601Date($tm) + { + $dateStr = date('d F Y H:i:s', $tm); + $d = new DateTime($dateStr, new DateTimeZone('UTC')); + $d->setTimezone(new DateTimeZone(common_timezone())); + return $d->format('c'); + } } diff --git a/lib/activitycontext.php b/lib/activitycontext.php index cc02a0195..ff3bc9411 100644 --- a/lib/activitycontext.php +++ b/lib/activitycontext.php @@ -54,8 +54,12 @@ class ActivityContext const MENTIONED = 'mentioned'; const CONVERSATION = 'ostatus:conversation'; - function __construct($element) + function __construct($element = null) { + if (empty($element)) { + return; + } + $replyToEl = ActivityUtils::child($element, self::INREPLYTO, self::THR); if (!empty($replyToEl)) { diff --git a/lib/atomusernoticefeed.php b/lib/atomusernoticefeed.php index 785db4915..34a187017 100644 --- a/lib/atomusernoticefeed.php +++ b/lib/atomusernoticefeed.php @@ -44,7 +44,7 @@ if (!defined('STATUSNET')) */ class AtomUserNoticeFeed extends AtomNoticeFeed { - private $user; + protected $user; /** * Constructor @@ -90,7 +90,7 @@ class AtomUserNoticeFeed extends AtomNoticeFeed array('nickname' => $user->nickname) ) ); - + $self = common_local_url('ApiTimelineUser', array('id' => $user->id, 'format' => 'atom')); diff --git a/lib/language.php b/lib/language.php index 12b56be9a..86896cff9 100644 --- a/lib/language.php +++ b/lib/language.php @@ -322,6 +322,7 @@ function get_all_languages() { 'gl' => array('q' => 0.8, 'lang' => 'gl', 'name' => 'Galician', 'direction' => 'ltr'), 'he' => array('q' => 0.5, 'lang' => 'he', 'name' => 'Hebrew', 'direction' => 'rtl'), 'hsb' => array('q' => 0.8, 'lang' => 'hsb', 'name' => 'Upper Sorbian', 'direction' => 'ltr'), + 'hu' => array('q' => 0.8, 'lang' => 'hu', 'name' => 'Hungarian', 'direction' => 'ltr'), 'ia' => array('q' => 0.8, 'lang' => 'ia', 'name' => 'Interlingua', 'direction' => 'ltr'), 'is' => array('q' => 0.1, 'lang' => 'is', 'name' => 'Icelandic', 'direction' => 'ltr'), 'it' => array('q' => 1, 'lang' => 'it', 'name' => 'Italian', 'direction' => 'ltr'), diff --git a/lib/router.php b/lib/router.php index fb5a3c7c3..00b299373 100644 --- a/lib/router.php +++ b/lib/router.php @@ -488,19 +488,19 @@ class Router // Social graph $m->connect('api/friends/ids/:id.:format', - array('action' => 'apiuserfriends', + array('action' => 'ApiUserFriends', 'ids_only' => true)); $m->connect('api/followers/ids/:id.:format', - array('action' => 'apiuserfollowers', + array('action' => 'ApiUserFollowers', 'ids_only' => true)); $m->connect('api/friends/ids.:format', - array('action' => 'apiuserfriends', + array('action' => 'ApiUserFriends', 'ids_only' => true)); $m->connect('api/followers/ids.:format', - array('action' => 'apiuserfollowers', + array('action' => 'ApiUserFollowers', 'ids_only' => true)); // account @@ -672,13 +672,13 @@ class Router $m->connect('api/trends.json', array('action' => 'ApiTrends')); $m->connect('api/oauth/request_token', - array('action' => 'apioauthrequesttoken')); + array('action' => 'ApiOauthRequestToken')); $m->connect('api/oauth/access_token', - array('action' => 'apioauthaccesstoken')); + array('action' => 'ApiOauthAccessToken')); $m->connect('api/oauth/authorize', - array('action' => 'apioauthauthorize')); + array('action' => 'ApiOauthAuthorize')); // Admin diff --git a/lib/useractivitystream.php b/lib/useractivitystream.php new file mode 100644 index 000000000..0fc315e26 --- /dev/null +++ b/lib/useractivitystream.php @@ -0,0 +1,151 @@ +<?php +/* + * StatusNet - the distributed open-source microblogging tool + * Copyright (C) 2010 StatusNet, Inc. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +/** + * Class for activity streams + * + * Includes faves, notices, and subscriptions. + * + * We extend atomusernoticefeed since it does some nice setup for us. + * + */ + +class UserActivityStream extends AtomUserNoticeFeed +{ + function __construct($user, $indent = true) + { + parent::__construct($user, null, $indent); + + $subscriptions = $this->getSubscriptions(); + $subscribers = $this->getSubscribers(); + $groups = $this->getGroups(); + $faves = $this->getFaves(); + $notices = $this->getNotices(); + + $objs = array_merge($subscriptions, $subscribers, $groups, $faves, $notices); + + // Sort by create date + + usort($objs, 'UserActivityStream::compareObject'); + + foreach ($objs as $obj) { + $act = $obj->asActivity(); + // Only show the author sub-element if it's different from default user + $str = $act->asString(false, ($act->actor->id != $this->user->uri)); + $this->addEntryRaw($str); + } + } + + function compareObject($a, $b) + { + $ac = strtotime((empty($a->created)) ? $a->modified : $a->created); + $bc = strtotime((empty($b->created)) ? $b->modified : $b->created); + + return (($ac == $bc) ? 0 : (($ac < $bc) ? 1 : -1)); + } + + function getSubscriptions() + { + $subs = array(); + + $sub = new Subscription(); + + $sub->subscriber = $this->user->id; + + if ($sub->find()) { + while ($sub->fetch()) { + if ($sub->subscribed != $this->user->id) { + $subs[] = clone($sub); + } + } + } + + return $subs; + } + + function getSubscribers() + { + $subs = array(); + + $sub = new Subscription(); + + $sub->subscribed = $this->user->id; + + if ($sub->find()) { + while ($sub->fetch()) { + if ($sub->subscriber != $this->user->id) { + $subs[] = clone($sub); + } + } + } + + return $subs; + } + + function getFaves() + { + $faves = array(); + + $fave = new Fave(); + + $fave->user_id = $this->user->id; + + if ($fave->find()) { + while ($fave->fetch()) { + $faves[] = clone($fave); + } + } + + return $faves; + } + + function getNotices() + { + $notices = array(); + + $notice = new Notice(); + + $notice->profile_id = $this->user->id; + + if ($notice->find()) { + while ($notice->fetch()) { + $notices[] = clone($notice); + } + } + + return $notices; + } + + function getGroups() + { + $groups = array(); + + $gm = new Group_member(); + + $gm->profile_id = $this->user->id; + + if ($gm->find()) { + while ($gm->fetch()) { + $groups[] = clone($gm); + } + } + + return $groups; + } +} |