<? /*

Search script for Intellect Board 2 Project

(C) 2004, 2005, XXXX Pro, United Open Project
Visit us online: http://intboard.ru

*/

if (!$IBOARD) die("Hack attempt!");

function view() {
  $starttime=0;
  $stoptime=$GLOBALS['curtime'];
  big_search_form("",$starttime,$stoptime);
}

function result() {
  $link=$GLOBALS['link'];
  $order=getvar('o');
  if (!$order) $order="relevancy";
  $nogrp=getvar("nogrp");
  $start=getvar('st');
  $id=getvar('srid');
  
  $sql="SELECT COUNT(*) FROM ".$GLOBALS['DBprefix']."SearchResult WHERE srid=\"$id\"";
  $res=db_query($sql,$link);
  list($count)=db_fetch_row($res);
  db_free_result($res);
  
  $sdata=$GLOBALS['sdata'];
  $mode=$sdata['sr_mode'];
  $_POST['hl']=$sdata['sr_text'];

  $pageref="index.php?m=search&a=result&srid=$id&nogrp=$nogrp&o=$order";
  $pages=build_pages($count,$start,$GLOBALS['inuser']['u_mperpage'],$pageref);
  if ($start!="all") $limit = " LIMIT ".intval($start).", ".intval($GLOBALS['inuser']['u_mperpage']);
  
  search_result_start($pages);
  if ($mode==0) { //output posts
    if (!$nogrp) $order="f_sortfield, ".$order;
    $sql = "SELECT p.*,t.*,f.* FROM ".$GLOBALS['DBprefix']."SearchResult sr, ".$GLOBALS['DBprefix']."Post p, ".$GLOBALS['DBprefix']."Topic t, ".$GLOBALS['DBprefix']."Forum f ".
    "LEFT JOIN ".$GLOBALS['DBprefix']."UserAccess ua ON (ua.uid=".$GLOBALS['inuserid']." AND ua.fid=f_id) ". 
    "WHERE srid=\"$id\" AND srpid=p_id AND p_tid=t_id AND f_id=t_fid AND IFNULL(ua_level,".$GLOBALS['inuserlevel'].")>=f_lread ".
    "ORDER BY $order $limit";
    $res=db_query($sql,$link);
    $oldfid=0;
    while ($entry=db_fetch_array($res)) {
      if ($entry['f_id']!=$oldfid && !$nogrp) {
        search_result_forum($entry);
        $oldfid = $entry['f_id'];
      }
      search_result_post($entry);
    }
  }
  else {  // output topics
    if (!$nogrp) $order="f_sortfield, ".$order;
    $sql = "SELECT p.*,t.*,f.* FROM ".$GLOBALS['DBprefix']."SearchResult sr, ".$GLOBALS['DBprefix']."Post p, ".$GLOBALS['DBprefix']."Topic t, ".$GLOBALS['DBprefix']."Forum f ".
    "LEFT JOIN ".$GLOBALS['DBprefix']."UserAccess ua ON (ua.uid=".$GLOBALS['inuserid']." AND ua.fid=f_id) ". 
    "WHERE srid=\"$id\" AND srpid=t_id AND f_id=t_fid AND p_tid=t_id AND p_id=t__startpostid AND  IFNULL(ua_level,".$GLOBALS['inuserlevel'].")>=f_lread ".
    "ORDER BY $order $limit";
    $res=db_query($sql,$link);
    $oldfid=0;
    while ($entry=db_fetch_array($res)) {
      if ($entry['f_id']!=$oldfid && !$nogrp) {
        search_result_forum($entry);
        $oldfid = $entry['f_id'];
      }
      search_result_topic($entry);
    }       
  }
  if (db_num_rows($res)==0) search_not_found();
  search_result_end();  
  big_search_form($sdata['sr_text'],$sdata['sr_starttime'],$sdata['sr_endtime'],$sdata['sr_type'],$sdata['sr_mode']);  
}

function do_post() {
  $link=$GLOBALS['link'];
  
  $text = getvar('text');
  if (getvar("res")=='topic') $mode="1";
  else $mode="0";
  $forums=array();
  $forums=$_POST['fs'];
  if (!$forums) $forums=$_GET['fs'];
  if (is_array($forums)) foreach ($forums as $curforum=>$curvalue) {
    if ($sqldata) $sqldata .= " OR ";
    $sqldata .= "f_id=\"".db_slashes($curforum)."\"";
    if ($flist) $flist.="&";
    $flist.="fs[$curforum]=1";
  }
  elseif ($forums=="all") { $sqldata="1"; $flist="fs=all"; }
  else error(MSG_search_noforums);
  
  $starttime=get_date_field("start");
  if (($endtime=get_date_field("end"))==-1) $endtime=$GLOBALS['curtime'];
  else $endtime=$endtime+23*60*60+59*60+59;
  
  $sql = "INSERT INTO ".$GLOBALS['DBprefix']."Search (sr_text,sr_mode,sr_type,sr_starttime,sr_endtime) VALUES (\"$text\",$mode,0,$starttime,$endtime)";
  $res=db_query($sql,$link);
  $id=db_insert_id($res);
  if ($mode=="0") {
    $sql = "INSERT INTO ".$GLOBALS['DBprefix']."SearchResult (srid,srpid,relevancy) SELECT $id,p_id, MATCH(p.p_text,p.p_title) AGAINST(\"$text\") FROM ".$GLOBALS['DBprefix']."Forum f, ".$GLOBALS['DBprefix']."Topic t, ".$GLOBALS['DBprefix']."Post p ".
    "WHERE (MATCH(p.p_text,p.p_title) AGAINST(\"$text\")>0) AND ($sqldata) AND p_tid=t_id AND t_fid=f_id AND p__premoderate=0 AND p__time>=\"$starttime\" AND p__time<=\"$endtime\"";
    $res=db_query($sql,$link);
  }
  else {
    $sql = "INSERT INTO ".$GLOBALS['DBprefix']."SearchResult (srid,srpid,relevancy) SELECT DISTINCT $id,t_id, MATCH(p.p_text,p.p_title) AGAINST(\"$text\") FROM ".$GLOBALS['DBprefix']."Forum f, ".$GLOBALS['DBprefix']."Topic t, ".$GLOBALS['DBprefix']."Post p ".
    "WHERE (MATCH(p.p_text,p.p_title) AGAINST(\"$text\")>0) AND ($sqldata) AND p_tid=t_id AND t_fid=f_id AND p__premoderate=0 AND p__time>=\"$starttime\" AND p__time<=\"$endtime\"";
    $res=db_query($sql,$link);    
  }
  
  $GLOBALS['refpage']="index.php?m=search&a=result&srid=$id&o=".getvar('o')."&nogrp=".getvar('nogrp');
  message(MSG_search_processing,1);
}

function do_topic() {
  $link=$GLOBALS['link'];
  
  $text = getvar('text');
  $forums=array();
  $forums=$_POST['fs'];
  if (!$forums) $forums=$_GET['fs'];
  if (is_array($forums)) foreach ($forums as $curforum=>$curvalue) {
    if ($sqldata) $sqldata .= " OR ";
    $sqldata .= "f_id=\"".db_slashes($curforum)."\"";
    if ($flist) $flist.="&";
    $flist.="fs[$curforum]=1";
  }
  elseif ($forums=="all") { $sqldata="1"; $flist="fs=all"; }
  else error(MSG_search_noforums);
  
  $starttime=get_date_field("start");
  if (($endtime=get_date_field("end"))==-1) $endtime=$GLOBALS['curtime'];
  else $endtime=$endtime+23*60*60+59*60+59;
  
  $sql = "INSERT INTO ".$GLOBALS['DBprefix']."Search (sr_text,sr_mode,sr_type,sr_starttime,sr_endtime) VALUES (\"$text\",1,1,$starttime,$endtime)";
  $res=db_query($sql,$link);
  $id=db_insert_id($res);
  $sql = "INSERT INTO ".$GLOBALS['DBprefix']."SearchResult (srid,srpid,relevancy) SELECT $id,t_id, MATCH(t.t_title,t.t_descr) AGAINST(\"$text\") FROM ".$GLOBALS['DBprefix']."Forum f, ".$GLOBALS['DBprefix']."Topic t, ".$GLOBALS['DBprefix']."Post p ".
  "WHERE (MATCH(t.t_title,t.t_descr) AGAINST(\"$text\")>0) AND ($sqldata) AND t_fid=f_id AND t__pcount>0 AND p_tid=t_id AND p_id=t__startpostid AND p__time>=\"$starttime\" AND p__time<=\"$endtime\"";
  $res=db_query($sql,$link);    
  
  $GLOBALS['refpage']="index.php?m=search&a=result&srid=$id&o=".getvar('o')."&nogrp=".getvar('nogrp');
  message(MSG_search_processing,1);
}

function do_user() {
  $link=$GLOBALS['link'];
  
  $text = getvar('text');
  if (getvar("res")=='topic') $mode="1";
  else $mode="0";
  $forums=array();
  $forums=$_POST['fs'];
  if (!$forums) $forums=$_GET['fs'];
  if (is_array($forums)) foreach ($forums as $curforum=>$curvalue) {
    if ($sqldata) $sqldata .= " OR ";
    $sqldata .= "f_id=\"".db_slashes($curforum)."\"";
    if ($flist) $flist.="&";
    $flist.="fs[$curforum]=1";
  }
  elseif ($forums=="all") { $sqldata="1"; $flist="fs=all"; }
  else error(MSG_search_noforums);
  
  $starttime=get_date_field("start");
  if (($endtime=get_date_field("end"))==-1) $endtime=$GLOBALS['curtime'];  
  else $endtime=$endtime+23*60*60+59*60+59;
  $sql = "INSERT INTO ".$GLOBALS['DBprefix']."Search (sr_text,sr_mode,sr_type,sr_starttime,sr_endtime) VALUES (\"$text\",$mode,2,$starttime,$endtime)";
  $res=db_query($sql,$link);
  $id=db_insert_id($res);
  if ($mode=="0") {  
    $sql = "INSERT INTO ".$GLOBALS['DBprefix']."SearchResult (srid,srpid,relevancy) SELECT $id,p_id, 1 FROM ".$GLOBALS['DBprefix']."Forum f, ".$GLOBALS['DBprefix']."Topic t, ".$GLOBALS['DBprefix']."Post p ".
    "WHERE p_uname LIKE \"$text\" AND p_tid=t_id AND ($sqldata) AND t_fid=f_id AND p__premoderate=0 AND p__time>=\"$starttime\" AND p__time<=\"$endtime\"";
    $res=db_query($sql,$link);
  }
  else {
    $sql = "INSERT INTO ".$GLOBALS['DBprefix']."SearchResult (srid,srpid,relevancy) SELECT DISTINCT $id,t_id, 1 FROM ".$GLOBALS['DBprefix']."Forum f, ".$GLOBALS['DBprefix']."Topic t, ".$GLOBALS['DBprefix']."Post p ".
    "WHERE p_uname LIKE \"$text\" AND p_tid=t_id AND ($sqldata) AND t_fid=f_id AND p__premoderate=0 AND p__time>=\"$starttime\" AND p__time<=\"$endtime\"";
    $res=db_query($sql,$link);    
  }
  
  $GLOBALS['refpage']="index.php?m=search&a=result&srid=$id&o=".getvar('o')."&nogrp=".getvar('nogrp');
  message(MSG_search_processing,1);
}

function do_usertopic() {
  $link=$GLOBALS['link'];
  
  $text = getvar('text');
  $forums=array();
  $forums=$_POST['fs'];
  if (!$forums) $forums=$_GET['fs'];
  if (is_array($forums)) foreach ($forums as $curforum=>$curvalue) {
    if ($sqldata) $sqldata .= " OR ";
    $sqldata .= "f_id=\"".db_slashes($curforum)."\"";
    if ($flist) $flist.="&";
    $flist.="fs[$curforum]=1";
  }
  elseif ($forums=="all") { $sqldata="1"; $flist="fs=all"; }
  else error(MSG_search_noforums);
  
  $starttime=get_date_field("start");
  if (($endtime=get_date_field("end"))==-1) $endtime=$GLOBALS['curtime'];
  else $endtime=$endtime+23*60*60+59*60+59;
  $sql = "INSERT INTO ".$GLOBALS['DBprefix']."Search (sr_text,sr_mode,sr_type,sr_starttime,sr_endtime) VALUES (\"$text\",1,3,$starttime,$endtime)";
  $res=db_query($sql,$link);
  $id=db_insert_id($res);
  $sql = "INSERT INTO ".$GLOBALS['DBprefix']."SearchResult (srid,srpid,relevancy) SELECT $id,t_id, 1 FROM ".$GLOBALS['DBprefix']."Forum f, ".$GLOBALS['DBprefix']."Topic t, ".$GLOBALS['DBprefix']."Post p ".
  "WHERE p_uname LIKE \"$text\" AND p_uid>3 AND p_tid=t_id AND t__startpostid=p_id AND ($sqldata) AND t_fid=f_id AND p__premoderate=0 AND p__time>=\"$starttime\" AND p__time<=\"$endtime\"";
  $res=db_query($sql,$link);    
  
  $GLOBALS['refpage']="index.php?m=search&a=result&srid=$id&o=".getvar('o')."&nogrp=".getvar('nogrp');
  message(MSG_search_processing,1);
}

function locations($locations) {
  if ($GLOBALS['action']=="view") array_push($locations,MSG_search);
  elseif ($GLOBALS['action']=="result") {
    $link=$GLOBALS['link'];
    $id=getvar('srid');
    $sql = "SELECT * FROM ".$GLOBALS['DBprefix']."Search WHERE sr_id=\"$id\"";
    $res=db_query($sql,$link);
    $GLOBALS['sdata']=db_fetch_array($res);
    db_free_result($res);
    $text=htmlspecialchars($GLOBALS['sdata']['sr_text']);
    
    if ($GLOBALS['sdata']['sr_type']==0) array_push($locations,MSG_search_posts." \"$text\"");
    elseif ($GLOBALS['sdata']['sr_type']==1) array_push($locations,MSG_search_topics." \"$text\"");    
    elseif ($GLOBALS['sdata']['sr_type']==2) array_push($locations,MSG_search_user." $text");
    elseif ($GLOBALS['sdata']['sr_type']==3) array_push($locations,MSG_search_usertopic." $text");    
  }
  return $locations;
}
