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::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');
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());
}
function showScripts()
{
parent::showScripts();
- $this->autofocus('newnickname');
+ $this->autofocus('fullname');
}
function trySave()
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');
$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;
}
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.'));
function showScripts()
{
parent::showScripts();
- $this->autofocus('nickname');
+ $this->autofocus('fullname');
}
/**
$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.
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');
$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;
$profile->location_ns = $loc->location_ns;
}
- $profile->profileurl = common_profile_url($nickname);
-
if (common_config('location', 'share') == 'user') {
$exists = false;
'profile' =>
array('banned' => array(),
'biolimit' => null,
+ 'changenick' => false,
'backup' => true,
'restore' => true,
'delete' => false,
$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.