Update User\Save for username update

This commit is contained in:
Visman 2020-11-03 22:02:56 +07:00
parent cb8b7f4440
commit 1e2790f47d
4 changed files with 42 additions and 5 deletions

View file

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

View file

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

View file

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

View file

@ -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);
// ???? и т.д.
}
}