joomla_test/components/com_k2/router.php
2020-01-02 22:20:31 +07:00

669 lines
13 KiB
PHP

<?php
/**
* @version $Id: router.php 1935 2013-03-04 16:09:34Z lefteris.kavadas $
* @package K2
* @author JoomlaWorks http://www.joomlaworks.net
* @copyright Copyright (c) 2006 - 2013 JoomlaWorks Ltd. All rights reserved.
* @license GNU/GPL license: http://www.gnu.org/copyleft/gpl.html
*/
// no direct access
defined('_JEXEC') or die ;
$params = JComponentHelper::getParams('com_k2');
// Quick implementation of "Improved K2 router.php" https://gist.github.com/phproberto/4687829
// @TODO Merge the two routers
if ($params->get('k2Sef'))
{
/**
* Build the SEF route from the query
*
* @param array &$query The array of query string values for which to build a route
*
* @return array The URL arguments to use to assemble the subsequent URL.
*
* @since 1.5
*/
function k2BuildRoute(&$query)
{
// Initialize
$segments = array();
// Get params
$params = JComponentHelper::getParams('com_k2');
// Get the menu
$menu = JFactory::getApplication()->getMenu();
// Detect the active menu item
if (empty($query['Itemid']))
{
$menuItem = $menu->getActive();
}
else
{
$menuItem = $menu->getItem($query['Itemid']);
}
// Load data from the current menu item
$mView = ( empty($menuItem->query['view'])) ? null : $menuItem->query['view'];
$mTask = ( empty($menuItem->query['task'])) ? null : $menuItem->query['task'];
$mId = ( empty($menuItem->query['id'])) ? null : $menuItem->query['id'];
$mTag = ( empty($menuItem->query['tag'])) ? null : $menuItem->query['tag'];
if (isset($query['layout']))
{
unset($query['layout']);
}
if ($mView == @$query['view'] && $mTask == @$query['task'] && $mId == @intval($query['id']) && @intval($query['id']) > 0)
{
unset($query['view']);
unset($query['task']);
unset($query['id']);
}
if ($mView == @$query['view'] && $mTask == @$query['task'] && $mTag == @$query['tag'] && isset($query['tag']))
{
unset($query['view']);
unset($query['task']);
unset($query['tag']);
}
if (isset($query['view']))
{
$segments[] = $query['view'];
unset($query['view']);
}
if (isset($query['task']))
{
$segments[] = $query['task'];
unset($query['task']);
}
if (isset($query['id']))
{
$segments[] = $query['id'];
unset($query['id']);
}
if (isset($query['cid']))
{
$segments[] = $query['cid'];
unset($query['cid']);
}
if (isset($query['tag']))
{
$segments[] = $query['tag'];
unset($query['tag']);
}
if (isset($query['year']))
{
$segments[] = $query['year'];
unset($query['year']);
}
if (isset($query['month']))
{
$segments[] = $query['month'];
unset($query['month']);
}
if (isset($query['day']))
{
$segments[] = $query['day'];
unset($query['day']);
}
if (isset($query['task']))
{
$segments[] = $query['task'];
unset($query['task']);
}
// Item view
if (isset($segments[0]) && $segments[0] == 'item')
{
// Enabled category prefix for items
if ($params->get('k2SefLabelItem'))
{
// Tasks available for an item
$itemTasks = array(
'edit',
'download'
);
// If it's a task pick the next key
if (in_array($segments[1], $itemTasks))
{
$ItemId = $segments[2];
}
else
{
$ItemId = $segments[1];
}
// Replace the item with the category slug
if ($params->get('k2SefLabelItem') == '1')
{
$segments[0] = getCategorySlug((int)$ItemId);
}
else
{
$segments[0] = $params->get('k2SefLabelItemCustomPrefix');
}
}
// Remove "item" from the URL
else
{
unset($segments[0]);
}
// Handle item id and alias
if ($params->get('k2SefInsertItemId'))
{
if ($params->get('k2SefUseItemTitleAlias'))
{
if ($params->get('k2SefItemIdTitleAliasSep') == 'slash')
{
$segments[1] = JString::str_ireplace(':', '/', $segments[1]);
}
}
else
{
$temp = @explode(':', $segments[1]);
$segments[1] = (int)$temp[0];
}
}
else
{
if (isset($segments[1]) && $segments[1] != 'download')
{
// Try to split the slud
$temp = @explode(':', $segments[1]);
// If the slug contained an item id do not use it
if (count($temp) > 1)
{
$segments[1] = $temp[1];
}
}
}
}
// Itemlist view. Check for prefix segments
elseif (isset($segments[0]) && $segments[0] == 'itemlist')
{
switch ($segments[1])
{
case 'category' :
$segments[0] = $params->get('k2SefLabelCat', 'content');
unset($segments[1]);
// Handle category id and alias
if ($params->get('k2SefInsertCatId'))
{
if ($params->get('k2SefUseCatTitleAlias'))
{
if ($params->get('k2SefCatIdTitleAliasSep') == 'slash')
{
$segments[2] = JString::str_ireplace(':', '/', $segments[2]);
}
}
else
{
$temp = @explode(':', $segments[2]);
$segments[2] = (int)$temp[0];
}
}
else
{
// Try to split the slud
$temp = @explode(':', $segments[2]);
// If the slug contained an item id do not use it
if (count($temp) > 1)
{
@$segments[1] = $temp[2];
}
}
break;
case 'tag' :
$segments[0] = $params->get('k2SefLabelTag', 'tag');
unset($segments[1]);
break;
case 'user' :
$segments[0] = $params->get('k2SefLabelUser', 'author');
unset($segments[1]);
break;
case 'date' :
$segments[0] = $params->get('k2SefLabelDate', 'date');
unset($segments[1]);
break;
case 'search' :
$segments[0] = $params->get('k2SefLabelSearch', 'search');
unset($segments[1]);
break;
default :
$segments[0] = 'itemlist';
break;
}
}
// Return reordered segments array
return array_values($segments);
}
/**
* Get back the url from the segments
*
* @param array $segments Segments in the SEF URL
*
* @return array Generated vars for the query
*/
function k2ParseRoute($segments)
{
// Initialize
$vars = array();
$params = JComponentHelper::getParams('com_k2');
$reservedViews = array(
'item',
'itemlist',
'media',
'users',
'comments',
'latest'
);
if (!in_array($segments[0], $reservedViews))
{
// Category view
if ($segments[0] == $params->get('k2SefLabelCat', 'content'))
{
$segments[0] = 'itemlist';
array_splice($segments, 1, 0, 'category');
}
// Tag view
elseif ($segments[0] == $params->get('k2SefLabelTag', 'tag'))
{
$segments[0] = 'itemlist';
array_splice($segments, 1, 0, 'tag');
}
// User view
elseif ($segments[0] == $params->get('k2SefLabelUser', 'author'))
{
$segments[0] = 'itemlist';
array_splice($segments, 1, 0, 'user');
}
// Date view
elseif ($segments[0] == $params->get('k2SefLabelDate', 'date'))
{
$segments[0] = 'itemlist';
array_splice($segments, 1, 0, 'date');
}
// Search view
elseif ($segments[0] == $params->get('k2SefLabelSearch', 'search'))
{
$segments[0] = 'itemlist';
array_splice($segments, 1, 0, 'search');
}
// Item view
else
{
// Replace the category prefix with item
if ($params->get('k2SefLabelItem'))
{
$segments[0] = 'item';
}
// Reinsert the removed item segment
else
{
array_splice($segments, 0, 0, 'item');
}
// Reinsert item id to the item alias
if (!$params->get('k2SefInsertItemId') && @$segments[1] != 'download' && @$segments[1] != 'edit')
{
$segments[1] = str_replace(':', '-', $segments[1]);
$ItemId = getItemId($segments[1]);
$segments[1] = $ItemId.':'.$segments[1];
}
}
}
$vars['view'] = $segments[0];
if (!isset($segments[1]))
{
$segments[1] = '';
}
$vars['task'] = $segments[1];
if ($segments[0] == 'itemlist')
{
switch ($segments[1])
{
case 'category' :
if (isset($segments[2]))
{
$vars['id'] = $segments[2];
}
break;
case 'tag' :
if (isset($segments[2]))
{
$vars['tag'] = $segments[2];
}
break;
case 'user' :
if (isset($segments[2]))
{
$vars['id'] = $segments[2];
}
break;
case 'date' :
if (isset($segments[2]))
{
$vars['year'] = $segments[2];
}
if (isset($segments[3]))
{
$vars['month'] = $segments[3];
}
if (isset($segments[4]))
{
$vars['day'] = $segments[4];
}
break;
}
}
elseif ($segments[0] == 'item')
{
switch ($segments[1])
{
case 'edit' :
if (isset($segments[2]))
{
$vars['cid'] = $segments[2];
}
break;
case 'download' :
if (isset($segments[2]))
{
$vars['id'] = $segments[2];
}
break;
default :
$vars['id'] = $segments[1];
break;
}
}
if ($segments[0] == 'comments' && isset($segments[1]) && $segments[1] == 'reportSpammer')
{
$vars['id'] = $segments[2];
}
return $vars;
}
/**
* Get a category alias
*
* @param integer $ItemId The category id
*
* @return string The category alias
*/
function getCategorySlug($ItemId = null)
{
$slug = null;
$db = JFactory::getDBO();
$query = "SELECT items.id, categories.id AS catid, CASE WHEN CHAR_LENGTH(categories.alias) THEN CONCAT_WS('-', categories.id, categories.alias) ELSE categories.id END AS catslug
FROM #__k2_items AS items
INNER JOIN #__k2_categories AS categories ON items.catid = categories.id
WHERE items.id = ".(int)$ItemId;
$db->setQuery($query);
try
{
if ($result = $db->loadObject())
{
$slug = $result->catslug;
}
}
catch (Exception $e)
{
$this->setError($e->getMessage());
return false;
}
return $slug;
}
/**
* Get id K2.
*
* @param string $alias The k2 item alias
*
* @return integer
*/
function getItemId($alias)
{
$id = null;
$db = JFactory::getDBO();
$query = "SELECT id FROM #__k2_items WHERE alias = ".$db->quote($alias);
$db->setQuery($query);
try
{
$id = $db->loadResult();
}
catch (Exception $e)
{
$this->setError($e->getMessage());
return false;
}
return $id;
}
}
else
{
function K2BuildRoute(&$query)
{
$segments = array();
$application = JFactory::getApplication();
$menu = $application->getMenu();
if (empty($query['Itemid']))
{
$menuItem = $menu->getActive();
}
else
{
$menuItem = $menu->getItem($query['Itemid']);
}
$mView = ( empty($menuItem->query['view'])) ? null : $menuItem->query['view'];
$mTask = ( empty($menuItem->query['task'])) ? null : $menuItem->query['task'];
$mId = ( empty($menuItem->query['id'])) ? null : $menuItem->query['id'];
$mTag = ( empty($menuItem->query['tag'])) ? null : $menuItem->query['tag'];
if (isset($query['layout']))
{
unset($query['layout']);
}
if ($mView == @$query['view'] && $mTask == @$query['task'] && $mId == @intval($query['id']) && @intval($query['id']) > 0)
{
unset($query['view']);
unset($query['task']);
unset($query['id']);
}
if ($mView == @$query['view'] && $mTask == @$query['task'] && $mTag == @$query['tag'] && isset($query['tag']))
{
unset($query['view']);
unset($query['task']);
unset($query['tag']);
}
if (isset($query['view']))
{
$view = $query['view'];
$segments[] = $view;
unset($query['view']);
}
if (@ isset($query['task']))
{
$task = $query['task'];
$segments[] = $task;
unset($query['task']);
}
if (isset($query['id']))
{
$id = $query['id'];
$segments[] = $id;
unset($query['id']);
}
if (isset($query['cid']))
{
$cid = $query['cid'];
$segments[] = $cid;
unset($query['cid']);
}
if (isset($query['tag']))
{
$tag = $query['tag'];
$segments[] = $tag;
unset($query['tag']);
}
if (isset($query['year']))
{
$year = $query['year'];
$segments[] = $year;
unset($query['year']);
}
if (isset($query['month']))
{
$month = $query['month'];
$segments[] = $month;
unset($query['month']);
}
if (isset($query['day']))
{
$day = $query['day'];
$segments[] = $day;
unset($query['day']);
}
if (isset($query['task']))
{
$task = $query['task'];
$segments[] = $task;
unset($query['task']);
}
return $segments;
}
function K2ParseRoute($segments)
{
$vars = array();
$vars['view'] = $segments[0];
if (!isset($segments[1]))
$segments[1] = '';
$vars['task'] = $segments[1];
if ($segments[0] == 'itemlist')
{
switch($segments[1])
{
case 'category' :
if (isset($segments[2]))
$vars['id'] = $segments[2];
break;
case 'tag' :
if (isset($segments[2]))
$vars['tag'] = $segments[2];
break;
case 'user' :
if (isset($segments[2]))
$vars['id'] = $segments[2];
break;
case 'date' :
if (isset($segments[2]))
$vars['year'] = $segments[2];
if (isset($segments[3]))
$vars['month'] = $segments[3];
if (isset($segments[4]))
{
$vars['day'] = $segments[4];
}
break;
}
}
else if ($segments[0] == 'item')
{
switch($segments[1])
{
case 'edit' :
if (isset($segments[2]))
$vars['cid'] = $segments[2];
break;
case 'download' :
if (isset($segments[2]))
$vars['id'] = $segments[2];
break;
default :
$vars['id'] = $segments[1];
break;
}
}
if ($segments[0] == 'comments' && isset($segments[1]) && $segments[1] == 'reportSpammer')
{
$vars['id'] = $segments[2];
}
return $vars;
}
}