From: Mikael Nordfeldth Date: Wed, 4 Feb 2015 20:25:14 +0000 (+0100) Subject: By default, don't allow nick changes for profiles X-Git-Url: https://git.mxchange.org/?a=commitdiff_plain;h=a89e91da79f1936afdf213867e75d9f8364361ca;p=quix0rs-gnu-social.git 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. --- diff --git a/actions/apigroupprofileupdate.php b/actions/apigroupprofileupdate.php index 9a4592f423..1a489eeefb 100644 --- a/actions/apigroupprofileupdate.php +++ b/actions/apigroupprofileupdate.php @@ -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()); } diff --git a/actions/editgroup.php b/actions/editgroup.php index 7b499d00ff..cca00ea6b9 100644 --- a/actions/editgroup.php +++ b/actions/editgroup.php @@ -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.')); diff --git a/actions/profilesettings.php b/actions/profilesettings.php index 3b71b99755..59a7f6d860 100644 --- a/actions/profilesettings.php +++ b/actions/profilesettings.php @@ -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; diff --git a/lib/default.php b/lib/default.php index e39c35efd8..6ca61f191b 100644 --- a/lib/default.php +++ b/lib/default.php @@ -126,6 +126,7 @@ $default = 'profile' => array('banned' => array(), 'biolimit' => null, + 'changenick' => false, 'backup' => true, 'restore' => true, 'delete' => false, diff --git a/lib/groupeditform.php b/lib/groupeditform.php index e943dcd19a..9061af2336 100644 --- a/lib/groupeditform.php +++ b/lib/groupeditform.php @@ -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.