X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=plugins%2FOStatus%2FOStatusPlugin.php;h=ef9a39a3772b47e878d3ca5793e40a6d6a04699a;hb=15686cdf56bbb6eb39f80422579c273e8ae5ffad;hp=2dddfcbe2bd0e1f9023d9701ad784375971dfa9f;hpb=42dd460d3b9aa9a8ad147d00de9b6c8e209ab4e9;p=quix0rs-gnu-social.git diff --git a/plugins/OStatus/OStatusPlugin.php b/plugins/OStatus/OStatusPlugin.php index 2dddfcbe2b..ef9a39a377 100644 --- a/plugins/OStatus/OStatusPlugin.php +++ b/plugins/OStatus/OStatusPlugin.php @@ -22,7 +22,9 @@ * @maintainer Brion Vibber */ -if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); } +if (!defined('STATUSNET')) { + exit(1); +} set_include_path(get_include_path() . PATH_SEPARATOR . dirname(__FILE__) . '/extlib/'); @@ -50,10 +52,6 @@ class OStatusPlugin extends Plugin function onRouterInitialized($m) { // Discovery actions - $m->connect('.well-known/host-meta', - array('action' => 'hostmeta')); - $m->connect('main/xrd', - array('action' => 'userxrd')); $m->connect('main/ownerxrd', array('action' => 'ownerxrd')); $m->connect('main/ostatus', @@ -147,12 +145,10 @@ class OStatusPlugin extends Plugin $user = $feed->getUser(); $id = $user->id; $profile = $user->getProfile(); - $feed->setActivitySubject($profile->asActivityNoun('subject')); } else if ($feed instanceof AtomGroupNoticeFeed) { $salmonAction = 'groupsalmon'; $group = $feed->getGroup(); $id = $group->id; - $feed->setActivitySubject($group->asActivitySubject()); } else { return true; } @@ -423,12 +419,12 @@ class OStatusPlugin extends Plugin } function onEndShowStatusNetStyles($action) { - $action->cssLink('plugins/OStatus/theme/base/css/ostatus.css'); + $action->cssLink($this->path('theme/base/css/ostatus.css')); return true; } function onEndShowStatusNetScripts($action) { - $action->script('plugins/OStatus/js/ostatus.js'); + $action->script($this->path('js/ostatus.js')); return true; } @@ -557,25 +553,10 @@ class OStatusPlugin extends Plugin return true; } - $act = new Activity(); - - $act->verb = ActivityVerb::FOLLOW; - - $act->id = TagURI::mint('follow:%d:%d:%s', - $subscriber->id, - $other->id, - common_date_iso8601(time())); - - $act->time = time(); - $act->title = _m("Follow"); - // 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(_m('%1$s is now following %2$s.'), - $subscriber->getBestName(), - $other->getBestName()); + $sub = Subscription::pkeyGet(array('subscriber' => $subscriber->id, + 'subscribed' => $other->id)); - $act->actor = ActivityObject::fromProfile($subscriber); - $act->object = ActivityObject::fromProfile($other); + $act = $sub->asActivity(); $oprofile->notifyActivity($act, $subscriber); @@ -651,6 +632,9 @@ class OStatusPlugin extends Plugin throw new Exception(_m('Could not set up remote group membership.')); } + // NOTE: we don't use Group_member::asActivity() since that record + // has not yet been created. + $member = Profile::staticGet($user->id); $act = new Activity(); @@ -667,7 +651,7 @@ class OStatusPlugin extends Plugin $act->title = _m("Join"); // 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."), + $act->content = sprintf(_m('%1$s has joined group %2$s.'), $member->getBestName(), $oprofile->getBestName()); @@ -719,7 +703,7 @@ class OStatusPlugin extends Plugin $act->title = _m("Leave"); // 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."), + $act->content = sprintf(_m('%1$s has left group %2$s.'), $member->getBestName(), $oprofile->getBestName()); @@ -748,24 +732,15 @@ class OStatusPlugin extends Plugin return true; } - $act = new Activity(); - - $act->verb = ActivityVerb::FAVORITE; - $act->id = TagURI::mint('favor:%d:%d:%s', - $profile->id, - $notice->id, - common_date_iso8601(time())); + $fav = Fave::pkeyGet(array('user_id' => $user->id, + 'notice_id' => $notice->id)); - $act->time = time(); - $act->title = _m('Favor'); - // 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(_m('%1$s marked notice %2$s as a favorite.'), - $profile->getBestName(), - $notice->uri); + if (empty($fav)) { + // That's weird. + return true; + } - $act->actor = ActivityObject::fromProfile($profile); - $act->object = ActivityObject::fromNotice($notice); + $act = $fav->asActivity(); $oprofile->notifyActivity($act, $profile); @@ -977,7 +952,7 @@ class OStatusPlugin extends Plugin } /** - * Utility function to check if the given URL is a canonical group profile + * Utility function to check if the given URI is a canonical group profile * page, and if so return the ID number. * * @param string $url @@ -985,11 +960,22 @@ class OStatusPlugin extends Plugin */ public static function localGroupFromUrl($url) { - $template = common_local_url('groupbyid', array('id' => '31337')); - $template = preg_quote($template, '/'); - $template = str_replace('31337', '(\d+)', $template); - if (preg_match("/$template/", $url, $matches)) { - return intval($matches[1]); + $group = User_group::staticGet('uri', $url); + if ($group) { + $local = Local_group::staticGet('group_id', $group->id); + if ($local) { + return $group->id; + } + } else { + // To find local groups which haven't had their uri fields filled out... + // If the domain has changed since a subscriber got the URI, it'll + // be broken. + $template = common_local_url('groupbyid', array('id' => '31337')); + $template = preg_quote($template, '/'); + $template = str_replace('31337', '(\d+)', $template); + if (preg_match("/$template/", $url, $matches)) { + return intval($matches[1]); + } } return false; } @@ -1006,17 +992,69 @@ class OStatusPlugin extends Plugin return false; } - function onStartGetProfileFromURI($uri, &$profile) { + function onStartGetProfileFromURI($uri, &$profile) + { + // Don't want to do Web-based discovery on our own server, + // so we check locally first. - // XXX: do discovery here instead (OStatus_profile::ensureProfileURI($uri)) + $user = User::staticGet('uri', $uri); + + if (!empty($user)) { + $profile = $user->getProfile(); + return false; + } - $oprofile = Ostatus_profile::staticGet('uri', $uri); + // Now, check remotely - if (!empty($oprofile) && !$oprofile->isGroup()) { + $oprofile = Ostatus_profile::ensureProfileURI($uri); + + if (!empty($oprofile)) { $profile = $oprofile->localProfile(); return false; } + // Still not a hit, so give up. + return true; } + + function onEndXrdActionLinks(&$xrd, $user) + { + $xrd->links[] = array('rel' => Discovery::UPDATESFROM, + 'href' => common_local_url('ApiTimelineUser', + array('id' => $user->id, + 'format' => 'atom')), + 'type' => 'application/atom+xml'); + + // Salmon + $salmon_url = common_local_url('usersalmon', + array('id' => $user->id)); + + $xrd->links[] = array('rel' => Salmon::REL_SALMON, + 'href' => $salmon_url); + // XXX : Deprecated - to be removed. + $xrd->links[] = array('rel' => Salmon::NS_REPLIES, + 'href' => $salmon_url); + + $xrd->links[] = array('rel' => Salmon::NS_MENTIONS, + 'href' => $salmon_url); + + // Get this user's keypair + $magickey = Magicsig::staticGet('user_id', $user->id); + if (!$magickey) { + // No keypair yet, let's generate one. + $magickey = new Magicsig(); + $magickey->generate($user->id); + } + + $xrd->links[] = array('rel' => Magicsig::PUBLICKEYREL, + 'href' => 'data:application/magic-public-key,'. $magickey->toString(false)); + + // TODO - finalize where the redirect should go on the publisher + $url = common_local_url('ostatussub') . '?profile={uri}'; + $xrd->links[] = array('rel' => 'http://ostatus.org/schema/1.0/subscribe', + 'template' => $url ); + + return true; + } }