Размер файла: 13.25Kb
<?php
App::view($config['themes'].'/index');
$act = check(Request::input('act', 'index'));
$file = check(Request::input('file'));
$path = check(Request::input('path'));
if (
!file_exists(APP.'/views/'.$path) ||
!is_dir(APP.'/views/'.$path) ||
str_contains($path, '.') ||
starts_with($path, '/') ||
!ends_with($path, '/')
) {
$path = '';
}
if (is_admin([101]) && $log == $config['nickname']) {
show_title('Редактирование страниц');
switch ($act):
############################################################################################
## Главная страница ##
############################################################################################
case 'index':
$files = preg_grep('/^([^.])/', scandir(APP.'/views/'.$path.$file));
usort($files, function($a, $b) use($path) {
if (is_file(APP.'/views/'.$path.$a) && is_file(APP.'/views/'.$path.$b)) {
return 0;
}
return (is_dir(APP.'/views/'.$path.$a)) ? -1 : 1;
});
$total = count($files);
show_title($path ? $path : 'Редактирование страниц');
if ($total > 0) {
echo '<ul class="list-group">';
foreach ($files as $file) {
if (is_dir(APP.'/views/'.$path.$file)) {
echo '<li class="list-group-item">';
echo '<div class="pull-right">';
echo '<a href="/admin/files?act=del&path='.$path.'&name='.$file.'&type=dir&token='.$_SESSION['token'].'" onclick="return confirm(\'Вы действительно хотите удалить эту директорию\')"><i class="fa fa-remove"></i></a></div>';
echo '<i class="fa fa-folder-o"></i> <b><a href="/admin/files?path='.$path.$file.'/">'.$file.'</a></b><br />';
echo 'Объектов: '.count(array_diff(scandir(APP.'/views/'.$path.$file), ['.', '..'])).'</li>';
} else {
$size = formatsize(filesize(APP.'/views/'.$path.$file));
$strok = count(file(APP.'/views/'.$path.$file));
echo '<li class="list-group-item"><div class="pull-right">';
echo '<a href="/admin/files?act=del&path='.$path.'&name='.basename($file, '.blade.php').'&token='.$_SESSION['token'].'" onclick="return confirm(\'Вы действительно хотите удалить этот файл\')"><i class="fa fa-remove"></i></a></div>';
echo '<i class="fa fa-file-o"></i> ';
echo '<b><a href="/admin/files?act=edit&path='.$path.'&file='.basename($file, '.blade.php').'">'.$file.'</a></b> (' . $size . ')<br />';
echo 'Строк: ' . $strok . ' / ';
echo 'Изменен: ' . date_fixed(filemtime(APP.'/views/'.$path.$file)) . '</li>';
}
}
echo '</ul>';
} else {
show_error('Файлов нет!');
}
if ($path) {
echo '<i class="fa fa-arrow-circle-left"></i> <a href="/admin/files?path='.ltrim(dirname($path), '.').'/">Вернуться</a><br />';
}
echo'<i class="fa fa-file-o"></i> <a href="/admin/files?act=new&path='.$path.'">Создать</a><br />';
break;
############################################################################################
## Подготовка к редактированию ##
############################################################################################
case 'edit':
if ((preg_match('#^([a-z0-9_\-/]+|)$#', $path)) && preg_match('#^[a-z0-9_\-/]+$#', $file)) {
if (file_exists(APP.'/views/'.$path.$file.'.blade.php')) {
if (is_writeable(APP.'/views/'.$path.$file.'.blade.php')) {
if (Request::isMethod('post')) {
$token = check(Request::input('token'));
$msg = Request::input('msg');
if ($token == $_SESSION['token']) {
file_put_contents(APP.'/views/'.$path.$file.'.blade.php', $msg);
notice('Файл успешно сохранен!');
redirect ("/admin/files?act=edit&path=$path&file=$file");
} else {
show_error('Ошибка! Неверный идентификатор сессии, повторите действие!');
}
}
$mainfile = file_get_contents(APP.'/views/'.$path.$file.'.blade.php');
echo '<div class="form" id="form">';
echo '<b>Редактирование файла '.$file.'</b><br />';
echo '<form method="post">';
echo '<input type="hidden" name="token" value="'.$_SESSION['token'].'">';
echo '<textarea id="markItUpHtml" cols="90" rows="30" name="msg">'.check($mainfile).'</textarea><br />';
echo '<input type="submit" value="Редактировать" /></form></div><br />';
echo '<p class="help-block">Нажмите Ctrl+Enter для перевода строки, Shift+Enter для вставки линии</p>';
} else {
show_error('Ошибка! Файл недоступен для записи!');
}
} else {
show_error('Ошибка! Данного файла не существует!');
}
} else {
show_error('Ошибка! Недопустимое название страницы!');
}
echo '<i class="fa fa-arrow-circle-left"></i> <a href="/admin/files?path='.$path.'">Вернуться</a><br />';
break;
############################################################################################
## Подготовка к созданию файла ##
############################################################################################
case 'new':
echo '<b>Создание нового файла</b><br /><br />';
if (is_writeable(APP.'/views/'.$path)) {
if (Request::isMethod('post')) {
$token = check(Request::input('token'));
$name = check(Request::input('name'));
$type = check(Request::input('type'));
if ($token == $_SESSION['token']) {
if (preg_match('|^[a-z0-9_\-]+$|', $name)) {
if ($type == 'file') {
if (!file_exists(APP .'/views/'.$path.$name.'.blade.php')) {
file_put_contents(APP.'/views/'.$path.$name.'.blade.php', '');
chmod(APP.'/views/'.$path.$name.'.blade.php', 0666);
notice('Новый файл успешно создан!');
redirect('/admin/files?act=edit&file='.$name.'&path='.$path);
} else {
show_error('Ошибка! Файл с данным названием уже существует!');
}
} else {
if (!file_exists(APP .'/views/'.$path.$name)) {
$old = umask(0);
mkdir(APP .'/views/'.$path.$name, 0777, true);
umask($old);
notice('Новая директория успешно создана!');
redirect('/admin/files?path='.$path.$name.'/');
} else {
show_error('Ошибка! Категория с данным названием уже существует!');
}
}
} else {
show_error('Ошибка! Недопустимое название файла или директории!');
}
} else {
show_error('Ошибка! Неверный идентификатор сессии, повторите действие!');
}
}
echo '<div class="form">';
echo '<form action="/admin/files?act=new&path='.$path.'" method="post">';
echo '<input type="hidden" name="token" value="'.$_SESSION['token'].'" />';
echo '<input type="hidden" name="type" value="dir" />';
echo 'Название директории:<br />';
echo '<input type="text" name="name" maxlength="30" /><br />';
echo '<input value="Создать директорию" type="submit" /></form></div><br />';
echo '<div class="form">';
echo '<form action="/admin/files?act=new&path='.$path.'" method="post">';
echo '<input type="hidden" name="token" value="'.$_SESSION['token'].'" />';
echo '<input type="hidden" name="type" value="file" />';
echo 'Название файла (без расширения):<br />';
echo '<input type="text" name="name" maxlength="30" /><br />';
echo '<input value="Создать файл" type="submit" /></form></div>';
echo '<br />Разрешены латинские символы и цифры, а также знаки дефис и нижнее подчеркивание<br /><br />';
} else {
show_error('Директория '.$path.' недоступна для записи!');
}
echo '<i class="fa fa-arrow-circle-left"></i> <a href="/admin/files?path='.$path.'">Вернуться</a><br />';
break;
############################################################################################
## Удаление файла ##
############################################################################################
case 'del':
$token = check(Request::input('token'));
$name = check(Request::input('name'));
$type = check(Request::input('type'));
if ($token == $_SESSION['token']) {
if (is_writeable(APP.'/views/'.$path)) {
if (preg_match('|^[a-z0-9_\-]+$|', $name)) {
if ($type == 'dir') {
if (file_exists(APP .'/views/'.$path.$name)) {
removeDir(APP . '/views/' . $path . $name);
notice('Директория успешно удалена!');
redirect('/admin/files?path=' . $path);
} else {
show_error('Ошибка! Данного директории не существует!');
}
} else {
if (file_exists(APP .'/views/'.$path.$name.'.blade.php')) {
if (unlink(APP .'/views/'.$path.$name.'.blade.php')) {
notice('Файл успешно удален!');
redirect ('/admin/files?path='.$path);
} else {
show_error('Ошибка! Не удалось удалить файл!');
}
} else {
show_error('Ошибка! Данного файла не существует!');
}
}
} else {
show_error('Ошибка! Недопустимое название страницы!');
}
} else {
show_error('Директория '.$path.' недоступна для записи!');
}
} else {
show_error('Ошибка! Неверный идентификатор сессии, повторите действие!');
}
echo '<i class="fa fa-arrow-circle-left"></i> <a href="/admin/files?path='.$path.'">Вернуться</a><br />';
break;
endswitch;
echo '<i class="fa fa-wrench"></i> <a href="/admin">В админку</a><br />';
} else {
redirect('/');
}
App::view($config['themes'].'/foot');