]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
OStatus: send favorite/unfavorite notifications to remote authors
authorBrion Vibber <brion@pobox.com>
Sat, 20 Feb 2010 23:56:36 +0000 (15:56 -0800)
committerBrion Vibber <brion@pobox.com>
Sat, 20 Feb 2010 23:56:36 +0000 (15:56 -0800)
classes/Notice.php
plugins/OStatus/OStatusPlugin.php

index a52cfed70c2c8b9ce07a72c5085a29fdad80021a..8b8f90474da5feda8060c9ae69ae6cb575d0d661 100644 (file)
@@ -1104,6 +1104,38 @@ class Notice extends Memcached_DataObject
         return $xs->getString();
     }
 
+    /**
+     * Returns an XML string fragment with a reference to a notice as an
+     * Activity Streams noun object with the given element type.
+     *
+     * Assumes that 'activity' namespace has been previously defined.
+     *
+     * @param string $element one of 'subject', 'object', 'target'
+     * @return string
+     */
+    function asActivityNoun($element)
+    {
+        $xs = new XMLStringer(true);
+
+        $xs->elementStart('activity:' . $element);
+        $xs->element('activity:object-type',
+                     null,
+                     'http://activitystrea.ms/schema/1.0/note');
+        $xs->element('id',
+                     null,
+                     $this->uri);
+        $xs->element('content',
+                     array('type' => 'text/html'),
+                     $this->rendered);
+        $xs->element('link',
+                     array('type' => 'text/html',
+                           'rel'  => 'permalink',
+                           'href' => $this->bestUrl()));
+        $xs->elementEnd('activity:' . $element);
+
+        return $xs->getString();
+    }
+
     function bestUrl()
     {
         if (!empty($this->url)) {
index e78e658a6cf4ef4b364f0fad11b80e8c5e9cb95b..4cbf78e638740d41ecd3ff77516be630d5c4a615 100644 (file)
@@ -357,4 +357,39 @@ class OStatusPlugin extends Plugin
 
         return true;
     }
+
+    /**
+     * Notify remote users when their notices get favorited.
+     *
+     * @param Profile or User $profile of local user doing the faving
+     * @param Notice $notice being favored
+     * @return hook return value
+     */
+    function onEndFavorNotice($profile, Notice $notice)
+    {
+        if ($profile instanceof User) {
+            // @fixme upstream function should clarify its parameters
+            $profile = $profile->getProfile();
+        }
+        $oprofile = Ostatus_profile::staticGet('profile_id', $notice->profile_id);
+        if ($oprofile) {
+            $oprofile->notify($profile, ActivityVerb::FAVORITE, $notice);
+        }
+    }
+
+    /**
+     * Notify remote users when their notices get de-favorited.
+     *
+     * @param Profile or User $profile of local user doing the de-faving
+     * @param Notice $notice being favored
+     * @return hook return value
+     */
+    function onEndDisfavorNotice(Profile $profile, Notice $notice)
+    {
+        $oprofile = Ostatus_profile::staticGet('profile_id', $notice->profile_id);
+        if ($oprofile) {
+            $oprofile->notify($profile, ActivityVerb::UNFAVORITE, $notice);
+        }
+    }
+
 }