111 lines
2.5 KiB
PHP
111 lines
2.5 KiB
PHP
|
<?php
|
||
|
/**
|
||
|
* @package Joomla.Site
|
||
|
* @subpackage com_finder
|
||
|
*
|
||
|
* @copyright Copyright (C) 2005 - 2013 Open Source Matters, Inc. All rights reserved.
|
||
|
* @license GNU General Public License version 2 or later; see LICENSE
|
||
|
*/
|
||
|
|
||
|
defined('_JEXEC') or die;
|
||
|
|
||
|
/**
|
||
|
* Method to build a SEF route.
|
||
|
*
|
||
|
* @param array &$query An array of route variables.
|
||
|
*
|
||
|
* @return array An array of route segments.
|
||
|
*
|
||
|
* @since 2.5
|
||
|
*/
|
||
|
function FinderBuildRoute(&$query)
|
||
|
{
|
||
|
static $menu;
|
||
|
$segments = array();
|
||
|
|
||
|
// Load the menu if necessary.
|
||
|
if (!$menu)
|
||
|
{
|
||
|
$menu = JFactory::getApplication('site')->getMenu();
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
* First, handle menu item routes first. When the menu system builds a
|
||
|
* route, it only provides the option and the menu item id. We don't have
|
||
|
* to do anything to these routes.
|
||
|
*/
|
||
|
if (count($query) === 2 && isset($query['Itemid']) && isset($query['option']))
|
||
|
{
|
||
|
return $segments;
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
* Next, handle a route with a supplied menu item id. All system generated
|
||
|
* routes should fall into this group. We can assume that the menu item id
|
||
|
* is the best possible match for the query but we need to go through and
|
||
|
* see which variables we can eliminate from the route query string because
|
||
|
* they are present in the menu item route already.
|
||
|
*/
|
||
|
if (!empty($query['Itemid']))
|
||
|
{
|
||
|
// Get the menu item.
|
||
|
$item = $menu->getItem($query['Itemid']);
|
||
|
|
||
|
// Check if the view matches.
|
||
|
if ($item && @$item->query['view'] === @$query['view'])
|
||
|
{
|
||
|
unset($query['view']);
|
||
|
}
|
||
|
|
||
|
// Check if the search query filter matches.
|
||
|
if ($item && @$item->query['f'] === @$query['f'])
|
||
|
{
|
||
|
unset($query['f']);
|
||
|
}
|
||
|
|
||
|
// Check if the search query string matches.
|
||
|
if ($item && @$item->query['q'] === @$query['q'])
|
||
|
{
|
||
|
unset($query['q']);
|
||
|
}
|
||
|
|
||
|
return $segments;
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
* Lastly, handle a route with no menu item id. Fortunately, we only need
|
||
|
* to deal with the view as the other route variables are supposed to stay
|
||
|
* in the query string.
|
||
|
*/
|
||
|
if (isset($query['view']))
|
||
|
{
|
||
|
// Add the view to the segments.
|
||
|
$segments[] = $query['view'];
|
||
|
unset($query['view']);
|
||
|
}
|
||
|
|
||
|
return $segments;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Method to parse a SEF route.
|
||
|
*
|
||
|
* @param array $segments An array of route segments.
|
||
|
*
|
||
|
* @return array An array of route variables.
|
||
|
*
|
||
|
* @since 2.5
|
||
|
*/
|
||
|
function FinderParseRoute($segments)
|
||
|
{
|
||
|
$vars = array();
|
||
|
|
||
|
// Check if the view segment is set and it equals search or advanced.
|
||
|
if (@$segments[0] === 'search' || @$segments[0] === 'advanced')
|
||
|
{
|
||
|
$vars['view'] = $segments[0];
|
||
|
}
|
||
|
|
||
|
return $vars;
|
||
|
}
|