Update Admin\Users page

Added function to create a new user
This commit is contained in:
Visman 2020-06-16 19:09:02 +07:00
parent 400cec1ef4
commit 2c7ef0dab5
7 changed files with 208 additions and 0 deletions

View file

@ -146,6 +146,10 @@ class Routing
$r->add(self::GET, '/admin/users/promote/{uid:[2-9]|[1-9]\d+}/{pid:[1-9]\d*}/{token}', 'AdminUsersPromote:promote', 'AdminUserPromote');
if ($user->isAdmin) {
$r->add(self::DUO, '/admin/users/new', 'AdminUsersNew:view', 'AdminUsersNew');
}
if ($this->c->userRules->banUsers) {
$r->add(self::DUO, '/admin/bans', 'AdminBans:view', 'AdminBans');
$r->add(self::DUO, '/admin/bans/new[/{ids:\d+(?:-\d+)*}[/{uid:[2-9]|[1-9]\d+}]]', 'AdminBans:add', 'AdminBansNew');

View file

@ -0,0 +1,137 @@
<?php
namespace ForkBB\Models\Pages\Admin\Users;
use ForkBB\Core\Validator;
use ForkBB\Models\Page;
use ForkBB\Models\Pages\Admin\Users;
use RuntimeException;
class NewUser extends Users
{
/**
* Подготавливает данные для шаблона добавление пользователя
*
* @param array $args
* @param string $method
*
* @throws RuntimeException
*
* @return Page
*/
public function view(array $args, string $method): Page
{
$this->c->Lang->load('register');
$data = [];
if ('POST' === $method) {
$v = $this->c->Validator->reset()
->addValidators([
])->addRules([
'token' => 'token:AdminUsersNew',
'email' => 'required|string:trim|email:noban,unique',
'username' => 'required|string:trim,spaces|username',
'password' => 'required|string|min:16|password',
])->addAliases([
'email' => 'Email',
'username' => 'Username',
'password' => 'Passphrase',
])->addMessages([
'password.password' => 'Pass format',
'username.login' => 'Login format',
]);
if ($v->validation($_POST)) {
$user = $this->c->users->create();
$user->username = $v->username;
$user->password = \password_hash($v->password, PASSWORD_DEFAULT);
$user->group_id = $this->c->config->o_default_user_group;
$user->email = $v->email;
$user->email_confirmed = 0;
$user->activate_string = '';
$user->u_mark_all_read = \time();
$user->email_setting = $this->c->config->o_default_email_setting;
$user->timezone = $this->c->config->o_default_timezone;
$user->dst = $this->c->config->o_default_dst;
$user->language = $this->c->config->o_default_lang;
$user->style = $this->c->config->o_default_style;
$user->registered = \time();
$user->registration_ip = '127.0.0.1';
$user->signature = '';
$this->c->users->insert($user);
return $this->c->Redirect->page('User', ['id' => $user->id, 'name' => $user->username])->message('New user added redirect');
}
$this->fIswev = $v->getErrors();
$data = $v->getData();
}
$this->nameTpl = 'admin/users';
$this->formNew = $this->formNew($data);
$this->aCrumbs[] = [$this->c->Router->link('AdminUsersNew'), \ForkBB\__('Add user')];
return $this;
}
/**
* Подготавливает массив данных для формы
*
* @param array $data
*
* @return array
*/
protected function formNew(array $data): array
{
return [
'action' => $this->c->Router->link('AdminUsersNew'),
'hidden' => [
'token' => $this->c->Csrf->create('AdminUsersNew'),
],
'sets' => [
'reg' => [
'legend' => \ForkBB\__('Add user legend'),
'fields' => [
'username' => [
'autofocus' => true,
'type' => 'text',
'maxlength' => 25,
'value' => $data['username'] ?? null,
'caption' => \ForkBB\__('Username'),
'info' => \ForkBB\__('Login format'),
'required' => true,
'pattern' => '^.{2,25}$',
],
'email' => [
'type' => 'text',
'maxlength' => 80,
'value' => $data['email'] ?? null,
'caption' => \ForkBB\__('Email'),
'info' => \ForkBB\__('Email info'),
'required' => true,
'pattern' => '.+@.+',
],
'password' => [
'type' => 'text',
'caption' => \ForkBB\__('Passphrase'),
'info' => \ForkBB\__('Pass format') . ' ' . \ForkBB\__('Pass info'),
'required' => true,
'pattern' => '^.{16,}$',
],
],
],
],
'btns' => [
'add' => [
'type' => 'submit',
'value' => \ForkBB\__('Add'),
'accesskey' => 's',
],
],
];
}
}

View file

@ -124,9 +124,37 @@ class View extends Users
$this->formIP = $this->formIP($data);
}
if ($this->user->isAdmin) {
$this->formNew = $this->formNew();
}
return $this;
}
/**
* Создает массив данных для кнопки добавления пользователя
*
* @return array
*/
protected function formNew(): array
{
$form = [
'action' => $this->c->Router->link('AdminUsers'),
'hidden' => [],
'sets' => [],
'btns' => [
'new' => [
'type' => 'btn',
'value' => \ForkBB\__('New user'),
'link' => $this->c->Router->link('AdminUsersNew'),
'accesskey' => 'n',
],
],
];
return $form;
}
/**
* Создает массив данных для формы поиска
*

View file

@ -178,6 +178,7 @@ return [
'AdminUsersStat' => \ForkBB\Models\Pages\Admin\Users\Stat::class,
'AdminUsersAction' => \ForkBB\Models\Pages\Admin\Users\Action::class,
'AdminUsersPromote' => \ForkBB\Models\Pages\Admin\Users\Promote::class,
'AdminUsersNew' => \ForkBB\Models\Pages\Admin\Users\NewUser::class,
'AdminHost' => \ForkBB\Models\Pages\Admin\Host::class,
'AdminBans' => \ForkBB\Models\Pages\Admin\Bans::class,
'AdminReports' => \ForkBB\Models\Pages\Admin\Reports::class,

View file

@ -356,3 +356,18 @@ msgstr "You are trying to change your own group."
msgid "User is ban"
msgstr "The user %s is ban."
msgid "New user head"
msgstr "New user"
msgid "New user"
msgstr "New user"
msgid "Add user"
msgstr "Add user"
msgid "Add user legend"
msgstr "Add user"
msgid "New user added redirect"
msgstr "New user added. Redirecting …"

View file

@ -356,3 +356,18 @@ msgstr "Вы пытаетесь изменить свою собственную
msgid "User is ban"
msgstr "Пользователь %s забанен."
msgid "New user head"
msgstr "Новый пользователь"
msgid "New user"
msgstr "Новый пользователь"
msgid "Add user"
msgstr "Добавление пользователя"
msgid "Add user legend"
msgstr "Добавление пользователя"
msgid "New user added redirect"
msgstr "Новый пользователь добавлен. Переадресация …"

View file

@ -15,3 +15,11 @@
</div>
</section>
@endif
@if ($form = $p->formNew)
<section class="f-admin f-new-user-form">
<h2>{!! __('New user head') !!}</h2>
<div class="f-fdiv">
@include ('layouts/form')
</div>
</section>
@endif