]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - lib/activityobject.php
Merge branch '1.0.x' of gitorious.org:statusnet/mainline into 1.0.x
[quix0rs-gnu-social.git] / lib / activityobject.php
index 241f99564f214287cfd2bae9480054be916a334b..0343fa664ed374315cf9b3bea12b21e0a7132ce8 100644 (file)
@@ -64,9 +64,11 @@ class ActivityObject
     const BOOKMARK  = 'http://activitystrea.ms/schema/1.0/bookmark';
     const PERSON    = 'http://activitystrea.ms/schema/1.0/person';
     const GROUP     = 'http://activitystrea.ms/schema/1.0/group';
+    const _LIST     = 'http://activitystrea.ms/schema/1.0/list'; // LIST is reserved
     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
 
@@ -92,6 +94,7 @@ class ActivityObject
     public $title;
     public $summary;
     public $content;
+    public $owner;
     public $link;
     public $source;
     public $avatarLinks = array();
@@ -168,6 +171,10 @@ class ActivityObject
                 Activity::MEDIA
             );
         }
+        if ($this->type == self::_LIST) {
+            $owner = ActivityUtils::child($this->element, Activity::AUTHOR, Activity::SPEC);
+            $this->owner = new ActivityObject($owner);
+        }
     }
 
     private function _fromAuthor($element)
@@ -420,17 +427,17 @@ class ActivityObject
     {
         $object = new ActivityObject();
 
-               if (Event::handle('StartActivityObjectFromNotice', array($notice, &$object))) {
+        if (Event::handle('StartActivityObjectFromNotice', array($notice, &$object))) {
 
-                       $object->type    = (empty($notice->object_type)) ? ActivityObject::NOTE : $notice->object_type;
+            $object->type    = (empty($notice->object_type)) ? ActivityObject::NOTE : $notice->object_type;
 
-                       $object->id      = $notice->uri;
-                       $object->title   = $notice->content;
-                       $object->content = $notice->rendered;
-                       $object->link    = $notice->bestUrl();
+            $object->id      = $notice->uri;
+            $object->title   = $notice->content;
+            $object->content = $notice->rendered;
+            $object->link    = $notice->bestUrl();
 
-                       Event::handle('EndActivityObjectFromNotice', array($notice, &$object));
-               }
+            Event::handle('EndActivityObjectFromNotice', array($notice, &$object));
+        }
 
         return $object;
     }
@@ -439,62 +446,61 @@ class ActivityObject
     {
         $object = new ActivityObject();
 
-               if (Event::handle('StartActivityObjectFromProfile', array($profile, &$object))) {
+        if (Event::handle('StartActivityObjectFromProfile', array($profile, &$object))) {
+            $object->type   = ActivityObject::PERSON;
+            $object->id     = $profile->getUri();
+            $object->title  = $profile->getBestName();
+            $object->link   = $profile->profileurl;
 
-                       $object->type   = ActivityObject::PERSON;
-                       $object->id     = $profile->getUri();
-                       $object->title  = $profile->getBestName();
-                       $object->link   = $profile->profileurl;
+            $orig = $profile->getOriginalAvatar();
 
-                       $orig = $profile->getOriginalAvatar();
-
-                       if (!empty($orig)) {
-                               $object->avatarLinks[] = AvatarLink::fromAvatar($orig);
-                       }
+            if (!empty($orig)) {
+                $object->avatarLinks[] = AvatarLink::fromAvatar($orig);
+            }
 
-                       $sizes = array(
+            $sizes = array(
                 AVATAR_PROFILE_SIZE,
                 AVATAR_STREAM_SIZE,
                 AVATAR_MINI_SIZE
             );
 
-                       foreach ($sizes as $size) {
-                               $alink  = null;
-                               $avatar = $profile->getAvatar($size);
-
-                               if (!empty($avatar)) {
-                                       $alink = AvatarLink::fromAvatar($avatar);
-                               } else {
-                                       $alink = new AvatarLink();
-                                       $alink->type   = 'image/png';
-                                       $alink->height = $size;
-                                       $alink->width  = $size;
-                                       $alink->url    = Avatar::defaultImage($size);
-
-                                       if ($size == AVATAR_PROFILE_SIZE) {
-                                               // Hack for Twitter import: we don't have a 96x96 image,
-                                               // but we do have a 73x73 image. For now, fake it with that.
-                                               $avatar = $profile->getAvatar(73);
-                                               if ($avatar) {
-                                                       $alink = AvatarLink::fromAvatar($avatar);
-                                                       $alink->height= $size;
-                                                       $alink->width = $size;
-                                               }
-                                       }
-                               }
-
-                               $object->avatarLinks[] = $alink;
-                       }
-
-                       if (isset($profile->lat) && isset($profile->lon)) {
-                               $object->geopoint = (float)$profile->lat
-                                       . ' ' . (float)$profile->lon;
-                       }
-
-                       $object->poco = PoCo::fromProfile($profile);
-
-                       Event::handle('EndActivityObjectFromProfile', array($profile, &$object));
-               }
+            foreach ($sizes as $size) {
+                $alink  = null;
+                $avatar = $profile->getAvatar($size);
+
+                if (!empty($avatar)) {
+                    $alink = AvatarLink::fromAvatar($avatar);
+                } else {
+                    $alink = new AvatarLink();
+                    $alink->type   = 'image/png';
+                    $alink->height = $size;
+                    $alink->width  = $size;
+                    $alink->url    = Avatar::defaultImage($size);
+
+                    if ($size == AVATAR_PROFILE_SIZE) {
+                        // Hack for Twitter import: we don't have a 96x96 image,
+                        // but we do have a 73x73 image. For now, fake it with that.
+                        $avatar = $profile->getAvatar(73);
+                        if ($avatar) {
+                            $alink = AvatarLink::fromAvatar($avatar);
+                            $alink->height= $size;
+                            $alink->width = $size;
+                        }
+                    }
+                }
+
+                $object->avatarLinks[] = $alink;
+            }
+
+            if (isset($profile->lat) && isset($profile->lon)) {
+                $object->geopoint = (float)$profile->lat
+                    . ' ' . (float)$profile->lon;
+            }
+
+            $object->poco = PoCo::fromProfile($profile);
+
+            Event::handle('EndActivityObjectFromProfile', array($profile, &$object));
+        }
 
         return $object;
     }
@@ -503,35 +509,51 @@ class ActivityObject
     {
         $object = new ActivityObject();
 
-               if (Event::handle('StartActivityObjectFromGroup', array($group, &$object))) {
+        if (Event::handle('StartActivityObjectFromGroup', array($group, &$object))) {
 
-                       $object->type   = ActivityObject::GROUP;
-                       $object->id     = $group->getUri();
-                       $object->title  = $group->getBestName();
-                       $object->link   = $group->getUri();
+            $object->type   = ActivityObject::GROUP;
+            $object->id     = $group->getUri();
+            $object->title  = $group->getBestName();
+            $object->link   = $group->getUri();
 
-                       $object->avatarLinks[] = AvatarLink::fromFilename($group->homepage_logo,
-                                                                                                                         AVATAR_PROFILE_SIZE);
+            $object->avatarLinks[] = AvatarLink::fromFilename($group->homepage_logo,
+                                                              AVATAR_PROFILE_SIZE);
 
-                       $object->avatarLinks[] = AvatarLink::fromFilename($group->stream_logo,
-                                                                                                                         AVATAR_STREAM_SIZE);
+            $object->avatarLinks[] = AvatarLink::fromFilename($group->stream_logo,
+                                                              AVATAR_STREAM_SIZE);
 
-                       $object->avatarLinks[] = AvatarLink::fromFilename($group->mini_logo,
-                                                                                                                         AVATAR_MINI_SIZE);
+            $object->avatarLinks[] = AvatarLink::fromFilename($group->mini_logo,
+                                                              AVATAR_MINI_SIZE);
 
-                       $object->poco = PoCo::fromGroup($group);
+            $object->poco = PoCo::fromGroup($group);
+            Event::handle('EndActivityObjectFromGroup', array($group, &$object));
+        }
 
-                       Event::handle('EndActivityObjectFromGroup', array($group, &$object));
-               }
+        return $object;
+    }
 
+    static function fromPeopletag($ptag)
+    {
+        $object = new ActivityObject();
+        if (Event::handle('StartActivityObjectFromPeopletag', array($ptag, &$object))) {
+            $object->type    = ActivityObject::_LIST;
+
+            $object->id      = $ptag->getUri();
+            $object->title   = $ptag->tag;
+            $object->summary = $ptag->description;
+            $object->link    = $ptag->homeUrl();
+            $object->owner   = Profile::staticGet('id', $ptag->tagger);
+            $object->poco    = PoCo::fromProfile($object->owner);
+            Event::handle('EndActivityObjectFromPeopletag', array($ptag, &$object));
+        }
         return $object;
     }
 
-       function outputTo($xo, $tag='activity:object')
-       {
-               if (!empty($tag)) {
-                       $xo->elementStart($tag);
-               }
+    function outputTo($xo, $tag='activity:object')
+    {
+        if (!empty($tag)) {
+            $xo->elementStart($tag);
+        }
 
         if (Event::handle('StartActivityObjectOutputAtom', array($this, $xo))) {
             $xo->element('activity:object-type', null, $this->type);
@@ -585,6 +607,11 @@ class ActivityObject
                 );
             }
 
+            if(!empty($this->owner)) {
+                $owner = $this->owner->asActivityNoun(self::AUTHOR);
+                $xo->raw($owner);
+            }
+
             if ($this->type == ActivityObject::PERSON
                 || $this->type == ActivityObject::GROUP) {
 
@@ -624,18 +651,18 @@ class ActivityObject
             Event::handle('EndActivityObjectOutputAtom', array($this, $xo));
         }
 
-               if (!empty($tag)) {
-                       $xo->elementEnd($tag);
-               }
+        if (!empty($tag)) {
+            $xo->elementEnd($tag);
+        }
 
         return;
-       }
+    }
 
     function asString($tag='activity:object')
     {
         $xs = new XMLStringer(true);
 
-               $this->outputTo($xs, $tag);
+        $this->outputTo($xs, $tag);
 
         return $xs->getString();
     }
@@ -672,7 +699,7 @@ class ActivityObject
                 // XXX: Not sure what the best avatar is to use for the
                 // author's "image". For now, I'm using the large size.
 
-                $avatarLarge      = null;
+                $imgLink          = null;
                 $avatarMediaLinks = array();
 
                 foreach ($this->avatarLinks as $a) {
@@ -697,7 +724,9 @@ class ActivityObject
                 $object['avatarLinks'] = $avatarMediaLinks; // extension
 
                 // image
-                $object['image']  = $imgLink->asArray();
+                if (!empty($imgLink)) {
+                    $object['image']  = $imgLink->asArray();
+                }
             }
 
             // objectType