/** * Renders the $content so that it can be used as output for the $view, * including output escaping and encoding correction. * * This functions handles \MUtil_Html_HtmlInterface and \MUtil_Lazy_LazyInterface * objects natively, as well as array, scalar values and objects with a * __toString function. * * Other objects a definition should have a render function in getClassRenderList(). * * All Lazy variabables are raised. * * @param \Zend_View_Abstract $view * @param mixed $content Anything HtmlInterface, number, string, array, object with __toString * or an object that has a defined render function in getClassRenderList(). * @return string Output to echo to the user */ public function renderArray(\Zend_View_Abstract $view, $content, $glue = '', $stack = null) { // \MUtil_Echo::timeFunctionStart(__FUNCTION__); $output = array(); // \MUtil_Echo::countOccurences('render'); foreach ($content as $key => $value) { // Resolve first as this function as recursion heavy enough as it is. if ($value instanceof \MUtil_Lazy_LazyInterface) { if (!$stack) { $stack = \MUtil_Lazy::getStack(); } // \MUtil_Echo::countOccurences('lazyIf'); while ($value instanceof \MUtil_Lazy_LazyInterface) { // \MUtil_Echo::countOccurences('lazyWhile'); $value = $value->__toValue($stack); } } if (is_scalar($value)) { // \MUtil_Echo::countOccurences('scalar'); // \MUtil_Echo::timeFunctionStart('escape2'); $output[$key] = $view->escape((string) $value); // \MUtil_Echo::timeFunctionStop('escape2'); } elseif ($value instanceof \MUtil_Html_HtmlInterface) { // \MUtil_Echo::countOccurences('interface'); $output[$key] = $value->render($view); } elseif (null === $value) { // \MUtil_Echo::countOccurences('null'); } elseif (is_array($value)) { // \MUtil_Echo::countOccurences('array'); $output[$key] = self::renderAny($view, $value, '', $stack); } elseif (is_object($value)) { $function = $this->_classRenderFunctions->get($value); if ($function) { // \MUtil_Echo::countOccurences('function'); $output[$key] = call_user_func($function, $view, $value); } elseif (method_exists($value, '__toString')) { // \MUtil_Echo::countOccurences('toString'); // \MUtil_Echo::countOccurences('toString.' . get_class($value)); $output[$key] = $view->escape($value->__toString()); } else { // $output[$key] = 'WARNING: Object of type ' . get_class($value) . ' cannot be converted to string.'; throw new \MUtil_Html_HtmlException('WARNING: Object of type ' . get_class($value) . ' cannot be converted to string.'); } } elseif ($value instanceof \__PHP_Incomplete_Class) { \MUtil_Echo::r($value, __CLASS__ . '->' . __FUNCTION__); $output[$key] = ''; } else { // Mop up, should not occur // \MUtil_Echo::countOccurences('scalar else'); $output[$key] = $view->escape((string) $value); } } if (false === $glue || null === $glue) { // \MUtil_Echo::timeFunctionStop(__FUNCTION__); return $output; } $output = implode($glue, $output); // \MUtil_Echo::timeFunctionStop(__FUNCTION__); return $output; }
protected function _checkParams(array $params) { $checks = \MUtil_Ra::nonScalars($params); if ($this->_allowedClasses) { $checks = \MUtil_Ra::nonScalars($params); if (is_array($checks)) { foreach ($checks as $object) { if (!$this->_allowedClasses->get($object)) { $name = get_class($object); $method = reset($params); throw new \MUtil_Batch_BatchException("Not allowed batch class {$name} parameter for method: '{$method}'."); } } } } elseif (!\MUtil_Ra::isScalar($params)) { $checks = \MUtil_Ra::nonScalars($params); if (is_array($checks)) { $object = reset($checks); $name = get_class($object); $method = reset($params); throw new \MUtil_Batch_BatchException("Not allowed batch class {$name} parameter for method: '{$method}'."); } } }