Initial commit

This commit is contained in:
Ivan Petrov
2025-12-24 19:19:01 +03:00
commit a7097c6178
19493 changed files with 94306 additions and 0 deletions

View File

@@ -0,0 +1,10 @@
<style>
/*.admin-panel {*/
/* background-image: url(https://wp-s.ru/wallpapers/0/12/471657930780807/morskie-kamni-raznocvetnaya-galka.jpg);*/
/*}*/
</style>
<!--<div class="b-dashboard__top b-dashboard__block b-row">-->
<!-- <div class="b-dashboard__title">Ваш рабочий стол</div>-->
<!-- <div class="b-dashboard__button">Изменить обои</div>-->
<!--</div>-->

View File

@@ -0,0 +1,212 @@
<?php
$item_id = $_GET["item_id"];
$search = new Search(array(
"limit" => 1,
"terms" => array("item_id" => $item_id)
));
list($item) = $search->collect();
$parents = $item->get_parent_items();
if($item->parent_class) {
$search_parents = new Search(array(
"class" => $item->parent_class,
"parent_id" => 0
));
$all_parents_items = $search_parents->collect();
}
function check_parent($items, $item_parent, $item): bool
{
foreach ($items as $key => $value) {
if($value->item_id == $item_parent->item_id || ($value->item_id == $item_parent->item_id && $value->item_id == $item->parent_id)) return true;
}
return false;
}
$main_parent = $item->parent_id;
$parent_item_name = "Не задано";
if($main_parent) {
$parent_item = $b->get_item_by_id($main_parent);
$parent_item_name = $parent_item->get_field("item_name");
}
function filterXSS($content) {
// Удаляем все скрипты и события из тегов
$cleanContent = preg_replace_callback('/<(.*?)>/',
function ($matches) {
return preg_replace('/on\w+=".*?"/', '', $matches[0]);
},
$content
);
// Удаляем все javascript: ссылки
$cleanContent = preg_replace('/href=["\']?javascript:(.*?)["\']?/', '', $cleanContent);
// Удаляем все встроенные скрипты
$cleanContent = preg_replace('/<script(.*?)>(.*?)<\/script>/i', '', $cleanContent);
// Удаляем все встроенные стили
$cleanContent = preg_replace('/<style(.*?)>(.*?)<\/style>/i', '', $cleanContent);
// Удаляем все события из атрибутов
$cleanContent = preg_replace('/\s\w+=".*?"/', '', $cleanContent);
// Удаляем все комментарии
$cleanContent = preg_replace('/<!--(.*?)-->/', '', $cleanContent);
// Удаляем все iframe
$cleanContent = preg_replace('/<iframe(.*?)>(.*?)<\/iframe>/i', '', $cleanContent);
// Удаляем все объекты
$cleanContent = preg_replace('/<object(.*?)>(.*?)<\/object>/i', '', $cleanContent);
// Удаляем все embed
$cleanContent = preg_replace('/<embed(.*?)>(.*?)<\/embed>/i', '', $cleanContent);
// Удаляем все applet
$cleanContent = preg_replace('/<applet(.*?)>(.*?)<\/applet>/i', '', $cleanContent);
return $cleanContent;
}
?>
<div class="datatype-edit-wrapper">
<?php $b->alerts_view("admin_item"); ?>
<?php $b->alerts_view("file"); ?>
<form class="admin-data-form" method="post" enctype="multipart/form-data">
<?php $b->event_form("datatype_save");?>
<input type="hidden" name="item_id" value="<?= $item_id; ?>">
<div class="b_tabs" data-tabs-group="item_tabs">
<div class="b_tab" data-tabs-group="item_tabs">Основные</div>
<?php if($item->parent_class) { ?>
<div class="b_tab" data-tabs-group="item_tabs">Наследование</div>
<?php } ?>
</div>
<div class="admin-left-column b_tab_content" data-tabs-group="item_tabs">
<div class="admin-block mb-1">
<div class="input-group">
<div class="input-label">
<p class="input-label__inner">Заголовок</p>
</div>
<div class="input-edit">
<div>
<input type="text" name="item_name" value="<?= $b->get_view($item->get_item_name()); ?>" class="bive-item-name">
</div>
</div>
</div>
<div class="input-group">
<div class="input-label">
<p class="input-label__inner">Ярлык</p>
</div>
<div class="input-edit">
<div>
<input type="text" name="item_slug" value="<?= $b->get_view($item->get_item_slug()); ?>" class="bive-item-slug">
</div>
</div>
</div>
<?php if($item->visible_content) { ?>
<div class="input-label-horizontal">
<p class="input-label__inner">Текстовое наполнение</p>
</div>
<div class="bive-textarea mb-1">
<textarea class="bive-textarea__content" name="item_content" id="item_content">
<?= filterXSS($item->get_field("item_content")); ?>
</textarea>
</div>
<?php } ?>
</div>
<div class="admin-block mb-1">
<?php foreach ($item->props as $key => $value) { ?>
<div class="input-group">
<div class="input-label">
<p class="input-label__inner"><?= $value->title; ?></p>
<p class="input-label__background"><?= $key; ?></p>
</div>
<div class="input-edit">
<?php $b->field_render_edit($value->field, $key, $item->get_prop($key, true)); ?>
</div>
</div>
<?php } ?>
</div>
</div>
<?php if($item->parent_class) { ?>
<div class="admin-left-column b_tab_content" data-tabs-group="item_tabs">
<div class="admin-block mb-1">
<div class="item-parents">
<div class="item-parents__main">
<span class="item-parents__main-label">Основная категория:</span>
<span class="item-parents__main-title"><?= $parent_item_name; ?></span>
</div>
<?php if($all_parents_items) { ?>
<?php $b->template_load("bive-admin-panel/template/parents_list.php", array("all_parents_items" => $all_parents_items, "parents" => $parents, "item" => $item)); ?>
<?php } ?>
</div>
</div>
</div>
<?php } ?>
<div class="admin-floating-wrapper">
<div class="admin-floating-block">
<div class="admin-block admin-floating-row">
<div class="datatype-buttons">
<button class="btn btn-primary mr-1" type="submit">Сохранить</button>
<a class="btn btn-cancel mr-1" href="<?= "/admin/trashItem/" . $b->router_format_get_params(array(), true); ?>" onclick="return confirm('Вы уверены, что хотите удалить этот объект?')">Удалить</a>
</div>
<span class="admin-floating-status status-block">Без изменений</span>
</div>
</div>
</div>
</form>
</div>
<script>
var itemName = document.querySelector('.bive-item-name');
var itemSlug = document.querySelector('.bive-item-slug');
itemName.addEventListener('change', (event) => {
if(itemSlug.value) return;
itemSlug.value = translit(event.target.value).substring(0, 99);
});
function translit(word){
var converter = {
'а': 'a', 'б': 'b', 'в': 'v', 'г': 'g', 'д': 'd',
'е': 'e', 'ё': 'e', 'ж': 'zh', 'з': 'z', 'и': 'i',
'й': 'y', 'к': 'k', 'л': 'l', 'м': 'm', 'н': 'n',
'о': 'o', 'п': 'p', 'р': 'r', 'с': 's', 'т': 't',
'у': 'u', 'ф': 'f', 'х': 'h', 'ц': 'c', 'ч': 'ch',
'ш': 'sh', 'щ': 'sch', 'ь': '', 'ы': 'y', 'ъ': '',
'э': 'e', 'ю': 'yu', 'я': 'ya'
};
word = word.toLowerCase();
var answer = '';
for (var i = 0; i < word.length; ++i ) {
if (converter[word[i]] == undefined){
answer += word[i];
} else {
answer += converter[word[i]];
}
}
answer = answer.replace(/[^-0-9a-z]/g, '-');
answer = answer.replace(/[-]+/g, '-');
answer = answer.replace(/^\-|-$/g, '');
return answer;
}
</script>

View File

@@ -0,0 +1,125 @@
<?php
$datatype = $_GET["datatype"];
$item = new $datatype(0);
?>
<div class="datatype-create-wrapper">
<?php $b->alerts_view("admin_item"); ?>
<?php $b->alerts_view("file"); ?>
<form class="admin-data-form" method="post">
<?php $b->event_form("datatype_new");?>
<input type="hidden" name="datatype" value="<?= $datatype; ?>">
<div class="admin-left-column mb-1">
<div class="admin-block mb-1">
<div class="input-group">
<div class="input-label">
<p class="input-label__inner">Заголовок</p>
</div>
<div class="input-edit">
<div>
<input type="text" name="item_name" class="bive-item-name">
</div>
</div>
</div>
<div class="input-group">
<div class="input-label">
<p class="input-label__inner">Ярлык</p>
</div>
<div class="input-edit">
<div>
<input type="text" name="item_slug" value="" class="bive-item-slug">
</div>
</div>
</div>
<?php if($item->visible_content) { ?>
<div class="input-label-horizontal">
<p class="input-label__inner">Текстовое наполнение</p>
</div>
<div class="bive-textarea mb-1">
<textarea class="bive-textarea__content" id="item_content" name="item_content" ></textarea>
</div>
<?php } ?>
</div>
<div class="admin-block">
<?php foreach ($item->props as $key => $value) { ?>
<div class="input-group">
<div class="input-label">
<p class="input-label__inner"><?= $value->title; ?></p>
</div>
<div class="input-edit">
<?php $b->field_render_edit($value->field, $key, $value->default_value); ?>
</div>
</div>
<?php } ?>
</div>
</div>
<div class="admin-floating-wrapper">
<div class="admin-floating-block">
<div class="admin-block admin-floating-row">
<div class="datatype-buttons">
<button class="btn btn-primary mr-1" type="submit">Сохранить</button>
</div>
<span class="admin-floating-status status-block">Без изменений</span>
</div>
</div>
</div>
</form>
</div>
<script>
var itemName = document.querySelector('.bive-item-name');
var itemSlug = document.querySelector('.bive-item-slug');
itemName.addEventListener('change', (event) => {
if(itemSlug.value) return;
itemSlug.value = translit(event.target.value).substring(0, 99);
});
function translit(word){
var converter = {
'а': 'a', 'б': 'b', 'в': 'v', 'г': 'g', 'д': 'd',
'е': 'e', 'ё': 'e', 'ж': 'zh', 'з': 'z', 'и': 'i',
'й': 'y', 'к': 'k', 'л': 'l', 'м': 'm', 'н': 'n',
'о': 'o', 'п': 'p', 'р': 'r', 'с': 's', 'т': 't',
'у': 'u', 'ф': 'f', 'х': 'h', 'ц': 'c', 'ч': 'ch',
'ш': 'sh', 'щ': 'sch', 'ь': '', 'ы': 'y', 'ъ': '',
'э': 'e', 'ю': 'yu', 'я': 'ya'
};
word = word.toLowerCase();
var answer = '';
for (var i = 0; i < word.length; ++i ) {
if (converter[word[i]] == undefined){
answer += word[i];
} else {
answer += converter[word[i]];
}
}
answer = answer.replace(/[^-0-9a-z]/g, '-');
answer = answer.replace(/[-]+/g, '-');
answer = answer.replace(/^\-|-$/g, '');
return answer;
}
var form = document.querySelector('.admin-data-form');
form.addEventListener('submit', () => {
localStorage.setItem('pagePosition', window.pageYOffset);
});
document.addEventListener('DOMContentLoaded', () => {
var pagePosition = localStorage.getItem('pagePosition');
if (pagePosition !== null) {
window.scrollTo(0, pagePosition);
localStorage.removeItem('pagePosition');
}
});
</script>

View File

@@ -0,0 +1,119 @@
<?php
$datatype = $_GET["datatype"];
$class = new $datatype(0);
$items_count = 25;
$current_list = $_GET["list"] ?? 1;
$current_list_int = intval($current_list) - 1;
$offset = $current_list_int * $items_count;
$terms = array();
if(isset($_GET['s'])) {
$searchPhrase = $_GET['s'];
$terms["%item_name%"] = $searchPhrase;
}
$search = new Search(array(
"class" => $datatype,
"limit" => $items_count,
"offset" => $offset,
"terms" => $terms
));
$items = $search->collect();
$pages = $b->admin_pages_list;
$admin_page = $_GET["page"];
$title = $pages[$admin_page]["title"];
?>
<?php
$delta = intval($search->count / $items_count);
$pages_max = $delta > 0 ? $search->count % $items_count > 0 ? $delta + 1 : $delta : 1;
?>
<div class="page_wrapper">
<h1 class="page_name">
<?= $class->title; ?>
<?php $b->template_load("bive-admin-panel/template/menu/favorite_star.php"); ?>
<a class="btn btn-primary ml-1" href="<?= "/admin/" . $b->router_format_get_params(array("page" => "item_add_" . $datatype, "datatype" => $datatype)); ?>">Добавить</a>
</h1>
</div>
<p class="page_desc"><?= $class->description; ?></p>
<div class="admin-data-table__wrapper">
<div class="table-actions-row">
<div class="admin-pagination">
<a class="admin-pagination__item" href="<?= "/admin/" . $b->router_format_get_params(array("list" => 1), true); ?>">«</a>
<a class="admin-pagination__item" href="<?= "/admin/" . $b->router_format_get_params(array("list" => $current_list > 1 ? $current_list_int : 1), true); ?>"></a>
<div class="admin-pagination__edit">
<form class="admin-pagination__form"><?php $b->router_params_to_form($_GET); ?><input class="admin-pagination__item admin-pagination__input" name="list" value="<?= $current_list; ?>"></form>
<span>из <?= $pages_max; ?></span>
</div>
<a class="admin-pagination__item" href="<?= "/admin/" . $b->router_format_get_params(array("list" => $current_list >= $pages_max ? $pages_max : $current_list + 1), true); ?>"></a>
<a class="admin-pagination__item" href="<?= "/admin/" . $b->router_format_get_params(array("list" => $pages_max), true); ?>">»</a>
<span><?= $search->count; ?> элементов</span>
</div>
<div class="admin-pagination-search">
<form class="admin-pagination-search-form">
<?php $b->router_params_to_form($_GET); ?>
<input class="bive-input-search" type="text" placeholder="Поиск" name="s" value="<?= $b->get_view($_GET['s']); ?>">
</form>
</div>
</div>
<div class="admin-data-table">
<table>
<tr>
<th>Заголовок</th>
<?php foreach ($class->props as $key => $prop) { ?>
<?php if(!$prop->table_view) continue; ?>
<th><?= $b->get_view($prop->title); ?></th>
<?php } ?>
</tr>
<?php foreach ($items as $key => $item) { ?>
<tr class="item-line">
<td>
<a class="item-name" href="<?= "/admin/" . $b->router_format_get_params(array("page" => "item_" . $datatype, "item_id" => $item->item_id)); ?>"><?= $item->get_field("item_name", true); ?></a>
<div class="item-fast-edit">
<p class="item-fast-edit__id mr-1">#<?= $item->item_id; ?></p>
<a class="item-fast-edit__link mr-1" href="<?= "/admin/" . $b->router_format_get_params(array("page" => "item_" . $datatype, "item_id" => $item->item_id)); ?>">Редактировать</a>
<a class="item-fast-edit__link danger mr-1" href="<?= "/admin/trashItem/" . $b->router_format_get_params(array("page" => "item_" . $datatype, "item_id" => $item->item_id), true); ?>" onclick="return confirm('Вы уверены, что хотите удалить этот объект?')">Удалить</a>
</div>
</td>
<?php foreach ($class->props as $k => $prop) { ?>
<?php if(!$prop->table_view) continue; ?>
<?php $prop_value = $item->props_values[$k]; ?>
<td><?= $b->get_view($b->field_render_value($prop->field, $prop->field, $prop_value) ?? "Не задано"); ?></td>
<?php } ?>
</tr>
<?php } ?>
</table>
</div>
<?php
$delta = intval($search->count / $items_count);
$pages_max = $delta > 0 ? $search->count % $items_count > 0 ? $delta + 1: $delta: 1;
?>
<div class="admin-pagination mt-1">
<a class="admin-pagination__item" href="<?= "/admin/" . $b->router_format_get_params(array("list" => 1), true); ?>">«</a>
<a class="admin-pagination__item" href="<?= "/admin/" . $b->router_format_get_params(array("list" => $current_list > 1 ? $current_list_int : 1), true); ?>"></a>
<div class="admin-pagination__edit">
<form class="admin-pagination__form"><?php $b->router_params_to_form($_GET); ?><input class="admin-pagination__item admin-pagination__input" name="list" value="<?= $current_list; ?>"></form>
<span>из <?= $pages_max; ?></span>
</div>
<a class="admin-pagination__item" href="<?= "/admin/" . $b->router_format_get_params(array("list" => $current_list >= $pages_max ? $pages_max : $current_list + 1), true); ?>"></a>
<a class="admin-pagination__item" href="<?= "/admin/" . $b->router_format_get_params(array("list" => $pages_max), true); ?>">»</a>
<span><?= $search->count; ?> элементов</span>
</div>
</div>

View File

@@ -0,0 +1 @@
</body>

View File

@@ -0,0 +1,35 @@
<style>
@font-face {
font-family: 'Material Icons';
font-style: normal;
font-weight: 400;
src: local('Material Icons'),
local('MaterialIcons-Regular'),
url(/playarea/plugins/bive-admin-panel/assets/fonts/MaterialIcons-Regular.ttf) format('truetype');
}
.material-icons {
font-family: 'Material Icons', serif;
font-weight: normal;
font-style: normal;
font-size: 24px; /* Preferred icon size */
display: inline-block;
line-height: 1;
text-transform: none;
letter-spacing: normal;
word-wrap: normal;
white-space: nowrap;
direction: ltr;
/* Support for all WebKit browsers. */
-webkit-font-smoothing: antialiased;
/* Support for Safari and Chrome. */
text-rendering: optimizeLegibility;
/* Support for Firefox. */
-moz-osx-font-smoothing: grayscale;
/* Support for IE. */
font-feature-settings: 'liga';
}
</style>

View File

@@ -0,0 +1,14 @@
<?php defined( 'ROOT_DIR' ) || exit; ?>
<?php global $b; ?>
<!DOCTYPE html>
<head>
<?php $b->event_start("header_start"); ?>
<title><?= $b->title_get(); ?></title>
<?php $b->meta_render(); ?>
<?php $b->link_render(); ?>
<?php $b->script_render(); ?>
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
<?php $b->event_start("header_end"); ?>
</head>
<body class="admin-panel">

View File

@@ -0,0 +1,9 @@
<?php defined( 'ROOT_DIR' ) || exit; ?>
<?php
$user_id = $b->session_get("user_id");
if(!$user_id) $b->router_redirect("/admin/login/");
$b->ls_set_key("is_admin_panel", true);
?>
<?php $b->template_load("bive-admin-panel/template/panel.php"); ?>

View File

@@ -0,0 +1,46 @@
<?php
$admin_page = $b->ls_get_key("admin_page");
$pages = $b->admin_pages_list;
$current_page = $pages[$admin_page];
?>
<div class="page_wrapper">
<h1 class="page_name">
Ссылки
<?php $b->template_load("bive-admin-panel/template/menu/favorite_star.php"); ?>
</h1>
</div>
<form class="admin-data-form" method="post">
<?php $b->event_form("bive_edit_links");?>
<?php $b->alerts_view("b_link_update"); ?>
<div class="admin-left-column">
<div class="b-row">
<div class="b-col b-block-500">
<div class="admin-block mb-1">
<div class="input-separator">Мгновенное редактирование ссылок на сайте</div>
<div class="input-group">
<div class="input-label">
<p class="input-label__inner">Введите фрагмент ссылки который вы хотите заменить</p>
</div>
<div class="input-edit">
<input type="text" name="bive_fragment_replacement" placeholder="Например: example.com">
</div>
</div>
<div class="input-group">
<div class="input-label">
<p class="input-label__inner">Введите фрагмент ссылки на который вы хотите заменить</p>
</div>
<div class="input-edit">
<input type="text" name="bive_fragment_filling" placeholder="Например: example.ru">
</div>
</div>
<div class="input-group">
<button class="btn btn-primary">Изменить</button>
</div>
</div>
</div>
</div>
</div>
</form>

View File

@@ -0,0 +1,41 @@
<?php defined( 'ROOT_DIR' ) || exit; ?>
<?php
$user_id = $b->session_get("user_id");
if($user_id) $b->router_redirect("/admin/");
$b->template_load("bive-admin-panel/template/header.php");
?>
<style>
.admin-panel {
background-color: var(--root-main-color);
}
</style>
<div class="admin-login-wrapper">
<div class="vertical-center">
<div class="login-form">
<div class="login-form__title mb-1 mt-3">С возвращением!</div>
<div class="login-form__subtitle mb-3">Рады видеть вас снова!</div>
<?php $b->alerts_view("login"); ?>
<form method="post">
<?php $b->event_form("login");?>
<div class="input-group mb-1">
<label>Логин</label>
<input name="login" value="" placeholder="" required>
</div>
<div class="input-group mb-2">
<label>Пароль</label>
<input name="password" type="password" value="" placeholder="" required>
</div>
<div class="input-group">
<button class="btn btn-primary">Войти в систему</button>
</div>
</form>
</div>
</div>
</div>
<?php $b->template_load("bive-admin-panel/template/footer.php"); ?>

View File

@@ -0,0 +1,40 @@
<?php
$user_id = $b->session_get("user_id");
$search = new Search(array(
"class" => "Favorite",
"props" => array("user_id" => $user_id)
));
$favorites = $search->collect();
?>
<div class="favorite_wrapper">
<div class="favorite_block">
<span class="favorite__title">
Избранное
</span>
<?php if($favorites) { ?>
<div class="favorite_items">
<?php foreach ($favorites as $key => $value) { ?>
<a class="favorite_item" href="<?= $value->get_prop("link"); ?>">
<span class="favorite_item__left">
<span class="material-icons favorite__icon-inner">star</span><?= $value->get_item_name(); ?>
</span>
<span class="favorite_item__right">
<span class="material-icons favorite__icon-inner">keyboard_arrow_right</span>
</span>
</a>
<?php } ?>
</div>
<?php } else { ?>
<div class="hint_wrapper mt-2">
<div class="hint-image">
<img src="/playarea/plugins/bive-admin-panel/assets/icons/person-star.svg">
</div>
<div class="hint-text">Вы можете добавлять страницы в избранное и быстро получать к ним доступ из этого раздела.</div>
</div>
<?php } ?>
</div>
</div>

View File

@@ -0,0 +1,24 @@
<?php
$admin_page = $b->ls_get_key("admin_page");
$pages = $b->admin_pages_list;
$current_page = $pages[$admin_page];
$user_id = $b->session_get("user_id");
$full_url = $b->router_get_full_uri();
$search = new Search(array(
"class" => "Favorite",
"props" => array(
"user_id" => $user_id,
"link" => $full_url
)
));
$favorites = $search->collect();
?>
<span class="favorite_button <?= $favorites ? 'active' : ''; ?>" data-link-name="<?= $current_page["title"]; ?>">
<span class="material-icons favorite_button-inner">star</span>
</span>

View File

@@ -0,0 +1,56 @@
<?php
$pages = $b->admin_pages;
$admin_page = $b->ls_get_key("admin_page");
$search = $_GET["search"];
$active_submenu = false;
?>
<div class="admin-left-block">
<div class="admin-nav">
<?php foreach ($pages as $key => $value) { ?>
<?php if($value["hide"]) continue; ?>
<?php $class = "nav-item"; ?>
<?php if($b->admin_page_has_child($key, $admin_page)) { $class .= " active"; $active_submenu = $value; } ?>
<a class="<?= $class; ?>" href="<?= "/admin/" . $b->router_format_get_params($value["params"]) ?>" title="<?= $value["title"]; ?>">
<span class="nav-item__icon">
<span class="material-icons nav-item__icon-inner"><?= $value["icon"]; ?></span>
</span>
</a>
<?php } ?>
</div>
<div class="admin-subnav">
<?php $b->admin_page_render($active_submenu["slug"]); ?>
</div>
</div>
<div class="admin-sidebar-show">
<svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-layout-sidebar-left-expand" width="20" height="20" viewBox="0 0 24 24" stroke-width="1.5" stroke="#ffffff" fill="none" stroke-linecap="round" stroke-linejoin="round">
<path stroke="none" d="M0 0h24v24H0z" fill="none"/>
<path d="M4 4m0 2a2 2 0 0 1 2 -2h12a2 2 0 0 1 2 2v12a2 2 0 0 1 -2 2h-12a2 2 0 0 1 -2 -2z" />
<path d="M9 4v16" />
<path d="M14 10l2 2l-2 2" />
</svg>
</div>
<div class="admin-sidebar-show__background"></div>
<script>
var showSidebar = document.querySelector('.admin-sidebar-show');
var sideBar = document.querySelector('.admin-left-block');
var showSidebarBackground = document.querySelector('.admin-sidebar-show__background');
showSidebar.addEventListener('click', (event) => {
sideBar.classList.add("show");
showSidebar.classList.add("hide");
showSidebarBackground.classList.add("show");
});
showSidebarBackground.addEventListener('click', (event) => {
sideBar.classList.remove("show");
showSidebar.classList.remove("hide");
showSidebarBackground.classList.remove("show");
});
</script>

View File

@@ -0,0 +1,42 @@
<?php
$active_submenu = $variables["active_submenu"];
$pages = $active_submenu["pages"];
$open_child = $variables["open_child"];
$admin_page = $variables["admin_page"];
$search = $variables["search"];
?>
<?php if(count($pages) && $open_child) { ?>
<div class="nav-item__sub">
<?php foreach ($pages as $key => $subpage) { ?>
<?php if($subpage["hide"]) continue; ?>
<?php $show = $b->admin_page_has_search($key, $search) && $search; ?>
<?php if(!$show && $search) continue; ?>
<?php $active = $b->admin_page_has_child($key, $admin_page) || $show; ?>
<?php $class = "nav-item"; if($active) { $class .= " active"; } ?>
<a href="<?= "/admin/" . $b->router_format_get_params($subpage["params"]); ?>" class="<?= $class; ?>">
<span class="nav-item__name">
<span class="material-icons subnav-item__icon"><?= $subpage["icon"] !== false ? $subpage["icon"] : "tag"; ?></span>
<?= $subpage["title"]; ?>
</span>
<?php if(count($subpage["pages"])) { ?>
<span class="material-icons subnav-item__open-icon"><?= $active ? "keyboard_arrow_down" : "keyboard_arrow_right"; ?></span>
<?php } ?>
</a>
<?php if($active) $b->template_load("bive-admin-panel/template/menu/nav_subpage.php", array("active_submenu" => $subpage, "open_child"=> $open_child, "admin_page" => $admin_page)); ?>
<?php } ?>
</div>
<?php } else if ($active_submenu["level"] == 0) { ?>
<div class="nav-item__notfound">
<div class="nav-item__notfound-image">
<img src="/playarea/plugins/bive-admin-panel/assets/icons/danger.svg">
</div>
<div class="nav-item__notfound-text">
Раздел находится в разработке.
</div>
</div>
<?php } ?>

View File

@@ -0,0 +1,14 @@
<?php $pages = $b->admin_pages; ?>
<?php $admin_page = $b->ls_get_key("admin_page"); ?>
<?php $active_submenu = false; ?>
<?php foreach ($pages as $key => $value) {
if($b->admin_page_has_child($key, $admin_page)) $active_submenu = $value;
}
?>
<!--<div class="b-global-search" data-page="--><?php //= $b->get_view($admin_page); ?><!--">-->
<!-- <input type="text" placeholder="Начните вводить запрос...">-->
<!-- <span class="material-icons b-global-search__icon">search</span>-->
<!--</div>-->
<?php if($active_submenu !== false) { ?>
<?php $b->template_load("bive-admin-panel/template/menu/nav_subpage.php", array("active_submenu" => $active_submenu, "open_child"=> true, "admin_page" => $admin_page, "search" => "")); ?>
<?php } ?>

View File

@@ -0,0 +1,9 @@
<?php $b->template_load("bive-admin-panel/template/header.php"); ?>
<?php $b->template_load("bive-admin-panel/template/menu/nav.php"); ?>
<?php $admin_page = $b->ls_get_key("admin_page"); ?>
<div class="admin-main-block">
<?php $b->admin_page_render($admin_page, true); ?>
</div>
<?php $b->template_load("bive-admin-panel/template/footer.php"); ?>

View File

@@ -0,0 +1,79 @@
<?php
$all_parents_items = $variables["all_parents_items"];
$parents = $variables["parents"];
$item = $variables["item"];
function render_parent_list($all_parents_items, $parents, $item)
{
$ul_dom = new DOM("ul");
$ul_dom->setAttribute("class", "item-parents__list");
foreach ($all_parents_items as $key => $parent_item) {
$li_dom = render_parent_item($parent_item, $parents, $item);
$ul_dom->append($li_dom);
}
$ul_dom->view();
}
function render_parent_item($parent_item, $parents, $item){
$li_dom = new DOM("li");
$li_dom->setAttribute("class", "item-parent");
$line_dom = new DOM("div");
$line_dom->setAttribute("class", "item-parent__line");
$label_text_dom = new DOM("label");
$label_text_dom->setAttribute("class", "item-parent__checkbox");
$input_text_dom = new DOM("input", false);
$input_text_dom->setAttribute("value", $parent_item->item_id);
$input_text_dom->setAttribute("type", "checkbox");
$input_text_dom->setAttribute("name", "item_parents[]");
$input_text_dom->setAttribute("class", "item-parent__main-checkbox");
if(check_parent($parents, $parent_item, $item))
$input_text_dom->setAttribute("checked", "checked");
$label_text_dom->append($input_text_dom);
$label_text_dom->append("<span>" . $parent_item->get_field("item_name") . "</span>");
$line_dom->append($label_text_dom);
$label_main_dom = new DOM("label");
$label_main_dom->setAttribute("class", "item-parent__main");
$input_main_dom = new DOM("input", false);
$input_main_dom->setAttribute("value", $parent_item->item_id);
$input_main_dom->setAttribute("type", "radio");
$input_main_dom->setAttribute("name", "item_parent");
$input_main_dom->setAttribute("class", "item-parent__main-input");
if($parent_item->item_id == $item->parent_id)
$input_main_dom->setAttribute("checked", "checked");
$p_main_dom = new DOM("p");
$p_main_dom->setAttribute("class", "item-parent__main-label");
$p_main_dom->append("Основная");
$label_main_dom->append($input_main_dom);
$label_main_dom->append($p_main_dom);
$line_dom->append($label_main_dom);
$li_dom->append($line_dom);
$childs_main_dom = new DOM("ul");
$childs_main_dom->setAttribute("class", "item-parent__childs");
$childs = $parent_item->get_main_child_items($parent_item->get_class_name());
foreach ($childs as $key => $child) {
$new_li = render_parent_item($child, $parents, $item);
$childs_main_dom->append($new_li);
}
$li_dom->append($childs_main_dom);
return $li_dom;
}
render_parent_list($all_parents_items, $parents, $item);

View File

@@ -0,0 +1,91 @@
<?php
$admin_page = $b->ls_get_key("admin_page");
$pages = $b->admin_pages_list;
$current_page = $pages[$admin_page];
?>
<div class="datatype-edit-wrapper">
<div class="page_wrapper">
<h1 class="page_name">
<?= $current_page["title"]; ?>
<?php $b->template_load("bive-admin-panel/template/menu/favorite_star.php"); ?>
</h1>
</div>
<?php $b->alerts_view("admin_item"); ?>
<?php $b->alerts_view("file"); ?>
<form class="admin-data-form" method="post" enctype="multipart/form-data">
<?php $b->event_form("settings_save"); ?>
<?php $b->router_params_to_form($_GET); ?>
<div class="admin-left-column">
<div class="admin-block mb-1">
<?php foreach ($variables["settings_list"] as $key => $value) { ?>
<?php if($b->setting_get_field($value) == "separator") { ?>
<div class="input-separator">
<?= $b->setting_get_title($value); ?>
</div>
<?php } else { ?>
<div class="input-group">
<div class="input-label">
<p class="input-label__inner"><?= $b->setting_get_title($value); ?></p>
<p class="input-label__background"><?= $value; ?></p>
</div>
<div class="input-edit">
<?php $b->field_render_edit($b->setting_get_field($value), $value, $b->setting_get($value)); ?>
</div>
</div>
<?php } ?>
<?php } ?>
</div>
</div>
<div class="admin-floating-wrapper">
<div class="admin-floating-block">
<div class="admin-block admin-floating-row">
<div class="datatype-buttons">
<button class="btn btn-primary mr-1" type="submit">Сохранить</button>
</div>
<span class="admin-floating-status status-block">Без изменений</span>
</div>
</div>
</div>
</form>
</div>
<script>
const form = document.querySelector('.admin-data-form');
form.addEventListener('submit', () => {
localStorage.setItem('pagePosition', window.pageYOffset);
});
document.addEventListener('DOMContentLoaded', () => {
const pagePosition = localStorage.getItem('pagePosition');
if (pagePosition !== null) {
window.scrollTo(0, pagePosition);
localStorage.removeItem('pagePosition');
}
});
</script>
<script type="module">
// tinymce.init({
// selector: '.bive-textarea__content',
// plugins: [
// 'a11ychecker','advlist','advcode','advtable','autolink','checklist','export',
// 'lists','link','image','charmap','preview','anchor','searchreplace','visualblocks',
// 'powerpaste','fullscreen','formatpainter','insertdatetime','media','table','help','wordcount', 'autoresize'
// ],
// toolbar: 'undo redo | formatpainter casechange blocks | bold italic backcolor | ' +
// 'alignleft aligncenter alignright alignjustify | ' +
// 'bullist numlist checklist outdent indent | removeformat | a11ycheck code table help',
// init_instance_callback : function(editor) {
// var freeTiny = document.querySelectorAll('.tox .tox-notification--in');
// freeTiny.forEach((item) => item.style.display = 'none')
// },
// autoresize_bottom_margin: 0,
// autoresize_max_height: '100%'
// });
</script>

View File

@@ -0,0 +1,37 @@
<?php
$user_id = $b->session_get("user_id");
if(!$user_id) return;
$is_admin_panel = $b->ls_get_key("is_admin_panel");
?>
<div class="bive-visor-wrapper">
<div class="bive-visor-inner">
<div class="bive-visor-left">
<div class="bive-visor-brand">BIVE</div>
<div class="bive-visor-switch">
<a href="/" class="<?= $is_admin_panel ? "" : "active"; ?>">Сайт</a>
<a href="/admin" class="<?= $is_admin_panel ? "active" : ""; ?>">Админ-панель</a>
</div>
</div>
<div class="bive-visor-right">
<div class="bive-visor-account">
<?php
$user_id = $b->session_get("user_id");
$user = $b->get_item_by_id($user_id);
$user_name = $user->get_prop("username");
?>
<div class="bive-visor-account__avatar">
<img src="https://i.ibb.co/3z8R7Rk/photo-2023-04-10-11-55-45.jpg">
</div>
<div class="bive-visor-account__nick">
<?= $user_name; ?>
</div>
</div>
</div>
</div>
</div>

View File

@@ -0,0 +1,3 @@
<script src="/playarea/plugins/bive-admin-panel/assets/scripts/jquery-3.7.0.min.js"></script>
<script src="/playarea/plugins/bive-admin-panel/assets/scripts/jquery-ui.js"></script>
<script src="/playarea/plugins/bive-admin-panel/assets/scripts/wingman.js" defer></script>