View file admin_tpl.php

File size: 11.8Kb
<?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 '&raquo; <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').'">&gt;&gt;</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 '&raquo; <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 '&raquo; <a href="'.PATH.'admin_tpl.php?mode=file&file='.rawurlencode($file).'&act=bakfile">Восстановить из BAK-файла</a> (создан '.xdate(filemtime($filename.'.bak')).')<br />';
		echo '&raquo; <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">Файл &quot;'.$file.'&quot; удален.</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 'Вы действительно хотите удалить файл &quot;'.$file.'&quot;<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).'">К файлу &quot;'.$file.'&quot;</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">&copy;Morgan</div><small>'.round(microtime(true) - MT, 3).'</small></body></html>';

ob_end_flush();
exit;

# Morgan
?>