]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
Move nick updating of User entry to Profile->update()
authorMikael Nordfeldth <mmn@hethane.se>
Thu, 17 Oct 2013 14:38:42 +0000 (16:38 +0200)
committerMikael Nordfeldth <mmn@hethane.se>
Thu, 17 Oct 2013 14:38:42 +0000 (16:38 +0200)
Also, timezone and language in User table weren't indexes. So no need
to do them separately.

actions/profilesettings.php
classes/Profile.php
classes/User.php
classes/User_group.php

index 71bc40ce9add95abfa53ebf42767ed0582880000..4f63966a4031ad1e8de8552dd73b34a4d4d2f4a5 100644 (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');
index cafaec5a3d18559ea12bc41ae2397d0686e848c2..e461254f9dde88daea334c282510942a83d0573a 100644 (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();
index 7b53877a31f60234833be5cbde9541dd2cef1b5b..48767f46d93d4860ae389891b02439a3d28bacef 100644 (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);
             }
index af1f3a68466fe688527e8850b5f1e2ca0a4f471e..5cae07bf292bd55de835579bfe9ba0a487de3792 100644 (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',