include_once('init.php');include_once('header.php'); $FSM=4; $searchmode=getpar('searchmode'); $savesearchas=getpar('savesearchas'); if ($searchmode==='RESET') { // reset search form unset($_SESSION['currenttype']); unset($_SESSION['currentproject']); unset($_SESSION['s_json1']); unset($_SESSION['s_json2']); $_SESSION['s_op']='AND'; unset($_SESSION['s_usr']); unset($_SESSION['s_all']); unset($_SESSION['s_id']); unset($_SESSION['s_fn']); for ($fn=1;$fn<=$FSM;$fn++) { unset($_SESSION["s_key$fn"]); unset($_SESSION["s_field$fn"]); $_SESSION["s_fieldop$fn"]='AND'; } $_SESSION['currentoffset']=0; header("Location: /search");exit; } $pid=getpar('pid'); if (PM("/^\d+$/",$pid)) { // load search form from prefs $S=loadprefs($pid,'search'); for ($fn=1;$fn<=$FSM;$fn++) { $_POST["s_key$fn"] =$S['s_key'][$fn]; $_POST["s_field$fn"] =$S['s_field'][$fn]; $_POST["s_fieldop$fn"] =$S['s_fieldop'][$fn]; } foreach (array('type','project','s_op','s_json1','s_json2','s_usr','s_all','s_id','s_fn') as $val) { $_POST[$val]=$S[$val]; } $TYPE=$S['type']; $PROJECT=$S['project']; } if (!isset($_SESSION['currenttype'])) $_SESSION['currenttype']='ALL'; if (!PM("/^\s*$/",getpar('type'))) $_SESSION['currenttype']=SU(getpar('type')); $TYPE=$_SESSION['currenttype']; if (!isset($_SESSION['currentproject'])) $_SESSION['currentproject']='ALL'; if (!PM("/^\s*$/",getpar('project'))) $_SESSION['currentproject']=getpar('project'); $PROJECT=$_SESSION['currentproject']; foreach (array('s_op','s_json1','s_json2','s_usr','s_all','s_id','s_fn') as $val) { if (isset($_POST[$val])) $_SESSION[$val]=getpar($val); $S[$val]=$_SESSION[$val]; } if ($S['s_op']!=='AND' && $S['s_op']!=='OR') $S['s_op']='AND'; for ($fn=1;$fn<=$FSM;$fn++) { if (isset($_POST["s_key$fn"])) $_SESSION["s_key$fn"]=getpar("s_key$fn"); $S['s_key'][$fn]=$_SESSION["s_key$fn"]; if (isset($_POST["s_field$fn"])) $_SESSION["s_field$fn"]=getpar("s_field$fn"); $S['s_field'][$fn]=$_SESSION["s_field$fn"]; if (isset($_POST["s_fieldop$fn"])) $_SESSION["s_fieldop$fn"]=getpar("s_fieldop$fn"); $S['s_fieldop'][$fn]=$_SESSION["s_fieldop$fn"]; if (PM("/^\s*$/",$S['s_field'][$fn])) $S['s_field'][$fn]=$DEFSEARCHFIELD[$fn]; } if (!PM("/^\s*$/",$savesearchas)) { $S['project']=$PROJECT; $S['type']=$TYPE; saveprefs($savesearchas,$S,'search'); } $MS=''; $res=mydo($DB,"SELECT * FROM prefs WHERE user='$USER' ORDER BY name",1); while($row = mysqli_fetch_assoc($res)) { $MS.="".$row['name'].", "; } $MS=PR("/,\s*$/","",$MS); foreach($TYPES as $type) { foreach($FMAP[$type] as $n => $f) { $ALLFIELDS[$f[0]]=1; for ($fn=1;$fn<=$FSM;$fn++) { if ($f[0]===$S['s_field'][$fn] && !PM("/^\s*$/",$S['s_key'][$fn]) ) { $fieldsql[$fn].="(f$n LIKE '%".$S['s_key'][$fn]."%' AND type='$type') OR "; } } } } ksort($ALLFIELDS); for ($n=1;$n<=$FSM;$n++) { if (!PM("/^\s*$/",$fieldsql[$n]) ) $fieldsql[$n]="(".PR("/\s*OR\s*$/","",$fieldsql[$n]).")"; } $page=getpar('page'); if (PM("/^\s*$/",$_SESSION['currentoffset'])) $_SESSION['currentoffset']=0; if ($page==='NEXT') $_SESSION['currentoffset']+=100; else if ($page==='PREV') $_SESSION['currentoffset']-=100; if (getpar('postform')==1) { header("Location: /search"); exit; } $postsql=""; if (!PM("/^ALL$/",$TYPE)) $postsql.=" AND UPPER(type)='$TYPE'"; if (!PM("/^ALL$/",$PROJECT)) $postsql.=" AND project=".$PROJECTNAMES[$PROJECT]; $postsql.=' ORDER BY cat.catid DESC'; $selextra=""; $searchsql=""; $j1=preg_replace('/([\=\>\<])/', " $1 ", $S['s_json1']); $j1=preg_replace('/\>(\s+)\=/', ">=", $j1); $j1=preg_replace('/\<(\s+)\=/', ">=", $j1); $j1=preg_replace('/\s+/', " ", $j1); $selj1=""; $searchj1=""; if (preg_match("/^([^\s]+)\s+([\<\>\=]+)\s+([\d\.]+)/",$j1,$M)) { if ($M[2]==='=' || $M[2]==='<' || $M[2]==='>' || $M[2]==='<=' || $M[2]==='>=') { $selj1=",json_value(jsondata, '\$.$M[1]') as s_json1"; $searchj1="(json_value(jsondata, '\$.$M[1]')) $M[2] $M[3]"; } } if (!PM("/^\s*$/",$S['s_json1']) && $searchj1==='') { $selj1=",json_extract(jsondata, '\$.".$S['s_json1']."') as s_json1"; $searchj1="(json_extract(jsondata, '\$.".$S['s_json1']."') IS NOT NULL)"; } $j2=preg_replace('/([\=\>\<])/', " $1 ", $S['s_json2']); $j2=preg_replace('/\>(\s+)\=/', ">=", $j2); $j2=preg_replace('/\<(\s+)\=/', ">=", $j2); $j2=preg_replace('/\s+/', " ", $j2); $selj2=""; $searchj2=""; if (preg_match("/^([^\s]+)\s+([\<\>\=]+)\s+([\d\.]+)/",$j2,$M)) { if ($M[2]==='=' || $M[2]==='<' || $M[2]==='>' || $M[2]==='<=' || $M[2]==='>=') { $selj2=",json_value(jsondata, '\$.$M[1]') as s_json2"; $searchj2="(json_value(jsondata, '\$.$M[1]')) $M[2] $M[3]"; } } if (!PM("/^\s*$/",$S['s_json2']) && $searchj2==='') { $selj2=",json_extract(jsondata, '\$.".$S['s_json2']."') as s_json2"; $searchj2="(json_extract(jsondata, '\$.".$S['s_json2']."') IS NOT NULL)"; } if (!PM("/^\s*$/",$selj1)) $selextra.=$selj1; if (!PM("/^\s*$/",$selj2)) $selextra.=$selj2; $jmode=""; if (!PM("/^\s*$/",$searchj1) && !PM("/^\s*$/",$searchj2)) { $searchj="($searchj1 ".$S['s_op']." $searchj2)"; $jmode="json12"; } elseif (!PM("/^\s*$/",$searchj1)) { $searchj="$searchj1"; $jmode="json1"; } elseif (!PM("/^\s*$/",$searchj2)) { $searchj="$searchj2"; $jmode="json2"; } if (!PM("/^\s*$/",$searchj)) $searchsql.=" AND ($searchj)"; if (!PM("/^\s*$/",$S['s_usr'])) { $searchsql.=" AND (user='".$S['s_usr']."')"; } if (!PM("/^\s*$/",$S['s_all'])) { $tmp=""; for ($i=0;$i<$FMAX;$i++) $tmp.="f$i LIKE '%".$S['s_all']."%' OR "; $tmp=PR("/\s*OR\s*$/","",$tmp); $searchsql.=" AND ($tmp)"; } if (!PM("/^\s*$/",$S['s_id'])) { if (PM("/^\s*\d+\s*$/",$S['s_id'])) { $searchsql.=" AND (catid=".$S['s_id']." OR typeid=".$S['s_id'].")"; } else if (preg_match("/^\s*([A-Z])\s*(\d+)\s*$/",SU($S['s_id']),$M)) { $searchsql.=" AND (catid=".catidfromid($M[1].$M[2]).")"; } } $FX=''; for ($n=1;$n<$FSM;$n++) { if ($S['s_fieldop'][$n]==='AND') $FX.="1"; else $FX.="0"; } for ($n=1;$n<=$FSM;$n++) if (!PM("/^\s*$/",$fieldsql[$n])) $fieldsearch.="F$n {$S['s_fieldop'][$n]} "; $fieldsearch=PR("/\s*AND\s*$/","",$fieldsearch); $fieldsearch=PR("/\s*OR\s*$/","",$fieldsearch); for ($n=$FSM-1;$n>=1;$n--) { $pat=""; for ($j=1;$j<=$n;$j++) $pat.="F\d OR "; $pat.="F\d"; $fieldsearch=PR("/($pat)/","($1)",$fieldsearch); } for ($n=1;$n<=$FSM;$n++) $fieldsearch=PR("/(F$n)/",$fieldsql[$n],$fieldsearch); if (!PM("/^\s*$/",$fieldsearch)) $searchsql.=" AND ($fieldsearch)"; if (PM("/^\s*$/",$S['s_fn'])) { $sql="SELECT count(*) AS c FROM cat WHERE $ACCESSQL $searchsql $postsql"; } else { $searchsql.=" AND (filename like '%".$S['s_fn']."%')"; $sql="SELECT count(*) AS c FROM cat,docs WHERE cat.catid=docs.catid AND docs.rm=0 AND $ACCESSQL ". "$searchsql $postsql"; } $res=mydo($DB,$sql); $row = mysqli_fetch_assoc($res); // << hä $numrows=$row['c']; if ($_SESSION['currentoffset']<0) $_SESSION['currentoffset']=0; if ($_SESSION['currentoffset']>$numrows) $_SESSION['currentoffset']=0; if (PM("/^\s*$/",$S['s_fn'])) { $sql="SELECT *$selextra FROM cat WHERE $ACCESSQL $searchsql $postsql LIMIT ". $_SESSION['currentoffset'].",100"; } else { $sql="SELECT *$selextra FROM cat,docs WHERE cat.catid=docs.catid AND docs.rm=0 AND $ACCESSQL ". "$searchsql $postsql LIMIT ".$_SESSION['currentoffset'].",100"; } $res=mydo($DB,$sql); $pof=$_SESSION['currentoffset']/100+1; $nop=0; if ($numrows>0) $nop=intval($numrows/100)+1; subheader("$numrows Results, Page $pof of $nop"); ?>
Id | Filename | Action | ||||||
---|---|---|---|---|---|---|---|---|
Id | Project | Action | ||||||
Id | Project | if ($jmode==='json12') { ?>=$S['s_json1']?> | =$S['s_json2']?> | } ?> if ($jmode==='json1') { ?>=$S['s_json1']?> | } ?> if ($jmode==='json2') { ?>=$S['s_json2']?> | } ?>Action |
function fieldsearch($fn) { global $FSM,$ALLFIELDS,$S; // ------------------------------ search field macro ?>