summaryrefslogtreecommitdiffstats
path: root/library/vendor/Zend/View/Helper/HeadMeta.php
diff options
context:
space:
mode:
Diffstat (limited to 'library/vendor/Zend/View/Helper/HeadMeta.php')
-rw-r--r--library/vendor/Zend/View/Helper/HeadMeta.php440
1 files changed, 440 insertions, 0 deletions
diff --git a/library/vendor/Zend/View/Helper/HeadMeta.php b/library/vendor/Zend/View/Helper/HeadMeta.php
new file mode 100644
index 0000000..88cd3a7
--- /dev/null
+++ b/library/vendor/Zend/View/Helper/HeadMeta.php
@@ -0,0 +1,440 @@
+<?php
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_View
+ * @subpackage Helper
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @version $Id$
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+/** Zend_View_Helper_Placeholder_Container_Standalone */
+
+/**
+ * Zend_Layout_View_Helper_HeadMeta
+ *
+ * @see http://www.w3.org/TR/xhtml1/dtds.html
+ * @uses Zend_View_Helper_Placeholder_Container_Standalone
+ * @package Zend_View
+ * @subpackage Helper
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @method $this appendHttpEquiv($keyValue, $content, $conditionalHttpEquiv)
+ * @method $this appendName($keyValue, $content, $conditionalName)
+ * @method $this appendProperty($property, $content, $modifiers)
+ * @method $this offsetSetHttpEquiv($index, $keyValue, $content, $conditionalHttpEquiv)
+ * @method $this offsetSetName($index, $keyValue, $content, $conditionalName)
+ * @method $this offsetSetProperty($index, $property, $content, $modifiers)
+ * @method $this prependHttpEquiv($keyValue, $content, $conditionalHttpEquiv)
+ * @method $this prependName($keyValue, $content, $conditionalName)
+ * @method $this prependProperty($property, $content, $modifiers)
+ * @method $this setCharset($charset)
+ * @method $this setHttpEquiv($keyValue, $content, $modifiers)
+ * @method $this setName($keyValue, $content, $modifiers)
+ * @method $this setProperty($property, $content, $modifiers)
+ */
+class Zend_View_Helper_HeadMeta extends Zend_View_Helper_Placeholder_Container_Standalone
+{
+ /**
+ * Types of attributes
+ * @var array
+ */
+ protected $_typeKeys = array('name', 'http-equiv', 'charset', 'property');
+ protected $_requiredKeys = array('content');
+ protected $_modifierKeys = array('lang', 'scheme');
+
+ /**
+ * @var string registry key
+ */
+ protected $_regKey = 'Zend_View_Helper_HeadMeta';
+
+ /**
+ * Constructor
+ *
+ * Set separator to PHP_EOL
+ *
+ * @return void
+ */
+ public function __construct()
+ {
+ parent::__construct();
+ $this->setSeparator(PHP_EOL);
+ }
+
+ /**
+ * Retrieve object instance; optionally add meta tag
+ *
+ * @param string $content
+ * @param string $keyValue
+ * @param string $keyType
+ * @param array $modifiers
+ * @param string $placement
+ * @return Zend_View_Helper_HeadMeta
+ */
+ public function headMeta($content = null, $keyValue = null, $keyType = 'name', $modifiers = array(), $placement = Zend_View_Helper_Placeholder_Container_Abstract::APPEND)
+ {
+ if ((null !== $content) && (null !== $keyValue)) {
+ $item = $this->createData($keyType, $keyValue, $content, $modifiers);
+ $action = strtolower($placement);
+ switch ($action) {
+ case 'append':
+ case 'prepend':
+ case 'set':
+ $this->$action($item);
+ break;
+ default:
+ $this->append($item);
+ break;
+ }
+ }
+
+ return $this;
+ }
+
+ protected function _normalizeType($type)
+ {
+ switch ($type) {
+ case 'Name':
+ return 'name';
+ case 'HttpEquiv':
+ return 'http-equiv';
+ case 'Property':
+ return 'property';
+ default:
+ $e = new Zend_View_Exception(sprintf('Invalid type "%s" passed to _normalizeType', $type));
+ $e->setView($this->view);
+ throw $e;
+ }
+ }
+
+ /**
+ * Overload method access
+ *
+ * Allows the following 'virtual' methods:
+ * - appendName($keyValue, $content, $modifiers = array())
+ * - offsetGetName($index, $keyValue, $content, $modifers = array())
+ * - prependName($keyValue, $content, $modifiers = array())
+ * - setName($keyValue, $content, $modifiers = array())
+ * - appendHttpEquiv($keyValue, $content, $modifiers = array())
+ * - offsetGetHttpEquiv($index, $keyValue, $content, $modifers = array())
+ * - prependHttpEquiv($keyValue, $content, $modifiers = array())
+ * - setHttpEquiv($keyValue, $content, $modifiers = array())
+ * - appendProperty($keyValue, $content, $modifiers = array())
+ * - offsetGetProperty($index, $keyValue, $content, $modifiers = array())
+ * - prependProperty($keyValue, $content, $modifiers = array())
+ * - setProperty($keyValue, $content, $modifiers = array())
+ *
+ * @param string $method
+ * @param array $args
+ * @return Zend_View_Helper_HeadMeta
+ */
+ public function __call($method, $args)
+ {
+ if (preg_match('/^(?P<action>set|(pre|ap)pend|offsetSet)(?P<type>Name|HttpEquiv|Property)$/', $method, $matches)) {
+ $action = $matches['action'];
+ $type = $this->_normalizeType($matches['type']);
+ $argc = count($args);
+ $index = null;
+
+ if ('offsetSet' == $action) {
+ if (0 < $argc) {
+ $index = array_shift($args);
+ --$argc;
+ }
+ }
+
+ if (2 > $argc) {
+ $e = new Zend_View_Exception('Too few arguments provided; requires key value, and content');
+ $e->setView($this->view);
+ throw $e;
+ }
+
+ if (3 > $argc) {
+ $args[] = array();
+ }
+
+ $item = $this->createData($type, $args[0], $args[1], $args[2]);
+
+ if ('offsetSet' == $action) {
+ $this->offsetSet($index, $item);
+ return $this;
+ }
+
+ $this->$action($item);
+ return $this;
+ }
+
+ return parent::__call($method, $args);
+ }
+
+ /**
+ * Create an HTML5-style meta charset tag. Something like <meta charset="utf-8">
+ *
+ * Not valid in a non-HTML5 doctype
+ *
+ * @param string $charset
+ * @return Zend_View_Helper_HeadMeta Provides a fluent interface
+ */
+ public function setCharset($charset)
+ {
+ $item = new stdClass;
+ $item->type = 'charset';
+ $item->charset = $charset;
+ $item->content = null;
+ $item->modifiers = array();
+ $this->set($item);
+ return $this;
+ }
+
+ /**
+ * Determine if item is valid
+ *
+ * @param mixed $item
+ * @return boolean
+ */
+ protected function _isValid($item)
+ {
+ if ((!$item instanceof stdClass)
+ || !isset($item->type)
+ || !isset($item->modifiers))
+ {
+ return false;
+ }
+
+ $isHtml5 = is_null($this->view) ? false : $this->view->doctype()->isHtml5();
+
+ if (!isset($item->content)
+ && (! $isHtml5 || (! $isHtml5 && $item->type !== 'charset'))) {
+ return false;
+ }
+
+ // <meta property= ... /> is only supported with doctype RDFa
+ if ( !is_null($this->view) && !$this->view->doctype()->isRdfa()
+ && $item->type === 'property') {
+ return false;
+ }
+
+ return true;
+ }
+
+ /**
+ * Append
+ *
+ * @param string $value
+ * @return void
+ * @throws Zend_View_Exception
+ */
+ public function append($value)
+ {
+ if (!$this->_isValid($value)) {
+ $e = new Zend_View_Exception('Invalid value passed to append; please use appendMeta()');
+ $e->setView($this->view);
+ throw $e;
+ }
+
+ return $this->getContainer()->append($value);
+ }
+
+ /**
+ * OffsetSet
+ *
+ * @param string|int $index
+ * @param string $value
+ * @return void
+ * @throws Zend_View_Exception
+ */
+ public function offsetSet($index, $value): void
+ {
+ if (!$this->_isValid($value)) {
+ $e = new Zend_View_Exception('Invalid value passed to offsetSet; please use offsetSetName() or offsetSetHttpEquiv()');
+ $e->setView($this->view);
+ throw $e;
+ }
+
+ $this->getContainer()->offsetSet($index, $value);
+ }
+
+ /**
+ * OffsetUnset
+ *
+ * @param string|int $index
+ * @return void
+ * @throws Zend_View_Exception
+ */
+ public function offsetUnset($index): void
+ {
+ if (!in_array($index, $this->getContainer()->getKeys())) {
+ $e = new Zend_View_Exception('Invalid index passed to offsetUnset()');
+ $e->setView($this->view);
+ throw $e;
+ }
+
+ $this->getContainer()->offsetUnset($index);
+ }
+
+ /**
+ * Prepend
+ *
+ * @param string $value
+ * @return void
+ * @throws Zend_View_Exception
+ */
+ public function prepend($value)
+ {
+ if (!$this->_isValid($value)) {
+ $e = new Zend_View_Exception('Invalid value passed to prepend; please use prependMeta()');
+ $e->setView($this->view);
+ throw $e;
+ }
+
+ return $this->getContainer()->prepend($value);
+ }
+
+ /**
+ * Set
+ *
+ * @param string $value
+ * @return void
+ * @throws Zend_View_Exception
+ */
+ public function set($value)
+ {
+ if (!$this->_isValid($value)) {
+ $e = new Zend_View_Exception('Invalid value passed to set; please use setMeta()');
+ $e->setView($this->view);
+ throw $e;
+ }
+
+ $container = $this->getContainer();
+ foreach ($container->getArrayCopy() as $index => $item) {
+ if ($item->type == $value->type && $item->{$item->type} == $value->{$value->type}) {
+ $this->offsetUnset($index);
+ }
+ }
+
+ return $this->append($value);
+ }
+
+ /**
+ * Build meta HTML string
+ *
+ * @param string $type
+ * @param string $typeValue
+ * @param string $content
+ * @param array $modifiers
+ * @return string
+ */
+ public function itemToString(stdClass $item)
+ {
+ if (!in_array($item->type, $this->_typeKeys)) {
+ $e = new Zend_View_Exception(sprintf('Invalid type "%s" provided for meta', $item->type));
+ $e->setView($this->view);
+ throw $e;
+ }
+ $type = $item->type;
+
+ $modifiersString = '';
+ foreach ($item->modifiers as $key => $value) {
+ if (!is_null($this->view) && $this->view->doctype()->isHtml5()
+ && $key == 'scheme') {
+ throw new Zend_View_Exception('Invalid modifier '
+ . '"scheme" provided; not supported by HTML5');
+ }
+ if (!in_array($key, $this->_modifierKeys)) {
+ continue;
+ }
+ $modifiersString .= $key . '="' . $this->_escape($value) . '" ';
+ }
+
+ if ($this->view instanceof Zend_View_Abstract) {
+ if ($this->view->doctype()->isHtml5()
+ && $type == 'charset') {
+ $tpl = ($this->view->doctype()->isXhtml())
+ ? '<meta %s="%s"/>'
+ : '<meta %s="%s">';
+ } elseif ($this->view->doctype()->isXhtml()) {
+ $tpl = '<meta %s="%s" content="%s" %s/>';
+ } else {
+ $tpl = '<meta %s="%s" content="%s" %s>';
+ }
+ } else {
+ $tpl = '<meta %s="%s" content="%s" %s/>';
+ }
+
+ $meta = sprintf(
+ $tpl,
+ $type,
+ $this->_escape($item->$type),
+ $this->_escape($item->content),
+ $modifiersString
+ );
+
+ if (isset($item->modifiers['conditional'])
+ && !empty($item->modifiers['conditional'])
+ && is_string($item->modifiers['conditional']))
+ {
+ if (str_replace(' ', '', $item->modifiers['conditional']) === '!IE') {
+ $meta = '<!-->' . $meta . '<!--';
+ }
+ $meta = '<!--[if ' . $this->_escape($item->modifiers['conditional']) . ']>' . $meta . '<![endif]-->';
+ }
+
+ return $meta;
+ }
+
+ /**
+ * Render placeholder as string
+ *
+ * @param string|int $indent
+ * @return string
+ */
+ public function toString($indent = null)
+ {
+ $indent = (null !== $indent)
+ ? $this->getWhitespace($indent)
+ : $this->getIndent();
+
+ $items = array();
+ $this->getContainer()->ksort();
+ try {
+ foreach ($this as $item) {
+ $items[] = $this->itemToString($item);
+ }
+ } catch (Zend_View_Exception $e) {
+ trigger_error($e->getMessage(), E_USER_WARNING);
+ return '';
+ }
+ return $indent . implode($this->_escape($this->getSeparator()) . $indent, $items);
+ }
+
+ /**
+ * Create data item for inserting into stack
+ *
+ * @param string $type
+ * @param string $typeValue
+ * @param string $content
+ * @param array $modifiers
+ * @return stdClass
+ */
+ public function createData($type, $typeValue, $content, array $modifiers)
+ {
+ $data = new stdClass;
+ $data->type = $type;
+ $data->$type = $typeValue;
+ $data->content = $content;
+ $data->modifiers = $modifiers;
+ return $data;
+ }
+}