[core] have UserCreationEvent return the created user, so we don't need to immediately re-query for it
This commit is contained in:
parent
ac123317d8
commit
ea700d5aa6
3 changed files with 22 additions and 28 deletions
|
@ -101,8 +101,8 @@ class RatingsBlurTest extends ShimmiePHPUnitTestCase
|
||||||
|
|
||||||
private function create_test_user(string $username): void
|
private function create_test_user(string $username): void
|
||||||
{
|
{
|
||||||
send_event(new UserCreationEvent($username, $username, $username, "$username@test.com", false));
|
$uce = send_event(new UserCreationEvent($username, $username, $username, "$username@test.com", false));
|
||||||
send_event(new UserLoginEvent(User::by_name($username)));
|
send_event(new UserLoginEvent($uce->user));
|
||||||
}
|
}
|
||||||
|
|
||||||
private function delete_test_user(string $username): void
|
private function delete_test_user(string $username): void
|
||||||
|
|
|
@ -44,6 +44,8 @@ class UserPageBuildingEvent extends PartListBuildingEvent
|
||||||
|
|
||||||
class UserCreationEvent extends Event
|
class UserCreationEvent extends Event
|
||||||
{
|
{
|
||||||
|
public ?User $user;
|
||||||
|
|
||||||
public function __construct(
|
public function __construct(
|
||||||
public string $username,
|
public string $username,
|
||||||
public string $password,
|
public string $password,
|
||||||
|
|
|
@ -115,7 +115,7 @@ class LoginResult
|
||||||
try {
|
try {
|
||||||
$uce = send_event(new UserCreationEvent($username, $password1, $password2, $email, true));
|
$uce = send_event(new UserCreationEvent($username, $password1, $password2, $email, true));
|
||||||
return new LoginResult(
|
return new LoginResult(
|
||||||
User::by_name($username),
|
$uce->user,
|
||||||
UserPage::get_session_id($username),
|
UserPage::get_session_id($username),
|
||||||
null
|
null
|
||||||
);
|
);
|
||||||
|
@ -499,7 +499,7 @@ class UserPage extends Extension
|
||||||
|
|
||||||
public function onUserCreation(UserCreationEvent $event): void
|
public function onUserCreation(UserCreationEvent $event): void
|
||||||
{
|
{
|
||||||
global $config, $page, $user;
|
global $config, $database, $page, $user;
|
||||||
|
|
||||||
$name = $event->username;
|
$name = $event->username;
|
||||||
//$pass = $event->password;
|
//$pass = $event->password;
|
||||||
|
@ -538,10 +538,25 @@ class UserPage extends Extension
|
||||||
throw new UserCreationException("Email address is required");
|
throw new UserCreationException("Email address is required");
|
||||||
}
|
}
|
||||||
|
|
||||||
$new_user = $this->create_user($event);
|
$email = (!empty($event->email)) ? $event->email : null;
|
||||||
|
|
||||||
|
// if there are currently no admins, the new user should be one
|
||||||
|
$need_admin = ($database->get_one("SELECT COUNT(*) FROM users WHERE class='admin'") == 0);
|
||||||
|
$class = $need_admin ? 'admin' : 'user';
|
||||||
|
|
||||||
|
$database->execute(
|
||||||
|
"INSERT INTO users (name, pass, joindate, email, class) VALUES (:username, :hash, now(), :email, :class)",
|
||||||
|
["username" => $event->username, "hash" => '', "email" => $email, "class" => $class]
|
||||||
|
);
|
||||||
|
$new_user = User::by_name($event->username);
|
||||||
|
$new_user->set_password($event->password);
|
||||||
|
log_info("user", "Created User @{$event->username}");
|
||||||
|
|
||||||
if ($event->login) {
|
if ($event->login) {
|
||||||
send_event(new UserLoginEvent($new_user));
|
send_event(new UserLoginEvent($new_user));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$event->user = $new_user;
|
||||||
}
|
}
|
||||||
|
|
||||||
public const USER_SEARCH_REGEX = "/^(?:poster|user)(!?)[=|:](.*)$/i";
|
public const USER_SEARCH_REGEX = "/^(?:poster|user)(!?)[=|:](.*)$/i";
|
||||||
|
@ -664,29 +679,6 @@ class UserPage extends Extension
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private function create_user(UserCreationEvent $event): User
|
|
||||||
{
|
|
||||||
global $database;
|
|
||||||
|
|
||||||
$email = (!empty($event->email)) ? $event->email : null;
|
|
||||||
|
|
||||||
// if there are currently no admins, the new user should be one
|
|
||||||
$need_admin = ($database->get_one("SELECT COUNT(*) FROM users WHERE class='admin'") == 0);
|
|
||||||
$class = $need_admin ? 'admin' : 'user';
|
|
||||||
|
|
||||||
$database->execute(
|
|
||||||
"INSERT INTO users (name, pass, joindate, email, class) VALUES (:username, :hash, now(), :email, :class)",
|
|
||||||
["username" => $event->username, "hash" => '', "email" => $email, "class" => $class]
|
|
||||||
);
|
|
||||||
$uid = $database->get_last_insert_id('users_id_seq');
|
|
||||||
$new_user = User::by_name($event->username);
|
|
||||||
$new_user->set_password($event->password);
|
|
||||||
|
|
||||||
log_info("user", "Created User #$uid ({$event->username})");
|
|
||||||
|
|
||||||
return $new_user;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static function get_session_id(string $name): string
|
public static function get_session_id(string $name): string
|
||||||
{
|
{
|
||||||
global $config;
|
global $config;
|
||||||
|
|
Reference in a new issue