summaryrefslogtreecommitdiffstats
path: root/library/Pbs/Search.php
diff options
context:
space:
mode:
Diffstat (limited to 'library/Pbs/Search.php')
-rw-r--r--library/Pbs/Search.php54
1 files changed, 31 insertions, 23 deletions
diff --git a/library/Pbs/Search.php b/library/Pbs/Search.php
index 46f4021..611c5e2 100644
--- a/library/Pbs/Search.php
+++ b/library/Pbs/Search.php
@@ -6,15 +6,18 @@ class Pbs_Search{
private $searcha;
private $searchb;
private $module;
+ private $countall;
+ private $countresult;
public function searchForm(){
$str = "<form style='float:left;' action='/user/".$this->module."/search'>
- <input type='text' id='search' name='search' ".(($this->searchTerm != '')?'value="'.$this->searchTerm.'"':'').">
+ <input type='text' id='search' name='search' ".(($this->searchTerm != '')?'value="'.htmlentities($this->searchTerm, ENT_QUOTES).'"':'').">
<button type='submit' class='searchbutton' value='search'> Search</button>";
$highlight = array();
if($this->searchTerm != ''){
- $str .= "<a href='/user/".$this->module."/'><img src='/media/img/delete.png' alt='Delete Client'/></a>
- <script type='text/javascript' src='/media/js/jquery.highlight-3.js'></script>";
+ $str .= "<a href='/user/".$this->module."/'><img src='/media/img/delete.png' alt='Delete Client'/></a>";
+ $str .= "<div class='searchresult'>$this->countresult result".(($this->countresult==1)?'':'s')." found</div>";
+ $str .="<script type='text/javascript' src='/media/js/jquery.highlight-3.js'></script>";
foreach($this->getSearchTerms() as $term){
$highlight[] = "$('table').highlight('".$term."');";
}
@@ -43,20 +46,32 @@ class Pbs_Search{
public function setSearchTerm($search){
$this->searchTerm = trim($search);
- $parts = explode(" ",$this->searchTerm);
+ // search for "text"
+ preg_match_all("!\"(.*?)\"!is",$this->searchTerm,$matches);
+ $tmpsearch = $this->searchTerm;
+ for($i=0;$i<=count($matches[0]);$i++){
+ $replace = str_replace(" ","<|>",$matches[0][$i]);
+ $tmpsearch = str_replace($matches[0][$i],$replace,$tmpsearch);
+ }
+ $parts = explode(" ",$tmpsearch);
foreach($parts as $search){
if(stristr($search,":") && preg_match('/^[a-z_A-Z]+$/',$search) >= 0){
$key = substr($search,0,strpos($search,":"));
- $value = substr($search,strpos($search,":")+1);
+ $value = substr($search,strpos($search,":")+1);
+ if(stristr($value,'"')){
+ $value = substr(str_replace('<|>',' ',$value),1,-1);
+ }
$searcha[$key] = $value;
}
else{
+ if(stristr($search,'"')){
+ $search = substr(str_replace('<|>',' ',$search),1,-1);
+ }
$searchb[] = $search;
}
}
$this->searcha = $searcha;
$this->searchb = $searchb;
- #print_a($searcha,$searchb);
}
public function getSearchTerm(){
return $this->searchTerm;
@@ -68,7 +83,7 @@ class Pbs_Search{
return $beta;
}
public function search($array){
-
+ $this->countall = count($array);
foreach($array as $counter => $cig){
if(is_object($cig)){
$cig = $cig->toArray();
@@ -78,35 +93,28 @@ class Pbs_Search{
foreach($this->searcha as $sk => $sv){
if($k == $sk){
if(stristr($v,$sv)){
- $com1[] = $counter;
+ $com1[$counter] += 1;
}
}
}
}
- if(count($searchb) >= 0){
- foreach($this->searchb as $sk => $sv){
+ if(count($this->searchb) >= 0){
+ foreach($this->searchb as $sk => $sv){
$comm = stristr($v,$sv);
if($comm != false){
- $com2[] = $counter;
- break;
+ $com2[$counter] += 1;
}
}
}
}
-
- }
- if (count($this->searcha) == 0){
- $data = $com2;
- }
- if (count($this->searchb) == 0){
- $data = $com1;
- }
- if (count($this->searcha) > 0 && count($this->searchb) > 0){
- $data = array_intersect($com1,$com2);
+ if($com2[$counter] >= count($this->searchb) && $com1[$counter] >= count($this->searcha)){
+ // add item in resultlist
+ $data[] = $counter;
+ }
}
- $data = array_unique($data);
foreach( $data as $c)
$ges[] = $array[$c];
+ $this->countresult = count($ges);
return $ges;
}
}