diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-28 12:39:39 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-28 12:39:39 +0000 |
commit | 8ca6cc32b2c789a3149861159ad258f2cb9491e3 (patch) | |
tree | 2492de6f1528dd44eaa169a5c1555026d9cb75ec /library/vendor/Zend/Layout.php | |
parent | Initial commit. (diff) | |
download | icingaweb2-upstream/2.11.4.tar.xz icingaweb2-upstream/2.11.4.zip |
Adding upstream version 2.11.4.upstream/2.11.4upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to '')
-rw-r--r-- | library/vendor/Zend/Layout.php | 788 |
1 files changed, 788 insertions, 0 deletions
diff --git a/library/vendor/Zend/Layout.php b/library/vendor/Zend/Layout.php new file mode 100644 index 0000000..a123e44 --- /dev/null +++ b/library/vendor/Zend/Layout.php @@ -0,0 +1,788 @@ +<?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_Layout + * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) + * @license http://framework.zend.com/license/new-bsd New BSD License + * @version $Id$ + */ + +/** + * Provide Layout support for MVC applications + * + * @category Zend + * @package Zend_Layout + * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) + * @license http://framework.zend.com/license/new-bsd New BSD License + */ +class Zend_Layout +{ + /** + * Placeholder container for layout variables + * @var Zend_View_Helper_Placeholder_Container + */ + protected $_container; + + /** + * Key used to store content from 'default' named response segment + * @var string + */ + protected $_contentKey = 'content'; + + /** + * Are layouts enabled? + * @var bool + */ + protected $_enabled = true; + + /** + * Helper class + * @var string + */ + protected $_helperClass = 'Zend_Layout_Controller_Action_Helper_Layout'; + + /** + * Inflector used to resolve layout script + * @var Zend_Filter_Inflector + */ + protected $_inflector; + + /** + * Flag: is inflector enabled? + * @var bool + */ + protected $_inflectorEnabled = true; + + /** + * Inflector target + * @var string + */ + protected $_inflectorTarget = ':script.:suffix'; + + /** + * Layout view + * @var string + */ + protected $_layout = 'layout'; + + /** + * Layout view script path + * @var string + */ + protected $_viewScriptPath = null; + + protected $_viewBasePath = null; + protected $_viewBasePrefix = 'Layout_View'; + + /** + * Flag: is MVC integration enabled? + * @var bool + */ + protected $_mvcEnabled = true; + + /** + * Instance registered with MVC, if any + * @var Zend_Layout + */ + protected static $_mvcInstance; + + /** + * Flag: is MVC successful action only flag set? + * @var bool + */ + protected $_mvcSuccessfulActionOnly = true; + + /** + * Plugin class + * @var string + */ + protected $_pluginClass = 'Zend_Layout_Controller_Plugin_Layout'; + + /** + * @var Zend_View_Interface + */ + protected $_view; + + /** + * View script suffix for layout script + * @var string + */ + protected $_viewSuffix = 'phtml'; + + /** + * Constructor + * + * Accepts either: + * - A string path to layouts + * - An array of options + * - A Zend_Config object with options + * + * Layout script path, either as argument or as key in options, is + * required. + * + * If mvcEnabled flag is false from options, simply sets layout script path. + * Otherwise, also instantiates and registers action helper and controller + * plugin. + * + * @param string|array|Zend_Config $options + * @return void + */ + public function __construct($options = null, $initMvc = false) + { + if (null !== $options) { + if (is_string($options)) { + $this->setLayoutPath($options); + } elseif (is_array($options)) { + $this->setOptions($options); + } elseif ($options instanceof Zend_Config) { + $this->setConfig($options); + } else { + throw new Zend_Layout_Exception('Invalid option provided to constructor'); + } + } + + $this->_initVarContainer(); + + if ($initMvc) { + $this->_setMvcEnabled(true); + $this->_initMvc(); + } else { + $this->_setMvcEnabled(false); + } + } + + /** + * Static method for initialization with MVC support + * + * @param string|array|Zend_Config $options + * @return Zend_Layout + */ + public static function startMvc($options = null) + { + if (null === self::$_mvcInstance) { + self::$_mvcInstance = new self($options, true); + } else { + if (is_string($options)) { + self::$_mvcInstance->setLayoutPath($options); + } elseif (is_array($options) || $options instanceof Zend_Config) { + self::$_mvcInstance->setOptions($options); + } + } + + return self::$_mvcInstance; + } + + /** + * Retrieve MVC instance of Zend_Layout object + * + * @return Zend_Layout|null + */ + public static function getMvcInstance() + { + return self::$_mvcInstance; + } + + /** + * Reset MVC instance + * + * Unregisters plugins and helpers, and destroys MVC layout instance. + * + * @return void + */ + public static function resetMvcInstance() + { + if (null !== self::$_mvcInstance) { + $layout = self::$_mvcInstance; + $pluginClass = $layout->getPluginClass(); + $front = Zend_Controller_Front::getInstance(); + if ($front->hasPlugin($pluginClass)) { + $front->unregisterPlugin($pluginClass); + } + + if (Zend_Controller_Action_HelperBroker::hasHelper('layout')) { + Zend_Controller_Action_HelperBroker::removeHelper('layout'); + } + + unset($layout); + self::$_mvcInstance = null; + } + } + + /** + * Set options en masse + * + * @param array|Zend_Config $options + * @return void + */ + public function setOptions($options) + { + if ($options instanceof Zend_Config) { + $options = $options->toArray(); + } elseif (!is_array($options)) { + throw new Zend_Layout_Exception('setOptions() expects either an array or a Zend_Config object'); + } + + foreach ($options as $key => $value) { + $method = 'set' . ucfirst($key); + if (method_exists($this, $method)) { + $this->$method($value); + } + } + } + + /** + * Initialize MVC integration + * + * @return void + */ + protected function _initMvc() + { + $this->_initPlugin(); + $this->_initHelper(); + } + + /** + * Initialize front controller plugin + * + * @return void + */ + protected function _initPlugin() + { + $pluginClass = $this->getPluginClass(); + $front = Zend_Controller_Front::getInstance(); + if (!$front->hasPlugin($pluginClass)) { + if (!class_exists($pluginClass)) { + Zend_Loader::loadClass($pluginClass); + } + $front->registerPlugin( + // register to run last | BUT before the ErrorHandler (if its available) + new $pluginClass($this), + 99 + ); + } + } + + /** + * Initialize action helper + * + * @return void + */ + protected function _initHelper() + { + $helperClass = $this->getHelperClass(); + if (!Zend_Controller_Action_HelperBroker::hasHelper('layout')) { + if (!class_exists($helperClass)) { + Zend_Loader::loadClass($helperClass); + } + Zend_Controller_Action_HelperBroker::getStack()->offsetSet(-90, new $helperClass($this)); + } + } + + /** + * Set options from a config object + * + * @param Zend_Config $config + * @return Zend_Layout + */ + public function setConfig(Zend_Config $config) + { + $this->setOptions($config->toArray()); + return $this; + } + + /** + * Initialize placeholder container for layout vars + * + * @return Zend_View_Helper_Placeholder_Container + */ + protected function _initVarContainer() + { + if (null === $this->_container) { + $this->_container = Zend_View_Helper_Placeholder_Registry::getRegistry()->getContainer(__CLASS__); + } + + return $this->_container; + } + + /** + * Set layout script to use + * + * Note: enables layout by default, can be disabled + * + * @param string $name + * @param boolean $enabled + * @return Zend_Layout + */ + public function setLayout($name, $enabled = true) + { + $this->_layout = (string) $name; + if ($enabled) { + $this->enableLayout(); + } + return $this; + } + + /** + * Get current layout script + * + * @return string + */ + public function getLayout() + { + return $this->_layout; + } + + /** + * Disable layout + * + * @return Zend_Layout + */ + public function disableLayout() + { + $this->_enabled = false; + return $this; + } + + /** + * Enable layout + * + * @return Zend_Layout + */ + public function enableLayout() + { + $this->_enabled = true; + return $this; + } + + /** + * Is layout enabled? + * + * @return bool + */ + public function isEnabled() + { + return $this->_enabled; + } + + + public function setViewBasePath($path, $prefix = 'Layout_View') + { + $this->_viewBasePath = $path; + $this->_viewBasePrefix = $prefix; + return $this; + } + + public function getViewBasePath() + { + return $this->_viewBasePath; + } + + public function setViewScriptPath($path) + { + $this->_viewScriptPath = $path; + return $this; + } + + public function getViewScriptPath() + { + return $this->_viewScriptPath; + } + + /** + * Set layout script path + * + * @param string $path + * @return Zend_Layout + */ + public function setLayoutPath($path) + { + return $this->setViewScriptPath($path); + } + + /** + * Get current layout script path + * + * @return string + */ + public function getLayoutPath() + { + return $this->getViewScriptPath(); + } + + /** + * Set content key + * + * Key in namespace container denoting default content + * + * @param string $contentKey + * @return Zend_Layout + */ + public function setContentKey($contentKey) + { + $this->_contentKey = (string) $contentKey; + return $this; + } + + /** + * Retrieve content key + * + * @return string + */ + public function getContentKey() + { + return $this->_contentKey; + } + + /** + * Set MVC enabled flag + * + * @param bool $mvcEnabled + * @return Zend_Layout + */ + protected function _setMvcEnabled($mvcEnabled) + { + $this->_mvcEnabled = ($mvcEnabled) ? true : false; + return $this; + } + + /** + * Retrieve MVC enabled flag + * + * @return bool + */ + public function getMvcEnabled() + { + return $this->_mvcEnabled; + } + + /** + * Set MVC Successful Action Only flag + * + * @param bool $successfulActionOnly + * @return Zend_Layout + */ + public function setMvcSuccessfulActionOnly($successfulActionOnly) + { + $this->_mvcSuccessfulActionOnly = ($successfulActionOnly) ? true : false; + return $this; + } + + /** + * Get MVC Successful Action Only Flag + * + * @return bool + */ + public function getMvcSuccessfulActionOnly() + { + return $this->_mvcSuccessfulActionOnly; + } + + /** + * Set view object + * + * @param Zend_View_Interface $view + * @return Zend_Layout + */ + public function setView(Zend_View_Interface $view) + { + $this->_view = $view; + return $this; + } + + /** + * Retrieve helper class + * + * @return string + */ + public function getHelperClass() + { + return $this->_helperClass; + } + + /** + * Set helper class + * + * @param string $helperClass + * @return Zend_Layout + */ + public function setHelperClass($helperClass) + { + $this->_helperClass = (string) $helperClass; + return $this; + } + + /** + * Retrieve plugin class + * + * @return string + */ + public function getPluginClass() + { + return $this->_pluginClass; + } + + /** + * Set plugin class + * + * @param string $pluginClass + * @return Zend_Layout + */ + public function setPluginClass($pluginClass) + { + $this->_pluginClass = (string) $pluginClass; + return $this; + } + + /** + * Get current view object + * + * If no view object currently set, retrieves it from the ViewRenderer. + * + * @todo Set inflector from view renderer at same time + * @return Zend_View_Interface + */ + public function getView() + { + if (null === $this->_view) { + $viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer'); + if (null === $viewRenderer->view) { + $viewRenderer->initView(); + } + $this->setView($viewRenderer->view); + } + return $this->_view; + } + + /** + * Set layout view script suffix + * + * @param string $viewSuffix + * @return Zend_Layout + */ + public function setViewSuffix($viewSuffix) + { + $this->_viewSuffix = (string) $viewSuffix; + return $this; + } + + /** + * Retrieve layout view script suffix + * + * @return string + */ + public function getViewSuffix() + { + return $this->_viewSuffix; + } + + /** + * Retrieve inflector target + * + * @return string + */ + public function getInflectorTarget() + { + return $this->_inflectorTarget; + } + + /** + * Set inflector target + * + * @param string $inflectorTarget + * @return Zend_Layout + */ + public function setInflectorTarget($inflectorTarget) + { + $this->_inflectorTarget = (string) $inflectorTarget; + return $this; + } + + /** + * Set inflector to use when resolving layout names + * + * @param Zend_Filter_Inflector $inflector + * @return Zend_Layout + */ + public function setInflector(Zend_Filter_Inflector $inflector) + { + $this->_inflector = $inflector; + return $this; + } + + /** + * Retrieve inflector + * + * @return Zend_Filter_Inflector + */ + public function getInflector() + { + if (null === $this->_inflector) { + $inflector = new Zend_Filter_Inflector(); + $inflector->setTargetReference($this->_inflectorTarget) + ->addRules(array(':script' => array('Word_CamelCaseToDash', 'StringToLower'))) + ->setStaticRuleReference('suffix', $this->_viewSuffix); + $this->setInflector($inflector); + } + + return $this->_inflector; + } + + /** + * Enable inflector + * + * @return Zend_Layout + */ + public function enableInflector() + { + $this->_inflectorEnabled = true; + return $this; + } + + /** + * Disable inflector + * + * @return Zend_Layout + */ + public function disableInflector() + { + $this->_inflectorEnabled = false; + return $this; + } + + /** + * Return status of inflector enabled flag + * + * @return bool + */ + public function inflectorEnabled() + { + return $this->_inflectorEnabled; + } + + /** + * Set layout variable + * + * @param string $key + * @param mixed $value + * @return void + */ + public function __set($key, $value) + { + $this->_container[$key] = $value; + } + + /** + * Get layout variable + * + * @param string $key + * @return mixed + */ + public function __get($key) + { + if (isset($this->_container[$key])) { + return $this->_container[$key]; + } + + return null; + } + + /** + * Is a layout variable set? + * + * @param string $key + * @return bool + */ + public function __isset($key) + { + return (isset($this->_container[$key])); + } + + /** + * Unset a layout variable? + * + * @param string $key + * @return void + */ + public function __unset($key) + { + if (isset($this->_container[$key])) { + unset($this->_container[$key]); + } + } + + /** + * Assign one or more layout variables + * + * @param mixed $spec Assoc array or string key; if assoc array, sets each + * key as a layout variable + * @param mixed $value Value if $spec is a key + * @return Zend_Layout + * @throws Zend_Layout_Exception if non-array/string value passed to $spec + */ + public function assign($spec, $value = null) + { + if (is_array($spec)) { + $orig = $this->_container->getArrayCopy(); + $merged = array_merge($orig, $spec); + $this->_container->exchangeArray($merged); + return $this; + } + + if (is_string($spec)) { + $this->_container[$spec] = $value; + return $this; + } + + throw new Zend_Layout_Exception('Invalid values passed to assign()'); + } + + /** + * Render layout + * + * Sets internal script path as last path on script path stack, assigns + * layout variables to view, determines layout name using inflector, and + * renders layout view script. + * + * $name will be passed to the inflector as the key 'script'. + * + * @param mixed $name + * @return mixed + */ + public function render($name = null) + { + if (null === $name) { + $name = $this->getLayout(); + } + + if ($this->inflectorEnabled() && (null !== ($inflector = $this->getInflector()))) + { + $name = $this->_inflector->filter(array('script' => $name)); + } + + $view = $this->getView(); + + if (null !== ($path = $this->getViewScriptPath())) { + if (method_exists($view, 'addScriptPath')) { + $view->addScriptPath($path); + } else { + $view->setScriptPath($path); + } + } elseif (null !== ($path = $this->getViewBasePath())) { + $view->addBasePath($path, $this->_viewBasePrefix); + } + + return $view->render($name); + } +} |