diff options
Diffstat (limited to 'actions')
-rw-r--r-- | actions/apiaccountupdatedeliverydevice.php | 10 | ||||
-rw-r--r-- | actions/apigroupprofileupdate.php | 367 | ||||
-rw-r--r-- | actions/confirmaddress.php | 102 | ||||
-rw-r--r-- | actions/getfile.php | 4 | ||||
-rw-r--r-- | actions/hostmeta.php | 60 | ||||
-rw-r--r-- | actions/imsettings.php | 356 | ||||
-rw-r--r-- | actions/login.php | 20 | ||||
-rw-r--r-- | actions/othersettings.php | 58 | ||||
-rw-r--r-- | actions/plugindisable.php | 78 | ||||
-rw-r--r-- | actions/pluginenable.php | 166 | ||||
-rw-r--r-- | actions/pluginsadminpanel.php | 110 | ||||
-rw-r--r-- | actions/redirect.php | 71 | ||||
-rw-r--r-- | actions/shownotice.php | 6 | ||||
-rw-r--r-- | actions/showstream.php | 6 | ||||
-rw-r--r-- | actions/subscriptions.php | 8 |
15 files changed, 1176 insertions, 246 deletions
diff --git a/actions/apiaccountupdatedeliverydevice.php b/actions/apiaccountupdatedeliverydevice.php index 2d903cb46..e732e2356 100644 --- a/actions/apiaccountupdatedeliverydevice.php +++ b/actions/apiaccountupdatedeliverydevice.php @@ -121,10 +121,16 @@ class ApiAccountUpdateDeliveryDeviceAction extends ApiAuthAction if (strtolower($this->device) == 'sms') { $this->user->smsnotify = true; } elseif (strtolower($this->device) == 'im') { - $this->user->jabbernotify = true; + //TODO IM is pluginized now, so what should we do? + //Enable notifications for all IM plugins? + //For now, don't do anything + //$this->user->jabbernotify = true; } elseif (strtolower($this->device == 'none')) { $this->user->smsnotify = false; - $this->user->jabbernotify = false; + //TODO IM is pluginized now, so what should we do? + //Disable notifications for all IM plugins? + //For now, don't do anything + //$this->user->jabbernotify = false; } $result = $this->user->update($original); diff --git a/actions/apigroupprofileupdate.php b/actions/apigroupprofileupdate.php new file mode 100644 index 000000000..6ac4b5a4b --- /dev/null +++ b/actions/apigroupprofileupdate.php @@ -0,0 +1,367 @@ +<?php +/** + * StatusNet, the distributed open-source microblogging tool + * + * Update a group's profile + * + * PHP version 5 + * + * LICENCE: This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + * @category API + * @package StatusNet + * @author Zach Copley <zach@status.net> + * @copyright 2010 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://status.net/ + */ + +if (!defined('STATUSNET')) { + exit(1); +} + +require_once INSTALLDIR . '/lib/apiauth.php'; + +/** + * API analog to the group edit page + * + * @category API + * @package StatusNet + * @author Zach Copley <zach@status.net> + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://status.net/ + */ + +class ApiGroupProfileUpdateAction extends ApiAuthAction +{ + + /** + * Take arguments for running + * + * @param array $args $_REQUEST args + * + * @return boolean success flag + * + */ + + function prepare($args) + { + parent::prepare($args); + + $this->nickname = common_canonical_nickname($this->trimmed('nickname')); + + $this->fullname = $this->trimmed('fullname'); + $this->homepage = $this->trimmed('homepage'); + $this->description = $this->trimmed('description'); + $this->location = $this->trimmed('location'); + $this->aliasstring = $this->trimmed('aliases'); + + $this->user = $this->auth_user; + $this->group = $this->getTargetGroup($this->arg('id')); + + return true; + } + + /** + * Handle the request + * + * See which request params have been set, and update the profile + * + * @param array $args $_REQUEST data (unused) + * + * @return void + */ + + function handle($args) + { + parent::handle($args); + + if ($_SERVER['REQUEST_METHOD'] != 'POST') { + $this->clientError( + _('This method requires a POST.'), + 400, $this->format + ); + return; + } + + if (!in_array($this->format, array('xml', 'json'))) { + $this->clientError( + _('API method not found.'), + 404, + $this->format + ); + return; + } + + if (empty($this->user)) { + $this->clientError(_('No such user.'), 404, $this->format); + return; + } + + if (empty($this->group)) { + $this->clientError(_('Group not found.'), 404, $this->format); + return false; + } + + if (!$this->user->isAdmin($this->group)) { + $this->clientError(_('You must be an admin to edit the group.'), 403); + return false; + } + + $this->group->query('BEGIN'); + + $orig = clone($this->group); + + try { + + if (!empty($this->nickname)) { + if ($this->validateNickname()) { + $this->group->nickname = $this->nickname; + $this->group->mainpage = common_local_url( + 'showgroup', + array('nickname' => $this->nickname) + ); + } + } + + if (!empty($this->fullname)) { + $this->validateFullname(); + $this->group->fullname = $this->fullname; + } + + if (!empty($this->homepage)) { + $this->validateHomepage(); + $this->group->homepage = $this->hompage; + } + + if (!empty($this->description)) { + $this->validateDescription(); + $this->group->description = $this->decription; + } + + if (!empty($this->location)) { + $this->validateLocation(); + $this->group->location = $this->location; + } + + } catch (ApiValidationException $ave) { + $this->clientError( + $ave->getMessage(), + 403, + $this->format + ); + return; + } + + $result = $this->group->update($orig); + + if (!$result) { + common_log_db_error($this->group, 'UPDATE', __FILE__); + $this->serverError(_('Could not update group.')); + } + + $aliases = array(); + + try { + + if (!empty($this->aliasstring)) { + $aliases = $this->validateAliases(); + } + + } catch (ApiValidationException $ave) { + $this->clientError( + $ave->getMessage(), + 403, + $this->format + ); + return; + } + + $result = $this->group->setAliases($aliases); + + if (!$result) { + $this->serverError(_('Could not create aliases.')); + } + + if (!empty($this->nickname) && ($this->nickname != $orig->nickname)) { + common_log(LOG_INFO, "Saving local group info."); + $local = Local_group::staticGet('group_id', $this->group->id); + $local->setNickname($this->nickname); + } + + $this->group->query('COMMIT'); + + switch($this->format) { + case 'xml': + $this->showSingleXmlGroup($this->group); + break; + case 'json': + $this->showSingleJsonGroup($this->group); + break; + default: + $this->clientError(_('API method not found.'), 404, $this->format); + break; + } + } + + function nicknameExists($nickname) + { + $group = Local_group::staticGet('nickname', $nickname); + + if (!empty($group) && + $group->group_id != $this->group->id) { + return true; + } + + $alias = Group_alias::staticGet('alias', $nickname); + + if (!empty($alias) && + $alias->group_id != $this->group->id) { + return true; + } + + return false; + } + + function validateNickname() + { + if (!Validate::string( + $this->nickname, array( + 'min_length' => 1, + 'max_length' => 64, + 'format' => NICKNAME_FMT + ) + ) + ) { + throw new ApiValidationException( + _( + 'Nickname must have only lowercase letters ' . + 'and numbers and no spaces.' + ) + ); + } else if ($this->nicknameExists($this->nickname)) { + throw new ApiValidationException( + _('Nickname already in use. Try another one.') + ); + } else if (!User_group::allowedNickname($this->nickname)) { + throw new ApiValidationException( + _('Not a valid nickname.') + ); + } + + return true; + } + + function validateHomepage() + { + if (!is_null($this->homepage) + && (strlen($this->homepage) > 0) + && !Validate::uri( + $this->homepage, + array('allowed_schemes' => array('http', 'https') + ) + ) + ) { + throw new ApiValidationException( + _('Homepage is not a valid URL.') + ); + } + } + + function validateFullname() + { + if (!is_null($this->fullname) && mb_strlen($this->fullname) > 255) { + throw new ApiValidationException( + _('Full name is too long (max 255 chars).') + ); + } + } + + function validateDescription() + { + if (User_group::descriptionTooLong($this->description)) { + throw new ApiValidationException( + sprintf( + _('description is too long (max %d chars).'), + User_group::maxDescription() + ) + ); + } + } + + function validateLocation() + { + if (!is_null($this->location) && mb_strlen($this->location) > 255) { + throw new ApiValidationException( + _('Location is too long (max 255 chars).') + ); + } + } + + function validateAliases() + { + $aliases = array_map( + 'common_canonical_nickname', + array_unique( + preg_split('/[\s,]+/', + $this->aliasstring + ) + ) + ); + + if (count($aliases) > common_config('group', 'maxaliases')) { + throw new ApiValidationException( + sprintf( + _('Too many aliases! Maximum %d.'), + common_config('group', 'maxaliases') + ) + ); + } + + foreach ($aliases as $alias) { + if (!Validate::string( + $alias, array( + 'min_length' => 1, + 'max_length' => 64, + 'format' => NICKNAME_FMT) + ) + ) { + throw new ApiValidationException( + sprintf( + _('Invalid alias: "%s"'), + $alias + ) + ); + } + + if ($this->nicknameExists($alias)) { + throw new ApiValidationException( + sprintf( + _('Alias "%s" already in use. Try another one.'), + $alias) + ); + } + + // XXX assumes alphanum nicknames + if (strcmp($alias, $this->nickname) == 0) { + throw new ApiValidationException( + _('Alias can\'t be the same as nickname.') + ); + } + } + + return $aliases; + } + +}
\ No newline at end of file diff --git a/actions/confirmaddress.php b/actions/confirmaddress.php index 8bf8c8c4d..f92db3ec4 100644 --- a/actions/confirmaddress.php +++ b/actions/confirmaddress.php @@ -49,7 +49,7 @@ class ConfirmaddressAction extends Action { /** type of confirmation. */ - var $type = null; + var $address; /** * Accept a confirmation code @@ -86,39 +86,76 @@ class ConfirmaddressAction extends Action return; } $type = $confirm->address_type; - if (!in_array($type, array('email', 'jabber', 'sms'))) { - // TRANS: Server error for an unknow address type, which can be 'email', 'jabber', or 'sms'. - $this->serverError(sprintf(_('Unrecognized address type %s.'), $type)); + $transports = array(); + Event::handle('GetImTransports', array(&$transports)); + if (!in_array($type, array('email', 'sms')) && !in_array($type, array_keys($transports))) { + // TRANS: Server error for an unknown address type, which can be 'email', 'sms', or the name of an IM network (such as 'xmpp' or 'aim') + $this->serverError(sprintf(_('Unrecognized address type %s'), $type)); return; } - if ($cur->$type == $confirm->address) { - // TRANS: Client error for an already confirmed email/jabbel/sms address. - $this->clientError(_('That address has already been confirmed.')); - return; - } - + $this->address = $confirm->address; $cur->query('BEGIN'); + if (in_array($type, array('email', 'sms'))) + { + if ($cur->$type == $confirm->address) { + $this->clientError(_('That address has already been confirmed.')); + return; + } + + $orig_user = clone($cur); + + $cur->$type = $confirm->address; + + if ($type == 'sms') { + $cur->carrier = ($confirm->address_extra)+0; + $carrier = Sms_carrier::staticGet($cur->carrier); + $cur->smsemail = $carrier->toEmailAddress($cur->sms); + } + + $result = $cur->updateKeys($orig_user); + + if (!$result) { + common_log_db_error($cur, 'UPDATE', __FILE__); + $this->serverError(_('Couldn\'t update user.')); + return; + } + + if ($type == 'email') { + $cur->emailChanged(); + } + + } else { + + $user_im_prefs = new User_im_prefs(); + $user_im_prefs->transport = $confirm->address_type; + $user_im_prefs->user_id = $cur->id; + if ($user_im_prefs->find() && $user_im_prefs->fetch()) { + if($user_im_prefs->screenname == $confirm->address){ + $this->clientError(_('That address has already been confirmed.')); + return; + } + $user_im_prefs->screenname = $confirm->address; + $result = $user_im_prefs->update(); + + if (!$result) { + common_log_db_error($user_im_prefs, 'UPDATE', __FILE__); + $this->serverError(_('Couldn\'t update user im preferences.')); + return; + } + }else{ + $user_im_prefs = new User_im_prefs(); + $user_im_prefs->screenname = $confirm->address; + $user_im_prefs->transport = $confirm->address_type; + $user_im_prefs->user_id = $cur->id; + $result = $user_im_prefs->insert(); + + if (!$result) { + common_log_db_error($user_im_prefs, 'INSERT', __FILE__); + $this->serverError(_('Couldn\'t insert user im preferences.')); + return; + } + } - $orig_user = clone($cur); - - $cur->$type = $confirm->address; - - if ($type == 'sms') { - $cur->carrier = ($confirm->address_extra)+0; - $carrier = Sms_carrier::staticGet($cur->carrier); - $cur->smsemail = $carrier->toEmailAddress($cur->sms); - } - - $result = $cur->updateKeys($orig_user); - - if (!$result) { - common_log_db_error($cur, 'UPDATE', __FILE__); - $this->serverError(_('Couldn\'t update user.')); - return; - } - - if ($type == 'email') { - $cur->emailChanged(); } $result = $confirm->delete(); @@ -130,8 +167,6 @@ class ConfirmaddressAction extends Action } $cur->query('COMMIT'); - - $this->type = $type; $this->showPage(); } @@ -155,11 +190,10 @@ class ConfirmaddressAction extends Action function showContent() { $cur = common_current_user(); - $type = $this->type; $this->element('p', null, sprintf(_('The address "%s" has been '. 'confirmed for your account.'), - $cur->$type)); + $this->address)); } } diff --git a/actions/getfile.php b/actions/getfile.php index 9cbe8e1d9..a45506ce2 100644 --- a/actions/getfile.php +++ b/actions/getfile.php @@ -129,9 +129,9 @@ class GetfileAction extends Action return null; } - $cache = common_memcache(); + $cache = Cache::instance(); if($cache) { - $key = common_cache_key('attachments:etag:' . $this->path); + $key = Cache::key('attachments:etag:' . $this->path); $etag = $cache->get($key); if($etag === false) { $etag = crc32(file_get_contents($this->path)); diff --git a/actions/hostmeta.php b/actions/hostmeta.php new file mode 100644 index 000000000..b7beee5a8 --- /dev/null +++ b/actions/hostmeta.php @@ -0,0 +1,60 @@ +<?php +/* + * StatusNet - the distributed open-source microblogging tool + * Copyright (C) 2010, StatusNet, Inc. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +/** + * @category Action + * @package StatusNet + * @maintainer James Walker <james@status.net> + * @author Craig Andrews <candrews@integralblue.com> + */ + +if (!defined('STATUSNET')) { + exit(1); +} + +class HostMetaAction extends Action +{ + + /** + * Is read only? + * + * @return boolean true + */ + function isReadOnly() + { + return true; + } + + function handle() + { + parent::handle(); + + $domain = common_config('site', 'server'); + + $xrd = new XRD(); + $xrd->host = $domain; + + if(Event::handle('StartHostMetaLinks', array(&$xrd->links))) { + Event::handle('EndHostMetaLinks', array(&$xrd->links)); + } + + header('Content-type: application/xrd+xml'); + print $xrd->toXML(); + } +} diff --git a/actions/imsettings.php b/actions/imsettings.php index 29cbeb82e..1b1bc0dc0 100644 --- a/actions/imsettings.php +++ b/actions/imsettings.php @@ -31,9 +31,6 @@ if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); } -require_once INSTALLDIR.'/lib/connectsettingsaction.php'; -require_once INSTALLDIR.'/lib/jabber.php'; - /** * Settings for Jabber/XMPP integration * @@ -72,8 +69,8 @@ class ImsettingsAction extends ConnectSettingsAction // TRANS: [instant messages] is link text, "(%%doc.im%%)" is the link. // TRANS: the order and formatting of link text and link should remain unchanged. return _('You can send and receive notices through '. - 'Jabber/GTalk [instant messages](%%doc.im%%). '. - 'Configure your address and settings below.'); + 'instant messaging [instant messages](%%doc.im%%). '. + 'Configure your addresses and settings below.'); } /** @@ -88,105 +85,124 @@ class ImsettingsAction extends ConnectSettingsAction function showContent() { - if (!common_config('xmpp', 'enabled')) { + $transports = array(); + Event::handle('GetImTransports', array(&$transports)); + if (! $transports) { $this->element('div', array('class' => 'error'), - // TRANS: Message given in the IM settings if XMPP is not enabled on the site. + // TRANS: Message given in the IM settings if IM is not enabled on the site. _('IM is not available.')); return; } $user = common_current_user(); - $this->elementStart('form', array('method' => 'post', - 'id' => 'form_settings_im', - 'class' => 'form_settings', - 'action' => - common_local_url('imsettings'))); - $this->elementStart('fieldset', array('id' => 'settings_im_address')); - // TRANS: Form legend for IM settings form. - $this->element('legend', null, _('IM address')); - $this->hidden('token', common_session_token()); - - if ($user->jabber) { - $this->element('p', 'form_confirmed', $user->jabber); - // TRANS: Form note in IM settings form. - $this->element('p', 'form_note', - _('Current confirmed Jabber/GTalk address.')); - $this->hidden('jabber', $user->jabber); - // TRANS: Button label to remove a confirmed IM address. - $this->submit('remove', _m('BUTTON','Remove')); - } else { - $confirm = $this->getConfirmation(); - if ($confirm) { - $this->element('p', 'form_unconfirmed', $confirm->address); + + $user_im_prefs_by_transport = array(); + + foreach($transports as $transport=>$transport_info) + { + $this->elementStart('form', array('method' => 'post', + 'id' => 'form_settings_im', + 'class' => 'form_settings', + 'action' => + common_local_url('imsettings'))); + $this->elementStart('fieldset', array('id' => 'settings_im_address')); + // TRANS: Form legend for IM settings form. + $this->element('legend', null, $transport_info['display']); + $this->hidden('token', common_session_token()); + $this->hidden('transport', $transport); + + if ($user_im_prefs = User_im_prefs::pkeyGet( array('transport' => $transport, 'user_id' => $user->id) )) { + $user_im_prefs_by_transport[$transport] = $user_im_prefs; + $this->element('p', 'form_confirmed', $user_im_prefs->screenname); + // TRANS: Form note in IM settings form. $this->element('p', 'form_note', - // TRANS: Form note in IM settings form. - // TRANS: %s is the IM address set for the site. - sprintf(_('Awaiting confirmation on this address. '. - 'Check your Jabber/GTalk account for a '. - 'message with further instructions. '. - '(Did you add %s to your buddy list?)'), - jabber_daemon_address())); - $this->hidden('jabber', $confirm->address); - // TRANS: Button label to cancel an IM address confirmation procedure. - $this->submit('cancel', _m('BUTTON','Cancel')); + sprintf(_('Current confirmed %s address.'),$transport_info['display'])); + $this->hidden('screenname', $user_im_prefs->screenname); + // TRANS: Button label to remove a confirmed IM address. + $this->submit('remove', _m('BUTTON','Remove')); } else { - $this->elementStart('ul', 'form_data'); - $this->elementStart('li'); - // TRANS: Field label for IM address input in IM settings form. - $this->input('jabber', _('IM address'), - ($this->arg('jabber')) ? $this->arg('jabber') : null, - // TRANS: IM address input field instructions in IM settings form. - // TRANS: %s is the IM address set for the site. - // TRANS: Do not translate "example.org". It is one of the domain names reserved for use in examples by - // TRANS: http://www.rfc-editor.org/rfc/rfc2606.txt. Any other domain may be owned by a legitimate - // TRANS: person or organization. - sprintf(_('Jabber or GTalk address, '. - 'like "UserName@example.org". '. - 'First, make sure to add %s to your '. - 'buddy list in your IM client or on GTalk.'), - jabber_daemon_address())); - $this->elementEnd('li'); - $this->elementEnd('ul'); - // TRANS: Button label for adding an IM address in IM settings form. - $this->submit('add', _m('BUTTON','Add')); + $confirm = $this->getConfirmation($transport); + if ($confirm) { + $this->element('p', 'form_unconfirmed', $confirm->address); + // TRANS: Form note in IM settings form. + $this->element('p', 'form_note', + // TRANS: Form note in IM settings form. + // TRANS: %s is the IM address set for the site. + sprintf(_('Awaiting confirmation on this address. '. + 'Check your %s account for a '. + 'message with further instructions. '. + '(Did you add %s to your buddy list?)'), + $transport_info['display'], + $transport_info['daemonScreenname'])); + $this->hidden('screenname', $confirm->address); + // TRANS: Button label to cancel an IM address confirmation procedure. + $this->submit('cancel', _m('BUTTON','Cancel')); + } else { + $this->elementStart('ul', 'form_data'); + $this->elementStart('li'); + $this->input('screenname', _('IM address'), + ($this->arg('screenname')) ? $this->arg('screenname') : null, + sprintf(_('%s screenname.'), + $transport_info['display'])); + $this->elementEnd('li'); + $this->elementEnd('ul'); + // TRANS: Button label for adding an IM address in IM settings form. + $this->submit('add', _m('BUTTON','Add')); + } } + $this->elementEnd('fieldset'); + $this->elementEnd('form'); + } + + if($user_im_prefs_by_transport) + { + $this->elementStart('form', array('method' => 'post', + 'id' => 'form_settings_im', + 'class' => 'form_settings', + 'action' => + common_local_url('imsettings'))); + $this->elementStart('fieldset', array('id' => 'settings_im_preferences')); + // TRANS: Header for IM preferences form. + $this->element('legend', null, _('IM Preferences')); + $this->hidden('token', common_session_token()); + $this->elementStart('table'); + $this->elementStart('tr'); + foreach($user_im_prefs_by_transport as $transport=>$user_im_prefs) + { + $this->element('th', null, $transports[$transport]['display']); + } + $this->elementEnd('tr'); + $preferences = array( + // TRANS: Checkbox label in IM preferences form. + array('name'=>'notify', 'description'=>_('Send me notices')), + // TRANS: Checkbox label in IM preferences form. + array('name'=>'updatefrompresence', 'description'=>_('Post a notice when my status changes.')), + // TRANS: Checkbox label in IM preferences form. + array('name'=>'replies', 'description'=>_('Send me replies '. + 'from people I\'m not subscribed to.')), + // TRANS: Checkbox label in IM preferences form. + array('name'=>'microid', 'description'=>_('Publish a MicroID')) + ); + foreach($preferences as $preference) + { + $this->elementStart('tr'); + foreach($user_im_prefs_by_transport as $transport=>$user_im_prefs) + { + $preference_name = $preference['name']; + $this->elementStart('td'); + $this->checkbox($transport . '_' . $preference['name'], + $preference['description'], + $user_im_prefs->$preference_name); + $this->elementEnd('td'); + } + $this->elementEnd('tr'); + } + $this->elementEnd('table'); + // TRANS: Button label to save IM preferences. + $this->submit('save', _m('BUTTON','Save')); + $this->elementEnd('fieldset'); + $this->elementEnd('form'); } - $this->elementEnd('fieldset'); - - $this->elementStart('fieldset', array('id' => 'settings_im_preferences')); - // TRANS: Form legend for IM preferences form. - $this->element('legend', null, _('IM preferences')); - $this->elementStart('ul', 'form_data'); - $this->elementStart('li'); - $this->checkbox('jabbernotify', - // TRANS: Checkbox label in IM preferences form. - _('Send me notices through Jabber/GTalk.'), - $user->jabbernotify); - $this->elementEnd('li'); - $this->elementStart('li'); - $this->checkbox('updatefrompresence', - // TRANS: Checkbox label in IM preferences form. - _('Post a notice when my Jabber/GTalk status changes.'), - $user->updatefrompresence); - $this->elementEnd('li'); - $this->elementStart('li'); - $this->checkbox('jabberreplies', - // TRANS: Checkbox label in IM preferences form. - _('Send me replies through Jabber/GTalk '. - 'from people I\'m not subscribed to.'), - $user->jabberreplies); - $this->elementEnd('li'); - $this->elementStart('li'); - $this->checkbox('jabbermicroid', - // TRANS: Checkbox label in IM preferences form. - _('Publish a MicroID for my Jabber/GTalk address.'), - $user->jabbermicroid); - $this->elementEnd('li'); - $this->elementEnd('ul'); - // TRANS: Button label to save IM preferences. - $this->submit('save', _m('BUTTON','Save')); - $this->elementEnd('fieldset'); - $this->elementEnd('form'); } /** @@ -195,14 +211,14 @@ class ImsettingsAction extends ConnectSettingsAction * @return Confirm_address address object for this user */ - function getConfirmation() + function getConfirmation($transport) { $user = common_current_user(); $confirm = new Confirm_address(); $confirm->user_id = $user->id; - $confirm->address_type = 'jabber'; + $confirm->address_type = $transport; if ($confirm->find(true)) { return $confirm; @@ -257,35 +273,33 @@ class ImsettingsAction extends ConnectSettingsAction function savePreferences() { - $jabbernotify = $this->boolean('jabbernotify'); - $updatefrompresence = $this->boolean('updatefrompresence'); - $jabberreplies = $this->boolean('jabberreplies'); - $jabbermicroid = $this->boolean('jabbermicroid'); - $user = common_current_user(); - assert(!is_null($user)); // should already be checked - - $user->query('BEGIN'); - - $original = clone($user); - - $user->jabbernotify = $jabbernotify; - $user->updatefrompresence = $updatefrompresence; - $user->jabberreplies = $jabberreplies; - $user->jabbermicroid = $jabbermicroid; - - $result = $user->update($original); - - if ($result === false) { - common_log_db_error($user, 'UPDATE', __FILE__); - // TRANS: Server error thrown on database error updating IM preferences. - $this->serverError(_('Couldn\'t update user.')); - return; + $user_im_prefs = new User_im_prefs(); + $user_im_prefs->query('BEGIN'); + $user_im_prefs->user_id = $user->id; + if($user_im_prefs->find() && $user_im_prefs->fetch()) + { + $preferences = array('notify', 'updatefrompresence', 'replies', 'microid'); + do + { + $original = clone($user_im_prefs); + $new = clone($user_im_prefs); + foreach($preferences as $preference) + { + $new->$preference = $this->boolean($new->transport . '_' . $preference); + } + $result = $new->update($original); + + if ($result === false) { + common_log_db_error($user, 'UPDATE', __FILE__); + // TRANS: Server error thrown on database error updating IM preferences. + $this->serverError(_('Couldn\'t update IM preferences.')); + return; + } + }while($user_im_prefs->fetch()); } - - $user->query('COMMIT'); - + $user_im_prefs->query('COMMIT'); // TRANS: Confirmation message for successful IM preferences save. $this->showForm(_('Preferences saved.'), true); } @@ -294,7 +308,7 @@ class ImsettingsAction extends ConnectSettingsAction * Sends a confirmation to the address given * * Stores a confirmation record and sends out a - * Jabber message with the confirmation info. + * message with the confirmation info. * * @return void */ @@ -303,41 +317,45 @@ class ImsettingsAction extends ConnectSettingsAction { $user = common_current_user(); - $jabber = $this->trimmed('jabber'); + $screenname = $this->trimmed('screenname'); + $transport = $this->trimmed('transport'); // Some validation - if (!$jabber) { + if (!$screenname) { // TRANS: Message given saving IM address without having provided one. - $this->showForm(_('No Jabber ID.')); + $this->showForm(_('No screenname.')); return; } - $jabber = jabber_normalize_jid($jabber); + if (!$transport) { + $this->showForm(_('No transport.')); + return; + } - if (!$jabber) { + Event::handle('NormalizeImScreenname', array($transport, &$screenname)); + + if (!$screenname) { // TRANS: Message given saving IM address that cannot be normalised. - $this->showForm(_('Cannot normalize that Jabber ID')); + $this->showForm(_('Cannot normalize that screenname')); return; } - if (!jabber_valid_base_jid($jabber, common_config('email', 'domain_check'))) { + $valid = false; + Event::handle('ValidateImScreenname', array($transport, $screenname, &$valid)); + if (!$valid) { // TRANS: Message given saving IM address that not valid. - $this->showForm(_('Not a valid Jabber ID')); - return; - } else if ($user->jabber == $jabber) { - // TRANS: Message given saving IM address that is already set. - $this->showForm(_('That is already your Jabber ID.')); + $this->showForm(_('Not a valid screenname')); return; - } else if ($this->jabberExists($jabber)) { + } else if ($this->screennameExists($transport, $screenname)) { // TRANS: Message given saving IM address that is already set for another user. - $this->showForm(_('Jabber ID already belongs to another user.')); + $this->showForm(_('Screenname already belongs to another user.')); return; } $confirm = new Confirm_address(); - $confirm->address = $jabber; - $confirm->address_type = 'jabber'; + $confirm->address = $screenname; + $confirm->address_type = $transport; $confirm->user_id = $user->id; $confirm->code = common_confirmation_code(64); $confirm->sent = common_sql_now(); @@ -352,17 +370,11 @@ class ImsettingsAction extends ConnectSettingsAction return; } - jabber_confirm_address($confirm->code, - $user->nickname, - $jabber); + Event::handle('SendImConfirmationCode', array($transport, $screenname, $confirm->code, $user)); // TRANS: Message given saving valid IM address that is to be confirmed. - // TRANS: %s is the IM address set for the site. - $msg = sprintf(_('A confirmation code was sent '. - 'to the IM address you added. '. - 'You must approve %s for '. - 'sending messages to you.'), - jabber_daemon_address()); + $msg = _('A confirmation code was sent '. + 'to the IM address you added.'); $this->showForm($msg, true); } @@ -377,16 +389,17 @@ class ImsettingsAction extends ConnectSettingsAction function cancelConfirmation() { - $jabber = $this->arg('jabber'); + $screenname = $this->trimmed('screenname'); + $transport = $this->trimmed('transport'); - $confirm = $this->getConfirmation(); + $confirm = $this->getConfirmation($transport); if (!$confirm) { // TRANS: Message given canceling IM address confirmation that is not pending. $this->showForm(_('No pending confirmation to cancel.')); return; } - if ($confirm->address != $jabber) { + if ($confirm->address != $screenname) { // TRANS: Message given canceling IM address confirmation for the wrong IM address. $this->showForm(_('That is the wrong IM address.')); return; @@ -397,7 +410,7 @@ class ImsettingsAction extends ConnectSettingsAction if (!$result) { common_log_db_error($confirm, 'DELETE', __FILE__); // TRANS: Server error thrown on database error canceling IM address confirmation. - $this->serverError(_('Couldn\'t delete IM confirmation.')); + $this->serverError(_('Couldn\'t delete confirmation.')); return; } @@ -417,32 +430,29 @@ class ImsettingsAction extends ConnectSettingsAction { $user = common_current_user(); - $jabber = $this->arg('jabber'); + $screenname = $this->trimmed('screenname'); + $transport = $this->trimmed('transport'); // Maybe an old tab open...? - if ($user->jabber != $jabber) { + $user_im_prefs = new User_im_prefs(); + $user_im_prefs->user_id = $user->id; + if(! ($user_im_prefs->find() && $user_im_prefs->fetch())) { // TRANS: Message given trying to remove an IM address that is not // TRANS: registered for the active user. - $this->showForm(_('That is not your Jabber ID.')); + $this->showForm(_('That is not your screenname.')); return; } - $user->query('BEGIN'); - - $original = clone($user); - - $user->jabber = null; - - $result = $user->updateKeys($original); + $result = $user_im_prefs->delete(); if (!$result) { common_log_db_error($user, 'UPDATE', __FILE__); // TRANS: Server error thrown on database error removing a registered IM address. + $this->serverError(_('Couldn\'t update user im prefs.')); $this->serverError(_('Couldn\'t update user.')); return; } - $user->query('COMMIT'); // XXX: unsubscribe to the old address @@ -451,25 +461,27 @@ class ImsettingsAction extends ConnectSettingsAction } /** - * Does this Jabber ID exist? + * Does this screenname exist? * * Checks if we already have another user with this address. * - * @param string $jabber Address to check + * @param string $transport Transport to check + * @param string $screenname Screenname to check * - * @return boolean whether the Jabber ID exists + * @return boolean whether the screenname exists */ - function jabberExists($jabber) + function screennameExists($transport, $screenname) { $user = common_current_user(); - $other = User::staticGet('jabber', $jabber); - - if (!$other) { + $user_im_prefs = new User_im_prefs(); + $user_im_prefs->transport = $transport; + $user_im_prefs->screenname = $screenname; + if($user_im_prefs->find() && $user_im_prefs->fetch()){ + return true; + }else{ return false; - } else { - return $other->id != $user->id; } } } diff --git a/actions/login.php b/actions/login.php index d3e4312f7..07c601a4d 100644 --- a/actions/login.php +++ b/actions/login.php @@ -118,27 +118,10 @@ class LoginAction extends Action * @return void */ - function checkLogin($user_id=null, $token=null) + function checkLogin($user_id=null) { // XXX: login throttle - // CSRF protection - token set in NoticeForm - $token = $this->trimmed('token'); - if (!$token || $token != common_session_token()) { - $st = common_session_token(); - if (empty($token)) { - common_log(LOG_WARNING, 'No token provided by client.'); - } else if (empty($st)) { - common_log(LOG_WARNING, 'No session token stored.'); - } else { - common_log(LOG_WARNING, 'Token = ' . $token . ' and session token = ' . $st); - } - - $this->clientError(_('There was a problem with your session token. '. - 'Try again, please.')); - return; - } - $nickname = $this->trimmed('nickname'); $password = $this->arg('password'); @@ -261,7 +244,6 @@ class LoginAction extends Action $this->elementEnd('li'); $this->elementEnd('ul'); $this->submit('submit', _('Login')); - $this->hidden('token', common_session_token()); $this->elementEnd('fieldset'); $this->elementEnd('form'); $this->elementStart('p'); diff --git a/actions/othersettings.php b/actions/othersettings.php index 10e9873b3..8d6e00404 100644 --- a/actions/othersettings.php +++ b/actions/othersettings.php @@ -98,8 +98,10 @@ class OthersettingsAction extends AccountSettingsAction $this->hidden('token', common_session_token()); $this->elementStart('ul', 'form_data'); - $shorteners = array(); + $shorteners = array(_('[none]') => array('freeService' => false)); + Event::handle('GetUrlShorteners', array(&$shorteners)); + $services = array(); foreach($shorteners as $name=>$value) { @@ -119,8 +121,22 @@ class OthersettingsAction extends AccountSettingsAction $this->elementEnd('li'); } $this->elementStart('li'); + $this->input('maxurllength', + _('URL longer than'), + (!is_null($this->arg('maxurllength'))) ? + $this->arg('maxurllength') : User_urlshortener_prefs::maxUrlLength($user), + _('URLs longer than this will be shortened.')); + $this->elementEnd('li'); + $this->elementStart('li'); + $this->input('maxnoticelength', + _('Text longer than'), + (!is_null($this->arg('maxnoticelength'))) ? + $this->arg('maxnoticelength') : User_urlshortener_prefs::maxNoticeLength($user), + _('URLs in notices longer than this will be shortened.')); + $this->elementEnd('li'); + $this->elementStart('li'); $this->checkbox('viewdesigns', _('View profile designs'), - $user->viewdesigns, _('Show or hide profile designs.')); + - $user->viewdesigns, _('Show or hide profile designs.')); $this->elementEnd('li'); $this->elementEnd('ul'); $this->submit('save', _('Save')); @@ -156,6 +172,18 @@ class OthersettingsAction extends AccountSettingsAction $viewdesigns = $this->boolean('viewdesigns'); + $maxurllength = $this->trimmed('maxurllength'); + + if (!Validate::number($maxurllength, array('min' => 0))) { + throw new ClientException(_('Invalid number for max url length.')); + } + + $maxnoticelength = $this->trimmed('maxnoticelength'); + + if (!Validate::number($maxnoticelength, array('min' => 0))) { + throw new ClientException(_('Invalid number for max notice length.')); + } + $user = common_current_user(); assert(!is_null($user)); // should already be checked @@ -175,6 +203,32 @@ class OthersettingsAction extends AccountSettingsAction return; } + $prefs = User_urlshortener_prefs::getPrefs($user); + $orig = null; + + if (empty($prefs)) { + $prefs = new User_urlshortener_prefs(); + + $prefs->user_id = $user->id; + $prefs->created = common_sql_now(); + } else { + $orig = clone($prefs); + } + + $prefs->urlshorteningservice = $urlshorteningservice; + $prefs->maxurllength = $maxurllength; + $prefs->maxnoticelength = $maxnoticelength; + + if (!empty($orig)) { + $result = $prefs->update($orig); + } else { + $result = $prefs->insert(); + } + + if (!$result) { + throw new ServerException(_('Error saving user URL shortening preferences.')); + } + $user->query('COMMIT'); $this->showForm(_('Preferences saved.'), true); diff --git a/actions/plugindisable.php b/actions/plugindisable.php new file mode 100644 index 000000000..7f107b333 --- /dev/null +++ b/actions/plugindisable.php @@ -0,0 +1,78 @@ +<?php +/** + * StatusNet - the distributed open-source microblogging tool + * Copyright (C) 2010, StatusNet, Inc. + * + * Plugin enable action. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + * PHP version 5 + * + * @category Action + * @package StatusNet + * @author Brion Vibber <brion@status.net> + * @copyright 2010 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPLv3 + * @link http://status.net/ + */ + +if (!defined('STATUSNET')) { + exit(1); +} + +/** + * Plugin enable action. + * + * (Re)-enables a plugin from the default plugins list. + * + * Takes parameters: + * + * - plugin: plugin name + * - token: session token to prevent CSRF attacks + * - ajax: boolean; whether to return Ajax or full-browser results + * + * Only works if the current user is logged in. + * + * @category Action + * @package StatusNet + * @author Brion Vibber <brion@status.net> + * @copyright 2010 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPLv3 + * @link http://status.net/ + */ + +class PluginDisableAction extends PluginEnableAction +{ + /** + * Value to save into $config['plugins']['disable-<name>'] + */ + protected function overrideValue() + { + return 1; + } + + protected function successShortTitle() + { + // TRANS: Page title for AJAX form return when a disabling a plugin. + return _m('plugin', 'Disabled'); + } + + protected function successNextForm() + { + return new EnablePluginForm($this, $this->plugin); + } +} + + diff --git a/actions/pluginenable.php b/actions/pluginenable.php new file mode 100644 index 000000000..2dbb3e395 --- /dev/null +++ b/actions/pluginenable.php @@ -0,0 +1,166 @@ +<?php +/** + * StatusNet - the distributed open-source microblogging tool + * Copyright (C) 2010, StatusNet, Inc. + * + * Plugin enable action. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + * PHP version 5 + * + * @category Action + * @package StatusNet + * @author Brion Vibber <brion@status.net> + * @copyright 2010 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPLv3 + * @link http://status.net/ + */ + +if (!defined('STATUSNET')) { + exit(1); +} + +/** + * Plugin enable action. + * + * (Re)-enables a plugin from the default plugins list. + * + * Takes parameters: + * + * - plugin: plugin name + * - token: session token to prevent CSRF attacks + * - ajax: boolean; whether to return Ajax or full-browser results + * + * Only works if the current user is logged in. + * + * @category Action + * @package StatusNet + * @author Brion Vibber <brion@status.net> + * @copyright 2010 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPLv3 + * @link http://status.net/ + */ + +class PluginEnableAction extends Action +{ + var $user; + var $plugin; + + /** + * Check pre-requisites and instantiate attributes + * + * @param Array $args array of arguments (URL, GET, POST) + * + * @return boolean success flag + */ + + function prepare($args) + { + parent::prepare($args); + + // @fixme these are pretty common, should a parent class factor these out? + + // Only allow POST requests + + if ($_SERVER['REQUEST_METHOD'] != 'POST') { + $this->clientError(_('This action only accepts POST requests.')); + return false; + } + + // CSRF protection + + $token = $this->trimmed('token'); + + if (!$token || $token != common_session_token()) { + $this->clientError(_('There was a problem with your session token.'. + ' Try again, please.')); + return false; + } + + // Only for logged-in users + + $this->user = common_current_user(); + + if (empty($this->user)) { + $this->clientError(_('Not logged in.')); + return false; + } + + if (!AdminPanelAction::canAdmin('plugins')) { + $this->clientError(_('You cannot administer plugins.')); + return false; + } + + $this->plugin = $this->arg('plugin'); + $defaultPlugins = common_config('plugins', 'default'); + if (!array_key_exists($this->plugin, $defaultPlugins)) { + $this->clientError(_('No such plugin.')); + return false; + } + + return true; + } + + /** + * Handle request + * + * Does the subscription and returns results. + * + * @param Array $args unused. + * + * @return void + */ + + function handle($args) + { + $key = 'disable-' . $this->plugin; + Config::save('plugins', $key, $this->overrideValue()); + + // @fixme this is a pretty common pattern and should be refactored down + if ($this->boolean('ajax')) { + $this->startHTML('text/xml;charset=utf-8'); + $this->elementStart('head'); + $this->element('title', null, $this->successShortTitle()); + $this->elementEnd('head'); + $this->elementStart('body'); + $form = $this->successNextForm(); + $form->show(); + $this->elementEnd('body'); + $this->elementEnd('html'); + } else { + $url = common_local_url('pluginsadminpanel'); + common_redirect($url, 303); + } + } + + /** + * Value to save into $config['plugins']['disable-<name>'] + */ + protected function overrideValue() + { + return 0; + } + + protected function successShortTitle() + { + // TRANS: Page title for AJAX form return when enabling a plugin. + return _m('plugin', 'Enabled'); + } + + protected function successNextForm() + { + return new DisablePluginForm($this, $this->plugin); + } +} diff --git a/actions/pluginsadminpanel.php b/actions/pluginsadminpanel.php new file mode 100644 index 000000000..bc400bd51 --- /dev/null +++ b/actions/pluginsadminpanel.php @@ -0,0 +1,110 @@ +<?php +/** + * StatusNet, the distributed open-source microblogging tool + * + * Plugins administration panel + * + * PHP version 5 + * + * LICENCE: This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + * @category Settings + * @package StatusNet + * @author Brion Vibber <brion@status.net> + * @copyright 2010 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://status.net/ + */ + +if (!defined('STATUSNET')) { + exit(1); +} + +/** + * Plugins settings + * + * @category Admin + * @package StatusNet + * @author Brion Vibber <brion@status.net> + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://status.net/ + */ + +class PluginsadminpanelAction extends AdminPanelAction +{ + + /** + * Returns the page title + * + * @return string page title + */ + + function title() + { + // TRANS: Tab and title for plugins admin panel. + return _('Plugins'); + } + + /** + * Instructions for using this form. + * + * @return string instructions + */ + + function getInstructions() + { + // TRANS: Instructions at top of plugin admin page. + return _('Additional plugins can be enabled and configured manually. ' . + 'See the <a href="http://status.net/wiki/Plugins">online plugin ' . + 'documentation</a> for more details.'); + } + + /** + * Show the plugins admin panel form + * + * @return void + */ + + function showForm() + { + $this->elementStart('fieldset', array('id' => 'settings_plugins_default')); + + // TRANS: Admin form section header + $this->element('legend', null, _('Default plugins'), 'default'); + + $this->showDefaultPlugins(); + + $this->elementEnd('fieldset'); + } + + /** + * Until we have a general plugin metadata infrastructure, for now + * we'll just list up the ones we know from the global default + * plugins list. + */ + protected function showDefaultPlugins() + { + $plugins = array_keys(common_config('plugins', 'default')); + natsort($plugins); + + if ($plugins) { + $list = new PluginList($plugins, $this); + $list->show(); + } else { + $this->element('p', null, + _('All default plugins have been disabled from the ' . + 'site\'s configuration file.')); + } + } +} diff --git a/actions/redirect.php b/actions/redirect.php new file mode 100644 index 000000000..9cb03708d --- /dev/null +++ b/actions/redirect.php @@ -0,0 +1,71 @@ +<?php +/** + * StatusNet, the distributed open-source microblogging tool + * + * Site access administration panel + * + * PHP version 5 + * + * LICENCE: This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + * @category Action + * @package StatusNet + * @author Craig Andrews <candrews@integralblue.com> + * @copyright 2010 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://status.net/ + */ + +if (!defined('STATUSNET')) { + exit(1); +} + +/** + * Administer site access settings + * + * @category Action + * @package StatusNet + * @author Craig Andrews <candrews@integralblue.com> + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://status.net/ + */ + +class RedirectAction extends Action +{ + /** + * These pages are read-only. + * + * @param array $args unused. + * + * @return boolean read-only flag (false) + */ + + function isReadOnly($args) + { + return true; + } + + /** + * Handle a request + * + * @param array $args array of arguments + * + * @return nothing + */ + function handle($args) + { + common_redirect(common_local_url($this->arg('nextAction'), $this->arg('args'))); + } +} + diff --git a/actions/shownotice.php b/actions/shownotice.php index 5fc863486..5b3ec93de 100644 --- a/actions/shownotice.php +++ b/actions/shownotice.php @@ -278,12 +278,6 @@ class ShownoticeAction extends OwnerDesignAction 'content' => $id->toString())); } - if ($user->jabbermicroid && $user->jabber && $this->notice->uri) { - $id = new Microid('xmpp:', $user->jabber, - $this->notice->uri); - $this->element('meta', array('name' => 'microid', - 'content' => $id->toString())); - } $this->element('link',array('rel'=>'alternate', 'type'=>'application/json+oembed', 'href'=>common_local_url( diff --git a/actions/showstream.php b/actions/showstream.php index be61a7ce0..8178dafb1 100644 --- a/actions/showstream.php +++ b/actions/showstream.php @@ -166,12 +166,6 @@ class ShowstreamAction extends ProfileAction $this->element('meta', array('name' => 'microid', 'content' => $id->toString())); } - if ($this->user->jabbermicroid && $this->user->jabber && $this->profile->profileurl) { - $id = new Microid('xmpp:'.$this->user->jabber, - $this->selfUrl()); - $this->element('meta', array('name' => 'microid', - 'content' => $id->toString())); - } // See https://wiki.mozilla.org/Microsummaries diff --git a/actions/subscriptions.php b/actions/subscriptions.php index 7b10b3425..da563a218 100644 --- a/actions/subscriptions.php +++ b/actions/subscriptions.php @@ -185,7 +185,9 @@ class SubscriptionsListItem extends SubscriptionListItem return; } - if (!common_config('xmpp', 'enabled') && !common_config('sms', 'enabled')) { + $transports = array(); + Event::handle('GetImTransports', array(&$transports)); + if (!$transports && !common_config('sms', 'enabled')) { return; } @@ -195,7 +197,7 @@ class SubscriptionsListItem extends SubscriptionListItem 'action' => common_local_url('subedit'))); $this->out->hidden('token', common_session_token()); $this->out->hidden('profile', $this->profile->id); - if (common_config('xmpp', 'enabled')) { + if ($transports) { $attrs = array('name' => 'jabber', 'type' => 'checkbox', 'class' => 'checkbox', @@ -205,7 +207,7 @@ class SubscriptionsListItem extends SubscriptionListItem } $this->out->element('input', $attrs); - $this->out->element('label', array('for' => 'jabber-'.$this->profile->id), _('Jabber')); + $this->out->element('label', array('for' => 'jabber-'.$this->profile->id), _('IM')); } else { $this->out->hidden('jabber', $sub->jabber); } |