/** * Perform advanced meta data search * * @access private * @param obj result object * */ private function searchAdvancedMD($res) { include_once 'Services/AdvancedMetaData/classes/class.ilAdvancedMDFieldDefinition.php'; foreach ($_POST as $key => $value) { if (!is_numeric($key)) { continue; } if (!$value) { continue; } $def = ilAdvancedMDFieldDefinition::_getInstanceByFieldId($key); include_once 'Services/Search/classes/class.ilObjectSearchFactory.php'; include_once 'Services/Search/classes/class.ilQueryParser.php'; if ($def->getFieldType() == ilAdvancedMDFieldDefinition::TYPE_SELECT) { $value = (int) $value; $options = $def->getFieldValues(); if (!isset($options[$value - 1])) { continue; } $value = $options[$value - 1]; } if ($def->getFieldType() == ilAdvancedMDFieldDefinition::TYPE_DATE) { $start = $this->toUnixTime($_POST['date_start'][$key]['date']); $end = $this->toUnixTime($_POST['date_end'][$key]['date']); } if ($def->getFieldType() == ilAdvancedMDFieldDefinition::TYPE_DATETIME) { $start = $this->toUnixTime($_POST['date_start'][$key]['date'], $_POST['date_start'][$key]['time']); $end = $this->toUnixTime($_POST['date_end'][$key]['date'], $_POST['date_end'][$key]['time']); } $query_parser = new ilQueryParser(ilUtil::stripSlashes($value)); if ($_POST['boolean'][$key] == 1) { $query_parser->setCombination('and'); } else { $query_parser->setCombination('or'); } $query_parser->parse(); $adv_md_search = ilObjectSearchFactory::_getAdvancedMDSearchInstance($query_parser); $adv_md_search->setDefinition($def); $adv_md_search->setTimeRange($start, $end); $adv_md_search->setFilter($this->filter); $res_field = $adv_md_search->performSearch(); $this->__storeEntries($res, $res_field); } return $res; }
/** * Perform advanced meta data search * * @access private * @param obj result object * */ private function searchAdvancedMD($res) { $this->initFormSearch(); include_once 'Services/AdvancedMetaData/classes/class.ilAdvancedMDFieldDefinition.php'; foreach (array_keys($this->options) as $key) { if (substr($key, 0, 3) != 'adv') { continue; } // :TODO: ? if (!$key) { continue; } $field_id = substr($key, 4); $field = ilAdvancedMDFieldDefinition::getInstance($field_id); $field_form = ilADTFactory::getInstance()->getSearchBridgeForDefinitionInstance($field->getADTDefinition(), true, false); $field_form->setElementId("query[" . $key . "]"); $field_form->setForm($this->form); // reload search values $field_form->importFromPost($this->options); $field_form->validate(); $parser_value = $field->getSearchQueryParserValue($field_form); include_once 'Services/Search/classes/class.ilQueryParser.php'; include_once 'Services/Search/classes/class.ilObjectSearchFactory.php'; $adv_md_search = ilObjectSearchFactory::_getAdvancedMDSearchInstance(new ilQueryParser($parser_value)); $adv_md_search->setFilter($this->filter); $adv_md_search->setDefinition($field); $adv_md_search->setSearchElement($field_form); $res_field = $adv_md_search->performSearch(); if ($res_field instanceof ilSearchResult) { $this->__storeEntries($res, $res_field); } } }