Author: sevein Date: Tue Jun 5 18:03:22 2012 New Revision: 11737 Log: Add facets to advanced search extending search/index action
Modified: branches/2.0/apps/qubit/modules/search/actions/advancedAction.class.php branches/2.0/apps/qubit/modules/search/actions/indexAction.class.php branches/2.0/apps/qubit/modules/search/templates/advancedSuccess.php branches/2.0/lib/QubitSearchPager.class.php Modified: branches/2.0/apps/qubit/modules/search/actions/advancedAction.class.php ============================================================================== --- branches/2.0/apps/qubit/modules/search/actions/advancedAction.class.php Tue Jun 5 13:44:10 2012 (r11736) +++ branches/2.0/apps/qubit/modules/search/actions/advancedAction.class.php Tue Jun 5 18:03:22 2012 (r11737) @@ -17,7 +17,7 @@ * along with Qubit Toolkit. If not, see <http://www.gnu.org/licenses/>. */ -class SearchAdvancedAction extends sfAction +class SearchAdvancedAction extends SearchIndexAction { public static $NAMES = array( @@ -193,264 +193,120 @@ } } - public function execute($request) + protected function parseQuery() { - if ('print' == $request->getGetParameter('media')) - { - $this->getResponse()->addStylesheet('print-preview', 'last'); - } - - if (!isset($request->limit)) - { - $request->limit = sfConfig::get('app_hits_per_page'); - } + $queryBool = new Elastica_Query_Bool(); - $this->form = new sfForm; - $this->form->getValidatorSchema()->setOption('allow_extra_fields', true); - - foreach ($this::$NAMES as $name) + if (!isset($this->request->searchFields)) { - $this->addField($name); + throw new Exception('Search is empty'); } - $this->form->bind($request->getRequestParameters() + $request->getGetParameters() + $request->getPostParameters()); - - if ($this->form->isValid()) + // Iterate over search fields + foreach ($this->request->searchFields as $key => $item) { - $query = new Elastica_Query; - $queryBool = new Elastica_Query_Bool(); - - // Process filters passing $queryBool - $this->hasFilters = false; - foreach ($this->form as $field) + if (empty($item['query'])) { - if (isset($this->request[$field->getName()])) - { - $this->processField($field, $queryBool); - } + continue; } - if (!is_array($request->searchFields)) - { - $request->searchFields = array($request->searchFields); - } - - $hasAnySearchField = false; - foreach ($request->searchFields as $key => $item) - { - if (empty($item['query'])) - { - continue; - } - - $hasAnySearchField = true; - - $queryText = new Elastica_Query_Text(); - - switch ($item['field']) - { - case 'identifier': - $queryText->setFieldQuery('identifier', $item['query']); - - break; - - case 'title': - $queryText->setFieldQuery('i18n.title', $item['query']); - - break; - - case 'scopeAndContent': - $queryText->setFieldQuery('i18n.scopeAndContet', $item['query']); - - break; - - case 'archivalHistory': - $queryText->setFieldQuery('i18n.archivalHistory', $item['query']); - - break; - - case 'extentAndMedium': - $queryText->setFieldQuery('i18n.extentAndMedium', $item['query']); + $hasAnySearchField = true; - break; + $queryText = new Elastica_Query_Text(); - case 'creatorHistory': - $queryText->setFieldQuery('', $item['query']); + switch ($item['field']) + { + case 'identifier': + $queryText->setFieldQuery('identifier', $item['query']); - break; + break; - case 'subject': - $queryText->setFieldQuery('', $item['query']); + case 'title': + $queryText->setFieldQuery('i18n.title', $item['query']); - break; + break; - case 'name': - $queryText->setFieldQuery('', $item['query']); + case 'scopeAndContent': + $queryText->setFieldQuery('i18n.scopeAndContet', $item['query']); - break; + break; - case 'place': - $queryText->setFieldQuery('', $item['query']); + case 'archivalHistory': + $queryText->setFieldQuery('i18n.archivalHistory', $item['query']); - break; + break; - default: - $queryText->setFieldQuery('_all', $item['query']); + case 'extentAndMedium': + $queryText->setFieldQuery('i18n.extentAndMedium', $item['query']); - break; - } + break; - if (0 == $key) - { - $item['operator'] == 'add'; - } + case 'creatorHistory': + $queryText->setFieldQuery('', $item['query']); - switch ($item['operator']) - { - case 'not': - $queryBool->addMustNot($queryText); + break; - break; + case 'subject': + $queryText->setFieldQuery('', $item['query']); - case 'or': - $queryBool->addShould($queryText); + break; - break; + case 'name': + $queryText->setFieldQuery('', $item['query']); - case 'add': - default: - $queryBool->addMust($queryText); + break; - break; - } - } + case 'place': + $queryText->setFieldQuery('', $item['query']); - // Interrupt execution because inexistence of search fields - if (!$hasAnySearchField) - { - return; - } + break; - $query->setQuery($queryBool); + default: + $queryText->setFieldQuery('_all', $item['query']); - // Add facets to list related items - foreach (array('repository.id', 'digitalObject.mediaTypeId') as $field) - { - $facet = new Elastica_Facet_Terms($field); - $facet->setField($field); - $facet->setSize(50); - $query->addFacet($facet); + break; } - $resultSet = QubitSearch::getInstance()->index->getType('QubitInformationObject')->search($query); - - $this->pager = new QubitSearchPager($resultSet); - $this->pager->setPage($request->page ? $request->page : 1); - - if ('print' != $request->getGetParameter('media')) + if (0 == $key) { - $this->pager->setMaxPerPage($request->limit); - } - else - { - $this->pager->setMaxPerPage(500); + $item['operator'] == 'add'; } - if ($this->pager->hasResults()) + switch ($item['operator']) { - $facets = array(); + case 'not': + $queryBool->addMustNot($queryText); - // build lookup tables for I18nized values - foreach ($resultSet->getFacets() as $name => $facet) - { - if (isset($facet['terms'])) - { - $ids = array(); - foreach ($facet['terms'] as $term) - { - $ids[$term['term']] = $term['count']; - } - } - - switch ($name) - { - // NB: this is actually used as a lookup table, not a facet - // it could alternately be done by iterating over the result documents - // for a potential performance increase - case 'repository.id': - $criteria = new Criteria; - $criteria->add(QubitRepository::ID, array_keys($ids), Criteria::IN); - - $repos = QubitRepository::get($criteria); - - foreach ($repos as $repo) - { - $reponames[$repo->id] = $repo->getAuthorizedFormOfName(array('cultureFallback' => true)); - } - - foreach ($facet['terms'] as $term) - { - $facets[strtr($name, '.', '_')]['terms'][$term['term']] = array( - 'count' => $term['count'], - 'term' => $reponames[$term['term']]); - } - - break; - - case 'digitalObject.mediaTypeId': - $criteria = new Criteria; - $criteria->add(QubitTerm::ID, array_keys($ids), Criteria::IN); - - $mediaTypes = QubitTerm::get($criteria); - - foreach ($mediaTypes as $mediaType) - { - $mediaTypeNames[$mediaType->id] = $mediaType->getName(array('cultureFallback' => true, 'culture' => $this->context->user->getCulture())); - } - - foreach ($facet['terms'] as $term) - { - $facets[strtr($name, '.', '_')]['terms'][$term['term']] = array( - 'count' => $term['count'], - 'term' => $mediaTypeNames[$term['term']]); - } + break; - break; - } - } + case 'or': + $queryBool->addShould($queryText); - $ancestorsIds = array(); - foreach ($this->pager->getResults() as $hit) - { - $doc = $hit->getData(); - foreach ($doc['ancestors'] as $item) - { - if (in_array($item, $ancestorsIds)) - { - continue; - } + break; - $ancestorsIds[] = $item; - } - } + case 'add': + default: + $queryBool->addMust($queryText); - $sql = 'SELECT - io.id, - o.slug, - io.title - FROM '.QubitInformationObjectI18n::TABLE_NAME.' AS io - LEFT JOIN '.QubitSlug::TABLE_NAME.' AS o ON (o.object_id = io.id AND io.culture = ?) - WHERE o.object_id IN ('.implode(',', $ancestorsIds).')'; - $this->pager->ancestors = array(); - foreach (QubitPdo::fetchAll($sql, array($this->context->user->getCulture())) as $ancestor) - { - $this->pager->ancestors[$ancestor->id] = array( - 'slug' => $ancestor->slug, - 'title' => $ancestor->title); - } + break; + } + } - $this->pager->facets = $facets; + // Process filters passing $queryBool + $this->hasFilters = false; + foreach ($this->form as $field) + { + if (isset($this->request[$field->getName()])) + { + $this->processField($field, $queryBool); } } + + return $queryBool; + } + + public function execute($request) + { + parent::execute($request); } } Modified: branches/2.0/apps/qubit/modules/search/actions/indexAction.class.php ============================================================================== --- branches/2.0/apps/qubit/modules/search/actions/indexAction.class.php Tue Jun 5 13:44:10 2012 (r11736) +++ branches/2.0/apps/qubit/modules/search/actions/indexAction.class.php Tue Jun 5 18:03:22 2012 (r11737) @@ -20,6 +20,10 @@ class SearchIndexAction extends sfAction { public static + $NAMES = array( + ); + + public static $FACETS = array( 'repository.id', 'subjects.id', @@ -27,37 +31,96 @@ 'places.id', 'names.id'); - public function execute($request) + protected function addField($name) { - if ('print' == $request->getGetParameter('media')) + } + + protected function parseQuery() + { + // if querystring is empty, use match_all + if ('' == preg_replace('/[\s\t\r\n]*/', '', $this->request->query)) { - $this->getResponse()->addStylesheet('print-preview', 'last'); + return new Elastica_Query_MatchAll(); } - if (!isset($request->limit)) + try { - $request->limit = sfConfig::get('app_hits_per_page'); + // Parse query string, Elastica_Query_QueryString + $query = QubitSearch::getInstance()->parse($this->request->query); } + catch (Exception $e) + { + $this->error = $e->getMessage(); + + return null; + } + + return $query; + } - if (isset($request->query)) + protected function filterQuery($query) + { + $this->filters = array(); + + $queryTerm = new Elastica_Query_Term(); + $queryBool = new Elastica_Query_Bool(); + + if ($query instanceof Elastica_Query_QueryString) { - $this->title = $this->context->i18n->__('Search for [%1%]', array('%1%' => $request->query)); - $this->response->setTitle("{$this->title} - {$this->response->getTitle()}"); + $queryBool->addMust($query); } - $queryParsed = $this->parseQuery(); // Elastica_Query_MatchAll or Elastica_Query_QueryString + foreach ($this->request->getGetParameters() as $param => $value) + { + if (in_array(strtr($param, '_', '.'), self::$FACETS)) + { + foreach (explode(',', $value) as $facetValue) + { + // don't include empty filters (querystring sanitization) + if ('' != preg_replace('/[\s\t\r\n]*/', '', $facetValue)) + { + $this->filters[$param][] = $facetValue; + $query = $queryBool->addMust($queryTerm->setTerm(strtr($param, '_', '.'), $facetValue)); + } + } + } + } - if (!empty($this->error)) + return $query; + } + + protected function facetQuery($query) + { + foreach (self::$FACETS as $field) { - return; + $facet = new Elastica_Facet_Terms($field); + $facet->setField($field); + $facet->setSize(50); + $query->addFacet($facet); } - $queryFiltered = $this->filterQuery($queryParsed); // Elastica_Query_Bool + $facet = new Elastica_Facet_Range('dates.startDate'); + $facet->setField('dates.startDate'); + $facet->addRange(null, null); + $query->addFacet($facet); - $query = new Elastica_Query($queryFiltered); // Elastica_Query - $query = $this->facetQuery($query); // Elastica_Query + return $query; + } + + protected function buildQuery() + { + // Parse query string - Elastica_Query_{MatchAll,QueryString} + $query = $this->parseQuery(); + + // Filter by selected facets - Elastica_Query_Bool + $query = $this->filterQuery($query); + + // Elastica_Query + $query = new Elastica_Query($query); + + // Add facets - Elastica_Query + $query = $this->facetQuery($query); - // tie-break sort on slug (ie. alphanumeric sort), eg. for match_all $query->setSort(array('_score' => 'desc', 'slug' => 'asc')); $query->setLimit($request->limit); @@ -71,273 +134,239 @@ $query->setQuery(new Elastica_Query_Term(array('repository._id' => $request->realm))); } - try - { - $resultSet = QubitSearch::getInstance()->index->getType('QubitInformationObject')->search($query); - } - catch (Exception $e) - { - $this->error = $e->getMessage(); + return $query; + } - return; + protected function populateFacets() + { + if (!$this->pager->hasFacets()) + { + return false; } - // mock up a QubitPager for partial template backward compatibility - $this->pager = new QubitSearchPager($resultSet); - $this->pager->setPage($request->page ? $request->page : 1); + $facets = array(); - if ('print' != $request->getGetParameter('media')) + foreach ($this->pager->getFacets() as $name => $facet) { - $this->pager->setMaxPerPage($request->limit); - } - else - { - $this->pager->setMaxPerPage(500); // force for print - } + if (isset($facet['terms'])) + { + $ids = array(); + foreach ($facet['terms'] as $term) + { + $ids[$term['term']] = $term['count']; + } + } - if ($this->pager->hasResults()) - { - // Pre-populate some lookup tables for multilingual values - if ($resultSet->hasFacets()) + switch ($name) { - $facets = array(); + case 'repository.id': + $criteria = new Criteria; + $criteria->add(QubitRepository::ID, array_keys($ids), Criteria::IN); - foreach ($resultSet->getFacets() as $name => $facet) - { - if (isset($facet['terms'])) + $repos = QubitRepository::get($criteria); + + foreach ($repos as $repo) { - $ids = array(); - foreach ($facet['terms'] as $term) - { - $ids[$term['term']] = $term['count']; - } + $reponames[$repo->id] = $repo->getAuthorizedFormOfName(array('cultureFallback' => true, 'culture' => $this->context->user->getCulture())); } - switch ($name) + foreach ($facet['terms'] as $term) { - case 'repository.id': - $criteria = new Criteria; - $criteria->add(QubitRepository::ID, array_keys($ids), Criteria::IN); - - $repos = QubitRepository::get($criteria); - - foreach ($repos as $repo) - { - $reponames[$repo->id] = $repo->getAuthorizedFormOfName(array('cultureFallback' => true, 'culture' => $this->context->user->getCulture())); - } - - foreach ($facet['terms'] as $term) - { - $facets[strtr($name, '.', '_')]['terms'][$term['term']] = array( - 'count' => $term['count'], - 'term' => $reponames[$term['term']]); - } - - break; - - case 'subjects.id': - $criteria = new Criteria; - $criteria->add(QubitTerm::ID, array_keys($ids), Criteria::IN); + $facets[strtr($name, '.', '_')]['terms'][$term['term']] = array( + 'count' => $term['count'], + 'term' => $reponames[$term['term']]); + } - $subjectAPs = QubitTerm::get($criteria); + break; - foreach ($subjectAPs as $subjectAP) - { - $subjectAPnames[$subjectAP->id] = $subjectAP->getName(array('cultureFallback' => true, 'culture' => $this->context->user->getCulture())); - } + case 'subjects.id': + $criteria = new Criteria; + $criteria->add(QubitTerm::ID, array_keys($ids), Criteria::IN); - foreach ($facet['terms'] as &$term) - { - $facets[strtr($name, '.', '_')]['terms'][$term['term']] = array( - 'count' => $term['count'], - 'term' => $subjectAPnames[$term['term']]); - } + $subjectAPs = QubitTerm::get($criteria); - break; + foreach ($subjectAPs as $subjectAP) + { + $subjectAPnames[$subjectAP->id] = $subjectAP->getName(array('cultureFallback' => true, 'culture' => $this->context->user->getCulture())); + } - case 'digitalObject.mediaTypeId': - $criteria = new Criteria; - $criteria->add(QubitTerm::ID, array_keys($ids), Criteria::IN); + foreach ($facet['terms'] as &$term) + { + $facets[strtr($name, '.', '_')]['terms'][$term['term']] = array( + 'count' => $term['count'], + 'term' => $subjectAPnames[$term['term']]); + } - $mediaTypes = QubitTerm::get($criteria); + break; - foreach ($mediaTypes as $mediaType) - { - $mediaTypeNames[$mediaType->id] = $mediaType->getName(array('cultureFallback' => true, 'culture' => $this->context->user->getCulture())); - } + case 'digitalObject.mediaTypeId': + $criteria = new Criteria; + $criteria->add(QubitTerm::ID, array_keys($ids), Criteria::IN); - foreach ($facet['terms'] as $term) - { - $facets[strtr($name, '.', '_')]['terms'][$term['term']] = array( - 'count' => $term['count'], - 'term' => $mediaTypeNames[$term['term']]); - } + $mediaTypes = QubitTerm::get($criteria); - break; + foreach ($mediaTypes as $mediaType) + { + $mediaTypeNames[$mediaType->id] = $mediaType->getName(array('cultureFallback' => true, 'culture' => $this->context->user->getCulture())); + } - case 'dates.startDate': - $facets[strtr($name, '.', '_')] = $facet['ranges'][0]; // FIXME: is this the best way? + foreach ($facet['terms'] as $term) + { + $facets[strtr($name, '.', '_')]['terms'][$term['term']] = array( + 'count' => $term['count'], + 'term' => $mediaTypeNames[$term['term']]); + } - break; + break; - case 'places.id': - $criteria = new Criteria; - $criteria->add(QubitTerm::ID, array_keys($ids), Criteria::IN); + case 'dates.startDate': + $facets[strtr($name, '.', '_')] = $facet['ranges'][0]; // FIXME: is this the best way? - $placeAPs = QubitTerm::get($criteria); + break; - foreach ($placeAPs as $placeAP) - { - $placeAPnames[$placeAP->id] = $placeAP->getName(array('cultureFallback' => true, 'culture' => $this->context->user->getCulture())); - } + case 'places.id': + $criteria = new Criteria; + $criteria->add(QubitTerm::ID, array_keys($ids), Criteria::IN); - foreach ($facet['terms'] as &$term) - { - $facets[strtr($name, '.', '_')]['terms'][$term['term']] = array( - 'count' => $term['count'], - 'term' => $placeAPnames[$term['term']]); - } + $placeAPs = QubitTerm::get($criteria); - break; + foreach ($placeAPs as $placeAP) + { + $placeAPnames[$placeAP->id] = $placeAP->getName(array('cultureFallback' => true, 'culture' => $this->context->user->getCulture())); + } - case 'names.id': - $criteria = new Criteria; - $criteria->add(QubitActor::ID, array_keys($ids), Criteria::IN); + foreach ($facet['terms'] as &$term) + { + $facets[strtr($name, '.', '_')]['terms'][$term['term']] = array( + 'count' => $term['count'], + 'term' => $placeAPnames[$term['term']]); + } - $nameAPs = QubitActor::get($criteria); + break; - foreach ($nameAPs as $nameAP) - { - $nameAPnames[$nameAP->id] = $nameAP->getAuthorizedFormOfName(array('cultureFallback' => true, 'culture' => $this->context->user->getCulture())); - } + case 'names.id': + $criteria = new Criteria; + $criteria->add(QubitActor::ID, array_keys($ids), Criteria::IN); - foreach ($facet['terms'] as &$term) - { - $facets[strtr($name, '.', '_')]['terms'][$term['term']] = array( - 'count' => $term['count'], - 'term' => $nameAPnames[$term['term']]); - } + $nameAPs = QubitActor::get($criteria); - break; + foreach ($nameAPs as $nameAP) + { + $nameAPnames[$nameAP->id] = $nameAP->getAuthorizedFormOfName(array('cultureFallback' => true, 'culture' => $this->context->user->getCulture())); + } + foreach ($facet['terms'] as &$term) + { + $facets[strtr($name, '.', '_')]['terms'][$term['term']] = array( + 'count' => $term['count'], + 'term' => $nameAPnames[$term['term']]); } - } - $this->pager->facets = $facets; - } + break; - $this->pager->levelsOfDescription = array(); - foreach (QubitTerm::getLevelsOfDescription() as $lod) - { - $this->pager->levelsOfDescription[$lod->id] = $lod->getName(array('cultureFallback' => true, 'culture' => $this->context->user->getCulture())); } - $ancestorsIds = array(); - foreach ($this->pager->getResults() as $hit) + $this->pager->facets = $facets; + } + + // Populate level of descriptions + $this->pager->levelsOfDescription = array(); + foreach (QubitTerm::getLevelsOfDescription() as $lod) + { + $this->pager->levelsOfDescription[$lod->id] = $lod->getName(array('cultureFallback' => true, 'culture' => $this->context->user->getCulture())); + } + + // Populate ancestors + $ancestorsIds = array(); + foreach ($this->pager->getResults() as $hit) + { + $doc = $hit->getData(); + foreach ($doc['ancestors'] as $item) { - $doc = $hit->getData(); - foreach ($doc['ancestors'] as $item) + if (in_array($item, $ancestorsIds)) { - if (in_array($item, $ancestorsIds)) - { - continue; - } - - $ancestorsIds[] = $item; + continue; } - } - $sql = 'SELECT - io.id, - o.slug, - io.title - FROM '.QubitInformationObjectI18n::TABLE_NAME.' AS io - LEFT JOIN '.QubitSlug::TABLE_NAME.' AS o ON (o.object_id = io.id AND io.culture = ?) - WHERE o.object_id IN ('.implode(',', $ancestorsIds).')'; - $this->pager->ancestors = array(); - foreach (QubitPdo::fetchAll($sql, array($this->context->user->getCulture())) as $ancestor) - { - $this->pager->ancestors[$ancestor->id] = array( - 'slug' => $ancestor->slug, - 'title' => $ancestor->title); + $ancestorsIds[] = $item; } } - else if (empty($this->error)) - { - // no error, must be empty result set - $this->error = $this->context->i18n->__('No results found.'); + + $sql = 'SELECT + io.id, + o.slug, + io.title + FROM '.QubitInformationObjectI18n::TABLE_NAME.' AS io + LEFT JOIN '.QubitSlug::TABLE_NAME.' AS o ON (o.object_id = io.id AND io.culture = ?) + WHERE o.object_id IN ('.implode(',', $ancestorsIds).')'; + $this->pager->ancestors = array(); + foreach (QubitPdo::fetchAll($sql, array($this->context->user->getCulture())) as $ancestor) + { + $this->pager->ancestors[$ancestor->id] = array( + 'slug' => $ancestor->slug, + 'title' => $ancestor->title); } } - public function parseQuery() + public function execute($request) { - // if querystring is empty, use match_all - if ('' == preg_replace('/[\s\t\r\n]*/', '', $this->request->query)) + if ('print' == $request->getGetParameter('media')) { - return new Elastica_Query_MatchAll(); + $this->getResponse()->addStylesheet('print-preview', 'last'); } - try + if (!isset($request->limit)) { - // Parse query string - $queryParsed = QubitSearch::getInstance()->parse($this->request->query); // Elastica_Query_QueryString + $request->limit = sfConfig::get('app_hits_per_page'); } - catch (Exception $e) - { - $this->error = $e->getMessage(); - return null; + $this->form = new sfForm; + $this->form->getValidatorSchema()->setOption('allow_extra_fields', true); + + foreach ($this::$NAMES as $name) + { + $this->addField($name); } - return $queryParsed; - } + $this->form->bind($request->getGetParameters()); - public function facetQuery($query) - { - foreach (self::$FACETS as $field) + if ($this->form->isValid()) { - $facet = new Elastica_Facet_Terms($field); - $facet->setField($field); - $facet->setSize(50); - $query->addFacet($facet); - } + try + { + $query = $this->buildQuery(); - $facet = new Elastica_Facet_Range('dates.startDate'); - $facet->setField('dates.startDate'); - $facet->addRange(null, null); - $query->addFacet($facet); + $resultSet = QubitSearch::getInstance()->index->getType('QubitInformationObject')->search($query); + } + catch (Exception $e) + { + $this->error = $e->getMessage(); - return $query; - } + return; + } - public function filterQuery($query) - { - $this->filters = array(); - $this->facets = array(); - $queryTerm = new Elastica_Query_Term(); - $queryBool = new Elastica_Query_Bool(); + // Build pager + $this->pager = new QubitSearchPager($resultSet); + $this->pager->setPage($request->page ? $request->page : 1); - if ($query instanceof Elastica_Query_QueryString) - { - $queryBool->addMust($query); - } + if ('print' != $request->getGetParameter('media')) + { + $this->pager->setMaxPerPage($request->limit); + } + else + { + $this->pager->setMaxPerPage(500); + } - foreach ($this->request->getGetParameters() as $param => $value) - { - if (in_array(strtr($param, '_', '.'), array($this->facets))) + if ($this->pager->hasResults()) { - foreach (explode(',', $value) as $facetValue) - { - // don't include empty filters (querystring sanitization) - if ('' != preg_replace('/[\s\t\r\n]*/', '', $facetValue)) - { - $this->filters[$param][] = $facetValue; - $query = $queryBool->addMust($queryTerm->setTerm(strtr($param, '_', '.'), $facetValue)); - } - } + // Populate facets + $this->populateFacets(); + } + else if (empty($this->error)) + { + $this->error = $this->context->i18n->__('No results found.'); } } - - return $query; } } Modified: branches/2.0/apps/qubit/modules/search/templates/advancedSuccess.php ============================================================================== --- branches/2.0/apps/qubit/modules/search/templates/advancedSuccess.php Tue Jun 5 13:44:10 2012 (r11736) +++ branches/2.0/apps/qubit/modules/search/templates/advancedSuccess.php Tue Jun 5 18:03:22 2012 (r11737) @@ -47,7 +47,7 @@ <?php if (isset($pager)): ?> - <?php echo get_partial('search/searchResults', array('pager' => $pager)) ?> + <?php echo get_partial('search/searchResults', array('pager' => $pager, 'filters' => $filters)) ?> <?php endif; ?> Modified: branches/2.0/lib/QubitSearchPager.class.php ============================================================================== --- branches/2.0/lib/QubitSearchPager.class.php Tue Jun 5 13:44:10 2012 (r11736) +++ branches/2.0/lib/QubitSearchPager.class.php Tue Jun 5 18:03:22 2012 (r11737) @@ -88,4 +88,9 @@ { return $this->resultSet->getFacets(); } + + public function hasFacets() + { + return $this->resultSet->hasFacets(); + } } -- You received this message because you are subscribed to the Google Groups "Qubit Toolkit Commits" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/qubit-commits?hl=en.
