<?php
# Morgan
require 'sys/inc/core.php';
// удаляем обьект шаблонизатора дабы память не тратить на ненужный хлам
unset($template);
restore_error_handler();
if(USER_LEVEL < USER_ADMIN)
{
$db -> sql("INSERT INTO `users_punish` SET `user_id` = '".USER_ID."', `punished_id` = '1', `date` = '".TIME."', `to_date` = '".(TIME + 43200)."', `comment` = 'Вам нечего делать в админ-панели', 'ip' = '0', 'ua' = 'Auto'");
err('Нельзя тебе сюда!', PATH.'inex.php');
// вдруг что с функциеё err случится
exit;
}
ob_start();
echo '<?xml version="1.0" encoding="utf-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru"><head> <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=utf-8" /> <link rel="stylesheet" href="'.PATH.'style/style.css" type="text/css" /> <title>Админ-панель : управление шаблонами</title> <!-- Created by Morgan --></head><body>';
switch(MODE)
{
default:
// главная страница
{
echo '<div class="head">Список файлов</div>';
$tpl_files = glob(TEMPLATES_DIR.'/*.tpl');
$count_files = count($tpl_files);
if($count_files > 0)
{
check_page($count_files, PATH.'admin_tpl.php?page={$page}', ONPAGE_TOPICS);
$end = PAGE * ONPAGE_TOPICS;
$start = $end - ONPAGE_TOPICS;
if($end > $count_files)$end = $count_files;
for($i = $start;$i < $end;$i ++)
{
$tpl_file = basename($tpl_files[$i]);
echo '<div class="unit"><i>#'.($i + 1).'.</i> <a href="'.PATH.'admin_tpl.php?mode=file&file='.rawurlencode($tpl_file).'"><b>'.$tpl_file.'</b></a> / '.xsize(filesize($tpl_files[$i])).'<br />';
echo xdate(filemtime($tpl_files[$i])).'<br />';
if(is_writable($tpl_files[$i]))echo '<a href="'.PATH.'admin_tpl.php?mode=file&file='.rawurlencode($tpl_file).'&act=del">удалить файл</a>';
else echo '<font color="red">запись на файл запрещена</font>';
echo '</div>';
}
pagebar($str, PAGE, PATH.'admin_tpl.php?page={$page}', true);
}
else
{
echo 'Файлов нет<br />';
}
echo '» <a href="'.PATH.'admin_tpl.php?mode=new">Создать новый файл</a><br />';
}
break;
############################################################################
case 'new';
// создание файла
{
echo '<div class="head">Создание файла</div>';
if(is_writable(TEMPLATES_DIR))
{
if(isset($_GET['create']) && !empty($_POST['filename']) && postval('create'))
{
$filename = trim($_POST['filename']);
if(preg_match('~^[A-Za-z0-9-_.]+$~', $filename))
{
if(!file_exists(TEMPLATES_DIR.$filename.'.tpl'))
{
if(file_write(TEMPLATES_DIR.$filename.'.tpl', 'w', ''))
{
echo '<font color="green">Файл '.$filename.'.tpl создан <a href="'.PATH.'admin_tpl.php?mode=file&file='.rawurlencode($filename.'.tpl').'">>></a></font>';
if(!chmod(TEMPLATES_DIR.$filename.'.tpl', 0777))
{
echo '<font color="red">Не могу установить права доступа</font><br />';
}
}
else
{
echo '<font color="red">Не могу записать файл '.$filename.'.tpl</font><br />';
}
}
else
{
echo '<font color="red">Файл '.$filename.'.tpl уже существует</font><br />';
}
}
else
{
echo '<font color="red">Неверное имя файла</font><br />';
}
}
echo '<form action="'.PATH.'admin_tpl.php?mode=new&create&'.RAND.'" method="post" class="unit"><input type="hidden" name="create" value="1"/>';
echo 'Имя файла (без .tpl, [A-z0-9_-.]) : <br />';
echo '<input name="filename" type="text"/><br />';
echo '<input type="submit" value="Создать"/>';
echo '</form>';
}
else
{
echo '<font color="red">Запись невозможна</font><br />';
echo 'На папке '.str_delimpos(TEMPLATES_DIR, ROOT_DIR).' стоят права доступа '.xchmod(TEMPLATES_DIR).'<br />';
}
}
break;
############################################################################
case 'file':
// управление файлом
{
if(empty($_GET['file']))locate(PATH.'admin_tpl.php');
$filename = rawurldecode($_GET['file']);
if(!preg_match('~^[A-Za-z0-9-_.]+$~', $filename) || !file_exists(TEMPLATES_DIR.$filename))locate(PATH.'admin_tpl.php');
$filename = TEMPLATES_DIR.$filename;
$file = $_GET['file'];
if(!is_writable($filename))echo '<div class="err">На файл "'.$filename.'" стоят права доступа не разрешающие запись.</div>';
if((file_exists($filename.'.bak') && !is_writable($filename.'.bak')) || !is_writable(TEMPLATES_DIR))echo '<div class="err">Невозможно создать BAK-файл.</div>';
switch(ACT)
{
default:
// редактирование файла
{
echo '<div class="head">Редактирование : '.$file.'</div>';
if(isset($_GET['edit']) && isset($_POST['content']) && postval('edit'))
{
$content = $_POST['content'];
// записываем BAK-файл
if(copy($filename, $filename.'.bak'))
{
// записываем основной файл
if(file_write($filename, 'w', $content))
{
$info = 'write';
}
else
{
$info = 'no_wrie_file';
}
}
else
{
$info = 'no_write_bakfile';
}
locate(PATH.'admin_tpl.php?mode=file&file='.rawurlencode($file).'&info='.$info);
}
$infos = array
(
'write' => array('Файл успешно записан', 'msg'),
'no_write_file' => array('Не удалось записать файл', 'err'),
'no_write_bakfile' => array('Не удалось записать BAK-файл', 'err'),
'restore' => array('Файл успешно восстановлен', 'msg')
);
if(isset($_GET['info']) && isset($infos[$_GET['info']]))echo '<div class="'.$infos[$_GET['info']][1].'">'.$infos[$_GET['info']][0].'</div>';
$lines = file($filename);
$count_lines = count($lines);
$filemtime = filemtime($filename);
echo '<small>'.$count_lines.' '.postfix($count_lines, 'строк', 'строка' ,'строки').', '.xsize(filesize($filename)).', '.(($filemtime > TIME_TODAY) ? 'после изменения прошло '.((TIME - $filemtime) > 10 ? xtime(TIME - $filemtime, true) : 'совсем немного времени') : 'изменен '.xdate($filemtime)).'</small><br />';
echo '<form action="'.PATH.'admin_tpl.php?mode=file&file='.rawurlencode($file).'&edit&'.RAND.'" method="post" class="unit"><input type="hidden" name="edit" value="1"/>';
echo '<textarea name="content" name="content" style="width:100%" rows="'.(min($count_lines, (MY_WEB ? 35 : 15)) + 2).'">'.htmlspecialchars(implode('', $lines), ENT_QUOTES, 'utf-8').'</textarea>';
echo '<input type="submit" value="Сохранить"/>';
echo '</form>';
echo '» <a href="'.PATH.'admin_tpl.php?mode=file&file='.rawurlencode($file).'&act=color">Подсветить код</a><br />';
if(file_exists($filename.'.bak') && file_get_contents($filename.'.bak') != file_get_contents($filename))echo '» <a href="'.PATH.'admin_tpl.php?mode=file&file='.rawurlencode($file).'&act=bakfile">Восстановить из BAK-файла</a> (создан '.xdate(filemtime($filename.'.bak')).')<br />';
echo '» <a href="'.PATH.'admin_tpl.php?mode=file&file='.rawurlencode($file).'&act=del">Удалить файл</a><br />';
}
break;
########################################################################
case 'del':
// удаление файла
{
echo '<div class="head">Удаление : '.$file.'</div>';
if(isset($_GET['delete']))
{
if(!file_exists($filename.'.bak') || unlink($filename.'.bak'))
{
if(unlink($filename))
{
echo '<font color="green">Файл "'.$file.'" удален.</font><br />';
echo '<a href="'.PATH.'admin_tpl.php">К списку файлов</a><br />';
}
else
{
echo '<font color="red">Не могу удалить файл</font><br />';
}
}
else
{
echo '<font color="red">Не могу удалить BAK-файл</font><br />';
}
echo '<br />';
}
else
{
echo 'Вы действительно хотите удалить файл "'.$file.'"<br />';
echo 'Если этот файл был включен в стандартную комплектацию скрипта, то оный не сможет корректно работать!<br />';
echo '<a href="'.PATH.'admin_tpl.php?mode=file&file='.rawurlencode($file).'&act=del&delete">Удалить</a> / <a href="'.PATH.'admin_tpl.php?mode=file&file='.rawurlencode($file).'">Отмена</a><br />';
echo '<br />';
}
}
break;
########################################################################
case 'color':
// подсветка кода
{
echo '<div class="head">Подсветка кода : '.$file.'</div>';
$content = htmlspecialchars(file_get_contents($filename), ENT_QUOTES, 'utf-8');
$content = highlight_template($content);
$content = highlight_html($content);
echo '<div class="code">'.nl2br($content).'</div>';
}
break;
########################################################################
case 'bakfile':
// восстановление BAK-файла
{
echo '<div class="head">Восстановление : '.$file.'</div>';
if(file_exists($filename.'.bak'))
{
if(isset($_GET['restore']))
{
if(copy($filename.'.bak', $filename))
{
$info = 'restore';
}
else
{
$info = 'no_write_file';
}
locate(PATH.'admin_tpl.php?mode=file&file='.rawurlencode($file).'&info='.$info);
}
echo 'Дата создания файла : '.xdate(filemtime($filename.'.bak')).'<br />';
echo 'Размер : '.xsize(filesize($filename.'.bak')).'<br />';
echo '<a href="'.PATH.'admin_tpl.php?mode=file&file='.rawurlencode($file).'&act=bakfile&restore">Восстановить файл '.$file.' из BAK-файла</a><br />';
if(!isset($_GET['view']))echo '<a href="'.PATH.'admin_tpl.php?mode=file&file='.rawurlencode($file).'&act=bakfile&view">Просмотреть содержимое</a><br />';
similar_text(file_get_contents($filename), file_get_contents($filename.'.bak'), $persent);
echo 'Степень схожести файлов : <b>'.round($persent, 4).'%</b><br />';
echo '<br />';
if(isset($_GET['view']))
{
echo '<b>Содержимое</b> : <br />';
$content = htmlspecialchars(file_get_contents($filename.'.bak'), ENT_QUOTES, 'utf-8');
$content = highlight_template($content);
$content = highlight_html($content);
echo '<div class="code">'.nl2br($content).'</div>';
echo '<br />';
}
}
else
{
echo '<font color="red">BAK-файл не существует</font><br />';
}
}
}
if(ACT != null)echo '<a href="'.PATH.'admin_tpl.php?mode=file&file='.rawurlencode($file).'">К файлу "'.$file.'"</a><br />';
}
break;
}
if(MODE != null)echo '<a href="'.PATH.'admin_tpl.php">К списку файлов</a><br />';
echo '<a href="'.PATH.'admin.php">В админ-панель</a><br />';
echo '<a href="'.PATH.'index.php">К форумам</a><br />';
echo '<div class="foot">©Morgan</div><small>'.round(microtime(true) - MT, 3).'</small></body></html>';
ob_end_flush();
exit;
# Morgan
?>