/**
  * Singleton constructor 
  * @param int $a_usr_id user id
  * @return
  */
 protected function __construct($a_user_id)
 {
     $this->user_id = $a_user_id;
     $this->settings = ilSearchSettings::getInstance();
     include_once 'Services/Search/classes/class.ilUserSearchCache.php';
     $this->cache = ilUserSearchCache::_getInstance($this->getUserId());
     $this->offset = $this->settings->getMaxHits() * ($this->cache->getResultPageNumber() - 1);
 }
 public function getHTML()
 {
     global $ilCtrl, $tpl, $lng, $ilUser;
     if (!$this->isContainer) {
         #return '';
     }
     if ($_GET['baseClass'] == 'ilSearchController') {
         //			return '';
     }
     include_once "Services/jQuery/classes/class.iljQueryUtil.php";
     iljQueryUtil::initjQuery();
     iljQueryUtil::initjQueryUI();
     $this->tpl = new ilTemplate('tpl.main_menu_search.html', true, true, 'Services/Search');
     if ($ilUser->getId() != ANONYMOUS_USER_ID) {
         if (ilSearchSettings::getInstance()->isLuceneUserSearchEnabled() or (int) $_GET['ref_id']) {
             $this->tpl->setCurrentBlock("position");
             $this->tpl->setVariable('TXT_GLOBALLY', $lng->txt("search_globally"));
             $this->tpl->setVariable('ROOT_ID', ROOT_FOLDER_ID);
             $this->tpl->parseCurrentBlock();
         } else {
             $this->tpl->setCurrentBlock("position_hid");
             $this->tpl->setVariable('ROOT_ID_HID', ROOT_FOLDER_ID);
             $this->tpl->parseCurrentBlock();
         }
         if ((int) $_GET['ref_id']) {
             $this->tpl->setCurrentBlock('position_rep');
             $this->tpl->setVariable('TXT_CURRENT_POSITION', $lng->txt("search_at_current_position"));
             $this->tpl->setVariable('REF_ID', (int) $_GET["ref_id"]);
             $this->tpl->parseCurrentBlock();
         }
     }
     if ($ilUser->getId() != ANONYMOUS_USER_ID && ilSearchSettings::getInstance()->isLuceneUserSearchEnabled()) {
         $this->tpl->setCurrentBlock('usr_search');
         $this->tpl->setVariable('TXT_USR_SEARCH', $this->lng->txt('search_users'));
         $this->tpl->parseCurrentBlock();
     }
     $this->tpl->setVariable('FORMACTION', 'ilias.php?baseClass=ilSearchController&cmd=post' . '&rtoken=' . $ilCtrl->getRequestToken() . '&fallbackCmd=remoteSearch');
     $this->tpl->setVariable('BTN_SEARCH', $this->lng->txt('search'));
     // $this->tpl->setVariable('ID_AUTOCOMPLETE', "mm_sr_auto");
     $this->tpl->setVariable('AC_DATASOURCE', "ilias.php?baseClass=ilSearchController&cmd=autoComplete");
     $this->tpl->setVariable('IMG_MM_SEARCH', ilUtil::img(ilUtil::getImagePath("icon_seas.svg"), $lng->txt("search")));
     if ($ilUser->getId() != ANONYMOUS_USER_ID) {
         $this->tpl->setVariable('HREF_SEARCH_LINK', "ilias.php?baseClass=ilSearchController");
         $this->tpl->setVariable('TXT_SEARCH_LINK', $lng->txt("last_search_result"));
     }
     // #10555 - we need the overlay for the autocomplete which is always active
     $this->tpl->setVariable('TXT_SEARCH', $lng->txt("search"));
     include_once "./Services/UIComponent/Overlay/classes/class.ilOverlayGUI.php";
     $ov = new ilOverlayGUI("mm_search_menu");
     //$ov->setTrigger("main_menu_search", "none",
     //	"main_menu_search", "tr", "br");
     //$ov->setAnchor("main_menu_search", "tr", "br");
     $ov->setAutoHide(false);
     $ov->add();
     return $this->tpl->get();
 }
 function getLastClass()
 {
     include_once './Services/Search/classes/class.ilSearchSettings.php';
     if (ilSearchSettings::getInstance()->enabledLucene()) {
         $default = 'illucenesearchgui';
     } else {
         $default = 'ilsearchgui';
     }
     return $_SESSION['search_last_class'] ? $_SESSION['search_last_class'] : $default;
 }
 /**
  * Constructor
  * @access public
  */
 function ilQueryParser($a_query_str)
 {
     global $lng;
     define(MIN_WORD_LENGTH, 3);
     $this->lng =& $lng;
     $this->query_str = $a_query_str;
     $this->message = '';
     include_once './Services/Search/classes/class.ilSearchSettings.php';
     $this->settings = ilSearchSettings::getInstance();
     if (!$this->setMinWordLength(1)) {
         $this->setMinWordLength(MIN_WORD_LENGTH);
     }
 }
 /**
  * Get completion list
  */
 static function getList($a_str)
 {
     global $ilDB;
     include_once './Services/Search/classes/class.ilSearchSettings.php';
     if (ilSearchSettings::getInstance()->enabledLucene()) {
         return self::getLuceneList($a_str);
     }
     $a_str = str_replace('"', "", $a_str);
     $settings = new ilSearchSettings();
     $object_types = array('cat', 'dbk', 'crs', 'fold', 'frm', 'grp', 'lm', 'sahs', 'glo', 'mep', 'htlm', 'exc', 'file', 'qpl', 'tst', 'svy', 'spl', 'chat', 'icrs', 'icla', 'webr', 'mcst', 'sess', 'pg', 'st', 'gdf', 'wiki');
     $set = $ilDB->query("SELECT title, obj_id FROM object_data WHERE " . $ilDB->like('title', 'text', $a_str . "%") . " AND " . $ilDB->in('type', $object_types, false, 'text') . " ORDER BY title");
     $max = $settings->getAutoCompleteLength() > 0 ? $settings->getAutoCompleteLength() : 10;
     $cnt = 0;
     $list = array();
     $checked = array();
     $lim = "";
     while (($rec = $ilDB->fetchAssoc($set)) && $cnt < $max) {
         if (strpos($rec["title"], " ") > 0 || strpos($rec["title"], "-") > 0) {
             $rec["title"] = '"' . $rec["title"] . '"';
         }
         if (!in_array($rec["title"], $list) && !in_array($rec["obj_id"], $checked)) {
             if (ilSearchAutoComplete::checkObjectPermission($rec["obj_id"])) {
                 $list[] = $lim . $rec["title"];
                 $cnt++;
             }
             $checked[] = $rec["obj_id"];
         }
     }
     $set = $ilDB->query("SELECT rbac_id,obj_id,obj_type, keyword FROM il_meta_keyword WHERE " . $ilDB->like('keyword', 'text', $a_str . "%") . " AND " . $ilDB->in('obj_type', $object_types, false, 'text') . " ORDER BY keyword");
     while (($rec = $ilDB->fetchAssoc($set)) && $cnt < $max) {
         if (strpos($rec["keyword"], " ") > 0) {
             $rec["keyword"] = '"' . $rec["keyword"] . '"';
         }
         if (!in_array($rec["keyword"], $list) && !in_array($rec["rbac_id"], $checked)) {
             if (ilSearchAutoComplete::checkObjectPermission($rec["rbac_id"])) {
                 $list[] = $lim . $rec["keyword"];
                 $cnt++;
             }
         }
         $checked[] = $rec["rbac_id"];
     }
     $i = 0;
     $result = array();
     foreach ($list as $l) {
         $result[$i] = new stdClass();
         $result[$i]->value = $l;
         $i++;
     }
     include_once './Services/JSON/classes/class.ilJsonUtil.php';
     return ilJsonUtil::encode($result);
 }
 /**
  * @param int $mode
  */
 public function __construct($mode)
 {
     /**
      * @var $ilUser     ilObjUser
      * @var $rbacsystem ilRbacSystem
      */
     global $ilUser, $rbacsystem;
     $this->allow_smtp = $rbacsystem->checkAccess('smtp_mail', MAIL_SETTINGS_ID);
     $this->user_id = $ilUser->getId();
     $this->max_entries = ilSearchSettings::getInstance()->getAutoCompleteLength();
     $this->result['items'] = array();
     $this->result['hasMoreResults'] = false;
     $this->initMode($mode);
 }
 function getLastClass()
 {
     include_once './Services/Search/classes/class.ilSearchSettings.php';
     if (ilSearchSettings::getInstance()->enabledLucene()) {
         $default = 'illucenesearchgui';
     } else {
         $default = 'ilsearchgui';
     }
     if ($_REQUEST['root_id'] == self::TYPE_USER_SEARCH) {
         $default = 'illuceneusersearchgui';
     }
     $this->setLastClass($default);
     return $_SESSION['search_last_class'] ? $_SESSION['search_last_class'] : $default;
 }
 /**
  * Update lucene index
  * @param type $a_obj_ids
  */
 public static function updateLuceneIndex($a_obj_ids)
 {
     global $ilSetting;
     include_once './Services/Search/classes/class.ilSearchSettings.php';
     if (!ilSearchSettings::getInstance()->isLuceneUserSearchEnabled()) {
         return false;
     }
     try {
         include_once './Services/WebServices/RPC/classes/class.ilRpcClientFactory.php';
         ilRpcClientFactory::factory('RPCIndexHandler')->indexObjects(CLIENT_ID . '_' . $ilSetting->get('inst_id', 0), $a_obj_ids);
     } catch (XML_RPC2_FaultException $e) {
         $error_message = $e->getMessage();
         $GLOBALS['ilLog']->write(__METHOD__ . ': ' . $e->getMessage());
     } catch (Exception $e) {
         $error_message = $e->getMessage();
         $GLOBALS['ilLog']->write(__METHOD__ . ': ' . $e->getMessage());
     }
 }
 /**
  * Return an array of all meta data fields
  */
 public static function getFields()
 {
     global $lng;
     $lng->loadLanguageModule('meta');
     $fields['lom_content'] = $lng->txt('content');
     include_once './Services/Search/classes/class.ilSearchSettings.php';
     if (ilSearchSettings::getInstance()->enabledLucene()) {
         $fields['general_offline'] = $lng->txt('lucene_offline_filter');
     }
     //'lom_type'					= $lng->txt('type');
     $fields['lom_language'] = $lng->txt('language');
     $fields['lom_keyword'] = $lng->txt('meta_keyword');
     $fields['lom_coverage'] = $lng->txt('meta_coverage');
     $fields['lom_structure'] = $lng->txt('meta_structure');
     $fields['lom_status'] = $lng->txt('meta_status');
     $fields['lom_version'] = $lng->txt('meta_version');
     $fields['lom_contribute'] = $lng->txt('meta_contribute');
     $fields['lom_format'] = $lng->txt('meta_format');
     $fields['lom_operating_system'] = $lng->txt('meta_operating_system');
     $fields['lom_browser'] = $lng->txt('meta_browser');
     $fields['lom_interactivity'] = $lng->txt('meta_interactivity_type');
     $fields['lom_resource'] = $lng->txt('meta_learning_resource_type');
     $fields['lom_level'] = $lng->txt('meta_interactivity_level');
     $fields['lom_density'] = $lng->txt('meta_semantic_density');
     $fields['lom_user_role'] = $lng->txt('meta_intended_end_user_role');
     $fields['lom_context'] = $lng->txt('meta_context');
     $fields['lom_difficulty'] = $lng->txt('meta_difficulty');
     $fields['lom_costs'] = $lng->txt('meta_cost');
     $fields['lom_copyright'] = $lng->txt('meta_copyright_and_other_restrictions');
     $fields['lom_purpose'] = $lng->txt('meta_purpose');
     $fields['lom_taxon'] = $lng->txt('meta_taxon');
     // Append all advanced meta data fields
     include_once './Services/AdvancedMetaData/classes/class.ilAdvancedMDRecord.php';
     include_once './Services/AdvancedMetaData/classes/class.ilAdvancedMDFieldDefinition.php';
     foreach (ilAdvancedMDRecord::_getRecords() as $record) {
         foreach (ilAdvancedMDFieldDefinition::_getDefinitionsByRecordId($record->getRecordId()) as $def) {
             if ($def->isSearchable()) {
                 $fields['adv_' . $def->getFieldId()] = $def->getTitle();
             }
         }
     }
     return $fields;
 }
 /**
  * Show search form
  * @return boolean
  */
 protected function showSearchForm()
 {
     global $ilCtrl, $lng;
     $this->tpl->addBlockFile('ADM_CONTENT', 'adm_content', 'tpl.lucene_search.html', 'Services/Search');
     // include js needed
     include_once "./Services/UIComponent/Overlay/classes/class.ilOverlayGUI.php";
     ilOverlayGUI::initJavascript();
     $this->tpl->addJavascript("./Services/Search/js/Search.js");
     include_once "./Services/UIComponent/Glyph/classes/class.ilGlyphGUI.php";
     $this->tpl->setVariable("FORM_ACTION", $ilCtrl->getFormAction($this, 'performSearch'));
     $this->tpl->setVariable("TERM", ilUtil::prepareFormOutput($this->search_cache->getQuery()));
     include_once "./Services/UIComponent/Button/classes/class.ilSubmitButton.php";
     $btn = ilSubmitButton::getInstance();
     $btn->setCommand("performSearch");
     $btn->setCaption("search");
     $this->tpl->setVariable("SUBMIT_BTN", $btn->render());
     $this->tpl->setVariable("TXT_OPTIONS", $lng->txt("options"));
     $this->tpl->setVariable("ARR_IMG", ilGlyphGUI::get(ilGlyphGUI::CARET));
     $this->tpl->setVariable("TXT_COMBINATION", $lng->txt("search_term_combination"));
     $this->tpl->setVariable('TXT_COMBINATION_DEFAULT', ilSearchSettings::getInstance()->getDefaultOperator() == ilSearchSettings::OPERATOR_AND ? $lng->txt('search_all_words') : $lng->txt('search_any_word'));
     $this->tpl->setVariable("TXT_AREA", $lng->txt("search_area"));
     if (ilSearchSettings::getInstance()->isLuceneItemFilterEnabled()) {
         $this->tpl->setCurrentBlock("type_sel");
         $this->tpl->setVariable('TXT_TYPE_DEFAULT', $lng->txt("search_off"));
         $this->tpl->setVariable("ARR_IMGT", ilGlyphGUI::get(ilGlyphGUI::CARET));
         $this->tpl->setVariable("TXT_FILTER_BY_TYPE", $lng->txt("search_filter_by_type"));
         $this->tpl->setVariable('FORM', $this->form->getHTML());
         $this->tpl->parseCurrentBlock();
     }
     // search area form
     $this->tpl->setVariable('SEARCH_AREA_FORM', $this->getSearchAreaForm()->getHTML());
     $this->tpl->setVariable("TXT_CHANGE", $lng->txt("change"));
     return true;
 }
 function searchObjects($sid, $types, $key, $combination, $user_id)
 {
     $this->initAuth($sid);
     $this->initIlias();
     if (!$this->__checkSession($sid)) {
         return $this->__raiseError($this->__getMessage(), $this->__getMessageCode());
     }
     if (!is_array($types)) {
         return $this->__raiseError('Types must be an array of object types.', 'Client');
     }
     if ($combination != 'and' and $combination != 'or') {
         return $this->__raiseError('No valid combination given. Must be "and" or "or".', 'Client');
     }
     // begin-patch fm
     include_once './Services/Search/classes/class.ilSearchSettings.php';
     if (ilSearchSettings::getInstance()->enabledLucene()) {
         ilSearchSettings::getInstance()->setMaxHits(25);
         include_once './Services/Search/classes/Lucene/class.ilLuceneQueryParser.php';
         $query_parser = new ilLuceneQueryParser($key);
         $query_parser->parse();
         include_once './Services/Search/classes/Lucene/class.ilLuceneSearcher.php';
         $searcher = ilLuceneSearcher::getInstance($query_parser);
         $searcher->search();
         include_once './Services/Search/classes/Lucene/class.ilLuceneSearchResultFilter.php';
         include_once './Services/Search/classes/Lucene/class.ilLucenePathFilter.php';
         $filter = ilLuceneSearchResultFilter::getInstance($user_id);
         $filter->setCandidates($searcher->getResult());
         $filter->filter();
         $result_ids = $filter->getResults();
         $objs = array();
         $objs[ROOT_FOLDER_ID] = ilObjectFactory::getInstanceByRefId(ROOT_FOLDER_ID, false);
         foreach ((array) $result_ids as $ref_id => $obj_id) {
             $obj = ilObjectFactory::getInstanceByRefId($ref_id, false);
             if ($obj instanceof ilObject) {
                 $objs[] = $obj;
             }
         }
         include_once './Services/Search/classes/Lucene/class.ilLuceneHighlighterResultParser.php';
         $highlighter = new ilLuceneHighlighterResultParser();
         if ($filter->getResultObjIds()) {
             $highlighter = $searcher->highlight($filter->getResultObjIds());
         }
     } else {
         include_once './Services/Search/classes/class.ilQueryParser.php';
         $query_parser =& new ilQueryParser($key);
         #$query_parser->setMinWordLength(3);
         $query_parser->setCombination($combination == 'and' ? QP_COMBINATION_AND : QP_COMBINATION_OR);
         $query_parser->parse();
         if (!$query_parser->validate()) {
             return $this->__raiseError($query_parser->getMessage(), 'Client');
         }
         #include_once './Services/Search/classes/class.ilObjectSearchFactory.php';
         #$object_search =& ilObjectSearchFactory::_getObjectSearchInstance($query_parser);
         include_once './Services/Search/classes/Like/class.ilLikeObjectSearch.php';
         $object_search = new ilLikeObjectSearch($query_parser);
         $object_search->setFilter($types);
         $res =& $object_search->performSearch();
         if ($user_id) {
             $res->setUserId($user_id);
         }
         // begin-patch fm
         $res->setMaxHits(100);
         // begin-patch fm
         $res->filter(ROOT_FOLDER_ID, $combination == 'and' ? true : false);
         $counter = 0;
         $objs = array();
         foreach ($res->getUniqueResults() as $entry) {
             $obj = ilObjectFactory::getInstanceByRefId($entry['ref_id'], false);
             if ($obj instanceof ilObject) {
                 $objs[] = $obj;
             }
         }
     }
     if (!count($objs)) {
         //rku: todo: das ist nicht soap konform! - hier muss ein XML zurück geliefert werden
         return '';
     }
     include_once './webservice/soap/classes/class.ilObjectXMLWriter.php';
     $xml_writer = new ilObjectXMLWriter();
     // begin-patch fm
     if (ilSearchSettings::getInstance()->enabledLucene()) {
         $xml_writer->enableReferences(false);
         $xml_writer->setMode(ilObjectXmlWriter::MODE_SEARCH_RESULT);
         $xml_writer->setHighlighter($highlighter);
     }
     $xml_writer->enablePermissionCheck(true);
     if ($user_id) {
         $xml_writer->setUserId($user_id);
         $xml_writer->enableOperations(true);
     }
     $xml_writer->setObjects($objs);
     if ($xml_writer->start()) {
         #$GLOBALS['ilLog']->write(__METHOD__.': '.$xml_writer->xmlDumpMem(true));
         return $xml_writer->getXML();
     }
     return $this->__raiseError('Cannot create object xml !', 'Server');
 }
 protected function parseRelevance($sub_item)
 {
     if (!ilSearchSettings::getInstance()->isSubRelevanceVisible() || !ilSearchSettings::enabledLucene()) {
         return '';
     }
     $relevance = $this->getHighlighter()->getRelevance($this->getObjId(), $sub_item);
     $this->tpl->addBlockFile('SUB_REL', 'sub_rel', 'tpl.lucene_sub_relevance.html', 'Services/Search');
     include_once "Services/UIComponent/ProgressBar/classes/class.ilProgressBar.php";
     $pbar = ilProgressBar::getInstance();
     $pbar->setCurrent($relevance);
     $this->tpl->setCurrentBlock('relevance');
     $this->tpl->setVariable('REL_PBAR', $pbar->render());
     $this->tpl->parseCurrentBlock();
 }
 /**
  * Get completion list
  * @param string $a_str
  * @return string
  */
 public function getList($a_str)
 {
     /**
      * @var $ilDB  ilDB
      * @var $ilLog ilLog
      */
     global $ilDB, $ilLog;
     $select_part = $this->getSelectPart();
     $where_part = $this->getWherePart($a_str);
     $order_by_part = $this->getOrderByPart();
     $query = implode(" ", array('SELECT ' . $select_part, 'FROM ' . $this->getFromPart(), $where_part ? 'WHERE ' . $where_part : '', $order_by_part ? 'ORDER BY ' . $order_by_part : ''));
     $ilLog->write(__METHOD__ . ': Query: ' . $query);
     $res = $ilDB->query($query);
     // add email only if it is "searchable"
     $add_email = true;
     include_once 'Services/Search/classes/class.ilUserSearchOptions.php';
     if ($this->isFieldSearchableCheckEnabled() && !ilUserSearchOptions::_isEnabled("email")) {
         $add_email = false;
     }
     include_once './Services/Search/classes/class.ilSearchSettings.php';
     $max = $this->getLimit() ? $this->getLimit() : ilSearchSettings::getInstance()->getAutoCompleteLength();
     $cnt = 0;
     $more_results = FALSE;
     $result = array();
     while (($rec = $ilDB->fetchAssoc($res)) && $cnt < $max + 1) {
         if ($cnt >= $max) {
             $more_results = TRUE;
             break;
         }
         // @todo: Open discussion: We should remove all non public fields from result
         $label = $rec['lastname'] . ', ' . $rec['firstname'] . ' [' . $rec['login'] . ']';
         if ($add_email && $rec['email'] && (self::PRIVACY_MODE_RESPECT_USER_SETTING != $this->getPrivacyMode() || 'y' == $rec['email_value'])) {
             $label .= ', ' . $rec['email'];
         }
         $result[$cnt]['value'] = (string) $rec[$this->result_field];
         $result[$cnt]['label'] = $label;
         $result[$cnt]['id'] = $rec['usr_id'];
         $cnt++;
     }
     include_once 'Services/JSON/classes/class.ilJsonUtil.php';
     $result_json['items'] = $result;
     $result_json['hasMoreResults'] = $more_results;
     $GLOBALS['ilLog']->write(__METHOD__ . ': ' . print_r($result_json, TRUE));
     return ilJsonUtil::encode($result_json);
 }
 /**
  * @return bool
  */
 protected function isLuceneSearchEnabled()
 {
     include_once 'Services/Search/classes/class.ilSearchSettings.php';
     if (ilSearchSettings::getInstance()->enabledLucene() && strlen($this->filter['mail_filter'])) {
         return true;
     }
 }
 /**
  * get tabs 
  */
 protected function getTabs()
 {
     global $ilHelp;
     $ilHelp->setScreenIdComponent("src_luc");
     $this->tabs_gui->addTarget('search', $this->ctrl->getLinkTargetByClass('illucenesearchgui'));
     if (ilSearchSettings::getInstance()->isLuceneUserSearchEnabled()) {
         $this->tabs_gui->addTarget('search_user', $this->ctrl->getLinkTargetByClass('illuceneusersearchgui'));
     }
     if (!ilSearchSettings::getInstance()->getHideAdvancedSearch() and $this->fields->getActiveFields()) {
         $this->tabs_gui->addTarget('search_advanced', $this->ctrl->getLinkTarget($this));
     }
     $this->tabs_gui->setTabActive('search_advanced');
 }
 /**
  * get tabs 
  */
 protected function getTabs()
 {
     $this->tabs_gui->addTarget('search', $this->ctrl->getLinkTargetByClass('illucenesearchgui'));
     if (ilSearchSettings::getInstance()->isLuceneUserSearchEnabled()) {
         $this->tabs_gui->addTarget('search_user', $this->ctrl->getLinkTargetByClass('illuceneusersearchgui'));
     }
     $fields = ilLuceneAdvancedSearchFields::getInstance();
     if (!ilSearchSettings::getInstance()->getHideAdvancedSearch() and $fields->getActiveFields()) {
         $this->tabs_gui->addTarget('search_advanced', $this->ctrl->getLinkTargetByClass('illuceneadvancedsearchgui'));
     }
     $this->tabs_gui->setTabActive('search_user');
 }
 /**
  *  Search content that belongs to the current user and that meet the search criteria
  *
  */
 public function searchContentFile()
 {
     /**
      * @var $ilAccess ilAccessHandler
      */
     global $ilAccess;
     $this->initContentSearchForm();
     if ($this->csform->checkInput()) {
         $allowedExt = array('ppt', 'pptx', 'flv', 'swf', 'pdf', 'gif', 'jpg', 'png', 'mp3', 'html');
         $result = array();
         include_once './Services/Search/classes/class.ilSearchSettings.php';
         if (ilSearchSettings::getInstance()->enabledLucene()) {
             include_once './Services/Search/classes/Lucene/class.ilLuceneSearcher.php';
             include_once './Services/Search/classes/Lucene/class.ilLuceneQueryParser.php';
             $qp = new ilLuceneQueryParser('+(type:file) ' . $this->csform->getInput('search_query'));
             $qp->parse();
             $searcher = ilLuceneSearcher::getInstance($qp);
             $searcher->search();
             include_once './Services/Search/classes/Lucene/class.ilLuceneSearchResultFilter.php';
             include_once './Services/Search/classes/Lucene/class.ilLucenePathFilter.php';
             $filter = ilLuceneSearchResultFilter::getInstance($this->user->getId());
             $filter->addFilter(new ilLucenePathFilter(ROOT_FOLDER_ID));
             $filter->setCandidates($searcher->getResult());
             $filter->filter();
             foreach ($filter->getResultIds() as $refId => $objId) {
                 $obj = ilObjectFactory::getInstanceByRefId($refId);
                 if (!in_array(strtolower($obj->getFileExtension()), $allowedExt)) {
                     continue;
                 }
                 if (!$ilAccess->checkAccessOfUser($this->user->getId(), 'read', '', $refId, '', $objId)) {
                     continue;
                 }
                 $result[$obj->getId()] = $obj->getId();
             }
         } else {
             include_once 'Services/Search/classes/class.ilQueryParser.php';
             $query_parser = new ilQueryParser($this->csform->getInput('search_query'));
             $query_parser->setCombination(QP_COMBINATION_OR);
             $query_parser->parse();
             if (!$query_parser->validate()) {
                 ilUtil::sendInfo($query_parser);
                 $this->csform->setValuesByPost();
                 return $this->showAddContent();
             }
             include_once 'Services/Search/classes/Like/class.ilLikeObjectSearch.php';
             $object_search = new ilLikeObjectSearch($query_parser);
             $object_search->setFilter(array('file'));
             $res = $object_search->performSearch();
             $res->setUserId($this->user->getId());
             $res->setMaxHits(999999);
             $res->filter(ROOT_FOLDER_ID, false);
             $res->setRequiredPermission('read');
             foreach ($res->getUniqueResults() as $entry) {
                 $obj = ilObjectFactory::getInstanceByRefId($entry['ref_id']);
                 if (!in_array(strtolower($obj->getFileExtension()), $allowedExt)) {
                     continue;
                 }
                 $result[$obj->getId()] = $obj->getId();
             }
         }
         if (count($result) > 0) {
             $this->showFileSearchResult($result);
             $_SESSION['contents']['search_result'] = $result;
         } else {
             ilUtil::sendInfo($this->txt('files_matches_in_no_results'));
             $this->csform->setValuesByPost();
             $this->showAddContent();
         }
     } else {
         $this->csform->setValuesByPost();
         return $this->showAddContent();
     }
 }
 function performSearch()
 {
     global $ilUser;
     $this->initSearchType(self::TYPE_LOM);
     if (!isset($_GET['page_number']) and $this->search_mode != 'in_results') {
         unset($_SESSION['adv_max_page']);
         $this->search_cache->deleteCachedEntries();
     }
     if (isset($_POST['query'])) {
         $this->search_cache->setQuery($_POST['query']);
     }
     include_once 'Services/Search/classes/class.ilSearchResult.php';
     $res =& new ilSearchResult();
     if ($res_con =& $this->__performContentSearch()) {
         $this->__storeEntries($res, $res_con);
     }
     if ($res_lan =& $this->__performLanguageSearch()) {
         $this->__storeEntries($res, $res_lan);
     }
     if ($res_gen =& $this->__performGeneralSearch()) {
         $this->__storeEntries($res, $res_gen);
     }
     if ($res_lif =& $this->__performLifecycleSearch()) {
         $this->__storeEntries($res, $res_lif);
     }
     if ($res_con =& $this->__performContributeSearch()) {
         $this->__storeEntries($res, $res_con);
     }
     if ($res_ent =& $this->__performEntitySearch()) {
         $this->__storeEntries($res, $res_ent);
     }
     if ($res_req =& $this->__performRequirementSearch()) {
         $this->__storeEntries($res, $res_req);
     }
     if ($res_for =& $this->__performFormatSearch()) {
         $this->__storeEntries($res, $res_for);
     }
     if ($res_edu =& $this->__performEducationalSearch()) {
         $this->__storeEntries($res, $res_edu);
     }
     if ($res_typ =& $this->__performTypicalAgeRangeSearch()) {
         $this->__storeEntries($res, $res_typ);
     }
     if ($res_rig =& $this->__performRightsSearch()) {
         $this->__storeEntries($res, $res_rig);
     }
     if ($res_cla =& $this->__performClassificationSearch()) {
         $this->__storeEntries($res, $res_cla);
     }
     if ($res_tax =& $this->__performTaxonSearch()) {
         $this->__storeEntries($res, $res_tax);
     }
     if ($res_key =& $this->__performKeywordSearch()) {
         $this->__storeEntries($res, $res_key);
     }
     $this->searchAdvancedMD($res);
     if ($this->search_mode == 'in_results') {
         include_once 'Services/Search/classes/class.ilSearchResult.php';
         $old_result_obj = new ilSearchResult($ilUser->getId());
         $old_result_obj->read(ADVANCED_MD_SEARCH);
         $res->diffEntriesFromResult($old_result_obj);
     }
     $res->filter($this->getRootNode(), ilSearchSettings::getInstance()->getDefaultOperator() == ilSearchSettings::OPERATOR_AND);
     $res->save();
     $this->showSearch();
     if (!count($res->getResults())) {
         ilUtil::sendInfo($this->lng->txt('search_no_match'));
     }
     if ($res->isLimitReached()) {
         #$message = sprintf($this->lng->txt('search_limit_reached'),$this->settings->getMaxHits());
         #ilUtil::sendInfo($message);
     }
     $this->addPager($res, 'adv_max_page');
     include_once './Services/Search/classes/class.ilSearchResultPresentation.php';
     $presentation = new ilSearchResultPresentation($this, ilSearchResultPresentation::MODE_STANDARD);
     $presentation->setResults($res->getResultsForPresentation());
     $presentation->setPreviousNext($this->prev_link, $this->next_link);
     if ($presentation->render()) {
         $this->tpl->setVariable('RESULTS', $presentation->getHTML(true));
     }
     return true;
 }
 /**
  * Append relevance 
  * @return
  */
 protected function appendRelevance($a_obj_id)
 {
     if ($this->getMode() != self::MODE_LUCENE) {
         return '';
     }
     if (!(int) $this->getRelevance($a_obj_id)) {
         return '';
     }
     include_once './Services/Search/classes/class.ilSearchSettings.php';
     if (!ilSearchSettings::getInstance()->isRelevanceVisible()) {
         return '';
     }
     $tpl = new ilTemplate('tpl.lucene_relevance.html', true, true, 'Services/Search');
     $width1 = (int) $this->getRelevance($a_obj_id);
     $width2 = (int) (100 - $width1);
     $tpl->setCurrentBlock('relevance');
     $tpl->setVariable('VAL_REL', sprintf("%d %%", $this->getRelevance($a_obj_id)));
     $tpl->setVariable('WIDTH_A', $width1);
     $tpl->setVariable('WIDTH_B', $width2);
     $tpl->setVariable('IMG_A', ilUtil::getImagePath("relevance_blue.png"));
     $tpl->setVariable('IMG_B', ilUtil::getImagePath("relevance_dark.png"));
     $tpl->parseCurrentBlock();
     $html = $tpl->get();
     return $html;
 }
 /**
  * Constructor 
  * @param
  * @return
  */
 public function __construct($a_cmd_class)
 {
     $this->cmdClass = $a_cmd_class;
     self::$MAX_SUBITEMS = ilSearchSettings::getInstance()->getMaxSubitems();
 }
 /**
  * Save Lucene settings 
  * @return
  */
 protected function saveLuceneSettingsObject()
 {
     global $ilBench, $ilLog, $ilSetting;
     $this->initFormLuceneSettings();
     $settings = ilSearchSettings::getInstance();
     $settings->enableLuceneUserSearch((int) $_POST['user_search_enabled']);
     $settings->setFragmentCount((int) $_POST['fragmentCount']);
     $settings->setFragmentSize((int) $_POST['fragmentSize']);
     $settings->setMaxSubitems((int) $_POST['maxSubitems']);
     $settings->showRelevance((int) $_POST['relevance']);
     $settings->enableLuceneOfflineFilter((int) $_POST['offline_filter']);
     $settings->enableLuceneMimeFilter((int) $_POST['mime_enabled']);
     $settings->setLuceneMimeFilter((array) $_POST['mime']);
     $settings->showSubRelevance((int) $_POST['subrelevance']);
     $settings->enablePrefixWildcardQuery((int) $_POST['prefix']);
     if ($this->form->checkInput()) {
         $settings->setLastIndexTime($this->form->getItemByPostVar('last_index')->getDate());
         $settings->update();
         // refresh lucene server
         $ilBench->start('Lucene', 'LuceneRefreshSettings');
         try {
             include_once './Services/WebServices/RPC/classes/class.ilRpcClientFactory.php';
             ilRpcClientFactory::factory('RPCAdministration')->refreshSettings(CLIENT_ID . '_' . $ilSetting->get('inst_id', 0));
             ilUtil::sendInfo($this->lng->txt('settings_saved'));
             $this->luceneSettingsObject();
             return true;
         } catch (Exception $e) {
             $ilLog->write(__METHOD__ . ': ' . $e->getMessage());
             ilUtil::sendFailure($e->getMessage());
             $this->luceneSettingsObject();
             return false;
         }
     }
     ilUtil::sendInfo($this->lng->txt('err_check_input'));
     $this->luceneSettingsObject();
     return false;
 }
 function keywordAutocomplete()
 {
     $force_all = (bool) $_GET["fetchall"];
     include_once "./Services/MetaData/classes/class.ilMDKeyword.php";
     $res = ilMDKeyword::_getMatchingKeywords(ilUtil::stripSlashes($_GET["term"]), "blp", $this->getParentObjId());
     include_once "./Services/Search/classes/class.ilSearchSettings.php";
     $cut = (int) ilSearchSettings::getInstance()->getAutoCompleteLength();
     $has_more = false;
     $result = array();
     foreach ($res as $r) {
         if (!$force_all && sizeof($result["items"]) >= $cut) {
             $has_more = true;
             break;
         }
         $entry = new stdClass();
         $entry->value = $r;
         $entry->label = $r;
         $result["items"][] = $entry;
     }
     $result["hasMoreResults"] = $has_more;
     include_once './Services/JSON/classes/class.ilJsonUtil.php';
     echo ilJsonUtil::encode($result);
     exit;
 }
 /**
  * Init standard search form.
  */
 public function getSearchAreaForm()
 {
     global $lng, $ilCtrl;
     include_once "Services/Form/classes/class.ilPropertyFormGUI.php";
     $form = new ilPropertyFormGUI();
     $form->setOpenTag(false);
     $form->setCloseTag(false);
     // term combination
     $radg = new ilHiddenInputGUI('search_term_combination');
     $radg->setValue(ilSearchSettings::getInstance()->getDefaultOperator());
     $form->addItem($radg);
     // search area
     include_once "./Services/Form/classes/class.ilRepositorySelectorInputGUI.php";
     $ti = new ilRepositorySelectorInputGUI($lng->txt("search_area"), "area");
     $ti->setSelectText($lng->txt("search_select_search_area"));
     $form->addItem($ti);
     $ti->readFromSession();
     // alex, 15.8.2012: Added the following lines to get the value
     // from the main menu top right input search form
     if (isset($_POST["root_id"])) {
         $ti->setValue($_POST["root_id"]);
         $ti->writeToSession();
     }
     $form->setFormAction($ilCtrl->getFormAction($this, 'performSearch'));
     return $form;
 }
 /**
  * get reference of ilFulltextWikiContentSearch
  * 
  * @param object query parser object
  * @return object reference of ilFulltextWikiContentSearch
  */
 public static function _getWikiContentSearchInstance($query_parser)
 {
     if (ilSearchSettings::getInstance()->enabledIndex()) {
         include_once 'Services/Search/classes/Fulltext/class.ilFulltextWikiContentSearch.php';
         return new ilFulltextWikiContentSearch($query_parser);
     } else {
         include_once 'Services/Search/classes/Like/class.ilLikeWikiContentSearch.php';
         return new ilLikeWikiContentSearch($query_parser);
     }
 }
 /**
  * Show search form
  * @return boolean
  */
 protected function showSearchForm()
 {
     global $ilCtrl, $lng;
     $this->tpl->addBlockFile('ADM_CONTENT', 'adm_content', 'tpl.lucene_search.html', 'Services/Search');
     // include js needed
     include_once "./Services/UIComponent/Overlay/classes/class.ilOverlayGUI.php";
     ilOverlayGUI::initJavascript();
     $this->tpl->addJavascript("./Services/Search/js/Search.js");
     $this->tpl->setVariable("FORM_ACTION", $ilCtrl->getFormAction($this, 'performSearch'));
     $this->tpl->setVariable("TERM", ilUtil::prepareFormOutput($this->search_cache->getQuery()));
     $this->tpl->setVariable("TXT_SEARCH", $lng->txt("search"));
     $this->tpl->setVariable("TXT_OPTIONS", $lng->txt("options"));
     $this->tpl->setVariable("ARR_IMG", ilUtil::img(ilUtil::getImagePath("mm_down_arrow_dark.png")));
     $this->tpl->setVariable("TXT_COMBINATION", $lng->txt("search_term_combination"));
     $this->tpl->setVariable('TXT_COMBINATION_DEFAULT', ilSearchSettings::getInstance()->getDefaultOperator() == ilSearchSettings::OPERATOR_AND ? $lng->txt('search_all_words') : $lng->txt('search_any_word'));
     $this->tpl->setVariable('TXT_TYPE_DEFAULT', $lng->txt("search_off"));
     $this->tpl->setVariable("TXT_AREA", $lng->txt("search_area"));
     $this->tpl->setVariable("TXT_FILTER_BY_TYPE", $lng->txt("search_filter_by_type"));
     $this->tpl->setVariable('FORM', $this->form->getHTML());
     // search area form
     $this->tpl->setVariable('SEARCH_AREA_FORM', $this->getSearchAreaForm()->getHTML());
     $this->tpl->setVariable("TXT_CHANGE", $lng->txt("change"));
     return true;
 }
 /**
  * Append relevance 
  * @return
  */
 protected function appendRelevance($a_obj_id)
 {
     if ($this->getMode() != self::MODE_LUCENE) {
         return '';
     }
     if (!(int) $this->getRelevance($a_obj_id)) {
         return '';
     }
     include_once './Services/Search/classes/class.ilSearchSettings.php';
     if (!ilSearchSettings::getInstance()->isRelevanceVisible()) {
         return '';
     }
     $tpl = new ilTemplate('tpl.lucene_relevance.html', true, true, 'Services/Search');
     include_once "Services/UIComponent/ProgressBar/classes/class.ilProgressBar.php";
     $pbar = ilProgressBar::getInstance();
     $pbar->setCurrent($this->getRelevance());
     $this->tpl->setCurrentBlock('relevance');
     $this->tpl->setVariable('REL_PBAR', $pbar->render());
     $this->tpl->parseCurrentBlock();
     $html = $tpl->get();
     return $html;
 }
 /**
  * get tabs 
  */
 protected function getTabs()
 {
     if (ilSearchSettings::getInstance()->getHideAdvancedSearch()) {
         return false;
     }
     $this->tabs_gui->addTarget('search', $this->ctrl->getLinkTargetByClass('illucenesearchgui'));
     if ($this->fields->getActiveFields()) {
         $this->tabs_gui->addTarget('search_advanced', $this->ctrl->getLinkTarget($this));
     }
     $this->tabs_gui->setTabActive('search_advanced');
 }
 /**
  * Check if relevance is visible
  * @return 
  */
 protected function enabledRelevance()
 {
     return ilSearchSettings::getInstance()->enabledLucene() and ilSearchSettings::getInstance()->isRelevanceVisible();
 }
 protected function parseRelevance($sub_item)
 {
     if (!ilSearchSettings::getInstance()->isSubRelevanceVisible()) {
         return '';
     }
     $this->tpl->addBlockFile('SUB_REL', 'sub_rel', 'tpl.lucene_sub_relevance.html', 'Services/Search');
     $relevance = $this->getHighlighter()->getRelevance($this->getObjId(), $sub_item);
     $width1 = (int) ((int) $relevance / 2);
     $width2 = (int) (50 - $width1);
     $this->tpl->setCurrentBlock('relev');
     $this->tpl->setVariable('VAL_REL', sprintf("%d %%", $relevance));
     $this->tpl->setVariable('WIDTH_A', $width1);
     $this->tpl->setVariable('WIDTH_B', $width2);
     $this->tpl->setVariable('IMG_A', ilUtil::getImagePath("relevance_blue.png"));
     $this->tpl->setVariable('IMG_B', ilUtil::getImagePath("relevance_dark.png"));
     $this->tpl->parseCurrentBlock();
 }