]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
Encode repeats as share activities
authorEvan Prodromou <evan@status.net>
Mon, 18 Jul 2011 21:06:03 +0000 (17:06 -0400)
committerEvan Prodromou <evan@status.net>
Mon, 18 Jul 2011 21:06:03 +0000 (17:06 -0400)
classes/Notice.php
lib/activity.php
lib/activityobject.php

index 650dca051b359727ec00cc64c8f44b07cd280a3e..4ee003c48a533fd799abefcd7529f61f593942bb 100644 (file)
@@ -1473,21 +1473,32 @@ 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);
 
-            // XXX: should this be handled by default processing for object entry?
+            if ($this->repeat_of) {
 
-            $act->time    = strtotime($this->created);
-            $act->link    = $this->bestUrl();
+                $repeated = Notice::staticGet('id', $this->repeat_of);
 
-            $act->content = common_xml_safe_str($this->rendered);
-            $act->id      = $this->uri;
-            $act->title   = common_xml_safe_str($this->content);
+                $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?
 
             // Categories
 
index 83a115d16015088421332aef5bd57f8e850a00ed..a4abaf533aa7c26133321a6b9e4040bbed42932c 100644 (file)
@@ -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;
     }
index 444d098073a04500d8ddff0d5363a31d96e83fc9..228473d5189599b90346c24a1a1f26978cbeb36f 100644 (file)
@@ -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