]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - plugins/OStatus/OStatusPlugin.php
Merge branch 'apinamespace' into 0.9.x
[quix0rs-gnu-social.git] / plugins / OStatus / OStatusPlugin.php
index d3a92755cc743548ca5b33c60babae5cf194f08d..77bc9872b401827057bc6b5c92fc118ead2b4fb1 100644 (file)
@@ -28,6 +28,15 @@ set_include_path(get_include_path() . PATH_SEPARATOR . dirname(__FILE__) . '/ext
 
 class FeedSubException extends Exception
 {
+    function __construct($msg=null)
+    {
+        $type = get_class($this);
+        if ($msg) {
+            parent::__construct("$type: $msg");
+        } else {
+            parent::__construct($type);
+        }
+    }
 }
 
 class OStatusPlugin extends Plugin
@@ -87,6 +96,8 @@ class OStatusPlugin extends Plugin
 
         // Outgoing from our internal PuSH hub
         $qm->connect('hubconf', 'HubConfQueueHandler');
+        $qm->connect('hubprep', 'HubPrepQueueHandler');
+
         $qm->connect('hubout', 'HubOutQueueHandler');
 
         // Outgoing Salmon replies (when we don't need a return value)
@@ -102,8 +113,10 @@ class OStatusPlugin extends Plugin
      */
     function onStartEnqueueNotice($notice, &$transports)
     {
-        // put our transport first, in case there's any conflict (like OMB)
-        array_unshift($transports, 'ostatus');
+        if ($notice->isLocal()) {
+            // put our transport first, in case there's any conflict (like OMB)
+            array_unshift($transports, 'ostatus');
+        }
         return true;
     }
 
@@ -154,6 +167,9 @@ class OStatusPlugin extends Plugin
 
             // Also, we'll add in the salmon link
             $salmon = common_local_url($salmonAction, array('id' => $id));
+            $feed->addLink($salmon, array('rel' => Salmon::REL_SALMON));
+
+            // XXX: these are deprecated
             $feed->addLink($salmon, array('rel' => Salmon::NS_REPLIES));
             $feed->addLink($salmon, array('rel' => Salmon::NS_MENTIONS));
         }
@@ -231,17 +247,6 @@ class OStatusPlugin extends Plugin
         return true;
     }
 
-    /**
-     * Check if we've got remote replies to send via Salmon.
-     *
-     * @fixme push webfinger lookup & sending to a background queue
-     * @fixme also detect short-form name for remote subscribees where not ambiguous
-     */
-
-    function onEndNoticeSave($notice)
-    {
-    }
-
     /**
      * Find any explicit remote mentions. Accepted forms:
      *   Webfinger: @user@example.com
@@ -257,7 +262,7 @@ class OStatusPlugin extends Plugin
         $matches = array();
 
         // Webfinger matches: @user@example.com
-        if (preg_match_all('!(?:^|\s+)@((?:\w+\.)*\w+@(?:\w+\.)*\w+(?:\w+\-\w+)*\.\w+)!',
+        if (preg_match_all('!(?:^|\s+)@((?:\w+\.)*\w+@(?:\w+\-?\w+\.)*\w+(?:\w+\-\w+)*\.\w+)!',
                        $text,
                        $wmatches,
                        PREG_OFFSET_CAPTURE)) {
@@ -472,6 +477,24 @@ class OStatusPlugin extends Plugin
         }
     }
 
+    /**
+     * Tell the FeedSub infrastructure whether we have any active OStatus
+     * usage for the feed; if not it'll be able to garbage-collect the
+     * feed subscription.
+     *
+     * @param FeedSub $feedsub
+     * @param integer $count in/out
+     * @return mixed hook return code
+     */
+    function onFeedSubSubscriberCount($feedsub, &$count)
+    {
+        $oprofile = Ostatus_profile::staticGet('feeduri', $feedsub->uri);
+        if ($oprofile) {
+            $count += $oprofile->subscriberCount();
+        }
+        return true;
+    }
+
     /**
      * When about to subscribe to a remote user, start a server-to-server
      * PuSH subscription if needed. If we can't establish that, abort.
@@ -541,7 +564,9 @@ class OStatusPlugin extends Plugin
 
         $act->time    = time();
         $act->title   = _("Follow");
-        $act->content = sprintf(_("%s is now following %s."),
+        // TRANS: Success message for subscribe to user attempt through OStatus.
+        // TRANS: %1$s is the subscriber name, %2$s is the subscribed user's name.
+        $act->content = sprintf(_("%1$s is now following %2$s."),
                                $subscriber->getBestName(),
                                $other->getBestName());
 
@@ -589,7 +614,9 @@ class OStatusPlugin extends Plugin
 
         $act->time    = time();
         $act->title   = _("Unfollow");
-        $act->content = sprintf(_("%s stopped following %s."),
+        // TRANS: Success message for unsubscribe from user attempt through OStatus.
+        // TRANS: %1$s is the unsubscriber's name, %2$s is the unsubscribed user's name.
+        $act->content = sprintf(_("%1$s stopped following %2$s."),
                                $profile->getBestName(),
                                $other->getBestName());
 
@@ -634,7 +661,9 @@ class OStatusPlugin extends Plugin
 
             $act->time = time();
             $act->title = _m("Join");
-            $act->content = sprintf(_m("%s has joined group %s."),
+            // TRANS: Success message for subscribe to group attempt through OStatus.
+            // TRANS: %1$s is the member name, %2$s is the subscribed group's name.
+            $act->content = sprintf(_m("%1$s has joined group %2$s."),
                                     $member->getBestName(),
                                     $oprofile->getBestName());
 
@@ -683,7 +712,9 @@ class OStatusPlugin extends Plugin
 
             $act->time = time();
             $act->title = _m("Leave");
-            $act->content = sprintf(_m("%s has left group %s."),
+            // TRANS: Success message for unsubscribe from group attempt through OStatus.
+            // TRANS: %1$s is the member name, %2$s is the unsubscribed group's name.
+            $act->content = sprintf(_m("%1$s has left group %2$s."),
                                     $member->getBestName(),
                                     $oprofile->getBestName());
 
@@ -723,7 +754,9 @@ class OStatusPlugin extends Plugin
 
         $act->time    = time();
         $act->title   = _("Favor");
-        $act->content = sprintf(_("%s marked notice %s as a favorite."),
+        // TRANS: Success message for adding a favorite notice through OStatus.
+        // TRANS: %1$s is the favoring user's name, %2$s is URI to the favored notice.
+        $act->content = sprintf(_("%1$s marked notice %2$s as a favorite."),
                                $profile->getBestName(),
                                $notice->uri);
 
@@ -767,7 +800,9 @@ class OStatusPlugin extends Plugin
                                   common_date_iso8601(time()));
         $act->time    = time();
         $act->title   = _("Disfavor");
-        $act->content = sprintf(_("%s marked notice %s as no longer a favorite."),
+        // TRANS: Success message for remove a favorite notice through OStatus.
+        // TRANS: %1$s is the unfavoring user's name, %2$s is URI to the no longer favored notice.
+        $act->content = sprintf(_("%1$s marked notice %2$s as no longer a favorite."),
                                $profile->getBestName(),
                                $notice->uri);
 
@@ -842,7 +877,7 @@ class OStatusPlugin extends Plugin
                                              'class' => 'entity_subscribe'));
             $action->element('a', array('href' => common_local_url($target),
                                         'class' => 'entity_remote_subscribe')
-                                , _m('Remote'));
+                                , _m('Remote')); // @todo: i18n: Add translator hint for this text.
             $action->elementEnd('p');
             $action->elementEnd('div');
         }
@@ -882,6 +917,8 @@ class OStatusPlugin extends Plugin
                                   common_date_iso8601(time()));
         $act->time    = time();
         $act->title   = _m("Profile update");
+        // TRANS: Ping text for remote profile update through OStatus.
+        // TRANS: %s is user that updated their profile.
         $act->content = sprintf(_m("%s has updated their profile page."),
                                $profile->getBestName());
 
@@ -911,7 +948,7 @@ class OStatusPlugin extends Plugin
                                         array('nickname' => $profileUser->nickname));
                 $output->element('a', array('href' => $url,
                                             'class' => 'entity_remote_subscribe'),
-                                 _m('Subscribe'));
+                                 _m('Subscribe')); // @todo: i18n: Add context.
                 $output->elementEnd('li');
             }
         }
@@ -927,7 +964,7 @@ class OStatusPlugin extends Plugin
                             'homepage' => 'http://status.net/wiki/Plugin:OStatus',
                             'rawdescription' =>
                             _m('Follow people across social networks that implement '.
-                               '<a href="http://ostatus.org/">OStatus</a>.'));
+                               '<a href="http://ostatus.org/">OStatus</a>.')); // @todo i18n: Add translator hint.
 
         return true;
     }
@@ -949,4 +986,30 @@ class OStatusPlugin extends Plugin
         }
         return false;
     }
+
+    public function onStartProfileGetAtomFeed($profile, &$feed)
+    {
+        $oprofile = Ostatus_profile::staticGet('profile_id', $profile->id);
+
+        if (empty($oprofile)) {
+            return true;
+        }
+
+        $feed = $oprofile->feeduri;
+        return false;
+    }
+
+    function onStartGetProfileFromURI($uri, &$profile) {
+
+        // XXX: do discovery here instead (OStatus_profile::ensureProfileURI($uri))
+
+        $oprofile = Ostatus_profile::staticGet('uri', $uri);
+
+        if (!empty($oprofile) && !$oprofile->isGroup()) {
+            $profile = $oprofile->localProfile();
+            return false;
+        }
+
+        return true;
+    }
 }