X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=actions%2Fprofilesettings.php;h=3b71b997555e4f7ae0c06849048b54722b4684db;hb=d1b10ee92bec69e8401bca743b8145f98437074f;hp=38424ab7afadbc38d7aa0688065740803170cad5;hpb=de7ad991f96e39a0565409dedfc168ccc4ee9098;p=quix0rs-gnu-social.git diff --git a/actions/profilesettings.php b/actions/profilesettings.php index 38424ab7af..3b71b99755 100644 --- a/actions/profilesettings.php +++ b/actions/profilesettings.php @@ -29,9 +29,7 @@ * @link http://status.net/ */ -if (!defined('STATUSNET') && !defined('LACONICA')) { - exit(1); -} +if (!defined('GNUSOCIAL')) { exit(1); } /** * Change profile settings @@ -150,7 +148,7 @@ class ProfilesettingsAction extends SettingsAction // TRANS: Checkbox label in form for profile settings. $this->checkbox('sharelocation', _('Share my current location when posting notices'), ($this->arg('sharelocation')) ? - $this->arg('sharelocation') : $user->shareLocation()); + $this->arg('sharelocation') : $this->scoped->shareLocation()); $this->elementEnd('li'); } Event::handle('EndProfileFormData', array($this)); @@ -239,8 +237,16 @@ class ProfilesettingsAction extends SettingsAction if (Event::handle('StartProfileSaveForm', array($this))) { + $nickname = $this->trimmed('nickname'); try { - $nickname = Nickname::normalize($this->trimmed('nickname')); + $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) { + $this->showForm($e->getMessage()); + return; + } + $nickname = Nickname::normalize($nickname); // without in-use check this time } catch (NicknameException $e) { $this->showForm($e->getMessage()); return; @@ -258,12 +264,8 @@ class ProfilesettingsAction extends SettingsAction $tagstring = $this->trimmed('tags'); // Some validation - if (!User::allowed_nickname($nickname)) { - // TRANS: Validation error in form for profile settings. - $this->showForm(_('Not a valid nickname.')); - return; - } else if (!is_null($homepage) && (strlen($homepage) > 0) && - !Validate::uri($homepage, array('allowed_schemes' => array('http', 'https')))) { + if (!is_null($homepage) && (strlen($homepage) > 0) && + !common_valid_http_url($homepage)) { // TRANS: Validation error in form for profile settings. $this->showForm(_('Homepage is not a valid URL.')); return; @@ -288,10 +290,6 @@ class ProfilesettingsAction extends SettingsAction // TRANS: Validation error in form for profile settings. $this->showForm(_('Timezone not selected.')); return; - } else if ($this->nicknameExists($nickname)) { - // TRANS: Validation error in form for profile settings. - $this->showForm(_('Nickname already in use. Try another one.')); - return; } else if (!is_null($language) && strlen($language) > 50) { // TRANS: Validation error in form for profile settings. $this->showForm(_('Language is too long (maximum 50 characters).')); @@ -320,70 +318,42 @@ class ProfilesettingsAction extends SettingsAction } $user = common_current_user(); - $user->query('BEGIN'); - if ($user->nickname != $nickname || - $user->language != $language || - $user->timezone != $timezone) { - - common_debug('Updating user nickname from ' . $user->nickname . ' to ' . $nickname, - __FILE__); - common_debug('Updating user language from ' . $user->language . ' to ' . $language, - __FILE__); - common_debug('Updating user timezone from ' . $user->timezone . ' to ' . $timezone, - __FILE__); - - $original = clone($user); - - $user->nickname = $nickname; - $user->language = $language; - $user->timezone = $timezone; - - $result = $user->updateKeys($original); - - if ($result === false) { - common_log_db_error($user, 'UPDATE', __FILE__); - // TRANS: Server error thrown when user profile settings could not be updated. - $this->serverError(_('Could not update user.')); - return; - } else { - // Re-initialize language environment if it changed - common_init_language(); - // Clear the site owner, in case nickname changed - if ($user->hasRole(Profile_role::OWNER)) { - User::blow('user:site_owner'); - } - } - } + // $user->nickname is updated through Profile->update(); // XXX: XOR - if (($user->autosubscribe ^ $autosubscribe) || - ($user->private_stream ^ $private_stream) || - ($user->subscribe_policy != $subscribe_policy)) { + if (($user->autosubscribe ^ $autosubscribe) + || ($user->private_stream ^ $private_stream) + || $user->timezone != $timezone + || $user->language != $language + || $user->subscribe_policy != $subscribe_policy) { $original = clone($user); $user->autosubscribe = $autosubscribe; + $user->language = $language; $user->private_stream = $private_stream; $user->subscribe_policy = $subscribe_policy; + $user->timezone = $timezone; $result = $user->update($original); - if ($result === false) { common_log_db_error($user, 'UPDATE', __FILE__); // TRANS: Server error thrown when user profile settings could not be updated to // TRANS: automatically subscribe to any subscriber. $this->serverError(_('Could not update user for autosubscribe or subscribe_policy.')); - return; } + + // Re-initialize language environment if it changed + common_init_language(); } $profile = $user->getProfile(); $orig_profile = clone($profile); - $profile->nickname = $user->nickname; + $profile->nickname = $nickname; $profile->fullname = $fullname; $profile->homepage = $homepage; $profile->bio = $bio; @@ -409,7 +379,7 @@ class ProfilesettingsAction extends SettingsAction $exists = false; - $prefs = User_location_prefs::staticGet('user_id', $user->id); + $prefs = User_location_prefs::getKV('user_id', $user->id); if (empty($prefs)) { $prefs = new User_location_prefs(); @@ -433,7 +403,6 @@ class ProfilesettingsAction extends SettingsAction common_log_db_error($prefs, ($exists) ? 'UPDATE' : 'INSERT', __FILE__); // TRANS: Server error thrown when user profile location preference settings could not be updated. $this->serverError(_('Could not save location prefs.')); - return; } } @@ -446,7 +415,6 @@ class ProfilesettingsAction extends SettingsAction common_log_db_error($profile, 'UPDATE', __FILE__); // TRANS: Server error thrown when user profile settings could not be saved. $this->serverError(_('Could not save profile.')); - return; } // Set the user tags @@ -455,12 +423,10 @@ class ProfilesettingsAction extends SettingsAction if (!$result) { // TRANS: Server error thrown when user profile settings tags could not be saved. $this->serverError(_('Could not save tags.')); - return; } $user->query('COMMIT'); Event::handle('EndProfileSaveForm', array($this)); - common_broadcast_profile($profile); // TRANS: Confirmation shown when user profile settings are saved. $this->showForm(_('Settings saved.'), true); @@ -468,17 +434,6 @@ class ProfilesettingsAction extends SettingsAction } } - function nicknameExists($nickname) - { - $user = common_current_user(); - $other = User::staticGet('nickname', $nickname); - if (!$other) { - return false; - } else { - return $other->id != $user->id; - } - } - function showAside() { $user = common_current_user();