if(!defined('PHOENIX')) die('');
$dbhost="localhost:3306";// "uranus"
$dbuser="laba" ;//
$dbpass="vtganast"; //
$dbname="labsite";
$maxsessiontimeout=1800;// in sec, 30 min
$maxsessiontimeoutrem=31536000; //1 year
$maxsession=0;// in sec. 0 if session cookie
////$filepath="/usr/local/www/test/system/nn/files/"; // доолжно быть достыпным на запись юзера apache
$debug=1;
$ipinsessid=0; // Привязать ИП адрес к сессии
$FILEROOT="/usr/local/www/data/";
$inpage=20;
$maxpages=10;
define('PATH', "/usr/local/www/data/main/");
////$thissite="";
/// in version 2.0
////$MAXERRORS=2;// maximum errors in process
////$REQPERSTEP=1;// number of request per step
?>
mysqli_connect($dbhost, $dbuser, $dbpass, $dbname) or die("sql connect error");
mysql_select_db($dbname) or die("database not found");
mysql_query("set names cp1251");
?>
function error($str, $line, $file=__FILE__, $level=1)
{
global $debuglevel; // 0 - отсутсвие сообщений. 1 - сообщения об ошбках
if($level>=$debuglevel)
{
echo "Error: ".htmlspecialchars($str)." in ".htmlspecialchars($file)." at line ".htmlspecialchars($line)."";
}
die();
}
if(!defined('PHOENIX')) die(error("Ops", __LINE__));
function returnpage($page)
{
global $PAGE, $STATUS, $OUT;
$OUT="";
//Вывод шапки и меню
$q2=mysql_query("select phpfile from blocks where (name='header') order by name desc") or error(mysql_error(), __LINE__);
while($r2=mysql_fetch_object($q2))
{
if(!preg_match("/^((\w|\d)+)\.inc\.php$/", $r2->phpfile, $fname))
{
error("Security Error", __LINE__);
}
include_once(PATH."blocks/".$r2->phpfile);
if($n++>2) $OUT.=returnhtmlfromtempl("blockdelimiter", NULL);
$func="ret_".$fname[1];
$OUT.=$func();
};
//Вывод содержимого
$q=mysql_query("select * from pages where xid='".addslashes($page)."'") or error(mysql_error(), __LINE__);
if(!$PAGE=mysql_fetch_object($q))
{
$STATUS=404;
if($page<>'error404') return returnpage('error404');
else error('404 page not found', __LINE__);
exit;///
}
$q2=mysql_query("select b.phpfile from blocksinpages bp, blocks b where bp.page=$PAGE->id and bp.block=b.id order by bp.forder") or error(mysql_error(), __LINE__);
$n=1;
while($r2=mysql_fetch_object($q2))
{
if(!preg_match("/^((\w|\d)+)\.inc\.php$/", $r2->phpfile, $fname))
{
error("Security Error", __LINE__);
}
include_once(PATH."blocks/".$r2->phpfile);
if($n++>2) $OUT.=returnhtmlfromtempl("blockdelimiter", NULL);
$func="ret_".$fname[1];
$OUT.=$func();
}
//Правого колонтитула
$q2=mysql_query("select phpfile from blocks where (name='actionslimitlist') order by name desc") or error(mysql_error(), __LINE__);
while($r2=mysql_fetch_object($q2))
{
if(!preg_match("/^((\w|\d)+)\.inc\.php$/", $r2->phpfile, $fname))
{
error("Security Error", __LINE__);
}
include_once(PATH."blocks/".$r2->phpfile);
if($n++>2) $OUT.=returnhtmlfromtempl("blockdelimiter", NULL);
$func="ret_".$fname[1];
$OUT.=$func();
};
//Вывод нижнего колонтитула
$q2=mysql_query("select phpfile from blocks where name='tailer'") or error(mysql_error(), __LINE__);
while($r2=mysql_fetch_object($q2))
{
if(!preg_match("/^((\w|\d)+)\.inc\.php$/", $r2->phpfile, $fname))
{
error("Security Error", __LINE__);
}
include_once(PATH."blocks/".$r2->phpfile);
if($n++>2) $OUT.=returnhtmlfromtempl("blockdelimiter", NULL);
$func="ret_".$fname[1];
$OUT.=$func();
};
return $OUT;
}
function getconst($name)
{
$q=mysql_query("select val from constants where name='".addslashes($name)."'") or error(mysql_error(), __LINE__);
if($r=mysql_fetch_object($q))
{
return $r->val;
}
return FALSE;
}
function getconst2($name)
{
$q=mysql_query("select rusname from constants where name='".addslashes($name)."'") or error(mysql_error(), __LINE__);
if($r=mysql_fetch_object($q))
{
return $r->rusname;
}
return FALSE;
}
function getconst1($name)
{
$q=mysql_query("select val from consts where name='".addslashes($name)."'") or error(mysql_error(), __LINE__);
if($r=mysql_fetch_object($q))
{
return $r->val;
}
return FALSE;
}
function setconst($name, $val, $cancreate=0)
{
if($cancreate && getconst($name,$rusname)===FALSE)
{
mysql_query("insert into constans set name='".addslashes($name)."', var='".addslashes($var)."'") or error(mysql_error(), __LINE__);
return;
}
mysql_query("update constans set var='".addslashes($var)."' where name='".addslashes($name)."' ") or error(mysql_error(), __LINE__);
}
// далее функции работы с шаблонами....
function returnhtmlfromtempl($templatename, $replace=NULL)
{
/*
$templatename -имя шаблона, например header
$replace - массив параметров шаблона.. имеет вид array("[*PARAMNAME*]"=>"parametrs value")
сам шаблон храниться в templates и имет вид html текста с [*PARAMNAME*] в изменяемых параметрах.
*/
$q=mysql_query("select body from templates where name='".addslashes($templatename)."'") or error(mysql_error(), __LINE__);
if(!$r=mysql_fetch_object($q))
{
return FALSE;
}
if(is_array($replace) && sizeof($replace)>0)
{
$f=array_keys($replace);
$t=array_values($replace);
return str_replace($f, $t, $r->body);
}
return $r->body;
}
function htmlizetempl(&$body, $replace)
{
if(is_array($replace) && sizeof($replace)>0)
{
$f=array_keys($replace);
$t=array_values($replace);
return str_replace($f, $t, $body);
}
return $body;
}
function loginform($str)
{
$err="";
if(!empty($str)) $err="
$str
";
$ret="
Доступ в систему администрирования сайта www.thermo.chem.msu.ru
$err
";
return $ret;
}
function requirelevel($level)
{
// 0 - доступ всем, не проверяется...
// 50 - доступ аминистрторам системы,
// 100 - доступ суперадминистратору...
global $_LOGIN_ID, $_LOGIN_NAME, $_LOGIN_CLASS, $_LOGIN_SID;
global $maxsession, $maxsessiontimeoutrem, $maxsessiontimeout, $ipinsessid;
$loginform=$_POST['loginform'];
if($loginform=='Y')
{
$login=$_POST['login'];
$pass=$_POST['pass'];
$rem=$_POST['rem'];
$q=mysql_query("select id, name, class, pass from users where login = '".addslashes($login)."' and class>0") or error(mysql_error(), __LINE__);
if(!($r=mysql_fetch_object($q)))
{
echo loginform("Пароль неверен, повторите попытку");
die;
}
if(!preg_match("/^\\$(.*)\\$(.*)$/", $r->pass, $ret))
{
echo loginform("Пароль неверен, повторите попытку");
die;
}
if((string)(sha1((string)$ret[1].$pass)) <> (string)$ret[2] )
{
echo loginform("Пароль неверен, повторите попытку");
die;
}
$sid=sha1(uniqid(rand(), true).rand().time());
if($rem) $maxsession=$maxsessiontimeoutrem;
if($maxsession>0)
setcookie('sid', $sid, time()+$maxsession, "/", $thissite);
else
setcookie('sid', $sid, 0, "/", $thissite);
$maxsessiontimeout=(int)$maxsessiontimeout;
if($rem) $maxsessiontimeout=$maxsessiontimeoutrem;
mysql_query("update users set sid='".addslashes($sid.(($ipinsessid)?":{$_SERVER[REMOTE_ADDR]}":""))."', expdt=UNIX_TIMESTAMP()+$maxsessiontimeout where id=$r->id") or error(mysql_error(), __LINE__);
$_LOGIN_ID=$r->id;
$_LOGIN_NAME=$r->name;
$_LOGIN_CLASS=$r->class;
$_LOGIN_SID=$sid;
}
else
{
$sid=$_COOKIE['sid'];
if(empty($sid))
{
echo loginform('');
die;
}
$q=mysql_query("select id, name, class from users where sid='".addslashes($sid.(($ipinsessid)?":{$_SERVER[REMOTE_ADDR]}":""))."' and expdt>=UNIX_TIMESTAMP() and class>0") or error(mysql_error(), __LINE__);
if(!($r=mysql_fetch_object($q)))
{
setcookie('sid', "", time()-360000, "/", $thissite);
echo loginform("Ваша сессия завершилась, повторите ввод пароля.");
die;
}
$_LOGIN_ID=(int)$r->id;
$_LOGIN_NAME=$r->name;
$_LOGIN_CLASS=$r->class;
$_LOGIN_SID=$sid;
$maxsessiontimeout=(int)$maxsessiontimeout;
mysql_query("update users set expdt=if(expdt>(UNIX_TIMESTAMP()+$maxsessiontimeout), expdt, (UNIX_TIMESTAMP()+$maxsessiontimeout) ) where id=$_LOGIN_ID ") or error(mysql_error(), __LINE__);
}
}
function returnimageslist($str, $cols=2, $id)
{
$out="
\r\n";
$cc=0;
$z=0;
$ls=explode("\n", $str);
$id=(int)$id;
if(is_array($ls) && sizeof($ls)>0)
{
foreach($ls as $k=>$v)
{
$v=str_replace(array("\r", "\n"), "", $v);
if(preg_match("/^(.*)$/", $v, $ret)) // для совмемстимости со след версиями
{
if(!empty($v))
{
if($cc++>=$cols)
{
$cc=0;
$out.="\r\n