<!DOCTYPE html>
<html data-menu-color="light" data-sidebar="default">
<head>
<meta charset="utf-8" />
<title>{% block title %}Админ-панель{% endblock %} - PlayPapa Admin</title>
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="description" content="PlayPapa admin panel" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<link rel="shortcut icon" href="/images/favicon.ico" />
{% block css %}{% endblock %}
<link href="/css/app.min.css" rel="stylesheet" type="text/css" id="app-style" />
<link href="/css/icons.min.css" rel="stylesheet" type="text/css" />
<link href="/admin-candy.css" rel="stylesheet" type="text/css" />
<script src="/js/head.js"></script>
</head>
{% set admin_user = admin_user|default({'id': 0, 'login': 'Admin', 'img': '/assets/profile.svg'}) %}
<body data-menu-color="light" data-sidebar="default">
<div id="app-layout">
<div class="topbar-custom">
<div class="container-fluid">
<div class="d-flex justify-content-between">
<ul class="list-unstyled topnav-menu mb-0 d-flex align-items-center">
<li>
<button class="button-toggle-menu nav-link" type="button">
<i data-feather="menu" class="noti-icon"></i>
</button>
</li>
<li class="d-none d-lg-block">
<h5 class="mb-0">Привет, {{ admin_user.login }}</h5>
</li>
</ul>
<ul class="list-unstyled topnav-menu mb-0 d-flex align-items-center">
<li class="d-none d-sm-flex">
<button type="button" class="btn nav-link" id="light-dark-mode">
<i data-feather="moon" class="align-middle dark-mode"></i>
<i data-feather="sun" class="align-middle light-mode"></i>
</button>
</li>
<li class="dropdown notification-list topbar-dropdown">
<a class="nav-link dropdown-toggle nav-user me-0" data-bs-toggle="dropdown" href="#" role="button" aria-haspopup="false" aria-expanded="false">
<img src="{{ admin_user.img ?: '/assets/profile.svg' }}" alt="user-image" class="rounded-circle" />
<span class="pro-user-name ms-1">{{ admin_user.login }} <i class="mdi mdi-chevron-down"></i></span>
</a>
<div class="dropdown-menu dropdown-menu-end profile-dropdown">
<div class="dropdown-header noti-title">
<h6 class="text-overflow m-0">PlayPapa Admin</h6>
</div>
{% if admin_user.id %}
<a href="{{ path('admin_user_edit', {'id': admin_user.id}) }}" class="dropdown-item notify-item">
<i class="mdi mdi-account-circle-outline fs-16 align-middle"></i>
<span>Мой аккаунт</span>
</a>
{% endif %}
<a href="/" class="dropdown-item notify-item">
<i class="mdi mdi-location-exit fs-16 align-middle"></i>
<span>Вернуться на сайт</span>
</a>
</div>
</li>
</ul>
</div>
</div>
</div>
<div class="app-sidebar-menu">
<div class="h-100" data-simplebar>
<div id="sidebar-menu">
<div class="logo-box">
<a href="{{ path('admin_dashboard') }}" class="logo logo-light">
<span class="logo-sm"><img src="/assets/images/playpapa-admin-logo.svg" alt="" height="22" /></span>
<span class="logo-lg"><img src="/assets/images/playpapa-admin-logo.svg" alt="" height="24" /></span>
</a>
<a href="{{ path('admin_dashboard') }}" class="logo logo-dark">
<span class="logo-sm"><img src="/assets/images/playpapa-admin-logo.svg" alt="" height="22" /></span>
<span class="logo-lg"><img src="/assets/images/playpapa-admin-logo.svg" alt="" height="24" /></span>
</a>
</div>
<ul id="side-menu">
<li class="menu-title">Меню</li>
<li>
<a href="{{ path('admin_dashboard') }}" class="tp-link {{ current_section|default('dashboard') == 'dashboard' ? 'active' : '' }}">
<i data-feather="home"></i>
<span>Главная</span>
</a>
</li>
<li>
<a href="{{ path('admin_dashboard') }}#products" class="tp-link {{ current_section|default('') == 'products' ? 'active' : '' }}">
<i data-feather="package"></i>
<span>Товары</span>
</a>
</li>
<li>
<a href="{{ path('admin_references') }}" class="tp-link {{ current_section|default('') == 'references' ? 'active' : '' }}">
<i data-feather="database"></i>
<span>Справочники</span>
</a>
</li>
<li>
<a href="{{ path('admin_users') }}" class="tp-link {{ current_section|default('') == 'users' ? 'active' : '' }}">
<i data-feather="users"></i>
<span>Пользователи</span>
</a>
</li>
<li>
<a href="{{ path('admin_product_new') }}" class="tp-link">
<i data-feather="plus-square"></i>
<span>Добавить товар</span>
</a>
</li>
<li class="menu-title">Сайт</li>
<li>
<a href="{{ path('catalog') }}" target="_blank" rel="noreferrer" class="tp-link">
<i data-feather="external-link"></i>
<span>Открыть каталог</span>
</a>
</li>
</ul>
</div>
<div class="clearfix"></div>
</div>
</div>
<div class="content-page">
<div class="content">
<div class="container-fluid">
<div class="py-3 d-flex align-items-sm-center flex-sm-row flex-column">
<div class="flex-grow-1">
<h4 class="fs-18 fw-semibold m-0">{% block heading %}Админ-панель{% endblock %}</h4>
</div>
{% block page_actions %}{% endblock %}
</div>
{% for type, messages in app.flashes %}
{% for message in messages %}
<div class="alert alert-{{ type == 'danger' ? 'danger' : (type == 'warning' ? 'warning' : 'success') }} alert-dismissible fade show" role="alert">
{{ message }}
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
</div>
{% endfor %}
{% endfor %}
{% block content %}{% endblock %}
</div>
</div>
<footer class="footer">
<div class="container-fluid">
<div class="row">
<div class="col fs-13 text-muted text-center">
© <script>document.write(new Date().getFullYear())</script> - PlayPapa Admin
</div>
</div>
</div>
</footer>
</div>
</div>
<div class="admin-loading-overlay" data-admin-loading-overlay hidden>
<div class="admin-loading-card">
<div class="admin-loading-spinner" aria-hidden="true">
<span class="spinner-border text-primary" role="status"></span>
</div>
<div>
<strong data-admin-loading-title>Идёт обновление</strong>
<p data-admin-loading-text>Пожалуйста, не закрывайте страницу.</p>
<small>Прошло <span data-admin-loading-timer>0:00</span></small>
</div>
</div>
</div>
<script src="/libs/jquery/jquery.min.js"></script>
<script src="/libs/bootstrap/js/bootstrap.bundle.min.js"></script>
<script src="/libs/simplebar/simplebar.min.js"></script>
<script src="/libs/node-waves/waves.min.js"></script>
<script src="/libs/waypoints/lib/jquery.waypoints.min.js"></script>
<script src="/libs/jquery.counterup/jquery.counterup.min.js"></script>
<script src="/libs/feather-icons/feather.min.js"></script>
<script src="/js/app.js"></script>
<script>
document.querySelectorAll("[data-check-all]").forEach((checkbox) => {
checkbox.addEventListener("change", () => {
document.querySelectorAll(checkbox.dataset.checkAll).forEach((item) => {
item.checked = checkbox.checked;
});
});
});
(() => {
const overlay = document.querySelector("[data-admin-loading-overlay]");
const title = overlay?.querySelector("[data-admin-loading-title]");
const text = overlay?.querySelector("[data-admin-loading-text]");
const timer = overlay?.querySelector("[data-admin-loading-timer]");
let tick = null;
const formatElapsed = (seconds) => {
const minutes = Math.floor(seconds / 60);
const rest = seconds % 60;
return `${minutes}:${String(rest).padStart(2, "0")}`;
};
document.querySelectorAll("[data-admin-loading-form]").forEach((form) => {
form.addEventListener("submit", () => {
const submitter = form.querySelector('button[type="submit"]');
const loadingTitle = form.dataset.loadingTitle || "Идёт обновление";
const loadingText = form.dataset.loadingText || "Пожалуйста, не закрывайте страницу.";
document.querySelectorAll("[data-admin-loading-form] button").forEach((button) => {
button.disabled = true;
});
if (submitter) {
submitter.dataset.originalHtml = submitter.innerHTML;
submitter.innerHTML = '<span class="spinner-border spinner-border-sm me-1" role="status" aria-hidden="true"></span>Запущено';
}
if (!overlay || !title || !text || !timer) return;
title.textContent = loadingTitle;
text.textContent = loadingText;
timer.textContent = "0:00";
overlay.hidden = false;
document.body.classList.add("admin-is-loading");
let elapsed = 0;
if (tick) window.clearInterval(tick);
tick = window.setInterval(() => {
elapsed += 1;
timer.textContent = formatElapsed(elapsed);
}, 1000);
});
});
})();
</script>
{% block scripts %}{% endblock %}
</body>
</html>