Ver Fonte

Update User\Save for username update

Visman há 4 anos atrás
pai
commit
1e2790f47d

+ 1 - 1
app/Models/Forum/UpdateUsername.php

@@ -12,7 +12,7 @@ use RuntimeException;
 class UpdateUsername extends Action
 {
     /**
-     * Обновляет имя пользователя в списке разделов и модераторах
+     * Обновляет имя пользователя в таблице разделов
      */
     public function updateUsername(User $user): void
     {

+ 1 - 1
app/Models/Post/UpdateUsername.php

@@ -11,7 +11,7 @@ use RuntimeException;
 class UpdateUsername extends Action
 {
     /**
-     * Обновляет имя пользователя в сообщениях
+     * Обновляет имя пользователя в таблице сообщений
      */
     public function updateUsername(User $user): void
     {

+ 1 - 1
app/Models/Topic/UpdateUsername.php

@@ -11,7 +11,7 @@ use RuntimeException;
 class UpdateUsername extends Action
 {
     /**
-     * Обновляет имя пользователя в сообщениях
+     * Обновляет имя пользователя в таблице тем
      */
     public function updateUsername(User $user): void
     {

+ 39 - 2
app/Models/User/Save.php

@@ -18,10 +18,12 @@ class Save extends Action
         if ($user->id < 1) {
             throw new RuntimeException('The model does not have ID');
         }
+
         $modified = $user->getModified();
         if (empty($modified)) {
             return $user;
         }
+
         $values = $user->getAttrs();
 
         if (
@@ -36,21 +38,30 @@ class Save extends Action
             $table  = 'users';
             $where  = 'id=?i';
         }
+
         $set = $vars = [];
-        $grChange = false;
+        $grChange   = false;
+        $nameChange = false;
+
         foreach ($modified as $name) {
             if (! isset($fileds[$name])) {
                 continue;
             }
+
             $vars[] = $values[$name];
             $set[]  = $name . '=?' . $fileds[$name];
-            if ('group_id' === $name) {
+
+            if ('username' === $name) {
+                $nameChange = true;
+            } elseif ('group_id' === $name) {
                 $grChange = true;
             }
         }
+
         if (empty($set)) {
             return $user;
         }
+
         if (
             $user->isGuest
             && ! $user->isUnverified
@@ -59,6 +70,7 @@ class Save extends Action
         } else {
             $vars[] = $user->id;
         }
+
         $set   = \implode(', ', $set);
         $query = "UPDATE ::{$table}
             SET {$set}
@@ -67,6 +79,13 @@ class Save extends Action
         $this->c->DB->exec($query, $vars);
         $user->resModified();
 
+        if (
+            $nameChange
+            && ! $user->isGuest
+        ) {
+            $this->updateUsernameInOtherTables($user);
+        }
+
         if ($grChange) {
             $this->c->admins->reset();
             $this->c->stats->reset();
@@ -83,20 +102,25 @@ class Save extends Action
         if (null !== $user->id) {
             throw new RuntimeException('The model has ID');
         }
+
         $attrs  = $user->getAttrs();
         $fileds = $this->c->dbMap->users;
         $set = $set2 = $vars = [];
+
         foreach ($attrs as $key => $value) {
             if (! isset($fileds[$key])) {
                 continue;
             }
+
             $vars[] = $value;
             $set[]  = $key;
             $set2[] = '?' . $fileds[$key];
         }
+
         if (empty($set)) {
             throw new RuntimeException('The model is empty');
         }
+
         $set   = \implode(', ', $set);
         $set2  = \implode(', ', $set2);
         $query = "INSERT INTO ::users ({$set})
@@ -115,4 +139,17 @@ class Save extends Action
 
         return $user->id;
     }
+
+    /**
+     * Обновляет username по всей(?) DB
+     */
+    protected function updateUsernameInOtherTables(User $user): void
+    {
+        $this->c->posts->updateUsername($user);
+        $this->c->topics->updateUsername($user);
+        $this->c->forums->updateUsername($user);
+        $this->c->Online->updateUsername($user);
+
+        // ???? и т.д.
+    }
 }