2018-03-05

+ user list
This commit is contained in:
Visman 2018-03-05 14:10:56 +07:00
parent 2a132adc24
commit e298386c9a
8 changed files with 187 additions and 52 deletions

View file

@ -77,7 +77,8 @@ class Routing
// юзеры
if ($user->g_view_users == '1') {
// список пользователей
$r->add('GET', '/userlist[/{sort:username|registered|num_posts}/{dir:ASC|DESC}/{group:\-1|[1-9]\d*}/{name}][/{page:[1-9]\d*}]', 'Userlist:view', 'Userlist');
$r->add('GET', '/userlist[/{sort:username|registered|num_posts}/{dir:ASC|DESC}/{group:\-1|[1-9]\d*}/{name}][/{page:[1-9]\d*}]', 'Userlist:view', 'Userlist');
$r->add('POST', '/userlist', 'Userlist:view');
// юзеры
$r->add('GET', '/user/{id:[1-9]\d*}/{name}', 'Profile:view', 'User'); //????
}

View file

@ -23,16 +23,21 @@ class Userlist extends Page
{
$this->c->Lang->load('userlist');
$groups = \array_filter($this->c->groups->getList(), function ($group) {
return ! $group->groupGuest;
});
$prefix = 'POST' === $method ? 'required|' : '';
$v = $this->c->Validator->reset()
->addRules([
'sort' => 'string|in:username,registered' . ($this->user->showPostCount ? ',num_posts' : ''),
'dir' => 'string|in:ASC,DESC',
'group' => 'integer|min:-1|max:9999999999|not_in:0,' . $this->c->GROUP_GUEST,
'name' => 'string:trim|min:1|max:25' . ($this->user->searchUsers ? '' : '|in:*'),
'sort' => $prefix . 'string|in:username,registered' . ($this->user->showPostCount ? ',num_posts' : ''),
'dir' => $prefix . 'string|in:ASC,DESC',
'group' => $prefix . 'integer|in:-1,' . \implode(',', \array_keys($groups)),
'name' => $prefix . 'string:trim|min:1|max:25' . ($this->user->searchUsers ? '' : '|in:*'),
]);
$error = true;
if ($v->validation($args)) {
if ($v->validation('POST' === $method ? $_POST : $args)) {
$count = (int) (null === $v->sort)
+ (int) (null === $v->dir)
+ (int) (null === $v->group)
@ -45,6 +50,9 @@ class Userlist extends Page
if ($error) {
return $this->c->Message->message('Bad request');
}
if ('POST' === $method) {
return $this->c->Redirect->page('Userlist', $v->getData());
}
$filters = [];
if ($v->group < 1) {
@ -83,7 +91,7 @@ class Userlist extends Page
$vars['name'] = $v->name;
}
$this->active = 0;
$this->activeLink = 0;
foreach (['username', 'num_posts', 'registered'] as $i => $sort) {
$vars['sort'] = $sort;
@ -93,7 +101,7 @@ class Userlist extends Page
$links[$i * 2 + $j] = $this->c->Router->link('Userlist', $vars);
if ($v->sort === $sort && $v->dir === $dir) {
$this->active = $i * 2 + $j;
$this->activeLink = $i * 2 + $j;
}
}
}
@ -102,16 +110,76 @@ class Userlist extends Page
} else {
$this->startNum = 0;
$this->userList = null;
// ни чего не найдено
$this->links = [null, null, null, null, null, null];
$this->links = [null, null, null, null, null, null];
$this->fIswev = ['i', \ForkBB\__('No users found')];
}
$form = [
'action' => $this->c->Router->link('Userlist'),
'hidden' => [],
'sets' => [],
'btns' => [
'submit' => [
'type' => 'submit',
'value' => \ForkBB\__($this->user->searchUsers ? 'Search btn' : 'Sort btn'),
'accesskey' => 's',
],
],
];
$fields = [];
if ($this->user->searchUsers) {
$fields['name'] = [
'type' => 'text',
'maxlength' => 25,
'value' => $v->name ?: '*',
'title' => \ForkBB\__('Username'),
'info' => \ForkBB\__('User search info'),
'required' => true,
# 'autofocus' => true,
];
} else {
$form['hidden']['name'] = '*';
}
$fields['group'] = [
'dl' => 'w4',
'type' => 'select',
'options' => [[-1, \ForkBB\__('All users')]] + \array_map(function ($group) {
return [$group->g_id, $group->g_title];
}, $groups),
'value' => $v->group,
'title' => \ForkBB\__('User group'),
];
$fields['sort'] = [
'dl' => 'w4',
'type' => 'select',
'options' => [
['username', \ForkBB\__('Sort by name')],
['num_posts', \ForkBB\__('Sort by number'), $this->user->showPostCount ? null : true],
['registered', \ForkBB\__('Sort by date')],
],
'value' => $v->sort,
'title' => \ForkBB\__('Sort users by'),
];
$fields['dir'] = [
'dl' => 'w4',
'type' => 'radio',
'value' => $v->dir ?: 'ASC',
'values' => [
'ASC' => \ForkBB\__('Ascending'),
'DESC' => \ForkBB\__('Descending'),
],
'title' => \ForkBB\__('User sort order'),
];
$form['sets'][] = ['fields' => $fields];
$this->fIndex = 'userlist';
$this->nameTpl = 'userlist';
$this->onlinePos = 'userlist';
$this->canonical = $this->c->Router->link('Userlist', ['page' => $page]); // ????
$this->canonical = $this->c->Router->link('Userlist', $args); // ????
$this->robots = 'noindex';
// $this->form = $form;
$this->form = $form;
$this->crumbs = $this->crumbs([$this->c->Router->link('Userlist'), \ForkBB\__('User_list')]);
$this->pagination = $this->c->Func->paginate($pages, $page, 'Userlist', $args);

View file

@ -21,9 +21,6 @@ msgstr "You do not have permission to use the search feature."
msgid "Search flood"
msgstr "At least %s seconds have to pass between searches. Please wait %s seconds and try searching again."
msgid "Search"
msgstr "Search"
msgid "Search criteria legend"
msgstr "Enter your search criteria"
@ -64,7 +61,7 @@ msgid "Sort by"
msgstr "Sort by"
msgid "Sort order"
msgstr "Sort order"
msgstr "Results sort order"
msgid "Search results legend"
msgstr "Select how to view search results"
@ -99,9 +96,6 @@ msgstr "Topics"
msgid "Show as posts"
msgstr "Posts"
msgid "Search"
msgstr "Search"
msgid "Search results"
msgstr "Search results"

View file

@ -12,14 +12,14 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Language: en\n"
msgid "User find legend"
msgstr "Find and sort users"
msgid "User search head"
msgstr "Find users"
msgid "User sort head"
msgstr "Sort users"
msgid "User search info"
msgstr "Enter a username to search for and/or a user group to filter by. The username field can be left blank. Use the wildcard character * for partial matches."
msgid "User sort info"
msgstr "Sort users by name, date registered or number of posts and in ascending/descending order."
msgstr "Use the wildcard character * for partial matches."
msgid "User group"
msgstr "User group"
@ -28,7 +28,7 @@ msgid "No of posts"
msgstr "Number of posts"
msgid "All users"
msgstr "All"
msgstr "< All >"
msgid "User_list"
msgstr "User list"
@ -40,3 +40,33 @@ msgstr[1] "<b>%s</b><span> posts,</span>"
msgid "<span>registered: </span><b>%s</b>"
msgstr "<span>registered: </span><b>%s</b>"
msgid "No users found"
msgstr "No users were found matching your criteria."
msgid "Search btn"
msgstr "Serach"
msgid "Sort btn"
msgstr "Sort"
msgid "Sort users by"
msgstr "Sort user list by"
msgid "Sort by name"
msgstr "Name"
msgid "Sort by number"
msgstr "Number of posts"
msgid "Sort by date"
msgstr "Date of registration"
msgid "User sort order"
msgstr "User list sort order"
msgid "Ascending"
msgstr "Ascending"
msgid "Descending"
msgstr "Descending"

View file

@ -21,9 +21,6 @@ msgstr "У вас нет прав для использования поиска
msgid "Search flood"
msgstr "Должно пройти как минимум %s секунд между повторными попытками поиска информации. Пожалуйста, подождите %s секунд, а затем повторите попытку."
msgid "Search"
msgstr "Поиск"
msgid "Search criteria legend"
msgstr "Условия поиска"
@ -64,7 +61,7 @@ msgid "Sort by"
msgstr "Сортировать по"
msgid "Sort order"
msgstr "Порядок сортировки"
msgstr "Упорядочить по"
msgid "Search results legend"
msgstr "Настройка параметров вывода результатов"
@ -85,10 +82,10 @@ msgid "Sort by forum"
msgstr "разделу"
msgid "Ascending"
msgstr "по возрастанию"
msgstr "возрастанию"
msgid "Descending"
msgstr "по убыванию"
msgstr "убыванию"
msgid "Show as"
msgstr "Показать как"
@ -99,9 +96,6 @@ msgstr "темы"
msgid "Show as posts"
msgstr "сообщения"
msgid "Search"
msgstr "Поиск"
msgid "Search results"
msgstr "Результаты поиска"

View file

@ -12,14 +12,14 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Language: ru\n"
msgid "User find legend"
msgstr "Поиск и сортировка пользователей"
msgid "User search head"
msgstr "Поиск пользователей"
msgid "User sort head"
msgstr "Сортировка пользователей"
msgid "User search info"
msgstr "Введите имя пользователя и/или выберите группу по которой хотите фильтровать список. Имя пользователя может быть пустым. Для поиска по маске разрешено использовать символ звездочки (*)."
msgid "User sort info"
msgstr "Сортируйте пользователей по именам, дате регистрации и количеству сообщений; по возрастанию или убыванию."
msgstr "Для поиска по маске разрешено использовать символ звездочки (*)."
msgid "User group"
msgstr "Группа пользователей"
@ -28,7 +28,7 @@ msgid "No of posts"
msgstr "Кол-во сообщений"
msgid "All users"
msgstr "&lt;Все&gt;"
msgstr "< Все >"
msgid "User_list"
msgstr "Список пользователей"
@ -41,3 +41,33 @@ msgstr[2] "<b>%s</b><span> сообщений,</span>"
msgid "<span>registered: </span><b>%s</b>"
msgstr "<span>дата регистрации: </span><b>%s</b>"
msgid "No users found"
msgstr "По вашему запросу ничего не найдено."
msgid "Search btn"
msgstr "Найти"
msgid "Sort btn"
msgstr "Сортировать"
msgid "Sort users by"
msgstr "Сортировать по"
msgid "Sort by name"
msgstr "имени"
msgid "Sort by number"
msgstr "количеству сообщений"
msgid "Sort by date"
msgstr "дате регистрации"
msgid "User sort order"
msgstr "Упорядочить по"
msgid "Ascending"
msgstr "возрастанию"
msgid "Descending"
msgstr "убыванию"

View file

@ -43,7 +43,7 @@
</div>
@if ($form = $p->form)
<section class="f-main f-userlist-form">
<h2>{!! __('Search') !!}</h2>
<h2>{!! __($p->user->searchUsers ? 'User search head' : 'User sort head') !!}</h2>
<div class="f-fdiv">
@include ('layouts/form')
</div>
@ -51,32 +51,32 @@
@endif
@if ($p->userList)
<section class="f-main f-userlist">
<h2>{!! __('User list') !!}</h2>
<h2>{!! __('User_list') !!}</h2>
<div class="f-ulist">
<ol class="f-table">
<li class="f-row f-thead" value="{{ $p->startNum }}">
<span class="f-hcell f-cusername">
<span class="f-hc-table">
<span class="f-hc-tasc"><a @if (0 === $p->active) class="active" @endif href="{!! $p->links[0] !!}">▲</a></span>
<span class="f-hc-tasc"><a @if (0 === $p->activeLink) class="active" @endif href="{!! $p->links[0] !!}">▲</a></span>
<span class="f-hc-tname">{!! __('Username') !!}</span>
<span class="f-hc-tdesc"><a @if (1 === $p->active) class="active" @endif href="{!! $p->links[1] !!}">▼</a></span>
<span class="f-hc-tdesc"><a @if (1 === $p->activeLink) class="active" @endif href="{!! $p->links[1] !!}">▼</a></span>
</span>
</span>
<span class="f-hcell f-ctitle">{!! __('Title') !!}</span>
@if ($p->user->showPostCount)
<span class="f-hcell f-cnumposts">
<span class="f-hc-table">
<span class="f-hc-tasc"><a @if (2 === $p->active) class="active" @endif href="{!! $p->links[2] !!}">▲</a></span>
<span class="f-hc-tasc"><a @if (2 === $p->activeLink) class="active" @endif href="{!! $p->links[2] !!}">▲</a></span>
<span class="f-hc-tname">{!! __('Posts') !!}</span>
<span class="f-hc-tdesc"><a @if (3 === $p->active) class="active" @endif href="{!! $p->links[3] !!}">▼</a></span>
<span class="f-hc-tdesc"><a @if (3 === $p->activeLink) class="active" @endif href="{!! $p->links[3] !!}">▼</a></span>
</span>
</span>
@endif
<span class="f-hcell f-cdatereg">
<span class="f-hc-table">
<span class="f-hc-tasc"><a @if (4 === $p->active) class="active" @endif href="{!! $p->links[4] !!}">▲</a></span>
<span class="f-hc-tasc"><a @if (4 === $p->activeLink) class="active" @endif href="{!! $p->links[4] !!}">▲</a></span>
<span class="f-hc-tname">{!! __('Registered') !!}</span>
<span class="f-hc-tdesc"><a @if (5 === $p->active) class="active" @endif href="{!! $p->links[5] !!}">▼</a></span>
<span class="f-hc-tdesc"><a @if (5 === $p->activeLink) class="active" @endif href="{!! $p->links[5] !!}">▼</a></span>
</span>
</span>
</li>

View file

@ -1873,13 +1873,15 @@ li + li .f-btn {
/* padding-top: 0; */
}
.f-search-form .f-fdiv .f-field-w4 {
.f-search-form .f-fdiv .f-field-w4,
.f-userlist-form .f-fdiv .f-field-w4 {
width: 33.33%;
float: left;
/* padding-top: 0; */
}
.f-search-form .f-label {
.f-search-form .f-label,
.f-userlist-form .f-label {
padding: 0.5rem 0;
}
@ -1901,6 +1903,10 @@ li + li .f-btn {
/************************/
.f-userlist > h2 {
padding: 0 0.625rem;
}
.f-userlist-form > h2 {
display: none;
}
@ -1922,6 +1928,10 @@ li + li .f-btn {
}
@media screen and (min-width: 50rem) {
.f-userlist > h2 {
display: none;
}
.f-ulist .f-row {
padding: 0;
}
@ -2015,4 +2025,12 @@ li + li .f-btn {
padding-top: 0.3125rem;
padding-bottom: 0.3125rem;
}
.f-userlist-form fieldset > .f-field-w4:first-child + .f-field-w4 {
padding-top: 0.625rem;
}
.f-userlist-form fieldset > .f-field-w4:first-child + .f-field-w4 + .f-field-w4 {
padding-top: 0.625rem;
}
}