AAAAgetQuery(true);
$user = JFactory::getUser();
$groups = implode(',', $user->getAuthorisedViewLevels());
$html = '';
$in = '';
$filter = null;
// 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();
$activeDates = array_key_exists('selected_dates', $options) ? $options['selected_dates'] : array();
$classSuffix = array_key_exists('class_suffix', $options) ? $options['class_suffix'] : '';
$loadMedia = array_key_exists('load_media', $options) ? $options['load_media'] : true;
$showDates = array_key_exists('show_date_filters', $options) ? $options['show_date_filters'] : false;
// Load the predefined filter if specified.
if (!empty($filterId))
{
$query->select('f.' . $db->quoteName('data') . ', f.' . $db->quoteName('params'));
$query->from($db->quoteName('#__finder_filters') . ' AS f');
$query->where($db->quoteName('f').'.' . $db->quoteName('filter_id') . ' = ' . (int) $filterId);
// Load the filter data.
$db->setQuery($query);
$filter = $db->loadObject();
// Check for an error.
if ($db->getErrorNum())
{
return null;
}
// Initialize the filter parameters.
if ($filter)
{
$registry = new JRegistry;
$registry->loadString($filter->params);
$filter->params = $registry;
}
}
// Build the query to get the branch data and the number of child nodes.
$query->clear();
$query->select('t.*, count(c.id) AS children');
$query->from($db->quoteName('#__finder_taxonomy') . ' AS t');
$query->join('INNER', $db->quoteName('#__finder_taxonomy') . ' AS c ON c.parent_id = t.id');
$query->where($db->quoteName('t.parent_id') . ' = 1');
$query->where($db->quoteName('t.state') . ' = 1');
$query->where($db->quoteName('t.access') . ' IN (' . $groups . ')');
$query->where($db->quoteName('c.state') . ' = 1');
$query->where($db->quoteName('c.access') . ' IN (' . $groups . ')');
$query->group('t.id, t.parent_id, t.state, t.access, t.ordering, t.title, c.parent_id');
$query->order('t.ordering, t.title');
// Limit the branch children to a predefined filter.
if ($filter)
{
$query->where('c.id IN(' . $filter->data . ')');
}
// Load the branches.
$db->setQuery($query);
$branches = $db->loadObjectList('id');
// Check for an error.
if ($db->getErrorNum())
{
return null;
}
// Check that we have at least one branch.
if (count($branches) === 0)
{
return null;
}
// Load the CSS/JS resources.
if ($loadMedia)
{
JHtml::stylesheet('com_finder/sliderfilter.css', false, true, false);
JHtml::script('com_finder/sliderfilter.js', false, true);
}
// Load plug-in language files.
FinderHelperLanguage::loadPluginLanguage();
// Start the widget.
$html .= '
';
$html .= '
';
$html .= '
';
$html .= '';
$html .= '
';
// 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.
if ($bv->title == 'Language' && JLanguageMultilang::isEnabled()) {
continue;
}
$html .= '
';
$html .= '';
$html .= '
';
}
$html .= '
';
$html .= '
';
// 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.
if ($bv->title == 'Language' && JLanguageMultilang::isEnabled()) {
continue;
}
// Build the query to get the child nodes for this branch.
$query->clear();
$query->select('t.*');
$query->from($db->quoteName('#__finder_taxonomy') . ' AS t');
$query->where($db->quoteName('t.parent_id') . ' = ' . (int) $bk);
$query->where($db->quoteName('t.state') . ' = 1');
$query->where($db->quoteName('t.access') . ' IN (' . $groups . ')');
$query->order('t.ordering, t.title');
// Load the branches.
$db->setQuery($query);
$nodes = $db->loadObjectList('id');
// Check for an error.
if ($db->getErrorNum())
{
return null;
}
// Translate node titles if possible.
$lang = JFactory::getLanguage();
foreach ($nodes as $nk => $nv) {
$key = FinderHelperLanguage::branchPlural($nv->title);
if ($lang->hasKey($key)) {
$nodes[$nk]->title = JText::_($key);
}
}
// Start the group.
$html .= '
';
$html .= '
';
$html .= '';
$html .= '
';
// Populate the group with nodes.
foreach ($nodes as $nk => $nv)
{
// Determine if the node should be checked.
$checked = in_array($nk, $activeNodes) ? ' checked="checked"' : '';
// Build a node.
$html .= '
';
$html .= '';
$html .= '
';
}
// Close the group.
$html .= '
';
}
// Close the widget.
$html .= '';
$html .= '
';
$html .= '
';
return $html;
}
/**
* Method to generate filters using select box drop down controls.
*
* @param FinderIndexerQuery $query A FinderIndexerQuery object.
* @param array $options An array of options.
*
* @return mixed A rendered HTML widget on success, null otherwise.
*
* @since 2.5
*/
public static function select($query, $options)
{
$user = JFactory::getUser();
$groups = implode(',', $user->getAuthorisedViewLevels());
$filter = null;
// 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.
$cache = JFactory::getCache('com_finder', '');
$cacheId = 'filter_select_' . serialize(array($query->filter, $options, $groups, JFactory::getLanguage()->getTag()));
// Check the cached results.
if (!($branches = $cache->get($cacheId)))
{
$db = JFactory::getDBO();
$sql = $db->getQuery(true);
// Load the predefined filter if specified.
if (!empty($query->filter))
{
$sql->select($db->quoteName('f') . '.' . $db->quoteName('data') . ', '. $db->quoteName('f') . '.' . $db->quoteName('params'));
$sql->from($db->quoteName('#__finder_filters') . ' AS f');
$sql->where($db->quoteName('f') . '.' . $db->quoteName('filter_id') . ' = ' . (int) $query->filter);
// Load the filter data.
$db->setQuery($sql);
$filter = $db->loadObject();
// Check for an error.
if ($db->getErrorNum())
{
return null;
}
// Initialize the filter parameters.
if ($filter)
{
$registry = new JRegistry;
$registry->loadString($filter->params);
$filter->params = $registry;
}
}
// Build the query to get the branch data and the number of child nodes.
$sql->clear();
$sql->select('t.*, count(c.id) AS children');
$sql->from($db->quoteName('#__finder_taxonomy') . ' AS t');
$sql->join('INNER', $db->quoteName('#__finder_taxonomy') . ' AS c ON c.parent_id = t.id');
$sql->where($db->quoteName('t') . '.' . $db->quoteName('parent_id') . ' = 1');
$sql->where($db->quoteName('t') . '.' . $db->quoteName('state') . ' = 1');
$sql->where($db->quoteName('t') . '.' . $db->quoteName('access') . ' IN (' . $groups . ')');
$sql->where($db->quoteName('c') . '.' . $db->quoteName('state') . ' = 1');
$sql->where($db->quoteName('t') . '.' . $db->quoteName('access') . ' IN (' . $groups . ')');
$sql->group($db->quoteName('t') . '.' . $db->quoteName('id'));
$sql->order('t.ordering, t.title');
// Limit the branch children to a predefined filter.
if (!empty($filter->data))
{
$sql->where('c.id IN(' . $filter->data . ')');
}
// Load the branches.
$db->setQuery($sql);
$branches = $db->loadObjectList('id');
// Check for an error.
if ($db->getErrorNum())
{
return null;
}
// Check that we have at least one branch.
if (count($branches) === 0)
{
return null;
}
// 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.
if ($bv->title == 'Language' && JLanguageMultilang::isEnabled()) {
continue;
}
// Build the query to get the child nodes for this branch.
$sql->clear();
$sql->select('t.*');
$sql->from($db->quoteName('#__finder_taxonomy') . ' AS t');
$sql->where($db->quoteName('t') . '.' . $db->quoteName('parent_id') . ' = ' . (int) $bk);
$sql->where($db->quoteName('t') . '.' . $db->quoteName('state') . ' = 1');
$sql->where($db->quoteName('t') . '.' . $db->quoteName('access') . ' IN (' . $groups . ')');
$sql->order('t.ordering, t.title');
// Limit the nodes to a predefined filter.
if (!empty($filter->data))
{
$sql->where('t.id IN(' . $filter->data . ')');
}
// Load the branches.
$db->setQuery($sql);
$branches[$bk]->nodes = $db->loadObjectList('id');
// Check for an error.
if ($db->getErrorNum())
{
return null;
}
// Translate branch nodes if possible.
$language = JFactory::getLanguage();
foreach($branches[$bk]->nodes as $node_id => $node) {
$key = FinderHelperLanguage::branchPlural($node->title);
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);
}
$html = '';
// Add the dates if enabled.
if ($showDates)
{
$html .= JHtml::_('filter.dates', $query, $options);
}
$html .= '
';
// 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.
if ($bv->title == 'Language' && JLanguageMultilang::isEnabled()) {
continue;
}
$active = null;
// Check if the branch is in the filter.
if (array_key_exists($bv->title, $query->filters))
{
// Get the request filters.
$temp = JFactory::getApplication()->input->request->get('t', array(), 'array');
// Search for active nodes in the branch and get the active node.
$active = array_intersect($temp, $query->filters[$bv->title]);
$active = count($active) === 1 ? array_shift($active) : null;
}
$html .= '