Move nick updating of User entry to Profile->update()

Also, timezone and language in User table weren't indexes. So no need
to do them separately.
This commit is contained in:
Mikael Nordfeldth 2013-10-17 16:38:42 +02:00
parent e2c50d202f
commit 145fbf1130
4 changed files with 40 additions and 47 deletions

View File

@ -29,9 +29,7 @@
* @link http://status.net/
*/
if (!defined('STATUSNET') && !defined('LACONICA')) {
exit(1);
}
if (!defined('GNUSOCIAL')) { exit(1); }
/**
* Change profile settings
@ -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;
@ -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,7 +423,6 @@ 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');

View File

@ -842,6 +842,31 @@ class Profile extends Managed_DataObject
return ($biolimit > 0 && !empty($bio) && (mb_strlen($bio) > $biolimit));
}
public function update($orig)
{
if ($this->nickname != $orig->nickname) {
$local = User::getKV('id', $this->id);
if ($local instanceof User) {
common_debug("Updating User ({$this->id}) nickname from {$orig->nickname} to {$this->nickname}");
$origuser = clone($local);
$local->nickname = $this->nickname;
$result = $local->updateKeys($origuser);
if ($result === false) {
common_log_db_error($local, 'UPDATE', __FILE__);
// TRANS: Server error thrown when user profile settings could not be updated.
throw new ServerException(_('Could not update user nickname.'));
}
// Clear the site owner, in case nickname changed
if ($local->hasRole(Profile_role::OWNER)) {
User::blow('user:site_owner');
}
}
}
return parent::update($orig);
}
function delete()
{
$this->_deleteNotices();

View File

@ -155,7 +155,7 @@ class User extends Managed_DataObject
{
$this->_connect();
$parts = array();
foreach (array('nickname', 'email', 'incomingemail', 'sms', 'carrier', 'smsemail', 'language', 'timezone') as $k) {
foreach (array('nickname', 'email', 'incomingemail', 'sms', 'carrier', 'smsemail') as $k) {
if (strcmp($this->$k, $orig->$k) != 0) {
$parts[] = $k . ' = ' . $this->_quote($this->$k);
}

View File

@ -794,6 +794,7 @@ class User_group extends Managed_DataObject
}
}
// Also make sure the Profile table is up to date!
$fields = array(/*group field => profile field*/
'nickname' => 'nickname',
'fullname' => 'fullname',