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.

Reply via email to