Source for file filter.php
Documentation is available at filter.php
* @copyright Copyright (C) 2005 - 2013 Open Source Matters, Inc. All rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE
* Filter HTML Behaviors for Finder.
* Method to generate filters using the slider widget and decorated
* with the FinderFilter JavaScript behaviors.
* @param array $options An array of configuration options. [optional]
* @return mixed A rendered HTML widget on success, null otherwise.
public static function slider($options =
array())
$query =
$db->getQuery(true);
$groups =
implode(',', $user->getAuthorisedViewLevels());
// Get the configuration options.
$filterId =
array_key_exists('filter_id', $options) ?
$options['filter_id'] :
null;
$activeNodes =
array_key_exists('selected_nodes', $options) ?
$options['selected_nodes'] :
array();
$classSuffix =
array_key_exists('class_suffix', $options) ?
$options['class_suffix'] :
'';
$loadMedia =
array_key_exists('load_media', $options) ?
$options['load_media'] :
true;
// Load the predefined filter if specified.
$query->select('f.data, f.params')
->from($db->quoteName('#__finder_filters') .
' AS f')
->where('f.filter_id = ' . (int)
$filterId);
$filter =
$db->loadObject();
catch
(RuntimeException $e)
// Initialize the filter parameters.
$registry->loadString($filter->params);
$filter->params =
$registry;
// Build the query to get the branch data and the number of child nodes.
->select('t.*, count(c.id) AS children')
->from($db->quoteName('#__finder_taxonomy') .
' AS t')
->join('INNER', $db->quoteName('#__finder_taxonomy') .
' AS c ON c.parent_id = t.id')
->where('t.parent_id = 1')
->where('t.access IN (' .
$groups .
')')
->where('c.access IN (' .
$groups .
')')
->group('t.id, t.parent_id, t.state, t.access, t.ordering, t.title, c.parent_id')
->order('t.ordering, t.title');
// Limit the branch children to a predefined filter.
$query->where('c.id IN(' .
$filter->data .
')');
$branches =
$db->loadObjectList('id');
catch
(RuntimeException $e)
// Check that we have at least one branch.
if (count($branches) ===
0)
// Load the CSS/JS resources.
JHtml::_('stylesheet', 'com_finder/sliderfilter.css', false, true, false);
JHtml::_('script', 'com_finder/sliderfilter.js', false, true);
// Load plug-in language files.
$html .=
'<div id="finder-filter-container">';
$html .=
'<dl id="branch-selectors">';
$html .=
'<label for="tax-select-all" class="checkbox">';
$html .=
'<input type="checkbox" id="tax-select-all" />';
$html .=
JText::_('COM_FINDER_FILTER_SELECT_ALL_LABEL');
$html .=
'<div class="control-group">';
// Iterate through the branches to build the branch selector.
foreach ($branches as $bk =>
$bv)
// If the multi-lang plug-in is enabled then drop the language branch.
$html .=
'<label for="tax-' .
$bk .
'" class="checkbox">';
$html .=
'<input type="checkbox" class="toggler" id="tax-' .
$bk .
'"/>';
$html .=
'<div id="finder-filter-container">';
// Iterate through the branches and build the branch groups.
foreach ($branches as $bk =>
$bv)
// If the multi-lang plug-in is enabled then drop the language branch.
// Build the query to get the child nodes for this branch.
->from($db->quoteName('#__finder_taxonomy') .
' AS t')
->where('t.parent_id = ' . (int)
$bk)
->where('t.access IN (' .
$groups .
')')
->order('t.ordering, t.title');
$nodes =
$db->loadObjectList('id');
catch
(RuntimeException $e)
// Translate node titles if possible.
foreach ($nodes as $nk =>
$nv)
$nodes[$nk]->title =
JText::_($key);
$html .=
'<dl class="checklist" rel="tax-' .
$bk .
'">';
$html .=
'<label for="tax-' .
JFilterOutput::stringUrlSafe($bv->title) .
'" class="checkbox">';
$html .=
'<input type="checkbox" class="branch-selector filter-branch' .
$classSuffix .
'" id="tax-'
$html .=
'<div class="control-group">';
// Populate the group with nodes.
foreach ($nodes as $nk =>
$nv)
// Determine if the node should be checked.
$checked =
in_array($nk, $activeNodes) ?
' checked="checked"' :
'';
$html .=
'<label for="tax-' .
$nk .
'" class="checkbox">';
$html .=
'<input class="selector filter-node' .
$classSuffix .
'" type="checkbox" value="' .
$nk .
'" name="t[]" id="tax-'
.
$nk .
'"' .
$checked .
' />';
$html .=
'<div class="clr"></div>';
* Method to generate filters using select box drop down controls.
* @param FinderIndexerQuery $idxQuery A FinderIndexerQuery object.
* @param array $options An array of options.
* @return mixed A rendered HTML widget on success, null otherwise.
public static function select($idxQuery, $options)
$groups =
implode(',', $user->getAuthorisedViewLevels());
// Get the configuration options.
$classSuffix =
$options->get('class_suffix', null);
$loadMedia =
$options->get('load_media', true);
$showDates =
$options->get('show_date_filters', false);
// Try to load the results from cache.
// Check the cached results.
if (!($branches =
$cache->get($cacheId)))
$query =
$db->getQuery(true);
// Load the predefined filter if specified.
if (!empty($idxQuery->filter))
$query->select('f.data, ' .
$db->quoteName('f.params'))
->from($db->quoteName('#__finder_filters') .
' AS f')
->where('f.filter_id = ' . (int)
$idxQuery->filter);
$filter =
$db->loadObject();
catch
(RuntimeException $e)
// Initialize the filter parameters.
$registry->loadString($filter->params);
$filter->params =
$registry;
// Build the query to get the branch data and the number of child nodes.
->select('t.*, count(c.id) AS children')
->from($db->quoteName('#__finder_taxonomy') .
' AS t')
->join('INNER', $db->quoteName('#__finder_taxonomy') .
' AS c ON c.parent_id = t.id')
->where('t.parent_id = 1')
->where('t.access IN (' .
$groups .
')')
->where('c.access IN (' .
$groups .
')')
->group($db->quoteName('t.id'))
->order('t.ordering, t.title');
// Limit the branch children to a predefined filter.
if (!empty($filter->data))
$query->where('c.id IN(' .
$filter->data .
')');
$branches =
$db->loadObjectList('id');
catch
(RuntimeException $e)
// Check that we have at least one branch.
if (count($branches) ===
0)
// Iterate through the branches and build the branch groups.
foreach ($branches as $bk =>
$bv)
// If the multi-lang plug-in is enabled then drop the language branch.
// Build the query to get the child nodes for this branch.
->from($db->quoteName('#__finder_taxonomy') .
' AS t')
->where('t.parent_id = ' . (int)
$bk)
->where('t.access IN (' .
$groups .
')')
->order('t.ordering, t.title');
// Limit the nodes to a predefined filter.
if (!empty($filter->data))
$query->where('t.id IN(' .
$filter->data .
')');
$branches[$bk]->nodes =
$db->loadObjectList('id');
catch
(RuntimeException $e)
// Translate branch nodes if possible.
foreach ($branches[$bk]->nodes as $node_id =>
$node)
if ($language->hasKey($key))
$branches[$bk]->nodes[$node_id]->title =
JText::_($key);
// Add the Search All option to the branch.
array_unshift($branches[$bk]->nodes, array('id' =>
null, 'title' =>
JText::_('COM_FINDER_FILTER_SELECT_ALL_LABEL')));
// Store the data in cache.
$cache->store($branches, $cacheId);
// Add the dates if enabled.
$html .=
JHtml::_('filter.dates', $idxQuery, $options);
$html .=
'<div id="finder-filter-select-list" class="form-horizontal">';
// Iterate through all branches and build code.
foreach ($branches as $bk =>
$bv)
// If the multi-lang plug-in is enabled then drop the language branch.
// Check if the branch is in the filter.
// Get the request filters.
// Search for active nodes in the branch and get the active node.
$html .=
'<div class="filter-branch' .
$classSuffix .
' control-group">';
$html .=
'<label for="tax-' .
JFilterOutput::stringUrlSafe($bv->title) .
'" class="control-label">';
$html .=
'<div class="controls">';
'select.genericlist', $branches[$bk]->nodes, 't[]', 'class="inputbox"', 'id', 'title', $active,
// Load the CSS/JS resources.
JHtml::stylesheet('com_finder/sliderfilter.css', false, true, false);
* Method to generate fields for filtering dates
* @param FinderIndexerQuery $idxQuery A FinderIndexerQuery object.
* @param array $options An array of options.
* @return mixed A rendered HTML widget on success, null otherwise.
public static function dates($idxQuery, $options)
// Get the configuration options.
$classSuffix =
$options->get('class_suffix', null);
$loadMedia =
$options->get('load_media', true);
$showDates =
$options->get('show_date_filters', false);
// Build the date operators options.
$operators[] =
JHtml::_('select.option', 'before', JText::_('COM_FINDER_FILTER_DATE_BEFORE'));
$operators[] =
JHtml::_('select.option', 'exact', JText::_('COM_FINDER_FILTER_DATE_EXACTLY'));
$operators[] =
JHtml::_('select.option', 'after', JText::_('COM_FINDER_FILTER_DATE_AFTER'));
// Load the CSS/JS resources.
JHtml::stylesheet('com_finder/dates.css', false, true, false);
$html .=
'<ul id="finder-filter-select-dates">';
$html .=
'<li class="filter-date' .
$classSuffix .
'">';
$html .=
'<label for="filter_date1">';
$html .=
JText::_('COM_FINDER_FILTER_DATE1');
'select.genericlist', $operators, 'w1', 'class="inputbox filter-date-operator"', 'value', 'text', $idxQuery->when1, 'finder-filter-w1'
$html .=
JHtml::calendar($idxQuery->date1, 'd1', 'filter_date1', '%Y-%m-%d', 'title="' .
JText::_('COM_FINDER_FILTER_DATE1_DESC') .
'"');
$html .=
'<li class="filter-date' .
$classSuffix .
'">';
$html .=
'<label for="filter_date2">';
$html .=
JText::_('COM_FINDER_FILTER_DATE2');
'select.genericlist', $operators, 'w2', 'class="inputbox filter-date-operator"', 'value', 'text', $idxQuery->when2, 'finder-filter-w2'
$html .=
JHtml::calendar($idxQuery->date2, 'd2', 'filter_date2', '%Y-%m-%d', 'title="' .
JText::_('COM_FINDER_FILTER_DATE2_DESC') .
'"');
Documentation generated on Tue, 19 Nov 2013 15:03:15 +0100 by phpDocumentor 1.4.3