Файл: upload/core/elements/sidebars/panel.php
Строк: 127
<?php
$currentPath = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
$sidebarMenu = [
// Одиночный пункт
[
'type' => 'link',
'perm' => null,
'url' => '/admin',
'title' => 'Основное'
],
// Группа: Арбитраж
[
'type' => 'group',
'title' => 'Арбитраж',
'items' => [
[
'perm' => 'manage_deal',
'url' => '/admin/arbitrage-disp',
'title' => 'Споры'
],
[
'perm' => 'manage_deal',
'url' => '/admin/arbitrage-tickets',
'title' => 'Тикеты'
],
]
],
// Одиночный пункт
[
'type' => 'link',
'perm' => 'us_support',
'url' => '/admin/tickets',
'title' => 'Тикеты'
],
[
'type' => 'link',
'perm' => 'confirm_transfers',
'url' => '/admin/payment-requests',
'title' => 'Заявки на выплату'
],
// Группа: Дизайн
[
'type' => 'group',
'title' => 'Дизайн',
'items' => [
[
'perm' => 'edit_templates',
'url' => '/admin/themes',
'title' => 'Стили'
]
]
],
// Группа: Модули
[
'type' => 'group',
'title' => 'Модули',
'items' => [
[
'perm' => 'edit_modules',
'url' => '/admin/plugins/oauth',
'title' => 'Соц.Авторизация'
],
[
'perm' => 'edit_modules',
'url' => '/admin/plugins/captcha',
'title' => 'Капча'
],
[
'perm' => 'edit_modules',
'url' => '/admin/plugins/payments',
'title' => 'Платежи'
],
[
'perm' => 'edit_modules',
'url' => '/admin/plugins/',
'title' => 'Другие'
],
]
],
[
'type' => 'link',
'perm' => 'edit_site_info',
'url' => '/admin/search-info',
'title' => 'Представление в поиске'
],
[
'type' => 'link',
'perm' => 'edit_solutions',
'url' => '/admin/solutions',
'title' => 'База знаний'
],
[
'type' => 'link',
'perm' => 'manage_nodes',
'url' => '/admin/nodes',
'title' => 'Управление узлами'
],
// Группа: Пользователи
[
'type' => 'group',
'title' => 'Пользователи',
'items' => [
[
'perm' => 'edit_users',
'url' => '/admin/users',
'title' => 'Управление пользователями'
],
[
'perm' => 'edit_group',
'url' => '/admin/groups',
'title' => 'Группы пользователей'
],
]
],
[
'type' => 'link',
'perm' => 'manage_payment',
'url' => '/admin/project-profit',
'title' => 'Доход проекта'
],
[
'type' => 'link',
'perm' => 'edit_site_info',
'url' => '/admin/platform-parameters',
'title' => 'Параметры платформы'
],
[
'type' => 'link',
'perm' => 'edit_operator_details',
'url' => '/admin/operator-details',
'title' => 'Реквизиты оператора'
],
[
'type' => 'link',
'perm' => 'edit_operator_details',
'url' => '/admin/license-agreement',
'title' => 'Лицензионное соглашение'
],
];
echo '<div class="sidebar_menu" id="sidebar">
<div class="side_panel">
<div class="side_panel_box">';
foreach ($sidebarMenu as $item) {
// Обычная ссылка
if ($item['type'] === 'link') {
$perm = $item['perm'];
$allowed = !$perm || (isset($users_perms[$perm]) && $users_perms[$perm] == 1);
$active = ($currentPath === $item['url']) ? 'active' : '';
$off = $allowed ? '' : 'off';
echo '
<a class="panel_link ' . $active . ' ' . $off . '" href="' . homeLink() . $item['url'] . '">' . $item['title'] . '</a>';
}
// Группа
if ($item['type'] === 'group') {
// Проверяем, есть ли хотя бы один доступный пункт
$hasVisible = false;
foreach ($item['items'] as $sub) {
$perm = $sub['perm'];
if (!$perm || (isset($users_perms[$perm]) && $users_perms[$perm] == 1)) {
$hasVisible = true;
break;
}
}
// Если нет доступных пунктов — пропускаем группу
if (!$hasVisible) {
continue;
}
echo '
<div class="sidebar-group">
<div class="sidebar-title">' . $item['title'] . '<span class="side_sp-icon"><i class="fas fa-chevron-down"></i></span></div>
<div class="sidebar-content">
';
foreach ($item['items'] as $sub) {
$perm = $sub['perm'];
$allowed = !$perm || (isset($users_perms[$perm]) && $users_perms[$perm] == 1);
if (!$allowed) continue;
$active = ($currentPath === $sub['url']) ? 'active' : '';
echo '
<a class="s-group panel_link ' . $active . '" href="' . homeLink() . $sub['url'] . '">' . $sub['title'] . '</a>';
}
echo '</div></div>';
}
}
echo '</div></div></div>';
?>
<script>
document.addEventListener("DOMContentLoaded", () => {
// Отключаем анимацию на момент загрузки
document.body.classList.add('no-anim');
// 1. Авто-раскрытие групп, если внутри есть активная ссылка
document.querySelectorAll('.sidebar-group').forEach(group => {
const content = group.querySelector('.sidebar-content');
const activeLink = group.querySelector('.panel_link.active');
if (activeLink) {
group.classList.add('active');
activeLink.classList.add('link_select');
content.style.maxHeight = content.scrollHeight + "px";
}
});
// 2. Логика раскрытия/закрытия по клику
document.querySelectorAll('.sidebar-title').forEach(title => {
title.addEventListener('click', () => {
const group = title.parentElement;
const content = group.querySelector('.sidebar-content');
if (group.classList.contains('active')) {
group.classList.remove('active');
content.style.maxHeight = null;
} else {
group.classList.add('active');
content.style.maxHeight = content.scrollHeight + "px";
}
});
});
// Включаем анимацию обратно после загрузки
setTimeout(() => {
document.body.classList.remove('no-anim');
}, 50);
});
</script>