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.php310
1 files changed, 154 insertions, 156 deletions
diff --git a/library/Pbs/Search.php b/library/Pbs/Search.php
index 587b656..7959775 100644
--- a/library/Pbs/Search.php
+++ b/library/Pbs/Search.php
@@ -1,4 +1,4 @@
-<?php
+<? php
/*
* Copyright (c) 2011 - OpenSLX GmbH, RZ Uni Freiburg
* This program is free software distributed under the GPL version 2.
@@ -10,160 +10,158 @@
* General information about OpenSLX can be found at http://openslx.org/
*/
-class Pbs_Search{
+class Pbs_Search {
- private $searchTerm = '';
- private $searcha;
- private $searchb;
- private $module;
- private $countall;
- private $countresult;
- private $type;
-
- public function searchForm(){
- $str = "<form style='float:left;' action='";
- if($this->type == ''){
- $str .= "/user/".$this->module."/search";
- }
- else{
- $str .= "/user/".$this->module."/search/type/".$this->type;
- }
- $str .= "'>
- <div><input type='text' id='search' name='search' ".(($this->searchTerm != '')?'value="'.htmlentities($this->searchTerm, ENT_QUOTES).'"':'')." />
- <button type='submit' class='searchbutton' value='search'> Search</button></div>";
-
- $highlight = array();
- if($this->searchTerm != ''){
- $str .= "<a href='/user/".$this->module."/'><img src='/media/img/delete.png' alt='Delete Client'/></a>";
- $str .= "<div class='searchsub'>$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."');";
- $highlight[] = "$('.element .number').highlight('".$term."');";
- $highlight[] = "$('.element .title').highlight('".$term."');";
- $highlight[] = "$('.element .subtitle').highlight('".$term."');";
- $highlight[] = "$('.element .item').highlight('".$term."');";
- }
-
- }
- $str .= "<div class='searchsub dsf'>Display searchfilter</div>";
- $str .= "<script type='text/javascript'>
- $(document).ready(function(){";
- $str .= implode("\n",$highlight);
- $str .= "$('.searchvars').data('m','0');\n";
-
- $str .= "$('.dsf')
- .click(function(){
- if($('.searchvars').is(':visible') == false){
- $('.searchvars').data('m','1').slideDown();
- }
- else{
- $('.searchvars').data('m','0').slideUp();
- }
- });";
- $str .= "$('.searchvars .code').click(function(){
- $('#search').val($('#search').val()+' '+$(this).text()+':');
- });";
- $str .= "$('#search')
- .focus(function() {
- $('table th .code').show();
- $('.searchvars').slideDown();
- }).focusout(function() {
- $('table th .code').hide();
- if($('.searchvars').data('m') == '0'){
- $('.searchvars').slideUp();
- }
- });
- $('table th').click(function(){
- $('#search').val($('#search').val()+' '+$(this).find('.code').text()+':');
- });";
- $str .= "});
- </script>";
- $str .= "</form>";
- return $str;
- }
- public function setModule($m){
- $this->module = $m;
- return $this;
- }
- public function setType($t){
- $this->type = $t;
- return $this;
- }
- public function setSearchTerm($search){
- $this->searchTerm = trim($search);
-
- // 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);
- 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;
- return $this;
- }
- public function getSearchTerm(){
- return $this->searchTerm;
- }
- public function getSearchTerms(){
- $beta = $this->searcha;
- foreach($this->searchb as $b)
- $beta[] = $b;
- return $beta;
- }
- public function search($array){
- $this->countall = count($array);
- foreach($array as $counter => $cig){
- if(is_object($cig)){
- $cig = $cig->toArray();
- }
- foreach($cig as $k => $v){
- if(count($this->searcha) > 0){
- foreach($this->searcha as $sk => $sv){
- if($k == $sk){
- if(stristr($v,$sv) || $v == $sv){
- $com1[$counter] += 1;
- }
- }
- }
- }
- if(count($this->searchb) >= 0){
- foreach($this->searchb as $sk => $sv){
- $comm = stristr($v,$sv);
- if($comm != false || $v == $sv){
- $com2[$counter] += 1;
- }
- }
- }
- }
- #print_a($com2[$counter]." >= ".count($this->searchb)." && ".$com1[$counter]." >= ".count($this->searcha));
- if($com2[$counter] >= count($this->searchb) && $com1[$counter] >= count($this->searcha)){
- // add item in resultlist
- $data[] = $counter;
- }
- }
- foreach( $data as $c)
- $ges[] = $array[$c];
- $this->countresult = count($ges);
- return $ges;
- }
+ private $searchTerm = '';
+ private $searcha;
+ private $searchb;
+ private $module;
+ private $countall;
+ private $countresult;
+ private $type;
+
+ public function searchForm() {
+ $str = "<form style='float:left;' action='";
+ if($this->type == '') {
+ $str . = "/user/".$this->module."/search";
+ } else {
+ $str . = "/user/".$this->module."/search/type/".$this->type;
+ }
+ $str . = "'>
+ <div><input type='text' id='search' name='search' ".(($this->searchTerm != '') ? 'value="'.htmlentities($this->searchTerm, ENT_QUOTES).'"' : '')." />
+ <button type='submit' class='searchbutton' value='search'> Search</button></div>";
+
+ $highlight = array();
+ if($this->searchTerm != '') {
+ $str . = "<a href='/user/".$this->module."/'><img src='/media/img/delete.png' alt='Delete Client'/></a>";
+ $str . = "<div class='searchsub'>$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."');";
+ $highlight[] = "$('.element .number').highlight('".$term."');";
+ $highlight[] = "$('.element .title').highlight('".$term."');";
+ $highlight[] = "$('.element .subtitle').highlight('".$term."');";
+ $highlight[] = "$('.element .item').highlight('".$term."');";
+ }
+
+ }
+ $str . = "<div class='searchsub dsf'>Display searchfilter</div>";
+ $str . = "<script type='text/javascript'>
+ $(document).ready(function(){";
+ $str . = implode("\n", $highlight);
+ $str . = "$('.searchvars').data('m','0');\n";
+
+ $str . = "$('.dsf')
+ .click(function(){
+ if($('.searchvars').is(':visible') == false){
+ $('.searchvars').data('m','1').slideDown();
+ }
+ else{
+ $('.searchvars').data('m','0').slideUp();
+ }
+ });";
+ $str . = "$('.searchvars .code').click(function(){
+ $('#search').val($('#search').val()+' '+$(this).text()+':');
+ });";
+ $str . = "$('#search')
+ .focus(function() {
+ $('table th .code').show();
+ $('.searchvars').slideDown();
+ }).focusout(function() {
+ $('table th .code').hide();
+ if($('.searchvars').data('m') == '0'){
+ $('.searchvars').slideUp();
+ }
+ });
+ $('table th').click(function(){
+ $('#search').val($('#search').val()+' '+$(this).find('.code').text()+':');
+ });";
+ $str . = "});
+ </script>";
+ $str . = "</form>";
+ return $str;
+ }
+ public function setModule($m) {
+ $this->module = $m;
+ return $this;
+ }
+ public function setType($t) {
+ $this->type = $t;
+ return $this;
+ }
+ public function setSearchTerm($search) {
+ $this->searchTerm = trim($search);
+
+ // 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);
+ 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;
+ return $this;
+ }
+ public function getSearchTerm() {
+ return $this->searchTerm;
+ }
+ public function getSearchTerms() {
+ $beta = $this->searcha;
+ foreach($this->searchb as $b)
+ $beta[] = $b;
+ return $beta;
+ }
+ public function search($array) {
+ $this->countall = count($array);
+ foreach($array as $counter => $cig) {
+ if(is_object($cig)) {
+ $cig = $cig->toArray();
+ }
+ foreach($cig as $k => $v) {
+ if(count($this->searcha) > 0) {
+ foreach($this->searcha as $sk => $sv) {
+ if($k == $sk) {
+ if(stristr($v, $sv) || $v == $sv) {
+ $com1[$counter] += 1;
+ }
+ }
+ }
+ }
+ if(count($this->searchb) >= 0) {
+ foreach($this->searchb as $sk => $sv) {
+ $comm = stristr($v, $sv);
+ if($comm != false || $v == $sv) {
+ $com2[$counter] += 1;
+ }
+ }
+ }
+ }
+#print_a($com2[$counter]." >= ".count($this->searchb)." && ".$com1[$counter]." >= ".count($this->searcha));
+ if($com2[$counter] >= count($this->searchb) && $com1[$counter] >= count($this->searcha)) {
+ // add item in resultlist
+ $data[] = $counter;
+ }
+ }
+ foreach( $data as $c)
+ $ges[] = $array[$c];
+ $this->countresult = count($ges);
+ return $ges;
+ }
}