forked from GNUsocial/gnu-social
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:
parent
e2c50d202f
commit
145fbf1130
@ -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');
|
||||
|
@ -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();
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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',
|
||||
|
Loading…
Reference in New Issue
Block a user