Commit a89e91da authored by mmn's avatar mmn

By default, don't allow nick changes for profiles

This goes for both users and groups, since they share nickname namespace.

If you want to enable nickname changes, just add this to your config:

   $config['profile']['changenick'] = true;

This commit should cover all changes in our usual web forms as well as through
the API.
parent 51558543
......@@ -55,7 +55,7 @@ class ApiGroupProfileUpdateAction extends ApiAuthAction
{
parent::prepare($args);
$this->nickname = common_canonical_nickname($this->trimmed('nickname'));
$this->nickname = Nickname::normalize($this->trimmed('nickname'));
$this->fullname = $this->trimmed('fullname');
$this->homepage = $this->trimmed('homepage');
......@@ -106,14 +106,9 @@ class ApiGroupProfileUpdateAction extends ApiAuthAction
try {
if (!empty($this->nickname)) {
if (common_config('profile', 'changenick') == true && $this->group->nickname !== $this->nickname) {
try {
$this->group->nickname = Nickname::normalize($this->nickname, true);
} catch (NicknameTakenException $e) {
// Abort only if the nickname is occupied by _another_ local group
if ($e->profile->id != $this->group->id) {
throw new ApiValidationException($e->getMessage());
}
} catch (NicknameException $e) {
throw new ApiValidationException($e->getMessage());
}
......
......@@ -152,7 +152,7 @@ class EditgroupAction extends GroupAction
function showScripts()
{
parent::showScripts();
$this->autofocus('newnickname');
$this->autofocus('fullname');
}
function trySave()
......@@ -165,19 +165,21 @@ class EditgroupAction extends GroupAction
if (Event::handle('StartGroupSaveForm', array($this))) {
$nickname = $this->trimmed('newnickname');
try {
$nickname = Nickname::normalize($nickname, true);
} catch (NicknameTakenException $e) {
// Abort only if the nickname is occupied by _another_ group
if ($e->profile->id != $this->group->profile_id) {
// $nickname will only be set if this changenick value is true.
if (common_config('profile', 'changenick') == true) {
try {
$nickname = Nickname::normalize($this->trimmed('newnickname'), true);
} catch (NicknameTakenException $e) {
// Abort only if the nickname is occupied by _another_ group
if ($e->profile->id != $this->group->profile_id) {
$this->showForm($e->getMessage());
return;
}
$nickname = Nickname::normalize($this->trimmed('newnickname')); // without in-use check this time
} catch (NicknameException $e) {
$this->showForm($e->getMessage());
return;
}
$nickname = Nickname::normalize($nickname); // without in-use check this time
} catch (NicknameException $e) {
$this->showForm($e->getMessage());
return;
}
$fullname = $this->trimmed('fullname');
......@@ -239,12 +241,16 @@ class EditgroupAction extends GroupAction
$orig = clone($this->group);
$this->group->nickname = $nickname;
if (common_config('profile', 'changenick') == true && $this->group->nickname !== $nickname) {
assert(Nickname::normalize($nickname)===$nickname);
common_debug("Changing group nickname from '{$profile->nickname}' to '{$nickname}'.");
$this->group->nickname = $nickname;
$this->group->mainpage = common_local_url('showgroup', array('nickname' => $this->group->nickname));
}
$this->group->fullname = $fullname;
$this->group->homepage = $homepage;
$this->group->description = $description;
$this->group->location = $location;
$this->group->mainpage = common_local_url('showgroup', array('nickname' => $nickname));
$this->group->join_policy = $join_policy;
$this->group->force_scope = $force_scope;
......@@ -269,7 +275,7 @@ class EditgroupAction extends GroupAction
}
if ($this->group->nickname != $orig->nickname) {
common_redirect(common_local_url('editgroup', array('nickname' => $nickname)), 303);
common_redirect(common_local_url('editgroup', array('nickname' => $this->group->nickname)), 303);
} else {
// TRANS: Group edit form success message.
$this->showForm(_('Options saved.'));
......
......@@ -70,7 +70,7 @@ class ProfilesettingsAction extends SettingsAction
function showScripts()
{
parent::showScripts();
$this->autofocus('nickname');
$this->autofocus('fullname');
}
/**
......@@ -100,9 +100,11 @@ class ProfilesettingsAction extends SettingsAction
$this->elementStart('li');
// TRANS: Field label in form for profile settings.
$this->input('nickname', _('Nickname'),
($this->arg('nickname')) ? $this->arg('nickname') : $profile->nickname,
$this->arg('nickname') ?: $profile->nickname,
// TRANS: Tooltip for field label in form for profile settings.
_('1-64 lowercase letters or numbers, no punctuation or spaces.'));
_('1-64 lowercase letters or numbers, no punctuation or spaces.'),
null, false, // "name" (will be set to id), then "required"
!common_config('profile', 'changenick') ? array('disabled'=>'disabled') : array());
$this->elementEnd('li');
$this->elementStart('li');
// TRANS: Field label in form for profile settings.
......@@ -237,19 +239,21 @@ class ProfilesettingsAction extends SettingsAction
if (Event::handle('StartProfileSaveForm', array($this))) {
$nickname = $this->trimmed('nickname');
try {
$nickname = Nickname::normalize($nickname, true);
} catch (NicknameTakenException $e) {
// Abort only if the nickname is occupied by another local profile
if ($e->profile->id != $this->scoped->id) {
// $nickname will only be set if this changenick value is true.
if (common_config('profile', 'changenick') == true) {
try {
$nickname = Nickname::normalize($this->trimmed('nickname'), true);
} catch (NicknameTakenException $e) {
// Abort only if the nickname is occupied by another local profile
if ($e->profile->id != $this->scoped->id) {
$this->showForm($e->getMessage());
return;
}
$nickname = Nickname::normalize($this->trimmed('nickname')); // without in-use check this time
} catch (NicknameException $e) {
$this->showForm($e->getMessage());
return;
}
$nickname = Nickname::normalize($nickname); // without in-use check this time
} catch (NicknameException $e) {
$this->showForm($e->getMessage());
return;
}
$fullname = $this->trimmed('fullname');
......@@ -353,7 +357,12 @@ class ProfilesettingsAction extends SettingsAction
$orig_profile = clone($profile);
$profile->nickname = $nickname;
if (common_config('profile', 'changenick') == true && $profile->nickname !== $nickname) {
assert(Nickname::normalize($nickname)===$nickname);
common_debug("Changing user nickname from '{$profile->nickname}' to '{$nickname}'.");
$profile->nickname = $nickname;
$profile->profileurl = common_profile_url($profile->nickname);
}
$profile->fullname = $fullname;
$profile->homepage = $homepage;
$profile->bio = $bio;
......@@ -373,8 +382,6 @@ class ProfilesettingsAction extends SettingsAction
$profile->location_ns = $loc->location_ns;
}
$profile->profileurl = common_profile_url($nickname);
if (common_config('location', 'share') == 'user') {
$exists = false;
......
......@@ -126,6 +126,7 @@ $default =
'profile' =>
array('banned' => array(),
'biolimit' => null,
'changenick' => false,
'backup' => true,
'restore' => true,
'delete' => false,
......
......@@ -147,7 +147,11 @@ class GroupEditForm extends Form
$this->out->input('newnickname', _('Nickname'),
($this->out->arg('newnickname')) ? $this->out->arg('newnickname') : $nickname,
// TRANS: Field title on group edit form.
_('1-64 lowercase letters or numbers, no punctuation or spaces.'));
_('1-64 lowercase letters or numbers, no punctuation or spaces.'),
null, false,
$this->group instanceof User_group && !common_config('profile', 'changenick')
? array('disabled'=>'disabled') // can't change nickname
: array()); // either we can change nickname, or we're creating a new group.
$this->out->elementEnd('li');
$this->out->elementStart('li');
// TRANS: Field label on group edit form.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment