joomla-platform / libraries / joomla / language / help.php

<?php
/**
 * @package     Joomla.Platform
 * @subpackage  Language
 *
 * @copyright   Copyright (C) 2005 - 2011 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.Platform
 * @subpackage  Language
 * @since       11.1
 */
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
     * @sicne   1.5
     */
    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(
            '{app}',            // Application name (eg. 'Administrator')
            '{component}',      // Component name (eg. 'com_content')
            '{keyref}',         // Help screen key reference
            '{language}',       // Full language code (eg. 'en-GB')
            '{langcode}',       // Short language code (eg. 'en')
            '{langregion}',     // Region code (eg. 'GB')
            '{major}',          // Joomla major version number
            '{minor}',          // Joomla minor version number
            '{maintenance}'     // Joomla maintenance version number
        );

        $replace = array(
            $app->getName(),    // {app}
            $component,         // {component}
            $keyref,            // {keyref}
            $lang->getTag(),    // {language}
            $jlang[0],          // {langcode}
            $jlang[1],          // {langregion}
            $jver[0],           // {major}
            $jver[1],           // {minor}
            $jver[2]            // {maintenance}
        );

        // 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);
            jimport('joomla.filesystem.file');

            if (!JFile::exists(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.
     * @param   string  $selected   Language tag to select (if exists).
     *
     * @return  array   An array of arrays (text, value, selected).
     * @since   11.1
     */
    static function createSiteList($pathToXml, $selected = null)
    {
        $list   = array ();
        $data   = null;
        $xml = false;

        if (!empty($pathToXml)) {
            $xml = JFactory::getXML($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;
    }
}
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.