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
-~----------~----~----~----~------~----~------~--~---