Public Member Functions | Data Fields

ilSearch Class Reference

Public Member Functions

 ilSearch ($a_user_id=0, $a_read=false)
 Constructor public.
 setSearchString ($a_search_str)
 setCombination ($a_combination)
 setSearchFor ($a_search_for)
 setSearchIn ($a_search_in)
 setResult ($a_result)
 setSearchType ($a_type)
 setPerformUpdate ($a_value)
 setEmptySearch ($a_value)
 setMinWordLength ($a_min_word_length)
 getMinWordLength ()
 getUserId ()
 getSearchString ()
 getCombination ()
 getSearchFor ()
 getSearchIn ()
 getSearchInByType ($a_type)
 getResults ()
 getResultByType ($a_type)
 getSearchType ()
 getPerformUpdate ()
 getEmptySearch ()
 getNumberOfResults ()
 validate (&$message)
 performSearch ()
 getWhereCondition ($a_type, $a_fields)
 getInStatement ($a_primary)
 __createLikeCondition ($a_fields)
 __createFulltextCondition ($a_fields)
 __parseSearchString ()
 __validateParsedString (&$message)
 __updateDBResult ()
 __readDBResult ()
 __getResultIdsByActualType ()
 __checkAccess ($a_results, $a_type)
 _checkParentConditions ($a_ref_id)
 __validateResults ()
 __prepareWord ($a_word)

Data Fields

 $ilias
 $lng
 $rbacsystem
 $user_id
 $search_string
 $parsed_str
 $combination
 $min_word_length = 3
 $search_for
 $search_in
 $search_type
 $result
 $perform_update
 $read_db_result
 $allow_empty_search

Detailed Description

Definition at line 33 of file class.ilSearch.php.


Member Function Documentation

ilSearch::__checkAccess ( a_results,
a_type 
)

Definition at line 547 of file class.ilSearch.php.

References $result.

Referenced by __validateResults(), and performSearch().

        {
                global $ilAccess;
                
                if (is_array($a_results))
                {
                        foreach ($a_results as $result)
                        {
                                if($ilAccess->checkAccess('read','',$result['id']))
                                {
                                        $checked_result[] = $result;
                                }                       
                        }
                }
                return $checked_result ? $checked_result : array();
        }

Here is the caller graph for this function:

ilSearch::__createFulltextCondition ( a_fields  ) 

Definition at line 372 of file class.ilSearch.php.

Referenced by getWhereCondition().

        {
                $where = "WHERE (";
                $match = " MATCH(".implode(",",$a_fields).") ";
                
                $where .= "1 ";
                // OR
                if (count($this->parsed_str["or"]))
                {
                        $where .= "AND ";
                        $where .= $match;
                        $where .= " AGAINST('".implode(" ",$this->parsed_str["all"])."') ";
                }
                // AND  
                foreach ($this->parsed_str["and"] as $and)
                {
                        $where .= "AND ";
                        $where .= $match;
                        $where .= "AGAINST('".$and."') ";
                }
                // AND NOT
                /*
                foreach($this->parsed_str["not"] as $and)
                {
                        $where .= "AND NOT ";
                        $where .= $match;
                        $where .= "AGAINST('".$and."') ";
                }
        */
                $where .= ") ";

                return $where;
        }

Here is the caller graph for this function:

ilSearch::__createLikeCondition ( a_fields  ) 

Definition at line 327 of file class.ilSearch.php.

Referenced by getWhereCondition().

        {
                $where = "WHERE (";
                $concat  = "CONCAT(\" \",";
                $concat .= implode(",\" \",",$a_fields);
                $concat .= ") ";

                $where .= "1 ";

                // AND
                foreach ($this->parsed_str["and"] as $and)
                {
                        $where .= "AND ";
                        $where .= $concat;
                        $where .= "LIKE(\"".$and."\") ";
                }
                
                // AND NOT
                foreach ($this->parsed_str["not"] as $not)
                {
                        $where .= "AND ";
                        $where .= $concat;
                        $where .= "NOT LIKE(\"".$not."\") ";
                }
                // OR
                if (count($this->parsed_str["or"]) and
                   !count($this->parsed_str["and"]) and
                   !count($this->parsed_str["not"]))
                {
                        $where .= "AND ( ";

                        foreach ($this->parsed_str["all"] as $or)
                        {
                                $where .= $concat;
                                $where .= "LIKE(\"".$or."\") ";
                                $where .= "OR ";
                        }

                        $where .= "0) ";
                }

                $where .= ") ";

                return $where;
        }

Here is the caller graph for this function:

ilSearch::__getResultIdsByActualType (  ) 

Definition at line 523 of file class.ilSearch.php.

References $result, $results, getResultByType(), and getSearchInByType().

Referenced by getInStatement().

        {
                $results = $this->getResultByType($this->act_type);

                // GET 'content' or 'meta' array
                switch ($this->act_type)
                {

                        case "lm":
                        case "dbk":
                                $results = $results[$this->getSearchInByType($this->act_type)];
                                break;
                }

                if(is_array($results))
                {
                        foreach ($results as $result)
                        {
                                $ids[] = $result["id"];
                        }
                }
                return $ids ? $ids : array();
        }

Here is the call graph for this function:

Here is the caller graph for this function:

ilSearch::__parseSearchString (  ) 

Definition at line 406 of file class.ilSearch.php.

References __prepareWord(), getCombination(), and getSearchString().

Referenced by validate().

        {
                $tmp_arr = explode(" ",$this->getSearchString());
                $this->parsed_str["and"] = $this->parsed_str["or"] = $this->parsed_str["not"] = array();
                
                foreach ($tmp_arr as $word)
                {
                        #$word = trim($word);
                        $word = $this->__prepareWord($word);
                        if ($word)
                        {
                                if (substr($word,0,1) == '+')
                                {
                                        $this->parsed_str["all"][] = substr($word,1);
                                        $this->parsed_str["and"][] = substr($word,1);
                                        continue;
                                }

                                if (substr($word,0,1) == '-')
                                {
                                        // better parsed_str["allmost_all"] ;-)
                                        #$this->parsed_str["all"][] = substr($word,1);
                                        $this->parsed_str["not"][] = substr($word,1);
                                        continue;
                                }

                                if ($this->getCombination() == 'and')
                                {
                                        $this->parsed_str["all"][] = $word;
                                        $this->parsed_str["and"][] = $word;
                                        continue;
                                }

                                if ($this->getCombination() == 'or')
                                {
                                        $this->parsed_str["all"][] = $word;
                                        $this->parsed_str["or"][] = $word;
                                        continue;
                                }
                        }
                }
        }                               

Here is the call graph for this function:

Here is the caller graph for this function:

ilSearch::__prepareWord ( a_word  ) 

Definition at line 687 of file class.ilSearch.php.

Referenced by __parseSearchString().

        {
                $word = trim($a_word);
                
                if(!preg_match('/\*/',$word))
                {
                        return '%'.$word.'%';
                }
                if(preg_match('/^\*/',$word))
                {
                        return str_replace('*','%',$word);
                }
                else
                {
                        return '% '.str_replace('*','%',$word);
                }
        }

Here is the caller graph for this function:

ilSearch::__readDBResult (  ) 

Definition at line 488 of file class.ilSearch.php.

References $query, $res, $row, __updateDBResult(), __validateResults(), getUserId(), and setResult().

        {
                if ($this->getUserId() != 0 and $this->getUserId() != ANONYMOUS_USER_ID and $this->read_db_result)
                {
                        $query = "SELECT search_result FROM usr_search ".
                                "WHERE usr_id = '".$this->getUserId()."'";

                        $res = $this->ilias->db->query($query);

                        if ($res->numRows())
                        {
                                $row = $res->fetchRow(DB_FETCHMODE_OBJECT);
                                $this->setResult(unserialize(stripslashes($row->search_result)));
                        }
                        else
                        {
                                $this->setResult(array("usr" => array(),
                                                                           "grp" => array(),
                                                                           "lm"  => array(),
                                                                           "dbk" => array()));
                        }
                }
                else
                {
                        $this->setResult(array("usr" => array(),
                                                                   "grp" => array(),
                                                                   "lm"  => array(),
                                                                   "dbk" => array()));
                }

                $this->__validateResults();
                $this->__updateDBResult();
                return true;
        }

Here is the call graph for this function:

ilSearch::__updateDBResult (  ) 

Definition at line 473 of file class.ilSearch.php.

References $query, $res, getResults(), and getUserId().

Referenced by __readDBResult(), and performSearch().

        {
                if ($this->getUserId() != 0 and $this->getUserId() != ANONYMOUS_USER_ID)
                {
                        $query = "REPLACE INTO usr_search ".
                                "VALUES('".$this->getUserId()."','".addslashes(serialize($this->getResults()))."','0')";

                        $res = $this->ilias->db->query($query);

                        return true;
                }

                return false;
        }

Here is the call graph for this function:

Here is the caller graph for this function:

ilSearch::__validateParsedString ( &$  message  ) 

Definition at line 449 of file class.ilSearch.php.

References $type, and getMinWordLength().

Referenced by validate().

        {
                foreach ($this->parsed_str as $type)
                {
                        foreach ($type as $word)
                        {
                                if (strlen($word) < $this->getMinWordLength())
                                {
                                        $to_short = true;
                                }
                        }
                }

                if ($to_short)
                {
                        $message .= ($this->lng->txt('search_to_short').'<br />');
                        $message .= ($this->lng->txt('search_minimum_characters').' '.$this->getMinWordLength().'<br />');
                                                 
                        return false;
                }

                return true;
        }

Here is the call graph for this function:

Here is the caller graph for this function:

ilSearch::__validateResults (  ) 

Definition at line 598 of file class.ilSearch.php.

References $data, $tree, $user, __checkAccess(), ilObjectFactory::getInstanceByObjId(), and setResult().

Referenced by __readDBResult(), and performSearch().

        {
                global $tree;

                $new_result = array();


                // check lm meta

                $this->result['lm']['meta'] = $this->__checkAccess($this->result['lm']['meta'],'lm');
                if(is_array($this->result['lm']['meta']))
                {
                        foreach($this->result['lm']['meta'] as $data)
                        {
                                if($tree->isInTree($data['id']))
                                {
                                        $new_result['lm']['meta'][] = $data;
                                }
                        }
                }
                $this->result['lm']['content'] = $this->__checkAccess($this->result['lm']['content'],'lm');
                if(is_array($this->result['lm']['content']))
                {
                        foreach($this->result['lm']['content'] as $data)
                        {
                                if($tree->isInTree($data['id']))
                                {
                                        $new_result['lm']['content'][] = $data;
                                }
                        }
                }
                $this->result['dbk']['meta'] = $this->__checkAccess($this->result['dbk']['meta'],'dbk');
                if(is_array($this->result['dbk']['meta']))
                {
                        foreach($this->result['dbk']['meta'] as $data)
                        {
                                if($tree->isInTree($data['id']))
                                {
                                        $new_result['dbk']['meta'][] = $data;
                                }
                        }
                }
                $this->result['dbk']['content'] = $this->__checkAccess($this->result['dbk']['content'],'dbk');
                if(is_array($this->result['dbk']['content']))
                {
                        foreach($this->result['dbk']['content'] as $data)
                        {
                                if($tree->isInTree($data['id']))
                                {
                                        $new_result['dbk']['content'][] = $data;
                                }
                        }
                }
                $this->result['grp'] = $this->__checkAccess($this->result['grp'],'grp');
                if(is_array($this->result['grp']))
                {
                        foreach($this->result['grp'] as $data)
                        {
                                if($tree->isInTree($data['id']))
                                {
                                        $new_result['grp'][] = $data;
                                }
                        }
                }
                if(is_array($this->result['usr']))
                {
                        foreach($this->result['usr'] as $user)
                        {
                                if($tmp_obj =& ilObjectFactory::getInstanceByObjId($user['id'],false))
                                {
                                        $new_result['usr'][] = $user;
                                }
                        }
                }
                if(is_array($this->result['role']))
                {
                        foreach($this->result['role'] as $user)
                        {
                                if($tmp_obj =& ilObjectFactory::getInstanceByObjId($user['id'],false))
                                {
                                        $new_result['role'][] = $user;
                                }
                        }
                }
                $this->setResult($new_result);

                return true;
        }

Here is the call graph for this function:

Here is the caller graph for this function:

ilSearch::_checkParentConditions ( a_ref_id  ) 

Definition at line 565 of file class.ilSearch.php.

References $ilias, $tree, and ilPaymentObject::_hasAccess().

        {
                include_once './payment/classes/class.ilPaymentObject.php';
                include_once './course/classes/class.ilObjCourse.php';

                global $tree,$ilias;

                if(!$tree->isInTree($a_ref_id))
                {
                        return false;
                }
                foreach($tree->getPathFull($a_ref_id) as $node_data)
                {
                        if(!ilPaymentObject::_hasAccess($node_data['child']))
                        {
                                return false;
                        }
                        /*
                        if($node_data['type'] == 'crs')
                        {
                                $tmp_obj =& ilObjectFactory::getInstanceByRefId($node_data['child']);
                                $tmp_obj->initCourseMemberObject();

                                if(!$tmp_obj->members_obj->hasAccess($ilias->account->getId()))
                                {
                                        return false;
                                }
                        }
                        */
                }
                return true;
        }

Here is the call graph for this function:

ilSearch::getCombination (  ) 

Definition at line 132 of file class.ilSearch.php.

Referenced by __parseSearchString().

        {
                return $this->combination ? $this->combination : "or";
        }

Here is the caller graph for this function:

ilSearch::getEmptySearch (  ) 

Definition at line 171 of file class.ilSearch.php.

Referenced by validate().

        {
                return $this->allow_empty_search;
        }

Here is the caller graph for this function:

ilSearch::getInStatement ( a_primary  ) 

Definition at line 304 of file class.ilSearch.php.

References __getResultIdsByActualType(), and getSearchType().

        {
                $in = '';

                switch ($this->getSearchType())
                {
                        case "new":
                                $in .= "";
                                break;

                        case "result":
#                               if(count($this->__getResultIdsByActualType()))
#                               {
                                        $in .= "AND $a_primary IN('".implode("','",$this->__getResultIdsByActualType())."') ";
#                               }
                                break;

                }

                return $in;
        }

Here is the call graph for this function:

ilSearch::getMinWordLength (  ) 

Definition at line 118 of file class.ilSearch.php.

Referenced by __validateParsedString().

        {
                return $this->min_word_length;
        }

Here is the caller graph for this function:

ilSearch::getNumberOfResults (  ) 

Definition at line 178 of file class.ilSearch.php.

References getResultByType().

        {
                $number = count($this->getResultByType("usr")) + count($this->getResultByType("grp")) + count($this->getResultByType("role"));

                $tmp_res = $this->getResultByType("dbk");
                $number += count($tmp_res["meta"]) + count($tmp_res["content"]);

                $tmp_res = $this->getResultByType("lm");
                $number += count($tmp_res["meta"]) + count($tmp_res["content"]);
                                        
                return $number;
        }

Here is the call graph for this function:

ilSearch::getPerformUpdate (  ) 

Definition at line 167 of file class.ilSearch.php.

Referenced by performSearch().

        {
                return $this->perform_update;
        }

Here is the caller graph for this function:

ilSearch::getResultByType ( a_type  ) 

Definition at line 159 of file class.ilSearch.php.

Referenced by __getResultIdsByActualType(), and getNumberOfResults().

        {
        return $this->result[$a_type] ? $this->result[$a_type] : array();
        }

Here is the caller graph for this function:

ilSearch::getResults (  ) 

Definition at line 155 of file class.ilSearch.php.

Referenced by __updateDBResult().

        {
                return $this->result ? $this->result : array();
        }

Here is the caller graph for this function:

ilSearch::getSearchFor (  ) 

Definition at line 136 of file class.ilSearch.php.

Referenced by performSearch(), and validate().

        {
                return $this->search_for ? $this->search_for : array();
        }

Here is the caller graph for this function:

ilSearch::getSearchIn (  ) 

Definition at line 140 of file class.ilSearch.php.

        {
                return $this->search_in ? $this->search_in : array();
        }

ilSearch::getSearchInByType ( a_type  ) 

Definition at line 144 of file class.ilSearch.php.

Referenced by __getResultIdsByActualType(), and performSearch().

        {
                if($a_type == 'lm' or $a_type == 'dbk')
                {
                        return $this->search_in[$a_type];
                }
                else
                {
                        return false;
                }
        }

Here is the caller graph for this function:

ilSearch::getSearchString (  ) 

Definition at line 128 of file class.ilSearch.php.

Referenced by __parseSearchString(), and validate().

        {
                return $this->search_string;
        }

Here is the caller graph for this function:

ilSearch::getSearchType (  ) 

Definition at line 163 of file class.ilSearch.php.

Referenced by getInStatement().

        {
                return $this->search_type;
        }

Here is the caller graph for this function:

ilSearch::getUserId (  ) 

Definition at line 124 of file class.ilSearch.php.

Referenced by __readDBResult(), and __updateDBResult().

        {
                return $this->user_id;
        }

Here is the caller graph for this function:

ilSearch::getWhereCondition ( a_type,
a_fields 
)

Definition at line 288 of file class.ilSearch.php.

References __createFulltextCondition(), and __createLikeCondition().

        {
                switch ($a_type)
                {
                        case "like":
                                $where = $this->__createLikeCondition($a_fields);
                                break;

                        case "fulltext":
                                $where = $this->__createFulltextCondition($a_fields);
                                break;
                }

                return $where;
        }

Here is the call graph for this function:

ilSearch::ilSearch ( a_user_id = 0,
a_read = false 
)

Constructor public.

Definition at line 60 of file class.ilSearch.php.

References $ilias, $lng, $rbacsystem, setEmptySearch(), and setPerformUpdate().

        {
                global $ilias,$rbacsystem,$lng;
                
                // Initiate variables
                $this->ilias =& $ilias;
                $this->lng =& $lng;
                $this->lng->loadLanguageModule("search");
                $this->rbacsystem =& $rbacsystem;
                $this->user_id = $a_user_id;

                $this->setPerformUpdate(true);
                $this->setEmptySearch(false);
                $this->read_db_result = $a_read;

                // READ OLD SEARCH RESULTS FROM DATABASE
                #$this->__readDBResult();
        }

Here is the call graph for this function:

ilSearch::performSearch (  ) 

Definition at line 217 of file class.ilSearch.php.

References $ilBench, $result, __checkAccess(), __updateDBResult(), __validateResults(), ilObjRole::_search(), ilObjDlBook::_search(), ilObjContentObject::_search(), ilObjGroup::_search(), ilObjUser::_search(), getPerformUpdate(), getSearchFor(), getSearchInByType(), and setResult().

        {
                global $objDefinition, $ilBench;

                $ilBench->start("Search", "performSearch");

                $result = array("usr" => array(),
                                                "grp" => array(),
                                                "lm"  => array(),
                                                "dbk" => array(),
                                                "role"=> array());

                foreach($this->getSearchFor() as $obj_type)
                {
                        switch($obj_type)
                        {
                                case "usr":
                                        // TODO: NOT NICE BUT USEFUL
                                        // THIS VAR IS USED IN __getResultIdsByType()
                                        $this->act_type = 'usr';
                                        $result["usr"] = ilObjUser::_search($this);
                                        break;

                                case "grp":
                                        include_once "./classes/class.ilObjGroup.php";

                                        $this->act_type = 'grp';
                                        $result["grp"] = ilObjGroup::_search($this);
                                        $result["grp"] = $this->__checkAccess($result["grp"],'grp');
                                        break;

                                case "lm":
                                        include_once "./content/classes/class.ilObjContentObject.php";
                                        $this->act_type = 'lm';
                                        $result["lm"][$this->getSearchInByType("lm")] = ilObjContentObject::_search($this,$this->getSearchInByType("lm"));
                                        $result["lm"][$this->getSearchInByType("lm")]
                                                = $this->__checkAccess($result["lm"][$this->getSearchInByType("lm")],'lm');
                                        break;

                                case "dbk":
                                        include_once "./content/classes/class.ilObjDlBook.php";
                                        $this->act_type = 'dbk';
                                        $result["dbk"][$this->getSearchInByType("dbk")] = ilObjDlBook::_search($this,$this->getSearchInByType("dbk"));
                                        $result["dbk"][$this->getSearchInByType("dbk")]
                                                = $this->__checkAccess($result["dbk"][$this->getSearchInByType("dbk")],'dbk');
                                        break;

                                case "role":
                                        include_once "./classes/class.ilObjRole.php";

                                        $this->act_type = 'role';
                                        $result["role"] = ilObjRole::_search($this);

                                        #$result["role"] = $this->__checkAccess($result["role"],'role');
                                        break;
                        }
                }

                $this->setResult($result);
                $this->__validateResults();

                if ($this->getPerformUpdate())
                {
                        $this->__updateDBResult();
                }

                $ilBench->stop("Search", "performSearch");

                return true;
        }

Here is the call graph for this function:

ilSearch::setCombination ( a_combination  ) 

Definition at line 84 of file class.ilSearch.php.

        {
                // 'and' or 'or'
                $this->combination = $a_combination;
        }

ilSearch::setEmptySearch ( a_value  ) 

Definition at line 109 of file class.ilSearch.php.

Referenced by ilSearch().

        {
                $this->allow_empty_search = $a_value;
        }

Here is the caller graph for this function:

ilSearch::setMinWordLength ( a_min_word_length  ) 

Definition at line 114 of file class.ilSearch.php.

        {
                $this->min_word_length = $a_min_word_length;
        }

ilSearch::setPerformUpdate ( a_value  ) 

Definition at line 105 of file class.ilSearch.php.

Referenced by ilSearch().

        {
                $this->perform_update = $a_value;
        }

Here is the caller graph for this function:

ilSearch::setResult ( a_result  ) 

Definition at line 97 of file class.ilSearch.php.

Referenced by __readDBResult(), __validateResults(), and performSearch().

        {
                $this->result = $a_result;
        }

Here is the caller graph for this function:

ilSearch::setSearchFor ( a_search_for  ) 

Definition at line 89 of file class.ilSearch.php.

        {
                $this->search_for = $a_search_for;
        }

ilSearch::setSearchIn ( a_search_in  ) 

Definition at line 93 of file class.ilSearch.php.

        {
                $this->search_in = $a_search_in;
        }

ilSearch::setSearchString ( a_search_str  ) 

Definition at line 80 of file class.ilSearch.php.

        {
                $this->search_string = trim($a_search_str);
        }

ilSearch::setSearchType ( a_type  ) 

Definition at line 101 of file class.ilSearch.php.

        {
                $this->search_type = $a_type;
        }

ilSearch::validate ( &$  message  ) 

Definition at line 191 of file class.ilSearch.php.

References $ok, __parseSearchString(), __validateParsedString(), getEmptySearch(), getSearchFor(), and getSearchString().

        {
                $ok = true;

                if(!$this->getEmptySearch())
                {
                        if(!$this->getSearchString())
                        {
                                $message .= $this->lng->txt("search_no_search_term")."<br/>";
                                $ok = false;
                        }
                        $this->__parseSearchString();

                        if(!$this->__validateParsedString($message))
                        {
                                $ok = false;
                        }
                        if(!$this->getSearchFor())
                        {
                                $message .= $this->lng->txt("search_no_category")."<br/>";
                                $ok = false;
                        }
                }
                return $ok;
        }

Here is the call graph for this function:


Field Documentation

ilSearch::$allow_empty_search

Definition at line 55 of file class.ilSearch.php.

ilSearch::$combination

Definition at line 46 of file class.ilSearch.php.

ilSearch::$ilias

Definition at line 40 of file class.ilSearch.php.

Referenced by _checkParentConditions(), and ilSearch().

ilSearch::$lng

Definition at line 41 of file class.ilSearch.php.

Referenced by ilSearch().

ilSearch::$min_word_length = 3

Definition at line 47 of file class.ilSearch.php.

ilSearch::$parsed_str

Definition at line 45 of file class.ilSearch.php.

ilSearch::$perform_update

Definition at line 52 of file class.ilSearch.php.

ilSearch::$rbacsystem

Definition at line 42 of file class.ilSearch.php.

Referenced by ilSearch().

ilSearch::$read_db_result

Definition at line 53 of file class.ilSearch.php.

ilSearch::$result

Definition at line 51 of file class.ilSearch.php.

Referenced by __checkAccess(), __getResultIdsByActualType(), and performSearch().

ilSearch::$search_for

Definition at line 48 of file class.ilSearch.php.

ilSearch::$search_in

Definition at line 49 of file class.ilSearch.php.

ilSearch::$search_string

Definition at line 44 of file class.ilSearch.php.

ilSearch::$search_type

Definition at line 50 of file class.ilSearch.php.

ilSearch::$user_id

Definition at line 43 of file class.ilSearch.php.


The documentation for this class was generated from the following file: