ProShell v2.0
Dashboard
Server Info
Server: 158.106.128.192
PHP: 8.2.33
home
planet5
public_html
bansibaba.com
wp-includes
2026-09-17 05:45:01
Editing: ContextSwitch.php
Cancel
Save Changes
<?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_Controller * @subpackage Zend_Controller_Action_Helper * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com) * @license http://framework.zend.com/license/new-bsd New BSD License * @version $Id: ContextSwitch.php 24594 2012-01-05 21:27:01Z matthew $ */ /** * @see Zend_Controller_Action_Helper_Abstract */ //--//require_once 'Zend/Controller/Action/Helper/Abstract.php'; /** * Simplify context switching based on requested format * * @uses Zend_Controller_Action_Helper_Abstract * @category Zend * @package Zend_Controller * @subpackage Zend_Controller_Action_Helper * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com) * @license http://framework.zend.com/license/new-bsd New BSD License */ class Zend_Controller_Action_Helper_ContextSwitch extends Zend_Controller_Action_Helper_Abstract { /** * Trigger type constants */ const TRIGGER_INIT = 'TRIGGER_INIT'; const TRIGGER_POST = 'TRIGGER_POST'; /** * Supported contexts * @var array */ protected $_contexts = array(); /** * JSON auto-serialization flag * @var boolean */ protected $_autoJsonSerialization = true; /** * Controller property key to utilize for context switching * @var string */ protected $_contextKey = 'contexts'; /** * Request parameter containing requested context * @var string */ protected $_contextParam = 'format'; /** * Current context * @var string */ protected $_currentContext; /** * Default context (xml) * @var string */ protected $_defaultContext = 'xml'; /** * Whether or not to disable layouts when switching contexts * @var boolean */ protected $_disableLayout = true; /** * Methods that require special configuration * @var array */ protected $_specialConfig = array( 'setSuffix', 'setHeaders', 'setCallbacks', ); /** * Methods that are not configurable via setOptions and setConfig * @var array */ protected $_unconfigurable = array( 'setOptions', 'setConfig', 'setHeader', 'setCallback', 'setContext', 'setActionContext', 'setActionContexts', ); /** * @var Zend_Controller_Action_Helper_ViewRenderer */ protected $_viewRenderer; /** * Original view suffix prior to detecting context switch * @var string */ protected $_viewSuffixOrig; /** * Constructor * * @param array|Zend_Config $options * @return void */ public function __construct($options = null) { if ($options instanceof Zend_Config) { $this->setConfig($options); } elseif (is_array($options)) { $this->setOptions($options); } if (empty($this->_contexts)) { $this->addContexts(array( 'json' => array( 'suffix' => 'json', 'headers' => array('Content-Type' => 'application/json'), 'callbacks' => array( 'init' => 'initJsonContext', 'post' => 'postJsonContext' ) ), 'xml' => array( 'suffix' => 'xml', 'headers' => array('Content-Type' => 'application/xml'), ) )); } $this->init(); } /** * Initialize at start of action controller * * Reset the view script suffix to the original state, or store the * original state. * * @return void */ public function init() { if (null === $this->_viewSuffixOrig) { $this->_viewSuffixOrig = $this->_getViewRenderer()->getViewSuffix(); } else { $this->_getViewRenderer()->setViewSuffix($this->_viewSuffixOrig); } } /** * Configure object from array of options * * @param array $options * @return Zend_Controller_Action_Helper_ContextSwitch Provides a fluent interface */ public function setOptions(array $options) { if (isset($options['contexts'])) { $this->setContexts($options['contexts']); unset($options['contexts']); } foreach ($options as $key => $value) { $method = 'set' . ucfirst($key); if (in_array($method, $this->_unconfigurable)) { continue; } if (in_array($method, $this->_specialConfig)) { $method = '_' . $method; } if (method_exists($this, $method)) { $this->$method($value); } } return $this; } /** * Set object state from config object * * @param Zend_Config $config * @return Zend_Controller_Action_Helper_ContextSwitch Provides a fluent interface */ public function setConfig(Zend_Config $config) { return $this->setOptions($config->toArray()); } /** * Strategy pattern: return object * * @return Zend_Controller_Action_Helper_ContextSwitch Provides a fluent interface */ public function direct() { return $this; } /** * Initialize context detection and switching * * @param mixed $format * @throws Zend_Controller_Action_Exception * @return void */ public function initContext($format = null) { $this->_currentContext = null; $controller = $this->getActionController(); $request = $this->getRequest(); $action = $request->getActionName(); // Return if no context switching enabled, or no context switching // enabled for this action $contexts = $this->getActionContexts($action); if (empty($contexts)) { return; } // Return if no context parameter provided if (!$context = $request->getParam($this->getContextParam())) { if ($format === null) { return; } $context = $format; $format = null; } // Check if context allowed by action controller if (!$this->hasActionContext($action, $context)) { return; } // Return if invalid context parameter provided and no format or invalid // format provided if (!$this->hasContext($context)) { if (empty($format) || !$this->hasContext($format)) { return; } } // Use provided format if passed if (!empty($format) && $this->hasContext($format)) { $context = $format; } $suffix = $this->getSuffix($context); $this->_getViewRenderer()->setViewSuffix($suffix); $headers = $this->getHeaders($context); if (!empty($headers)) { $response = $this->getResponse(); foreach ($headers as $header => $content) { $response->setHeader($header, $content); } } if ($this->getAutoDisableLayout()) { /** * @see Zend_Layout */ //--//require_once 'Zend/Layout.php'; $layout = Zend_Layout::getMvcInstance(); if (null !== $layout) { $layout->disableLayout(); } } if (null !== ($callback = $this->getCallback($context, self::TRIGGER_INIT))) { if (is_string($callback) && method_exists($this, $callback)) { $this->$callback(); } elseif (is_string($callback) && function_exists($callback)) { $callback(); } elseif (is_array($callback)) { call_user_func($callback); } else { /** * @see Zend_Controller_Action_Exception */ //--//require_once 'Zend/Controller/Action/Exception.php'; throw new Zend_Controller_Action_Exception(sprintf('Invalid context callback registered for context "%s"', $context)); } } $this->_currentContext = $context; } /** * JSON context extra initialization * * Turns off viewRenderer auto-rendering * * @return void */ public function initJsonContext() { if (!$this->getAutoJsonSerialization()) { return; } $viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer'); $view = $viewRenderer->view; if ($view instanceof Zend_View_Interface) { $viewRenderer->setNoRender(true); } } /** * Should JSON contexts auto-serialize? * * @param boolean $flag * @return Zend_Controller_Action_Helper_ContextSwitch Provides a fluent interface */ public function setAutoJsonSerialization($flag) { $this->_autoJsonSerialization = (bool) $flag; return $this; } /** * Get JSON context auto-serialization flag * * @return boolean */ public function getAutoJsonSerialization() { return $this->_autoJsonSerialization; } /** * Set suffix from array * * @param array $spec * @return Zend_Controller_Action_Helper_ContextSwitch Provides a fluent interface */ protected function _setSuffix(array $spec) { foreach ($spec as $context => $suffixInfo) { if (!is_string($context)) { $context = null; } if (is_string($suffixInfo)) { $this->setSuffix($context, $suffixInfo); continue; } elseif (is_array($suffixInfo)) { if (isset($suffixInfo['suffix'])) { $suffix = $suffixInfo['suffix']; $prependViewRendererSuffix = true; if ((null === $context) && isset($suffixInfo['context'])) { $context = $suffixInfo['context']; } if (isset($suffixInfo['prependViewRendererSuffix'])) { $prependViewRendererSuffix = $suffixInfo['prependViewRendererSuffix']; } $this->setSuffix($context, $suffix, $prependViewRendererSuffix); continue; } $count = count($suffixInfo); switch (true) { case (($count < 2) && (null === $context)): /** * @see Zend_Controller_Action_Exception */ //--//require_once 'Zend/Controller/Action/Exception.php'; throw new Zend_Controller_Action_Exception('Invalid suffix information provided in config'); case ($count < 2): $suffix = array_shift($suffixInfo); $this->setSuffix($context, $suffix); break; case (($count < 3) && (null === $context)): $context = array_shift($suffixInfo); $suffix = array_shift($suffixInfo); $this->setSuffix($context, $suffix); break; case (($count == 3) && (null === $context)): $context = array_shift($suffixInfo); $suffix = array_shift($suffixInfo); $prependViewRendererSuffix = array_shift($suffixInfo); $this->setSuffix($context, $suffix, $prependViewRendererSuffix); break; case ($count >= 2): $suffix = array_shift($suffixInfo); $prependViewRendererSuffix = array_shift($suffixInfo); $this->setSuffix($context, $suffix, $prependViewRendererSuffix); break; } } } return $this; } /** * Customize view script suffix to use when switching context. * * Passing an empty suffix value to the setters disables the view script * suffix change. * * @param string $context Context type for which to set suffix * @param string $suffix Suffix to use * @param boolean $prependViewRendererSuffix Whether or not to prepend the new suffix to the viewrenderer suffix * @throws Zend_Controller_Action_Exception * @return Zend_Controller_Action_Helper_ContextSwitch Provides a fluent interface */ public function setSuffix($context, $suffix, $prependViewRendererSuffix = true) { if (!isset($this->_contexts[$context])) { /** * @see Zend_Controller_Action_Exception */ //--//require_once 'Zend/Controller/Action/Exception.php'; throw new Zend_Controller_Action_Exception(sprintf('Cannot set suffix; invalid context type "%s"', $context)); } if (empty($suffix)) { $suffix = ''; } if (is_array($suffix)) { if (isset($suffix['prependViewRendererSuffix'])) { $prependViewRendererSuffix = $suffix['prependViewRendererSuffix']; } if (isset($suffix['suffix'])) { $suffix = $suffix['suffix']; } else { $suffix = ''; } } $suffix = (string) $suffix; if ($prependViewRendererSuffix) { if (empty($suffix)) { $suffix = $this->_getViewRenderer()->getViewSuffix(); } else { $suffix .= '.' . $this->_getViewRenderer()->getViewSuffix(); } } $this->_contexts[$context]['suffix'] = $suffix; return $this; } /** * Retrieve suffix for given context type * * @param string $type Context type * @throws Zend_Controller_Action_Exception * @return string */ public function getSuffix($type) { if (!isset($this->_contexts[$type])) { /** * @see Zend_Controller_Action_Exception */ //--//require_once 'Zend/Controller/Action/Exception.php'; throw new Zend_Controller_Action_Exception(sprintf('Cannot retrieve suffix; invalid context type "%s"', $type)); } return $this->_contexts[$type]['suffix']; } /** * Does the given context exist? * * @param string $context * @param boolean $throwException * @throws Zend_Controller_Action_Exception if context does not exist and throwException is true * @return bool */ public function hasContext($context, $throwException = false) { if (is_string($context)) { if (isset($this->_contexts[$context])) { return true; } } elseif (is_array($context)) { $error = false; foreach ($context as $test) { if (!isset($this->_contexts[$test])) { $error = (string) $test; break; } } if (false === $error) { return true; } $context = $error; } elseif (true === $context) { return true; } if ($throwException) { /** * @see Zend_Controller_Action_Exception */ //--//require_once 'Zend/Controller/Action/Exception.php'; throw new Zend_Controller_Action_Exception(sprintf('Context "%s" does not exist', $context)); } return false; } /** * Add header to context * * @param string $context * @param string $header * @param string $content * @throws Zend_Controller_Action_Exception * @return Zend_Controller_Action_Helper_ContextSwitch Provides a fluent interface */ public function addHeader($context, $header, $content) { $context = (string) $context; $this->hasContext($context, true); $header = (string) $header; $content = (string) $content; if (isset($this->_contexts[$context]['headers'][$header])) { /** * @see Zend_Controller_Action_Exception */ //--//require_once 'Zend/Controller/Action/Exception.php'; throw new Zend_Controller_Action_Exception(sprintf('Cannot add "%s" header to context "%s": already exists', $header, $context)); } $this->_contexts[$context]['headers'][$header] = $content; return $this; } /** * Customize response header to use when switching context * * Passing an empty header value to the setters disables the response * header. * * @param string $type Context type for which to set suffix * @param string $header Header to set * @param string $content Header content * @return Zend_Controller_Action_Helper_ContextSwitch Provides a fluent interface */ public function setHeader($context, $header, $content) { $this->hasContext($context, true); $context = (string) $context; $header = (string) $header; $content = (string) $content; $this->_contexts[$context]['headers'][$header] = $content; return $this; } /** * Add multiple headers at once for a given context * * @param string $context * @param array $headers * @return Zend_Controller_Action_Helper_ContextSwitch Provides a fluent interface */ public function addHeaders($context, array $headers) { foreach ($headers as $header => $content) { $this->addHeader($context, $header, $content); } return $this; } /** * Set headers from context => headers pairs * * @param array $options * @return Zend_Controller_Action_Helper_ContextSwitch Provides a fluent interface */ protected function _setHeaders(array $options) { foreach ($options as $context => $headers) { if (!is_array($headers)) { continue; } $this->setHeaders($context, $headers); } return $this; } /** * Set multiple headers at once for a given context * * @param string $context * @param array $headers * @return Zend_Controller_Action_Helper_ContextSwitch Provides a fluent interface */ public function setHeaders($context, array $headers) { $this->clearHeaders($context); foreach ($headers as $header => $content) { $this->setHeader($context, $header, $content); } return $this; } /** * Retrieve context header * * Returns the value of a given header for a given context type * * @param string $context * @param string $header * @return string|null */ public function getHeader($context, $header) { $this->hasContext($context, true); $context = (string) $context; $header = (string) $header; if (isset($this->_contexts[$context]['headers'][$header])) { return $this->_contexts[$context]['headers'][$header]; } return null; } /** * Retrieve context headers * * Returns all headers for a context as key/value pairs * * @param string $context * @return array */ public function getHeaders($context) { $this->hasContext($context, true); $context = (string) $context; return $this->_contexts[$context]['headers']; } /** * Remove a single header from a context * * @param string $context * @param string $header * @return boolean */ public function removeHeader($context, $header) { $this->hasContext($context, true); $context = (string) $context; $header = (string) $header; if (isset($this->_contexts[$context]['headers'][$header])) { unset($this->_contexts[$context]['headers'][$header]); return true; } return false; } /** * Clear all headers for a given context * * @param string $context * @return Zend_Controller_Action_Helper_ContextSwitch Provides a fluent interface */ public function clearHeaders($context) { $this->hasContext($context, true); $context = (string) $context; $this->_contexts[$context]['headers'] = array(); return $this; } /** * Validate trigger and return in normalized form * * @param string $trigger * @throws Zend_Controller_Action_Exception * @return string */ protected function _validateTrigger($trigger) { $trigger = strtoupper($trigger); if ('TRIGGER_' !== substr($trigger, 0, 8)) { $trigger = 'TRIGGER_' . $trigger; } if (!in_array($trigger, array(self::TRIGGER_INIT, self::TRIGGER_POST))) { /** * @see Zend_Controller_Action_Exception */ //--//require_once 'Zend/Controller/Action/Exception.php'; throw new Zend_Controller_Action_Exception(sprintf('Invalid trigger "%s"', $trigger)); } return $trigger; } /** * Set a callback for a given context and trigger * * @param string $context * @param string $trigger * @param string|array $callback * @throws Zend_Controller_Action_Exception * @return Zend_Controller_Action_Helper_ContextSwitch Provides a fluent interface */ public function setCallback($context, $trigger, $callback) { $this->hasContext($context, true); $trigger = $this->_validateTrigger($trigger); if (!is_string($callback)) { if (!is_array($callback) || (2 != count($callback))) { /** * @see Zend_Controller_Action_Exception */ //--//require_once 'Zend/Controller/Action/Exception.php'; throw new Zend_Controller_Action_Exception('Invalid callback specified'); } } $this->_contexts[$context]['callbacks'][$trigger] = $callback; return $this; } /** * Set callbacks from array of context => callbacks pairs * * @param array $options * @return Zend_Controller_Action_Helper_ContextSwitch Provides a fluent interface */ protected function _setCallbacks(array $options) { foreach ($options as $context => $callbacks) { if (!is_array($callbacks)) { continue; } $this->setCallbacks($context, $callbacks); } return $this; } /** * Set callbacks for a given context * * Callbacks should be in trigger/callback pairs. * * @param string $context * @param array $callbacks * @return Zend_Controller_Action_Helper_ContextSwitch Provides a fluent interface */ public function setCallbacks($context, array $callbacks) { $this->hasContext($context, true); $context = (string) $context; if (!isset($this->_contexts[$context]['callbacks'])) { $this->_contexts[$context]['callbacks'] = array(); } foreach ($callbacks as $trigger => $callback) { $this->setCallback($context, $trigger, $callback); } return $this; } /** * Get a single callback for a given context and trigger * * @param string $context * @param string $trigger * @return string|array|null */ public function getCallback($context, $trigger) { $this->hasContext($context, true); $trigger = $this->_validateTrigger($trigger); if (isset($this->_contexts[$context]['callbacks'][$trigger])) { return $this->_contexts[$context]['callbacks'][$trigger]; } return null; } /** * Get all callbacks for a given context * * @param string $context * @return array */ public function getCallbacks($context) { $this->hasContext($context, true); return $this->_contexts[$context]['callbacks']; } /** * Clear a callback for a given context and trigger * * @param string $context * @param string $trigger * @return boolean */ public function removeCallback($context, $trigger) { $this->hasContext($context, true); $trigger = $this->_validateTrigger($trigger); if (isset($this->_contexts[$context]['callbacks'][$trigger])) { unset($this->_contexts[$context]['callbacks'][$trigger]); return true; } return false; } /** * Clear all callbacks for a given context * * @param string $context * @return Zend_Controller_Action_Helper_ContextSwitch Provides a fluent interface */ public function clearCallbacks($context) { $this->hasContext($context, true); $this->_contexts[$context]['callbacks'] = array(); return $this; } /** * Set name of parameter to use when determining context format * * @param string $name * @return Zend_Controller_Action_Helper_ContextSwitch Provides a fluent interface */ public function setContextParam($name) { $this->_contextParam = (string) $name; return $this; } /** * Return context format request parameter name * * @return string */ public function getContextParam() { return $this->_contextParam; } /** * Indicate default context to use when no context format provided * * @param string $type * @throws Zend_Controller_Action_Exception * @return Zend_Controller_Action_Helper_ContextSwitch Provides a fluent interface */ public function setDefaultContext($type) { if (!isset($this->_contexts[$type])) { /** * @see Zend_Controller_Action_Exception */ //--//require_once 'Zend/Controller/Action/Exception.php'; throw new Zend_Controller_Action_Exception(sprintf('Cannot set default context; invalid context type "%s"', $type)); } $this->_defaultContext = $type; return $this; } /** * Return default context * * @return string */ public function getDefaultContext() { return $this->_defaultContext; } /** * Set flag indicating if layout should be disabled * * @param boolean $flag * @return Zend_Controller_Action_Helper_ContextSwitch Provides a fluent interface */ public function setAutoDisableLayout($flag) { $this->_disableLayout = ($flag) ? true : false; return $this; } /** * Retrieve auto layout disable flag * * @return boolean */ public function getAutoDisableLayout() { return $this->_disableLayout; } /** * Add new context * * @param string $context Context type * @param array $spec Context specification * @throws Zend_Controller_Action_Exception * @return Zend_Controller_Action_Helper_ContextSwitch Provides a fluent interface */ public function addContext($context, array $spec) { if ($this->hasContext($context)) { /** * @see Zend_Controller_Action_Exception */ //--//require_once 'Zend/Controller/Action/Exception.php'; throw new Zend_Controller_Action_Exception(sprintf('Cannot add context "%s"; already exists', $context)); } $context = (string) $context; $this->_contexts[$context] = array(); $this->setSuffix($context, (isset($spec['suffix']) ? $spec['suffix'] : '')) ->setHeaders($context, (isset($spec['headers']) ? $spec['headers'] : array())) ->setCallbacks($context, (isset($spec['callbacks']) ? $spec['callbacks'] : array())); return $this; } /** * Overwrite existing context * * @param string $context Context type * @param array $spec Context specification * @return Zend_Controller_Action_Helper_ContextSwitch Provides a fluent interface */ public function setContext($context, array $spec) { $this->removeContext($context); return $this->addContext($context, $spec); } /** * Add multiple contexts * * @param array $contexts * @return Zend_Controller_Action_Helper_ContextSwitch Provides a fluent interface */ public function addContexts(array $contexts) { foreach ($contexts as $context => $spec) { $this->addContext($context, $spec); } return $this; } /** * Set multiple contexts, after first removing all * * @param array $contexts * @return Zend_Controller_Action_Helper_ContextSwitch Provides a fluent interface */ public function setContexts(array $contexts) { $this->clearContexts(); foreach ($contexts as $context => $spec) { $this->addContext($context, $spec); } return $this; } /** * Retrieve context specification * * @param string $context * @return array|null */ public function getContext($context) { if ($this->hasContext($context)) { return $this->_contexts[(string) $context]; } return null; } /** * Retrieve context definitions * * @return array */ public function getContexts() { return $this->_contexts; } /** * Remove a context * * @param string $context * @return boolean */ public function removeContext($context) { if ($this->hasContext($context)) { unset($this->_contexts[(string) $context]); return true; } return false; } /** * Remove all contexts * * @return Zend_Controller_Action_Helper_ContextSwitch Provides a fluent interface */ public function clearContexts() { $this->_contexts = array(); return $this; } /** * Return current context, if any * * @return null|string */ public function getCurrentContext() { return $this->_currentContext; } /** * Post dispatch processing * * Execute postDispatch callback for current context, if available * * @throws Zend_Controller_Action_Exception * @return void */ public function postDispatch() { $context = $this->getCurrentContext(); if (null !== $context) { if (null !== ($callback = $this->getCallback($context, self::TRIGGER_POST))) { if (is_string($callback) && method_exists($this, $callback)) { $this->$callback(); } elseif (is_string($callback) && function_exists($callback)) { $callback(); } elseif (is_array($callback)) { call_user_func($callback); } else { /** * @see Zend_Controller_Action_Exception */ //--//require_once 'Zend/Controller/Action/Exception.php'; throw new Zend_Controller_Action_Exception(sprintf('Invalid postDispatch context callback registered for context "%s"', $context)); } } } } /** * JSON post processing * * JSON serialize view variables to response body * * @return void */ public function postJsonContext() { if (!$this->getAutoJsonSerialization()) { return; } $viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer'); $view = $viewRenderer->view; if ($view instanceof Zend_View_Interface) { /** * @see Zend_Json */ if(method_exists($view, 'getVars')) { //--//require_once 'Zend/Json.php'; $vars = Zend_Json::encode($view->getVars()); $this->getResponse()->setBody($vars); } else { //--//require_once 'Zend/Controller/Action/Exception.php'; throw new Zend_Controller_Action_Exception('View does not implement the getVars() method needed to encode the view into JSON'); } } } /** * Add one or more contexts to an action * * @param string $action * @param string|array $context * @return Zend_Controller_Action_Helper_ContextSwitch|void Provides a fluent interface */ public function addActionContext($action, $context) { $this->hasContext($context, true); $controller = $this->getActionController(); if (null === $controller) { return; } $action = (string) $action; $contextKey = $this->_contextKey; if (!isset($controller->$contextKey)) { $controller->$contextKey = array(); } if (true === $context) { $contexts = $this->getContexts(); $controller->{$contextKey}[$action] = array_keys($contexts); return $this; } $context = (array) $context; if (!isset($controller->{$contextKey}[$action])) { $controller->{$contextKey}[$action] = $context; } else { $controller->{$contextKey}[$action] = array_merge( $controller->{$contextKey}[$action], $context ); } return $this; } /** * Set a context as available for a given controller action * * @param string $action * @param string|array $context * @return Zend_Controller_Action_Helper_ContextSwitch|void Provides a fluent interface */ public function setActionContext($action, $context) { $this->hasContext($context, true); $controller = $this->getActionController(); if (null === $controller) { return; } $action = (string) $action; $contextKey = $this->_contextKey; if (!isset($controller->$contextKey)) { $controller->$contextKey = array(); } if (true === $context) { $contexts = $this->getContexts(); $controller->{$contextKey}[$action] = array_keys($contexts); } else { $controller->{$contextKey}[$action] = (array) $context; } return $this; } /** * Add multiple action/context pairs at once * * @param array $contexts * @return Zend_Controller_Action_Helper_ContextSwitch Provides a fluent interface */ public function addActionContexts(array $contexts) { foreach ($contexts as $action => $context) { $this->addActionContext($action, $context); } return $this; } /** * Overwrite and set multiple action contexts at once * * @param array $contexts * @return Zend_Controller_Action_Helper_ContextSwitch Provides a fluent interface */ public function setActionContexts(array $contexts) { foreach ($contexts as $action => $context) { $this->setActionContext($action, $context); } return $this; } /** * Does a particular controller action have the given context(s)? * * @param string $action * @param string|array $context * @throws Zend_Controller_Action_Exception * @return boolean */ public function hasActionContext($action, $context) { $this->hasContext($context, true); $controller = $this->getActionController(); if (null === $controller) { return false; } $action = (string) $action; $contextKey = $this->_contextKey; if (!isset($controller->{$contextKey})) { return false; } $allContexts = $controller->{$contextKey}; if (!is_array($allContexts)) { /** * @see Zend_Controller_Action_Exception */ //--//require_once 'Zend/Controller/Action/Exception.php'; throw new Zend_Controller_Action_Exception("Invalid contexts found for controller"); } if (!isset($allContexts[$action])) { return false; } if (true === $allContexts[$action]) { return true; } $contexts = $allContexts[$action]; if (!is_array($contexts)) { /** * @see Zend_Controller_Action_Exception */ //--//require_once 'Zend/Controller/Action/Exception.php'; throw new Zend_Controller_Action_Exception(sprintf("Invalid contexts found for action '%s'", $action)); } if (is_string($context) && in_array($context, $contexts)) { return true; } elseif (is_array($context)) { $found = true; foreach ($context as $test) { if (!in_array($test, $contexts)) { $found = false; break; } } return $found; } return false; } /** * Get contexts for a given action or all actions in the controller * * @param string $action * @return array */ public function getActionContexts($action = null) { $controller = $this->getActionController(); if (null === $controller) { return array(); } $action = (string) $action; $contextKey = $this->_contextKey; if (!isset($controller->$contextKey)) { return array(); } if (null !== $action) { if (isset($controller->{$contextKey}[$action])) { return $controller->{$contextKey}[$action]; } else { return array(); } } return $controller->$contextKey; } /** * Remove one or more contexts for a given controller action * * @param string $action * @param string|array $context * @return boolean */ public function removeActionContext($action, $context) { if ($this->hasActionContext($action, $context)) { $controller = $this->getActionController(); $contextKey = $this->_contextKey; $action = (string) $action; $contexts = $controller->$contextKey; $actionContexts = $contexts[$action]; $contexts = (array) $context; foreach ($contexts as $context) { $index = array_search($context, $actionContexts); if (false !== $index) { unset($controller->{$contextKey}[$action][$index]); } } return true; } return false; } /** * Clear all contexts for a given controller action or all actions * * @param string $action * @return Zend_Controller_Action_Helper_ContextSwitch Provides a fluent interface */ public function clearActionContexts($action = null) { $controller = $this->getActionController(); $contextKey = $this->_contextKey; if (!isset($controller->$contextKey) || empty($controller->$contextKey)) { return $this; } if (null === $action) { $controller->$contextKey = array(); return $this; } $action = (string) $action; if (isset($controller->{$contextKey}[$action])) { unset($controller->{$contextKey}[$action]); } return $this; } /** * Retrieve ViewRenderer * * @return Zend_Controller_Action_Helper_ViewRenderer Provides a fluent interface */ protected function _getViewRenderer() { if (null === $this->_viewRenderer) { $this->_viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer'); } return $this->_viewRenderer; } }
Upload Files
Cancel
Upload
Create New
Cancel
Create
Change Permissions
Cancel
Save
Change Date
Cancel
Save
Rename Item
Cancel
Save
Confirm Delete
Are you sure you want to delete the selected items?
Cancel
Delete