X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=plugins%2FOStatus%2FOStatusPlugin.php;h=26b7ade64dbf2203525f35880aaa4040b55e0025;hb=a74eda4e9ad344ba965c111567bd285266a95e23;hp=b182438dc347a487a7642ce04a946fe69e035cd3;hpb=d9b959fc64e4e36b0957afd33482f480b24868f9;p=quix0rs-gnu-social.git diff --git a/plugins/OStatus/OStatusPlugin.php b/plugins/OStatus/OStatusPlugin.php index b182438dc3..26b7ade64d 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', @@ -113,7 +111,9 @@ class OStatusPlugin extends Plugin */ function onStartEnqueueNotice($notice, &$transports) { - if ($notice->isLocal()) { + // FIXME: we don't do privacy-controlled OStatus updates yet. + // once that happens, finer grain of control here. + if ($notice->isLocal() && $notice->inScope(null)) { // put our transport first, in case there's any conflict (like OMB) array_unshift($transports, 'ostatus'); } @@ -147,12 +147,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; } @@ -223,6 +221,7 @@ class OStatusPlugin extends Plugin array('nickname' => $profile->nickname)); $output->element('a', array('href' => $url, 'class' => 'entity_remote_subscribe'), + // TRANS: Link description for link to subscribe to a remote user. _m('Subscribe')); $output->elementEnd('li'); @@ -231,7 +230,7 @@ class OStatusPlugin extends Plugin return false; } - function onStartGroupSubscribe($output, $group) + function onStartGroupSubscribe($widget, $group) { $cur = common_current_user(); @@ -239,8 +238,9 @@ class OStatusPlugin extends Plugin // Add an OStatus subscribe $url = common_local_url('ostatusinit', array('group' => $group->nickname)); - $output->element('a', array('href' => $url, + $widget->out->element('a', array('href' => $url, 'class' => 'entity_remote_subscribe'), + // TRANS: Link description for link to join a remote group. _m('Join')); } @@ -421,12 +421,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; } @@ -453,6 +453,7 @@ class OStatusPlugin extends Plugin } $url = $notice->url; + // TRANSLATE: %s is a domain. $title = sprintf(_m("Sent from %s via OStatus"), $domain); return false; } @@ -524,6 +525,7 @@ class OStatusPlugin extends Plugin } if (!$oprofile->subscribe()) { + // TRANS: Exception. throw new Exception(_m('Could not set up remote subscription.')); } } @@ -598,10 +600,10 @@ class OStatusPlugin extends Plugin common_date_iso8601(time())); $act->time = time(); - $act->title = _("Unfollow"); + $act->title = _m('Unfollow'); // 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."), + $act->content = sprintf(_m('%1$s stopped following %2$s.'), $profile->getBestName(), $other->getBestName()); @@ -632,6 +634,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(); @@ -648,7 +653,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()); @@ -656,6 +661,7 @@ class OStatusPlugin extends Plugin return true; } else { $oprofile->garbageCollect(); + // TRANS: Exception. throw new Exception(_m("Failed joining remote group.")); } } @@ -671,7 +677,7 @@ class OStatusPlugin extends Plugin * it'll be left with a stray membership record. * * @param User_group $group - * @param User $user + * @param Profile $user * * @return mixed hook return value */ @@ -699,7 +705,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()); @@ -714,7 +720,6 @@ class OStatusPlugin extends Plugin * @param Notice $notice being favored * @return hook return value */ - function onEndFavorNotice(Profile $profile, Notice $notice) { $user = User::staticGet('id', $profile->id); @@ -775,10 +780,10 @@ class OStatusPlugin extends Plugin $notice->id, common_date_iso8601(time())); $act->time = time(); - $act->title = _("Disfavor"); + $act->title = _m('Disfavor'); // 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."), + $act->content = sprintf(_m('%1$s marked notice %2$s as no longer a favorite.'), $profile->getBestName(), $notice->uri); @@ -852,8 +857,9 @@ class OStatusPlugin extends Plugin $action->elementStart('p', array('id' => 'entity_remote_subscribe', 'class' => 'entity_subscribe')); $action->element('a', array('href' => common_local_url($target), - 'class' => 'entity_remote_subscribe') - , _m('Remote')); // @todo: i18n: Add translator hint for this text. + 'class' => 'entity_remote_subscribe'), + // TRANS: Link text for link to remote subscribe. + _m('Remote')); $action->elementEnd('p'); $action->elementEnd('div'); } @@ -892,6 +898,7 @@ class OStatusPlugin extends Plugin $profile->id, common_date_iso8601(time())); $act->time = time(); + // TRANS: Title for activity. $act->title = _m("Profile update"); // TRANS: Ping text for remote profile update through OStatus. // TRANS: %s is user that updated their profile. @@ -924,7 +931,8 @@ class OStatusPlugin extends Plugin array('nickname' => $profileUser->nickname)); $output->element('a', array('href' => $url, 'class' => 'entity_remote_subscribe'), - _m('Subscribe')); // @todo: i18n: Add context. + // TRANS: Link text for a user to subscribe to an OStatus user. + _m('Subscribe')); $output->elementEnd('li'); } } @@ -938,15 +946,15 @@ class OStatusPlugin extends Plugin 'version' => STATUSNET_VERSION, 'author' => 'Evan Prodromou, James Walker, Brion Vibber, Zach Copley', 'homepage' => 'http://status.net/wiki/Plugin:OStatus', - 'rawdescription' => - _m('Follow people across social networks that implement '. - 'OStatus.')); // @todo i18n: Add translator hint. + // TRANS: Plugin description. + 'rawdescription' => _m('Follow people across social networks that implement '. + 'OStatus.')); return true; } /** - * 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 @@ -954,11 +962,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; } @@ -975,17 +994,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. + + $user = User::staticGet('uri', $uri); + + if (!empty($user)) { + $profile = $user->getProfile(); + return false; + } - // XXX: do discovery here instead (OStatus_profile::ensureProfileURI($uri)) + // Now, check remotely - $oprofile = Ostatus_profile::staticGet('uri', $uri); + $oprofile = Ostatus_profile::ensureProfileURI($uri); - if (!empty($oprofile) && !$oprofile->isGroup()) { + 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; + } }