Author: sevein
Date: Thu May 3 16:23:58 2012
New Revision: 11622
Log:
Build actor browse page based in ES + facets
Modified:
branches/2.0/apps/qubit/modules/actor/actions/browseAction.class.php
branches/2.0/apps/qubit/modules/actor/templates/browseSuccess.php
Modified: branches/2.0/apps/qubit/modules/actor/actions/browseAction.class.php
==============================================================================
--- branches/2.0/apps/qubit/modules/actor/actions/browseAction.class.php
Thu May 3 16:23:08 2012 (r11621)
+++ branches/2.0/apps/qubit/modules/actor/actions/browseAction.class.php
Thu May 3 16:23:58 2012 (r11622)
@@ -29,6 +29,11 @@
*/
class ActorBrowseAction extends DefaultBrowseAction
{
+ // Arrays not allowed in class constants
+ public static
+ $FACETS = array(
+ 'entityTypeId');
+
public function execute($request)
{
if (!isset($request->limit))
@@ -45,68 +50,130 @@
$this->sortSetting = sfConfig::get('app_sort_browser_anonymous');
}
- $criteria = new Criteria;
- $criteria->add(QubitActor::PARENT_ID, QubitActor::ROOT_ID);
+ $queryBool = new Elastica_Query_Bool();
+ $queryBool->addMust(new Elastica_Query_MatchAll());
- // Add criteria to exclude actors that are users or repository objects
- $criteria = QubitActor::addGetOnlyActorsCriteria($criteria);
+ $this->filters = array();
+ 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;
+
+ $queryBool->addMust(new Elastica_Query_Term(array(
+ strtr($param, '_', '.') => $facetValue)));
+ }
+ }
+ }
+ }
- $fallbackTable = 'QubitActor';
+ $query = new Elastica_Query();
+ $query->setLimit($request->limit);
+ $query->setQuery($queryBool);
switch ($request->sort)
{
case 'nameDown':
- $criteria->addDescendingOrderByColumn('authorized_form_of_name');
+ $query->setSort(array('slug' => 'desc', '_score' => 'desc'));
break;
case 'nameUp':
- $criteria->addAscendingOrderByColumn('authorized_form_of_name');
+ $query->setSort(array('slug' => 'asc', '_score' => 'desc'));
break;
- case 'typeDown':
- $fallbackTable = 'QubitTerm';
- $criteria->addJoin(QubitActor::ENTITY_TYPE_ID, QubitTerm::ID,
Criteria::LEFT_JOIN);
- $criteria->addDescendingOrderByColumn('name');
-
- break;
-
- case 'typeUp':
- $fallbackTable = 'QubitTerm';
- $criteria->addJoin(QubitActor::ENTITY_TYPE_ID, QubitTerm::ID,
Criteria::LEFT_JOIN);
- $criteria->addAscendingOrderByColumn('name');
-
- break;
-
case 'updatedDown':
- $criteria->addDescendingOrderByColumn(QubitObject::UPDATED_AT);
+ $query->setSort(array('updatedAt' => 'desc', '_score' => 'desc'));
break;
case 'updatedUp':
- $criteria->addAscendingOrderByColumn(QubitObject::UPDATED_AT);
+ $query->setSort(array('updatedAt' => 'asc', '_score' => 'desc'));
break;
default:
if ('alphabetic' == $this->sortSetting)
{
- $criteria->addAscendingOrderByColumn('authorized_form_of_name');
+ $query->setSort(array('slug' => 'asc', '_score' => 'desc'));
}
else if ('lastUpdated' == $this->sortSetting)
{
- $criteria->addDescendingOrderByColumn(QubitObject::UPDATED_AT);
+ // $criteria->addDescendingOrderByColumn(QubitObject::UPDATED_AT);
}
}
- // Do source culture fallback
- $criteria = QubitCultureFallback::addFallbackCriteria($criteria,
$fallbackTable);
+ if (!empty($request->page))
+ {
+ $query->setFrom(($request->page - 1) * $request->limit);
+ }
+
+ foreach (self::$FACETS as $item)
+ {
+ $facet = new Elastica_Facet_Terms($item);
+ $facet->setField($item);
+ $facet->setSize(50);
+ $query->addFacet($facet);
+ }
+
+ try
+ {
+ $resultSet =
QubitSearch::getInstance()->index->getType('QubitActor')->search($query);
+ }
+ catch (Exception $e)
+ {
+ $this->error = $e->getMessage();
+
+ return;
+ }
- // Page results
- $this->pager = new QubitPager('QubitActor');
- $this->pager->setCriteria($criteria);
+ $this->pager = new QubitSearchPager($resultSet);
+ $this->pager->setPage($request->page ? $request->page : 1);
$this->pager->setMaxPerPage($request->limit);
- $this->pager->setPage($request->page);
+
+ if ($this->pager->hasResults())
+ {
+ $facets = array();
+ foreach ($resultSet->getFacets() as $name => $facet)
+ {
+ if (isset($facet['terms']))
+ {
+ $ids = array();
+ foreach ($facet['terms'] as $item)
+ {
+ $ids[$item['term']] = $item['count'];
+ }
+ }
+
+ switch ($name)
+ {
+ case 'entityTypeId':
+ $criteria = new Criteria;
+ $criteria->add(QubitTerm::ID, array_keys($ids), Criteria::IN);
+
+ foreach (QubitTerm::get($criteria) as $item)
+ {
+ $types[$item->id] = $item->name;
+ }
+
+ foreach ($facet['terms'] as $term)
+ {
+ $facets[strtr($name, '.', '_')]['terms'][$term['term']] = array(
+ 'count' => $term['count'],
+ 'term' => $types[$term['term']]);
+ }
+
+ break;
+ }
+ }
+
+ $this->pager->facets = $facets;
+ }
}
}
Modified: branches/2.0/apps/qubit/modules/actor/templates/browseSuccess.php
==============================================================================
--- branches/2.0/apps/qubit/modules/actor/templates/browseSuccess.php Thu May
3 16:23:08 2012 (r11621)
+++ branches/2.0/apps/qubit/modules/actor/templates/browseSuccess.php Thu May
3 16:23:58 2012 (r11622)
@@ -1,11 +1,34 @@
<?php use_helper('Date') ?>
-<div class="section tabs">
+<div class="row">
- <h2 class="element-invisible"><?php echo __('Actor browse options') ?></h2>
+ <div class="span12">
+ <h1>
+ <?php echo
image_tag('/plugins/qtDominionPlugin/images/icons-large/icon-people.png',
array('width' => '42', 'height' => '42')) ?>
+ <?php echo __('Browse %1% %2%', array(
+ '%1%' => $pager->getNbResults(),
+ '%2%' => sfConfig::get('app_ui_label_actor'))) ?>
+ </h1>
+ </div>
+
+</div>
+
+<div class="row">
+
+ <div class="span3" id="facets">
+
+ <?php echo get_partial('search/facet', array(
+ 'target' => '#facet-type',
+ 'label' => __('Type'),
+ 'facet' => 'entityTypeId',
+ 'pager' => $pager,
+ 'filters' => $filters)) ?>
+
+ </div>
+
+ <div class="span9" id="main-column">
- <div class="content">
- <ul class="clearfix links">
+ <ul class="nav nav-tabs">
<?php if ('lastUpdated' == $sortSetting): ?>
<li<?php if ('nameDown' != $sf_request->sort && 'nameUp' !=
$sf_request->sort): ?> class="active"<?php endif; ?>><?php echo
link_to(__('Recent changes'), array('sort' => 'updatedDown') +
$sf_request->getParameterHolder()->getAll(), array('title' => __('Sort')))
?></li>
<li<?php if ('nameDown' == $sf_request->sort || 'nameUp' ==
$sf_request->sort): ?> class="active"<?php endif; ?>><?php echo
link_to(__('Alphabetic'), array('sort' => 'nameUp') +
$sf_request->getParameterHolder()->getAll(), array('title' => __('Sort')))
?></li>
@@ -14,71 +37,78 @@
<li<?php if ('updatedDown' != $sf_request->sort && 'updatedUp' !=
$sf_request->sort): ?> class="active"<?php endif; ?>><?php echo
link_to(__('Alphabetic'), array('sort' => 'nameUp') +
$sf_request->getParameterHolder()->getAll(), array('title' => __('Sort')))
?></li>
<?php endif; ?>
</ul>
- </div>
-</div>
+ <div id="content">
+
+ <div class="section">
+
+ <table class="table table-bordered sticky-enabled">
+ <thead>
+ <tr>
+ <th>
+ <?php echo __('Name') ?>
+ <?php if ('lastUpdated' == $sortSetting): ?>
+ <?php if ('nameDown' == $sf_request->sort): ?>
+ <?php echo link_to(image_tag('up.gif'), array('sort' =>
'nameUp') + $sf_request->getParameterHolder()->getAll(), array('title' =>
__('Sort'))) ?>
+ <?php elseif ('nameUp' == $sf_request->sort): ?>
+ <?php echo link_to(image_tag('down.gif'), array('sort' =>
'nameDown') + $sf_request->getParameterHolder()->getAll(), array('title' =>
__('Sort'))) ?>
+ <?php endif; ?>
+ <?php else: ?>
+ <?php if (('nameDown' != $sf_request->sort && 'updatedDown'
!= $sf_request->sort && 'updatedUp' != $sf_request->sort) || ('nameUp' ==
$sf_request->sort)): ?>
+ <?php echo link_to(image_tag('down.gif'), array('sort' =>
'nameDown') + $sf_request->getParameterHolder()->getAll(), array('title' =>
__('Sort'))) ?>
+ <?php endif; ?>
+ <?php if ('nameDown' == $sf_request->sort): ?>
+ <?php echo link_to(image_tag('up.gif'), array('sort' =>
'nameUp') + $sf_request->getParameterHolder()->getAll(), array('title' =>
__('Sort'))) ?>
+ <?php endif; ?>
+ <?php endif; ?>
+ </th>
+ <?php if ('lastUpdated' == $sortSetting || 'updatedDown' ==
$sf_request->sort || 'updatedUp' == $sf_request->sort): ?>
+ <th>
+ <?php echo __('Updated') ?>
+ <?php if ('updatedUp' == $sf_request->sort): ?>
+ <?php echo link_to(image_tag('up.gif'), array('sort' =>
'updatedDown') + $sf_request->getParameterHolder()->getAll(), array('title' =>
__('Sort'))) ?>
+ <?php else: ?>
+ <?php echo link_to(image_tag('down.gif'), array('sort' =>
'updatedUp') + $sf_request->getParameterHolder()->getAll(), array('title' =>
__('Sort'))) ?>
+ <?php endif; ?>
+ </th>
+ <?php endif; ?>
+ </tr>
+ </thead><tbody>
+
+ <?php foreach ($pager->getResults() as $item): ?>
+
+ <?php $doc = build_i18n_doc($item) ?>
+ <tr class="<?php echo 0 == @++$row % 2 ? 'even' : 'odd' ?>">
+ <td>
+ <?php echo
link_to($doc[$sf_user->getCulture()]['authorizedFormOfName'], array('module' =>
'actor', 'slug' => $doc['slug'])) ?>
+ </td>
+ <?php if ('lastUpdated' == $sortSetting || 'updatedDown' ==
$sf_request->sort || 'updatedUp' == $sf_request->sort): ?>
+ <td>
+ <?php echo format_date($doc['updatedAt'], 'f') ?>
+ </td>
+ <?php endif; ?>
+ </tr>
+
+ <?php endforeach; ?>
+
+ </tbody>
+ </table>
-<h1><?php echo __('Browse %1%', array('%1%' =>
sfConfig::get('app_ui_label_actor'))) ?></h1>
+ </div>
-<table class="sticky-enabled">
- <thead>
- <tr>
- <th>
- <?php echo __('Name') ?>
- <?php if ('lastUpdated' == $sortSetting): ?>
- <?php if ('nameDown' == $sf_request->sort): ?>
- <?php echo link_to(image_tag('up.gif'), array('sort' => 'nameUp')
+ $sf_request->getParameterHolder()->getAll(), array('title' => __('Sort'))) ?>
- <?php elseif ('nameUp' == $sf_request->sort): ?>
- <?php echo link_to(image_tag('down.gif'), array('sort' =>
'nameDown') + $sf_request->getParameterHolder()->getAll(), array('title' =>
__('Sort'))) ?>
- <?php endif; ?>
- <?php else: ?>
- <?php if (('nameDown' != $sf_request->sort && 'updatedDown' !=
$sf_request->sort && 'updatedUp' != $sf_request->sort) || ('nameUp' ==
$sf_request->sort)): ?>
- <?php echo link_to(image_tag('down.gif'), array('sort' =>
'nameDown') + $sf_request->getParameterHolder()->getAll(), array('title' =>
__('Sort'))) ?>
- <?php endif; ?>
- <?php if ('nameDown' == $sf_request->sort): ?>
- <?php echo link_to(image_tag('up.gif'), array('sort' => 'nameUp')
+ $sf_request->getParameterHolder()->getAll(), array('title' => __('Sort'))) ?>
- <?php endif; ?>
- <?php endif; ?>
- </th><th>
- <?php if ('nameDown' == $sf_request->sort || 'nameUp' ==
$sf_request->sort || ('lastUpdated' != $sortSetting && 'updatedDown' !=
$sf_request->sort && 'updatedUp' != $sf_request->sort)): ?>
- <?php echo __('Type') ?>
- <?php if ('typeDown' == $sf_request->sort): ?>
- <?php echo link_to(image_tag('up.gif'), array('sort' => 'typeUp')
+ $sf_request->getParameterHolder()->getAll(), array('title' => __('Sort'))) ?>
- <?php elseif ('typeUp' == $sf_request->sort): ?>
- <?php echo link_to(image_tag('down.gif'), array('sort' =>
'typeDown') + $sf_request->getParameterHolder()->getAll(), array('title' =>
__('Sort'))) ?>
- <?php endif; ?>
- <?php else: ?>
- <?php echo __('Updated') ?>
- <?php if ('updatedUp' == $sf_request->sort): ?>
- <?php echo link_to(image_tag('up.gif'), array('sort' =>
'updatedDown') + $sf_request->getParameterHolder()->getAll(), array('title' =>
__('Sort'))) ?>
- <?php else: ?>
- <?php echo link_to(image_tag('down.gif'), array('sort' =>
'updatedUp') + $sf_request->getParameterHolder()->getAll(), array('title' =>
__('Sort'))) ?>
- <?php endif; ?>
- <?php endif; ?>
- </th>
- </tr>
- </thead><tbody>
- <?php foreach ($pager->getResults() as $item): ?>
- <tr class="<?php echo 0 == @++$row % 2 ? 'even' : 'odd' ?>">
- <td>
- <?php echo link_to(render_title($item), array($item, 'module' =>
'actor')) ?>
- </td><td>
- <?php if ('nameDown' == $sf_request->sort || 'nameUp' ==
$sf_request->sort || ('lastUpdated' != $sortSetting && 'updatedDown' !=
$sf_request->sort && 'updatedUp' != $sf_request->sort) ): ?>
- <?php echo $item->entityType ?>
- <?php else: ?>
- <?php echo format_date($item->updatedAt, 'f') ?>
- <?php endif; ?>
- </td>
- </tr>
- <?php endforeach; ?>
- </tbody>
-</table>
+ <?php echo get_partial('default/pager', array('pager' => $pager)) ?>
-<?php echo get_partial('default/pager', array('pager' => $pager)) ?>
+ </div>
+
+ </div>
+
+</div>
+<!--
<div class="search">
<form action="<?php echo url_for(array('module' => 'actor', 'action' =>
'list')) ?>">
<input name="subquery" value="<?php echo
esc_entities($sf_request->subquery) ?>"/>
<input class="form-submit" type="submit" value="<?php echo __('Search
%1%', array('%1%' => sfConfig::get('app_ui_label_actor'))) ?>"/>
</form>
</div>
+-->
--
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.