forked from GNUsocial/gnu-social
Merge branch '0.9.x' of gitorious.org:statusnet/mainline into 1.0.x
Conflicts: actions/confirmaddress.php actions/othersettings.php
This commit is contained in:
commit
04ca706601
12
README
12
README
@ -3,7 +3,7 @@ README
|
||||
------
|
||||
|
||||
StatusNet 0.9.6 "Man on the Moon"
|
||||
25 October 2010 - RELEASE CANDIDATE
|
||||
29 October 2010
|
||||
|
||||
This is the README file for StatusNet, the Open Source microblogging
|
||||
platform. It includes installation instructions, descriptions of
|
||||
@ -122,6 +122,16 @@ Notable changes this version:
|
||||
- Header metadata on notice pages to aid in manual reposting on Facebook
|
||||
- Lots of little fixes...
|
||||
|
||||
Changes from 0.9.6 release candidate 1:
|
||||
- fix for broken group pages when logged out
|
||||
- fix for stuck ping queue entries when bad profile
|
||||
- fix for bogus single-user nickname config entry error
|
||||
- i18n updates
|
||||
- nofollow updates
|
||||
- SSL-only mode secure cookie fix
|
||||
- experimental ApiLogger plugin for usage data gathering
|
||||
- experimental follow-everyone plugin
|
||||
|
||||
A full changelog is available at http://status.net/wiki/StatusNet_0.9.6.
|
||||
|
||||
Prerequisites
|
||||
|
@ -42,7 +42,6 @@ require_once INSTALLDIR.'/lib/attachmentlist.php';
|
||||
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
|
||||
* @link http://status.net/
|
||||
*/
|
||||
|
||||
class AttachmentAction extends Action
|
||||
{
|
||||
/**
|
||||
@ -70,6 +69,7 @@ class AttachmentAction extends Action
|
||||
}
|
||||
|
||||
if (empty($this->attachment)) {
|
||||
// TRANS: Client error displayed trying to get a non-existing attachment.
|
||||
$this->clientError(_('No such attachment.'), 404);
|
||||
return false;
|
||||
}
|
||||
@ -81,7 +81,6 @@ class AttachmentAction extends Action
|
||||
*
|
||||
* @return boolean true
|
||||
*/
|
||||
|
||||
function isReadOnly($args)
|
||||
{
|
||||
return true;
|
||||
@ -129,7 +128,6 @@ class AttachmentAction extends Action
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
|
||||
function handle($args)
|
||||
{
|
||||
parent::handle($args);
|
||||
@ -150,7 +148,6 @@ class AttachmentAction extends Action
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
|
||||
function showLocalNavBlock()
|
||||
{
|
||||
}
|
||||
@ -162,7 +159,6 @@ class AttachmentAction extends Action
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
|
||||
function showContent()
|
||||
{
|
||||
$ali = new Attachment($this->attachment, $this);
|
||||
@ -174,7 +170,6 @@ class AttachmentAction extends Action
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
|
||||
function showPageNoticeBlock()
|
||||
{
|
||||
}
|
||||
@ -191,4 +186,3 @@ class AttachmentAction extends Action
|
||||
$atcs->show();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -42,7 +42,6 @@ require_once INSTALLDIR.'/actions/attachment.php';
|
||||
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
|
||||
* @link http://status.net/
|
||||
*/
|
||||
|
||||
class Attachment_ajaxAction extends AttachmentAction
|
||||
{
|
||||
/**
|
||||
@ -80,4 +79,3 @@ class Attachment_ajaxAction extends AttachmentAction
|
||||
$this->elementEnd('div');
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -42,10 +42,8 @@ require_once INSTALLDIR.'/actions/attachment.php';
|
||||
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
|
||||
* @link http://status.net/
|
||||
*/
|
||||
|
||||
class Attachment_thumbnailAction extends AttachmentAction
|
||||
{
|
||||
|
||||
function handle($args)
|
||||
{
|
||||
$this->showPage();
|
||||
@ -79,6 +77,4 @@ class Attachment_thumbnailAction extends AttachmentAction
|
||||
}
|
||||
$this->element('img', array('src' => $file_thumbnail->url, 'alt' => 'Thumbnail'));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
@ -48,7 +48,7 @@ class AvatarbynicknameAction extends Action
|
||||
* Class handler.
|
||||
*
|
||||
* @param array $args query arguments
|
||||
*
|
||||
*
|
||||
* @return boolean false if nickname or user isn't found
|
||||
*/
|
||||
function handle($args)
|
||||
@ -56,27 +56,32 @@ class AvatarbynicknameAction extends Action
|
||||
parent::handle($args);
|
||||
$nickname = $this->trimmed('nickname');
|
||||
if (!$nickname) {
|
||||
// TRANS: Client error displayed trying to get an avatar without providing a nickname.
|
||||
$this->clientError(_('No nickname.'));
|
||||
return;
|
||||
}
|
||||
$size = $this->trimmed('size');
|
||||
if (!$size) {
|
||||
// TRANS: Client error displayed trying to get an avatar without providing an avatar size.
|
||||
$this->clientError(_('No size.'));
|
||||
return;
|
||||
}
|
||||
$size = strtolower($size);
|
||||
if (!in_array($size, array('original', '96', '48', '24'))) {
|
||||
// TRANS: Client error displayed trying to get an avatar providing an invalid avatar size.
|
||||
$this->clientError(_('Invalid size.'));
|
||||
return;
|
||||
}
|
||||
|
||||
$user = User::staticGet('nickname', $nickname);
|
||||
if (!$user) {
|
||||
// TRANS: Client error displayed trying to get an avatar for a non-existing user.
|
||||
$this->clientError(_('No such user.'));
|
||||
return;
|
||||
}
|
||||
$profile = $user->getProfile();
|
||||
if (!$profile) {
|
||||
// TRANS: Client error displayed trying to get an avatar for a user without a profile.
|
||||
$this->clientError(_('User has no profile.'));
|
||||
return;
|
||||
}
|
||||
@ -103,4 +108,3 @@ class AvatarbynicknameAction extends Action
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -49,7 +49,6 @@ define('MAX_ORIGINAL', 480);
|
||||
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
|
||||
* @link http://status.net/
|
||||
*/
|
||||
|
||||
class AvatarsettingsAction extends AccountSettingsAction
|
||||
{
|
||||
var $mode = null;
|
||||
@ -61,9 +60,9 @@ class AvatarsettingsAction extends AccountSettingsAction
|
||||
*
|
||||
* @return string Title of the page
|
||||
*/
|
||||
|
||||
function title()
|
||||
{
|
||||
// TRANS: Title for avatar upload page.
|
||||
return _('Avatar');
|
||||
}
|
||||
|
||||
@ -72,10 +71,12 @@ class AvatarsettingsAction extends AccountSettingsAction
|
||||
*
|
||||
* @return instructions for use
|
||||
*/
|
||||
|
||||
function getInstructions()
|
||||
{
|
||||
return sprintf(_('You can upload your personal avatar. The maximum file size is %s.'), ImageFile::maxFileSize());
|
||||
// TRANS: Instruction for avatar upload page.
|
||||
// TRANS: %s is the maximum file size, for example "500b", "10kB" or "2MB".
|
||||
return sprintf(_('You can upload your personal avatar. The maximum file size is %s.'),
|
||||
ImageFile::maxFileSize());
|
||||
}
|
||||
|
||||
/**
|
||||
@ -103,6 +104,7 @@ class AvatarsettingsAction extends AccountSettingsAction
|
||||
|
||||
if (!$profile) {
|
||||
common_log_db_error($user, 'SELECT', __FILE__);
|
||||
// TRANS: Server error displayed in avatar upload page when no matching profile can be found for a user.
|
||||
$this->serverError(_('User without matching profile.'));
|
||||
return;
|
||||
}
|
||||
@ -116,14 +118,16 @@ class AvatarsettingsAction extends AccountSettingsAction
|
||||
'action' =>
|
||||
common_local_url('avatarsettings')));
|
||||
$this->elementStart('fieldset');
|
||||
// TRANS: Avatar upload page form legend.
|
||||
$this->element('legend', null, _('Avatar settings'));
|
||||
$this->hidden('token', common_session_token());
|
||||
|
||||
|
||||
if (Event::handle('StartAvatarFormData', array($this))) {
|
||||
$this->elementStart('ul', 'form_data');
|
||||
if ($original) {
|
||||
$this->elementStart('li', array('id' => 'avatar_original',
|
||||
'class' => 'avatar_view'));
|
||||
// TRANS: Header on avatar upload page for thumbnail of originally uploaded avatar (h2).
|
||||
$this->element('h2', null, _("Original"));
|
||||
$this->elementStart('div', array('id'=>'avatar_original_view'));
|
||||
$this->element('img', array('src' => $original->url,
|
||||
@ -139,6 +143,7 @@ class AvatarsettingsAction extends AccountSettingsAction
|
||||
if ($avatar) {
|
||||
$this->elementStart('li', array('id' => 'avatar_preview',
|
||||
'class' => 'avatar_view'));
|
||||
// TRANS: Header on avatar upload page for thumbnail of to be used rendition of uploaded avatar (h2).
|
||||
$this->element('h2', null, _("Preview"));
|
||||
$this->elementStart('div', array('id'=>'avatar_preview_view'));
|
||||
$this->element('img', array('src' => $original->url,
|
||||
@ -146,7 +151,8 @@ class AvatarsettingsAction extends AccountSettingsAction
|
||||
'height' => AVATAR_PROFILE_SIZE,
|
||||
'alt' => $user->nickname));
|
||||
$this->elementEnd('div');
|
||||
$this->submit('delete', _('Delete'));
|
||||
// TRANS: Button on avatar upload page to delete current avatar.
|
||||
$this->submit('delete', _m('BUTTON','Delete'));
|
||||
$this->elementEnd('li');
|
||||
}
|
||||
|
||||
@ -163,7 +169,8 @@ class AvatarsettingsAction extends AccountSettingsAction
|
||||
|
||||
$this->elementStart('ul', 'form_actions');
|
||||
$this->elementStart('li');
|
||||
$this->submit('upload', _('Upload'));
|
||||
// TRANS: Button on avatar upload page to upload an avatar.
|
||||
$this->submit('upload', _m('BUTTON','Upload'));
|
||||
$this->elementEnd('li');
|
||||
$this->elementEnd('ul');
|
||||
}
|
||||
@ -171,7 +178,6 @@ class AvatarsettingsAction extends AccountSettingsAction
|
||||
|
||||
$this->elementEnd('fieldset');
|
||||
$this->elementEnd('form');
|
||||
|
||||
}
|
||||
|
||||
function showCropForm()
|
||||
@ -182,6 +188,7 @@ class AvatarsettingsAction extends AccountSettingsAction
|
||||
|
||||
if (!$profile) {
|
||||
common_log_db_error($user, 'SELECT', __FILE__);
|
||||
// TRANS: Server error displayed in avatar upload page when no matching profile can be found for a user.
|
||||
$this->serverError(_('User without matching profile.'));
|
||||
return;
|
||||
}
|
||||
@ -194,6 +201,7 @@ class AvatarsettingsAction extends AccountSettingsAction
|
||||
'action' =>
|
||||
common_local_url('avatarsettings')));
|
||||
$this->elementStart('fieldset');
|
||||
// TRANS: Avatar upload page crop form legend.
|
||||
$this->element('legend', null, _('Avatar settings'));
|
||||
$this->hidden('token', common_session_token());
|
||||
|
||||
@ -202,6 +210,7 @@ class AvatarsettingsAction extends AccountSettingsAction
|
||||
$this->elementStart('li',
|
||||
array('id' => 'avatar_original',
|
||||
'class' => 'avatar_view'));
|
||||
// TRANS: Header on avatar upload crop form for thumbnail of originally uploaded avatar (h2).
|
||||
$this->element('h2', null, _("Original"));
|
||||
$this->elementStart('div', array('id'=>'avatar_original_view'));
|
||||
$this->element('img', array('src' => Avatar::url($this->filedata['filename']),
|
||||
@ -214,6 +223,7 @@ class AvatarsettingsAction extends AccountSettingsAction
|
||||
$this->elementStart('li',
|
||||
array('id' => 'avatar_preview',
|
||||
'class' => 'avatar_view'));
|
||||
// TRANS: Header on avatar upload crop form for thumbnail of to be used rendition of uploaded avatar (h2).
|
||||
$this->element('h2', null, _("Preview"));
|
||||
$this->elementStart('div', array('id'=>'avatar_preview_view'));
|
||||
$this->element('img', array('src' => Avatar::url($this->filedata['filename']),
|
||||
@ -228,13 +238,14 @@ class AvatarsettingsAction extends AccountSettingsAction
|
||||
'type' => 'hidden',
|
||||
'id' => $crop_info));
|
||||
}
|
||||
$this->submit('crop', _('Crop'));
|
||||
|
||||
// TRANS: Button on avatar upload crop form to confirm a selected crop as avatar.
|
||||
$this->submit('crop', _m('BUTTON','Crop'));
|
||||
|
||||
$this->elementEnd('li');
|
||||
$this->elementEnd('ul');
|
||||
$this->elementEnd('fieldset');
|
||||
$this->elementEnd('form');
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
@ -244,7 +255,6 @@ class AvatarsettingsAction extends AccountSettingsAction
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
|
||||
function handlePost()
|
||||
{
|
||||
// Workaround for PHP returning empty $_POST and $_FILES when POST
|
||||
@ -271,7 +281,7 @@ class AvatarsettingsAction extends AccountSettingsAction
|
||||
'Try again, please.'));
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
if (Event::handle('StartAvatarSaveForm', array($this))) {
|
||||
if ($this->arg('upload')) {
|
||||
$this->uploadAvatar();
|
||||
@ -280,6 +290,7 @@ class AvatarsettingsAction extends AccountSettingsAction
|
||||
} else if ($this->arg('delete')) {
|
||||
$this->deleteAvatar();
|
||||
} else {
|
||||
// TRANS: Unexpected validation error on avatar upload form.
|
||||
$this->showForm(_('Unexpected form submission.'));
|
||||
}
|
||||
Event::handle('EndAvatarSaveForm', array($this));
|
||||
@ -294,7 +305,6 @@ class AvatarsettingsAction extends AccountSettingsAction
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
|
||||
function uploadAvatar()
|
||||
{
|
||||
try {
|
||||
@ -304,6 +314,7 @@ class AvatarsettingsAction extends AccountSettingsAction
|
||||
return;
|
||||
}
|
||||
if ($imagefile === null) {
|
||||
// TRANS: Validation error on avatar upload form when no file was uploaded.
|
||||
$this->showForm(_('No file uploaded.'));
|
||||
return;
|
||||
}
|
||||
@ -331,6 +342,7 @@ class AvatarsettingsAction extends AccountSettingsAction
|
||||
|
||||
$this->mode = 'crop';
|
||||
|
||||
// TRANS: Avatar upload form unstruction after uploading a file.
|
||||
$this->showForm(_('Pick a square area of the image to be your avatar'),
|
||||
true);
|
||||
}
|
||||
@ -340,12 +352,12 @@ class AvatarsettingsAction extends AccountSettingsAction
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
|
||||
function cropAvatar()
|
||||
{
|
||||
$filedata = $_SESSION['FILEDATA'];
|
||||
|
||||
if (!$filedata) {
|
||||
// TRANS: Server error displayed if an avatar upload went wrong somehow server side.
|
||||
$this->serverError(_('Lost our file data.'));
|
||||
return;
|
||||
}
|
||||
@ -369,24 +381,25 @@ class AvatarsettingsAction extends AccountSettingsAction
|
||||
@unlink($filedata['filepath']);
|
||||
unset($_SESSION['FILEDATA']);
|
||||
$this->mode = 'upload';
|
||||
// TRANS: Success message for having updated a user avatar.
|
||||
$this->showForm(_('Avatar updated.'), true);
|
||||
common_broadcast_profile($profile);
|
||||
} else {
|
||||
// TRANS: Error displayed on the avatar upload page if the avatar could not be updated for an unknown reason.
|
||||
$this->showForm(_('Failed updating avatar.'));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get rid of the current avatar.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
|
||||
function deleteAvatar()
|
||||
{
|
||||
$user = common_current_user();
|
||||
$profile = $user->getProfile();
|
||||
|
||||
|
||||
$avatar = $profile->getOriginalAvatar();
|
||||
if($avatar) $avatar->delete();
|
||||
$avatar = $profile->getAvatar(AVATAR_PROFILE_SIZE);
|
||||
@ -396,6 +409,7 @@ class AvatarsettingsAction extends AccountSettingsAction
|
||||
$avatar = $profile->getAvatar(AVATAR_MINI_SIZE);
|
||||
if($avatar) $avatar->delete();
|
||||
|
||||
// TRANS: Success message for deleting a user avatar.
|
||||
$this->showForm(_('Avatar deleted.'), true);
|
||||
}
|
||||
|
||||
@ -416,7 +430,6 @@ class AvatarsettingsAction extends AccountSettingsAction
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
|
||||
function showScripts()
|
||||
{
|
||||
parent::showScripts();
|
||||
|
@ -42,7 +42,6 @@ if (!defined('STATUSNET') && !defined('LACONICA')) {
|
||||
* @license http://www.fsf.org/licensing/licenses/agpl.html AGPLv3
|
||||
* @link http://status.net/
|
||||
*/
|
||||
|
||||
class BlockAction extends ProfileFormAction
|
||||
{
|
||||
var $profile = null;
|
||||
@ -54,7 +53,6 @@ class BlockAction extends ProfileFormAction
|
||||
*
|
||||
* @return boolean success flag
|
||||
*/
|
||||
|
||||
function prepare($args)
|
||||
{
|
||||
if (!parent::prepare($args)) {
|
||||
@ -66,6 +64,7 @@ class BlockAction extends ProfileFormAction
|
||||
assert(!empty($cur)); // checked by parent
|
||||
|
||||
if ($cur->hasBlocked($this->profile)) {
|
||||
// TRANS: Client error displayed when blocking a user that has already been blocked.
|
||||
$this->clientError(_('You already blocked that user.'));
|
||||
return false;
|
||||
}
|
||||
@ -82,7 +81,6 @@ class BlockAction extends ProfileFormAction
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
|
||||
function handle($args)
|
||||
{
|
||||
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
|
||||
@ -104,6 +102,7 @@ class BlockAction extends ProfileFormAction
|
||||
}
|
||||
|
||||
function title() {
|
||||
// TRANS: Title for block user page.
|
||||
return _('Block user');
|
||||
}
|
||||
|
||||
@ -133,8 +132,10 @@ class BlockAction extends ProfileFormAction
|
||||
'action' => common_local_url('block')));
|
||||
$this->elementStart('fieldset');
|
||||
$this->hidden('token', common_session_token());
|
||||
// TRANS: Legend for block user form.
|
||||
$this->element('legend', _('Block user'));
|
||||
$this->element('p', null,
|
||||
// TRANS: Explanation of consequences when blocking a user on the block user page.
|
||||
_('Are you sure you want to block this user? '.
|
||||
'Afterwards, they will be unsubscribed from you, '.
|
||||
'unable to subscribe to you in the future, and '.
|
||||
@ -184,6 +185,7 @@ class BlockAction extends ProfileFormAction
|
||||
}
|
||||
|
||||
if (!$result) {
|
||||
// TRANS: Server error displayed when blocking a user fails.
|
||||
$this->serverError(_('Failed to save block information.'));
|
||||
return;
|
||||
}
|
||||
@ -199,7 +201,7 @@ class BlockAction extends ProfileFormAction
|
||||
* Override for form session token checks; on our first hit we're just
|
||||
* requesting confirmation, which doesn't need a token. We need to be
|
||||
* able to take regular GET requests from email!
|
||||
*
|
||||
*
|
||||
* @throws ClientException if token is bad on POST request or if we have
|
||||
* confirmation parameters which could trigger something.
|
||||
*/
|
||||
@ -216,7 +218,7 @@ class BlockAction extends ProfileFormAction
|
||||
/**
|
||||
* If we reached this form without returnto arguments, return to the
|
||||
* current user's subscription list.
|
||||
*
|
||||
*
|
||||
* @return string URL
|
||||
*/
|
||||
function defaultReturnTo()
|
||||
|
@ -40,7 +40,6 @@ if (!defined('STATUSNET') && !defined('LACONICA')) {
|
||||
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
|
||||
* @link http://status.net/
|
||||
*/
|
||||
|
||||
class BlockedfromgroupAction extends GroupDesignAction
|
||||
{
|
||||
var $page = null;
|
||||
@ -70,6 +69,7 @@ class BlockedfromgroupAction extends GroupDesignAction
|
||||
}
|
||||
|
||||
if (!$nickname) {
|
||||
// TRANS: Client error displayed when requesting a list of blocked users for a group without providing a group nickname.
|
||||
$this->clientError(_('No nickname.'), 404);
|
||||
return false;
|
||||
}
|
||||
@ -77,6 +77,7 @@ class BlockedfromgroupAction extends GroupDesignAction
|
||||
$local = Local_group::staticGet('nickname', $nickname);
|
||||
|
||||
if (!$local) {
|
||||
// TRANS: Client error displayed when requesting a list of blocked users for a non-local group.
|
||||
$this->clientError(_('No such group.'), 404);
|
||||
return false;
|
||||
}
|
||||
@ -84,6 +85,7 @@ class BlockedfromgroupAction extends GroupDesignAction
|
||||
$this->group = User_group::staticGet('id', $local->group_id);
|
||||
|
||||
if (!$this->group) {
|
||||
// TRANS: Client error displayed when requesting a list of blocked users for a non-existing group.
|
||||
$this->clientError(_('No such group.'), 404);
|
||||
return false;
|
||||
}
|
||||
@ -94,9 +96,13 @@ class BlockedfromgroupAction extends GroupDesignAction
|
||||
function title()
|
||||
{
|
||||
if ($this->page == 1) {
|
||||
// TRANS: Title for first page with list of users blocked from a group.
|
||||
// TRANS: %s is a group nickname.
|
||||
return sprintf(_('%s blocked profiles'),
|
||||
$this->group->nickname);
|
||||
} else {
|
||||
// TRANS: Title for any but the first page with list of users blocked from a group.
|
||||
// TRANS: %1$s is a group nickname, %2$d is a page number.
|
||||
return sprintf(_('%1$s blocked profiles, page %2$d'),
|
||||
$this->group->nickname,
|
||||
$this->page);
|
||||
@ -112,6 +118,7 @@ class BlockedfromgroupAction extends GroupDesignAction
|
||||
function showPageNotice()
|
||||
{
|
||||
$this->element('p', 'instructions',
|
||||
// TRANS: Instructions for list of users blocked from a group.
|
||||
_('A list of the users blocked from joining this group.'));
|
||||
}
|
||||
|
||||
@ -205,7 +212,6 @@ class GroupBlockListItem extends ProfileListItem
|
||||
*
|
||||
* @see UnblockForm
|
||||
*/
|
||||
|
||||
class GroupUnblockForm extends Form
|
||||
{
|
||||
/**
|
||||
@ -234,7 +240,6 @@ class GroupUnblockForm extends Form
|
||||
* @param User_group $group group to block user from
|
||||
* @param array $args return-to args
|
||||
*/
|
||||
|
||||
function __construct($out=null, $profile=null, $group=null, $args=null)
|
||||
{
|
||||
parent::__construct($out);
|
||||
@ -249,7 +254,6 @@ class GroupUnblockForm extends Form
|
||||
*
|
||||
* @return int ID of the form
|
||||
*/
|
||||
|
||||
function id()
|
||||
{
|
||||
// This should be unique for the page.
|
||||
@ -261,7 +265,6 @@ class GroupUnblockForm extends Form
|
||||
*
|
||||
* @return string class of the form
|
||||
*/
|
||||
|
||||
function formClass()
|
||||
{
|
||||
return 'form_group_unblock';
|
||||
@ -272,7 +275,6 @@ class GroupUnblockForm extends Form
|
||||
*
|
||||
* @return string URL of the action
|
||||
*/
|
||||
|
||||
function action()
|
||||
{
|
||||
return common_local_url('groupunblock');
|
||||
@ -285,6 +287,7 @@ class GroupUnblockForm extends Form
|
||||
*/
|
||||
function formLegend()
|
||||
{
|
||||
// TRANS: Form legend for unblocking a user from a group.
|
||||
$this->out->element('legend', null, _('Unblock user from group'));
|
||||
}
|
||||
|
||||
@ -293,7 +296,6 @@ class GroupUnblockForm extends Form
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
|
||||
function formData()
|
||||
{
|
||||
$this->out->hidden('unblockto-' . $this->profile->id,
|
||||
@ -314,9 +316,14 @@ class GroupUnblockForm extends Form
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
|
||||
function formActions()
|
||||
{
|
||||
$this->out->submit('submit', _('Unblock'), 'submit', null, _('Unblock this user'));
|
||||
$this->out->submit('submit',
|
||||
// TRANS: Button text for unblocking a user from a group.
|
||||
_m('BUTTON','Unblock'),
|
||||
'submit',
|
||||
null,
|
||||
// TRANS: Tooltip for button for unblocking a user from a group.
|
||||
_('Unblock this user'));
|
||||
}
|
||||
}
|
||||
|
@ -34,7 +34,7 @@ if (!defined('STATUSNET') && !defined('LACONICA')) {
|
||||
require_once INSTALLDIR . '/actions/newnotice.php';
|
||||
|
||||
/**
|
||||
* Action for posting a notice
|
||||
* Action for posting a notice
|
||||
*
|
||||
* @category Bookmarklet
|
||||
* @package StatusNet
|
||||
@ -42,12 +42,12 @@ require_once INSTALLDIR . '/actions/newnotice.php';
|
||||
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
|
||||
* @link http://status.net/
|
||||
*/
|
||||
|
||||
class BookmarkletAction extends NewnoticeAction
|
||||
{
|
||||
function showTitle()
|
||||
{
|
||||
// TRANS: Title for mini-posting window loaded from bookmarklet.
|
||||
// TRANS: %s is the StatusNet site name.
|
||||
$this->element('title', null, sprintf(_('Post to %s'), common_config('site', 'name')));
|
||||
}
|
||||
|
||||
@ -73,4 +73,3 @@ class BookmarkletAction extends NewnoticeAction
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -44,7 +44,6 @@ if (!defined('STATUSNET') && !defined('LACONICA')) {
|
||||
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
|
||||
* @link http://status.net/
|
||||
*/
|
||||
|
||||
class ConfirmaddressAction extends Action
|
||||
{
|
||||
/** type of confirmation. */
|
||||
@ -61,7 +60,6 @@ class ConfirmaddressAction extends Action
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
|
||||
function handle($args)
|
||||
{
|
||||
parent::handle($args);
|
||||
@ -72,16 +70,19 @@ class ConfirmaddressAction extends Action
|
||||
}
|
||||
$code = $this->trimmed('code');
|
||||
if (!$code) {
|
||||
// TRANS: Client error displayed when not providing a confirmation code in the contact address confirmation action.
|
||||
$this->clientError(_('No confirmation code.'));
|
||||
return;
|
||||
}
|
||||
$confirm = Confirm_address::staticGet('code', $code);
|
||||
if (!$confirm) {
|
||||
// TRANS: Client error displayed when providing a non-existing confirmation code in the contact address confirmation action.
|
||||
$this->clientError(_('Confirmation code not found.'));
|
||||
return;
|
||||
}
|
||||
$cur = common_current_user();
|
||||
if ($cur->id != $confirm->user_id) {
|
||||
// TRANS: Client error displayed when not providing a confirmation code for another user in the contact address confirmation action.
|
||||
$this->clientError(_('That confirmation code is not for you!'));
|
||||
return;
|
||||
}
|
||||
@ -98,6 +99,7 @@ class ConfirmaddressAction extends Action
|
||||
if (in_array($type, array('email', 'sms')))
|
||||
{
|
||||
if ($cur->$type == $confirm->address) {
|
||||
// TRANS: Client error for an already confirmed email/jabber/sms address.
|
||||
$this->clientError(_('That address has already been confirmed.'));
|
||||
return;
|
||||
}
|
||||
@ -162,7 +164,9 @@ class ConfirmaddressAction extends Action
|
||||
|
||||
if (!$result) {
|
||||
common_log_db_error($confirm, 'DELETE', __FILE__);
|
||||
$this->serverError(_('Couldn\'t delete email confirmation.'));
|
||||
// TRANS: Server error displayed when an address confirmation code deletion from the
|
||||
// TRANS: database fails in the contact address confirmation action.
|
||||
$this->serverError(_('Could not delete address confirmation.'));
|
||||
return;
|
||||
}
|
||||
|
||||
@ -175,9 +179,9 @@ class ConfirmaddressAction extends Action
|
||||
*
|
||||
* @return string title
|
||||
*/
|
||||
|
||||
function title()
|
||||
{
|
||||
// TRANS: Title for the contact address confirmation action.
|
||||
return _('Confirm address');
|
||||
}
|
||||
|
||||
@ -186,12 +190,13 @@ class ConfirmaddressAction extends Action
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
|
||||
function showContent()
|
||||
{
|
||||
$cur = common_current_user();
|
||||
|
||||
$this->element('p', null,
|
||||
// TRANS: Success message for the contact address confirmation action.
|
||||
// TRANS: %s can be 'email', 'jabber', or 'sms'.
|
||||
sprintf(_('The address "%s" has been '.
|
||||
'confirmed for your account.'),
|
||||
$this->address));
|
||||
|
@ -45,7 +45,6 @@ require_once INSTALLDIR.'/lib/noticelist.php';
|
||||
* @license http://www.fsf.org/licensing/licenses/agpl.html AGPLv3
|
||||
* @link http://status.net/
|
||||
*/
|
||||
|
||||
class ConversationAction extends Action
|
||||
{
|
||||
var $id = null;
|
||||
@ -58,7 +57,6 @@ class ConversationAction extends Action
|
||||
*
|
||||
* @return boolean false if id not passed in
|
||||
*/
|
||||
|
||||
function prepare($args)
|
||||
{
|
||||
parent::prepare($args);
|
||||
@ -81,7 +79,6 @@ class ConversationAction extends Action
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
|
||||
function handle($args)
|
||||
{
|
||||
parent::handle($args);
|
||||
@ -93,10 +90,10 @@ class ConversationAction extends Action
|
||||
*
|
||||
* @return string page title
|
||||
*/
|
||||
|
||||
function title()
|
||||
{
|
||||
return _("Conversation");
|
||||
// TRANS: Title for page with a conversion (multiple notices in context).
|
||||
return _('Conversation');
|
||||
}
|
||||
|
||||
/**
|
||||
@ -107,7 +104,6 @@ class ConversationAction extends Action
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
|
||||
function showContent()
|
||||
{
|
||||
$notices = Notice::conversationStream($this->id, null, null);
|
||||
@ -134,7 +130,6 @@ class ConversationAction extends Action
|
||||
* @license http://www.fsf.org/licensing/licenses/agpl.html AGPLv3
|
||||
* @link http://status.net/
|
||||
*/
|
||||
|
||||
class ConversationTree extends NoticeList
|
||||
{
|
||||
var $tree = null;
|
||||
@ -145,12 +140,12 @@ class ConversationTree extends NoticeList
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
|
||||
function show()
|
||||
{
|
||||
$cnt = $this->_buildTree();
|
||||
|
||||
$this->out->elementStart('div', array('id' =>'notices_primary'));
|
||||
// TRANS: Header on conversation page. Hidden by default (h2).
|
||||
$this->out->element('h2', null, _('Notices'));
|
||||
$this->out->elementStart('ol', array('class' => 'notices xoxo'));
|
||||
|
||||
@ -200,7 +195,6 @@ class ConversationTree extends NoticeList
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
|
||||
function showNoticePlus($id)
|
||||
{
|
||||
$notice = $this->table[$id];
|
||||
@ -237,7 +231,6 @@ class ConversationTree extends NoticeList
|
||||
*
|
||||
* @return NoticeListItem a list item to show
|
||||
*/
|
||||
|
||||
function newListItem($notice)
|
||||
{
|
||||
return new ConversationTreeItem($notice, $this->out);
|
||||
@ -255,7 +248,6 @@ class ConversationTree extends NoticeList
|
||||
* @license http://www.fsf.org/licensing/licenses/agpl.html AGPLv3
|
||||
* @link http://status.net/
|
||||
*/
|
||||
|
||||
class ConversationTreeItem extends NoticeListItem
|
||||
{
|
||||
/**
|
||||
@ -266,7 +258,6 @@ class ConversationTreeItem extends NoticeListItem
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
|
||||
function showStart()
|
||||
{
|
||||
return;
|
||||
@ -280,7 +271,6 @@ class ConversationTreeItem extends NoticeListItem
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
|
||||
function showEnd()
|
||||
{
|
||||
return;
|
||||
@ -293,7 +283,6 @@ class ConversationTreeItem extends NoticeListItem
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
|
||||
function showContext()
|
||||
{
|
||||
return;
|
||||
|
@ -40,7 +40,6 @@ if (!defined('STATUSNET') && !defined('LACONICA')) {
|
||||
* @license http://www.fsf.org/licensing/licenses/agpl.html AGPLv3
|
||||
* @link http://status.net/
|
||||
*/
|
||||
|
||||
class DeleteapplicationAction extends Action
|
||||
{
|
||||
var $app = null;
|
||||
@ -52,7 +51,6 @@ class DeleteapplicationAction extends Action
|
||||
*
|
||||
* @return boolean success flag
|
||||
*/
|
||||
|
||||
function prepare($args)
|
||||
{
|
||||
if (!parent::prepare($args)) {
|
||||
@ -60,6 +58,7 @@ class DeleteapplicationAction extends Action
|
||||
}
|
||||
|
||||
if (!common_logged_in()) {
|
||||
// TRANS: Client error displayed trying to delete an application while not logged in.
|
||||
$this->clientError(_('You must be logged in to delete an application.'));
|
||||
return false;
|
||||
}
|
||||
@ -68,6 +67,7 @@ class DeleteapplicationAction extends Action
|
||||
$this->app = Oauth_application::staticGet('id', $id);
|
||||
|
||||
if (empty($this->app)) {
|
||||
// TRANS: Client error displayed trying to delete an application that does not exist.
|
||||
$this->clientError(_('Application not found.'));
|
||||
return false;
|
||||
}
|
||||
@ -75,6 +75,7 @@ class DeleteapplicationAction extends Action
|
||||
$cur = common_current_user();
|
||||
|
||||
if ($cur->id != $this->app->owner) {
|
||||
// TRANS: Client error displayed trying to delete an application the current user does not own.
|
||||
$this->clientError(_('You are not the owner of this application.'), 401);
|
||||
return false;
|
||||
}
|
||||
@ -91,7 +92,6 @@ class DeleteapplicationAction extends Action
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
|
||||
function handle($args)
|
||||
{
|
||||
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
|
||||
@ -120,6 +120,7 @@ class DeleteapplicationAction extends Action
|
||||
}
|
||||
|
||||
function title() {
|
||||
// TRANS: Title for delete application page.
|
||||
return _('Delete application');
|
||||
}
|
||||
|
||||
@ -144,8 +145,10 @@ class DeleteapplicationAction extends Action
|
||||
array('id' => $this->app->id))));
|
||||
$this->elementStart('fieldset');
|
||||
$this->hidden('token', common_session_token());
|
||||
// TRANS: Fieldset legend on delete application page.
|
||||
$this->element('legend', _('Delete application'));
|
||||
$this->element('p', null,
|
||||
// TRANS: Confirmation text on delete application page.
|
||||
_('Are you sure you want to delete this application? '.
|
||||
'This will clear all data about the application from the '.
|
||||
'database, including all existing user connections.'));
|
||||
@ -171,10 +174,8 @@ class DeleteapplicationAction extends Action
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
|
||||
function handlePost()
|
||||
{
|
||||
$this->app->delete();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -172,7 +172,7 @@ class DeletegroupAction extends RedirectingAction
|
||||
}
|
||||
|
||||
function title() {
|
||||
// TRANS: Title.
|
||||
// TRANS: Title of delete group page.
|
||||
return _('Delete group');
|
||||
}
|
||||
|
||||
@ -201,8 +201,8 @@ class DeletegroupAction extends RedirectingAction
|
||||
// TRANS: Form legend for deleting a group.
|
||||
$this->element('legend', _('Delete group'));
|
||||
if (Event::handle('StartDeleteGroupForm', array($this, $this->group))) {
|
||||
// TRANS: Warning in form for deleleting a group.
|
||||
$this->element('p', null,
|
||||
// TRANS: Warning in form for deleleting a group.
|
||||
_('Are you sure you want to delete this group? '.
|
||||
'This will clear all data about the group from the '.
|
||||
'database, without a backup. ' .
|
||||
|
@ -32,6 +32,7 @@ if (!defined('STATUSNET') && !defined('LACONICA')) {
|
||||
exit(1);
|
||||
}
|
||||
|
||||
// @todo FIXME: documentation needed.
|
||||
class DeletenoticeAction extends Action
|
||||
{
|
||||
var $error = null;
|
||||
@ -47,6 +48,7 @@ class DeletenoticeAction extends Action
|
||||
$this->user = common_current_user();
|
||||
|
||||
if (!$this->user) {
|
||||
// TRANS: Error message displayed trying to delete a notice while not logged in.
|
||||
common_user_error(_('Not logged in.'));
|
||||
exit;
|
||||
}
|
||||
@ -55,6 +57,7 @@ class DeletenoticeAction extends Action
|
||||
$this->notice = Notice::staticGet($notice_id);
|
||||
|
||||
if (!$this->notice) {
|
||||
// TRANS: Error message displayed trying to delete a non-existing notice.
|
||||
common_user_error(_('No such notice.'));
|
||||
exit;
|
||||
}
|
||||
@ -71,6 +74,7 @@ class DeletenoticeAction extends Action
|
||||
|
||||
if ($this->notice->profile_id != $this->user_profile->id &&
|
||||
!$this->user->hasRight(Right::DELETEOTHERSNOTICE)) {
|
||||
// TRANS: Error message displayed trying to delete a notice that was not made by the current user.
|
||||
common_user_error(_('Can\'t delete this notice.'));
|
||||
exit;
|
||||
}
|
||||
@ -90,7 +94,6 @@ class DeletenoticeAction extends Action
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
|
||||
function showPageNotice()
|
||||
{
|
||||
$instr = $this->getInstructions();
|
||||
@ -103,12 +106,14 @@ class DeletenoticeAction extends Action
|
||||
|
||||
function getInstructions()
|
||||
{
|
||||
// TRANS: Instructions for deleting a notice.
|
||||
return _('You are about to permanently delete a notice. ' .
|
||||
'Once this is done, it cannot be undone.');
|
||||
}
|
||||
|
||||
function title()
|
||||
{
|
||||
// TRANS: Page title when deleting a notice.
|
||||
return _('Delete notice');
|
||||
}
|
||||
|
||||
@ -121,7 +126,6 @@ class DeletenoticeAction extends Action
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
|
||||
function showForm($error = null)
|
||||
{
|
||||
$this->error = $error;
|
||||
@ -133,7 +137,6 @@ class DeletenoticeAction extends Action
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
|
||||
function showContent()
|
||||
{
|
||||
$this->elementStart('form', array('id' => 'form_notice_delete',
|
||||
@ -141,9 +144,11 @@ class DeletenoticeAction extends Action
|
||||
'method' => 'post',
|
||||
'action' => common_local_url('deletenotice')));
|
||||
$this->elementStart('fieldset');
|
||||
// TRANS: Fieldset legend for the delete notice form.
|
||||
$this->element('legend', null, _('Delete notice'));
|
||||
$this->hidden('token', common_session_token());
|
||||
$this->hidden('notice', $this->trimmed('notice'));
|
||||
// TRANS: Message for the delete notice form.
|
||||
$this->element('p', null, _('Are you sure you want to delete this notice?'));
|
||||
$this->submit('form_action-no',
|
||||
// TRANS: Button label on the delete notice form.
|
||||
|
@ -185,7 +185,7 @@ class EditApplicationAction extends OwnerDesignAction
|
||||
return;
|
||||
} elseif (mb_strlen($name) > 255) {
|
||||
// TRANS: Validation error shown when providing too long a name in the "Edit application" form.
|
||||
$this->showForm(_('Name is too long (max 255 characters).'));
|
||||
$this->showForm(_('Name is too long (maximum 255 characters).'));
|
||||
return;
|
||||
} else if ($this->nameExists($name)) {
|
||||
// TRANS: Validation error shown when providing a name for an application that already exists in the "Edit application" form.
|
||||
|
@ -45,14 +45,13 @@ if (!defined('STATUSNET') && !defined('LACONICA')) {
|
||||
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
|
||||
* @link http://status.net/
|
||||
*/
|
||||
|
||||
class EditgroupAction extends GroupDesignAction
|
||||
{
|
||||
|
||||
var $msg;
|
||||
|
||||
function title()
|
||||
{
|
||||
// TRANS: Title for form to edit a group. %s is a group nickname.
|
||||
return sprintf(_('Edit %s group'), $this->group->nickname);
|
||||
}
|
||||
|
||||
@ -65,6 +64,7 @@ class EditgroupAction extends GroupDesignAction
|
||||
parent::prepare($args);
|
||||
|
||||
if (!common_logged_in()) {
|
||||
// TRANS: Client error displayed trying to edit a group while not logged in.
|
||||
$this->clientError(_('You must be logged in to create a group.'));
|
||||
return false;
|
||||
}
|
||||
@ -81,6 +81,7 @@ class EditgroupAction extends GroupDesignAction
|
||||
}
|
||||
|
||||
if (!$nickname) {
|
||||
// TRANS: Client error displayed trying to edit a group while not proving a nickname for the group to edit.
|
||||
$this->clientError(_('No nickname.'), 404);
|
||||
return false;
|
||||
}
|
||||
@ -97,6 +98,7 @@ class EditgroupAction extends GroupDesignAction
|
||||
}
|
||||
|
||||
if (!$this->group) {
|
||||
// TRANS: Client error displayed trying to edit a non-existing group.
|
||||
$this->clientError(_('No such group.'), 404);
|
||||
return false;
|
||||
}
|
||||
@ -104,6 +106,7 @@ class EditgroupAction extends GroupDesignAction
|
||||
$cur = common_current_user();
|
||||
|
||||
if (!$cur->isAdmin($this->group)) {
|
||||
// TRANS: Client error displayed trying to edit a group while not being a group admin.
|
||||
$this->clientError(_('You must be an admin to edit the group.'), 403);
|
||||
return false;
|
||||
}
|
||||
@ -120,7 +123,6 @@ class EditgroupAction extends GroupDesignAction
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
|
||||
function handle($args)
|
||||
{
|
||||
parent::handle($args);
|
||||
@ -155,6 +157,7 @@ class EditgroupAction extends GroupDesignAction
|
||||
$this->element('p', 'error', $this->msg);
|
||||
} else {
|
||||
$this->element('p', 'instructions',
|
||||
// TRANS: Form instructions for group edit form.
|
||||
_('Use this form to edit the group.'));
|
||||
}
|
||||
}
|
||||
@ -169,6 +172,7 @@ class EditgroupAction extends GroupDesignAction
|
||||
{
|
||||
$cur = common_current_user();
|
||||
if (!$cur->isAdmin($this->group)) {
|
||||
// TRANS: Client error displayed trying to edit a group while not being a group admin.
|
||||
$this->clientError(_('You must be an admin to edit the group.'), 403);
|
||||
return;
|
||||
}
|
||||
@ -183,28 +187,39 @@ class EditgroupAction extends GroupDesignAction
|
||||
if (!Validate::string($nickname, array('min_length' => 1,
|
||||
'max_length' => 64,
|
||||
'format' => NICKNAME_FMT))) {
|
||||
// TRANS: Group edit form validation error.
|
||||
$this->showForm(_('Nickname must have only lowercase letters '.
|
||||
'and numbers and no spaces.'));
|
||||
return;
|
||||
} else if ($this->nicknameExists($nickname)) {
|
||||
// TRANS: Group edit form validation error.
|
||||
$this->showForm(_('Nickname already in use. Try another one.'));
|
||||
return;
|
||||
} else if (!User_group::allowedNickname($nickname)) {
|
||||
// TRANS: Group edit form validation error.
|
||||
$this->showForm(_('Not a valid nickname.'));
|
||||
return;
|
||||
} else if (!is_null($homepage) && (strlen($homepage) > 0) &&
|
||||
!Validate::uri($homepage,
|
||||
array('allowed_schemes' =>
|
||||
array('http', 'https')))) {
|
||||
// TRANS: Group edit form validation error.
|
||||
$this->showForm(_('Homepage is not a valid URL.'));
|
||||
return;
|
||||
} else if (!is_null($fullname) && mb_strlen($fullname) > 255) {
|
||||
// TRANS: Group edit form validation error.
|
||||
$this->showForm(_('Full name is too long (maximum 255 characters).'));
|
||||
return;
|
||||
} else if (User_group::descriptionTooLong($description)) {
|
||||
$this->showForm(sprintf(_('Description is too long (max %d chars).'), User_group::maxDescription()));
|
||||
$this->showForm(sprintf(
|
||||
// TRANS: Group edit form validation error.
|
||||
_m('Description is too long (maximum %d character).',
|
||||
'Description is too long (maximum %d characters).',
|
||||
User_group::maxDescription()),
|
||||
User_group::maxDescription()));
|
||||
return;
|
||||
} else if (!is_null($location) && mb_strlen($location) > 255) {
|
||||
// TRANS: Group edit form validation error.
|
||||
$this->showForm(_('Location is too long (maximum 255 characters).'));
|
||||
return;
|
||||
}
|
||||
@ -216,7 +231,11 @@ class EditgroupAction extends GroupDesignAction
|
||||
}
|
||||
|
||||
if (count($aliases) > common_config('group', 'maxaliases')) {
|
||||
$this->showForm(sprintf(_('Too many aliases! Maximum %d.'),
|
||||
// TRANS: Group edit form validation error.
|
||||
// TRANS: %d is the maximum number of allowed aliases.
|
||||
$this->showForm(sprintf(_m('Too many aliases! Maximum %d allowed.',
|
||||
'Too many aliases! Maximum %d allowed.',
|
||||
common_config('group', 'maxaliases')),
|
||||
common_config('group', 'maxaliases')));
|
||||
return;
|
||||
}
|
||||
@ -225,16 +244,19 @@ class EditgroupAction extends GroupDesignAction
|
||||
if (!Validate::string($alias, array('min_length' => 1,
|
||||
'max_length' => 64,
|
||||
'format' => NICKNAME_FMT))) {
|
||||
// TRANS: Group edit form validation error.
|
||||
$this->showForm(sprintf(_('Invalid alias: "%s"'), $alias));
|
||||
return;
|
||||
}
|
||||
if ($this->nicknameExists($alias)) {
|
||||
// TRANS: Group edit form validation error.
|
||||
$this->showForm(sprintf(_('Alias "%s" already in use. Try another one.'),
|
||||
$alias));
|
||||
return;
|
||||
}
|
||||
// XXX assumes alphanum nicknames
|
||||
if (strcmp($alias, $nickname) == 0) {
|
||||
// TRANS: Group edit form validation error.
|
||||
$this->showForm(_('Alias can\'t be the same as nickname.'));
|
||||
return;
|
||||
}
|
||||
@ -255,12 +277,14 @@ class EditgroupAction extends GroupDesignAction
|
||||
|
||||
if (!$result) {
|
||||
common_log_db_error($this->group, 'UPDATE', __FILE__);
|
||||
// TRANS: Server error displayed when editing a group fails.
|
||||
$this->serverError(_('Could not update group.'));
|
||||
}
|
||||
|
||||
$result = $this->group->setAliases($aliases);
|
||||
|
||||
if (!$result) {
|
||||
// TRANS: Server error displayed when group aliases could not be added.
|
||||
$this->serverError(_('Could not create aliases.'));
|
||||
}
|
||||
|
||||
@ -277,6 +301,7 @@ class EditgroupAction extends GroupDesignAction
|
||||
array('nickname' => $nickname)),
|
||||
303);
|
||||
} else {
|
||||
// TRANS: Group edit form success message.
|
||||
$this->showForm(_('Options saved.'));
|
||||
}
|
||||
}
|
||||
@ -300,4 +325,3 @@ class EditgroupAction extends GroupDesignAction
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -32,7 +32,7 @@ if (!defined('STATUSNET') && !defined('LACONICA')) {
|
||||
}
|
||||
|
||||
/**
|
||||
* Unlock a user from a group
|
||||
* Unblock a user from a group
|
||||
*
|
||||
* @category Action
|
||||
* @package StatusNet
|
||||
@ -40,7 +40,6 @@ if (!defined('STATUSNET') && !defined('LACONICA')) {
|
||||
* @license http://www.fsf.org/licensing/licenses/agpl.html AGPLv3
|
||||
* @link http://status.net/
|
||||
*/
|
||||
|
||||
class GroupunblockAction extends Action
|
||||
{
|
||||
var $profile = null;
|
||||
@ -53,11 +52,11 @@ class GroupunblockAction extends Action
|
||||
*
|
||||
* @return boolean success flag
|
||||
*/
|
||||
|
||||
function prepare($args)
|
||||
{
|
||||
parent::prepare($args);
|
||||
if (!common_logged_in()) {
|
||||
// TRANS: Client error displayed when trying to unblock a user from a group while not logged in.
|
||||
$this->clientError(_('Not logged in.'));
|
||||
return false;
|
||||
}
|
||||
@ -68,11 +67,13 @@ class GroupunblockAction extends Action
|
||||
}
|
||||
$id = $this->trimmed('unblockto');
|
||||
if (empty($id)) {
|
||||
// TRANS: Client error displayed when trying to unblock a user from a group without providing a profile.
|
||||
$this->clientError(_('No profile specified.'));
|
||||
return false;
|
||||
}
|
||||
$this->profile = Profile::staticGet('id', $id);
|
||||
if (empty($this->profile)) {
|
||||
// TRANS: Client error displayed when trying to unblock a user from a group without providing an existing profile.
|
||||
$this->clientError(_('No profile with that ID.'));
|
||||
return false;
|
||||
}
|
||||
@ -83,15 +84,18 @@ class GroupunblockAction extends Action
|
||||
}
|
||||
$this->group = User_group::staticGet('id', $group_id);
|
||||
if (empty($this->group)) {
|
||||
// TRANS: Client error displayed when trying to unblock a user from a non-existing group.
|
||||
$this->clientError(_('No such group.'));
|
||||
return false;
|
||||
}
|
||||
$user = common_current_user();
|
||||
if (!$user->isAdmin($this->group)) {
|
||||
// TRANS: Client error displayed when trying to unblock a user from a group without being an administrator for the group.
|
||||
$this->clientError(_('Only an admin can unblock group members.'), 401);
|
||||
return false;
|
||||
}
|
||||
if (!Group_block::isBlocked($this->group, $this->profile)) {
|
||||
// TRANS: Client error displayed when trying to unblock a non-blocked user from a group.
|
||||
$this->clientError(_('User is not blocked from group.'));
|
||||
return false;
|
||||
}
|
||||
@ -105,7 +109,6 @@ class GroupunblockAction extends Action
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
|
||||
function handle($args)
|
||||
{
|
||||
parent::handle($args);
|
||||
@ -119,12 +122,12 @@ class GroupunblockAction extends Action
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
|
||||
function unblockProfile()
|
||||
{
|
||||
$result = Group_block::unblockProfile($this->group, $this->profile);
|
||||
|
||||
if (!$result) {
|
||||
// TRANS: Server error displayed when unblocking a user from a group fails because of an unknown error.
|
||||
$this->serverError(_('Error removing the block.'));
|
||||
return;
|
||||
}
|
||||
@ -146,4 +149,3 @@ class GroupunblockAction extends Action
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -153,7 +153,7 @@ class LicenseadminpanelAction extends AdminPanelAction
|
||||
// Make sure the license title is not too long
|
||||
if (mb_strlen($values['license']['type']) > 255) {
|
||||
$this->clientError(
|
||||
_("Invalid license title. Max length is 255 characters.")
|
||||
_('Invalid license title. Maximum length is 255 characters.')
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -166,7 +166,7 @@ class NewApplicationAction extends OwnerDesignAction
|
||||
$this->showForm(_('Name already in use. Try another one.'));
|
||||
return;
|
||||
} elseif (mb_strlen($name) > 255) {
|
||||
$this->showForm(_('Name is too long (maximum 255 chars).'));
|
||||
$this->showForm(_('Name is too long (maximum 255 characters).'));
|
||||
return;
|
||||
} elseif (empty($description)) {
|
||||
$this->showForm(_('Description is required.'));
|
||||
@ -196,7 +196,7 @@ class NewApplicationAction extends OwnerDesignAction
|
||||
$this->showForm(_('Organization is required.'));
|
||||
return;
|
||||
} elseif (mb_strlen($organization) > 255) {
|
||||
$this->showForm(_('Organization is too long (maximum 255 chars).'));
|
||||
$this->showForm(_('Organization is too long (maximum 255 characters).'));
|
||||
return;
|
||||
} elseif (empty($homepage)) {
|
||||
$this->showForm(_('Organization homepage is required.'));
|
||||
|
@ -43,25 +43,25 @@ if (!defined('STATUSNET') && !defined('LACONICA')) {
|
||||
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
|
||||
* @link http://status.net/
|
||||
*/
|
||||
|
||||
class NewgroupAction extends Action
|
||||
{
|
||||
var $msg;
|
||||
|
||||
function title()
|
||||
{
|
||||
// TRANS: Title for form to create a group.
|
||||
return _('New group');
|
||||
}
|
||||
|
||||
/**
|
||||
* Prepare to run
|
||||
*/
|
||||
|
||||
function prepare($args)
|
||||
{
|
||||
parent::prepare($args);
|
||||
|
||||
if (!common_logged_in()) {
|
||||
// TRANS: Client error displayed trying to create a group while not logged in.
|
||||
$this->clientError(_('You must be logged in to create a group.'));
|
||||
return false;
|
||||
}
|
||||
@ -78,7 +78,6 @@ class NewgroupAction extends Action
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
|
||||
function handle($args)
|
||||
{
|
||||
parent::handle($args);
|
||||
@ -107,6 +106,7 @@ class NewgroupAction extends Action
|
||||
$this->element('p', 'error', $this->msg);
|
||||
} else {
|
||||
$this->element('p', 'instructions',
|
||||
// TRANS: Form instructions for group create form.
|
||||
_('Use this form to create a new group.'));
|
||||
}
|
||||
}
|
||||
@ -123,33 +123,39 @@ class NewgroupAction extends Action
|
||||
if (!Validate::string($nickname, array('min_length' => 1,
|
||||
'max_length' => 64,
|
||||
'format' => NICKNAME_FMT))) {
|
||||
// TRANS: Group create form validation error.
|
||||
$this->showForm(_('Nickname must have only lowercase letters '.
|
||||
'and numbers and no spaces.'));
|
||||
return;
|
||||
} else if ($this->nicknameExists($nickname)) {
|
||||
// TRANS: Group create form validation error.
|
||||
$this->showForm(_('Nickname already in use. Try another one.'));
|
||||
return;
|
||||
} else if (!User_group::allowedNickname($nickname)) {
|
||||
// TRANS: Group create form validation error.
|
||||
$this->showForm(_('Not a valid nickname.'));
|
||||
return;
|
||||
} else if (!is_null($homepage) && (strlen($homepage) > 0) &&
|
||||
!Validate::uri($homepage,
|
||||
array('allowed_schemes' =>
|
||||
array('http', 'https')))) {
|
||||
// TRANS: Group create form validation error.
|
||||
$this->showForm(_('Homepage is not a valid URL.'));
|
||||
return;
|
||||
} else if (!is_null($fullname) && mb_strlen($fullname) > 255) {
|
||||
// TRANS: Group create form validation error.
|
||||
$this->showForm(_('Full name is too long (maximum 255 characters).'));
|
||||
return;
|
||||
} else if (User_group::descriptionTooLong($description)) {
|
||||
// TRANS: Form validation error creating a new group because the description is too long.
|
||||
// TRANS: Group create form validation error.
|
||||
// TRANS: %d is the maximum number of allowed characters.
|
||||
$this->showForm(sprintf(_m('Description is too long (maximum %d character).',
|
||||
'Description is too long (maximum %d characters).',
|
||||
User_group::maxDescription(),
|
||||
User_group::maxDescription()),
|
||||
User_group::maxDescription()));
|
||||
return;
|
||||
} else if (!is_null($location) && mb_strlen($location) > 255) {
|
||||
// TRANS: Group create form validation error.
|
||||
$this->showForm(_('Location is too long (maximum 255 characters).'));
|
||||
return;
|
||||
}
|
||||
@ -161,7 +167,7 @@ class NewgroupAction extends Action
|
||||
}
|
||||
|
||||
if (count($aliases) > common_config('group', 'maxaliases')) {
|
||||
// TRANS: Client error shown when providing too many aliases during group creation.
|
||||
// TRANS: Group create form validation error.
|
||||
// TRANS: %d is the maximum number of allowed aliases.
|
||||
$this->showForm(sprintf(_m('Too many aliases! Maximum %d allowed.',
|
||||
'Too many aliases! Maximum %d allowed.',
|
||||
@ -174,16 +180,19 @@ class NewgroupAction extends Action
|
||||
if (!Validate::string($alias, array('min_length' => 1,
|
||||
'max_length' => 64,
|
||||
'format' => NICKNAME_FMT))) {
|
||||
// TRANS: Group create form validation error.
|
||||
$this->showForm(sprintf(_('Invalid alias: "%s"'), $alias));
|
||||
return;
|
||||
}
|
||||
if ($this->nicknameExists($alias)) {
|
||||
// TRANS: Group create form validation error.
|
||||
$this->showForm(sprintf(_('Alias "%s" already in use. Try another one.'),
|
||||
$alias));
|
||||
return;
|
||||
}
|
||||
// XXX assumes alphanum nicknames
|
||||
if (strcmp($alias, $nickname) == 0) {
|
||||
// TRANS: Group create form validation error.
|
||||
$this->showForm(_('Alias can\'t be the same as nickname.'));
|
||||
return;
|
||||
}
|
||||
@ -227,4 +236,3 @@ class NewgroupAction extends Action
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -156,8 +156,11 @@ class NewnoticeAction extends Action
|
||||
|
||||
$content_shortened = common_shorten_links($content);
|
||||
if (Notice::contentTooLong($content_shortened)) {
|
||||
$this->clientError(sprintf(_('That\'s too long. '.
|
||||
'Max notice size is %d chars.'),
|
||||
// TRANS: Client error displayed when the parameter "status" is missing.
|
||||
// TRANS: %d is the maximum number of character for a notice.
|
||||
$this->clientError(sprintf(_m('That\'s too long. Maximum notice size is %d character.',
|
||||
'That\'s too long. Maximum notice size is %d characters.',
|
||||
Notice::maxContent()),
|
||||
Notice::maxContent()));
|
||||
}
|
||||
|
||||
@ -178,12 +181,10 @@ class NewnoticeAction extends Action
|
||||
|
||||
if (Notice::contentTooLong($content_shortened)) {
|
||||
$upload->delete();
|
||||
$this->clientError(
|
||||
sprintf(
|
||||
_('Max notice size is %d chars, including attachment URL.'),
|
||||
Notice::maxContent()
|
||||
)
|
||||
);
|
||||
$this->clientError(sprintf(_m('Maximum notice size is %d character, including attachment URL.',
|
||||
'Maximum notice size is %d characters, including attachment URL.',
|
||||
Notice::maxContent()),
|
||||
Notice::maxContent()));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -46,7 +46,6 @@ require_once INSTALLDIR.'/lib/accountsettingsaction.php';
|
||||
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
|
||||
* @link http://status.net/
|
||||
*/
|
||||
|
||||
class OthersettingsAction extends AccountSettingsAction
|
||||
{
|
||||
/**
|
||||
@ -54,9 +53,9 @@ class OthersettingsAction extends AccountSettingsAction
|
||||
*
|
||||
* @return string Title of the page
|
||||
*/
|
||||
|
||||
function title()
|
||||
{
|
||||
// Page title for a tab in user profile settings.
|
||||
return _('Other settings');
|
||||
}
|
||||
|
||||
@ -68,6 +67,7 @@ class OthersettingsAction extends AccountSettingsAction
|
||||
|
||||
function getInstructions()
|
||||
{
|
||||
// TRANS: Instructions for tab "Other" in user profile settings.
|
||||
return _('Manage various other options.');
|
||||
}
|
||||
|
||||
@ -107,6 +107,9 @@ class OthersettingsAction extends AccountSettingsAction
|
||||
{
|
||||
$services[$name]=$name;
|
||||
if($value['freeService']){
|
||||
// TRANS: Used as a suffix for free URL shorteners in a dropdown list in the tab "Other" of a
|
||||
// TRANS: user's profile settings. This message has one space at the beginning. Use your
|
||||
// TRANS: language's word separator here if it has one (most likely a single space).
|
||||
$services[$name].=_(' (free service)');
|
||||
}
|
||||
}
|
||||
@ -115,7 +118,9 @@ class OthersettingsAction extends AccountSettingsAction
|
||||
asort($services);
|
||||
|
||||
$this->elementStart('li');
|
||||
// TRANS: Label for dropdown with URL shortener services.
|
||||
$this->dropdown('urlshorteningservice', _('Shorten URLs with'),
|
||||
// TRANS: Tooltip for for dropdown with URL shortener services.
|
||||
$services, _('Automatic shortening service to use.'),
|
||||
false, $user->urlshorteningservice);
|
||||
$this->elementEnd('li');
|
||||
@ -135,11 +140,13 @@ class OthersettingsAction extends AccountSettingsAction
|
||||
_('URLs in notices longer than this will be shortened.'));
|
||||
$this->elementEnd('li');
|
||||
$this->elementStart('li');
|
||||
// TRANS: Label for checkbox.
|
||||
$this->checkbox('viewdesigns', _('View profile designs'),
|
||||
- $user->viewdesigns, _('Show or hide profile designs.'));
|
||||
$this->elementEnd('li');
|
||||
$this->elementEnd('ul');
|
||||
$this->submit('save', _('Save'));
|
||||
// TRANS: Button text for saving "Other settings" in profile.
|
||||
$this->submit('save', _m('BUTTON','Save'));
|
||||
$this->elementEnd('fieldset');
|
||||
$this->elementEnd('form');
|
||||
}
|
||||
@ -166,7 +173,8 @@ class OthersettingsAction extends AccountSettingsAction
|
||||
$urlshorteningservice = $this->trimmed('urlshorteningservice');
|
||||
|
||||
if (!is_null($urlshorteningservice) && strlen($urlshorteningservice) > 50) {
|
||||
$this->showForm(_('URL shortening service is too long (max 50 chars).'));
|
||||
// TRANS: Form validation error for form "Other settings" in user profile.
|
||||
$this->showForm(_('URL shortening service is too long (maximum 50 characters).'));
|
||||
return;
|
||||
}
|
||||
|
||||
@ -199,6 +207,7 @@ class OthersettingsAction extends AccountSettingsAction
|
||||
|
||||
if ($result === false) {
|
||||
common_log_db_error($user, 'UPDATE', __FILE__);
|
||||
// TRANS: Server error displayed when "Other" settings in user profile could not be updated on the server.
|
||||
$this->serverError(_('Couldn\'t update user.'));
|
||||
return;
|
||||
}
|
||||
|
@ -362,7 +362,7 @@ class RecoverpasswordAction extends Action
|
||||
$confirm = $this->trimmed('confirm');
|
||||
|
||||
if (!$newpassword || strlen($newpassword) < 6) {
|
||||
$this->showPasswordForm(_('Password must be 6 chars or more.'));
|
||||
$this->showPasswordForm(_('Password must be 6 characters or more.'));
|
||||
return;
|
||||
}
|
||||
if ($newpassword != $confirm) {
|
||||
|
@ -46,10 +46,8 @@ define('MEMBERS_PER_SECTION', 27);
|
||||
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
|
||||
* @link http://status.net/
|
||||
*/
|
||||
|
||||
class ShowgroupAction extends GroupDesignAction
|
||||
{
|
||||
|
||||
/** page we're viewing. */
|
||||
var $page = null;
|
||||
|
||||
@ -58,7 +56,6 @@ class ShowgroupAction extends GroupDesignAction
|
||||
*
|
||||
* @return boolean true
|
||||
*/
|
||||
|
||||
function isReadOnly($args)
|
||||
{
|
||||
return true;
|
||||
@ -69,18 +66,21 @@ class ShowgroupAction extends GroupDesignAction
|
||||
*
|
||||
* @return string page title, with page number
|
||||
*/
|
||||
|
||||
function title()
|
||||
{
|
||||
if (!empty($this->group->fullname)) {
|
||||
// @todo FIXME: Needs proper i18n. Maybe use a generic method for this?
|
||||
$base = $this->group->fullname . ' (' . $this->group->nickname . ')';
|
||||
} else {
|
||||
$base = $this->group->nickname;
|
||||
}
|
||||
|
||||
if ($this->page == 1) {
|
||||
// TRANS: Page title for first group page. %s is a group name.
|
||||
return sprintf(_('%s group'), $base);
|
||||
} else {
|
||||
// TRANS: Page title for any but first group page.
|
||||
// TRANS: %1$s is a group name, $2$s is a page number.
|
||||
return sprintf(_('%1$s group, page %2$d'),
|
||||
$base,
|
||||
$this->page);
|
||||
@ -96,7 +96,6 @@ class ShowgroupAction extends GroupDesignAction
|
||||
*
|
||||
* @return boolean success flag
|
||||
*/
|
||||
|
||||
function prepare($args)
|
||||
{
|
||||
parent::prepare($args);
|
||||
@ -118,6 +117,7 @@ class ShowgroupAction extends GroupDesignAction
|
||||
}
|
||||
|
||||
if (!$nickname) {
|
||||
// TRANS: Client error displayed if no nickname argument was given requesting a group page.
|
||||
$this->clientError(_('No nickname.'), 404);
|
||||
return false;
|
||||
}
|
||||
@ -135,6 +135,7 @@ class ShowgroupAction extends GroupDesignAction
|
||||
return false;
|
||||
} else {
|
||||
common_log(LOG_NOTICE, "Couldn't find local group for nickname '$nickname'");
|
||||
// TRANS: Client error displayed if no remote group with a given name was found requesting group page.
|
||||
$this->clientError(_('No such group.'), 404);
|
||||
return false;
|
||||
}
|
||||
@ -143,6 +144,7 @@ class ShowgroupAction extends GroupDesignAction
|
||||
$this->group = User_group::staticGet('id', $local->group_id);
|
||||
|
||||
if (!$this->group) {
|
||||
// TRANS: Client error displayed if no local group with a given name was found requesting group page.
|
||||
$this->clientError(_('No such group.'), 404);
|
||||
return false;
|
||||
}
|
||||
@ -160,7 +162,6 @@ class ShowgroupAction extends GroupDesignAction
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
|
||||
function handle($args)
|
||||
{
|
||||
$this->showPage();
|
||||
@ -171,7 +172,6 @@ class ShowgroupAction extends GroupDesignAction
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
|
||||
function showLocalNav()
|
||||
{
|
||||
$nav = new GroupNav($this, $this->group);
|
||||
@ -183,7 +183,6 @@ class ShowgroupAction extends GroupDesignAction
|
||||
*
|
||||
* Shows a group profile and a list of group notices
|
||||
*/
|
||||
|
||||
function showContent()
|
||||
{
|
||||
$this->showGroupProfile();
|
||||
@ -195,7 +194,6 @@ class ShowgroupAction extends GroupDesignAction
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
|
||||
function showGroupNotices()
|
||||
{
|
||||
$notice = $this->group->getNotices(($this->page-1)*NOTICES_PER_PAGE,
|
||||
@ -218,15 +216,16 @@ class ShowgroupAction extends GroupDesignAction
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
|
||||
function showGroupProfile()
|
||||
{
|
||||
$this->elementStart('div', array('id' => 'i',
|
||||
'class' => 'entity_profile vcard author'));
|
||||
|
||||
// TRANS: Group profile header (h2). Text hidden by default.
|
||||
$this->element('h2', null, _('Group profile'));
|
||||
|
||||
$this->elementStart('dl', 'entity_depiction');
|
||||
// TRANS: Label for group avatar (dt). Text hidden by default.
|
||||
$this->element('dt', null, _('Avatar'));
|
||||
$this->elementStart('dd');
|
||||
|
||||
@ -242,6 +241,7 @@ class ShowgroupAction extends GroupDesignAction
|
||||
$this->elementEnd('dl');
|
||||
|
||||
$this->elementStart('dl', 'entity_nickname');
|
||||
// TRANS: Label for group nickname (dt). Text hidden by default.
|
||||
$this->element('dt', null, _('Nickname'));
|
||||
$this->elementStart('dd');
|
||||
$hasFN = ($this->group->fullname) ? 'nickname url uid' : 'fn org nickname url uid';
|
||||
@ -253,6 +253,7 @@ class ShowgroupAction extends GroupDesignAction
|
||||
|
||||
if ($this->group->fullname) {
|
||||
$this->elementStart('dl', 'entity_fn');
|
||||
// TRANS: Label for full group name (dt). Text hidden by default.
|
||||
$this->element('dt', null, _('Full name'));
|
||||
$this->elementStart('dd');
|
||||
$this->element('span', 'fn org', $this->group->fullname);
|
||||
@ -262,6 +263,7 @@ class ShowgroupAction extends GroupDesignAction
|
||||
|
||||
if ($this->group->location) {
|
||||
$this->elementStart('dl', 'entity_location');
|
||||
// TRANS: Label for group location (dt). Text hidden by default.
|
||||
$this->element('dt', null, _('Location'));
|
||||
$this->element('dd', 'label', $this->group->location);
|
||||
$this->elementEnd('dl');
|
||||
@ -269,6 +271,7 @@ class ShowgroupAction extends GroupDesignAction
|
||||
|
||||
if ($this->group->homepage) {
|
||||
$this->elementStart('dl', 'entity_url');
|
||||
// TRANS: Label for group URL (dt). Text hidden by default.
|
||||
$this->element('dt', null, _('URL'));
|
||||
$this->elementStart('dd');
|
||||
$this->element('a', array('href' => $this->group->homepage,
|
||||
@ -280,6 +283,7 @@ class ShowgroupAction extends GroupDesignAction
|
||||
|
||||
if ($this->group->description) {
|
||||
$this->elementStart('dl', 'entity_note');
|
||||
// TRANS: Label for group description or group note (dt). Text hidden by default.
|
||||
$this->element('dt', null, _('Note'));
|
||||
$this->element('dd', 'note', $this->group->description);
|
||||
$this->elementEnd('dl');
|
||||
@ -290,6 +294,7 @@ class ShowgroupAction extends GroupDesignAction
|
||||
|
||||
if (!empty($aliases)) {
|
||||
$this->elementStart('dl', 'entity_aliases');
|
||||
// TRANS: Label for group aliases (dt). Text hidden by default.
|
||||
$this->element('dt', null, _('Aliases'));
|
||||
$this->element('dd', 'aliases', implode(' ', $aliases));
|
||||
$this->elementEnd('dl');
|
||||
@ -300,6 +305,7 @@ class ShowgroupAction extends GroupDesignAction
|
||||
|
||||
$cur = common_current_user();
|
||||
$this->elementStart('div', 'entity_actions');
|
||||
// TRANS: Group actions header (h2). Text hidden by default.
|
||||
$this->element('h2', null, _('Group actions'));
|
||||
$this->elementStart('ul');
|
||||
$this->elementStart('li', 'entity_subscribe');
|
||||
@ -331,7 +337,6 @@ class ShowgroupAction extends GroupDesignAction
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
|
||||
function getFeeds()
|
||||
{
|
||||
$url =
|
||||
@ -341,23 +346,27 @@ class ShowgroupAction extends GroupDesignAction
|
||||
return array(new Feed(Feed::RSS1,
|
||||
common_local_url('grouprss',
|
||||
array('nickname' => $this->group->nickname)),
|
||||
// TRANS: Tooltip for feed link. %s is a group nickname.
|
||||
sprintf(_('Notice feed for %s group (RSS 1.0)'),
|
||||
$this->group->nickname)),
|
||||
new Feed(Feed::RSS2,
|
||||
common_local_url('ApiTimelineGroup',
|
||||
array('format' => 'rss',
|
||||
'id' => $this->group->id)),
|
||||
// TRANS: Tooltip for feed link. %s is a group nickname.
|
||||
sprintf(_('Notice feed for %s group (RSS 2.0)'),
|
||||
$this->group->nickname)),
|
||||
new Feed(Feed::ATOM,
|
||||
common_local_url('ApiTimelineGroup',
|
||||
array('format' => 'atom',
|
||||
'id' => $this->group->id)),
|
||||
// TRANS: Tooltip for feed link. %s is a group nickname.
|
||||
sprintf(_('Notice feed for %s group (Atom)'),
|
||||
$this->group->nickname)),
|
||||
new Feed(Feed::FOAF,
|
||||
common_local_url('foafgroup',
|
||||
array('nickname' => $this->group->nickname)),
|
||||
// TRANS: Tooltip for feed link. %s is a group nickname.
|
||||
sprintf(_('FOAF for %s group'),
|
||||
$this->group->nickname)));
|
||||
}
|
||||
@ -367,7 +376,6 @@ class ShowgroupAction extends GroupDesignAction
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
|
||||
function showSections()
|
||||
{
|
||||
$this->showMembers();
|
||||
@ -382,7 +390,6 @@ class ShowgroupAction extends GroupDesignAction
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
|
||||
function showMembers()
|
||||
{
|
||||
$member = $this->group->getMembers(0, MEMBERS_PER_SECTION);
|
||||
@ -396,17 +403,22 @@ class ShowgroupAction extends GroupDesignAction
|
||||
|
||||
if (Event::handle('StartShowGroupMembersMiniList', array($this))) {
|
||||
|
||||
// TRANS: Header for mini list of group members on a group page (h2).
|
||||
$this->element('h2', null, _('Members'));
|
||||
|
||||
$gmml = new GroupMembersMiniList($member, $this);
|
||||
$cnt = $gmml->show();
|
||||
if ($cnt == 0) {
|
||||
// TRANS: Description for mini list of group members on a group page when the group has no members.
|
||||
$this->element('p', null, _('(None)'));
|
||||
}
|
||||
|
||||
// @todo FIXME: Should be shown if a group has more than 27 members, but I do not see it displayed at
|
||||
// for example http://identi.ca/group/statusnet. Broken?
|
||||
if ($cnt > MEMBERS_PER_SECTION) {
|
||||
$this->element('a', array('href' => common_local_url('groupmembers',
|
||||
array('nickname' => $this->group->nickname))),
|
||||
// TRANS: Link to all group members from mini list of group members if group has more than n members.
|
||||
_('All members'));
|
||||
}
|
||||
|
||||
@ -421,7 +433,6 @@ class ShowgroupAction extends GroupDesignAction
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
|
||||
function showAdmins()
|
||||
{
|
||||
$adminSection = new GroupAdminSection($this, $this->group);
|
||||
@ -433,22 +444,26 @@ class ShowgroupAction extends GroupDesignAction
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
|
||||
function showStatistics()
|
||||
{
|
||||
$this->elementStart('div', array('id' => 'entity_statistics',
|
||||
'class' => 'section'));
|
||||
|
||||
// TRANS: Header for group statistics on a group page (h2).
|
||||
$this->element('h2', null, _('Statistics'));
|
||||
|
||||
$this->elementStart('dl', 'entity_created');
|
||||
$this->element('dt', null, _('Created'));
|
||||
// @todo FIXME: i18n issue. This label gets a colon added from somewhere. Should be part of the message.
|
||||
// TRANS: Label for creation date in statistics on group page.
|
||||
$this->element('dt', null, _m('LABEL','Created'));
|
||||
$this->element('dd', null, date('j M Y',
|
||||
strtotime($this->group->created)));
|
||||
$this->elementEnd('dl');
|
||||
|
||||
$this->elementStart('dl', 'entity_members');
|
||||
$this->element('dt', null, _('Members'));
|
||||
// @todo FIXME: i18n issue. This label gets a colon added from somewhere. Should be part of the message.
|
||||
// TRANS: Label for member count in statistics on group page.
|
||||
$this->element('dt', null, _m('LABEL','Members'));
|
||||
$this->element('dd', null, $this->group->getMemberCount());
|
||||
$this->elementEnd('dl');
|
||||
|
||||
@ -458,12 +473,21 @@ class ShowgroupAction extends GroupDesignAction
|
||||
function showAnonymousMessage()
|
||||
{
|
||||
if (!(common_config('site','closed') || common_config('site','inviteonly'))) {
|
||||
// @todo FIXME: use group full name here if available instead of (uglier) primary alias.
|
||||
// TRANS: Notice on group pages for anonymous users for StatusNet sites that accept new registrations.
|
||||
// TRANS: **%s** is the group alias, %%%%site.name%%%% is the site name,
|
||||
// TRANS: %%%%action.register%%%% is the URL for registration, %%%%doc.help%%%% is a URL to help.
|
||||
// TRANS: This message contains Markdown links. Ensure they are formatted correctly: [Description](link).
|
||||
$m = sprintf(_('**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-blogging) service ' .
|
||||
'based on the Free Software [StatusNet](http://status.net/) tool. Its members share ' .
|
||||
'short messages about their life and interests. '.
|
||||
'[Join now](%%%%action.register%%%%) to become part of this group and many more! ([Read more](%%%%doc.help%%%%))'),
|
||||
$this->group->nickname);
|
||||
} else {
|
||||
// @todo FIXME: use group full name here if available instead of (uglier) primary alias.
|
||||
// TRANS: Notice on group pages for anonymous users for StatusNet sites that accept no new registrations.
|
||||
// TRANS: **%s** is the group alias, %%%%site.name%%%% is the site name,
|
||||
// TRANS: This message contains Markdown links. Ensure they are formatted correctly: [Description](link).
|
||||
$m = sprintf(_('**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-blogging) service ' .
|
||||
'based on the Free Software [StatusNet](http://status.net/) tool. Its members share ' .
|
||||
'short messages about their life and interests. '),
|
||||
@ -492,6 +516,7 @@ class GroupAdminSection extends ProfileSection
|
||||
|
||||
function title()
|
||||
{
|
||||
// TRANS: Header for list of group administrators on a group page (h2).
|
||||
return _('Admins');
|
||||
}
|
||||
|
||||
@ -527,4 +552,3 @@ class GroupMembersMiniListItem extends ProfileMiniListItem
|
||||
return $aAttrs;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -26,8 +26,8 @@
|
||||
* @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') && !defined('LACONICA')) {
|
||||
exit(1);
|
||||
if (!defined('STATUSNET') && !defined('LACONICA')) {
|
||||
exit(1);
|
||||
}
|
||||
|
||||
require_once INSTALLDIR.'/lib/mailbox.php';
|
||||
@ -36,26 +36,24 @@ require_once INSTALLDIR.'/lib/mailbox.php';
|
||||
* Show a single message
|
||||
*
|
||||
* // XXX: It is totally weird how this works!
|
||||
*
|
||||
*
|
||||
* @category Personal
|
||||
* @package StatusNet
|
||||
* @author Evan Prodromou <evan@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 ShowmessageAction extends MailboxAction
|
||||
{
|
||||
/**
|
||||
* Message object to show
|
||||
*/
|
||||
|
||||
var $message = null;
|
||||
|
||||
|
||||
/**
|
||||
* The current user
|
||||
*/
|
||||
|
||||
|
||||
var $user = null;
|
||||
|
||||
/**
|
||||
@ -67,17 +65,17 @@ class ShowmessageAction extends MailboxAction
|
||||
*
|
||||
* @return success flag
|
||||
*/
|
||||
|
||||
function prepare($args)
|
||||
{
|
||||
parent::prepare($args);
|
||||
|
||||
|
||||
$this->page = 1;
|
||||
|
||||
|
||||
$id = $this->trimmed('message');
|
||||
$this->message = Message::staticGet('id', $id);
|
||||
|
||||
if (!$this->message) {
|
||||
// TRANS: Client error displayed requesting a single message that does not exist.
|
||||
$this->clientError(_('No such message.'), 404);
|
||||
return false;
|
||||
}
|
||||
@ -90,40 +88,47 @@ class ShowmessageAction extends MailboxAction
|
||||
function handle($args)
|
||||
{
|
||||
Action::handle($args);
|
||||
|
||||
if ($this->user && ($this->user->id == $this->message->from_profile ||
|
||||
|
||||
if ($this->user && ($this->user->id == $this->message->from_profile ||
|
||||
$this->user->id == $this->message->to_profile)) {
|
||||
$this->showPage();
|
||||
} else {
|
||||
// TRANS: Client error displayed requesting a single direct message the requesting user was not a party in.
|
||||
$this->clientError(_('Only the sender and recipient ' .
|
||||
'may read this message.'), 403);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function title()
|
||||
{
|
||||
{
|
||||
if ($this->user->id == $this->message->from_profile) {
|
||||
$to = $this->message->getTo();
|
||||
return sprintf(_("Message to %1\$s on %2\$s"),
|
||||
// @todo FIXME: Might be nice if the timestamp could be localised.
|
||||
// TRANS: Page title for single direct message display when viewing user is the sender.
|
||||
// TRANS: %1$s is the addressed user's nickname, $2$s is a timestamp.
|
||||
return sprintf(_('Message to %1$s on %2$s'),
|
||||
$to->nickname,
|
||||
common_exact_date($this->message->created));
|
||||
} else if ($this->user->id == $this->message->to_profile) {
|
||||
$from = $this->message->getFrom();
|
||||
return sprintf(_("Message from %1\$s on %2\$s"),
|
||||
// @todo FIXME: Might be nice if the timestamp could be localised.
|
||||
// TRANS: Page title for single message display.
|
||||
// TRANS: %1$s is the sending user's nickname, $2$s is a timestamp.
|
||||
return sprintf(_('Message from %1$s on %2$s'),
|
||||
$from->nickname,
|
||||
common_exact_date($this->message->created));
|
||||
}
|
||||
}
|
||||
|
||||
function getMessages()
|
||||
{
|
||||
|
||||
function getMessages()
|
||||
{
|
||||
$message = new Message();
|
||||
$message->id = $this->message->id;
|
||||
$message->find();
|
||||
return $message;
|
||||
}
|
||||
|
||||
|
||||
function getMessageProfile()
|
||||
{
|
||||
if ($this->user->id == $this->message->from_profile) {
|
||||
@ -135,23 +140,21 @@ class ShowmessageAction extends MailboxAction
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Don't show local navigation
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
|
||||
function showLocalNavBlock()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Don't show page notice
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
|
||||
function showPageNoticeBlock()
|
||||
{
|
||||
}
|
||||
@ -161,17 +164,15 @@ class ShowmessageAction extends MailboxAction
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
|
||||
function showAside()
|
||||
function showAside()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Don't show any instructions
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
|
||||
function getInstructions()
|
||||
{
|
||||
return '';
|
||||
|
@ -63,21 +63,24 @@ class ShowstreamAction extends ProfileAction
|
||||
|
||||
function title()
|
||||
{
|
||||
if (!empty($this->profile->fullname)) {
|
||||
$base = $this->profile->fullname . ' (' . $this->user->nickname . ') ';
|
||||
} else {
|
||||
$base = $this->user->nickname;
|
||||
}
|
||||
$base = $this->profile->getFancyName();
|
||||
if (!empty($this->tag)) {
|
||||
$base .= sprintf(_(' tagged %s'), $this->tag);
|
||||
}
|
||||
|
||||
if ($this->page == 1) {
|
||||
return $base;
|
||||
if ($this->page == 1) {
|
||||
// TRANS: Page title showing tagged notices in one user's stream. Param 1 is the username, 2 is the hash tag.
|
||||
return sprintf(_('%1$s tagged %2$s'), $base, $this->tag);
|
||||
} else {
|
||||
// TRANS: Page title showing tagged notices in one user's stream. Param 1 is the username, 2 is the hash tag, 3 is the page number.
|
||||
return sprintf(_('%1$s tagged %2$s, page %3$d'), $base, $this->tag, $this->page);
|
||||
}
|
||||
} else {
|
||||
return sprintf(_('%1$s, page %2$d'),
|
||||
$base,
|
||||
$this->page);
|
||||
if ($this->page == 1) {
|
||||
return $base;
|
||||
} else {
|
||||
// TRANS: Extended page title showing tagged notices in one user's stream. Param 1 is the username, param 2 is the page number.
|
||||
return sprintf(_('%1$s, page %2$d'),
|
||||
$base,
|
||||
$this->page);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -42,7 +42,6 @@ require_once INSTALLDIR.'/extlib/htmLawed/htmLawed.php';
|
||||
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
|
||||
* @link http://status.net/
|
||||
*/
|
||||
|
||||
class SitenoticeadminpanelAction extends AdminPanelAction
|
||||
{
|
||||
/**
|
||||
@ -50,9 +49,9 @@ class SitenoticeadminpanelAction extends AdminPanelAction
|
||||
*
|
||||
* @return string page title
|
||||
*/
|
||||
|
||||
function title()
|
||||
{
|
||||
// TRANS: Page title for site-wide notice tab in admin panel.
|
||||
return _('Site Notice');
|
||||
}
|
||||
|
||||
@ -61,9 +60,9 @@ class SitenoticeadminpanelAction extends AdminPanelAction
|
||||
*
|
||||
* @return string instructions
|
||||
*/
|
||||
|
||||
function getInstructions()
|
||||
{
|
||||
// TRANS: Instructions for site-wide notice tab in admin panel.
|
||||
return _('Edit site-wide message');
|
||||
}
|
||||
|
||||
@ -72,7 +71,6 @@ class SitenoticeadminpanelAction extends AdminPanelAction
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
|
||||
function showForm()
|
||||
{
|
||||
$form = new SiteNoticeAdminPanelForm($this);
|
||||
@ -85,7 +83,6 @@ class SitenoticeadminpanelAction extends AdminPanelAction
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
|
||||
function saveSettings()
|
||||
{
|
||||
$siteNotice = $this->trimmed('site-notice');
|
||||
@ -100,6 +97,7 @@ class SitenoticeadminpanelAction extends AdminPanelAction
|
||||
$result = Config::save('site', 'notice', $siteNotice);
|
||||
|
||||
if (!$result) {
|
||||
// TRANS: Server error displayed when saving a site-wide notice was impossible.
|
||||
$this->ServerError(_("Unable to save site notice."));
|
||||
}
|
||||
}
|
||||
@ -110,7 +108,8 @@ class SitenoticeadminpanelAction extends AdminPanelAction
|
||||
|
||||
if (mb_strlen($siteNotice) > 255) {
|
||||
$this->clientError(
|
||||
_('Max length for the site-wide notice is 255 chars.')
|
||||
// TRANS: Client error displayed when a site-wide notice was longer than allowed.
|
||||
_('Maximum length for the site-wide notice is 255 characters.')
|
||||
);
|
||||
}
|
||||
|
||||
@ -173,9 +172,11 @@ class SiteNoticeAdminPanelForm extends AdminForm
|
||||
$this->out->elementStart('li');
|
||||
$this->out->textarea(
|
||||
'site-notice',
|
||||
// TRANS: Label for site-wide notice text field in admin panel.
|
||||
_('Site notice text'),
|
||||
common_config('site', 'notice'),
|
||||
_('Site-wide notice text (255 chars max; HTML okay)')
|
||||
// TRANS: Tooltip for site-wide notice text field in admin panel.
|
||||
_('Site-wide notice text (255 characters maximum; HTML allowed)')
|
||||
);
|
||||
$this->out->elementEnd('li');
|
||||
|
||||
@ -192,9 +193,11 @@ class SiteNoticeAdminPanelForm extends AdminForm
|
||||
{
|
||||
$this->out->submit(
|
||||
'submit',
|
||||
_('Save'),
|
||||
// TRANS: Button text for saving site notice in admin panel.
|
||||
_m('BUTTON','Save'),
|
||||
'submit',
|
||||
null,
|
||||
// TRANS: Title for button to save site notice in admin panel.
|
||||
_('Save site notice')
|
||||
);
|
||||
}
|
||||
|
@ -19,6 +19,7 @@
|
||||
|
||||
if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); }
|
||||
|
||||
// @todo FIXME: Documentation needed.
|
||||
class SubeditAction extends Action
|
||||
{
|
||||
var $profile = null;
|
||||
@ -28,6 +29,7 @@ class SubeditAction extends Action
|
||||
parent::prepare($args);
|
||||
|
||||
if (!common_logged_in()) {
|
||||
// TRANS: Client error displayed trying a change a subscription while not logged in.
|
||||
$this->clientError(_('Not logged in.'));
|
||||
return false;
|
||||
}
|
||||
@ -43,6 +45,7 @@ class SubeditAction extends Action
|
||||
$id = $this->trimmed('profile');
|
||||
|
||||
if (!$id) {
|
||||
// TRANS: Client error displayed trying a change a subscription without providing a profile.
|
||||
$this->clientError(_('No profile specified.'));
|
||||
return false;
|
||||
}
|
||||
@ -50,6 +53,7 @@ class SubeditAction extends Action
|
||||
$this->profile = Profile::staticGet('id', $id);
|
||||
|
||||
if (!$this->profile) {
|
||||
// TRANS: Client error displayed trying a change a subscription for a non-existant profile ID.
|
||||
$this->clientError(_('No profile with that ID.'));
|
||||
return false;
|
||||
}
|
||||
@ -67,6 +71,7 @@ class SubeditAction extends Action
|
||||
'subscribed' => $this->profile->id));
|
||||
|
||||
if (!$sub) {
|
||||
// TRANS: Client error displayed trying a change a subscription for a non-subscribed profile.
|
||||
$this->clientError(_('You are not subscribed to that profile.'));
|
||||
return false;
|
||||
}
|
||||
@ -80,6 +85,7 @@ class SubeditAction extends Action
|
||||
|
||||
if (!$result) {
|
||||
common_log_db_error($sub, 'UPDATE', __FILE__);
|
||||
// TRANS: Server error displayed when updating a subscription fails with a database error.
|
||||
$this->serverError(_('Could not save subscription.'));
|
||||
return false;
|
||||
}
|
||||
|
@ -45,7 +45,6 @@ if (!defined('STATUSNET')) {
|
||||
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
|
||||
* @link http://status.net/
|
||||
*/
|
||||
|
||||
class UseradminpanelAction extends AdminPanelAction
|
||||
{
|
||||
/**
|
||||
@ -53,7 +52,6 @@ class UseradminpanelAction extends AdminPanelAction
|
||||
*
|
||||
* @return string page title
|
||||
*/
|
||||
|
||||
function title()
|
||||
{
|
||||
// TRANS: User admin panel title
|
||||
@ -65,9 +63,9 @@ class UseradminpanelAction extends AdminPanelAction
|
||||
*
|
||||
* @return string instructions
|
||||
*/
|
||||
|
||||
function getInstructions()
|
||||
{
|
||||
// TRANS: Instruction for user admin panel.
|
||||
return _('User settings for this StatusNet site');
|
||||
}
|
||||
|
||||
@ -76,7 +74,6 @@ class UseradminpanelAction extends AdminPanelAction
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
|
||||
function showForm()
|
||||
{
|
||||
$form = new UserAdminPanelForm($this);
|
||||
@ -89,7 +86,6 @@ class UseradminpanelAction extends AdminPanelAction
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
|
||||
function saveSettings()
|
||||
{
|
||||
static $settings = array(
|
||||
@ -147,13 +143,15 @@ class UseradminpanelAction extends AdminPanelAction
|
||||
// Validate biolimit
|
||||
|
||||
if (!Validate::number($values['profile']['biolimit'])) {
|
||||
$this->clientError(_("Invalid bio limit. Must be numeric."));
|
||||
// TRANS: Form validation error in user admin panel when a non-numeric character limit was set.
|
||||
$this->clientError(_('Invalid bio limit. Must be numeric.'));
|
||||
}
|
||||
|
||||
// Validate welcome text
|
||||
|
||||
if (mb_strlen($values['newuser']['welcome']) > 255) {
|
||||
$this->clientError(_("Invalid welcome text. Max length is 255 characters."));
|
||||
// TRANS: Form validation error in user admin panel when welcome text is too long.
|
||||
$this->clientError(_('Invalid welcome text. Maximum length is 255 characters.'));
|
||||
}
|
||||
|
||||
// Validate default subscription
|
||||
@ -163,7 +161,9 @@ class UseradminpanelAction extends AdminPanelAction
|
||||
if (empty($defuser)) {
|
||||
$this->clientError(
|
||||
sprintf(
|
||||
_('Invalid default subscripton: \'%1$s\' is not user.'),
|
||||
// TRANS: Client error displayed when trying to set a non-existing user as default subscription for new
|
||||
// TRANS: users in user admin panel. %1$s is the invalid nickname.
|
||||
_('Invalid default subscripton: \'%1$s\' is not a user.'),
|
||||
$values['newuser']['default']
|
||||
)
|
||||
);
|
||||
@ -179,7 +179,6 @@ class UserAdminPanelForm extends AdminForm
|
||||
*
|
||||
* @return int ID of the form
|
||||
*/
|
||||
|
||||
function id()
|
||||
{
|
||||
return 'useradminpanel';
|
||||
@ -190,7 +189,6 @@ class UserAdminPanelForm extends AdminForm
|
||||
*
|
||||
* @return string class of the form
|
||||
*/
|
||||
|
||||
function formClass()
|
||||
{
|
||||
return 'form_settings';
|
||||
@ -201,7 +199,6 @@ class UserAdminPanelForm extends AdminForm
|
||||
*
|
||||
* @return string URL of the action
|
||||
*/
|
||||
|
||||
function action()
|
||||
{
|
||||
return common_local_url('useradminpanel');
|
||||
@ -212,7 +209,6 @@ class UserAdminPanelForm extends AdminForm
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
|
||||
function formData()
|
||||
{
|
||||
$this->out->elementStart('fieldset', array('id' => 'settings_user-profile'));
|
||||
@ -220,7 +216,9 @@ class UserAdminPanelForm extends AdminForm
|
||||
$this->out->elementStart('ul', 'form_data');
|
||||
|
||||
$this->li();
|
||||
// TRANS: Field label in user admin panel for setting the character limit for the bio field.
|
||||
$this->input('biolimit', _('Bio Limit'),
|
||||
// TRANS: Tooltip in user admin panel for setting the character limit for the bio field.
|
||||
_('Maximum length of a profile bio in characters.'),
|
||||
'profile');
|
||||
$this->unli();
|
||||
@ -229,17 +227,22 @@ class UserAdminPanelForm extends AdminForm
|
||||
$this->out->elementEnd('fieldset');
|
||||
|
||||
$this->out->elementStart('fieldset', array('id' => 'settings_user-newusers'));
|
||||
// TRANS: Form legend in user admin panel.
|
||||
$this->out->element('legend', null, _('New users'));
|
||||
$this->out->elementStart('ul', 'form_data');
|
||||
|
||||
$this->li();
|
||||
// TRANS: Field label in user admin panel for setting new user welcome text.
|
||||
$this->input('welcome', _('New user welcome'),
|
||||
_('Welcome text for new users (Max 255 chars).'),
|
||||
// TRANS: Tooltip in user admin panel for setting new user welcome text.
|
||||
_('Welcome text for new users (maximum 255 characters).'),
|
||||
'newuser');
|
||||
$this->unli();
|
||||
|
||||
$this->li();
|
||||
// TRANS: Field label in user admin panel for setting default subscription for new users.
|
||||
$this->input('default', _('Default subscription'),
|
||||
// TRANS: Tooltip in user admin panel for setting default subscription for new users.
|
||||
_('Automatically subscribe new users to this user.'),
|
||||
'newuser');
|
||||
$this->unli();
|
||||
@ -249,21 +252,21 @@ class UserAdminPanelForm extends AdminForm
|
||||
$this->out->elementEnd('fieldset');
|
||||
|
||||
$this->out->elementStart('fieldset', array('id' => 'settings_user-invitations'));
|
||||
// TRANS: Form legend in user admin panel.
|
||||
$this->out->element('legend', null, _('Invitations'));
|
||||
$this->out->elementStart('ul', 'form_data');
|
||||
|
||||
$this->li();
|
||||
|
||||
// TRANS: Field label for checkbox in user admin panel for allowing users to invite friend using site e-mail.
|
||||
$this->out->checkbox('invite-enabled', _('Invitations enabled'),
|
||||
(bool) $this->value('enabled', 'invite'),
|
||||
// TRANS: Tooltip for checkbox in user admin panel for allowing users to invite friend using site e-mail.
|
||||
_('Whether to allow users to invite new users.'));
|
||||
$this->unli();
|
||||
|
||||
$this->out->elementEnd('ul');
|
||||
$this->out->elementEnd('fieldset');
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
@ -278,7 +281,6 @@ class UserAdminPanelForm extends AdminForm
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
|
||||
function input($setting, $title, $instructions, $section='site')
|
||||
{
|
||||
$this->out->input("$section-$setting", $title, $this->value($setting, $section), $instructions);
|
||||
@ -289,9 +291,14 @@ class UserAdminPanelForm extends AdminForm
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
|
||||
function formActions()
|
||||
{
|
||||
$this->out->submit('submit', _('Save'), 'submit', null, _('Save user settings'));
|
||||
$this->out->submit('submit',
|
||||
// TRANS: Button text to save user settings in user admin panel.
|
||||
_m('BUTTON','Save'),
|
||||
'submit',
|
||||
null,
|
||||
// TRANS: Title for button to save user settings in user admin panel.
|
||||
_('Save user settings'));
|
||||
}
|
||||
}
|
||||
|
@ -141,11 +141,32 @@ class Profile extends Memcached_DataObject
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets either the full name (if filled) or the nickname.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
function getBestName()
|
||||
{
|
||||
return ($this->fullname) ? $this->fullname : $this->nickname;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the full name (if filled) with nickname as a parenthetical, or the nickname alone
|
||||
* if no fullname is provided.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
function getFancyName()
|
||||
{
|
||||
if ($this->fullname) {
|
||||
// TRANS: Full name of a profile or group followed by nickname in parens
|
||||
return sprintf(_('%1$s (%2$s)'), $this->fullname, $this->nickname);
|
||||
} else {
|
||||
return $this->nickname;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the most recent notice posted by this user, if any.
|
||||
*
|
||||
|
11
js/util.js
11
js/util.js
@ -56,6 +56,15 @@ var SN = { // StatusNet
|
||||
NoticeDataGeoCookie: 'NoticeDataGeo',
|
||||
NoticeDataGeoSelected: 'notice_data-geo_selected',
|
||||
StatusNetInstance:'StatusNetInstance'
|
||||
},
|
||||
},
|
||||
|
||||
messages: {},
|
||||
msg: function(key) {
|
||||
if (typeof SN.messages[key] == "undefined") {
|
||||
return '[' + key + ']';
|
||||
} else {
|
||||
return SN.messages[key];
|
||||
}
|
||||
},
|
||||
|
||||
@ -416,7 +425,7 @@ var SN = { // StatusNet
|
||||
});
|
||||
|
||||
return false;
|
||||
});
|
||||
}).attr('title', SN.msg('showmore_tooltip'));
|
||||
}
|
||||
else {
|
||||
$.fn.jOverlay.options = {
|
||||
|
@ -283,6 +283,7 @@ class Action extends HTMLOutputter // lawsuit
|
||||
if (Event::handle('StartShowStatusNetScripts', array($this)) &&
|
||||
Event::handle('StartShowLaconicaScripts', array($this))) {
|
||||
$this->script('util.js');
|
||||
$this->showScriptMessages();
|
||||
// Frame-busting code to avoid clickjacking attacks.
|
||||
$this->inlineScript('if (window.top !== window.self) { window.top.location.href = window.self.location.href; }');
|
||||
Event::handle('EndShowStatusNetScripts', array($this));
|
||||
@ -292,6 +293,54 @@ class Action extends HTMLOutputter // lawsuit
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Exports a map of localized text strings to JavaScript code.
|
||||
*
|
||||
* Plugins can add to what's exported by hooking the StartScriptMessages or EndScriptMessages
|
||||
* events and appending to the array. Try to avoid adding strings that won't be used, as
|
||||
* they'll be added to HTML output.
|
||||
*/
|
||||
function showScriptMessages()
|
||||
{
|
||||
$messages = array();
|
||||
if (Event::handle('StartScriptMessages', array($this, &$messages))) {
|
||||
// Common messages needed for timeline views etc...
|
||||
|
||||
// TRANS: Localized tooltip for '...' expansion button on overlong remote messages.
|
||||
$messages['showmore_tooltip'] = _m('TOOLTIP', 'Show more');
|
||||
|
||||
$messages = array_merge($messages, $this->getScriptMessages());
|
||||
}
|
||||
Event::handle('EndScriptMessages', array($this, &$messages));
|
||||
if ($messages) {
|
||||
$this->inlineScript('SN.messages=' . json_encode($messages));
|
||||
}
|
||||
return $messages;
|
||||
}
|
||||
|
||||
/**
|
||||
* If the action will need localizable text strings, export them here like so:
|
||||
*
|
||||
* return array('pool_deepend' => _('Deep end'),
|
||||
* 'pool_shallow' => _('Shallow end'));
|
||||
*
|
||||
* The exported map will be available via SN.msg() to JS code:
|
||||
*
|
||||
* $('#pool').html('<div class="deepend"></div><div class="shallow"></div>');
|
||||
* $('#pool .deepend').text(SN.msg('pool_deepend'));
|
||||
* $('#pool .shallow').text(SN.msg('pool_shallow'));
|
||||
*
|
||||
* Exports a map of localized text strings to JavaScript code.
|
||||
*
|
||||
* Plugins can add to what's exported on any action by hooking the StartScriptMessages or
|
||||
* EndScriptMessages events and appending to the array. Try to avoid adding strings that won't
|
||||
* be used, as they'll be added to HTML output.
|
||||
*/
|
||||
function getScriptMessages()
|
||||
{
|
||||
return array();
|
||||
}
|
||||
|
||||
/**
|
||||
* Show OpenSearch headers
|
||||
*
|
||||
|
@ -483,9 +483,11 @@ class MessageCommand extends Command
|
||||
|
||||
if (Message::contentTooLong($this->text)) {
|
||||
// XXX: i18n. Needs plural support.
|
||||
// TRANS: Message given if content is too long.
|
||||
// TRANS: Message given if content is too long. %1$sd is used for plural.
|
||||
// TRANS: %1$d is the maximum number of characters, %2$d is the number of submitted characters.
|
||||
$channel->error($this->user, sprintf(_('Message too long - maximum is %1$d characters, you sent %2$d.'),
|
||||
$channel->error($this->user, sprintf(_m('Message too long - maximum is %1$d character, you sent %2$d.',
|
||||
'Message too long - maximum is %1$d characters, you sent %2$d.',
|
||||
Message::maxContent()),
|
||||
Message::maxContent(), mb_strlen($this->text)));
|
||||
return;
|
||||
}
|
||||
@ -584,9 +586,11 @@ class ReplyCommand extends Command
|
||||
|
||||
if (Notice::contentTooLong($this->text)) {
|
||||
// XXX: i18n. Needs plural support.
|
||||
// TRANS: Message given if content of a notice for a reply is too long.
|
||||
// TRANS: Message given if content of a notice for a reply is too long. %1$d is used for plural.
|
||||
// TRANS: %1$d is the maximum number of characters, %2$d is the number of submitted characters.
|
||||
$channel->error($this->user, sprintf(_('Notice too long - maximum is %1$d characters, you sent %2$d.'),
|
||||
$channel->error($this->user, sprintf(_m('Notice too long - maximum is %1$d character, you sent %2$d.',
|
||||
'Notice too long - maximum is %1$d characters, you sent %2$d.',
|
||||
Notice::maxContent()),
|
||||
Notice::maxContent(), mb_strlen($this->text)));
|
||||
return;
|
||||
}
|
||||
|
@ -62,6 +62,7 @@ class FeedList extends Widget
|
||||
if (!empty($feeds)) {
|
||||
$this->out->elementStart('div', array('id' => 'export_data',
|
||||
'class' => 'section'));
|
||||
// TRANS: Header for feed links (h2).
|
||||
$this->out->element('h2', null, _('Feeds'));
|
||||
$this->out->elementStart('ul', array('class' => 'xoxo'));
|
||||
|
||||
|
@ -160,14 +160,17 @@ class GroupEditForm extends Form
|
||||
$this->out->elementStart('li');
|
||||
$this->out->input('homepage', _('Homepage'),
|
||||
($this->out->arg('homepage')) ? $this->out->arg('homepage') : $homepage,
|
||||
_('URL of the homepage or blog of the group or topic'));
|
||||
_('URL of the homepage or blog of the group or topic.'));
|
||||
$this->out->elementEnd('li');
|
||||
$this->out->elementStart('li');
|
||||
$desclimit = User_group::maxDescription();
|
||||
if ($desclimit == 0) {
|
||||
$descinstr = _('Describe the group or topic');
|
||||
} else {
|
||||
$descinstr = sprintf(_('Describe the group or topic in %d characters'), $desclimit);
|
||||
$descinstr = sprintf(_m('Describe the group or topic in %d character or less',
|
||||
'Describe the group or topic in %d characters or less',
|
||||
$desclimit),
|
||||
$desclimit);
|
||||
}
|
||||
$this->out->textarea('description', _('Description'),
|
||||
($this->out->arg('description')) ? $this->out->arg('description') : $description,
|
||||
@ -176,7 +179,7 @@ class GroupEditForm extends Form
|
||||
$this->out->elementStart('li');
|
||||
$this->out->input('location', _('Location'),
|
||||
($this->out->arg('location')) ? $this->out->arg('location') : $location,
|
||||
_('Location for the group, if any, like "City, State (or Region), Country"'));
|
||||
_('Location for the group, if any, like "City, State (or Region), Country".'));
|
||||
$this->out->elementEnd('li');
|
||||
if (common_config('group', 'maxaliases') > 0) {
|
||||
$aliases = (empty($this->group)) ? array() : $this->group->getAliases();
|
||||
@ -184,7 +187,9 @@ class GroupEditForm extends Form
|
||||
$this->out->input('aliases', _('Aliases'),
|
||||
($this->out->arg('aliases')) ? $this->out->arg('aliases') :
|
||||
(!empty($aliases)) ? implode(' ', $aliases) : '',
|
||||
sprintf(_('Extra nicknames for the group, comma- or space- separated, max %d'),
|
||||
sprintf(_m('Extra nicknames for the group, separated with commas or spaces. Maximum %d alias allowed.',
|
||||
'Extra nicknames for the group, separated with commas or spaces. Maximum %d aliases allowed.',
|
||||
common_config('group', 'maxaliases')),
|
||||
common_config('group', 'maxaliases')));;
|
||||
$this->out->elementEnd('li');
|
||||
}
|
||||
@ -199,6 +204,6 @@ class GroupEditForm extends Form
|
||||
|
||||
function formActions()
|
||||
{
|
||||
$this->out->submit('submit', _('Save'));
|
||||
$this->out->submit('submit', _m('BUTTON','Save'));
|
||||
}
|
||||
}
|
||||
|
@ -85,6 +85,8 @@ class ImageFile
|
||||
break;
|
||||
case UPLOAD_ERR_INI_SIZE:
|
||||
case UPLOAD_ERR_FORM_SIZE:
|
||||
// TRANS: Exception thrown when too large a file is uploaded.
|
||||
// TRANS: %s is the maximum file size, for example "500b", "10kB" or "2MB".
|
||||
throw new Exception(sprintf(_('That file is too big. The maximum file size is %s.'),
|
||||
ImageFile::maxFileSize()));
|
||||
return;
|
||||
@ -241,11 +243,16 @@ class ImageFile
|
||||
$value = ImageFile::maxFileSizeInt();
|
||||
|
||||
if ($value > 1024 * 1024) {
|
||||
return ($value/(1024*1024)) . _('MB');
|
||||
$value = $value/(1024*1024);
|
||||
// TRANS: Number of megabytes. %d is the number.
|
||||
return sprintf(_m('%dMB','%dMB',$value),$value);
|
||||
} else if ($value > 1024) {
|
||||
return ($value/(1024)) . _('kB');
|
||||
$value = $value/1024;
|
||||
// TRANS: Number of kilobytes. %d is the number.
|
||||
return sprintf(_m('%dkB','%dkB',$value),$value);
|
||||
} else {
|
||||
return $value;
|
||||
// TRANS: Number of bytes. %d is the number.
|
||||
return sprintf(_m('%dB','%dB',$value),$value);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -57,8 +57,9 @@ class MailHandler
|
||||
$msg = $this->cleanup_msg($msg);
|
||||
$msg = common_shorten_links($msg);
|
||||
if (Notice::contentTooLong($msg)) {
|
||||
$this->error($from, sprintf(_('That\'s too long. '.
|
||||
'Max notice size is %d chars.'),
|
||||
$this->error($from, sprintf(_('That\'s too long. Maximum notice size is %d character.',
|
||||
'That\'s too long. Maximum notice size is %d characters.',
|
||||
Notice::maxContent()),
|
||||
Notice::maxContent()));
|
||||
}
|
||||
|
||||
|
75
lib/ping.php
75
lib/ping.php
@ -20,13 +20,12 @@
|
||||
if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); }
|
||||
|
||||
function ping_broadcast_notice($notice) {
|
||||
if ($notice->is_local != Notice::LOCAL_PUBLIC && $notice->is_local != Notice::LOCAL_NONPUBLIC) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if ($notice->is_local != Notice::LOCAL_PUBLIC && $notice->is_local != Notice::LOCAL_NONPUBLIC) {
|
||||
return true;
|
||||
}
|
||||
|
||||
# Array of servers, URL => type
|
||||
$notify = common_config('ping', 'notify');
|
||||
# Array of servers, URL => type
|
||||
$notify = common_config('ping', 'notify');
|
||||
try {
|
||||
$profile = $notice->getProfile();
|
||||
} catch (Exception $e) {
|
||||
@ -35,21 +34,21 @@ function ping_broadcast_notice($notice) {
|
||||
common_log(LOG_ERR, "Exception getting notice profile: " . $e->getMessage());
|
||||
return true;
|
||||
}
|
||||
$tags = ping_notice_tags($notice);
|
||||
$tags = ping_notice_tags($notice);
|
||||
|
||||
foreach ($notify as $notify_url => $type) {
|
||||
switch ($type) {
|
||||
case 'xmlrpc':
|
||||
case 'extended':
|
||||
$req = xmlrpc_encode_request('weblogUpdates.ping',
|
||||
array($profile->nickname, # site name
|
||||
common_local_url('showstream',
|
||||
array('nickname' => $profile->nickname)),
|
||||
common_local_url('shownotice',
|
||||
array('notice' => $notice->id)),
|
||||
common_local_url('userrss',
|
||||
array('nickname' => $profile->nickname)),
|
||||
$tags));
|
||||
foreach ($notify as $notify_url => $type) {
|
||||
switch ($type) {
|
||||
case 'xmlrpc':
|
||||
case 'extended':
|
||||
$req = xmlrpc_encode_request('weblogUpdates.ping',
|
||||
array($profile->nickname, # site name
|
||||
common_local_url('showstream',
|
||||
array('nickname' => $profile->nickname)),
|
||||
common_local_url('shownotice',
|
||||
array('notice' => $notice->id)),
|
||||
common_local_url('userrss',
|
||||
array('nickname' => $profile->nickname)),
|
||||
$tags));
|
||||
|
||||
$request = HTTPClient::start();
|
||||
$request->setConfig('connect_timeout', common_config('ping', 'timeout'));
|
||||
@ -79,9 +78,8 @@ function ping_broadcast_notice($notice) {
|
||||
"Ping success for $notify_url $notice->id");
|
||||
}
|
||||
break;
|
||||
|
||||
case 'get':
|
||||
case 'post':
|
||||
case 'get':
|
||||
case 'post':
|
||||
$args = array('name' => $profile->nickname,
|
||||
'url' => common_local_url('showstream',
|
||||
array('nickname' => $profile->nickname)),
|
||||
@ -108,26 +106,25 @@ function ping_broadcast_notice($notice) {
|
||||
"'$result->body'");
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
common_log(LOG_WARNING, 'Unknown notify type for ' . $notify_url . ': ' . $type);
|
||||
default:
|
||||
common_log(LOG_WARNING, 'Unknown notify type for ' . $notify_url . ': ' . $type);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
function ping_notice_tags($notice) {
|
||||
$tag = new Notice_tag();
|
||||
$tag->notice_id = $notice->id;
|
||||
$tags = array();
|
||||
if ($tag->find()) {
|
||||
while ($tag->fetch()) {
|
||||
$tags[] = $tag->tag;
|
||||
}
|
||||
$tag->free();
|
||||
unset($tag);
|
||||
return implode('|', $tags);
|
||||
}
|
||||
return NULL;
|
||||
$tag = new Notice_tag();
|
||||
$tag->notice_id = $notice->id;
|
||||
$tags = array();
|
||||
if ($tag->find()) {
|
||||
while ($tag->fetch()) {
|
||||
$tags[] = $tag->tag;
|
||||
}
|
||||
$tag->free();
|
||||
unset($tag);
|
||||
return implode('|', $tags);
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
@ -70,7 +70,6 @@ class SearchAction extends Action
|
||||
* @return void
|
||||
* @see SearchGroupNav
|
||||
*/
|
||||
|
||||
function showLocalNav()
|
||||
{
|
||||
$nav = new SearchGroupNav($this, $this->trimmed('q'));
|
||||
@ -127,6 +126,7 @@ class SearchAction extends Action
|
||||
// TRANS: Used as a field label for the field where one or more keywords
|
||||
// TRANS: for searching can be entered.
|
||||
$this->input('q', _('Keyword(s)'), $q);
|
||||
// TRANS: Button text for searching site.
|
||||
$this->submit('search', _m('BUTTON','Search'));
|
||||
$this->elementEnd('li');
|
||||
$this->elementEnd('ul');
|
||||
@ -138,7 +138,7 @@ class SearchAction extends Action
|
||||
}
|
||||
|
||||
function searchSuggestions($q) {
|
||||
// @todo FIXME: This formatting does not make this string get picked up by gettext.
|
||||
// @todo FIXME: i18n issue: This formatting does not make this string get picked up by gettext.
|
||||
// TRANS: Standard search suggestions shown when a search does not give any results.
|
||||
$message = _(<<<E_O_T
|
||||
* Make sure all words are spelled correctly.
|
||||
@ -150,7 +150,7 @@ E_O_T
|
||||
);
|
||||
if (!common_config('site', 'private')) {
|
||||
$qe = urlencode($q);
|
||||
// @todo FIXME: This formatting does not make this string get picked up by gettext.
|
||||
// @todo FIXME: i18n issue: This formatting does not make this string get picked up by gettext.
|
||||
// TRANS: Standard search suggestions shown when a search does not give any results.
|
||||
$message .= sprintf(_(<<<E_O_T
|
||||
|
||||
|
@ -163,9 +163,10 @@ class ThemeUploader
|
||||
$estSize = $blockSize * max(1, intval(ceil($size / $blockSize)));
|
||||
$totalSize += $estSize;
|
||||
if ($totalSize > $sizeLimit) {
|
||||
$msg = sprintf(_("Uploaded theme is too large; " .
|
||||
"must be less than %d bytes uncompressed."),
|
||||
$sizeLimit);
|
||||
$msg = sprintf(_m('Uploaded theme is too large; must be less than %d byte uncompressed.',
|
||||
'Uploaded theme is too large; must be less than %d bytes uncompressed.',
|
||||
$sizeLimit),
|
||||
$sizeLimit);
|
||||
throw new ClientException($msg);
|
||||
}
|
||||
|
||||
|
@ -51,7 +51,6 @@ if (!defined('STATUSNET') && !defined('LACONICA')) {
|
||||
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
|
||||
* @link http://status.net/
|
||||
*/
|
||||
|
||||
abstract class UAPPlugin extends Plugin
|
||||
{
|
||||
public $mediumRectangle = null;
|
||||
@ -66,7 +65,6 @@ abstract class UAPPlugin extends Plugin
|
||||
*
|
||||
* @return boolean hook flag
|
||||
*/
|
||||
|
||||
function onEndShowStatusNetStyles($action)
|
||||
{
|
||||
// XXX: allow override by theme
|
||||
@ -81,7 +79,6 @@ abstract class UAPPlugin extends Plugin
|
||||
*
|
||||
* @return boolean hook flag
|
||||
*/
|
||||
|
||||
function onStartShowAside($action)
|
||||
{
|
||||
if (!is_null($this->mediumRectangle)) {
|
||||
@ -95,6 +92,24 @@ abstract class UAPPlugin extends Plugin
|
||||
$action->elementEnd('div');
|
||||
}
|
||||
|
||||
// XXX: Hack to force ads to show on single-notice pages
|
||||
|
||||
if (!is_null($this->rectangle) &&
|
||||
$action->trimmed('action') == 'shownotice') {
|
||||
|
||||
$action->elementStart('div', array('id' => 'aside_primary',
|
||||
'class' => 'aside'));
|
||||
|
||||
if (Event::handle('StartShowSections', array($action))) {
|
||||
$action->showSections();
|
||||
Event::handle('EndShowSections', array($action));
|
||||
}
|
||||
|
||||
$action->elementEnd('div');
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -126,7 +141,6 @@ abstract class UAPPlugin extends Plugin
|
||||
*
|
||||
* @return boolean hook flag
|
||||
*/
|
||||
|
||||
function onStartShowSections($action)
|
||||
{
|
||||
if (!is_null($this->rectangle)) {
|
||||
@ -147,7 +161,6 @@ abstract class UAPPlugin extends Plugin
|
||||
*
|
||||
* @return boolean hook flag
|
||||
*/
|
||||
|
||||
function onEndShowAside($action)
|
||||
{
|
||||
if (!is_null($this->wideSkyscraper)) {
|
||||
@ -169,7 +182,6 @@ abstract class UAPPlugin extends Plugin
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
|
||||
abstract protected function showMediumRectangle($action);
|
||||
|
||||
/**
|
||||
@ -179,7 +191,6 @@ abstract class UAPPlugin extends Plugin
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
|
||||
abstract protected function showRectangle($action);
|
||||
|
||||
/**
|
||||
@ -189,7 +200,6 @@ abstract class UAPPlugin extends Plugin
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
|
||||
abstract protected function showWideSkyscraper($action);
|
||||
|
||||
/**
|
||||
@ -199,6 +209,5 @@ abstract class UAPPlugin extends Plugin
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
|
||||
abstract protected function showLeaderboard($action);
|
||||
}
|
||||
|
@ -44,7 +44,6 @@ if (!defined('STATUSNET')) {
|
||||
*
|
||||
* @see BlockForm
|
||||
*/
|
||||
|
||||
class UnblockForm extends ProfileActionForm
|
||||
{
|
||||
/**
|
||||
@ -52,7 +51,6 @@ class UnblockForm extends ProfileActionForm
|
||||
*
|
||||
* @return string Name of the action, lowercased.
|
||||
*/
|
||||
|
||||
function target()
|
||||
{
|
||||
return 'unblock';
|
||||
@ -63,11 +61,10 @@ class UnblockForm extends ProfileActionForm
|
||||
*
|
||||
* @return string Title of the form, internationalized
|
||||
*/
|
||||
|
||||
function title()
|
||||
{
|
||||
// TRANS: Title for the form to unblock a user.
|
||||
return _('Unblock');
|
||||
return _m('TITLE','Unblock');
|
||||
}
|
||||
|
||||
/**
|
||||
@ -75,7 +72,6 @@ class UnblockForm extends ProfileActionForm
|
||||
*
|
||||
* @return string description of the form, internationalized
|
||||
*/
|
||||
|
||||
function description()
|
||||
{
|
||||
// TRANS: Description of the form to unblock a user.
|
||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -10,14 +10,14 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: StatusNet - Adsense\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2010-10-27 23:43+0000\n"
|
||||
"PO-Revision-Date: 2010-10-27 23:46:09+0000\n"
|
||||
"POT-Creation-Date: 2010-10-30 23:18+0000\n"
|
||||
"PO-Revision-Date: 2010-10-30 23:20:58+0000\n"
|
||||
"Language-Team: Brazilian Portuguese <http://translatewiki.net/wiki/Portal:pt-"
|
||||
"br>\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-POT-Import-Date: 2010-10-20 17:58:21+0000\n"
|
||||
"X-Generator: MediaWiki 1.17alpha (r75590); Translate extension (2010-09-17)\n"
|
||||
"X-POT-Import-Date: 2010-10-29 16:11:50+0000\n"
|
||||
"X-Generator: MediaWiki 1.17alpha (r75708); Translate extension (2010-09-17)\n"
|
||||
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
|
||||
"X-Language-Code: pt-br\n"
|
||||
"X-Message-Group: #out-statusnet-plugin-adsense\n"
|
||||
@ -80,7 +80,7 @@ msgstr "Código colocado dentro de um retângulo."
|
||||
|
||||
#: adsenseadminpanel.php:188
|
||||
msgid "Leaderboard"
|
||||
msgstr ""
|
||||
msgstr "Classificação"
|
||||
|
||||
#: adsenseadminpanel.php:189
|
||||
msgid "Leaderboard slot code"
|
||||
|
@ -9,13 +9,13 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: StatusNet - Facebook\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2010-10-27 23:43+0000\n"
|
||||
"PO-Revision-Date: 2010-10-27 23:46:35+0000\n"
|
||||
"POT-Creation-Date: 2010-10-30 23:18+0000\n"
|
||||
"PO-Revision-Date: 2010-10-30 23:21:30+0000\n"
|
||||
"Language-Team: Dutch <http://translatewiki.net/wiki/Portal:nl>\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-POT-Import-Date: 2010-10-23 18:57:01+0000\n"
|
||||
"X-Generator: MediaWiki 1.17alpha (r75590); Translate extension (2010-09-17)\n"
|
||||
"X-POT-Import-Date: 2010-10-29 16:12:45+0000\n"
|
||||
"X-Generator: MediaWiki 1.17alpha (r75708); Translate extension (2010-09-17)\n"
|
||||
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
|
||||
"X-Language-Code: nl\n"
|
||||
"X-Message-Group: #out-statusnet-plugin-facebook\n"
|
||||
@ -37,7 +37,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Hallo %1$s.\n"
|
||||
"\n"
|
||||
"Het spijt ons je te moeten meedelen dat het niet mogelijk is uw "
|
||||
"Het spijt ons u te moeten meedelen dat het niet mogelijk is uw "
|
||||
"Facebookstatus bij te werken vanuit %2$s. De Facebookapplicatie is "
|
||||
"uitgeschakeld voor uw gebruiker. Dit kan komen doordat u de toegangsrechten "
|
||||
"voor de Facebookapplicatie hebt ingetrokken of omdat u uw Facebookgebruiker "
|
||||
|
@ -588,7 +588,8 @@ class Ostatus_profile extends Memcached_DataObject
|
||||
// We mark up the attachment link specially for the HTML output
|
||||
// so we can fold-out the full version inline.
|
||||
|
||||
// TRANS: Shown when a notice is longer than supported and/or when attachments are present.
|
||||
// @fixme I18N this tooltip will be saved with the site's default language
|
||||
// TRANS: Shown when a notice is longer than supported and/or when attachments are present. At runtime this will usually be replaced with localized text from StatusNet core messages.
|
||||
$showMoreText = _m('Show more');
|
||||
$attachUrl = common_local_url('attachment',
|
||||
array('attachment' => $attachment->id));
|
||||
|
@ -5,6 +5,6 @@
|
||||
* Pause ~ retain up to 50-100 most recent notices
|
||||
* Add geo data
|
||||
* Make it work for Conversation page (perhaps a little tricky)
|
||||
* IE is updating the counter in document title all the time (Not sure if this is still an issue)
|
||||
* IE is updating the counter in document title all the time (Not sure if this
|
||||
is still an issue)
|
||||
* Reconsider the timestamp approach
|
||||
|
||||
|
@ -43,7 +43,6 @@ if (!defined('STATUSNET') && !defined('LACONICA')) {
|
||||
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
|
||||
* @link http://status.net/
|
||||
*/
|
||||
|
||||
class RealtimePlugin extends Plugin
|
||||
{
|
||||
protected $replyurl = null;
|
||||
@ -326,6 +325,32 @@ class RealtimePlugin extends Plugin
|
||||
return array('plugins/Realtime/realtimeupdate.js');
|
||||
}
|
||||
|
||||
/**
|
||||
* Export any i18n messages that need to be loaded at runtime...
|
||||
*
|
||||
* @param Action $action
|
||||
* @param array $messages
|
||||
*
|
||||
* @return boolean hook return value
|
||||
*/
|
||||
function onEndScriptMessages($action, &$messages)
|
||||
{
|
||||
// TRANS: Text label for realtime view "play" button, usually replaced by an icon.
|
||||
$messages['realtime_play'] = _m('BUTTON', 'Play');
|
||||
// TRANS: Tooltip for realtime view "play" button.
|
||||
$messages['realtime_play_tooltip'] = _m('TOOLTIP', 'Play');
|
||||
// TRANS: Text label for realtime view "pause" button
|
||||
$messages['realtime_pause'] = _m('BUTTON', 'Pause');
|
||||
// TRANS: Tooltip for realtime view "pause" button
|
||||
$messages['realtime_pause_tooltip'] = _m('TOOLTIP', 'Pause');
|
||||
// TRANS: Text label for realtime view "popup" button, usually replaced by an icon.
|
||||
$messages['realtime_popup'] = _m('BUTTON', 'Pop up');
|
||||
// TRANS: Tooltip for realtime view "popup" button.
|
||||
$messages['realtime_popup_tooltip'] = _m('TOOLTIP', 'Pop up in a window');
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
function _updateInitialize($timeline, $user_id)
|
||||
{
|
||||
return "RealtimeUpdate.init($user_id, \"$this->replyurl\", \"$this->favorurl\", \"$this->repeaturl\", \"$this->deleteurl\"); ";
|
||||
|
53
plugins/Realtime/locale/Realtime.pot
Normal file
53
plugins/Realtime/locale/Realtime.pot
Normal file
@ -0,0 +1,53 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2010-11-02 19:46+0000\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=CHARSET\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
#. TRANS: Text label for realtime view "play" button, usually replaced by an icon.
|
||||
#: RealtimePlugin.php:339
|
||||
msgctxt "BUTTON"
|
||||
msgid "Play"
|
||||
msgstr ""
|
||||
|
||||
#. TRANS: Tooltip for realtime view "play" button.
|
||||
#: RealtimePlugin.php:341
|
||||
msgctxt "TOOLTIP"
|
||||
msgid "Play"
|
||||
msgstr ""
|
||||
|
||||
#. TRANS: Text label for realtime view "pause" button
|
||||
#: RealtimePlugin.php:343
|
||||
msgctxt "BUTTON"
|
||||
msgid "Pause"
|
||||
msgstr ""
|
||||
|
||||
#. TRANS: Tooltip for realtime view "pause" button
|
||||
#: RealtimePlugin.php:345
|
||||
msgctxt "TOOLTIP"
|
||||
msgid "Pause"
|
||||
msgstr ""
|
||||
|
||||
#. TRANS: Text label for realtime view "popup" button, usually replaced by an icon.
|
||||
#: RealtimePlugin.php:347
|
||||
msgctxt "BUTTON"
|
||||
msgid "Pop up"
|
||||
msgstr ""
|
||||
|
||||
#. TRANS: Tooltip for realtime view "popup" button.
|
||||
#: RealtimePlugin.php:349
|
||||
msgctxt "TOOLTIP"
|
||||
msgid "Pop up in a window"
|
||||
msgstr ""
|
@ -35,7 +35,6 @@ width:70%;
|
||||
margin-left:1%;
|
||||
}
|
||||
|
||||
|
||||
#notices_primary {
|
||||
position:relative;
|
||||
}
|
||||
@ -75,4 +74,3 @@ line-height:1.2;
|
||||
#showstream #notices_primary {
|
||||
margin-top: 18px;
|
||||
}
|
||||
|
||||
|
@ -261,9 +261,10 @@ RealtimeUpdate = {
|
||||
RealtimeUpdate.addNoticesHover();
|
||||
|
||||
$('#realtime_playpause').remove();
|
||||
$('#realtime_actions').prepend('<li id="realtime_playpause"><button id="realtime_pause" class="pause" title="Pause">Pause</button></li>');
|
||||
|
||||
$('#realtime_pause').bind('click', function() {
|
||||
$('#realtime_actions').prepend('<li id="realtime_playpause"><button id="realtime_pause" class="pause"></button></li>');
|
||||
$('#realtime_pause').text(SN.msg('realtime_pause'))
|
||||
.attr('title', SN.msg('realtime_pause_tooltip'))
|
||||
.bind('click', function() {
|
||||
RealtimeUpdate.removeNoticesHover();
|
||||
RealtimeUpdate.showPlay();
|
||||
return false;
|
||||
@ -274,9 +275,10 @@ RealtimeUpdate = {
|
||||
{
|
||||
RealtimeUpdate.setPause(true);
|
||||
$('#realtime_playpause').remove();
|
||||
$('#realtime_actions').prepend('<li id="realtime_playpause"><span id="queued_counter"></span> <button id="realtime_play" class="play" title="Play">Play</button></li>');
|
||||
|
||||
$('#realtime_play').bind('click', function() {
|
||||
$('#realtime_actions').prepend('<li id="realtime_playpause"><span id="queued_counter"></span> <button id="realtime_play" class="play"></button></li>');
|
||||
$('#realtime_play').text(SN.msg('realtime_play'))
|
||||
.attr('title', SN.msg('realtime_play_tooltip'))
|
||||
.bind('click', function() {
|
||||
RealtimeUpdate.showPause();
|
||||
return false;
|
||||
});
|
||||
@ -334,10 +336,11 @@ RealtimeUpdate = {
|
||||
|
||||
initAddPopup: function(url, timeline, path)
|
||||
{
|
||||
$('#realtime_timeline').append('<button id="realtime_popup" title="Pop up in a window">Pop up</button>');
|
||||
|
||||
$('#realtime_popup').bind('click', function() {
|
||||
window.open(url,
|
||||
$('#realtime_timeline').append('<button id="realtime_popup"></button>');
|
||||
$('#realtime_popup').text(SN.msg('realtime_popup'))
|
||||
.attr('title', SN.msg('realtime_popup_tooltip'))
|
||||
.bind('click', function() {
|
||||
window.open(url,
|
||||
'',
|
||||
'toolbar=no,resizable=yes,scrollbars=yes,status=no,menubar=no,personalbar=no,location=no,width=500,height=550');
|
||||
|
||||
|
30
plugins/XCache/locale/fi/LC_MESSAGES/XCache.po
Normal file
30
plugins/XCache/locale/fi/LC_MESSAGES/XCache.po
Normal file
@ -0,0 +1,30 @@
|
||||
# Translation of StatusNet - XCache to Finnish (Suomi)
|
||||
# Expored from translatewiki.net
|
||||
#
|
||||
# Author: Centerlink
|
||||
# --
|
||||
# This file is distributed under the same license as the StatusNet package.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: StatusNet - XCache\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2010-10-30 23:18+0000\n"
|
||||
"PO-Revision-Date: 2010-10-30 23:23:06+0000\n"
|
||||
"Language-Team: Finnish <http://translatewiki.net/wiki/Portal:fi>\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-POT-Import-Date: 2010-10-29 16:14:46+0000\n"
|
||||
"X-Generator: MediaWiki 1.17alpha (r75708); Translate extension (2010-09-17)\n"
|
||||
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
|
||||
"X-Language-Code: fi\n"
|
||||
"X-Message-Group: #out-statusnet-plugin-xcache\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#: XCachePlugin.php:120
|
||||
msgid ""
|
||||
"Use the <a href=\"http://xcache.lighttpd.net/\">XCache</a> variable cache to "
|
||||
"cache query results."
|
||||
msgstr ""
|
||||
"Käytä <a href=\"http://xcache.lighttpd.net/\">XCache</a>-muuttujavälimuistia "
|
||||
"kyselyn tulosten tallentamiseksi välimuistiin."
|
57
scripts/make-release.php
Normal file
57
scripts/make-release.php
Normal file
@ -0,0 +1,57 @@
|
||||
#!/usr/bin/env php
|
||||
<?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/>.
|
||||
*/
|
||||
|
||||
# Abort if called from a web server
|
||||
|
||||
define('INSTALLDIR', realpath(dirname(__FILE__) . '/..'));
|
||||
|
||||
require_once INSTALLDIR.'/scripts/commandline.inc';
|
||||
|
||||
$base = INSTALLDIR;
|
||||
$encBase = escapeshellarg($base);
|
||||
|
||||
$ver = STATUSNET_VERSION;
|
||||
|
||||
// @fixme hack
|
||||
if (preg_match('/^(\d+)\.(\d+)\.(\d+)/', $ver, $matches)) {
|
||||
list(, $a, $b, $c) = $matches;
|
||||
if ($c > '0') {
|
||||
$cprime = $c - 1;
|
||||
$prev = "$a.$b.$cprime";
|
||||
} else {
|
||||
die("This is a .0 release; you need to provide a thingy.\n");
|
||||
}
|
||||
}
|
||||
|
||||
$tag = $ver;
|
||||
$prefix = "statusnet-$tag";
|
||||
$target = "$prefix.tar.gz";
|
||||
|
||||
$cmd = <<<END
|
||||
(cd $encBase && git archive --prefix=$prefix/ $tag | gzip > /tmp/$target) && \
|
||||
(cd /tmp && tar zxf $target && cd $prefix && make) && \
|
||||
(cd $encBase && git log --oneline {$prev}..{$tag} > /tmp/$prefix/Changelog) && \
|
||||
(cd /tmp && tar zcf $target $prefix) && \
|
||||
(cd /tmp && rm -rf $prefix) && \
|
||||
(mv /tmp/$target .)
|
||||
END;
|
||||
|
||||
echo $cmd;
|
||||
echo "\n";
|
Loading…
Reference in New Issue
Block a user