[user] make email-requiredness a setup option
This commit is contained in:
parent
f902fba814
commit
840b0849df
4 changed files with 35 additions and 114 deletions
|
@ -66,7 +66,7 @@ if(class_exists("\\PHPUnit\\Framework\\TestCase")) {
|
||||||
{
|
{
|
||||||
if (is_null(User::by_name($name))) {
|
if (is_null(User::by_name($name))) {
|
||||||
$userPage = new UserPage();
|
$userPage = new UserPage();
|
||||||
$userPage->onUserCreation(new UserCreationEvent($name, $name, $name, "", false));
|
$userPage->onUserCreation(new UserCreationEvent($name, $name, $name, "$name@$name.com", false));
|
||||||
assert(!is_null(User::by_name($name)), "Creation of user $name failed");
|
assert(!is_null(User::by_name($name)), "Creation of user $name failed");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -149,6 +149,7 @@ class UserPage extends Extension
|
||||||
$config->set_default_string("avatar_gravatar_default", "");
|
$config->set_default_string("avatar_gravatar_default", "");
|
||||||
$config->set_default_string("avatar_gravatar_rating", "g");
|
$config->set_default_string("avatar_gravatar_rating", "g");
|
||||||
$config->set_default_bool("login_tac_bbcode", true);
|
$config->set_default_bool("login_tac_bbcode", true);
|
||||||
|
$config->set_default_bool("user_email_required", true);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function onUserLogin(UserLoginEvent $event)
|
public function onUserLogin(UserLoginEvent $event)
|
||||||
|
@ -347,6 +348,7 @@ class UserPage extends Extension
|
||||||
$sb->start_table();
|
$sb->start_table();
|
||||||
$sb->add_bool_option(UserConfig::ENABLE_API_KEYS, "Enable user API keys", true);
|
$sb->add_bool_option(UserConfig::ENABLE_API_KEYS, "Enable user API keys", true);
|
||||||
$sb->add_bool_option("login_signup_enabled", "Allow new signups", true);
|
$sb->add_bool_option("login_signup_enabled", "Allow new signups", true);
|
||||||
|
$sb->add_bool_option("user_email_required", "Require email address", true);
|
||||||
$sb->add_longtext_option("login_tac", "Terms & Conditions", true);
|
$sb->add_longtext_option("login_tac", "Terms & Conditions", true);
|
||||||
$sb->add_choice_option(
|
$sb->add_choice_option(
|
||||||
"user_loginshowprofile",
|
"user_loginshowprofile",
|
||||||
|
@ -423,11 +425,12 @@ class UserPage extends Extension
|
||||||
|
|
||||||
public function onUserCreation(UserCreationEvent $event)
|
public function onUserCreation(UserCreationEvent $event)
|
||||||
{
|
{
|
||||||
|
global $config, $page, $user;
|
||||||
|
|
||||||
$name = $event->username;
|
$name = $event->username;
|
||||||
//$pass = $event->password;
|
//$pass = $event->password;
|
||||||
//$email = $event->email;
|
//$email = $event->email;
|
||||||
|
|
||||||
global $config, $page, $user;
|
|
||||||
if (!$user->can(Permissions::CREATE_USER)) {
|
if (!$user->can(Permissions::CREATE_USER)) {
|
||||||
throw new UserCreationException("Account creation is currently disabled");
|
throw new UserCreationException("Account creation is currently disabled");
|
||||||
}
|
}
|
||||||
|
@ -452,6 +455,12 @@ class UserPage extends Extension
|
||||||
if ($event->password != $event->password2) {
|
if ($event->password != $event->password2) {
|
||||||
throw new UserCreationException("Passwords don't match");
|
throw new UserCreationException("Passwords don't match");
|
||||||
}
|
}
|
||||||
|
if(
|
||||||
|
$user->can(Permissions::CREATE_OTHER_USER) ||
|
||||||
|
($config->get_bool("user_email_required") && empty($event->email))
|
||||||
|
) {
|
||||||
|
throw new UserCreationException("Email address is required");
|
||||||
|
}
|
||||||
|
|
||||||
$new_user = $this->create_user($event);
|
$new_user = $this->create_user($event);
|
||||||
if ($event->login) {
|
if ($event->login) {
|
||||||
|
|
|
@ -63,14 +63,18 @@ class UserPageTheme extends Themelet
|
||||||
|
|
||||||
public function display_signup_page(Page $page)
|
public function display_signup_page(Page $page)
|
||||||
{
|
{
|
||||||
global $config;
|
global $config, $user;
|
||||||
$tac = $config->get_string("login_tac", "");
|
$tac = $config->get_string("login_tac", "");
|
||||||
|
|
||||||
if ($config->get_bool("login_tac_bbcode")) {
|
if ($config->get_bool("login_tac_bbcode")) {
|
||||||
$tfe = send_event(new TextFormattingEvent($tac));
|
$tac = send_event(new TextFormattingEvent($tac))->formatted;
|
||||||
$tac = $tfe->formatted;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$email_required = (
|
||||||
|
$config->get_bool("user_email_required") &&
|
||||||
|
!$user->can(Permissions::CREATE_OTHER_USER)
|
||||||
|
);
|
||||||
|
|
||||||
$form = SHM_SIMPLE_FORM(
|
$form = SHM_SIMPLE_FORM(
|
||||||
"user_admin/create",
|
"user_admin/create",
|
||||||
TABLE(
|
TABLE(
|
||||||
|
@ -89,8 +93,8 @@ class UserPageTheme extends Themelet
|
||||||
TD(INPUT(["type" => 'password', "name" => 'pass2', "required" => true]))
|
TD(INPUT(["type" => 'password', "name" => 'pass2', "required" => true]))
|
||||||
),
|
),
|
||||||
TR(
|
TR(
|
||||||
TH(rawHTML("Email (Optional)")),
|
TH($email_required ? "Email" : rawHTML("Email (Optional)")),
|
||||||
TD(INPUT(["type" => 'email', "name" => 'email']))
|
TD(INPUT(["type" => 'email', "name" => 'email', "required" => $email_required]))
|
||||||
),
|
),
|
||||||
TR(
|
TR(
|
||||||
TD(["colspan" => "2"], rawHTML(captcha_get_html()))
|
TD(["colspan" => "2"], rawHTML(captcha_get_html()))
|
||||||
|
@ -135,9 +139,12 @@ class UserPageTheme extends Themelet
|
||||||
TD(INPUT(["type" => 'password', "name" => 'pass2', "required" => true]))
|
TD(INPUT(["type" => 'password', "name" => 'pass2', "required" => true]))
|
||||||
),
|
),
|
||||||
TR(
|
TR(
|
||||||
TH(rawHTML("Email (Optional)")),
|
TH(rawHTML("Email")),
|
||||||
TD(INPUT(["type" => 'email', "name" => 'email']))
|
TD(INPUT(["type" => 'email', "name" => 'email']))
|
||||||
),
|
),
|
||||||
|
TR(
|
||||||
|
TD(["colspan" => 2], rawHTML("(Email is optional for admin-created accounts)")),
|
||||||
|
),
|
||||||
),
|
),
|
||||||
TFOOT(
|
TFOOT(
|
||||||
TR(TD(["colspan" => "2"], INPUT(["type" => "submit", "value" => "Create Account"])))
|
TR(TD(["colspan" => "2"], INPUT(["type" => "submit", "value" => "Create Account"])))
|
||||||
|
@ -159,6 +166,11 @@ class UserPageTheme extends Themelet
|
||||||
}
|
}
|
||||||
|
|
||||||
public function display_login_block(Page $page)
|
public function display_login_block(Page $page)
|
||||||
|
{
|
||||||
|
$page->add_block(new Block("Login", $this->create_login_block(), "left", 90));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function create_login_block(): HTMLElement
|
||||||
{
|
{
|
||||||
global $config, $user;
|
global $config, $user;
|
||||||
$form = SHM_SIMPLE_FORM(
|
$form = SHM_SIMPLE_FORM(
|
||||||
|
@ -187,7 +199,7 @@ class UserPageTheme extends Themelet
|
||||||
$html->appendChild(SMALL(A(["href" => make_link("user_admin/create")], "Create Account")));
|
$html->appendChild(SMALL(A(["href" => make_link("user_admin/create")], "Create Account")));
|
||||||
}
|
}
|
||||||
|
|
||||||
$page->add_block(new Block("Login", $html, "left", 90));
|
return $html;
|
||||||
}
|
}
|
||||||
|
|
||||||
private function _ip_list(string $name, array $ips): HTMLElement
|
private function _ip_list(string $name, array $ips): HTMLElement
|
||||||
|
|
|
@ -24,7 +24,9 @@ use function MicroHTML\OPTION;
|
||||||
class CustomUserPageTheme extends UserPageTheme
|
class CustomUserPageTheme extends UserPageTheme
|
||||||
{
|
{
|
||||||
// Override to display user block in the head and in the left column
|
// Override to display user block in the head and in the left column
|
||||||
// (with css media queries deciding which one is visible)
|
// (with css media queries deciding which one is visible), and also
|
||||||
|
// to switch between new-line and inline display depending on the
|
||||||
|
// number of links.
|
||||||
public function display_user_block(Page $page, User $user, $parts)
|
public function display_user_block(Page $page, User $user, $parts)
|
||||||
{
|
{
|
||||||
$h_name = html_escape($user->name);
|
$h_name = html_escape($user->name);
|
||||||
|
@ -48,109 +50,7 @@ class CustomUserPageTheme extends UserPageTheme
|
||||||
// (with css media queries deciding which one is visible)
|
// (with css media queries deciding which one is visible)
|
||||||
public function display_login_block(Page $page)
|
public function display_login_block(Page $page)
|
||||||
{
|
{
|
||||||
global $config;
|
$page->add_block(new Block("Login", $this->create_login_block(), "head", 90));
|
||||||
$html = "
|
$page->add_block(new Block("Login", $this->create_login_block(), "left", 15));
|
||||||
<form action='".make_link("user_admin/login")."' method='POST'>
|
|
||||||
<table class='form' style='width: 100%;'>
|
|
||||||
<tr><th>Name</th><td><input type='text' name='user'></td></tr>
|
|
||||||
<tr><th>Password</th><td><input type='password' name='pass'></td></tr>
|
|
||||||
<tr><td colspan='2'><input type='submit' name='gobu' value='Log In'></td></tr>
|
|
||||||
</table>
|
|
||||||
</form>
|
|
||||||
";
|
|
||||||
if ($config->get_bool("login_signup_enabled")) {
|
|
||||||
$html .= "<small><a href='".make_link("user_admin/create")."'>Create Account</a></small>";
|
|
||||||
}
|
|
||||||
$page->add_block(new Block("Login", $html, "head", 90));
|
|
||||||
$page->add_block(new Block("Login", $html, "left", 15));
|
|
||||||
}
|
|
||||||
|
|
||||||
public function display_signup_page(Page $page)
|
|
||||||
{
|
|
||||||
global $config;
|
|
||||||
$tac = $config->get_string("login_tac", "");
|
|
||||||
|
|
||||||
if ($config->get_bool("login_tac_bbcode")) {
|
|
||||||
$tac = send_event(new TextFormattingEvent($tac))->formatted;
|
|
||||||
}
|
|
||||||
|
|
||||||
$form = SHM_SIMPLE_FORM(
|
|
||||||
"user_admin/create",
|
|
||||||
TABLE(
|
|
||||||
["class" => "form"],
|
|
||||||
TBODY(
|
|
||||||
TR(
|
|
||||||
TH("Name"),
|
|
||||||
TD(INPUT(["type" => 'text', "name" => 'name', "required" => true]))
|
|
||||||
),
|
|
||||||
TR(
|
|
||||||
TH("Password"),
|
|
||||||
TD(INPUT(["type" => 'password', "name" => 'pass1', "required" => true]))
|
|
||||||
),
|
|
||||||
TR(
|
|
||||||
TH(rawHTML("Repeat Password")),
|
|
||||||
TD(INPUT(["type" => 'password', "name" => 'pass2', "required" => true]))
|
|
||||||
),
|
|
||||||
TR(
|
|
||||||
TH(rawHTML("Email")),
|
|
||||||
TD(INPUT(["type" => 'email', "name" => 'email', "required" => true]))
|
|
||||||
),
|
|
||||||
TR(
|
|
||||||
TD(["colspan" => "2"], rawHTML(captcha_get_html()))
|
|
||||||
),
|
|
||||||
),
|
|
||||||
TFOOT(
|
|
||||||
TR(TD(["colspan" => "2"], INPUT(["type" => "submit", "value" => "Create Account"])))
|
|
||||||
)
|
|
||||||
)
|
|
||||||
);
|
|
||||||
|
|
||||||
$html = emptyHTML(
|
|
||||||
$tac ? P(rawHTML($tac)) : null,
|
|
||||||
$form
|
|
||||||
);
|
|
||||||
|
|
||||||
$page->set_title("Create Account");
|
|
||||||
$page->set_heading("Create Account");
|
|
||||||
$page->add_block(new NavBlock());
|
|
||||||
$page->add_block(new Block("Signup", $html));
|
|
||||||
}
|
|
||||||
|
|
||||||
// override to make email required
|
|
||||||
public function display_user_creator()
|
|
||||||
{
|
|
||||||
global $page;
|
|
||||||
|
|
||||||
$form = SHM_SIMPLE_FORM(
|
|
||||||
"user_admin/create_other",
|
|
||||||
TABLE(
|
|
||||||
["class" => "form"],
|
|
||||||
TBODY(
|
|
||||||
TR(
|
|
||||||
TH("Name"),
|
|
||||||
TD(INPUT(["type" => 'text', "name" => 'name', "required" => true]))
|
|
||||||
),
|
|
||||||
TR(
|
|
||||||
TH("Password"),
|
|
||||||
TD(INPUT(["type" => 'password', "name" => 'pass1', "required" => true]))
|
|
||||||
),
|
|
||||||
TR(
|
|
||||||
TH(rawHTML("Repeat Password")),
|
|
||||||
TD(INPUT(["type" => 'password', "name" => 'pass2', "required" => true]))
|
|
||||||
),
|
|
||||||
TR(
|
|
||||||
TH(rawHTML("Email")),
|
|
||||||
TD(INPUT(["type" => 'email', "name" => 'email']))
|
|
||||||
),
|
|
||||||
TR(
|
|
||||||
TD(["colspan" => 2], rawHTML("(Email is optional for admin-created accounts)")),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
TFOOT(
|
|
||||||
TR(TD(["colspan" => "2"], INPUT(["type" => "submit", "value" => "Create Account"])))
|
|
||||||
)
|
|
||||||
)
|
|
||||||
);
|
|
||||||
$page->add_block(new Block("Create User", (string)$form, "main", 75));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Reference in a new issue