Файловый менеджер - Редактировать - /home/wuectly/www/03cbe/Router.tar
Назад
Exception/RouteNotFoundException.php 0000604 00000001622 15245561402 0013646 0 ustar 00 <?php /** * Joomla! Content Management System * * @copyright (C) 2017 Open Source Matters, Inc. <https://www.joomla.org> * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\CMS\Router\Exception; defined('JPATH_PLATFORM') or die; /** * Exception class defining an error for a missing route * * @since 3.8.0 */ class RouteNotFoundException extends \InvalidArgumentException { /** * Constructor * * @param string $message The Exception message to throw. * @param integer $code The Exception code. * @param \Exception $previous The previous exception used for the exception chaining. * * @since 3.8.0 */ public function __construct($message = '', $code = 404, \Exception $previous = null) { if (empty($message)) { $message = 'URL was not found'; } parent::__construct($message, $code, $previous); } } Route.php 0000604 00000012515 15245561402 0006357 0 ustar 00 <?php /** * Joomla! Content Management System * * @copyright (C) 2012 Open Source Matters, Inc. <https://www.joomla.org> * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\CMS\Router; defined('JPATH_PLATFORM') or die; use Joomla\CMS\Log\Log; use Joomla\CMS\Factory; use Joomla\CMS\Uri\Uri; /** * Route handling class * * @since 1.7.0 */ class Route { /** * No change, use the protocol currently used. * * @since 3.9.7 */ const TLS_IGNORE = 0; /** * Make URI secure using http over TLS (https). * * @since 3.9.7 */ const TLS_FORCE = 1; /** * Make URI unsecure using plain http (http). * * @since 3.9.7 */ const TLS_DISABLE = 2; /** * The route object so we don't have to keep fetching it. * * @var Router[] * @since 3.0.1 */ private static $_router = array(); /** * Translates an internal Joomla URL to a humanly readable URL. This method builds links for the current active client. * * @param string $url Absolute or Relative URI to Joomla resource. * @param boolean $xhtml Replace & by & for XML compliance. * @param integer $tls Secure state for the resolved URI. Use Route::TLS_* constants * 0: (default) No change, use the protocol currently used in the request * 1: Make URI secure using global secure site URI. * 2: Make URI unsecure using the global unsecure site URI. * @param boolean $absolute Return an absolute URL * * @return string The translated humanly readable URL. * * @since 1.7.0 */ public static function _($url, $xhtml = true, $tls = self::TLS_IGNORE, $absolute = false) { try { // @deprecated 4.0 Before 3.9.7 this method silently converted $tls to integer if (!is_int($tls)) { Log::add( __METHOD__ . '() called with incompatible variable type on parameter $tls.', Log::WARNING, 'deprecated' ); $tls = (int) $tls; } // @todo Deprecate in 4.0 Before 3.9.7 this method accepted -1. if ($tls === -1) { $tls = self::TLS_DISABLE; } $app = Factory::getApplication(); $client = $app->getName(); return static::link($client, $url, $xhtml, $tls, $absolute); } catch (\RuntimeException $e) { // @deprecated 4.0 Before 3.9.0 this method failed silently on router error. This B/C will be removed in Joomla 4.0. return null; } } /** * Translates an internal Joomla URL to a humanly readable URL. * NOTE: To build link for active client instead of a specific client, you can use <var>JRoute::_()</var> * * @param string $client The client name for which to build the link. * @param string $url Absolute or Relative URI to Joomla resource. * @param boolean $xhtml Replace & by & for XML compliance. * @param integer $tls Secure state for the resolved URI. Use Route::TLS_* constants * 0: (default) No change, use the protocol currently used in the request * 1: Make URI secure using global secure site URI. * 2: Make URI unsecure using the global unsecure site URI. * @param boolean $absolute Return an absolute URL * * @return string The translated humanly readable URL. * * @throws \RuntimeException * * @since 3.9.0 */ public static function link($client, $url, $xhtml = true, $tls = self::TLS_IGNORE, $absolute = false) { // If we cannot process this $url exit early. if (!is_array($url) && (strpos($url, '&') !== 0) && (strpos($url, 'index.php') !== 0)) { return $url; } // Get the router instance, only attempt when a client name is given. if ($client && !isset(self::$_router[$client])) { $app = Factory::getApplication(); self::$_router[$client] = $app->getRouter($client); } // Make sure that we have our router if (!isset(self::$_router[$client])) { throw new \RuntimeException(\JText::sprintf('JLIB_APPLICATION_ERROR_ROUTER_LOAD', $client), 500); } // Build route. $uri = self::$_router[$client]->build($url); $scheme = array('path', 'query', 'fragment'); /* * Get the secure/unsecure URLs. * * If the first 5 characters of the BASE are 'https', then we are on an ssl connection over * https and need to set our secure URL to the current request URL, if not, and the scheme is * 'http', then we need to do a quick string manipulation to switch schemes. */ if ($tls === self::TLS_FORCE) { $uri->setScheme('https'); } elseif ($tls === self::TLS_DISABLE) { $uri->setScheme('http'); } // Set scheme if requested or if ($absolute || $tls > 0) { static $scheme_host_port; if (!is_array($scheme_host_port)) { $uri2 = Uri::getInstance(); $scheme_host_port = array($uri2->getScheme(), $uri2->getHost(), $uri2->getPort()); } if (is_null($uri->getScheme())) { $uri->setScheme($scheme_host_port[0]); } $uri->setHost($scheme_host_port[1]); $uri->setPort($scheme_host_port[2]); $scheme = array_merge($scheme, array('host', 'port', 'scheme')); } $url = $uri->toString($scheme); // Replace spaces. $url = preg_replace('/\s/u', '%20', $url); if ($xhtml) { $url = htmlspecialchars($url, ENT_COMPAT, 'UTF-8'); } return $url; } } SiteRouter.php 0000604 00000044622 15245561402 0007372 0 ustar 00 <?php /** * Joomla! Content Management System * * @copyright (C) 2007 Open Source Matters, Inc. <https://www.joomla.org> * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\CMS\Router; defined('JPATH_PLATFORM') or die; use Joomla\CMS\Application\CMSApplication; use Joomla\CMS\Component\ComponentHelper; use Joomla\CMS\Component\Router\RouterBase; use Joomla\CMS\Component\Router\RouterInterface; use Joomla\CMS\Component\Router\RouterLegacy; use Joomla\String\StringHelper; /** * Class to create and parse routes for the site application * * @since 1.5 */ class SiteRouter extends Router { /** * Component-router objects * * @var array * @since 3.3 */ protected $componentRouters = array(); /** * Current Application-Object * * @var CMSApplication * @since 3.4 */ protected $app; /** * Current \JMenu-Object * * @var \JMenu * @since 3.4 */ protected $menu; /** * Class constructor * * @param array $options Array of options * @param CMSApplication $app CMSApplication Object * @param \JMenu $menu \JMenu object * * @since 3.4 */ public function __construct($options = array(), CMSApplication $app = null, \JMenu $menu = null) { parent::__construct($options); $this->app = $app ?: CMSApplication::getInstance('site'); $this->menu = $menu ?: $this->app->getMenu(); } /** * Function to convert a route to an internal URI * * @param \JUri &$uri The uri. * * @return array * * @since 1.5 */ public function parse(&$uri) { $vars = array(); if ($this->app->get('force_ssl') == 2 && strtolower($uri->getScheme()) !== 'https') { // Forward to https $uri->setScheme('https'); $this->app->redirect((string) $uri, 301); } // Get the path // Decode URL to convert percent-encoding to unicode so that strings match when routing. $path = urldecode($uri->getPath()); // Remove the base URI path. $path = substr_replace($path, '', 0, strlen(\JUri::base(true))); // Check to see if a request to a specific entry point has been made. if (preg_match("#.*?\.php#u", $path, $matches)) { // Get the current entry point path relative to the site path. $scriptPath = realpath($_SERVER['SCRIPT_FILENAME'] ?: str_replace('\\\\', '\\', $_SERVER['PATH_TRANSLATED'])); $relativeScriptPath = str_replace('\\', '/', str_replace(JPATH_SITE, '', $scriptPath)); // If a php file has been found in the request path, check to see if it is a valid file. // Also verify that it represents the same file from the server variable for entry script. if (file_exists(JPATH_SITE . $matches[0]) && ($matches[0] === $relativeScriptPath)) { // Remove the entry point segments from the request path for proper routing. $path = str_replace($matches[0], '', $path); } } // Identify format if ($this->_mode == JROUTER_MODE_SEF) { if ($this->app->get('sef_suffix') && !(substr($path, -9) === 'index.php' || substr($path, -1) === '/')) { if ($suffix = pathinfo($path, PATHINFO_EXTENSION)) { $vars['format'] = $suffix; } } } // Set the route $uri->setPath(trim($path, '/')); // Set the parsepreprocess components methods $components = ComponentHelper::getComponents(); foreach ($components as $component) { $componentRouter = $this->getComponentRouter($component->option); if (method_exists($componentRouter, 'parsepreprocess')) { $this->attachParseRule(array($componentRouter, 'parsepreprocess'), static::PROCESS_BEFORE); } } $vars += parent::parse($uri); return $vars; } /** * Function to convert an internal URI to a route * * @param string $url The internal URL * * @return string The absolute search engine friendly URL * * @since 1.5 */ public function build($url) { $uri = parent::build($url); // Get the path data $route = $uri->getPath(); // Add the suffix to the uri if ($this->_mode == JROUTER_MODE_SEF && $route) { if ($this->app->get('sef_suffix') && !(substr($route, -9) === 'index.php' || substr($route, -1) === '/')) { if ($format = $uri->getVar('format', 'html')) { $route .= '.' . $format; $uri->delVar('format'); } } if ($this->app->get('sef_rewrite')) { // Transform the route if ($route === 'index.php') { $route = ''; } else { $route = str_replace('index.php/', '', $route); } } } // Add frontend basepath to the uri $uri->setPath(\JUri::root(true) . '/' . $route); return $uri; } /** * Function to convert a raw route to an internal URI * * @param \JUri &$uri The raw route * * @return array * * @since 3.2 * @deprecated 4.0 Attach your logic as rule to the main parse stage */ protected function parseRawRoute(&$uri) { $vars = array(); // Handle an empty URL (special case) if (!$uri->getVar('Itemid') && !$uri->getVar('option')) { $item = $this->menu->getDefault($this->app->getLanguage()->getTag()); if (!is_object($item)) { // No default item set return $vars; } // Set the information in the request $vars = $item->query; // Get the itemid $vars['Itemid'] = $item->id; // Set the active menu item $this->menu->setActive($vars['Itemid']); return $vars; } // Get the variables from the uri $this->setVars($uri->getQuery(true)); // Get the itemid, if it hasn't been set force it to null $this->setVar('Itemid', $this->app->input->getInt('Itemid', null)); // Only an Itemid OR if filter language plugin set? Get the full information from the itemid if (count($this->getVars()) === 1 || ($this->app->getLanguageFilter() && count($this->getVars()) === 2)) { $item = $this->menu->getItem($this->getVar('Itemid')); if ($item && $item->type == 'alias') { $newItem = $this->menu->getItem($item->params->get('aliasoptions')); if ($newItem) { $item->query = array_merge($item->query, $newItem->query); $item->component = $newItem->component; } } if ($item !== null && is_array($item->query)) { $vars += $item->query; } } // Set the active menu item $this->menu->setActive($this->getVar('Itemid')); return $vars; } /** * Function to convert a sef route to an internal URI * * @param \JUri &$uri The sef URI * * @return string Internal URI * * @since 3.2 * @deprecated 4.0 Attach your logic as rule to the main parse stage */ protected function parseSefRoute(&$uri) { $route = $uri->getPath(); // Remove the suffix if ($this->app->get('sef_suffix')) { if ($suffix = pathinfo($route, PATHINFO_EXTENSION)) { $route = str_replace('.' . $suffix, '', $route); } } // Get the variables from the uri $vars = $uri->getQuery(true); // Handle an empty URL (special case) if (empty($route)) { // If route is empty AND option is set in the query, assume it's non-sef url, and parse appropriately if (isset($vars['option']) || isset($vars['Itemid'])) { return $this->parseRawRoute($uri); } $item = $this->menu->getDefault($this->app->getLanguage()->getTag()); // If user not allowed to see default menu item then avoid notices if (is_object($item)) { // Set query variables of default menu item into the request, but keep existing request variables $vars = array_merge($vars, $item->query); // Get the itemid $vars['Itemid'] = $item->id; // Set the active menu item $this->menu->setActive($vars['Itemid']); $this->setVars($vars); } return $vars; } // Parse the application route $segments = explode('/', $route); if (count($segments) > 1 && $segments[0] === 'component') { $vars['option'] = 'com_' . $segments[1]; $vars['Itemid'] = null; $route = implode('/', array_slice($segments, 2)); } else { // Get menu items. $items = $this->menu->getMenu(); $found = false; $route_lowercase = StringHelper::strtolower($route); $lang_tag = $this->app->getLanguage()->getTag(); // Iterate through all items and check route matches. foreach ($items as $item) { if ($item->route && StringHelper::strpos($route_lowercase . '/', $item->route . '/') === 0 && $item->type !== 'menulink') { // Usual method for non-multilingual site. if (!$this->app->getLanguageFilter()) { // Exact route match. We can break iteration because exact item was found. if ($item->route === $route_lowercase) { $found = $item; break; } // Partial route match. Item with highest level takes priority. if (!$found || $found->level < $item->level) { $found = $item; } } // Multilingual site. elseif ($item->language === '*' || $item->language === $lang_tag) { // Exact route match. if ($item->route === $route_lowercase) { $found = $item; // Break iteration only if language is matched. if ($item->language === $lang_tag) { break; } } // Partial route match. Item with highest level or same language takes priority. if (!$found || $found->level < $item->level || $item->language === $lang_tag) { $found = $item; } } } } if (!$found) { $found = $this->menu->getDefault($lang_tag); } else { $route = substr($route, strlen($found->route)); if ($route) { $route = substr($route, 1); } } if ($found) { if ($found->type == 'alias') { $newItem = $this->menu->getItem($found->params->get('aliasoptions')); if ($newItem) { $found->query = array_merge($found->query, $newItem->query); $found->component = $newItem->component; } } $vars['Itemid'] = $found->id; $vars['option'] = $found->component; } } // Set the active menu item if (isset($vars['Itemid'])) { $this->menu->setActive($vars['Itemid']); } // Set the variables $this->setVars($vars); // Parse the component route if (!empty($route) && isset($this->_vars['option'])) { $segments = explode('/', $route); if (empty($segments[0])) { array_shift($segments); } // Handle component route $component = preg_replace('/[^A-Z0-9_\.-]/i', '', $this->_vars['option']); if (count($segments)) { $crouter = $this->getComponentRouter($component); $vars = $crouter->parse($segments); $this->setVars($vars); } $route = implode('/', $segments); } else { // Set active menu item if ($item = $this->menu->getActive()) { $vars = $item->query; } } $uri->setPath($route); return $vars; } /** * Function to build a raw route * * @param \JUri &$uri The internal URL * * @return string Raw Route * * @since 3.2 * @deprecated 4.0 Attach your logic as rule to the main build stage */ protected function buildRawRoute(&$uri) { // Get the query data $query = $uri->getQuery(true); if (!isset($query['option'])) { return; } $component = preg_replace('/[^A-Z0-9_\.-]/i', '', $query['option']); $crouter = $this->getComponentRouter($component); if ($crouter instanceof RouterBase === false) { $query = $crouter->preprocess($query); $uri->setQuery($query); } } /** * Function to build a sef route * * @param \JUri &$uri The internal URL * * @return void * * @since 1.5 * @deprecated 4.0 Attach your logic as rule to the main build stage * @codeCoverageIgnore */ protected function _buildSefRoute(&$uri) { $this->buildSefRoute($uri); } /** * Function to build a sef route * * @param \JUri &$uri The uri * * @return void * * @since 3.2 * @deprecated 4.0 Attach your logic as rule to the main build stage */ protected function buildSefRoute(&$uri) { // Get the route $route = $uri->getPath(); // Get the query data $query = $uri->getQuery(true); if (!isset($query['option'])) { return; } // Build the component route $component = preg_replace('/[^A-Z0-9_\.-]/i', '', $query['option']); $itemID = !empty($query['Itemid']) ? $query['Itemid'] : null; $crouter = $this->getComponentRouter($component); $parts = $crouter->build($query); $result = implode('/', $parts); $tmp = ($result !== '') ? $result : ''; // Build the application route $built = false; if (!empty($query['Itemid'])) { $item = $this->menu->getItem($query['Itemid']); if (is_object($item) && $query['option'] === $item->component) { if (!$item->home) { $tmp = !empty($tmp) ? $item->route . '/' . $tmp : $item->route; } $built = true; } } if (empty($query['Itemid']) && !empty($itemID)) { $query['Itemid'] = $itemID; } if (!$built) { $tmp = 'component/' . substr($query['option'], 4) . '/' . $tmp; } if ($tmp) { $route .= '/' . $tmp; } // Unset unneeded query information if (isset($item) && $query['option'] === $item->component) { unset($query['Itemid']); } unset($query['option']); // Set query again in the URI $uri->setQuery($query); $uri->setPath($route); } /** * Process the parsed router variables based on custom defined rules * * @param \JUri &$uri The URI to parse * @param string $stage The stage that should be processed. * Possible values: 'preprocess', 'postprocess' * and '' for the main parse stage * * @return array The array of processed URI variables * * @since 3.2 */ protected function processParseRules(&$uri, $stage = self::PROCESS_DURING) { // Process the attached parse rules $vars = parent::processParseRules($uri, $stage); if ($stage === self::PROCESS_DURING) { // Process the pagination support if ($this->_mode == JROUTER_MODE_SEF) { $start = $uri->getVar('start'); if ($start !== null) { $uri->delVar('start'); $vars['limitstart'] = $start; } } } return $vars; } /** * Process the build uri query data based on custom defined rules * * @param \JUri &$uri The URI * @param string $stage The stage that should be processed. * Possible values: 'preprocess', 'postprocess' * and '' for the main build stage * * @return void * * @since 3.2 * @deprecated 4.0 The special logic should be implemented as rule */ protected function processBuildRules(&$uri, $stage = self::PROCESS_DURING) { if ($stage === self::PROCESS_DURING) { // Make sure any menu vars are used if no others are specified $query = $uri->getQuery(true); if ($this->_mode != 1 && isset($query['Itemid']) && (count($query) === 2 || (count($query) === 3 && isset($query['lang'])))) { // Get the active menu item $itemid = $uri->getVar('Itemid'); $lang = $uri->getVar('lang'); $item = $this->menu->getItem($itemid); if ($item) { $uri->setQuery($item->query); } $uri->setVar('Itemid', $itemid); if ($lang) { $uri->setVar('lang', $lang); } } } // Process the attached build rules parent::processBuildRules($uri, $stage); if ($stage === self::PROCESS_BEFORE) { // Get the query data $query = $uri->getQuery(true); if (!isset($query['option'])) { return; } // Build the component route $component = preg_replace('/[^A-Z0-9_\.-]/i', '', $query['option']); $router = $this->getComponentRouter($component); $query = $router->preprocess($query); $uri->setQuery($query); } if ($stage === self::PROCESS_DURING) { // Get the path data $route = $uri->getPath(); if ($this->_mode == JROUTER_MODE_SEF && $route) { $limitstart = $uri->getVar('limitstart'); if ($limitstart !== null) { $uri->setVar('start', (int) $limitstart); $uri->delVar('limitstart'); } } $uri->setPath($route); } } /** * Create a uri based on a full or partial URL string * * @param string $url The URI * * @return \JUri * * @since 3.2 */ protected function createUri($url) { // Create the URI $uri = parent::createUri($url); // Get the itemid form the URI $itemid = $uri->getVar('Itemid'); if ($itemid === null) { if ($option = $uri->getVar('option')) { $item = $this->menu->getItem($this->getVar('Itemid')); if ($item !== null && $item->component === $option) { $uri->setVar('Itemid', $item->id); } } else { if ($option = $this->getVar('option')) { $uri->setVar('option', $option); } if ($itemid = $this->getVar('Itemid')) { $uri->setVar('Itemid', $itemid); } } } else { if (!$uri->getVar('option')) { if ($item = $this->menu->getItem($itemid)) { $uri->setVar('option', $item->component); } } } return $uri; } /** * Get component router * * @param string $component Name of the component including com_ prefix * * @return RouterInterface Component router * * @since 3.3 */ public function getComponentRouter($component) { if (!isset($this->componentRouters[$component])) { $compname = ucfirst(substr($component, 4)); $class = $compname . 'Router'; if (!class_exists($class)) { // Use the component routing handler if it exists $path = JPATH_SITE . '/components/' . $component . '/router.php'; // Use the custom routing handler if it exists if (file_exists($path)) { require_once $path; } } if (class_exists($class)) { $reflection = new \ReflectionClass($class); if (in_array('Joomla\\CMS\\Component\\Router\\RouterInterface', $reflection->getInterfaceNames())) { $this->componentRouters[$component] = new $class($this->app, $this->menu); } } if (!isset($this->componentRouters[$component])) { $this->componentRouters[$component] = new RouterLegacy($compname); } } return $this->componentRouters[$component]; } /** * Set a router for a component * * @param string $component Component name with com_ prefix * @param object $router Component router * * @return boolean True if the router was accepted, false if not * * @since 3.3 */ public function setComponentRouter($component, $router) { $reflection = new \ReflectionClass($router); if (in_array('Joomla\\CMS\\Component\\Router\\RouterInterface', $reflection->getInterfaceNames())) { $this->componentRouters[$component] = $router; return true; } else { return false; } } } Router.php 0000604 00000040272 15245561402 0006542 0 ustar 00 <?php /** * Joomla! Content Management System * * @copyright (C) 2007 Open Source Matters, Inc. <https://www.joomla.org> * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\CMS\Router; defined('JPATH_PLATFORM') or die; use Joomla\CMS\Application\ApplicationHelper; use Joomla\CMS\Component\ComponentHelper; use Joomla\CMS\Router\Exception\RouteNotFoundException; /** * Class to create and parse routes * * @since 1.5 */ class Router { /** * Mask for the before process stage * * @var string * @since 3.4 */ const PROCESS_BEFORE = 'preprocess'; /** * Mask for the during process stage * * @var string * @since 3.4 */ const PROCESS_DURING = ''; /** * Mask for the after process stage * * @var string * @since 3.4 */ const PROCESS_AFTER = 'postprocess'; /** * The rewrite mode * * @var integer * @since 1.5 * @deprecated 4.0 */ protected $mode = null; /** * The rewrite mode * * @var integer * @since 1.5 * @deprecated 4.0 */ protected $_mode = null; /** * An array of variables * * @var array * @since 1.5 */ protected $vars = array(); /** * An array of variables * * @var array * @since 1.5 * @deprecated 4.0 Will convert to $vars */ protected $_vars = array(); /** * An array of rules * * @var array * @since 1.5 */ protected $rules = array( 'buildpreprocess' => array(), 'build' => array(), 'buildpostprocess' => array(), 'parsepreprocess' => array(), 'parse' => array(), 'parsepostprocess' => array(), ); /** * An array of rules * * @var array * @since 1.5 * @deprecated 4.0 Will convert to $rules */ protected $_rules = array( 'buildpreprocess' => array(), 'build' => array(), 'buildpostprocess' => array(), 'parsepreprocess' => array(), 'parse' => array(), 'parsepostprocess' => array(), ); /** * Caching of processed URIs * * @var array * @since 3.3 */ protected $cache = array(); /** * Router instances container. * * @var Router[] * @since 1.7 */ protected static $instances = array(); /** * Class constructor * * @param array $options Array of options * * @since 1.5 */ public function __construct($options = array()) { if (array_key_exists('mode', $options)) { $this->_mode = $options['mode']; } else { $this->_mode = JROUTER_MODE_RAW; } } /** * Returns the global Router object, only creating it if it * doesn't already exist. * * @param string $client The name of the client * @param array $options An associative array of options * * @return Router A Router object. * * @since 1.5 * @throws \RuntimeException */ public static function getInstance($client, $options = array()) { if (empty(self::$instances[$client])) { // Create a Router object $classname = 'JRouter' . ucfirst($client); if (!class_exists($classname)) { // @deprecated 4.0 Everything in this block is deprecated but the warning is only logged after the file_exists // Load the router object $info = ApplicationHelper::getClientInfo($client, true); if (is_object($info)) { $path = $info->path . '/includes/router.php'; \JLoader::register($classname, $path); if (class_exists($classname)) { \JLog::add('Non-autoloadable Router subclasses are deprecated, support will be removed in 4.0.', \JLog::WARNING, 'deprecated'); } } } if (class_exists($classname)) { self::$instances[$client] = new $classname($options); } else { throw new \RuntimeException(\JText::sprintf('JLIB_APPLICATION_ERROR_ROUTER_LOAD', $client), 500); } } return self::$instances[$client]; } /** * Function to convert a route to an internal URI * * @param \JUri &$uri The uri. * * @return array * * @since 1.5 */ public function parse(&$uri) { // Do the preprocess stage of the URL build process $vars = $this->processParseRules($uri, self::PROCESS_BEFORE); // Process the parsed variables based on custom defined rules // This is the main parse stage $vars += $this->_processParseRules($uri); // Parse RAW URL if ($this->_mode == JROUTER_MODE_RAW) { $vars += $this->_parseRawRoute($uri); } // Parse SEF URL if ($this->_mode == JROUTER_MODE_SEF) { $vars += $this->_parseSefRoute($uri); } // Do the postprocess stage of the URL build process $vars += $this->processParseRules($uri, self::PROCESS_AFTER); // Check if all parts of the URL have been parsed. // Otherwise we have an invalid URL if (strlen($uri->getPath()) > 0 && array_key_exists('option', $vars) && ComponentHelper::getParams($vars['option'])->get('sef_advanced', 0)) { throw new RouteNotFoundException(\JText::_('JERROR_PAGE_NOT_FOUND')); } return array_merge($this->getVars(), $vars); } /** * Function to convert an internal URI to a route * * @param string $url The internal URL or an associative array * * @return \JUri The absolute search engine friendly URL object * * @since 1.5 */ public function build($url) { $key = md5(serialize($url)); if (isset($this->cache[$key])) { return clone $this->cache[$key]; } // Create the URI object $uri = $this->createUri($url); // Do the preprocess stage of the URL build process $this->processBuildRules($uri, self::PROCESS_BEFORE); // Process the uri information based on custom defined rules. // This is the main build stage $this->_processBuildRules($uri); // Build RAW URL if ($this->_mode == JROUTER_MODE_RAW) { $this->_buildRawRoute($uri); } // Build SEF URL : mysite/route/index.php?var=x if ($this->_mode == JROUTER_MODE_SEF) { $this->_buildSefRoute($uri); } // Do the postprocess stage of the URL build process $this->processBuildRules($uri, self::PROCESS_AFTER); $this->cache[$key] = clone $uri; return $uri; } /** * Get the router mode * * @return integer * * @since 1.5 * @deprecated 4.0 */ public function getMode() { return $this->_mode; } /** * Set the router mode * * @param integer $mode The routing mode. * * @return void * * @since 1.5 * @deprecated 4.0 */ public function setMode($mode) { $this->_mode = $mode; } /** * Set a router variable, creating it if it doesn't exist * * @param string $key The name of the variable * @param mixed $value The value of the variable * @param boolean $create If True, the variable will be created if it doesn't exist yet * * @return void * * @since 1.5 */ public function setVar($key, $value, $create = true) { if ($create || array_key_exists($key, $this->_vars)) { $this->_vars[$key] = $value; } } /** * Set the router variable array * * @param array $vars An associative array with variables * @param boolean $merge If True, the array will be merged instead of overwritten * * @return void * * @since 1.5 */ public function setVars($vars = array(), $merge = true) { if ($merge) { $this->_vars = array_merge($this->_vars, $vars); } else { $this->_vars = $vars; } } /** * Get a router variable * * @param string $key The name of the variable * * @return mixed Value of the variable * * @since 1.5 */ public function getVar($key) { $result = null; if (isset($this->_vars[$key])) { $result = $this->_vars[$key]; } return $result; } /** * Get the router variable array * * @return array An associative array of router variables * * @since 1.5 */ public function getVars() { return $this->_vars; } /** * Attach a build rule * * @param callable $callback The function to be called * @param string $stage The stage of the build process that * this should be added to. Possible values: * 'preprocess', '' for the main build process, * 'postprocess' * * @return void * * @since 1.5 */ public function attachBuildRule($callback, $stage = self::PROCESS_DURING) { if (!array_key_exists('build' . $stage, $this->_rules)) { throw new \InvalidArgumentException(sprintf('The %s stage is not registered. (%s)', $stage, __METHOD__)); } $this->_rules['build' . $stage][] = $callback; } /** * Attach a parse rule * * @param callable $callback The function to be called. * @param string $stage The stage of the parse process that * this should be added to. Possible values: * 'preprocess', '' for the main parse process, * 'postprocess' * * @return void * * @since 1.5 */ public function attachParseRule($callback, $stage = self::PROCESS_DURING) { if (!array_key_exists('parse' . $stage, $this->_rules)) { throw new \InvalidArgumentException(sprintf('The %s stage is not registered. (%s)', $stage, __METHOD__)); } $this->_rules['parse' . $stage][] = $callback; } /** * Function to convert a raw route to an internal URI * * @param \JUri &$uri The raw route * * @return boolean * * @since 1.5 * @deprecated 4.0 Attach your logic as rule to the main parse stage */ protected function _parseRawRoute(&$uri) { return $this->parseRawRoute($uri); } /** * Function to convert a raw route to an internal URI * * @param \JUri &$uri The raw route * * @return array Array of variables * * @since 3.2 * @deprecated 4.0 Attach your logic as rule to the main parse stage */ protected function parseRawRoute(&$uri) { return array(); } /** * Function to convert a sef route to an internal URI * * @param \JUri &$uri The sef URI * * @return string Internal URI * * @since 1.5 * @deprecated 4.0 Attach your logic as rule to the main parse stage */ protected function _parseSefRoute(&$uri) { return $this->parseSefRoute($uri); } /** * Function to convert a sef route to an internal URI * * @param \JUri &$uri The sef URI * * @return array Array of variables * * @since 3.2 * @deprecated 4.0 Attach your logic as rule to the main parse stage */ protected function parseSefRoute(&$uri) { return array(); } /** * Function to build a raw route * * @param \JUri &$uri The internal URL * * @return string Raw Route * * @since 1.5 * @deprecated 4.0 Attach your logic as rule to the main build stage */ protected function _buildRawRoute(&$uri) { return $this->buildRawRoute($uri); } /** * Function to build a raw route * * @param \JUri &$uri The internal URL * * @return string Raw Route * * @since 3.2 * @deprecated 4.0 Attach your logic as rule to the main build stage */ protected function buildRawRoute(&$uri) { } /** * Function to build a sef route * * @param \JUri &$uri The uri * * @return string The SEF route * * @since 1.5 * @deprecated 4.0 Attach your logic as rule to the main build stage */ protected function _buildSefRoute(&$uri) { return $this->buildSefRoute($uri); } /** * Function to build a sef route * * @param \JUri &$uri The uri * * @return string The SEF route * * @since 3.2 * @deprecated 4.0 Attach your logic as rule to the main build stage */ protected function buildSefRoute(&$uri) { } /** * Process the parsed router variables based on custom defined rules * * @param \JUri &$uri The URI to parse * * @return array The array of processed URI variables * * @since 1.5 * @deprecated 4.0 Use processParseRules() instead */ protected function _processParseRules(&$uri) { return $this->processParseRules($uri); } /** * Process the parsed router variables based on custom defined rules * * @param \JUri &$uri The URI to parse * @param string $stage The stage that should be processed. * Possible values: 'preprocess', 'postprocess' * and '' for the main parse stage * * @return array The array of processed URI variables * * @since 3.2 */ protected function processParseRules(&$uri, $stage = self::PROCESS_DURING) { if (!array_key_exists('parse' . $stage, $this->_rules)) { throw new \InvalidArgumentException(sprintf('The %s stage is not registered. (%s)', $stage, __METHOD__)); } $vars = array(); foreach ($this->_rules['parse' . $stage] as $rule) { $vars += (array) call_user_func_array($rule, array(&$this, &$uri)); } return $vars; } /** * Process the build uri query data based on custom defined rules * * @param \JUri &$uri The URI * * @return void * * @since 1.5 * @deprecated 4.0 Use processBuildRules() instead */ protected function _processBuildRules(&$uri) { $this->processBuildRules($uri); } /** * Process the build uri query data based on custom defined rules * * @param \JUri &$uri The URI * @param string $stage The stage that should be processed. * Possible values: 'preprocess', 'postprocess' * and '' for the main build stage * * @return void * * @since 3.2 */ protected function processBuildRules(&$uri, $stage = self::PROCESS_DURING) { if (!array_key_exists('build' . $stage, $this->_rules)) { throw new \InvalidArgumentException(sprintf('The %s stage is not registered. (%s)', $stage, __METHOD__)); } foreach ($this->_rules['build' . $stage] as $rule) { call_user_func_array($rule, array(&$this, &$uri)); } } /** * Create a uri based on a full or partial URL string * * @param string $url The URI * * @return \JUri * * @since 1.5 * @deprecated 4.0 Use createUri() instead * @codeCoverageIgnore */ protected function _createUri($url) { return $this->createUri($url); } /** * Create a uri based on a full or partial URL string * * @param string $url The URI or an associative array * * @return \JUri * * @since 3.2 */ protected function createUri($url) { if (!is_array($url) && substr($url, 0, 1) !== '&') { return new \JUri($url); } $uri = new \JUri('index.php'); if (is_string($url)) { $vars = array(); if (strpos($url, '&') !== false) { $url = str_replace('&', '&', $url); } parse_str($url, $vars); } else { $vars = $url; } $vars = array_merge($this->getVars(), $vars); foreach ($vars as $key => $var) { if ($var == '') { unset($vars[$key]); } } $uri->setQuery($vars); return $uri; } /** * Encode route segments * * @param array $segments An array of route segments * * @return array Array of encoded route segments * * @since 1.5 * @deprecated 4.0 This should be performed in the component router instead * @codeCoverageIgnore */ protected function _encodeSegments($segments) { return $this->encodeSegments($segments); } /** * Encode route segments * * @param array $segments An array of route segments * * @return array Array of encoded route segments * * @since 3.2 * @deprecated 4.0 This should be performed in the component router instead */ protected function encodeSegments($segments) { $total = count($segments); for ($i = 0; $i < $total; $i++) { $segments[$i] = str_replace(':', '-', $segments[$i]); } return $segments; } /** * Decode route segments * * @param array $segments An array of route segments * * @return array Array of decoded route segments * * @since 1.5 * @deprecated 4.0 This should be performed in the component router instead * @codeCoverageIgnore */ protected function _decodeSegments($segments) { return $this->decodeSegments($segments); } /** * Decode route segments * * @param array $segments An array of route segments * * @return array Array of decoded route segments * * @since 3.2 * @deprecated 4.0 This should be performed in the component router instead */ protected function decodeSegments($segments) { $total = count($segments); for ($i = 0; $i < $total; $i++) { $segments[$i] = preg_replace('/-/', ':', $segments[$i], 1); } return $segments; } } AdministratorRouter.php 0000604 00000002061 15245561402 0011275 0 ustar 00 <?php /** * Joomla! Content Management System * * @copyright (C) 2007 Open Source Matters, Inc. <https://www.joomla.org> * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\CMS\Router; defined('JPATH_PLATFORM') or die; use Joomla\CMS\Uri\Uri; /** * Class to create and parse routes * * @since 1.5 */ class AdministratorRouter extends Router { /** * Function to convert a route to an internal URI. * * @param Uri &$uri The uri. * * @return array * * @since 1.5 */ public function parse(&$uri) { return array(); } /** * Function to convert an internal URI to a route * * @param string $url The internal URL * * @return Uri The absolute search engine friendly URL * * @since 1.5 */ public function build($url) { // Create the URI object $uri = parent::build($url); // Get the path data $route = $uri->getPath(); // Add basepath to the uri $uri->setPath(Uri::root(true) . '/' . basename(JPATH_ADMINISTRATOR) . '/' . $route); return $uri; } }
| ver. 1.4 |
Github
|
.
| PHP 8.1.34 | Генерация страницы: 0 |
proxy
|
phpinfo
|
Настройка