diff --git a/classes/Notice.php b/classes/Notice.php index 650dca051b..4ee003c48a 100644 --- a/classes/Notice.php +++ b/classes/Notice.php @@ -1473,22 +1473,33 @@ class Notice extends Memcached_DataObject if (Event::handle('StartNoticeAsActivity', array($this, &$act))) { + $act->id = $this->uri; + $act->time = strtotime($this->created); + $act->link = $this->bestUrl(); + $act->content = common_xml_safe_str($this->rendered); + $act->title = common_xml_safe_str($this->content); + $profile = $this->getProfile(); $act->actor = ActivityObject::fromProfile($profile); $act->actor->extra[] = $profile->profileInfo($cur); - $act->verb = ActivityVerb::POST; - $act->objects[] = ActivityObject::fromNotice($this); + + if ($this->repeat_of) { + + $repeated = Notice::staticGet('id', $this->repeat_of); + + $act->verb = ActivityVerb::SHARE; + $act->objects[] = $repeated->asActivity($cur); + + } else { + + $act->verb = ActivityVerb::POST; + $act->objects[] = ActivityObject::fromNotice($this); + + } // XXX: should this be handled by default processing for object entry? - $act->time = strtotime($this->created); - $act->link = $this->bestUrl(); - - $act->content = common_xml_safe_str($this->rendered); - $act->id = $this->uri; - $act->title = common_xml_safe_str($this->content); - // Categories $tags = $this->getTags(); diff --git a/lib/activity.php b/lib/activity.php index 83a115d160..a4abaf533a 100644 --- a/lib/activity.php +++ b/lib/activity.php @@ -431,7 +431,13 @@ class Activity } else { $activity['object'] = array(); foreach($this->objects as $object) { - $activity['object'][] = $object->asArray(); + $oa = $object->asArray(); + if ($object instanceof Activity) { + // throw in a type + // XXX: hackety-hack + $oa['type'] = 'activity'; + } + $activity['object'][] = $oa; } } @@ -495,7 +501,7 @@ class Activity return $xs->getString(); } - function outputTo($xs, $namespace=false, $author=true, $source=false) + function outputTo($xs, $namespace=false, $author=true, $source=false, $tag='entry') { if ($namespace) { $attrs = array('xmlns' => 'http://www.w3.org/2005/Atom', @@ -510,9 +516,13 @@ class Activity $attrs = array(); } - $xs->elementStart('entry', $attrs); + $xs->elementStart($tag, $attrs); - if ($this->verb == ActivityVerb::POST && count($this->objects) == 1) { + if ($tag != 'entry') { + $xs->element('activity:object-type', null, ActivityObject::ACTIVITY); + } + + if ($this->verb == ActivityVerb::POST && count($this->objects) == 1 && $tag == 'entry') { $obj = $this->objects[0]; $obj->outputTo($xs, null); @@ -558,9 +568,13 @@ class Activity $this->actor->outputTo($xs, 'activity:actor'); } - if ($this->verb != ActivityVerb::POST || count($this->objects) != 1) { + if ($this->verb != ActivityVerb::POST || count($this->objects) != 1 || $tag != 'entry') { foreach($this->objects as $object) { - $object->outputTo($xs, 'activity:object'); + if ($object instanceof Activity) { + $object->outputTo($xs, false, true, true, 'activity:object'); + } else { + $object->outputTo($xs, 'activity:object'); + } } } @@ -694,7 +708,7 @@ class Activity $xs->element($tag, $attrs, $content); } - $xs->elementEnd('entry'); + $xs->elementEnd($tag); return; } diff --git a/lib/activityobject.php b/lib/activityobject.php index 444d098073..228473d518 100644 --- a/lib/activityobject.php +++ b/lib/activityobject.php @@ -68,6 +68,7 @@ class ActivityObject const PLACE = 'http://activitystrea.ms/schema/1.0/place'; const COMMENT = 'http://activitystrea.ms/schema/1.0/comment'; // ^^^^^^^^^^ tea! + const ACTIVITY = 'http://activitystrea.ms/schema/1.0/activity'; // Atom elements we snarf