forked from GNUsocial/gnu-social
OStatus: fix up remote join button on group profiles
This commit is contained in:
parent
4bad176088
commit
628338265c
@ -49,6 +49,8 @@ class OStatusPlugin extends Plugin
|
|||||||
array('action' => 'ostatusinit'));
|
array('action' => 'ostatusinit'));
|
||||||
$m->connect('main/ostatus?nickname=:nickname',
|
$m->connect('main/ostatus?nickname=:nickname',
|
||||||
array('action' => 'ostatusinit'), array('nickname' => '[A-Za-z0-9_-]+'));
|
array('action' => 'ostatusinit'), array('nickname' => '[A-Za-z0-9_-]+'));
|
||||||
|
$m->connect('main/ostatus?group=:group',
|
||||||
|
array('action' => 'ostatusinit'), array('group' => '[A-Za-z0-9_-]+'));
|
||||||
$m->connect('main/ostatussub',
|
$m->connect('main/ostatussub',
|
||||||
array('action' => 'ostatussub'));
|
array('action' => 'ostatussub'));
|
||||||
$m->connect('main/ostatusgroup',
|
$m->connect('main/ostatusgroup',
|
||||||
@ -217,7 +219,7 @@ class OStatusPlugin extends Plugin
|
|||||||
if (empty($cur)) {
|
if (empty($cur)) {
|
||||||
// Add an OStatus subscribe
|
// Add an OStatus subscribe
|
||||||
$url = common_local_url('ostatusinit',
|
$url = common_local_url('ostatusinit',
|
||||||
array('nickname' => $group->nickname));
|
array('group' => $group->nickname));
|
||||||
$output->element('a', array('href' => $url,
|
$output->element('a', array('href' => $url,
|
||||||
'class' => 'entity_remote_subscribe'),
|
'class' => 'entity_remote_subscribe'),
|
||||||
_m('Join'));
|
_m('Join'));
|
||||||
|
@ -29,6 +29,7 @@ class OStatusInitAction extends Action
|
|||||||
{
|
{
|
||||||
|
|
||||||
var $nickname;
|
var $nickname;
|
||||||
|
var $group;
|
||||||
var $profile;
|
var $profile;
|
||||||
var $err;
|
var $err;
|
||||||
|
|
||||||
@ -41,8 +42,9 @@ class OStatusInitAction extends Action
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Local user the remote wants to subscribe to
|
// Local user or group the remote wants to subscribe to
|
||||||
$this->nickname = $this->trimmed('nickname');
|
$this->nickname = $this->trimmed('nickname');
|
||||||
|
$this->group = $this->trimmed('group');
|
||||||
|
|
||||||
// Webfinger or profile URL of the remote user
|
// Webfinger or profile URL of the remote user
|
||||||
$this->profile = $this->trimmed('profile');
|
$this->profile = $this->trimmed('profile');
|
||||||
@ -89,25 +91,33 @@ class OStatusInitAction extends Action
|
|||||||
|
|
||||||
function showContent()
|
function showContent()
|
||||||
{
|
{
|
||||||
|
if ($this->group) {
|
||||||
|
$header = sprintf(_m('Join group %s'), $this->group);
|
||||||
|
$submit = _m('Join');
|
||||||
|
} else {
|
||||||
|
$header = sprintf(_m('Subscribe to %s'), $this->nickname);
|
||||||
|
$submit = _m('Subscribe');
|
||||||
|
}
|
||||||
$this->elementStart('form', array('id' => 'form_ostatus_connect',
|
$this->elementStart('form', array('id' => 'form_ostatus_connect',
|
||||||
'method' => 'post',
|
'method' => 'post',
|
||||||
'class' => 'form_settings',
|
'class' => 'form_settings',
|
||||||
'action' => common_local_url('ostatusinit')));
|
'action' => common_local_url('ostatusinit')));
|
||||||
$this->elementStart('fieldset');
|
$this->elementStart('fieldset');
|
||||||
$this->element('legend', null, sprintf(_m('Subscribe to %s'), $this->nickname));
|
$this->element('legend', null, $header);
|
||||||
$this->hidden('token', common_session_token());
|
$this->hidden('token', common_session_token());
|
||||||
|
|
||||||
$this->elementStart('ul', 'form_data');
|
$this->elementStart('ul', 'form_data');
|
||||||
$this->elementStart('li', array('id' => 'ostatus_nickname'));
|
$this->elementStart('li', array('id' => 'ostatus_nickname'));
|
||||||
$this->input('nickname', _m('User nickname'), $this->nickname,
|
$this->input('nickname', _m('User nickname'), $this->nickname,
|
||||||
_m('Nickname of the user you want to follow'));
|
_m('Nickname of the user you want to follow'));
|
||||||
|
$this->hidden('group', $this->group); // pass-through for magic links
|
||||||
$this->elementEnd('li');
|
$this->elementEnd('li');
|
||||||
$this->elementStart('li', array('id' => 'ostatus_profile'));
|
$this->elementStart('li', array('id' => 'ostatus_profile'));
|
||||||
$this->input('profile', _m('Profile Account'), $this->profile,
|
$this->input('profile', _m('Profile Account'), $this->profile,
|
||||||
_m('Your account id (i.e. user@identi.ca)'));
|
_m('Your account id (i.e. user@identi.ca)'));
|
||||||
$this->elementEnd('li');
|
$this->elementEnd('li');
|
||||||
$this->elementEnd('ul');
|
$this->elementEnd('ul');
|
||||||
$this->submit('submit', _m('Subscribe'));
|
$this->submit('submit', $submit);
|
||||||
$this->elementEnd('fieldset');
|
$this->elementEnd('fieldset');
|
||||||
$this->elementEnd('form');
|
$this->elementEnd('form');
|
||||||
}
|
}
|
||||||
@ -131,19 +141,17 @@ class OStatusInitAction extends Action
|
|||||||
|
|
||||||
function connectWebfinger($acct)
|
function connectWebfinger($acct)
|
||||||
{
|
{
|
||||||
$disco = new Discovery;
|
$target_profile = $this->targetProfile();
|
||||||
|
|
||||||
|
$disco = new Discovery;
|
||||||
$result = $disco->lookup($acct);
|
$result = $disco->lookup($acct);
|
||||||
if (!$result) {
|
if (!$result) {
|
||||||
$this->clientError(_m("Couldn't look up OStatus account profile."));
|
$this->clientError(_m("Couldn't look up OStatus account profile."));
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach ($result->links as $link) {
|
foreach ($result->links as $link) {
|
||||||
if ($link['rel'] == 'http://ostatus.org/schema/1.0/subscribe') {
|
if ($link['rel'] == 'http://ostatus.org/schema/1.0/subscribe') {
|
||||||
// We found a URL - let's redirect!
|
// We found a URL - let's redirect!
|
||||||
|
|
||||||
$user = User::staticGet('nickname', $this->nickname);
|
|
||||||
$target_profile = common_local_url('userbyid', array('id' => $user->id));
|
|
||||||
|
|
||||||
$url = Discovery::applyTemplate($link['template'], $target_profile);
|
$url = Discovery::applyTemplate($link['template'], $target_profile);
|
||||||
common_log(LOG_INFO, "Sending remote subscriber $acct to $url");
|
common_log(LOG_INFO, "Sending remote subscriber $acct to $url");
|
||||||
common_redirect($url, 303);
|
common_redirect($url, 303);
|
||||||
@ -155,8 +163,7 @@ class OStatusInitAction extends Action
|
|||||||
|
|
||||||
function connectProfile($subscriber_profile)
|
function connectProfile($subscriber_profile)
|
||||||
{
|
{
|
||||||
$user = User::staticGet('nickname', $this->nickname);
|
$target_profile = $this->targetProfile();
|
||||||
$target_profile = common_local_url('userbyid', array('id' => $user->id));
|
|
||||||
|
|
||||||
// @fixme hack hack! We should look up the remote sub URL from XRDS
|
// @fixme hack hack! We should look up the remote sub URL from XRDS
|
||||||
$suburl = preg_replace('!^(.*)/(.*?)$!', '$1/main/ostatussub', $subscriber_profile);
|
$suburl = preg_replace('!^(.*)/(.*?)$!', '$1/main/ostatussub', $subscriber_profile);
|
||||||
@ -166,6 +173,30 @@ class OStatusInitAction extends Action
|
|||||||
common_redirect($suburl, 303);
|
common_redirect($suburl, 303);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Build the canonical profile URI+URL of the requested user or group
|
||||||
|
*/
|
||||||
|
function targetProfile()
|
||||||
|
{
|
||||||
|
if ($this->nickname) {
|
||||||
|
$user = User::staticGet('nickname', $this->nickname);
|
||||||
|
if ($user) {
|
||||||
|
return common_local_url('userbyid', array('id' => $user->id));
|
||||||
|
} else {
|
||||||
|
$this->clientError("No such user.");
|
||||||
|
}
|
||||||
|
} else if ($this->group) {
|
||||||
|
$group = Local_group::staticGet('id', $this->group);
|
||||||
|
if ($group) {
|
||||||
|
return common_local_url('groupbyid', array('id' => $group->group_id));
|
||||||
|
} else {
|
||||||
|
$this->clientError("No such group.");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$this->clientError("No local user or group nickname provided.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function title()
|
function title()
|
||||||
{
|
{
|
||||||
return _m('OStatus Connect');
|
return _m('OStatus Connect');
|
||||||
|
Loading…
Reference in New Issue
Block a user