View file admin.php

File size: 14.94Kb
<?php
/*(с) Im !eee*/
if(!file_exists('config.php')){exit('Не найден файл config.php!');}
require 'config.php';
header('Content-Type: text/html; charset=UTF-8');
/*sets vars in config.php file*/
function set_var($nm,$vl,$file,$rw=0,$qt=1){
	$vl=($qt)?'\''.$vl.'\'':$vl;
	$t=preg_replace('~(?<=/\*\['.$nm.'\]\*/).*(?=/\*\[/'.$nm.'\]\*/)~i',$vl,($rw)?file_get_contents($file):$file,1);
	if($rw){
		file_put_contents($file, $t);
	} else {
		return $t;
	}
}
$form=array(array(), array(), array(), array()); $ps=&$_POST;
/*form($arr), label1, name1, default_value1*/
function add_trs(&$arr){
	global $ps;
	$ag=func_get_args(); $l=sizeof($ag);
	for($i=1; $i<$l; $i+=3){
		/*$ag[$i] - label $ag[$i+1] - name $ag[$i+2] - default value*/
		$arr[2][]=$ag[$i].'<br/><input type="text" name="'.$ag[$i+1].'" value="';
		$arr[2][]='"><br/>';
		if(isset($ps[$ag[$i+1]])){
			if(get_magic_quotes_gpc()){$ps[$ag[$i+1]]=stripslashes($ps[$ag[$i+1]]);}
			$arr[1][$ag[$i+1]]=sizeof($arr[0]);
		} else {
			$arr[1][$ag[$i+1]]=-1;
		}
		$arr[0][]=$ag[$i+2];
		$arr[3][]=false;
	}
}
/*form($arr), label1, name1, default_value1, a_name_of_text_input_in_the_same_form1, ...*/
function add_chb(&$arr){
	global $ps;
	$ag=func_get_args(); $l=sizeof($ag);
	for($i=1; $i<$l; $i+=4){
		/*$ag[$i] - label $ag[$i+1] - name
		 *$ag[$i+2] - default value $ag[$i+3] - "text" input*/
		$arr[2][]=$ag[$i].'<input type="checkbox" name="'.$ag[$i+1].'"';
		$arr[2][]='><br/>';
		if(isset($ps[$ag[$i+3]])){
			$ps[$ag[$i+1]]=(isset($ps[$ag[$i+1]])&&$ps[$ag[$i+1]]=='on')?1:0;
			$arr[1][$ag[$i+1]]=sizeof($arr[0]);
		} else {
			$arr[1][$ag[$i+1]]=-1;
		}
		$arr[0][]=$ag[$i+2];
		$arr[3][]=true;
	}
}
/*prints a form*/
function pr_fm(&$arr, $act, $sb_nm){
	$l=sizeof($arr[0]);
	echo '<form method="POST" action="'.$act.'">';
	for($i=0; $i<$l; $i++){
		echo $arr[2][$i*2].
		(($arr[3][$i])?
		(($arr[0][$i])?'checked="checked"':''):htmlspecialchars($arr[0][$i])).
		$arr[2][$i*2+1];
	}
	echo '<input type="submit" value="'.$sb_nm.'"></form>';
}
/*perform addslashes twice (to make preg_replace happy)*/
function asl($str){
	return addslashes(addslashes($str));
}
/*sets max messages on page if using files*/
function set_fl_mess_tot($new){
	$all=file_get_contents(PG_PREF.'total.txt')+1;
	if($all==1){return;}
	$arr=array(); $p=0; $p2=1;
	while(true){
		while(sizeof($arr)<$new&&$p2<$all){
			$name=PG_PREF.$p2.((file_exists(PG_PREF.$p2.'_.txt'))?'_':'').'.txt';
			$arr=array_merge($arr,array_map('rtrim',file($name)));
			unlink($name);
			$p2++;
		}
		if(sizeof($arr)==0){
			break;
		} else {
			$t=sizeof($arr);
		}
		do{
			$p++;
			if(file_exists(PG_PREF.$p.'.txt')){
				rename(PG_PREF.$p.'.txt', PG_PREF2.$p.'_.txt');
			}
			file_put_contents(PG_PREF.$p.'.txt', join(PHP_EOL, array_splice($arr, 0, $new, array())));
		} while(sizeof($arr)>=$new);
	}
	file_put_contents(PG_PREF.'total.txt', $p);
	file_put_contents(PG_PREF.'last.txt', $t);
}
$me=$_SERVER['PHP_SELF'];
function pr_end(){
	echo '</body></html>';
}
register_shutdown_function('pr_end');
?>
<?php 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>
<!- (с) Im !eee  ->
<head>
<meta http-equiv="Content-type" content="text/html;charset=UTF-8"/>
<meta http-equiv="Cache-control" content="no-cache,no-store,must-revalidate"/>
<meta http-equiv="Expires" content="Wed, 26 Feb 1997 8:21:57 GMT"/>
<meta http-equiv="Pragma" content="no-cache"/>
<title>Гостевая книга :: админ-панель</title>
</head>
<body>

<?php 
if(isset($_COOKIE['jsgb_adm_pass']) && $_COOKIE['jsgb_adm_pass']==ADM_PASS){
	$log=true; 
} else {
	$log=false;
	add_trs($form, 'Пароль', 'log_adm_pass', '');
	if($form[1]['log_adm_pass']!=-1){ 
		if(md5($ps['log_adm_pass'])==ADM_PASS){
			setcookie('jsgb_adm_pass', ADM_PASS, time()+60*60*24*10);
			$log=true; 
		}else{
			echo 'Неправильный пароль!<br/>';
		}
	}
} 
if(!$log){ 
	pr_fm($form,$me,'Войти');
	exit;
}

$act=isset($_GET['act'])?$_GET['act']:4;
if($act>5||$act<1){$act=4;}
if($act==5){
	setcookie('jsgb_adm_pass', '', 0);
	exit('Вы вышли.');
}
?>

<p><a href="<?php echo $me?>?act=1">Пароль</a> |
<a href="<?php echo $me?>?act=2">Настройки php</a> |
<a href="<?php echo $me?>?act=3">Настройки html</a> |
<a href="<?php echo $me?>?act=4">Сообщения</a> |
<a href="<?php echo $me?>?act=5">Выход</a>
</p><hr size="1"/>

<?php
if($act==1){
	echo '<b>Изменить пароль администратора</b><br/><br/>';
	add_trs($form, 'Старый пароль', 'o_p', '', 'Новый пароль', 'n_p', '');
	if($form[1]['o_p']!=-1&&$form[1]['n_p']!=-1){
		if(md5($ps['o_p'])==ADM_PASS){
			$t=md5($ps['n_p']);
			setcookie('jsgb_adm_pass', $t, time()+60*60*24*10);
			set_var('adm_pass',$t,'config.php',1);
			echo 'Пароль изменен.<br/>';
		} else {
			echo 'Неправильный пароль.<br/>';
			$form[0][$form[1]['n_p']]=$ps['n_p'];
		}
	}
	pr_fm($form, $me.'?act=1','Изменить');
	exit;
}
if($act==2){
	echo '<b>Настроить php скрипты на сервере</b><br/><br/>';
	add_trs($form,
			'Сообщений на странице', 'mess_tot', MESS_TOT,
			'Максимальная длина имени автора', 'ml_aut', ML_AUT,
			'Максимальная длина сообщения', 'ml_msg', ML_MSG,
			'Ограничение по времени между сообщениями (секунды)', 'tm_wr', TM_WR
			);
	add_chb($form, 'Использовать bb теги', 'use_bb', USE_BB, 'mess_tot');
	add_trs($form, 
			'Хранение данных (mysql или files)', 'store', STORE,
			'Путь к файлам данных (files)', 'pg_pref', PG_PREF,
			'Сервер (mysql)', 'my_host', MY_HOST,
			'Пользователь (mysql)', 'my_user', MY_USER,
			'Пароль (mysql)', 'my_pass', MY_PASS,
			'Имя базы данных (mysql)', 'my_db', MY_DB,
			'Имя таблицы(mysql)', 'my_tbl', MY_TBL
			);
	add_chb($form, 'Создать таблицу (из файла jsgb_posts.sql)', 'crt_tbl', 0, 'mess_tot');
	//print_r($_POST);
	$cont=file_get_contents('config.php');
	if(($t=$form[1]['mess_tot'])!=-1&&$ps['mess_tot']!=MESS_TOT){
		$t2=(int)$ps['mess_tot'];
		if($t2<1){
			echo 'Число сообщений дожно быть больше 0<br/>';
		} else {
			$cont=set_var('mess_tot',$t2,$cont);
			if(STORE=='files'&&is_dir(PG_PREF)){
				set_fl_mess_tot($t2);
			}
			$form[0][$t]=$t2;
		}
	}
	if(($t=$form[1]['ml_aut'])!=-1&&$ps['ml_aut']!=ML_AUT){
		$t2=(int)$ps['ml_aut'];
		if($t2<1){
			echo 'Длина имени автора дожна быть больше 0<br/>';
		} else {
			$cont=set_var('ml_aut',$t2,$cont);
			$form[0][$t]=$t2;
		}
	}
	if(($t=$form[1]['ml_msg'])!=-1&&$ps['ml_msg']!=ML_MSG){
		$t2=(int)$ps['ml_msg'];
		if($t2<1){
			echo 'Длина сообщения дожна быть больше 0<br/>';
		} else {
			$cont=set_var('ml_msg',$t2,$cont);
			$form[0][$t]=$t2;
		}
	}
	if(($t=$form[1]['tm_wr'])!=-1&&$ps['tm_wr']!=TM_WR){
		$t2=(int)$ps['tm_wr'];
		$cont=set_var('tm_wr',$t2,$cont);
		$form[0][$t]=$t2;
	}
	if(($t=$form[1]['use_bb'])!=-1&&$ps['use_bb']!=USE_BB){
		$cont=set_var('use_bb',$ps['use_bb'],$cont);
		$form[0][$t]=$ps['use_bb'];
	}
	$store=STORE;
	if(($t=$form[1]['store'])!=-1&&$ps['store']!=STORE){
		$t2=$ps['store'];
		if($t2!='mysql'&&$t2!='files'){
			echo 'Неизвестный способ хранения<br/>';
		} else {
			$cont=set_var('store',$t2,$cont);
			$form[0][$t]=$t2;
			$store=$t2;
		}
	}
	if(($t=$form[1]['pg_pref'])!=-1&&$ps['pg_pref']!=PG_PREF){
		$t2=$ps['pg_pref'];
		while($t2[strlen($t2)-1]=='\\'||$t2[strlen($t2)-1]=='/'){
					$t2=substr($t2,0,-1);
				}
		$cont=set_var('pg_pref',asl($t2),$cont);
		$form[0][$t]=$t2.DIRECTORY_SEPARATOR;
		if($store=='files'){
			if(!is_dir($t2)){
				echo 'Неправильный путь к файлам<br/>';
			} else {
				if(!file_exists($t2.'total.txt')){
					file_put_contents($t2.'total.txt', 0);
				}
				if(!file_exists($t2.'lock.txt')){
					file_put_contents($t2.'lock.txt', '');
				}
				if(!file_exists($t2.'last.txt')){
					file_put_contents($t2.'last.txt', 0);
				}
			}
		}
	}
	$conn=false;
	if(($t=$form[1]['my_host'])!=-1&&($t1=$form[1]['my_user'])!=-1&&($t2=$form[1]['my_pass'])!=-1){
		if($ps['my_host']!=MY_HOST||$ps['my_user']!=MY_USER||$ps['my_pass']!=MY_PASS){
			$cont=set_var('my_host',asl($ps['my_host']),$cont);
			$form[0][$t]=$ps['my_host'];
			$cont=set_var('my_user',asl($ps['my_user']),$cont);
			$form[0][$t1]=$ps['my_user'];
			$cont=set_var('my_pass',asl($ps['my_pass']),$cont);
			$form[0][$t2]=$ps['my_pass'];
		}
		if($store=='mysql'){
			$conn=mysql_connect($ps['my_host'],$ps['my_user'],$ps['my_pass']);
			if($conn===false){
				echo 'Невозможно подключиться к серверу MySQL<br/>';
			}
		}
	}
	if(($t=$form[1]['my_db'])!=-1){
		$t2=$ps['my_db'];
		if($t2!=MY_DB){
			$cont=set_var('my_db',asl($t2),$cont);
			$form[0][$t]=$t2;
		}
		if($conn!==false){
			if(!mysql_select_db($t2)){
				echo 'Невозможно использовать заданную базу данных<br/>';
			}
		}
	}
	if(($t=$form[1]['my_tbl'])!=-1){
		$t2=$ps['my_tbl'];
		if($t2!=MY_TBL){
			$cont=set_var('my_tbl',asl($t2),$cont);
			$form[0][$t]=$t2;
		}
		if($conn!==false){
			if($form[1]['crt_tbl']!=-1&&$ps['crt_tbl']){
				if(!file_exists('jsgb_posts.sql')){
					echo 'Не найден файл jsgb_posts.sql, необходимый для создания таблицы<br/>';
				} else {
					if(!mysql_query(set_var('my_tbl', '`'.$t2.'`', file_get_contents('jsgb_posts.sql'), 0, 0))){
					   echo 'Невозможно создать таблицу<br/>';
					}
				}
			}
			if(!mysql_query('SELECT `id`,`auth`,`date`,`post` FROM `'.$t2.'` LIMIT 1')){
				echo 'Невозможно использовать заданную таблицу<br/>';
			}
		}
	}
	file_put_contents('config.php', $cont);
	pr_fm($form, $me.'?act=2','Изменить');
	exit;
}
if($act==3){
	$tpth='http://'.$_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF'];
	$tpth=substr($tpth, 0, strrpos($tpth, '/')+1);
	echo '<b>Редактировать пути в файлах html</b><br/><br/>';
	add_trs($form,'index.html - msg_loader.php','ind_path',$tpth.'msg_loader.php');
	add_chb($form,'Редактировать', 'ind_edit',0,'ind_path');
	add_trs($form,'write.html - msg_writer.php','write_path',$tpth.'msg_writer.php');
	add_chb($form,'Редактировать', 'write_edit',0,'ind_path');
	add_trs($form,'main.html - msg_counter.php','count_path',$tpth.'msg_counter.php');
	add_chb($form,'Редактировать', 'count_edit',0,'ind_path');
	add_trs($form,'Ссылка на главную страницу','main_path','/');
	add_chb($form,'В файле index.html', 'mn_ind_ed',0,'ind_path');
	add_chb($form,'В файле write.html', 'mn_wr_ed',0,'ind_path');
	if($form[1]['ind_edit']!=-1&&$ps['ind_edit']&&($t=$form[1]['ind_path'])!=-1){
		$form[0][$t]=$ps['ind_path'];
		if(!file_exists('index.html')){
			echo 'Не найден файл index.html<br/>';
		} else {
			echo 'Путь в файле index.html указан<br/>';
			set_var('path', $ps['ind_path'], 'index.html', 1);
		}
	}
	if($form[1]['write_edit']!=-1&&$ps['write_edit']&&($t=$form[1]['write_path'])!=-1){
		$form[0][$t]=$ps['write_path'];
		if(!file_exists('write.html')){
			echo 'Не найден файл write.html<br/>';
		} else {
			echo 'Путь в файле write.html указан<br/>';
			set_var('path', $ps['write_path'], 'write.html', 1);
		}
	}
	if($form[1]['count_edit']!=-1&&$ps['count_edit']&&($t=$form[1]['count_path'])!=-1){
		$form[0][$t]=$ps['count_path'];
		if(!file_exists('main.html')){
			echo 'Не найден файл main.html<br/>';
		} else {
			echo 'Путь в файле main.html указан<br/>';
			set_var('path', $ps['count_path'], 'main.html', 1);
		}
	}
	if(($t=$form[1]['main_path'])!=-1){
		$form[0][$t]=$ps['main_path'];
		$str='-><a href="'.$ps['main_path'].'">На главную</a><!-';
		if($form[1]['mn_ind_ed']!=-1&&$ps['mn_ind_ed']){
			if(!file_exists('index.html')){
				echo 'Не найден файл index.html<br/>';
			} else {
				echo 'Путь в файле index.html указан<br/>';
								file_put_contents('index.html', preg_replace('~(?<=<!-/\*\[main\]\*/-><a href=").*(?="[^>]*>)~i', asl($ps['main_path']), file_get_contents('index.html')));
			}
		}
		if($form[1]['mn_wr_ed']!=-1&&$ps['mn_wr_ed']){
			if(!file_exists('write.html')){
				echo 'Не найден файл write.html<br/>';
			} else {
				echo 'Путь в файле write.html указан<br/>';
				file_put_contents('write.html', preg_replace('~(?<=<!-/\*\[main\]\*/-><a href=").*(?="[^>]*>)~i', asl($ps['main_path']), file_get_contents('write.html')));
			}
		}
	}
	pr_fm($form, $me.'?act=3','Ок');
	exit;
}
if($act==4){ 
	include STORE.'.php'; 
	function ex_hn($val='Ошибка обработки данных'){
		echo '<br/>'.$val;
		rel_lock();
	} 
	if(isset($_GET['msg_scr'])){
		lock('w');
		if($_GET['msg_scr']==1){
			$a=''; $m=''; $ed=0;
			$fpath=$me.'?act=4&amp;msg_scr=1';
			if(isset($_GET['p'],$_GET['n'])){
				$ed=1;
				$p=$_GET['p']; $n=$_GET['n'];
				list($a,$d,$m)=get_mes($p,$n);
				$fpath.='&amp;p='.$p.'&amp;n='.$n;
			}
			add_trs($form, 'Автор', 'a', $a,
				'Сообщение', 'm', $m
				);
			if($ed){
				add_trs($form, 'Дата', 'd', date('d-m-Y H:i:s',$d));
				if(($t1=$form[1]['a'])!=-1&&($t2=$form[1]['d'])!=-1&&($t3=$form[1]['m'])!=-1){
					ed_m($p, $n, ($ps['a']=='')?' ':$ps['a'], (int)strtotime($ps['d']), ($ps['m']=='')?' ':$ps['m']);
					echo 'Сообщение изменено<br/>';
					$form[0][$t1]=$ps['a'];
					$form[0][$t2]=$ps['d'];
					$form[0][$t3]=$ps['m'];
				}
			} else {
				if($form[1]['a']!=-1&&$form[1]['m']!=-1){
					wr(nl2br(($ps['a']=='')?' ':$ps['a']), nl2br(($ps['m']=='')?' ':$ps['m']));
					echo 'Сообщение добавлено<br/>';
				}
			}
			rel_lock();
			pr_fm($form, $fpath, ($ed)?'Изменить':'Добавить');
		} else if($_GET['msg_scr']==2&&isset($_GET['p'],$_GET['n'])){
			del_m($p=$_GET['p'], $_GET['n']);
			echo 'Сообщение удалено<br/>';
			$ed=1;
		}
		echo '<br/><a href="'.$me.'?act=4'.(($ed)?'&amp;p='.$p:'').'">Назад</a>';
	} else {
		lock('r');
				$np=p_num();
				echo '<b>Сообщения</b><br/><a href="'.$me.'?act=4&amp;msg_scr=1">[Написать]</a>';
		if($np==0){
			exit(ex_hn('Сообщений нет'));
		}
		$n=isset($_GET['p'])?$_GET['p']:1; $l=0;
		$arr=m_on_p(&$n, &$l);
		rel_lock();
		for($i=0;$i<$l;$i++){
			echo '<p>'.$arr[0][$i].'('.date('d.m.Y H:i:s',$arr[1][$i]).')<br/>'.$arr[2][$i].'</p> <a href="'.$me.'?act=4&amp;msg_scr=1&amp;p='.$n.'&amp;n='.$i.'">[Редактировать]</a> <a href="'.$me.'?act=4&amp;msg_scr=2&amp;p='.$n.'&amp;n='.$i.'">[Удалить]</a><br/><hr size="1"/>';
		}
		for($i=1;$i<=$np;$i++){
			if($i==$n){
				echo ' <b>'.$i.'</b>';
			} else {
				echo ' <a href="'.$me.'?act=4&amp;p='.$i.'">'.$i.'</a>';
			}
		}
		echo '</p>';
	}
	exit;
}
?>