вот делаю я редактор аваторов для Johncms 9.7 а именно создание папок, удаление папок и проблема у меня возникла в том что когда создаю папку то ва неё перейти не могу, а в существующую папку перейти могу
<?php
/**
* This file is part of JohnCMS Content Management System.
*/
declare(strict_types=1);
defined('_IN_JOHNCMS') || die('Error: restricted access');
/**
* @var Johncms\System\Legacy\Tools $tools
* @var Johncms\System\Users\User $user
* @var Johncms\Api\ViewInterface $view
*/
$title = __('Avatars');
$nav_chain->add($title, '?act=avatars');
$data = [];
// Проверка прав: используем метод getUserData() или прямое обращение
// Если у тебя в базе rights = 9, то это условие точно сработает
$userRights = $user->isValid() ? (int)$user->rights : 0;
$isAdmin = ($userRights >= 7);
// --- ОТЛАДКА (Удали эту строку, когда увидишь кнопки) ---
// echo '<div style="background:#eee; padding:5px; font-size:10px;">Твой ID: '.$user->id.' | Права: '.$userRights.' | Админ: '.($isAdmin ? 'ДА' : 'НЕТ').'</div>';
// --- БЛОК АДМИНИСТРИРОВАНИЯ ---
if ($isAdmin) {
// Создание папки
if (isset($_POST['add_cat'])) {
$folder = preg_replace("/[^a-z0-9\-_]/i", "", $_POST['folder_name']);
$name = htmlspecialchars(trim($_POST['display_name']));
if (!empty($folder)) {
$target = ASSETS_PATH . 'avatars/' . $folder;
if (!is_dir($target)) {
mkdir($target, 0777, true);
file_put_contents($target . '/name.txt', $name);
}
}
}
// Загрузка PNG
if (isset($_POST['up_avatar']) && $id) {
$target_dir = ASSETS_PATH . 'avatars/' . $id . '/';
if (is_dir($target_dir) && isset($_FILES['file'])) {
$ext = strtolower(pathinfo($_FILES['file']['name'], PATHINFO_EXTENSION));
if ($ext === 'png') {
$files = glob($target_dir . "*.png");
$max = 0;
foreach ($files as $f) {
$num = (int)basename($f, '.png');
if ($num > $max) $max = $num;
}
move_uploaded_file($_FILES['file']['tmp_name'], $target_dir . ($max + 1) . '.png');
}
}
}
// Удаление папки
if (isset($_GET['del_cat']) && $id) {
$del_path = ASSETS_PATH . 'avatars/' . $id;
if (is_dir($del_path)) {
array_map('unlink', glob("$del_path/*.*"));
rmdir($del_path);
header('Location: ?act=avatars');
exit;
}
}
}
// --- ВИЗУАЛЬНАЯ ЧАСТЬ ---
if ($id && is_dir(ASSETS_PATH . 'avatars/' . $id)) {
// Просмотр категории или установка аватара
$avatar = isset($_GET['avatar']) ? (int)$_GET['avatar'] : false;
if ($user->isValid() && $avatar && is_file(ASSETS_PATH . 'avatars/' . $id . '/' . $avatar . '.png')) {
// Установка (обработка POST)
if (isset($_POST['submit'])) {
if (@copy(ASSETS_PATH . 'avatars/' . $id . '/' . $avatar . '.png', UPLOAD_PATH . 'users/avatar/' . $user->id . '.png')) {
echo $view->render('system::pages/result', [
'title' => $title, 'type' => 'alert-success', 'message' => __('Avatar applied'),
'back_url' => '../profile/?act=edit', 'back_url_name' => __('Continue')
]);
}
} else {
// Форма подтверждения
echo $view->render('help::confirm', [
'title' => __('Set Avatar'), 'page_title' => __('Set Avatar'),
'data' => [
'form_action' => '?act=avatars&id='.$id.'&avatar='.$avatar,
'message' => __('Set this image?'),
'img' => '../assets/avatars/'.$id.'/'.$avatar.'.png',
'back_url' => '?act=avatars&id='.$id,
'submit_btn_name' => __('Save')
]
]);
}
} else {
// Список аватаров в папке
$name_f = ASSETS_PATH . 'avatars/' . $id . '/name.txt';
$cat_name = is_file($name_f) ? file_get_contents($name_f) : $id;
$nav_chain->add($cat_name);
if ($isAdmin) {
echo '<div class="alert alert-info m-2">
<form action="?act=avatars&id='.$id.'" method="post" enctype="multipart/form-data">
<h6>Загрузить в: '.$cat_name.'</h6>
<input type="file" name="file" accept="image/png" required>
<button type="submit" name="up_avatar" class="btn btn-sm btn-success">OK</button>
<a href="?act=avatars&id='.$id.'&del_cat=1" class="btn btn-sm btn-danger float-right" onclick="return confirm(\'Удалить папку?\')">Удалить категорию</a>
</form>
</div>';
}
$per_page = 48;
$files = glob(ASSETS_PATH . 'avatars/' . $id . '/*.png');
$total = count($files);
$items = [];
for ($i = $start; $i < ($start + $per_page) && $i < $total; $i++) {
$items[] = [
'picture' => '../assets/avatars/' . $id . '/' . basename($files[$i]),
'set_url' => $user->isValid() ? '?act=avatars&id='.$id.'&avatar='.basename($files[$i], '.png') : ''
];
}
echo $view->render('help::avatar_list', [
'title' => $cat_name, 'page_title' => $cat_name,
'data' => [
'items' => $items, 'total' => $total,
'pagination' => $tools->displayPagination('?act=avatars&id='.$id.'&', $start, $total, $per_page),
'back_url' => '?act=avatars'
]
]);
}
} else {
// Главная: список всех категорий
if ($isAdmin) {
echo '<div class="card m-2 p-2 bg-light">
<form action="?act=avatars" method="post">
<div class="form-row">
<div class="col"><input type="text" name="folder_name" placeholder="Папка (eng)" class="form-control form-control-sm" required></div>
<div class="col"><input type="text" name="display_name" placeholder="Название (RU)" class="form-control form-control-sm" required></div>
<div class="col-auto"><button type="submit" name="add_cat" class="btn btn-sm btn-primary">Создать</button></div>
</div>
</form>
</div>';
}
$dirs = glob(ASSETS_PATH . 'avatars/*', GLOB_ONLYDIR);
$items = [];
foreach ($dirs as $d) {
$fid = basename($d);
$nf = $d . '/name.txt';
$items[] = [
'url' => '?act=avatars&id=' . $fid,
'name' => is_file($nf) ? file_get_contents($nf) : $fid,
'count' => count(glob($d . '/*.png'))
];
}
echo $view->render('help::avatars', [
'title' => $title, 'page_title' => $title,
'data' => ['items' => $items, 'back_url' => '/']
]);
}