Add normUsername() method for users

Add username_normal field for users.
For https://github.com/forkbb/forkbb/issues/1
This commit is contained in:
Visman 2021-11-30 18:46:13 +07:00
parent 690abfef5b
commit 341a400f3b
6 changed files with 6394 additions and 3 deletions

View file

@ -951,6 +951,7 @@ class Install extends Admin
'id' => ['SERIAL', false],
'group_id' => ['INT(10) UNSIGNED', false, 0],
'username' => ['VARCHAR(190)', false, ''],
'username_normal' => ['VARCHAR(190)', false, ''],
'password' => ['VARCHAR(255)', false, ''],
'email' => ['VARCHAR(190)', false, ''],
'email_normal' => ['VARCHAR(190)', false, ''],
@ -1126,8 +1127,8 @@ class Install extends Admin
$this->c->DB->exec('UPDATE ::groups SET g_pm=0, g_sig_length=0, g_sig_lines=0 WHERE g_id=?i', [FORK_GROUP_GUEST]);
$ip = \filter_var($_SERVER['REMOTE_ADDR'], \FILTER_VALIDATE_IP) ?: '0.0.0.0';
$this->c->DB->exec('INSERT INTO ::users (group_id, username, password, signature, u_pm) VALUES (?i, ?s, ?s, \'\', ?i)', [FORK_GROUP_GUEST, __('Guest '), __('Guest '), 0]);
$this->c->DB->exec('INSERT INTO ::users (group_id, username, password, email, email_normal, language, style, num_posts, last_post, registered, registration_ip, last_visit, signature, num_topics) VALUES (?i, ?s, ?s, ?s, ?s, ?s, ?s, 1, ?i, ?i, ?s, ?i, \'\', 1)', [FORK_GROUP_ADMIN, $v->username, password_hash($v->password, \PASSWORD_DEFAULT), $v->email, $this->c->NormEmail->normalize($v->email), $v->defaultlang, $v->defaultstyle, $now, $now, $ip, $now]);
$this->c->DB->exec('INSERT INTO ::users (group_id, username, username_normal, password, signature, u_pm) VALUES (?i, ?s, ?s, ?s, \'\', ?i)', [FORK_GROUP_GUEST, __('Guest '), $this->c->users->normUsername(__('Guest ')), __('Guest '), 0]);
$this->c->DB->exec('INSERT INTO ::users (group_id, username, username_normal, password, email, email_normal, language, style, num_posts, last_post, registered, registration_ip, last_visit, signature, num_topics) VALUES (?i, ?s, ?s, ?s, ?s, ?s, ?s, ?s, 1, ?i, ?i, ?s, ?i, \'\', 1)', [FORK_GROUP_ADMIN, $v->username, $this->c->users->normUsername($v->username), password_hash($v->password, \PASSWORD_DEFAULT), $v->email, $this->c->NormEmail->normalize($v->email), $v->defaultlang, $v->defaultstyle, $now, $now, $ip, $now]);
$pun_config = [
'i_fork_revision' => $this->c->FORK_REVISION,

View file

@ -1627,4 +1627,47 @@ class Update extends Admin
return null;
}
/**
* rev.40 to rev.41
*/
protected function stageNumber40(array $args): ?int
{
$coreConfig = new CoreConfig($this->configFile);
$coreConfig->add(
'shared=>UserManagerNormUsername',
'\\ForkBB\\Models\\User\\NormUsername::class'
);
$coreConfig->save();
$this->c->DB->addField('users', 'username_normal', 'VARCHAR(190)', false, '', 'username');
$confChange = [
'shared' => [
'UserManagerNormUsername' => \ForkBB\Models\User\NormUsername::class,
],
];
$this->c->config($confChange);
$query = 'SELECT id, username FROM ::users';
$users = $this->c->DB->query($query)->fetchAll(PDO::FETCH_KEY_PAIR);
$query = 'UPDATE ::users AS u
SET u.username_normal = ?s:norm
WHERE u.id=?i:id';
foreach ($users as $id => $username) {
$vars = [
':id' => $id,
':norm' => $this->c->users->normUsername($username),
];
$this->c->DB->exec($query, $vars);
}
return null;
}
}

File diff suppressed because it is too large Load diff

View file

@ -58,7 +58,7 @@ if (
}
$c->PUBLIC_URL = $c->BASE_URL . $forkPublicPrefix;
$c->FORK_REVISION = 40;
$c->FORK_REVISION = 41;
$c->START = $forkStart;
$c->DIR_APP = __DIR__;
$c->DIR_PUBLIC = \realpath(__DIR__ . '/../public');

View file

@ -109,6 +109,8 @@ return [
'VLemail' => \ForkBB\Models\Validators\Email::class,
'VLhtml' => \ForkBB\Models\Validators\Html::class,
'UserManagerNormUsername' => \ForkBB\Models\User\NormUsername::class,
],
'multiple' => [
'PrimaryController' => \ForkBB\Controllers\Install::class,

View file

@ -217,6 +217,8 @@ return [
'PMModelSave' => \ForkBB\Models\PM\Save::class,
'PMModelDelete' => \ForkBB\Models\PM\Delete::class,
'PMModelUpdateUsername' => \ForkBB\Models\PM\UpdateUsername::class,
'UserManagerNormUsername' => \ForkBB\Models\User\NormUsername::class,
],
'multiple' => [
'CtrlPrimary' => \ForkBB\Controllers\Primary::class,