mirror of
https://github.com/openvk/openvk
synced 2024-12-22 16:42:32 +03:00
Admin: Localization & fixing tabs (#407)
This commit is contained in:
parent
c1d7b49dda
commit
e6c14c2eeb
16 changed files with 495 additions and 459 deletions
|
@ -23,7 +23,7 @@ final class AdminPresenter extends OpenVKPresenter
|
|||
private function warnIfNoCommerce(): void
|
||||
{
|
||||
if(!OPENVK_ROOT_CONF["openvk"]["preferences"]["commerce"])
|
||||
$this->flash("warn", "Коммерция отключена системным администратором", "Настройки ваучеров и подарков будут сохранены, но не будут оказывать никакого влияния.");
|
||||
$this->flash("warn", tr("admin_commerce_disabled"), tr("admin_commerce_disabled_desc"));
|
||||
}
|
||||
|
||||
private function searchResults(object $repo, &$count)
|
||||
|
|
|
@ -173,7 +173,7 @@
|
|||
{var $canAccessHelpdesk = $thisUser->getChandlerUser()->can("write")->model('openvk\Web\Models\Entities\TicketReply')->whichBelongsTo(0)}
|
||||
{var $menuLinksAvaiable = sizeof(OPENVK_ROOT_CONF['openvk']['preferences']['menu']['links']) > 0 && $thisUser->getLeftMenuItemStatus('links')}
|
||||
<div n:if="$canAccessAdminPanel || $canAccessHelpdesk || $menuLinksAvaiable" class="menu_divider"></div>
|
||||
<a href="/admin" class="link" n:if="$canAccessAdminPanel" title="Админ-панель [Alt+Shift+A]" accesskey="a">Админ-панель</a>
|
||||
<a href="/admin" class="link" n:if="$canAccessAdminPanel" title="{_admin} [Alt+Shift+A]" accesskey="a">{_admin}</a>
|
||||
<a href="/support/tickets" class="link" n:if="$canAccessHelpdesk">Helpdesk
|
||||
{if $helpdeskTicketNotAnsweredCount > 0}
|
||||
(<b>{$helpdeskTicketNotAnsweredCount}</b>)
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
{var $instance_name = OPENVK_ROOT_CONF['openvk']['appearance']['name']}
|
||||
<!DOCTYPE html>
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
|
||||
<head>
|
||||
|
@ -6,7 +7,7 @@
|
|||
{var $css = file_get_contents(OPENVK_ROOT . "/Web/static/js/node_modules/@atlassian/aui/dist/aui/aui-prototyping.css")}
|
||||
{str_replace("fonts/", "/assets/packages/static/openvk/js/node_modules/@atlassian/aui/dist/aui/fonts/", $css)|noescape}
|
||||
</style>
|
||||
<title>{include title} - Админ-панель {=OPENVK_ROOT_CONF['openvk']['appearance']['name']}</title>
|
||||
<title>{include title} - {_admin} {$instance_name}</title>
|
||||
</head>
|
||||
<body>
|
||||
<div id="page">
|
||||
|
@ -16,23 +17,15 @@
|
|||
<div class="aui-header-primary">
|
||||
<h1 id="logo" class="aui-header-logo aui-header-logo-textonly">
|
||||
<a href="/admin">
|
||||
<span class="aui-header-logo-device">{=OPENVK_ROOT_CONF['openvk']['appearance']['name']}</span>
|
||||
<span class="aui-header-logo-device">{$instance_name}</span>
|
||||
</a>
|
||||
</h1>
|
||||
</div>
|
||||
<div n:if="$search ?? false" class="aui-header-secondary">
|
||||
<ul class="aui-nav">
|
||||
<form class="aui-quicksearch dont-default-focus ajs-dirty-warning-exempt">
|
||||
<input
|
||||
id="quickSearchInput"
|
||||
autocomplete="off"
|
||||
class="search"
|
||||
type="text"
|
||||
placeholder="{include searchTitle}"
|
||||
value="{$_GET['q'] ?? ''}"
|
||||
name="q"
|
||||
accesskey="Q" />
|
||||
<input type="hidden" value=1 name=p />
|
||||
<input id="quickSearchInput" autocomplete="off" class="search" type="text" placeholder="{include searchTitle}" value="{$_GET['q'] ?? ''}" name="q" accesskey="Q" />
|
||||
<input type="hidden" value=1 name=p />
|
||||
</form>
|
||||
</ul>
|
||||
</div>
|
||||
|
@ -46,83 +39,64 @@
|
|||
<div class="aui-navgroup-inner">
|
||||
<div class="aui-navgroup-primary">
|
||||
<div class="aui-nav-heading">
|
||||
<strong>Обзор</strong>
|
||||
<strong>{_admin_overview}</strong>
|
||||
</div>
|
||||
<ul class="aui-nav">
|
||||
<li>
|
||||
<a href="/admin">
|
||||
Сводка
|
||||
</a>
|
||||
<a href="/admin">{_admin_overview_summary}</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="aui-nav-heading">
|
||||
<strong>Пользовательский контент</strong>
|
||||
<strong>{_admin_content}</strong>
|
||||
</div>
|
||||
<ul class="aui-nav">
|
||||
<li>
|
||||
<a href="/admin/users">
|
||||
Пользователи
|
||||
</a>
|
||||
<a href="/admin/users">{_users}</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/admin/clubs">
|
||||
Группы
|
||||
</a>
|
||||
<a href="/admin/clubs">{_groups}</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="aui-nav-heading">
|
||||
<strong>Платные услуги</strong>
|
||||
<strong>{_admin_services}</strong>
|
||||
</div>
|
||||
<ul class="aui-nav">
|
||||
<li>
|
||||
<a href="/admin/vouchers">
|
||||
{_vouchers}
|
||||
</a>
|
||||
<a href="/admin/vouchers">{_vouchers}</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/admin/gifts">
|
||||
Подарки
|
||||
</a>
|
||||
<a href="/admin/gifts">{_gifts}</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="aui-nav-heading">
|
||||
<strong>Настройки</strong>
|
||||
<strong>{_admin_settings}</strong>
|
||||
</div>
|
||||
<ul class="aui-nav">
|
||||
<li>
|
||||
<a href="/admin/settings/tuning">
|
||||
Общие
|
||||
</a>
|
||||
<a href="/admin/settings/tuning">{_admin_settings_tuning}</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/admin/settings/appearance">
|
||||
Внешний вид
|
||||
</a>
|
||||
<a href="/admin/settings/appearance">{_admin_settings_appearance}</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/admin/settings/security">
|
||||
Безопасность
|
||||
</a>
|
||||
<a href="/admin/settings/security">{_admin_settings_security}</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/admin/settings/integrations">
|
||||
Интеграции
|
||||
</a>
|
||||
<a href="/admin/settings/integrations">{_admin_settings_integrations}</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/admin/settings/system">
|
||||
Система
|
||||
</a>
|
||||
<a href="/admin/settings/system">{_admin_settings_system}</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="aui-nav-heading">
|
||||
<strong>Об OpenVK</strong>
|
||||
<strong>{_admin_about}</strong>
|
||||
</div>
|
||||
<ul class="aui-nav">
|
||||
<li>
|
||||
<a href="/about:openvk">
|
||||
Версия
|
||||
</a>
|
||||
<a href="/about:openvk">{_admin_about_version}</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/about">{_admin_about_instance}</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
@ -139,11 +113,11 @@
|
|||
<p>{$flashMessage->msg|noescape}</p>
|
||||
</div>
|
||||
{/ifset}
|
||||
|
||||
|
||||
{ifset preHeader}
|
||||
{include preHeader}
|
||||
{/ifset}
|
||||
|
||||
|
||||
<header class="aui-page-header">
|
||||
<div class="aui-page-header-inner">
|
||||
<div class="aui-page-header-main">
|
||||
|
@ -167,11 +141,11 @@
|
|||
</section>
|
||||
</footer>
|
||||
</div>
|
||||
|
||||
|
||||
{script "js/node_modules/jquery/dist/jquery.min.js"}
|
||||
{script "js/node_modules/@atlassian/aui/dist/aui/aui-prototyping.js"}
|
||||
<script>AJS.tabs.setup();</script>
|
||||
|
||||
|
||||
{ifset scripts}
|
||||
{include scripts}
|
||||
{/ifset}
|
||||
|
|
|
@ -1,191 +1,157 @@
|
|||
{extends "@layout.xml"}
|
||||
|
||||
{block title}
|
||||
Редактировать {$club->getCanonicalName()}
|
||||
{_edit} {$club->getCanonicalName()}
|
||||
{/block}
|
||||
|
||||
{block heading}
|
||||
{$club->getCanonicalName()}
|
||||
{/block}
|
||||
|
||||
|
||||
{block content}
|
||||
|
||||
{var $isMain = $mode === 'main'}
|
||||
{var $isBan = $mode === 'ban'}
|
||||
{var $isFollowers = $mode === 'followers'}
|
||||
{var $isMain = $mode === 'main'}
|
||||
{var $isBan = $mode === 'ban'}
|
||||
{var $isFollowers = $mode === 'followers'}
|
||||
|
||||
{if $isMain}
|
||||
|
||||
<!-- This main block -->
|
||||
|
||||
<div class="aui-tabs horizontal-tabs">
|
||||
<nav class="aui-navgroup aui-navgroup-horizontal">
|
||||
<div class="aui-navgroup-inner">
|
||||
<div class="aui-navgroup-primary">
|
||||
<ul class="aui-nav">
|
||||
<li class="aui-nav-selected"><a href="?act=main">Главное</a></li>
|
||||
<li><a href="?act=ban">Бан</a></li>
|
||||
<li><a href="?act=followers">Участники</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
<form class="aui" method="POST">
|
||||
<div class="field-group">
|
||||
<label for="avatar">
|
||||
Аватарка
|
||||
</label>
|
||||
<span id="avatar" class="aui-avatar aui-avatar-project aui-avatar-xlarge">
|
||||
<span class="aui-avatar-inner">
|
||||
<img src="{$club->getAvatarUrl('tiny')}" style="object-fit: cover;"></img>
|
||||
</span>
|
||||
</span>
|
||||
</div>
|
||||
<div class="field-group">
|
||||
<label for="id">
|
||||
ID
|
||||
</label>
|
||||
<input class="text medium-field" type="number" id="id" disabled value="{$club->getId()}" />
|
||||
</div>
|
||||
<div class="field-group">
|
||||
<label for="id_owner">
|
||||
ID владельца
|
||||
</label>
|
||||
<input class="text medium-field" type="text" id="id_owner" name="id_owner" value="{$club->getOwner()->getId()}" />
|
||||
</div>
|
||||
<div class="field-group">
|
||||
<label for="name">
|
||||
Название
|
||||
</label>
|
||||
<input class="text medium-field" type="text" id="name" name="name" value="{$club->getName()}" />
|
||||
</div>
|
||||
<div class="field-group">
|
||||
<label for="about">
|
||||
Описание
|
||||
</label>
|
||||
<input class="text medium-field" type="text" id="about" name="about" value="{$club->getDescription()}" />
|
||||
</div>
|
||||
<div class="field-group">
|
||||
<label for="shortcode">
|
||||
Адрес
|
||||
</label>
|
||||
<input class="text medium-field" type="text" id="shortcode" name="shortcode" value="{$club->getShortCode()}" />
|
||||
</div>
|
||||
<br/>
|
||||
<div class="group">
|
||||
<input class="toggle-large" type="checkbox" id="verify" name="verify" value="1" {if $club->isVerified()} checked {/if} />
|
||||
<label for="verify">
|
||||
Верификация
|
||||
</label>
|
||||
</div>
|
||||
<div class="group">
|
||||
<input class="toggle-large" type="checkbox" id="hide_from_global_feed" name="hide_from_global_feed" value="1" {if $club->isHideFromGlobalFeedEnabled()} checked {/if} />
|
||||
<label for="hide_from_global_feed">
|
||||
Не отображать записи в глобальной ленте
|
||||
</label>
|
||||
</div>
|
||||
<hr/>
|
||||
<div class="buttons-container">
|
||||
<div class="buttons">
|
||||
<input type="hidden" name="hash" value="{$csrfToken}" />
|
||||
<input class="button submit" type="submit" value="Сохранить">
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
{if $isBan}
|
||||
|
||||
<!-- This ban block -->
|
||||
|
||||
<div class="aui-tabs horizontal-tabs">
|
||||
<nav class="aui-navgroup aui-navgroup-horizontal">
|
||||
<div class="aui-navgroup-inner">
|
||||
<div class="aui-navgroup-primary">
|
||||
<ul class="aui-nav">
|
||||
<li><a href="?act=main">Главное</a></li>
|
||||
<li class="aui-nav-selected"><a href="?act=ban">Бан</a></li>
|
||||
<li><a href="?act=followers">Участники</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
<form class="aui" method="POST">
|
||||
<div class="field-group">
|
||||
<label for="ban_reason">
|
||||
Причина бана
|
||||
</label>
|
||||
<input class="text" type="text" id="text-input" name="ban_reason" value="{$club->getBanReason()}" />
|
||||
</div>
|
||||
<hr/>
|
||||
<div class="buttons-container">
|
||||
<div class="buttons">
|
||||
<input type="hidden" name="hash" value="{$csrfToken}" />
|
||||
<input class="button submit" type="submit" value="Сохранить">
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
{if $isFollowers}
|
||||
|
||||
<!-- This followers block -->
|
||||
|
||||
{var $followers = iterator_to_array($followers)}
|
||||
|
||||
<div class="aui-tabs horizontal-tabs">
|
||||
<nav class="aui-navgroup aui-navgroup-horizontal">
|
||||
<div class="aui-navgroup-inner">
|
||||
<div class="aui-navgroup-primary">
|
||||
<ul class="aui-nav">
|
||||
<li><a href="?act=main">Главное</a></li>
|
||||
<li><a href="?act=ban">Бан</a></li>
|
||||
<li class="aui-nav-selected"><a href="?act=followers">Участники</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
<table rules="none" class="aui aui-table-list">
|
||||
<tbody>
|
||||
<tr n:foreach="$followers as $follower">
|
||||
<td>{$follower->getId()}</td>
|
||||
<td>
|
||||
<span class="aui-avatar aui-avatar-xsmall">
|
||||
{if $isMain}
|
||||
<div class="aui-tabs horizontal-tabs">
|
||||
<nav class="aui-navgroup aui-navgroup-horizontal">
|
||||
<div class="aui-navgroup-inner">
|
||||
<div class="aui-navgroup-primary">
|
||||
<ul class="aui-nav">
|
||||
<li class="aui-nav-selected"><a href="?act=main">{_admin_tab_main}</a></li>
|
||||
<li><a href="?act=ban">{_admin_tab_ban}</a></li>
|
||||
<li><a href="?act=followers">{_admin_tab_followers}</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
<form class="aui" method="POST">
|
||||
<div class="field-group">
|
||||
<label for="avatar">{_avatar}</label>
|
||||
<span id="avatar" class="aui-avatar aui-avatar-project aui-avatar-xlarge">
|
||||
<span class="aui-avatar-inner">
|
||||
<img src="{$follower->getAvatarUrl('miniscule')}" alt="{$follower->getCanonicalName()}" role="presentation" />
|
||||
<img src="{$club->getAvatarUrl('tiny')}" style="object-fit: cover;"></img>
|
||||
</span>
|
||||
</span>
|
||||
|
||||
<a href="{$follower->getURL()}">{$follower->getCanonicalName()}</a>
|
||||
|
||||
<span n:if="$follower->isBanned()" class="aui-lozenge aui-lozenge-subtle aui-lozenge-removed">
|
||||
заблокирован
|
||||
</span>
|
||||
</td>
|
||||
<td>{$follower->isFemale() ? "Женский" : "Мужской"}</td>
|
||||
<td>{$follower->getShortCode() ?? "(отсутствует)"}</td>
|
||||
<td>{$follower->getRegistrationTime()}</td>
|
||||
<td>
|
||||
<a class="aui-button aui-button-primary" href="/admin/users/id{$follower->getId()}">
|
||||
<span class="aui-icon aui-icon-small aui-iconfont-new-edit">Редактировать</span>
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<div align="right">
|
||||
{var $isLast = ((20 * (($_GET['p'] ?? 1) - 1)) + $amount) < $count}
|
||||
|
||||
<a n:if="($_GET['p'] ?? 1) > 1" class="aui-button" href="?p={($_GET['p'] ?? 1) - 1}">
|
||||
⭁ туда
|
||||
</a>
|
||||
<a n:if="$isLast" class="aui-button" href="?p={($_GET['p'] ?? 1) + 1}">
|
||||
⭇ сюда
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
{/if}
|
||||
</div>
|
||||
<div class="field-group">
|
||||
<label for="id">ID</label>
|
||||
<input class="text medium-field" type="number" id="id" disabled value="{$club->getId()}" />
|
||||
</div>
|
||||
<div class="field-group">
|
||||
<label for="id_owner">{_admin_ownerid}</label>
|
||||
<input class="text medium-field" type="text" id="id_owner" name="id_owner" value="{$club->getOwner()->getId()}" />
|
||||
</div>
|
||||
<div class="field-group">
|
||||
<label for="name">{_admin_title}</label>
|
||||
<input class="text medium-field" type="text" id="name" name="name" value="{$club->getName()}" />
|
||||
</div>
|
||||
<div class="field-group">
|
||||
<label for="about">{_admin_description}</label>
|
||||
<input class="text medium-field" type="text" id="about" name="about" value="{$club->getDescription()}" />
|
||||
</div>
|
||||
<div class="field-group">
|
||||
<label for="shortcode">{_admin_shortcode}</label>
|
||||
<input class="text medium-field" type="text" id="shortcode" name="shortcode" value="{$club->getShortCode()}" />
|
||||
</div>
|
||||
<br/>
|
||||
<div class="group">
|
||||
<input class="toggle-large" type="checkbox" id="verify" name="verify" value="1" {if $club->isVerified()} checked {/if} />
|
||||
<label for="verify">{_admin_verification}</label>
|
||||
</div>
|
||||
<div class="group">
|
||||
<input class="toggle-large" type="checkbox" id="hide_from_global_feed" name="hide_from_global_feed" value="1" {if $club->isHideFromGlobalFeedEnabled()} checked {/if} />
|
||||
<label for="hide_from_global_feed">{_admin_club_excludeglobalfeed}</label>
|
||||
</div>
|
||||
<hr/>
|
||||
<div class="buttons-container">
|
||||
<div class="buttons">
|
||||
<input type="hidden" name="hash" value="{$csrfToken}" />
|
||||
<input class="button submit" type="submit" value="{_save}">
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
{if $isBan}
|
||||
<div class="aui-tabs horizontal-tabs">
|
||||
<nav class="aui-navgroup aui-navgroup-horizontal">
|
||||
<div class="aui-navgroup-inner">
|
||||
<div class="aui-navgroup-primary">
|
||||
<ul class="aui-nav">
|
||||
<li><a href="?act=main">{_admin_tab_main}</a></li>
|
||||
<li class="aui-nav-selected"><a href="?act=ban">{_admin_tab_ban}</a></li>
|
||||
<li><a href="?act=followers">{_admin_tab_followers}</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
<form class="aui" method="POST">
|
||||
<div class="field-group">
|
||||
<label for="ban_reason">{_admin_banreason}</label>
|
||||
<input class="text" type="text" id="text-input" name="ban_reason" value="{$club->getBanReason()}" />
|
||||
</div>
|
||||
<hr/>
|
||||
<div class="buttons-container">
|
||||
<div class="buttons">
|
||||
<input type="hidden" name="hash" value="{$csrfToken}" />
|
||||
<input class="button submit" type="submit" value="{_save}">
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
{if $isFollowers}
|
||||
{var $followers = iterator_to_array($followers)}
|
||||
|
||||
<div class="aui-tabs horizontal-tabs">
|
||||
<nav class="aui-navgroup aui-navgroup-horizontal">
|
||||
<div class="aui-navgroup-inner">
|
||||
<div class="aui-navgroup-primary">
|
||||
<ul class="aui-nav">
|
||||
<li><a href="?act=main">{_admin_tab_main}</a></li>
|
||||
<li><a href="?act=ban">{_admin_tab_ban}</a></li>
|
||||
<li class="aui-nav-selected"><a href="?act=followers">{_admin_tab_followers}</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
<table rules="none" class="aui aui-table-list">
|
||||
<tbody>
|
||||
<tr n:foreach="$followers as $follower">
|
||||
<td>{$follower->getId()}</td>
|
||||
<td>
|
||||
<span class="aui-avatar aui-avatar-xsmall">
|
||||
<span class="aui-avatar-inner">
|
||||
<img src="{$follower->getAvatarUrl()}" alt="{$follower->getCanonicalName()}" role="presentation" />
|
||||
</span>
|
||||
</span>
|
||||
|
||||
<a href="{$follower->getURL()}">{$follower->getCanonicalName()}</a>
|
||||
|
||||
<span n:if="$follower->isBanned()" class="aui-lozenge aui-lozenge-subtle aui-lozenge-removed">{_admin_banned}</span>
|
||||
</td>
|
||||
<td>{$follower->isFemale() ? tr("female") : tr("male")}</td>
|
||||
<td>{$follower->getShortCode() ?? "(" . tr("none") . ")"}</td>
|
||||
<td>{$follower->getRegistrationTime()}</td>
|
||||
<td>
|
||||
<a class="aui-button aui-button-primary" href="/admin/users/id{$follower->getId()}">
|
||||
<span class="aui-icon aui-icon-small aui-iconfont-new-edit">{_edit}</span>
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<div align="right">
|
||||
{var $isLast = ((20 * (($_GET['p'] ?? 1) - 1)) + $amount) < $count}
|
||||
|
||||
<a n:if="($_GET['p'] ?? 1) > 1" class="aui-button" href="?p={($_GET['p'] ?? 1) - 1}">«</a>
|
||||
<a n:if="$isLast" class="aui-button" href="?p={($_GET['p'] ?? 1) + 1}">»</a>
|
||||
</div>
|
||||
</div>
|
||||
{/if}
|
||||
{/block}
|
||||
|
|
|
@ -2,14 +2,16 @@
|
|||
{var $search = true}
|
||||
|
||||
{block title}
|
||||
Группы
|
||||
{_admin_club_search}
|
||||
{/block}
|
||||
|
||||
{block heading}
|
||||
Бутылки
|
||||
{_groups}
|
||||
{/block}
|
||||
|
||||
{block searchTitle}Поиск бутылок{/block}
|
||||
{block searchTitle}
|
||||
{include title}
|
||||
{/block}
|
||||
|
||||
{block content}
|
||||
{var $clubs = iterator_to_array($clubs)}
|
||||
|
@ -18,12 +20,12 @@
|
|||
<table class="aui aui-table-list">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>#</th>
|
||||
<th>Имя</th>
|
||||
<th>Автор</th>
|
||||
<th>Описание</th>
|
||||
<th>Короткий адрес</th>
|
||||
<th>Действия</th>
|
||||
<th>ID</th>
|
||||
<th>{_admin_title}</th>
|
||||
<th>{_admin_author}</th>
|
||||
<th>{_admin_description}</th>
|
||||
<th>{_admin_shortcode}</th>
|
||||
<th>{_admin_actions}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
|
@ -49,11 +51,11 @@
|
|||
|
||||
<a href="{$user->getURL()}">{$user->getCanonicalName()}</a>
|
||||
</td>
|
||||
<td>{$club->getDescription() ?? "(не указано)"}</td>
|
||||
<td>{$club->getDescription() ?? "(" . tr("none") . ")"}</td>
|
||||
<td>{$club->getShortCode()}</td>
|
||||
<td>
|
||||
<a class="aui-button aui-button-primary" href="/admin/clubs/id{$club->getId()}">
|
||||
<span class="aui-icon aui-icon-small aui-iconfont-new-edit">Редактировать</span>
|
||||
<span class="aui-icon aui-icon-small aui-iconfont-new-edit">{_edit}</span>
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
|
@ -63,11 +65,7 @@
|
|||
<div align="right">
|
||||
{var $isLast = ((10 * (($_GET['p'] ?? 1) - 1)) + $amount) < $count}
|
||||
|
||||
<a n:if="($_GET['p'] ?? 1) > 1" class="aui-button" href="?p={($_GET['p'] ?? 1) - 1}">
|
||||
⭁ туда
|
||||
</a>
|
||||
<a n:if="$isLast" class="aui-button" href="?p={($_GET['p'] ?? 1) + 1}">
|
||||
⭇ сюда
|
||||
</a>
|
||||
<a n:if="($_GET['p'] ?? 1) > 1" class="aui-button" href="?p={($_GET['p'] ?? 1) - 1}">«</a>
|
||||
<a n:if="$isLast" class="aui-button" href="?p={($_GET['p'] ?? 1) + 1}">»</a>
|
||||
</div>
|
||||
{/block}
|
||||
|
|
|
@ -2,9 +2,9 @@
|
|||
|
||||
{block title}
|
||||
{if $form->id === 0}
|
||||
Новый подарок
|
||||
{_admin_newgift}
|
||||
{else}
|
||||
Подарок "{$form->name}"
|
||||
{_gift} "{$form->name}"
|
||||
{/if}
|
||||
{/block}
|
||||
|
||||
|
@ -16,7 +16,7 @@
|
|||
<form class="aui" method="POST" enctype="multipart/form-data">
|
||||
<div class="field-group">
|
||||
<label for="avatar">
|
||||
Изображение
|
||||
{_admin_image}
|
||||
<span n:if="$form->id === 0" class="aui-icon icon-required"></span>
|
||||
</label>
|
||||
{if $form->id === 0}
|
||||
|
@ -29,43 +29,39 @@
|
|||
</span>
|
||||
<input style="display: none;" id="picInput" type="file" name="pic" accept="image/jpeg,image/png,image/gif,image/webp" />
|
||||
<div class="description">
|
||||
<a id="picChange" href="javascript:false">Заменить изображение?</a>
|
||||
<a id="picChange" href="javascript:false">{_admin_image_replace}</a>
|
||||
</div>
|
||||
{/if}
|
||||
</div>
|
||||
|
||||
|
||||
<div class="field-group">
|
||||
<label for="id">
|
||||
ID
|
||||
</label>
|
||||
<label for="id">ID</label>
|
||||
<input class="text long-field" type="number" id="id" disabled="disabled" value="{$form->id}" />
|
||||
</div>
|
||||
<div class="field-group">
|
||||
<label for="putin">
|
||||
Использований
|
||||
</label>
|
||||
<input class="text long-field" type="number" id="putin" disabled="disabled" value="{$form->usages}" />
|
||||
<label for="usages">{_admin_uses}</label>
|
||||
<input class="text long-field" type="number" id="usages" disabled="disabled" value="{$form->usages}" />
|
||||
<div n:if="$form->usages > 0" class="description">
|
||||
<a href="javascript:$('#putin').value(0);">Обнулить?</a>
|
||||
<a href="javascript:$('#usages').value(0);">{_admin_uses_reset}</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="field-group">
|
||||
<label for="name">
|
||||
Внутренее имя
|
||||
{_admin_name}
|
||||
<span class="aui-icon icon-required"></span>
|
||||
</label>
|
||||
<input class="text long-field" type="text" id="name" name="name" value="{$form->name}" />
|
||||
</div>
|
||||
<div class="field-group">
|
||||
<label for="price">
|
||||
Цена
|
||||
{_admin_price}
|
||||
<span class="aui-icon icon-required"></span>
|
||||
</label>
|
||||
<input class="text long-field" type="number" id="price" name="price" min="0" value="{$form->price}" />
|
||||
</div>
|
||||
<div class="field-group">
|
||||
<label for="limit">
|
||||
Ограничение
|
||||
{_admin_limits}
|
||||
<span class="aui-icon icon-required"></span>
|
||||
</label>
|
||||
<input class="text long-field" type="number" min="-1" id="limit" name="limit" value="{$form->limit}" />
|
||||
|
@ -75,13 +71,13 @@
|
|||
<div class="checkbox" resolved="">
|
||||
<input n:attr="disabled => $form->id === 0, checked => $form->id === 0" class="checkbox" type="checkbox" name="reset_limit" id="reset_limit" />
|
||||
<span class="aui-form-glyph"></span>
|
||||
|
||||
<label for="reset_limit">Сбросить счётчик ограничений</label>
|
||||
|
||||
<label for="reset_limit">{_admin_limits_reset}</label>
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
|
||||
<input n:if="$form->id === 0" type="hidden" name="_cat" value="{$_GET['cat'] ?? 1}" />
|
||||
|
||||
|
||||
<div class="buttons-container">
|
||||
<div class="buttons">
|
||||
<input type="hidden" name="hash" value="{$csrfToken}" />
|
||||
|
@ -94,12 +90,12 @@
|
|||
{block scripts}
|
||||
<script>
|
||||
const TRANS_GIF = "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7";
|
||||
|
||||
|
||||
$("#picChange").click(_ => $("#picInput").click());
|
||||
$("#picInput").bind("change", e => {
|
||||
if(typeof e.target.files[0] === "undefined")
|
||||
$("#pic").prop("src", URL.createObjectURL(TRANS_GIF));
|
||||
|
||||
|
||||
$("#pic").prop("src", URL.createObjectURL(e.target.files[0]));
|
||||
});
|
||||
</script>
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{extends "@layout.xml"}
|
||||
|
||||
{block title}
|
||||
Наборы подарков
|
||||
{_admin_giftsets}
|
||||
{/block}
|
||||
|
||||
{block headingWrap}
|
||||
|
@ -9,7 +9,7 @@
|
|||
{_create}
|
||||
</a>
|
||||
|
||||
<h1>Наборы подарков</h1>
|
||||
<h1>{_admin_giftsets}</h1>
|
||||
{/block}
|
||||
|
||||
{block content}
|
||||
|
@ -27,12 +27,11 @@
|
|||
</td>
|
||||
<td style="vertical-align: middle; text-align: right;">
|
||||
<a class="aui-button aui-button-primary" href="/admin/gifts/{$cat->getSlug()}.{$cat->getId()}.meta">
|
||||
<span class="aui-icon aui-icon-small aui-iconfont-new-edit">Редактировать</span>
|
||||
<span class="aui-icon aui-icon-small aui-iconfont-new-edit">{_edit}</span>
|
||||
</a>
|
||||
|
||||
<a class="aui-button" href="/admin/gifts/{$cat->getSlug()}.{$cat->getId()}/">
|
||||
<span class="aui-icon aui-icon-small aui-iconfont-gallery">Открыть</span>
|
||||
Открыть
|
||||
<span class="aui-icon aui-icon-small aui-iconfont-gallery">{_admin_open}</span>
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
|
@ -40,17 +39,13 @@
|
|||
</table>
|
||||
{else}
|
||||
<center>
|
||||
<p>Наборов подарков нету. Чтобы создать подарок, создайте набор.</p>
|
||||
<p>{_admin_giftsets_none}</p>
|
||||
</center>
|
||||
{/if}
|
||||
|
||||
<div align="right">
|
||||
{var $isLast = ((20 * (($_GET['p'] ?? 1) - 1)) + sizeof($categories)) < $count}
|
||||
<a n:if="($_GET['p'] ?? 1) > 1" class="aui-button" href="?act={$act}&p={($_GET['p'] ?? 1) - 1}">
|
||||
⭁ туда
|
||||
</a>
|
||||
<a n:if="$isLast" class="aui-button" href="?act={$act}&p={($_GET['p'] ?? 1) + 1}">
|
||||
⭇ сюда
|
||||
</a>
|
||||
<a n:if="($_GET['p'] ?? 1) > 1" class="aui-button" href="?act={$act}&p={($_GET['p'] ?? 1) - 1}">«</a>
|
||||
<a n:if="$isLast" class="aui-button" href="?act={$act}&p={($_GET['p'] ?? 1) + 1}">»</a>
|
||||
</div>
|
||||
{/block}
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
{block title}
|
||||
{if $form->id === 0}
|
||||
Создать набор подарков
|
||||
{_admin_giftsets_create}
|
||||
{else}
|
||||
{$form->languages["master"]->name}
|
||||
{/if}
|
||||
|
@ -14,7 +14,7 @@
|
|||
|
||||
{block content}
|
||||
<form class="aui" method="POST">
|
||||
<h3>Общие настройки</h3>
|
||||
<h3>{_admin_commonsettings}</h3>
|
||||
<fieldset>
|
||||
<div class="field-group">
|
||||
<label for="id">
|
||||
|
@ -24,37 +24,37 @@
|
|||
</div>
|
||||
<div class="field-group">
|
||||
<label for="name_master">
|
||||
Наименование
|
||||
{_admin_name}
|
||||
<span class="aui-icon icon-required"></span>
|
||||
</label>
|
||||
<input class="text long-field" type="text" id="name_master" name="name_master" value="{$form->languages['master']->name}" />
|
||||
<div class="description">Внутреннее название набора, которое будет использоваться, если не удаётся найти название на языке пользователя.</div>
|
||||
<div class="description">{_admin_giftsets_title}</div>
|
||||
</div>
|
||||
<div class="field-group">
|
||||
<label for="description_master">
|
||||
Описание
|
||||
{_admin_description}
|
||||
<span class="aui-icon icon-required"></span>
|
||||
</label>
|
||||
<input class="text long-field" type="text" id="description_master" name="description_master" value="{$form->languages['master']->description}" />
|
||||
<div class="description">Внутреннее описание набора, которое будет использоваться, если не удаётся найти название на языке пользователя.</div>
|
||||
<div class="description">{_admin_giftsets_description}</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
<h3>Языко-зависимые настройки</h3>
|
||||
<h3>{_admin_langsettings}</h3>
|
||||
<fieldset>
|
||||
{foreach $form->languages as $locale => $data}
|
||||
{continueIf $locale === "master"}
|
||||
|
||||
<div class="field-group">
|
||||
<label for="name_{$locale}">
|
||||
Наименование
|
||||
{_admin_name}
|
||||
<img src="/assets/packages/static/openvk/img/flags/{$locale}.gif" alt="{$locale}" />
|
||||
</label>
|
||||
<input class="text long-field" type="text" id="name_{$locale}" name="name_{$locale}" value="{$data->name}" />
|
||||
</div>
|
||||
<div class="field-group">
|
||||
<label for="description_{$locale}">
|
||||
Описание
|
||||
{_admin_description}
|
||||
<img src="/assets/packages/static/openvk/img/flags/{$locale}.gif" alt="{$locale}" />
|
||||
</label>
|
||||
<input class="text long-field" type="text" id="description_{$locale}" name="description_{$locale}" value="{$data->description}" />
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
{_create}
|
||||
</a>
|
||||
|
||||
<h1>Набор "{$cat->getName()}"</h1>
|
||||
<h1>{_admin_giftset} "{$cat->getName()}"</h1>
|
||||
{/block}
|
||||
|
||||
{block content}
|
||||
|
@ -32,11 +32,11 @@
|
|||
<td style="vertical-align: middle;">
|
||||
{$gift->getName()}
|
||||
<span n:if="$gift->isFree()" class="aui-lozenge aui-lozenge-subtle aui-lozenge-success">
|
||||
бесплатный
|
||||
{_admin_price_free}
|
||||
</span>
|
||||
</td>
|
||||
<td style="vertical-align: middle;">
|
||||
{$gift->getPrice()} голосов
|
||||
{tr("points_amount", $gift->getPrice())}
|
||||
</td>
|
||||
<td style="vertical-align: middle;">
|
||||
{$gift->getUsages()} раз
|
||||
|
@ -72,11 +72,8 @@
|
|||
|
||||
<div align="right">
|
||||
{var $isLast = ((20 * (($_GET['p'] ?? 1) - 1)) + sizeof($gifts)) < $count}
|
||||
<a n:if="($_GET['p'] ?? 1) > 1" class="aui-button" href="?p={($_GET['p'] ?? 1) - 1}">
|
||||
⭁ туда
|
||||
</a>
|
||||
<a n:if="$isLast" class="aui-button" href="?p={($_GET['p'] ?? 1) + 1}">
|
||||
⭇ сюда
|
||||
</a>
|
||||
|
||||
<a n:if="($_GET['p'] ?? 1) > 1" class="aui-button" href="?p={($_GET['p'] ?? 1) - 1}">«</a>
|
||||
<a n:if="$isLast" class="aui-button" href="?p={($_GET['p'] ?? 1) + 1}">»</a>
|
||||
</div>
|
||||
{/block}
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
{extends "@layout.xml"}
|
||||
|
||||
{block title}
|
||||
Сводка
|
||||
{_admin_overview_summary}
|
||||
{/block}
|
||||
|
||||
{block heading}
|
||||
Сводка
|
||||
{_admin_overview_summary}
|
||||
{/block}
|
||||
|
||||
{block content}
|
||||
Да!
|
||||
┬─┬︵/(.□.)╯
|
||||
{/block}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{extends "@layout.xml"}
|
||||
|
||||
{block title}
|
||||
Редактировать {$user->getCanonicalName()}
|
||||
{_edit} {$user->getCanonicalName()}
|
||||
{/block}
|
||||
|
||||
{block heading}
|
||||
|
@ -10,95 +10,70 @@
|
|||
|
||||
{block content}
|
||||
<div class="aui-tabs horizontal-tabs">
|
||||
<form class="aui" method="POST">
|
||||
<div class="field-group">
|
||||
<label for="avatar">
|
||||
Аватарка
|
||||
</label>
|
||||
<span id="avatar" class="aui-avatar aui-avatar-project aui-avatar-xlarge">
|
||||
<span class="aui-avatar-inner">
|
||||
<img src="{$user->getAvatarUrl('tiny')}" style="object-fit: cover;"></img>
|
||||
<form class="aui" method="POST">
|
||||
<div class="field-group">
|
||||
<label for="avatar">{_avatar}</label>
|
||||
<span id="avatar" class="aui-avatar aui-avatar-project aui-avatar-xlarge">
|
||||
<span class="aui-avatar-inner">
|
||||
<img src="{$user->getAvatarUrl('tiny')}" style="object-fit: cover;"></img>
|
||||
</span>
|
||||
</span>
|
||||
</span>
|
||||
</div>
|
||||
<div class="field-group">
|
||||
<label for="id">
|
||||
ID
|
||||
</label>
|
||||
<input class="text medium-field" type="number" id="id" disabled value="{$user->getId()}" />
|
||||
</div>
|
||||
<div class="field-group">
|
||||
<label for="guid">
|
||||
GUID
|
||||
</label>
|
||||
<input class="text medium-field" id="guid" disabled value="{$user->getChandlerUser()->getId()}" />
|
||||
</div>
|
||||
<div class="field-group">
|
||||
<label for="registration_ip">
|
||||
Первый IP
|
||||
</label>
|
||||
<input class="text medium-field" id="registration_ip" disabled value="{$user->getRegistrationIP()}" />
|
||||
</div>
|
||||
<div class="field-group">
|
||||
<label for="first_name">
|
||||
Имя
|
||||
</label>
|
||||
<input class="text medium-field" type="text" id="first_name" name="first_name" value="{$user->getFirstName()}" />
|
||||
</div>
|
||||
<div class="field-group">
|
||||
<label for="last_name">
|
||||
Фамилия
|
||||
</label>
|
||||
<input class="text medium-field" type="text" id="last_name" name="last_name" value="{$user->getLastName()}" />
|
||||
</div>
|
||||
<div class="field-group">
|
||||
<label for="nickname">
|
||||
Никнейм
|
||||
</label>
|
||||
<input class="text medium-field" type="text" id="nickname" name="nickname" value="{$user->getPseudo()}" />
|
||||
</div>
|
||||
<div class="field-group">
|
||||
<label for="status">
|
||||
Статус
|
||||
</label>
|
||||
<input class="text medium-field" type="text" id="status" name="status" value="{$user->getStatus()}" />
|
||||
</div>
|
||||
<div class="field-group">
|
||||
<label for="email">
|
||||
E-Mail
|
||||
</label>
|
||||
<input class="text medium-field" type="email" id="email" name="email" value="{$user->getEmail()}" />
|
||||
</div>
|
||||
<div class="field-group">
|
||||
<label for="shortcode">
|
||||
Адрес страницы
|
||||
</label>
|
||||
<input class="text medium-field" type="text" id="shortcode" name="shortcode" value="{$user->getShortCode()}" />
|
||||
</div>
|
||||
<hr>
|
||||
<div class="field-group">
|
||||
<label for="city">
|
||||
Верификация
|
||||
</label>
|
||||
<input class="toggle-large" type="checkbox" id="verify" name="verify" value="1" {if $user->isVerified()} checked {/if} />
|
||||
</div>
|
||||
<div class="field-group">
|
||||
<label for="city">
|
||||
Онлайн статус
|
||||
</label>
|
||||
<select name="online" class="select">
|
||||
<option value="0" {if $user->onlineStatus() > 2}selected{/if}>По-умолчанию</option>
|
||||
<option value="1" {if $user->onlineStatus() == 1}selected{/if}>Инкогнито</option>
|
||||
<option value="2" {if $user->onlineStatus() == 2}selected{/if}>Юзер умер</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="buttons-container">
|
||||
<div class="buttons">
|
||||
<input type="hidden" name="hash" value="{$csrfToken}" />
|
||||
<input class="button submit" type="submit" value="Сохранить">
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<div class="field-group">
|
||||
<label for="id">ID</label>
|
||||
<input class="text medium-field" type="number" id="id" disabled value="{$user->getId()}" />
|
||||
</div>
|
||||
<div class="field-group">
|
||||
<label for="guid">GUID</label>
|
||||
<input class="text medium-field" id="guid" disabled value="{$user->getChandlerUser()->getId()}" />
|
||||
</div>
|
||||
<div class="field-group">
|
||||
<label for="registration_ip">{_admin_first_known_ip}</label>
|
||||
<input class="text medium-field" id="guid" disabled value="{$user->getRegistrationIP()}" />
|
||||
</div>
|
||||
<div class="field-group">
|
||||
<label for="first_name">{_name}</label>
|
||||
<input class="text medium-field" type="text" id="first_name" name="first_name" value="{$user->getFirstName()}" />
|
||||
</div>
|
||||
<div class="field-group">
|
||||
<label for="last_name">{_surname}</label>
|
||||
<input class="text medium-field" type="text" id="last_name" name="last_name" value="{$user->getLastName()}" />
|
||||
</div>
|
||||
<div class="field-group">
|
||||
<label for="nickname">{_nickname}</label>
|
||||
<input class="text medium-field" type="text" id="nickname" name="nickname" value="{$user->getPseudo()}" />
|
||||
</div>
|
||||
<div class="field-group">
|
||||
<label for="status">{_status}</label>
|
||||
<input class="text medium-field" type="text" id="status" name="status" value="{$user->getStatus()}" />
|
||||
</div>
|
||||
<div class="field-group">
|
||||
<label for="email">E-Mail</label>
|
||||
<input class="text medium-field" type="email" id="email" name="email" value="{$user->getEmail()}" />
|
||||
</div>
|
||||
<div class="field-group">
|
||||
<label for="shortcode">{_admin_shortcode}</label>
|
||||
<input class="text medium-field" type="text" id="shortcode" name="shortcode" value="{$user->getShortCode()}" />
|
||||
</div>
|
||||
<hr>
|
||||
<div class="field-group">
|
||||
<label for="city">{_admin_verification}</label>
|
||||
<input class="toggle-large" type="checkbox" id="verify" name="verify" value="1" {if $user->isVerified()} checked {/if} />
|
||||
</div>
|
||||
<div class="field-group">
|
||||
<label for="city">{_admin_user_online}</label>
|
||||
<select name="online" class="select">
|
||||
<option value="0" {if $user->onlineStatus() > 2}selected{/if}>{_admin_user_online_default}</option>
|
||||
<option value="1" {if $user->onlineStatus() == 1}selected{/if}>{_admin_user_online_incognite}</option>
|
||||
<option value="2" {if $user->onlineStatus() == 2}selected{/if}>{_admin_user_online_deceased}</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="buttons-container">
|
||||
<div class="buttons">
|
||||
<input type="hidden" name="hash" value="{$csrfToken}" />
|
||||
<input class="button submit" type="submit" value="{_save}">
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
{/block}
|
||||
|
|
|
@ -2,14 +2,16 @@
|
|||
{var $search = true}
|
||||
|
||||
{block title}
|
||||
Пользователи
|
||||
{_admin_user_search}
|
||||
{/block}
|
||||
|
||||
{block heading}
|
||||
Пиздюки
|
||||
{_users}
|
||||
{/block}
|
||||
|
||||
{block searchTitle}Поиск пиздюков{/block}
|
||||
{block searchTitle}
|
||||
{include title}
|
||||
{/block}
|
||||
|
||||
{block content}
|
||||
{var $users = iterator_to_array($users)}
|
||||
|
@ -18,12 +20,12 @@
|
|||
<table class="aui aui-table-list">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>#</th>
|
||||
<th>Имя</th>
|
||||
<th>Пол</th>
|
||||
<th>Короткий адрес</th>
|
||||
<th>Дата регистрации</th>
|
||||
<th>Действия</th>
|
||||
<th>ID</th>
|
||||
<th>{_admin_name}</th>
|
||||
<th>{_gender}</th>
|
||||
<th>{_admin_shortcode}</th>
|
||||
<th>{_registration_date}</th>
|
||||
<th>{_admin_actions}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
|
@ -35,23 +37,21 @@
|
|||
<img src="{$user->getAvatarUrl('miniscule')}" alt="{$user->getCanonicalName()}" style="object-fit: cover;" role="presentation" />
|
||||
</span>
|
||||
</span>
|
||||
|
||||
|
||||
<a href="{$user->getURL()}">{$user->getCanonicalName()}</a>
|
||||
|
||||
<span n:if="$user->isBanned()" class="aui-lozenge aui-lozenge-subtle aui-lozenge-removed">
|
||||
заблокирован
|
||||
</span>
|
||||
|
||||
<span n:if="$user->isBanned()" class="aui-lozenge aui-lozenge-subtle aui-lozenge-removed">{_admin_banned}</span>
|
||||
</td>
|
||||
<td>{$user->isFemale() ? "Женский" : "Мужской"}</td>
|
||||
<td>{$user->getShortCode() ?? "(отсутствует)"}</td>
|
||||
<td>{$user->isFemale() ? tr("female") : tr("male")}</td>
|
||||
<td>{$user->getShortCode() ?? "(" . tr("none") . ")"}</td>
|
||||
<td>{$user->getRegistrationTime()}</td>
|
||||
<td>
|
||||
<a class="aui-button aui-button-primary" href="/admin/users/id{$user->getId()}">
|
||||
<span class="aui-icon aui-icon-small aui-iconfont-new-edit">Редактировать</span>
|
||||
<span class="aui-icon aui-icon-small aui-iconfont-new-edit">{_edit}</span>
|
||||
</a>
|
||||
{if $thisUser->getChandlerUser()->can("substitute")->model('openvk\Web\Models\Entities\User')->whichBelongsTo(0)}
|
||||
<a class="aui-button" href="/setSID/{$user->getChandlerUser()->getId()}?hash={rawurlencode($csrfToken)}">
|
||||
<span class="aui-icon aui-icon-small aui-iconfont-sign-in">Войти как</span>
|
||||
<span class="aui-icon aui-icon-small aui-iconfont-sign-in">{_admin_loginas}</span>
|
||||
</a>
|
||||
{/if}
|
||||
</td>
|
||||
|
@ -61,12 +61,8 @@
|
|||
<br/>
|
||||
<div align="right">
|
||||
{var $isLast = ((20 * (($_GET['p'] ?? 1) - 1)) + $amount) < $count}
|
||||
|
||||
<a n:if="($_GET['p'] ?? 1) > 1" class="aui-button" href="?p={($_GET['p'] ?? 1) - 1}">
|
||||
⭁ туда
|
||||
</a>
|
||||
<a n:if="$isLast" class="aui-button" href="?p={($_GET['p'] ?? 1) + 1}">
|
||||
⭇ сюда
|
||||
</a>
|
||||
|
||||
<a n:if="($_GET['p'] ?? 1) > 1" class="aui-button" href="?p={($_GET['p'] ?? 1) - 1}">«</a>
|
||||
<a n:if="$isLast" class="aui-button" href="?p={($_GET['p'] ?? 1) + 1}">»</a>
|
||||
</div>
|
||||
{/block}
|
||||
|
|
|
@ -5,45 +5,36 @@
|
|||
{/block}
|
||||
|
||||
{block heading}
|
||||
{_edit} №{$form->token ?? "undefined"}
|
||||
{_edit} #{$form->token ?? "undefined"}
|
||||
{/block}
|
||||
|
||||
{block content}
|
||||
<div style="margin: 8px -8px;" class="aui-tabs horizontal-tabs">
|
||||
<ul class="tabs-menu">
|
||||
<li class="menu-item active-tab">
|
||||
<a href="#info">Информация</a>
|
||||
<a href="#info">{_admin_tab_main}</a>
|
||||
</li>
|
||||
<li class="menu-item">
|
||||
<a href="#activators">{_voucher_activators}</a>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<div class="tabs-pane active-pane" id="info">
|
||||
<form class="aui" method="POST">
|
||||
<div class="field-group">
|
||||
<label for="id">
|
||||
ID
|
||||
</label>
|
||||
<label for="id">ID</label>
|
||||
<input class="text long-field" type="number" id="id" name="id" disabled value="{$form->id}" />
|
||||
</div>
|
||||
<div class="field-group">
|
||||
<label for="token">
|
||||
Серийный номер
|
||||
</label>
|
||||
<label for="token">{_admin_voucher_serial}</label>
|
||||
<input class="text long-field" type="text" id="token" name="token" value="{$form->token}" />
|
||||
<div class="description">Номер состоит из 24 символов, если формат неправильный или поле не заполнено, будет назначен автоматически.</div>
|
||||
<div class="description">{_admin_voucher_serial_desc}</div>
|
||||
</div>
|
||||
<div class="field-group">
|
||||
<label for="coins">
|
||||
Количество голосов
|
||||
</label>
|
||||
<label for="coins">{_admin_voucher_coins}</label>
|
||||
<input class="text long-field" type="number" min="0" id="coins" name="coins" value="{$form->coins}" />
|
||||
</div>
|
||||
<div class="field-group">
|
||||
<label for="rating">
|
||||
Количество рейтинга
|
||||
</label>
|
||||
<label for="rating">{_admin_voucher_rating}</label>
|
||||
<input class="text long-field" type="number" min="0" id="rating" name="rating" value="{$form->rating}" />
|
||||
</div>
|
||||
<div class="field-group">
|
||||
|
@ -55,9 +46,9 @@
|
|||
{/if}
|
||||
</label>
|
||||
<input class="text long-field" type="number" min="-1" id="usages" name="usages" value="{$form->usages}" />
|
||||
<div class="description">Количество аккаунтов, которые могут использовать ваучер. Если написать -1, будет Infinity.</div>
|
||||
<div class="description">{_admin_voucher_usages_desc}</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="buttons-container">
|
||||
<div class="buttons">
|
||||
<input type="hidden" name="hash" value="{$csrfToken}" />
|
||||
|
@ -66,7 +57,6 @@
|
|||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<div class="tabs-pane" id="activators">
|
||||
<table rules="none" class="aui aui-table-list">
|
||||
<tbody>
|
||||
|
@ -77,12 +67,10 @@
|
|||
<img src="{$user->getAvatarUrl('miniscule')}" alt="{$user->getCanonicalName()}" role="presentation" />
|
||||
</span>
|
||||
</span>
|
||||
|
||||
|
||||
<a href="{$user->getURL()}">{$user->getCanonicalName()}</a>
|
||||
|
||||
<span n:if="$user->isBanned()" class="aui-lozenge aui-lozenge-subtle aui-lozenge-removed">
|
||||
заблокирован
|
||||
</span>
|
||||
|
||||
<span n:if="$user->isBanned()" class="aui-lozenge aui-lozenge-subtle aui-lozenge-removed">{_admin_banned}</span>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
<a style="float: right;" class="aui-button aui-button-primary" href="/admin/vouchers/id0">
|
||||
{_create}
|
||||
</a>
|
||||
|
||||
|
||||
<h1>{_vouchers}</h1>
|
||||
{/block}
|
||||
|
||||
|
@ -16,13 +16,13 @@
|
|||
<table class="aui aui-table-list">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>#</th>
|
||||
<th>Серийный номер</th>
|
||||
<th>Голоса</th>
|
||||
<th>Рейгтинг</th>
|
||||
<th>Осталось использований</th>
|
||||
<th>Состояние</th>
|
||||
<th>Действия</th>
|
||||
<th>ID</th>
|
||||
<th>{_admin_voucher_serial}</th>
|
||||
<th>{_coins}</th>
|
||||
<th>{_admin_voucher_rating}</th>
|
||||
<th>{_usages_left}</th>
|
||||
<th>{_admin_voucher_status}</th>
|
||||
<th>{_admin_actions}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
|
@ -34,28 +34,25 @@
|
|||
<td>{$voucher->getRemainingUsages() === INF ? "∞" : $voucher->getRemainingUsages()}</td>
|
||||
<td>
|
||||
{if $voucher->isExpired()}
|
||||
<span class="aui-lozenge aui-lozenge-subtle aui-lozenge-removed">закончился</span>
|
||||
<span class="aui-lozenge aui-lozenge-subtle aui-lozenge-removed">{_admin_voucher_status_closed}</span>
|
||||
{else}
|
||||
<span class="aui-lozenge aui-lozenge-subtle aui-lozenge-success">активен</span>
|
||||
<span class="aui-lozenge aui-lozenge-subtle aui-lozenge-success">{_admin_voucher_status_opened}</span>
|
||||
{/if}
|
||||
</td>
|
||||
<td>
|
||||
<a class="aui-button aui-button-primary" href="/admin/vouchers/id{$voucher->getId()}">
|
||||
<span class="aui-icon aui-icon-small aui-iconfont-new-edit">Редактировать</span>
|
||||
<span class="aui-icon aui-icon-small aui-iconfont-new-edit">{_edit}</span>
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<br/>
|
||||
|
||||
|
||||
<div align="right">
|
||||
{var $isLast = ((20 * (($_GET['p'] ?? 1) - 1)) + sizeof($vouchers)) < $count}
|
||||
<a n:if="($_GET['p'] ?? 1) > 1" class="aui-button" href="?p={($_GET['p'] ?? 1) - 1}">
|
||||
⭁ туда
|
||||
</a>
|
||||
<a n:if="$isLast" class="aui-button" href="?p={($_GET['p'] ?? 1) + 1}">
|
||||
⭇ сюда
|
||||
</a>
|
||||
|
||||
<a n:if="($_GET['p'] ?? 1) > 1" class="aui-button" href="?p={($_GET['p'] ?? 1) - 1}">«</a>
|
||||
<a n:if="$isLast" class="aui-button" href="?p={($_GET['p'] ?? 1) + 1}">»</a>
|
||||
</div>
|
||||
{/block}
|
||||
|
|
|
@ -842,6 +842,84 @@
|
|||
"ban_in_support_user_action" = "Ban in support";
|
||||
"unban_in_support_user_action" = "Unban in support";
|
||||
|
||||
/* Admin panel */
|
||||
|
||||
"admin" = "Admin panel";
|
||||
|
||||
"admin_ownerid" = "Owner ID";
|
||||
"admin_author" = "Author";
|
||||
"admin_name" = "Name";
|
||||
"admin_title" = "Title";
|
||||
"admin_description" = "Description";
|
||||
"admin_first_known_ip" = "First known IP";
|
||||
"admin_shortcode" = "Short code";
|
||||
"admin_verification" = "Verification";
|
||||
"admin_banreason" = "Ban reason";
|
||||
"admin_banned" = "banned";
|
||||
"admin_gender" = "Gender";
|
||||
"admin_registrationdate" = "Registration date";
|
||||
"admin_actions" = "Actions";
|
||||
"admin_image" = "Image";
|
||||
"admin_image_replace" = "Replace the image?";
|
||||
"admin_uses" = "Uses";
|
||||
"admin_uses_reset" = "Reset the number of uses?";
|
||||
"admin_limits" = "Limits";
|
||||
"admin_limits_reset" = "Reset the number of limits";
|
||||
"admin_open" = "Open";
|
||||
"admin_loginas" = "Login as...";
|
||||
"admin_commonsettings" = "Common settings";
|
||||
"admin_langsettings" = "Language-dependent settings";
|
||||
|
||||
"admin_tab_main" = "General";
|
||||
"admin_tab_ban" = "Ban";
|
||||
"admin_tab_followers" = "Followers";
|
||||
|
||||
"admin_overview" = "Overview";
|
||||
"admin_overview_summary" = "Summary";
|
||||
|
||||
"admin_content" = "User-generated content";
|
||||
"admin_user_search" = "Search for users";
|
||||
"admin_user_online" = "Online status";
|
||||
"admin_user_online_default" = "Default";
|
||||
"admin_user_online_incognito" = "Incognito";
|
||||
"admin_user_online_deceased" = "Deceased";
|
||||
"admin_club_search" = "Search for groups";
|
||||
"admin_club_excludeglobalfeed" = "Do not display posts in the global feed";
|
||||
|
||||
"admin_services" = "Paid services";
|
||||
"admin_newgift" = "New gift";
|
||||
"admin_price" = "Price";
|
||||
"admin_giftset" = "Gift set";
|
||||
"admin_giftsets" = "Gift sets";
|
||||
"admin_giftsets_none" = "There are no gift sets. Create a set to create a gift.";
|
||||
"admin_giftsets_create" = "Create a gift set";
|
||||
"admin_giftsets_title" = "The internal name of the set, which will be used if no name can be found in the user's language.";
|
||||
"admin_giftsets_description" = "The internal description of the set, which will be used if no name can be found in the user's language.";
|
||||
"admin_price_free" = "free";
|
||||
"admin_voucher_rating" = "Rating";
|
||||
"admin_voucher_serial" = "Serial number";
|
||||
"admin_voucher_serial_desc" = "The number consists of 24 characters. If the format is incorrect or the field is not filled in, it will be assigned automatically.";
|
||||
"admin_voucher_coins" = "Number of votes";
|
||||
"admin_voucher_rating" = "Number of rating";
|
||||
"admin_voucher_usages_desc" = "The number of accounts that can use the voucher. If you type -1, it will be infinity.";
|
||||
"admin_voucher_status" = "Status";
|
||||
"admin_voucher_status_opened" = "active";
|
||||
"admin_voucher_status_closed" = "closed";
|
||||
|
||||
"admin_settings" = "Settings";
|
||||
"admin_settings_tuning" = "General";
|
||||
"admin_settings_appearance" = "Appearance";
|
||||
"admin_settings_security" = "Security";
|
||||
"admin_settings_integrations" = "Integrations";
|
||||
"admin_settings_system" = "System";
|
||||
|
||||
"admin_about" = "About OpenVK";
|
||||
"admin_about_version" = "Version";
|
||||
"admin_about_instance" = "Instance";
|
||||
|
||||
"admin_commerce_disabled" = "Commerce has been disabled by the system administrator";
|
||||
"admin_commerce_disabled_desc" = "The voucher and gift settings will be saved, but will have no effect.";
|
||||
|
||||
/* Paginator (deprecated) */
|
||||
|
||||
"paginator_back" = "Back";
|
||||
|
|
|
@ -885,6 +885,82 @@
|
|||
"ban_in_support_user_action" = "Заблокировать в поддержке";
|
||||
"unban_in_support_user_action" = "Разблокировать в поддержке";
|
||||
|
||||
/* Admin panel */
|
||||
|
||||
"admin" = "Админ-панель";
|
||||
|
||||
"admin_ownerid" = "ID владельца";
|
||||
"admin_author" = "Автор";
|
||||
"admin_name" = "Имя";
|
||||
"admin_title" = "Название";
|
||||
"admin_description" = "Описание";
|
||||
"admin_first_known_ip" = "Первый IP";
|
||||
"admin_shortcode" = "Короткий адрес";
|
||||
"admin_verification" = "Верификация";
|
||||
"admin_banreason" = "Причина блокировки";
|
||||
"admin_banned" = "заблокирован";
|
||||
"admin_actions" = "Действия";
|
||||
"admin_image" = "Изображение";
|
||||
"admin_image_replace" = "Заменить изображение?";
|
||||
"admin_uses" = "Использований";
|
||||
"admin_uses_reset" = "Сбросить количество использований?";
|
||||
"admin_limits" = "Ограничения";
|
||||
"admin_limits_reset" = "Сбросить количество ограничений";
|
||||
"admin_open" = "Открыть";
|
||||
"admin_loginas" = "Войти как...";
|
||||
"admin_commonsettings" = "Общие настройки";
|
||||
"admin_langsettings" = "Языко-зависимые настройки";
|
||||
|
||||
"admin_tab_main" = "Главное";
|
||||
"admin_tab_ban" = "Блокировка";
|
||||
"admin_tab_followers" = "Участники";
|
||||
|
||||
"admin_overview" = "Обзор";
|
||||
"admin_overview_summary" = "Сводка";
|
||||
|
||||
"admin_content" = "Пользовательский контент";
|
||||
"admin_user_search" = "Поиск пользователей";
|
||||
"admin_user_online" = "Онлайн статус";
|
||||
"admin_user_online_default" = "По-умолчанию";
|
||||
"admin_user_online_incognito" = "Инкогнито";
|
||||
"admin_user_online_deceased" = "Покойник";
|
||||
"admin_club_search" = "Поиск групп";
|
||||
"admin_club_excludeglobalfeed" = "Не отображать записи в глобальной ленте";
|
||||
|
||||
"admin_services" = "Платные услуги";
|
||||
"admin_newgift" = "Новый подарок";
|
||||
"admin_price" = "Цена";
|
||||
"admin_giftset" = "Набор подарков";
|
||||
"admin_giftsets" = "Наборы подарков";
|
||||
"admin_giftsets_none" = "Нет наборов подарков. Создайте набор, чтобы создать подарок.";
|
||||
"admin_giftsets_create" = "Создать набор подарков";
|
||||
"admin_giftsets_title" = "Внутреннее название набора, которое будет использоваться, если не удаётся найти название на языке пользователя.";
|
||||
"admin_giftsets_description" = "Внутреннее описание набора, которое будет использоваться, если не удаётся найти название на языке пользователя.";
|
||||
"admin_price_free" = "бесплатный";
|
||||
"admin_voucher_rating" = "Рейтинг";
|
||||
"admin_voucher_serial" = "Серийный номер";
|
||||
"admin_voucher_serial_desc" = "Номер состоит из 24 символов. Если формат неправильный или поле не заполнено, будет назначен автоматически.";
|
||||
"admin_voucher_coins" = "Количество голосов";
|
||||
"admin_voucher_rating" = "Количество рейтинга";
|
||||
"admin_voucher_usages_desc" = "Количество аккаунтов, которые могут использовать ваучер. Если написать -1, будет бесконечность.";
|
||||
"admin_voucher_status" = "Состояние";
|
||||
"admin_voucher_status_opened" = "активен";
|
||||
"admin_voucher_status_closed" = "закончился";
|
||||
|
||||
"admin_settings" = "Настройки";
|
||||
"admin_settings_tuning" = "Общее";
|
||||
"admin_settings_appearance" = "Внешний вид";
|
||||
"admin_settings_security" = "Безопасность";
|
||||
"admin_settings_integrations" = "Интеграции";
|
||||
"admin_settings_system" = "Система";
|
||||
|
||||
"admin_about" = "Об OpenVK";
|
||||
"admin_about_version" = "Версия";
|
||||
"admin_about_instance" = "Инстанция";
|
||||
|
||||
"admin_commerce_disabled" = "Коммерция отключена системным администратором";
|
||||
"admin_commerce_disabled_desc" = "Настройки ваучеров и подарков будут сохранены, но не будут оказывать никакого влияния.";
|
||||
|
||||
/* Paginator (deprecated) */
|
||||
|
||||
"paginator_back" = "Назад";
|
||||
|
|
Loading…
Reference in a new issue