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

243 lines
5.0 KiB
PHP

<?php
/**
* @package Joomla.Site
* @subpackage com_users
*
* @copyright Copyright (C) 2005 - 2013 Open Source Matters, Inc. All rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
defined('_JEXEC') or die;
/**
* Function to build a Users URL route.
*
* @return array The array of query string values for which to build a route.
* @return array The URL route with segments represented as an array.
* @since 1.5
*/
function UsersBuildRoute(&$query)
{
// Declare static variables.
static $items;
static $default;
static $registration;
static $profile;
static $login;
static $remind;
static $resend;
static $reset;
$segments = array();
// Get the relevant menu items if not loaded.
if (empty($items))
{
// Get all relevant menu items.
$app = JFactory::getApplication();
$menu = $app->getMenu();
$items = $menu->getItems('component', 'com_users');
// Build an array of serialized query strings to menu item id mappings.
for ($i = 0, $n = count($items); $i < $n; $i++)
{
// Check to see if we have found the resend menu item.
if (empty($resend) && !empty($items[$i]->query['view']) && ($items[$i]->query['view'] == 'resend'))
{
$resend = $items[$i]->id;
}
// Check to see if we have found the reset menu item.
if (empty($reset) && !empty($items[$i]->query['view']) && ($items[$i]->query['view'] == 'reset'))
{
$reset = $items[$i]->id;
}
// Check to see if we have found the remind menu item.
if (empty($remind) && !empty($items[$i]->query['view']) && ($items[$i]->query['view'] == 'remind'))
{
$remind = $items[$i]->id;
}
// Check to see if we have found the login menu item.
if (empty($login) && !empty($items[$i]->query['view']) && ($items[$i]->query['view'] == 'login'))
{
$login = $items[$i]->id;
}
// Check to see if we have found the registration menu item.
if (empty($registration) && !empty($items[$i]->query['view']) && ($items[$i]->query['view'] == 'registration'))
{
$registration = $items[$i]->id;
}
// Check to see if we have found the profile menu item.
if (empty($profile) && !empty($items[$i]->query['view']) && ($items[$i]->query['view'] == 'profile'))
{
$profile = $items[$i]->id;
}
}
// Set the default menu item to use for com_users if possible.
if ($profile)
{
$default = $profile;
}
elseif ($registration)
{
$default = $registration;
}
elseif ($login)
{
$default = $login;
}
}
if (!empty($query['view']))
{
switch ($query['view'])
{
case 'reset':
if ($query['Itemid'] = $reset)
{
unset ($query['view']);
}
else
{
$query['Itemid'] = $default;
}
break;
case 'resend':
if ($query['Itemid'] = $resend)
{
unset ($query['view']);
}
else
{
$query['Itemid'] = $default;
}
break;
case 'remind':
if ($query['Itemid'] = $remind)
{
unset ($query['view']);
}
else
{
$query['Itemid'] = $default;
}
break;
case 'login':
if ($query['Itemid'] = $login)
{
unset ($query['view']);
}
else
{
$query['Itemid'] = $default;
}
break;
case 'registration':
if ($query['Itemid'] = $registration)
{
unset ($query['view']);
}
else
{
$query['Itemid'] = $default;
}
break;
default:
case 'profile':
if (!empty($query['view']))
{
$segments[] = $query['view'];
}
unset ($query['view']);
if ($query['Itemid'] = $profile)
{
unset ($query['view']);
}
else
{
$query['Itemid'] = $default;
}
// Only append the user id if not "me".
$user = JFactory::getUser();
if (!empty($query['user_id']) && ($query['user_id'] != $user->id))
{
$segments[] = $query['user_id'];
}
unset ($query['user_id']);
break;
}
}
return $segments;
}
/**
* Function to parse a Users URL route.
*
* @return array The URL route with segments represented as an array.
* @return array The array of variables to set in the request.
* @since 1.5
*/
function UsersParseRoute($segments)
{
$vars = array();
// Only run routine if there are segments to parse.
if (count($segments) < 1)
{
return;
}
// Get the package from the route segments.
$userId = array_pop($segments);
if (!is_numeric($userId))
{
$vars['view'] = 'profile';
return $vars;
}
if (is_numeric($userId))
{
// Get the package id from the packages table by alias.
$db = JFactory::getDbo();
$db->setQuery(
'SELECT ' . $db->quoteName('id') .
' FROM ' . $db->quoteName('#__users') .
' WHERE ' . $db->quoteName('id') . ' = ' . (int) $userId
);
$userId = $db->loadResult();
}
// Set the package id if present.
if ($userId)
{
// Set the package id.
$vars['user_id'] = (int) $userId;
// Set the view to package if not already set.
if (empty($vars['view']))
{
$vars['view'] = 'profile';
}
}
else
{
JError::raiseError(404, JText::_('JGLOBAL_RESOURCE_NOT_FOUND'));
}
return $vars;
}