2005-06-21 23:44:49 +00:00
< ? php
2005-08-21 06:49:02 +00:00
/* SVN FILE: $Id$ */
2005-06-21 23:44:49 +00:00
/**
2005-08-21 06:49:02 +00:00
* Html Helper class file .
2005-06-22 01:20:19 +00:00
*
2006-02-07 02:19:53 +00:00
* Simplifies the construction of HTML elements .
2005-06-22 01:20:19 +00:00
*
2007-02-02 10:39:45 +00:00
* CakePHP ( tm ) : Rapid Development Framework < http :// www . cakephp . org />
2008-01-01 22:18:17 +00:00
* Copyright 2005 - 2008 , Cake Software Foundation , Inc .
2006-05-26 05:29:17 +00:00
* 1785 E . Sahara Avenue , Suite 490 - 204
* Las Vegas , Nevada 89104
2005-12-27 03:33:44 +00:00
*
2005-12-23 21:57:26 +00:00
* Licensed under The MIT License
* Redistributions of files must retain the above copyright notice .
2005-07-10 05:08:19 +00:00
*
2005-08-22 04:15:57 +00:00
* @ filesource
2008-01-01 22:18:17 +00:00
* @ copyright Copyright 2005 - 2008 , Cake Software Foundation , Inc .
2007-02-02 10:39:45 +00:00
* @ link http :// www . cakefoundation . org / projects / info / cakephp CakePHP ( tm ) Project
2006-05-26 05:29:17 +00:00
* @ package cake
* @ subpackage cake . cake . libs . view . helpers
2007-02-02 10:39:45 +00:00
* @ since CakePHP ( tm ) v 0.9 . 1
2006-05-26 05:29:17 +00:00
* @ version $Revision $
* @ modifiedby $LastChangedBy $
* @ lastmodified $Date $
* @ license http :// www . opensource . org / licenses / mit - license . php The MIT License
2005-07-10 05:08:19 +00:00
*/
/**
2005-09-07 01:52:45 +00:00
* Html Helper class for easy use of HTML widgets .
2005-07-10 05:08:19 +00:00
*
2005-09-07 01:52:45 +00:00
* HtmlHelper encloses all methods needed while working with HTML pages .
2005-07-10 05:08:19 +00:00
*
2006-05-26 05:29:17 +00:00
* @ package cake
* @ subpackage cake . cake . libs . view . helpers
2005-07-10 05:08:19 +00:00
*/
2006-10-27 21:40:34 +00:00
class HtmlHelper extends AppHelper {
2006-02-18 23:42:21 +00:00
/*************************************************************************
* Public variables
*************************************************************************/
/** #@+
* @ access public
*/
2006-11-22 03:51:21 +00:00
/**
* html tags used by this helper .
*
* @ var array
*/
2006-11-25 08:55:16 +00:00
var $tags = array (
2007-12-22 23:36:24 +00:00
'meta' => '<meta%s/>' ,
'metalink' => '<link href="%s"%s/>' ,
2007-12-14 15:07:25 +00:00
'link' => '<a href="%s"%s>%s</a>' ,
2006-11-25 08:55:16 +00:00
'mailto' => '<a href="mailto:%s" %s>%s</a>' ,
'form' => '<form %s>' ,
'formend' => '</form>' ,
2007-10-09 20:44:28 +00:00
'input' => '<input name="%s" %s/>' ,
'textarea' => '<textarea name="%s" %s>%s</textarea>' ,
'hidden' => '<input type="hidden" name="%s" %s/>' ,
'textarea' => '<textarea name="%s" %s>%s</textarea>' ,
'checkbox' => '<input type="checkbox" name="%s" %s/>' ,
2007-11-14 05:51:49 +00:00
'checkboxmultiple' => '<input type="checkbox" name="%s[]"%s />' ,
2007-10-09 20:44:28 +00:00
'radio' => '<input type="radio" name="%s" id="%s" %s />%s' ,
'selectstart' => '<select name="%s"%s>' ,
'selectmultiplestart' => '<select name="%s[]"%s>' ,
2007-05-25 03:16:47 +00:00
'selectempty' => '<option value=""%s> </option>' ,
'selectoption' => '<option value="%s"%s>%s</option>' ,
2006-11-25 08:55:16 +00:00
'selectend' => '</select>' ,
'optiongroup' => '<optgroup label="%s"%s>' ,
'optiongroupend' => '</optgroup>' ,
2007-12-22 04:20:35 +00:00
'checkboxmultiplestart' => '' ,
'checkboxmultipleend' => '' ,
2007-10-09 20:44:28 +00:00
'password' => '<input type="password" name="%s" %s/>' ,
'file' => '<input type="file" name="%s" %s/>' ,
2006-11-25 08:55:16 +00:00
'file_no_model' => '<input type="file" name="%s" %s/>' ,
'submit' => '<input type="submit" %s/>' ,
'submitimage' => '<input type="image" src="%s" %s/>' ,
2007-12-22 01:27:50 +00:00
'button' => '<input type="%s" %s/>' ,
2006-11-25 08:55:16 +00:00
'image' => '<img src="%s" %s/>' ,
'tableheader' => '<th%s>%s</th>' ,
'tableheaderrow' => '<tr%s>%s</tr>' ,
'tablecell' => '<td%s>%s</td>' ,
'tablerow' => '<tr%s>%s</tr>' ,
'block' => '<div%s>%s</div>' ,
'blockstart' => '<div%s>' ,
'blockend' => '</div>' ,
'para' => '<p%s>%s</p>' ,
'parastart' => '<p%s>' ,
'label' => '<label for="%s"%s>%s</label>' ,
'fieldset' => '<fieldset><legend>%s</legend>%s</fieldset>' ,
'fieldsetstart' => '<fieldset><legend>%s</legend>' ,
'fieldsetend' => '</fieldset>' ,
'legend' => '<legend>%s</legend>' ,
'css' => '<link rel="%s" type="text/css" href="%s" %s/>' ,
'style' => '<style type="text/css"%s>%s</style>' ,
2007-09-16 01:42:33 +00:00
'charset' => '<meta http-equiv="Content-Type" content="text/html; charset=%s" />' ,
'ul' => '<ul%s>%s</ul>' ,
'ol' => '<ol%s>%s</ol>' ,
2007-12-22 06:37:30 +00:00
'li' => '<li%s>%s</li>' ,
'error' => '<div%s>%s</div>'
2006-11-25 08:55:16 +00:00
);
2006-02-18 23:42:21 +00:00
/**
2005-12-27 03:33:44 +00:00
* Base URL
*
* @ var string
*/
2006-05-26 05:29:17 +00:00
var $base = null ;
2006-02-18 23:42:21 +00:00
/**
2005-12-27 03:33:44 +00:00
* URL to current action .
*
* @ var string
*/
2006-05-26 05:29:17 +00:00
var $here = null ;
2006-02-18 23:42:21 +00:00
/**
2005-12-27 03:33:44 +00:00
* Parameter array .
*
* @ var array
*/
2006-05-26 05:29:17 +00:00
var $params = array ();
2006-02-18 23:42:21 +00:00
/**
2006-02-07 02:19:53 +00:00
* Current action .
2005-12-27 03:33:44 +00:00
*
* @ var string
*/
2006-05-26 05:29:17 +00:00
var $action = null ;
2006-02-18 23:42:21 +00:00
/**
2005-12-27 03:33:44 +00:00
* Enter description here ...
*
2006-02-07 02:19:53 +00:00
* @ var array
2005-12-27 03:33:44 +00:00
*/
2006-05-26 05:29:17 +00:00
var $data = null ;
2006-02-18 23:42:21 +00:00
/**#@-*/
/*************************************************************************
* Private variables
*************************************************************************/
/** #@+
* @ access private
*/
/**
2005-12-27 03:33:44 +00:00
* Breadcrumbs .
*
2006-05-26 05:29:17 +00:00
* @ var array
2005-12-27 03:33:44 +00:00
* @ access private
*/
2006-05-26 05:29:17 +00:00
var $_crumbs = array ();
2006-06-17 02:33:12 +00:00
/**
* Document type definitions
*
* @ var array
* @ access private
*/
var $__docTypes = array (
'html4-strict' => '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">' ,
'html4-trans' => '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">' ,
'html4-frame' => '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">' ,
'xhtml-strict' => '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">' ,
'xhtml-trans' => '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">' ,
'xhtml-frame' => '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">' ,
'xhtml11' => '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">'
);
2006-02-18 23:42:21 +00:00
/**
2005-12-27 03:33:44 +00:00
* Adds a link to the breadcrumbs array .
*
* @ param string $name Text for link
2007-09-16 01:42:33 +00:00
* @ param string $link URL for link ( if empty it won ' t be a link )
2007-12-25 10:07:27 +00:00
* @ param mixed $options Link attributes e . g . array ( 'id' => 'selected' )
2005-12-27 03:33:44 +00:00
*/
2007-12-25 10:07:27 +00:00
function addCrumb ( $name , $link = null , $options = null ) {
$this -> _crumbs [] = array ( $name , $link , $options );
2006-05-26 05:29:17 +00:00
}
2006-06-17 02:33:12 +00:00
/**
* Returns a doctype string .
*
* Possible doctypes :
* + html4 - strict : HTML4 Strict .
* + html4 - trans : HTML4 Transitional .
* + html4 - frame : HTML4 Frameset .
* + xhtml - strict : XHTML1 Strict .
* + xhtml - trans : XHTML1 Transitional .
* + xhtml - frame : XHTML1 Frameset .
* + xhtml11 : XHTML1 . 1.
*
* @ param string $type Doctype to use .
* @ return string Doctype .
*/
2006-08-20 21:54:50 +00:00
function docType ( $type = 'xhtml-strict' ) {
2006-06-17 02:33:12 +00:00
if ( isset ( $this -> __docTypes [ $type ])) {
2006-08-20 21:54:50 +00:00
return $this -> output ( $this -> __docTypes [ $type ]);
2006-06-17 02:33:12 +00:00
}
}
2006-08-20 21:54:50 +00:00
/**
2007-12-22 23:36:24 +00:00
* Creates a link to an external resource and handles basic meta tags
2006-08-20 21:54:50 +00:00
*
* @ param string $title The title of the external resource
2007-12-22 23:36:24 +00:00
* @ param mixed $url The address of the external resource or string for content attribute
2007-06-08 04:29:16 +00:00
* @ param array $attributes Other attributes for the generated tag . If the type attribute is html , rss , atom , or icon , the mime - type is returned .
* @ param boolean $inline If set to false , the generated tag appears in the head tag of the layout .
2006-08-20 21:54:50 +00:00
* @ return string
*/
2007-12-22 23:36:24 +00:00
function meta ( $type = null , $url = null , $attributes = array (), $inline = true ) {
if ( ! is_array ( $type )) {
$types = array (
'rss' => array ( 'type' => 'application/rss+xml' , 'rel' => 'alternate' , 'title' => $type , 'link' => $url ),
'atom' => array ( 'type' => 'application/atom+xml' , 'title' => $type , 'link' => $url ),
'icon' => array ( 'type' => 'image/x-icon' , 'rel' => 'icon' , 'link' => $url ),
'keywords' => array ( 'name' => 'keywords' , 'content' => $url ),
'description' => array ( 'name' => 'description' , 'content' => $url ),
);
2006-08-20 21:54:50 +00:00
2007-12-22 23:36:24 +00:00
if ( $type === 'icon' && $url === null ) {
$types [ 'icon' ][ 'link' ] = $this -> webroot ( 'favicon.ico' );
2006-08-20 21:54:50 +00:00
}
2007-12-22 23:36:24 +00:00
if ( isset ( $types [ $type ])) {
$type = $types [ $type ];
} elseif ( ! isset ( $types [ 'type' ]) && ! isset ( $attributes [ 'type' ]) && $url !== null ) {
if ( is_array ( $url ) && isset ( $url [ 'ext' ])) {
$type = $types [ $url [ 'ext' ]];
} else {
$type = $types [ 'rss' ];
}
} elseif ( isset ( $attributes [ 'type' ]) && isset ( $types [ $attributes [ 'type' ]])) {
$type = $types [ $attributes [ 'type' ]];
}
} else {
if ( $url !== null ) {
$inline = $url ;
}
2006-08-20 21:54:50 +00:00
}
2007-12-22 23:36:24 +00:00
$attributes = array_merge ( $type , $attributes );
2007-12-23 01:07:10 +00:00
$out = null ;
if ( isset ( $attributes [ 'link' ])) {
2007-12-22 23:36:24 +00:00
if ( isset ( $attributes [ 'rel' ]) && $attributes [ 'rel' ] === 'icon' ) {
2007-12-23 01:07:10 +00:00
$out = sprintf ( $this -> tags [ 'metalink' ], $attributes [ 'link' ], $this -> _parseAttributes ( $attributes , array ( 'link' )));
2007-12-22 23:36:24 +00:00
$attributes [ 'rel' ] = 'shortcut icon' ;
} else {
$attributes [ 'link' ] = $this -> url ( $attributes [ 'link' ], true );
}
2007-12-23 01:07:10 +00:00
$out .= sprintf ( $this -> tags [ 'metalink' ], $attributes [ 'link' ], $this -> _parseAttributes ( $attributes , array ( 'link' )));
2007-12-22 23:36:24 +00:00
} else {
$out = sprintf ( $this -> tags [ 'meta' ], $this -> _parseAttributes ( $attributes , array ( 'type' )));
2006-08-20 21:54:50 +00:00
}
2006-08-28 20:41:08 +00:00
if ( $inline ) {
2007-12-22 23:36:24 +00:00
return $this -> output ( $out );
2006-08-28 20:41:08 +00:00
} else {
2006-11-27 04:45:03 +00:00
$view =& ClassRegistry :: getObject ( 'view' );
2006-11-25 08:55:16 +00:00
$view -> addScript ( $out );
2006-08-28 20:41:08 +00:00
}
2006-08-20 21:54:50 +00:00
}
2006-02-18 23:42:21 +00:00
/**
2005-12-27 03:33:44 +00:00
* Returns a charset META - tag .
*
2007-06-08 04:29:16 +00:00
* @ param string $charset The character set to be used in the meta tag . Example : " utf-8 " .
* @ return string A meta tag containing the specified character set .
2005-12-27 03:33:44 +00:00
*/
2006-12-22 21:33:23 +00:00
function charset ( $charset = null ) {
2007-06-20 07:51:52 +00:00
if ( is_null ( $charset )) {
2006-12-22 21:33:23 +00:00
$charset = Configure :: read ( 'charset' );
2007-06-20 07:51:52 +00:00
if ( is_null ( $charset )) {
2006-12-22 21:33:23 +00:00
$charset = 'utf-8' ;
}
}
2006-08-20 21:54:50 +00:00
return $this -> output ( sprintf ( $this -> tags [ 'charset' ], $charset ));
2006-05-26 05:29:17 +00:00
}
2006-02-18 23:42:21 +00:00
/**
2005-12-27 03:33:44 +00:00
* Creates an HTML link .
*
* If $url starts with " http:// " this is treated as an external link . Else ,
* it is treated as a path to controller / action and parsed with the
* HtmlHelper :: url () method .
*
* If the $url is empty , $title is used instead .
*
2007-06-08 04:29:16 +00:00
* @ param string $title The content to be wrapped by < a > tags .
2006-08-10 04:15:19 +00:00
* @ param mixed $url Cake - relative URL or array of URL parameters , or external URL ( starts with http :// )
* @ param array $htmlAttributes Array of HTML attributes .
2007-06-08 04:29:16 +00:00
* @ param string $confirmMessage JavaScript confirmation message .
* @ param boolean $escapeTitle Whether or not $title should be HTML escaped .
2006-08-01 04:07:04 +00:00
* @ return string An < a /> element .
2006-05-26 05:29:17 +00:00
*/
2006-10-18 18:07:55 +00:00
function link ( $title , $url = null , $htmlAttributes = array (), $confirmMessage = false , $escapeTitle = true ) {
2007-06-20 06:15:35 +00:00
if ( $url !== null ) {
2006-12-29 04:16:53 +00:00
$url = $this -> url ( $url );
} else {
$url = $this -> url ( $title );
$title = $url ;
$escapeTitle = false ;
}
2007-01-05 21:48:40 +00:00
2007-06-20 06:15:35 +00:00
if ( isset ( $htmlAttributes [ 'escape' ])) {
2007-01-05 21:48:40 +00:00
$escapeTitle = $htmlAttributes [ 'escape' ];
unset ( $htmlAttributes [ 'escape' ]);
}
2007-06-20 06:15:35 +00:00
if ( $escapeTitle === true ) {
2006-05-26 05:29:17 +00:00
$title = htmlspecialchars ( $title , ENT_QUOTES );
2007-06-20 06:15:35 +00:00
} elseif ( is_string ( $escapeTitle )) {
2007-04-29 10:25:58 +00:00
$title = htmlentities ( $title , ENT_QUOTES , $escapeTitle );
2006-05-26 05:29:17 +00:00
}
2007-06-20 06:15:35 +00:00
if ( ! empty ( $htmlAttributes [ 'confirm' ])) {
2007-01-05 21:48:40 +00:00
$confirmMessage = $htmlAttributes [ 'confirm' ];
unset ( $htmlAttributes [ 'confirm' ]);
}
2006-05-26 05:29:17 +00:00
if ( $confirmMessage ) {
$confirmMessage = str_replace ( " ' " , " \ ' " , $confirmMessage );
2007-04-07 06:44:18 +00:00
$confirmMessage = str_replace ( '"' , '\"' , $confirmMessage );
2006-08-01 04:07:04 +00:00
$htmlAttributes [ 'onclick' ] = " return confirm(' { $confirmMessage } '); " ;
2007-01-14 15:19:42 +00:00
} elseif ( isset ( $htmlAttributes [ 'default' ])) {
if ( $htmlAttributes [ 'default' ] == false ) {
if ( isset ( $htmlAttributes [ 'onclick' ])) {
2007-10-19 07:41:42 +00:00
$htmlAttributes [ 'onclick' ] .= ' event.returnValue = false; return false;' ;
2007-01-14 15:19:42 +00:00
} else {
2007-10-19 07:41:42 +00:00
$htmlAttributes [ 'onclick' ] = 'event.returnValue = false; return false;' ;
2007-01-14 15:19:42 +00:00
}
unset ( $htmlAttributes [ 'default' ]);
}
2006-05-26 05:29:17 +00:00
}
2007-01-05 21:48:40 +00:00
return $this -> output ( sprintf ( $this -> tags [ 'link' ], $url , $this -> _parseAttributes ( $htmlAttributes ), $title ));
2006-05-26 05:29:17 +00:00
}
2006-08-01 04:07:04 +00:00
/**
* Creates a link element for CSS stylesheets .
*
2007-06-08 04:29:16 +00:00
* @ param mixed $path The name of a CSS style sheet in / app / webroot / css , or an array containing names of CSS stylesheets in that directory .
2006-08-01 04:07:04 +00:00
* @ param string $rel Rel attribute . Defaults to " stylesheet " .
* @ param array $htmlAttributes Array of HTML attributes .
2007-10-22 16:54:36 +00:00
* @ param boolean $inline If set to false , the generated tag appears in the head tag of the layout .
2006-08-01 04:07:04 +00:00
* @ return string CSS < link /> or < style /> tag , depending on the type of link .
*/
2006-09-10 17:30:29 +00:00
function css ( $path , $rel = null , $htmlAttributes = array (), $inline = true ) {
2007-01-27 18:17:23 +00:00
if ( is_array ( $path )) {
$out = '' ;
foreach ( $path as $i ) {
$out .= " \n \t " . $this -> css ( $i , $rel , $htmlAttributes , $inline );
}
if ( $inline ) {
return $out . " \n " ;
}
return ;
}
2007-11-25 20:17:25 +00:00
2007-12-30 21:14:15 +00:00
if ( strpos ( $path , '://' ) !== false ) {
$url = $path ;
} else {
if ( $path { 0 } !== '/' ) {
$path = CSS_URL . $path ;
}
2007-12-31 04:24:14 +00:00
if ( strpos ( $path , '?' ) === false ) {
if ( strpos ( $path , '.css' ) === false ) {
$path .= '.css' ;
}
if ( Configure :: read ( 'Asset.timestamp' ) == true && Configure :: read () > 0 ) {
$path .= '?' . @ filemtime ( WWW_ROOT . str_replace ( '/' , DS , $path ));
}
}
2007-12-31 05:19:00 +00:00
if ( Configure :: read ( 'Asset.filter.css' )) {
$path = str_replace ( CSS_URL , 'ccss/' , $path );
2007-12-30 21:14:15 +00:00
}
$url = $this -> webroot ( $path );
2007-12-29 19:05:22 +00:00
}
2006-08-01 04:07:04 +00:00
if ( $rel == 'import' ) {
2007-03-25 02:03:34 +00:00
$out = sprintf ( $this -> tags [ 'style' ], $this -> _parseAttributes ( $htmlAttributes , null , '' , ' ' ), '@import url(' . $url . ');' );
2006-08-01 04:07:04 +00:00
} else {
2006-09-10 17:30:29 +00:00
if ( $rel == null ) {
$rel = 'stylesheet' ;
}
2007-03-25 02:03:34 +00:00
$out = sprintf ( $this -> tags [ 'css' ], $rel , $url , $this -> _parseAttributes ( $htmlAttributes , null , '' , ' ' ));
2006-08-01 04:07:04 +00:00
}
2006-08-28 20:41:08 +00:00
$out = $this -> output ( $out );
if ( $inline ) {
return $out ;
} else {
2006-11-27 04:45:03 +00:00
$view =& ClassRegistry :: getObject ( 'view' );
2006-11-25 08:55:16 +00:00
$view -> addScript ( $out );
2006-08-28 20:41:08 +00:00
}
2006-08-01 04:07:04 +00:00
}
2006-12-22 05:23:07 +00:00
/**
* Builds CSS style data from an array of CSS properties
*
* @ param array $data
* @ return string CSS styling data
*/
2007-05-24 22:50:20 +00:00
function style ( $data , $inline = true ) {
2006-12-22 05:23:07 +00:00
if ( ! is_array ( $data )) {
return $data ;
}
2007-05-24 22:50:20 +00:00
$out = array ();
2007-06-20 06:15:35 +00:00
foreach ( $data as $key => $value ) {
2007-05-24 22:50:20 +00:00
$out [] = $key . ':' . $value . ';' ;
2006-05-26 05:29:17 +00:00
}
2007-06-20 06:15:35 +00:00
if ( $inline ) {
2007-07-09 17:33:03 +00:00
return join ( ' ' , $out );
2006-05-26 05:29:17 +00:00
}
2007-05-24 22:50:20 +00:00
return join ( " \n " , $out );
2006-05-26 05:29:17 +00:00
}
2006-02-18 23:42:21 +00:00
/**
2005-12-27 03:33:44 +00:00
* Returns the breadcrumb trail as a sequence of & raquo ; - separated links .
*
* @ param string $separator Text to separate crumbs .
2006-03-19 03:26:43 +00:00
* @ param string $startText This will be the first crumb , if false it defaults to first crumb in array
2006-08-20 21:54:50 +00:00
* @ return string
2006-05-26 05:29:17 +00:00
*/
2006-08-20 21:54:50 +00:00
function getCrumbs ( $separator = '»' , $startText = false ) {
2006-05-26 05:29:17 +00:00
if ( count ( $this -> _crumbs )) {
$out = array ();
if ( $startText ) {
$out [] = $this -> link ( $startText , '/' );
}
2007-06-20 06:15:35 +00:00
foreach ( $this -> _crumbs as $crumb ) {
2007-06-20 07:51:52 +00:00
if ( ! empty ( $crumb [ 1 ])) {
2007-12-25 10:07:27 +00:00
$out [] = $this -> link ( $crumb [ 0 ], $crumb [ 1 ], $crumb [ 2 ]);
2007-05-24 22:50:20 +00:00
} else {
$out [] = $crumb [ 0 ];
}
2006-05-26 05:29:17 +00:00
}
2006-08-20 21:54:50 +00:00
return $this -> output ( join ( $separator , $out ));
2006-05-26 05:29:17 +00:00
} else {
return null ;
}
}
2006-02-18 23:42:21 +00:00
/**
2005-12-27 03:33:44 +00:00
* Creates a formatted IMG element .
*
2007-06-08 04:29:16 +00:00
* @ param string $path Path to the image file , relative to the app / webroot / img / directory .
2006-05-26 05:29:17 +00:00
* @ param array $htmlAttributes Array of HTML attributes .
2006-08-20 21:54:50 +00:00
* @ return string
2006-05-26 05:29:17 +00:00
*/
2007-12-30 21:14:15 +00:00
function image ( $path , $options = array ()) {
2007-12-29 19:05:22 +00:00
if ( is_array ( $path )) {
2007-12-30 21:14:15 +00:00
$path = Router :: url ( $path );
2007-12-29 19:05:22 +00:00
} elseif ( $path { 0 } === '/' ) {
2007-12-30 21:14:15 +00:00
$path = $this -> webroot ( $path );
2007-12-29 19:05:22 +00:00
} elseif ( strpos ( $path , '://' ) !== false ) {
2007-12-30 21:14:15 +00:00
$path = $path ;
2006-05-26 05:29:17 +00:00
} else {
2007-12-31 04:24:14 +00:00
if ( Configure :: read ( 'Asset.timestamp' ) == true && Configure :: read () > 0 ) {
$path .= '?' . @ filemtime ( str_replace ( '/' , DS , WWW_ROOT . IMAGES_URL . $path ));
}
2007-12-30 21:14:15 +00:00
$path = $this -> webroot ( IMAGES_URL . $path );
}
if ( ! isset ( $options [ 'alt' ])) {
$options [ 'alt' ] = '' ;
}
$url = false ;
if ( ! empty ( $options [ 'url' ])) {
$url = $options [ 'url' ];
unset ( $options [ 'url' ]);
2006-05-26 05:29:17 +00:00
}
2007-12-29 19:05:22 +00:00
2007-12-30 21:14:15 +00:00
$image = sprintf ( $this -> tags [ 'image' ], $path , $this -> _parseAttributes ( $options , null , '' , ' ' ));
if ( $url ) {
return $this -> output ( sprintf ( $this -> tags [ 'link' ], $this -> url ( $url ), null , $image ));
2006-06-15 13:40:02 +00:00
}
2007-12-30 21:14:15 +00:00
return $this -> output ( $image );
2006-05-26 05:29:17 +00:00
}
2006-02-18 23:42:21 +00:00
/**
2005-12-27 03:33:44 +00:00
* Creates a set of radio widgets .
*
2007-07-06 03:47:35 +00:00
* @ deprecated
2006-05-26 05:29:17 +00:00
*/
2006-08-20 21:54:50 +00:00
function radio ( $fieldName , $options , $inbetween = null , $htmlAttributes = array ()) {
2007-07-06 03:47:35 +00:00
trigger_error ( __ ( '(HtmlHelper::radio) Deprecated: Use FormHelper::radio instead' , true ), E_USER_WARNING );
2006-06-14 18:02:37 +00:00
2007-11-04 18:07:59 +00:00
$this -> setEntity ( $fieldName );
2007-05-27 19:54:36 +00:00
$value = isset ( $htmlAttributes [ 'value' ]) ? $htmlAttributes [ 'value' ] : $this -> value ( $fieldName );
2006-05-26 05:29:17 +00:00
$out = array ();
2006-06-14 18:02:37 +00:00
2007-06-20 06:15:35 +00:00
foreach ( $options as $optValue => $optTitle ) {
2007-04-29 10:25:58 +00:00
$optionsHere = array ( 'value' => $optValue );
2007-05-24 23:14:14 +00:00
if ( ! empty ( $value ) && $optValue == $value ) {
2007-04-29 10:25:58 +00:00
$optionsHere [ 'checked' ] = 'checked' ;
}
2007-03-25 02:03:34 +00:00
$parsedOptions = $this -> _parseAttributes ( array_merge ( $htmlAttributes , $optionsHere ), null , '' , ' ' );
2006-09-01 13:47:21 +00:00
$individualTagName = $this -> field () . " _ { $optValue } " ;
2006-08-30 16:23:24 +00:00
$out [] = sprintf ( $this -> tags [ 'radio' ], $this -> model (), $this -> field (), $individualTagName , $parsedOptions , $optTitle );
2006-05-26 05:29:17 +00:00
}
$out = join ( $inbetween , $out );
2006-08-20 21:54:50 +00:00
return $this -> output ( $out ? $out : null );
2006-05-26 05:29:17 +00:00
}
2006-02-18 23:42:21 +00:00
/**
2005-12-27 03:33:44 +00:00
* Returns a row of formatted and named TABLE headers .
*
2006-05-26 05:29:17 +00:00
* @ param array $names Array of tablenames .
* @ param array $trOptions HTML options for TR elements .
* @ param array $thOptions HTML options for TH elements .
2005-12-27 03:33:44 +00:00
* @ return string
*/
2006-08-20 21:54:50 +00:00
function tableHeaders ( $names , $trOptions = null , $thOptions = null ) {
2006-05-26 05:29:17 +00:00
$out = array ();
2007-06-20 06:15:35 +00:00
foreach ( $names as $arg ) {
2007-03-25 02:03:34 +00:00
$out [] = sprintf ( $this -> tags [ 'tableheader' ], $this -> _parseAttributes ( $thOptions ), $arg );
2006-05-26 05:29:17 +00:00
}
2007-03-25 02:03:34 +00:00
$data = sprintf ( $this -> tags [ 'tablerow' ], $this -> _parseAttributes ( $trOptions ), join ( ' ' , $out ));
2006-08-20 21:54:50 +00:00
return $this -> output ( $data );
2006-05-26 05:29:17 +00:00
}
2006-02-18 23:42:21 +00:00
/**
* Returns a formatted string of table rows ( TR 's with TD' s in them ) .
*
2006-05-26 05:29:17 +00:00
* @ param array $data Array of table data
2007-12-30 21:14:15 +00:00
* @ param array $oddTrOptions HTML options for odd TR elements if true useCount is used
* @ param array $evenTrOptions HTML options for even TR elements
* @ param bool $useCount adds class " column - $i "
2006-05-26 05:29:17 +00:00
* @ return string Formatted HTML
*/
2007-12-30 21:14:15 +00:00
function tableCells ( $data , $oddTrOptions = null , $evenTrOptions = null , $useCount = false ) {
2006-05-26 05:29:17 +00:00
if ( empty ( $data [ 0 ]) || ! is_array ( $data [ 0 ])) {
$data = array ( $data );
}
2006-11-23 07:51:13 +00:00
static $count = 0 ;
2006-05-26 05:29:17 +00:00
2007-12-30 21:14:15 +00:00
if ( $oddTrOptions === true ) {
$useCount = true ;
$oddTrOptions = null ;
}
2007-06-20 06:15:35 +00:00
foreach ( $data as $line ) {
2006-05-26 05:29:17 +00:00
$count ++ ;
2007-12-30 21:14:15 +00:00
$cellsOut = $cellOptions = array ();
$i = 0 ;
2007-06-20 06:15:35 +00:00
foreach ( $line as $cell ) {
2007-12-30 21:14:15 +00:00
if ( is_array ( $cell )) {
$cellOptions = $cell [ 1 ];
$cell = $cell [ 0 ];
} elseif ( $useCount ) {
$cellOptions [ 'class' ] = 'column-' . ++ $i ;
}
$cellsOut [] = sprintf ( $this -> tags [ 'tablecell' ], $this -> _parseAttributes ( $cellOptions ), $cell );
2006-05-26 05:29:17 +00:00
}
2007-03-25 02:03:34 +00:00
$options = $this -> _parseAttributes ( $count % 2 ? $oddTrOptions : $evenTrOptions );
2006-05-26 05:29:17 +00:00
$out [] = sprintf ( $this -> tags [ 'tablerow' ], $options , join ( ' ' , $cellsOut ));
}
2006-08-20 21:54:50 +00:00
return $this -> output ( join ( " \n " , $out ));
2006-05-26 05:29:17 +00:00
}
2007-03-04 15:28:08 +00:00
/**
* Returns a formatted DIV tag for HTML FORMs .
2005-12-27 03:33:44 +00:00
*
2007-03-04 15:28:08 +00:00
* @ param string $class CSS class name of the div element .
* @ param string $text String content that will appear inside the div element .
* If null , only a start tag will be printed
* @ param array $attributes Additional HTML attributes of the DIV tag
2007-10-22 16:54:36 +00:00
* @ param boolean $escape If true , $text will be HTML - escaped
2007-03-04 15:28:08 +00:00
* @ return string The formatted DIV element
2005-12-27 03:33:44 +00:00
*/
2007-03-04 15:28:08 +00:00
function div ( $class = null , $text = null , $attributes = array (), $escape = false ) {
if ( $escape ) {
$text = h ( $text );
2006-05-26 05:29:17 +00:00
}
2007-03-04 15:28:08 +00:00
if ( $class != null && ! empty ( $class )) {
$attributes [ 'class' ] = $class ;
2006-05-26 05:29:17 +00:00
}
2007-03-04 15:28:08 +00:00
if ( $text === null ) {
$tag = 'blockstart' ;
2006-05-26 05:29:17 +00:00
} else {
2007-03-04 15:28:08 +00:00
$tag = 'block' ;
2006-05-26 05:29:17 +00:00
}
2007-03-25 02:03:34 +00:00
return $this -> output ( sprintf ( $this -> tags [ $tag ], $this -> _parseAttributes ( $attributes , null , ' ' , '' ), $text ));
2007-03-04 15:28:08 +00:00
}
/**
* Returns a formatted P tag .
*
* @ param string $class CSS class name of the p element .
* @ param string $text String content that will appear inside the p element .
* @ param array $attributes Additional HTML attributes of the P tag
2007-10-22 16:54:36 +00:00
* @ param boolean $escape If true , $text will be HTML - escaped
2007-03-04 15:28:08 +00:00
* @ return string The formatted P element
*/
function para ( $class , $text , $attributes = array (), $escape = false ) {
if ( $escape ) {
$text = h ( $text );
2006-05-26 05:29:17 +00:00
}
2007-03-04 15:28:08 +00:00
if ( $class != null && ! empty ( $class )) {
$attributes [ 'class' ] = $class ;
2006-05-26 05:29:17 +00:00
}
2007-03-04 15:28:08 +00:00
if ( $text === null ) {
$tag = 'parastart' ;
} else {
$tag = 'para' ;
}
2007-03-25 02:03:34 +00:00
return $this -> output ( sprintf ( $this -> tags [ $tag ], $this -> _parseAttributes ( $attributes , null , ' ' , '' ), $text ));
2006-05-26 05:29:17 +00:00
}
2007-09-16 01:42:33 +00:00
/**
* Build a nested list ( UL / OL ) out of an associative array .
*
* @ param array $list Set of elements to list
2007-11-25 20:12:51 +00:00
* @ param array $attributes Additional HTML attributes of the list ( ol / ul ) tag or if ul / ol use that as tag
2007-09-16 01:42:33 +00:00
* @ param array $itemAttributes Additional HTML attributes of the list item ( LI ) tag
* @ param string $tag Type of list tag to use ( ol / ul )
* @ return string The nested list
* @ access public
*/
function nestedList ( $list , $attributes = array (), $itemAttributes = array (), $tag = 'ul' ) {
2007-12-22 23:36:24 +00:00
if ( is_string ( $attributes )) {
2007-11-25 20:12:51 +00:00
$tag = $attributes ;
$attributes = array ();
}
2007-09-16 01:42:33 +00:00
$items = $this -> __nestedListItem ( $list , $attributes , $itemAttributes , $tag );
return sprintf ( $this -> tags [ $tag ], $this -> _parseAttributes ( $attributes , null , ' ' , '' ), $items );
}
/**
* Internal function to build a nested list ( UL / OL ) out of an associative array .
*
* @ param array $list Set of elements to list
* @ param array $attributes Additional HTML attributes of the list ( ol / ul ) tag
* @ param array $itemAttributes Additional HTML attributes of the list item ( LI ) tag
* @ param string $tag Type of list tag to use ( ol / ul )
* @ return string The nested list element
* @ access private
* @ see nestedList ()
*/
function __nestedListItem ( $items , $attributes , $itemAttributes , $tag ) {
$out = '' ;
2007-05-27 19:54:36 +00:00
2007-09-16 01:42:33 +00:00
$index = 1 ;
foreach ( $items as $key => $item ) {
if ( is_array ( $item )) {
$item = $key . $this -> nestedList ( $item , $attributes , $itemAttributes , $tag );
}
if ( isset ( $itemAttributes [ 'even' ]) && $index % 2 == 0 ) {
$itemAttributes [ 'class' ] = $itemAttributes [ 'even' ];
} else if ( isset ( $itemAttributes [ 'odd' ]) && $index % 2 != 0 ) {
$itemAttributes [ 'class' ] = $itemAttributes [ 'odd' ];
}
$out .= sprintf ( $this -> tags [ 'li' ], $this -> _parseAttributes ( array_diff_key ( $itemAttributes , array_flip ( array ( 'even' , 'odd' ))), null , ' ' , '' ), $item );
$index ++ ;
}
return $out ;
}
2007-05-24 22:50:20 +00:00
/**
* Creates a password input widget .
*
* @ deprecated 1.2 . 0.5147
* @ see FormHelper :: input or FormHelper :: password
*/
function password ( $fieldName , $htmlAttributes = array ()) {
trigger_error ( sprintf ( __ ( 'Method password() is deprecated in %s: see FormHelper::input or FormHelper::password' , true ), get_class ( $this )), E_USER_NOTICE );
2007-05-27 19:54:36 +00:00
$htmlAttributes = $this -> value ( $htmlAttributes , $fieldName );
2007-05-24 22:50:20 +00:00
$htmlAttributes = $this -> domId ( $htmlAttributes );
if ( $this -> tagIsInvalid ()) {
$htmlAttributes = $this -> addClass ( $htmlAttributes , 'form_error' );
}
return $this -> output ( sprintf ( $this -> tags [ 'password' ], $this -> model (), $this -> field (), $this -> _parseAttributes ( $htmlAttributes , null , ' ' , ' ' )));
}
/**
* Creates a textarea widget .
*
* @ deprecated 1.2 . 0.5147
* @ see FormHelper :: input or FormHelper :: textarea
*/
function textarea ( $fieldName , $htmlAttributes = array ()) {
trigger_error ( sprintf ( __ ( 'Method textarea() is deprecated in %s: see FormHelper::input or FormHelper::textarea' , true ), get_class ( $this )), E_USER_NOTICE );
2007-05-27 19:54:36 +00:00
$htmlAttributes = $this -> value ( $htmlAttributes , $fieldName );
2007-05-24 22:50:20 +00:00
$value = null ;
if ( isset ( $htmlAttributes [ 'value' ]) && ! empty ( $htmlAttributes [ 'value' ])) {
$value = $htmlAttributes [ 'value' ];
unset ( $htmlAttributes [ 'value' ]);
}
$htmlAttributes = $this -> domId ( $htmlAttributes );
if ( $this -> tagIsInvalid ()) {
$htmlAttributes = $this -> addClass ( $htmlAttributes , 'form_error' );
}
return $this -> output ( sprintf ( $this -> tags [ 'textarea' ], $this -> model (), $this -> field (), $this -> _parseAttributes ( $htmlAttributes , null , ' ' ), $value ));
}
/**
* Creates a checkbox widget .
*
* @ deprecated 1.2 . 0.5147
* @ see FormHelper :: input or FormHelper :: checkbox
*/
function checkbox ( $fieldName , $title = null , $htmlAttributes = array ()) {
trigger_error ( sprintf ( __ ( 'Method checkbox() is deprecated in %s: see FormHelper::input or FormHelper::checkbox' , true ), get_class ( $this )), E_USER_NOTICE );
$value = $this -> tagValue ( $fieldName );
$notCheckedValue = 0 ;
if ( isset ( $htmlAttributes [ 'checked' ])) {
if ( $htmlAttributes [ 'checked' ] == 'checked' || intval ( $htmlAttributes [ 'checked' ]) === 1 || $htmlAttributes [ 'checked' ] === true ) {
$htmlAttributes [ 'checked' ] = 'checked' ;
} else {
$htmlAttributes [ 'checked' ] = null ;
$notCheckedValue = - 1 ;
}
} else {
$model = $this -> model ();
if ( isset ( $htmlAttributes [ 'value' ]) || ( ! class_exists ( $model ) && ! loadModel ( $model ))) {
2007-06-20 07:51:52 +00:00
if ( isset ( $htmlAttributes [ 'value' ]) && $htmlAttributes [ 'value' ] == $value ) {
2007-05-24 22:50:20 +00:00
$htmlAttributes [ 'checked' ] = 'checked' ;
} else {
$htmlAttributes [ 'checked' ] = null ;
}
if ( isset ( $htmlAttributes [ 'value' ]) && $htmlAttributes [ 'value' ] == '0' ) {
$notCheckedValue = - 1 ;
}
} else {
$model = new $model ;
$db =& ConnectionManager :: getDataSource ( $model -> useDbConfig );
$value = $db -> boolean ( $value );
$htmlAttributes [ 'checked' ] = $value ? 'checked' : null ;
$htmlAttributes [ 'value' ] = 1 ;
}
}
$htmlAttributes = $this -> domId ( $htmlAttributes );
$output = $this -> hidden ( $fieldName , array ( 'value' => $notCheckedValue , 'id' => $htmlAttributes [ 'id' ] . '_' ), true );
$output .= sprintf ( $this -> tags [ 'checkbox' ], $this -> model (), $this -> field (), $this -> _parseAttributes ( $htmlAttributes , null , '' , ' ' ));
return $this -> output ( $output );
}
/**
* Creates a hidden input field .
*
* @ deprecated 1.2 . 0.5147
* @ see FormHelper :: input or FormHelper :: hidden
*/
function hidden ( $fieldName , $htmlAttributes = array ()) {
trigger_error ( sprintf ( __ ( 'Method hidden() is deprecated in %s: see FormHelper::input or FormHelper::hidden' , true ), get_class ( $this )), E_USER_NOTICE );
2007-05-27 19:54:36 +00:00
$htmlAttributes = $this -> value ( $htmlAttributes , $fieldName );
2007-05-24 22:50:20 +00:00
$htmlAttributes = $this -> domId ( $htmlAttributes );
return $this -> output ( sprintf ( $this -> tags [ 'hidden' ], $this -> model (), $this -> field (), $this -> _parseAttributes ( $htmlAttributes , null , ' ' , ' ' )));
}
/**
* Creates a text input widget .
*
* @ deprecated 1.2 . 0.5147
* @ see FormHelper :: input or FormHelper :: text
*/
function input ( $fieldName , $htmlAttributes = array ()) {
trigger_error ( sprintf ( __ ( 'Method input() is deprecated in %s: see FormHelper::input or FormHelper::text' , true ), get_class ( $this )), E_USER_NOTICE );
2007-05-27 19:54:36 +00:00
$htmlAttributes = $this -> value ( $htmlAttributes , $fieldName );
2007-05-24 22:50:20 +00:00
$htmlAttributes = $this -> domId ( $htmlAttributes );
if ( ! isset ( $htmlAttributes [ 'type' ])) {
$htmlAttributes [ 'type' ] = 'text' ;
}
if ( $this -> tagIsInvalid ()) {
$htmlAttributes = $this -> addClass ( $htmlAttributes , 'form_error' );
}
return $this -> output ( sprintf ( $this -> tags [ 'input' ], $this -> model (), $this -> field (), $this -> _parseAttributes ( $htmlAttributes , null , ' ' , ' ' )));
}
/**
* Returns value of $fieldName . False if the tag does not exist .
*
* @ deprecated 1.2 . 0.5147
2007-09-07 01:22:03 +00:00
* @ see Helper :: value
2007-05-24 22:50:20 +00:00
*/
function tagValue ( $fieldName ) {
2007-09-07 01:22:03 +00:00
trigger_error ( sprintf ( __ ( 'Method tagValue() is deprecated in %s: see Helper::value' , true ), get_class ( $this )), E_USER_NOTICE );
2007-11-04 18:07:59 +00:00
$this -> setEntity ( $fieldName );
2007-05-24 22:50:20 +00:00
if ( isset ( $this -> data [ $this -> model ()][ $this -> field ()])) {
return h ( $this -> data [ $this -> model ()][ $this -> field ()]);
}
return false ;
}
/**
* Returns number of errors in a submitted FORM .
*
* @ deprecated 1.2 . 0.5147
* @ see FormHelper :: errors
*/
function validate () {
trigger_error ( sprintf ( __ ( 'Method validate() is deprecated in %s: see FormHelper::errors' , true ), get_class ( $this )), E_USER_NOTICE );
$args = func_get_args ();
$errors = call_user_func_array ( array ( & $this , 'validateErrors' ), $args );
return count ( $errors );
}
/**
* Validates a FORM according to the rules set up in the Model .
*
* @ deprecated 1.2 . 0.5147
* @ see FormHelper :: errors
*/
function validateErrors () {
trigger_error ( sprintf ( __ ( 'Method validateErrors() is deprecated in %s: see FormHelper::errors' , true ), get_class ( $this )), E_USER_NOTICE );
$objects = func_get_args ();
if ( ! count ( $objects )) {
return false ;
}
$errors = array ();
2007-06-20 06:15:35 +00:00
foreach ( $objects as $object ) {
2007-05-24 22:50:20 +00:00
$errors = array_merge ( $errors , $object -> invalidFields ( $object -> data ));
}
return $this -> validationErrors = ( count ( $errors ) ? $errors : false );
}
/**
* Returns a formatted error message for given FORM field , NULL if no errors .
*
* @ deprecated 1.2 . 0.5147
* @ see FormHelper :: error
*/
function tagErrorMsg ( $field , $text ) {
trigger_error ( sprintf ( __ ( 'Method tagErrorMsg() is deprecated in %s: see FormHelper::error' , true ), get_class ( $this )), E_USER_NOTICE );
$error = 1 ;
2007-11-04 18:07:59 +00:00
$this -> setEntity ( $field );
2007-05-24 22:50:20 +00:00
if ( $error == $this -> tagIsInvalid ()) {
return sprintf ( '<div class="error-message">%s</div>' , is_array ( $text ) ? ( empty ( $text [ $error - 1 ]) ? 'Error in field' : $text [ $error - 1 ]) : $text );
} else {
return null ;
}
}
2005-06-21 23:44:49 +00:00
}
2007-10-28 04:18:18 +00:00
?>