<?php
/*Alexus finder 3.0
*Поисковая система на основе поиска от wappc.ru
*Оффсайт скрипта: http://youjob.org.ua
*Автор скрипта: Васильев Александр (Alexus)
*Автор библиотеки wappc: Denvas
*Дата: 29 марта 2009 года
*Страница: func.php - страница функций поиска.
*-----------------------------------------------------
*СКРИПТ ЗАПРЕЩЕНО ПРОДАВАТЬ!!!
*/
//начальная инициализация
define("TMPL","%");
$headercode="";
$curpath=explode("?",isset($_SERVER["REQUEST_URI"])?$_SERVER["REQUEST_URI"]:"/");
$curfile=str_replace("\\","/",$curpath[0]);
$curtemp=explode("/",rtrim(str_replace("\\","/",$curfile),"/"));
if(strpos($curtemp[count($curtemp)-1],".")!==false)unset($curtemp[count($curtemp)-1]);
$curpath=join("/",$curtemp)."/";
//==================================================//
function Relocation($url,$code="",$timeupdate=1){
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); //Дата в прошлом
header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
header("Pragma: no-cache"); // HTTP/1.0
header("Last-Modified: ".date("r", time()));//обновлено сейчас
header("Content-type: text/html; charset=utf-8");
print "<?xml version=\"1.0\" encoding=\"UTF-8\"?><!DOCTYPE html PUBLIC \"-//WAPFORUM//DTD XHTML Mobile 1.0//EN\" \"http://www.wapforum.org/DTD/xhtml-mobile10.dtd\"><html xmlns=\"http://www.w3.org/1999/xhtml\"><head><title>Loading...</title><meta http-equiv=\"Content-Type\" content=\"application/vnd.wap.xhtml+xml; charset=utf-8\"/><meta http-equiv=\"refresh\" content=\"".$timeupdate.";URL=".$url."\"/></head><body><div class=\"relocation\"><a href='".$url."'>Идет загрузка...</a>".$code."</div></body></html>";
exit;
};//function Relocation($url)
//==================================================//
/*
Отображение переключения между страницами в таблицах
*/
function ShowPage($name="",$newrowpage=0){
global $nrowpage,$rows,$page,$template,$wapver;
if(!$newrowpage)$newrowpage=$nrowpage;
if($newrowpage<1)$newrowpage=1;//не может быть меньше 1 записи
$code="";
$url=QueryParam(array("p".$name),0,"","",0);
$urlpage=QueryParam(array("p".$name))."p".$name."=";
if($rows>$newrowpage){
//определение количества страниц
$npage=(int)($rows/$newrowpage);if($npage*$newrowpage<$rows)$npage++;
if($page>$npage)$page=$npage;
//переход на следующую
if($npage>$page)
$pagenext=strtr("<a href='%url%'>Дальше</a>",array(TMPL."url".TMPL=>$urlpage.($page+1),TMPL."page".TMPL=>$page+1));
else
$pagenext="";
//переход на последнюю
if($npage>$page+1)
$pageend=strtr("<nobr>...[<a href='%url%'>%page%</a>]</nobr>",array(TMPL."url".TMPL=>$urlpage.$npage,TMPL."page".TMPL=>$npage));
else
$pageend="";
//переход на предыдущую
if($page>1)
$pageprev=strtr("<a href='%url%'><-</a><br/>",array(TMPL."url".TMPL=>$urlpage.($page-1),TMPL."page".TMPL=>$page-1));
else
$pageprev="";
//переход на первую
if($page>2)
$pagebegin=strtr("<nobr>[<a href='%url%'>%page%</a>]...</nobr>",array(TMPL."url".TMPL=>$urlpage."1",TMPL."page".TMPL=>1));
else
$pagebegin="";
//выбор из списка страниц (автоматически добавляется первая и последняя)
$start=$page-5;if($start<3)$start=1;
$stop=$page+5;if($stop>$npage-2)$stop=$npage;
$pagesel="";
for($i=$start;$i<=$stop;$i++){
if($i==$page)//текущая страница
$pagesel.=strtr("<b>[%page%]</b> ",array(TMPL."url".TMPL=>$urlpage.$i,TMPL."page".TMPL=>$i));
else//не текущая страница
$pagesel.=strtr("[<a href='%url%'>%page%</a>] ",array(TMPL."url".TMPL=>($i==1)?$url:($urlpage.$i),TMPL."page".TMPL=>$i));
};//for
if($start>1)$pagesel=$pagebegin.$pagesel;
if($stop<$npage)$pagesel.=$pageend;
$code=strtr("Стр. %page% из %npage% %pagenext%<br/>%code%<br/>",array(TMPL."page".TMPL=>$page,TMPL."npage".TMPL=>$npage,TMPL."pagenext".TMPL=>$pagenext,TMPL."pageprev".TMPL=>$pageprev,TMPL."pageend".TMPL=>$pageend,TMPL."pagebegin".TMPL=>$pagebegin,TMPL."code".TMPL=>$pagesel));
};//if($rows>$newrowpage)
return $code;
};//function ShowPage
//==================================================//
function GetPage(){
global $nrowpage, $rows, $page;
if(empty($rows))return array(0,0);
if(empty($_GET["p"]))$page=1; else $page=(int)$_GET["p"];
$start=($page-1)*$nrowpage;
if($start<0)$start=0;if($start>$rows-1)$start=$rows-1;
$stop=$start+$nrowpage;if($stop>$rows)$stop=$rows;
return array($start,$stop);
};
//==================================================//
/*
Возвращает путь + qet запрос
*/
function QueryParam($paramname,$invert=false,$newfile="",$querystr="",$addparam=1){
global $query_rnd,$queryneed,$curfile,$curpath;
if(strlen($querystr)==0)$querystr=@$_SERVER['QUERY_STRING'];
if(!is_array($paramname))$paramname=array($paramname);
$paramname[]="rnd";
$str="?";
//заменить некоторые символы, чтобы избежать межсайтового скриптинга, в функции allparam стоит полная защита от таких символов
$querystr=strtr($querystr,array("&"=>"&","<"=>"\%3C",">"=>"\%3E","'"=>"\%27","\""=>"\%22"));
$arr=explode("&",$querystr);$countarr=count($arr);
$nparamname=count($paramname);
for($i=0;$i<$countarr;$i++){
if(empty($arr[$i]))continue;
if(strpos($arr[$i],"form_")===0)continue;//вывод раскрытой формы тоже всегда отрезать
if(strpos($arr[$i],"_")===0)continue;//все, что начинается с _ всегда отрезать
$flag=$invert;
for($j=0;$j<$nparamname;$j++){
if(strpos($arr[$i],$paramname[$j]."=")===0){$flag=!$invert;break;};
};
if($flag)continue;
$str.=$arr[$i]."&";
};//for
//эта фишка со случайными данными
if(!empty($query_rnd))$str.="rnd=".mt_rand(0,10000)."&";
//будут ли добавляться еще параметры
if(!$addparam)$str=rtrim($str,"?&");
//формирование названия файла
if($newfile){
//достроить путь до полного
if(($newfile[0]!='/')&&($newfile[0]!='.'))$newfile=$curpath.$newfile;
}
else
$newfile=$curfile;
//вернем готовый урл
return $newfile.str_replace("&","&",$str);
};//function QueryParam($paramname,$querystr)
//==================================================//
/*
Принимает: $content - строка, в которой искать,
$left - ограничитель слева,
$right - ограничитель справа
$edit - перемещать ли $content на конец найденных данных
Действие: Находит первое включение $left и $right, вырезая все, что между ними
Возвращает: вырезанную часть
*/
function getsubstr(&$content,$left,$right,$edit=false,$def=""){
if($left)
$startpos=strpos($content,$left);
else
$startpos=0;
if(!($startpos===false)){
$startpos+=strlen($left);
if($right)
$stoppos=strpos($content,$right,$startpos);
else
$stoppos=strlen($content);
if($stoppos>0){
$str=substr($content,$startpos,$stoppos-$startpos);
if($edit)$content=substr($content,$stoppos);
return $str;
};
};
if($edit)$content="";
return $def;
};
//==================================================//
/*
Распарсивание данных
*/
function ParseKeyVal($content,$repl=array()){
$ncontent=count($content);$name="";
for($j=1;$j<$ncontent;$j++){
//$line=trim($content[$j]);
//if(empty($line))continue;
$line=$content[$j];
$pos=strpos($line,":==");
if($pos===false){
$repl[$name].=$line;
continue;
};
$name=substr($line,0,$pos);
$value=substr($line,$pos+3);
$repl[$name]=$value;
};//for
reset($repl);
while(list($key,$val)=each($repl))$repl[$key]=rtrim($val,"\n\r");
return $repl;
};
//==================================================//
/*
Замена переменных
*/
function ReplaceContent(&$code,$namefile,$replurl=1){
global $replaceformcontent, $globalrepl, $path_data;
if(empty($replaceformcontent)){
if(!empty($namefile)){
$replaceformcontent=ParseKeyVal(file($path_data."/".$namefile.".txt"));
};//if
$replaceformcontent=array_merge($replaceformcontent,$globalrepl);
};//if(empty($replaceform))
//замена переменных, поддержка сложных конструкций вплоть до phpBB
reset($replaceformcontent);
while(list($key,$val)=each($replaceformcontent)){
if(strlen($key)==0)continue;
if(strpos($key,TMPL.TMPL)!==false){
$key=explode(TMPL.TMPL,$key);
$nfind=count($key);$rep=100;
while($find=ParseReplace($code,$key)){
$repl=$globalrepl;
for($i=1;$i<$nfind;$i++){
$repl[TMPL.$i.TMPL]=$find[$i];
};
if(strlen($find[0])>0)
$code=strtr($code,array($find[0]=>strtr($val,$repl)));
$rep--;if($rep<0)break;
};//while
};//if
};//while(list($key,$val)=each($replaceformcontent))
if($replurl)
$code=replaceurl($code,$replaceformcontent);
else
$code=strtr($code,$replaceformcontent);
};//function ReplaceContent
//==================================================//
/*
Функция выбора данных для сложных замен типа BB кода
*/
function ParseReplace(&$content,$find){
$nfind=count($find);
$p=false;$search=array();
for($i=0;$i<$nfind;$i++){
if(strlen($find[$i])>0)$p=strpos($content,$find[$i],$p);
if($p===false)return array();
if($i>0)$search[$i]=substr($content,$pp,$p-$pp); else $pstart=$p;
$pp=$p+strlen($find[$i]);
};
$search[0]=substr($content,$pstart,$pp-$pstart);
return $search;
};
//==================================================//
function ShowForm($data,$ftitle,$action="",$method="post",$br="<br/>"){
$extform=array();
$rnd=mt_rand(1,100000);
$code="";$codeform="";
if(empty($action))$action=str_replace("&","&",@$_SERVER["REQUEST_URI"]);
if(strcmp($method,"get")==0){
$action=explode("?",$action);
$action=$action[0];
};
//для версии 2 и для компа
for($j=0;$j<count($data);$j++){
list($title,$name,$value,$type)=$data[$j];
if(strcmp($method,"post")==0)$codeform.="<input type='hidden' name='send' value='".$rnd."'/>";
$namei=$name;
$code.=($title)?($title."<br/>"):"";
if((strcmp($type,"text")==0)||(strcmp($type,"password")==0)){
$code.="<input name='".$namei."' type='".$type."' value='".$value."'/>".$br;
}
elseif(strcmp($type,"textarea")==0){
$code.="<textarea cols='35' rows='5' name='".$namei."'>".$value."</textarea>".$br;
}
elseif(strcmp($type,"select")==0){
$option=$data[$j][4];reset($option);
$code.="<select name='".$namei."'>";
while(list($key,$val)=each($option))$code.="<option value='".$key."'".((strcmp($key,$value)==0)?" selected='selected'":"").">".$val."</option>";
$code.="</select>".$br;
}
elseif(strcmp($type,"checkbox")==0){
$code.="<input type='checkbox' name='".$name."' value='1' ".($value?"checked='1'":"")."/>".$br;
}
elseif(strcmp($type,"hidden")==0){
$codeform.="<input type='hidden' name='".$name."' value='".$value."'/>";
}
elseif(strcmp($type,"show")==0){
if(strlen($value)>0)$code.=$value.$br;
}
elseif(strcmp($type,"file")==0){
$code.="<input name='".$name."' type='file' value=''/>".$br;
$extform["enctype"]="multipart/form-data";
};
};//for($j=0;$j<count($data);$j++)
$str="";while(list($key,$val)=each($extform))$str.=" ".$key."='".$val."'";
return "<form action='".$action."' method='".$method."' ".$str."><div>".$code.$codeform."<input type='submit' value='".$ftitle."'/></div></form>";
};
//==================================================//
/*
Скрытые гет параметры
*/
function HiddenParam($paramname=array(),$querystr=""){
$data=array();
if(strlen($querystr)==0)$querystr=$_SERVER['QUERY_STRING'];
if(!is_array($paramname))$paramname=array($paramname);
$querystr=str_replace("&","&",$querystr);
$arr=explode("&",$querystr);$countarr=count($arr);
for($i=0;$i<$countarr;$i++){
if(empty($arr[$i]))continue;
$flag=false;
for($j=0;$j<count($paramname);$j++)
if(strpos($arr[$i],$paramname[$j]."=")===0){$flag=true;break;}
if($flag)continue;
$appr=explode("=",$arr[$i]);
$data[]=array("",$appr[0],$appr[1],"hidden");
};//for
return $data;
};//function QueryParam($paramname,$querystr)
//==================================================//
?>