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/ * @link http://status.net/
*/ */
if (!defined('STATUSNET') && !defined('LACONICA')) { if (!defined('GNUSOCIAL')) { exit(1); }
exit(1);
}
/** /**
* Change profile settings * Change profile settings
@ -320,70 +318,42 @@ class ProfilesettingsAction extends SettingsAction
} }
$user = common_current_user(); $user = common_current_user();
$user->query('BEGIN'); $user->query('BEGIN');
if ($user->nickname != $nickname || // $user->nickname is updated through Profile->update();
$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');
}
}
}
// XXX: XOR // XXX: XOR
if (($user->autosubscribe ^ $autosubscribe) || if (($user->autosubscribe ^ $autosubscribe)
($user->private_stream ^ $private_stream) || || ($user->private_stream ^ $private_stream)
($user->subscribe_policy != $subscribe_policy)) { || $user->timezone != $timezone
|| $user->language != $language
|| $user->subscribe_policy != $subscribe_policy) {
$original = clone($user); $original = clone($user);
$user->autosubscribe = $autosubscribe; $user->autosubscribe = $autosubscribe;
$user->language = $language;
$user->private_stream = $private_stream; $user->private_stream = $private_stream;
$user->subscribe_policy = $subscribe_policy; $user->subscribe_policy = $subscribe_policy;
$user->timezone = $timezone;
$result = $user->update($original); $result = $user->update($original);
if ($result === false) { if ($result === false) {
common_log_db_error($user, 'UPDATE', __FILE__); common_log_db_error($user, 'UPDATE', __FILE__);
// TRANS: Server error thrown when user profile settings could not be updated to // TRANS: Server error thrown when user profile settings could not be updated to
// TRANS: automatically subscribe to any subscriber. // TRANS: automatically subscribe to any subscriber.
$this->serverError(_('Could not update user for autosubscribe or subscribe_policy.')); $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(); $profile = $user->getProfile();
$orig_profile = clone($profile); $orig_profile = clone($profile);
$profile->nickname = $user->nickname; $profile->nickname = $nickname;
$profile->fullname = $fullname; $profile->fullname = $fullname;
$profile->homepage = $homepage; $profile->homepage = $homepage;
$profile->bio = $bio; $profile->bio = $bio;
@ -433,7 +403,6 @@ class ProfilesettingsAction extends SettingsAction
common_log_db_error($prefs, ($exists) ? 'UPDATE' : 'INSERT', __FILE__); common_log_db_error($prefs, ($exists) ? 'UPDATE' : 'INSERT', __FILE__);
// TRANS: Server error thrown when user profile location preference settings could not be updated. // TRANS: Server error thrown when user profile location preference settings could not be updated.
$this->serverError(_('Could not save location prefs.')); $this->serverError(_('Could not save location prefs.'));
return;
} }
} }
@ -446,7 +415,6 @@ class ProfilesettingsAction extends SettingsAction
common_log_db_error($profile, 'UPDATE', __FILE__); common_log_db_error($profile, 'UPDATE', __FILE__);
// TRANS: Server error thrown when user profile settings could not be saved. // TRANS: Server error thrown when user profile settings could not be saved.
$this->serverError(_('Could not save profile.')); $this->serverError(_('Could not save profile.'));
return;
} }
// Set the user tags // Set the user tags
@ -455,7 +423,6 @@ class ProfilesettingsAction extends SettingsAction
if (!$result) { if (!$result) {
// TRANS: Server error thrown when user profile settings tags could not be saved. // TRANS: Server error thrown when user profile settings tags could not be saved.
$this->serverError(_('Could not save tags.')); $this->serverError(_('Could not save tags.'));
return;
} }
$user->query('COMMIT'); $user->query('COMMIT');

View File

@ -842,6 +842,31 @@ class Profile extends Managed_DataObject
return ($biolimit > 0 && !empty($bio) && (mb_strlen($bio) > $biolimit)); 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() function delete()
{ {
$this->_deleteNotices(); $this->_deleteNotices();

View File

@ -155,7 +155,7 @@ class User extends Managed_DataObject
{ {
$this->_connect(); $this->_connect();
$parts = array(); $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) { if (strcmp($this->$k, $orig->$k) != 0) {
$parts[] = $k . ' = ' . $this->_quote($this->$k); $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*/ $fields = array(/*group field => profile field*/
'nickname' => 'nickname', 'nickname' => 'nickname',
'fullname' => 'fullname', 'fullname' => 'fullname',