333 lines
8.9 KiB
PHP
333 lines
8.9 KiB
PHP
|
|
<?php
|
||
|
|
/**
|
||
|
|
* @version $Id: html.php 14401 2010-01-26 14:10:00Z louis $
|
||
|
|
* @package Joomla.Framework
|
||
|
|
* @subpackage HTML
|
||
|
|
* @copyright Copyright (C) 2005 - 2010 Open Source Matters. All rights reserved.
|
||
|
|
* @license GNU/GPL, see LICENSE.php
|
||
|
|
* Joomla! is free software. This version may have been modified pursuant
|
||
|
|
* to the GNU General Public License, and as distributed it includes or
|
||
|
|
* is derivative of works licensed under the GNU General Public License or
|
||
|
|
* other free or open source software licenses.
|
||
|
|
* See COPYRIGHT.php for copyright notices and details.
|
||
|
|
*/
|
||
|
|
defined('JPATH_BASE') or die();
|
||
|
|
/**
|
||
|
|
* Utility class for all HTML drawing classes
|
||
|
|
*
|
||
|
|
* @static
|
||
|
|
* @package Joomla.Framework
|
||
|
|
* @subpackage HTML
|
||
|
|
* @since 1.5
|
||
|
|
*/
|
||
|
|
class JHTML
|
||
|
|
{
|
||
|
|
/**
|
||
|
|
* Class loader method
|
||
|
|
*
|
||
|
|
* Additional arguments may be supplied and are passed to the sub-class.
|
||
|
|
* Additional include paths are also able to be specified for third-party use
|
||
|
|
*
|
||
|
|
* @param string The name of helper method to load, (prefix).(class).function
|
||
|
|
* prefix and class are optional and can be used to load custom
|
||
|
|
* html helpers.
|
||
|
|
*/
|
||
|
|
function _( $type )
|
||
|
|
{
|
||
|
|
//Initialise variables
|
||
|
|
$prefix = 'JHTML';
|
||
|
|
$file = '';
|
||
|
|
$func = $type;
|
||
|
|
|
||
|
|
// Check to see if we need to load a helper file
|
||
|
|
$parts = explode('.', $type);
|
||
|
|
|
||
|
|
switch(count($parts))
|
||
|
|
{
|
||
|
|
case 3 :
|
||
|
|
{
|
||
|
|
$prefix = preg_replace( '#[^A-Z0-9_]#i', '', $parts[0] );
|
||
|
|
$file = preg_replace( '#[^A-Z0-9_]#i', '', $parts[1] );
|
||
|
|
$func = preg_replace( '#[^A-Z0-9_]#i', '', $parts[2] );
|
||
|
|
} break;
|
||
|
|
|
||
|
|
case 2 :
|
||
|
|
{
|
||
|
|
$file = preg_replace( '#[^A-Z0-9_]#i', '', $parts[0] );
|
||
|
|
$func = preg_replace( '#[^A-Z0-9_]#i', '', $parts[1] );
|
||
|
|
} break;
|
||
|
|
}
|
||
|
|
|
||
|
|
$className = $prefix.ucfirst($file);
|
||
|
|
|
||
|
|
if (!class_exists( $className ))
|
||
|
|
{
|
||
|
|
jimport('joomla.filesystem.path');
|
||
|
|
if ($path = JPath::find(JHTML::addIncludePath(), strtolower($file).'.php'))
|
||
|
|
{
|
||
|
|
require_once $path;
|
||
|
|
|
||
|
|
if (!class_exists( $className ))
|
||
|
|
{
|
||
|
|
JError::raiseWarning( 0, $className.'::' .$func. ' not found in file.' );
|
||
|
|
return false;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
else
|
||
|
|
{
|
||
|
|
JError::raiseWarning( 0, $prefix.$file . ' not supported. File not found.' );
|
||
|
|
return false;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
if (is_callable( array( $className, $func ) ))
|
||
|
|
{
|
||
|
|
$temp = func_get_args();
|
||
|
|
array_shift( $temp );
|
||
|
|
$args = array();
|
||
|
|
foreach ($temp as $k => $v) {
|
||
|
|
$args[] = &$temp[$k];
|
||
|
|
}
|
||
|
|
return call_user_func_array( array( $className, $func ), $args );
|
||
|
|
}
|
||
|
|
else
|
||
|
|
{
|
||
|
|
JError::raiseWarning( 0, $className.'::'.$func.' not supported.' );
|
||
|
|
return false;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Write a <a></a> element
|
||
|
|
*
|
||
|
|
* @access public
|
||
|
|
* @param string The relative URL to use for the href attribute
|
||
|
|
* @param string The target attribute to use
|
||
|
|
* @param array An associative array of attributes to add
|
||
|
|
* @since 1.5
|
||
|
|
*/
|
||
|
|
function link($url, $text, $attribs = null)
|
||
|
|
{
|
||
|
|
if (is_array( $attribs )) {
|
||
|
|
$attribs = JArrayHelper::toString( $attribs );
|
||
|
|
}
|
||
|
|
|
||
|
|
return '<a href="'.$url.'" '.$attribs.'>'.$text.'</a>';
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Write a <img></amg> element
|
||
|
|
*
|
||
|
|
* @access public
|
||
|
|
* @param string The relative or absoluete URL to use for the src attribute
|
||
|
|
* @param string The target attribute to use
|
||
|
|
* @param array An associative array of attributes to add
|
||
|
|
* @since 1.5
|
||
|
|
*/
|
||
|
|
function image($url, $alt, $attribs = null)
|
||
|
|
{
|
||
|
|
if (is_array($attribs)) {
|
||
|
|
$attribs = JArrayHelper::toString( $attribs );
|
||
|
|
}
|
||
|
|
|
||
|
|
if(strpos($url, 'http') !== 0) {
|
||
|
|
$url = JURI::root(true).'/'.$url;
|
||
|
|
};
|
||
|
|
|
||
|
|
return '<img src="'.$url.'" alt="'.$alt.'" '.$attribs.' />';
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Write a <iframe></iframe> element
|
||
|
|
*
|
||
|
|
* @access public
|
||
|
|
* @param string The relative URL to use for the src attribute
|
||
|
|
* @param string The target attribute to use
|
||
|
|
* @param array An associative array of attributes to add
|
||
|
|
* @param string The message to display if the iframe tag is not supported
|
||
|
|
* @since 1.5
|
||
|
|
*/
|
||
|
|
function iframe( $url, $name, $attribs = null, $noFrames = '' )
|
||
|
|
{
|
||
|
|
if (is_array( $attribs )) {
|
||
|
|
$attribs = JArrayHelper::toString( $attribs );
|
||
|
|
}
|
||
|
|
|
||
|
|
return '<iframe src="'.$url.'" '.$attribs.' name="'.$name.'">'.$noFrames.'</iframe>';
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Write a <script></script> element
|
||
|
|
*
|
||
|
|
* @access public
|
||
|
|
* @param string The name of the script file
|
||
|
|
* * @param string The relative or absolute path of the script file
|
||
|
|
* @param boolean If true, the mootools library will be loaded
|
||
|
|
* @since 1.5
|
||
|
|
*/
|
||
|
|
function script($filename, $path = 'media/system/js/', $mootools = true)
|
||
|
|
{
|
||
|
|
// Include mootools framework
|
||
|
|
if($mootools) {
|
||
|
|
JHTML::_('behavior.mootools');
|
||
|
|
}
|
||
|
|
|
||
|
|
if(strpos($path, 'http') !== 0) {
|
||
|
|
$path = JURI::root(true).'/'.$path;
|
||
|
|
};
|
||
|
|
|
||
|
|
$document = &JFactory::getDocument();
|
||
|
|
$document->addScript( $path.$filename );
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Write a <link rel="stylesheet" style="text/css" /> element
|
||
|
|
*
|
||
|
|
* @access public
|
||
|
|
* @param string The relative URL to use for the href attribute
|
||
|
|
* @since 1.5
|
||
|
|
*/
|
||
|
|
function stylesheet($filename, $path = 'media/system/css/', $attribs = array())
|
||
|
|
{
|
||
|
|
if(strpos($path, 'http') !== 0) {
|
||
|
|
$path = JURI::root(true).'/'.$path;
|
||
|
|
};
|
||
|
|
|
||
|
|
$document = &JFactory::getDocument();
|
||
|
|
$document->addStylesheet( $path.$filename, 'text/css', null, $attribs );
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Returns formated date according to current local and adds time offset
|
||
|
|
*
|
||
|
|
* @access public
|
||
|
|
* @param string date in an US English date format
|
||
|
|
* @param string format optional format for strftime
|
||
|
|
* @returns string formated date
|
||
|
|
* @see strftime
|
||
|
|
* @since 1.5
|
||
|
|
*/
|
||
|
|
function date($date, $format = null, $offset = NULL)
|
||
|
|
{
|
||
|
|
if ( ! $format ) {
|
||
|
|
$format = JText::_('DATE_FORMAT_LC1');
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
if(is_null($offset))
|
||
|
|
{
|
||
|
|
$config =& JFactory::getConfig();
|
||
|
|
$offset = $config->getValue('config.offset');
|
||
|
|
}
|
||
|
|
$instance =& JFactory::getDate($date);
|
||
|
|
$instance->setOffset($offset);
|
||
|
|
|
||
|
|
return $instance->toFormat($format);
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Creates a tooltip with an image as button
|
||
|
|
*
|
||
|
|
* @access public
|
||
|
|
* @param string $tooltip The tip string
|
||
|
|
* @param string $title The title of the tooltip
|
||
|
|
* @param string $image The image for the tip, if no text is provided
|
||
|
|
* @param string $text The text for the tip
|
||
|
|
* @param string $href An URL that will be used to create the link
|
||
|
|
* @param boolean depreciated
|
||
|
|
* @return string
|
||
|
|
* @since 1.5
|
||
|
|
*/
|
||
|
|
function tooltip($tooltip, $title='', $image='tooltip.png', $text='', $href='', $link=1)
|
||
|
|
{
|
||
|
|
$tooltip = addslashes(htmlspecialchars($tooltip, ENT_QUOTES, 'UTF-8'));
|
||
|
|
$title = addslashes(htmlspecialchars($title, ENT_QUOTES, 'UTF-8'));
|
||
|
|
|
||
|
|
if ( !$text ) {
|
||
|
|
$image = JURI::root(true).'/includes/js/ThemeOffice/'. $image;
|
||
|
|
$text = '<img src="'. $image .'" border="0" alt="'. JText::_( 'Tooltip' ) .'"/>';
|
||
|
|
} else {
|
||
|
|
$text = JText::_( $text, true );
|
||
|
|
}
|
||
|
|
|
||
|
|
if($title) {
|
||
|
|
$title = $title.'::';
|
||
|
|
}
|
||
|
|
|
||
|
|
$style = 'style="text-decoration: none; color: #333;"';
|
||
|
|
|
||
|
|
if ( $href ) {
|
||
|
|
$href = JRoute::_( $href );
|
||
|
|
$style = '';
|
||
|
|
$tip = '<span class="editlinktip hasTip" title="'.$title.$tooltip.'" '. $style .'><a href="'. $href .'">'. $text .'</a></span>';
|
||
|
|
} else {
|
||
|
|
$tip = '<span class="editlinktip hasTip" title="'.$title.$tooltip.'" '. $style .'>'. $text .'</span>';
|
||
|
|
}
|
||
|
|
|
||
|
|
return $tip;
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Displays a calendar control field
|
||
|
|
*
|
||
|
|
* @param string The date value
|
||
|
|
* @param string The name of the text field
|
||
|
|
* @param string The id of the text field
|
||
|
|
* @param string The date format
|
||
|
|
* @param array Additional html attributes
|
||
|
|
*/
|
||
|
|
function calendar($value, $name, $id, $format = '%Y-%m-%d', $attribs = null)
|
||
|
|
{
|
||
|
|
JHTML::_('behavior.calendar'); //load the calendar behavior
|
||
|
|
|
||
|
|
if (is_array($attribs)) {
|
||
|
|
$attribs = JArrayHelper::toString( $attribs );
|
||
|
|
}
|
||
|
|
$document =& JFactory::getDocument();
|
||
|
|
$document->addScriptDeclaration('window.addEvent(\'domready\', function() {Calendar.setup({
|
||
|
|
inputField : "'.$id.'", // id of the input field
|
||
|
|
ifFormat : "'.$format.'", // format of the input field
|
||
|
|
button : "'.$id.'_img", // trigger for the calendar (button ID)
|
||
|
|
align : "Tl", // alignment (defaults to "Bl")
|
||
|
|
singleClick : true
|
||
|
|
});});');
|
||
|
|
|
||
|
|
return '<input type="text" name="'.$name.'" id="'.$id.'" value="'.htmlspecialchars($value, ENT_COMPAT, 'UTF-8').'" '.$attribs.' />'.
|
||
|
|
'<img class="calendar" src="'.JURI::root(true).'/templates/system/images/calendar.png" alt="calendar" id="'.$id.'_img" />';
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Add a directory where JHTML should search for helpers. You may
|
||
|
|
* either pass a string or an array of directories.
|
||
|
|
*
|
||
|
|
* @access public
|
||
|
|
* @param string A path to search.
|
||
|
|
* @return array An array with directory elements
|
||
|
|
* @since 1.5
|
||
|
|
*/
|
||
|
|
function addIncludePath( $path='' )
|
||
|
|
{
|
||
|
|
static $paths;
|
||
|
|
|
||
|
|
if (!isset($paths)) {
|
||
|
|
$paths = array( JPATH_LIBRARIES.DS.'joomla'.DS.'html'.DS.'html' );
|
||
|
|
}
|
||
|
|
|
||
|
|
// force path to array
|
||
|
|
settype($path, 'array');
|
||
|
|
|
||
|
|
// loop through the path directories
|
||
|
|
foreach ($path as $dir)
|
||
|
|
{
|
||
|
|
if (!empty($dir) && !in_array($dir, $paths)) {
|
||
|
|
array_unshift($paths, JPath::clean( $dir ));
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
return $paths;
|
||
|
|
}
|
||
|
|
}
|