Author: sevein
Date: Thu Apr 19 13:45:04 2012
New Revision: 11474
Log:
Refactor repository browser controller using class methods and attributes to
build facets
Modified:
branches/2.0/apps/qubit/modules/repository/actions/browseAction.class.php
branches/2.0/apps/qubit/modules/repository/templates/browseSuccess.php
branches/2.0/apps/qubit/modules/taxonomy/actions/browseAction.class.php
Modified:
branches/2.0/apps/qubit/modules/repository/actions/browseAction.class.php
==============================================================================
--- branches/2.0/apps/qubit/modules/repository/actions/browseAction.class.php
Thu Apr 19 00:02:48 2012 (r11473)
+++ branches/2.0/apps/qubit/modules/repository/actions/browseAction.class.php
Thu Apr 19 13:45:04 2012 (r11474)
@@ -26,160 +26,106 @@
class RepositoryBrowseAction extends sfAction
{
- public function execute($request)
- {
- if (!isset($request->limit))
- {
- $request->limit = sfConfig::get('app_hits_per_page');
- }
+ protected $query;
- // retrieve all institutions
- $query = new Elastica_Query(new Elastica_Query_MatchAll());
- $query = $this->facetQuery($query);
+ public static
+ $FACETS = array(
+ 'types',
+ 'contact.i18n.region');
- // set paging for request
- $query->setLimit($this->request->limit);
+ protected function addFacet($name)
+ {
+ $facet = new Elastica_Facet_Terms($name);
+ $facet->setField($name);
+ $facet->setSize(50);
- if (!empty($this->request->page))
- {
- $query->setFrom(($this->request->page - 1) * $this->request->limit);
- }
+ $this->query->addFacet($facet);
+ }
- try
- {
- $resultSet =
QubitSearch::getInstance()->index->getType('QubitRepository')->search($query);
- }
- catch (Exception $e)
+ protected function buildFacetTable($name, $facet)
+ {
+ $ids = array();
+ foreach ($facet['terms'] as $term)
{
- $this->error = $e->getMessage();
-
- return;
+ $ids[$term['term']] = $term['count'];
}
- // mock up a QubitPager for partial template backward compatibility
- $this->pager = new stdClass();
- $this->pager->resultSet = $resultSet;
-
- if (0 < $resultSet->getTotalHits())
+ switch ($name)
{
- $this->pager->resultSet = $resultSet;
- $this->pager->page = $request->page ? $request->page : 1;
+ case 'types':
+ $criteria = new Criteria;
+ $criteria->add(QubitObjectTermRelation::ID, array_keys($ids),
Criteria::IN);
+ $types = QubitObjectTermRelation::get($criteria);
- if ($resultSet->hasFacets())
- {
- // build lookup tables for I18nized values
- foreach ($resultSet->getFacets() as $name => $facet)
+ foreach ($types as $type)
{
- $ids = array();
- foreach ($facet['terms'] as $term)
- {
- $ids[$term['term']] = $term['count'];
- }
-
- switch ($name)
- {
- case 'types':
- $criteria = new Criteria;
- $criteria->add(QubitObjectTermRelation::ID, array_keys($ids),
Criteria::IN);
-
- $types = QubitObjectTermRelation::get($criteria);
-
- foreach ($types as $type)
- {
- $typeNames[$type->id] =
$type->term->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' => $typeNames[$term['term']]);
- }
- break;
-
- case 'contact.i18n.region':
- foreach ($facet['terms'] as $term)
- {
- $facets[strtr($name, '.', '_')]['terms'][$term['term']] =
array('count' => $term['count'],
-
'term' => $term['term']);
- }
- break;
- }
+ $typeNames[$type->id] = $type->term->getName(array(
+ 'cultureFallback' => true,
+ 'culture' => $this->context->user->getCulture()));
}
- $this->pager->facets = $facets;
- }
- }
- else if (empty($this->error))
- {
- // no error, must be empty result set
- $this->error = $this->context->i18n->__('No subjects found.');
- }
-/*
- if ($this->getUser()->isAuthenticated())
- {
- $this->sortSetting = sfConfig::get('app_sort_browser_user');
- }
- else
- {
- $this->sortSetting = sfConfig::get('app_sort_browser_anonymous');
- }
- $criteria = new Criteria;
+ foreach ($facet['terms'] as $term)
+ {
+ $this->pager->facets[strtr($name, '.', '_')]['terms'][$term['term']]
= array(
+ 'count' => $term['count'],
+ 'term' => $typeNames[$term['term']]); }
- // Do source culture fallback
- $criteria = QubitCultureFallback::addFallbackCriteria($criteria,
'QubitActor');
+ break;
- switch ($request->sort)
- {
- case 'nameDown':
- $criteria->addDescendingOrderByColumn('authorized_form_of_name');
+ case 'contact.i18n.region':
+ foreach ($facet['terms'] as $term)
+ {
+ $this->pager->facets[strtr($name, '.', '_')]['terms'][$term['term']]
= array(
+ 'count' => $term['count'],
+ 'term' => $term['term']);
+ }
break;
+ }
+ }
- case 'nameUp':
- $criteria->addAscendingOrderByColumn('authorized_form_of_name');
+ public function execute($request)
+ {
+ if (empty($request->limit))
+ {
+ $request->limit = sfConfig::get('app_hits_per_page');
+ }
- break;
+ $this->query = new Elastica_Query(new Elastica_Query_MatchAll());
- case 'updatedDown':
- $criteria->addDescendingOrderByColumn(QubitObject::UPDATED_AT);
+ foreach ($this::$FACETS as $facet)
+ {
+ $this->addFacet($facet);
+ }
- break;
+ $this->query->setLimit($request->limit);
- case 'updatedUp':
- $criteria->addAscendingOrderByColumn(QubitObject::UPDATED_AT);
+ if (!empty($request->page))
+ {
+ $this->query->setFrom(($request->page - 1) * $request->limit);
+ }
- break;
+ try
+ {
+ $resultSet =
QubitSearch::getInstance()->index->getType('QubitRepository')->search($this->query);
+ }
+ catch (Exception $e)
+ {
+ $this->error = $e->getMessage();
- default:
- if ('alphabetic' == $this->sortSetting)
- {
- $criteria->addAscendingOrderByColumn('authorized_form_of_name');
- }
- else if ('lastUpdated' == $this->sortSetting)
- {
- $criteria->addDescendingOrderByColumn(QubitObject::UPDATED_AT);
- }
+ return sfView::NONE;
}
- // Page results
- $this->pager = new QubitPager('QubitRepository');
- $this->pager->setCriteria($criteria);
- $this->pager->setMaxPerPage($request->limit);
+ $this->pager = new QubitSearchPager($resultSet);
$this->pager->setPage($request->page);
-*/
- }
+ $this->pager->setMaxPerPage($request->limit);
- public function facetQuery($query)
- {
- foreach (array('types', 'contact.i18n.region') as $field)
+ if ($this->pager->hasResults())
{
- $facet = new Elastica_Facet_Terms($field);
- $facet->setField($field);
- $facet->setSize(50);
- $query->addFacet($facet);
+ foreach ($this->pager->getFacets() as $name => $facet)
+ {
+ $this->buildFacetTable($name, $facet);
+ }
}
-
- return $query;
}
-
}
Modified: branches/2.0/apps/qubit/modules/repository/templates/browseSuccess.php
==============================================================================
--- branches/2.0/apps/qubit/modules/repository/templates/browseSuccess.php
Thu Apr 19 00:02:48 2012 (r11473)
+++ branches/2.0/apps/qubit/modules/repository/templates/browseSuccess.php
Thu Apr 19 13:45:04 2012 (r11474)
@@ -5,13 +5,13 @@
<div class="span12 hidden-phone">
<h1>
<?php echo
image_tag('/plugins/qtDominionPlugin/images/icons-large/icon-institutions.png',
array('width' => '42', 'height' => '42')) ?>
- <?php echo __('%1% Institutions', array('%1%' =>
$pager->resultSet->getTotalHits())) ?>
+ <?php echo __('%1% Institutions', array('%1%' =>
$pager->getNbResults())) ?>
</h1>
</div>
<div id="filter" class="span12 visible-phone">
<h2 class="widebtn btn-huge" data-toggle="collapse"
data-target="#facets">
- <?php echo __('Filter %1% Institutions', array('%1%' =>
$pager->resultSet->getTotalHits())) ?>
+ <?php echo __('Filter %1% Institutions', array('%1%' =>
$pager->getNbResults())) ?>
</h2>
</div>
@@ -30,7 +30,7 @@
<div class="scrollable">
<ul>
<li class="active"><?php echo link_to(__('All'), array('types' =>
null) + $sf_request->getParameterHolder()->getAll()) ?></li>
- <?php foreach($pager->facets['types']['terms'] as $id => $term): ?>
+ <?php foreach ($pager->facets['types']['terms'] as $id => $term):
?>
<li><?php echo
link_to(__($term['term']).'<span>'.$term['count'].'</span>', array('types' =>
$id) + $sf_request->getParameterHolder()->getAll()) ?></li>
<?php endforeach; ?>
</ul>
@@ -46,7 +46,7 @@
<div class="scrollable">
<ul>
- <li class="active"><?php echo link_to(__('All'),
array('contact_i18n_region' => null) +
$sf_request->getParameterHolder()->getAll()); ?></li>
+ <li class="active"><?php echo link_to(__('All'),
array('contact_i18n_region' => null) +
$sf_request->getParameterHolder()->getAll()) ?></li>
<?php foreach($pager->facets['contact_i18n_region']['terms'] as
$id => $term): ?>
<li><?php echo
link_to(__($term['term']).'<span>'.$term['count'].'</span>',
array('contact_i18n_region' => $id) +
$sf_request->getParameterHolder()->getAll()) ?></li>
<?php endforeach; ?>
@@ -61,7 +61,7 @@
<div class="section">
- <?php foreach ($pager->resultSet->getResults() as $hit): ?>
+ <?php foreach ($pager->getResults() as $hit): ?>
<?php $doc = build_i18n_doc($hit) ?>
<div class="institution maxi">
<h2 class="filltext"><?php echo
link_to($doc[$sf_user->getCulture()]['authorizedFormOfName'] ?:
$doc[$doc['sourceCulture']]['authorizedFormOfName'], array('module' =>
'repository', 'slug' => $doc['slug'])) ?></h2>
@@ -70,7 +70,11 @@
</div>
- <?php echo get_partial('default/pager', array('pager' => $pager)) ?>
+ <div class="section">
+
+ <?php echo get_partial('default/pager', array('pager' => $pager)) ?>
+
+ </div>
</div>
Modified:
branches/2.0/apps/qubit/modules/taxonomy/actions/browseAction.class.php
==============================================================================
--- branches/2.0/apps/qubit/modules/taxonomy/actions/browseAction.class.php
Thu Apr 19 00:02:48 2012 (r11473)
+++ branches/2.0/apps/qubit/modules/taxonomy/actions/browseAction.class.php
Thu Apr 19 13:45:04 2012 (r11474)
@@ -19,6 +19,64 @@
class TaxonomyBrowseAction extends sfAction
{
+ protected $query;
+
+ public static
+ $FACETS = array(
+ 'types',
+ 'contact.i18n.region');
+
+ protected function addFacet($name)
+ {
+ $facet = new Elastica_Facet_Terms($name);
+ $facet->setField($name);
+ $facet->setSize(50);
+
+ $this->query->addFacet($facet);
+ }
+
+ protected function buildFacetTable($name, $facet)
+ {
+ $ids = array();
+ foreach ($facet['terms'] as $term)
+ {
+ $ids[$term['term']] = $term['count'];
+ }
+
+ switch ($name)
+ {
+ case 'types':
+ $criteria = new Criteria;
+ $criteria->add(QubitObjectTermRelation::ID, array_keys($ids),
Criteria::IN);
+ $types = QubitObjectTermRelation::get($criteria);
+
+ foreach ($types as $type)
+ {
+ $typeNames[$type->id] = $type->term->getName(array(
+ 'cultureFallback' => true,
+ 'culture' => $this->context->user->getCulture()));
+ }
+
+ foreach ($facet['terms'] as $term)
+ {
+ $this->pager->facets[strtr($name, '.', '_')]['terms'][$term['term']]
= array(
+ 'count' => $term['count'],
+ 'term' => $typeNames[$term['term']]); }
+
+ break;
+
+ case 'contact.i18n.region':
+ foreach ($facet['terms'] as $term)
+ {
+ $this->pager->facets[strtr($name, '.', '_')]['terms'][$term['term']]
= array(
+ 'count' => $term['count'],
+ 'term' => $term['term']);
+ }
+
+ break;
+ }
+ }
+
public function execute($request)
{
if (!isset($request->limit))
@@ -42,10 +100,9 @@
break;
}
- // retrieve all institutions
- $query = new Elastica_Query(new Elastica_Query_Term(array('taxonomyId' =>
$this->request->id)));
- $query->setSort(array('_score' => 'desc', 'slug' => 'asc'));
-// $query = $this->facetQuery($query);
+ $this->query = new Elastica_Query(new
Elastica_Query_Term(array('taxonomyId' => $request->id)));
+ $this->setSort(array('_score' => 'desc', 'slug' => 'asc'));
+ // $query = $this->facetQuery($query);
// set paging for request
$query->setLimit($this->request->limit);
@@ -121,17 +178,4 @@
$this->error = $this->context->i18n->__('No %1% found.', array('%1%' =>
__($this->field)));
}
}
-
- public function facetQuery($query)
- {
- foreach (array('types', 'contact.i18n.region') as $field)
- {
- $facet = new Elastica_Facet_Terms($field);
- $facet->setField($field);
- $facet->setSize(50);
- $query->addFacet($facet);
- }
-
- return $query;
- }
}
--
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.