Author: david
Date: Wed Oct 21 09:15:01 2009
New Revision: 3785

Log:
Modernize term/browse action and templates.  Add pager to taxonomy browse. 
Fixes issue #1076.

Modified:
   trunk/apps/qubit/modules/term/actions/browseAction.class.php
   trunk/apps/qubit/modules/term/templates/browseTaxonomySuccess.php
   trunk/apps/qubit/modules/term/templates/browseTermSuccess.php
   trunk/lib/model/QubitObjectTermRelation.php
   trunk/lib/model/QubitTerm.php

Modified: trunk/apps/qubit/modules/term/actions/browseAction.class.php
==============================================================================
--- trunk/apps/qubit/modules/term/actions/browseAction.class.php        Wed Oct 
21 00:02:45 2009        (r3784)
+++ trunk/apps/qubit/modules/term/actions/browseAction.class.php        Wed Oct 
21 09:15:01 2009        (r3785)
@@ -30,22 +30,25 @@
     {
       $options = array();
 
-      $this->termId = $this->getRequestParameter('termId');
-      $this->term = QubitTerm::getById($this->termId);
+      $this->term = QubitTerm::getById($this->request->termId);
       $this->forward404Unless(isset($this->term));
 
-      $options['culture'] = $this->culture;
-
-      $this->sortColumn = $this->getRequestParameter('sortColumn', 'title');
-      $options['sortColumn'] = $this->sortColumn;
-
-      $this->sortDirection = $this->getRequestParameter('sortDirection', 
'ascending');
-      $options['sortDirection'] = $this->sortDirection;
-
       $this->page = $this->getRequestParameter('page', 1);
-      $options['page'] = $this->page;
 
-      $this->informationObjects = 
QubitObjectTermRelation::getTermBrowseList($this->termId, 
'QubitInformationObject', $options);
+      $criteria = new Criteria;
+      $criteria->add(QubitObject::CLASS_NAME, 'QubitInformationObject');
+      $criteria->addJoin(QubitObject::ID, QubitInformationObject::ID);
+      $criteria->addJoin(QubitObject::ID, QubitObjectTermRelation::OBJECT_ID);
+      $criteria->add(QubitObjectTermRelation::TERM_ID, $this->term->id);
+
+      $criteria = QubitCultureFallback::addFallbackCriteria($criteria, 
'QubitInformationObject');
+      $criteria->addAscendingOrderByColumn('title');
+
+      // Page results
+      $this->pager = new QubitPager('QubitInformationObject');
+      $this->pager->setCriteria($criteria);
+      $this->pager->setPage($this->page);
+      $this->pager->init();
 
       // determine if system is set to "multi-repository"
       $this->multiRepository = (sfConfig::get('app_multi_repository') !== '0');
@@ -54,13 +57,8 @@
     }
     else
     {
-      $options = array();
-
-      // Do cultural fallback
-      $options['cultureFallback'] = true;
-
+      $this->page = $this->getRequestParameter('page', 1);
       $this->sort = $this->getRequestParameter('sort', 'termNameUp');
-      $options['sort'] = $this->sort;
 
       // Get taxonomy id (default to "Subjects" taxonomy)
       if ($this->getRequestParameter('taxonomyId'))
@@ -71,11 +69,47 @@
       {
         $this->taxonomyId = QubitTaxonomy::SUBJECT_ID;
       }
-      $options['taxonomyId'] = $this->taxonomyId;
 
       // Get taxonomy object and term list
       $this->taxonomy = QubitTaxonomy::getById($this->taxonomyId);
-      $this->terms = QubitTerm::getBrowseList($this->culture, new Criteria, 
$options);
+      $this->forward404If(null === $this->taxonomy);
+
+      $criteria = new Criteria;
+      $criteria->add(QubitTerm::TAXONOMY_ID, $this->taxonomyId);
+
+      // Add joins to get count of information objects related via object
+      // term relation. The 'object2' alias is necessary because the query
+      // silently adds a join on (QubitTerm::ID = QubitObject::ID).
+      $criteria->addAlias('object2', QubitObject::TABLE_NAME);
+      $criteria->addJoin(QubitTerm::ID, QubitObjectTermRelation::TERM_ID, 
Criteria::INNER_JOIN);
+      $criteria->addJoin(QubitObjectTermRelation::OBJECT_ID, 'object2.id', 
Criteria::INNER_JOIN);
+      $criteria->add('object2.class_name', 'QubitInformationObject');
+      $criteria->addAsColumn('hits', 'COUNT('.QubitTerm::ID.')');
+      $criteria->addGroupByColumn(QubitTerm::ID);
+
+      switch($this->sort)
+      {
+        case 'hitsUp' :
+          $criteria->addAscendingOrderByColumn('hits');
+          break;
+        case 'hitsDown' :
+          $criteria->addDescendingOrderByColumn('hits');
+          break;
+        case 'termNameDown' :
+          $criteria->addDescendingOrderByColumn('name');
+          break;
+        case 'termNameUp' :
+        default :
+          $criteria->addAscendingOrderByColumn('name');
+      }
+
+      // Do culture fallback
+      $criteria = QubitCultureFallback::addFallbackCriteria($criteria, 
'QubitTerm');
+
+      $this->pager = new QubitPager('QubitTerm');
+      $this->pager->setCriteria($criteria);
+      $this->pager->setPage($this->page);
+      $this->pager->init();
 
       $this->setTemplate('browseTaxonomy');
     }

Modified: trunk/apps/qubit/modules/term/templates/browseTaxonomySuccess.php
==============================================================================
--- trunk/apps/qubit/modules/term/templates/browseTaxonomySuccess.php   Wed Oct 
21 00:02:45 2009        (r3784)
+++ trunk/apps/qubit/modules/term/templates/browseTaxonomySuccess.php   Wed Oct 
21 09:15:01 2009        (r3785)
@@ -1,37 +1,49 @@
 <div class="pageTitle">
-<?php if (is_null($taxonomyName = $taxonomy->getName())) $taxonomyName = 
$taxonomy->getName(array('sourceCulture' => true)); ?>
-  <?php echo __('list %taxonomy%', array('%taxonomy%' => $taxonomyName)) ?>
+  <?php echo __('list %taxonomy%', array('%taxonomy%' => 
$taxonomy->getName(array('cultureFallback' => true)))) ?>
 </div>
 
-<table class="list"><thead><tr>
-  <th>
-    <?php if ($sort == 'termNameUp'): ?>
-      <?php echo link_to($taxonomyName, 
'term/browse?taxonomyId='.$taxonomy->getId().'&sort=termNameDown') ?>      
-      <?php echo image_tag('up.gif', 'style="padding-bottom: 3px;"', 'sort 
up') ?>
-    <?php else: ?>
-      <?php echo link_to($taxonomyName, 
'term/browse?taxonomyId='.$taxonomy->getId().'&sort=termNameUp') ?>
-    <?php endif; ?>
-    <?php if ($sort == 'termNameDown'): ?>
-      <?php echo image_tag('down.gif', 'style="padding-bottom: 3px;"', 'sort 
down') ?>
-    <?php endif; ?>
-    <?php if ($editCredentials): ?>
-      <span class="th-link"><?php echo link_to(__('add/edit'), 
'term/list?taxonomyId='.$taxonomy->getId()); ?></span>
-    <?php endif; ?>
-  </th><th>
-    <?php if ($sort == 'hitsDown'): ?>
-      <?php echo link_to(__('results'), 
'term/browse?taxonomyId='.$taxonomy->getId().'&sort=hitsUp') ?>
-      <?php echo image_tag('down.gif', 'style="padding-bottom: 3px;"', 'sort 
down') ?>
-    <?php else: ?>
-      <?php echo link_to(__('results'), 
'term/browse?taxonomyId='.$taxonomy->getId().'&sort=hitsDown') ?>
-    <?php endif; ?>
-    <?php if ($sort == 'hitsUp'): ?>
-      <?php echo image_tag('up.gif', 'style="padding-bottom: 3px;"', 'sort 
up') ?>
-    <?php endif; ?>
-  </th>
-</tr></thead><tbody><?php foreach ($terms as $term): ?><tr>
-  <td>
-    <?php echo link_to($term->getName(array('cultureFallback'=>true)), 
'term/browse?termId='.$term->getId()) ?>
-  </td><td>
-    <?php echo 
$term->getObjectTermRelationCountByObjectClass('QubitInformationObject') ?>
-  </td>
-</tr><?php endforeach; ?></tbody></table>
+<table class="list">
+<thead>
+  <tr>
+    <th>
+      <?php if ($sort == 'termNameUp'): ?>
+        <?php echo link_to($taxonomy->getName(array('cultureFallback' => 
true)), array('module' => 'term', 'action' => 'browse', 'taxonomyId' => 
$taxonomy->getId(), 'sort' => 'termNameDown')) ?>
+        <?php echo image_tag('up.gif', 'style="padding-bottom: 3px;"', 'sort 
up') ?>
+      <?php else: ?>
+        <?php echo link_to($taxonomy->getName(array('cultureFallback' => 
true)), array('module' => 'term', 'action' => 'browse', 'taxonomyId' => 
$taxonomy->getId(), 'sort' => 'termNameUp')) ?>
+      <?php endif; ?>
+      <?php if ($sort == 'termNameDown'): ?>
+        <?php echo image_tag('down.gif', 'style="padding-bottom: 3px;"', 'sort 
down') ?>
+      <?php endif; ?>
+      <?php if ($editCredentials): ?>
+        <span class="th-link"><?php echo link_to(__('add/edit'), 
array('module' => 'term', 'action' => 'list', 'taxonomyId' => 
$taxonomy->getId())) ?></span>
+      <?php endif; ?>
+    </th>
+    <th>
+      <?php if ($sort == 'hitsDown'): ?>
+        <?php echo link_to(__('results'), array('module' => 'term', 'action' 
=> 'browse', 'taxonomyId' => $taxonomy->getId(), 'sort' => 'hitsUp')) ?>
+        <?php echo image_tag('down.gif', 'style="padding-bottom: 3px;"', 'sort 
down') ?>
+      <?php else: ?>
+        <?php echo link_to(__('results'), array('module' => 'term', 'action' 
=> 'browse', 'taxonomyId' => $taxonomy->getId(), 'sort' => 'hitsDown')) ?>
+      <?php endif; ?>
+      <?php if ($sort == 'hitsUp'): ?>
+        <?php echo image_tag('up.gif', 'style="padding-bottom: 3px;"', 'sort 
up') ?>
+      <?php endif; ?>
+    </th>
+  </tr>
+</thead>
+<tbody>
+<?php foreach ($pager->getResults() as $term): ?>
+  <tr>
+    <td>
+      <?php echo link_to($term->getName(array('cultureFallback'=>true)), 
array('module' => 'term', 'action' => 'browse', 'termId' => $term->getId())) ?>
+    </td>
+    <td>
+      <?php echo 
$term->getObjectTermRelationCountByObjectClass('QubitInformationObject') ?>
+    </td>
+  </tr>
+<?php endforeach; ?>
+</tbody>
+</table>
+
+<?php echo get_partial('default/pager', array('pager' => $pager)) ?>

Modified: trunk/apps/qubit/modules/term/templates/browseTermSuccess.php
==============================================================================
--- trunk/apps/qubit/modules/term/templates/browseTermSuccess.php       Wed Oct 
21 00:02:45 2009        (r3784)
+++ trunk/apps/qubit/modules/term/templates/browseTermSuccess.php       Wed Oct 
21 09:15:01 2009        (r3785)
@@ -10,12 +10,12 @@
 
 <tr>
   <th>
-  <?php echo __("Browse for '%1%' in '%2%' returned %3% results", array('%1%' 
=> $termName, '%2%' => $taxonomyName, '%3%' => 
$informationObjects->getNbResults())) ?><br />
+  <?php echo __("Browse for '%1%' in '%2%' returned %3% results", array('%1%' 
=> $termName, '%2%' => $taxonomyName, '%3%' => $pager->getNbResults())) ?><br />
   </th>
 </tr>
 </thead>
 <tbody>
-<?php foreach ($informationObjects->getResults() as $informationObject): ?>
+<?php foreach ($pager->getResults() as $informationObject): ?>
 <tr><td>
 <?php echo link_to($informationObject->getLabel(), 
'informationobject/show?id='.$informationObject->getId()) ?>
 
@@ -43,7 +43,7 @@
 </tbody>
 </table>
 
-<?php echo get_partial('default/pager', array('pager' => $informationObjects)) 
?>
+<?php echo get_partial('default/pager', array('pager' => $pager)) ?>
 
 <div class="menu-extra">
   <?php echo link_to(__('browse all %1%', array('%1%' => $taxonomyName)), 
'term/browse?taxonomyId='.$term->getTaxonomyId()); ?>

Modified: trunk/lib/model/QubitObjectTermRelation.php
==============================================================================
--- trunk/lib/model/QubitObjectTermRelation.php Wed Oct 21 00:02:45 2009        
(r3784)
+++ trunk/lib/model/QubitObjectTermRelation.php Wed Oct 21 09:15:01 2009        
(r3785)
@@ -86,60 +86,6 @@
   }
 
   /**
-   * Get a list of objects related to the given $termId
-   *
-   * @param integer $termId Primary key of specified term
-   * @param string  $className type of class to return
-   * @param array   $options array of optional parameters
-   * @return sfPager paginated list of objects
-   *
-   * @todo Figure out sorting - it's a NASTY problem!
-   */
-  public static function getTermBrowseList($termId=null, 
$className='QubitInformationObject', $options=array())
-  {
-    $criteria = new Criteria;
-    $criteria->add(QubitObject::CLASS_NAME, $className);
-    $criteria->addJoin(QubitObject::ID, QubitObjectTermRelation::OBJECT_ID);
-    $criteria->add(QubitObjectTermRelation::TERM_ID, $termId);
-
-    $page = isset($options['page']) ? $options['page'] : 1;
-
-    switch($className)
-    {
-      case 'QubitInformationObject':
-        $criteria->addJoin(QubitObject::ID, QubitInformationObject::ID);
-        //TODO: figure out how to dynamically add SORT_COLUMNS (will also 
require a join to _i18n)
-
-        // Page results
-        $pager = new QubitPager('QubitInformationObject');
-        break;
-      case 'QubitActor':
-        $criteria->addJoin(QubitObject::ID, QubitActor::ID);
-        $pager = new QubitPager('QubitActor');
-        break;
-      case 'QubitRepository':
-        $criteria->addJoin(QubitObject::ID, QubitRepository::ID);
-        $pager = new QubitPager('QubitRepository');
-        break;
-      case 'QubitDigitalObject':
-        $criteria->addJoin(QubitObject::ID, QubitDigitalObject::ID);
-        $pager = new QubitPager('QubitDigitalObject');
-        break;
-      case 'QubitPhysicalObject':
-        $criteria->addJoin(QubitObject::ID, QubitPhysicalObject::ID);
-        $pager = new QubitPager('QubitPhysicalObject');
-        break;
-    }
-
-    // Return paged results
-    $pager->setCriteria($criteria);
-    $pager->setPage($page);
-    $pager->init();
-
-    return $pager;
-  }
-
-  /**
    * Get first ObjectTermRelation with given $objectId
    *
    * @param integer $objectId foreign key to object

Modified: trunk/lib/model/QubitTerm.php
==============================================================================
--- trunk/lib/model/QubitTerm.php       Wed Oct 21 00:02:45 2009        (r3784)
+++ trunk/lib/model/QubitTerm.php       Wed Oct 21 09:15:01 2009        (r3785)
@@ -417,68 +417,6 @@
   }
 
   /**
-   * Get a sorted, localized list of terms for the"term/browse" action
-   * with an option for culture fallback values in list.
-   *
-   * @param string   $culture localize list for $culture
-   * @param Criteria $criteria Propel criteria object
-   * @param array    $options array of additonal options
-   * @return QubitQuery array of QubitTermI18n objects
-   */
-  public static function getBrowseList($culture, $criteria, $options = array())
-  {
-    $sort = (isset($options['sort'])) ? $options['sort'] : 'termNameUp';
-    $cultureFallback = (isset($options['cultureFallback'])) ? 
$options['cultureFallback'] : false;
-
-    if (isset($options['taxonomyId']))
-    {
-      $criteria->add(QubitTerm::TAXONOMY_ID, $options['taxonomyId']);
-    }
-
-    // Add joins to get count of information objects related via object
-    // term relation. The 'object2' alias is necessary because the query
-    // silently adds a join on (QubitTerm::ID = QubitObject::ID).
-    $criteria->addAlias('object2', QubitObject::TABLE_NAME);
-    $criteria->addJoin(QubitTerm::ID, QubitObjectTermRelation::TERM_ID, 
Criteria::INNER_JOIN);
-    $criteria->addJoin(QubitObjectTermRelation::OBJECT_ID, 'object2.id', 
Criteria::INNER_JOIN);
-    $criteria->add('object2.class_name', 'QubitInformationObject', 
Criteria::EQUAL);
-    $criteria->addAsColumn('hits', 'COUNT('.QubitTerm::ID.')');
-    $criteria->addGroupByColumn(QubitTerm::ID);
-
-    switch($sort)
-    {
-      case 'hitsUp' :
-        $criteria->addAscendingOrderByColumn('hits');
-        break;
-      case 'hitsDown' :
-        $criteria->addDescendingOrderByColumn('hits');
-        break;
-      case 'termNameDown' :
-        $criteria->addDescendingOrderByColumn('name');
-        break;
-      case 'termNameUp' :
-      default :
-        $criteria->addAscendingOrderByColumn('name');
-    }
-
-    // Do source culture fallback
-    if ($cultureFallback === true)
-    {
-      // Add Fallback criteria
-      $options = array();
-      $criteria = QubitCultureFallback::addFallbackCriteria($criteria, 
'QubitTerm', $options);
-    }
-    else
-    {
-      // Do straight joins without fallback
-      $criteria->addJoin(QubitTerm::ID, QubitTermI18n::ID);
-      $criteria->add(QubitTermI18n::CULTURE, $culture);
-    }
-
-    return QubitTerm::get($criteria);
-  }
-
-  /**
    * Get an aggregate count of all objects related to this term
    *
    * @return integer count of related objects

--~--~---------~--~----~------------~-------~--~----~
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.ca/group/qubit-commits?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to