File indexing completed on 2024-12-22 05:37:13
0001 <?php 0002 /** 0003 * Zend Framework 0004 * 0005 * LICENSE 0006 * 0007 * This source file is subject to the new BSD license that is bundled 0008 * with this package in the file LICENSE.txt. 0009 * It is also available through the world-wide-web at this URL: 0010 * http://framework.zend.com/license/new-bsd 0011 * If you did not receive a copy of the license and are unable to 0012 * obtain it through the world-wide-web, please send an email 0013 * to license@zend.com so we can send you a copy immediately. 0014 * 0015 * @category Zend 0016 * @package Zend_View 0017 * @subpackage Helper 0018 * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) 0019 * @version $Id$ 0020 * @license http://framework.zend.com/license/new-bsd New BSD License 0021 */ 0022 0023 /** Zend_Registry */ 0024 // require_once 'Zend/Registry.php'; 0025 0026 /** Zend_View_Helper_Abstract.php */ 0027 // require_once 'Zend/View/Helper/Abstract.php'; 0028 0029 /** 0030 * Helper for setting and retrieving the doctype 0031 * 0032 * @package Zend_View 0033 * @subpackage Helper 0034 * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) 0035 * @license http://framework.zend.com/license/new-bsd New BSD License 0036 */ 0037 class Zend_View_Helper_Doctype extends Zend_View_Helper_Abstract 0038 { 0039 /**#@+ 0040 * DocType constants 0041 */ 0042 const XHTML11 = 'XHTML11'; 0043 const XHTML1_STRICT = 'XHTML1_STRICT'; 0044 const XHTML1_TRANSITIONAL = 'XHTML1_TRANSITIONAL'; 0045 const XHTML1_FRAMESET = 'XHTML1_FRAMESET'; 0046 const XHTML1_RDFA = 'XHTML1_RDFA'; 0047 const XHTML1_RDFA11 = 'XHTML1_RDFA11'; 0048 const XHTML_BASIC1 = 'XHTML_BASIC1'; 0049 const XHTML5 = 'XHTML5'; 0050 const HTML4_STRICT = 'HTML4_STRICT'; 0051 const HTML4_LOOSE = 'HTML4_LOOSE'; 0052 const HTML4_FRAMESET = 'HTML4_FRAMESET'; 0053 const HTML5 = 'HTML5'; 0054 const CUSTOM_XHTML = 'CUSTOM_XHTML'; 0055 const CUSTOM = 'CUSTOM'; 0056 /**#@-*/ 0057 0058 /** 0059 * Default DocType 0060 * @var string 0061 */ 0062 protected $_defaultDoctype = self::HTML4_LOOSE; 0063 0064 /** 0065 * Registry containing current doctype and mappings 0066 * @var ArrayObject 0067 */ 0068 protected $_registry; 0069 0070 /** 0071 * Registry key in which helper is stored 0072 * @var string 0073 */ 0074 protected $_regKey = 'Zend_View_Helper_Doctype'; 0075 0076 /** 0077 * Constructor 0078 * 0079 * Map constants to doctype strings, and set default doctype 0080 * 0081 * @return void 0082 */ 0083 public function __construct() 0084 { 0085 if (!Zend_Registry::isRegistered($this->_regKey)) { 0086 $this->_registry = new ArrayObject(array( 0087 'doctypes' => array( 0088 self::XHTML11 => '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">', 0089 self::XHTML1_STRICT => '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">', 0090 self::XHTML1_TRANSITIONAL => '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">', 0091 self::XHTML1_FRAMESET => '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">', 0092 self::XHTML1_RDFA => '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML+RDFa 1.0//EN" "http://www.w3.org/MarkUp/DTD/xhtml-rdfa-1.dtd">', 0093 self::XHTML1_RDFA11 => '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML+RDFa 1.1//EN" "http://www.w3.org/MarkUp/DTD/xhtml-rdfa-2.dtd">', 0094 self::XHTML_BASIC1 => '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML Basic 1.0//EN" "http://www.w3.org/TR/xhtml-basic/xhtml-basic10.dtd">', 0095 self::XHTML5 => '<!DOCTYPE html>', 0096 self::HTML4_STRICT => '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">', 0097 self::HTML4_LOOSE => '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">', 0098 self::HTML4_FRAMESET => '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">', 0099 self::HTML5 => '<!DOCTYPE html>', 0100 ) 0101 )); 0102 Zend_Registry::set($this->_regKey, $this->_registry); 0103 $this->setDoctype($this->_defaultDoctype); 0104 } else { 0105 $this->_registry = Zend_Registry::get($this->_regKey); 0106 } 0107 } 0108 0109 /** 0110 * Set or retrieve doctype 0111 * 0112 * @param string $doctype 0113 * @return Zend_View_Helper_Doctype 0114 */ 0115 public function doctype($doctype = null) 0116 { 0117 if (null !== $doctype) { 0118 switch ($doctype) { 0119 case self::XHTML11: 0120 case self::XHTML1_STRICT: 0121 case self::XHTML1_TRANSITIONAL: 0122 case self::XHTML1_FRAMESET: 0123 case self::XHTML_BASIC1: 0124 case self::XHTML1_RDFA: 0125 case self::XHTML1_RDFA11: 0126 case self::XHTML5: 0127 case self::HTML4_STRICT: 0128 case self::HTML4_LOOSE: 0129 case self::HTML4_FRAMESET: 0130 case self::HTML5: 0131 $this->setDoctype($doctype); 0132 break; 0133 default: 0134 if (substr($doctype, 0, 9) != '<!DOCTYPE') { 0135 // require_once 'Zend/View/Exception.php'; 0136 $e = new Zend_View_Exception('The specified doctype is malformed'); 0137 $e->setView($this->view); 0138 throw $e; 0139 } 0140 if (stristr($doctype, 'xhtml')) { 0141 $type = self::CUSTOM_XHTML; 0142 } else { 0143 $type = self::CUSTOM; 0144 } 0145 $this->setDoctype($type); 0146 $this->_registry['doctypes'][$type] = $doctype; 0147 break; 0148 } 0149 } 0150 0151 return $this; 0152 } 0153 0154 /** 0155 * Set doctype 0156 * 0157 * @param string $doctype 0158 * @return Zend_View_Helper_Doctype 0159 */ 0160 public function setDoctype($doctype) 0161 { 0162 $this->_registry['doctype'] = $doctype; 0163 return $this; 0164 } 0165 0166 /** 0167 * Retrieve doctype 0168 * 0169 * @return string 0170 */ 0171 public function getDoctype() 0172 { 0173 return $this->_registry['doctype']; 0174 } 0175 0176 /** 0177 * Get doctype => string mappings 0178 * 0179 * @return array 0180 */ 0181 public function getDoctypes() 0182 { 0183 return $this->_registry['doctypes']; 0184 } 0185 0186 /** 0187 * Is doctype XHTML? 0188 * 0189 * @return boolean 0190 */ 0191 public function isXhtml() 0192 { 0193 return (stristr($this->getDoctype(), 'xhtml') ? true : false); 0194 } 0195 0196 /** 0197 * Is doctype strict? 0198 * 0199 * @return boolean 0200 */ 0201 public function isStrict() 0202 { 0203 switch ( $this->getDoctype() ) 0204 { 0205 case self::XHTML1_STRICT: 0206 case self::XHTML11: 0207 case self::HTML4_STRICT: 0208 return true; 0209 default: 0210 return false; 0211 } 0212 } 0213 0214 /** 0215 * Is doctype HTML5? (HeadMeta uses this for validation) 0216 * 0217 * @return booleean 0218 */ 0219 public function isHtml5() { 0220 return (stristr($this->doctype(), '<!DOCTYPE html>') ? true : false); 0221 } 0222 0223 /** 0224 * Is doctype RDFa? 0225 * 0226 * @return booleean 0227 */ 0228 public function isRdfa() { 0229 return (stristr($this->getDoctype(), 'rdfa') ? true : false); 0230 } 0231 0232 /** 0233 * String representation of doctype 0234 * 0235 * @return string 0236 */ 0237 public function __toString() 0238 { 0239 $doctypes = $this->getDoctypes(); 0240 return $doctypes[$this->getDoctype()]; 0241 } 0242 }