=$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="
$err

Доступ в систему администрирования
сайта www.thermo.chem.msu.ru

Login:
Password:
"; 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\r\n"; } $z=1; $nf=$ret[1]; $ns=$ret[1]; if(preg_match("/^(.*)\.(.*?)$/", $ret[1], $re2)) { $ns=$re2[1]."_sm.jpg"; } $out.="
\r\n"; } } } } $out.="
"; if($z) return $out; return FALSE; } function returnstdate($date) { if(!preg_match("/^(\d\d\d\d)\-(\d\d)\-(\d\d)$/", $date, $ret)) return $date; return date(returnhtmlfromtempl("standartphpdateformat"), mktime(0, 0, 0, $ret[2], $ret[3], $ret[1])); } /* function returnstmonth($date) { if(!preg_match("/^(\d\d\d\d)\-(\d\d)\-(\d\d)$/", $date, $ret)) return $date; switch ($ret[2]) { case "1" : $month=" return nhtmlfromtempl("standartphpdateformat"), mktime(0, 0, 0, $ret[2], $ret[3], $ret[1])); } function returnstyear($date) { if(!preg_match("/^(\d\d\d\d)\-(\d\d)\-(\d\d)$/", $date, $ret)) return $date; return $ret[1]; } */ function upload1fileproject($id, $tmp, $name) { global $debug, $FILEROOT; /// $filepath=$FILEROOT.""; $filepath="./../img/projects/"; if(!preg_match("/\.((\w|\d)+)$/i", $name, $ret)) { error("Загружаемый файл должен иметь расширение", __LINE__); } $ex=strtolower($ret[1]); if($ex<>'gif' && $ex<>'jpg' && $ex<>'jpeg' && $ex<>'tif' && $ex<>'tiff' && $ex<>'bmp' && $ex<>'png' ) { error("Загружамеый файл должен иметь графический формат", __LINE__); } if(file_exists($filepath."$id/")) { if(!is_writable($filepath."$id/") || !is_dir($filepath."$id/")) { error("Директория назначения не доступна для записи(1)", __LINE__); return 0; } } else { if(!is_writable($filepath) || !is_dir($filepath)) { error("Директория назначения не доступна для записи(2)", __LINE__); return 0; } if(!mkdir($filepath."$id/")) { error("не могу создать новую директрию", __LINE__); return 0; } } $ttn=md5(uniqid(rand(), true)); $filename=$ttn.".$ex"; if(!move_uploaded_file($tmp, $filepath."$id/".$filename )) { error("не могу переместить файл...", __LINE__); return 0; } $id=(int)$id; resizeimg($id, $filename, $ttn."_sm.jpg", $ex); mysql_query("update projects set files=concat(files, '".addslashes($filename)."\r\n') where id=$id ") or error(mysql_error(), __LINE__); return 1; }; function resizeimg($id, $from, $to, $type) { $w=221; $h=147; $filepath="./../img/projects/$id/"; if(strtolower($type)=='gif') $imf=imagecreatefromgif($filepath.$from); elseif(strtolower($type)=='jpg' || strtolower($type)=='jpeg' ) $imf=imagecreatefromjpeg($filepath.$from); /// elseif(strtolower($type)=='bmp') $img=imagecreatefrombmp($filepath.$from); elseif(strtolower($type)=='png') $imf=imagecreatefrompng($filepath.$from); else { copy($filepath.$from, $filepath.$to); return; } $imt=imagecreatetruecolor($w, $h); $sz=getimagesize($filepath.$from); $fw=$sz[0]; $fh=$sz[1]; $dw=($w+0.0)/($fw+0.0); $dh=($h+0.0)/($fh+0.0); $dd=$dw; if($dd>$dh) { $dd=$dh; $rw=ceil(($w-$fw*$dd)/2); $rh=0; } else { $rw=0; $rh=ceil(($h-$fh*$dd)/2); } $col = imagecolorallocate( $imt, 255, 255, 255 ); imagefilledrectangle( $imt, 0, 0, $w, $h, $col ); //imagecopyresized($imt, $imf, $rw, $rh, 0, 0, $fw*$dd, $fh*$dd, $fw, $fh); imagecopyresampled($imt, $imf, $rw, $rh, 0, 0, $fw*$dd, $fh*$dd, $fw, $fh); header("Content-type: image/jpeg"); imagejpeg($imt, $filepath.$to, 80); } function addfilestoproject($id) { global $_FILES, $FILEROOT; if(is_array($_FILES['f']['tmp_name']) && sizeof($_FILES['f']['tmp_name'])>0) { foreach($_FILES['f']['tmp_name'] as $k=>$v) { if(!empty($v)) upload1fileproject($id, $_FILES['f']['tmp_name'][$k], $_FILES['f']['name'][$k]); } } } function deletefilesfromproject($id, $file) { $id=(int)$id; $file=(int)$file;// порядковый номер файла с НУЛЯ $q=mysql_query("select files from projects where id=$id") or error(mysql_error(), __LINE__); if(!$r=mysql_fetch_object($q)) { return FALSE; } $str=$r->files; unset($fs); $fc=0; $ls=explode("\n", $str); $id=(int)$id; if(is_array($ls) && sizeof($ls)>0) { foreach($ls as $k=>$v) { $v=trim(str_replace(array("\r", "\n"), "", $v)); if(preg_match("/^(.*)$/", $v, $ret)) // для совмемстимости со след версиями { if(!empty($ret[1])) { if($fc<>$file) { $fs.=trim($ret[1])."\r\n"; } $fc++; } } } } mysql_query("update projects set files='".addslashes($fs)."' where id=$id") or error(mysql_error(), __LINE__); return TRUE; } function GenerateDateInput($name, $defoult="no", $js=0, $delta=1, $mainform="document.main", $delta2=0, $type="MDYD", $separator=" ") { //возвращает выпадающие поля ввода для дат c именами {$name}_year, {$name}_month, {$name}_day // $js=0 - JS не использован, $js=1 используется JS для предотвращения выбора неправилных дат //$delta - количество лет вперед, на которые выведиться вып список лет // по умолчанию выставлено знаечен $defoult в формате "YYYY-MM-DD" // mainform путь к форме, в кторуй будут находиться поля ввода // $delta2 количество лет назад, Добалено 23.10.03 // type - дополнительные становки интерфейса = (MDY|MYD|YMD|YDM|DMY|DYM)(R|E|F|I|D) // первые три буквы - порядок вывода года месяца и дня. четвертая - язык (рас, унгл, фр, и обозначение месяца цифрами, D=detect) // $separator - строка между полями ввода (выводится как есть) $type=strtoupper($type); if(!preg_match("/^(M|Y|D)(M|Y|D)(M|Y|D)(R|F|E|I|D)$/", $type, $typem)) { $typem[1]="M"; $typem[2]="D"; $typem[3]="Y"; $typem[4]="D"; } if($typem[1]==$typem[2] || $typem[1]==$typem[3] || $typem[2]==$typem[3]) { $typem[1]="M"; $typem[2]="D"; $typem[3]="Y"; } global $Language; if($typem[4]=="D") $lang=$Language; elseif($typem[4]=="E") $lang="DEF"; elseif($typem[4]=="R") $lang="RU"; elseif($typem[4]=="F") $lang="FR"; elseif($typem[4]=="I") $lang="INT"; else $lang="DEF"; if($lang=='RU') { $months = array ('Январь', 'Февраль', 'Март', 'Апрель', 'Май', 'Июнь', 'Июль', 'Август', 'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь'); }elseif($lang=='FR') { $months = array ('Janvier', 'Febrier', 'Mars', 'Avril', 'Mai', 'Juin', 'Juillet', 'Août', 'Septembre', 'Octobre', 'Novembre', 'Decembre'); }elseif($lang=='INT') { $months = array ('01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12'); }else { $months=array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'); } $r=""; $ry=""; $rm=""; $rd=""; if($defoult=='no' || empty($defoult) || $defoult===FALSE) $defoult="no"; if($defoult<>'no') { $m=(int)substr($defoult, 5, 2); $d=(int)substr($defoult, 8, 2); $y=(int)substr($defoult, 0, 4); if($m<=0) $m=date("m"); if($d<=0) $d=date("d"); if($y<=1900) $y=date("Y"); }; // echo "$y-$m-$d"; $cy=date("Y"); if($js) $dim=date("t", mktime(0, 0, 0, $m, $d, $y)); else $dim=31; if($js==1) { $aab=0; if($defoult=='no') $aab=1; $r.=" "; } $rm.="\r\n"; $ry.="\r\n"; for($i=1; $i<=$dim; $i++) $rd.="\r\n"; $rd.=""; for($i=$cy-$delta2; $i<=$cy+$delta; $i++) $ry.="\r\n"; $ry.=""; $r.="
\r\n"; if($typem[1]=="Y") $r.=$ry; if($typem[1]=="D") $r.=$rd; if($typem[1]=="M") $r.=$rm; $r.="$separator\r\n"; if($typem[2]=="Y") $r.=$ry; if($typem[2]=="D") $r.=$rd; if($typem[2]=="M") $r.=$rm; $r.="$separator\r\n"; if($typem[3]=="Y") $r.=$ry; if($typem[3]=="D") $r.=$rd; if($typem[3]=="M") $r.=$rm; $r.="
"; return $r; } //возвращет дату в формате YYY-DD-MM или FALSE //name - имя, которобе было задано для GenerateDateInput //gl - глобальная переменная, ответственной за принимаемое значеие ($_GET, $_POST, $_COOKIE) //renext - конвертировать ли переполнение в днях в след месяц и тп. (2004-01-32 -> 2004-02-01) function GetDateFromGenerateDateInput($name, $gl, $renext=0) { if(preg_match("/(^\d\d\d\d\-\d\d-\d\d$)/", $gl[$name], $ret)) return $ret[1]; $y=(int)($gl[$name."_year"]); $m=(int)($gl[$name."_month"]); $d=(int)($gl[$name."_day"]); if($y<=0) return FALSE; if($m<=0) return FALSE; if($d<=0) return FALSE; if(renext) return date("Y-m-d", mktime(0, 0, 0, $m, $d, $y)); return sprintf("%04d-%02d-%02d", ($y>9999)?9999:$y, ($m>99)?99:$m, ($d>99)?99:$d); } function navigator2($current, $count, $maxpages, $action='?page=[*page*]', $leftall='', $rightall='', $leftcur='', $rightcur='', $alla='', $navcenter="") { $r=""; $min=$current - $count; if($min < 1) $min=1; $max=$current+$count; if($max > $maxpages) $max=$maxpages; for($i=$min; $i<$current; $i++) { $p1=$action; if($i==1) { $p1=preg_replace("/\(\*(.*)\*\)/", "", $action); }; $p1=str_replace("[*page*]", $i, $p1); $p1=str_replace("(*", "", $p1); $p1=str_replace("*)", "", $p1); $r.=" $leftall$i$rightall"; if($i<$max) $r.=$navcenter; } $r.=" $leftcur$i$rightcur"; if($current<$max) $r.=$navcenter; for($i=$current+1; $i<=$max; $i++) { $p1=$action; if($i==1) { $p1=preg_replace("/\(\*(.*)\*\)/", "", $action); }; $p1=str_replace("[*page*]", $i, $p1); $p1=str_replace("(*", "", $p1); $p1=str_replace("*)", "", $p1); $r.=" $leftall$i$rightall"; if($i<$max) $r.=$navcenter; } return $r; } function returnorderstatuslist($name, $def, $all=0) { $a=""; if($all) { $a="