Просмотр файла func.php

Размер файла: 15.07Kb
<?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."'>&#x0418;&#x0434;&#x0435;&#x0442; &#x0437;&#x0430;&#x0433;&#x0440;&#x0443;&#x0437;&#x043A;&#x0430;...</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%'>&lt;-</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("&amp;"=>"&","<"=>"\%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("&","&amp;",$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("&","&amp;",@$_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("&amp;","&",$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)
//==================================================//
?>