joomla_test/libraries/cms/help/help.php
2020-01-02 22:20:31 +07:00

208 lines
4.3 KiB
PHP

<?php
/**
* @package Joomla.Libraries
* @subpackage Help
*
* @copyright Copyright (C) 2005 - 2013 Open Source Matters, Inc. All rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE
*/
defined('JPATH_PLATFORM') or die;
/**
* Help system class
*
* @package Joomla.Libraries
* @subpackage Help
* @since 1.5
*/
class JHelp
{
/**
* Create a URL for a given help key reference
*
* @param string $ref The name of the help screen (its key reference)
* @param boolean $useComponent Use the help file in the component directory
* @param string $override Use this URL instead of any other
* @param string $component Name of component (or null for current component)
*
* @return string
*
* @since 1.5
*/
public static function createURL($ref, $useComponent = false, $override = null, $component = null)
{
$local = false;
$app = JFactory::getApplication();
if (is_null($component))
{
$component = JApplicationHelper::getComponentName();
}
// Determine the location of the help file. At this stage the URL
// can contain substitution codes that will be replaced later.
if ($override)
{
$url = $override;
}
else
{
// Get the user help URL.
$user = JFactory::getUser();
$url = $user->getParam('helpsite');
// If user hasn't specified a help URL, then get the global one.
if ($url == '')
{
$url = $app->getCfg('helpurl');
}
// Component help URL overrides user and global.
if ($useComponent)
{
// Look for help URL in component parameters.
$params = JComponentHelper::getParams($component);
$url = $params->get('helpURL');
if ($url == '')
{
$local = true;
$url = 'components/{component}/help/{language}/{keyref}';
}
}
// Set up a local help URL.
if (!$url)
{
$local = true;
$url = 'help/{language}/{keyref}';
}
}
// If the URL is local then make sure we have a valid file extension on the URL.
if ($local)
{
if (!preg_match('#\.html$|\.xml$#i', $ref))
{
$url .= '.html';
}
}
/*
* Replace substitution codes in the URL.
*/
$lang = JFactory::getLanguage();
$version = new JVersion;
$jver = explode('.', $version->getShortVersion());
$jlang = explode('-', $lang->getTag());
$debug = $lang->setDebug(false);
$keyref = JText::_($ref);
$lang->setDebug($debug);
// Replace substitution codes in help URL.
$search = array(
// Application name (eg. 'Administrator')
'{app}',
// Component name (eg. 'com_content')
'{component}',
// Help screen key reference
'{keyref}',
// Full language code (eg. 'en-GB')
'{language}',
// Short language code (eg. 'en')
'{langcode}',
// Region code (eg. 'GB')
'{langregion}',
// Joomla major version number
'{major}',
// Joomla minor version number
'{minor}',
// Joomla maintenance version number
'{maintenance}'
);
$replace = array(
// {app}
$app->getName(),
// {component}
$component,
// {keyref}
$keyref,
// {language}
$lang->getTag(),
// {langcode}
$jlang[0],
// {langregion}
$jlang[1],
// {major}
$jver[0],
// {minor}
$jver[1],
// {maintenance}
$jver[2]
);
// If the help file is local then check it exists.
// If it doesn't then fallback to English.
if ($local)
{
$try = str_replace($search, $replace, $url);
if (!is_file(JPATH_BASE . '/' . $try))
{
$replace[3] = 'en-GB';
$replace[4] = 'en';
$replace[5] = 'GB';
}
}
$url = str_replace($search, $replace, $url);
return $url;
}
/**
* Builds a list of the help sites which can be used in a select option.
*
* @param string $pathToXml Path to an XML file.
*
* @return array An array of arrays (text, value, selected).
*
* @since 1.5
*/
public static function createSiteList($pathToXml)
{
$list = array();
$xml = false;
if (!empty($pathToXml))
{
$xml = simplexml_load_file($pathToXml);
}
if (!$xml)
{
$option['text'] = 'English (GB) help.joomla.org';
$option['value'] = 'http://help.joomla.org';
$list[] = $option;
}
else
{
$option = array();
foreach ($xml->sites->site as $site)
{
$option['text'] = (string) $site;
$option['value'] = (string) $site->attributes()->url;
$list[] = $option;
}
}
return $list;
}
}