# HG changeset patch # User Markus Broeker<broeker.markus@googlemail.com> # Date 1455485216 -3600 # Node ID f11c31f7fa3e7232339235879bf56a5c96511770 # Parent a56e7f9a046308d58471851229bcac9e0d383bc3 Alten Library Ordner entfernt diff --git a/library/log4php/Logger.php b/library/log4php/Logger.php deleted file mode 100644 --- a/library/log4php/Logger.php +++ /dev/null @@ -1,596 +0,0 @@ -<?php -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * @package log4php - */ - -require dirname(__FILE__) . '/LoggerAutoloader.php'; - -/** - * This is the central class in the log4php package. All logging operations - * are done through this class. - * - * The main logging methods are: - * <ul> - * <li>{@link trace()}</li> - * <li>{@link debug()}</li> - * <li>{@link info()}</li> - * <li>{@link warn()}</li> - * <li>{@link error()}</li> - * <li>{@link fatal()}</li> - * </ul> - * - * @package log4php - * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0 - * @version SVN: $Id: Logger.php 1395241 2012-10-07 08:28:53Z ihabunek $ - * @link http://logging.apache.org/log4php - */ -class Logger { - - /** - * Logger additivity. If set to true then child loggers will inherit - * the appenders of their ancestors by default. - * @var boolean - */ - private $additive = true; - - /** - * The Logger's fully qualified class name. - * TODO: Determine if this is useful. - */ - private $fqcn = 'Logger'; - - /** The assigned Logger level. */ - private $level; - - /** The name of this Logger instance. */ - private $name; - - /** The parent logger. Set to null if this is the root logger. */ - private $parent; - - /** A collection of appenders linked to this logger. */ - private $appenders = array(); - - /** - * Constructor. - * @param string $name Name of the logger. - */ - public function __construct($name) { - $this->name = $name; - } - - /** - * Returns the logger name. - * @return string - */ - public function getName() { - return $this->name; - } - - /** - * Returns the parent Logger. Can be null if this is the root logger. - * @return Logger - */ - public function getParent() { - return $this->parent; - } - - // ****************************************** - // *** Logging methods *** - // ****************************************** - - /** - * Log a message object with the TRACE level. - * - * @param mixed $message message - * @param Exception $throwable Optional throwable information to include - * in the logging event. - */ - public function trace($message, $throwable = null) { - $this->log(LoggerLevel::getLevelTrace(), $message, $throwable); - } - - /** - * Log a message object with the DEBUG level. - * - * @param mixed $message message - * @param Exception $throwable Optional throwable information to include - * in the logging event. - */ - public function debug($message, $throwable = null) { - $this->log(LoggerLevel::getLevelDebug(), $message, $throwable); - } - - /** - * Log a message object with the INFO Level. - * - * @param mixed $message message - * @param Exception $throwable Optional throwable information to include - * in the logging event. - */ - public function info($message, $throwable = null) { - $this->log(LoggerLevel::getLevelInfo(), $message, $throwable); - } - - /** - * Log a message with the WARN level. - * - * @param mixed $message message - * @param Exception $throwable Optional throwable information to include - * in the logging event. - */ - public function warn($message, $throwable = null) { - $this->log(LoggerLevel::getLevelWarn(), $message, $throwable); - } - - /** - * Log a message object with the ERROR level. - * - * @param mixed $message message - * @param Exception $throwable Optional throwable information to include - * in the logging event. - */ - public function error($message, $throwable = null) { - $this->log(LoggerLevel::getLevelError(), $message, $throwable); - } - - /** - * Log a message object with the FATAL level. - * - * @param mixed $message message - * @param Exception $throwable Optional throwable information to include - * in the logging event. - */ - public function fatal($message, $throwable = null) { - $this->log(LoggerLevel::getLevelFatal(), $message, $throwable); - } - - /** - * Log a message using the provided logging level. - * - * @param LoggerLevel $level The logging level. - * @param mixed $message Message to log. - * @param Exception $throwable Optional throwable information to include - * in the logging event. - */ - public function log(LoggerLevel $level, $message, $throwable = null) { - if ($this->isEnabledFor($level)) { - $event = new LoggerLoggingEvent($this->fqcn, $this, $level, $message, null, $throwable); - $this->callAppenders($event); - } - - // Forward the event upstream if additivity is turned on - if (isset($this->parent) && $this->getAdditivity()) { - - // Use the event if already created - if (isset($event)) { - $this->parent->logEvent($event); - } else { - $this->parent->log($level, $message, $throwable); - } - } - } - - /** - * Logs an already prepared logging event object. - * @param LoggerLoggingEvent $event - */ - public function logEvent(LoggerLoggingEvent $event) { - if ($this->isEnabledFor($event->getLevel())) { - $this->callAppenders($event); - } - - // Forward the event upstream if additivity is turned on - if (isset($this->parent) && $this->getAdditivity()) { - $this->parent->logEvent($event); - } - } - - /** - * If assertion parameter evaluates as false, then logs the message - * using the ERROR level. - * - * @param bool $assertion - * @param string $msg message to log - */ - public function assertLog($assertion = true, $msg = '') { - if ($assertion == false) { - $this->error($msg); - } - } - - /** - * This method creates a new logging event and logs the event without - * further checks. - * - * It should not be called directly. Use {@link trace()}, {@link debug()}, - * {@link info()}, {@link warn()}, {@link error()} and {@link fatal()} - * wrappers. - * - * @param string $fqcn Fully qualified class name of the Logger - * @param Exception $throwable Optional throwable information to include - * in the logging event. - * @param LoggerLevel $level log level - * @param mixed $message message to log - */ - public function forcedLog($fqcn, $throwable, LoggerLevel $level, $message) { - $event = new LoggerLoggingEvent($fqcn, $this, $level, $message, null, $throwable); - $this->callAppenders($event); - - // Forward the event upstream if additivity is turned on - if (isset($this->parent) && $this->getAdditivity()) { - $this->parent->logEvent($event); - } - } - - /** - * Forwards the given logging event to all linked appenders. - * @param LoggerLoggingEvent $event - */ - public function callAppenders($event) { - foreach ($this->appenders as $appender) { - $appender->doAppend($event); - } - } - - // ****************************************** - // *** Checker methods *** - // ****************************************** - - /** - * Check whether this Logger is enabled for a given Level passed as parameter. - * - * @param LoggerLevel level - * @return boolean - */ - public function isEnabledFor(LoggerLevel $level) { - return $level->isGreaterOrEqual($this->getEffectiveLevel()); - } - - /** - * Check whether this Logger is enabled for the TRACE Level. - * @return boolean - */ - public function isTraceEnabled() { - return $this->isEnabledFor(LoggerLevel::getLevelTrace()); - } - - /** - * Check whether this Logger is enabled for the DEBUG Level. - * @return boolean - */ - public function isDebugEnabled() { - return $this->isEnabledFor(LoggerLevel::getLevelDebug()); - } - - /** - * Check whether this Logger is enabled for the INFO Level. - * @return boolean - */ - public function isInfoEnabled() { - return $this->isEnabledFor(LoggerLevel::getLevelInfo()); - } - - /** - * Check whether this Logger is enabled for the WARN Level. - * @return boolean - */ - public function isWarnEnabled() { - return $this->isEnabledFor(LoggerLevel::getLevelWarn()); - } - - /** - * Check whether this Logger is enabled for the ERROR Level. - * @return boolean - */ - public function isErrorEnabled() { - return $this->isEnabledFor(LoggerLevel::getLevelError()); - } - - /** - * Check whether this Logger is enabled for the FATAL Level. - * @return boolean - */ - public function isFatalEnabled() { - return $this->isEnabledFor(LoggerLevel::getLevelFatal()); - } - - // ****************************************** - // *** Configuration methods *** - // ****************************************** - - /** - * Adds a new appender to the Logger. - * @param LoggerAppender $appender The appender to add. - */ - public function addAppender($appender) { - $appenderName = $appender->getName(); - $this->appenders[$appenderName] = $appender; - } - - /** Removes all appenders from the Logger. */ - public function removeAllAppenders() { - foreach ($this->appenders as $name => $appender) { - $this->removeAppender($name); - } - } - - /** - * Remove the appender passed as parameter form the Logger. - * @param mixed $appender an appender name or a {@link LoggerAppender} instance. - */ - public function removeAppender($appender) { - if ($appender instanceof LoggerAppender) { - $appender->close(); - unset($this->appenders[$appender->getName()]); - } else if (is_string($appender) and isset($this->appenders[$appender])) { - $this->appenders[$appender]->close(); - unset($this->appenders[$appender]); - } - } - - /** - * Returns the appenders linked to this logger as an array. - * @return array collection of appender names - */ - public function getAllAppenders() { - return $this->appenders; - } - - /** - * Returns a linked appender by name. - * @return LoggerAppender - */ - public function getAppender($name) { - return $this->appenders[$name]; - } - - /** - * Sets the additivity flag. - * @param boolean $additive - */ - public function setAdditivity($additive) { - $this->additive = (bool)$additive; - } - - /** - * Returns the additivity flag. - * @return boolean - */ - public function getAdditivity() { - return $this->additive; - } - - /** - * Starting from this Logger, search the Logger hierarchy for a non-null level and return it. - * @see LoggerLevel - * @return LoggerLevel or null - */ - public function getEffectiveLevel() { - for ($logger = $this; $logger !== null; $logger = $logger->getParent()) { - if ($logger->getLevel() !== null) { - return $logger->getLevel(); - } - } - } - - /** - * Get the assigned Logger level. - * @return LoggerLevel The assigned level or null if none is assigned. - */ - public function getLevel() { - return $this->level; - } - - /** - * Set the Logger level. - * - * Use LoggerLevel::getLevelXXX() methods to get a LoggerLevel object, e.g. - * <code>$logger->setLevel(LoggerLevel::getLevelInfo());</code> - * - * @param LoggerLevel $level The level to set, or NULL to clear the logger level. - */ - public function setLevel(LoggerLevel $level = null) { - $this->level = $level; - } - - /** - * Checks whether an appender is attached to this logger instance. - * - * @param LoggerAppender $appender - * @return boolean - */ - public function isAttached(LoggerAppender $appender) { - return isset($this->appenders[$appender->getName()]); - } - - /** - * Sets the parent logger. - * @param Logger $logger - */ - public function setParent(Logger $logger) { - $this->parent = $logger; - } - - // ****************************************** - // *** Static methods and properties *** - // ****************************************** - - /** The logger hierarchy used by log4php. */ - private static $hierarchy; - - /** Inidicates if log4php has been initialized */ - private static $initialized = false; - - /** - * Returns the hierarchy used by this Logger. - * - * Caution: do not use this hierarchy unless you have called initialize(). - * To get Loggers, use the Logger::getLogger and Logger::getRootLogger - * methods instead of operating on on the hierarchy directly. - * - * @return LoggerHierarchy - */ - public static function getHierarchy() { - if (!isset(self::$hierarchy)) { - self::$hierarchy = new LoggerHierarchy(new LoggerRoot()); - } - return self::$hierarchy; - } - - /** - * Returns a Logger by name. If it does not exist, it will be created. - * - * @param string $name The logger name - * @return Logger - */ - public static function getLogger($name) { - if (!self::isInitialized()) { - self::configure(); - } - return self::getHierarchy()->getLogger($name); - } - - /** - * Returns the Root Logger. - * @return LoggerRoot - */ - public static function getRootLogger() { - if (!self::isInitialized()) { - self::configure(); - } - return self::getHierarchy()->getRootLogger(); - } - - /** - * Clears all Logger definitions from the logger hierarchy. - * @return boolean - */ - public static function clear() { - return self::getHierarchy()->clear(); - } - - /** - * Destroy configurations for logger definitions - */ - public static function resetConfiguration() { - self::getHierarchy()->resetConfiguration(); - self::getHierarchy()->clear(); // TODO: clear or not? - self::$initialized = false; - } - - /** - * Safely close all appenders. - * @deprecated This is no longer necessary due the appenders shutdown via - * destructors. - */ - public static function shutdown() { - return self::getHierarchy()->shutdown(); - } - - /** - * check if a given logger exists. - * - * @param string $name logger name - * @return boolean - */ - public static function exists($name) { - return self::getHierarchy()->exists($name); - } - - /** - * Returns an array this whole Logger instances. - * @see Logger - * @return array - */ - public static function getCurrentLoggers() { - return self::getHierarchy()->getCurrentLoggers(); - } - - /** - * Configures log4php. - * - * This method needs to be called before the first logging event has - * occured. If this method is not called before then the default - * configuration will be used. - * - * @param string|array $configuration Either a path to the configuration - * file, or a configuration array. - * - * @param string|LoggerConfigurator $configurator A custom - * configurator class: either a class name (string), or an object which - * implements the LoggerConfigurator interface. If left empty, the default - * configurator implementation will be used. - */ - public static function configure($configuration = null, $configurator = null) { - self::resetConfiguration(); - $configurator = self::getConfigurator($configurator); - $configurator->configure(self::getHierarchy(), $configuration); - self::$initialized = true; - } - - /** - * Creates a logger configurator instance based on the provided - * configurator class. If no class is given, returns an instance of - * the default configurator. - * - * @param string|LoggerConfigurator $configurator The configurator class - * or LoggerConfigurator instance. - */ - private static function getConfigurator($configurator = null) { - if ($configurator === null) { - return new LoggerConfiguratorDefault(); - } - - if (is_object($configurator)) { - if ($configurator instanceof LoggerConfigurator) { - return $configurator; - } else { - trigger_error("log4php: Given configurator object [$configurator] does not implement the LoggerConfigurator interface. Reverting to default configurator.", E_USER_WARNING); - return new LoggerConfiguratorDefault(); - } - } - - if (is_string($configurator)) { - if (!class_exists($configurator)) { - trigger_error("log4php: Specified configurator class [$configurator] does not exist. Reverting to default configurator.", E_USER_WARNING); - return new LoggerConfiguratorDefault(); - } - - $instance = new $configurator(); - - if (!($instance instanceof LoggerConfigurator)) { - trigger_error("log4php: Specified configurator class [$configurator] does not implement the LoggerConfigurator interface. Reverting to default configurator.", E_USER_WARNING); - return new LoggerConfiguratorDefault(); - } - - return $instance; - } - - trigger_error("log4php: Invalid configurator specified. Expected either a string or a LoggerConfigurator instance. Reverting to default configurator.", E_USER_WARNING); - return new LoggerConfiguratorDefault(); - } - - /** - * Returns true if the log4php framework has been initialized. - * @return boolean - */ - private static function isInitialized() { - return self::$initialized; - } -} diff --git a/library/log4php/LoggerAppender.php b/library/log4php/LoggerAppender.php deleted file mode 100644 --- a/library/log4php/LoggerAppender.php +++ /dev/null @@ -1,289 +0,0 @@ -<?php -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * @package log4php - */ - -/** - * Abstract class that defines output logs strategies. - * - * @version $Revision: 1374777 $ - * @package log4php - */ -abstract class LoggerAppender extends LoggerConfigurable { - - /** - * Set to true when the appender is closed. A closed appender will not - * accept any logging requests. - * @var boolean - */ - protected $closed = false; - - /** - * The first filter in the filter chain. - * @var LoggerFilter - */ - protected $filter; - - /** - * The appender's layout. Can be null if the appender does not use - * a layout. - * @var LoggerLayout - */ - protected $layout; - - /** - * Appender name. Used by other components to identify this appender. - * @var string - */ - protected $name; - - /** - * Appender threshold level. Events whose level is below the threshold - * will not be logged. - * @var LoggerLevel - */ - protected $threshold; - - /** - * Set to true if the appender requires a layout. - * - * True by default, appenders which do not use a layout should override - * this property to false. - * - * @var boolean - */ - protected $requiresLayout = true; - - /** - * Default constructor. - * @param string $name Appender name - */ - public function __construct($name = '') { - $this->name = $name; - - if ($this->requiresLayout) { - $this->layout = $this->getDefaultLayout(); - } - } - - public function __destruct() { - $this->close(); - } - - /** - * Returns the default layout for this appender. Can be overriden by - * derived appenders. - * - * @return LoggerLayout - */ - public function getDefaultLayout() { - return new LoggerLayoutSimple(); - } - - /** - * Adds a filter to the end of the filter chain. - * @param LoggerFilter $filter add a new LoggerFilter - */ - public function addFilter($filter) { - if ($this->filter === null) { - $this->filter = $filter; - } else { - $this->filter->addNext($filter); - } - } - - /** - * Clears the filter chain by removing all the filters in it. - */ - public function clearFilters() { - $this->filter = null; - } - - /** - * Returns the first filter in the filter chain. - * The return value may be <i>null</i> if no is filter is set. - * @return LoggerFilter - */ - public function getFilter() { - return $this->filter; - } - - /** - * Returns the first filter in the filter chain. - * The return value may be <i>null</i> if no is filter is set. - * @return LoggerFilter - */ - public function getFirstFilter() { - return $this->filter; - } - - /** - * Performs threshold checks and invokes filters before delegating logging - * to the subclass' specific <i>append()</i> method. - * @see LoggerAppender::append() - * @param LoggerLoggingEvent $event - */ - public function doAppend(LoggerLoggingEvent $event) { - if ($this->closed) { - return; - } - - if (!$this->isAsSevereAsThreshold($event->getLevel())) { - return; - } - - $filter = $this->getFirstFilter(); - while ($filter !== null) { - switch ($filter->decide($event)) { - case LoggerFilter::DENY: - return; - case LoggerFilter::ACCEPT: - return $this->append($event); - case LoggerFilter::NEUTRAL: - $filter = $filter->getNext(); - } - } - $this->append($event); - } - - /** - * Sets the appender layout. - * @param LoggerLayout $layout - */ - public function setLayout($layout) { - if ($this->requiresLayout()) { - $this->layout = $layout; - } - } - - /** - * Returns the appender layout. - * @return LoggerLayout - */ - public function getLayout() { - return $this->layout; - } - - /** - * Configurators call this method to determine if the appender - * requires a layout. - * - * <p>If this method returns <i>true</i>, meaning that layout is required, - * then the configurator will configure a layout using the configuration - * information at its disposal. If this method returns <i>false</i>, - * meaning that a layout is not required, then layout configuration will be - * skipped even if there is available layout configuration - * information at the disposal of the configurator.</p> - * - * <p>In the rather exceptional case, where the appender - * implementation admits a layout but can also work without it, then - * the appender should return <i>true</i>.</p> - * - * @return boolean - */ - public function requiresLayout() { - return $this->requiresLayout; - } - - /** - * Retruns the appender name. - * @return string - */ - public function getName() { - return $this->name; - } - - /** - * Sets the appender name. - * @param string $name - */ - public function setName($name) { - $this->name = $name; - } - - /** - * Returns the appender's threshold level. - * @return LoggerLevel - */ - public function getThreshold() { - return $this->threshold; - } - - /** - * Sets the appender threshold. - * - * @param LoggerLevel|string $threshold Either a {@link LoggerLevel} - * object or a string equivalent. - * @see LoggerOptionConverter::toLevel() - */ - public function setThreshold($threshold) { - $this->setLevel('threshold', $threshold); - } - - /** - * Checks whether the message level is below the appender's threshold. - * - * If there is no threshold set, then the return value is always <i>true</i>. - * - * @param LoggerLevel $level - * @return boolean Returns true if level is greater or equal than - * threshold, or if the threshold is not set. Otherwise returns false. - */ - public function isAsSevereAsThreshold($level) { - if ($this->threshold === null) { - return true; - } - return $level->isGreaterOrEqual($this->getThreshold()); - } - - /** - * Prepares the appender for logging. - * - * Derived appenders should override this method if option structure - * requires it. - */ - public function activateOptions() { - $this->closed = false; - } - - /** - * Forwards the logging event to the destination. - * - * Derived appenders should implement this method to perform actual logging. - * - * @param LoggerLoggingEvent $event - */ - abstract protected function append(LoggerLoggingEvent $event); - - /** - * Releases any resources allocated by the appender. - * - * Derived appenders should override this method to perform proper closing - * procedures. - */ - public function close() { - $this->closed = true; - } - - /** Triggers a warning for this logger with the given message. */ - protected function warn($message) { - $id = get_class($this) . (empty($this->name) ? '' : ":{$this->name}"); - trigger_error("log4php: [$id]: $message", E_USER_WARNING); - } - -} diff --git a/library/log4php/LoggerAppenderPool.php b/library/log4php/LoggerAppenderPool.php deleted file mode 100644 --- a/library/log4php/LoggerAppenderPool.php +++ /dev/null @@ -1,98 +0,0 @@ -<?php -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * @package log4php - */ - -/** - * Pool implmentation for LoggerAppender instances. - * - * The pool is used when configuring log4php. First all appender instances - * are created in the pool. Afterward, they are linked to loggers, each - * appender can be linked to multiple loggers. This makes sure duplicate - * appenders are not created. - * - * @version $Revision: 1350602 $ - * @package log4php - */ -class LoggerAppenderPool { - - /** Holds appenders indexed by their name */ - public static $appenders = array(); - - /** - * Adds an appender to the pool. - * The appender must be named for this operation. - * @param LoggerAppender $appender - */ - public static function add(LoggerAppender $appender) { - $name = $appender->getName(); - - if (empty($name)) { - trigger_error('log4php: Cannot add unnamed appender to pool.', E_USER_WARNING); - return; - } - - if (isset(self::$appenders[$name])) { - trigger_error("log4php: Appender [$name] already exists in pool. Overwriting existing appender.", E_USER_WARNING); - } - - self::$appenders[$name] = $appender; - } - - /** - * Retrieves an appender from the pool by name. - * @param string $name Name of the appender to retrieve. - * @return LoggerAppender The named appender or NULL if no such appender - * exists in the pool. - */ - public static function get($name) { - return isset(self::$appenders[$name]) ? self::$appenders[$name] : null; - } - - /** - * Removes an appender from the pool by name. - * @param string $name Name of the appender to remove. - */ - public static function delete($name) { - unset(self::$appenders[$name]); - } - - /** - * Returns all appenders from the pool. - * @return array Array of LoggerAppender objects. - */ - public static function getAppenders() { - return self::$appenders; - } - - /** - * Checks whether an appender exists in the pool. - * @param string $name Name of the appender to look for. - * @return boolean TRUE if the appender with the given name exists. - */ - public static function exists($name) { - return isset(self::$appenders[$name]); - } - - /** - * Clears all appenders from the pool. - */ - public static function clear() { - self::$appenders = array(); - } -} \ No newline at end of file diff --git a/library/log4php/LoggerAutoloader.php b/library/log4php/LoggerAutoloader.php deleted file mode 100644 --- a/library/log4php/LoggerAutoloader.php +++ /dev/null @@ -1,142 +0,0 @@ -<?php -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * @package log4php - */ - -if (function_exists('__autoload')) { - trigger_error("log4php: It looks like your code is using an __autoload() function. log4php uses spl_autoload_register() which will bypass your __autoload() function and may break autoloading.", E_USER_WARNING); -} - -spl_autoload_register(array('LoggerAutoloader', 'autoload')); - -/** - * Class autoloader. - * - * @package log4php - * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0 - * @version $Revision: 1394956 $ - */ -class LoggerAutoloader { - - /** Maps classnames to files containing the class. */ - private static $classes = array( - - // Base - 'LoggerAppender' => '/LoggerAppender.php', - 'LoggerAppenderPool' => '/LoggerAppenderPool.php', - 'LoggerConfigurable' => '/LoggerConfigurable.php', - 'LoggerConfigurator' => '/LoggerConfigurator.php', - 'LoggerException' => '/LoggerException.php', - 'LoggerFilter' => '/LoggerFilter.php', - 'LoggerHierarchy' => '/LoggerHierarchy.php', - 'LoggerLevel' => '/LoggerLevel.php', - 'LoggerLocationInfo' => '/LoggerLocationInfo.php', - 'LoggerLoggingEvent' => '/LoggerLoggingEvent.php', - 'LoggerMDC' => '/LoggerMDC.php', - 'LoggerNDC' => '/LoggerNDC.php', - 'LoggerLayout' => '/LoggerLayout.php', - 'LoggerReflectionUtils' => '/LoggerReflectionUtils.php', - 'LoggerRoot' => '/LoggerRoot.php', - 'LoggerThrowableInformation' => '/LoggerThrowableInformation.php', - - // Appenders - 'LoggerAppenderConsole' => '/appenders/LoggerAppenderConsole.php', - 'LoggerAppenderDailyFile' => '/appenders/LoggerAppenderDailyFile.php', - 'LoggerAppenderEcho' => '/appenders/LoggerAppenderEcho.php', - 'LoggerAppenderFile' => '/appenders/LoggerAppenderFile.php', - 'LoggerAppenderMail' => '/appenders/LoggerAppenderMail.php', - 'LoggerAppenderMailEvent' => '/appenders/LoggerAppenderMailEvent.php', - 'LoggerAppenderMongoDB' => '/appenders/LoggerAppenderMongoDB.php', - 'LoggerAppenderNull' => '/appenders/LoggerAppenderNull.php', - 'LoggerAppenderFirePHP' => '/appenders/LoggerAppenderFirePHP.php', - 'LoggerAppenderPDO' => '/appenders/LoggerAppenderPDO.php', - 'LoggerAppenderPhp' => '/appenders/LoggerAppenderPhp.php', - 'LoggerAppenderRollingFile' => '/appenders/LoggerAppenderRollingFile.php', - 'LoggerAppenderSocket' => '/appenders/LoggerAppenderSocket.php', - 'LoggerAppenderSyslog' => '/appenders/LoggerAppenderSyslog.php', - - // Configurators - 'LoggerConfigurationAdapter' => '/configurators/LoggerConfigurationAdapter.php', - 'LoggerConfigurationAdapterINI' => '/configurators/LoggerConfigurationAdapterINI.php', - 'LoggerConfigurationAdapterPHP' => '/configurators/LoggerConfigurationAdapterPHP.php', - 'LoggerConfigurationAdapterXML' => '/configurators/LoggerConfigurationAdapterXML.php', - 'LoggerConfiguratorDefault' => '/configurators/LoggerConfiguratorDefault.php', - - // Filters - 'LoggerFilterDenyAll' => '/filters/LoggerFilterDenyAll.php', - 'LoggerFilterLevelMatch' => '/filters/LoggerFilterLevelMatch.php', - 'LoggerFilterLevelRange' => '/filters/LoggerFilterLevelRange.php', - 'LoggerFilterStringMatch' => '/filters/LoggerFilterStringMatch.php', - - // Helpers - 'LoggerFormattingInfo' => '/helpers/LoggerFormattingInfo.php', - 'LoggerOptionConverter' => '/helpers/LoggerOptionConverter.php', - 'LoggerPatternParser' => '/helpers/LoggerPatternParser.php', - 'LoggerUtils' => '/helpers/LoggerUtils.php', - - // Pattern converters - 'LoggerPatternConverter' => '/pattern/LoggerPatternConverter.php', - 'LoggerPatternConverterClass' => '/pattern/LoggerPatternConverterClass.php', - 'LoggerPatternConverterCookie' => '/pattern/LoggerPatternConverterCookie.php', - 'LoggerPatternConverterDate' => '/pattern/LoggerPatternConverterDate.php', - 'LoggerPatternConverterEnvironment' => '/pattern/LoggerPatternConverterEnvironment.php', - 'LoggerPatternConverterFile' => '/pattern/LoggerPatternConverterFile.php', - 'LoggerPatternConverterLevel' => '/pattern/LoggerPatternConverterLevel.php', - 'LoggerPatternConverterLine' => '/pattern/LoggerPatternConverterLine.php', - 'LoggerPatternConverterLiteral' => '/pattern/LoggerPatternConverterLiteral.php', - 'LoggerPatternConverterLocation' => '/pattern/LoggerPatternConverterLocation.php', - 'LoggerPatternConverterLogger' => '/pattern/LoggerPatternConverterLogger.php', - 'LoggerPatternConverterMDC' => '/pattern/LoggerPatternConverterMDC.php', - 'LoggerPatternConverterMessage' => '/pattern/LoggerPatternConverterMessage.php', - 'LoggerPatternConverterMethod' => '/pattern/LoggerPatternConverterMethod.php', - 'LoggerPatternConverterNDC' => '/pattern/LoggerPatternConverterNDC.php', - 'LoggerPatternConverterNewLine' => '/pattern/LoggerPatternConverterNewLine.php', - 'LoggerPatternConverterProcess' => '/pattern/LoggerPatternConverterProcess.php', - 'LoggerPatternConverterRelative' => '/pattern/LoggerPatternConverterRelative.php', - 'LoggerPatternConverterRequest' => '/pattern/LoggerPatternConverterRequest.php', - 'LoggerPatternConverterServer' => '/pattern/LoggerPatternConverterServer.php', - 'LoggerPatternConverterSession' => '/pattern/LoggerPatternConverterSession.php', - 'LoggerPatternConverterSessionID' => '/pattern/LoggerPatternConverterSessionID.php', - 'LoggerPatternConverterSuperglobal' => '/pattern/LoggerPatternConverterSuperglobal.php', - 'LoggerPatternConverterThrowable' => '/pattern/LoggerPatternConverterThrowable.php', - - // Layouts - 'LoggerLayoutHtml' => '/layouts/LoggerLayoutHtml.php', - 'LoggerLayoutPattern' => '/layouts/LoggerLayoutPattern.php', - 'LoggerLayoutSerialized' => '/layouts/LoggerLayoutSerialized.php', - 'LoggerLayoutSimple' => '/layouts/LoggerLayoutSimple.php', - 'LoggerLayoutTTCC' => '/layouts/LoggerLayoutTTCC.php', - 'LoggerLayoutXml' => '/layouts/LoggerLayoutXml.php', - - // Renderers - 'LoggerRendererDefault' => '/renderers/LoggerRendererDefault.php', - 'LoggerRendererException' => '/renderers/LoggerRendererException.php', - 'LoggerRendererMap' => '/renderers/LoggerRendererMap.php', - 'LoggerRenderer' => '/renderers/LoggerRenderer.php', - ); - - /** - * Loads a class. - * @param string $className The name of the class to load. - */ - public static function autoload($className) { - if (isset(self::$classes[$className])) { - include dirname(__FILE__) . self::$classes[$className]; - } - } -} diff --git a/library/log4php/LoggerConfigurable.php b/library/log4php/LoggerConfigurable.php deleted file mode 100644 --- a/library/log4php/LoggerConfigurable.php +++ /dev/null @@ -1,116 +0,0 @@ -<?php -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * @package log4php - */ - -/** - * A base class from which all classes which have configurable properties are - * extended. Provides a generic setter with integrated validation. - * - * @package log4php - * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0 - * @version $Revision $ - * @since 2.2 - */ -abstract class LoggerConfigurable { - - /** Setter function for boolean type. */ - protected function setBoolean($property, $value) { - try { - $this->$property = LoggerOptionConverter::toBooleanEx($value); - } catch (Exception $ex) { - $value = var_export($value, true); - $this->warn("Invalid value given for '$property' property: [$value]. Expected a boolean value. Property not changed."); - } - } - - /** Setter function for integer type. */ - protected function setInteger($property, $value) { - try { - $this->$property = LoggerOptionConverter::toIntegerEx($value); - } catch (Exception $ex) { - $value = var_export($value, true); - $this->warn("Invalid value given for '$property' property: [$value]. Expected an integer. Property not changed."); - } - } - - /** Setter function for LoggerLevel values. */ - protected function setLevel($property, $value) { - try { - $this->$property = LoggerOptionConverter::toLevelEx($value); - } catch (Exception $ex) { - $value = var_export($value, true); - $this->warn("Invalid value given for '$property' property: [$value]. Expected a level value. Property not changed."); - } - } - - /** Setter function for integer type. */ - protected function setPositiveInteger($property, $value) { - try { - $this->$property = LoggerOptionConverter::toPositiveIntegerEx($value); - } catch (Exception $ex) { - $value = var_export($value, true); - $this->warn("Invalid value given for '$property' property: [$value]. Expected a positive integer. Property not changed."); - } - } - - /** Setter for file size. */ - protected function setFileSize($property, $value) { - try { - $this->$property = LoggerOptionConverter::toFileSizeEx($value); - } catch (Exception $ex) { - $value = var_export($value, true); - $this->warn("Invalid value given for '$property' property: [$value]. Expected a file size value. Property not changed."); - } - } - - /** Setter function for numeric type. */ - protected function setNumeric($property, $value) { - try { - $this->$property = LoggerOptionConverter::toNumericEx($value); - } catch (Exception $ex) { - $value = var_export($value, true); - $this->warn("Invalid value given for '$property' property: [$value]. Expected a number. Property not changed."); - } - } - - /** Setter function for string type. */ - protected function setString($property, $value, $nullable = false) { - if ($value === null) { - if ($nullable) { - $this->$property = null; - } else { - $this->warn("Null value given for '$property' property. Expected a string. Property not changed."); - } - } else { - try { - $value = LoggerOptionConverter::toStringEx($value); - $this->$property = LoggerOptionConverter::substConstants($value); - } catch (Exception $ex) { - $value = var_export($value, true); - $this->warn("Invalid value given for '$property' property: [$value]. Expected a string. Property not changed."); - } - } - } - - /** Triggers a warning. */ - protected function warn($message) { - $class = get_class($this); - trigger_error("log4php: $class: $message", E_USER_WARNING); - } -} diff --git a/library/log4php/LoggerConfigurator.php b/library/log4php/LoggerConfigurator.php deleted file mode 100644 --- a/library/log4php/LoggerConfigurator.php +++ /dev/null @@ -1,41 +0,0 @@ -<?php -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * @package log4php - */ - -/** - * Interface for logger configurators. - * - * @package log4php - * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0 - * @version $Revision: 1213710 $ - * @since 2.2 - */ -interface LoggerConfigurator { - /** - * Configures log4php based on the given configuration. - * - * All configurators implementations must implement this interface. - * - * @param LoggerHierarchy $hierarchy The hierarchy on which to perform - * the configuration. - * @param mixed $input Either path to the config file or the - * configuration as an array. - */ - public function configure(LoggerHierarchy $hierarchy, $input = null); -} \ No newline at end of file diff --git a/library/log4php/LoggerException.php b/library/log4php/LoggerException.php deleted file mode 100644 --- a/library/log4php/LoggerException.php +++ /dev/null @@ -1,28 +0,0 @@ -<?php -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * @package log4php - */ - -/** - * LoggerException class - * - * @version $Revision: 1334369 $ - * @package log4php - */ -class LoggerException extends Exception { -} diff --git a/library/log4php/LoggerFilter.php b/library/log4php/LoggerFilter.php deleted file mode 100644 --- a/library/log4php/LoggerFilter.php +++ /dev/null @@ -1,126 +0,0 @@ -<?php -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * @package log4php - */ - -/** - * Users should extend this class to implement customized logging - * event filtering. Note that {@link LoggerCategory} and {@link LoggerAppender}, - * the parent class of all standard - * appenders, have built-in filtering rules. It is suggested that you - * first use and understand the built-in rules before rushing to write - * your own custom filters. - * - * <p>This abstract class assumes and also imposes that filters be - * organized in a linear chain. The {@link #decide - * decide(LoggerLoggingEvent)} method of each filter is called sequentially, - * in the order of their addition to the chain. - * - * <p>The {@link decide()} method must return one - * of the integer constants {@link LoggerFilter::DENY}, - * {@link LoggerFilter::NEUTRAL} or {@link LoggerFilter::ACCEPT}. - * - * <p>If the value {@link LoggerFilter::DENY} is returned, then the log event is - * dropped immediately without consulting with the remaining - * filters. - * - * <p>If the value {@link LoggerFilter::NEUTRAL} is returned, then the next filter - * in the chain is consulted. If there are no more filters in the - * chain, then the log event is logged. Thus, in the presence of no - * filters, the default behaviour is to log all logging events. - * - * <p>If the value {@link LoggerFilter::ACCEPT} is returned, then the log - * event is logged without consulting the remaining filters. - * - * <p>The philosophy of log4php filters is largely inspired from the - * Linux ipchains. - * - * @version $Revision: 1213283 $ - * @package log4php - */ -abstract class LoggerFilter extends LoggerConfigurable { - - /** - * The log event must be logged immediately without consulting with - * the remaining filters, if any, in the chain. - */ - const ACCEPT = 1; - - /** - * This filter is neutral with respect to the log event. The - * remaining filters, if any, should be consulted for a final decision. - */ - const NEUTRAL = 0; - - /** - * The log event must be dropped immediately without consulting - * with the remaining filters, if any, in the chain. - */ - const DENY = -1; - - /** - * @var LoggerFilter Points to the next {@link LoggerFilter} in the filter chain. - */ - protected $next; - - /** - * Usually filters options become active when set. We provide a - * default do-nothing implementation for convenience. - */ - public function activateOptions() { - } - - /** - * Decide what to do. - * <p>If the decision is {@link LoggerFilter::DENY}, then the event will be - * dropped. If the decision is {@link LoggerFilter::NEUTRAL}, then the next - * filter, if any, will be invoked. If the decision is {@link LoggerFilter::ACCEPT} then - * the event will be logged without consulting with other filters in - * the chain. - * - * @param LoggerLoggingEvent $event The {@link LoggerLoggingEvent} to decide upon. - * @return integer {@link LoggerFilter::NEUTRAL} or {@link LoggerFilter::DENY}|{@link LoggerFilter::ACCEPT} - */ - public function decide(LoggerLoggingEvent $event) { - return self::NEUTRAL; - } - - /** - * Adds a new filter to the filter chain this filter is a part of. - * If this filter has already and follow up filter, the param filter - * is passed on until it is the last filter in chain. - * - * @param $filter - the filter to add to this chain - */ - public function addNext($filter) { - if ($this->next !== null) { - $this->next->addNext($filter); - } else { - $this->next = $filter; - } - } - - /** - * Returns the next filter in this chain - * @return the next filter - */ - public function getNext() { - return $this->next; - } - -} diff --git a/library/log4php/LoggerHierarchy.php b/library/log4php/LoggerHierarchy.php deleted file mode 100644 --- a/library/log4php/LoggerHierarchy.php +++ /dev/null @@ -1,257 +0,0 @@ -<?php -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * @package log4php - */ - -/** - * This class is specialized in retrieving loggers by name and also maintaining - * the logger hierarchy. The logger hierarchy is dealing with the several Log-Levels - * Logger can have. From log4j website: - * - * "A logger is said to be an ancestor of another logger if its name followed - * by a dot is a prefix of the descendant logger name. A logger is said to be - * a parent of a child logger if there are no ancestors between itself and the - * descendant logger." - * - * Child Loggers do inherit their Log-Levels from their Ancestors. They can - * increase their Log-Level compared to their Ancestors, but they cannot decrease it. - * - * <p>The casual user does not have to deal with this class directly.</p> - * - * <p>The structure of the logger hierarchy is maintained by the - * getLogger method. The hierarchy is such that children link - * to their parent but parents do not have any pointers to their - * children. Moreover, loggers can be instantiated in any order, in - * particular descendant before ancestor.</p> - * - * <p>In case a descendant is created before a particular ancestor, - * then it creates a provision node for the ancestor and adds itself - * to the provision node. Other descendants of the same ancestor add - * themselves to the previously created provision node.</p> - * - * @version $Revision: 1394956 $ - * @package log4php - */ -class LoggerHierarchy { - - /** Array holding all Logger instances. */ - protected $loggers = array(); - - /** - * The root logger. - * @var RootLogger - */ - protected $root; - - /** - * The logger renderer map. - * @var LoggerRendererMap - */ - protected $rendererMap; - - /** - * Main level threshold. Events with lower level will not be logged by any - * logger, regardless of it's configuration. - * @var LoggerLevel - */ - protected $threshold; - - /** - * Creates a new logger hierarchy. - * @param LoggerRoot $root The root logger. - */ - public function __construct(LoggerRoot $root) { - $this->root = $root; - $this->setThreshold(LoggerLevel::getLevelAll()); - $this->rendererMap = new LoggerRendererMap(); - } - - /** - * Clears all loggers. - */ - public function clear() { - $this->loggers = array(); - } - - /** - * Check if the named logger exists in the hierarchy. - * @param string $name - * @return boolean - */ - public function exists($name) { - return isset($this->loggers[$name]); - } - - /** - * Returns all the currently defined loggers in this hierarchy as an array. - * @return array - */ - public function getCurrentLoggers() { - return array_values($this->loggers); - } - - /** - * Returns a named logger instance logger. If it doesn't exist, one is created. - * - * @param string $name Logger name - * @return Logger Logger instance. - */ - public function getLogger($name) { - if (!isset($this->loggers[$name])) { - $logger = new Logger($name); - - $nodes = explode('.', $name); - $firstNode = array_shift($nodes); - - // if name is not a first node but another first node is their - if ($firstNode != $name and isset($this->loggers[$firstNode])) { - $logger->setParent($this->loggers[$firstNode]); - } else { - // if there is no father, set root logger as father - $logger->setParent($this->root); - } - - // if there are more nodes than one - if (count($nodes) > 0) { - // find parent node - foreach ($nodes as $node) { - $parentNode = "$firstNode.$node"; - if (isset($this->loggers[$parentNode]) and $parentNode != $name) { - $logger->setParent($this->loggers[$parentNode]); - } - $firstNode .= ".$node"; - } - } - - $this->loggers[$name] = $logger; - } - - return $this->loggers[$name]; - } - - /** - * Returns the logger renderer map. - * @return LoggerRendererMap - */ - public function getRendererMap() { - return $this->rendererMap; - } - - /** - * Returns the root logger. - * @return LoggerRoot - */ - public function getRootLogger() { - return $this->root; - } - - /** - * Returns the main threshold level. - * @return LoggerLevel - */ - public function getThreshold() { - return $this->threshold; - } - - /** - * Returns true if the hierarchy is disabled for given log level and false - * otherwise. - * @return boolean - */ - public function isDisabled(LoggerLevel $level) { - return ($this->threshold->toInt() > $level->toInt()); - } - - /** - * Reset all values contained in this hierarchy instance to their - * default. - * - * This removes all appenders from all loggers, sets - * the level of all non-root loggers to <i>null</i>, - * sets their additivity flag to <i>true</i> and sets the level - * of the root logger to {@link LOGGER_LEVEL_DEBUG}. - * - * <p>Existing loggers are not removed. They are just reset. - * - * <p>This method should be used sparingly and with care as it will - * block all logging until it is completed.</p> - */ - public function resetConfiguration() { - $root = $this->getRootLogger(); - - $root->setLevel(LoggerLevel::getLevelDebug()); - $this->setThreshold(LoggerLevel::getLevelAll()); - $this->shutDown(); - - foreach ($this->loggers as $logger) { - $logger->setLevel(null); - $logger->setAdditivity(true); - $logger->removeAllAppenders(); - } - - $this->rendererMap->reset(); - LoggerAppenderPool::clear(); - } - - /** - * Sets the main threshold level. - * @param LoggerLevel $l - */ - public function setThreshold(LoggerLevel $threshold) { - $this->threshold = $threshold; - } - - /** - * Shutting down a hierarchy will <i>safely</i> close and remove - * all appenders in all loggers including the root logger. - * - * The shutdown method is careful to close nested - * appenders before closing regular appenders. This is allows - * configurations where a regular appender is attached to a logger - * and again to a nested appender. - * - * @todo Check if the last paragraph is correct. - */ - public function shutdown() { - $this->root->removeAllAppenders(); - - foreach ($this->loggers as $logger) { - $logger->removeAllAppenders(); - } - } - - /** - * Prints the current Logger hierarchy tree. Useful for debugging. - */ - public function printHierarchy() { - $this->printHierarchyInner($this->getRootLogger(), 0); - } - - private function printHierarchyInner(Logger $current, $level) { - for ($i = 0; $i < $level; $i++) { - echo ($i == $level - 1) ? "|--" : "| "; - } - echo $current->getName() . "\n"; - - foreach ($this->loggers as $logger) { - if ($logger->getParent() == $current) { - $this->printHierarchyInner($logger, $level + 1); - } - } - } -} diff --git a/library/log4php/LoggerLayout.php b/library/log4php/LoggerLayout.php deleted file mode 100644 --- a/library/log4php/LoggerLayout.php +++ /dev/null @@ -1,74 +0,0 @@ -<?php -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * @package log4php - */ - -/** - * Extend this abstract class to create your own log layout format. - * - * @version $Revision: 1213283 $ - * @package log4php - */ -abstract class LoggerLayout extends LoggerConfigurable { - /** - * Activates options for this layout. - * Override this method if you have options to be activated. - */ - public function activateOptions() { - return true; - } - - /** - * Override this method to create your own layout format. - * - * @param LoggerLoggingEvent - * @return string - */ - public function format(LoggerLoggingEvent $event) { - return $event->getRenderedMessage(); - } - - /** - * Returns the content type output by this layout. - * @return string - */ - public function getContentType() { - return "text/plain"; - } - - /** - * Returns the footer for the layout format. - * @return string - */ - public function getFooter() { - return null; - } - - /** - * Returns the header for the layout format. - * @return string - */ - public function getHeader() { - return null; - } - - /** Triggers a warning for this layout with the given message. */ - protected function warn($message) { - trigger_error("log4php: [" . get_class($this) . "]: $message", E_USER_WARNING); - } -} diff --git a/library/log4php/LoggerLevel.php b/library/log4php/LoggerLevel.php deleted file mode 100644 --- a/library/log4php/LoggerLevel.php +++ /dev/null @@ -1,274 +0,0 @@ -<?php -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * @package log4php - */ - -/** - * Defines the minimum set of levels recognized by the system, that is - * <i>OFF</i>, <i>FATAL</i>, <i>ERROR</i>, - * <i>WARN</i>, <i>INFO</i>, <i>DEBUG</i> and - * <i>ALL</i>. - * - * <p>The <i>LoggerLevel</i> class may be subclassed to define a larger - * level set.</p> - * - * @version $Revision: 1379729 $ - * @package log4php - * @since 0.5 - */ -class LoggerLevel { - - const OFF = 2147483647; - const FATAL = 50000; - const ERROR = 40000; - const WARN = 30000; - const INFO = 20000; - const DEBUG = 10000; - const TRACE = 5000; - const ALL = -2147483647; - - /** Integer level value. */ - private $level; - - /** Contains a list of instantiated levels. */ - private static $levelMap; - - /** String representation of the level. */ - private $levelStr; - - /** - * Equivalent syslog level. - * @var integer - */ - private $syslogEquivalent; - - /** - * Constructor - * - * @param integer $level - * @param string $levelStr - * @param integer $syslogEquivalent - */ - private function __construct($level, $levelStr, $syslogEquivalent) { - $this->level = $level; - $this->levelStr = $levelStr; - $this->syslogEquivalent = $syslogEquivalent; - } - - /** - * Compares two logger levels. - * - * @param LoggerLevels $other - * @return boolean - */ - public function equals($other) { - if ($other instanceof LoggerLevel) { - if ($this->level == $other->level) { - return true; - } - } else { - return false; - } - } - - /** - * Returns an Off Level - * @return LoggerLevel - */ - public static function getLevelOff() { - if (!isset(self::$levelMap[LoggerLevel::OFF])) { - self::$levelMap[LoggerLevel::OFF] = new LoggerLevel(LoggerLevel::OFF, 'OFF', LOG_ALERT); - } - return self::$levelMap[LoggerLevel::OFF]; - } - - /** - * Returns a Fatal Level - * @return LoggerLevel - */ - public static function getLevelFatal() { - if (!isset(self::$levelMap[LoggerLevel::FATAL])) { - self::$levelMap[LoggerLevel::FATAL] = new LoggerLevel(LoggerLevel::FATAL, 'FATAL', LOG_ALERT); - } - return self::$levelMap[LoggerLevel::FATAL]; - } - - /** - * Returns an Error Level - * @return LoggerLevel - */ - public static function getLevelError() { - if (!isset(self::$levelMap[LoggerLevel::ERROR])) { - self::$levelMap[LoggerLevel::ERROR] = new LoggerLevel(LoggerLevel::ERROR, 'ERROR', LOG_ERR); - } - return self::$levelMap[LoggerLevel::ERROR]; - } - - /** - * Returns a Warn Level - * @return LoggerLevel - */ - public static function getLevelWarn() { - if (!isset(self::$levelMap[LoggerLevel::WARN])) { - self::$levelMap[LoggerLevel::WARN] = new LoggerLevel(LoggerLevel::WARN, 'WARN', LOG_WARNING); - } - return self::$levelMap[LoggerLevel::WARN]; - } - - /** - * Returns an Info Level - * @return LoggerLevel - */ - public static function getLevelInfo() { - if (!isset(self::$levelMap[LoggerLevel::INFO])) { - self::$levelMap[LoggerLevel::INFO] = new LoggerLevel(LoggerLevel::INFO, 'INFO', LOG_INFO); - } - return self::$levelMap[LoggerLevel::INFO]; - } - - /** - * Returns a Debug Level - * @return LoggerLevel - */ - public static function getLevelDebug() { - if (!isset(self::$levelMap[LoggerLevel::DEBUG])) { - self::$levelMap[LoggerLevel::DEBUG] = new LoggerLevel(LoggerLevel::DEBUG, 'DEBUG', LOG_DEBUG); - } - return self::$levelMap[LoggerLevel::DEBUG]; - } - - /** - * Returns a Trace Level - * @return LoggerLevel - */ - public static function getLevelTrace() { - if (!isset(self::$levelMap[LoggerLevel::TRACE])) { - self::$levelMap[LoggerLevel::TRACE] = new LoggerLevel(LoggerLevel::TRACE, 'TRACE', LOG_DEBUG); - } - return self::$levelMap[LoggerLevel::TRACE]; - } - - /** - * Returns an All Level - * @return LoggerLevel - */ - public static function getLevelAll() { - if (!isset(self::$levelMap[LoggerLevel::ALL])) { - self::$levelMap[LoggerLevel::ALL] = new LoggerLevel(LoggerLevel::ALL, 'ALL', LOG_DEBUG); - } - return self::$levelMap[LoggerLevel::ALL]; - } - - /** - * Return the syslog equivalent of this level as an integer. - * @return integer - */ - public function getSyslogEquivalent() { - return $this->syslogEquivalent; - } - - /** - * Returns <i>true</i> if this level has a higher or equal - * level than the level passed as argument, <i>false</i> - * otherwise. - * - * @param LoggerLevel $other - * @return boolean - */ - public function isGreaterOrEqual($other) { - return $this->level >= $other->level; - } - - /** - * Returns the string representation of this level. - * @return string - */ - public function toString() { - return $this->levelStr; - } - - /** - * Returns the string representation of this level. - * @return string - */ - public function __toString() { - return $this->toString(); - } - - /** - * Returns the integer representation of this level. - * @return integer - */ - public function toInt() { - return $this->level; - } - - /** - * Convert the input argument to a level. If the conversion fails, then - * this method returns the provided default level. - * - * @param mixed $arg The value to convert to level. - * @param LoggerLevel $default Value to return if conversion is not possible. - * @return LoggerLevel - */ - public static function toLevel($arg, $defaultLevel = null) { - if (is_int($arg)) { - switch ($arg) { - case self::ALL: - return self::getLevelAll(); - case self::TRACE: - return self::getLevelTrace(); - case self::DEBUG: - return self::getLevelDebug(); - case self::INFO: - return self::getLevelInfo(); - case self::WARN: - return self::getLevelWarn(); - case self::ERROR: - return self::getLevelError(); - case self::FATAL: - return self::getLevelFatal(); - case self::OFF: - return self::getLevelOff(); - default: - return $defaultLevel; - } - } else { - switch (strtoupper($arg)) { - case 'ALL': - return self::getLevelAll(); - case 'TRACE': - return self::getLevelTrace(); - case 'DEBUG': - return self::getLevelDebug(); - case 'INFO': - return self::getLevelInfo(); - case 'WARN': - return self::getLevelWarn(); - case 'ERROR': - return self::getLevelError(); - case 'FATAL': - return self::getLevelFatal(); - case 'OFF': - return self::getLevelOff(); - default: - return $defaultLevel; - } - } - } -} diff --git a/library/log4php/LoggerLocationInfo.php b/library/log4php/LoggerLocationInfo.php deleted file mode 100644 --- a/library/log4php/LoggerLocationInfo.php +++ /dev/null @@ -1,103 +0,0 @@ -<?php -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * @package log4php - */ - -/** - * The internal representation of caller location information. - * - * @version $Revision: 1379738 $ - * @package log4php - * @since 0.3 - */ -class LoggerLocationInfo { - - /** The value to return when the location information is not available. */ - const LOCATION_INFO_NA = 'NA'; - - /** - * Caller line number. - * @var integer - */ - protected $lineNumber; - - /** - * Caller file name. - * @var string - */ - protected $fileName; - - /** - * Caller class name. - * @var string - */ - protected $className; - - /** - * Caller method name. - * @var string - */ - protected $methodName; - - /** - * All the information combined. - * @var string - */ - protected $fullInfo; - - /** - * Instantiate location information based on a {@link PHP_MANUAL#debug_backtrace}. - * - * @param array $trace - * @param mixed $caller - */ - public function __construct($trace, $fqcn = null) { - $this->lineNumber = isset($trace['line']) ? $trace['line'] : null; - $this->fileName = isset($trace['file']) ? $trace['file'] : null; - $this->className = isset($trace['class']) ? $trace['class'] : null; - $this->methodName = isset($trace['function']) ? $trace['function'] : null; - $this->fullInfo = $this->getClassName() . '.' . $this->getMethodName() . - '(' . $this->getFileName() . ':' . $this->getLineNumber() . ')'; - } - - /** Returns the caller class name. */ - public function getClassName() { - return ($this->className === null) ? self::LOCATION_INFO_NA : $this->className; - } - - /** Returns the caller file name. */ - public function getFileName() { - return ($this->fileName === null) ? self::LOCATION_INFO_NA : $this->fileName; - } - - /** Returns the caller line number. */ - public function getLineNumber() { - return ($this->lineNumber === null) ? self::LOCATION_INFO_NA : $this->lineNumber; - } - - /** Returns the caller method name. */ - public function getMethodName() { - return ($this->methodName === null) ? self::LOCATION_INFO_NA : $this->methodName; - } - - /** Returns the full information of the caller. */ - public function getFullInfo() { - return ($this->fullInfo === null) ? self::LOCATION_INFO_NA : $this->fullInfo; - } - -} diff --git a/library/log4php/LoggerLoggingEvent.php b/library/log4php/LoggerLoggingEvent.php deleted file mode 100644 --- a/library/log4php/LoggerLoggingEvent.php +++ /dev/null @@ -1,370 +0,0 @@ -<?php -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * @package log4php - */ - -/** - * The internal representation of logging event. - * - * @version $Revision: 1382273 $ - * @package log4php - */ -class LoggerLoggingEvent { - - private static $startTime; - - /** - * @var string Fully Qualified Class Name of the calling category class. - */ - private $fqcn; - - /** - * @var Logger reference - */ - private $logger; - - /** - * The category (logger) name. - * This field will be marked as private in future - * releases. Please do not access it directly. - * Use the {@link getLoggerName()} method instead. - * @deprecated - */ - private $categoryName; - - /** - * Level of the logging event. - * @var LoggerLevel - */ - protected $level; - - /** - * The nested diagnostic context (NDC) of logging event. - * @var string - */ - private $ndc; - - /** - * Have we tried to do an NDC lookup? If we did, there is no need - * to do it again. Note that its value is always false when - * serialized. Thus, a receiving SocketNode will never use it's own - * (incorrect) NDC. See also writeObject method. - * @var boolean - */ - private $ndcLookupRequired = true; - - /** - * @var mixed The application supplied message of logging event. - */ - private $message; - - /** - * The application supplied message rendered through the log4php - * objet rendering mechanism. At present renderedMessage == message. - * @var string - */ - private $renderedMessage; - - /** - * The name of thread in which this logging event was generated. - * log4php saves here the process id via {@link PHP_MANUAL#getmypid getmypid()} - * @var mixed - */ - private $threadName; - - /** - * The number of seconds elapsed from 1/1/1970 until logging event - * was created plus microseconds if available. - * @var float - */ - public $timeStamp; - - /** - * @var LoggerLocationInfo Location information for the caller. - */ - private $locationInfo; - - /** - * @var LoggerThrowableInformation log4php internal representation of throwable - */ - private $throwableInfo; - - /** - * Instantiate a LoggingEvent from the supplied parameters. - * - * Except {@link $timeStamp} all the other fields of - * LoggerLoggingEvent are filled when actually needed. - * - * @param string $fqcn name of the caller class. - * @param mixed $logger The {@link Logger} category of this event or the logger name. - * @param LoggerLevel $level The level of this event. - * @param mixed $message The message of this event. - * @param integer $timeStamp the timestamp of this logging event. - * @param Exception $throwable The throwable associated with logging event - */ - public function __construct($fqcn, $logger, LoggerLevel $level, $message, $timeStamp = null, $throwable = null) { - $this->fqcn = $fqcn; - if ($logger instanceof Logger) { - $this->logger = $logger; - $this->categoryName = $logger->getName(); - } else { - $this->categoryName = strval($logger); - } - $this->level = $level; - $this->message = $message; - if ($timeStamp !== null && is_numeric($timeStamp)) { - $this->timeStamp = $timeStamp; - } else { - $this->timeStamp = microtime(true); - } - - if ($throwable !== null && $throwable instanceof Exception) { - $this->throwableInfo = new LoggerThrowableInformation($throwable); - } - } - - /** - * Returns the full qualified classname. - * TODO: PHP does contain namespaces in 5.3. Those should be returned too, - */ - public function getFullQualifiedClassname() { - return $this->fqcn; - } - - /** - * Set the location information for this logging event. The collected - * information is cached for future use. - * - * <p>This method uses {@link PHP_MANUAL#debug_backtrace debug_backtrace()} function (if exists) - * to collect informations about caller.</p> - * <p>It only recognize informations generated by {@link Logger} and its subclasses.</p> - * @return LoggerLocationInfo - */ - public function getLocationInformation() { - if ($this->locationInfo === null) { - - $locationInfo = array(); - $trace = debug_backtrace(); - $prevHop = null; - // make a downsearch to identify the caller - $hop = array_pop($trace); - while ($hop !== null) { - if (isset($hop['class'])) { - // we are sometimes in functions = no class available: avoid php warning here - $className = strtolower($hop['class']); - if (!empty($className) and ($className == 'logger' or - strtolower(get_parent_class($className)) == 'logger') - ) { - $locationInfo['line'] = $hop['line']; - $locationInfo['file'] = $hop['file']; - break; - } - } - $prevHop = $hop; - $hop = array_pop($trace); - } - $locationInfo['class'] = isset($prevHop['class']) ? $prevHop['class'] : 'main'; - if (isset($prevHop['function']) and - $prevHop['function'] !== 'include' and - $prevHop['function'] !== 'include_once' and - $prevHop['function'] !== 'require' and - $prevHop['function'] !== 'require_once' - ) { - - $locationInfo['function'] = $prevHop['function']; - } else { - $locationInfo['function'] = 'main'; - } - - $this->locationInfo = new LoggerLocationInfo($locationInfo, $this->fqcn); - } - return $this->locationInfo; - } - - /** - * Return the level of this event. Use this form instead of directly - * accessing the {@link $level} field. - * @return LoggerLevel - */ - public function getLevel() { - return $this->level; - } - - /** - * Returns the logger which created the event. - * @return Logger - */ - public function getLogger() { - return $this->logger; - } - - /** - * Return the name of the logger. Use this form instead of directly - * accessing the {@link $categoryName} field. - * @return string - */ - public function getLoggerName() { - return $this->categoryName; - } - - /** - * Return the message for this logging event. - * @return mixed - */ - public function getMessage() { - return $this->message; - } - - /** - * This method returns the NDC for this event. It will return the - * correct content even if the event was generated in a different - * thread or even on a different machine. The {@link LoggerNDC::get()} method - * should <b>never</b> be called directly. - * @return string - */ - public function getNDC() { - if ($this->ndcLookupRequired) { - $this->ndcLookupRequired = false; - $this->ndc = LoggerNDC::get(); - } - return $this->ndc; - } - - /** - * Returns the the context corresponding to the <code>key</code> - * parameter. - * @return string - */ - public function getMDC($key) { - return LoggerMDC::get($key); - } - - /** - * Returns the entire MDC context. - * @return array - */ - public function getMDCMap() { - return LoggerMDC::getMap(); - } - - /** - * Render message. - * @return string - */ - public function getRenderedMessage() { - if ($this->renderedMessage === null and $this->message !== null) { - if (is_string($this->message)) { - $this->renderedMessage = $this->message; - } else { - $rendererMap = Logger::getHierarchy()->getRendererMap(); - $this->renderedMessage = $rendererMap->findAndRender($this->message); - } - } - return $this->renderedMessage; - } - - /** - * Returns the time when the application started, as a UNIX timestamp - * with microseconds. - * @return float - */ - public static function getStartTime() { - if (!isset(self::$startTime)) { - self::$startTime = microtime(true); - } - return self::$startTime; - } - - /** - * @return float - */ - public function getTimeStamp() { - return $this->timeStamp; - } - - /** - * Returns the time in seconds passed from the beginning of execution to - * the time the event was constructed. - * - * @return float Seconds with microseconds in decimals. - */ - public function getRelativeTime() { - return $this->timeStamp - self::$startTime; - } - - /** - * Returns the time in milliseconds passed from the beginning of execution - * to the time the event was constructed. - * - * @deprecated This method has been replaced by getRelativeTime which - * does not perform unneccesary multiplication and formatting. - * - * @return integer - */ - public function getTime() { - $eventTime = $this->getTimeStamp(); - $eventStartTime = LoggerLoggingEvent::getStartTime(); - return number_format(($eventTime - $eventStartTime) * 1000, 0, '', ''); - } - - /** - * @return mixed - */ - public function getThreadName() { - if ($this->threadName === null) { - $this->threadName = (string)getmypid(); - } - return $this->threadName; - } - - /** - * @return mixed LoggerThrowableInformation - */ - public function getThrowableInformation() { - return $this->throwableInfo; - } - - /** - * Serialize this object - * @return string - */ - public function toString() { - serialize($this); - } - - /** - * Avoid serialization of the {@link $logger} object - */ - public function __sleep() { - return array( - 'fqcn', - 'categoryName', - 'level', - 'ndc', - 'ndcLookupRequired', - 'message', - 'renderedMessage', - 'threadName', - 'timeStamp', - 'locationInfo', - ); - } - -} - -LoggerLoggingEvent::getStartTime(); diff --git a/library/log4php/LoggerMDC.php b/library/log4php/LoggerMDC.php deleted file mode 100644 --- a/library/log4php/LoggerMDC.php +++ /dev/null @@ -1,88 +0,0 @@ -<?php -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * @package log4php - */ - -/** - * The LoggerMDC class provides _mapped diagnostic contexts_. - * - * A Mapped Diagnostic Context, or MDC in short, is an instrument for - * distinguishing interleaved log output from different sources. Log output - * is typically interleaved when a server handles multiple clients - * near-simultaneously. - * - * This class is similar to the {@link LoggerNDC} class except that - * it is based on a map instead of a stack. - * - * @version $Revision: 1343630 $ - * @since 0.3 - * @package log4php - */ -class LoggerMDC { - - /** Holds the context map. */ - private static $map = array(); - - /** - * Stores a context value as identified with the key parameter into the - * context map. - * - * @param string $key the key - * @param string $value the value - */ - public static function put($key, $value) { - self::$map[$key] = $value; - } - - /** - * Returns the context value identified by the key parameter. - * - * @param string $key The key. - * @return string The context or an empty string if no context found - * for given key. - */ - public static function get($key) { - return isset(self::$map[$key]) ? self::$map[$key] : ''; - } - - /** - * Returns the contex map as an array. - * @return array The MDC context map. - */ - public static function getMap() { - return self::$map; - } - - /** - * Removes the the context identified by the key parameter. - * - * Only affects user mappings, not $_ENV or $_SERVER. - * - * @param string $key The key to be removed. - */ - public static function remove($key) { - unset(self::$map[$key]); - } - - /** - * Clears the mapped diagnostic context. - */ - public static function clear() { - self::$map = array(); - } -} diff --git a/library/log4php/LoggerNDC.php b/library/log4php/LoggerNDC.php deleted file mode 100644 --- a/library/log4php/LoggerNDC.php +++ /dev/null @@ -1,203 +0,0 @@ -<?php -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * @package log4php - */ - -/** - * The NDC class implements <i>nested diagnostic contexts</i>. - * - * NDC was defined by Neil Harrison in the article "Patterns for Logging - * Diagnostic Messages" part of the book <i>"Pattern Languages of - * Program Design 3"</i> edited by Martin et al. - * - * A Nested Diagnostic Context, or NDC in short, is an instrument - * to distinguish interleaved log output from different sources. Log - * output is typically interleaved when a server handles multiple - * clients near-simultaneously. - * - * This class is similar to the {@link LoggerMDC} class except that it is - * based on a stack instead of a map. - * - * Interleaved log output can still be meaningful if each log entry - * from different contexts had a distinctive stamp. This is where NDCs - * come into play. - * - * <b>Note that NDCs are managed on a per thread basis</b>. - * - * NDC operations such as {@link push()}, {@link pop()}, - * {@link clear()}, {@link getDepth()} and {@link setMaxDepth()} - * affect the NDC of the <i>current</i> thread only. NDCs of other - * threads remain unaffected. - * - * For example, a servlet can build a per client request NDC - * consisting the clients host name and other information contained in - * the the request. <i>Cookies</i> are another source of distinctive - * information. To build an NDC one uses the {@link push()} - * operation. - * - * Simply put, - * - * - Contexts can be nested. - * - When entering a context, call <kbd>LoggerNDC::push()</kbd> - * As a side effect, if there is no nested diagnostic context for the - * current thread, this method will create it. - * - When leaving a context, call <kbd>LoggerNDC::pop()</kbd> - * - <b>When exiting a thread make sure to call {@link remove()}</b> - * - * There is no penalty for forgetting to match each - * <kbd>push</kbd> operation with a corresponding <kbd>pop</kbd>, - * except the obvious mismatch between the real application context - * and the context set in the NDC. - * - * If configured to do so, {@link LoggerPatternLayout} and {@link LoggerLayoutTTCC} - * instances automatically retrieve the nested diagnostic - * context for the current thread without any user intervention. - * Hence, even if a servlet is serving multiple clients - * simultaneously, the logs emanating from the same code (belonging to - * the same category) can still be distinguished because each client - * request will have a different NDC tag. - * - * Example: - * - * {@example ../../examples/php/ndc.php 19}<br> - * - * With the properties file: - * - * {@example ../../examples/resources/ndc.properties 18}<br> - * - * Will result in the following (notice the conn and client ids): - * - * <pre> - * 2009-09-13 19:04:27 DEBUG root conn=1234: just received a new connection in src/examples/php/ndc.php at 23 - * 2009-09-13 19:04:27 DEBUG root conn=1234 client=ab23: some more messages that can in src/examples/php/ndc.php at 25 - * 2009-09-13 19:04:27 DEBUG root conn=1234 client=ab23: now related to a client in src/examples/php/ndc.php at 26 - * 2009-09-13 19:04:27 DEBUG root : back and waiting for new connections in src/examples/php/ndc.php at 29 - * </pre> - * - * @version $Revision: 1350602 $ - * @package log4php - * @since 0.3 - */ -class LoggerNDC { - - /** This is the repository of NDC stack */ - private static $stack = array(); - - /** - * Clear any nested diagnostic information if any. This method is - * useful in cases where the same thread can be potentially used - * over and over in different unrelated contexts. - * - * <p>This method is equivalent to calling the {@link setMaxDepth()} - * method with a zero <var>maxDepth</var> argument. - */ - public static function clear() { - self::$stack = array(); - } - - /** - * Never use this method directly, use the {@link LoggerLoggingEvent::getNDC()} method instead. - * @return array - */ - public static function get() { - return implode(' ', self::$stack); - } - - /** - * Get the current nesting depth of this diagnostic context. - * - * @see setMaxDepth() - * @return integer - */ - public static function getDepth() { - return count(self::$stack); - } - - /** - * Clients should call this method before leaving a diagnostic - * context. - * - * <p>The returned value is the value that was pushed last. If no - * context is available, then the empty string "" is returned.</p> - * - * @return string The innermost diagnostic context. - */ - public static function pop() { - if (count(self::$stack) > 0) { - return array_pop(self::$stack); - } else { - return ''; - } - } - - /** - * Looks at the last diagnostic context at the top of this NDC - * without removing it. - * - * <p>The returned value is the value that was pushed last. If no - * context is available, then the empty string "" is returned.</p> - * @return string The innermost diagnostic context. - */ - public static function peek() { - if (count(self::$stack) > 0) { - return end(self::$stack); - } else { - return ''; - } - } - - /** - * Push new diagnostic context information for the current thread. - * - * <p>The contents of the <var>message</var> parameter is - * determined solely by the client. - * - * @param string $message The new diagnostic context information. - */ - public static function push($message) { - array_push(self::$stack, (string)$message); - } - - /** - * Remove the diagnostic context for this thread. - */ - public static function remove() { - LoggerNDC::clear(); - } - - /** - * Set maximum depth of this diagnostic context. If the current - * depth is smaller or equal to <var>maxDepth</var>, then no - * action is taken. - * - * <p>This method is a convenient alternative to multiple - * {@link pop()} calls. Moreover, it is often the case that at - * the end of complex call sequences, the depth of the NDC is - * unpredictable. The {@link setMaxDepth()} method circumvents - * this problem. - * - * @param integer $maxDepth - * @see getDepth() - */ - public static function setMaxDepth($maxDepth) { - $maxDepth = (int)$maxDepth; - if (LoggerNDC::getDepth() > $maxDepth) { - self::$stack = array_slice(self::$stack, 0, $maxDepth); - } - } -} diff --git a/library/log4php/LoggerReflectionUtils.php b/library/log4php/LoggerReflectionUtils.php deleted file mode 100644 --- a/library/log4php/LoggerReflectionUtils.php +++ /dev/null @@ -1,152 +0,0 @@ -<?php -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * @package log4php - */ - -/** - * Provides methods for reflective use on php objects - * @package log4php - */ -class LoggerReflectionUtils { - /** the target object */ - private $obj; - - /** - * Create a new LoggerReflectionUtils for the specified Object. - * This is done in prepartion for invoking {@link setProperty()} - * one or more times. - * @param object &$obj the object for which to set properties - */ - public function __construct($obj) { - $this->obj = $obj; - } - - /** - * Set the properties of an object passed as a parameter in one - * go. The <code>properties</code> are parsed relative to a - * <code>prefix</code>. - * - * @param object $obj The object to configure. - * @param array $properties An array containing keys and values. - * @param string $prefix Only keys having the specified prefix will be set. - */ - // TODO: check, if this is really useful - public static function setPropertiesByObject($obj, $properties, $prefix) { - $pSetter = new LoggerReflectionUtils($obj); - return $pSetter->setProperties($properties, $prefix); - } - - - /** - * Set the properites for the object that match the - * <code>prefix</code> passed as parameter. - * - * Example: - * - * $arr['xxxname'] = 'Joe'; - * $arr['xxxmale'] = true; - * and prefix xxx causes setName and setMale. - * - * @param array $properties An array containing keys and values. - * @param string $prefix Only keys having the specified prefix will be set. - */ - public function setProperties($properties, $prefix) { - $len = strlen($prefix); - reset($properties); - while (list($key,) = each($properties)) { - if (strpos($key, $prefix) === 0) { - if (strpos($key, '.', ($len + 1)) > 0) { - continue; - } - $value = $properties[$key]; - $key = substr($key, $len); - if ($key == 'layout' and ($this->obj instanceof LoggerAppender)) { - continue; - } - $this->setProperty($key, $value); - } - } - $this->activate(); - } - - /** - * Set a property on this PropertySetter's Object. If successful, this - * method will invoke a setter method on the underlying Object. The - * setter is the one for the specified property name and the value is - * determined partly from the setter argument type and partly from the - * value specified in the call to this method. - * - * <p>If the setter expects a String no conversion is necessary. - * If it expects an int, then an attempt is made to convert 'value' - * to an int using new Integer(value). If the setter expects a boolean, - * the conversion is by new Boolean(value). - * - * @param string $name name of the property - * @param string $value String value of the property - */ - public function setProperty($name, $value) { - if ($value === null) { - return; - } - - $method = "set" . ucfirst($name); - - if (!method_exists($this->obj, $method)) { - throw new Exception("Error setting log4php property $name to $value: no method $method in class " . get_class($this->obj) . "!"); - } else { - return call_user_func(array($this->obj, $method), $value); - } - } - - public function activate() { - if (method_exists($this->obj, 'activateoptions')) { - return call_user_func(array($this->obj, 'activateoptions')); - } - } - - /** - * Creates an instances from the given class name. - * - * @param string $classname - * @return an object from the class with the given classname - */ - public static function createObject($class) { - if (!empty($class)) { - return new $class(); - } - return null; - } - - /** - * @param object $object - * @param string $name - * @param mixed $value - */ - public static function setter($object, $name, $value) { - if (empty($name)) { - return false; - } - $methodName = 'set' . ucfirst($name); - if (method_exists($object, $methodName)) { - return call_user_func(array($object, $methodName), $value); - } else { - return false; - } - } - -} diff --git a/library/log4php/LoggerRoot.php b/library/log4php/LoggerRoot.php deleted file mode 100644 --- a/library/log4php/LoggerRoot.php +++ /dev/null @@ -1,71 +0,0 @@ -<?php -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * @package log4php - */ - -/** - * The root logger. - * - * @version $Revision: 1343190 $ - * @package log4php - * @see Logger - */ -class LoggerRoot extends Logger { - /** - * Constructor - * - * @param integer $level initial log level - */ - public function __construct(LoggerLevel $level = null) { - parent::__construct('root'); - - if ($level == null) { - $level = LoggerLevel::getLevelAll(); - } - $this->setLevel($level); - } - - /** - * @return LoggerLevel the level - */ - public function getEffectiveLevel() { - return $this->getLevel(); - } - - /** - * Override level setter to prevent setting the root logger's level to - * null. Root logger must always have a level. - * - * @param LoggerLevel $level - */ - public function setLevel(LoggerLevel $level = null) { - if (isset($level)) { - parent::setLevel($level); - } else { - trigger_error("log4php: Cannot set LoggerRoot level to null.", E_USER_WARNING); - } - } - - /** - * Override parent setter. Root logger cannot have a parent. - * @param Logger $parent - */ - public function setParent(Logger $parent) { - trigger_error("log4php: LoggerRoot cannot have a parent.", E_USER_WARNING); - } -} diff --git a/library/log4php/LoggerThrowableInformation.php b/library/log4php/LoggerThrowableInformation.php deleted file mode 100644 --- a/library/log4php/LoggerThrowableInformation.php +++ /dev/null @@ -1,68 +0,0 @@ -<?php -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * @package log4php - */ - -/** - * The internal representation of throwables. - * - * @package log4php - * @since 2.1 - */ -class LoggerThrowableInformation { - - /** @var Exception Throwable to log */ - private $throwable; - - /** @var array Array of throwable messages */ - private $throwableArray; - - /** - * Create a new instance - * - * @param $throwable - a throwable as a exception - * @param $logger - Logger reference - */ - public function __construct(Exception $throwable) { - $this->throwable = $throwable; - } - - /** - * Return source exception - * - * @return Exception - */ - public function getThrowable() { - return $this->throwable; - } - - /** - * @desc Returns string representation of throwable - * - * @return array - */ - public function getStringRepresentation() { - if (!is_array($this->throwableArray)) { - $renderer = new LoggerRendererException(); - - $this->throwableArray = explode("\n", $renderer->render($this->throwable)); - } - - return $this->throwableArray; - } -} diff --git a/library/log4php/appenders/LoggerAppenderConsole.php b/library/log4php/appenders/LoggerAppenderConsole.php deleted file mode 100644 --- a/library/log4php/appenders/LoggerAppenderConsole.php +++ /dev/null @@ -1,103 +0,0 @@ -<?php -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * LoggerAppenderConsole appends log events either to the standard output - * stream (php://stdout) or the standard error stream (php://stderr). - * - * **Note**: Use this Appender with command-line php scripts. On web scripts - * this appender has no effects. - * - * This appender uses a layout. - * - * ## Configurable parameters: ## - * - * - **target** - the target stream: "stdout" or "stderr" - * - * @version $Revision: 1343601 $ - * @package log4php - * @subpackage appenders - * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0 - * @link http://logging.apache.org/log4php/docs/appenders/console.html Appender documentation - */ -class LoggerAppenderConsole extends LoggerAppender { - - /** The standard otuput stream. */ - const STDOUT = 'php://stdout'; - - /** The standard error stream.*/ - const STDERR = 'php://stderr'; - - /** The 'target' parameter. */ - protected $target = self::STDOUT; - - /** - * Stream resource for the target stream. - * @var resource - */ - protected $fp = null; - - public function activateOptions() { - $this->fp = fopen($this->target, 'w'); - if (is_resource($this->fp) && $this->layout !== null) { - fwrite($this->fp, $this->layout->getHeader()); - } - $this->closed = (bool)is_resource($this->fp) === false; - } - - - public function close() { - if ($this->closed != true) { - if (is_resource($this->fp) && $this->layout !== null) { - fwrite($this->fp, $this->layout->getFooter()); - fclose($this->fp); - } - $this->closed = true; - } - } - - public function append(LoggerLoggingEvent $event) { - if (is_resource($this->fp) && $this->layout !== null) { - fwrite($this->fp, $this->layout->format($event)); - } - } - - /** - * Sets the 'target' parameter. - * @param string $target - */ - public function setTarget($target) { - $value = trim($target); - if ($value == self::STDOUT || strtoupper($value) == 'STDOUT') { - $this->target = self::STDOUT; - } elseif ($value == self::STDERR || strtoupper($value) == 'STDERR') { - $this->target = self::STDERR; - } else { - $target = var_export($target); - $this->warn("Invalid value given for 'target' property: [$target]. Property not set."); - } - } - - /** - * Returns the value of the 'target' parameter. - * @return string - */ - public function getTarget() { - return $this->target; - } -} diff --git a/library/log4php/appenders/LoggerAppenderDailyFile.php b/library/log4php/appenders/LoggerAppenderDailyFile.php deleted file mode 100644 --- a/library/log4php/appenders/LoggerAppenderDailyFile.php +++ /dev/null @@ -1,128 +0,0 @@ -<?php -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * An Appender that automatically creates a new logfile each day. - * - * The file is rolled over once a day. That means, for each day a new file - * is created. A formatted version of the date pattern is used as to create - * the file name using the {@link PHP_MANUAL#sprintf} function. - * - * This appender uses a layout. - * - * ##Configurable parameters:## - * - * - **datePattern** - Format for the date in the file path, follows formatting - * rules used by the PHP date() function. Default value: "Ymd". - * - **file** - Path to the target file. Should contain a %s which gets - * substituted by the date. - * - **append** - If set to true, the appender will append to the file, - * otherwise the file contents will be overwritten. Defaults to true. - * - * @version $Revision: 1382274 $ - * @package log4php - * @subpackage appenders - * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0 - * @link http://logging.apache.org/log4php/docs/appenders/daily-file.html Appender documentation - */ -class LoggerAppenderDailyFile extends LoggerAppenderFile { - - /** - * The 'datePattern' parameter. - * Determines how date will be formatted in file name. - * @var string - */ - protected $datePattern = "Ymd"; - - /** - * Current date which was used when opening a file. - * Used to determine if a rollover is needed when the date changes. - * @var string - */ - protected $currentDate; - - /** Additional validation for the date pattern. */ - public function activateOptions() { - parent::activateOptions(); - - if (empty($this->datePattern)) { - $this->warn("Required parameter 'datePattern' not set. Closing appender."); - $this->closed = true; - return; - } - } - - /** - * Appends a logging event. - * - * If the target file changes because of passage of time (e.g. at midnight) - * the current file is closed. A new file, with the new date, will be - * opened by the write() method. - */ - public function append(LoggerLoggingEvent $event) { - $eventDate = $this->getDate($event->getTimestamp()); - - // Initial setting of current date - if (!isset($this->currentDate)) { - $this->currentDate = $eventDate; - } // Check if rollover is needed - else if ($this->currentDate !== $eventDate) { - $this->currentDate = $eventDate; - - // Close the file if it's open. - // Note: $this->close() is not called here because it would set - // $this->closed to true and the appender would not recieve - // any more logging requests - if (is_resource($this->fp)) { - $this->write($this->layout->getFooter()); - fclose($this->fp); - } - $this->fp = null; - } - - parent::append($event); - } - - /** Renders the date using the configured <var>datePattern<var>. */ - protected function getDate($timestamp = null) { - return date($this->datePattern, $timestamp); - } - - /** - * Determines target file. Replaces %s in file path with a date. - */ - protected function getTargetFile() { - return str_replace('%s', $this->currentDate, $this->file); - } - - /** - * Sets the 'datePattern' parameter. - * @param string $datePattern - */ - public function setDatePattern($datePattern) { - $this->setString('datePattern', $datePattern); - } - - /** - * Returns the 'datePattern' parameter. - * @return string - */ - public function getDatePattern() { - return $this->datePattern; - } -} diff --git a/library/log4php/appenders/LoggerAppenderEcho.php b/library/log4php/appenders/LoggerAppenderEcho.php deleted file mode 100644 --- a/library/log4php/appenders/LoggerAppenderEcho.php +++ /dev/null @@ -1,88 +0,0 @@ -<?php -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * LoggerAppenderEcho uses the PHP echo() function to output events. - * - * This appender uses a layout. - * - * ## Configurable parameters: ## - * - * - **htmlLineBreaks** - If set to true, a <br /> element will be inserted - * before each line break in the logged message. Default is false. - * - * @version $Revision: 1337820 $ - * @package log4php - * @subpackage appenders - * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0 - * @link http://logging.apache.org/log4php/docs/appenders/echo.html Appender documentation - */ -class LoggerAppenderEcho extends LoggerAppender { - /** - * Used to mark first append. Set to false after first append. - * @var boolean - */ - protected $firstAppend = true; - - /** - * If set to true, a <br /> element will be inserted before each line - * break in the logged message. Default value is false. @var boolean - */ - protected $htmlLineBreaks = false; - - public function close() { - if ($this->closed != true) { - if (!$this->firstAppend) { - echo $this->layout->getFooter(); - } - } - $this->closed = true; - } - - public function append(LoggerLoggingEvent $event) { - if ($this->layout !== null) { - if ($this->firstAppend) { - echo $this->layout->getHeader(); - $this->firstAppend = false; - } - $text = $this->layout->format($event); - - if ($this->htmlLineBreaks) { - $text = nl2br($text); - } - echo $text; - } - } - - /** - * Sets the 'htmlLineBreaks' parameter. - * @param boolean $value - */ - public function setHtmlLineBreaks($value) { - $this->setBoolean('htmlLineBreaks', $value); - } - - /** - * Returns the 'htmlLineBreaks' parameter. - * @returns boolean - */ - public function getHtmlLineBreaks() { - return $this->htmlLineBreaks; - } -} - diff --git a/library/log4php/appenders/LoggerAppenderFile.php b/library/log4php/appenders/LoggerAppenderFile.php deleted file mode 100644 --- a/library/log4php/appenders/LoggerAppenderFile.php +++ /dev/null @@ -1,225 +0,0 @@ -<?php -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * LoggerAppenderFile appends log events to a file. - * - * This appender uses a layout. - * - * ## Configurable parameters: ## - * - * - **file** - Path to the target file. Relative paths are resolved based on - * the working directory. - * - **append** - If set to true, the appender will append to the file, - * otherwise the file contents will be overwritten. - * - * @version $Revision: 1382274 $ - * @package log4php - * @subpackage appenders - * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0 - * @link http://logging.apache.org/log4php/docs/appenders/file.html Appender documentation - */ -class LoggerAppenderFile extends LoggerAppender { - - /** - * If set to true, the file is locked before appending. This allows - * concurrent access. However, appending without locking is faster so - * it should be used where appropriate. - * - * TODO: make this a configurable parameter - * - * @var boolean - */ - protected $locking = true; - - /** - * If set to true, appends to file. Otherwise overwrites it. - * @var boolean - */ - protected $append = true; - - /** - * Path to the target file. - * @var string - */ - protected $file; - - /** - * The file resource. - * @var resource - */ - protected $fp; - - /** - * Helper function which can be easily overriden by daily file appender. - */ - protected function getTargetFile() { - return $this->file; - } - - /** - * Acquires the target file resource, creates the destination folder if - * necessary. Writes layout header to file. - * - * @return boolean FALSE if opening failed - */ - protected function openFile() { - $file = $this->getTargetFile(); - - // Create the target folder if needed - if (!is_file($file)) { - $dir = dirname($file); - - if (!is_dir($dir)) { - $success = mkdir($dir, 0777, true); - if ($success === false) { - $this->warn("Failed creating target directory [$dir]. Closing appender."); - $this->closed = true; - return false; - } - } - } - - $mode = $this->append ? 'a' : 'w'; - $this->fp = fopen($file, $mode); - if ($this->fp === false) { - $this->warn("Failed opening target file. Closing appender."); - $this->fp = null; - $this->closed = true; - return false; - } - - // Required when appending with concurrent access - if ($this->append) { - fseek($this->fp, 0, SEEK_END); - } - - // Write the header - $this->write($this->layout->getHeader()); - } - - /** - * Writes a string to the target file. Opens file if not already open. - * @param string $string Data to write. - */ - protected function write($string) { - // Lazy file open - if (!isset($this->fp)) { - if ($this->openFile() === false) { - return; // Do not write if file open failed. - } - } - - if ($this->locking) { - $this->writeWithLocking($string); - } else { - $this->writeWithoutLocking($string); - } - } - - protected function writeWithLocking($string) { - if (flock($this->fp, LOCK_EX)) { - if (fwrite($this->fp, $string) === false) { - $this->warn("Failed writing to file. Closing appender."); - $this->closed = true; - } - flock($this->fp, LOCK_UN); - } else { - $this->warn("Failed locking file for writing. Closing appender."); - $this->closed = true; - } - } - - protected function writeWithoutLocking($string) { - if (fwrite($this->fp, $string) === false) { - $this->warn("Failed writing to file. Closing appender."); - $this->closed = true; - } - } - - public function activateOptions() { - if (empty($this->file)) { - $this->warn("Required parameter 'file' not set. Closing appender."); - $this->closed = true; - return; - } - } - - public function close() { - if (is_resource($this->fp)) { - $this->write($this->layout->getFooter()); - fclose($this->fp); - } - $this->fp = null; - $this->closed = true; - } - - public function append(LoggerLoggingEvent $event) { - $this->write($this->layout->format($event)); - } - - /** - * Sets the 'file' parameter. - * @param string $file - */ - public function setFile($file) { - $this->setString('file', $file); - } - - /** - * Returns the 'file' parameter. - * @return string - */ - public function getFile() { - return $this->file; - } - - /** - * Returns the 'append' parameter. - * @return boolean - */ - public function getAppend() { - return $this->append; - } - - /** - * Sets the 'append' parameter. - * @param boolean $append - */ - public function setAppend($append) { - $this->setBoolean('append', $append); - } - - /** - * Sets the 'file' parmeter. Left for legacy reasons. - * @param string $fileName - * @deprecated Use setFile() instead. - */ - public function setFileName($fileName) { - $this->setFile($fileName); - } - - /** - * Returns the 'file' parmeter. Left for legacy reasons. - * @return string - * @deprecated Use getFile() instead. - */ - public function getFileName() { - return $this->getFile(); - } -} diff --git a/library/log4php/appenders/LoggerAppenderFirePHP.php b/library/log4php/appenders/LoggerAppenderFirePHP.php deleted file mode 100644 --- a/library/log4php/appenders/LoggerAppenderFirePHP.php +++ /dev/null @@ -1,100 +0,0 @@ -<?php -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * Logs messages as HTTP headers using the FirePHP Insight API. - * - * This appender requires the FirePHP server library version 1.0 or later. - * - * ## Configurable parameters: ## - * - * - **target** - (string) The target to which messages will be sent. Possible options are - * 'page' (default), 'request', 'package' and 'controller'. For more details, - * see FirePHP documentation. - * - * This class was originally contributed by Bruce Ingalls (Bruce.Ingalls-at-gmail-dot-com). - * - * @link https://github.com/firephp/firephp FirePHP homepage. - * @link http://sourcemint.com/github.com/firephp/firephp/1:1.0.0b1rc6/-docs/Welcome FirePHP documentation. - * @link http://sourcemint.com/github.com/firephp/firephp/1:1.0.0b1rc6/-docs/Configuration/Constants FirePHP constants documentation. - * @link http://logging.apache.org/log4php/docs/appenders/firephp.html Appender documentation - * - * @version $Revision: 1343684 $ - * @package log4php - * @subpackage appenders - * @since 2.3 - */ -class LoggerAppenderFirePHP extends LoggerAppender { - - /** - * Instance of the Insight console class. - * @var Insight_Plugin_Console - */ - protected $console; - - /** - * The target for log messages. Possible values are: 'page' (default), - * 'request', 'package' and 'contoller'. - */ - protected $target = 'page'; - - public function activateOptions() { - if (method_exists('FirePHP', 'to')) { - $this->console = FirePHP::to($this->target)->console(); - $this->closed = false; - } else { - $this->warn('FirePHP is not installed correctly. Closing appender.'); - } - } - - public function append(LoggerLoggingEvent $event) { - $msg = $event->getMessage(); - - // Skip formatting for objects and arrays which are handled by FirePHP. - if (!is_array($msg) && !is_object($msg)) { - $msg = $this->getLayout()->format($event); - } - - switch ($event->getLevel()->toInt()) { - case LoggerLevel::TRACE: - case LoggerLevel::DEBUG: - $this->console->log($msg); - break; - case LoggerLevel::INFO: - $this->console->info($msg); - break; - case LoggerLevel::WARN: - $this->console->warn($msg); - break; - case LoggerLevel::ERROR: - case LoggerLevel::FATAL: - $this->console->error($msg); - break; - } - } - - /** Returns the target. */ - public function getTarget() { - return $this->target; - } - - /** Sets the target. */ - public function setTarget($target) { - $this->setString('target', $target); - } -} \ No newline at end of file diff --git a/library/log4php/appenders/LoggerAppenderMail.php b/library/log4php/appenders/LoggerAppenderMail.php deleted file mode 100644 --- a/library/log4php/appenders/LoggerAppenderMail.php +++ /dev/null @@ -1,136 +0,0 @@ -<?php -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * LoggerAppenderMail appends log events via email. - * - * This appender does not send individual emails for each logging requests but - * will collect them in a buffer and send them all in a single email once the - * appender is closed (i.e. when the script exists). Because of this, it may - * not appropriate for long running scripts, in which case - * LoggerAppenderMailEvent might be a better choice. - * - * This appender uses a layout. - * - * ## Configurable parameters: ## - * - * - **to** - Email address(es) to which the log will be sent. Multiple email - * addresses may be specified by separating them with a comma. - * - **from** - Email address which will be used in the From field. - * - **subject** - Subject of the email message. - * - * @version $Revision: 1337820 $ - * @package log4php - * @subpackage appenders - * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0 - * @link http://logging.apache.org/log4php/docs/appenders/mail.html Appender documentation - */ -class LoggerAppenderMail extends LoggerAppender { - - /** - * Email address to put in From field of the email. - * @var string - */ - protected $from = null; - - /** - * The subject of the email. - * @var string - */ - protected $subject = 'Log4php Report'; - - /** - * One or more comma separated email addresses to which to send the email. - * @var string - */ - protected $to = null; - - /** - * Indiciates whether this appender should run in dry mode. - * @deprecated - * @var boolean - */ - protected $dry = false; - - /** - * Buffer which holds the email contents before it is sent. - * @var string - */ - protected $body = ''; - - public function append(LoggerLoggingEvent $event) { - if ($this->layout !== null) { - $this->body .= $this->layout->format($event); - } - } - - public function close() { - if ($this->closed != true) { - $from = $this->from; - $to = $this->to; - - if (!empty($this->body) and $from !== null and $to !== null and $this->layout !== null) { - $subject = $this->subject; - if (!$this->dry) { - mail( - $to, $subject, - $this->layout->getHeader() . $this->body . $this->layout->getFooter(), - "From: {$from}\r\n"); - } else { - echo "DRY MODE OF MAIL APP.: Send mail to: " . $to . " with content: " . $this->body; - } - } - $this->closed = true; - } - } - - /** Sets the 'subject' parameter. */ - public function setSubject($subject) { - $this->setString('subject', $subject); - } - - /** Returns the 'subject' parameter. */ - public function getSubject() { - return $this->subject; - } - - /** Sets the 'to' parameter. */ - public function setTo($to) { - $this->setString('to', $to); - } - - /** Returns the 'to' parameter. */ - public function getTo() { - return $this->to; - } - - /** Sets the 'from' parameter. */ - public function setFrom($from) { - $this->setString('from', $from); - } - - /** Returns the 'from' parameter. */ - public function getFrom() { - return $this->from; - } - - /** Enables or disables dry mode. */ - public function setDry($dry) { - $this->setBoolean('dry', $dry); - } -} diff --git a/library/log4php/appenders/LoggerAppenderMailEvent.php b/library/log4php/appenders/LoggerAppenderMailEvent.php deleted file mode 100644 --- a/library/log4php/appenders/LoggerAppenderMailEvent.php +++ /dev/null @@ -1,180 +0,0 @@ -<?php -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * LoggerAppenderMailEvent appends individual log events via email. - * - * This appender is similar to LoggerAppenderMail, except that it sends each - * each log event in an individual email message at the time when it occurs. - * - * This appender uses a layout. - * - * ## Configurable parameters: ## - * - * - **to** - Email address(es) to which the log will be sent. Multiple email - * addresses may be specified by separating them with a comma. - * - **from** - Email address which will be used in the From field. - * - **subject** - Subject of the email message. - * - **smtpHost** - Used to override the SMTP server. Only works on Windows. - * - **port** - Used to override the default SMTP server port. Only works on - * Windows. - * - * @version $Revision: 1343601 $ - * @package log4php - * @subpackage appenders - * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0 - * @link http://logging.apache.org/log4php/docs/appenders/mail-event.html Appender documentation - */ -class LoggerAppenderMailEvent extends LoggerAppender { - - /** - * Email address to put in From field of the email. - * @var string - */ - protected $from; - - /** - * Mail server port (widnows only). - * @var integer - */ - protected $port = 25; - - /** - * Mail server hostname (windows only). - * @var string - */ - protected $smtpHost; - - /** - * The subject of the email. - * @var string - */ - protected $subject = 'Log4php Report'; - - /** - * One or more comma separated email addresses to which to send the email. - * @var string - */ - protected $to = null; - - /** - * Indiciates whether this appender should run in dry mode. - * @deprecated - * @var boolean - */ - protected $dry = false; - - public function activateOptions() { - if (empty($this->to)) { - $this->warn("Required parameter 'to' not set. Closing appender."); - $this->close = true; - return; - } - - $sendmail_from = ini_get('sendmail_from'); - if (empty($this->from) and empty($sendmail_from)) { - $this->warn("Required parameter 'from' not set. Closing appender."); - $this->close = true; - return; - } - - $this->closed = false; - } - - public function append(LoggerLoggingEvent $event) { - $smtpHost = $this->smtpHost; - $prevSmtpHost = ini_get('SMTP'); - if (!empty($smtpHost)) { - ini_set('SMTP', $smtpHost); - } - - $smtpPort = $this->port; - $prevSmtpPort = ini_get('smtp_port'); - if ($smtpPort > 0 and $smtpPort < 65535) { - ini_set('smtp_port', $smtpPort); - } - - // On unix only sendmail_path, which is PHP_INI_SYSTEM i.e. not changeable here, is used. - - $addHeader = empty($this->from) ? '' : "From: {$this->from}\r\n"; - - if (!$this->dry) { - $result = mail($this->to, $this->subject, $this->layout->getHeader() . $this->layout->format($event) . $this->layout->getFooter($event), $addHeader); - } else { - echo "DRY MODE OF MAIL APP.: Send mail to: " . $this->to . " with additional headers '" . trim($addHeader) . "' and content: " . $this->layout->format($event); - } - - ini_set('SMTP', $prevSmtpHost); - ini_set('smtp_port', $prevSmtpPort); - } - - /** Sets the 'from' parameter. */ - public function setFrom($from) { - $this->setString('from', $from); - } - - /** Returns the 'from' parameter. */ - public function getFrom() { - return $this->from; - } - - /** Sets the 'port' parameter. */ - public function setPort($port) { - $this->setPositiveInteger('port', $port); - } - - /** Returns the 'port' parameter. */ - public function getPort() { - return $this->port; - } - - /** Sets the 'smtpHost' parameter. */ - public function setSmtpHost($smtpHost) { - $this->setString('smtpHost', $smtpHost); - } - - /** Returns the 'smtpHost' parameter. */ - public function getSmtpHost() { - return $this->smtpHost; - } - - /** Sets the 'subject' parameter. */ - public function setSubject($subject) { - $this->setString('subject', $subject); - } - - /** Returns the 'subject' parameter. */ - public function getSubject() { - return $this->subject; - } - - /** Sets the 'to' parameter. */ - public function setTo($to) { - $this->setString('to', $to); - } - - /** Returns the 'to' parameter. */ - public function getTo() { - return $this->to; - } - - /** Enables or disables dry mode. */ - public function setDry($dry) { - $this->setBoolean('dry', $dry); - } -} diff --git a/library/log4php/appenders/LoggerAppenderMongoDB.php b/library/log4php/appenders/LoggerAppenderMongoDB.php deleted file mode 100644 --- a/library/log4php/appenders/LoggerAppenderMongoDB.php +++ /dev/null @@ -1,361 +0,0 @@ -<?php -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * Appender for writing to MongoDB. - * - * This class was originally contributed by Vladimir Gorej. - * - * ## Configurable parameters: ## - * - * - **host** - Server on which mongodb instance is located. - * - **port** - Port on which the instance is bound. - * - **databaseName** - Name of the database to which to log. - * - **collectionName** - Name of the target collection within the given database. - * - **username** - Username used to connect to the database. - * - **password** - Password used to connect to the database. - * - **timeout** - For how long the driver should try to connect to the database (in milliseconds). - * - * @version $Revision: 1346363 $ - * @package log4php - * @subpackage appenders - * @since 2.1 - * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0 - * @link http://logging.apache.org/log4php/docs/appenders/mongodb.html Appender documentation - * @link http://github.com/log4mongo/log4mongo-php Vladimir Gorej's original submission. - * @link http://www.mongodb.org/ MongoDB website. - */ -class LoggerAppenderMongoDB extends LoggerAppender { - - // ****************************************** - // ** Constants ** - // ****************************************** - - /** Default prefix for the {@link $host}. */ - const DEFAULT_MONGO_URL_PREFIX = 'mongodb://'; - - /** Default value for {@link $host}, without a prefix. */ - const DEFAULT_MONGO_HOST = 'localhost'; - - /** Default value for {@link $port} */ - const DEFAULT_MONGO_PORT = 27017; - - /** Default value for {@link $databaseName} */ - const DEFAULT_DB_NAME = 'log4php_mongodb'; - - /** Default value for {@link $collectionName} */ - const DEFAULT_COLLECTION_NAME = 'logs'; - - /** Default value for {@link $timeout} */ - const DEFAULT_TIMEOUT_VALUE = 3000; - - // ****************************************** - // ** Configurable parameters ** - // ****************************************** - - /** Server on which mongodb instance is located. */ - protected $host; - - /** Port on which the instance is bound. */ - protected $port; - - /** Name of the database to which to log. */ - protected $databaseName; - - /** Name of the collection within the given database. */ - protected $collectionName; - - /** Username used to connect to the database. */ - protected $userName; - - /** Password used to connect to the database. */ - protected $password; - - /** Timeout value used when connecting to the database (in milliseconds). */ - protected $timeout; - - // ****************************************** - // ** Member variables ** - // ****************************************** - - /** - * Connection to the MongoDB instance. - * @var Mongo - */ - protected $connection; - - /** - * The collection to which log is written. - * @var MongoCollection - */ - protected $collection; - - public function __construct($name = '') { - parent::__construct($name); - $this->host = self::DEFAULT_MONGO_URL_PREFIX . self::DEFAULT_MONGO_HOST; - $this->port = self::DEFAULT_MONGO_PORT; - $this->databaseName = self::DEFAULT_DB_NAME; - $this->collectionName = self::DEFAULT_COLLECTION_NAME; - $this->timeout = self::DEFAULT_TIMEOUT_VALUE; - $this->requiresLayout = false; - } - - /** - * Setup db connection. - * Based on defined options, this method connects to the database and - * creates a {@link $collection}. - */ - public function activateOptions() { - try { - $this->connection = new Mongo(sprintf('%s:%d', $this->host, $this->port), array('timeout' => $this->timeout)); - $db = $this->connection->selectDB($this->databaseName); - if ($this->userName !== null && $this->password !== null) { - $authResult = $db->authenticate($this->userName, $this->password); - if ($authResult['ok'] == floatval(0)) { - throw new Exception($authResult['errmsg'], $authResult['ok']); - } - } - $this->collection = $db->selectCollection($this->collectionName); - } catch (MongoConnectionException $ex) { - $this->closed = true; - $this->warn(sprintf('Failed to connect to mongo deamon: %s', $ex->getMessage())); - } catch (InvalidArgumentException $ex) { - $this->closed = true; - $this->warn(sprintf('Error while selecting mongo database: %s', $ex->getMessage())); - } catch (Exception $ex) { - $this->closed = true; - $this->warn('Invalid credentials for mongo database authentication'); - } - } - - /** - * Appends a new event to the mongo database. - * - * @param LoggerLoggingEvent $event - */ - public function append(LoggerLoggingEvent $event) { - try { - if ($this->collection != null) { - $this->collection->insert($this->format($event)); - } - } catch (MongoCursorException $ex) { - $this->warn(sprintf('Error while writing to mongo collection: %s', $ex->getMessage())); - } - } - - /** - * Converts the logging event into an array which can be logged to mongodb. - * - * @param LoggerLoggingEvent $event - * @return array The array representation of the logging event. - */ - protected function format(LoggerLoggingEvent $event) { - $timestampSec = (int)$event->getTimestamp(); - $timestampUsec = (int)(($event->getTimestamp() - $timestampSec) * 1000000); - - $document = array( - 'timestamp' => new MongoDate($timestampSec, $timestampUsec), - 'level' => $event->getLevel()->toString(), - 'thread' => (int)$event->getThreadName(), - 'message' => $event->getMessage(), - 'loggerName' => $event->getLoggerName() - ); - - $locationInfo = $event->getLocationInformation(); - if ($locationInfo != null) { - $document['fileName'] = $locationInfo->getFileName(); - $document['method'] = $locationInfo->getMethodName(); - $document['lineNumber'] = ($locationInfo->getLineNumber() == 'NA') ? 'NA' : (int)$locationInfo->getLineNumber(); - $document['className'] = $locationInfo->getClassName(); - } - - $throwableInfo = $event->getThrowableInformation(); - if ($throwableInfo != null) { - $document['exception'] = $this->formatThrowable($throwableInfo->getThrowable()); - } - - return $document; - } - - /** - * Converts an Exception into an array which can be logged to mongodb. - * - * Supports innner exceptions (PHP >= 5.3) - * - * @param Exception $ex - * @return array - */ - protected function formatThrowable(Exception $ex) { - $array = array( - 'message' => $ex->getMessage(), - 'code' => $ex->getCode(), - 'stackTrace' => $ex->getTraceAsString(), - ); - - if (method_exists($ex, 'getPrevious') && $ex->getPrevious() !== null) { - $array['innerException'] = $this->formatThrowable($ex->getPrevious()); - } - - return $array; - } - - /** - * Closes the connection to the logging database - */ - public function close() { - if ($this->closed != true) { - $this->collection = null; - if ($this->connection !== null) { - $this->connection->close(); - $this->connection = null; - } - $this->closed = true; - } - } - - /** - * Sets the value of {@link $host} parameter. - * @param string $host - */ - public function setHost($host) { - if (!preg_match('/^mongodb\:\/\//', $host)) { - $host = self::DEFAULT_MONGO_URL_PREFIX . $host; - } - $this->host = $host; - } - - /** - * Returns the value of {@link $host} parameter. - * @return string - */ - public function getHost() { - return $this->host; - } - - /** - * Sets the value of {@link $port} parameter. - * @param int $port - */ - public function setPort($port) { - $this->setPositiveInteger('port', $port); - } - - /** - * Returns the value of {@link $port} parameter. - * @return int - */ - public function getPort() { - return $this->port; - } - - /** - * Sets the value of {@link $databaseName} parameter. - * @param string $databaseName - */ - public function setDatabaseName($databaseName) { - $this->setString('databaseName', $databaseName); - } - - /** - * Returns the value of {@link $databaseName} parameter. - * @return string - */ - public function getDatabaseName() { - return $this->databaseName; - } - - /** - * Sets the value of {@link $collectionName} parameter. - * @param string $collectionName - */ - public function setCollectionName($collectionName) { - $this->setString('collectionName', $collectionName); - } - - /** - * Returns the value of {@link $collectionName} parameter. - * @return string - */ - public function getCollectionName() { - return $this->collectionName; - } - - /** - * Sets the value of {@link $userName} parameter. - * @param string $userName - */ - public function setUserName($userName) { - $this->setString('userName', $userName, true); - } - - /** - * Returns the value of {@link $userName} parameter. - * @return string - */ - public function getUserName() { - return $this->userName; - } - - /** - * Sets the value of {@link $password} parameter. - * @param string $password - */ - public function setPassword($password) { - $this->setString('password', $password, true); - } - - /** - * Returns the value of {@link $password} parameter. - * @return string - */ - public function getPassword() { - return $this->password; - } - - /** - * Sets the value of {@link $timeout} parameter. - * @param int $timeout - */ - public function setTimeout($timeout) { - $this->setPositiveInteger('timeout', $timeout); - } - - /** - * Returns the value of {@link $timeout} parameter. - * @return int - */ - public function getTimeout() { - return $this->timeout; - } - - /** - * Returns the mongodb connection. - * @return Mongo - */ - public function getConnection() { - return $this->connection; - } - - /** - * Returns the active mongodb collection. - * @return MongoCollection - */ - public function getCollection() { - return $this->collection; - } -} diff --git a/library/log4php/appenders/LoggerAppenderNull.php b/library/log4php/appenders/LoggerAppenderNull.php deleted file mode 100644 --- a/library/log4php/appenders/LoggerAppenderNull.php +++ /dev/null @@ -1,44 +0,0 @@ -<?php -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * A NullAppender merely exists, it never outputs a message to any device. - * - * This appender has no configurable parameters. - * - * @version $Revision: 1343601 $ - * @package log4php - * @subpackage appenders - * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0 - * @link http://logging.apache.org/log4php/docs/appenders/null.html Appender documentation - */ -class LoggerAppenderNull extends LoggerAppender { - - /** - * This appender does not require a layout. - */ - protected $requiresLayout = false; - - /** - * Do nothing. - * - * @param LoggerLoggingEvent $event - */ - public function append(LoggerLoggingEvent $event) { - } -} diff --git a/library/log4php/appenders/LoggerAppenderPDO.php b/library/log4php/appenders/LoggerAppenderPDO.php deleted file mode 100644 --- a/library/log4php/appenders/LoggerAppenderPDO.php +++ /dev/null @@ -1,282 +0,0 @@ -<?php -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * LoggerAppenderPDO appender logs to a database using the PHP's PDO extension. - * - * ## Configurable parameters: ## - * - * - dsn - The Data Source Name (DSN) used to connect to the database. - * - user - Username used to connect to the database. - * - password - Password used to connect to the database. - * - table - Name of the table to which log entries are be inserted. - * - insertSQL - Sets the insert statement for a logging event. Defaults - * to the correct one - change only if you are sure what you are doing. - * - insertPattern - The conversion pattern to use in conjuction with insert - * SQL. Must contain the same number of comma separated - * conversion patterns as there are question marks in the - * insertSQL. - * - * @version $Revision: 1374546 $ - * @package log4php - * @subpackage appenders - * @since 2.0 - * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0 - * @link http://logging.apache.org/log4php/docs/appenders/pdo.html Appender documentation - */ -class LoggerAppenderPDO extends LoggerAppender { - - // ****************************************** - // *** Configurable parameters *** - // ****************************************** - - /** - * DSN string used to connect to the database. - * @see http://www.php.net/manual/en/pdo.construct.php - */ - protected $dsn; - - /** Database user name. */ - protected $user; - - /** Database password. */ - protected $password; - - /** - * The insert query. - * - * The __TABLE__ placeholder will be replaced by the table name from - * {@link $table}. - * - * The questionmarks are part of the prepared statement, and they must - * match the number of conversion specifiers in {@link insertPattern}. - */ - protected $insertSQL = "INSERT INTO __TABLE__ (timestamp, logger, level, message, thread, file, line) VALUES (?, ?, ?, ?, ?, ?, ?)"; - - /** - * A comma separated list of {@link LoggerPatternLayout} format strings - * which replace the "?" in {@link $insertSQL}. - * - * Must contain the same number of comma separated conversion patterns as - * there are question marks in {@link insertSQL}. - * - * @see LoggerPatternLayout For conversion patterns. - */ - protected $insertPattern = "%date{Y-m-d H:i:s},%logger,%level,%message,%pid,%file,%line"; - - /** Name of the table to which to append log events. */ - protected $table = 'log4php_log'; - - /** The number of recconect attempts to make on failed append. */ - protected $reconnectAttempts = 3; - - - // ****************************************** - // *** Private memebers *** - // ****************************************** - - /** - * The PDO instance. - * @var PDO - */ - protected $db; - - /** - * Prepared statement for the insert query. - * @var PDOStatement - */ - protected $preparedInsert; - - /** This appender does not require a layout. */ - protected $requiresLayout = false; - - - // ****************************************** - // *** Appender methods *** - // ****************************************** - - /** - * Acquires a database connection based on parameters. - * Parses the insert pattern to create a chain of converters which will be - * used in forming query parameters from logging events. - */ - public function activateOptions() { - try { - $this->establishConnection(); - } catch (PDOException $e) { - $this->warn("Failed connecting to database. Closing appender. Error: " . $e->getMessage()); - $this->close(); - return; - } - - // Parse the insert patterns; pattern parts are comma delimited - $pieces = explode(',', $this->insertPattern); - $converterMap = LoggerLayoutPattern::getDefaultConverterMap(); - foreach ($pieces as $pattern) { - $parser = new LoggerPatternParser($pattern, $converterMap); - $this->converters[] = $parser->parse(); - } - - $this->closed = false; - } - - /** - * Connects to the database, and prepares the insert query. - * @throws PDOException If connect or prepare fails. - */ - protected function establishConnection() { - // Acquire database connection - $this->db = new PDO($this->dsn, $this->user, $this->password); - $this->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); - - // Prepare the insert statement - $insertSQL = str_replace('__TABLE__', $this->table, $this->insertSQL); - $this->preparedInsert = $this->db->prepare($insertSQL); - } - - /** - * Appends a new event to the database. - * - * If writing to database fails, it will retry by re-establishing the - * connection up to $reconnectAttempts times. If writing still fails, - * the appender will close. - */ - public function append(LoggerLoggingEvent $event) { - - for ($attempt = 1; $attempt <= $this->reconnectAttempts + 1; $attempt++) { - try { - // Attempt to write to database - $this->preparedInsert->execute($this->format($event)); - $this->preparedInsert->closeCursor(); - break; - } catch (PDOException $e) { - $this->warn("Failed writing to database: " . $e->getMessage()); - - // Close the appender if it's the last attempt - if ($attempt > $this->reconnectAttempts) { - $this->warn("Failed writing to database after {$this->reconnectAttempts} reconnect attempts. Closing appender."); - $this->close(); - // Otherwise reconnect and try to write again - } else { - $this->warn("Attempting a reconnect (attempt $attempt of {$this->reconnectAttempts})."); - $this->establishConnection(); - } - } - } - } - - /** - * Converts the logging event to a series of database parameters by using - * the converter chain which was set up on activation. - */ - protected function format(LoggerLoggingEvent $event) { - $params = array(); - foreach ($this->converters as $converter) { - $buffer = ''; - while ($converter !== null) { - $converter->format($buffer, $event); - $converter = $converter->next; - } - $params[] = $buffer; - } - return $params; - } - - /** - * Closes the connection to the logging database - */ - public function close() { - // Close the connection (if any) - $this->db = null; - - // Close the appender - $this->closed = true; - } - - // ****************************************** - // *** Accessor methods *** - // ****************************************** - - /** - * Returns the active database handle or null if not established. - * @return PDO - */ - public function getDatabaseHandle() { - return $this->db; - } - - /** Sets the username. */ - public function setUser($user) { - $this->setString('user', $user); - } - - /** Returns the username. */ - public function getUser($user) { - return $this->user; - } - - /** Sets the password. */ - public function setPassword($password) { - $this->setString('password', $password); - } - - /** Returns the password. */ - public function getPassword($password) { - return $this->password; - } - - /** Sets the insert SQL. */ - public function setInsertSQL($sql) { - $this->setString('insertSQL', $sql); - } - - /** Returns the insert SQL. */ - public function getInsertSQL($sql) { - return $this->insertSQL; - } - - /** Sets the insert pattern. */ - public function setInsertPattern($pattern) { - $this->setString('insertPattern', $pattern); - } - - /** Returns the insert pattern. */ - public function getInsertPattern($pattern) { - return $this->insertPattern; - } - - /** Sets the table name. */ - public function setTable($table) { - $this->setString('table', $table); - } - - /** Returns the table name. */ - public function getTable($table) { - return $this->table; - } - - /** Sets the DSN string. */ - public function setDSN($dsn) { - $this->setString('dsn', $dsn); - } - - /** Returns the DSN string. */ - public function getDSN($dsn) { - return $this->setString('dsn', $dsn); - } -} diff --git a/library/log4php/appenders/LoggerAppenderPhp.php b/library/log4php/appenders/LoggerAppenderPhp.php deleted file mode 100644 --- a/library/log4php/appenders/LoggerAppenderPhp.php +++ /dev/null @@ -1,49 +0,0 @@ -<?php -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * LoggerAppenderPhp logs events by creating a PHP user-level message using - * the PHP's trigger_error()function. - * - * This appender has no configurable parameters. - * - * Levels are mapped as follows: - * - * - <b>level < WARN</b> mapped to E_USER_NOTICE - * - <b>WARN <= level < ERROR</b> mapped to E_USER_WARNING - * - <b>level >= ERROR</b> mapped to E_USER_ERROR - * - * @version $Revision: 1337820 $ - * @package log4php - * @subpackage appenders - * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0 - * @link http://logging.apache.org/log4php/docs/appenders/php.html Appender documentation - */ -class LoggerAppenderPhp extends LoggerAppender { - - public function append(LoggerLoggingEvent $event) { - $level = $event->getLevel(); - if ($level->isGreaterOrEqual(LoggerLevel::getLevelError())) { - trigger_error($this->layout->format($event), E_USER_ERROR); - } else if ($level->isGreaterOrEqual(LoggerLevel::getLevelWarn())) { - trigger_error($this->layout->format($event), E_USER_WARNING); - } else { - trigger_error($this->layout->format($event), E_USER_NOTICE); - } - } -} diff --git a/library/log4php/appenders/LoggerAppenderRollingFile.php b/library/log4php/appenders/LoggerAppenderRollingFile.php deleted file mode 100644 --- a/library/log4php/appenders/LoggerAppenderRollingFile.php +++ /dev/null @@ -1,305 +0,0 @@ -<?php -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * @package log4php - */ - -/** - * LoggerAppenderRollingFile writes logging events to a specified file. The - * file is rolled over after a specified size has been reached. - * - * This appender uses a layout. - * - * ## Configurable parameters: ## - * - * - **file** - Path to the target file. - * - **append** - If set to true, the appender will append to the file, - * otherwise the file contents will be overwritten. - * - **maxBackupIndex** - Maximum number of backup files to keep. Default is 1. - * - **maxFileSize** - Maximum allowed file size (in bytes) before rolling - * over. Suffixes "KB", "MB" and "GB" are allowed. 10KB = 10240 bytes, etc. - * Default is 10M. - * - **compress** - If set to true, rolled-over files will be compressed. - * Requires the zlib extension. - * - * @version $Revision: 1394975 $ - * @package log4php - * @subpackage appenders - * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0 - * @link http://logging.apache.org/log4php/docs/appenders/rolling-file.html Appender documentation - */ -class LoggerAppenderRollingFile extends LoggerAppenderFile { - - /** Compressing backup files is done in chunks, this determines how large. */ - const COMPRESS_CHUNK_SIZE = 102400; // 100KB - - /** - * The maximum size (in bytes) that the output file is allowed to reach - * before being rolled over to backup files. - * - * The default maximum file size is 10MB (10485760 bytes). Maximum value - * for this option may depend on the file system. - * - * @var integer - */ - protected $maxFileSize = 10485760; - - /** - * Set the maximum number of backup files to keep around. - * - * Determines how many backup files are kept before the oldest is erased. - * This option takes a positive integer value. If set to zero, then there - * will be no backup files and the log file will be truncated when it - * reaches <var>maxFileSize</var>. - * - * There is one backup file by default. - * - * @var integer - */ - protected $maxBackupIndex = 1; - - /** - * The <var>compress</var> parameter determindes the compression with zlib. - * If set to true, the rollover files are compressed and saved with the .gz extension. - * @var boolean - */ - protected $compress = false; - - /** - * Set to true in the constructor if PHP >= 5.3.0. In that case clearstatcache - * supports conditional clearing of statistics. - * @var boolean - * @see http://php.net/manual/en/function.clearstatcache.php - */ - private $clearConditional = false; - - /** - * Get the maximum size that the output file is allowed to reach - * before being rolled over to backup files. - * @return integer - */ - public function getMaximumFileSize() { - return $this->maxFileSize; - } - - public function __construct($name = '') { - parent::__construct($name); - if (version_compare(PHP_VERSION, '5.3.0') >= 0) { - $this->clearConditional = true; - } - } - - /** - * Implements the usual roll over behaviour. - * - * If MaxBackupIndex is positive, then files File.1, ..., File.MaxBackupIndex -1 are renamed to File.2, ..., File.MaxBackupIndex. - * Moreover, File is renamed File.1 and closed. A new File is created to receive further log output. - * - * If MaxBackupIndex is equal to zero, then the File is truncated with no backup files created. - * - * Rollover must be called while the file is locked so that it is safe for concurrent access. - * - * @throws LoggerException If any part of the rollover procedure fails. - */ - private function rollOver() { - // If maxBackups <= 0, then there is no file renaming to be done. - if ($this->maxBackupIndex > 0) { - // Delete the oldest file, to keep Windows happy. - $file = $this->file . '.' . $this->maxBackupIndex; - - if (file_exists($file) && !unlink($file)) { - throw new LoggerException("Unable to delete oldest backup file from [$file]."); - } - - // Map {(maxBackupIndex - 1), ..., 2, 1} to {maxBackupIndex, ..., 3, 2} - $this->renameArchievedLogs($this->file); - - // Backup the active file - $this->moveToBackup($this->file); - } - - // Truncate the active file - ftruncate($this->fp, 0); - rewind($this->fp); - } - - private function moveToBackup($source) { - if ($this->compress) { - $target = $source . '.1.gz'; - $this->compressFile($source, $target); - } else { - $target = $source . '.1'; - copy($source, $target); - } - } - - private function compressFile($source, $target) { - $target = 'compress.zlib://' . $target; - - $fin = fopen($source, 'rb'); - if ($fin === false) { - throw new LoggerException("Unable to open file for reading: [$source]."); - } - - $fout = fopen($target, 'wb'); - if ($fout === false) { - throw new LoggerException("Unable to open file for writing: [$target]."); - } - - while (!feof($fin)) { - $chunk = fread($fin, self::COMPRESS_CHUNK_SIZE); - if (false === fwrite($fout, $chunk)) { - throw new LoggerException("Failed writing to compressed file."); - } - } - - fclose($fin); - fclose($fout); - } - - private function renameArchievedLogs($fileName) { - for ($i = $this->maxBackupIndex - 1; $i >= 1; $i--) { - - $source = $fileName . "." . $i; - if ($this->compress) { - $source .= '.gz'; - } - - if (file_exists($source)) { - $target = $fileName . '.' . ($i + 1); - if ($this->compress) { - $target .= '.gz'; - } - - rename($source, $target); - } - } - } - - /** - * Writes a string to the target file. Opens file if not already open. - * @param string $string Data to write. - */ - protected function write($string) { - // Lazy file open - if (!isset($this->fp)) { - if ($this->openFile() === false) { - return; // Do not write if file open failed. - } - } - - // Lock the file while writing and possible rolling over - if (flock($this->fp, LOCK_EX)) { - - // Write to locked file - if (fwrite($this->fp, $string) === false) { - $this->warn("Failed writing to file. Closing appender."); - $this->closed = true; - } - - // Stats cache must be cleared, otherwise filesize() returns cached results - // If supported (PHP 5.3+), clear only the state cache for the target file - if ($this->clearConditional) { - clearstatcache(true, $this->file); - } else { - clearstatcache(); - } - - // Rollover if needed - if (filesize($this->file) > $this->maxFileSize) { - try { - $this->rollOver(); - } catch (LoggerException $ex) { - $this->warn("Rollover failed: " . $ex->getMessage() . " Closing appender."); - $this->closed = true; - } - } - - flock($this->fp, LOCK_UN); - } else { - $this->warn("Failed locking file for writing. Closing appender."); - $this->closed = true; - } - } - - public function activateOptions() { - parent::activateOptions(); - - if ($this->compress && !extension_loaded('zlib')) { - $this->warn("The 'zlib' extension is required for file compression. Disabling compression."); - $this->compression = false; - } - } - - /** - * Set the 'maxBackupIndex' parameter. - * @param integer $maxBackupIndex - */ - public function setMaxBackupIndex($maxBackupIndex) { - $this->setPositiveInteger('maxBackupIndex', $maxBackupIndex); - } - - /** - * Returns the 'maxBackupIndex' parameter. - * @return integer - */ - public function getMaxBackupIndex() { - return $this->maxBackupIndex; - } - - /** - * Set the 'maxFileSize' parameter. - * @param mixed $maxFileSize - */ - public function setMaxFileSize($maxFileSize) { - $this->setFileSize('maxFileSize', $maxFileSize); - } - - /** - * Returns the 'maxFileSize' parameter. - * @return integer - */ - public function getMaxFileSize() { - return $this->maxFileSize; - } - - /** - * Set the 'maxFileSize' parameter (kept for backward compatibility). - * @param mixed $maxFileSize - * @deprecated Use setMaxFileSize() instead. - */ - public function setMaximumFileSize($maxFileSize) { - $this->warn("The 'maximumFileSize' parameter is deprecated. Use 'maxFileSize' instead."); - return $this->setMaxFileSize($maxFileSize); - } - - /** - * Sets the 'compress' parameter. - * @param boolean $compress - */ - public function setCompress($compress) { - $this->setBoolean('compress', $compress); - } - - /** - * Returns the 'compress' parameter. - * @param boolean - */ - public function getCompress() { - return $this->compress; - } -} diff --git a/library/log4php/appenders/LoggerAppenderSocket.php b/library/log4php/appenders/LoggerAppenderSocket.php deleted file mode 100644 --- a/library/log4php/appenders/LoggerAppenderSocket.php +++ /dev/null @@ -1,122 +0,0 @@ -<?php -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * LoggerAppenderSocket appends to a network socket. - * - * ## Configurable parameters: ## - * - * - **remoteHost** - Target remote host. - * - **port** - Target port (optional, defaults to 4446). - * - **timeout** - Connection timeout in seconds (optional, defaults to - * 'default_socket_timeout' from php.ini) - * - * The socket will by default be opened in blocking mode. - * - * @version $Revision: 1337820 $ - * @package log4php - * @subpackage appenders - * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0 - * @link http://logging.apache.org/log4php/docs/appenders/socket.html Appender documentation - */ -class LoggerAppenderSocket extends LoggerAppender { - - /** - * Target host. - * @see http://php.net/manual/en/function.fsockopen.php - */ - protected $remoteHost; - - /** Target port */ - protected $port = 4446; - - /** Connection timeout in ms. */ - protected $timeout; - - // ****************************************** - // *** Appender methods *** - // ****************************************** - - /** Override the default layout to use serialized. */ - public function getDefaultLayout() { - return new LoggerLayoutSerialized(); - } - - public function activateOptions() { - if (empty($this->remoteHost)) { - $this->warn("Required parameter [remoteHost] not set. Closing appender."); - $this->closed = true; - return; - } - - if (empty($this->timeout)) { - $this->timeout = ini_get("default_socket_timeout"); - } - - $this->closed = false; - } - - public function append(LoggerLoggingEvent $event) { - $socket = fsockopen($this->remoteHost, $this->port, $errno, $errstr, $this->timeout); - if ($socket === false) { - $this->warn("Could not open socket to {$this->remoteHost}:{$this->port}. Closing appender."); - $this->closed = true; - return; - } - - if (false === fwrite($socket, $this->layout->format($event))) { - $this->warn("Error writing to socket. Closing appender."); - $this->closed = true; - } - fclose($socket); - } - - // ****************************************** - // *** Accessor methods *** - // ****************************************** - - /** Sets the target host. */ - public function setRemoteHost($hostname) { - $this->setString('remoteHost', $hostname); - } - - /** Sets the target port */ - public function setPort($port) { - $this->setPositiveInteger('port', $port); - } - - /** Sets the timeout. */ - public function setTimeout($timeout) { - $this->setPositiveInteger('timeout', $timeout); - } - - /** Returns the target host. */ - public function getRemoteHost() { - return $this->getRemoteHost(); - } - - /** Returns the target port. */ - public function getPort() { - return $this->port; - } - - /** Returns the timeout */ - public function getTimeout() { - return $this->timeout; - } -} diff --git a/library/log4php/appenders/LoggerAppenderSyslog.php b/library/log4php/appenders/LoggerAppenderSyslog.php deleted file mode 100644 --- a/library/log4php/appenders/LoggerAppenderSyslog.php +++ /dev/null @@ -1,303 +0,0 @@ -<?php -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * Log events to a system log using the PHP syslog() function. - * - * This appenders requires a layout. - * - * ## Configurable parameters: ## - * - * - **ident** - The ident of the syslog message. - * - **priority** - The priority for the syslog message (used when overriding - * priority). - * - **facility** - The facility for the syslog message - * - **overridePriority** - If set to true, the message priority will always - * use the value defined in {@link $priority}, otherwise the priority will - * be determined by the message's log level. - * - **option** - The option value for the syslog message. - * - * Recognised syslog options are: - * - * - CONS - if there is an error while sending data to the system logger, write directly to the system console - * - NDELAY - open the connection to the logger immediately - * - ODELAY - delay opening the connection until the first message is logged (default) - * - PERROR - print log message also to standard error - * - PID - include PID with each message - * - * Multiple options can be set by delimiting them with a pipe character, - * e.g.: "CONS|PID|PERROR". - * - * Recognised syslog priorities are: - * - * - EMERG - * - ALERT - * - CRIT - * - ERR - * - WARNING - * - NOTICE - * - INFO - * - DEBUG - * - * Levels are mapped as follows: - * - * - <b>FATAL</b> to LOG_ALERT - * - <b>ERROR</b> to LOG_ERR - * - <b>WARN</b> to LOG_WARNING - * - <b>INFO</b> to LOG_INFO - * - <b>DEBUG</b> to LOG_DEBUG - * - <b>TRACE</b> to LOG_DEBUG - * - * @version $Revision: 1337820 $ - * @package log4php - * @subpackage appenders - * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0 - * @link http://logging.apache.org/log4php/docs/appenders/syslog.html Appender documentation - */ -class LoggerAppenderSyslog extends LoggerAppender { - - /** - * The ident string is added to each message. Typically the name of your application. - * - * @var string - */ - protected $ident = "Apache log4php"; - - /** - * The syslog priority to use when overriding priority. This setting is - * required if {@link overridePriority} is set to true. - * - * @var string - */ - protected $priority; - - /** - * The option used when opening the syslog connection. - * - * @var string - */ - protected $option = 'PID|CONS'; - - /** - * The facility value indicates the source of the message. - * - * @var string - */ - protected $facility = 'USER'; - - /** - * If set to true, the message priority will always use the value defined - * in {@link $priority}, otherwise the priority will be determined by the - * message's log level. - * - * @var string - */ - protected $overridePriority = false; - - /** - * Holds the int value of the {@link $priority}. - * @var int - */ - private $intPriority; - - /** - * Holds the int value of the {@link $facility}. - * @var int - */ - private $intFacility; - - /** - * Holds the int value of the {@link $option}. - * @var int - */ - private $intOption; - - /** - * Sets the {@link $ident}. - * - * @param string $ident - */ - public function setIdent($ident) { - $this->ident = $ident; - } - - /** - * Sets the {@link $priority}. - * - * @param string $priority - */ - public function setPriority($priority) { - $this->priority = $priority; - } - - /** - * Sets the {@link $facility}. - * - * @param string $facility - */ - public function setFacility($facility) { - $this->facility = $facility; - } - - /** - * Sets the {@link $overridePriority}. - * - * @param string $overridePriority - */ - public function setOverridePriority($overridePriority) { - $this->overridePriority = $overridePriority; - } - - /** - * Sets the 'option' parameter. - * - * @param string $option - */ - public function setOption($option) { - $this->option = $option; - } - - /** - * Returns the 'ident' parameter. - * - * @return string $ident - */ - public function getIdent() { - return $this->ident; - } - - /** - * Returns the 'priority' parameter. - * - * @return string - */ - public function getPriority() { - return $this->priority; - } - - /** - * Returns the 'facility' parameter. - * - * @return string - */ - public function getFacility() { - return $this->facility; - } - - /** - * Returns the 'overridePriority' parameter. - * - * @return string - */ - public function getOverridePriority() { - return $this->overridePriority; - } - - /** - * Returns the 'option' parameter. - * - * @return string - */ - public function getOption() { - return $this->option; - } - - - public function activateOptions() { - $this->intPriority = $this->parsePriority(); - $this->intOption = $this->parseOption(); - $this->intFacility = $this->parseFacility(); - - $this->closed = false; - } - - public function close() { - if ($this->closed != true) { - closelog(); - $this->closed = true; - } - } - - /** - * Appends the event to syslog. - * - * Log is opened and closed each time because if it is not closed, it - * can cause the Apache httpd server to log to whatever ident/facility - * was used in openlog(). - * - * @see http://www.php.net/manual/en/function.syslog.php#97843 - */ - public function append(LoggerLoggingEvent $event) { - $priority = $this->getSyslogPriority($event->getLevel()); - $message = $this->layout->format($event); - - openlog($this->ident, $this->intOption, $this->intFacility); - syslog($priority, $message); - closelog(); - } - - /** Determines which syslog priority to use based on the given level. */ - private function getSyslogPriority(LoggerLevel $level) { - if ($this->overridePriority) { - return $this->intPriority; - } - return $level->getSyslogEquivalent(); - } - - /** Parses a syslog option string and returns the correspodning int value. */ - private function parseOption() { - $value = 0; - $options = explode('|', $this->option); - - foreach ($options as $option) { - if (!empty($option)) { - $constant = "LOG_" . trim($option); - if (defined($constant)) { - $value |= constant($constant); - } else { - trigger_error("log4php: Invalid syslog option provided: $option. Whole option string: {$this->option}.", E_USER_WARNING); - } - } - } - return $value; - } - - /** Parses the facility string and returns the corresponding int value. */ - private function parseFacility() { - if (!empty($this->facility)) { - $constant = "LOG_" . trim($this->facility); - if (defined($constant)) { - return constant($constant); - } else { - trigger_error("log4php: Invalid syslog facility provided: {$this->facility}.", E_USER_WARNING); - } - } - } - - /** Parses the priority string and returns the corresponding int value. */ - private function parsePriority() { - if (!empty($this->priority)) { - $constant = "LOG_" . trim($this->priority); - if (defined($constant)) { - return constant($constant); - } else { - trigger_error("log4php: Invalid syslog priority provided: {$this->priority}.", E_USER_WARNING); - } - } - } -} diff --git a/library/log4php/configurators/LoggerConfigurationAdapter.php b/library/log4php/configurators/LoggerConfigurationAdapter.php deleted file mode 100644 --- a/library/log4php/configurators/LoggerConfigurationAdapter.php +++ /dev/null @@ -1,38 +0,0 @@ -<?php -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * @package log4php - */ - -/** - * The interface for configurator adapters. - * - * Adapters convert configuration in several formats such as XML, ini and PHP - * file to a PHP array. - * - * @package log4php - * @subpackage configurators - * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0 - * @version $Revision: 1343601 $ - * @since 2.2 - */ -interface LoggerConfigurationAdapter { - /** Converts the configuration file to PHP format usable by the configurator. */ - public function convert($input); - -} - diff --git a/library/log4php/configurators/LoggerConfigurationAdapterINI.php b/library/log4php/configurators/LoggerConfigurationAdapterINI.php deleted file mode 100644 --- a/library/log4php/configurators/LoggerConfigurationAdapterINI.php +++ /dev/null @@ -1,291 +0,0 @@ -<?php -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * @package log4php - */ - -/** - * Converts ini configuration files to a PHP array. - * - * These used to be called "properties" files (inherited from log4j), and that - * file extension is still supported. - * - * @package log4php - * @subpackage configurators - * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0 - * @version $Revision: 1343601 $ - * @since 2.2 - */ -class LoggerConfigurationAdapterINI implements LoggerConfigurationAdapter { - - /** Name to assign to the root logger. */ - const ROOT_LOGGER_NAME = "root"; - - /** Prefix used for defining logger additivity. */ - const ADDITIVITY_PREFIX = "log4php.additivity."; - - /** Prefix used for defining logger threshold. */ - const THRESHOLD_PREFIX = "log4php.threshold"; - - /** Prefix used for defining the root logger. */ - const ROOT_LOGGER_PREFIX = "log4php.rootLogger"; - - /** Prefix used for defining a logger. */ - const LOGGER_PREFIX = "log4php.logger."; - - /** Prefix used for defining an appender. */ - const APPENDER_PREFIX = "log4php.appender."; - - /** Prefix used for defining a renderer. */ - const RENDERER_PREFIX = "log4php.renderer."; - - /** Holds the configuration. */ - private $config = array(); - - /** - * Loads and parses the INI configuration file. - * - * @param string $url Path to the config file. - * @throws LoggerException - */ - private function load($url) { - if (!file_exists($url)) { - throw new LoggerException("File [$url] does not exist."); - } - - $properties = @parse_ini_file($url, true); - if ($properties === false) { - $error = error_get_last(); - throw new LoggerException("Error parsing configuration file: {$error['message']}"); - } - - return $properties; - } - - /** - * Converts the provided INI configuration file to a PHP array config. - * - * @param string $path Path to the config file. - * @throws LoggerException If the file cannot be loaded or parsed. - */ - public function convert($path) { - // Load the configuration - $properties = $this->load($path); - - // Parse threshold - if (isset($properties[self::THRESHOLD_PREFIX])) { - $this->config['threshold'] = $properties[self::THRESHOLD_PREFIX]; - } - - // Parse root logger - if (isset($properties[self::ROOT_LOGGER_PREFIX])) { - $this->parseLogger($properties[self::ROOT_LOGGER_PREFIX], self::ROOT_LOGGER_NAME); - } - - $appenders = array(); - - foreach ($properties as $key => $value) { - // Parse loggers - if ($this->beginsWith($key, self::LOGGER_PREFIX)) { - $name = substr($key, strlen(self::LOGGER_PREFIX)); - $this->parseLogger($value, $name); - } - - // Parse additivity - if ($this->beginsWith($key, self::ADDITIVITY_PREFIX)) { - $name = substr($key, strlen(self::ADDITIVITY_PREFIX)); - $this->config['loggers'][$name]['additivity'] = $value; - } // Parse appenders - else if ($this->beginsWith($key, self::APPENDER_PREFIX)) { - $this->parseAppender($key, $value); - } // Parse renderers - else if ($this->beginsWith($key, self::RENDERER_PREFIX)) { - $this->parseRenderer($key, $value); - } - } - - return $this->config; - } - - - /** - * Parses a logger definition. - * - * Loggers are defined in the following manner: - * <pre> - * log4php.logger.<name> = [<level>], [<appender-ref>, <appender-ref>, ...] - * </pre> - * - * @param string $value The configuration value (level and appender-refs). - * @param string $name Logger name. - */ - private function parseLogger($value, $name) { - // Value is divided by commas - $parts = explode(',', $value); - if (empty($value) || empty($parts)) { - return; - } - - // The first value is the logger level - $level = array_shift($parts); - - // The remaining values are appender references - $appenders = array(); - while ($appender = array_shift($parts)) { - $appender = trim($appender); - if (!empty($appender)) { - $appenders[] = trim($appender); - } - } - - // Find the target configuration - if ($name == self::ROOT_LOGGER_NAME) { - $this->config['rootLogger']['level'] = trim($level); - $this->config['rootLogger']['appenders'] = $appenders; - } else { - $this->config['loggers'][$name]['level'] = trim($level); - $this->config['loggers'][$name]['appenders'] = $appenders; - } - } - - /** - * Parses an configuration line pertaining to an appender. - * - * Parses the following patterns: - * - * Appender class: - * <pre> - * log4php.appender.<name> = <class> - * </pre> - * - * Appender parameter: - * <pre> - * log4php.appender.<name>.<param> = <value> - * </pre> - * - * Appender threshold: - * <pre> - * log4php.appender.<name>.threshold = <level> - * </pre> - * - * Appender layout: - * <pre> - * log4php.appender.<name>.layout = <layoutClass> - * </pre> - * - * Layout parameter: - * <pre> - * log4php.appender.<name>.layout.<param> = <value> - * </pre> - * - * For example, a full appender config might look like: - * <pre> - * log4php.appender.myAppender = LoggerAppenderConsole - * log4php.appender.myAppender.threshold = info - * log4php.appender.myAppender.target = stdout - * log4php.appender.myAppender.layout = LoggerLayoutPattern - * log4php.appender.myAppender.layout.conversionPattern = "%d %c: %m%n" - * </pre> - * - * After parsing all these options, the following configuration can be - * found under $this->config['appenders']['myAppender']: - * <pre> - * array( - * 'class' => LoggerAppenderConsole, - * 'threshold' => info, - * 'params' => array( - * 'target' => 'stdout' - * ), - * 'layout' => array( - * 'class' => 'LoggerAppenderConsole', - * 'params' => array( - * 'conversionPattern' => '%d %c: %m%n' - * ) - * ) - * ) - * </pre> - * - * @param string $key - * @param string $value - */ - private function parseAppender($key, $value) { - - // Remove the appender prefix from key - $subKey = substr($key, strlen(self::APPENDER_PREFIX)); - - // Divide the string by dots - $parts = explode('.', $subKey); - $count = count($parts); - - // The first part is always the appender name - $name = trim($parts[0]); - - // Only one part - this line defines the appender class - if ($count == 1) { - $this->config['appenders'][$name]['class'] = $value; - return; - } // Two parts - either a parameter, a threshold or layout class - else if ($count == 2) { - - if ($parts[1] == 'layout') { - $this->config['appenders'][$name]['layout']['class'] = $value; - return; - } else if ($parts[1] == 'threshold') { - $this->config['appenders'][$name]['threshold'] = $value; - return; - } else { - $this->config['appenders'][$name]['params'][$parts[1]] = $value; - return; - } - } // Three parts - this can only be a layout parameter - else if ($count == 3) { - if ($parts[1] == 'layout') { - $this->config['appenders'][$name]['layout']['params'][$parts[2]] = $value; - return; - } - } - - trigger_error("log4php: Don't know how to parse the following line: \"$key = $value\". Skipping."); - } - - /** - * Parses a renderer definition. - * - * Renderers are defined as: - * <pre> - * log4php.renderer.<renderedClass> = <renderingClass> - * </pre> - * - * @param string $key log4php.renderer.<renderedClass> - * @param string $value <renderingClass> - */ - private function parseRenderer($key, $value) { - // Remove the appender prefix from key - $renderedClass = substr($key, strlen(self::APPENDER_PREFIX)); - $renderingClass = $value; - - $this->config['renderers'][] = compact('renderedClass', 'renderingClass'); - } - - /** Helper method. Returns true if $str begins with $sub. */ - private function beginsWith($str, $sub) { - return (strncmp($str, $sub, strlen($sub)) == 0); - } - - -} - diff --git a/library/log4php/configurators/LoggerConfigurationAdapterPHP.php b/library/log4php/configurators/LoggerConfigurationAdapterPHP.php deleted file mode 100644 --- a/library/log4php/configurators/LoggerConfigurationAdapterPHP.php +++ /dev/null @@ -1,83 +0,0 @@ -<?php -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * @package log4php - */ - -/** - * Converts PHP configuration files to a PHP array. - * - * The file should only hold the PHP config array preceded by "return". - * - * Example PHP config file: - * <code> - * <?php - * return array( - * 'rootLogger' => array( - * 'level' => 'info', - * 'appenders' => array('default') - * ), - * 'appenders' => array( - * 'default' => array( - * 'class' => 'LoggerAppenderEcho', - * 'layout' => array( - * 'class' => 'LoggerLayoutSimple' - * ) - * ) - * ) - * ) - * ?> - * </code> - * - * @package log4php - * @subpackage configurators - * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0 - * @version $Revision: 1343601 $ - * @since 2.2 - */ -class LoggerConfigurationAdapterPHP implements LoggerConfigurationAdapter { - public function convert($url) { - if (!file_exists($url)) { - throw new LoggerException("File [$url] does not exist."); - } - - // Load the config file - $data = @file_get_contents($url); - if ($data === false) { - $error = error_get_last(); - throw new LoggerException("Error loading config file: {$error['message']}"); - } - - $config = @eval('?>' . $data); - - if ($config === false) { - $error = error_get_last(); - throw new LoggerException("Error parsing configuration: " . $error['message']); - } - - if (empty($config)) { - throw new LoggerException("Invalid configuration: empty configuration array."); - } - - if (!is_array($config)) { - throw new LoggerException("Invalid configuration: not an array."); - } - - return $config; - } -} - diff --git a/library/log4php/configurators/LoggerConfigurationAdapterXML.php b/library/log4php/configurators/LoggerConfigurationAdapterXML.php deleted file mode 100644 --- a/library/log4php/configurators/LoggerConfigurationAdapterXML.php +++ /dev/null @@ -1,278 +0,0 @@ -<?php -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * @package log4php - */ - -/** - * Converts XML configuration files to a PHP array. - * - * @package log4php - * @subpackage configurators - * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0 - * @version $Revision: 1394956 $ - * @since 2.2 - */ -class LoggerConfigurationAdapterXML implements LoggerConfigurationAdapter { - /** Path to the XML schema used for validation. */ - const SCHEMA_PATH = '/../xml/log4php.xsd'; - - private $config = array( - 'appenders' => array(), - 'loggers' => array(), - 'renderers' => array(), - ); - - public function convert($url) { - $xml = $this->loadXML($url); - - $this->parseConfiguration($xml); - - // Parse the <root> node - if (isset($xml->root)) { - $this->parseRootLogger($xml->root); - } - - // Process <logger> nodes - foreach ($xml->logger as $logger) { - $this->parseLogger($logger); - } - - // Process <appender> nodes - foreach ($xml->appender as $appender) { - $this->parseAppender($appender); - } - - // Process <renderer> nodes - foreach ($xml->renderer as $rendererNode) { - $this->parseRenderer($rendererNode); - } - - // Process <defaultRenderer> node - foreach ($xml->defaultRenderer as $rendererNode) { - $this->parseDefaultRenderer($rendererNode); - } - - return $this->config; - } - - /** - * Loads and validates the XML. - * @param string $url Input XML. - */ - private function loadXML($url) { - if (!file_exists($url)) { - throw new LoggerException("File [$url] does not exist."); - } - - libxml_clear_errors(); - $oldValue = libxml_use_internal_errors(true); - - // Load XML - $xml = @simplexml_load_file($url); - if ($xml === false) { - - $errorStr = ""; - foreach (libxml_get_errors() as $error) { - $errorStr .= $error->message; - } - - throw new LoggerException("Error loading configuration file: " . trim($errorStr)); - } - - libxml_clear_errors(); - libxml_use_internal_errors($oldValue); - - return $xml; - } - - /** - * Parses the <configuration> node. - */ - private function parseConfiguration(SimpleXMLElement $xml) { - $attributes = $xml->attributes(); - if (isset($attributes['threshold'])) { - $this->config['threshold'] = (string)$attributes['threshold']; - } - } - - /** Parses an <appender> node. */ - private function parseAppender(SimpleXMLElement $node) { - $name = $this->getAttributeValue($node, 'name'); - if (empty($name)) { - $this->warn("An <appender> node is missing the required 'name' attribute. Skipping appender definition."); - return; - } - - $appender = array(); - $appender['class'] = $this->getAttributeValue($node, 'class'); - - if (isset($node['threshold'])) { - $appender['threshold'] = $this->getAttributeValue($node, 'threshold'); - } - - if (isset($node->layout)) { - $appender['layout'] = $this->parseLayout($node->layout, $name); - } - - if (count($node->param) > 0) { - $appender['params'] = $this->parseParameters($node); - } - - foreach ($node->filter as $filterNode) { - $appender['filters'][] = $this->parseFilter($filterNode); - } - - $this->config['appenders'][$name] = $appender; - } - - /** Parses a <layout> node. */ - private function parseLayout(SimpleXMLElement $node, $appenderName) { - $layout = array(); - $layout['class'] = $this->getAttributeValue($node, 'class'); - - if (count($node->param) > 0) { - $layout['params'] = $this->parseParameters($node); - } - - return $layout; - } - - /** Parses any <param> child nodes returning them in an array. */ - private function parseParameters($paramsNode) { - $params = array(); - - foreach ($paramsNode->param as $paramNode) { - if (empty($paramNode['name'])) { - $this->warn("A <param> node is missing the required 'name' attribute. Skipping parameter."); - continue; - } - - $name = $this->getAttributeValue($paramNode, 'name'); - $value = $this->getAttributeValue($paramNode, 'value'); - - $params[$name] = $value; - } - - return $params; - } - - /** Parses a <root> node. */ - private function parseRootLogger(SimpleXMLElement $node) { - $logger = array(); - - if (isset($node->level)) { - $logger['level'] = $this->getAttributeValue($node->level, 'value'); - } - - $logger['appenders'] = $this->parseAppenderReferences($node); - - $this->config['rootLogger'] = $logger; - } - - /** Parses a <logger> node. */ - private function parseLogger(SimpleXMLElement $node) { - $logger = array(); - - $name = $this->getAttributeValue($node, 'name'); - if (empty($name)) { - $this->warn("A <logger> node is missing the required 'name' attribute. Skipping logger definition."); - return; - } - - if (isset($node->level)) { - $logger['level'] = $this->getAttributeValue($node->level, 'value'); - } - - if (isset($node['additivity'])) { - $logger['additivity'] = $this->getAttributeValue($node, 'additivity'); - } - - $logger['appenders'] = $this->parseAppenderReferences($node); - - // Check for duplicate loggers - if (isset($this->config['loggers'][$name])) { - $this->warn("Duplicate logger definition [$name]. Overwriting."); - } - - $this->config['loggers'][$name] = $logger; - } - - /** - * Parses a <logger> node for appender references and returns them in an array. - * - * Previous versions supported appender-ref, as well as appender_ref so both - * are parsed for backward compatibility. - */ - private function parseAppenderReferences(SimpleXMLElement $node) { - $refs = array(); - foreach ($node->appender_ref as $ref) { - $refs[] = $this->getAttributeValue($ref, 'ref'); - } - - foreach ($node->{'appender-ref'} as $ref) { - $refs[] = $this->getAttributeValue($ref, 'ref'); - } - - return $refs; - } - - /** Parses a <filter> node. */ - private function parseFilter($filterNode) { - $filter = array(); - $filter['class'] = $this->getAttributeValue($filterNode, 'class'); - - if (count($filterNode->param) > 0) { - $filter['params'] = $this->parseParameters($filterNode); - } - - return $filter; - } - - /** Parses a <renderer> node. */ - private function parseRenderer(SimpleXMLElement $node) { - $renderedClass = $this->getAttributeValue($node, 'renderedClass'); - $renderingClass = $this->getAttributeValue($node, 'renderingClass'); - - $this->config['renderers'][] = compact('renderedClass', 'renderingClass'); - } - - /** Parses a <defaultRenderer> node. */ - private function parseDefaultRenderer(SimpleXMLElement $node) { - $renderingClass = $this->getAttributeValue($node, 'renderingClass'); - - // Warn on duplicates - if (isset($this->config['defaultRenderer'])) { - $this->warn("Duplicate <defaultRenderer> node. Overwriting."); - } - - $this->config['defaultRenderer'] = $renderingClass; - } - - // ****************************************** - // ** Helper methods ** - // ****************************************** - - private function getAttributeValue(SimpleXMLElement $node, $name) { - return isset($node[$name]) ? (string)$node[$name] : null; - } - - private function warn($message) { - trigger_error("log4php: " . $message, E_USER_WARNING); - } -} - diff --git a/library/log4php/configurators/LoggerConfiguratorDefault.php b/library/log4php/configurators/LoggerConfiguratorDefault.php deleted file mode 100644 --- a/library/log4php/configurators/LoggerConfiguratorDefault.php +++ /dev/null @@ -1,470 +0,0 @@ -<?php -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * @package log4php - */ - -/** - * Default implementation of the logger configurator. - * - * Configures log4php based on a provided configuration file or array. - * - * @package log4php - * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0 - * @version $Revision: 1394956 $ - * @since 2.2 - */ -class LoggerConfiguratorDefault implements LoggerConfigurator { - /** XML configuration file format. */ - const FORMAT_XML = 'xml'; - - /** PHP configuration file format. */ - const FORMAT_PHP = 'php'; - - /** INI (properties) configuration file format. */ - const FORMAT_INI = 'ini'; - - /** Defines which adapter should be used for parsing which format. */ - private $adapters = array( - self::FORMAT_XML => 'LoggerConfigurationAdapterXML', - self::FORMAT_INI => 'LoggerConfigurationAdapterINI', - self::FORMAT_PHP => 'LoggerConfigurationAdapterPHP', - ); - - /** Default configuration; used if no configuration file is provided. */ - private static $defaultConfiguration = array( - 'threshold' => 'ALL', - 'rootLogger' => array( - 'level' => 'DEBUG', - 'appenders' => array('default'), - ), - 'appenders' => array( - 'default' => array( - 'class' => 'LoggerAppenderEcho' - ), - ), - ); - - /** Holds the appenders before they are linked to loggers. */ - private $appenders = array(); - - /** - * Configures log4php based on the given configuration. The input can - * either be a path to the config file, or a PHP array holding the - * configuration. - * - * If no configuration is given, or if the given configuration cannot be - * parsed for whatever reason, a warning will be issued, and log4php - * will use the default configuration contained in - * {@link $defaultConfiguration}. - * - * @param LoggerHierarchy $hierarchy The hierarchy on which to perform - * the configuration. - * @param string|array $input Either path to the config file or the - * configuration as an array. If not set, default configuration - * will be used. - */ - public function configure(LoggerHierarchy $hierarchy, $input = null) { - $config = $this->parse($input); - $this->doConfigure($hierarchy, $config); - } - - /** - * Parses the given configuration and returns the parsed configuration - * as a PHP array. Does not perform any configuration. - * - * If no configuration is given, or if the given configuration cannot be - * parsed for whatever reason, a warning will be issued, and the default - * configuration will be returned ({@link $defaultConfiguration}). - * - * @param string|array $input Either path to the config file or the - * configuration as an array. If not set, default configuration - * will be used. - * @return array The parsed configuration. - */ - public function parse($input) { - // No input - use default configuration - if (!isset($input)) { - $config = self::$defaultConfiguration; - } // Array input - contains configuration within the array - else if (is_array($input)) { - $config = $input; - } // String input - contains path to configuration file - else if (is_string($input)) { - try { - $config = $this->parseFile($input); - } catch (LoggerException $e) { - $this->warn("Configuration failed. " . $e->getMessage() . " Using default configuration."); - $config = self::$defaultConfiguration; - } - } // Anything else is an error - else { - $this->warn("Invalid configuration param given. Reverting to default configuration."); - $config = self::$defaultConfiguration; - } - - return $config; - } - - /** - * Returns the default log4php configuration. - * @return array - */ - public static function getDefaultConfiguration() { - return self::$defaultConfiguration; - } - - /** - * Loads the configuration file from the given URL, determines which - * adapter to use, converts the configuration to a PHP array and - * returns it. - * - * @param string $url Path to the config file. - * @return The configuration from the config file, as a PHP array. - * @throws LoggerException If the configuration file cannot be loaded, or - * if the parsing fails. - */ - private function parseFile($url) { - - if (!file_exists($url)) { - throw new LoggerException("File not found at [$url]."); - } - - $type = $this->getConfigType($url); - $adapterClass = $this->adapters[$type]; - - $adapter = new $adapterClass(); - return $adapter->convert($url); - } - - /** Determines configuration file type based on the file extension. */ - private function getConfigType($url) { - $info = pathinfo($url); - $ext = strtolower($info['extension']); - - switch ($ext) { - case 'xml': - return self::FORMAT_XML; - - case 'ini': - case 'properties': - return self::FORMAT_INI; - - case 'php': - return self::FORMAT_PHP; - - default: - throw new LoggerException("Unsupported configuration file extension: $ext"); - } - } - - /** - * Constructs the logger hierarchy based on configuration. - * - * @param LoggerHierarchy $hierarchy - * @param array $config - */ - private function doConfigure(LoggerHierarchy $hierarchy, $config) { - if (isset($config['threshold'])) { - $threshold = LoggerLevel::toLevel($config['threshold']); - if (isset($threshold)) { - $hierarchy->setThreshold($threshold); - } else { - $this->warn("Invalid threshold value [{$config['threshold']}] specified. Ignoring threshold definition."); - } - } - - // Configure appenders and add them to the appender pool - if (isset($config['appenders']) && is_array($config['appenders'])) { - foreach ($config['appenders'] as $name => $appenderConfig) { - $this->configureAppender($name, $appenderConfig); - } - } - - // Configure root logger - if (isset($config['rootLogger'])) { - $this->configureRootLogger($hierarchy, $config['rootLogger']); - } - - // Configure loggers - if (isset($config['loggers']) && is_array($config['loggers'])) { - foreach ($config['loggers'] as $loggerName => $loggerConfig) { - $this->configureOtherLogger($hierarchy, $loggerName, $loggerConfig); - } - } - - // Configure renderers - if (isset($config['renderers']) && is_array($config['renderers'])) { - foreach ($config['renderers'] as $rendererConfig) { - $this->configureRenderer($hierarchy, $rendererConfig); - } - } - - if (isset($config['defaultRenderer'])) { - $this->configureDefaultRenderer($hierarchy, $config['defaultRenderer']); - } - } - - private function configureRenderer(LoggerHierarchy $hierarchy, $config) { - if (empty($config['renderingClass'])) { - $this->warn("Rendering class not specified. Skipping renderer definition."); - return; - } - - if (empty($config['renderedClass'])) { - $this->warn("Rendered class not specified. Skipping renderer definition."); - return; - } - - // Error handling performed by RendererMap - $hierarchy->getRendererMap()->addRenderer($config['renderedClass'], $config['renderingClass']); - } - - private function configureDefaultRenderer(LoggerHierarchy $hierarchy, $class) { - if (empty($class)) { - $this->warn("Rendering class not specified. Skipping default renderer definition."); - return; - } - - // Error handling performed by RendererMap - $hierarchy->getRendererMap()->setDefaultRenderer($class); - } - - /** - * Configures an appender based on given config and saves it to - * {@link $appenders} array so it can be later linked to loggers. - * @param string $name Appender name. - * @param array $config Appender configuration options. - */ - private function configureAppender($name, $config) { - - // TODO: add this check to other places where it might be useful - if (!is_array($config)) { - $type = gettype($config); - $this->warn("Invalid configuration provided for appender [$name]. Expected an array, found <$type>. Skipping appender definition."); - return; - } - - // Parse appender class - $class = $config['class']; - if (empty($class)) { - $this->warn("No class given for appender [$name]. Skipping appender definition."); - return; - } - if (!class_exists($class)) { - $this->warn("Invalid class [$class] given for appender [$name]. Class does not exist. Skipping appender definition."); - return; - } - - // Instantiate the appender - $appender = new $class($name); - if (!($appender instanceof LoggerAppender)) { - $this->warn("Invalid class [$class] given for appender [$name]. Not a valid LoggerAppender class. Skipping appender definition."); - return; - } - - // Parse the appender threshold - if (isset($config['threshold'])) { - $threshold = LoggerLevel::toLevel($config['threshold']); - if ($threshold instanceof LoggerLevel) { - $appender->setThreshold($threshold); - } else { - $this->warn("Invalid threshold value [{$config['threshold']}] specified for appender [$name]. Ignoring threshold definition."); - } - } - - // Parse the appender layout - if ($appender->requiresLayout() && isset($config['layout'])) { - $this->createAppenderLayout($appender, $config['layout']); - } - - // Parse filters - if (isset($config['filters']) && is_array($config['filters'])) { - foreach ($config['filters'] as $filterConfig) { - $this->createAppenderFilter($appender, $filterConfig); - } - } - - // Set options if any - if (isset($config['params'])) { - $this->setOptions($appender, $config['params']); - } - - // Activate and save for later linking to loggers - $appender->activateOptions(); - $this->appenders[$name] = $appender; - } - - /** - * Parses layout config, creates the layout and links it to the appender. - * @param LoggerAppender $appender - * @param array $config Layout configuration. - */ - private function createAppenderLayout(LoggerAppender $appender, $config) { - $name = $appender->getName(); - $class = $config['class']; - if (empty($class)) { - $this->warn("Layout class not specified for appender [$name]. Reverting to default layout."); - return; - } - if (!class_exists($class)) { - $this->warn("Nonexistant layout class [$class] specified for appender [$name]. Reverting to default layout."); - return; - } - - $layout = new $class(); - if (!($layout instanceof LoggerLayout)) { - $this->warn("Invalid layout class [$class] sepcified for appender [$name]. Reverting to default layout."); - return; - } - - if (isset($config['params'])) { - $this->setOptions($layout, $config['params']); - } - - $layout->activateOptions(); - $appender->setLayout($layout); - } - - /** - * Parses filter config, creates the filter and adds it to the appender's - * filter chain. - * @param LoggerAppender $appender - * @param array $config Filter configuration. - */ - private function createAppenderFilter(LoggerAppender $appender, $config) { - $name = $appender->getName(); - $class = $config['class']; - if (!class_exists($class)) { - $this->warn("Nonexistant filter class [$class] specified on appender [$name]. Skipping filter definition."); - return; - } - - $filter = new $class(); - if (!($filter instanceof LoggerFilter)) { - $this->warn("Invalid filter class [$class] sepcified on appender [$name]. Skipping filter definition."); - return; - } - - if (isset($config['params'])) { - $this->setOptions($filter, $config['params']); - } - - $filter->activateOptions(); - $appender->addFilter($filter); - } - - /** - * Configures the root logger - * @see configureLogger() - */ - private function configureRootLogger(LoggerHierarchy $hierarchy, $config) { - $logger = $hierarchy->getRootLogger(); - $this->configureLogger($logger, $config); - } - - /** - * Configures a logger which is not root. - * @see configureLogger() - */ - private function configureOtherLogger(LoggerHierarchy $hierarchy, $name, $config) { - // Get logger from hierarchy (this creates it if it doesn't already exist) - $logger = $hierarchy->getLogger($name); - $this->configureLogger($logger, $config); - } - - /** - * Configures a logger. - * - * @param Logger $logger The logger to configure - * @param array $config Logger configuration options. - */ - private function configureLogger(Logger $logger, $config) { - $loggerName = $logger->getName(); - - // Set logger level - if (isset($config['level'])) { - $level = LoggerLevel::toLevel($config['level']); - if (isset($level)) { - $logger->setLevel($level); - } else { - $this->warn("Invalid level value [{$config['level']}] specified for logger [$loggerName]. Ignoring level definition."); - } - } - - // Link appenders to logger - if (isset($config['appenders'])) { - foreach ($config['appenders'] as $appenderName) { - if (isset($this->appenders[$appenderName])) { - $logger->addAppender($this->appenders[$appenderName]); - } else { - $this->warn("Nonexistnant appender [$appenderName] linked to logger [$loggerName]."); - } - } - } - - // Set logger additivity - if (isset($config['additivity'])) { - try { - $additivity = LoggerOptionConverter::toBooleanEx($config['additivity'], null); - $logger->setAdditivity($additivity); - } catch (Exception $ex) { - $this->warn("Invalid additivity value [{$config['additivity']}] specified for logger [$loggerName]. Ignoring additivity setting."); - } - } - } - - /** - * Helper method which applies given options to an object which has setters - * for these options (such as appenders, layouts, etc.). - * - * For example, if options are: - * <code> - * array( - * 'file' => '/tmp/myfile.log', - * 'append' => true - * ) - * </code> - * - * This method will call: - * <code> - * $object->setFile('/tmp/myfile.log') - * $object->setAppend(true) - * </code> - * - * If required setters do not exist, it will produce a warning. - * - * @param mixed $object The object to configure. - * @param unknown_type $options - */ - private function setOptions($object, $options) { - foreach ($options as $name => $value) { - $setter = "set$name"; - if (method_exists($object, $setter)) { - $object->$setter($value); - } else { - $class = get_class($object); - $this->warn("Nonexistant option [$name] specified on [$class]. Skipping."); - } - } - } - - /** Helper method to simplify error reporting. */ - private function warn($message) { - trigger_error("log4php: $message", E_USER_WARNING); - } -} diff --git a/library/log4php/filters/LoggerFilterDenyAll.php b/library/log4php/filters/LoggerFilterDenyAll.php deleted file mode 100644 --- a/library/log4php/filters/LoggerFilterDenyAll.php +++ /dev/null @@ -1,56 +0,0 @@ -<?php -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * @package log4php - */ - -/** - * This filter drops all logging events. - * - * You can add this filter to the end of a filter chain to - * switch from the default "accept all unless instructed otherwise" - * filtering behaviour to a "deny all unless instructed otherwise" - * behaviour. - * - * <p> - * An example for this filter: - * - * {@example ../../examples/php/filter_denyall.php 19} - * - * <p> - * The corresponding XML file: - * - * {@example ../../examples/resources/filter_denyall.xml 18} - * - * @version $Revision: 883108 $ - * @package log4php - * @subpackage filters - * @since 0.3 - */ -class LoggerFilterDenyAll extends LoggerFilter { - - /** - * Always returns the integer constant {@link LoggerFilter::DENY} - * regardless of the {@link LoggerLoggingEvent} parameter. - * - * @param LoggerLoggingEvent $event The {@link LoggerLoggingEvent} to filter. - * @return LoggerFilter::DENY Always returns {@link LoggerFilter::DENY} - */ - public function decide(LoggerLoggingEvent $event) { - return LoggerFilter::DENY; - } -} diff --git a/library/log4php/filters/LoggerFilterLevelMatch.php b/library/log4php/filters/LoggerFilterLevelMatch.php deleted file mode 100644 --- a/library/log4php/filters/LoggerFilterLevelMatch.php +++ /dev/null @@ -1,100 +0,0 @@ -<?php -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * @package log4php - */ - -/** - * This is a very simple filter based on level matching. - * - * <p>The filter admits two options <b><var>LevelToMatch</var></b> and - * <b><var>AcceptOnMatch</var></b>. If there is an exact match between the value - * of the <b><var>LevelToMatch</var></b> option and the level of the - * {@link LoggerLoggingEvent}, then the {@link decide()} method returns - * {@link LoggerFilter::ACCEPT} in case the <b><var>AcceptOnMatch</var></b> - * option value is set to <i>true</i>, if it is <i>false</i> then - * {@link LoggerFilter::DENY} is returned. If there is no match, - * {@link LoggerFilter::NEUTRAL} is returned.</p> - * - * <p> - * An example for this filter: - * - * {@example ../../examples/php/filter_levelmatch.php 19} - * - * <p> - * The corresponding XML file: - * - * {@example ../../examples/resources/filter_levelmatch.xml 18} - * - * @version $Revision: 1213283 $ - * @package log4php - * @subpackage filters - * @since 0.6 - */ -class LoggerFilterLevelMatch extends LoggerFilter { - - /** - * Indicates if this event should be accepted or denied on match - * @var boolean - */ - protected $acceptOnMatch = true; - - /** - * The level, when to match - * @var LoggerLevel - */ - protected $levelToMatch; - - /** - * @param boolean $acceptOnMatch - */ - public function setAcceptOnMatch($acceptOnMatch) { - $this->setBoolean('acceptOnMatch', $acceptOnMatch); - } - - /** - * @param string $l the level to match - */ - public function setLevelToMatch($level) { - $this->setLevel('levelToMatch', $level); - } - - /** - * Return the decision of this filter. - * - * Returns {@link LoggerFilter::NEUTRAL} if the <b><var>LevelToMatch</var></b> - * option is not set or if there is not match. Otherwise, if there is a - * match, then the returned decision is {@link LoggerFilter::ACCEPT} if the - * <b><var>AcceptOnMatch</var></b> property is set to <i>true</i>. The - * returned decision is {@link LoggerFilter::DENY} if the - * <b><var>AcceptOnMatch</var></b> property is set to <i>false</i>. - * - * @param LoggerLoggingEvent $event - * @return integer - */ - public function decide(LoggerLoggingEvent $event) { - if ($this->levelToMatch === null) { - return LoggerFilter::NEUTRAL; - } - - if ($this->levelToMatch->equals($event->getLevel())) { - return $this->acceptOnMatch ? LoggerFilter::ACCEPT : LoggerFilter::DENY; - } else { - return LoggerFilter::NEUTRAL; - } - } -} diff --git a/library/log4php/filters/LoggerFilterLevelRange.php b/library/log4php/filters/LoggerFilterLevelRange.php deleted file mode 100644 --- a/library/log4php/filters/LoggerFilterLevelRange.php +++ /dev/null @@ -1,138 +0,0 @@ -<?php -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * @package log4php - */ - -/** - * This is a very simple filter based on level matching, which can be - * used to reject messages with priorities outside a certain range. - * - * <p>The filter admits three options <b><var>LevelMin</var></b>, <b><var>LevelMax</var></b> - * and <b><var>AcceptOnMatch</var></b>.</p> - * - * <p>If the level of the {@link LoggerLoggingEvent} is not between Min and Max - * (inclusive), then {@link LoggerFilter::DENY} is returned.</p> - * - * <p>If the Logging event level is within the specified range, then if - * <b><var>AcceptOnMatch</var></b> is <i>true</i>, - * {@link LoggerFilter::ACCEPT} is returned, and if - * <b><var>AcceptOnMatch</var></b> is <i>false</i>, - * {@link LoggerFilter::NEUTRAL} is returned.</p> - * - * <p>If <b><var>LevelMin</var></b> is not defined, then there is no - * minimum acceptable level (i.e. a level is never rejected for - * being too "low"/unimportant). If <b><var>LevelMax</var></b> is not - * defined, then there is no maximum acceptable level (ie a - * level is never rejected for being too "high"/important).</p> - * - * <p>Refer to the {@link LoggerAppender::setThreshold()} method - * available to <b>all</b> appenders extending {@link LoggerAppender} - * for a more convenient way to filter out events by level.</p> - * - * <p> - * An example for this filter: - * - * {@example ../../examples/php/filter_levelrange.php 19} - * - * <p> - * The corresponding XML file: - * - * {@example ../../examples/resources/filter_levelrange.xml 18} - * - * @author Simon Kitching - * @author based on the org.apache.log4j.varia.LevelRangeFilte Java code by Ceki Gülcü - * - * @version $Revision: 1213283 $ - * @package log4php - * @subpackage filters - * @since 0.6 - */ -class LoggerFilterLevelRange extends LoggerFilter { - - /** - * @var boolean - */ - protected $acceptOnMatch = true; - - /** - * @var LoggerLevel - */ - protected $levelMin; - - /** - * @var LoggerLevel - */ - protected $levelMax; - - /** - * @param boolean $acceptOnMatch - */ - public function setAcceptOnMatch($acceptOnMatch) { - $this->setBoolean('acceptOnMatch', $acceptOnMatch); - } - - /** - * @param string $l the level min to match - */ - public function setLevelMin($level) { - $this->setLevel('levelMin', $level); - } - - /** - * @param string $l the level max to match - */ - public function setLevelMax($level) { - $this->setLevel('levelMax', $level); - } - - /** - * Return the decision of this filter. - * - * @param LoggerLoggingEvent $event - * @return integer - */ - public function decide(LoggerLoggingEvent $event) { - $level = $event->getLevel(); - - if ($this->levelMin !== null) { - if ($level->isGreaterOrEqual($this->levelMin) == false) { - // level of event is less than minimum - return LoggerFilter::DENY; - } - } - - if ($this->levelMax !== null) { - if ($level->toInt() > $this->levelMax->toInt()) { - // level of event is greater than maximum - // Alas, there is no Level.isGreater method. and using - // a combo of isGreaterOrEqual && !Equal seems worse than - // checking the int values of the level objects.. - return LoggerFilter::DENY; - } - } - - if ($this->acceptOnMatch) { - // this filter set up to bypass later filters and always return - // accept if level in range - return LoggerFilter::ACCEPT; - } else { - // event is ok for this filter; allow later filters to have a look.. - return LoggerFilter::NEUTRAL; - } - } -} diff --git a/library/log4php/filters/LoggerFilterStringMatch.php b/library/log4php/filters/LoggerFilterStringMatch.php deleted file mode 100644 --- a/library/log4php/filters/LoggerFilterStringMatch.php +++ /dev/null @@ -1,89 +0,0 @@ -<?php -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * @package log4php - */ - -/** - * This is a very simple filter based on string matching. - * - * <p>The filter admits two options {@link $stringToMatch} and - * {@link $acceptOnMatch}. If there is a match (using {@link PHP_MANUAL#strpos} - * between the value of the {@link $stringToMatch} option and the message - * of the {@link LoggerLoggingEvent}, - * then the {@link decide()} method returns {@link LoggerFilter::ACCEPT} if - * the <b>AcceptOnMatch</b> option value is true, if it is false then - * {@link LoggerFilter::DENY} is returned. If there is no match, {@link LoggerFilter::NEUTRAL} - * is returned.</p> - * - * <p> - * An example for this filter: - * - * {@example ../../examples/php/filter_stringmatch.php 19} - * - * <p> - * The corresponding XML file: - * - * {@example ../../examples/resources/filter_stringmatch.xml 18} - * - * @version $Revision: 1213283 $ - * @package log4php - * @subpackage filters - * @since 0.3 - */ -class LoggerFilterStringMatch extends LoggerFilter { - - /** - * @var boolean - */ - protected $acceptOnMatch = true; - - /** - * @var string - */ - protected $stringToMatch; - - /** - * @param mixed $acceptOnMatch a boolean or a string ('true' or 'false') - */ - public function setAcceptOnMatch($acceptOnMatch) { - $this->setBoolean('acceptOnMatch', $acceptOnMatch); - } - - /** - * @param string $s the string to match - */ - public function setStringToMatch($string) { - $this->setString('stringToMatch', $string); - } - - /** - * @return integer a {@link LOGGER_FILTER_NEUTRAL} is there is no string match. - */ - public function decide(LoggerLoggingEvent $event) { - $msg = $event->getRenderedMessage(); - - if ($msg === null or $this->stringToMatch === null) { - return LoggerFilter::NEUTRAL; - } - - if (strpos($msg, $this->stringToMatch) !== false) { - return ($this->acceptOnMatch) ? LoggerFilter::ACCEPT : LoggerFilter::DENY; - } - return LoggerFilter::NEUTRAL; - } -} diff --git a/library/log4php/helpers/LoggerFormattingInfo.php b/library/log4php/helpers/LoggerFormattingInfo.php deleted file mode 100644 --- a/library/log4php/helpers/LoggerFormattingInfo.php +++ /dev/null @@ -1,54 +0,0 @@ -<?php -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * @package log4php - */ - -/** - * This class encapsulates the information obtained when parsing - * formatting modifiers in conversion modifiers. - * - * @package log4php - * @subpackage helpers - * @since 0.3 - */ -class LoggerFormattingInfo { - - /** - * Minimal output length. If output is shorter than this value, it will be - * padded with spaces. - */ - public $min = 0; - - /** - * Maximum output length. If output is longer than this value, it will be - * trimmed. - */ - public $max = PHP_INT_MAX; - - /** - * Whether to pad the string from the left. If set to false, the string - * will be padded from the right. - */ - public $padLeft = true; - - /** - * Whether to trim the string from the left. If set to false, the string - * will be trimmed from the right. - */ - public $trimLeft = false; -} diff --git a/library/log4php/helpers/LoggerOptionConverter.php b/library/log4php/helpers/LoggerOptionConverter.php deleted file mode 100644 --- a/library/log4php/helpers/LoggerOptionConverter.php +++ /dev/null @@ -1,232 +0,0 @@ -<?php -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * @package log4php - */ - -/** - * A convenience class to convert property values to specific types. - * - * @version $Revision: 1374617 $ - * @package log4php - * @subpackage helpers - * @since 0.5 - */ -class LoggerOptionConverter { - - /** String values which are converted to boolean TRUE. */ - private static $trueValues = array('1', 'true', 'yes', 'on'); - - /** - * String values which are converted to boolean FALSE. - * - * Note that an empty string must convert to false, because - * parse_ini_file() which is used for parsing configuration - * converts the value _false_ to an empty string. - */ - private static $falseValues = array('0', 'false', 'no', 'off', ''); - - /** - * Read a predefined var. - * - * It returns a value referenced by <var>$key</var> using this search criteria: - * - if <var>$key</var> is a constant then return it. Else - * - if <var>$key</var> is set in <var>$_ENV</var> then return it. Else - * - return <var>$def</var>. - * - * @param string $key The key to search for. - * @param string $def The default value to return. - * @return string the string value of the system property, or the default - * value if there is no property with that key. - */ - public static function getSystemProperty($key, $def) { - if (defined($key)) { - return (string)constant($key); - } else if (isset($_SERVER[$key])) { - return (string)$_SERVER[$key]; - } else if (isset($_ENV[$key])) { - return (string)$_ENV[$key]; - } else { - return $def; - } - } - - /** Converts $value to boolean, or throws an exception if not possible. */ - public static function toBooleanEx($value) { - if (isset($value)) { - if (is_bool($value)) { - return $value; - } - $value = strtolower(trim($value)); - if (in_array($value, self::$trueValues)) { - return true; - } - if (in_array($value, self::$falseValues)) { - return false; - } - } - - throw new LoggerException("Given value [" . var_export($value, true) . "] cannot be converted to boolean."); - } - - /** - * Converts $value to integer, or throws an exception if not possible. - * Floats cannot be converted to integer. - */ - public static function toIntegerEx($value) { - if (is_integer($value)) { - return $value; - } - if (is_numeric($value) && ($value == (integer)$value)) { - return (integer)$value; - } - - throw new LoggerException("Given value [" . var_export($value, true) . "] cannot be converted to integer."); - } - - /** - * Converts $value to integer, or throws an exception if not possible. - * Floats cannot be converted to integer. - */ - public static function toPositiveIntegerEx($value) { - if (is_integer($value) && $value > 0) { - return $value; - } - if (is_numeric($value) && ($value == (integer)$value) && $value > 0) { - return (integer)$value; - } - - throw new LoggerException("Given value [" . var_export($value, true) . "] cannot be converted to a positive integer."); - } - - /** Converts the value to a level. Throws an exception if not possible. */ - public static function toLevelEx($value) { - if ($value instanceof LoggerLevel) { - return $value; - } - $level = LoggerLevel::toLevel($value); - if ($level === null) { - throw new LoggerException("Given value [" . var_export($value, true) . "] cannot be converted to a logger level."); - } - return $level; - } - - /** - * Converts a value to a valid file size (integer). - * - * Supports 'KB', 'MB' and 'GB' suffixes, where KB = 1024 B etc. - * - * The final value will be rounded to the nearest integer. - * - * Examples: - * - '100' => 100 - * - '100.12' => 100 - * - '100KB' => 102400 - * - '1.5MB' => 1572864 - * - * @param mixed $value File size (optionally with suffix). - * @return integer Parsed file size. - */ - public static function toFileSizeEx($value) { - - if (empty($value)) { - throw new LoggerException("Empty value cannot be converted to a file size."); - } - - if (is_numeric($value)) { - return (integer)$value; - } - - if (!is_string($value)) { - throw new LoggerException("Given value [" . var_export($value, true) . "] cannot be converted to a file size."); - } - - $str = strtoupper(trim($value)); - $count = preg_match('/^([0-9.]+)(KB|MB|GB)?$/', $str, $matches); - - if ($count > 0) { - $size = $matches[1]; - $unit = $matches[2]; - - switch ($unit) { - case 'KB': - $size *= pow(1024, 1); - break; - case 'MB': - $size *= pow(1024, 2); - break; - case 'GB': - $size *= pow(1024, 3); - break; - } - - return (integer)$size; - } - - throw new LoggerException("Given value [$value] cannot be converted to a file size."); - } - - /** - * Converts a value to string, or throws an exception if not possible. - * - * Objects can be converted to string if they implement the magic - * __toString() method. - * - */ - public static function toStringEx($value) { - if (is_string($value)) { - return $value; - } - if (is_numeric($value)) { - return (string)$value; - } - if (is_object($value) && method_exists($value, '__toString')) { - return (string)$value; - } - - throw new LoggerException("Given value [" . var_export($value, true) . "] cannot be converted to string."); - } - - /** - * Performs value substitution for string options. - * - * An option can contain PHP constants delimited by '${' and '}'. - * - * E.g. for input string "some ${FOO} value", the method will attempt - * to substitute ${FOO} with the value of constant FOO if it exists. - * - * Therefore, if FOO is a constant, and it has value "bar", the resulting - * string will be "some bar value". - * - * If the constant is not defined, it will be replaced by an empty string, - * and the resulting string will be "some value". - * - * @param string $string String on which to perform substitution. - * @return string - */ - public static function substConstants($string) { - preg_match_all('/\${([^}]+)}/', $string, $matches); - - foreach ($matches[1] as $key => $match) { - $match = trim($match); - $search = $matches[0][$key]; - $replacement = defined($match) ? constant($match) : ''; - $string = str_replace($search, $replacement, $string); - } - return $string; - } -} diff --git a/library/log4php/helpers/LoggerPatternParser.php b/library/log4php/helpers/LoggerPatternParser.php deleted file mode 100644 --- a/library/log4php/helpers/LoggerPatternParser.php +++ /dev/null @@ -1,237 +0,0 @@ -<?php -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * @package log4php - */ - -/** - * Most of the work of the {@link LoggerPatternLayout} class - * is delegated to the {@link LoggerPatternParser} class. - * - * <p>It is this class that parses conversion patterns and creates - * a chained list of {@link LoggerPatternConverter} converters.</p> - * - * @version $Revision: 1395467 $ - * @package log4php - * @subpackage helpers - * - * @since 0.3 - */ -class LoggerPatternParser { - - /** Escape character for conversion words in the conversion pattern. */ - const ESCAPE_CHAR = '%'; - - /** Maps conversion words to relevant converters. */ - private $converterMap; - - /** Conversion pattern used in layout. */ - private $pattern; - - /** Regex pattern used for parsing the conversion pattern. */ - private $regex; - - /** - * First converter in the chain. - * @var LoggerPatternConverter - */ - private $head; - - /** Last converter in the chain. */ - private $tail; - - public function __construct($pattern, $converterMap) { - $this->pattern = $pattern; - $this->converterMap = $converterMap; - - // Construct the regex pattern - $this->regex = - '/' . // Starting regex pattern delimiter - self::ESCAPE_CHAR . // Character which marks the start of the conversion pattern - '(?P<modifiers>[0-9.-]*)' . // Format modifiers (optional) - '(?P<word>[a-zA-Z]+)' . // The conversion word - '(?P<option>{[^}]*})?' . // Conversion option in braces (optional) - '/'; // Ending regex pattern delimiter - } - - /** - * Parses the conversion pattern string, converts it to a chain of pattern - * converters and returns the first converter in the chain. - * - * @return LoggerPatternConverter - */ - public function parse() { - - // Skip parsing if the pattern is empty - if (empty($this->pattern)) { - $this->addLiteral(''); - return $this->head; - } - - // Find all conversion words in the conversion pattern - $count = preg_match_all($this->regex, $this->pattern, $matches, PREG_OFFSET_CAPTURE); - if ($count === false) { - $error = error_get_last(); - throw new LoggerException("Failed parsing layotut pattern: {$error['message']}"); - } - - $prevEnd = 0; - - foreach ($matches[0] as $key => $item) { - - // Locate where the conversion command starts and ends - $length = strlen($item[0]); - $start = $item[1]; - $end = $item[1] + $length; - - // Find any literal expressions between matched commands - if ($start > $prevEnd) { - $literal = substr($this->pattern, $prevEnd, $start - $prevEnd); - $this->addLiteral($literal); - } - - // Extract the data from the matched command - $word = !empty($matches['word'][$key]) ? $matches['word'][$key][0] : null; - $modifiers = !empty($matches['modifiers'][$key]) ? $matches['modifiers'][$key][0] : null; - $option = !empty($matches['option'][$key]) ? $matches['option'][$key][0] : null; - - // Create a converter and add it to the chain - $this->addConverter($word, $modifiers, $option); - - $prevEnd = $end; - } - - // Add any trailing literals - if ($end < strlen($this->pattern)) { - $literal = substr($this->pattern, $end); - $this->addLiteral($literal); - } - - return $this->head; - } - - /** - * Adds a literal converter to the converter chain. - * @param string $string The string for the literal converter. - */ - private function addLiteral($string) { - $converter = new LoggerPatternConverterLiteral($string); - $this->addToChain($converter); - } - - /** - * Adds a non-literal converter to the converter chain. - * - * @param string $word The conversion word, used to determine which - * converter will be used. - * @param string $modifiers Formatting modifiers. - * @param string $option Option to pass to the converter. - */ - private function addConverter($word, $modifiers, $option) { - $formattingInfo = $this->parseModifiers($modifiers); - $option = trim($option, "{} "); - - if (isset($this->converterMap[$word])) { - $converter = $this->getConverter($word, $formattingInfo, $option); - $this->addToChain($converter); - } else { - trigger_error("log4php: Invalid keyword '%$word' in converison pattern. Ignoring keyword.", E_USER_WARNING); - } - } - - /** - * Determines which converter to use based on the conversion word. Creates - * an instance of the converter using the provided formatting info and - * option and returns it. - * - * @param string $word The conversion word. - * @param LoggerFormattingInfo $info Formatting info. - * @param string $option Converter option. - * - * @throws LoggerException - * - * @return LoggerPatternConverter - */ - private function getConverter($word, $info, $option) { - if (!isset($this->converterMap[$word])) { - throw new LoggerException("Invalid keyword '%$word' in converison pattern. Ignoring keyword."); - } - - $converterClass = $this->converterMap[$word]; - if (!class_exists($converterClass)) { - throw new LoggerException("Class '$converterClass' does not exist."); - } - - $converter = new $converterClass($info, $option); - if (!($converter instanceof LoggerPatternConverter)) { - throw new LoggerException("Class '$converterClass' is not an instance of LoggerPatternConverter."); - } - - return $converter; - } - - /** Adds a converter to the chain and updates $head and $tail pointers. */ - private function addToChain(LoggerPatternConverter $converter) { - if (!isset($this->head)) { - $this->head = $converter; - $this->tail = $this->head; - } else { - $this->tail->next = $converter; - $this->tail = $this->tail->next; - } - } - - /** - * Parses the formatting modifiers and produces the corresponding - * LoggerFormattingInfo object. - * - * @param string $modifier - * @return LoggerFormattingInfo - * @throws LoggerException - */ - private function parseModifiers($modifiers) { - $info = new LoggerFormattingInfo(); - - // If no modifiers are given, return default values - if (empty($modifiers)) { - return $info; - } - - // Validate - $pattern = '/^(-?[0-9]+)?\.?-?[0-9]+$/'; - if (!preg_match($pattern, $modifiers)) { - trigger_error("log4php: Invalid modifier in conversion pattern: [$modifiers]. Ignoring modifier.", E_USER_WARNING); - return $info; - } - - $parts = explode('.', $modifiers); - - if (!empty($parts[0])) { - $minPart = (integer)$parts[0]; - $info->min = abs($minPart); - $info->padLeft = ($minPart > 0); - } - - if (!empty($parts[1])) { - $maxPart = (integer)$parts[1]; - $info->max = abs($maxPart); - $info->trimLeft = ($maxPart < 0); - } - - return $info; - } -} diff --git a/library/log4php/helpers/LoggerUtils.php b/library/log4php/helpers/LoggerUtils.php deleted file mode 100644 --- a/library/log4php/helpers/LoggerUtils.php +++ /dev/null @@ -1,123 +0,0 @@ -<?php -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * @package log4php - */ - -/** - * Contains various helper methods. - * - * @package log4php - * @subpackage helpers - * @since 2.3 - */ -class LoggerUtils { - - /** - * Splits a fully qualified class name into fragments delimited by the - * namespace separator (\). - * - * For backward compatibility, a dot (.) can be used as a delimiter as - * well. - * - * @param string $name - * - * @return array Class name split into fragments. - */ - public static function tokenizeClassName($name) { - $name = str_replace('.', '\\', $name); - $name = trim($name, ' \\'); - $fragments = explode('\\', $name); - - foreach ($fragments as $key => $fragment) { - if (trim($fragment) === '') { - unset($fragments[$key]); - } - } - - return $fragments; - } - - /** - * Attempts to shorten the given class name to the desired length. - * - * This is done by separating the class name into fragments (delimited - * by \ or .) and trimming individual fragments, starting with the left, - * until desired length has been reached. - * - * The final fragment (i.e. class name) will never be shortened so the - * result may still be longer than given length. - * - * @param string $name The (qualified) class name. - * @param integer $length The length to shorten to. If null or 0 is given, - * the name will be returned without shortening. - */ - public static function shortenClassName($name, $length) { - if ($length === null || $length < 0) { - return $name; - } - - $name = str_replace('.', '\\', $name); - $name = trim($name, ' \\'); - - // Check if any shortening is required - $currentLength = strlen($name); - if ($currentLength <= $length) { - return $name; - } - - // Split name into fragments - $fragments = explode('\\', $name); - - // If zero length is specified, return only last fragment - if ($length == 0) { - return array_pop($fragments); - } - - // If the name splits to only one fragment, then it cannot be shortened - $count = count($fragments); - if ($count == 1) { - return $name; - } - - foreach ($fragments as $key => &$fragment) { - - // Never shorten last fragment - if ($key == $count - 1) { - break; - } - - // Check for empty fragments (shouldn't happen but it's possible) - $fragLen = strlen($fragment); - if ($fragLen <= 1) { - continue; - } - - // Shorten fragment to one character and check if total length satisfactory - $fragment = substr($fragment, 0, 1); - $currentLength = $currentLength - $fragLen + 1; - - if ($currentLength <= $length) { - break; - } - } - unset($fragment); - - return implode('\\', $fragments); - } -} - diff --git a/library/log4php/layouts/LoggerLayoutHtml.php b/library/log4php/layouts/LoggerLayoutHtml.php deleted file mode 100644 --- a/library/log4php/layouts/LoggerLayoutHtml.php +++ /dev/null @@ -1,214 +0,0 @@ -<?php -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * @package log4php - */ - -/** - * This layout outputs events in a HTML table. - * - * Configurable parameters for this layout are: - * - * - title - * - locationInfo - * - * An example for this layout: - * - * {@example ../../examples/php/layout_html.php 19}<br> - * - * The corresponding XML file: - * - * {@example ../../examples/resources/layout_html.properties 18} - * - * The above will print a HTML table that looks, converted back to plain text, like the following:<br> - * <pre> - * Log session start time Wed Sep 9 00:11:30 2009 - * - * Time Thread Level Category Message - * 0 8318 INFO root Hello World! - * </pre> - * - * @version $Revision: 1379731 $ - * @package log4php - * @subpackage layouts - */ -class LoggerLayoutHtml extends LoggerLayout { - /** - * The <b>LocationInfo</b> option takes a boolean value. By - * default, it is set to false which means there will be no location - * information output by this layout. If the the option is set to - * true, then the file name and line number of the statement - * at the origin of the log statement will be output. - * - * <p>If you are embedding this layout within a {@link LoggerAppenderMail} - * or a {@link LoggerAppenderMailEvent} then make sure to set the - * <b>LocationInfo</b> option of that appender as well. - * @var boolean - */ - protected $locationInfo = false; - - /** - * The <b>Title</b> option takes a String value. This option sets the - * document title of the generated HTML document. - * Defaults to 'Log4php Log Messages'. - * @var string - */ - protected $title = "Log4php Log Messages"; - - /** - * The <b>LocationInfo</b> option takes a boolean value. By - * default, it is set to false which means there will be no location - * information output by this layout. If the the option is set to - * true, then the file name and line number of the statement - * at the origin of the log statement will be output. - * - * <p>If you are embedding this layout within a {@link LoggerAppenderMail} - * or a {@link LoggerAppenderMailEvent} then make sure to set the - * <b>LocationInfo</b> option of that appender as well. - */ - public function setLocationInfo($flag) { - $this->setBoolean('locationInfo', $flag); - } - - /** - * Returns the current value of the <b>LocationInfo</b> option. - */ - public function getLocationInfo() { - return $this->locationInfo; - } - - /** - * The <b>Title</b> option takes a String value. This option sets the - * document title of the generated HTML document. - * Defaults to 'Log4php Log Messages'. - */ - public function setTitle($title) { - $this->setString('title', $title); - } - - /** - * @return string Returns the current value of the <b>Title</b> option. - */ - public function getTitle() { - return $this->title; - } - - /** - * @return string Returns the content type output by this layout, i.e "text/html". - */ - public function getContentType() { - return "text/html"; - } - - /** - * @param LoggerLoggingEvent $event - * @return string - */ - public function format(LoggerLoggingEvent $event) { - $sbuf = PHP_EOL . "<tr>" . PHP_EOL; - - $sbuf .= "<td>"; - $sbuf .= round(1000 * $event->getRelativeTime()); - $sbuf .= "</td>" . PHP_EOL; - - $sbuf .= "<td title=\"" . $event->getThreadName() . " thread\">"; - $sbuf .= $event->getThreadName(); - $sbuf .= "</td>" . PHP_EOL; - - $sbuf .= "<td title=\"Level\">"; - - $level = $event->getLevel(); - - if ($level->equals(LoggerLevel::getLevelDebug())) { - $sbuf .= "<font color=\"#339933\">$level</font>"; - } else if ($level->equals(LoggerLevel::getLevelWarn())) { - $sbuf .= "<font color=\"#993300\"><strong>$level</strong></font>"; - } else { - $sbuf .= $level; - } - $sbuf .= "</td>" . PHP_EOL; - - $sbuf .= "<td title=\"" . htmlentities($event->getLoggerName(), ENT_QUOTES) . " category\">"; - $sbuf .= htmlentities($event->getLoggerName(), ENT_QUOTES); - $sbuf .= "</td>" . PHP_EOL; - - if ($this->locationInfo) { - $locInfo = $event->getLocationInformation(); - $sbuf .= "<td>"; - $sbuf .= htmlentities($locInfo->getFileName(), ENT_QUOTES) . ':' . $locInfo->getLineNumber(); - $sbuf .= "</td>" . PHP_EOL; - } - - $sbuf .= "<td title=\"Message\">"; - $sbuf .= htmlentities($event->getRenderedMessage(), ENT_QUOTES); - $sbuf .= "</td>" . PHP_EOL; - - $sbuf .= "</tr>" . PHP_EOL; - - if ($event->getNDC() != null) { - $sbuf .= "<tr><td bgcolor=\"#EEEEEE\" style=\"font-size : xx-small;\" colspan=\"6\" title=\"Nested Diagnostic Context\">"; - $sbuf .= "NDC: " . htmlentities($event->getNDC(), ENT_QUOTES); - $sbuf .= "</td></tr>" . PHP_EOL; - } - return $sbuf; - } - - /** - * @return string Returns appropriate HTML headers. - */ - public function getHeader() { - $sbuf = "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">" . PHP_EOL; - $sbuf .= "<html>" . PHP_EOL; - $sbuf .= "<head>" . PHP_EOL; - $sbuf .= "<title>" . $this->title . "</title>" . PHP_EOL; - $sbuf .= "<style type=\"text/css\">" . PHP_EOL; - $sbuf .= "<!--" . PHP_EOL; - $sbuf .= "body, table {font-family: arial,sans-serif; font-size: x-small;}" . PHP_EOL; - $sbuf .= "th {background: #336699; color: #FFFFFF; text-align: left;}" . PHP_EOL; - $sbuf .= "-->" . PHP_EOL; - $sbuf .= "</style>" . PHP_EOL; - $sbuf .= "</head>" . PHP_EOL; - $sbuf .= "<body bgcolor=\"#FFFFFF\" topmargin=\"6\" leftmargin=\"6\">" . PHP_EOL; - $sbuf .= "<hr size=\"1\" noshade>" . PHP_EOL; - $sbuf .= "Log session start time " . strftime('%c', time()) . "<br>" . PHP_EOL; - $sbuf .= "<br>" . PHP_EOL; - $sbuf .= "<table cellspacing=\"0\" cellpadding=\"4\" border=\"1\" bordercolor=\"#224466\" width=\"100%\">" . PHP_EOL; - $sbuf .= "<tr>" . PHP_EOL; - $sbuf .= "<th>Time</th>" . PHP_EOL; - $sbuf .= "<th>Thread</th>" . PHP_EOL; - $sbuf .= "<th>Level</th>" . PHP_EOL; - $sbuf .= "<th>Category</th>" . PHP_EOL; - if ($this->locationInfo) { - $sbuf .= "<th>File:Line</th>" . PHP_EOL; - } - $sbuf .= "<th>Message</th>" . PHP_EOL; - $sbuf .= "</tr>" . PHP_EOL; - - return $sbuf; - } - - /** - * @return string Returns the appropriate HTML footers. - */ - public function getFooter() { - $sbuf = "</table>" . PHP_EOL; - $sbuf .= "<br>" . PHP_EOL; - $sbuf .= "</body></html>"; - - return $sbuf; - } -} diff --git a/library/log4php/layouts/LoggerLayoutPattern.php b/library/log4php/layouts/LoggerLayoutPattern.php deleted file mode 100644 --- a/library/log4php/layouts/LoggerLayoutPattern.php +++ /dev/null @@ -1,171 +0,0 @@ -<?php -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * @package log4php - */ - -/** - * A flexible layout configurable with a pattern string. - * - * Configurable parameters: - * - * * converionPattern - A string which controls the formatting of logging - * events. See docs for full specification. - * - * @package log4php - * @subpackage layouts - * @version $Revision: 1395470 $ - */ -class LoggerLayoutPattern extends LoggerLayout { - - /** Default conversion pattern */ - const DEFAULT_CONVERSION_PATTERN = '%date %-5level %logger %message%newline'; - - /** Default conversion TTCC Pattern */ - const TTCC_CONVERSION_PATTERN = '%d [%t] %p %c %x - %m%n'; - - /** The conversion pattern. */ - protected $pattern = self::DEFAULT_CONVERSION_PATTERN; - - /** Maps conversion keywords to the relevant converter (default implementation). */ - protected static $defaultConverterMap = array( - 'c' => 'LoggerPatternConverterLogger', - 'lo' => 'LoggerPatternConverterLogger', - 'logger' => 'LoggerPatternConverterLogger', - - 'C' => 'LoggerPatternConverterClass', - 'class' => 'LoggerPatternConverterClass', - - 'cookie' => 'LoggerPatternConverterCookie', - - 'd' => 'LoggerPatternConverterDate', - 'date' => 'LoggerPatternConverterDate', - - 'e' => 'LoggerPatternConverterEnvironment', - 'env' => 'LoggerPatternConverterEnvironment', - - 'ex' => 'LoggerPatternConverterThrowable', - 'exception' => 'LoggerPatternConverterThrowable', - 'throwable' => 'LoggerPatternConverterThrowable', - - 'F' => 'LoggerPatternConverterFile', - 'file' => 'LoggerPatternConverterFile', - - 'l' => 'LoggerPatternConverterLocation', - 'location' => 'LoggerPatternConverterLocation', - - 'L' => 'LoggerPatternConverterLine', - 'line' => 'LoggerPatternConverterLine', - - 'm' => 'LoggerPatternConverterMessage', - 'msg' => 'LoggerPatternConverterMessage', - 'message' => 'LoggerPatternConverterMessage', - - 'M' => 'LoggerPatternConverterMethod', - 'method' => 'LoggerPatternConverterMethod', - - 'n' => 'LoggerPatternConverterNewLine', - 'newline' => 'LoggerPatternConverterNewLine', - - 'p' => 'LoggerPatternConverterLevel', - 'le' => 'LoggerPatternConverterLevel', - 'level' => 'LoggerPatternConverterLevel', - - 'r' => 'LoggerPatternConverterRelative', - 'relative' => 'LoggerPatternConverterRelative', - - 'req' => 'LoggerPatternConverterRequest', - 'request' => 'LoggerPatternConverterRequest', - - 's' => 'LoggerPatternConverterServer', - 'server' => 'LoggerPatternConverterServer', - - 'ses' => 'LoggerPatternConverterSession', - 'session' => 'LoggerPatternConverterSession', - - 'sid' => 'LoggerPatternConverterSessionID', - 'sessionid' => 'LoggerPatternConverterSessionID', - - 't' => 'LoggerPatternConverterProcess', - 'pid' => 'LoggerPatternConverterProcess', - 'process' => 'LoggerPatternConverterProcess', - - 'x' => 'LoggerPatternConverterNDC', - 'ndc' => 'LoggerPatternConverterNDC', - - 'X' => 'LoggerPatternConverterMDC', - 'mdc' => 'LoggerPatternConverterMDC', - ); - - /** Maps conversion keywords to the relevant converter. */ - protected $converterMap = array(); - - /** - * Head of a chain of Converters. - * @var LoggerPatternConverter - */ - private $head; - - /** Returns the default converter map. */ - public static function getDefaultConverterMap() { - return self::$defaultConverterMap; - } - - /** Constructor. Initializes the converter map. */ - public function __construct() { - $this->converterMap = self::$defaultConverterMap; - } - - /** - * Sets the conversionPattern option. This is the string which - * controls formatting and consists of a mix of literal content and - * conversion specifiers. - * @param array $conversionPattern - */ - public function setConversionPattern($conversionPattern) { - $this->pattern = $conversionPattern; - } - - /** - * Processes the conversion pattern and creates a corresponding chain of - * pattern converters which will be used to format logging events. - */ - public function activateOptions() { - if (!isset($this->pattern)) { - throw new LoggerException("Mandatory parameter 'conversionPattern' is not set."); - } - - $parser = new LoggerPatternParser($this->pattern, $this->converterMap); - $this->head = $parser->parse(); - } - - /** - * Produces a formatted string as specified by the conversion pattern. - * - * @param LoggerLoggingEvent $event - * @return string - */ - public function format(LoggerLoggingEvent $event) { - $sbuf = ''; - $converter = $this->head; - while ($converter !== null) { - $converter->format($sbuf, $event); - $converter = $converter->next; - } - return $sbuf; - } -} \ No newline at end of file diff --git a/library/log4php/layouts/LoggerLayoutSerialized.php b/library/log4php/layouts/LoggerLayoutSerialized.php deleted file mode 100644 --- a/library/log4php/layouts/LoggerLayoutSerialized.php +++ /dev/null @@ -1,55 +0,0 @@ -<?php -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * @package log4php - */ - -/** - * Layout which formats the events using PHP's serialize() function. - * - * Available options: - * - locationInfo - If set to true, the event's location information will also - * be serialized (slow, defaults to false). - * - * @version $Revision: 1334369 $ - * @package log4php - * @subpackage layouts - * @since 2.2 - */ -class LoggerLayoutSerialized extends LoggerLayout { - - /** Whether to include the event's location information (slow). */ - protected $locationInfo = false; - - /** Sets the location information flag. */ - public function setLocationInfo($value) { - $this->setBoolean('locationInfo', $value); - } - - /** Returns the location information flag. */ - public function getLocationInfo() { - return $this->locationInfo; - } - - public function format(LoggerLoggingEvent $event) { - // If required, initialize the location data - if ($this->locationInfo) { - $event->getLocationInformation(); - } - return serialize($event) . PHP_EOL; - } -} diff --git a/library/log4php/layouts/LoggerLayoutSimple.php b/library/log4php/layouts/LoggerLayoutSimple.php deleted file mode 100644 --- a/library/log4php/layouts/LoggerLayoutSimple.php +++ /dev/null @@ -1,56 +0,0 @@ -<?php -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * @package log4php - */ - -/** - * A simple layout. - * - * Returns the log statement in a format consisting of the - * <b>level</b>, followed by " - " and then the <b>message</b>. - * - * For example the following php and properties files - * - * {@example ../../examples/php/layout_simple.php 19}<br> - * - * {@example ../../examples/resources/layout_simple.properties 18}<br> - * - * would result in: - * - * <samp>INFO - Hello World!</samp> - * - * @version $Revision: 1213283 $ - * @package log4php - * @subpackage layouts - */ -class LoggerLayoutSimple extends LoggerLayout { - /** - * Returns the log statement in a format consisting of the - * <b>level</b>, followed by " - " and then the - * <b>message</b>. For example, - * <samp> INFO - "A message" </samp> - * - * @param LoggerLoggingEvent $event - * @return string - */ - public function format(LoggerLoggingEvent $event) { - $level = $event->getLevel(); - $message = $event->getRenderedMessage(); - return "$level - $message" . PHP_EOL; - } -} diff --git a/library/log4php/layouts/LoggerLayoutTTCC.php b/library/log4php/layouts/LoggerLayoutTTCC.php deleted file mode 100644 --- a/library/log4php/layouts/LoggerLayoutTTCC.php +++ /dev/null @@ -1,201 +0,0 @@ -<?php -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * @package log4php - */ - -/** - * TTCC layout format consists of <b>t</b>ime, <b>t</b>hread, <b>c</b>ategory and nested - * diagnostic <b>c</b>ontext information, hence the name. - * - * <p>Each of the four fields can be individually enabled or - * disabled. The time format depends on the <b>DateFormat</b> used.</p> - * - * <p>If no dateFormat is specified it defaults to '%c'. - * See php {@link PHP_MANUAL#date} function for details.</p> - * - * Configurable parameters for this layout are: - * - {@link $threadPrinting} (true|false) enable/disable pid reporting. - * - {@link $categoryPrefixing} (true|false) enable/disable logger category reporting. - * - {@link $contextPrinting} (true|false) enable/disable NDC reporting. - * - {@link $microSecondsPrinting} (true|false) enable/disable micro seconds reporting in timestamp. - * - {@link $dateFormat} (string) set date format. See php {@link PHP_MANUAL#date} function for details. - * - * An example how to use this layout: - * - * {@example ../../examples/php/layout_ttcc.php 19}<br> - * - * {@example ../../examples/resources/layout_ttcc.properties 18}<br> - * - * The above would print:<br> - * <samp>02:28 [13714] INFO root - Hello World!</samp> - * - * @version $Revision: 1302503 $ - * @package log4php - * @subpackage layouts - * - * @deprecated LoggerLayout TTCC is deprecated and will be removed in a future release. Please use - * LoggerLayoutPattern instead. - */ -class LoggerLayoutTTCC extends LoggerLayout { - - // Internal representation of options - protected $threadPrinting = true; - protected $categoryPrefixing = true; - protected $contextPrinting = true; - protected $microSecondsPrinting = true; - - /** - * @var string date format. See {@link PHP_MANUAL#strftime} for details - */ - protected $dateFormat = '%c'; - - /** - * Constructor - * - * @param string date format - * @see dateFormat - */ - public function __construct($dateFormat = '') { - $this->warn("LoggerLayout TTCC is deprecated and will be removed in a future release. Please use LoggerLayoutPattern instead."); - if (!empty($dateFormat)) { - $this->dateFormat = $dateFormat; - } - return; - } - - /** - * The <b>ThreadPrinting</b> option specifies whether the name of the - * current thread is part of log output or not. This is true by default. - */ - public function setThreadPrinting($threadPrinting) { - $this->setBoolean('threadPrinting', $threadPrinting); - } - - /** - * @return boolean Returns value of the <b>ThreadPrinting</b> option. - */ - public function getThreadPrinting() { - return $this->threadPrinting; - } - - /** - * The <b>CategoryPrefixing</b> option specifies whether {@link Category} - * name is part of log output or not. This is true by default. - */ - public function setCategoryPrefixing($categoryPrefixing) { - $this->setBoolean('categoryPrefixing', $categoryPrefixing); - } - - /** - * @return boolean Returns value of the <b>CategoryPrefixing</b> option. - */ - public function getCategoryPrefixing() { - return $this->categoryPrefixing; - } - - /** - * The <b>ContextPrinting</b> option specifies log output will include - * the nested context information belonging to the current thread. - * This is true by default. - */ - public function setContextPrinting($contextPrinting) { - $this->setBoolean('contextPrinting', $contextPrinting); - } - - /** - * @return boolean Returns value of the <b>ContextPrinting</b> option. - */ - public function getContextPrinting() { - return $this->contextPrinting; - } - - /** - * The <b>MicroSecondsPrinting</b> option specifies if microseconds infos - * should be printed at the end of timestamp. - * This is true by default. - */ - public function setMicroSecondsPrinting($microSecondsPrinting) { - $this->setBoolean('microSecondsPrinting', $microSecondsPrinting); - } - - /** - * @return boolean Returns value of the <b>MicroSecondsPrinting</b> option. - */ - public function getMicroSecondsPrinting() { - return $this->microSecondsPrinting; - } - - - public function setDateFormat($dateFormat) { - $this->setString('dateFormat', $dateFormat); - } - - /** - * @return string - */ - public function getDateFormat() { - return $this->dateFormat; - } - - /** - * In addition to the level of the statement and message, the - * returned string includes time, thread, category. - * <p>Time, thread, category are printed depending on options. - * - * @param LoggerLoggingEvent $event - * @return string - */ - public function format(LoggerLoggingEvent $event) { - $timeStamp = (float)$event->getTimeStamp(); - $format = strftime($this->dateFormat, (int)$timeStamp); - - if ($this->microSecondsPrinting) { - $usecs = floor(($timeStamp - (int)$timeStamp) * 1000); - $format .= sprintf(',%03d', $usecs); - } - - $format .= ' '; - - if ($this->threadPrinting) { - $format .= '[' . getmypid() . '] '; - } - - $level = $event->getLevel(); - $format .= $level . ' '; - - if ($this->categoryPrefixing) { - $format .= $event->getLoggerName() . ' '; - } - - if ($this->contextPrinting) { - $ndc = $event->getNDC(); - if ($ndc != null) { - $format .= $ndc . ' '; - } - } - - $format .= '- ' . $event->getRenderedMessage(); - $format .= PHP_EOL; - - return $format; - } - - public function ignoresThrowable() { - return true; - } -} diff --git a/library/log4php/layouts/LoggerLayoutXml.php b/library/log4php/layouts/LoggerLayoutXml.php deleted file mode 100644 --- a/library/log4php/layouts/LoggerLayoutXml.php +++ /dev/null @@ -1,210 +0,0 @@ -<?php -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * @package log4php - */ - -/** - * The output of the LoggerXmlLayout consists of a series of log4php:event elements. - * - * Configurable parameters: - * - {@link $locationInfo} - If set to true then the file name and line number - * of the origin of the log statement will be included in output. - * - {@link $log4jNamespace} - If set to true then log4j namespace will be used - * instead of log4php namespace. This can be usefull when using log viewers - * which can only parse the log4j namespace such as Apache Chainsaw. - * - * <p>It does not output a complete well-formed XML file. - * The output is designed to be included as an external entity in a separate file to form - * a correct XML file.</p> - * - * Example: - * - * {@example ../../examples/php/layout_xml.php 19}<br> - * - * {@example ../../examples/resources/layout_xml.properties 18}<br> - * - * The above would print: - * - * <pre> - * <log4php:eventSet xmlns:log4php="http://logging.apache.org/log4php/" version="0.3" includesLocationInfo="true"> - * <log4php:event logger="root" level="INFO" thread="13802" timestamp="1252456226491"> - * <log4php:message><![CDATA[Hello World!]]></log4php:message> - * <log4php:locationInfo class="main" file="examples/php/layout_xml.php" line="6" method="main" /> - * </log4php:event> - * </log4php:eventSet> - * </pre> - * - * @version $Revision: 1213283 $ - * @package log4php - * @subpackage layouts - */ -class LoggerLayoutXml extends LoggerLayout { - const LOG4J_NS_PREFIX = 'log4j'; - const LOG4J_NS = 'http://jakarta.apache.org/log4j/'; - - const LOG4PHP_NS_PREFIX = 'log4php'; - const LOG4PHP_NS = 'http://logging.apache.org/log4php/'; - - const CDATA_START = '<![CDATA['; - const CDATA_END = ']]>'; - const CDATA_PSEUDO_END = ']]>'; - const CDATA_EMBEDDED_END = ']]>]]><![CDATA['; - - /** - * If set to true then the file name and line number of the origin of the - * log statement will be output. - * @var boolean - */ - protected $locationInfo = true; - - /** - * If set to true, log4j namespace will be used instead of the log4php - * namespace. - * @var boolean - */ - protected $log4jNamespace = false; - - /** The namespace in use. */ - protected $namespace = self::LOG4PHP_NS; - - /** The namespace prefix in use */ - protected $namespacePrefix = self::LOG4PHP_NS_PREFIX; - - public function activateOptions() { - if ($this->getLog4jNamespace()) { - $this->namespace = self::LOG4J_NS; - $this->namespacePrefix = self::LOG4J_NS_PREFIX; - } else { - $this->namespace = self::LOG4PHP_NS; - $this->namespacePrefix = self::LOG4PHP_NS_PREFIX; - } - } - - /** - * @return string - */ - public function getHeader() { - return "<{$this->namespacePrefix}:eventSet " . - "xmlns:{$this->namespacePrefix}=\"{$this->namespace}\" " . - "version=\"0.3\" " . - "includesLocationInfo=\"" . ($this->getLocationInfo() ? "true" : "false") . "\"" . - ">" . PHP_EOL; - } - - /** - * Formats a {@link LoggerLoggingEvent} in conformance with the log4php.dtd. - * - * @param LoggerLoggingEvent $event - * @return string - */ - public function format(LoggerLoggingEvent $event) { - $ns = $this->namespacePrefix; - - $loggerName = $event->getLoggerName(); - $timeStamp = number_format((float)($event->getTimeStamp() * 1000), 0, '', ''); - $thread = $event->getThreadName(); - $level = $event->getLevel()->toString(); - - $buf = "<$ns:event logger=\"{$loggerName}\" level=\"{$level}\" thread=\"{$thread}\" timestamp=\"{$timeStamp}\">" . PHP_EOL; - $buf .= "<$ns:message>"; - $buf .= $this->encodeCDATA($event->getRenderedMessage()); - $buf .= "</$ns:message>" . PHP_EOL; - - $ndc = $event->getNDC(); - if (!empty($ndc)) { - $buf .= "<$ns:NDC><![CDATA["; - $buf .= $this->encodeCDATA($ndc); - $buf .= "]]></$ns:NDC>" . PHP_EOL; - } - - $mdcMap = $event->getMDCMap(); - if (!empty($mdcMap)) { - $buf .= "<$ns:properties>" . PHP_EOL; - foreach ($mdcMap as $name => $value) { - $buf .= "<$ns:data name=\"$name\" value=\"$value\" />" . PHP_EOL; - } - $buf .= "</$ns:properties>" . PHP_EOL; - } - - if ($this->getLocationInfo()) { - $locationInfo = $event->getLocationInformation(); - $buf .= "<$ns:locationInfo " . - "class=\"" . $locationInfo->getClassName() . "\" " . - "file=\"" . htmlentities($locationInfo->getFileName(), ENT_QUOTES) . "\" " . - "line=\"" . $locationInfo->getLineNumber() . "\" " . - "method=\"" . $locationInfo->getMethodName() . "\" "; - $buf .= "/>" . PHP_EOL; - } - - $buf .= "</$ns:event>" . PHP_EOL; - - return $buf; - } - - /** - * @return string - */ - public function getFooter() { - return "</{$this->namespacePrefix}:eventSet>" . PHP_EOL; - } - - - /** - * Whether or not file name and line number will be included in the output. - * @return boolean - */ - public function getLocationInfo() { - return $this->locationInfo; - } - - /** - * The {@link $locationInfo} option takes a boolean value. By default, - * it is set to false which means there will be no location - * information output by this layout. If the the option is set to - * true, then the file name and line number of the statement at the - * origin of the log statement will be output. - */ - public function setLocationInfo($flag) { - $this->setBoolean('locationInfo', $flag); - } - - /** - * @return boolean - */ - public function getLog4jNamespace() { - return $this->log4jNamespace; - } - - /** - * @param boolean - */ - public function setLog4jNamespace($flag) { - $this->setBoolean('log4jNamespace', $flag); - } - - /** - * Encases a string in CDATA tags, and escapes any existing CDATA end - * tags already present in the string. - * @param string $string - */ - private function encodeCDATA($string) { - $string = str_replace(self::CDATA_END, self::CDATA_EMBEDDED_END, $string); - return self::CDATA_START . $string . self::CDATA_END; - } -} - diff --git a/library/log4php/pattern/LoggerPatternConverter.php b/library/log4php/pattern/LoggerPatternConverter.php deleted file mode 100644 --- a/library/log4php/pattern/LoggerPatternConverter.php +++ /dev/null @@ -1,128 +0,0 @@ -<?php -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * @package log4php - */ - -/** - * LoggerPatternConverter is an abstract class that provides the formatting - * functionality that derived classes need. - * - * <p>Conversion specifiers in a conversion patterns are parsed to - * individual PatternConverters. Each of which is responsible for - * converting a logging event in a converter specific manner.</p> - * - * @version $Revision: 1326626 $ - * @package log4php - * @subpackage helpers - * @since 0.3 - */ -abstract class LoggerPatternConverter { - - /** - * Next converter in the converter chain. - * @var LoggerPatternConverter - */ - public $next = null; - - /** - * Formatting information, parsed from pattern modifiers. - * @var LoggerFormattingInfo - */ - protected $formattingInfo; - - /** - * Converter-specific formatting options. - * @var array - */ - protected $option; - - /** - * Constructor - * @param LoggerFormattingInfo $formattingInfo - * @param array $option - */ - public function __construct(LoggerFormattingInfo $formattingInfo = null, $option = null) { - $this->formattingInfo = $formattingInfo; - $this->option = $option; - $this->activateOptions(); - } - - /** - * Called in constructor. Converters which need to process the options - * can override this method. - */ - public function activateOptions() { - } - - /** - * Converts the logging event to the desired format. Derived pattern - * converters must implement this method. - * - * @param LoggerLoggingEvent $event - */ - abstract public function convert(LoggerLoggingEvent $event); - - /** - * Converts the event and formats it according to setting in the - * Formatting information object. - * - * @param string &$sbuf string buffer to write to - * @param LoggerLoggingEvent $event Event to be formatted. - */ - public function format(&$sbuf, $event) { - $string = $this->convert($event); - - if (!isset($this->formattingInfo)) { - $sbuf .= $string; - return; - } - - $fi = $this->formattingInfo; - - // Empty string - if ($string === '' || is_null($string)) { - if ($fi->min > 0) { - $sbuf .= str_repeat(' ', $fi->min); - } - return; - } - - $len = strlen($string); - - // Trim the string if needed - if ($len > $fi->max) { - if ($fi->trimLeft) { - $sbuf .= substr($string, $len - $fi->max, $fi->max); - } else { - $sbuf .= substr($string, 0, $fi->max); - } - } // Add padding if needed - else if ($len < $fi->min) { - if ($fi->padLeft) { - $sbuf .= str_repeat(' ', $fi->min - $len); - $sbuf .= $string; - } else { - $sbuf .= $string; - $sbuf .= str_repeat(' ', $fi->min - $len); - } - } // No action needed - else { - $sbuf .= $string; - } - } -} diff --git a/library/log4php/pattern/LoggerPatternConverterClass.php b/library/log4php/pattern/LoggerPatternConverterClass.php deleted file mode 100644 --- a/library/log4php/pattern/LoggerPatternConverterClass.php +++ /dev/null @@ -1,62 +0,0 @@ -<?php -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * @package log4php - */ - -/** - * Returns the fully qualified class name of the class from which the logging - * request was issued. - * - * @package log4php - * @subpackage pattern - * @version $Revision: 1326626 $ - * @since 2.3 - */ -class LoggerPatternConverterClass extends LoggerPatternConverter { - - /** Length to which to shorten the class name. */ - private $length; - - /** Holds processed class names. */ - private $cache = array(); - - public function activateOptions() { - // Parse the option (desired output length) - if (isset($this->option) && is_numeric($this->option) && $this->option >= 0) { - $this->length = (integer)$this->option; - } - } - - public function convert(LoggerLoggingEvent $event) { - $name = $event->getLocationInformation()->getClassName(); - - if (!isset($this->cache[$name])) { - - // If length is set return shortened class name - if (isset($this->length)) { - $this->cache[$name] = LoggerUtils::shortenClassName($name, $this->length); - } // If no length is specified return the full class name - else { - $this->cache[$name] = $name; - } - } - - return $this->cache[$name]; - } -} - \ No newline at end of file diff --git a/library/log4php/pattern/LoggerPatternConverterCookie.php b/library/log4php/pattern/LoggerPatternConverterCookie.php deleted file mode 100644 --- a/library/log4php/pattern/LoggerPatternConverterCookie.php +++ /dev/null @@ -1,35 +0,0 @@ -<?php -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * @package log4php - */ - -/** - * Returns a value from the $_COOKIE superglobal array corresponding to the - * given key. If no key is given, return all values. - * - * Options: - * [0] $_COOKIE key value - * - * @package log4php - * @subpackage pattern - * @version $Revision: 1326626 $ - * @since 2.3 - */ -class LoggerPatternConverterCookie extends LoggerPatternConverterSuperglobal { - protected $name = '_COOKIE'; -} \ No newline at end of file diff --git a/library/log4php/pattern/LoggerPatternConverterDate.php b/library/log4php/pattern/LoggerPatternConverterDate.php deleted file mode 100644 --- a/library/log4php/pattern/LoggerPatternConverterDate.php +++ /dev/null @@ -1,91 +0,0 @@ -<?php -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * @package log4php - */ - -/** - * Returns the date/time of the logging request. - * - * Option: the datetime format, as used by the date() function. If - * the option is not given, the default format 'c' will be used. - * - * There are several "special" values which can be given for this option: - * 'ISO8601', 'ABSOLUTE' and 'DATE'. - * - * @package log4php - * @subpackage pattern - * @version $Revision: 1326626 $ - * @since 2.3 - */ -class LoggerPatternConverterDate extends LoggerPatternConverter { - - const DATE_FORMAT_ISO8601 = 'c'; - - const DATE_FORMAT_ABSOLUTE = 'H:i:s'; - - const DATE_FORMAT_DATE = 'd M Y H:i:s.u'; - - private $format = self::DATE_FORMAT_ISO8601; - - private $specials = array( - 'ISO8601' => self::DATE_FORMAT_ISO8601, - 'ABSOLUTE' => self::DATE_FORMAT_ABSOLUTE, - 'DATE' => self::DATE_FORMAT_DATE, - ); - - private $useLocalDate = false; - - public function activateOptions() { - - // Parse the option (date format) - if (!empty($this->option)) { - if (isset($this->specials[$this->option])) { - $this->format = $this->specials[$this->option]; - } else { - $this->format = $this->option; - } - } - - // Check whether the pattern contains milliseconds (u) - if (preg_match('/(?<!\\\\)u/', $this->format)) { - $this->useLocalDate = true; - } - } - - public function convert(LoggerLoggingEvent $event) { - if ($this->useLocalDate) { - return $this->date($this->format, $event->getTimeStamp()); - } - return date($this->format, $event->getTimeStamp()); - } - - /** - * Currently, PHP date() function always returns zeros for milliseconds (u) - * on Windows. This is a replacement function for date() which correctly - * displays milliseconds on all platforms. - * - * It is slower than PHP date() so it should only be used if necessary. - */ - private function date($format, $utimestamp) { - $timestamp = floor($utimestamp); - $ms = floor(($utimestamp - $timestamp) * 1000); - $ms = str_pad($ms, 3, '0', STR_PAD_LEFT); - - return date(preg_replace('`(?<!\\\\)u`', $ms, $format), $timestamp); - } -} diff --git a/library/log4php/pattern/LoggerPatternConverterEnvironment.php b/library/log4php/pattern/LoggerPatternConverterEnvironment.php deleted file mode 100644 --- a/library/log4php/pattern/LoggerPatternConverterEnvironment.php +++ /dev/null @@ -1,35 +0,0 @@ -<?php -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * @package log4php - */ - -/** - * Returns a value from the $_ENV superglobal array corresponding to the - * given key. - * - * Options: - * [0] $_ENV key value - * - * @package log4php - * @subpackage pattern - * @version $Revision: 1326626 $ - * @since 2.3 - */ -class LoggerPatternConverterEnvironment extends LoggerPatternConverterSuperglobal { - protected $name = '_ENV'; -} diff --git a/library/log4php/pattern/LoggerPatternConverterFile.php b/library/log4php/pattern/LoggerPatternConverterFile.php deleted file mode 100644 --- a/library/log4php/pattern/LoggerPatternConverterFile.php +++ /dev/null @@ -1,34 +0,0 @@ -<?php -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * @package log4php - */ - -/** - * Returns the name of the file from which the logging request was issued. - * - * @package log4php - * @subpackage pattern - * @version $Revision: 1326626 $ - * @since 2.3 - */ -class LoggerPatternConverterFile extends LoggerPatternConverter { - - public function convert(LoggerLoggingEvent $event) { - return $event->getLocationInformation()->getFileName(); - } -} diff --git a/library/log4php/pattern/LoggerPatternConverterLevel.php b/library/log4php/pattern/LoggerPatternConverterLevel.php deleted file mode 100644 --- a/library/log4php/pattern/LoggerPatternConverterLevel.php +++ /dev/null @@ -1,34 +0,0 @@ -<?php -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * @package log4php - */ - -/** - * Returns the event's level. - * - * @package log4php - * @subpackage pattern - * @version $Revision: 1326626 $ - * @since 2.3 - */ -class LoggerPatternConverterLevel extends LoggerPatternConverter { - - public function convert(LoggerLoggingEvent $event) { - return $event->getLevel()->toString(); - } -} diff --git a/library/log4php/pattern/LoggerPatternConverterLine.php b/library/log4php/pattern/LoggerPatternConverterLine.php deleted file mode 100644 --- a/library/log4php/pattern/LoggerPatternConverterLine.php +++ /dev/null @@ -1,35 +0,0 @@ -<?php -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * @package log4php - */ - -/** - * Returns the line number within the file from which the logging request was - * issued. - * - * @package log4php - * @subpackage pattern - * @version $Revision: 1326626 $ - * @since 2.3 - */ -class LoggerPatternConverterLine extends LoggerPatternConverter { - - public function convert(LoggerLoggingEvent $event) { - return $event->getLocationInformation()->getLineNumber(); - } -} diff --git a/library/log4php/pattern/LoggerPatternConverterLiteral.php b/library/log4php/pattern/LoggerPatternConverterLiteral.php deleted file mode 100644 --- a/library/log4php/pattern/LoggerPatternConverterLiteral.php +++ /dev/null @@ -1,40 +0,0 @@ -<?php -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * @package log4php - */ - -/** - * Returns the literal value passed in the constructor, without modifications. - * - * @package log4php - * @subpackage pattern - * @version $Revision: 1326626 $ - * @since 2.3 - */ -class LoggerPatternConverterLiteral extends LoggerPatternConverter { - - private $literalValue; - - public function __construct($literalValue) { - $this->literalValue = $literalValue; - } - - public function convert(LoggerLoggingEvent $event) { - return $this->literalValue; - } -} diff --git a/library/log4php/pattern/LoggerPatternConverterLocation.php b/library/log4php/pattern/LoggerPatternConverterLocation.php deleted file mode 100644 --- a/library/log4php/pattern/LoggerPatternConverterLocation.php +++ /dev/null @@ -1,39 +0,0 @@ -<?php -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * @package log4php - */ - -/** - * Returns the line number within the file from which the logging request was - * issued. - * - * @package log4php - * @subpackage pattern - * @version $Revision: 1326626 $ - * @since 2.3 - */ -class LoggerPatternConverterLocation extends LoggerPatternConverter { - - public function convert(LoggerLoggingEvent $event) { - return - $event->getLocationInformation()->getClassName() . '.' . - $event->getLocationInformation()->getMethodName() . '(' . - $event->getLocationInformation()->getFileName() . ':' . - $event->getLocationInformation()->getLineNumber() . ')'; - } -} diff --git a/library/log4php/pattern/LoggerPatternConverterLogger.php b/library/log4php/pattern/LoggerPatternConverterLogger.php deleted file mode 100644 --- a/library/log4php/pattern/LoggerPatternConverterLogger.php +++ /dev/null @@ -1,63 +0,0 @@ -<?php -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * @package log4php - */ - -/** - * Returns the name of the logger which created the logging request. - * - * Takes one option, which is an integer. If the option is given, the logger - * name will be shortened to the given length, if possible. - * - * @package log4php - * @subpackage pattern - * @version $Revision: 1326626 $ - * @since 2.3 - */ -class LoggerPatternConverterLogger extends LoggerPatternConverter { - - /** Length to which to shorten the name. */ - private $length; - - /** Holds processed logger names. */ - private $cache = array(); - - public function activateOptions() { - // Parse the option (desired output length) - if (isset($this->option) && is_numeric($this->option) && $this->option >= 0) { - $this->length = (integer)$this->option; - } - } - - public function convert(LoggerLoggingEvent $event) { - $name = $event->getLoggerName(); - - if (!isset($this->cache[$name])) { - - // If length is set return shortened logger name - if (isset($this->length)) { - $this->cache[$name] = LoggerUtils::shortenClassName($name, $this->length); - } // If no length is specified return full logger name - else { - $this->cache[$name] = $name; - } - } - - return $this->cache[$name]; - } -} diff --git a/library/log4php/pattern/LoggerPatternConverterMDC.php b/library/log4php/pattern/LoggerPatternConverterMDC.php deleted file mode 100644 --- a/library/log4php/pattern/LoggerPatternConverterMDC.php +++ /dev/null @@ -1,55 +0,0 @@ -<?php -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * @package log4php - */ - -/** - * Returns the Mapped Diagnostic Context value corresponding to the given key. - * - * Options: - * [0] the MDC key - * - * @package log4php - * @subpackage pattern - * @version $Revision: 1326626 $ - * @since 2.3 - */ -class LoggerPatternConverterMDC extends LoggerPatternConverter { - - private $key; - - public function activateOptions() { - if (isset($this->option) && $this->option !== '') { - $this->key = $this->option; - } - } - - public function convert(LoggerLoggingEvent $event) { - if (isset($this->key)) { - return $event->getMDC($this->key); - } else { - $buff = array(); - $map = $event->getMDCMap(); - foreach ($map as $key => $value) { - $buff [] = "$key=$value"; - } - return implode(', ', $buff); - } - } -} - \ No newline at end of file diff --git a/library/log4php/pattern/LoggerPatternConverterMessage.php b/library/log4php/pattern/LoggerPatternConverterMessage.php deleted file mode 100644 --- a/library/log4php/pattern/LoggerPatternConverterMessage.php +++ /dev/null @@ -1,34 +0,0 @@ -<?php -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * @package log4php - */ - -/** - * Returns the logged message. - * - * @package log4php - * @subpackage pattern - * @version $Revision: 1326626 $ - * @since 2.3 - */ -class LoggerPatternConverterMessage extends LoggerPatternConverter { - - public function convert(LoggerLoggingEvent $event) { - return $event->getRenderedMessage(); - } -} diff --git a/library/log4php/pattern/LoggerPatternConverterMethod.php b/library/log4php/pattern/LoggerPatternConverterMethod.php deleted file mode 100644 --- a/library/log4php/pattern/LoggerPatternConverterMethod.php +++ /dev/null @@ -1,35 +0,0 @@ -<?php -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * @package log4php - */ - -/** - * Returns the name of the function or method from which the logging request - * was issued. - * - * @package log4php - * @subpackage pattern - * @version $Revision: 1326626 $ - * @since 2.3 - */ -class LoggerPatternConverterMethod extends LoggerPatternConverter { - - public function convert(LoggerLoggingEvent $event) { - return $event->getLocationInformation()->getMethodName(); - } -} diff --git a/library/log4php/pattern/LoggerPatternConverterNDC.php b/library/log4php/pattern/LoggerPatternConverterNDC.php deleted file mode 100644 --- a/library/log4php/pattern/LoggerPatternConverterNDC.php +++ /dev/null @@ -1,35 +0,0 @@ -<?php -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * @package log4php - */ - -/** - * Returns the full Nested Diagnostic Context. - * - * @package log4php - * @subpackage pattern - * @version $Revision: 1326626 $ - * @since 2.3 - */ -class LoggerPatternConverterNDC extends LoggerPatternConverter { - - public function convert(LoggerLoggingEvent $event) { - return $event->getNDC(); - } -} - \ No newline at end of file diff --git a/library/log4php/pattern/LoggerPatternConverterNewLine.php b/library/log4php/pattern/LoggerPatternConverterNewLine.php deleted file mode 100644 --- a/library/log4php/pattern/LoggerPatternConverterNewLine.php +++ /dev/null @@ -1,34 +0,0 @@ -<?php -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * @package log4php - */ - -/** - * Returns platform-specific newline character(s). - * - * @package log4php - * @subpackage pattern - * @version $Revision: 1326626 $ - * @since 2.3 - */ -class LoggerPatternConverterNewLine extends LoggerPatternConverter { - - public function convert(LoggerLoggingEvent $event) { - return PHP_EOL; - } -} diff --git a/library/log4php/pattern/LoggerPatternConverterProcess.php b/library/log4php/pattern/LoggerPatternConverterProcess.php deleted file mode 100644 --- a/library/log4php/pattern/LoggerPatternConverterProcess.php +++ /dev/null @@ -1,34 +0,0 @@ -<?php -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * @package log4php - */ - -/** - * Returns the PID of the current process. - * - * @package log4php - * @subpackage pattern - * @version $Revision: 1326626 $ - * @since 2.3 - */ -class LoggerPatternConverterProcess extends LoggerPatternConverter { - - public function convert(LoggerLoggingEvent $event) { - return getmypid(); - } -} diff --git a/library/log4php/pattern/LoggerPatternConverterRelative.php b/library/log4php/pattern/LoggerPatternConverterRelative.php deleted file mode 100644 --- a/library/log4php/pattern/LoggerPatternConverterRelative.php +++ /dev/null @@ -1,36 +0,0 @@ -<?php -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * @package log4php - */ - -/** - * Returns the number of milliseconds elapsed since the start of the - * application until the creation of the logging event. - * - * @package log4php - * @subpackage pattern - * @version $Revision: 1379731 $ - * @since 2.3 - */ -class LoggerPatternConverterRelative extends LoggerPatternConverter { - - public function convert(LoggerLoggingEvent $event) { - $ts = $event->getRelativeTime(); - return number_format($ts, 4); - } -} diff --git a/library/log4php/pattern/LoggerPatternConverterRequest.php b/library/log4php/pattern/LoggerPatternConverterRequest.php deleted file mode 100644 --- a/library/log4php/pattern/LoggerPatternConverterRequest.php +++ /dev/null @@ -1,35 +0,0 @@ -<?php -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * @package log4php - */ - -/** - * Returns a value from the $_REQUEST superglobal array corresponding to the - * given key. - * - * Options: - * [0] $_REQUEST key value - * - * @package log4php - * @subpackage pattern - * @version $Revision: 1326626 $ - * @since 2.3 - */ -class LoggerPatternConverterRequest extends LoggerPatternConverterSuperglobal { - protected $name = '_REQUEST'; -} \ No newline at end of file diff --git a/library/log4php/pattern/LoggerPatternConverterServer.php b/library/log4php/pattern/LoggerPatternConverterServer.php deleted file mode 100644 --- a/library/log4php/pattern/LoggerPatternConverterServer.php +++ /dev/null @@ -1,35 +0,0 @@ -<?php -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * @package log4php - */ - -/** - * Returns a value from the $_SERVER superglobal array corresponding to the - * given key. - * - * Options: - * [0] $_SERVER key value - * - * @package log4php - * @subpackage pattern - * @version $Revision: 1326626 $ - * @since 2.3 - */ -class LoggerPatternConverterServer extends LoggerPatternConverterSuperglobal { - protected $name = '_SERVER'; -} diff --git a/library/log4php/pattern/LoggerPatternConverterSession.php b/library/log4php/pattern/LoggerPatternConverterSession.php deleted file mode 100644 --- a/library/log4php/pattern/LoggerPatternConverterSession.php +++ /dev/null @@ -1,35 +0,0 @@ -<?php -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * @package log4php - */ - -/** - * Returns a value from the $_SESSION superglobal array corresponding to the - * given key. - * - * Options: - * [0] $_SESSION key value - * - * @package log4php - * @subpackage pattern - * @version $Revision: 1326626 $ - * @since 2.3 - */ -class LoggerPatternConverterSession extends LoggerPatternConverterSuperglobal { - protected $name = '_SESSION'; -} diff --git a/library/log4php/pattern/LoggerPatternConverterSessionID.php b/library/log4php/pattern/LoggerPatternConverterSessionID.php deleted file mode 100644 --- a/library/log4php/pattern/LoggerPatternConverterSessionID.php +++ /dev/null @@ -1,33 +0,0 @@ -<?php -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * @package log4php - */ - -/** - * Returns the active session ID, or an empty string if out of session. - * - * @package log4php - * @subpackage pattern - * @version $Revision: 1326626 $ - * @since 2.3 - */ -class LoggerPatternConverterSessionID extends LoggerPatternConverter { - public function convert(LoggerLoggingEvent $event) { - return session_id(); - } -} diff --git a/library/log4php/pattern/LoggerPatternConverterSuperglobal.php b/library/log4php/pattern/LoggerPatternConverterSuperglobal.php deleted file mode 100644 --- a/library/log4php/pattern/LoggerPatternConverterSuperglobal.php +++ /dev/null @@ -1,100 +0,0 @@ -<?php -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * @package log4php - */ - -/** - * Returns a value from a superglobal array corresponding to the - * given key. - * - * Option: the key to look up within the superglobal array - * - * Also, it is possible that a superglobal variable is not populated by PHP - * because of the settings in the variables-order ini directive. In this case - * the converter will return an empty value. - * - * @see http://php.net/manual/en/language.variables.superglobals.php - * @see http://www.php.net/manual/en/ini.core.php#ini.variables-order - * - * @package log4php - * @subpackage pattern - * @version $Revision: 1326626 $ - * @since 2.3 - */ -abstract class LoggerPatternConverterSuperglobal extends LoggerPatternConverter { - - /** - * Name of the superglobal variable, to be defined by subclasses. - * For example: "_SERVER" or "_ENV". - */ - protected $name; - - protected $value = ''; - - public function activateOptions() { - // Read the key from options array - if (isset($this->option) && $this->option !== '') { - $key = $this->option; - } - - /* - * There is a bug in PHP which doesn't allow superglobals to be - * accessed when their name is stored in a variable, e.g.: - * - * $name = '_SERVER'; - * $array = $$name; - * - * This code does not work when run from within a method (only when run - * in global scope). But the following code does work: - * - * $name = '_SERVER'; - * global $$name; - * $array = $$name; - * - * That's why global is used here. - */ - global ${$this->name}; - - // Check the given superglobal exists. It is possible that it is not initialized. - if (!isset(${$this->name})) { - $class = get_class($this); - trigger_error("log4php: $class: Cannot find superglobal variable \${$this->name}.", E_USER_WARNING); - return; - } - - $source = ${$this->name}; - - // When the key is set, display the matching value - if (isset($key)) { - if (isset($source[$key])) { - $this->value = $source[$key]; - } - } // When the key is not set, display all values - else { - $values = array(); - foreach ($source as $key => $value) { - $values[] = "$key=$value"; - } - $this->value = implode(', ', $values); - } - } - - public function convert(LoggerLoggingEvent $event) { - return $this->value; - } -} diff --git a/library/log4php/pattern/LoggerPatternConverterThrowable.php b/library/log4php/pattern/LoggerPatternConverterThrowable.php deleted file mode 100644 --- a/library/log4php/pattern/LoggerPatternConverterThrowable.php +++ /dev/null @@ -1,40 +0,0 @@ -<?php -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * @package log4php - */ - -/** - * Returns the throwable information linked to the logging event, if any. - * - * @package log4php - * @subpackage pattern - * @version $Revision: 1395470 $ - * @since 2.3 - */ -class LoggerPatternConverterThrowable extends LoggerPatternConverter { - - public function convert(LoggerLoggingEvent $event) { - $info = $event->getThrowableInformation(); - if (isset($info)) { - $ex = $info->getThrowable(); - return (string)$ex . PHP_EOL; - } - return ''; - } -} - \ No newline at end of file diff --git a/library/log4php/renderers/LoggerRenderer.php b/library/log4php/renderers/LoggerRenderer.php deleted file mode 100644 --- a/library/log4php/renderers/LoggerRenderer.php +++ /dev/null @@ -1,36 +0,0 @@ -<?php -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * @package log4php - */ - -/** - * Implement this interface in order to render objects to strings. - * - * @version $Revision: 1394956 $ - * @package log4php - * @subpackage renderers - * @since 0.3 - */ -interface LoggerRenderer { - /** - * Renders the entity passed as <var>input</var> to a string. - * @param mixed $input The entity to render. - * @return string The rendered string. - */ - public function render($input); -} diff --git a/library/log4php/renderers/LoggerRendererDefault.php b/library/log4php/renderers/LoggerRendererDefault.php deleted file mode 100644 --- a/library/log4php/renderers/LoggerRendererDefault.php +++ /dev/null @@ -1,36 +0,0 @@ -<?php -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * @package log4php - */ - -/** - * The default renderer, which is used when no other renderer is found. - * - * Renders the input using <var>print_r</var>. - * - * @package log4php - * @subpackage renderers - * @since 0.3 - */ -class LoggerRendererDefault implements LoggerRenderer { - - /** @inheritdoc */ - public function render($input) { - return print_r($input, true); - } -} diff --git a/library/log4php/renderers/LoggerRendererException.php b/library/log4php/renderers/LoggerRendererException.php deleted file mode 100644 --- a/library/log4php/renderers/LoggerRendererException.php +++ /dev/null @@ -1,36 +0,0 @@ -<?php -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * @package log4php - */ - -/** - * Renderer used for Exceptions. - * - * @package log4php - * @subpackage renderers - * @since 2.1 - */ -class LoggerRendererException implements LoggerRenderer { - - public function render($input) { - - // Exception class has a very decent __toString method - // so let's just use that instead of writing lots of code. - return (string)$input; - } -} diff --git a/library/log4php/renderers/LoggerRendererMap.php b/library/log4php/renderers/LoggerRendererMap.php deleted file mode 100644 --- a/library/log4php/renderers/LoggerRendererMap.php +++ /dev/null @@ -1,186 +0,0 @@ -<?php -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * @package log4php - */ - -/** - * Manages defined renderers and determines which renderer to use for a given - * input. - * - * @version $Revision: 1394956 $ - * @package log4php - * @subpackage renderers - * @since 0.3 - */ -class LoggerRendererMap { - - /** - * Maps class names to appropriate renderers. - * @var array - */ - private $map = array(); - - /** - * The default renderer to use if no specific renderer is found. - * @var LoggerRenderer - */ - private $defaultRenderer; - - public function __construct() { - - // Set default config - $this->reset(); - } - - /** - * Adds a renderer to the map. - * - * If a renderer already exists for the given <var>$renderedClass</var> it - * will be overwritten without warning. - * - * @param string $renderedClass The name of the class which will be - * rendered by the renderer. - * @param string $renderingClass The name of the class which will - * perform the rendering. - */ - public function addRenderer($renderedClass, $renderingClass) { - // Check the rendering class exists - if (!class_exists($renderingClass)) { - trigger_error("log4php: Failed adding renderer. Rendering class [$renderingClass] not found."); - return; - } - - // Create the instance - $renderer = new $renderingClass(); - - // Check the class implements the right interface - if (!($renderer instanceof LoggerRenderer)) { - trigger_error("log4php: Failed adding renderer. Rendering class [$renderingClass] does not implement the LoggerRenderer interface."); - return; - } - - // Convert to lowercase since class names in PHP are not case sensitive - $renderedClass = strtolower($renderedClass); - - $this->map[$renderedClass] = $renderer; - } - - /** - * Sets a custom default renderer class. - * - * TODO: there's code duplication here. This method is almost identical to - * addRenderer(). However, it has custom error messages so let it sit for - * now. - * - * @param string $renderingClass The name of the class which will - * perform the rendering. - */ - public function setDefaultRenderer($renderingClass) { - // Check the class exists - if (!class_exists($renderingClass)) { - trigger_error("log4php: Failed setting default renderer. Rendering class [$renderingClass] not found."); - return; - } - - // Create the instance - $renderer = new $renderingClass(); - - // Check the class implements the right interface - if (!($renderer instanceof LoggerRenderer)) { - trigger_error("log4php: Failed setting default renderer. Rendering class [$renderingClass] does not implement the LoggerRenderer interface."); - return; - } - - $this->defaultRenderer = $renderer; - } - - /** - * Returns the default renderer. - * @var LoggerRenderer - */ - public function getDefaultRenderer() { - return $this->defaultRenderer; - } - - /** - * Finds the appropriate renderer for the given <var>input</var>, and - * renders it (i.e. converts it to a string). - * - * @param mixed $input Input to render. - * @return string The rendered contents. - */ - public function findAndRender($input) { - if ($input === null) { - return null; - } - - // For objects, try to find a renderer in the map - if (is_object($input)) { - $renderer = $this->getByClassName(get_class($input)); - if (isset($renderer)) { - return $renderer->render($input); - } - } - - // Fall back to the default renderer - return $this->defaultRenderer->render($input); - } - - /** - * Returns the appropriate renderer for a given object. - * - * @param mixed $object - * @return LoggerRenderer Or null if none found. - */ - public function getByObject($object) { - if (!is_object($object)) { - return null; - } - return $this->getByClassName(get_class($object)); - } - - /** - * Returns the appropriate renderer for a given class name. - * - * If no renderer could be found, returns NULL. - * - * @param string $class - * @return LoggerRendererObject Or null if not found. - */ - public function getByClassName($class) { - for (; !empty($class); $class = get_parent_class($class)) { - $class = strtolower($class); - if (isset($this->map[$class])) { - return $this->map[$class]; - } - } - return null; - } - - /** Empties the renderer map. */ - public function clear() { - $this->map = array(); - } - - /** Resets the renderer map to it's default configuration. */ - public function reset() { - $this->defaultRenderer = new LoggerRendererDefault(); - $this->clear(); - $this->addRenderer('Exception', 'LoggerRendererException'); - } -} diff --git a/library/log4php/xml/log4php.dtd b/library/log4php/xml/log4php.dtd deleted file mode 100644 --- a/library/log4php/xml/log4php.dtd +++ /dev/null @@ -1,148 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" ?> - <!-- - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - --> - <!-- Authors: Chris Taylor, Ceki Gülcü. --> - <!-- Version: 1.2 --> - - <!-- PHP Port Modifications Author: Marco Vassura --> - <!-- PHP dtd Version: $Revision: 823875 $ --> - - <!-- A configuration element consists of optional renderer - elements,appender elements, categories and an optional root - element. --> - <!-- [log4php] --> - <!-- - category instead of logger cannot be used. categoryFactory is not implemented in log4php. - --> - <!-- [/log4php] --> - <!ELEMENT log4php:configuration (renderer*, appender*,(logger)*,root?)> - - <!-- The "threshold" attribute takes a level value such that all --> - <!-- logging statements with a level equal or below this value are --> - <!-- disabled. --> - - <!-- Setting the "debug" enable the printing of internal log4j logging --> - <!-- statements. --> - - <!-- By default, debug attribute is "null", meaning that we not do touch --> - <!-- internal log4j logging settings. The "null" value for the threshold --> - <!-- attribute can be misleading. The threshold field of a repository --> - <!-- cannot be set to null. The "null" value for the threshold attribute --> - <!-- simply means don't touch the threshold field, the threshold field --> - <!-- keeps its old value. --> - - <!ATTLIST log4php:configuration - xmlns:log4php CDATA #FIXED "http://logging.apache.org/log4php" - threshold (all|debug|info|warn|error|fatal|off|null) "null" - > - - <!-- renderer elements allow the user to customize the conversion of --> - <!-- message objects to String. --> - <!ELEMENT renderer EMPTY> - <!ATTLIST renderer - renderedClass CDATA #REQUIRED - renderingClass CDATA #REQUIRED - > - - <!-- Appenders must have a name and a class. --> - <!-- Appenders may contain an error handler, a layout, optional parameters --> - <!-- and filters. They may also reference (or include) other appenders. --> - <!-- [log4php] --> - <!-- error handler tag has no effects since log4php does not handle errors. Defintion deleted. --> - <!-- [/log4php] --> - <!ELEMENT appender (param*, layout?, filter*, appender-ref*)> - <!ATTLIST appender - name ID #REQUIRED - class CDATA #REQUIRED - > - - <!ELEMENT layout (param*)> - <!ATTLIST layout - class CDATA #REQUIRED - > - - <!ELEMENT filter (param*)> - <!ATTLIST filter - class CDATA #REQUIRED - > - - - <!ELEMENT param EMPTY> - <!ATTLIST param - name CDATA #REQUIRED - value CDATA #REQUIRED - > - - <!ELEMENT priority EMPTY> - <!ATTLIST priority - value CDATA #REQUIRED - > - - <!ELEMENT level EMPTY> - <!ATTLIST level - value CDATA #REQUIRED - > - - <!-- If no level element is specified, then the configurator MUST not --> - <!-- touch the level of the named logger. --> - <!ELEMENT logger (level?,appender-ref*)> - <!ATTLIST logger - name ID #REQUIRED - additivity (true|false) "true" - > - - <!ELEMENT appender-ref EMPTY> - <!ATTLIST appender-ref - ref IDREF #REQUIRED - > - - <!-- If no priority element is specified, then the configurator MUST not --> - <!-- touch the priority of root. --> - <!-- The root category always exists and cannot be subclassed. --> - <!ELEMENT root (param*, (priority|level)?, appender-ref*)> - - - <!-- ==================================================================== --> - <!-- A logging event --> - <!-- ==================================================================== --> - <!ELEMENT log4php:eventSet (log4php:event*)> - <!ATTLIST log4php:eventSet - xmlns:log4php CDATA #FIXED "http://www.vxr.it/log4php/" - version (0.2|0.3) "0.3" - includesLocationInfo (true|false) "true" - > - - <!ELEMENT log4php:event (log4php:message, log4php:locationInfo?) > - - <!-- The timestamp format is application dependent. --> - <!ATTLIST log4php:event - logger CDATA #REQUIRED - level CDATA #REQUIRED - thread CDATA #REQUIRED - timestamp CDATA #REQUIRED - > - - <!ELEMENT log4php:message (#PCDATA)> - <!ELEMENT log4php:NDC (#PCDATA)> - - <!ELEMENT log4php:locationInfo EMPTY> - <!ATTLIST log4php:locationInfo - class CDATA #REQUIRED - method CDATA #REQUIRED - file CDATA #REQUIRED - line CDATA #REQUIRED - > diff --git a/library/smarty/.gitattributes b/library/smarty/.gitattributes deleted file mode 100644 --- a/library/smarty/.gitattributes +++ /dev/null @@ -1,22 +0,0 @@ -# Auto detect text files and perform LF normalization -* text=auto - -# Custom for Visual Studio -*.cs diff=csharp -*.sln merge=union -*.csproj merge=union -*.vbproj merge=union -*.fsproj merge=union -*.dbproj merge=union - -# Standard to msysgit -*.doc diff=astextplain -*.DOC diff=astextplain -*.docx diff=astextplain -*.DOCX diff=astextplain -*.dot diff=astextplain -*.DOT diff=astextplain -*.pdf diff=astextplain -*.PDF diff=astextplain -*.rtf diff=astextplain -*.RTF diff=astextplain diff --git a/library/smarty/.gitignore b/library/smarty/.gitignore deleted file mode 100644 --- a/library/smarty/.gitignore +++ /dev/null @@ -1,222 +0,0 @@ -################# -## Eclipse -################# - -*.pydevproject -.project -.metadata -bin/ -tmp/ -*.tmp -*.bak -*.swp -*~.nib -local.properties -.classpath -.settings/ -.loadpath - -# External tool builders -.externalToolBuilders/ - -# Locally stored "Eclipse launch configurations" -*.launch - -# CDT-specific -.cproject - -# PDT-specific -.buildpath - - -################# -## Visual Studio -################# - -## Ignore Visual Studio temporary files, build results, and -## files generated by popular Visual Studio add-ons. - -# User-specific files -*.suo -*.user -*.sln.docstates - -# Build results - -[Dd]ebug/ -[Rr]elease/ -x64/ -build/ -[Bb]in/ -[Oo]bj/ - -# MSTest test Results -[Tt]est[Rr]esult*/ -[Bb]uild[Ll]og.* - -*_i.c -*_p.c -*.ilk -*.meta -*.obj -*.pch -*.pdb -*.pgc -*.pgd -*.rsp -*.sbr -*.tlb -*.tli -*.tlh -*.tmp -*.tmp_proj -*.log -*.vspscc -*.vssscc -.builds -*.pidb -*.log -*.scc - -# Visual C++ cache files -ipch/ -*.aps -*.ncb -*.opensdf -*.sdf -*.cachefile - -# Visual Studio profiler -*.psess -*.vsp -*.vspx - -# Guidance Automation Toolkit -*.gpState - -# ReSharper is a .NET coding add-in -_ReSharper*/ -*.[Rr]e[Ss]harper - -# TeamCity is a build add-in -_TeamCity* - -# DotCover is a Code Coverage Tool -*.dotCover - -# NCrunch -*.ncrunch* -.*crunch*.local.xml - -# Installshield output folder -[Ee]xpress/ - -# DocProject is a documentation generator add-in -DocProject/buildhelp/ -DocProject/Help/*.HxT -DocProject/Help/*.HxC -DocProject/Help/*.hhc -DocProject/Help/*.hhk -DocProject/Help/*.hhp -DocProject/Help/Html2 -DocProject/Help/html - -# Click-Once directory -publish/ - -# Publish Web Output -*.Publish.xml -*.pubxml - -# NuGet Packages Directory -## TODO: If you have NuGet Package Restore enabled, uncomment the next line -#packages/ - -# Windows Azure Build Output -csx -*.build.csdef - -# Windows Store app package directory -AppPackages/ - -# Others -sql/ -*.Cache -ClientBin/ -[Ss]tyle[Cc]op.* -~$* -*~ -*.dbmdl -*.[Pp]ublish.xml -*.pfx -*.publishsettings - -# RIA/Silverlight projects -Generated_Code/ - -# Backup & report files from converting an old project file to a newer -# Visual Studio version. Backup files are not needed, because we have git ;-) -_UpgradeReport_Files/ -Backup*/ -UpgradeLog*.XML -UpgradeLog*.htm - -# SQL Server files -App_Data/*.mdf -App_Data/*.ldf - -############# -## Windows detritus -############# - -# Windows image file caches -Thumbs.db -ehthumbs.db - -# Folder config file -Desktop.ini - -# Recycle Bin used on file shares -$RECYCLE.BIN/ - -# Mac crap -.DS_Store - - -############# -## Python -############# - -*.py[co] - -# Packages -*.egg -*.egg-info -dist/ -build/ -eggs/ -parts/ -var/ -sdist/ -develop-eggs/ -.installed.cfg - -# Installer logs -pip-log.txt - -# Unit test / coverage reports -.coverage -.tox - -#Translations -*.mo - -#Mr Developer -.mr.developer.cfg - -.idea/ -.idea\ - -# Smarty -lexer/*.php -lexer/*.out \ No newline at end of file diff --git a/library/smarty/.travis.yml b/library/smarty/.travis.yml deleted file mode 100644 --- a/library/smarty/.travis.yml +++ /dev/null @@ -1,18 +0,0 @@ -language: php - -php: - - 5.3 - - 5.4 - - 5.5 - - 5.6 - -allow_failures: - - php: hhvm - -install: - - git clone --depth=50 --branch=master git://github.com/smarty-php/smarty-phpunit.git - -script: - - cd smarty-phpunit - - phpunit ./ - diff --git a/library/smarty/COMPOSER_RELEASE_NOTES.txt b/library/smarty/COMPOSER_RELEASE_NOTES.txt deleted file mode 100644 --- a/library/smarty/COMPOSER_RELEASE_NOTES.txt +++ /dev/null @@ -1,29 +0,0 @@ - - -Starting with Smarty 3.1.21 Composer has been configured to load the packages from github. - -******************************************************************************* -* * -* NOTE: Because of this change you must clear your local composer cache with * -* the "composer clearcache" command * -* * -******************************************************************************* - -To get the latest stable version use - "require": { - "smarty/smarty": "~3.1" - } -in your composer.json file. - -To get the trunk version use - "require": { - "smarty/smarty": "~3.1@dev" - } - -The "smarty/smarty" package will start at libs/.... subfolder. - -To retrieve the development and documentation folders add - "require-dev": { - "smarty/smarty-dev": "~3.1@dev" - } - diff --git a/library/smarty/COPYING.lib b/library/smarty/COPYING.lib deleted file mode 100644 --- a/library/smarty/COPYING.lib +++ /dev/null @@ -1,165 +0,0 @@ - GNU LESSER GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - - This version of the GNU Lesser General Public License incorporates -the terms and conditions of version 3 of the GNU General Public -License, supplemented by the additional permissions listed below. - - 0. Additional Definitions. - - As used herein, "this License" refers to version 3 of the GNU Lesser -General Public License, and the "GNU GPL" refers to version 3 of the GNU -General Public License. - - "The Library" refers to a covered work governed by this License, -other than an Application or a Combined Work as defined below. - - An "Application" is any work that makes use of an interface provided -by the Library, but which is not otherwise based on the Library. -Defining a subclass of a class defined by the Library is deemed a mode -of using an interface provided by the Library. - - A "Combined Work" is a work produced by combining or linking an -Application with the Library. The particular version of the Library -with which the Combined Work was made is also called the "Linked -Version". - - The "Minimal Corresponding Source" for a Combined Work means the -Corresponding Source for the Combined Work, excluding any source code -for portions of the Combined Work that, considered in isolation, are -based on the Application, and not on the Linked Version. - - The "Corresponding Application Code" for a Combined Work means the -object code and/or source code for the Application, including any data -and utility programs needed for reproducing the Combined Work from the -Application, but excluding the System Libraries of the Combined Work. - - 1. Exception to Section 3 of the GNU GPL. - - You may convey a covered work under sections 3 and 4 of this License -without being bound by section 3 of the GNU GPL. - - 2. Conveying Modified Versions. - - If you modify a copy of the Library, and, in your modifications, a -facility refers to a function or data to be supplied by an Application -that uses the facility (other than as an argument passed when the -facility is invoked), then you may convey a copy of the modified -version: - - a) under this License, provided that you make a good faith effort to - ensure that, in the event an Application does not supply the - function or data, the facility still operates, and performs - whatever part of its purpose remains meaningful, or - - b) under the GNU GPL, with none of the additional permissions of - this License applicable to that copy. - - 3. Object Code Incorporating Material from Library Header Files. - - The object code form of an Application may incorporate material from -a header file that is part of the Library. You may convey such object -code under terms of your choice, provided that, if the incorporated -material is not limited to numerical parameters, data structure -layouts and accessors, or small macros, inline functions and templates -(ten or fewer lines in length), you do both of the following: - - a) Give prominent notice with each copy of the object code that the - Library is used in it and that the Library and its use are - covered by this License. - - b) Accompany the object code with a copy of the GNU GPL and this license - document. - - 4. Combined Works. - - You may convey a Combined Work under terms of your choice that, -taken together, effectively do not restrict modification of the -portions of the Library contained in the Combined Work and reverse -engineering for debugging such modifications, if you also do each of -the following: - - a) Give prominent notice with each copy of the Combined Work that - the Library is used in it and that the Library and its use are - covered by this License. - - b) Accompany the Combined Work with a copy of the GNU GPL and this license - document. - - c) For a Combined Work that displays copyright notices during - execution, include the copyright notice for the Library among - these notices, as well as a reference directing the user to the - copies of the GNU GPL and this license document. - - d) Do one of the following: - - 0) Convey the Minimal Corresponding Source under the terms of this - License, and the Corresponding Application Code in a form - suitable for, and under terms that permit, the user to - recombine or relink the Application with a modified version of - the Linked Version to produce a modified Combined Work, in the - manner specified by section 6 of the GNU GPL for conveying - Corresponding Source. - - 1) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (a) uses at run time - a copy of the Library already present on the user's computer - system, and (b) will operate properly with a modified version - of the Library that is interface-compatible with the Linked - Version. - - e) Provide Installation Information, but only if you would otherwise - be required to provide such information under section 6 of the - GNU GPL, and only to the extent that such information is - necessary to install and execute a modified version of the - Combined Work produced by recombining or relinking the - Application with a modified version of the Linked Version. (If - you use option 4d0, the Installation Information must accompany - the Minimal Corresponding Source and Corresponding Application - Code. If you use option 4d1, you must provide the Installation - Information in the manner specified by section 6 of the GNU GPL - for conveying Corresponding Source.) - - 5. Combined Libraries. - - You may place library facilities that are a work based on the -Library side by side in a single library together with other library -facilities that are not Applications and are not covered by this -License, and convey such a combined library under terms of your -choice, if you do both of the following: - - a) Accompany the combined library with a copy of the same work based - on the Library, uncombined with any other library facilities, - conveyed under the terms of this License. - - b) Give prominent notice with the combined library that part of it - is a work based on the Library, and explaining where to find the - accompanying uncombined form of the same work. - - 6. Revised Versions of the GNU Lesser General Public License. - - The Free Software Foundation may publish revised and/or new versions -of the GNU Lesser General Public License from time to time. Such new -versions will be similar in spirit to the present version, but may -differ in detail to address new problems or concerns. - - Each version is given a distinguishing version number. If the -Library as you received it specifies that a certain numbered version -of the GNU Lesser General Public License "or any later version" -applies to it, you have the option of following the terms and -conditions either of that published version or of any later version -published by the Free Software Foundation. If the Library as you -received it does not specify a version number of the GNU Lesser -General Public License, you may choose any version of the GNU Lesser -General Public License ever published by the Free Software Foundation. - - If the Library as you received it specifies that a proxy can decide -whether future versions of the GNU Lesser General Public License shall -apply, that proxy's public statement of acceptance of any version is -permanent authorization for you to choose that version for the -Library. \ No newline at end of file diff --git a/library/smarty/INHERITANCE_RELEASE_NOTES.txt b/library/smarty/INHERITANCE_RELEASE_NOTES.txt deleted file mode 100644 --- a/library/smarty/INHERITANCE_RELEASE_NOTES.txt +++ /dev/null @@ -1,35 +0,0 @@ -In Smarty 3.1 template inheritance is a compile time process. All the extending of {block} tags -is done at compile time and the parent and child templates are compiled in a single compiled template. -{include} subtemplate could also {block} tags. Such subtemplate could not compiled by it's own because -it could be used in other context where the {block} extended with a different result. For that reasion -the compiled code of {include} subtemplates gets also merged in compiled inheritance template. - -Merging the code into a single compile template has some drawbacks. -1. You could not use variable file names in {include} Smarty would use the {include} of compilation time. -2. You could not use individual compile_id in {include} -3. Seperate caching of subtemplate was not possible -4. Any change of the template directory structure between calls was not necessarily seen. - -Starting with 3.1.15 some of the above conditions got checked and resulted in an exception. It turned out -that a couple of users did use some of above and now got exceptions. - -To resolve this starting with 3.1.16 there is a new configuration parameter $inheritance_merge_compiled_includes. -For most backward compatibility its default setting is true. -With this setting all {include} subtemplate will be merge into the compiled inheritance template, but the above cases -could be rejected by exception. - - -If $smarty->inheritance_merge_compiled_includes = false; {include} subtemplate will not be merged. -You must now manually merge all {include} subtemplate which do contain {block} tags. This is done by setting the "inline" option. -{include file='foo.bar' inline} - -1. In case of a variable file name like {include file=$foo inline} you must use the variable in a compile_id $smarty->compile_id = $foo; -2. If you use individual compile_id in {include file='foo.tpl' compile_id=$bar inline} it must be used in the - global compile_id as well $smarty->compile_id = $bar; -3. If call templates with different template_dir configurations and a parent could same named child template from different folders - you must make the folder name part of the compile_id. - - -In the upcomming major release Smarty 3.2 inheritance will no longer be a compile time process. -All restrictions will be then removed. - diff --git a/library/smarty/NEW_FEATURES.txt b/library/smarty/NEW_FEATURES.txt deleted file mode 100644 --- a/library/smarty/NEW_FEATURES.txt +++ /dev/null @@ -1,86 +0,0 @@ - - -This file contains a brief description of new features which have been added to Smarty 3.1 - -Smarty 3.1.22 - - Namespace support within templates - ================================== - Within templates you can now use namespace specifications on: - - Constants like foo\bar\FOO - - Class names like foo\bar\Baz::FOO, foo\bar\Baz::$foo, foo\bar\Baz::foo() - - PHP function names like foo\bar\baz() - - Security - ======== - - disable special $smarty variable - - The Smarty_Security class has the new property $disabled_special_smarty_vars. - It's an array which can be loaded with the $smarty special variable names like - 'template_object', 'template', 'current_dir' and others which will be disabled. - Note: That this security check is performed at compile time. - - - limit template nesting - - Property $max_template_nesting of Smarty_Security does set the maximum template nesting level. - The main template is level 1. The nesting level is checked at run time. When the maximum will be exceeded - an Exception will be thrown. The default setting is 0 which does disable this check. - - - trusted static methods - - The Smarty_Security class has the new property $trusted_static_methods to restrict access to static methods. - It's an nested array of trusted class and method names. - Format: - array ( - 'class_1' => array('method_1', 'method_2'), // allowed methods - 'class_2' => array(), // all methods of class allowed - ) - To disable access for all methods of all classes set $trusted_static_methods = null; - The default value is an empty array() which does enables all methods of all classes, but for backward compatibility - the setting of $static_classes will be checked. - Note: That this security check is performed at compile time. - - - trusted static properties - - The Smarty_Security class has the new property $trusted_static_properties to restrict access to static properties. - It's an nested array of trusted class and property names. - Format: - array ( - 'class_1' => array('prop_1', 'prop_2'), // allowed properties listed - 'class_2' => array(), // all properties of class allowed - } - To disable access for all properties of all classes set $trusted_static_properties = null; - The default value is an empty array() which does enables all properties of all classes, but for backward compatibility - the setting of $static_classes will be checked. - Note: That this security check is performed at compile time. - - - trusted constants . - The Smarty_Security class has the new property $trusted_constants to restrict access to constants. - It's an array of trusted constant names. - Format: - array ( - 'SMARTY_DIR' , // allowed constant - } - If the array is empty (default) the usage of constants can be controlled with the - Smarty_Security::$allow_constants property (default true) - - - - Compiled Templates - ================== - Smarty does now automatically detects a change of the $merge_compiled_includes and $escape_html - property and creates different compiled templates files depending on the setting. - - Same applies to config files and the $config_overwrite, $config_booleanize and - $config_read_hidden properties. - - Debugging - ========= - The layout of the debug window has been changed for better readability - - New class constants - Smarty::DEBUG_OFF - Smarty::DEBUG_ON - Smarty::DEBUG_INDIVIDUAL - have been introduced for setting the $debugging property. - - Smarty::DEBUG_INDIVIDUAL will create for each display() and fetch() call an individual gebug window. - - . - \ No newline at end of file diff --git a/library/smarty/README b/library/smarty/README deleted file mode 100644 --- a/library/smarty/README +++ /dev/null @@ -1,574 +0,0 @@ -Smarty 3.x - -Author: Monte Ohrt <monte at ohrt dot com > -Author: Uwe Tews - -AN INTRODUCTION TO SMARTY 3 - -NOTICE FOR 3.1 release: - -Please see the SMARTY_3.1_NOTES.txt file that comes with the distribution. - -NOTICE for 3.0.5 release: - -Smarty now follows the PHP error_reporting level by default. If PHP does not mask E_NOTICE and you try to access an unset template variable, you will now get an E_NOTICE warning. To revert to the old behavior: - -$smarty->error_reporting = E_ALL & ~E_NOTICE; - -NOTICE for 3.0 release: - -IMPORTANT: Some API adjustments have been made between the RC4 and 3.0 release. -We felt it is better to make these now instead of after a 3.0 release, then have to -immediately deprecate APIs in 3.1. Online documentation has been updated -to reflect these changes. Specifically: - ----- API CHANGES RC4 -> 3.0 ---- - -$smarty->register->* -$smarty->unregister->* -$smarty->utility->* -$samrty->cache->* - -Have all been changed to local method calls such as: - -$smarty->clearAllCache() -$smarty->registerFoo() -$smarty->unregisterFoo() -$smarty->testInstall() -etc. - -Registration of function, block, compiler, and modifier plugins have been -consolidated under two API calls: - -$smarty->registerPlugin(...) -$smarty->unregisterPlugin(...) - -Registration of pre, post, output and variable filters have been -consolidated under two API calls: - -$smarty->registerFilter(...) -$smarty->unregisterFilter(...) - -Please refer to the online documentation for all specific changes: - -http://www.smarty.net/documentation - ----- - -The Smarty 3 API has been refactored to a syntax geared -for consistency and modularity. The Smarty 2 API syntax is still supported, but -will throw a deprecation notice. You can disable the notices, but it is highly -recommended to adjust your syntax to Smarty 3, as the Smarty 2 syntax must run -through an extra rerouting wrapper. - -Basically, all Smarty methods now follow the "fooBarBaz" camel case syntax. Also, -all Smarty properties now have getters and setters. So for example, the property -$smarty->cache_dir can be set with $smarty->setCacheDir('foo/') and can be -retrieved with $smarty->getCacheDir(). - -Some of the Smarty 3 APIs have been revoked such as the "is*" methods that were -just duplicate functions of the now available "get*" methods. - -Here is a rundown of the Smarty 3 API: - -$smarty->fetch($template, $cache_id = null, $compile_id = null, $parent = null) -$smarty->display($template, $cache_id = null, $compile_id = null, $parent = null) -$smarty->isCached($template, $cache_id = null, $compile_id = null) -$smarty->createData($parent = null) -$smarty->createTemplate($template, $cache_id = null, $compile_id = null, $parent = null) -$smarty->enableSecurity() -$smarty->disableSecurity() -$smarty->setTemplateDir($template_dir) -$smarty->addTemplateDir($template_dir) -$smarty->templateExists($resource_name) -$smarty->loadPlugin($plugin_name, $check = true) -$smarty->loadFilter($type, $name) -$smarty->setExceptionHandler($handler) -$smarty->addPluginsDir($plugins_dir) -$smarty->getGlobal($varname = null) -$smarty->getRegisteredObject($name) -$smarty->getDebugTemplate() -$smarty->setDebugTemplate($tpl_name) -$smarty->assign($tpl_var, $value = null, $nocache = false) -$smarty->assignGlobal($varname, $value = null, $nocache = false) -$smarty->assignByRef($tpl_var, &$value, $nocache = false) -$smarty->append($tpl_var, $value = null, $merge = false, $nocache = false) -$smarty->appendByRef($tpl_var, &$value, $merge = false) -$smarty->clearAssign($tpl_var) -$smarty->clearAllAssign() -$smarty->configLoad($config_file, $sections = null) -$smarty->getVariable($variable, $_ptr = null, $search_parents = true, $error_enable = true) -$smarty->getConfigVariable($variable) -$smarty->getStreamVariable($variable) -$smarty->getConfigVars($varname = null) -$smarty->clearConfig($varname = null) -$smarty->getTemplateVars($varname = null, $_ptr = null, $search_parents = true) -$smarty->clearAllCache($exp_time = null, $type = null) -$smarty->clearCache($template_name, $cache_id = null, $compile_id = null, $exp_time = null, $type = null) - -$smarty->registerPlugin($type, $tag, $callback, $cacheable = true, $cache_attr = array()) - -$smarty->registerObject($object_name, $object_impl, $allowed = array(), $smarty_args = true, $block_methods = array()) - -$smarty->registerFilter($type, $function_name) -$smarty->registerResource($resource_type, $function_names) -$smarty->registerDefaultPluginHandler($function_name) -$smarty->registerDefaultTemplateHandler($function_name) - -$smarty->unregisterPlugin($type, $tag) -$smarty->unregisterObject($object_name) -$smarty->unregisterFilter($type, $function_name) -$smarty->unregisterResource($resource_type) - -$smarty->compileAllTemplates($extension = '.tpl', $force_compile = false, $time_limit = 0, $max_errors = null) -$smarty->clearCompiledTemplate($resource_name = null, $compile_id = null, $exp_time = null) -$smarty->testInstall() - -// then all the getters/setters, available for all properties. Here are a few: - -$caching = $smarty->getCaching(); // get $smarty->caching -$smarty->setCaching(true); // set $smarty->caching -$smarty->setDeprecationNotices(false); // set $smarty->deprecation_notices -$smarty->setCacheId($id); // set $smarty->cache_id -$debugging = $smarty->getDebugging(); // get $smarty->debugging - - -FILE STRUCTURE - -The Smarty 3 file structure is similar to Smarty 2: - -/libs/ - Smarty.class.php -/libs/sysplugins/ - internal.* -/libs/plugins/ - function.mailto.php - modifier.escape.php - ... - -A lot of Smarty 3 core functionality lies in the sysplugins directory; you do -not need to change any files here. The /libs/plugins/ folder is where Smarty -plugins are located. You can add your own here, or create a separate plugin -directory, just the same as Smarty 2. You will still need to create your own -/cache/, /templates/, /templates_c/, /configs/ folders. Be sure /cache/ and -/templates_c/ are writable. - -The typical way to use Smarty 3 should also look familiar: - -require('Smarty.class.php'); -$smarty = new Smarty; -$smarty->assign('foo','bar'); -$smarty->display('index.tpl'); - - -However, Smarty 3 works completely different on the inside. Smarty 3 is mostly -backward compatible with Smarty 2, except for the following items: - -*) Smarty 3 is PHP 5 only. It will not work with PHP 4. -*) The {php} tag is disabled by default. Enable with $smarty->allow_php_tag=true. -*) Delimiters surrounded by whitespace are no longer treated as Smarty tags. - Therefore, { foo } will not compile as a tag, you must use {foo}. This change - Makes Javascript/CSS easier to work with, eliminating the need for {literal}. - This can be disabled by setting $smarty->auto_literal = false; -*) The Smarty 3 API is a bit different. Many Smarty 2 API calls are deprecated - but still work. You will want to update your calls to Smarty 3 for maximum - efficiency. - - -There are many things that are new to Smarty 3. Here are the notable items: - -LEXER/PARSER -============ - -Smarty 3 now uses a lexing tokenizer for its parser/compiler. Basically, this -means Smarty has some syntax additions that make life easier such as in-template -math, shorter/intuitive function parameter options, infinite function recursion, -more accurate error handling, etc. - - -WHAT IS NEW IN SMARTY TEMPLATE SYNTAX -===================================== - -Smarty 3 allows expressions almost anywhere. Expressions can include PHP -functions as long as they are not disabled by the security policy, object -methods and properties, etc. The {math} plugin is no longer necessary but -is still supported for BC. - -Examples: -{$x+$y} will output the sum of x and y. -{$foo = strlen($bar)} function in assignment -{assign var=foo value= $x+$y} in attributes -{$foo = myfunct( ($x+$y)*3 )} as function parameter -{$foo[$x+3]} as array index - -Smarty tags can be used as values within other tags. -Example: {$foo={counter}+3} - -Smarty tags can also be used inside double quoted strings. -Example: {$foo="this is message {counter}"} - -You can define arrays within templates. -Examples: -{assign var=foo value=[1,2,3]} -{assign var=foo value=['y'=>'yellow','b'=>'blue']} -Arrays can be nested. -{assign var=foo value=[1,[9,8],3]} - -There is a new short syntax supported for assigning variables. -Example: {$foo=$bar+2} - -You can assign a value to a specific array element. If the variable exists but -is not an array, it is converted to an array before the new values are assigned. -Examples: -{$foo['bar']=1} -{$foo['bar']['blar']=1} - -You can append values to an array. If the variable exists but is not an array, -it is converted to an array before the new values are assigned. -Example: {$foo[]=1} - -You can use a PHP-like syntax for accessing array elements, as well as the -original "dot" notation. -Examples: -{$foo[1]} normal access -{$foo['bar']} -{$foo['bar'][1]} -{$foo[$x+$x]} index may contain any expression -{$foo[$bar[1]]} nested index -{$foo[section_name]} smarty section access, not array access! - -The original "dot" notation stays, and with improvements. -Examples: -{$foo.a.b.c} => $foo['a']['b']['c'] -{$foo.a.$b.c} => $foo['a'][$b]['c'] with variable index -{$foo.a.{$b+4}.c} => $foo['a'][$b+4]['c'] with expression as index -{$foo.a.{$b.c}} => $foo['a'][$b['c']] with nested index - -note that { and } are used to address ambiguties when nesting the dot syntax. - -Variable names themselves can be variable and contain expressions. -Examples: -$foo normal variable -$foo_{$bar} variable name containing other variable -$foo_{$x+$y} variable name containing expressions -$foo_{$bar}_buh_{$blar} variable name with multiple segments -{$foo_{$x}} will output the variable $foo_1 if $x has a value of 1. - -Object method chaining is implemented. -Example: {$object->method1($x)->method2($y)} - -{for} tag added for looping (replacement for {section} tag): -{for $x=0, $y=count($foo); $x<$y; $x++} .... {/for} -Any number of statements can be used separated by comma as the first -inital expression at {for}. - -{for $x = $start to $end step $step} ... {/for}is in the SVN now . -You can use also -{for $x = $start to $end} ... {/for} -In this case the step value will be automaticall 1 or -1 depending on the start and end values. -Instead of $start and $end you can use any valid expression. -Inside the loop the following special vars can be accessed: -$x@iteration = number of iteration -$x@total = total number of iterations -$x@first = true on first iteration -$x@last = true on last iteration - - -The Smarty 2 {section} syntax is still supported. - -New shorter {foreach} syntax to loop over an array. -Example: {foreach $myarray as $var}...{/foreach} - -Within the foreach loop, properties are access via: - -$var@key foreach $var array key -$var@iteration foreach current iteration count (1,2,3...) -$var@index foreach current index count (0,1,2...) -$var@total foreach $var array total -$var@first true on first iteration -$var@last true on last iteration - -The Smarty 2 {foreach} tag syntax is still supported. - -NOTE: {$bar[foo]} still indicates a variable inside of a {section} named foo. -If you want to access an array element with index foo, you must use quotes -such as {$bar['foo']}, or use the dot syntax {$bar.foo}. - -while block tag is now implemented: -{while $foo}...{/while} -{while $x lt 10}...{/while} - -Direct access to PHP functions: -Just as you can use PHP functions as modifiers directly, you can now access -PHP functions directly, provided they are permitted by security settings: -{time()} - -There is a new {function}...{/function} block tag to implement a template function. -This enables reuse of code sequences like a plugin function. It can call itself recursively. -Template function must be called with the new {call name=foo...} tag. - -Example: - -Template file: -{function name=menu level=0} - <ul class="level{$level}"> - {foreach $data as $entry} - {if is_array($entry)} - <li>{$entry@key}</li> - {call name=menu data=$entry level=$level+1} - {else} - <li>{$entry}</li> - {/if} - {/foreach} - </ul> -{/function} - -{$menu = ['item1','item2','item3' => ['item3-1','item3-2','item3-3' => - ['item3-3-1','item3-3-2']],'item4']} - -{call name=menu data=$menu} - - -Generated output: - * item1 - * item2 - * item3 - o item3-1 - o item3-2 - o item3-3 - + item3-3-1 - + item3-3-2 - * item4 - -The function tag itself must have the "name" attribute. This name is the tag -name when calling the function. The function tag may have any number of -additional attributes. These will be default settings for local variables. - -New {nocache} block function: -{nocache}...{/nocache} will declare a section of the template to be non-cached -when template caching is enabled. - -New nocache attribute: -You can declare variable/function output as non-cached with the nocache attribute. -Examples: - -{$foo nocache=true} -{$foo nocache} /* same */ - -{foo bar="baz" nocache=true} -{foo bar="baz" nocache} /* same */ - -{time() nocache=true} -{time() nocache} /* same */ - -Or you can also assign the variable in your script as nocache: -$smarty->assign('foo',$something,true); // third param is nocache setting -{$foo} /* non-cached */ - -$smarty.current_dir returns the directory name of the current template. - -You can use strings directly as templates with the "string" resource type. -Examples: -$smarty->display('string:This is my template, {$foo}!'); // php -{include file="string:This is my template, {$foo}!"} // template - - - -VARIABLE SCOPE / VARIABLE STORAGE -================================= - -In Smarty 2, all assigned variables were stored within the Smarty object. -Therefore, all variables assigned in PHP were accessible by all subsequent -fetch and display template calls. - -In Smarty 3, we have the choice to assign variables to the main Smarty object, -to user-created data objects, and to user-created template objects. -These objects can be chained. The object at the end of a chain can access all -variables belonging to that template and all variables within the parent objects. -The Smarty object can only be the root of a chain, but a chain can be isolated -from the Smarty object. - -All known Smarty assignment interfaces will work on the data and template objects. - -Besides the above mentioned objects, there is also a special storage area for -global variables. - -A Smarty data object can be created as follows: -$data = $smarty->createData(); // create root data object -$data->assign('foo','bar'); // assign variables as usual -$data->config_load('my.conf'); // load config file - -$data= $smarty->createData($smarty); // create data object having a parent link to -the Smarty object - -$data2= $smarty->createData($data); // create data object having a parent link to -the $data data object - -A template object can be created by using the createTemplate method. It has the -same parameter assignments as the fetch() or display() method. -Function definition: -function createTemplate($template, $cache_id = null, $compile_id = null, $parent = null) - -The first parameter can be a template name, a smarty object or a data object. - -Examples: -$tpl = $smarty->createTemplate('mytpl.tpl'); // create template object not linked to any parent -$tpl->assign('foo','bar'); // directly assign variables -$tpl->config_load('my.conf'); // load config file - -$tpl = $smarty->createTemplate('mytpl.tpl',$smarty); // create template having a parent link to the Smarty object -$tpl = $smarty->createTemplate('mytpl.tpl',$data); // create template having a parent link to the $data object - -The standard fetch() and display() methods will implicitly create a template object. -If the $parent parameter is not specified in these method calls, the template object -is will link back to the Smarty object as it's parent. - -If a template is called by an {include...} tag from another template, the -subtemplate links back to the calling template as it's parent. - -All variables assigned locally or from a parent template are accessible. If the -template creates or modifies a variable by using the {assign var=foo...} or -{$foo=...} tags, these new values are only known locally (local scope). When the -template exits, none of the new variables or modifications can be seen in the -parent template(s). This is same behavior as in Smarty 2. - -With Smarty 3, we can assign variables with a scope attribute which allows the -availablility of these new variables or modifications globally (ie in the parent -templates.) - -Possible scopes are local, parent, root and global. -Examples: -{assign var=foo value='bar'} // no scope is specified, the default 'local' -{$foo='bar'} // same, local scope -{assign var=foo value='bar' scope='local'} // same, local scope - -{assign var=foo value='bar' scope='parent'} // Values will be available to the parent object -{$foo='bar' scope='parent'} // (normally the calling template) - -{assign var=foo value='bar' scope='root'} // Values will be exported up to the root object, so they can -{$foo='bar' scope='root'} // be seen from all templates using the same root. - -{assign var=foo value='bar' scope='global'} // Values will be exported to global variable storage, -{$foo='bar' scope='global'} // they are available to any and all templates. - - -The scope attribute can also be attached to the {include...} tag. In this case, -the specified scope will be the default scope for all assignments within the -included template. - - -PLUGINS -======= - -Smarty3 are following the same coding rules as in Smarty2. -The only difference is that the template object is passed as additional third parameter. - -smarty_plugintype_name (array $params, object $smarty, object $template) - -The Smarty 2 plugins are still compatible as long as they do not make use of specific Smarty2 internals. - - -TEMPLATE INHERITANCE: -===================== - -With template inheritance you can define blocks, which are areas that can be -overriden by child templates, so your templates could look like this: - -parent.tpl: -<html> - <head> - <title>{block name='title'}My site name{/block}</title> - </head> - <body> - <h1>{block name='page-title'}Default page title{/block}</h1> - <div id="content"> - {block name='content'} - Default content - {/block} - </div> - </body> -</html> - -child.tpl: -{extends file='parent.tpl'} -{block name='title'} -Child title -{/block} - -grandchild.tpl: -{extends file='child.tpl'} -{block name='title'}Home - {$smarty.block.parent}{/block} -{block name='page-title'}My home{/block} -{block name='content'} - {foreach $images as $img} - <img src="{$img.url}" alt="{$img.description}" /> - {/foreach} -{/block} - -We redefined all the blocks here, however in the title block we used {$smarty.block.parent}, -which tells Smarty to insert the default content from the parent template in its place. -The content block was overriden to display the image files, and page-title has also be -overriden to display a completely different title. - -If we render grandchild.tpl we will get this: -<html> - <head> - <title>Home - Child title</title> - </head> - <body> - <h1>My home</h1> - <div id="content"> - <img src="/example.jpg" alt="image" /> - <img src="/example2.jpg" alt="image" /> - <img src="/example3.jpg" alt="image" /> - </div> - </body> -</html> - -NOTE: In the child templates everything outside the {extends} or {block} tag sections -is ignored. - -The inheritance tree can be as big as you want (meaning you can extend a file that -extends another one that extends another one and so on..), but be aware that all files -have to be checked for modifications at runtime so the more inheritance the more overhead you add. - -Instead of defining the parent/child relationships with the {extends} tag in the child template you -can use the resource as follow: - -$smarty->display('extends:parent.tpl|child.tpl|grandchild.tpl'); - -Child {block} tags may optionally have a append or prepend attribute. In this case the parent block content -is appended or prepended to the child block content. - -{block name='title' append} My title {/block} - - -PHP STREAMS: -============ - -(see online documentation) - -VARIBLE FILTERS: -================ - -(see online documentation) - - -STATIC CLASS ACCESS AND NAMESPACE SUPPORT -========================================= - -You can register a class with optional namespace for the use in the template like: - -$smarty->register->templateClass('foo','name\name2\myclass'); - -In the template you can use it like this: -{foo::method()} etc. - - -======================= - -Please look through it and send any questions/suggestions/etc to the forums. - -http://www.phpinsider.com/smarty-forum/viewtopic.php?t=14168 - -Monte and Uwe diff --git a/library/smarty/README.md b/library/smarty/README.md deleted file mode 100644 --- a/library/smarty/README.md +++ /dev/null @@ -1,52 +0,0 @@ -#Smarty 3 template engine -##Distribution repository - -*Read the NEW_FEATURES file for recent extensions to Smarty 3.1 functionality* - -Smarty versions 3.1.11 or later are now on github and can be installed with Composer. - - -The "smarty/smarty" package will start at libs/.... subfolder. - -To get the latest stable version of Smarty 3.1 use - - "require": { - "smarty/smarty": "~3.1" - } - -in your composer.json file. - - To get the trunk version use - - "require": { - "smarty/smarty": "~3.1@dev" - } - -For a specific version use something like - - "require": { - "smarty/smarty": "3.1.19" - } - -PHPUnit test can be installed by corresponding composer entries like - - "require": { - "smarty/smarty-phpunit": "3.1.19" - } - -Similar applies for the lexer/parser generator - - "require": { - "smarty/smarty-lexer": "3.1.19" - } - -Or you could use - - "require": { - "smarty/smarty-dev": "3.1.19" - } - -Which is a wrapper to install all 3 packages - - -Composer can also be used for Smarty2 versions 2.6.24 to 2.6.28 diff --git a/library/smarty/SMARTY_2_BC_NOTES.txt b/library/smarty/SMARTY_2_BC_NOTES.txt deleted file mode 100644 --- a/library/smarty/SMARTY_2_BC_NOTES.txt +++ /dev/null @@ -1,109 +0,0 @@ -= Known incompatibilities with Smarty 2 = - -== Syntax == - -Smarty 3 API has a new syntax. Much of the Smarty 2 syntax is supported -by a wrapper but deprecated. See the README that comes with Smarty 3 for more -information. - -The {$array|@mod} syntax has always been a bit confusing, where an "@" is required -to apply a modifier to an array instead of the individual elements. Normally you -always want the modifier to apply to the variable regardless of its type. In Smarty 3, -{$array|mod} and {$array|@mod} behave identical. It is safe to drop the "@" and the -modifier will still apply to the array. If you really want the modifier to apply to -each array element, you must loop the array in-template, or use a custom modifier that -supports array iteration. Most smarty functions already escape values where necessary -such as {html_options} - -== PHP Version == -Smarty 3 is PHP 5 only. It will not work with PHP 4. - -== {php} Tag == -The {php} tag is disabled by default. The use of {php} tags is -deprecated. It can be enabled with $smarty->allow_php_tag=true. - -But if you scatter PHP code which belongs together into several -{php} tags it may not work any longer. - -== Delimiters and whitespace == -Delimiters surrounded by whitespace are no longer treated as Smarty tags. -Therefore, { foo } will not compile as a tag, you must use {foo}. This change -Makes Javascript/CSS easier to work with, eliminating the need for {literal}. -This can be disabled by setting $smarty->auto_literal = false; - -== Unquoted Strings == -Smarty 2 was a bit more forgiving (and ambiguous) when it comes to unquoted strings -in parameters. Smarty3 is more restrictive. You can still pass strings without quotes -so long as they contain no special characters. (anything outside of A-Za-z0-9_) - -For example filename strings must be quoted -<source lang="smarty"> -{include file='path/foo.tpl'} -</source> - -== Extending the Smarty class == -Smarty 3 makes use of the __construct method for initialization. If you are extending -the Smarty class, its constructor is not called implicitly if the your child class defines -its own constructor. In order to run Smarty's constructor, a call to parent::__construct() -within your child constructor is required. - -<source lang="php"> -class MySmarty extends Smarty { - function __construct() { - parent::__construct(); - - // your initialization code goes here - - } -} -</source> - -== Autoloader == -Smarty 3 does register its own autoloader with spl_autoload_register. If your code has -an existing __autoload function then this function must be explicitly registered on -the __autoload stack. See http://us3.php.net/manual/en/function.spl-autoload-register.php -for further details. - -== Plugin Filenames == -Smarty 3 optionally supports the PHP spl_autoloader. The autoloader requires filenames -to be lower case. Because of this, Smarty plugin file names must also be lowercase. -In Smarty 2, mixed case file names did work. - -== Scope of Special Smarty Variables == -In Smarty 2 the special Smarty variables $smarty.section... and $smarty.foreach... -had global scope. If you had loops with the same name in subtemplates you could accidentally -overwrite values of parent template. - -In Smarty 3 these special Smarty variable have only local scope in the template which -is defining the loop. If you need their value in a subtemplate you have to pass them -as parameter. -<source lang="smarty"> -{include file='path/foo.tpl' index=$smarty.section.foo.index} -</source> - -== SMARTY_RESOURCE_CHAR_SET == -Smarty 3 sets the constant SMARTY_RESOURCE_CHAR_SET to utf-8 as default template charset. -This is now used also on modifiers like escape as default charset. If your templates use -other charsets make sure that you define the constant accordingly. Otherwise you may not -get any output. - -== newline at {if} tags == -A \n was added to the compiled code of the {if},{else},{elseif},{/if} tags to get output of newlines as expected by the template source. -If one of the {if} tags is at the line end you will now get a newline in the HTML output. - -== trigger_error() == -The API function trigger_error() has been removed because it did just map to PHP trigger_error. -However it's still included in the Smarty2 API wrapper. - -== Smarty constants == -The constants -SMARTY_PHP_PASSTHRU -SMARTY_PHP_QUOTE -SMARTY_PHP_REMOVE -SMARTY_PHP_ALLOW -have been replaced with class constants -Smarty::PHP_PASSTHRU -Smarty::PHP_QUOTE -Smarty::PHP_REMOVE -Smarty::PHP_ALLOW - diff --git a/library/smarty/SMARTY_3.0_BC_NOTES.txt b/library/smarty/SMARTY_3.0_BC_NOTES.txt deleted file mode 100644 --- a/library/smarty/SMARTY_3.0_BC_NOTES.txt +++ /dev/null @@ -1,24 +0,0 @@ -== Smarty2 backward compatibility == -All Smarty2 specific API functions and deprecated functionallity has been moved -to the SmartyBC class. - -== {php} Tag == -The {php} tag is no longer available in the standard Smarty calls. -The use of {php} tags is deprecated and only available in the SmartyBC class. - -== {include_php} Tag == -The {include_php} tag is no longer available in the standard Smarty calls. -The use of {include_php} tags is deprecated and only available in the SmartyBC class. - -== php template resource == -The support of the php template resource is removed. - -== $cache_dir, $compile_dir, $config_dir, $template_dir access == -The mentioned properties can't be accessed directly any longer. You must use -corresponding getter/setters like addConfigDir(), setConfigDir(), getConfigDir() - -== obsolete Smarty class properties == -The following no longer used properties are removed: -$allow_php_tag -$allow_php_template -$deprecation_notices \ No newline at end of file diff --git a/library/smarty/SMARTY_3.1_NOTES.txt b/library/smarty/SMARTY_3.1_NOTES.txt deleted file mode 100644 --- a/library/smarty/SMARTY_3.1_NOTES.txt +++ /dev/null @@ -1,306 +0,0 @@ -Smarty 3.1 Notes -================ - -Smarty 3.1 is a departure from 2.0 compatibility. Most notably, all -backward compatibility has been moved to a separate class file named -SmartyBC.class.php. If you require compatibility with 2.0, you will -need to use this class. - -Some differences from 3.0 are also present. 3.1 begins the journey of -requiring setters/getters for property access. So far this is only -implemented on the five directory properties: template_dir, -plugins_dir, configs_dir, compile_dir and cache_dir. These properties -are now protected, it is required to use the setters/getters instead. -That said, direct property access will still work, however slightly -slower since they will now fall through __set() and __get() and in -turn passed through the setter/getter methods. 3.2 will exhibit a full -list of setter/getter methods for all (currently) public properties, -so code-completion in your IDE will work as expected. - -There is absolutely no PHP allowed in templates any more. All -deprecated features of Smarty 2.0 are gone. Again, use the SmartyBC -class if you need any backward compatibility. - -Internal Changes - - Full UTF-8 Compatibility - -The plugins shipped with Smarty 3.1 have been rewritten to fully -support UTF-8 strings if Multibyte String is available. Without -MBString UTF-8 cannot be handled properly. For those rare cases where -templates themselves have to juggle encodings, the new modifiers -to_charset and from_charset may come in handy. - - Plugin API and Performance - -All Plugins (modifiers, functions, blocks, resources, -default_template_handlers, etc) are now receiving the -Smarty_Internal_Template instance, where they were supplied with the -Smarty instance in Smarty 3.0. *. As The Smarty_Internal_Template -mimics the behavior of Smarty, this API simplification should not -require any changes to custom plugins. - -The plugins shipped with Smarty 3.1 have been rewritten for better -performance. Most notably {html_select_date} and {html_select_time} -have been improved vastly. Performance aside, plugins have also been -reviewed and generalized in their API. {html_select_date} and -{html_select_time} now share almost all available options. - -The escape modifier now knows the $double_encode option, which will -prevent entities from being encoded again. - -The capitalize modifier now know the $lc_rest option, which makes sure -all letters following a captial letter are lower-cased. - -The count_sentences modifier now accepts (.?!) as -legitimate endings of a sentence - previously only (.) was -accepted - -The new unescape modifier is there to reverse the effects of the -escape modifier. This applies to the escape formats html, htmlall and -entity. - - default_template_handler_func - -The invocation of $smarty->$default_template_handler_func had to be -altered. Instead of a Smarty_Internal_Template, the fifth argument is -now provided with the Smarty instance. New footprint: - - -/** - * Default Template Handler - * - * called when Smarty's file: resource is unable to load a requested file - * - * @param string $type resource type (e.g. "file", "string", "eval", "resource") - * @param string $name resource name (e.g. "foo/bar.tpl") - * @param string &$content template's content - * @param integer &$modified template's modification time - * @param Smarty $smarty Smarty instance - * @return string|boolean path to file or boolean true if $content and $modified - * have been filled, boolean false if no default template - * could be loaded - */ -function default_template_handler_func($type, $name, &$content, &$modified, Smarty $smarty) { - if (false) { - // return corrected filepath - return "/tmp/some/foobar.tpl"; - } elseif (false) { - // return a template directly - $content = "the template source"; - $modified = time(); - return true; - } else { - // tell smarty that we failed - return false; - } -} - - Stuff done to the compiler - -Many performance improvements have happened internally. One notable -improvement is that all compiled templates are now handled as PHP -functions. This speeds up repeated templates tremendously, as each one -calls an (in-memory) PHP function instead of performing another file -include/scan. - -New Features - - Template syntax - - {block}..{/block} - -The {block} tag has a new hide option flag. It does suppress the block -content if no corresponding child block exists. -EXAMPLE: -parent.tpl -{block name=body hide} child content "{$smarty.block.child}" was -inserted {block} -In the above example the whole block will be suppressed if no child -block "body" is existing. - - {setfilter}..{/setfilter} - -The new {setfilter} block tag allows the definition of filters which -run on variable output. -SYNTAX: -{setfilter filter1|filter2|filter3....} -Smarty3 will lookup up matching filters in the following search order: -1. varibale filter plugin in plugins_dir. -2. a valid modifier. A modifier specification will also accept -additional parameter like filter2:'foo' -3. a PHP function -{/setfilter} will turn previous filter setting off again. -{setfilter} tags can be nested. -EXAMPLE: -{setfilter filter1} - {$foo} - {setfilter filter2} - {$bar} - {/setfilter} - {$buh} -{/setfilter} -{$blar} -In the above example filter1 will run on the output of $foo, filter2 -on $bar, filter1 again on $buh and no filter on $blar. -NOTES: -- {$foo nofilter} will suppress the filters -- These filters will run in addition to filters defined by -registerFilter('variable',...), autoLoadFilter('variable',...) and -defined default modifier. -- {setfilter} will effect only the current template, not included -subtemplates. - - Resource API - -Smarty 3.1 features a new approach to resource management. The -Smarty_Resource API allows simple, yet powerful integration of custom -resources for templates and configuration files. It offers simple -functions for loading data from a custom resource (e.g. database) as -well as define new template types adhering to the special -non-compiling (e,g, plain php) and non-compile-caching (e.g. eval: -resource type) resources. - -See demo/plugins/resource.mysql.php for an example custom database -resource. - -Note that old-fashioned registration of callbacks for resource -management has been deprecated but is still possible with SmartyBC. - - CacheResource API - -In line with the Resource API, the CacheResource API offers a more -comfortable handling of output-cache data. With the -Smarty_CacheResource_Custom accessing databases is made simple. With -the introduction of Smarty_CacheResource_KeyValueStore the -implementation of resources like memcache or APC became a no-brainer; -simple hash-based storage systems are now supporting hierarchical -output-caches. - -See demo/plugins/cacheresource.mysql.php for an example custom -database CacheResource. -See demo/plugins/cacheresource.memcache.php for an example custom -memcache CacheResource using the KeyValueStore helper. - -Note that old-fashioned registration of $cache_handler is not possible -anymore. As the functionality had not been ported to Smarty 3.0.x -properly, it has been dropped from 3.1 completely. - -Locking facilities have been implemented to avoid concurrent cache -generation. Enable cache locking by setting -$smarty->cache_locking = true; - - Relative Paths in Templates (File-Resource) - -As of Smarty 3.1 {include file="../foo.tpl"} and {include -file="./foo.tpl"} will resolve relative to the template they're in. -Relative paths are available with {include file="..."} and -{extends file="..."}. As $smarty->fetch('../foo.tpl') and -$smarty->fetch('./foo.tpl') cannot be relative to a template, an -exception is thrown. - - Addressing a specific $template_dir - -Smarty 3.1 introduces the $template_dir index notation. -$smarty->fetch('[foo]bar.tpl') and {include file="[foo]bar.tpl"} -require the template bar.tpl to be loaded from $template_dir['foo']; -Smarty::setTemplateDir() and Smarty::addTemplateDir() offer ways to -define indexes along with the actual directories. - - Mixing Resources in extends-Resource - -Taking the php extends: template resource one step further, it is now -possible to mix resources within an extends: call like -$smarty->fetch("extends:file:foo.tpl|db:bar.tpl"); - -To make eval: and string: resources available to the inheritance -chain, eval:base64:TPL_STRING and eval:urlencode:TPL_STRING have been -introduced. Supplying the base64 or urlencode flags will trigger -decoding the TPL_STRING in with either base64_decode() or urldecode(). - - extends-Resource in template inheritance - -Template based inheritance may now inherit from php's extends: -resource like {extends file="extends:foo.tpl|db:bar.tpl"}. - - New Smarty property escape_html - -$smarty->escape_html = true will autoescape all template variable -output by calling htmlspecialchars({$output}, ENT_QUOTES, -SMARTY_RESOURCE_CHAR_SET). -NOTE: -This is a compile time option. If you change the setting you must make -sure that the templates get recompiled. - - New option at Smarty property compile_check - -The automatic recompilation of modified templates can now be -controlled by the following settings: -$smarty->compile_check = COMPILECHECK_OFF (false) - template files -will not be checked -$smarty->compile_check = COMPILECHECK_ON (true) - template files will -always be checked -$smarty->compile_check = COMPILECHECK_CACHEMISS - template files will -be checked if caching is enabled and there is no existing cache file -or it has expired - - Automatic recompilation on Smarty version change - -Templates will now be automatically recompiled on Smarty version -changes to avoide incompatibillities in the compiled code. Compiled -template checked against the current setting of the SMARTY_VERSION -constant. - - default_config_handler_func() - -Analogous to the default_template_handler_func() -default_config_handler_func() has been introduced. - - default_plugin_handler_func() - -An optional default_plugin_handler_func() can be defined which gets called -by the compiler on tags which can't be resolved internally or by plugins. -The default_plugin_handler() can map tags to plugins on the fly. - -New getters/setters - -The following setters/getters will be part of the official -documentation, and will be strongly recommended. Direct property -access will still work for the foreseeable future... it will be -transparently routed through the setters/getters, and consequently a -bit slower. - -array|string getTemplateDir( [string $index] ) -replaces $smarty->template_dir; and $smarty->template_dir[$index]; -Smarty setTemplateDir( array|string $path ) -replaces $smarty->template_dir = "foo"; and $smarty->template_dir = -array("foo", "bar"); -Smarty addTemplateDir( array|string $path, [string $index]) -replaces $smarty->template_dir[] = "bar"; and -$smarty->template_dir[$index] = "bar"; - -array|string getConfigDir( [string $index] ) -replaces $smarty->config_dir; and $smarty->config_dir[$index]; -Smarty setConfigDir( array|string $path ) -replaces $smarty->config_dir = "foo"; and $smarty->config_dir = -array("foo", "bar"); -Smarty addConfigDir( array|string $path, [string $index]) -replaces $smarty->config_dir[] = "bar"; and -$smarty->config_dir[$index] = "bar"; - -array getPluginsDir() -replaces $smarty->plugins_dir; -Smarty setPluginsDir( array|string $path ) -replaces $smarty->plugins_dir = "foo"; -Smarty addPluginsDir( array|string $path ) -replaces $smarty->plugins_dir[] = "bar"; - -string getCompileDir() -replaces $smarty->compile_dir; -Smarty setCompileDir( string $path ) -replaces $smarty->compile_dir = "foo"; - -string getCacheDir() -replaces $smarty->cache_dir; -Smarty setCacheDir( string $path ) -replaces $smarty->cache_dir; diff --git a/library/smarty/change_log.txt b/library/smarty/change_log.txt deleted file mode 100644 --- a/library/smarty/change_log.txt +++ /dev/null @@ -1,2649 +0,0 @@ - ===== 3.1.27===== (18.06.2015) -18.06.2015 - - bugfix another update on file path normalization failed on path containing something like "/.foo/" https://github.com/smarty-php/smarty/issues/56 - - ===== 3.1.26===== (18.06.2015) -18.06.2015 - - bugfix file path normalization failed on path containing something like "/.foo/" https://github.com/smarty-php/smarty/issues/56 - -17.06.2015 - - bugfix calling a plugin with nocache option but no other attributes like {foo nocache} caused call to undefined function https://github.com/smarty-php/smarty/issues/55 - - ===== 3.1.25===== (15.06.2015) - 15.06.2015 - - optimization of smarty_cachereource_keyvaluestore.php code - - 14.06.2015 - - bugfix a relative sub template path could fail if template_dir path did contain /../ https://github.com/smarty-php/smarty/issues/50 - - optimization rework of path normalization - - bugfix an output tag with variable, modifier followed by an operator like {$foo|modifier+1} did fail https://github.com/smarty-php/smarty/issues/53 - - 13.06.2015 - - bugfix a custom cache resource using smarty_cachereource_keyvaluestore.php did fail if php.ini mbstring.func_overload = 2 (forum topic 25568) - - 11.06.2015 - - bugfix the lexer could hang on very large quoted strings (forum topic 25570) - - 08.06.2015 - - bugfix using {$foo} as array index like $bar.{$foo} or in double quoted string like "some {$foo} thing" failed https://github.com/smarty-php/smarty/issues/49 - - 04.06.2015 - - bugfix possible error message on unset() while compiling {block} tags https://github.com/smarty-php/smarty/issues/46 - - 01.06.2015 - - bugfix <?xml ... ?> including template variables broken since 3.1.22 https://github.com/smarty-php/smarty/issues/47 - - 27.05.2015 - - bugfix {include} with variable file name must not create by default individual cache file (since 3.1.22) https://github.com/smarty-php/smarty/issues/43 - - 24.05.2015 - - bugfix if condition string 'neq' broken due to a typo https://github.com/smarty-php/smarty/issues/42 - - ===== 3.1.24===== (23.05.2015) - 23.05.2015 - - improvement on php_handling to allow very large PHP sections, better error handling - - improvement allow extreme large comment sections (forum 25538) - - 21.05.2015 - - bugfix broken PHP 5.2 compatibility when compiling <?php tags https://github.com/smarty-php/smarty/issues/40 - - bugfix named {foreach} comparison like $smarty.foreach.foobar.index > 1 did compile into wrong code https://github.com/smarty-php/smarty/issues/41 - - 19.05.2015 - - bugfix compiler did overwrite existing variable value when setting the nocache attribute https://github.com/smarty-php/smarty/issues/39 - - bugfix output filter trimwhitespace could run into the pcre.backtrack_limit on large output (code.google issue 220) - - bugfix compiler could run into the pcre.backtrack_limit on larger comment or {php} tag sections (forum 25538) - - 18.05.2015 - - improvement introduce shortcuts in lexer/parser rules for most frequent terms for higher - compilation speed - - 16.05.2015 - - bugfix {php}{/php} did work just for single lines https://github.com/smarty-php/smarty/issues/33 - - improvement remove not needed ?><?php transitions from compiled code - - improvement reduce number of lexer tokens on operators and if conditions - - improvement higher compilation speed by modified lexer/parser generator at "smarty/smarty-lexer" - - 13.05.2015 - - improvement remove not needed ?><?php transitions from compiled code - - improvement of debugging: - - use fresh Smarty object to display the debug console because of possible problems when the Smarty - was extended or Smarty properties had been modified in the class source - - display Smarty version number - - Truncate lenght of Origin display and extend strin value display to 80 character - - bugfix in Smarty_Security 'nl2br' should be a trusted modifier, not PHP function (code.google issue 223) - - 12.05.2015 - - bugfix {$smarty.constant.TEST} did fail on undefined constant https://github.com/smarty-php/smarty/issues/28 - - bugfix access to undefined config variable like {#undef#} did fail https://github.com/smarty-php/smarty/issues/29 - - bugfix in nested {foreach} saved item attributes got overwritten https://github.com/smarty-php/smarty/issues/33 - - ===== 3.1.23 ===== (12.05.2015) - 12.05.2015 - - bugfix of smaller performance issue introduce in 3.1.22 when caching is enabled - - bugfix missig entry for smarty-temmplate-config in autoloader - - ===== 3.1.22 ===== tag was deleted because 3.1.22 did fail caused by the missing entry for smarty-temmplate-config in autoloader - 10.05.2015 - - bugfix custom cache resource did not observe compile_id and cache_id when $cache_locking == true - - bugfix cache lock was not handled correctly after timeout when $cache_locking == true - - improvement added constants for $debugging - - 07.05.2015 - - improvement of the debugging console. Read NEW_FEATURES.txt - - optimization of resource class loading - - 06.05.2015 - - bugfix in 3.1.22-dev cache resource must not be loaded for subtemplates - - bugfix/improvement in 3.1.22-dev cache locking did not work as expected - - 05.05.2015 - - optimization on cache update when main template is modified - - optimization move <?php ?> handling from parser to new compiler module - - 05.05.2015 - - bugfix code could be messed up when {tags} are used in multiple attributes https://github.com/smarty-php/smarty/issues/23 - - 04.05.2015 - - bugfix Smarty_Resource::parseResourceName incompatible with Google AppEngine (https://github.com/smarty-php/smarty/issues/22) - - improvement use is_file() checks to avoid errors suppressed by @ which could still cause problems (https://github.com/smarty-php/smarty/issues/24) - - 28.04.2015 - - bugfix plugins of merged subtemplates not loaded in 3.1.22-dev (forum topic 25508) 2nd fix - - 28.04.2015 - - bugfix plugins of merged subtemplates not loaded in 3.1.22-dev (forum topic 25508) - - 23.04.2015 - - bugfix a nocache template variable used as parameter at {insert} was by mistake cached - - 20.04.2015 - - bugfix at a template function containing nocache code a parmeter could overwrite a template variable of same name - - 27.03.2015 - - bugfix Smarty_Security->allow_constants=false; did also disable true, false and null (change of 16.03.2015) - - improvement added a whitelist for trusted constants to security Smarty_Security::$trusted_constants (forum topic 25471) - - 20.03.2015 - - bugfix make sure that function properties get saved only in compiled files containing the fuction definition {forum topic 25452} - - bugfix correct update of global variable values on exit of template functions. (reported under Smarty Developers) - - 16.03.2015 - - bugfix problems with {function}{/function} and {call} tags in different subtemplate cache files {forum topic 25452} - - bugfix Smarty_Security->allow_constants=false; did not disallow direct usage of defined constants like {SMARTY_DIR} {forum topic 25457} - - bugfix {block}{/block} tags did not work inside double quoted strings https://github.com/smarty-php/smarty/issues/18 - - - 15.03.2015 - - bugfix $smarty->compile_check must be restored before rendering of a just updated cache file {forum 25452} - - 14.03.2015 - - bugfix {nocache} {/nocache} tags corrupted code when used within a nocache section caused by a nocache template variable. - - - bugfix template functions defined with {function} in an included subtemplate could not be called in nocache - mode with {call... nocache} if the subtemplate had it's own cache file {forum 25452} - - 10.03.2015 - - bugfix {include ... nocache} whith variable file or compile_id attribute was not executed in nocache mode. - - 12.02.2015 - - bugfix multiple Smarty::fetch() of same template when $smarty->merge_compiled_includes = true; could cause function already defined error - - 11.02.2015 - - bugfix recursive {includes} did create E_NOTICE message when $smarty->merge_compiled_includes = true; (github issue #16) - - 22.01.2015 - - new feature security can now control access to static methods and properties - see also NEW_FEATURES.txt - - 21.01.2015 - - bugfix clearCompiledTemplates(), clearAll() and clear() could try to delete whole drive at wrong path permissions because realpath() fail (forum 25397) - - bugfix 'self::' and 'parent::' was interpreted in template syntax as static class - - 04.01.2015 - - push last weeks changes to github - - - different optimizations - - improvement automatically create different versions of compiled templates and config files depending - on property settings. - - optimization restructure template processing by moving code into classes it better belongs to - - optimization restructure config file processing - - 31.12.2014 - - bugfix use function_exists('mb_get_info') for setting Smarty::$_MBSTRING. - Function mb_split could be overloaded depending on php.ini mbstring.func_overload - - - 29.12.2014 - - new feature security can now limit the template nesting level by property $max_template_nesting - see also NEW_FEATURES.txt (forum 25370) - - 29.12.2014 - - new feature security can now disable special $smarty variables listed in property $disabled_special_smarty_vars - see also NEW_FEATURES.txt (forum 25370) - - 27.12.2014 - - bugfix clear internal _is_file_cache when plugins_dir was modified - - 13.12.2014 - - improvement optimization of lexer and parser resulting in a up to 30% higher compiling speed - - 11.12.2014 - - bugfix resolve parser ambiguity between constant print tag {CONST} and other smarty tags after change of 09.12.2014 - - 09.12.2014 - - bugfix variables $null, $true and $false did not work after the change of 12.11.2014 (forum 25342) - - bugfix call of template function by a variable name did not work after latest changes (forum 25342) - - 23.11.2014 - - bugfix a plugin with attached modifier could fail if the tag was immediately followed by another Smarty tag (since 3.1.21) (forum 25326) - - 13.11.2014 - - improvement move autoload code into Autoloader.php. Use Composer autoloader when possible - - 12.11.2014 - - new feature added support of namespaces to template code - - 08.11.2014 - 10.11.2014 - - bugfix subtemplate called in nocache mode could be called with wrong compile_id when it did change on one of the calling templates - - improvement add code of template functions called in nocache mode dynamically to cache file (related to bugfix of 01.11.2014) - - bugfix Debug Console did not include all data from merged compiled subtemplates - - 04.11.2014 - - new feature $smarty->debug = true; => overwrite existing Debug Console window (old behaviour) - $smarty->debug = 2; => individual Debug Console window by template name - - 03.11.2014 - - bugfix Debug Console did not show included subtemplates since 3.1.17 (forum 25301) - - bugfix Modifier debug_print_var did not limit recursion or prevent recursive object display at Debug Console - (ATTENTION: parameter order has changed to be able to specify maximum recursion) - - bugfix Debug consol did not include subtemplate information with $smarty->merge_compiled_includes = true - - improvement The template variables are no longer displayed as objects on the Debug Console - - improvement $smarty->createData($parent = null, $name = null) new optional name parameter for display at Debug Console - - addition of some hooks for future extension of Debug Console - - 01.11.2014 - - bugfix and enhancement on subtemplate {include} and template {function} tags. - * Calling a template which has a nocache section could fail if it was called from a cached and a not cached subtemplate. - * Calling the same subtemplate cached and not cached with the $smarty->merge_compiled_includes enabled could cause problems - * Many smaller related changes - - 30.10.2014 - - bugfix access to class constant by object like {$object::CONST} or variable class name {$class::CONST} did not work (forum 25301) - - 26.10.2014 - - bugfix E_NOTICE message was created during compilation when ASP tags '<%' or '%>' are in template source text - - bugfix merge_compiled_includes option failed when caching enables and same subtemplate was included cached and not cached - - ===== 3.1.21 ===== (18.10.2014) - 18.10.2014 - - composer moved to github - - 17.10.2014 - - bugfix on $php_handling security and optimization of smarty_internal_parsetree (Thue Kristensen) - - 16.10.2014 - - bugfix composer.json update - - 15.10.2014 - - bugfix calling a new created cache file with fetch() and Smarty::CACHING_LIFETIME_SAVED multiple times did fail (forum 22350) - - 14.10.2014 - - bugfix any tag placed within "<script language=php>" will throw a security exception to close all thinkable holes - - bugfix classmap in root composer.json should start at "libs/..." - - improvement cache is_file(file_exists) results of loadPlugin() to avoid unnecessary calls during compilation (Issue 201} - - 12.10.2014 - - bugfix a comment like "<script{*foo*} language=php>" bypassed $php_handling checking (Thue Kristensen) - - bugfix change of 08.10.2014 could create E_NOTICE meassage when using "<?php" tags - - bugfix "<script language=php>" with $php_handling PHP_PASSTHRU was executed in {nocache} sections - - ===== 3.1.20 ===== (09.10.2014) - 08.10.2014 - - bugfix security mode of "<script language=php>" must be controlled by $php_handling property (Thue Kristensen) - - 01.10.2014 - - bugfix template resource of inheritance blocks could get invalid if the default resource type is not 'file'(Issue 202) - - bugfix existing child {block} tag must override parent {block} tag append / prepend setting (topic 25259) - - 02.08.2014 - - bugfix modifier wordwrap did output break string wrong if first word was exceeding length with cut = true (topic 25193) - - 24.07.2014 - - bugfix cache clear when cache folder does not exist - - 16.07.2014 - - enhancement remove BOM automatically from template source (topic 25161) - - 04.07.2014 - - bugfix the bufix of 02.06.2014 broke correct handling of child templates with same name but different template folders in extends resource (issue 194 and topic 25099) - - ===== 3.1.19 ===== (30.06.2014) - 20.06.2014 - - bugfix template variables could not be passed as parameter in {include} when the include was in a {nocache} section (topic 25131) - - 17.06.2014 - - bugfix large template text of some charsets could cause parsing errors (topic 24630) - - 08.06.2014 - - bugfix registered objects did not work after spelling fixes of 06.06.2014 - - bugfix {block} tags within {literal} .. {/literal} got not displayed correctly (topic 25024) - - bugfix UNC WINDOWS PATH like "\\psf\path\to\dir" did not work as template directory (Issue 192) - - bugfix {html_image} security check did fail on files relative to basedir (Issue 191) - - 06.06.2014 - - fixed PHPUnit outputFilterTrimWhitespaceTests.php assertion of test result - - fixed spelling, PHPDoc , minor errors, code cleanup - - 02.06.2014 - - using multiple cwd with relative template dirs could result in identical compiled file names. (issue 194 and topic 25099) - - 19.04.2014 - - bugfix calling createTemplate(template, data) with empty data array caused notice of array to string conversion (Issue 189) - - bugfix clearCompiledTemplate() did not delete files on WINDOWS when a compile_id was specified - - 18.04.2014 - - revert bugfix of 5.4.2014 because %-e date format is not supported on all operating systems - - ===== 3.1.18 ===== (07.04.2014) - 06.04.2014 - - bugfix template inheritance fail when using custom resource after patch of 8.3.2014 (Issue 187) - - bugfix update of composer file (Issue 168 and 184) - - 05.04.2014 - - bugfix default date format leads to extra spaces when displaying dates with single digit days (Issue 165) - - 26.03.2014 - - bugfix Smart_Resource_Custom should not lowercase the resource name (Issue 183) - - 24.03.2014 - - bugfix using a {foreach} property like @iteration could fail when used in inheritance parent templates (Issue 182) - - 20.03.2014 - - bugfix $smarty->auto_literal and mbsting.func_overload 2, 6 or 7 did fail (forum topic 24899) - - 18.03.2014 - - revert change of 17.03.2014 - -17.03.2014 - - bugfix $smarty->auto_literal and mbsting.func_overload 2, 6 or 7 did fail (forum topic 24899) - - 15.03.2014 - - bugfix Smarty_CacheResource_Keyvaluestore did use different keys on read/writes and clearCache() calls (Issue 169) - - 13.03.2014 - - bugfix clearXxx() change of 27.1.2014 did not work when specifing cache_id or compile_id (forum topic 24868 and 24867) - - ===== 3.1.17 ===== - 08.03.2014 - - bugfix relative file path {include} within {block} of child templates did throw exception on first call (Issue 177) - - 17.02.2014 - - bugfix Smarty failed when executing PHP on HHVM (Hip Hop 2.4) because uniqid('',true) does return string with ',' (forum topic 20343) - - 16.02.2014 - - bugfix a '//' or '\\' in template_dir path could produce wrong path on relative filepath in {include} (Issue 175) - - 05.02.2014 - - bugfix shared.literal_compiler_param.php did throw an exception when literal did contain a '-' (smarty-developers group) - - 27.01.2014 - - bugfix $smarty->debugging = true; did show the variable of the $smarty object not the variables used in display() call (forum topic 24764) - - bugfix clearCompiledTemplate(), clearAll() and clear() should use realpath to avoid possible exception from RecursiveDirectoryIterator (Issue 171) - - 26.01.2014 - - bugfix undo block nesting checks for {nocache} for reasons like forum topic 23280 (forum topic 24762) - - 18.01.2014 - - bugfix the compiler did fail when using template inheritance and recursive {include} (smarty-developers group) - - 11.01.2014 - - bugfix "* }" (spaces before right delimiter) was interpreted by mistake as comment end tag (Issue 170) - - internals content cache should be clear when updating cache file - - 08.01.2014 - - bugfix Smarty_CacheResource_Custom did not handle template resource type specifications on clearCache() calls (Issue 169) - - bugfix SmartyBC.class.php should use require_once to load Smarty.class.php (forum topic 24683) - - ===== 3.1.16 ===== - 15.12.2013 - - bugfix {include} with {block} tag handling (forum topic 24599, 24594, 24682) (Issue 161) - Read 3.1.16_RELEASE_NOTES for more details - - enhancement additional debug output at $smarty->_parserdebug = true; - - 07.11.2013 - - bugfix too restrictive handling of {include} within {block} tags. 3.1.15 did throw errors where 3.1.14 did not (forum topic 24599) - - bugfix compiler could fail if PHP mbstring.func_overload is enabled (Issue 164) - - 28.10.2013 - - bugfix variable resource name at custom resource plugin did not work within {block} tags (Issue 163) - - bugfix notice "Trying to get property of non-object" removed (Issue 163) - - bugfix correction of modifier capitalize fix from 3.10.2013 (issue 159) - - bugfix multiple {block}s with same name in parent did not work (forum topic 24631) - - 20.10.2013 - - bugfix a variable file name at {extends} tag did fail (forum topic 24618) - - 14.10.2013 - - bugfix yesterdays fix could result in an undefined variable - - 13.10.2013 - - bugfix variable names on {include} in template inheritance did unextepted error message (forum topic 24594) (Issue 161) -.- bugfix relative includes with same name like {include './foo.tpl'} from different folder failed (forum topic 24590)(Issue 161) - - 04.10.2013 - - bugfix variable file names at {extends} had been disbabled by mistake with the rewrite of - template inheritance of 24.08.2013 (forum topic 24585) - -03.10.2013 - - bugfix loops using modifier capitalize did eat up memory (issue 159) - - ===== Smarty 3.1.15 ===== -01.10.2013 - - use current delimiters in compiler error messages (issue 157) - - improvement on performance when using error handler and multiple template folders (issue 152) - -17.09.2013 - - improvement added patch for additional SmartyCompilerException properties for better access to scource information (forum topic 24559) - -16.09.2013 - - bugfix recompiled templates did not show on first request with zend opcache cache (forum topic 24320) - -13.09.2013 - - bugfix html_select_time defaulting error for the Meridian dropdown (forum topic 24549) - -09.09.2012 -- bugfix incorrect compiled code with array(object,method) callback at registered Variable Filter (forum topic 24542) - -27.08.2013 -- bugfix delimiter followed by linebreak did not work as auto literal after update from 24.08.2013 (forum topic 24518) - -24.08.2013 -- bugfix and enhancement - Because several recent problems with template inheritance the {block} tag compiler has been rewriten - - Error messages shown now the correct child template file and line number - - The compiler could fail on some larger UTF-8 text block (forum topic 24455) - - The {strip} tag can now be placed outside {block} tags in child templates (forum topic 24289) -- change SmartyException::$escape is now false by default -- change PHP traceback has been remove for SmartyException and SmartyCompilerException - -14.08.2013 -- bugfix compiled filepath of config file did not observe different config_dir (forum topic 24493) - -13.08.2013 -- bugfix the internal resource cache did not observe config_dir changes (forum topic 24493) - -12.08.2013 -- bugfix internal $tmpx variables must be unique over all inheritance templates (Issue 149) - -10.08.2013 -- bugfix a newline was eaten when a <?xml ... ?> was passed by a Smarty variable and caching was enabled (forum topic 24482) - -29.07.2013 -- bugfix headers already send warning thrown when using 'SMARTY_DEBUG=on' from URL (Issue 148) - -27.07.2013 -- enhancement allow access to properties of registered opjects for Smarty2 BC (forum topic 24344) - -26.07.2013 -- bugfix template inheritance nesting problem (forum topic 24387) - -15.7.2013 -- update code generated by PSR-2 standards fixer which introduced PHP 5.4 incompatibilities of 14.7.2013 - -14.7.2013 -- bugfix increase of internal maximum parser stacksize to allow more complex tag code {forum topic 24426} -- update for PHP 5.4 compatibility -- reformat source to PSR-2 standard - -12.7.2013 -- bugfix Do not remove '//' from file path at normalization (Issue 142) - -2.7.2013 -- bugfix trimwhitespace would replace captured items in wrong order (forum topic 24387) - -===== Smarty-3.1.14 ===== -27.06.2013 -- bugfix removed PHP 5.5 deprecated preg_replace /e option in modifier capitalize (forum topic 24389) - -17.06.2013 -- fixed spelling in sources and documentation (from smarty-developers forum Veres Lajos) -- enhancement added constant SMARTY::CLEAR_EXPIRED for the change of 26.05.2013 (forum topic 24310) -- bugfix added smarty_security.php to composer.json (Issue 135) - -26.05.2013 -- enhancement an expire_time of -1 in clearCache() and clearAllCache() will delete outdated cache files - by their individual cache_lifetime used at creation (forum topic 24310) - -21.05.2013 -- bugfix modifier strip_tags:true was compiled into wrong code (Forum Topic 24287) -- bugfix /n after ?> in Smarty.class.php did start output buffering (Issue 138) - -25.04.2013 -- bugfix escape and wordrap modifier could be compiled into wrong code when used in {nocache}{/nocache} - section but caching is disabled (Forum Topic 24260) - -05.04.2013 -- bugfix post filter must not run when compiling inheritance child blocks (Forum Topic 24094) -- bugfix after the fix for Issue #130 compiler exceptions got double escaped (Forum Topic 24199) - -28.02.2013 -- bugfix nocache blocks could be lost when using CACHING_LIFETIME_SAVED (Issue #133) -- bugfix Compile ID gets nulled when compiling child blocks (Issue #134) - - -24.01.2013 -- bugfix wrong tag type in smarty_internal_templatecompilerbase.php could cause wrong plugin search order (Forum Topic 24028) - -===== Smarty-3.1.13 ===== -13.01.2013 -- enhancement allow to disable exception message escaping by SmartyException::$escape = false; (Issue #130) - -09.01.2013 -- bugfix compilation did fail when a prefilter did modify an {extends} tag c -- bugfix template inheritance could fail if nested {block} tags in childs did contain {$smarty.block.child} (Issue #127) -- bugfix template inheritance could fail if {block} tags in childs did have similar name as used plugins (Issue #128) -- added abstract method declaration doCompile() in Smarty_Internal_TemplateCompilerBase (Forum Topic 23969) - -06.01.2013 -- Allow '://' URL syntax in template names of stream resources (Issue #129) - -27.11.2012 -- bugfix wrong variable usage in smarty_internal_utility.php (Issue #125) - -26.11.2012 -- bugfix global variable assigned within template function are not seen after template function exit (Forum Topic 23800) - -24.11.2012 -- made SmartyBC loadable via composer (Issue #124) - -20.11.2012 -- bugfix assignGlobal() called from plugins did not work (Forum Topic 23771) - -13.11.2012 -- adding attribute "strict" to html_options, html_checkboxes, html_radios to only print disabled/readonly attributes if their values are true or "disabled"/"readonly" (Issue #120) - -01.11.2012 -- bugfix muteExcpetedErrors() would screw up for non-readable paths (Issue #118) - -===== Smarty-3.1.12 ===== -14.09.2012 -- bugfix template inheritance failed to compile with delimiters {/ and /} (Forum Topic 23008) - -11.09.2012 -- bugfix escape Smarty exception messages to avoid possible script execution - -10.09.2012 -- bugfix tag option flags and shorttag attributes did not work when rdel started with '=' (Forum Topic 22979) - -31.08.2012 -- bugfix resolving relative paths broke in some circumstances (Issue #114) - -22.08.2012 -- bugfix test MBString availability through mb_split, as it could've been compiled without regex support (--enable-mbregex). - Either we get MBstring's full package, or we pretend it's not there at all. - -21.08.2012 -- bugfix $auto_literal = false did not work with { block} tags in child templates - (problem was reintroduced after fix in 3.1.7)(Forum Topic 20581) - -17.08.2012 -- bugfix compiled code of nocache sections could contain wrong escaping (Forum Topic 22810) - -15.08.2012 -- bugfix template inheritance did produce wrong code if subtemplates with {block} was - included several times (from smarty-developers forum) - -14.08.2012 -- bugfix PHP5.2 compatibility compromised by SplFileInfo::getBasename() (Issue 110) - -01.08.2012 -- bugfix avoid PHP error on $smarty->configLoad(...) with invalid section specification (Forum Topic 22608) - -30.07.2012 --bugfix {assign} in a nocache section should not overwrite existing variable values - during compilation (issue 109) - -28.07.2012 -- bugfix array access of config variables did not work (Forum Topic 22527) - -19.07.2012 -- bugfix the default plugin handler did create wrong compiled code for static class methods - from external script files (issue 108) - -===== Smarty-3.1.11 ===== -30.06.2012 -- bugfix {block.. hide} did not work as nested child (Forum Topic 22216) - -25.06.2012 -- bugfix the default plugin handler did not allow static class methods for modifier (issue 85) - -24.06.2012 -- bugfix escape modifier support for PHP < 5.2.3 (Forum Topic 21176) - -11.06.2012 -- bugfix the patch for Topic 21856 did break tabs between tag attributes (Forum Topic 22124) - -===== Smarty-3.1.10 ===== -09.06.2012 -- bugfix the compiler did ignore registered compiler plugins for closing tags (Forum Topic 22094) -- bugfix the patch for Topic 21856 did break multiline tags (Forum Topic 22124) - -===== Smarty-3.1.9 ===== -07.06.2012 -- bugfix fetch() and display() with relative paths (Issue 104) -- bugfix treat "0000-00-00" as 0 in modifier.date_format (Issue 103) - -24.05.2012 -- bugfix Smarty_Internal_Write_File::writeFile() could cause race-conditions on linux systems (Issue 101) -- bugfix attribute parameter names of plugins may now contain also "-" and ":" (Forum Topic 21856) -- bugfix add compile_id to cache key of of source (Issue 97) - -22.05.2012 -- bugfix recursive {include} within {section} did fail (Smarty developer group) - -12.05.2012 -- bugfix {html_options} did not properly escape values (Issue 98) - -03.05.2012 -- bugfix make HTTP protocall version variable (issue 96) - -02.05.2012 -- bugfix {nocache}{block}{plugin}... did produce wrong compiled code when caching is disabled (Forum Topic 21572, issue 95) - -12.04.2012 -- bugfix Smarty did eat the linebreak after the <?xml...?> closing tag (Issue 93) -- bugfix concurrent cache updates could create a warning (Forum Topic 21403) - -08.04.2012 -- bugfix "\\" was not escaped correctly when generating nocache code (Forum Topic 21364) - -30.03.2012 -- bugfix template inheritance did not throw exception when a parent template was deleted (issue 90) - -27.03.2012 -- bugfix prefilter did run multiple times on inline subtemplates compiled into several main templates (Forum Topic 21325) -- bugfix implement Smarty2's behaviour of variables assigned by reference in SmartyBC. {assign} will affect all references. - (issue 88) - -21.03.2012 -- bugfix compileAllTemplates() and compileAllConfig() did not return the number of compiled files (Forum Topic 21286) - -13.03.2012 -- correction of yesterdays bugfix (Forum Topic 21175 and 21182) - -12.03.2012 -- bugfix a double quoted string of "$foo" did not compile into PHP "$foo" (Forum Topic 21175) -- bugfix template inheritance did set $merge_compiled_includes globally true - -03.03.2012 -- optimization of compiling speed when same modifier was used several times - -02.03.2012 -- enhancement the default plugin handler can now also resolve undefined modifier (Smarty::PLUGIN_MODIFIER) - (Issue 85) - -===== Smarty-3.1.8 ===== -19.02.2012 -- bugfix {include} could result in a fatal error if used in appended or prepended nested {block} tags - (reported by mh and Issue 83) -- enhancement added Smarty special variable $smarty.template_object to return the current template object (Forum Topic 20289) - - -07.02.2012 -- bugfix increase entropy of internal function names in compiled and cached template files (Forum Topic 20996) -- enhancement cacheable parameter added to default plugin handler, same functionality as in registerPlugin (request by calguy1000) - -06.02.2012 -- improvement stream_resolve_include_path() added to Smarty_Internal_Get_Include_Path (Forum Topic 20980) -- bugfix fetch('extends:foo.tpl') always yielded $source->exists == true (Forum Topic 20980) -- added modifier unescape:"url", fix (Forum Topic 20980) -- improvement replaced some calls of preg_replace with str_replace (Issue 73) - -30.01.2012 -- bugfix Smarty_Security internal $_resource_dir cache wasn't properly propagated - -27.01.2012 -- bugfix Smarty did not a template name of "0" (Forum Topic 20895) - -20.01.2012 -- bugfix typo in Smarty_Internal_Get_IncludePath did cause runtime overhead (Issue 74) -- improvment remove unneeded assigments (Issue 75 and 76) -- fixed typo in template parser -- bugfix output filter must not run before writing cache when template does contain nocache code (Issue 71) - -02.01.2012 -- bugfix {block foo nocache} did not load plugins within child {block} in nocache mode (Forum Topic 20753) - -29.12.2011 -- bugfix enable more entropy in Smarty_Internal_Write_File for "more uniqueness" and Cygwin compatibility (Forum Topic 20724) -- bugfix embedded quotes in single quoted strings did not compile correctly in {nocache} sections (Forum Topic 20730) - -28.12.2011 -- bugfix Smarty's internal header code must be excluded from postfilters (issue 71) - -22.12.2011 -- bugfix the new lexer of 17.12.2011 did fail if mbstring.func_overload != 0 (issue 70) (Forum Topic 20680) -- bugfix template inheritace did fail if mbstring.func_overload != 0 (issue 70) (Forum Topic 20680) - -20.12.2011 -- bugfix template inheritance: {$smarty.block.child} in nested child {block} tags did not return - content after {$smarty.block.child} (Forum Topic 20564) - -===== Smarty-3.1.7 ===== -18.12.2011 -- bugfix strings ending with " in multiline strings of config files failed to compile (issue #67) -- added chaining to Smarty_Internal_Templatebase -- changed unloadFilter() to not return a boolean in favor of chaining and API conformity -- bugfix unregisterObject() raised notice when object to unregister did not exist -- changed internals to use Smarty::$_MBSTRING ($_CHARSET, $_DATE_FORMAT) for better unit testing -- added Smarty::$_UTF8_MODIFIER for proper PCRE charset handling (Forum Topic 20452) -- added Smarty_Security::isTrustedUri() and Smarty_Security::$trusted_uri to validate - remote resource calls through {fetch} and {html_image} (Forum Topic 20627) - -17.12.2011 -- improvement of compiling speed by new handling of plain text blocks in the lexer/parser (issue #68) - -16.12.2011 -- bugfix the source exits flag and timestamp was not setup when template was in php include path (issue #69) - -9.12.2011 -- bugfix {capture} tags around recursive {include} calls did throw exception (Forum Topic 20549) -- bugfix $auto_literal = false did not work with { block} tags in child templates (Forum Topic 20581) -- bugfix template inheritance: do not include code of {include} in overloaded {block} into compiled - parent template (Issue #66} -- bugfix template inheritance: {$smarty.block.child} in nested child {block} tags did not return expected - result (Forum Topic 20564) - -===== Smarty-3.1.6 ===== -30.11.2011 -- bugfix is_cache() for individual cached subtemplates with $smarty->caching = CACHING_OFF did produce - an exception (Forum Topic 20531) - -29.11.2011 -- bugfix added exception if the default plugin handler did return a not static callback (Forum Topic 20512) - -25.11.2011 -- bugfix {html_select_date} and {html_slecet_time} did not default to current time if "time" was not specified - since r4432 (issue 60) - -24.11.2011 -- bugfix a subtemplate later used as main template did use old variable values - -21.11.2011 -- bugfix cache file could include unneeded modifier plugins under certain condition - -18.11.2011 -- bugfix declare all directory properties private to map direct access to getter/setter also on extended Smarty class - -16.11.2011 -- bugfix Smarty_Resource::load() did not always return a proper resource handler (Forum Topic 20414) -- added escape argument to html_checkboxes and html_radios (Forum Topic 20425) - -===== Smarty-3.1.5 ===== -14.11.2011 -- bugfix allow space between function name and open bracket (forum topic 20375) - -09.11.2011 -- bugfix different behaviour of uniqid() on cygwin. See https://bugs.php.net/bug.php?id=34908 - (forum topic 20343) - -01.11.2011 -- bugfix {if} and {while} tags without condition did not throw a SmartyCompilerException (Issue #57) -- bugfix multiline strings in config files could fail on longer strings (reopened Issue #55) - -22.10.2011 -- bugfix smarty_mb_from_unicode() would not decode unicode-points properly -- bugfix use catch Exception instead UnexpectedValueException in - clearCompiledTemplate to be PHP 5.2 compatible - -21.10.2011 -- bugfix apostrophe in plugins_dir path name failed (forum topic 20199) -- improvement sha1() for array keys longer than 150 characters -- add Smarty::$allow_ambiguous_resources to activate unique resource handling (Forum Topic 20128) - -20.10.2011 -- @silenced unlink() in Smarty_Internal_Write_File since debuggers go haywire without it. -- bugfix Smarty::clearCompiledTemplate() threw an Exception if $cache_id was not present in $compile_dir when $use_sub_dirs = true. -- bugfix {html_select_date} and {html_select_time} did not properly handle empty time arguments (Forum Topic 20190) -- improvement removed unnecessary sha1() - -19.10.2011 -- revert PHP4 constructor message -- fixed PHP4 constructor message - -===== Smarty-3.1.4 ===== -19.10.2011 -- added exception when using PHP4 style constructor - -16.10.2011 -- bugfix testInstall() did not propery check cache_dir and compile_dir - -15.10.2011 -- bugfix Smarty_Resource and Smarty_CacheResource runtime caching (Forum Post 75264) - -14.10.2011 -- bugfix unique_resource did not properly apply to compiled resources (Forum Topic 20128) -- add locking to custom resources (Forum Post 75252) -- add Smarty_Internal_Template::clearCache() to accompany isCached() fetch() etc. - -13.10.2011 -- add caching for config files in Smarty_Resource -- bugfix disable of caching after isCached() call did not work (Forum Topic 20131) -- add concept unique_resource to combat potentially ambiguous template_resource values when custom resource handlers are used (Forum Topic 20128) -- bugfix multiline strings in config files could fail on longer strings (Issue #55) - -11.10.2011 -- add runtime checks for not matching {capture}/{/capture} calls (Forum Topic 20120) - -10.10.2011 -- bugfix variable name typo in {html_options} and {html_checkboxes} (Issue #54) -- bugfix <?xml> tag did create wrong output when caching enabled and the tag was in included subtemplate -- bugfix Smarty_CacheResource_mysql example was missing strtotime() calls - -===== Smarty-3.1.3 ===== -07.10.2011 -- improvement removed html comments from {mailto} (Forum Topic 20092) -- bugfix testInstall() would not show path to internal plugins_dir (Forum Post 74627) -- improvement testInstall() now showing resolved paths and checking the include_path if necessary -- bugfix html_options plugin did not handle object values properly (Issue #49, Forum Topic 20049) -- improvement html_checkboxes and html_radios to accept null- and object values, and label_ids attribute -- improvement removed some unnecessary count()s -- bugfix parent pointer was not set when fetch() for other template was called on template object - -06.10.2011 -- bugfix switch lexer internals depending on mbstring.func_overload -- bugfix start_year and end_year of {html_select_date} did not use current year as offset base (Issue #53) - -05.10.2011 -- bugfix of problem introduced with r4342 by replacing strlen() with isset() -- add environment configuration issue with mbstring.func_overload Smarty cannot compensate for (Issue #45) -- bugfix nofilter tag option did not disable default modifier -- bugfix html_options plugin did not handle null- and object values properly (Issue #49, Forum Topic 20049) - -04.10.2011 -- bugfix assign() in plugins called in subtemplates did change value also in parent template -- bugfix of problem introduced with r4342 on math plugin -- bugfix output filter should not run on individually cached subtemplates -- add unloadFilter() method -- bugfix has_nocache_code flag was not reset before compilation - -===== Smarty-3.1.2 ===== -03.10.2011 -- improvement add internal $joined_template_dir property instead computing it on the fly several times - -01.10.2011 -- improvement replaced most in_array() calls by more efficient isset() on array_flip()ed haystacks -- improvement replaced some strlen($foo) > 3 calls by isset($foo[3]) -- improvement Smarty_Internal_Utility::clearCompiledTemplate() removed redundant strlen()s - -29.09.2011 -- improvement of Smarty_Internal_Config::loadConfigVars() dropped the in_array for index look up - -28.09.2011 -- bugfix on template functions called nocache calling other template functions - -27.09.2011 -- bugfix possible warning "attempt to modify property of non-object" in {section} (issue #34) -- added chaining to Smarty_Internal_Data so $smarty->assign('a',1)->assign('b',2); is possible now -- bugfix remove race condition when a custom resource did change timestamp during compilation -- bugfix variable property did not work on objects variable in template -- bugfix smarty_make_timestamp() failed to process DateTime objects properly -- bugfix wrong resource could be used on compile check of custom resource - -26.09.2011 -- bugfix repeated calls to same subtemplate did not make use of cached template object - -24.09.2011 -- removed internal muteExpectedErrors() calls in favor of having the implementor call this once from his application -- optimized muteExpectedErrors() to pass errors to the latest registered error handler, if appliccable -- added compile_dir and cache_dir to list of muted directories -- improvment better error message for undefined templates at {include} - -23.09.2011 -- remove unused properties -- optimization use real function instead anonymous function for preg_replace_callback -- bugfix a relative {include} in child template blocks failed -- bugfix direct setting of $template_dir, $config_dir, $plugins_dir in __construct() of an - extended Smarty class created problems -- bugfix error muting was not implemented for cache locking - -===== Smarty 3.1.1 ===== -22.09.2011 -- bugfix {foreachelse} does fail if {section} was nested inside {foreach} -- bugfix debug.tpl did not display correctly when it was compiled with escape_html = true - -21.09.2011 -- bugfix look for mixed case plugin file names as in 3.0 if not found try all lowercase -- added $error_muting to suppress error messages even for badly implemented error_handlers -- optimized autoloader -- reverted ./ and ../ handling in fetch() and display() - they're allowed again - -20.09.2011 -- bugfix removed debug echo output while compiling template inheritance -- bugfix relative paths in $template_dir broke relative path resolving in {include "../foo.tpl"} -- bugfix {include} did not work inside nested {block} tags -- bugfix {assign} with scope root and global did not work in all cases - -19.09.2011 -- bugfix regression in Smarty_CacheReource_KeyValueStore introduced by r4261 -- bugfix output filter shall not run on included subtemplates - -18.09.2011 -- bugfix template caching did not care about file.tpl in different template_dir -- bugfix {include $file} was broken when merge_compiled_incluges = true -- bugfix {include} was broken when merge_compiled_incluges = true and same indluded template - was used in different main templates in one compilation run -- bugfix for Smarty2 style compiler plugins on unnamed attribute passing like {tag $foo $bar} -- bugfix debug.tpl did not display correctly when it was compiled with escape_html = true - -17.09.2011 -- bugfix lock_id for file resource would create invalid filepath -- bugfix resource caching did not care about file.tpl in different template_dir - -===== Smarty 3.1.0 ===== -15/09/2011 -- optimization of {foreach}; call internal _count() method only when "total" or "last" {foreach} properties are used - -11/09/2011 -- added unregisterObject() method - -06/09/2011 -- bugfix isset() did not work in templates on config variables - -03/09/2011 -- bugfix createTemplate() must default to cache_id and compile_id of Smarty object -- bugfix Smarty_CacheResource_KeyValueStore must include $source->uid in cache filepath to keep templates with same - name but different folders separated -- added cacheresource.apc.php example in demo folder - -02/09/2011 -- bugfix cache lock file must use absolute filepath - -01/09/2011 -- update of cache locking - -30/08/2011 -- added locking mechanism to CacheResource API (implemented with File and KeyValueStores) - -28/08/2011 -- bugfix clearCompileTemplate() did not work for specific template subfolder or resource - -27/08/2011 -- bugfix {$foo|bar+1} did create syntax error - -26/08/2011 -- bugfix when generating nocache code which contains double \ -- bugfix handle race condition if cache file was deleted between filemtime and include - -17/08/2011 -- bugfix CacheResource_Custom bad internal fetch() call - -15/08/2011 -- bugfix CacheResource would load content twice for KeyValueStore and Custom handlers - -06/08/2011 -- bugfix {include} with scope attribute could execute in wrong scope -- optimization of compile_check processing - -03/08/2011 -- allow comment tags to comment {block} tags out in child templates - -26/07/2011 -- bugfix experimental getTags() method did not work - -24/07/2011 -- sure opened output buffers are closed on exception -- bugfix {foreach} did not work on IteratorAggregate - -22/07/2011 -- clear internal caches on clearAllCache(), clearCache(), clearCompiledTemplate() - -21/07/2011 -- bugfix value changes of variable values assigned to Smarty object could not be seen on repeated $smarty->fetch() calls - -17/07/2011 -- bugfix {$smarty.block.child} did drop a notice at undefined child - -15/07/2011 -- bugfix individual cache_lifetime of {include} did not work correctly inside {block} tags -- added caches for Smarty_Internal_TemplateSource and Smarty_Internal_TemplateCompiled to reduce I/O for multiple cache_id rendering - -14/07/2011 -- made Smarty::loadPlugin() respect the include_path if required - -13/07/2011 -- optimized internal file write functionality -- bugfix PHP did eat line break on nocache sections -- fixed typo of Smarty_Security properties $allowed_modifiers and $disabled_modifiers - -06/07/2011 -- bugfix variable modifier must run befor gereral filtering/escaping - -04/07/2011 -- bugfix use (?P<name>) syntax at preg_match as some pcre libraries failed on (?<name>) -- some performance improvement when using generic getter/setter on template objects - -30/06/2011 -- bugfix generic getter/setter of Smarty properties used on template objects did throw exception -- removed is_dir and is_readable checks from directory setters for better performance - -28/06/2011 -- added back support of php template resource as undocumented feature -- bugfix automatic recompilation on version change could drop undefined index notice on old 3.0 cache and compiled files -- update of README_3_1_DEV.txt and moved into the distribution folder -- improvement show first characters of eval and string templates instead sha1 Uid in debug window - -===== Smarty 3.1-RC1 ===== -25/06/2011 -- revert change of 17/06/2011. $_smarty varibale removed. call loadPlugin() from inside plugin code if required -- code cleanup, remove no longer used properties and methods -- update of PHPdoc comments - -23/06/2011 -- bugfix {html_select_date} would not respect current time zone - -19/06/2011 -- added $errors argument to testInstall() functions to suppress output. -- added plugin-file checks to testInstall() - -18/06/2011 -- bugfix mixed use of same subtemplate inline and not inline in same script could cause a warning during compilation - -17/06/2011 -- bugfix/change use $_smarty->loadPlugin() when loading nested depending plugins via loadPlugin -- bugfix {include ... inline} within {block}...{/block} did fail - -16/06/2011 -- bugfix do not overwrite '$smarty' template variable when {include ... scope=parent} is called -- bugfix complete empty inline subtemplates did fail - -15/06/2011 -- bugfix template variables where not accessable within inline subtemplates - -12/06/2011 -- bugfix removed unneeded merging of template variable when fetching includled subtemplates - -10/06/2011 -- made protected properties $template_dir, $plugins_dir, $cache_dir, $compile_dir, $config_dir accessible via magic methods - -09/06/2011 -- fix smarty security_policy issue in plugins {html_image} and {fetch} - -05/06/2011 -- update of SMARTY_VERSION -- bugfix made getTags() working again - -04/06/2011 -- allow extends resource in file attribute of {extends} tag - -03/06/2011 -- added {setfilter} tag to set filters for variable output -- added escape_html property to control autoescaping of variable output - -27/05/2011 -- added allowed/disabled tags and modifiers in security for sandboxing - -23/05/2011 -- added base64: and urlencode: arguments to eval and string resource types - -22/05/2011 -- made time-attribute of {html_select_date} and {html_select_time} accept arrays as defined by attributes prefix and field_array - -13/05/2011 -- remove setOption / getOption calls from SamrtyBC class - -02/05/2011 -- removed experimental setOption() getOption() methods -- output returned content also on opening tag calls of block plugins -- rewrite of default plugin handler -- compile code of variable filters for better performance - -20/04/2011 -- allow {php} {include_php} tags and PHP_ALLOW handling only with the SmartyBC class -- removed support of php template resource - -20/04/2011 -- added extendsall resource example -- optimization of template variable access -- optimization of subtemplate handling {include} -- optimization of template class - -01/04/2011 -- bugfix quote handling in capitalize modifier - -28/03/2011 -- bugfix stripslashes() requried when using PCRE e-modifier - -04/03/2011 -- upgrade to new PHP_LexerGenerator version 0.4.0 for better performance - -27/02/2011 -- ignore .svn folders when clearing cache and compiled files -- string resources do not need a modify check - -26/02/2011 -- replaced smarty_internal_wrapper by SmartyBC class -- load utility functions as static methods instead through __call() -- bugfix in extends resource when subresources are used -- optimization of modify checks - -25/02/2011 -- use $smarty->error_unassigned to control NOTICE handling on unassigned variables - -21/02/2011 -- added new new compile_check mode COMPILECHECK_CACHEMISS -- corrected new cloning behaviour of createTemplate() -- do no longer store the compiler object as property in the compile_tag classes to avoid possible memory leaks - during compilation - -19/02/2011 -- optimizations on merge_compiled_includes handling -- a couple of optimizations and bugfixes related to new resource structure - -17/02/2011 -- changed ./ and ../ behaviour - -14/02/2011 -- added {block ... hide} option to suppress block if no child is defined - -13/02/2011 -- update handling of recursive subtemplate calls -- bugfix replace $smarty->triggerError() by exception in smarty_internal_resource_extends.php - -12/02/2011 -- new class Smarty_Internal_TemplateBase with shared methods of Smarty and Template objects -- optimizations of template processing -- made register... methods permanet -- code for default_plugin_handler -- add automatic recompilation at version change - -04/02/2011 -- change in Smarty_CacheResource_Custom -- bugfix cache_lifetime did not compile correctly at {include} after last update -- moved isCached processing into CacheResource class -- bugfix new CacheResource API did not work with disabled compile_check - -03/02/2011 -- handle template content as function to improve speed on multiple calls of same subtemplate and isCached()/display() calls -- bugfixes and improvents in the new resource API -- optimizations of template class code - -25/01/2011 -- optimized function html_select_time - -22/01/2011 -- added Smarty::$use_include_path configuration directive for Resource API - -21/01/2011 -- optimized function html_select_date - -19/01/2011 -- optimized outputfilter trimwhitespace - -18/01/2011 -- bugfix Config to use Smarty_Resource to fetch sources -- optimized Smarty_Security's isTrustedDir() and isTrustedPHPDir() - -17/01/2011 -- bugfix HTTP headers for CGI SAPIs - -16/01/2011 -- optimized internals of Smarty_Resource and Smarty_CacheResource - -14/01/2011 -- added modifiercompiler escape to improve performance of escaping html, htmlall, url, urlpathinfo, quotes, javascript -- added support to choose template_dir to load from: [index]filename.tpl - -12/01/2011 -- added unencode modifier to revert results of encode modifier -- added to_charset and from_charset modifier for character encoding - -11/01/2011 -- added SMARTY_MBSTRING to generalize MBString detection -- added argument $lc_rest to modifier.capitalize to lower-case anything but the first character of a word -- changed strip modifier to consider unicode white-space, too -- changed wordwrap modifier to accept UTF-8 strings -- changed count_sentences modifier to consider unicode characters and treat sequences delimited by ? and ! as sentences, too -- added argument $double_encode to modifier.escape (applies to html and htmlall only) -- changed escape modifier to be UTF-8 compliant -- changed textformat block to be UTF-8 compliant -- optimized performance of mailto function -- fixed spacify modifier so characters are not prepended and appended, made it unicode compatible -- fixed truncate modifier to properly use mb_string if possible -- removed UTF-8 frenzy from count_characters modifier -- fixed count_words modifier to treat "hello-world" as a single word like str_count_words() does -- removed UTF-8 frenzy from upper modifier -- removed UTF-8 frenzy from lower modifier - -01/01/2011 -- optimize smarty_modified_escape for hex, hexentity, decentity. - -28/12/2010 -- changed $tpl_vars, $config_vars and $parent to belong to Smarty_Internal_Data -- added Smarty::registerCacheResource() for dynamic cache resource object registration - -27/12/2010 -- added Smarty_CacheResource API and refactored existing cache resources accordingly -- added Smarty_CacheResource_Custom and Smarty_CacheResource_Mysql - -26/12/2010 -- added Smarty_Resource API and refactored existing resources accordingly -- added Smarty_Resource_Custom and Smarty_Resource_Mysql -- bugfix Smarty::createTemplate() to return properly cloned template instances - -24/12/2010 -- optimize smarty_function_escape_special_chars() for PHP >= 5.2.3 - -===== SVN 3.0 trunk ===== -14/05/2011 -- bugfix error handling at stream resources - -13/05/2011 -- bugfix condition starting with "-" did fail at {if} and {while} tags - -22/04/2011 -- bugfix allow only fixed string as file attribute at {extends} tag - -01/04/2011 -- bugfix do not run filters and default modifier when displaying the debug template -- bugfix of embedded double quotes within multi line strings (""") - -29/03/2011 -- bugfix on error message in smarty_internal_compile_block.php -- bugfix mb handling in strip modifier -- bugfix for Smarty2 style registered compiler function on unnamed attribute passing like {tag $foo $bar} - -17/03/2011 -- bugfix on default {function} parameters when {function} was used in nocache sections -- bugfix on compiler object destruction. compiler_object property was by mistake unset. - -09/03/2011 --bugfix a variable filter should run before modifiers on an output tag (see change of 23/07/2010) - -08/03/2011 -- bugfix loading config file without section should load only defaults - -03/03/2011 -- bugfix "smarty" template variable was not recreated when cached templated had expired -- bugfix internal rendered_content must be cleared after subtemplate was included - -01/03/2011 -- bugfix replace modifier did not work in 3.0.7 on systems without multibyte support -- bugfix {$smarty.template} could return in 3.0.7 parent template name instead of - child name when it needed to compile - -25/02/2011 -- bugfix for Smarty2 style compiler plugins on unnamed attribute passing like {tag $foo $bar} - -24/02/2011 -- bugfix $smarty->clearCache('some.tpl') did by mistake cache the template object - -18/02/2011 -- bugfix removed possible race condition when isCached() was called for an individually cached subtemplate -- bugfix force default debug.tpl to be loaded by the file resource - -17/02/2011 --improvement not to delete files starting with '.' from cache and template_c folders on clearCompiledTemplate() and clearCache() - -16/02/2011 --fixed typo in exception message of Smarty_Internal_Template --improvement allow leading spaces on } tag closing if auto_literal is enabled - -13/02/2011 -- bufix replace $smarty->triggerError() by exception -- removed obsolete {popup_init..} plugin from demo templates -- bugfix replace $smarty->triggerError() by exception in smarty_internal_resource_extends.php - -===== Smarty 3.0.7 ===== -09/02/2011 -- patched vulnerability when using {$smarty.template} - -01/02/2011 -- removed assert() from config and template parser - -31/01/2011 -- bugfix the lexer/parser did fail on special characters like VT - -16/01/2011 --bugfix of ArrayAccess object handling in internal _count() method --bugfix of Iterator object handling in internal _count() method - -14/01/2011 --bugfix removed memory leak while processing compileAllTemplates - -12/01/2011 -- bugfix in {if} and {while} tag compiler when using assignments as condition and nocache mode - -10/01/2011 -- bugfix when using {$smarty.block.child} and name of {block} was in double quoted string -- bugfix updateParentVariables() was called twice when leaving {include} processing - -- bugfix mb_str_replace in replace and escape modifiers work with utf8 - -31/12/2010 -- bugfix dynamic configuration of $debugging_crtl did not work -- bugfix default value of $config_read_hidden changed to false -- bugfix format of attribute array on compiler plugins -- bugfix getTemplateVars() could return value from wrong scope - -28/12/2010 -- bugfix multiple {append} tags failed to compile. - -22/12/2010 -- update do not clone the Smarty object an internal createTemplate() calls to increase performance - -21/12/2010 -- update html_options to support class and id attrs - -17/12/2010 -- bugfix added missing support of $cache_attrs for registered plugins - -15/12/2010 -- bugfix assignment as condition in {while} did drop an E_NOTICE - -14/12/2010 -- bugfix when passing an array as default parameter at {function} tag - -13/12/2010 -- bugfix {$smarty.template} in child template did not return right content -- bugfix Smarty3 did not search the PHP include_path for template files - -===== Smarty 3.0.6 ===== - -12/12/2010 -- bugfix fixed typo regarding yesterdays change to allow streamWrapper - -11/12/2010 -- bugfix nested block tags in template inheritance child templates did not work correctly -- bugfix {$smarty.current_dir} in child template did not point to dir of child template -- bugfix changed code when writing temporary compiled files to allow stream_wrapper - -06/12/2010 -- bugfix getTemplateVars() should return 'null' instead dropping E_NOTICE on an unassigned variable - -05/12/2010 -- bugfix missing declaration of $smarty in Smarty class -- bugfix empty($foo) in {if} did drop a notice when $foo was not assigned - -01/12/2010 -- improvement of {debug} tag output - -27/11/2010 --change run output filter before cache file is written. (same as in Smarty2) - -24/11/2011 --bugfix on parser at !$foo|modifier --change parser logic when assignments used as condition in {if] and {while} to allow assign to array element - -23/11/2011 --bugfix allow integer as attribute name in plugin calls --change trimm whitespace from error message, removed long list of expected tokens - -22/11/2010 -- bugfix on template inheritance when an {extends} tag was inserted by a prefilter -- added error message for illegal variable file attributes at {extends...} tags - -===== Smarty 3.0.5 ===== - - -19/11/2010 -- bugfix on block plugins with modifiers - -18/11/2010 -- change on handling of unassigned template variable -- default will drop E_NOTICE -- bugfix on Smarty2 wrapper load_filter() did not work - -17/11/2010 -- bugfix on {call} with variable function name -- bugfix on {block} if name did contain '-' -- bugfix in function.fetch.php , referece to undefined $smarty - -16/11/2010 -- bugfix whitespace in front of "<?php" in smarty_internal_compile_private_block_plugin.php -- bugfix {$smarty.now} did compile incorrectly -- bugfix on reset(),end(),next(),prev(),current() within templates -- bugfix on default parameter for {function} - -15/11/2010 -- bugfix when using {$smarty.session} as object -- bugfix scoping problem on $smarty object passed to filters -- bugfix captured content could not be accessed globally -- bugfix Smarty2 wrapper functions could not be call from within plugins - -===== Smarty 3.0.4 ===== - -14/11/2010 -- bugfix isset() did not allow multiple parameter -- improvment of some error messages -- bugfix html_image did use removed property $request_use_auto_globals -- small performace patch in Smarty class - -13/11/2010 -- bugfix overloading problem when $smarty->fetch()/display() have been used in plugins - (introduced with 3.0.2) -- code cleanup - -===== Smarty 3.0.3 ===== - -13/11/2010 -- bugfix on {debug} -- reverted location of loadPlugin() to Smarty class -- fixed comments in plugins -- fixed internal_config (removed unwanted code line) -- improvement remove last linebreak from {function} definition - -===== Smarty 3.0.2 ===== - -12/11/2010 -- reactivated $error_reporting property handling -- fixed typo in compile_continue -- fixed security in {fetch} plugin -- changed back plugin parameters to two. second is template object - with transparent access to Smarty object -- fixed {config_load} scoping form compile time to run time - -===== Smarty 3.0.0 ===== - - - -11/11/2010 -- major update including some API changes - -10/11/2010 -- observe compile_id also for config files - -09/11/2010 --bugfix on complex expressions as start value for {for} tag -request_use_auto_globals -04/11/2010 -- bugfix do not allow access of dynamic and private object members of assigned objects when - security is enabled. - -01/11/2010 -- bugfix related to E_NOTICE change. {if empty($foo)} did fail when $foo contained a string - -28/10/2010 -- bugfix on compiling modifiers within $smarty special vars like {$smarty.post.{$foo|lower}} - -27/10/2010 -- bugfix default parameter values did not work for template functions included with {include} - -25/10/2010 -- bugfix for E_NOTICE change, array elements did not work as modifier parameter - -20/10/2010 -- bugfix for the E_NOTICE change - -19/10/2010 -- change Smarty does no longer mask out E_NOTICE by default during template processing - -13/10/2010 -- bugfix removed ambiguity between ternary and stream variable in template syntax -- bugfix use caching properties of template instead of smarty object when compiling child {block} -- bugfix {*block}...{/block*} did throw an exception in template inheritance -- bugfix on template inheritance using nested eval or string resource in {extends} tags -- bugfix on output buffer handling in isCached() method - -===== RC4 ===== - -01/10/2010 -- added {break} and {continue} tags for flow control of {foreach},{section},{for} and {while} loops -- change of 'string' resource. It's no longer evaluated and compiled files are now stored -- new 'eval' resource which evaluates a template without saving the compiled file -- change in isCached() method to allow multiple calls for the same template - -25/09/2010 -- bugfix on some compiling modifiers - -24/09/2010 -- bugfix merge_compiled_includes flag was not restored correctly in {block} tag - -22/09/2010 -- bugfix on default modifier - -18/09/2010 -- bugfix untility compileAllConfig() did not create sha1 code for compiled template file names if template_dir was defined with no trailing DS -- bugfix on templateExists() for extends resource - -17/09/2010 -- bugfix {$smarty.template} and {$smarty.current_dir} did not compile correctly within {block} tags -- bugfix corrected error message on missing template files in extends resource -- bugfix untility compileAllTemplates() did not create sha1 code for compiled template file names if template_dir was defined with no trailing DS - -16/09/2010 -- bugfix when a doublequoted modifier parameter did contain Smarty tags and ':' - -15/09/2010 -- bugfix resolving conflict between '<%'/'%>' as custom Smarty delimiter and ASP tags -- use ucfirst for resource name on internal resource class names - -12/09/2010 -- bugfix for change of 08/09/2010 (final {block} tags in subtemplates did not produce correct results) - -10/09/2010 -- bugfix for change of 08/09/2010 (final {block} tags in subtemplates did not produce correct results) - -08/09/2010 -- allow multiple template inheritance branches starting in subtemplates - -07/09/2010 -- bugfix {counter} and {cycle} plugin assigned result to smarty variable not in local(template) scope -- bugfix templates containing just {strip} {/strip} tags did produce an error - - -23/08/2010 -- fixed E_STRICT errors for uninitialized variables - -22/08/2010 -- added attribute cache_id to {include} tag - -13/08/2010 -- remove exception_handler property from Smarty class -- added Smarty's own exceptions SmartyException and SmartyCompilerException - -09/08/2010 -- bugfix on modifier with doublequoted strings as parameter containing embedded tags - -06/08/2010 -- bugfix when cascading some modifier like |strip|strip_tags modifier - -05/08/2010 -- added plugin type modifiercompiler to produce compiled modifier code -- changed standard modifier plugins to the compiling versions whenever possible -- bugfix in nocache sections {include} must not cache the subtemplate - -02/08/2010 -- bugfix strip did not work correctly in conjunction with comment lines - -31/07/2010 -- bugfix on nocache attribute at {assign} and {append} - -30/07/2010 -- bugfix passing scope attributes in doublequoted strings did not work at {include} {assign} and {append} - -25/07/2010 -- another bugfix of change from 23/07/2010 when compiling modifier - -24/07/2010 -- bugfix of change from 23/07/2010 when compiling modifier - -23/07/2010 -- changed execution order. A variable filter does now run before modifiers on output of variables -- bugfix use always { and } as delimiter for debug.tpl - - -22/07/2010 -- bugfix in templateExists() method - -20/07/2010 -- fixed handling of { strip } tag with whitespaces - -15/07/2010 -- bufix {$smarty.template} does include now the relative path, not just filename - -===== RC3 ===== - - - - -15/07/2010 -- make the date_format modifier work also on objects of the DateTime class -- implementation of parsetrees in the parser to close security holes and remove unwanted empty line in HTML output - -08/07/2010 -- bugfix on assigning multidimensional arrays within templates -- corrected bugfix for truncate modifier - -07/07/2010 -- bugfix the truncate modifier needs to check if the string is utf-8 encoded or not -- bugfix support of script files relative to trusted_dir - -06/07/2010 -- create exception on recursive {extends} calls -- fixed reported line number at "unexpected closing tag " exception -- bugfix on escape:'mail' modifier -- drop exception if 'item' variable is equal 'from' variable in {foreach} tag - -01/07/2010 -- removed call_user_func_array calls for optimization of compiled code when using registered modifiers and plugins - -25/06/2010 -- bugfix escaping " when block tags are used within doublequoted strings - -24/06/2010 -- replace internal get_time() calls with standard PHP5 microtime(true) calls in Smarty_Internal_Utility -- added $smarty->register->templateClass() and $smarty->unregister->templateClass() methods for supporting static classes with namespace - - -22/06/2010 -- allow spaces between typecast and value in template syntax -- bugfix get correct count of traversables in {foreach} tag - -21/06/2010 -- removed use of PHP shortags SMARTY_PHP_PASSTHRU mode -- improved speed of cache->clear() when a compile_id was specified and use_sub_dirs is true - -20/06/2010 -- replace internal get_time() calls with standard PHP5 microtime(true) calls -- closed security hole when php.ini asp_tags = on - -18/06/2010 -- added __toString method to the Smarty_Variable class - - -14/06/2010 -- make handling of Smarty comments followed by newline BC to Smarty2 - - -===== RC2 ===== - - - -13/06/2010 -- bugfix Smarty3 did not handle hexadecimals like 0x0F as numerical value -- bugifx Smarty3 did not accept numerical constants like .1 or 2. (without a leading or trailing digit) - -11/06/2010 -- bugfix the lexer did fail on larger {literal} ... {/literal} sections - -03/06/2010 -- bugfix on calling template functions like Smarty tags - -01/06/2010 -- bugfix on template functions used with template inheritance -- removed /* vim: set expandtab: */ comments -- bugfix of auto literal problem introduce with fix of 31/05/2010 - -31/05/2010 -- bugfix the parser did not allow some smarty variables with special name like $for, $if, $else and others. - -27/05/2010 -- bugfix on object chaining using variable properties -- make scope of {counter} and {cycle} tags again global as in Smarty2 - -26/05/2010 -- bugfix removed decrepated register_resource call in smarty_internal_template.php - -25/05/2010 -- rewrite of template function handling to improve speed -- bugfix on file dependency when merge_compiled_includes = true - - -16/05/2010 -- bugfix when passing parameter with numeric name like {foo 1='bar' 2='blar'} - -14/05/2010 -- bugfix compile new config files if compile_check and force_compile = false -- added variable static classes names to template syntax - -11/05/2010 -- bugfix make sure that the cache resource is loaded in all conditions when template methods getCached... are called externally -- reverted the change 0f 30/04/2010. With the exception of forward references template functions can be again called by a standard tag. - -10/05/2010 -- bugfix on {foreach} and {for} optimizations of 27/04/2010 - -09/05/2010 -- update of template and config file parser because of minor parser generator bugs - -07/05/2010 -- bugfix on {insert} - -06/05/2010 -- bugfix when merging compiled templates and objects are passed as parameter of the {include} tag - -05/05/2010 -- bugfix on {insert} to cache parameter -- implementation of $smarty->default_modifiers as in Smarty2 -- bugfix on getTemplateVars method - -01/05/2010 -- bugfix on handling of variable method names at object chaning - -30/04/2010 -- bugfix when comparing timestamps in sysplugins/smarty_internal_config.php -- work around of a substr_compare bug in older PHP5 versions -- bugfix on template inheritance for tag names starting with "block" -- bugfix on {function} tag with name attribute in doublequoted strings -- fix to make calling of template functions unambiguously by madatory usage of the {call} tag - -===== RC1 ===== - -27/04/2010 -- change default of $debugging_ctrl to 'NONE' -- optimization of compiled code of {foreach} and {for} loops -- change of compiler for config variables - -27/04/2010 -- bugfix in $smarty->cache->clear() method. (do not cache template object) - - -17/04/2010 -- security fix in {math} plugin - - -12/04/2010 -- bugfix in smarty_internal_templatecompilerbase (overloaded property) -- removed parser restrictions in using true,false and null as ID - -07/04/2010 -- bugfix typo in smarty_internal_templatecompilerbase - -31/03/2010 -- compile locking by touching old compiled files to avoid concurrent compilations - -29/03/2010 -- bugfix allow array definitions as modifier parameter -- bugfix observe compile_check property when loading config files -- added the template object as third filter parameter - -25/03/2010 -- change of utility->compileAllTemplates() log messages -- bugfix on nocache code in {function} tags -- new method utility->compileAllConfig() to compile all config files - -24/03/2010 -- bugfix on register->modifier() error messages - -23/03/2010 -- bugfix on template inheritance when calling multiple child/parent relations -- bugfix on caching mode SMARTY_CACHING_LIFETIME_SAVED and cache_lifetime = 0 - -22/03/2010 -- bugfix make directory separator operating system independend in compileAllTemplates() - -21/03/2010 -- removed unused code in compileAllTemplates() - -19/03/2010 -- bugfix for multiple {/block} tags on same line - -17/03/2010 -- bugfix make $smarty->cache->clear() function independent from caching status - -16/03/2010 -- bugfix on assign attribute at registered template objects -- make handling of modifiers on expression BC to Smarty2 - -15/03/2010 -- bugfix on block plugin calls - -11/03/2010 -- changed parsing of <?php and ?> back to Smarty2 behaviour - -08/03/2010 -- bugfix on uninitialized properties in smarty_internal_template -- bugfix on $smarty->disableSecurity() - -04/03/2010 -- bugfix allow uppercase chars in registered resource names -- bugfix on accessing chained objects of static classes - -01/03/2010 -- bugfix on nocache code in {block} tags if child template was included by {include} - -27/02/2010 -- allow block tags inside double quoted string - -26/02/2010 -- cache modified check implemented -- support of access to a class constant from an object (since PHP 5.3) - -24/02/2010 -- bugfix on expressions in doublequoted string enclosed in backticks -- added security property $static_classes for static class security - -18/02/2010 -- bugfix on parsing Smarty tags inside <?xml ... ?> -- bugfix on truncate modifier - -17/02/2010 -- removed restriction that modifiers did require surrounding parenthesis in some cases -- added {$smarty.block.child} special variable for template inheritance - -16/02/2010 -- bugfix on <?xml ... ?> tags for all php_handling modes -- bugfix on parameter of variablefilter.htmlspecialchars.php plugin - -14/02/2010 -- added missing _plugins property in smarty.class.php -- bugfix $smarty.const... inside doublequoted strings and backticks was compiled into wrong PHP code - -12/02/2010 -- bugfix on nested {block} tags -- changed Smarty special variable $smarty.parent to $smarty.block.parent -- added support of nested {bock} tags - -10/02/2010 -- avoid possible notice on $smarty->cache->clear(...), $smarty->clear_cache(....) -- allow Smarty tags inside <? ... ?> tags in SMARTY_PHP_QUOTE and SMARTY_PHP_PASSTHRU mode -- bugfix at new "for" syntax like {for $x=1 to 10 step 2} - -09/02/2010 -- added $smarty->_tag_stack for tracing block tag hierarchy - -08/02/2010 -- bugfix use template fullpath at §smarty->cache->clear(...), $smarty->clear_cache(....) -- bugfix of cache filename on extended templates when force_compile=true - -07/02/2010 -- bugfix on changes of 05/02/2010 -- preserve line endings type form template source -- API changes (see README file) - -05/02/2010 -- bugfix on modifier and block plugins with same name - -02/02/2010 -- retaining newlines at registered functions and function plugins - -01/25/2010 -- bugfix cache resource was not loaded when caching was globally off but enabled at a template object -- added test that $_SERVER['SCRIPT_NAME'] does exist in Smarty.class.php - -01/22/2010 -- new method $smarty->createData([$parent]) for creating a data object (required for bugfixes below) -- bugfix config_load() method now works also on a data object -- bugfix get_config_vars() method now works also on a data and template objects -- bugfix clear_config() method now works also on a data and template objects - -01/19/2010 -- bugfix on plugins if same plugin was called from a nocache section first and later from a cached section - - -###beta 7### - - -01/17/2010 -- bugfix on $smarty.const... in double quoted strings - -01/16/2010 -- internal change of config file lexer/parser on handling of section names -- bugfix on registered objects (format parameter of register_object was not handled correctly) - -01/14/2010 -- bugfix on backslash within single quoted strings -- bugfix allow absolute filepath for config files -- bugfix on special Smarty variable $smarty.cookies -- revert handling of newline on no output tags like {if...} -- allow special characters in config file section names for Smarty2 BC - -01/13/2010 -- bugfix on {if} tags - -01/12/2010 -- changed back modifier handling in parser. Some restrictions still apply: - if modifiers are used in side {if...} expression or in mathematical expressions - parentheses must be used. -- bugfix the {function..} tag did not accept the name attribute in double quotes -- closed possible security hole at <?php ... ?> tags -- bugfix of config file parser on large config files - - -###beta 6#### - -01/11/2010 -- added \n to the compiled code of the {if},{else},{elseif},{/if} tags to get output of newlines as expected by the template source -- added missing support of insert plugins -- added optional nocache attribute to {block} tags in parent template -- updated <?php...?> handling supporting now heredocs and newdocs. (thanks to Thue Jnaus Kristensen) - -01/09/2010 -- bugfix on nocache {block} tags in parent templates - -01/08/2010 -- bugfix on variable filters. filter/nofilter attributes did not work on output statements - -01/07/2010 -- bugfix on file dependency at template inheritance -- bugfix on nocache code at template inheritance - -01/06/2010 -- fixed typo in smarty_internal_resource_registered -- bugfix for custom delimiter at extends resource and {extends} tag - -01/05/2010 -- bugfix sha1() calculations at extends resource and some general improvments on sha1() handling - - -01/03/2010 -- internal change on building cache files - -01/02/2010 -- update cached_timestamp at the template object after cache file is written to avoid possible side effects -- use internally always SMARTY_CACHING_LIFETIME_* constants - -01/01/2010 -- bugfix for obtaining plugins which must be included (related to change of 12/30/2009) -- bugfix for {php} tag (trow an exception if allow_php_tag = false) - -12/31/2009 -- optimization of generated code for doublequoted strings containing variables -- rewrite of {function} tag handling - - can now be declared in an external subtemplate - - can contain nocache sections (nocache_hash handling) - - can be called in noccache sections (nocache_hash handling) - - new {call..} tag to call template functions with a variable name {call name=$foo} -- fixed nocache_hash handling in merged compiled templates - -12/30/2009 -- bugfix for plugins defined in the script as smarty_function_foo - -12/29/2009 -- use sha1() for filepath encoding -- updates on nocache_hash handling -- internal change on merging some data -- fixed cache filename for custom resources - -12/28/2009 -- update for security fixes -- make modifier plugins always trusted -- fixed bug loading modifiers in child template at template inheritance - -12/27/2009 ---- this is a major update with a couple of internal changes --- -- new config file lexer/parser (thanks to Thue Jnaus Kristensen) -- template lexer/parser fixes for PHP and {literal} handing (thanks to Thue Jnaus Kristensen) -- fix on registered plugins with different type but same name -- rewrite of plugin handling (optimized execution speed) -- closed a security hole regarding PHP code injection into cache files -- fixed bug in clear cache handling -- Renamed a couple of internal classes -- code cleanup for merging compiled templates -- couple of runtime optimizations (still not all done) -- update of getCachedTimestamp() -- fixed bug on modifier plugins at nocache output - -12/19/2009 -- bugfix on comment lines in config files - -12/17/2009 -- bugfix of parent/global variable update at included/merged subtemplates -- encode final template filepath into filename of compiled and cached files -- fixed {strip} handling in auto literals - -12/16/2009 -- update of changelog -- added {include file='foo.tpl' inline} inline option to merge compiled code of subtemplate into the calling template - -12/14/2009 -- fixed sideefect of last modification (objects in array index did not work anymore) - -12/13/2009 -- allow boolean negation ("!") as operator on variables outside {if} tag - -12/12/2009 -- bugfix on single quotes inside {function} tag -- fix short append/prepend attributes in {block} tags - -12/11/2009 -- bugfix on clear_compiled_tpl (avoid possible warning) - -12/10/2009 -- bugfix on {function} tags and template inheritance - -12/05/2009 -- fixed problem when a cached file was fetched several times -- removed unneeded lexer code - -12/04/2009 -- added max attribute to for loop -- added security mode allow_super_globals - -12/03/2009 -- template inheritance: child templates can now call functions defined by the {function} tag in the parent template -- added {for $foo = 1 to 5 step 2} syntax -- bugfix for {$foo.$x.$y.$z} - -12/01/2009 -- fixed parsing of names of special formated tags like if,elseif,while,for,foreach -- removed direct access to constants in templates because of some syntax problems -- removed cache resource plugin for mysql from the distribution -- replaced most hard errors (exceptions) by softerrors(trigger_error) in plugins -- use $template_class property for template class name when compiling {include},{eval} and {extends} tags - -11/30/2009 -- map 'true' to SMARTY_CACHING_LIFETIME_CURRENT for the $smarty->caching parameter -- allow {function} tags within {block} tags - -11/28/2009 -- ignore compile_id at debug template -- added direct access to constants in templates -- some lexer/parser optimizations - -11/27/2009 -- added cache resource MYSQL plugin - -11/26/2009 -- bugfix on nested doublequoted strings -- correct line number on unknown tag error message -- changed {include} compiled code -- fix on checking dynamic varibales with error_unassigned = true - -11/25/2009 -- allow the following writing for boolean: true, TRUE, True, false, FALSE, False -- {strip} tag functionality rewritten - -11/24/2009 -- bugfix for $smarty->config_overwrite = false - -11/23/2009 -- suppress warnings on unlink caused by race conditions -- correct line number on unknown tag error message - -------- beta 5 -11/23/2009 -- fixed configfile parser for text starting with a numeric char -- the default_template_handler_func may now return a filepath to a template source - -11/20/2009 -- bugfix for empty config files -- convert timestamps of registered resources to integer - -11/19/2009 -- compiled templates are no longer touched with the filemtime of template source - -11/18/2009 -- allow integer as attribute name in plugin calls - -------- beta 4 -11/18/2009 -- observe umask settings when setting file permissions -- avoide unneeded cache file creation for subtemplates which did occur in some situations -- make $smarty->_current_file available during compilation for Smarty2 BC - -11/17/2009 -- sanitize compile_id and cache_id (replace illegal chars with _) -- use _dir_perms and _file_perms properties at file creation -- new constant SMARTY_RESOURCE_DATE_FORMAT (default '%b %e, %Y') which is used as default format in modifier date_format -- added {foreach $array as $key=>$value} syntax -- renamed extend tag and resource to extends: {extends file='foo.tol'} , $smarty->display('extends:foo.tpl|bar.tpl); -- bugfix cycle plugin - -11/15/2009 -- lexer/parser optimizations on quoted strings - -11/14/2009 -- bugfix on merging compiled templates when source files got removed or renamed. -- bugfix modifiers on registered object tags -- fixed locaion where outputfilters are running -- fixed config file definitions at EOF -- fix on merging compiled templates with nocache sections in nocache includes -- parser could run into a PHP error on wrong file attribute - -11/12/2009 -- fixed variable filenames in {include_php} and {insert} -- added scope to Smarty variables in the {block} tag compiler -- fix on nocache code in child {block} tags - -11/11/2009 -- fixed {foreachelse}, {forelse}, {sectionelse} compiled code at nocache variables -- removed checking for reserved variables -- changed debugging handling - -11/10/2009 -- fixed preg_qoute on delimiters - -11/09/2009 -- lexer/parser bugfix -- new SMARTY_SPL_AUTOLOAD constant to control the autoloader option -- bugfix for {function} block tags in included templates - -11/08/2009 -- fixed alphanumeric array index -- bugfix on complex double quoted strings - -11/05/2009 -- config_load method can now be called on data and template objects - -11/04/2009 -- added typecasting support for template variables -- bugfix on complex indexed special Smarty variables - -11/03/2009 -- fixed parser error on objects with special smarty vars -- fixed file dependency for {incude} inside {block} tag -- fixed not compiling on non existing compiled templates when compile_check = false -- renamed function names of autoloaded Smarty methods to Smarty_Method_.... -- new security_class property (default is Smarty_Security) - -11/02/2009 -- added neq,lte,gte,mod as aliases to if conditions -- throw exception on illegal Smarty() constructor calls - -10/31/2009 -- change of filenames in sysplugins folder for internal spl_autoload function -- lexer/parser changed for increased compilation speed - -10/27/2009 -- fixed missing quotes in include_php.php - -10/27/2009 -- fixed typo in method.register_resource -- pass {} through as literal - -10/26/2009 -- merge only compiled subtemplates into the compiled code of the main template - -10/24/2009 -- fixed nocache vars at internal block tags -- fixed merging of recursive includes - -10/23/2009 -- fixed nocache var problem - -10/22/2009 -- fix trimwhitespace outputfilter parameter - -10/21/2009 -- added {$foo++}{$foo--} syntax -- buxfix changed PHP "if (..):" to "if (..){" because of possible bad code when concenating PHP tags -- autoload Smarty internal classes -- fixed file dependency for config files -- some code optimizations -- fixed function definitions on some autoloaded methods -- fixed nocache variable inside if condition of {if} tag - -10/20/2009 -- check at compile time for variable filter to improve rendering speed if no filter is used -- fixed bug at combination of {elseif} tag and {...} in double quoted strings of static class parameter - -10/19/2009 -- fixed compiled template merging on variable double quoted strings as name -- fixed bug in caching mode 2 and cache_lifetime -1 -- fixed modifier support on block tags - -10/17/2009 -- remove ?>\n<?php and ?><?php sequences from compiled template - -10/15/2009 -- buxfix on assigning array elements inside templates -- parser bugfix on array access - -10/15/2009 -- allow bit operator '&' inside {if} tag -- implementation of ternary operator - -10/13/2009 -- do not recompile evaluated templates if reused just with other data -- recompile config files when config properties did change -- some lexer/parser otimizations - -10/11/2009 -- allow {block} tags inside included templates -- bugfix for resource plugins in Smarty2 format -- some optimizations of internal.template.php - -10/11/2009 -- fixed bug when template with same name is used with different data objects -- fixed bug with double quoted name attribute at {insert} tag -- reenabled assign_by_ref and append_by_ref methods - -10/07/2009 -- removed block nesting checks for {capture} - -10/05/2009 -- added support of "isinstance" to {if} tag - -10/03/2009 -- internal changes to improve performance -- fix registering of filters for classes - -10/01/2009 -- removed default timezone setting -- reactivated PHP resource for simple PHP templates. Must set allow_php_templates = true to enable -- {PHP} tag can be enabled by allow_php_tag = true - -09/30/2009 -- fixed handling template_exits method for all resource types -- bugfix for other cache resources than file -- the methods assign_by_ref is now wrapped to assign, append_by_ref to append -- allow arrays of variables pass in display, fetch and createTemplate calls - $data = array('foo'=>'bar','foo2'=>'blar'); - $smarty->display('my.tpl',$data); - -09/29/2009 -- changed {php} tag handling -- removed support of Smarty::instance() -- removed support of PHP resource type -- improved execution speed of {foreach} tags -- fixed bug in {section} tag - -09/23/2009 -- improvements and bugfix on {include} tag handling -NOTICE: existing compiled template and cache files must be deleted - -09/19/2009 -- replace internal "eval()" calls by "include" during rendering process -- speed improvment for templates which have included subtemplates - the compiled code of included templates is merged into the compiled code of the parent template -- added logical operator "xor" for {if} tag -- changed parameter ordering for Smarty2 BC - fetch($template, $cache_id = null, $compile_id = null, $parent = null) - display($template, $cache_id = null, $compile_id = null, $parent = null) - createTemplate($template, $cache_id = null, $compile_id = null, $parent = null) -- property resource_char_set is now replaced by constant SMARTY_RESOURCE_CHAR_SET -- fixed handling of classes in registered blocks -- speed improvement of lexer on text sections - -09/01/2009 -- dropped nl2br as plugin -- added '<>' as comparission operator in {if} tags -- cached caching_lifetime property to cache_liftime for backward compatibility with Smarty2. - {include} optional attribute is also now cache_lifetime -- fixed trigger_error method (moved into Smarty class) -- version is now Beta!!! - - -08/30/2009 -- some speed optimizations on loading internal plugins - - -08/29/2009 -- implemented caching of registered Resources -- new property 'auto_literal'. if true(default) '{ ' and ' }' interpreted as literal, not as Smarty delimiter - - -08/28/2009 -- Fix on line breaks inside {if} tags - -08/26/2009 -- implemented registered resources as in Smarty2. NOTE: caching does not work yet -- new property 'force_cache'. if true it forces the creation of a new cache file -- fixed modifiers on arrays -- some speed optimization on loading internal classes - - -08/24/2009 -- fixed typo in lexer definition for '!==' operator -- bugfix - the ouput of plugins was not cached -- added global variable SCRIPT_NAME - -08/21/2009 -- fixed problems whitespace in conjuction with custom delimiters -- Smarty tags can now be used as value anywhere - -08/18/2009 -- definition of template class name moded in internal.templatebase.php -- whitespace parser changes - -08/12/2009 -- fixed parser problems - -08/11/2009 -- fixed parser problems with custom delimiter - -08/10/2009 -- update of mb support in plugins - - -08/09/2009 -- fixed problems with doublequoted strings at name attribute of {block} tag -- bugfix at scope attribute of {append} tag - -08/08/2009 -- removed all internal calls of Smarty::instance() -- fixed code in double quoted strings - -08/05/2009 -- bugfix mb_string support -- bugfix of \n.\t etc in double quoted strings - -07/29/2009 -- added syntax for variable config vars like #$foo# - -07/28/2009 -- fixed parsing of $smarty.session vars containing objects - -07/22/2009 -- fix of "$" handling in double quoted strings - -07/21/2009 -- fix that {$smarty.current_dir} return correct value within {block} tags. - -07/20/2009 -- drop error message on unmatched {block} {/block} pairs - -07/01/2009 -- fixed smarty_function_html_options call in plugin function.html_select_date.php (missing ,) - -06/24/2009 -- fixed smarty_function_html_options call in plugin function.html_select_date.php - -06/22/2009 -- fix on \n and spaces inside smarty tags -- removed request_use_auto_globals propert as it is no longer needed because Smarty 3 will always run under PHP 5 - - -06/18/2009 -- fixed compilation of block plugins when caching enabled -- added $smarty.current_dir which returns the current working directory - -06/14/2009 -- fixed array access on super globals -- allow smarty tags within xml tags - -06/13/2009 -- bugfix at extend resource: create unique files for compiled template and cache for each combination of template files -- update extend resource to handle appen and prepend block attributes -- instantiate classes of plugins instead of calling them static - -06/03/2009 -- fixed repeat at block plugins - -05/25/2009 -- fixed problem with caching of compiler plugins - -05/14/2009 -- fixed directory separator handling - -05/09/2009 -- syntax change for stream variables -- fixed bug when using absolute template filepath and caching - -05/08/2009 -- fixed bug of {nocache} tag in included templates - -05/06/2009 -- allow that plugins_dir folder names can end without directory separator - -05/05/2009 -- fixed E_STRICT incompabilities -- {function} tag bug fix -- security policy definitions have been moved from plugins folder to file Security.class.php in libs folder -- added allow_super_global configuration to security - -04/30/2009 -- functions defined with the {function} tag now always have global scope - -04/29/2009 -- fixed problem with directory setter methods -- allow that cache_dir can end without directory separator - -04/28/2009 -- the {function} tag can no longer overwrite standard smarty tags -- inherit functions defined by the {fuction} tag into subtemplates -- added {while <statement>} sytax to while tag - -04/26/2009 -- added trusted stream checking to security -- internal changes at file dependency check for caching - -04/24/2009 -- changed name of {template} tag to {function} -- added new {template} tag - -04/23/2009 -- fixed access of special smarty variables from included template - -04/22/2009 -- unified template stream syntax with standard Smarty resource syntax $smarty->display('mystream:mytemplate') - -04/21/2009 -- change of new style syntax for forach. Now: {foreach $array as $var} like in PHP - -04/20/2009 -- fixed "$foo.bar ..." variable replacement in double quoted strings -- fixed error in {include} tag with variable file attribute - -04/18/2009 -- added stream resources ($smarty->display('mystream://mytemplate')) -- added stream variables {$mystream:myvar} - -04/14/2009 -- fixed compile_id handling on {include} tags -- fixed append/prepend attributes in {block} tag -- added {if 'expression' is in 'array'} syntax -- use crc32 as hash for compiled config files. - -04/13/2009 -- fixed scope problem with parent variables when appending variables within templates. -- fixed code for {block} without childs (possible sources for notice errors removed) - -04/12/2009 -- added append and prepend attribute to {block} tag - -04/11/2009 -- fixed variables in 'file' attribute of {extend} tag -- fixed problems in modifiers (if mb string functions not present) - -04/10/2009 -- check if mb string functions available otherwise fallback to normal string functions -- added global variable scope SMARTY_GLOBAL_SCOPE -- enable 'variable' filter by default -- fixed {$smarty.block.parent.foo} -- implementation of a 'variable' filter as replacement for default modifier - -04/09/2009 -- fixed execution of filters defined by classes -- compile the always the content of {block} tags to make shure that the filters are running over it -- syntax corrections on variable object property -- syntax corrections on array access in dot syntax - -04/08/2009 -- allow variable object property - -04/07/2009 -- changed variable scopes to SMARTY_LOCAL_SCOPE, SMARTY_PARENT_SCOPE, SMARTY_ROOT_SCOPE to avoid possible conflicts with user constants -- Smarty variable global attribute replaced with scope attribute - -04/06/2009 -- variable scopes LOCAL_SCOPE, PARENT_SCOPE, ROOT_SCOPE -- more getter/setter methods - -04/05/2009 -- replaced new array looping syntax {for $foo in $array} with {foreach $foo in $array} to avoid confusion -- added append array for short form of assign {$foo[]='bar'} and allow assignments to nested arrays {$foo['bla']['blue']='bar'} - -04/04/2009 -- make output of template default handlers cachable and save compiled source -- some fixes on yesterdays update - -04/03/2006 -- added registerDefaultTemplateHandler method and functionallity -- added registerDefaultPluginHandler method and functionallity -- added {append} tag to extend Smarty array variabled - -04/02/2009 -- added setter/getter methods -- added $foo@first and $foo@last properties at {for} tag -- added $set_timezone (true/false) property to setup optionally the default time zone - -03/31/2009 -- bugfix smarty.class and internal.security_handler -- added compile_check configuration -- added setter/getter methods - -03/30/2009 -- added all major setter/getter methods - -03/28/2009 -- {block} tags can be nested now -- md5 hash function replace with crc32 for speed optimization -- file order for exted resource inverted -- clear_compiled_tpl and clear_cache_all will not touch .svn folder any longer - -03/27/2009 -- added extend resource - -03/26/2009 -- fixed parser not to create error on `word` in double quoted strings -- allow PHP array(...) -- implemented $smarty.block.name.parent to access parent block content -- fixed smarty.class - - -03/23/2009 -- fixed {foreachelse} and {forelse} tags - -03/22/2009 -- fixed possible sources for notice errors -- rearrange SVN into distribution and development folders - -03/21/2009 -- fixed exceptions in function plugins -- fixed notice error in Smarty.class.php -- allow chained objects to span multiple lines -- fixed error in modifiers - -03/20/2009 -- moved /plugins folder into /libs folder -- added noprint modifier -- autoappend a directory separator if the xxxxx_dir definition have no trailing one - -03/19/2009 -- allow array definition as modifier parameter -- changed modifier to use multi byte string funktions. - -03/17/2009 -- bugfix - -03/15/2009 -- added {include_php} tag for BC -- removed @ error suppression -- bugfix fetch did always repeat output of first call when calling same template several times -- PHPunit tests extended - -03/13/2009 -- changed block syntax to be Smarty like {block:titel} -> {block name=titel} -- compiling of {block} and {extend} tags rewriten for better performance -- added special Smarty variable block ($smarty.block.foo} returns the parent definition of block foo -- optimization of {block} tag compiled code. -- fixed problem with escaped double quotes in double quoted strings - -03/12/2009 -- added support of template inheritance by {extend } and {block } tags. -- bugfix comments within literals -- added scope attribuie to {include} tag - -03/10/2009 -- couple of bugfixes and improvements -- PHPunit tests extended - -03/09/2009 -- added support for global template vars. {assign_global...} $smarty->assign_global(...) -- added direct_access_security -- PHPunit tests extended -- added missing {if} tag conditions like "is div by" etc. - -03/08/2009 -- splitted up the Compiler class to make it easier to use a coustom compiler -- made default plugins_dir relative to Smarty root and not current working directory -- some changes to make the lexer parser better configurable -- implemented {section} tag for Smarty2 BC - -03/07/2009 -- fixed problem with comment tags -- fixed problem with #xxxx in double quoted string -- new {while} tag implemented -- made lexer and paser class configurable as $smarty property -- Smarty method get_template_vars implemented -- Smarty method get_registered_object implemented -- Smarty method trigger_error implemented -- PHPunit tests extended - -03/06/2009 -- final changes on config variable handling -- parser change - unquoted strings will by be converted into single quoted strings -- PHPunit tests extended -- some code cleanup -- fixed problem on catenate strings with expression -- update of count_words modifier -- bugfix on comment tags - - -03/05/2009 -- bugfix on <?xml...> tag with caching enabled -- changes on exception handling (by Monte) - -03/04/2009 -- added support for config variables -- bugfix on <?xml...> tag - -03/02/2009 -- fixed unqouted strings within modifier parameter -- bugfix parsing of mofifier parameter - -03/01/2009 -- modifier chaining works now as in Smarty2 - -02/28/2009 -- changed handling of unqouted strings - -02/26/2009 -- bugfix -- changed $smarty.capture.foo to be global for Smarty2 BC. - -02/24/2009 -- bugfix {php} {/php} tags for backward compatibility -- bugfix for expressions on arrays -- fixed usage of "null" value -- added $smarty.foreach.foo.first and $smarty.foreach.foo.last - -02/06/2009 -- bugfix for request variables without index for example $smarty.get -- experimental solution for variable functions in static class - -02/05/2009 -- update of popup plugin -- added config variables to template parser (load config functions still missing) -- parser bugfix for empty quoted strings - -02/03/2009 -- allow array of objects as static class variabales. -- use htmlentities at source output at template errors. - -02/02/2009 -- changed search order on modifiers to look at plugins folder first -- parser bug fix for modifier on array elements $foo.bar|modifier -- parser bug fix on single quoted srings -- internal: splitted up compiler plugin files - -02/01/2009 -- allow method chaining on static classes -- special Smarty variables $smarty.... implemented -- added {PHP} {/PHP} tags for backward compatibility - -01/31/2009 -- added {math} plugin for Smarty2 BC -- added template_exists method -- changed Smarty3 method enable_security() to enableSecurity() to follow camelCase standards - -01/30/2009 -- bugfix in single quoted strings -- changed syntax for variable property access from $foo:property to $foo@property because of ambiguous syntax at modifiers - -01/29/2009 -- syntax for array definition changed from (1,2,3) to [1,2,3] to remove ambiguous syntax -- allow {for $foo in [1,2,3]} syntax -- bugfix in double quoted strings -- allow <?xml...?> tags in template even if short_tags are enabled - -01/28/2009 -- fixed '!==' if condition. - -01/28/2009 -- added support of {strip} {/strip} tag. - -01/27/2009 -- bug fix on backticks in double quoted strings at objects - -01/25/2009 -- Smarty2 modfiers added to SVN - -01/25/2009 -- bugfix allow arrays at object properties in Smarty syntax -- the template object is now passed as additional parameter at plugin calls -- clear_compiled_tpl method completed - -01/20/2009 -- access to class constants implemented ( class::CONSTANT ) -- access to static class variables implemented ( class::$variable ) -- call of static class methods implemented ( class::method() ) - -01/16/2009 -- reallow leading _ in variable names {$_var} -- allow array of objects {$array.index->method()} syntax -- finished work on clear_cache and clear_cache_all methods - -01/11/2009 -- added support of {literal} tag -- added support of {ldelim} and {rdelim} tags -- make code compatible to run with E_STRICT error setting - -01/08/2009 -- moved clear_assign and clear_all_assign to internal.templatebase.php -- added assign_by_ref, append and append_by_ref methods - -01/02/2009 -- added load_filter method -- fished work on filter handling -- optimization of plugin loading - -12/30/2008 -- added compiler support of registered object -- added backtick support in doubled quoted strings for backward compatibility -- some minor bug fixes and improvments - -12/23/2008 -- fixed problem of not working "not" operator in if-expressions -- added handling of compiler function plugins -- finished work on (un)register_compiler_function method -- finished work on (un)register_modifier method -- plugin handling from plugins folder changed for modifier plugins - deleted - internal.modifier.php -- added modifier chaining to parser - -12/17/2008 -- finished (un)register_function method -- finished (un)register_block method -- added security checking for PHP functions in PHP templates -- plugin handling from plugins folder rewritten - new - internal.plugin_handler.php - deleted - internal.block.php - deleted - internal.function.php -- removed plugin checking from security handler - -12/16/2008 - -- new start of this change_log file diff --git a/library/smarty/composer.json b/library/smarty/composer.json deleted file mode 100644 --- a/library/smarty/composer.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "name": "smarty/smarty", - "type": "library", - "description": "Smarty - the compiling PHP template engine", - "keywords": [ - "templating" - ], - "homepage": "http://www.smarty.net", - "license": "LGPL-3.0", - "authors": [ - { - "name": "Monte Ohrt", - "email": "monte@ohrt.com" - }, - { - "name": "Uwe Tews", - "email": "uwe.tews@googlemail.com" - }, - { - "name": "Rodney Rehm", - "email": "rodney.rehm@medialize.de" - } - ], - "support": { - "irc": "irc://irc.freenode.org/smarty", - "issues": "https://github.com/smarty-php/smarty/issues", - "forum": "http://www.smarty.net/forums/" - }, - "require": { - "php": ">=5.2" - }, - "autoload": { - "classmap": [ - "libs/Smarty.class.php", - "libs/SmartyBC.class.php", - "libs/sysplugins/" - ] - }, - "extra": { - "branch-alias": { - "dev-master": "3.1.x-dev" - } - } -} diff --git a/library/smarty/demo/configs/test.conf b/library/smarty/demo/configs/test.conf deleted file mode 100644 --- a/library/smarty/demo/configs/test.conf +++ /dev/null @@ -1,5 +0,0 @@ -title = Welcome to Smarty! -cutoff_size = 40 - -[setup] -bold = true diff --git a/library/smarty/demo/index.php b/library/smarty/demo/index.php deleted file mode 100644 --- a/library/smarty/demo/index.php +++ /dev/null @@ -1,30 +0,0 @@ -<?php -/** - * Example Application - * - * @package Example-application - */ - -require '../libs/Smarty.class.php'; - -$smarty = new Smarty; - -//$smarty->force_compile = true; -$smarty->debugging = true; -$smarty->caching = true; -$smarty->cache_lifetime = 120; - -$smarty->assign("Name", "Fred Irving Johnathan Bradley Peppergill", true); -$smarty->assign("FirstName", array("John", "Mary", "James", "Henry")); -$smarty->assign("LastName", array("Doe", "Smith", "Johnson", "Case")); -$smarty->assign("Class", array(array("A", "B", "C", "D"), array("E", "F", "G", "H"), - array("I", "J", "K", "L"), array("M", "N", "O", "P"))); - -$smarty->assign("contacts", array(array("phone" => "1", "fax" => "2", "cell" => "3"), - array("phone" => "555-4444", "fax" => "555-3333", "cell" => "760-1234"))); - -$smarty->assign("option_values", array("NY", "NE", "KS", "IA", "OK", "TX")); -$smarty->assign("option_output", array("New York", "Nebraska", "Kansas", "Iowa", "Oklahoma", "Texas")); -$smarty->assign("option_selected", "NE"); - -$smarty->display('index.tpl'); diff --git a/library/smarty/demo/plugins/cacheresource.apc.php b/library/smarty/demo/plugins/cacheresource.apc.php deleted file mode 100644 --- a/library/smarty/demo/plugins/cacheresource.apc.php +++ /dev/null @@ -1,77 +0,0 @@ -<?php - -/** - * APC CacheResource - * CacheResource Implementation based on the KeyValueStore API to use - * memcache as the storage resource for Smarty's output caching. - * * - * - * @package CacheResource-examples - * @author Uwe Tews - */ -class Smarty_CacheResource_Apc extends Smarty_CacheResource_KeyValueStore { - public function __construct() { - // test if APC is present - if (!function_exists('apc_cache_info')) { - throw new Exception('APC Template Caching Error: APC is not installed'); - } - } - - /** - * Read values for a set of keys from cache - * - * @param array $keys list of keys to fetch - * - * @return array list of values with the given keys used as indexes - * @return boolean true on success, false on failure - */ - protected function read(array $keys) { - $_res = array(); - $res = apc_fetch($keys); - foreach ($res as $k => $v) { - $_res[$k] = $v; - } - - return $_res; - } - - /** - * Save values for a set of keys to cache - * - * @param array $keys list of values to save - * @param int $expire expiration time - * - * @return boolean true on success, false on failure - */ - protected function write(array $keys, $expire = null) { - foreach ($keys as $k => $v) { - apc_store($k, $v, $expire); - } - - return true; - } - - /** - * Remove values from cache - * - * @param array $keys list of keys to delete - * - * @return boolean true on success, false on failure - */ - protected function delete(array $keys) { - foreach ($keys as $k) { - apc_delete($k); - } - - return true; - } - - /** - * Remove *all* values from cache - * - * @return boolean true on success, false on failure - */ - protected function purge() { - return apc_clear_cache('user'); - } -} diff --git a/library/smarty/demo/plugins/cacheresource.memcache.php b/library/smarty/demo/plugins/cacheresource.memcache.php deleted file mode 100644 --- a/library/smarty/demo/plugins/cacheresource.memcache.php +++ /dev/null @@ -1,91 +0,0 @@ -<?php - -/** - * Memcache CacheResource - * CacheResource Implementation based on the KeyValueStore API to use - * memcache as the storage resource for Smarty's output caching. - * Note that memcache has a limitation of 256 characters per cache-key. - * To avoid complications all cache-keys are translated to a sha1 hash. - * - * @package CacheResource-examples - * @author Rodney Rehm - */ -class Smarty_CacheResource_Memcache extends Smarty_CacheResource_KeyValueStore { - /** - * memcache instance - * - * @var Memcache - */ - protected $memcache = null; - - public function __construct() { - $this->memcache = new Memcache(); - $this->memcache->addServer('127.0.0.1', 11211); - } - - /** - * Read values for a set of keys from cache - * - * @param array $keys list of keys to fetch - * - * @return array list of values with the given keys used as indexes - * @return boolean true on success, false on failure - */ - protected function read(array $keys) { - $_keys = $lookup = array(); - foreach ($keys as $k) { - $_k = sha1($k); - $_keys[] = $_k; - $lookup[$_k] = $k; - } - $_res = array(); - $res = $this->memcache->get($_keys); - foreach ($res as $k => $v) { - $_res[$lookup[$k]] = $v; - } - - return $_res; - } - - /** - * Save values for a set of keys to cache - * - * @param array $keys list of values to save - * @param int $expire expiration time - * - * @return boolean true on success, false on failure - */ - protected function write(array $keys, $expire = null) { - foreach ($keys as $k => $v) { - $k = sha1($k); - $this->memcache->set($k, $v, 0, $expire); - } - - return true; - } - - /** - * Remove values from cache - * - * @param array $keys list of keys to delete - * - * @return boolean true on success, false on failure - */ - protected function delete(array $keys) { - foreach ($keys as $k) { - $k = sha1($k); - $this->memcache->delete($k); - } - - return true; - } - - /** - * Remove *all* values from cache - * - * @return boolean true on success, false on failure - */ - protected function purge() { - $this->memcache->flush(); - } -} diff --git a/library/smarty/demo/plugins/cacheresource.mysql.php b/library/smarty/demo/plugins/cacheresource.mysql.php deleted file mode 100644 --- a/library/smarty/demo/plugins/cacheresource.mysql.php +++ /dev/null @@ -1,155 +0,0 @@ -<?php - -/** - * MySQL CacheResource - * CacheResource Implementation based on the Custom API to use - * MySQL as the storage resource for Smarty's output caching. - * Table definition: - * <pre>CREATE TABLE IF NOT EXISTS `output_cache` ( - * `id` CHAR(40) NOT NULL COMMENT 'sha1 hash', - * `name` VARCHAR(250) NOT NULL, - * `cache_id` VARCHAR(250) NULL DEFAULT NULL, - * `compile_id` VARCHAR(250) NULL DEFAULT NULL, - * `modified` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, - * `content` LONGTEXT NOT NULL, - * PRIMARY KEY (`id`), - * INDEX(`name`), - * INDEX(`cache_id`), - * INDEX(`compile_id`), - * INDEX(`modified`) - * ) ENGINE = InnoDB;</pre> - * - * @package CacheResource-examples - * @author Rodney Rehm - */ -class Smarty_CacheResource_Mysql extends Smarty_CacheResource_Custom { - // PDO instance - protected $db; - protected $fetch; - protected $fetchTimestamp; - protected $save; - - public function __construct() { - try { - $this->db = new PDO("mysql:dbname=test;host=127.0.0.1", "smarty"); - } catch (PDOException $e) { - throw new SmartyException('Mysql Resource failed: ' . $e->getMessage()); - } - $this->fetch = $this->db->prepare('SELECT modified, content FROM output_cache WHERE id = :id'); - $this->fetchTimestamp = $this->db->prepare('SELECT modified FROM output_cache WHERE id = :id'); - $this->save = $this->db->prepare('REPLACE INTO output_cache (id, name, cache_id, compile_id, content) - VALUES (:id, :name, :cache_id, :compile_id, :content)'); - } - - /** - * fetch cached content and its modification time from data source - * - * @param string $id unique cache content identifier - * @param string $name template name - * @param string $cache_id cache id - * @param string $compile_id compile id - * @param string $content cached content - * @param integer $mtime cache modification timestamp (epoch) - * - * @return void - */ - protected function fetch($id, $name, $cache_id, $compile_id, &$content, &$mtime) { - $this->fetch->execute(array('id' => $id)); - $row = $this->fetch->fetch(); - $this->fetch->closeCursor(); - if ($row) { - $content = $row['content']; - $mtime = strtotime($row['modified']); - } else { - $content = null; - $mtime = null; - } - } - - /** - * Fetch cached content's modification timestamp from data source - * - * @note implementing this method is optional. Only implement it if modification times can be accessed faster than loading the complete cached content. - * - * @param string $id unique cache content identifier - * @param string $name template name - * @param string $cache_id cache id - * @param string $compile_id compile id - * - * @return integer|boolean timestamp (epoch) the template was modified, or false if not found - */ - protected function fetchTimestamp($id, $name, $cache_id, $compile_id) { - $this->fetchTimestamp->execute(array('id' => $id)); - $mtime = strtotime($this->fetchTimestamp->fetchColumn()); - $this->fetchTimestamp->closeCursor(); - - return $mtime; - } - - /** - * Save content to cache - * - * @param string $id unique cache content identifier - * @param string $name template name - * @param string $cache_id cache id - * @param string $compile_id compile id - * @param integer|null $exp_time seconds till expiration time in seconds or null - * @param string $content content to cache - * - * @return boolean success - */ - protected function save($id, $name, $cache_id, $compile_id, $exp_time, $content) { - $this->save->execute(array( - 'id' => $id, - 'name' => $name, - 'cache_id' => $cache_id, - 'compile_id' => $compile_id, - 'content' => $content, - )); - - return !!$this->save->rowCount(); - } - - /** - * Delete content from cache - * - * @param string $name template name - * @param string $cache_id cache id - * @param string $compile_id compile id - * @param integer|null $exp_time seconds till expiration or null - * - * @return integer number of deleted caches - */ - protected function delete($name, $cache_id, $compile_id, $exp_time) { - // delete the whole cache - if ($name === null && $cache_id === null && $compile_id === null && $exp_time === null) { - // returning the number of deleted caches would require a second query to count them - $query = $this->db->query('TRUNCATE TABLE output_cache'); - - return -1; - } - // build the filter - $where = array(); - // equal test name - if ($name !== null) { - $where[] = 'name = ' . $this->db->quote($name); - } - // equal test compile_id - if ($compile_id !== null) { - $where[] = 'compile_id = ' . $this->db->quote($compile_id); - } - // range test expiration time - if ($exp_time !== null) { - $where[] = 'modified < DATE_SUB(NOW(), INTERVAL ' . intval($exp_time) . ' SECOND)'; - } - // equal test cache_id and match sub-groups - if ($cache_id !== null) { - $where[] = '(cache_id = ' . $this->db->quote($cache_id) - . ' OR cache_id LIKE ' . $this->db->quote($cache_id . '|%') . ')'; - } - // run delete query - $query = $this->db->query('DELETE FROM output_cache WHERE ' . join(' AND ', $where)); - - return $query->rowCount(); - } -} diff --git a/library/smarty/demo/plugins/cacheresource.pdo.php b/library/smarty/demo/plugins/cacheresource.pdo.php deleted file mode 100644 --- a/library/smarty/demo/plugins/cacheresource.pdo.php +++ /dev/null @@ -1,312 +0,0 @@ -<?php - -/** - * PDO Cache Handler - * Allows you to store Smarty Cache files into your db. - * Example table : - * CREATE TABLE `smarty_cache` ( - * `id` char(40) NOT NULL COMMENT 'sha1 hash', - * `name` varchar(250) NOT NULL, - * `cache_id` varchar(250) DEFAULT NULL, - * `compile_id` varchar(250) DEFAULT NULL, - * `modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - * `expire` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00', - * `content` mediumblob NOT NULL, - * PRIMARY KEY (`id`), - * KEY `name` (`name`), - * KEY `cache_id` (`cache_id`), - * KEY `compile_id` (`compile_id`), - * KEY `modified` (`modified`), - * KEY `expire` (`expire`) - * ) ENGINE=InnoDB - * Example usage : - * $cnx = new PDO("mysql:host=localhost;dbname=mydb", "username", "password"); - * $smarty->setCachingType('pdo'); - * $smarty->loadPlugin('Smarty_CacheResource_Pdo'); - * $smarty->registerCacheResource('pdo', new Smarty_CacheResource_Pdo($cnx, 'smarty_cache')); - * - * @author Beno!t POLASZEK - 2014 - */ -class Smarty_CacheResource_Pdo extends Smarty_CacheResource_Custom { - - protected $fetchStatements = Array('default' => 'SELECT %2$s - FROM %1$s - WHERE 1 - AND id = :id - AND cache_id IS NULL - AND compile_id IS NULL', - - 'withCacheId' => 'SELECT %2$s - FROM %1$s - WHERE 1 - AND id = :id - AND cache_id = :cache_id - AND compile_id IS NULL', - - 'withCompileId' => 'SELECT %2$s - FROM %1$s - WHERE 1 - AND id = :id - AND compile_id = :compile_id - AND cache_id IS NULL', - - 'withCacheIdAndCompileId' => 'SELECT %2$s - FROM %1$s - WHERE 1 - AND id = :id - AND cache_id = :cache_id - AND compile_id = :compile_id'); - protected $insertStatement = 'INSERT INTO %s - - SET id = :id, - name = :name, - cache_id = :cache_id, - compile_id = :compile_id, - modified = CURRENT_TIMESTAMP, - expire = DATE_ADD(CURRENT_TIMESTAMP, INTERVAL :expire SECOND), - content = :content - - ON DUPLICATE KEY UPDATE - name = :name, - cache_id = :cache_id, - compile_id = :compile_id, - modified = CURRENT_TIMESTAMP, - expire = DATE_ADD(CURRENT_TIMESTAMP, INTERVAL :expire SECOND), - content = :content'; - - protected $deleteStatement = 'DELETE FROM %1$s WHERE %2$s'; - protected $truncateStatement = 'TRUNCATE TABLE %s'; - - protected $fetchColumns = 'modified, content'; - protected $fetchTimestampColumns = 'modified'; - - protected $pdo, $table, $database; - - /* - * Constructor - * - * @param PDO $pdo PDO : active connection - * @param string $table : table (or view) name - * @param string $database : optionnal - if table is located in another db - */ - public function __construct(PDO $pdo, $table, $database = null) { - - if (is_null($table)) { - throw new SmartyException("Table name for caching can't be null"); - } - - $this->pdo = $pdo; - $this->table = $table; - $this->database = $database; - - $this->fillStatementsWithTableName(); - } - - /* - * Fills the table name into the statements. - * - * @return Current Instance - * @access protected - */ - protected function fillStatementsWithTableName() { - - foreach ($this->fetchStatements AS &$statement) { - $statement = sprintf($statement, $this->getTableName(), '%s'); - } - - $this->insertStatement = sprintf($this->insertStatement, $this->getTableName()); - $this->deleteStatement = sprintf($this->deleteStatement, $this->getTableName(), '%s'); - $this->truncateStatement = sprintf($this->truncateStatement, $this->getTableName()); - - return $this; - } - - /* - * Gets the fetch statement, depending on what you specify - * - * @param string $columns : the column(s) name(s) you want to retrieve from the database - * @param string $id unique cache content identifier - * @param string|null $cache_id cache id - * @param string|null $compile_id compile id - * @access protected - */ - protected function getFetchStatement($columns, $id, $cache_id = null, $compile_id = null) { - - if (!is_null($cache_id) && !is_null($compile_id)) { - $query = $this->fetchStatements['withCacheIdAndCompileId'] AND $args = Array('id' => $id, 'cache_id' => $cache_id, 'compile_id' => $compile_id); - } elseif (is_null($cache_id) && !is_null($compile_id)) { - $query = $this->fetchStatements['withCompileId'] AND $args = Array('id' => $id, 'compile_id' => $compile_id); - } elseif (!is_null($cache_id) && is_null($compile_id)) { - $query = $this->fetchStatements['withCacheId'] AND $args = Array('id' => $id, 'cache_id' => $cache_id); - } else { - $query = $this->fetchStatements['default'] AND $args = Array('id' => $id); - } - - $query = sprintf($query, $columns); - - $stmt = $this->pdo->prepare($query); - - foreach ($args AS $key => $value) { - $stmt->bindValue($key, $value); - } - - return $stmt; - } - - /** - * fetch cached content and its modification time from data source - * - * @param string $id unique cache content identifier - * @param string $name template name - * @param string|null $cache_id cache id - * @param string|null $compile_id compile id - * @param string $content cached content - * @param integer $mtime cache modification timestamp (epoch) - * - * @return void - * @access protected - */ - protected function fetch($id, $name, $cache_id = null, $compile_id = null, &$content, &$mtime) { - - $stmt = $this->getFetchStatement($this->fetchColumns, $id, $cache_id, $compile_id); - $stmt->execute(); - $row = $stmt->fetch(); - $stmt->closeCursor(); - - if ($row) { - $content = $this->outputContent($row['content']); - $mtime = strtotime($row['modified']); - } else { - $content = null; - $mtime = null; - } - } - - /** - * Fetch cached content's modification timestamp from data source - * {@internal implementing this method is optional. - * Only implement it if modification times can be accessed faster than loading the complete cached content.}} - * - * @param string $id unique cache content identifier - * @param string $name template name - * @param string|null $cache_id cache id - * @param string|null $compile_id compile id - * - * @return integer|boolean timestamp (epoch) the template was modified, or false if not found - * @access protected - */ - // protected function fetchTimestamp($id, $name, $cache_id = null, $compile_id = null) { - // $stmt = $this->getFetchStatement($this->fetchTimestampColumns, $id, $cache_id, $compile_id); - // $stmt -> execute(); - // $mtime = strtotime($stmt->fetchColumn()); - // $stmt -> closeCursor(); - // return $mtime; - // } - - /** - * Save content to cache - * - * @param string $id unique cache content identifier - * @param string $name template name - * @param string|null $cache_id cache id - * @param string|null $compile_id compile id - * @param integer|null $exp_time seconds till expiration time in seconds or null - * @param string $content content to cache - * - * @return boolean success - * @access protected - */ - protected function save($id, $name, $cache_id = null, $compile_id = null, $exp_time, $content) { - - $stmt = $this->pdo->prepare($this->insertStatement); - - $stmt->bindValue('id', $id); - $stmt->bindValue('name', $name); - $stmt->bindValue('cache_id', $cache_id, (is_null($cache_id)) ? PDO::PARAM_NULL : PDO::PARAM_STR); - $stmt->bindValue('compile_id', $compile_id, (is_null($compile_id)) ? PDO::PARAM_NULL : PDO::PARAM_STR); - $stmt->bindValue('expire', (int)$exp_time, PDO::PARAM_INT); - $stmt->bindValue('content', $this->inputContent($content)); - $stmt->execute(); - - return !!$stmt->rowCount(); - } - - /* - * Encodes the content before saving to database - * - * @param string $content - * @return string $content - * @access protected - */ - protected function inputContent($content) { - return $content; - } - - /* - * Decodes the content before saving to database - * - * @param string $content - * @return string $content - * @access protected - */ - protected function outputContent($content) { - return $content; - } - - /** - * Delete content from cache - * - * @param string|null $name template name - * @param string|null $cache_id cache id - * @param string|null $compile_id compile id - * @param integer|null|-1 $exp_time seconds till expiration or null - * - * @return integer number of deleted caches - * @access protected - */ - protected function delete($name = null, $cache_id = null, $compile_id = null, $exp_time = null) { - - // delete the whole cache - if ($name === null && $cache_id === null && $compile_id === null && $exp_time === null) { - // returning the number of deleted caches would require a second query to count them - $this->pdo->query($this->truncateStatement); - return -1; - } - // build the filter - $where = array(); - // equal test name - if ($name !== null) { - $where[] = 'name = ' . $this->pdo->quote($name); - } - // equal test cache_id and match sub-groups - if ($cache_id !== null) { - $where[] = '(cache_id = ' . $this->pdo->quote($cache_id) - . ' OR cache_id LIKE ' . $this->pdo->quote($cache_id . '|%') . ')'; - } - // equal test compile_id - if ($compile_id !== null) { - $where[] = 'compile_id = ' . $this->pdo->quote($compile_id); - } - // for clearing expired caches - if ($exp_time === Smarty::CLEAR_EXPIRED) { - $where[] = 'expire < CURRENT_TIMESTAMP'; - } // range test expiration time - elseif ($exp_time !== null) { - $where[] = 'modified < DATE_SUB(NOW(), INTERVAL ' . intval($exp_time) . ' SECOND)'; - } - // run delete query - $query = $this->pdo->query(sprintf($this->deleteStatement, join(' AND ', $where))); - return $query->rowCount(); - } - - /** - * Gets the formatted table name - * - * @return string - * @access protected - */ - protected function getTableName() { - return (is_null($this->database)) ? "`{$this->table}`" : "`{$this->database}`.`{$this->table}`"; - } -} - \ No newline at end of file diff --git a/library/smarty/demo/plugins/cacheresource.pdo_gzip.php b/library/smarty/demo/plugins/cacheresource.pdo_gzip.php deleted file mode 100644 --- a/library/smarty/demo/plugins/cacheresource.pdo_gzip.php +++ /dev/null @@ -1,40 +0,0 @@ -<?php - -/** - * PDO Cache Handler with GZIP support - * Example usage : - * $cnx = new PDO("mysql:host=localhost;dbname=mydb", "username", "password"); - * $smarty->setCachingType('pdo_gzip'); - * $smarty->loadPlugin('Smarty_CacheResource_Pdo_Gzip'); - * $smarty->registerCacheResource('pdo_gzip', new Smarty_CacheResource_Pdo_Gzip($cnx, 'smarty_cache')); - * - * @require Smarty_CacheResource_Pdo class - * @author Beno!t POLASZEK - 2014 - */ -require_once 'cacheresource.pdo.php'; - -class Smarty_CacheResource_Pdo_Gzip extends Smarty_CacheResource_Pdo { - - /* - * Encodes the content before saving to database - * - * @param string $content - * @return string $content - * @access protected - */ - protected function inputContent($content) { - return gzdeflate($content); - } - - /* - * Decodes the content before saving to database - * - * @param string $content - * @return string $content - * @access protected - */ - protected function outputContent($content) { - return gzinflate($content); - } -} - \ No newline at end of file diff --git a/library/smarty/demo/plugins/resource.extendsall.php b/library/smarty/demo/plugins/resource.extendsall.php deleted file mode 100644 --- a/library/smarty/demo/plugins/resource.extendsall.php +++ /dev/null @@ -1,57 +0,0 @@ -<?php - -/** - * Extends All Resource - * Resource Implementation modifying the extends-Resource to walk - * through the template_dirs and inherit all templates of the same name - * - * @package Resource-examples - * @author Rodney Rehm - */ -class Smarty_Resource_Extendsall extends Smarty_Internal_Resource_Extends { - /** - * populate Source Object with meta data from Resource - * - * @param Smarty_Template_Source $source source object - * @param Smarty_Internal_Template $_template template object - * - * @return void - */ - public function populate(Smarty_Template_Source $source, Smarty_Internal_Template $_template = null) { - $uid = ''; - $sources = array(); - $exists = true; - foreach ($_template->smarty->getTemplateDir() as $key => $directory) { - try { - $s = Smarty_Resource::source(null, $source->smarty, '[' . $key . ']' . $source->name); - if (!$s->exists) { - continue; - } - $sources[$s->uid] = $s; - $uid .= $s->filepath; - } catch (SmartyException $e) { - } - } - - if (!$sources) { - $source->exists = false; - $source->template = $_template; - - return; - } - - $sources = array_reverse($sources, true); - reset($sources); - $s = current($sources); - - $source->components = $sources; - $source->filepath = $s->filepath; - $source->uid = sha1($uid); - $source->exists = $exists; - if ($_template && $_template->smarty->compile_check) { - $source->timestamp = $s->timestamp; - } - // need the template at getContent() - $source->template = $_template; - } -} diff --git a/library/smarty/demo/plugins/resource.mysql.php b/library/smarty/demo/plugins/resource.mysql.php deleted file mode 100644 --- a/library/smarty/demo/plugins/resource.mysql.php +++ /dev/null @@ -1,76 +0,0 @@ -<?php - -/** - * MySQL Resource - * Resource Implementation based on the Custom API to use - * MySQL as the storage resource for Smarty's templates and configs. - * Table definition: - * <pre>CREATE TABLE IF NOT EXISTS `templates` ( - * `name` varchar(100) NOT NULL, - * `modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - * `source` text, - * PRIMARY KEY (`name`) - * ) ENGINE=InnoDB DEFAULT CHARSET=utf8;</pre> - * Demo data: - * <pre>INSERT INTO `templates` (`name`, `modified`, `source`) VALUES ('test.tpl', "2010-12-25 22:00:00", '{$x="hello world"}{$x}');</pre> - * - * @package Resource-examples - * @author Rodney Rehm - */ -class Smarty_Resource_Mysql extends Smarty_Resource_Custom { - // PDO instance - protected $db; - // prepared fetch() statement - protected $fetch; - // prepared fetchTimestamp() statement - protected $mtime; - - public function __construct() { - try { - $this->db = new PDO("mysql:dbname=test;host=127.0.0.1", "smarty"); - } catch (PDOException $e) { - throw new SmartyException('Mysql Resource failed: ' . $e->getMessage()); - } - $this->fetch = $this->db->prepare('SELECT modified, source FROM templates WHERE name = :name'); - $this->mtime = $this->db->prepare('SELECT modified FROM templates WHERE name = :name'); - } - - /** - * Fetch a template and its modification time from database - * - * @param string $name template name - * @param string $source template source - * @param integer $mtime template modification timestamp (epoch) - * - * @return void - */ - protected function fetch($name, &$source, &$mtime) { - $this->fetch->execute(array('name' => $name)); - $row = $this->fetch->fetch(); - $this->fetch->closeCursor(); - if ($row) { - $source = $row['source']; - $mtime = strtotime($row['modified']); - } else { - $source = null; - $mtime = null; - } - } - - /** - * Fetch a template's modification time from database - * - * @note implementing this method is optional. Only implement it if modification times can be accessed faster than loading the comple template source. - * - * @param string $name template name - * - * @return integer timestamp (epoch) the template was modified - */ - protected function fetchTimestamp($name) { - $this->mtime->execute(array('name' => $name)); - $mtime = $this->mtime->fetchColumn(); - $this->mtime->closeCursor(); - - return strtotime($mtime); - } -} diff --git a/library/smarty/demo/plugins/resource.mysqls.php b/library/smarty/demo/plugins/resource.mysqls.php deleted file mode 100644 --- a/library/smarty/demo/plugins/resource.mysqls.php +++ /dev/null @@ -1,58 +0,0 @@ -<?php - -/** - * MySQL Resource - * Resource Implementation based on the Custom API to use - * MySQL as the storage resource for Smarty's templates and configs. - * Note that this MySQL implementation fetches the source and timestamps in - * a single database query, instead of two separate like resource.mysql.php does. - * Table definition: - * <pre>CREATE TABLE IF NOT EXISTS `templates` ( - * `name` varchar(100) NOT NULL, - * `modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - * `source` text, - * PRIMARY KEY (`name`) - * ) ENGINE=InnoDB DEFAULT CHARSET=utf8;</pre> - * Demo data: - * <pre>INSERT INTO `templates` (`name`, `modified`, `source`) VALUES ('test.tpl', "2010-12-25 22:00:00", '{$x="hello world"}{$x}');</pre> - * - * @package Resource-examples - * @author Rodney Rehm - */ -class Smarty_Resource_Mysqls extends Smarty_Resource_Custom { - // PDO instance - protected $db; - // prepared fetch() statement - protected $fetch; - - public function __construct() { - try { - $this->db = new PDO("mysql:dbname=test;host=127.0.0.1", "smarty"); - } catch (PDOException $e) { - throw new SmartyException('Mysql Resource failed: ' . $e->getMessage()); - } - $this->fetch = $this->db->prepare('SELECT modified, source FROM templates WHERE name = :name'); - } - - /** - * Fetch a template and its modification time from database - * - * @param string $name template name - * @param string $source template source - * @param integer $mtime template modification timestamp (epoch) - * - * @return void - */ - protected function fetch($name, &$source, &$mtime) { - $this->fetch->execute(array('name' => $name)); - $row = $this->fetch->fetch(); - $this->fetch->closeCursor(); - if ($row) { - $source = $row['source']; - $mtime = strtotime($row['modified']); - } else { - $source = null; - $mtime = null; - } - } -} diff --git a/library/smarty/demo/templates/footer.tpl b/library/smarty/demo/templates/footer.tpl deleted file mode 100644 --- a/library/smarty/demo/templates/footer.tpl +++ /dev/null @@ -1,2 +0,0 @@ -</BODY> -</HTML> diff --git a/library/smarty/demo/templates/header.tpl b/library/smarty/demo/templates/header.tpl deleted file mode 100644 --- a/library/smarty/demo/templates/header.tpl +++ /dev/null @@ -1,5 +0,0 @@ -<HTML> -<HEAD> - <TITLE>{$title} - {$Name}</TITLE> -</HEAD> -<BODY bgcolor="#ffffff"> diff --git a/library/smarty/demo/templates/index.tpl b/library/smarty/demo/templates/index.tpl deleted file mode 100644 --- a/library/smarty/demo/templates/index.tpl +++ /dev/null @@ -1,95 +0,0 @@ -{config_load file="test.conf" section="setup"} -{include file="header.tpl" title=foo} - -<PRE> - -{* bold and title are read from the config file *} - {if #bold#}<b>{/if} - {* capitalize the first letters of each word of the title *} - Title: {#title#|capitalize} - {if #bold#}</b>{/if} - - The current date and time is {$smarty.now|date_format:"%Y-%m-%d %H:%M:%S"} - - The value of global assigned variable $SCRIPT_NAME is {$SCRIPT_NAME} - - Example of accessing server environment variable SERVER_NAME: {$smarty.server.SERVER_NAME} - - The value of {ldelim}$Name{rdelim} is <b>{$Name}</b> - -variable modifier example of {ldelim}$Name|upper{rdelim} - -<b>{$Name|upper}</b> - - -An example of a section loop: - - {section name=outer - loop=$FirstName} - {if $smarty.section.outer.index is odd by 2} - {$smarty.section.outer.rownum} . {$FirstName[outer]} {$LastName[outer]} - {else} - {$smarty.section.outer.rownum} * {$FirstName[outer]} {$LastName[outer]} - {/if} - {sectionelse} - none - {/section} - - An example of section looped key values: - - {section name=sec1 loop=$contacts} - phone: {$contacts[sec1].phone} - <br> - - - - fax: {$contacts[sec1].fax} - - - <br> - - - - cell: {$contacts[sec1].cell} - - - <br> - {/section} - <p> - - testing strip tags - {strip} -<table border=0> - <tr> - <td> - <A HREF="{$SCRIPT_NAME}"> - <font color="red">This is a test </font> - </A> - </td> - </tr> -</table> - {/strip} - -</PRE> - -This is an example of the html_select_date function: - -<form> - {html_select_date start_year=1998 end_year=2010} -</form> - -This is an example of the html_select_time function: - -<form> - {html_select_time use_24_hours=false} -</form> - -This is an example of the html_options function: - -<form> - <select name=states> - {html_options values=$option_values selected=$option_selected output=$option_output} - </select> -</form> - -{include file="footer.tpl"} diff --git a/library/smarty/lexer/smarty_internal_configfilelexer.plex b/library/smarty/lexer/smarty_internal_configfilelexer.plex deleted file mode 100644 --- a/library/smarty/lexer/smarty_internal_configfilelexer.plex +++ /dev/null @@ -1,318 +0,0 @@ -<?php -/** -* Smarty Internal Plugin Configfilelexer -* -* This is the lexer to break the config file source into tokens -* @package Smarty -* @subpackage Config -* @author Uwe Tews -*/ -/** -* Smarty_Internal_Configfilelexer -* -* This is the config file lexer. -* It is generated from the smarty_internal_configfilelexer.plex file -* -* @package Smarty -* @subpackage Compiler -* @author Uwe Tews -*/ -class Smarty_Internal_Configfilelexer -{ - /** - * Source - * - * @var string - */ - public $data; - /** - * byte counter - * - * @var int - */ - public $counter; - /** - * token number - * - * @var int - */ - public $token; - /** - * token value - * - * @var string - */ - public $value; - /** - * current line - * - * @var int - */ - public $line; - /** - * state number - * - * @var int - */ - public $state = 1; - /** - * Smarty object - * - * @var Smarty - */ - public $smarty = null; - /** - * compiler object - * - * @var Smarty_Internal_Config_File_Compiler - */ - private $compiler = null; - /** - * copy of config_booleanize - * - * @var bool - */ - private $configBooleanize = false; - /** - * trace file - * - * @var resource - */ - public $yyTraceFILE; - /** - * trace prompt - * - * @var string - */ - public $yyTracePrompt; - /** - * state names - * - * @var array - */ - public $state_name = array(1 => 'START', 2 => 'VALUE', 3 => 'NAKED_STRING_VALUE', 4 => 'COMMENT', 5 => 'SECTION', 6 => 'TRIPPLE'); - - /** - * storage for assembled token patterns - * - * @var sring - */ - private $yy_global_pattern1 = null; - private $yy_global_pattern2 = null; - private $yy_global_pattern3 = null; - private $yy_global_pattern4 = null; - private $yy_global_pattern5 = null; - private $yy_global_pattern6 = null; - - /** - * token names - * - * @var array - */ - public $smarty_token_names = array( // Text for parser error messages - ); - - /** - * constructor - * - * @param string $data template source - * @param Smarty_Internal_Config_File_Compiler $compiler - */ - function __construct($data, Smarty_Internal_Config_File_Compiler $compiler) - { - // set instance object - self::instance($this); - $this->data = $data . "\n"; //now all lines are \n-terminated - $this->counter = 0; - if (preg_match('/^\xEF\xBB\xBF/', $this->data, $match)) { - $this->counter += strlen($match[0]); - } - $this->line = 1; - $this->compiler = $compiler; - $this->smarty = $compiler->smarty; - $this->configBooleanize = $this->smarty->config_booleanize; - } - - public static function &instance($new_instance = null) - { - static $instance = null; - if (isset($new_instance) && is_object($new_instance)) { - $instance = $new_instance; - } - return $instance; - } - - public function PrintTrace() - { - $this->yyTraceFILE = fopen('php://output', 'w'); - $this->yyTracePrompt = '<br>'; - } - - -/*!lex2php -%input $this->data -%counter $this->counter -%token $this->token -%value $this->value -%line $this->line -commentstart = /#|;/ -openB = /\[/ -closeB = /\]/ -section = /.*?(?=[\.=\[\]\r\n])/ -equal = /=/ -whitespace = /[ \t\r]+/ -dot = /\./ -id = /[0-9]*[a-zA-Z_]\w*/ -newline = /\n/ -single_quoted_string = /'[^'\\]*(?:\\.[^'\\]*)*'(?=[ \t\r]*[\n#;])/ -double_quoted_string = /"[^"\\]*(?:\\.[^"\\]*)*"(?=[ \t\r]*[\n#;])/ -tripple_quotes = /"""/ -tripple_quotes_end = /"""(?=[ \t\r]*[\n#;])/ -text = /[\S\s]/ -float = /\d+\.\d+(?=[ \t\r]*[\n#;])/ -int = /\d+(?=[ \t\r]*[\n#;])/ -maybe_bool = /[a-zA-Z]+(?=[ \t\r]*[\n#;])/ -naked_string = /[^\n]+?(?=[ \t\r]*\n)/ -*/ - -/*!lex2php -%statename START - -commentstart { - $this->token = Smarty_Internal_Configfileparser::TPC_COMMENTSTART; - $this->yypushstate(self::COMMENT); -} -openB { - $this->token = Smarty_Internal_Configfileparser::TPC_OPENB; - $this->yypushstate(self::SECTION); -} -closeB { - $this->token = Smarty_Internal_Configfileparser::TPC_CLOSEB; -} -equal { - $this->token = Smarty_Internal_Configfileparser::TPC_EQUAL; - $this->yypushstate(self::VALUE); -} -whitespace { - return false; -} -newline { - $this->token = Smarty_Internal_Configfileparser::TPC_NEWLINE; -} -id { - $this->token = Smarty_Internal_Configfileparser::TPC_ID; -} -text { - $this->token = Smarty_Internal_Configfileparser::TPC_OTHER; -} - -*/ - -/*!lex2php -%statename VALUE - -whitespace { - return false; -} -float { - $this->token = Smarty_Internal_Configfileparser::TPC_FLOAT; - $this->yypopstate(); -} -int { - $this->token = Smarty_Internal_Configfileparser::TPC_INT; - $this->yypopstate(); -} -tripple_quotes { - $this->token = Smarty_Internal_Configfileparser::TPC_TRIPPLE_QUOTES; - $this->yypushstate(self::TRIPPLE); -} -single_quoted_string { - $this->token = Smarty_Internal_Configfileparser::TPC_SINGLE_QUOTED_STRING; - $this->yypopstate(); -} -double_quoted_string { - $this->token = Smarty_Internal_Configfileparser::TPC_DOUBLE_QUOTED_STRING; - $this->yypopstate(); -} -maybe_bool { - if (!$this->configBooleanize || !in_array(strtolower($this->value), Array("true", "false", "on", "off", "yes", "no")) ) { - $this->yypopstate(); - $this->yypushstate(self::NAKED_STRING_VALUE); - return true; //reprocess in new state - } else { - $this->token = Smarty_Internal_Configfileparser::TPC_BOOL; - $this->yypopstate(); - } -} -naked_string { - $this->token = Smarty_Internal_Configfileparser::TPC_NAKED_STRING; - $this->yypopstate(); -} -newline { - $this->token = Smarty_Internal_Configfileparser::TPC_NAKED_STRING; - $this->value = ""; - $this->yypopstate(); -} - -*/ - -/*!lex2php -%statename NAKED_STRING_VALUE - -naked_string { - $this->token = Smarty_Internal_Configfileparser::TPC_NAKED_STRING; - $this->yypopstate(); -} - -*/ - -/*!lex2php -%statename COMMENT - -whitespace { - return false; -} -naked_string { - $this->token = Smarty_Internal_Configfileparser::TPC_NAKED_STRING; -} -newline { - $this->token = Smarty_Internal_Configfileparser::TPC_NEWLINE; - $this->yypopstate(); -} - -*/ - -/*!lex2php -%statename SECTION - -dot { - $this->token = Smarty_Internal_Configfileparser::TPC_DOT; -} -section { - $this->token = Smarty_Internal_Configfileparser::TPC_SECTION; - $this->yypopstate(); -} - -*/ -/*!lex2php -%statename TRIPPLE - -tripple_quotes_end { - $this->token = Smarty_Internal_Configfileparser::TPC_TRIPPLE_QUOTES_END; - $this->yypopstate(); - $this->yypushstate(self::START); -} -text { - $to = strlen($this->data); - preg_match("/\"\"\"[ \t\r]*[\n#;]/",$this->data,$match,PREG_OFFSET_CAPTURE,$this->counter); - if (isset($match[0][1])) { - $to = $match[0][1]; - } else { - $this->compiler->trigger_template_error ("missing or misspelled literal closing tag"); - } - $this->value = substr($this->data,$this->counter,$to-$this->counter); - $this->token = Smarty_Internal_Configfileparser::TPC_TRIPPLE_TEXT; -} -*/ - -} diff --git a/library/smarty/lexer/smarty_internal_configfileparser.y b/library/smarty/lexer/smarty_internal_configfileparser.y deleted file mode 100644 --- a/library/smarty/lexer/smarty_internal_configfileparser.y +++ /dev/null @@ -1,362 +0,0 @@ -/** -* Smarty Internal Plugin Configfileparser -* -* This is the config file parser -* -* -* @package Smarty -* @subpackage Config -* @author Uwe Tews -*/ -%name TPC_ -%declare_class { -/** -* Smarty Internal Plugin Configfileparse -* -* This is the config file parser. -* It is generated from the smarty_internal_configfileparser.y file -* @package Smarty -* @subpackage Compiler -* @author Uwe Tews -*/ -class Smarty_Internal_Configfileparser -} -%include_class -{ - /** - * result status - * - * @var bool - */ - public $successful = true; - /** - * return value - * - * @var mixed - */ - public $retvalue = 0; - /** - * @var - */ - public $yymajor; - /** - * lexer object - * - * @var Smarty_Internal_Configfilelexer - */ - private $lex; - /** - * internal error flag - * - * @var bool - */ - private $internalError = false; - /** - * compiler object - * - * @var Smarty_Internal_Config_File_Compiler - */ - public $compiler = null; - /** - * smarty object - * - * @var Smarty - */ - public $smarty = null; - /** - * copy of config_overwrite property - * - * @var bool - */ - private $configOverwrite = false; - /** - * copy of config_read_hidden property - * - * @var bool - */ - private $configReadHidden = false; - /** - * helper map - * - * @var array - */ - private static $escapes_single = Array('\\' => '\\', - '\'' => '\''); - - /** - * constructor - * - * @param Smarty_Internal_Configfilelexer $lex - * @param Smarty_Internal_Config_File_Compiler $compiler - */ - function __construct(Smarty_Internal_Configfilelexer $lex, Smarty_Internal_Config_File_Compiler $compiler) - { - // set instance object - self::instance($this); - $this->lex = $lex; - $this->smarty = $compiler->smarty; - $this->compiler = $compiler; - $this->configOverwrite = $this->smarty->config_overwrite; - $this->configReadHidden = $this->smarty->config_read_hidden; - } - - /** - * @param null $new_instance - * - * @return null - */ - public static function &instance($new_instance = null) - { - static $instance = null; - if (isset($new_instance) && is_object($new_instance)) { - $instance = $new_instance; - } - return $instance; - } - - /** - * parse optional boolean keywords - * - * @param string $str - * - * @return bool - */ - private function parse_bool($str) - { - $str = strtolower($str); - if (in_array($str, array('on', 'yes', 'true'))) { - $res = true; - } else { - $res = false; - } - return $res; - } - - /** - * parse single quoted string - * remove outer quotes - * unescape inner quotes - * - * @param string $qstr - * - * @return string - */ - private static function parse_single_quoted_string($qstr) - { - $escaped_string = substr($qstr, 1, strlen($qstr) - 2); //remove outer quotes - - $ss = preg_split('/(\\\\.)/', $escaped_string, - 1, PREG_SPLIT_DELIM_CAPTURE); - - $str = ""; - foreach ($ss as $s) { - if (strlen($s) === 2 && $s[0] === '\\') { - if (isset(self::$escapes_single[$s[1]])) { - $s = self::$escapes_single[$s[1]]; - } - } - $str .= $s; - } - return $str; - } - - /** - * parse double quoted string - * - * @param string $qstr - * - * @return string - */ - private static function parse_double_quoted_string($qstr) - { - $inner_str = substr($qstr, 1, strlen($qstr) - 2); - return stripcslashes($inner_str); - } - - /** - * parse triple quoted string - * - * @param string $qstr - * - * @return string - */ - private static function parse_tripple_double_quoted_string($qstr) - { - return stripcslashes($qstr); - } - - /** - * set a config variable in target array - * - * @param array $var - * @param array $target_array - */ - private function set_var(Array $var, Array &$target_array) - { - $key = $var["key"]; - $value = $var["value"]; - - if ($this->configOverwrite || !isset($target_array['vars'][$key])) { - $target_array['vars'][$key] = $value; - } else { - settype($target_array['vars'][$key], 'array'); - $target_array['vars'][$key][] = $value; - } - } - - /** - * add config variable to global vars - * - * @param array $vars - */ - private function add_global_vars(Array $vars) - { - if (!isset($this->compiler->config_data['vars'])) { - $this->compiler->config_data['vars'] = Array(); - } - foreach ($vars as $var) { - $this->set_var($var, $this->compiler->config_data); - } - } - - /** - * add config variable to section - * - * @param string $section_name - * @param array $vars - */ - private function add_section_vars($section_name, Array $vars) - { - if (!isset($this->compiler->config_data['sections'][$section_name]['vars'])) { - $this->compiler->config_data['sections'][$section_name]['vars'] = Array(); - } - foreach ($vars as $var) { - $this->set_var($var, $this->compiler->config_data['sections'][$section_name]); - } - } -} - -%token_prefix TPC_ - -%parse_accept -{ - $this->successful = !$this->internalError; - $this->internalError = false; - $this->retvalue = $this->_retvalue; -} - -%syntax_error -{ - $this->internalError = true; - $this->yymajor = $yymajor; - $this->compiler->trigger_config_file_error(); -} - -%stack_overflow -{ - $this->internalError = true; - $this->compiler->trigger_config_file_error("Stack overflow in configfile parser"); -} - -// Complete config file -start(res) ::= global_vars sections. { - res = null; -} - -// Global vars -global_vars(res) ::= var_list(vl). { - $this->add_global_vars(vl); - res = null; -} - -// Sections -sections(res) ::= sections section. { - res = null; -} - -sections(res) ::= . { - res = null; -} - -section(res) ::= OPENB SECTION(i) CLOSEB newline var_list(vars). { - $this->add_section_vars(i, vars); - res = null; -} - -section(res) ::= OPENB DOT SECTION(i) CLOSEB newline var_list(vars). { - if ($this->configReadHidden) { - $this->add_section_vars(i, vars); - } - res = null; -} - -// Var list -var_list(res) ::= var_list(vl) newline. { - res = vl; -} - -var_list(res) ::= var_list(vl) var(v). { - res = array_merge(vl, Array(v)); -} - -var_list(res) ::= . { - res = Array(); -} - - -// Var -var(res) ::= ID(id) EQUAL value(v). { - res = Array("key" => id, "value" => v); -} - - -value(res) ::= FLOAT(i). { - res = (float) i; -} - -value(res) ::= INT(i). { - res = (int) i; -} - -value(res) ::= BOOL(i). { - res = $this->parse_bool(i); -} - -value(res) ::= SINGLE_QUOTED_STRING(i). { - res = self::parse_single_quoted_string(i); -} - -value(res) ::= DOUBLE_QUOTED_STRING(i). { - res = self::parse_double_quoted_string(i); -} - -value(res) ::= TRIPPLE_QUOTES(i) TRIPPLE_TEXT(c) TRIPPLE_QUOTES_END(ii). { - res = self::parse_tripple_double_quoted_string(c); -} - -value(res) ::= TRIPPLE_QUOTES(i) TRIPPLE_QUOTES_END(ii). { - res = ''; -} - -value(res) ::= NAKED_STRING(i). { - res = i; -} - -// NOTE: this is not a valid rule -// It is added hier to produce a usefull error message on a missing '='; -value(res) ::= OTHER(i). { - res = i; -} - - -// Newline and comments -newline(res) ::= NEWLINE. { - res = null; -} - -newline(res) ::= COMMENTSTART NEWLINE. { - res = null; -} - -newline(res) ::= COMMENTSTART NAKED_STRING NEWLINE. { - res = null; -} diff --git a/library/smarty/lexer/smarty_internal_templatelexer.plex b/library/smarty/lexer/smarty_internal_templatelexer.plex deleted file mode 100644 --- a/library/smarty/lexer/smarty_internal_templatelexer.plex +++ /dev/null @@ -1,770 +0,0 @@ -<?php -/** - * Smarty Internal Plugin Templatelexer - * This is the lexer to break the template source into tokens - * - * @package Smarty - * @subpackage Compiler - * @author Uwe Tews - */ - -/** - * Smarty_Internal_Templatelexer - * This is the template file lexer. - * It is generated from the smarty_internal_templatelexer.plex file - * - * @package Smarty - * @subpackage Compiler - * @author Uwe Tews - */ -class Smarty_Internal_Templatelexer -{ - /** - * Source - * - * @var string - */ - public $data; - /** - * byte counter - * - * @var int - */ - public $counter; - /** - * token number - * - * @var int - */ - public $token; - /** - * token value - * - * @var string - */ - public $value; - /** - * current line - * - * @var int - */ - public $line; - /** - * tag start line - * - * @var - */ - public $taglineno; - /** - * php code type - * - * @var string - */ - public $phpType = ''; - /** - * escaped left delimiter - * - * @var string - */ - public $ldel = ''; - /** - * escaped left delimiter length - * - * @var int - */ - public $ldel_length = 0; - /** - * escaped right delimiter - * - * @var string - */ - public $rdel = ''; - /** - * escaped right delimiter length - * - * @var int - */ - public $rdel_length = 0; - /** - * state number - * - * @var int - */ - public $state = 1; - /** - * Smarty object - * - * @var Smarty - */ - public $smarty = null; - /** - * compiler object - * - * @var Smarty_Internal_TemplateCompilerBase - */ - public $compiler = null; - /** - * literal tag nesting level - * - * @var int - */ - private $literal_cnt = 0; - - /** - * PHP start tag string - * - * @var string - */ - - /** - * trace file - * - * @var resource - */ - public $yyTraceFILE; - - /** - * trace prompt - * - * @var string - */ - public $yyTracePrompt; - - /** - * XML flag true while processing xml - * - * @var bool - */ - public $is_xml = false; - - /** - * state names - * - * @var array - */ - public $state_name = array(1 => 'TEXT', 2 => 'TAG', 3 => 'TAGBODY', 4 => 'LITERAL', 5 => 'DOUBLEQUOTEDSTRING', - 6 => 'CHILDBODY', 7 => 'CHILDBLOCK', 8 => 'CHILDLITERAL'); - - /** - * storage for assembled token patterns - * - * @var string - */ - private $yy_global_pattern1 = null; - - private $yy_global_pattern2 = null; - - private $yy_global_pattern3 = null; - - private $yy_global_pattern4 = null; - - private $yy_global_pattern5 = null; - - private $yy_global_pattern6 = null; - - private $yy_global_pattern7 = null; - - private $yy_global_pattern8 = null; - - /** - * token names - * - * @var array - */ - public $smarty_token_names = array( // Text for parser error messages - 'NOT' => '(!,not)', - 'OPENP' => '(', - 'CLOSEP' => ')', - 'OPENB' => '[', - 'CLOSEB' => ']', - 'PTR' => '->', - 'APTR' => '=>', - 'EQUAL' => '=', - 'NUMBER' => 'number', - 'UNIMATH' => '+" , "-', - 'MATH' => '*" , "/" , "%', - 'INCDEC' => '++" , "--', - 'SPACE' => ' ', - 'DOLLAR' => '$', - 'SEMICOLON' => ';', - 'COLON' => ':', - 'DOUBLECOLON' => '::', - 'AT' => '@', - 'HATCH' => '#', - 'QUOTE' => '"', - 'BACKTICK' => '`', - 'VERT' => '"|" modifier', - 'DOT' => '.', - 'COMMA' => '","', - 'QMARK' => '"?"', - 'ID' => 'id, name', - 'TEXT' => 'text', - 'LDELSLASH' => '{/..} closing tag', - 'LDEL' => '{...} Smarty tag', - 'COMMENT' => 'comment', - 'AS' => 'as', - 'TO' => 'to', - 'PHP' => '"<?php", "<%", "{php}" tag', - 'LOGOP' => '"<", "==" ... logical operator', - 'TLOGOP' => '"lt", "eq" ... logical operator; "is div by" ... if condition', - 'SCOND' => '"is even" ... if condition', - ); - - /** - * constructor - * - * @param string $data template source - * @param Smarty_Internal_TemplateCompilerBase $compiler - */ - function __construct($data, Smarty_Internal_TemplateCompilerBase $compiler) - { - $this->data = $data; - $this->counter = 0; - if (preg_match('~^\xEF\xBB\xBF~i', $this->data, $match)) { - $this->counter += strlen($match[0]); - } - $this->line = 1; - $this->smarty = $compiler->smarty; - $this->compiler = $compiler; - $this->ldel = preg_quote($this->smarty->left_delimiter, '~'); - $this->ldel_length = strlen($this->smarty->left_delimiter); - $this->rdel = preg_quote($this->smarty->right_delimiter, '~'); - $this->rdel_length = strlen($this->smarty->right_delimiter); - $this->smarty_token_names['LDEL'] = $this->smarty->left_delimiter; - $this->smarty_token_names['RDEL'] = $this->smarty->right_delimiter; - } - - public function PrintTrace() - { - $this->yyTraceFILE = fopen('php://output', 'w'); - $this->yyTracePrompt = '<br>'; - } - - /* - * Check if this tag is autoliteral - */ - public function isAutoLiteral () - { - return $this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false; - } - - /*!lex2php - %input $this->data - %counter $this->counter - %token $this->token - %value $this->value - %line $this->line - linebreak = ~[\t ]*[\r\n]+[\t ]*~ - text = ~[\S\s]~ - textdoublequoted = ~([^"\\]*?)((?:\\.[^"\\]*?)*?)(?=(SMARTYldel|\$|`\$|"))~ - namespace = ~([0-9]*[a-zA-Z_]\w*)?(\\[0-9]*[a-zA-Z_]\w*)+~ - all = ~[\S\s]+~ - emptyjava = ~[{][}]~ - phpstart = ~(<[?]((php\s+|=)|\s+))|(<[%])|(<[?]xml\s+)|(<script\s+language\s*=\s*["']?\s*php\s*["']?\s*>)|([?][>])|([%][>])|(SMARTYldel\s*php(.*?)SMARTYrdel)|(SMARTYldel\s*[/]phpSMARTYrdel)~ - slash = ~[/]~ - ldel = ~SMARTYldel\s*~ - rdel = ~\s*SMARTYrdel~ - nocacherdel = ~(\s+nocache)?\s*SMARTYrdel~ - notblockid = ~(?:(?!block)[0-9]*[a-zA-Z_]\w*)~ - smartyblockchildparent = ~[\$]smarty\.block\.(child|parent)~ - integer = ~\d+~ - hex = ~0[xX][0-9a-fA-F]+~ - math = ~\s*([*]{1,2}|[%/^&]|[<>]{2})\s*~ - comment = ~SMARTYldel[*]~ - incdec = ~([+]|[-]){2}~ - unimath = ~\s*([+]|[-])\s*~ - openP = ~\s*[(]\s*~ - closeP = ~\s*[)]~ - openB = ~\[\s*~ - closeB = ~\s*\]~ - dollar = ~[$]~ - dot = ~[.]~ - comma = ~\s*[,]\s*~ - doublecolon = ~[:]{2}~ - colon = ~\s*[:]\s*~ - at = ~[@]~ - hatch = ~[#]~ - semicolon = ~\s*[;]\s*~ - equal = ~\s*[=]\s*~ - space = ~\s+~ - ptr = ~\s*[-][>]\s*~ - aptr = ~\s*[=][>]\s*~ - singlequotestring = ~'[^'\\]*(?:\\.[^'\\]*)*'~ - backtick = ~[`]~ - vert = ~[|]~ - qmark = ~\s*[?]\s*~ - constant = ~([_]+[A-Z0-9][0-9A-Z_]*|[A-Z][0-9A-Z_]*)(?![0-9A-Z_]*[a-z])~ - attr = ~\s+[0-9]*[a-zA-Z_][a-zA-Z0-9_\-:]*\s*[=]\s*~ - id = ~[0-9]*[a-zA-Z_]\w*~ - literal = ~literal~ - strip = ~strip~ - lop = ~\s*(([!=][=]{1,2})|([<][=>]?)|([>][=]?)|[&|]{2})\s*~ - tlop = ~\s+(eq|ne|neq|gt|ge|gte|lt|le|lte|mod|and|or|xor|(is\s+(not\s+)?(odd|even|div)\s+by))\s+~ - scond = ~\s+is\s+(not\s+)?(odd|even)~ - isin = ~\s+is\s+in\s+~ - as = ~\s+as\s+~ - to = ~\s+to\s+~ - step = ~\s+step\s+~ - block = ~block~ - if = ~(if|elseif|else if|while)\s+~ - for = ~for\s+~ - foreach = ~foreach(?![^\s])~ - setfilter = ~setfilter\s+~ - instanceof = ~\s+instanceof\s+~ - not = ~([!]\s*)|(not\s+)~ - typecast = ~[(](int(eger)?|bool(ean)?|float|double|real|string|binary|array|object)[)]\s*~ - double_quote = ~["]~ - single_quote = ~[']~ - */ - /*!lex2php - %statename TEXT - emptyjava { - $this->token = Smarty_Internal_Templateparser::TP_TEXT; - } - comment { - preg_match("~[*]{$this->rdel}~",$this->data,$match,PREG_OFFSET_CAPTURE,$this->counter); - if (isset($match[0][1])) { - $to = $match[0][1] + strlen($match[0][0]); - } else { - $this->compiler->trigger_template_error ("missing or misspelled comment closing tag '*{$this->smarty->right_delimiter}'"); - } - $this->value = substr($this->data,$this->counter,$to-$this->counter); - return false; - } - phpstart { - $obj = new Smarty_Internal_Compile_Private_Php(); - $obj->parsePhp($this); - } - ldel literal rdel { - if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) { - $this->token = Smarty_Internal_Templateparser::TP_TEXT; - } else { - $this->token = Smarty_Internal_Templateparser::TP_LITERALSTART; - $this->yypushstate(self::LITERAL); - } - } - ldel { - if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) { - $this->token = Smarty_Internal_Templateparser::TP_TEXT; - } else { - $this->yypushstate(self::TAG); - return true; - } - } - rdel { - $this->token = Smarty_Internal_Templateparser::TP_TEXT; - } - text { - $to = strlen($this->data); - preg_match("~($this->ldel)|([<]script\s+language\s*=\s*[\"\']?\s*php\s*[\"\']?\s*[>])|([<][?])|([<][%])|([?][>])|([%][>])~i",$this->data,$match,PREG_OFFSET_CAPTURE,$this->counter); - if (isset($match[0][1])) { - $to = $match[0][1]; - } - $this->value = substr($this->data,$this->counter,$to-$this->counter); - $this->token = Smarty_Internal_Templateparser::TP_TEXT; - } - */ - /*!lex2php - %statename TAG - ldel if { - $this->token = Smarty_Internal_Templateparser::TP_LDELIF; - $this->yybegin(self::TAGBODY); - $this->taglineno = $this->line; - } - ldel for { - $this->token = Smarty_Internal_Templateparser::TP_LDELFOR; - $this->yybegin(self::TAGBODY); - $this->taglineno = $this->line; - } - ldel foreach { - $this->token = Smarty_Internal_Templateparser::TP_LDELFOREACH; - $this->yybegin(self::TAGBODY); - $this->taglineno = $this->line; - } - ldel setfilter { - $this->token = Smarty_Internal_Templateparser::TP_LDELSETFILTER; - $this->yybegin(self::TAGBODY); - $this->taglineno = $this->line; - } - ldel id nocacherdel { - $this->yypopstate(); - $this->token = Smarty_Internal_Templateparser::TP_SIMPLETAG; - $this->taglineno = $this->line; - } - ldel slash notblockid rdel { - $this->yypopstate(); - $this->token = Smarty_Internal_Templateparser::TP_CLOSETAG; - $this->taglineno = $this->line; - } - ldel dollar id nocacherdel { - if ($this->_yy_stack[count($this->_yy_stack)-1] == self::TEXT) { - $this->yypopstate(); - $this->token = Smarty_Internal_Templateparser::TP_SIMPLEOUTPUT; - $this->taglineno = $this->line; - } else { - $this->value = $this->smarty->left_delimiter; - $this->token = Smarty_Internal_Templateparser::TP_LDEL; - $this->yybegin(self::TAGBODY); - $this->taglineno = $this->line; - } - } - ldel slash { - $this->token = Smarty_Internal_Templateparser::TP_LDELSLASH; - $this->yybegin(self::TAGBODY); - $this->taglineno = $this->line; - } - ldel { - $this->token = Smarty_Internal_Templateparser::TP_LDEL; - $this->yybegin(self::TAGBODY); - $this->taglineno = $this->line; - } - */ - /*!lex2php - %statename TAGBODY - rdel { - $this->token = Smarty_Internal_Templateparser::TP_RDEL; - $this->yypopstate(); - } - double_quote { - $this->token = Smarty_Internal_Templateparser::TP_QUOTE; - $this->yypushstate(self::DOUBLEQUOTEDSTRING); - } - singlequotestring { - $this->token = Smarty_Internal_Templateparser::TP_SINGLEQUOTESTRING; - } - smartyblockchildparent { - $this->token = Smarty_Internal_Templateparser::TP_SMARTYBLOCKCHILDPARENT; - $this->taglineno = $this->line; - } - dollar id { - $this->token = Smarty_Internal_Templateparser::TP_DOLLARID; - } - dollar { - $this->token = Smarty_Internal_Templateparser::TP_DOLLAR; - } - isin { - $this->token = Smarty_Internal_Templateparser::TP_ISIN; - } - as { - $this->token = Smarty_Internal_Templateparser::TP_AS; - } - to { - $this->token = Smarty_Internal_Templateparser::TP_TO; - } - step { - $this->token = Smarty_Internal_Templateparser::TP_STEP; - } - instanceof { - $this->token = Smarty_Internal_Templateparser::TP_INSTANCEOF; - } - lop { - $this->token = Smarty_Internal_Templateparser::TP_LOGOP; - } - tlop { - $this->token = Smarty_Internal_Templateparser::TP_TLOGOP; - } - scond { - $this->token = Smarty_Internal_Templateparser::TP_SINGLECOND; - } - not{ - $this->token = Smarty_Internal_Templateparser::TP_NOT; - } - typecast { - $this->token = Smarty_Internal_Templateparser::TP_TYPECAST; - } - openP { - $this->token = Smarty_Internal_Templateparser::TP_OPENP; - } - closeP { - $this->token = Smarty_Internal_Templateparser::TP_CLOSEP; - } - openB { - $this->token = Smarty_Internal_Templateparser::TP_OPENB; - } - closeB { - $this->token = Smarty_Internal_Templateparser::TP_CLOSEB; - } - ptr { - $this->token = Smarty_Internal_Templateparser::TP_PTR; - } - aptr { - $this->token = Smarty_Internal_Templateparser::TP_APTR; - } - equal { - $this->token = Smarty_Internal_Templateparser::TP_EQUAL; - } - incdec { - $this->token = Smarty_Internal_Templateparser::TP_INCDEC; - } - unimath { - $this->token = Smarty_Internal_Templateparser::TP_UNIMATH; - } - math { - $this->token = Smarty_Internal_Templateparser::TP_MATH; - } - at { - $this->token = Smarty_Internal_Templateparser::TP_AT; - } - hatch { - $this->token = Smarty_Internal_Templateparser::TP_HATCH; - } - attr { - // resolve conflicts with shorttag and right_delimiter starting with '=' - if (substr($this->data, $this->counter + strlen($this->value) - 1, $this->rdel_length) == $this->smarty->right_delimiter) { - preg_match("~\s+~",$this->value,$match); - $this->value = $match[0]; - $this->token = Smarty_Internal_Templateparser::TP_SPACE; - } else { - $this->token = Smarty_Internal_Templateparser::TP_ATTR; - } - } - namespace { - $this->token = Smarty_Internal_Templateparser::TP_NAMESPACE; - } - id { - $this->token = Smarty_Internal_Templateparser::TP_ID; - } - integer { - $this->token = Smarty_Internal_Templateparser::TP_INTEGER; - } - backtick { - $this->token = Smarty_Internal_Templateparser::TP_BACKTICK; - $this->yypopstate(); - } - vert { - $this->token = Smarty_Internal_Templateparser::TP_VERT; - } - dot { - $this->token = Smarty_Internal_Templateparser::TP_DOT; - } - comma { - $this->token = Smarty_Internal_Templateparser::TP_COMMA; - } - semicolon { - $this->token = Smarty_Internal_Templateparser::TP_SEMICOLON; - } - doublecolon { - $this->token = Smarty_Internal_Templateparser::TP_DOUBLECOLON; - } - colon { - $this->token = Smarty_Internal_Templateparser::TP_COLON; - } - qmark { - $this->token = Smarty_Internal_Templateparser::TP_QMARK; - } - hex { - $this->token = Smarty_Internal_Templateparser::TP_HEX; - } - space { - $this->token = Smarty_Internal_Templateparser::TP_SPACE; - } - ldel { - if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) { - $this->token = Smarty_Internal_Templateparser::TP_TEXT; - } else { - $this->yypushstate(self::TAG); - return true; - } - } - text { - $this->token = Smarty_Internal_Templateparser::TP_TEXT; - } - */ - - /*!lex2php - %statename LITERAL - ldel literal rdel { - $this->literal_cnt++; - $this->token = Smarty_Internal_Templateparser::TP_LITERAL; - } - ldel slash literal rdel { - if ($this->literal_cnt) { - $this->literal_cnt--; - $this->token = Smarty_Internal_Templateparser::TP_LITERAL; - } else { - $this->token = Smarty_Internal_Templateparser::TP_LITERALEND; - $this->yypopstate(); - } - } - text { - $to = strlen($this->data); - preg_match("~{$this->ldel}[/]?literal{$this->rdel}~i",$this->data,$match,PREG_OFFSET_CAPTURE,$this->counter); - if (isset($match[0][1])) { - $to = $match[0][1]; - } else { - $this->compiler->trigger_template_error ("missing or misspelled literal closing tag"); - } - $this->value = substr($this->data,$this->counter,$to-$this->counter); - $this->token = Smarty_Internal_Templateparser::TP_LITERAL; - } - */ - /*!lex2php - %statename DOUBLEQUOTEDSTRING - ldel literal rdel { - $this->token = Smarty_Internal_Templateparser::TP_TEXT; - } - ldel slash literal rdel { - $this->token = Smarty_Internal_Templateparser::TP_TEXT; - } - ldel slash { - if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) { - $this->token = Smarty_Internal_Templateparser::TP_TEXT; - } else { - $this->yypushstate(self::TAG); - return true; - } - } - ldel id { - if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) { - $this->token = Smarty_Internal_Templateparser::TP_TEXT; - } else { - $this->yypushstate(self::TAG); - return true; - } - } - ldel { - if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) { - $this->token = Smarty_Internal_Templateparser::TP_TEXT; - } else { - $this->token = Smarty_Internal_Templateparser::TP_LDEL; - $this->taglineno = $this->line; - $this->yypushstate(self::TAGBODY); - } - } - double_quote { - $this->token = Smarty_Internal_Templateparser::TP_QUOTE; - $this->yypopstate(); - } - backtick dollar { - $this->token = Smarty_Internal_Templateparser::TP_BACKTICK; - $this->value = substr($this->value,0,-1); - $this->yypushstate(self::TAGBODY); - $this->taglineno = $this->line; - } - dollar id { - $this->token = Smarty_Internal_Templateparser::TP_DOLLARID; - } - dollar { - $this->token = Smarty_Internal_Templateparser::TP_TEXT; - } - textdoublequoted { - $this->token = Smarty_Internal_Templateparser::TP_TEXT; - } - text { - $to = strlen($this->data); - $this->value = substr($this->data,$this->counter,$to-$this->counter); - $this->token = Smarty_Internal_Templateparser::TP_TEXT; - } - */ - /*!lex2php - %statename CHILDBODY - ldel strip rdel { - if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) { - return false; - } else { - $this->token = Smarty_Internal_Templateparser::TP_STRIPON; - } - } - ldel slash strip rdel { - if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) { - return false; - } else { - $this->token = Smarty_Internal_Templateparser::TP_STRIPOFF; - } - } - ldel block { - if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) { - return false; - } else { - $this->yypopstate(); - return true; - } - } - text { - $to = strlen($this->data); - preg_match("~SMARTYldel\s*(([/])?strip\s*SMARTYrdel|block\s+)~i",$this->data,$match,PREG_OFFSET_CAPTURE,$this->counter); - if (isset($match[0][1])) { - $to = $match[0][1]; - } - $this->value = substr($this->data,$this->counter,$to-$this->counter); - return false; - } - - */ - /*!lex2php - %statename CHILDBLOCK - ldel literal rdel { - if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) { - $this->token = Smarty_Internal_Templateparser::TP_BLOCKSOURCE; - } else { - $this->token = Smarty_Internal_Templateparser::TP_BLOCKSOURCE; - $this->yypushstate(self::CHILDLITERAL); - } - } - ldel block { - if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) { - $this->token = Smarty_Internal_Templateparser::TP_BLOCKSOURCE; - } else { - $this->yypopstate(); - return true; - } - } - ldel slash block { - if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) { - $this->token = Smarty_Internal_Templateparser::TP_BLOCKSOURCE; - } else { - $this->yypopstate(); - return true; - } - } - ldel smartyblockchildparent { - if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) { - $this->token = Smarty_Internal_Templateparser::TP_BLOCKSOURCE; - } else { - $this->yypopstate(); - return true; - } - } - text { - $to = strlen($this->data); - preg_match("~SMARTYldel\s*(literal\s*SMARTYrdel|([/])?block(\s|SMARTYrdel)|[\$]smarty\.block\.(child|parent))~i",$this->data,$match,PREG_OFFSET_CAPTURE,$this->counter); - if (isset($match[0][1])) { - $to = $match[0][1]; - } - $this->value = substr($this->data,$this->counter,$to-$this->counter); - $this->token = Smarty_Internal_Templateparser::TP_BLOCKSOURCE; - } - */ - /*!lex2php - %statename CHILDLITERAL - ldel literal rdel { - if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) { - $this->token = Smarty_Internal_Templateparser::TP_BLOCKSOURCE; - } else { - $this->token = Smarty_Internal_Templateparser::TP_BLOCKSOURCE; - $this->yypushstate(self::CHILDLITERAL); - } - } - ldel slash literal rdel { - if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) { - $this->token = Smarty_Internal_Templateparser::TP_BLOCKSOURCE; - } else { - $this->token = Smarty_Internal_Templateparser::TP_BLOCKSOURCE; - $this->yypopstate(); - } - } - text { - $to = strlen($this->data); - preg_match("~{$this->ldel}[/]?literal\s*{$this->rdel}~i",$this->data,$match,PREG_OFFSET_CAPTURE,$this->counter); - if (isset($match[0][1])) { - $to = $match[0][1]; - } else { - $this->compiler->trigger_template_error ("missing or misspelled literal closing tag"); - } - $this->value = substr($this->data,$this->counter,$to-$this->counter); - $this->token = Smarty_Internal_Templateparser::TP_BLOCKSOURCE; - } - */ - } - - \ No newline at end of file diff --git a/library/smarty/lexer/smarty_internal_templateparser.y b/library/smarty/lexer/smarty_internal_templateparser.y deleted file mode 100644 --- a/library/smarty/lexer/smarty_internal_templateparser.y +++ /dev/null @@ -1,1329 +0,0 @@ -/** -* Smarty Internal Plugin Templateparser -* -* This is the template parser -* -* -* @package Smarty -* @subpackage Compiler -* @author Uwe Tews -*/ -%stack_size 500 -%name TP_ -%declare_class { -/** -* Smarty Internal Plugin Templateparser -* -* This is the template parser. -* It is generated from the smarty_internal_templateparser.y file -* @package Smarty -* @subpackage Compiler -* @author Uwe Tews -*/ -class Smarty_Internal_Templateparser -} -%include_class -{ - const Err1 = "Security error: Call to private object member not allowed"; - const Err2 = "Security error: Call to dynamic object member not allowed"; - const Err3 = "PHP in template not allowed. Use SmartyBC to enable it"; - - /** - * result status - * - * @var bool - */ - public $successful = true; - /** - * return value - * - * @var mixed - */ - public $retvalue = 0; - /** - * counter for prefix code - * - * @var int - */ - public static $prefix_number = 0; - /** - * @var - */ - public $yymajor; - /** - * last index of array variable - * - * @var mixed - */ - public $last_index; - /** - * last variable name - * - * @var string - */ - public $last_variable; - /** - * root parse tree buffer - * - * @var Smarty_Internal_ParseTree - */ - public $root_buffer; - /** - * current parse tree object - * - * @var Smarty_Internal_ParseTree - */ - public $current_buffer; - /** - * lexer object - * - * @var Smarty_Internal_Templatelexer - */ - private $lex; - /** - * internal error flag - * - * @var bool - */ - private $internalError = false; - /** - * {strip} status - * - * @var bool - */ - public $strip = false; - /** - * compiler object - * - * @var Smarty_Internal_TemplateCompilerBase - */ - public $compiler = null; - /** - * smarty object - * - * @var Smarty - */ - public $smarty = null; - /** - * template object - * - * @var Smarty_Internal_Template - */ - public $template = null; - /** - * block nesting level - * - * @var int - */ - public $block_nesting_level = 0; - - /** - * security object - * - * @var Smarty_Security - */ - private $security = null; - - /** - * constructor - * - * @param Smarty_Internal_Templatelexer $lex - * @param Smarty_Internal_TemplateCompilerBase $compiler - */ - function __construct(Smarty_Internal_Templatelexer $lex, Smarty_Internal_TemplateCompilerBase $compiler) - { - $this->lex = $lex; - $this->compiler = $compiler; - $this->template = $this->compiler->template; - $this->smarty = $this->template->smarty; - $this->security = isset($this->smarty->security_policy) ? $this->smarty->security_policy : false; - $this->current_buffer = $this->root_buffer = new Smarty_Internal_ParseTree_Template($this); - } - - /** - * insert PHP code in current buffer - * - * @param string $code - */ - public function insertPhpCode($code) - { - $this->current_buffer->append_subtree(new Smarty_Internal_ParseTree_Tag($this, $code)); - } - - /** - * merge PHP code with prefix code and return parse tree tag object - * - * @param string $code - * - * @return Smarty_Internal_ParseTree_Tag - */ - public function mergePrefixCode($code) - { - $tmp =''; - foreach ($this->compiler->prefix_code as $preCode) { - $tmp = empty($tmp) ? $preCode : $this->compiler->appendCode($tmp, $preCode); - } - $this->compiler->prefix_code=array(); - $tmp = empty($tmp) ? $code : $this->compiler->appendCode($tmp, $code); - return new Smarty_Internal_ParseTree_Tag($this, $this->compiler->processNocacheCode($tmp,true)); - } - -} - -%token_prefix TP_ - -%parse_accept -{ - $this->successful = !$this->internalError; - $this->internalError = false; - $this->retvalue = $this->_retvalue; -} - -%syntax_error -{ - $this->internalError = true; - $this->yymajor = $yymajor; - $this->compiler->trigger_template_error(); -} - -%stack_overflow -{ - $this->internalError = true; - $this->compiler->trigger_template_error("Stack overflow in template parser"); -} - -%left VERT. -%left COLON. - - // - // complete template - // -start(res) ::= template. { - res = $this->root_buffer->to_smarty_php(); -} - - // - // loop over template elements - // - // single template element -template ::= template_element(e). { - if (e != null) { - $this->current_buffer->append_subtree(e); - } -} - - // loop of elements -template ::= template template_element(e). { - if (e != null) { - // because of possible code injection - $this->current_buffer->append_subtree(e); - } -} - - // empty template -template ::= . - -// -// template elements -// - // Smarty tag -template_element(res)::= smartytag(st). { - if ($this->compiler->has_code) { - res = $this->mergePrefixCode(st); - } else { - res = null; - } - $this->compiler->has_variable_string = false; - $this->block_nesting_level = count($this->compiler->_tag_stack); -} - - // Literal -template_element(res) ::= literal(l). { - res = new Smarty_Internal_ParseTree_Text($this, l); -} - // php tags -template_element(res)::= PHP(o). { - $code = $this->compiler->compileTag('private_php',array(array('code' => o), array('type' => $this->lex->phpType )),array()); - if ($this->compiler->has_code && !empty($code)) { - $tmp =''; foreach ($this->compiler->prefix_code as $code) {$tmp.=$code;} $this->compiler->prefix_code=array(); - res = new Smarty_Internal_ParseTree_Tag($this, $this->compiler->processNocacheCode($tmp.$code,true)); - } else { - res = null; - } -} - - // nocache code -template_element(res)::= NOCACHE(c). { - $this->compiler->tag_nocache = true; - $save = $this->template->has_nocache_code; - res = new Smarty_Internal_ParseTree_Tag($this, $this->compiler->processNocacheCode("<?php echo '{c}';?>\n", $this->compiler, true)); - $this->template->has_nocache_code = $save; -} - // template text -template_element(res)::= text_content(t). { - res = $this->compiler->processText(t); -} - -text_content(res) ::= TEXT(o). { - res = o; -} - -text_content(res) ::= text_content(t) TEXT(o). { - res = t . o; -} - - // strip on -template_element ::= STRIPON(d). { - $this->strip = true; -} - // strip off -template_element ::= STRIPOFF(d). { - $this->strip = false; -} - // process source of inheritance child block -template_element ::= BLOCKSOURCE(s). { - if ($this->strip) { - SMARTY_INTERNAL_COMPILE_BLOCK::blockSource($this->compiler, preg_replace('![\t ]*[\r\n]+[\t ]*!', '', s)); - } else { - SMARTY_INTERNAL_COMPILE_BLOCK::blockSource($this->compiler, s); - } -} - - // Litteral -literal(res) ::= LITERALSTART LITERALEND. { - res = ''; -} - -literal(res) ::= LITERALSTART literal_elements(l) LITERALEND. { - res = l; -} - -literal_elements(res) ::= literal_elements(l1) literal_element(l2). { - res = l1.l2; -} - -literal_elements(res) ::= . { - res = ''; -} - -literal_element(res) ::= literal(l). { - res = l; -} - -literal_element(res) ::= LITERAL(l). { - res = l; -} - -smartytag(res) ::= tag(t) RDEL. { - res = t; -} -// -// output tags start here -// -smartytag(res) ::= SIMPLEOUTPUT(i). { - $var = trim(substr(i, $this->lex->ldel_length, -$this->lex->rdel_length), ' $'); - if (preg_match('/^(.*)(\s+nocache)$/', $var, $match)) { - res = $this->compiler->compileTag('private_print_expression',array('nocache'),array('value'=>$this->compiler->compileVariable('\''.$match[1].'\''))); - } else { - res = $this->compiler->compileTag('private_print_expression',array(),array('value'=>$this->compiler->compileVariable('\''.$var.'\''))); - } -} - - // output with optional attributes -tag(res) ::= LDEL variable(e). { - res = $this->compiler->compileTag('private_print_expression',array(),array('value'=>e)); -} - -tag(res) ::= LDEL variable(e) attributes(a). { - res = $this->compiler->compileTag('private_print_expression',a,array('value'=>e)); -} -tag(res) ::= LDEL value(e). { - res = $this->compiler->compileTag('private_print_expression',array(),array('value'=>e)); -} -tag(res) ::= LDEL value(e) attributes(a). { - res = $this->compiler->compileTag('private_print_expression',a,array('value'=>e)); -} - -tag(res) ::= LDEL expr(e). { - res = $this->compiler->compileTag('private_print_expression',array(),array('value'=>e)); -} - -tag(res) ::= LDEL expr(e) attributes(a). { - res = $this->compiler->compileTag('private_print_expression',a,array('value'=>e)); -} - -// -// Smarty tags start here -// - - // assign new style -tag(res) ::= LDEL DOLLARID(i) EQUAL value(e). { - res = $this->compiler->compileTag('assign',array(array('value'=>e),array('var'=>'\''.substr(i,1).'\''))); -} - -tag(res) ::= LDEL DOLLARID(i) EQUAL expr(e). { - res = $this->compiler->compileTag('assign',array(array('value'=>e),array('var'=>'\''.substr(i,1).'\''))); -} - -tag(res) ::= LDEL DOLLARID(i) EQUAL expr(e) attributes(a). { - res = $this->compiler->compileTag('assign',array_merge(array(array('value'=>e),array('var'=>'\''.substr(i,1).'\'')),a)); -} - -tag(res) ::= LDEL varindexed(vi) EQUAL expr(e) attributes(a). { - res = $this->compiler->compileTag('assign',array_merge(array(array('value'=>e),array('var'=>vi['var'])),a),array('smarty_internal_index'=>vi['smarty_internal_index'])); -} - -// simple tag like {name} -smartytag(res)::= SIMPLETAG(t). { - $tag = trim(substr(t, $this->lex->ldel_length, -$this->lex->rdel_length)); - if ($tag == 'strip') { - $this->strip = true; - res = null;; - } else { - if (defined($tag)) { - if ($this->security) { - $this->security->isTrustedConstant($tag, $this->compiler); - } - res = $this->compiler->compileTag('private_print_expression',array(),array('value'=>$tag)); - } else { - if (preg_match('/^(.*)(\s+nocache)$/', $tag, $match)) { - res = $this->compiler->compileTag($match[1],array("'nocache'")); - } else { - res = $this->compiler->compileTag($tag,array()); - } - } - } -} - - // tag with optional Smarty2 style attributes -tag(res) ::= LDEL ID(i) attributes(a). { - if (defined(i)) { - if ($this->security) { - $this->security->isTrustedConstant(i, $this->compiler); - } - res = $this->compiler->compileTag('private_print_expression',a,array('value'=>i)); - } else { - res = $this->compiler->compileTag(i,a); - } -} -tag(res) ::= LDEL ID(i). { - if (defined(i)) { - if ($this->security) { - $this->security->isTrustedConstant(i, $this->compiler); - } - res = $this->compiler->compileTag('private_print_expression',array(),array('value'=>i)); - } else { - res = $this->compiler->compileTag(i,array()); - } -} - - - // tag with modifier and optional Smarty2 style attributes -tag(res) ::= LDEL ID(i) modifierlist(l)attributes(a). { - if (defined(i)) { - if ($this->security) { - $this->security->isTrustedConstant(i, $this->compiler); - } - res = $this->compiler->compileTag('private_print_expression',a,array('value'=>i, 'modifierlist'=>l)); - } else { - res = '<?php ob_start();?>'.$this->compiler->compileTag(i,a).'<?php echo '; - res .= $this->compiler->compileTag('private_modifier',array(),array('modifierlist'=>l,'value'=>'ob_get_clean()')).';?>'; - } -} - - // registered object tag -tag(res) ::= LDEL ID(i) PTR ID(m) attributes(a). { - res = $this->compiler->compileTag(i,a,array('object_method'=>m)); -} - - // registered object tag with modifiers -tag(res) ::= LDEL ID(i) PTR ID(me) modifierlist(l) attributes(a). { - res = '<?php ob_start();?>'.$this->compiler->compileTag(i,a,array('object_method'=>me)).'<?php echo '; - res .= $this->compiler->compileTag('private_modifier',array(),array('modifierlist'=>l,'value'=>'ob_get_clean()')).';?>'; -} - - // {if}, {elseif} and {while} tag -tag(res) ::= LDELIF(i) expr(ie). { - $tag = trim(substr(i,$this->lex->ldel_length)); - res = $this->compiler->compileTag(($tag == 'else if')? 'elseif' : $tag,array(),array('if condition'=>ie)); -} - -tag(res) ::= LDELIF(i) expr(ie) attributes(a). { - $tag = trim(substr(i,$this->lex->ldel_length)); - res = $this->compiler->compileTag(($tag == 'else if')? 'elseif' : $tag,a,array('if condition'=>ie)); -} - -tag(res) ::= LDELIF(i) statement(ie). { - $tag = trim(substr(i,$this->lex->ldel_length)); - res = $this->compiler->compileTag(($tag == 'else if')? 'elseif' : $tag,array(),array('if condition'=>ie)); -} - -tag(res) ::= LDELIF(i) statement(ie) attributes(a). { - $tag = trim(substr(i,$this->lex->ldel_length)); - res = $this->compiler->compileTag(($tag == 'else if')? 'elseif' : $tag,a,array('if condition'=>ie)); -} - - // {for} tag -tag(res) ::= LDELFOR statements(st) SEMICOLON expr(ie) SEMICOLON varindexed(v2) foraction(e2) attributes(a). { - res = $this->compiler->compileTag('for',array_merge(a,array(array('start'=>st),array('ifexp'=>ie),array('var'=>v2),array('step'=>e2))),1); -} - - foraction(res) ::= EQUAL expr(e). { - res = '='.e; -} - - foraction(res) ::= INCDEC(e). { - res = e; -} - -tag(res) ::= LDELFOR statement(st) TO expr(v) attributes(a). { - res = $this->compiler->compileTag('for',array_merge(a,array(array('start'=>st),array('to'=>v))),0); -} - -tag(res) ::= LDELFOR statement(st) TO expr(v) STEP expr(v2) attributes(a). { - res = $this->compiler->compileTag('for',array_merge(a,array(array('start'=>st),array('to'=>v),array('step'=>v2))),0); -} - - // {foreach} tag -tag(res) ::= LDELFOREACH attributes(a). { - res = $this->compiler->compileTag('foreach',a); -} - - // {foreach $array as $var} tag -tag(res) ::= LDELFOREACH SPACE value(v1) AS varvar(v0) attributes(a). { - res = $this->compiler->compileTag('foreach',array_merge(a,array(array('from'=>v1),array('item'=>v0)))); -} - -tag(res) ::= LDELFOREACH SPACE value(v1) AS varvar(v2) APTR varvar(v0) attributes(a). { - res = $this->compiler->compileTag('foreach',array_merge(a,array(array('from'=>v1),array('item'=>v0),array('key'=>v2)))); -} - -tag(res) ::= LDELFOREACH SPACE expr(e) AS varvar(v0) attributes(a). { - res = $this->compiler->compileTag('foreach',array_merge(a,array(array('from'=>e),array('item'=>v0)))); -} - -tag(res) ::= LDELFOREACH SPACE expr(e) AS varvar(v1) APTR varvar(v0) attributes(a). { - res = $this->compiler->compileTag('foreach',array_merge(a,array(array('from'=>e),array('item'=>v0),array('key'=>v1)))); -} - - // {setfilter} -tag(res) ::= LDELSETFILTER ID(m) modparameters(p). { - res = $this->compiler->compileTag('setfilter',array(),array('modifier_list'=>array(array_merge(array(m),p)))); -} - -tag(res) ::= LDELSETFILTER ID(m) modparameters(p) modifierlist(l). { - res = $this->compiler->compileTag('setfilter',array(),array('modifier_list'=>array_merge(array(array_merge(array(m),p)),l))); -} - - // {$smarty.block.child} or {$smarty.block.parent} -tag(res) ::= LDEL SMARTYBLOCKCHILDPARENT(i). { - $j = strrpos(i,'.'); - if (i[$j+1] == 'c') { - // {$smarty.block.child} - res = SMARTY_INTERNAL_COMPILE_BLOCK::compileChildBlock($this->compiler); - } else { - // {$smarty.block.parent} - res = SMARTY_INTERNAL_COMPILE_BLOCK::compileParentBlock($this->compiler); - } -} - - - // end of block tag {/....} -smartytag(res)::= CLOSETAG(t). { - $tag = trim(substr(t, $this->lex->ldel_length, -$this->lex->rdel_length), ' /'); - if ($tag == 'strip') { - $this->strip = false; - res = null; - } else { - res = $this->compiler->compileTag($tag.'close',array()); - } - } -tag(res) ::= LDELSLASH ID(i). { - res = $this->compiler->compileTag(i.'close',array()); -} - -tag(res) ::= LDELSLASH ID(i) modifierlist(l). { - res = $this->compiler->compileTag(i.'close',array(),array('modifier_list'=>l)); -} - - // end of block object tag {/....} -tag(res) ::= LDELSLASH ID(i) PTR ID(m). { - res = $this->compiler->compileTag(i.'close',array(),array('object_method'=>m)); -} - -tag(res) ::= LDELSLASH ID(i) PTR ID(m) modifierlist(l). { - res = $this->compiler->compileTag(i.'close',array(),array('object_method'=>m, 'modifier_list'=>l)); -} - -// -//Attributes of Smarty tags -// - // list of attributes -attributes(res) ::= attributes(a1) attribute(a2). { - res = a1; - res[] = a2; -} - - // single attribute -attributes(res) ::= attribute(a). { - res = array(a); -} - - // no attributes -attributes(res) ::= . { - res = array(); -} - - // attribute -attribute(res) ::= SPACE ID(v) EQUAL ID(id). { - if (defined(id)) { - if ($this->security) { - $this->security->isTrustedConstant(id, $this->compiler); - } - res = array(v=>id); - } else { - res = array(v=>'\''.id.'\''); - } -} - -attribute(res) ::= ATTR(v) expr(e). { - res = array(trim(v," =\n\r\t")=>e); -} - -attribute(res) ::= ATTR(v) value(e). { - res = array(trim(v," =\n\r\t")=>e); -} - -attribute(res) ::= SPACE ID(v). { - res = '\''.v.'\''; -} - -attribute(res) ::= SPACE expr(e). { - res = e; -} - -attribute(res) ::= SPACE value(v). { - res = v; -} - -attribute(res) ::= SPACE INTEGER(i) EQUAL expr(e). { - res = array(i=>e); -} - - - -// -// statement -// -statements(res) ::= statement(s). { - res = array(s); -} - -statements(res) ::= statements(s1) COMMA statement(s). { - s1[]=s; - res = s1; -} - -statement(res) ::= DOLLARID(i) EQUAL INTEGER(e). { - res = array('var' => '\''.substr(i,1).'\'', 'value'=>e); -} -statement(res) ::= DOLLARID(i) EQUAL expr(e). { - res = array('var' => '\''.substr(i,1).'\'', 'value'=>e); -} - -statement(res) ::= varindexed(vi) EQUAL expr(e). { - res = array('var' => vi, 'value'=>e); -} - -statement(res) ::= OPENP statement(st) CLOSEP. { - res = st; -} - - -// -// expressions -// - - // single value -expr(res) ::= value(v). { - res = v; -} - - // ternary -expr(res) ::= ternary(v). { - res = v; -} - - // resources/streams -expr(res) ::= DOLLARID(i) COLON ID(i2). { - res = '$_smarty_tpl->getStreamVariable(\''.substr(i,1).'://' . i2 . '\')'; -} - - // arithmetic expression -expr(res) ::= expr(e) MATH(m) value(v). { - res = e . trim(m) . v; -} - -expr(res) ::= expr(e) UNIMATH(m) value(v). { - res = e . trim(m) . v; -} - - // array -expr(res) ::= array(a). { - res = a; -} - - // modifier -expr(res) ::= expr(e) modifierlist(l). { - res = $this->compiler->compileTag('private_modifier',array(),array('value'=>e,'modifierlist'=>l)); -} - -// if expression - // simple expression -expr(res) ::= expr(e1) lop(c) expr(e2). { - res = (isset(c['pre']) ? c['pre'] : '') . e1.c['op'].e2 . (isset(c['pre']) ? ')' : ''); -} -expr(res) ::= expr(e1) scond(c). { - res = c . e1 . ')'; -} - -expr(res) ::= expr(e1) ISIN array(a). { - res = 'in_array('.e1.','.a.')'; -} - -expr(res) ::= expr(e1) ISIN value(v). { - res = 'in_array('.e1.',(array)'.v.')'; -} - -expr(res) ::= variable(v1) INSTANCEOF(i) ns1(v2). { - res = v1.i.v2; -} - - -// -// ternary -// -ternary(res) ::= OPENP expr(v) CLOSEP QMARK DOLLARID(e1) COLON expr(e2). { - res = v.' ? '. $this->compiler->compileVariable('\''.substr(e1,1).'\'') . ' : '.e2; -} - -ternary(res) ::= OPENP expr(v) CLOSEP QMARK expr(e1) COLON expr(e2). { - res = v.' ? '.e1.' : '.e2; -} - - // value -value(res) ::= variable(v). { - res = v; -} - - // +/- value -value(res) ::= UNIMATH(m) value(v). { - res = m.v; -} - - // logical negation -value(res) ::= NOT value(v). { - res = '!'.v; -} - -value(res) ::= TYPECAST(t) value(v). { - res = t.v; -} - -value(res) ::= variable(v) INCDEC(o). { - res = v.o; -} - - // numeric -value(res) ::= HEX(n). { - res = n; -} - -value(res) ::= INTEGER(n). { - res = n; -} - -value(res) ::= INTEGER(n1) DOT INTEGER(n2). { - res = n1.'.'.n2; -} - -value(res) ::= INTEGER(n1) DOT. { - res = n1.'.'; -} - -value(res) ::= DOT INTEGER(n1). { - res = '.'.n1; -} - - // ID, true, false, null -value(res) ::= ID(id). { - if (defined(id)) { - if ($this->security) { - $this->security->isTrustedConstant(id, $this->compiler); - } - res = id; - } else { - res = '\''.id.'\''; - } -} - - // function call -value(res) ::= function(f). { - res = f; -} - - // expression -value(res) ::= OPENP expr(e) CLOSEP. { - res = "(". e .")"; -} - - // singele quoted string -value(res) ::= SINGLEQUOTESTRING(t). { - res = t; -} - - // double quoted string -value(res) ::= doublequoted_with_quotes(s). { - res = s; -} - - -value(res) ::= varindexed(vi) DOUBLECOLON static_class_access(r). { - self::$prefix_number++; - if (vi['var'] == '\'smarty\'') { - $this->compiler->prefix_code[] = '<?php $_tmp'.self::$prefix_number.' = '. $this->compiler->compileTag('private_special_variable',array(),vi['smarty_internal_index']).';?>'; - } else { - $this->compiler->prefix_code[] = '<?php $_tmp'.self::$prefix_number.' = '. $this->compiler->compileVariable(vi['var']).vi['smarty_internal_index'].';?>'; - } - res = '$_tmp'.self::$prefix_number.'::'.r[0].r[1]; -} - - // Smarty tag -value(res) ::= smartytag(st). { - self::$prefix_number++; - $tmp = $this->compiler->appendCode('<?php ob_start();?>', st); - $this->compiler->prefix_code[] = $this->compiler->appendCode($tmp, '<?php $_tmp'.self::$prefix_number.'=ob_get_clean();?>'); - res = '$_tmp'.self::$prefix_number; -} - -value(res) ::= value(v) modifierlist(l). { - res = $this->compiler->compileTag('private_modifier',array(),array('value'=>v,'modifierlist'=>l)); -} - // name space constant -value(res) ::= NAMESPACE(c). { - res = c; -} - - - // static class access -value(res) ::= ns1(c)DOUBLECOLON static_class_access(s). { - if (!in_array(strtolower(c), array('self', 'parent')) && (!$this->security || $this->security->isTrustedStaticClassAccess(c, s, $this->compiler))) { - if (isset($this->smarty->registered_classes[c])) { - res = $this->smarty->registered_classes[c].'::'.s[0].s[1]; - } else { - res = c.'::'.s[0].s[1]; - } - } else { - $this->compiler->trigger_template_error ("static class '".c."' is undefined or not allowed by security setting"); - } -} -// -// namespace stuff -// - -ns1(res) ::= ID(i). { - res = i; -} - -ns1(res) ::= NAMESPACE(i). { - res = i; -} - -//ns1(res) ::= variable(v). { -// res = v; -//} - - - - -// -// variables -// - // Smarty variable (optional array) -variable(res) ::= DOLLARID(i). { - res = $this->compiler->compileVariable('\''.substr(i,1).'\''); -} -variable(res) ::= varindexed(vi). { - if (vi['var'] == '\'smarty\'') { - $smarty_var = $this->compiler->compileTag('private_special_variable',array(),vi['smarty_internal_index']); - res = $smarty_var; - } else { - // used for array reset,next,prev,end,current - $this->last_variable = vi['var']; - $this->last_index = vi['smarty_internal_index']; - res = $this->compiler->compileVariable(vi['var']).vi['smarty_internal_index']; - } -} - - // variable with property -variable(res) ::= varvar(v) AT ID(p). { - res = '$_smarty_tpl->tpl_vars['. v .']->'.p; -} - - // object -variable(res) ::= object(o). { - res = o; -} - - // config variable -variable(res) ::= HATCH ID(i) HATCH. { - res = '$_smarty_tpl->getConfigVariable( \''. i .'\')'; -} - -variable(res) ::= HATCH ID(i) HATCH arrayindex(a). { - res = '(is_array($tmp = $_smarty_tpl->getConfigVariable( \''. i .'\')) ? $tmp'.a.' :null)'; -} - -variable(res) ::= HATCH variable(v) HATCH. { - res = '$_smarty_tpl->getConfigVariable( '. v .')'; -} - -variable(res) ::= HATCH variable(v) HATCH arrayindex(a). { - res = '(is_array($tmp = $_smarty_tpl->getConfigVariable( '. v .')) ? $tmp'.a.' : null)'; -} - -varindexed(res) ::= DOLLARID(i) arrayindex(a). { - res = array('var'=>'\''.substr(i,1).'\'', 'smarty_internal_index'=>a); -} -varindexed(res) ::= varvar(v) arrayindex(a). { - res = array('var'=>v, 'smarty_internal_index'=>a); -} - -// -// array index -// - // multiple array index -arrayindex(res) ::= arrayindex(a1) indexdef(a2). { - res = a1.a2; -} - - // no array index -arrayindex ::= . { - return; -} - -// single index definition - // Smarty2 style index -indexdef(res) ::= DOT DOLLARID(i). { - res = '['.$this->compiler->compileVariable('\''.substr(i,1).'\'').']'; -} -indexdef(res) ::= DOT varvar(v). { - res = '['.$this->compiler->compileVariable(v).']'; -} - -indexdef(res) ::= DOT varvar(v) AT ID(p). { - res = '['.$this->compiler->compileVariable(v).'->'.p.']'; -} - -indexdef(res) ::= DOT ID(i). { - if (defined(i)) { - if ($this->security) { - $this->security->isTrustedConstant(i, $this->compiler); - } - res = '['. i .']'; - } else { - res = "['". i ."']"; - } -} - -indexdef(res) ::= DOT INTEGER(n). { - res = '['. n .']'; -} - -indexdef(res) ::= DOT LDEL expr(e) RDEL. { - res = '['. e .']'; -} - - // section tag index -indexdef(res) ::= OPENB ID(i)CLOSEB. { - res = '['.$this->compiler->compileTag('private_special_variable',array(),'[\'section\'][\''.i.'\'][\'index\']').']'; -} - -indexdef(res) ::= OPENB ID(i) DOT ID(i2) CLOSEB. { - res = '['.$this->compiler->compileTag('private_special_variable',array(),'[\'section\'][\''.i.'\'][\''.i2.'\']').']'; -} -indexdef(res) ::= OPENB SINGLEQUOTESTRING(s) CLOSEB. { - res = '['.s.']'; -} -indexdef(res) ::= OPENB INTEGER(n) CLOSEB. { - res = '['.n.']'; -} -indexdef(res) ::= OPENB DOLLARID(i) CLOSEB. { - res = '['.$this->compiler->compileVariable('\''.substr(i,1).'\'').']';; -} -indexdef(res) ::= OPENB variable(v) CLOSEB. { - res = '['.v.']'; -} -indexdef(res) ::= OPENB value(v) CLOSEB. { - res = '['.v.']'; -} - - // PHP style index -indexdef(res) ::= OPENB expr(e) CLOSEB. { - res = '['. e .']'; -} - - // for assign append array -indexdef(res) ::= OPENB CLOSEB. { - res = '[]'; -} - - -// -// variable variable names -// - - // singel identifier element -varvar(res) ::= DOLLARID(i). { - res = '\''.substr(i,1).'\''; -} - // single $ -varvar(res) ::= DOLLAR. { - res = "''"; -} - - // sequence of identifier elements -varvar(res) ::= varvar(v1) varvarele(v2). { - res = v1.'.'.v2; -} - - // fix sections of element -varvarele(res) ::= ID(s). { - res = '\''.s.'\''; -} - - // variable sections of element -varvarele(res) ::= LDEL expr(e) RDEL. { - res = '('.e.')'; -} - -// -// objects -// -object(res) ::= varindexed(vi) objectchain(oc). { - if (vi['var'] == '\'smarty\'') { - res = $this->compiler->compileTag('private_special_variable',array(),vi['smarty_internal_index']).oc; - } else { - res = $this->compiler->compileVariable(vi['var']).vi['smarty_internal_index'].oc; - } -} - - // single element -objectchain(res) ::= objectelement(oe). { - res = oe; -} - - // chain of elements -objectchain(res) ::= objectchain(oc) objectelement(oe). { - res = oc.oe; -} - - // variable -objectelement(res)::= PTR ID(i) arrayindex(a). { - if ($this->security && substr(i,0,1) == '_') { - $this->compiler->trigger_template_error (self::Err1); - } - res = '->'.i.a; -} - -objectelement(res)::= PTR varvar(v) arrayindex(a). { - if ($this->security) { - $this->compiler->trigger_template_error (self::Err2); - } - res = '->{'.$this->compiler->compileVariable(v).a.'}'; -} - -objectelement(res)::= PTR LDEL expr(e) RDEL arrayindex(a). { - if ($this->security) { - $this->compiler->trigger_template_error (self::Err2); - } - res = '->{'.e.a.'}'; -} - -objectelement(res)::= PTR ID(ii) LDEL expr(e) RDEL arrayindex(a). { - if ($this->security) { - $this->compiler->trigger_template_error (self::Err2); - } - res = '->{\''.ii.'\'.'.e.a.'}'; -} - - // method -objectelement(res)::= PTR method(f). { - res = '->'.f; -} - - -// -// function -// -function(res) ::= ns1(f) OPENP params(p) CLOSEP. { - if (!$this->security || $this->security->isTrustedPhpFunction(f, $this->compiler)) { - if (strcasecmp(f,'isset') === 0 || strcasecmp(f,'empty') === 0 || strcasecmp(f,'array') === 0 || is_callable(f)) { - $func_name = strtolower(f); - if ($func_name == 'isset') { - if (count(p) == 0) { - $this->compiler->trigger_template_error ('Illegal number of paramer in "isset()"'); - } - $par = implode(',',p); - if (strncasecmp($par,'$_smarty_tpl->getConfigVariable',strlen('$_smarty_tpl->getConfigVariable')) === 0) { - self::$prefix_number++; - $this->compiler->prefix_code[] = '<?php $_tmp'.self::$prefix_number.'='.str_replace(')',', false)',$par).';?>'; - $isset_par = '$_tmp'.self::$prefix_number; - } else { - $isset_par=str_replace("')->value","',null,true,false)->value",$par); - } - res = f . "(". $isset_par .")"; - } elseif (in_array($func_name,array('empty','reset','current','end','prev','next'))){ - if (count(p) != 1) { - $this->compiler->trigger_template_error ('Illegal number of paramer in "empty()"'); - } - if ($func_name == 'empty') { - res = $func_name.'('.str_replace("')->value","',null,true,false)->value",p[0]).')'; - } else { - res = $func_name.'('.p[0].')'; - } - } else { - res = f . "(". implode(',',p) .")"; - } - } else { - $this->compiler->trigger_template_error ("unknown function \"" . f . "\""); - } - } -} - - -// -// method -// -method(res) ::= ID(f) OPENP params(p) CLOSEP. { - if ($this->security && substr(f,0,1) == '_') { - $this->compiler->trigger_template_error (self::Err1); - } - res = f . "(". implode(',',p) .")"; -} - -method(res) ::= DOLLARID(f) OPENP params(p) CLOSEP. { - if ($this->security) { - $this->compiler->trigger_template_error (self::Err2); - } - self::$prefix_number++; - $this->compiler->prefix_code[] = '<?php $_tmp'.self::$prefix_number.'='.$this->compiler->compileVariable('\''.substr(f,1).'\'').';?>'; - res = '$_tmp'.self::$prefix_number.'('. implode(',',p) .')'; -} - -// function/method parameter - // multiple parameters -params(res) ::= params(p) COMMA expr(e). { - res = array_merge(p,array(e)); -} - - // single parameter -params(res) ::= expr(e). { - res = array(e); -} - - // kein parameter -params(res) ::= . { - res = array(); -} - -// -// modifier -// -modifierlist(res) ::= modifierlist(l) modifier(m) modparameters(p). { - res = array_merge(l,array(array_merge(m,p))); -} - -modifierlist(res) ::= modifier(m) modparameters(p). { - res = array(array_merge(m,p)); -} - -modifier(res) ::= VERT AT ID(m). { - res = array(m); -} - -modifier(res) ::= VERT ID(m). { - res = array(m); -} - -// -// modifier parameter -// - // multiple parameter -modparameters(res) ::= modparameters(mps) modparameter(mp). { - res = array_merge(mps,mp); -} - - // no parameter -modparameters(res) ::= . { - res = array(); -} - - // parameter expression -modparameter(res) ::= COLON value(mp). { - res = array(mp); -} - -modparameter(res) ::= COLON array(mp). { - res = array(mp); -} - - // static class methode call -static_class_access(res) ::= method(m). { - res = array(m, '', 'method'); -} - - // static class methode call with object chainig -static_class_access(res) ::= method(m) objectchain(oc). { - res = array(m, oc, 'method'); -} - - // static class constant -static_class_access(res) ::= ID(v). { - res = array(v, ''); -} - - // static class variables -static_class_access(res) ::= DOLLARID(v) arrayindex(a). { - res = array(v, a, 'property'); -} - - // static class variables with object chain -static_class_access(res) ::= DOLLARID(v) arrayindex(a) objectchain(oc). { - res = array(v, a.oc, 'property'); -} - - -// if conditions and operators -lop(res) ::= LOGOP(o). { - res['op'] = ' '. trim(o) . ' '; -} - -lop(res) ::= TLOGOP(o). { - static $lops = array( - 'eq' => array('op' => ' == ', 'pre' => null), - 'ne' => array('op' => ' != ', 'pre' => null), - 'neq' => array('op' => ' != ', 'pre' => null), - 'gt' => array('op' => ' > ', 'pre' => null), - 'ge' => array('op' => ' >= ', 'pre' => null), - 'gte' => array('op' => ' >= ', 'pre' => null), - 'lt' => array('op' => ' < ', 'pre' => null), - 'le' => array('op' => ' <= ', 'pre' => null), - 'lte' => array('op' => ' <= ', 'pre' => null), - 'mod' => array('op' => ' % ', 'pre' => null), - 'and' => array('op' => ' && ', 'pre' => null), - 'or' => array('op' => ' || ', 'pre' => null), - 'xor' => array('op' => ' xor ', 'pre' => null), - 'isdivby' => array('op' => ' % ', 'pre' => '!('), - 'isnotdivby' => array('op' => ' % ', 'pre' => '('), - 'isevenby' => array('op' => ' / ', 'pre' => '!(1 & '), - 'isnotevenby' => array('op' => ' / ', 'pre' => '(1 & '), - 'isoddby' => array('op' => ' / ', 'pre' => '(1 & '), - 'isnotoddby' => array('op' => ' / ', 'pre' => '!(1 & '), - ); - $op = strtolower(preg_replace('/\s*/', '', o)); - res = $lops[$op]; -} - -scond(res) ::= SINGLECOND(o). { - static $scond = array ( - 'iseven' => '!(1 & ', - 'isnoteven' => '(1 & ', - 'isodd' => '(1 & ', - 'isnotodd' => '!(1 & ', - ); - $op = strtolower(str_replace(' ', '', o)); - res = $scond[$op]; -} - -// -// ARRAY element assignment -// -array(res) ::= OPENB arrayelements(a) CLOSEB. { - res = 'array('.a.')'; -} - -arrayelements(res) ::= arrayelement(a). { - res = a; -} - -arrayelements(res) ::= arrayelements(a1) COMMA arrayelement(a). { - res = a1.','.a; -} - -arrayelements ::= . { - return; -} - -arrayelement(res) ::= value(e1) APTR expr(e2). { - res = e1.'=>'.e2; -} - -arrayelement(res) ::= ID(i) APTR expr(e2). { - res = '\''.i.'\'=>'.e2; -} - -arrayelement(res) ::= expr(e). { - res = e; -} - - -// -// double qouted strings -// -doublequoted_with_quotes(res) ::= QUOTE QUOTE. { - res = "''"; -} - -doublequoted_with_quotes(res) ::= QUOTE doublequoted(s) QUOTE. { - res = s->to_smarty_php(); -} - - -doublequoted(res) ::= doublequoted(o1) doublequotedcontent(o2). { - o1->append_subtree(o2); - res = o1; -} - -doublequoted(res) ::= doublequotedcontent(o). { - res = new Smarty_Internal_ParseTree_Dq($this, o); -} - -doublequotedcontent(res) ::= BACKTICK variable(v) BACKTICK. { - res = new Smarty_Internal_ParseTree_Code($this, '(string)'.v); -} - -doublequotedcontent(res) ::= BACKTICK expr(e) BACKTICK. { - res = new Smarty_Internal_ParseTree_Code($this, '(string)'.e); -} - -doublequotedcontent(res) ::= DOLLARID(i). { - res = new Smarty_Internal_ParseTree_Code($this, '(string)$_smarty_tpl->tpl_vars[\''. substr(i,1) .'\']->value'); -} - -doublequotedcontent(res) ::= LDEL variable(v) RDEL. { - res = new Smarty_Internal_ParseTree_Code($this, '(string)'.v); -} - -doublequotedcontent(res) ::= LDEL expr(e) RDEL. { - res = new Smarty_Internal_ParseTree_Code($this, '(string)('.e.')'); -} - -doublequotedcontent(res) ::= smartytag(st). { - res = new Smarty_Internal_ParseTree_Tag($this, st); -} - -doublequotedcontent(res) ::= TEXT(o). { - res = new Smarty_Internal_ParseTree_DqContent($this, o); -} - diff --git a/library/smarty/libs/Autoloader.php b/library/smarty/libs/Autoloader.php deleted file mode 100644 --- a/library/smarty/libs/Autoloader.php +++ /dev/null @@ -1,154 +0,0 @@ -<?php -/** - * Smarty Autoloader - * - * @package Smarty - */ - -/** - * Smarty Autoloader - * - * @package Smarty - * @author Uwe Tews - * Usage: - * require_once '...path/Autoloader.php'; - * Smarty_Autoloader::register(); - * $smarty = new Smarty(); - * Note: This autoloader is not needed if you use Composer. - * Composer will automatically add the classes of the Smarty package to it core autoloader. - */ -class Smarty_Autoloader { - /** - * Filepath to Smarty root - * - * @var string - */ - public static $SMARTY_DIR = ''; - /** - * Filepath to Smarty internal plugins - * - * @var string - */ - public static $SMARTY_SYSPLUGINS_DIR = ''; - /** - * Array of not existing classes to avoid is_file calls for already tested classes - * - * @var array - */ - public static $unknown = array(); - /** - * Array with Smarty core classes and their filename - * - * @var array - */ - public static $rootClasses = array('Smarty' => 'Smarty.class.php', - 'SmartyBC' => 'SmartyBC.class.php', - ); - - private static $syspluginsClasses = array( - 'smarty_config_source' => true, - 'smarty_security' => true, - 'smarty_cacheresource' => true, - 'smarty_compiledresource' => true, - 'smarty_cacheresource_custom' => true, - 'smarty_cacheresource_keyvaluestore' => true, - 'smarty_resource' => true, - 'smarty_resource_custom' => true, - 'smarty_resource_uncompiled' => true, - 'smarty_resource_recompiled' => true, - 'smarty_template_source' => true, - 'smarty_template_compiled' => true, - 'smarty_template_cached' => true, - 'smarty_template_config' => true, - 'smarty_data' => true, - 'smarty_variable' => true, - 'smarty_undefined_variable' => true, - 'smartyexception' => true, - 'smartycompilerexception' => true, - 'smarty_internal_data' => true, - 'smarty_internal_template' => true, - 'smarty_internal_templatebase' => true, - 'smarty_internal_resource_file' => true, - 'smarty_internal_resource_extends' => true, - 'smarty_internal_resource_eval' => true, - 'smarty_internal_resource_string' => true, - 'smarty_internal_resource_registered' => true, - 'smarty_internal_extension_codeframe' => true, - 'smarty_internal_extension_config' => true, - 'smarty_internal_filter_handler' => true, - 'smarty_internal_function_call_handler' => true, - 'smarty_internal_cacheresource_file' => true, - 'smarty_internal_write_file' => true, - ); - - /** - * Registers Smarty_Autoloader backward compatible to older installations. - * - * @param bool $prepend Whether to prepend the autoloader or not. - */ - public static function registerBC($prepend = false) { - /** - * register the class autoloader - */ - if (!defined('SMARTY_SPL_AUTOLOAD')) { - define('SMARTY_SPL_AUTOLOAD', 0); - } - if (SMARTY_SPL_AUTOLOAD && set_include_path(get_include_path() . PATH_SEPARATOR . SMARTY_SYSPLUGINS_DIR) !== false) { - $registeredAutoLoadFunctions = spl_autoload_functions(); - if (!isset($registeredAutoLoadFunctions['spl_autoload'])) { - spl_autoload_register(); - } - } else { - self::register($prepend); - } - } - - /** - * Registers Smarty_Autoloader as an SPL autoloader. - * - * @param bool $prepend Whether to prepend the autoloader or not. - */ - public static function register($prepend = false) { - self::$SMARTY_DIR = defined('SMARTY_DIR') ? SMARTY_DIR : dirname(__FILE__) . '/'; - self::$SMARTY_SYSPLUGINS_DIR = defined('SMARTY_SYSPLUGINS_DIR') ? SMARTY_SYSPLUGINS_DIR : self::$SMARTY_DIR . 'sysplugins/'; - if (version_compare(phpversion(), '5.3.0', '>=')) { - spl_autoload_register(array(__CLASS__, 'autoload'), true, $prepend); - } else { - spl_autoload_register(array(__CLASS__, 'autoload')); - } - } - - /** - * Handles autoloading of classes. - * - * @param string $class A class name. - */ - public static function autoload($class) { - // Request for Smarty or already unknown class - if (isset(self::$unknown[$class])) { - return; - } - $_class = strtolower($class); - if (isset(self::$syspluginsClasses[$_class])) { - $_class = (self::$syspluginsClasses[$_class] === true) ? $_class : self::$syspluginsClasses[$_class]; - $file = self::$SMARTY_SYSPLUGINS_DIR . $_class . '.php'; - require_once $file; - return; - } elseif (0 !== strpos($_class, 'smarty_internal_')) { - if (isset(self::$rootClasses[$class])) { - $file = self::$SMARTY_DIR . self::$rootClasses[$class]; - require_once $file; - return; - } - self::$unknown[$class] = true; - return; - } - $file = self::$SMARTY_SYSPLUGINS_DIR . $_class . '.php'; - if (is_file($file)) { - require_once $file; - return; - } - self::$unknown[$class] = true; - return; - } -} diff --git a/library/smarty/libs/Smarty.class.php b/library/smarty/libs/Smarty.class.php deleted file mode 100644 --- a/library/smarty/libs/Smarty.class.php +++ /dev/null @@ -1,1739 +0,0 @@ -<?php -/** - * Project: Smarty: the PHP compiling template engine - * File: Smarty.class.php - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * For questions, help, comments, discussion, etc., please join the - * Smarty mailing list. Send a blank e-mail to - * smarty-discussion-subscribe@googlegroups.com - * - * @link http://www.smarty.net/ - * @copyright 2015 New Digital Group, Inc. - * @copyright 2015 Uwe Tews - * @author Monte Ohrt <monte at ohrt dot com> - * @author Uwe Tews - * @author Rodney Rehm - * @package Smarty - * @version 3.1.27 - */ - -/** - * define shorthand directory separator constant - */ -if (!defined('DS')) { - define('DS', DIRECTORY_SEPARATOR); -} - -/** - * set SMARTY_DIR to absolute path to Smarty library files. - * Sets SMARTY_DIR only if user application has not already defined it. - */ -if (!defined('SMARTY_DIR')) { - define('SMARTY_DIR', dirname(__FILE__) . DS); -} - -/** - * set SMARTY_SYSPLUGINS_DIR to absolute path to Smarty internal plugins. - * Sets SMARTY_SYSPLUGINS_DIR only if user application has not already defined it. - */ -if (!defined('SMARTY_SYSPLUGINS_DIR')) { - define('SMARTY_SYSPLUGINS_DIR', SMARTY_DIR . 'sysplugins' . DS); -} -if (!defined('SMARTY_PLUGINS_DIR')) { - define('SMARTY_PLUGINS_DIR', SMARTY_DIR . 'plugins' . DS); -} -if (!defined('SMARTY_MBSTRING')) { - define('SMARTY_MBSTRING', function_exists('mb_get_info')); -} -if (!defined('SMARTY_RESOURCE_CHAR_SET')) { - // UTF-8 can only be done properly when mbstring is available! - /** - * @deprecated in favor of Smarty::$_CHARSET - */ - define('SMARTY_RESOURCE_CHAR_SET', SMARTY_MBSTRING ? 'UTF-8' : 'ISO-8859-1'); -} -if (!defined('SMARTY_RESOURCE_DATE_FORMAT')) { - /** - * @deprecated in favor of Smarty::$_DATE_FORMAT - */ - define('SMARTY_RESOURCE_DATE_FORMAT', '%b %e, %Y'); -} - -/** - * Try loading the Smarty_Internal_Data class - * If we fail we must load Smarty's autoloader. - * Otherwise we may have a global autoloader like Composer - */ -if (!class_exists('Smarty_Autoloader', false)) { - if (!class_exists('Smarty_Internal_Data', true)) { - require_once 'Autoloader.php'; - Smarty_Autoloader::registerBC(); - } -} - -/** - * Load always needed external class files - */ - -if (!class_exists('Smarty_Internal_Data', false)) { - require_once SMARTY_SYSPLUGINS_DIR . 'smarty_internal_data.php'; -} -require_once SMARTY_SYSPLUGINS_DIR . 'smarty_internal_templatebase.php'; -require_once SMARTY_SYSPLUGINS_DIR . 'smarty_internal_template.php'; -require_once SMARTY_SYSPLUGINS_DIR . 'smarty_resource.php'; -require_once SMARTY_SYSPLUGINS_DIR . 'smarty_variable.php'; -require_once SMARTY_SYSPLUGINS_DIR . 'smarty_template_source.php'; - -/** - * This is the main Smarty class - * - * @package Smarty - */ -class Smarty extends Smarty_Internal_TemplateBase { - /**#@+ - * constant definitions - */ - - /** - * smarty version - */ - const SMARTY_VERSION = '3.1.27'; - - /** - * define variable scopes - */ - const SCOPE_LOCAL = 0; - - const SCOPE_PARENT = 1; - - const SCOPE_ROOT = 2; - - const SCOPE_GLOBAL = 3; - - /** - * define caching modes - */ - const CACHING_OFF = 0; - - const CACHING_LIFETIME_CURRENT = 1; - - const CACHING_LIFETIME_SAVED = 2; - - /** - * define constant for clearing cache files be saved expiration datees - */ - const CLEAR_EXPIRED = -1; - - /** - * define compile check modes - */ - const COMPILECHECK_OFF = 0; - - const COMPILECHECK_ON = 1; - - const COMPILECHECK_CACHEMISS = 2; - - /** - * define debug modes - */ - const DEBUG_OFF = 0; - - const DEBUG_ON = 1; - - const DEBUG_INDIVIDUAL = 2; - - /** - * modes for handling of "<?php ... ?>" tags in templates. - */ - const PHP_PASSTHRU = 0; //-> print tags as plain text - - const PHP_QUOTE = 1; //-> escape tags as entities - - const PHP_REMOVE = 2; //-> escape tags as entities - - const PHP_ALLOW = 3; //-> escape tags as entities - - /** - * filter types - */ - const FILTER_POST = 'post'; - - const FILTER_PRE = 'pre'; - - const FILTER_OUTPUT = 'output'; - - const FILTER_VARIABLE = 'variable'; - - /** - * plugin types - */ - const PLUGIN_FUNCTION = 'function'; - - const PLUGIN_BLOCK = 'block'; - - const PLUGIN_COMPILER = 'compiler'; - - const PLUGIN_MODIFIER = 'modifier'; - - const PLUGIN_MODIFIERCOMPILER = 'modifiercompiler'; - - /**#@-*/ - - /** - * assigned global tpl vars - */ - public static $global_tpl_vars = array(); - - /** - * error handler returned by set_error_hanlder() in Smarty::muteExpectedErrors() - */ - public static $_previous_error_handler = null; - - /** - * contains directories outside of SMARTY_DIR that are to be muted by muteExpectedErrors() - */ - public static $_muted_directories = array('./templates_c/' => null, './cache/' => null); - - /** - * Flag denoting if Multibyte String functions are available - */ - public static $_MBSTRING = SMARTY_MBSTRING; - - /** - * The character set to adhere to (e.g. "UTF-8") - */ - public static $_CHARSET = SMARTY_RESOURCE_CHAR_SET; - - /** - * The date format to be used internally - * (accepts date() and strftime()) - */ - public static $_DATE_FORMAT = SMARTY_RESOURCE_DATE_FORMAT; - - /** - * Flag denoting if PCRE should run in UTF-8 mode - */ - public static $_UTF8_MODIFIER = 'u'; - - /** - * Flag denoting if operating system is windows - */ - public static $_IS_WINDOWS = false; - - /**#@+ - * variables - */ - - /** - * auto literal on delimiters with whitspace - * - * @var boolean - */ - public $auto_literal = true; - - /** - * display error on not assigned variables - * - * @var boolean - */ - public $error_unassigned = false; - - /** - * look up relative filepaths in include_path - * - * @var boolean - */ - public $use_include_path = false; - - /** - * template directory - * - * @var array - */ - private $template_dir = array('./templates/'); - - /** - * joined template directory string used in cache keys - * - * @var string - */ - public $joined_template_dir = './templates/'; - - /** - * joined config directory string used in cache keys - * - * @var string - */ - public $joined_config_dir = './configs/'; - - /** - * default template handler - * - * @var callable - */ - public $default_template_handler_func = null; - - /** - * default config handler - * - * @var callable - */ - public $default_config_handler_func = null; - - /** - * default plugin handler - * - * @var callable - */ - public $default_plugin_handler_func = null; - - /** - * compile directory - * - * @var string - */ - private $compile_dir = './templates_c/'; - - /** - * plugins directory - * - * @var array - */ - private $plugins_dir = null; - - /** - * cache directory - * - * @var string - */ - private $cache_dir = './cache/'; - - /** - * config directory - * - * @var array - */ - private $config_dir = array('./configs/'); - - /** - * force template compiling? - * - * @var boolean - */ - public $force_compile = false; - - /** - * check template for modifications? - * - * @var boolean - */ - public $compile_check = true; - - /** - * use sub dirs for compiled/cached files? - * - * @var boolean - */ - public $use_sub_dirs = false; - - /** - * allow ambiguous resources (that are made unique by the resource handler) - * - * @var boolean - */ - public $allow_ambiguous_resources = false; - - /** - * merge compiled includes - * - * @var boolean - */ - public $merge_compiled_includes = false; - - /** - * template inheritance merge compiled includes - * - * @var boolean - */ - public $inheritance_merge_compiled_includes = true; - - /** - * force cache file creation - * - * @var boolean - */ - public $force_cache = false; - - /** - * template left-delimiter - * - * @var string - */ - public $left_delimiter = "{"; - - /** - * template right-delimiter - * - * @var string - */ - public $right_delimiter = "}"; - - /**#@+ - * security - */ - /** - * class name - * This should be instance of Smarty_Security. - * - * @var string - * @see Smarty_Security - */ - public $security_class = 'Smarty_Security'; - - /** - * implementation of security class - * - * @var Smarty_Security - */ - public $security_policy = null; - - /** - * controls handling of PHP-blocks - * - * @var integer - */ - public $php_handling = self::PHP_PASSTHRU; - - /** - * controls if the php template file resource is allowed - * - * @var bool - */ - public $allow_php_templates = false; - - /** - * Should compiled-templates be prevented from being called directly? - * {@internal - * Currently used by Smarty_Internal_Template only. - * }} - * - * @var boolean - */ - public $direct_access_security = true; - - /**#@-*/ - /** - * debug mode - * Setting this to true enables the debug-console. - * - * @var boolean - */ - public $debugging = false; - - /** - * This determines if debugging is enable-able from the browser. - * <ul> - * <li>NONE => no debugging control allowed</li> - * <li>URL => enable debugging when SMARTY_DEBUG is found in the URL.</li> - * </ul> - * - * @var string - */ - public $debugging_ctrl = 'NONE'; - - /** - * Name of debugging URL-param. - * Only used when $debugging_ctrl is set to 'URL'. - * The name of the URL-parameter that activates debugging. - * - * @var string - */ - public $smarty_debug_id = 'SMARTY_DEBUG'; - - /** - * Path of debug template. - * - * @var string - */ - public $debug_tpl = null; - - /** - * When set, smarty uses this value as error_reporting-level. - * - * @var int - */ - public $error_reporting = null; - - /** - * Internal flag for getTags() - * - * @var boolean - */ - public $get_used_tags = false; - - /**#@+ - * config var settings - */ - - /** - * Controls whether variables with the same name overwrite each other. - * - * @var boolean - */ - public $config_overwrite = true; - - /** - * Controls whether config values of on/true/yes and off/false/no get converted to boolean. - * - * @var boolean - */ - public $config_booleanize = true; - - /** - * Controls whether hidden config sections/vars are read from the file. - * - * @var boolean - */ - public $config_read_hidden = false; - - /**#@-*/ - - /**#@+ - * resource locking - */ - - /** - * locking concurrent compiles - * - * @var boolean - */ - public $compile_locking = true; - - /** - * Controls whether cache resources should emply locking mechanism - * - * @var boolean - */ - public $cache_locking = false; - - /** - * seconds to wait for acquiring a lock before ignoring the write lock - * - * @var float - */ - public $locking_timeout = 10; - - /**#@-*/ - - /** - * resource type used if none given - * Must be an valid key of $registered_resources. - * - * @var string - */ - public $default_resource_type = 'file'; - - /** - * caching type - * Must be an element of $cache_resource_types. - * - * @var string - */ - public $caching_type = 'file'; - - /** - * internal config properties - * - * @var array - */ - public $properties = array(); - - /** - * config type - * - * @var string - */ - public $default_config_type = 'file'; - - /** - * cached template objects - * - * @var array - */ - public $source_objects = array(); - - /** - * cached template objects - * - * @var array - */ - public $template_objects = array(); - - /** - * enable resource caching - * - * @var bool - */ - public $resource_caching = false; - - /** - * enable template resource caching - * - * @var bool - */ - public $template_resource_caching = true; - - /** - * check If-Modified-Since headers - * - * @var boolean - */ - public $cache_modified_check = false; - - /** - * registered plugins - * - * @var array - */ - public $registered_plugins = array(); - - /** - * plugin search order - * - * @var array - */ - public $plugin_search_order = array('function', 'block', 'compiler', 'class'); - - /** - * registered objects - * - * @var array - */ - public $registered_objects = array(); - - /** - * registered classes - * - * @var array - */ - public $registered_classes = array(); - - /** - * registered filters - * - * @var array - */ - public $registered_filters = array(); - - /** - * registered resources - * - * @var array - */ - public $registered_resources = array(); - - /** - * resource handler cache - * - * @var array - */ - public $_resource_handlers = array(); - - /** - * registered cache resources - * - * @var array - */ - public $registered_cache_resources = array(); - - /** - * cache resource handler cache - * - * @var array - */ - public $_cacheresource_handlers = array(); - - /** - * autoload filter - * - * @var array - */ - public $autoload_filters = array(); - - /** - * default modifier - * - * @var array - */ - public $default_modifiers = array(); - - /** - * autoescape variable output - * - * @var boolean - */ - public $escape_html = false; - - /** - * global internal smarty vars - * - * @var array - */ - public static $_smarty_vars = array(); - - /** - * start time for execution time calculation - * - * @var int - */ - public $start_time = 0; - - /** - * default file permissions - * - * @var int - */ - public $_file_perms = 0644; - - /** - * default dir permissions - * - * @var int - */ - public $_dir_perms = 0771; - - /** - * block tag hierarchy - * - * @var array - */ - public $_tag_stack = array(); - - /** - * required by the compiler for BC - * - * @var string - */ - public $_current_file = null; - - /** - * internal flag to enable parser debugging - * - * @var bool - */ - public $_parserdebug = false; - - /** - * Cache of is_file results of loadPlugin() - * - * @var array - */ - public $_is_file_cache = array(); - - /**#@-*/ - - /** - * Initialize new Smarty object - */ - public function __construct() { - if (is_callable('mb_internal_encoding')) { - mb_internal_encoding(Smarty::$_CHARSET); - } - $this->start_time = microtime(true); - // check default dirs for overloading - if ($this->template_dir[0] !== './templates/' || isset($this->template_dir[1])) { - $this->setTemplateDir($this->template_dir); - } - if ($this->config_dir[0] !== './configs/' || isset($this->config_dir[1])) { - $this->setConfigDir($this->config_dir); - } - if ($this->compile_dir !== './templates_c/') { - unset(self::$_muted_directories['./templates_c/']); - $this->setCompileDir($this->compile_dir); - } - if ($this->cache_dir !== './cache/') { - unset(self::$_muted_directories['./cache/']); - $this->setCacheDir($this->cache_dir); - } - if (isset($this->plugins_dir)) { - $this->setPluginsDir($this->plugins_dir); - } else { - $this->setPluginsDir(SMARTY_PLUGINS_DIR); - } - if (isset($_SERVER['SCRIPT_NAME'])) { - Smarty::$global_tpl_vars['SCRIPT_NAME'] = new Smarty_Variable($_SERVER['SCRIPT_NAME']); - } - - // Check if we're running on windows - Smarty::$_IS_WINDOWS = strtoupper(substr(PHP_OS, 0, 3)) === 'WIN'; - - // let PCRE (preg_*) treat strings as ISO-8859-1 if we're not dealing with UTF-8 - if (Smarty::$_CHARSET !== 'UTF-8') { - Smarty::$_UTF8_MODIFIER = ''; - } - } - - /** - * fetches a rendered Smarty template - * - * @param string $template the resource handle of the template file or template object - * @param mixed $cache_id cache id to be used with this template - * @param mixed $compile_id compile id to be used with this template - * @param object $parent next higher level of Smarty variables - * @param bool $display true: display, false: fetch - * @param bool $merge_tpl_vars not used - left for BC - * @param bool $no_output_filter not used - left for BC - * - * @throws Exception - * @throws SmartyException - * @return string rendered template output - */ - public function fetch($template = null, $cache_id = null, $compile_id = null, $parent = null, $display = false, $merge_tpl_vars = true, $no_output_filter = false) { - if ($cache_id !== null && is_object($cache_id)) { - $parent = $cache_id; - $cache_id = null; - } - if ($parent === null) { - $parent = $this; - } - // get template object - $_template = is_object($template) ? $template : $this->createTemplate($template, $cache_id, $compile_id, $parent, false); - // set caching in template object - $_template->caching = $this->caching; - // fetch template content - return $_template->render(true, false, $display); - } - - /** - * displays a Smarty template - * - * @param string $template the resource handle of the template file or template object - * @param mixed $cache_id cache id to be used with this template - * @param mixed $compile_id compile id to be used with this template - * @param object $parent next higher level of Smarty variables - */ - public function display($template = null, $cache_id = null, $compile_id = null, $parent = null) { - // display template - $this->fetch($template, $cache_id, $compile_id, $parent, true); - } - - /** - * Check if a template resource exists - * - * @param string $resource_name template name - * - * @return boolean status - */ - public function templateExists($resource_name) { - // create template object - $save = $this->template_objects; - $tpl = new $this->template_class($resource_name, $this); - // check if it does exists - $result = $tpl->source->exists; - $this->template_objects = $save; - - return $result; - } - - /** - * Returns a single or all global variables - * - * @param string $varname variable name or null - * - * @return string variable value or or array of variables - */ - public function getGlobal($varname = null) { - if (isset($varname)) { - if (isset(self::$global_tpl_vars[$varname])) { - return self::$global_tpl_vars[$varname]->value; - } else { - return ''; - } - } else { - $_result = array(); - foreach (self::$global_tpl_vars AS $key => $var) { - $_result[$key] = $var->value; - } - - return $_result; - } - } - - /** - * Empty cache folder - * - * @param integer $exp_time expiration time - * @param string $type resource type - * - * @return integer number of cache files deleted - */ - public function clearAllCache($exp_time = null, $type = null) { - // load cache resource and call clearAll - $_cache_resource = Smarty_CacheResource::load($this, $type); - Smarty_CacheResource::invalidLoadedCache($this); - - return $_cache_resource->clearAll($this, $exp_time); - } - - /** - * Empty cache for a specific template - * - * @param string $template_name template name - * @param string $cache_id cache id - * @param string $compile_id compile id - * @param integer $exp_time expiration time - * @param string $type resource type - * - * @return integer number of cache files deleted - */ - public function clearCache($template_name, $cache_id = null, $compile_id = null, $exp_time = null, $type = null) { - // load cache resource and call clear - $_cache_resource = Smarty_CacheResource::load($this, $type); - Smarty_CacheResource::invalidLoadedCache($this); - - return $_cache_resource->clear($this, $template_name, $cache_id, $compile_id, $exp_time); - } - - /** - * Loads security class and enables security - * - * @param string|Smarty_Security $security_class if a string is used, it must be class-name - * - * @return Smarty current Smarty instance for chaining - * @throws SmartyException when an invalid class name is provided - */ - public function enableSecurity($security_class = null) { - if ($security_class instanceof Smarty_Security) { - $this->security_policy = $security_class; - - return $this; - } elseif (is_object($security_class)) { - throw new SmartyException("Class '" . get_class($security_class) . "' must extend Smarty_Security."); - } - if ($security_class == null) { - $security_class = $this->security_class; - } - if (!class_exists($security_class)) { - throw new SmartyException("Security class '$security_class' is not defined"); - } elseif ($security_class !== 'Smarty_Security' && !is_subclass_of($security_class, 'Smarty_Security')) { - throw new SmartyException("Class '$security_class' must extend Smarty_Security."); - } else { - $this->security_policy = new $security_class($this); - } - - return $this; - } - - /** - * Disable security - * - * @return Smarty current Smarty instance for chaining - */ - public function disableSecurity() { - $this->security_policy = null; - - return $this; - } - - /** - * Set template directory - * - * @param string|array $template_dir directory(s) of template sources - * - * @return Smarty current Smarty instance for chaining - */ - public function setTemplateDir($template_dir) { - $this->template_dir = array(); - foreach ((array)$template_dir as $k => $v) { - $this->template_dir[$k] = rtrim($v, '/\\') . DS; - } - $this->joined_template_dir = join(' # ', $this->template_dir); - return $this; - } - - /** - * Add template directory(s) - * - * @param string|array $template_dir directory(s) of template sources - * @param string $key of the array element to assign the template dir to - * - * @return Smarty current Smarty instance for chaining - * @throws SmartyException when the given template directory is not valid - */ - public function addTemplateDir($template_dir, $key = null) { - $this->_addDir('template_dir', $template_dir, $key); - $this->joined_template_dir = join(' # ', $this->template_dir); - return $this; - } - - /** - * Get template directories - * - * @param mixed $index index of directory to get, null to get all - * - * @return array|string list of template directories, or directory of $index - */ - public function getTemplateDir($index = null) { - if ($index !== null) { - return isset($this->template_dir[$index]) ? $this->template_dir[$index] : null; - } - return (array)$this->template_dir; - } - - /** - * Set config directory - * - * @param $config_dir - * - * @return Smarty current Smarty instance for chaining - */ - public function setConfigDir($config_dir) { - $this->config_dir = array(); - foreach ((array)$config_dir as $k => $v) { - $this->config_dir[$k] = rtrim($v, '/\\') . DS; - } - $this->joined_config_dir = join(' # ', $this->config_dir); - return $this; - } - - /** - * Add config directory(s) - * - * @param string|array $config_dir directory(s) of config sources - * @param mixed $key key of the array element to assign the config dir to - * - * @return Smarty current Smarty instance for chaining - */ - public function addConfigDir($config_dir, $key = null) { - $this->_addDir('config_dir', $config_dir, $key); - $this->joined_config_dir = join(' # ', $this->config_dir); - return $this; - } - - /** - * Get config directory - * - * @param mixed $index index of directory to get, null to get all - * - * @return array|string configuration directory - */ - public function getConfigDir($index = null) { - if ($index !== null) { - return isset($this->config_dir[$index]) ? $this->config_dir[$index] : null; - } - return (array)$this->config_dir; - } - - /** - * Set plugins directory - * - * @param string|array $plugins_dir directory(s) of plugins - * - * @return Smarty current Smarty instance for chaining - */ - public function setPluginsDir($plugins_dir) { - $this->plugins_dir = array(); - $this->addPluginsDir($plugins_dir); - return $this; - } - - /** - * Adds directory of plugin files - * - * @param $plugins_dir - * - * @return Smarty current Smarty instance for chaining - */ - public function addPluginsDir($plugins_dir) { - // make sure we're dealing with an array - $this->plugins_dir = (array)$this->plugins_dir; - foreach ((array)$plugins_dir as $v) { - $this->plugins_dir[] = rtrim($v, '/\\') . DS; - } - $this->plugins_dir = array_unique($this->plugins_dir); - $this->_is_file_cache = array(); - return $this; - } - - /** - * Get plugin directories - * - * @return array list of plugin directories - */ - public function getPluginsDir() { - return (array)$this->plugins_dir; - } - - /** - * Set compile directory - * - * @param string $compile_dir directory to store compiled templates in - * - * @return Smarty current Smarty instance for chaining - */ - public function setCompileDir($compile_dir) { - $this->compile_dir = rtrim($compile_dir, '/\\') . DS; - if (!isset(Smarty::$_muted_directories[$this->compile_dir])) { - Smarty::$_muted_directories[$this->compile_dir] = null; - } - - return $this; - } - - /** - * Get compiled directory - * - * @return string path to compiled templates - */ - public function getCompileDir() { - return $this->compile_dir; - } - - /** - * Set cache directory - * - * @param string $cache_dir directory to store cached templates in - * - * @return Smarty current Smarty instance for chaining - */ - public function setCacheDir($cache_dir) { - $this->cache_dir = rtrim($cache_dir, '/\\') . DS; - if (!isset(Smarty::$_muted_directories[$this->cache_dir])) { - Smarty::$_muted_directories[$this->cache_dir] = null; - } - return $this; - } - - /** - * Get cache directory - * - * @return string path of cache directory - */ - public function getCacheDir() { - return $this->cache_dir; - } - - /** - * add directories to given property name - * - * @param string $dirName directory property name - * @param string|array $dir directory string or array of strings - * @param mixed $key optional key - */ - private function _addDir($dirName, $dir, $key = null) { - // make sure we're dealing with an array - $this->$dirName = (array)$this->$dirName; - - if (is_array($dir)) { - foreach ($dir as $k => $v) { - if (is_int($k)) { - // indexes are not merged but appended - $this->{$dirName}[] = rtrim($v, '/\\') . DS; - } else { - // string indexes are overridden - $this->{$dirName}[$k] = rtrim($v, '/\\') . DS; - } - } - } else { - if ($key !== null) { - // override directory at specified index - $this->{$dirName}[$key] = rtrim($dir, '/\\') . DS; - } else { - // append new directory - $this->{$dirName}[] = rtrim($dir, '/\\') . DS; - } - } - } - - /** - * Set default modifiers - * - * @param array|string $modifiers modifier or list of modifiers to set - * - * @return Smarty current Smarty instance for chaining - */ - public function setDefaultModifiers($modifiers) { - $this->default_modifiers = (array)$modifiers; - - return $this; - } - - /** - * Add default modifiers - * - * @param array|string $modifiers modifier or list of modifiers to add - * - * @return Smarty current Smarty instance for chaining - */ - public function addDefaultModifiers($modifiers) { - if (is_array($modifiers)) { - $this->default_modifiers = array_merge($this->default_modifiers, $modifiers); - } else { - $this->default_modifiers[] = $modifiers; - } - - return $this; - } - - /** - * Get default modifiers - * - * @return array list of default modifiers - */ - public function getDefaultModifiers() { - return $this->default_modifiers; - } - - /** - * Set autoload filters - * - * @param array $filters filters to load automatically - * @param string $type "pre", "output", … specify the filter type to set. Defaults to none treating $filters' - * keys as the appropriate types - * - * @return Smarty current Smarty instance for chaining - */ - public function setAutoloadFilters($filters, $type = null) { - if ($type !== null) { - $this->autoload_filters[$type] = (array)$filters; - } else { - $this->autoload_filters = (array)$filters; - } - - return $this; - } - - /** - * Add autoload filters - * - * @param array $filters filters to load automatically - * @param string $type "pre", "output", … specify the filter type to set. Defaults to none treating $filters' - * keys as the appropriate types - * - * @return Smarty current Smarty instance for chaining - */ - public function addAutoloadFilters($filters, $type = null) { - if ($type !== null) { - if (!empty($this->autoload_filters[$type])) { - $this->autoload_filters[$type] = array_merge($this->autoload_filters[$type], (array)$filters); - } else { - $this->autoload_filters[$type] = (array)$filters; - } - } else { - foreach ((array)$filters as $key => $value) { - if (!empty($this->autoload_filters[$key])) { - $this->autoload_filters[$key] = array_merge($this->autoload_filters[$key], (array)$value); - } else { - $this->autoload_filters[$key] = (array)$value; - } - } - } - - return $this; - } - - /** - * Get autoload filters - * - * @param string $type type of filter to get autoloads for. Defaults to all autoload filters - * - * @return array array( 'type1' => array( 'filter1', 'filter2', … ) ) or array( 'filter1', 'filter2', …) if $type - * was specified - */ - public function getAutoloadFilters($type = null) { - if ($type !== null) { - return isset($this->autoload_filters[$type]) ? $this->autoload_filters[$type] : array(); - } - - return $this->autoload_filters; - } - - /** - * return name of debugging template - * - * @return string - */ - public function getDebugTemplate() { - return $this->debug_tpl; - } - - /** - * set the debug template - * - * @param string $tpl_name - * - * @return Smarty current Smarty instance for chaining - * @throws SmartyException if file is not readable - */ - public function setDebugTemplate($tpl_name) { - if (!is_readable($tpl_name)) { - throw new SmartyException("Unknown file '{$tpl_name}'"); - } - $this->debug_tpl = $tpl_name; - - return $this; - } - - /** - * creates a template object - * - * @param string $template the resource handle of the template file - * @param mixed $cache_id cache id to be used with this template - * @param mixed $compile_id compile id to be used with this template - * @param object $parent next higher level of Smarty variables - * @param boolean $do_clone flag is Smarty object shall be cloned - * - * @return object template object - */ - public function createTemplate($template, $cache_id = null, $compile_id = null, $parent = null, $do_clone = true) { - if ($cache_id !== null && (is_object($cache_id) || is_array($cache_id))) { - $parent = $cache_id; - $cache_id = null; - } - if ($parent !== null && is_array($parent)) { - $data = $parent; - $parent = null; - } else { - $data = null; - } - $_templateId = $this->getTemplateId($template, $cache_id, $compile_id); - if (isset($this->template_objects[$_templateId])) { - if ($do_clone) { - $tpl = clone $this->template_objects[$_templateId]; - $tpl->smarty = clone $tpl->smarty; - } else { - $tpl = $this->template_objects[$_templateId]; - } - $tpl->parent = $parent; - $tpl->tpl_vars = array(); - $tpl->config_vars = array(); - } else { - $tpl = new $this->template_class($template, $this, $parent, $cache_id, $compile_id); - if ($do_clone) { - $tpl->smarty = clone $tpl->smarty; - } - $tpl->templateId = $_templateId; - } - // fill data if present - if (!empty($data) && is_array($data)) { - // set up variable values - foreach ($data as $_key => $_val) { - $tpl->tpl_vars[$_key] = new Smarty_Variable($_val); - } - } - if ($this->debugging) { - Smarty_Internal_Debug::register_template($tpl); - } - return $tpl; - } - - /** - * Takes unknown classes and loads plugin files for them - * class name format: Smarty_PluginType_PluginName - * plugin filename format: plugintype.pluginname.php - * - * @param string $plugin_name class plugin name to load - * @param bool $check check if already loaded - * - * @throws SmartyException - * @return string |boolean filepath of loaded file or false - */ - public function loadPlugin($plugin_name, $check = true) { - // if function or class exists, exit silently (already loaded) - if ($check && (is_callable($plugin_name) || class_exists($plugin_name, false))) { - return true; - } - // Plugin name is expected to be: Smarty_[Type]_[Name] - $_name_parts = explode('_', $plugin_name, 3); - // class name must have three parts to be valid plugin - // count($_name_parts) < 3 === !isset($_name_parts[2]) - if (!isset($_name_parts[2]) || strtolower($_name_parts[0]) !== 'smarty') { - throw new SmartyException("plugin {$plugin_name} is not a valid name format"); - } - // if type is "internal", get plugin from sysplugins - if (strtolower($_name_parts[1]) == 'internal') { - $file = SMARTY_SYSPLUGINS_DIR . strtolower($plugin_name) . '.php'; - if (isset($this->_is_file_cache[$file]) ? $this->_is_file_cache[$file] : $this->_is_file_cache[$file] = is_file($file)) { - require_once($file); - return $file; - } else { - return false; - } - } - // plugin filename is expected to be: [type].[name].php - $_plugin_filename = "{$_name_parts[1]}.{$_name_parts[2]}.php"; - - $_stream_resolve_include_path = function_exists('stream_resolve_include_path'); - - // loop through plugin dirs and find the plugin - foreach ($this->getPluginsDir() as $_plugin_dir) { - $names = array($_plugin_dir . $_plugin_filename, $_plugin_dir . strtolower($_plugin_filename),); - foreach ($names as $file) { - if (isset($this->_is_file_cache[$file]) ? $this->_is_file_cache[$file] : $this->_is_file_cache[$file] = is_file($file)) { - require_once($file); - return $file; - } - if ($this->use_include_path && !preg_match('/^([\/\\\\]|[a-zA-Z]:[\/\\\\])/', $_plugin_dir)) { - // try PHP include_path - if ($_stream_resolve_include_path) { - $file = stream_resolve_include_path($file); - } else { - $file = Smarty_Internal_Get_Include_Path::getIncludePath($file); - } - - if ($file !== false) { - require_once($file); - - return $file; - } - } - } - } - // no plugin loaded - return false; - } - - /** - * Compile all template files - * - * @param string $extension file extension - * @param bool $force_compile force all to recompile - * @param int $time_limit - * @param int $max_errors - * - * @return integer number of template files recompiled - */ - public function compileAllTemplates($extension = '.tpl', $force_compile = false, $time_limit = 0, $max_errors = null) { - return Smarty_Internal_Utility::compileAllTemplates($extension, $force_compile, $time_limit, $max_errors, $this); - } - - /** - * Compile all config files - * - * @param string $extension file extension - * @param bool $force_compile force all to recompile - * @param int $time_limit - * @param int $max_errors - * - * @return integer number of template files recompiled - */ - public function compileAllConfig($extension = '.conf', $force_compile = false, $time_limit = 0, $max_errors = null) { - return Smarty_Internal_Utility::compileAllConfig($extension, $force_compile, $time_limit, $max_errors, $this); - } - - /** - * Delete compiled template file - * - * @param string $resource_name template name - * @param string $compile_id compile id - * @param integer $exp_time expiration time - * - * @return integer number of template files deleted - */ - public function clearCompiledTemplate($resource_name = null, $compile_id = null, $exp_time = null) { - return Smarty_Internal_Utility::clearCompiledTemplate($resource_name, $compile_id, $exp_time, $this); - } - - /** - * Return array of tag/attributes of all tags used by an template - * - * @param Smarty_Internal_Template $template - * - * @return array of tag/attributes - */ - public function getTags(Smarty_Internal_Template $template) { - return Smarty_Internal_Utility::getTags($template); - } - - /** - * Run installation test - * - * @param array $errors Array to write errors into, rather than outputting them - * - * @return boolean true if setup is fine, false if something is wrong - */ - public function testInstall(&$errors = null) { - return Smarty_Internal_TestInstall::testInstall($this, $errors); - } - - /** - * @param boolean $compile_check - */ - public function setCompileCheck($compile_check) { - $this->compile_check = $compile_check; - } - - /** - * @param boolean $use_sub_dirs - */ - public function setUseSubDirs($use_sub_dirs) { - $this->use_sub_dirs = $use_sub_dirs; - } - - /** - * @param boolean $caching - */ - public function setCaching($caching) { - $this->caching = $caching; - } - - /** - * @param int $cache_lifetime - */ - public function setCacheLifetime($cache_lifetime) { - $this->cache_lifetime = $cache_lifetime; - } - - /** - * @param string $compile_id - */ - public function setCompileId($compile_id) { - $this->compile_id = $compile_id; - } - - /** - * @param string $cache_id - */ - public function setCacheId($cache_id) { - $this->cache_id = $cache_id; - } - - /** - * @param int $error_reporting - */ - public function setErrorReporting($error_reporting) { - $this->error_reporting = $error_reporting; - } - - /** - * @param boolean $escape_html - */ - public function setEscapeHtml($escape_html) { - $this->escape_html = $escape_html; - } - - /** - * @param boolean $auto_literal - */ - public function setAutoLiteral($auto_literal) { - $this->auto_literal = $auto_literal; - } - - /** - * @param boolean $force_compile - */ - public function setForceCompile($force_compile) { - $this->force_compile = $force_compile; - } - - /** - * @param boolean $merge_compiled_includes - */ - public function setMergeCompiledIncludes($merge_compiled_includes) { - $this->merge_compiled_includes = $merge_compiled_includes; - } - - /** - * @param string $left_delimiter - */ - public function setLeftDelimiter($left_delimiter) { - $this->left_delimiter = $left_delimiter; - } - - /** - * @param string $right_delimiter - */ - public function setRightDelimiter($right_delimiter) { - $this->right_delimiter = $right_delimiter; - } - - /** - * @param boolean $debugging - */ - public function setDebugging($debugging) { - $this->debugging = $debugging; - } - - /** - * @param boolean $config_overwrite - */ - public function setConfigOverwrite($config_overwrite) { - $this->config_overwrite = $config_overwrite; - } - - /** - * @param boolean $config_booleanize - */ - public function setConfigBooleanize($config_booleanize) { - $this->config_booleanize = $config_booleanize; - } - - /** - * @param boolean $config_read_hidden - */ - public function setConfigReadHidden($config_read_hidden) { - $this->config_read_hidden = $config_read_hidden; - } - - /** - * @param boolean $compile_locking - */ - public function setCompileLocking($compile_locking) { - $this->compile_locking = $compile_locking; - } - - /** - * Class destructor - */ - public function __destruct() { - // intentionally left blank - } - - /** - * <<magic>> Generic getter. - * Calls the appropriate getter function. - * Issues an E_USER_NOTICE if no valid getter is found. - * - * @param string $name property name - * - * @return mixed - */ - public function __get($name) { - $allowed = array('template_dir' => 'getTemplateDir', 'config_dir' => 'getConfigDir', - 'plugins_dir' => 'getPluginsDir', 'compile_dir' => 'getCompileDir', - 'cache_dir' => 'getCacheDir',); - - if (isset($allowed[$name])) { - return $this->{$allowed[$name]}(); - } else { - trigger_error('Undefined property: ' . get_class($this) . '::$' . $name, E_USER_NOTICE); - } - } - - /** - * <<magic>> Generic setter. - * Calls the appropriate setter function. - * Issues an E_USER_NOTICE if no valid setter is found. - * - * @param string $name property name - * @param mixed $value parameter passed to setter - */ - public function __set($name, $value) { - $allowed = array('template_dir' => 'setTemplateDir', 'config_dir' => 'setConfigDir', - 'plugins_dir' => 'setPluginsDir', 'compile_dir' => 'setCompileDir', - 'cache_dir' => 'setCacheDir',); - - if (isset($allowed[$name])) { - $this->{$allowed[$name]}($value); - } else { - trigger_error('Undefined property: ' . get_class($this) . '::$' . $name, E_USER_NOTICE); - } - } - - /** - * Error Handler to mute expected messages - * - * @link http://php.net/set_error_handler - * - * @param integer $errno Error level - * @param $errstr - * @param $errfile - * @param $errline - * @param $errcontext - * - * @return boolean - */ - public static function mutingErrorHandler($errno, $errstr, $errfile, $errline, $errcontext) { - $_is_muted_directory = false; - - // add the SMARTY_DIR to the list of muted directories - if (!isset(Smarty::$_muted_directories[SMARTY_DIR])) { - $smarty_dir = realpath(SMARTY_DIR); - if ($smarty_dir !== false) { - Smarty::$_muted_directories[SMARTY_DIR] = array('file' => $smarty_dir, - 'length' => strlen($smarty_dir),); - } - } - - // walk the muted directories and test against $errfile - foreach (Smarty::$_muted_directories as $key => &$dir) { - if (!$dir) { - // resolve directory and length for speedy comparisons - $file = realpath($key); - if ($file === false) { - // this directory does not exist, remove and skip it - unset(Smarty::$_muted_directories[$key]); - continue; - } - $dir = array('file' => $file, 'length' => strlen($file),); - } - if (!strncmp($errfile, $dir['file'], $dir['length'])) { - $_is_muted_directory = true; - break; - } - } - - // pass to next error handler if this error did not occur inside SMARTY_DIR - // or the error was within smarty but masked to be ignored - if (!$_is_muted_directory || ($errno && $errno & error_reporting())) { - if (Smarty::$_previous_error_handler) { - return call_user_func(Smarty::$_previous_error_handler, $errno, $errstr, $errfile, $errline, $errcontext); - } else { - return false; - } - } - } - - /** - * Enable error handler to mute expected messages - * - * @return void - */ - public static function muteExpectedErrors() { - /* - error muting is done because some people implemented custom error_handlers using - http://php.net/set_error_handler and for some reason did not understand the following paragraph: - - It is important to remember that the standard PHP error handler is completely bypassed for the - error types specified by error_types unless the callback function returns FALSE. - error_reporting() settings will have no effect and your error handler will be called regardless - - however you are still able to read the current value of error_reporting and act appropriately. - Of particular note is that this value will be 0 if the statement that caused the error was - prepended by the @ error-control operator. - - Smarty deliberately uses @filemtime() over file_exists() and filemtime() in some places. Reasons include - - @filemtime() is almost twice as fast as using an additional file_exists() - - between file_exists() and filemtime() a possible race condition is opened, - which does not exist using the simple @filemtime() approach. - */ - $error_handler = array('Smarty', 'mutingErrorHandler'); - $previous = set_error_handler($error_handler); - - // avoid dead loops - if ($previous !== $error_handler) { - Smarty::$_previous_error_handler = $previous; - } - } - - /** - * Disable error handler muting expected messages - * - * @return void - */ - public static function unmuteExpectedErrors() { - restore_error_handler(); - } -} diff --git a/library/smarty/libs/SmartyBC.class.php b/library/smarty/libs/SmartyBC.class.php deleted file mode 100644 --- a/library/smarty/libs/SmartyBC.class.php +++ /dev/null @@ -1,412 +0,0 @@ -<?php -/** - * Project: Smarty: the PHP compiling template engine - * File: SmartyBC.class.php - * SVN: $Id: $ - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * For questions, help, comments, discussion, etc., please join the - * Smarty mailing list. Send a blank e-mail to - * smarty-discussion-subscribe@googlegroups.com - * - * @link http://www.smarty.net/ - * @copyright 2008 New Digital Group, Inc. - * @author Monte Ohrt <monte at ohrt dot com> - * @author Uwe Tews - * @author Rodney Rehm - * @package Smarty - */ -/** - * @ignore - */ -require_once(dirname(__FILE__) . '/Smarty.class.php'); - -/** - * Smarty Backward Compatability Wrapper Class - * - * @package Smarty - */ -class SmartyBC extends Smarty { - /** - * Smarty 2 BC - * - * @var string - */ - public $_version = self::SMARTY_VERSION; - - /** - * Initialize new SmartyBC object - * - * @param array $options options to set during initialization, e.g. array( 'forceCompile' => false ) - */ - public function __construct(array $options = array()) { - parent::__construct($options); - } - - /** - * wrapper for assign_by_ref - * - * @param string $tpl_var the template variable name - * @param mixed &$value the referenced value to assign - */ - public function assign_by_ref($tpl_var, &$value) { - $this->assignByRef($tpl_var, $value); - } - - /** - * wrapper for append_by_ref - * - * @param string $tpl_var the template variable name - * @param mixed &$value the referenced value to append - * @param boolean $merge flag if array elements shall be merged - */ - public function append_by_ref($tpl_var, &$value, $merge = false) { - $this->appendByRef($tpl_var, $value, $merge); - } - - /** - * clear the given assigned template variable. - * - * @param string $tpl_var the template variable to clear - */ - public function clear_assign($tpl_var) { - $this->clearAssign($tpl_var); - } - - /** - * Registers custom function to be used in templates - * - * @param string $function the name of the template function - * @param string $function_impl the name of the PHP function to register - * @param bool $cacheable - * @param mixed $cache_attrs - */ - public function register_function($function, $function_impl, $cacheable = true, $cache_attrs = null) { - $this->registerPlugin('function', $function, $function_impl, $cacheable, $cache_attrs); - } - - /** - * Unregisters custom function - * - * @param string $function name of template function - */ - public function unregister_function($function) { - $this->unregisterPlugin('function', $function); - } - - /** - * Registers object to be used in templates - * - * @param string $object name of template object - * @param object $object_impl the referenced PHP object to register - * @param array $allowed list of allowed methods (empty = all) - * @param boolean $smarty_args smarty argument format, else traditional - * @param array $block_methods list of methods that are block format - * - * @throws SmartyException - * @internal param array $block_functs list of methods that are block format - */ - public function register_object($object, $object_impl, $allowed = array(), $smarty_args = true, $block_methods = array()) { - settype($allowed, 'array'); - settype($smarty_args, 'boolean'); - $this->registerObject($object, $object_impl, $allowed, $smarty_args, $block_methods); - } - - /** - * Unregisters object - * - * @param string $object name of template object - */ - public function unregister_object($object) { - $this->unregisterObject($object); - } - - /** - * Registers block function to be used in templates - * - * @param string $block name of template block - * @param string $block_impl PHP function to register - * @param bool $cacheable - * @param mixed $cache_attrs - */ - public function register_block($block, $block_impl, $cacheable = true, $cache_attrs = null) { - $this->registerPlugin('block', $block, $block_impl, $cacheable, $cache_attrs); - } - - /** - * Unregisters block function - * - * @param string $block name of template function - */ - public function unregister_block($block) { - $this->unregisterPlugin('block', $block); - } - - /** - * Registers compiler function - * - * @param string $function name of template function - * @param string $function_impl name of PHP function to register - * @param bool $cacheable - */ - public function register_compiler_function($function, $function_impl, $cacheable = true) { - $this->registerPlugin('compiler', $function, $function_impl, $cacheable); - } - - /** - * Unregisters compiler function - * - * @param string $function name of template function - */ - public function unregister_compiler_function($function) { - $this->unregisterPlugin('compiler', $function); - } - - /** - * Registers modifier to be used in templates - * - * @param string $modifier name of template modifier - * @param string $modifier_impl name of PHP function to register - */ - public function register_modifier($modifier, $modifier_impl) { - $this->registerPlugin('modifier', $modifier, $modifier_impl); - } - - /** - * Unregisters modifier - * - * @param string $modifier name of template modifier - */ - public function unregister_modifier($modifier) { - $this->unregisterPlugin('modifier', $modifier); - } - - /** - * Registers a resource to fetch a template - * - * @param string $type name of resource - * @param array $functions array of functions to handle resource - */ - public function register_resource($type, $functions) { - $this->registerResource($type, $functions); - } - - /** - * Unregisters a resource - * - * @param string $type name of resource - */ - public function unregister_resource($type) { - $this->unregisterResource($type); - } - - /** - * Registers a prefilter function to apply - * to a template before compiling - * - * @param callable $function - */ - public function register_prefilter($function) { - $this->registerFilter('pre', $function); - } - - /** - * Unregisters a prefilter function - * - * @param callable $function - */ - public function unregister_prefilter($function) { - $this->unregisterFilter('pre', $function); - } - - /** - * Registers a postfilter function to apply - * to a compiled template after compilation - * - * @param callable $function - */ - public function register_postfilter($function) { - $this->registerFilter('post', $function); - } - - /** - * Unregisters a postfilter function - * - * @param callable $function - */ - public function unregister_postfilter($function) { - $this->unregisterFilter('post', $function); - } - - /** - * Registers an output filter function to apply - * to a template output - * - * @param callable $function - */ - public function register_outputfilter($function) { - $this->registerFilter('output', $function); - } - - /** - * Unregisters an outputfilter function - * - * @param callable $function - */ - public function unregister_outputfilter($function) { - $this->unregisterFilter('output', $function); - } - - /** - * load a filter of specified type and name - * - * @param string $type filter type - * @param string $name filter name - */ - public function load_filter($type, $name) { - $this->loadFilter($type, $name); - } - - /** - * clear cached content for the given template and cache id - * - * @param string $tpl_file name of template file - * @param string $cache_id name of cache_id - * @param string $compile_id name of compile_id - * @param string $exp_time expiration time - * - * @return boolean - */ - public function clear_cache($tpl_file = null, $cache_id = null, $compile_id = null, $exp_time = null) { - return $this->clearCache($tpl_file, $cache_id, $compile_id, $exp_time); - } - - /** - * clear the entire contents of cache (all templates) - * - * @param string $exp_time expire time - * - * @return boolean - */ - public function clear_all_cache($exp_time = null) { - return $this->clearCache(null, null, null, $exp_time); - } - - /** - * test to see if valid cache exists for this template - * - * @param string $tpl_file name of template file - * @param string $cache_id - * @param string $compile_id - * - * @return boolean - */ - public function is_cached($tpl_file, $cache_id = null, $compile_id = null) { - return $this->isCached($tpl_file, $cache_id, $compile_id); - } - - /** - * clear all the assigned template variables. - */ - public function clear_all_assign() { - $this->clearAllAssign(); - } - - /** - * clears compiled version of specified template resource, - * or all compiled template files if one is not specified. - * This function is for advanced use only, not normally needed. - * - * @param string $tpl_file - * @param string $compile_id - * @param string $exp_time - * - * @return boolean results of {@link smarty_core_rm_auto()} - */ - public function clear_compiled_tpl($tpl_file = null, $compile_id = null, $exp_time = null) { - return $this->clearCompiledTemplate($tpl_file, $compile_id, $exp_time); - } - - /** - * Checks whether requested template exists. - * - * @param string $tpl_file - * - * @return boolean - */ - public function template_exists($tpl_file) { - return $this->templateExists($tpl_file); - } - - /** - * Returns an array containing template variables - * - * @param string $name - * - * @return array - */ - public function get_template_vars($name = null) { - return $this->getTemplateVars($name); - } - - /** - * Returns an array containing config variables - * - * @param string $name - * - * @return array - */ - public function get_config_vars($name = null) { - return $this->getConfigVars($name); - } - - /** - * load configuration values - * - * @param string $file - * @param string $section - * @param string $scope - */ - public function config_load($file, $section = null, $scope = 'global') { - $this->ConfigLoad($file, $section, $scope); - } - - /** - * return a reference to a registered object - * - * @param string $name - * - * @return object - */ - public function get_registered_object($name) { - return $this->getRegisteredObject($name); - } - - /** - * clear configuration values - * - * @param string $var - */ - public function clear_config($var = null) { - $this->clearConfig($var); - } - - /** - * trigger Smarty error - * - * @param string $error_msg - * @param integer $error_type - */ - public function trigger_error($error_msg, $error_type = E_USER_WARNING) { - trigger_error("Smarty error: $error_msg", $error_type); - } -} diff --git a/library/smarty/libs/debug.tpl b/library/smarty/libs/debug.tpl deleted file mode 100644 --- a/library/smarty/libs/debug.tpl +++ /dev/null @@ -1,167 +0,0 @@ -{capture name='_smarty_debug' assign=debug_output} - <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> - <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> - <head> - <title>Smarty Debug Console</title> - <style type="text/css"> - {literal} - body, h1, h2, h3, td, th, p { - font-family: sans-serif; - font-weight: normal; - font-size: 0.9em; - margin: 1px; - padding: 0; - } - - h1 { - margin: 0; - text-align: left; - padding: 2px; - background-color: #f0c040; - color: black; - font-weight: bold; - font-size: 1.2em; - } - - h2 { - background-color: #9B410E; - color: white; - text-align: left; - font-weight: bold; - padding: 2px; - border-top: 1px solid black; - } - - h3 { - text-align: left; - font-weight: bold; - color: black; - font-size: 0.7em; - padding: 2px; - } - - body { - background: black; - } - - p, table, div { - background: #f0ead8; - } - - p { - margin: 0; - font-style: italic; - text-align: center; - } - - table { - width: 100%; - } - - th, td { - font-family: monospace; - vertical-align: top; - text-align: left; - } - - td { - color: green; - } - - .odd { - background-color: #eeeeee; - } - - .even { - background-color: #fafafa; - } - - .exectime { - font-size: 0.8em; - font-style: italic; - } - - #bold div { - color: black; - font-weight: bold; - } - - #blue h3 { - color: blue; - } - - #normal div { - color: black; - font-weight: normal; - } - - #table_assigned_vars th { - color: blue; - font-weight: bold; - } - - #table_config_vars th { - color: maroon; - } - - {/literal} - </style> - </head> - <body> - - <h1>Smarty {Smarty::SMARTY_VERSION} Debug Console - - {if isset($template_name)}{$template_name|debug_print_var nofilter} {/if}{if !empty($template_data)}Total Time {$execution_time|string_format:"%.5f"}{/if}</h1> - - {if !empty($template_data)} - <h2>included templates & config files (load time in seconds)</h2> - <div> - {foreach $template_data as $template} - <font color=brown>{$template.name}</font> - <br> - - <span class="exectime"> - (compile {$template['compile_time']|string_format:"%.5f"}) (render {$template['render_time']|string_format:"%.5f"} - ) (cache {$template['cache_time']|string_format:"%.5f"}) - </span> - <br> - {/foreach} - </div> - {/if} - - <h2>assigned template variables</h2> - - <table id="table_assigned_vars"> - {foreach $assigned_vars as $vars} - <tr class="{if $vars@iteration % 2 eq 0}odd{else}even{/if}"> - <td><h3><font color=blue>${$vars@key}</font></h3> - {if isset($vars['nocache'])}<b>Nocache</b></br>{/if} - {if isset($vars['scope'])}<b>Origin:</b>{$vars['scope']|debug_print_var:10:80 nofilter}{/if} - </td> - <td><h3>Value</h3>{$vars['value']|debug_print_var:10:80 nofilter}</td> - <td>{if isset($vars['attributes'])}<h3>Attributes</h3>{$vars['attributes']|debug_print_var nofilter} {/if}</td> - {/foreach} - </table> - - <h2>assigned config file variables</h2> - - <table id="table_config_vars"> - {foreach $config_vars as $vars} - <tr class="{if $vars@iteration % 2 eq 0}odd{else}even{/if}"> - <td><h3><font color=blue>#{$vars@key}#</font></h3> - {if isset($vars['scope'])}<b>Origin:</b>{$vars['scope']|debug_print_var:10:80 nofilter}{/if} - </td> - <td>{$vars['value']|debug_print_var:10:80 nofilter}</td> - </tr> - {/foreach} - - </table> - </body> - </html> -{/capture} -<script type="text/javascript"> - {$id = ''} - {if $display_mode}{$id = "$offset$template_name"|md5}{/if} - _smarty_console = window.open("", "console{$id}", "width=680,height=600,left={$offset},top={$offset},resizable,scrollbars=yes"); - _smarty_console.document.write("{$debug_output|escape:'javascript' nofilter}"); - _smarty_console.document.close(); -</script> diff --git a/library/smarty/libs/plugins/block.textformat.php b/library/smarty/libs/plugins/block.textformat.php deleted file mode 100644 --- a/library/smarty/libs/plugins/block.textformat.php +++ /dev/null @@ -1,109 +0,0 @@ -<?php -/** - * Smarty plugin to format text blocks - * - * @package Smarty - * @subpackage PluginsBlock - */ - -/** - * Smarty {textformat}{/textformat} block plugin - * Type: block function<br> - * Name: textformat<br> - * Purpose: format text a certain way with preset styles - * or custom wrap/indent settings<br> - * Params: - * <pre> - * - style - string (email) - * - indent - integer (0) - * - wrap - integer (80) - * - wrap_char - string ("\n") - * - indent_char - string (" ") - * - wrap_boundary - boolean (true) - * </pre> - * - * @link http://www.smarty.net/manual/en/language.function.textformat.php {textformat} - * (Smarty online manual) - * - * @param array $params parameters - * @param string $content contents of the block - * @param Smarty_Internal_Template $template template object - * @param boolean &$repeat repeat flag - * - * @return string content re-formatted - * @author Monte Ohrt <monte at ohrt dot com> - */ -function smarty_block_textformat($params, $content, $template, &$repeat) { - if (is_null($content)) { - return; - } - - $style = null; - $indent = 0; - $indent_first = 0; - $indent_char = ' '; - $wrap = 80; - $wrap_char = "\n"; - $wrap_cut = false; - $assign = null; - - foreach ($params as $_key => $_val) { - switch ($_key) { - case 'style': - case 'indent_char': - case 'wrap_char': - case 'assign': - $$_key = (string)$_val; - break; - - case 'indent': - case 'indent_first': - case 'wrap': - $$_key = (int)$_val; - break; - - case 'wrap_cut': - $$_key = (bool)$_val; - break; - - default: - trigger_error("textformat: unknown attribute '$_key'"); - } - } - - if ($style == 'email') { - $wrap = 72; - } - // split into paragraphs - $_paragraphs = preg_split('![\r\n]{2}!', $content); - - foreach ($_paragraphs as &$_paragraph) { - if (!$_paragraph) { - continue; - } - // convert mult. spaces & special chars to single space - $_paragraph = preg_replace(array('!\s+!' . Smarty::$_UTF8_MODIFIER, '!(^\s+)|(\s+$)!' . Smarty::$_UTF8_MODIFIER), array(' ', ''), $_paragraph); - // indent first line - if ($indent_first > 0) { - $_paragraph = str_repeat($indent_char, $indent_first) . $_paragraph; - } - // wordwrap sentences - if (Smarty::$_MBSTRING) { - require_once(SMARTY_PLUGINS_DIR . 'shared.mb_wordwrap.php'); - $_paragraph = smarty_mb_wordwrap($_paragraph, $wrap - $indent, $wrap_char, $wrap_cut); - } else { - $_paragraph = wordwrap($_paragraph, $wrap - $indent, $wrap_char, $wrap_cut); - } - // indent lines - if ($indent > 0) { - $_paragraph = preg_replace('!^!m', str_repeat($indent_char, $indent), $_paragraph); - } - } - $_output = implode($wrap_char . $wrap_char, $_paragraphs); - - if ($assign) { - $template->assign($assign, $_output); - } else { - return $_output; - } -} diff --git a/library/smarty/libs/plugins/function.counter.php b/library/smarty/libs/plugins/function.counter.php deleted file mode 100644 --- a/library/smarty/libs/plugins/function.counter.php +++ /dev/null @@ -1,77 +0,0 @@ -<?php -/** - * Smarty plugin - * - * @package Smarty - * @subpackage PluginsFunction - */ - -/** - * Smarty {counter} function plugin - * Type: function<br> - * Name: counter<br> - * Purpose: print out a counter value - * - * @author Monte Ohrt <monte at ohrt dot com> - * @link http://www.smarty.net/manual/en/language.function.counter.php {counter} - * (Smarty online manual) - * - * @param array $params parameters - * @param Smarty_Internal_Template $template template object - * - * @return string|null - */ -function smarty_function_counter($params, $template) { - static $counters = array(); - - $name = (isset($params['name'])) ? $params['name'] : 'default'; - if (!isset($counters[$name])) { - $counters[$name] = array( - 'start' => 1, - 'skip' => 1, - 'direction' => 'up', - 'count' => 1 - ); - } - $counter =& $counters[$name]; - - if (isset($params['start'])) { - $counter['start'] = $counter['count'] = (int)$params['start']; - } - - if (!empty($params['assign'])) { - $counter['assign'] = $params['assign']; - } - - if (isset($counter['assign'])) { - $template->assign($counter['assign'], $counter['count']); - } - - if (isset($params['print'])) { - $print = (bool)$params['print']; - } else { - $print = empty($counter['assign']); - } - - if ($print) { - $retval = $counter['count']; - } else { - $retval = null; - } - - if (isset($params['skip'])) { - $counter['skip'] = $params['skip']; - } - - if (isset($params['direction'])) { - $counter['direction'] = $params['direction']; - } - - if ($counter['direction'] == "down") { - $counter['count'] -= $counter['skip']; - } else { - $counter['count'] += $counter['skip']; - } - - return $retval; -} diff --git a/library/smarty/libs/plugins/function.cycle.php b/library/smarty/libs/plugins/function.cycle.php deleted file mode 100644 --- a/library/smarty/libs/plugins/function.cycle.php +++ /dev/null @@ -1,106 +0,0 @@ -<?php -/** - * Smarty plugin - * - * @package Smarty - * @subpackage PluginsFunction - */ - -/** - * Smarty {cycle} function plugin - * Type: function<br> - * Name: cycle<br> - * Date: May 3, 2002<br> - * Purpose: cycle through given values<br> - * Params: - * <pre> - * - name - name of cycle (optional) - * - values - comma separated list of values to cycle, or an array of values to cycle - * (this can be left out for subsequent calls) - * - reset - boolean - resets given var to true - * - print - boolean - print var or not. default is true - * - advance - boolean - whether or not to advance the cycle - * - delimiter - the value delimiter, default is "," - * - assign - boolean, assigns to template var instead of printed. - * </pre> - * Examples:<br> - * <pre> - * {cycle values="#eeeeee,#d0d0d0d"} - * {cycle name=row values="one,two,three" reset=true} - * {cycle name=row} - * </pre> - * - * @link http://www.smarty.net/manual/en/language.function.cycle.php {cycle} - * (Smarty online manual) - * @author Monte Ohrt <monte at ohrt dot com> - * @author credit to Mark Priatel <mpriatel@rogers.com> - * @author credit to Gerard <gerard@interfold.com> - * @author credit to Jason Sweat <jsweat_php@yahoo.com> - * @version 1.3 - * - * @param array $params parameters - * @param Smarty_Internal_Template $template template object - * - * @return string|null - */ - -function smarty_function_cycle($params, $template) { - static $cycle_vars; - - $name = (empty($params['name'])) ? 'default' : $params['name']; - $print = (isset($params['print'])) ? (bool)$params['print'] : true; - $advance = (isset($params['advance'])) ? (bool)$params['advance'] : true; - $reset = (isset($params['reset'])) ? (bool)$params['reset'] : false; - - if (!isset($params['values'])) { - if (!isset($cycle_vars[$name]['values'])) { - trigger_error("cycle: missing 'values' parameter"); - - return; - } - } else { - if (isset($cycle_vars[$name]['values']) - && $cycle_vars[$name]['values'] != $params['values'] - ) { - $cycle_vars[$name]['index'] = 0; - } - $cycle_vars[$name]['values'] = $params['values']; - } - - if (isset($params['delimiter'])) { - $cycle_vars[$name]['delimiter'] = $params['delimiter']; - } elseif (!isset($cycle_vars[$name]['delimiter'])) { - $cycle_vars[$name]['delimiter'] = ','; - } - - if (is_array($cycle_vars[$name]['values'])) { - $cycle_array = $cycle_vars[$name]['values']; - } else { - $cycle_array = explode($cycle_vars[$name]['delimiter'], $cycle_vars[$name]['values']); - } - - if (!isset($cycle_vars[$name]['index']) || $reset) { - $cycle_vars[$name]['index'] = 0; - } - - if (isset($params['assign'])) { - $print = false; - $template->assign($params['assign'], $cycle_array[$cycle_vars[$name]['index']]); - } - - if ($print) { - $retval = $cycle_array[$cycle_vars[$name]['index']]; - } else { - $retval = null; - } - - if ($advance) { - if ($cycle_vars[$name]['index'] >= count($cycle_array) - 1) { - $cycle_vars[$name]['index'] = 0; - } else { - $cycle_vars[$name]['index']++; - } - } - - return $retval; -} diff --git a/library/smarty/libs/plugins/function.fetch.php b/library/smarty/libs/plugins/function.fetch.php deleted file mode 100644 --- a/library/smarty/libs/plugins/function.fetch.php +++ /dev/null @@ -1,220 +0,0 @@ -<?php -/** - * Smarty plugin - * - * @package Smarty - * @subpackage PluginsFunction - */ - -/** - * Smarty {fetch} plugin - * Type: function<br> - * Name: fetch<br> - * Purpose: fetch file, web or ftp data and display results - * - * @link http://www.smarty.net/manual/en/language.function.fetch.php {fetch} - * (Smarty online manual) - * @author Monte Ohrt <monte at ohrt dot com> - * - * @param array $params parameters - * @param Smarty_Internal_Template $template template object - * - * @throws SmartyException - * @return string|null if the assign parameter is passed, Smarty assigns the result to a template variable - */ -function smarty_function_fetch($params, $template) { - if (empty($params['file'])) { - trigger_error("[plugin] fetch parameter 'file' cannot be empty", E_USER_NOTICE); - - return; - } - - // strip file protocol - if (stripos($params['file'], 'file://') === 0) { - $params['file'] = substr($params['file'], 7); - } - - $protocol = strpos($params['file'], '://'); - if ($protocol !== false) { - $protocol = strtolower(substr($params['file'], 0, $protocol)); - } - - if (isset($template->smarty->security_policy)) { - if ($protocol) { - // remote resource (or php stream, …) - if (!$template->smarty->security_policy->isTrustedUri($params['file'])) { - return; - } - } else { - // local file - if (!$template->smarty->security_policy->isTrustedResourceDir($params['file'])) { - return; - } - } - } - - $content = ''; - if ($protocol == 'http') { - // http fetch - if ($uri_parts = parse_url($params['file'])) { - // set defaults - $host = $server_name = $uri_parts['host']; - $timeout = 30; - $accept = "image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*"; - $agent = "Smarty Template Engine " . Smarty::SMARTY_VERSION; - $referer = ""; - $uri = !empty($uri_parts['path']) ? $uri_parts['path'] : '/'; - $uri .= !empty($uri_parts['query']) ? '?' . $uri_parts['query'] : ''; - $_is_proxy = false; - if (empty($uri_parts['port'])) { - $port = 80; - } else { - $port = $uri_parts['port']; - } - if (!empty($uri_parts['user'])) { - $user = $uri_parts['user']; - } - if (!empty($uri_parts['pass'])) { - $pass = $uri_parts['pass']; - } - // loop through parameters, setup headers - foreach ($params as $param_key => $param_value) { - switch ($param_key) { - case "file": - case "assign": - case "assign_headers": - break; - case "user": - if (!empty($param_value)) { - $user = $param_value; - } - break; - case "pass": - if (!empty($param_value)) { - $pass = $param_value; - } - break; - case "accept": - if (!empty($param_value)) { - $accept = $param_value; - } - break; - case "header": - if (!empty($param_value)) { - if (!preg_match('![\w\d-]+: .+!', $param_value)) { - trigger_error("[plugin] invalid header format '" . $param_value . "'", E_USER_NOTICE); - - return; - } else { - $extra_headers[] = $param_value; - } - } - break; - case "proxy_host": - if (!empty($param_value)) { - $proxy_host = $param_value; - } - break; - case "proxy_port": - if (!preg_match('!\D!', $param_value)) { - $proxy_port = (int)$param_value; - } else { - trigger_error("[plugin] invalid value for attribute '" . $param_key . "'", E_USER_NOTICE); - - return; - } - break; - case "agent": - if (!empty($param_value)) { - $agent = $param_value; - } - break; - case "referer": - if (!empty($param_value)) { - $referer = $param_value; - } - break; - case "timeout": - if (!preg_match('!\D!', $param_value)) { - $timeout = (int)$param_value; - } else { - trigger_error("[plugin] invalid value for attribute '" . $param_key . "'", E_USER_NOTICE); - - return; - } - break; - default: - trigger_error("[plugin] unrecognized attribute '" . $param_key . "'", E_USER_NOTICE); - - return; - } - } - if (!empty($proxy_host) && !empty($proxy_port)) { - $_is_proxy = true; - $fp = fsockopen($proxy_host, $proxy_port, $errno, $errstr, $timeout); - } else { - $fp = fsockopen($server_name, $port, $errno, $errstr, $timeout); - } - - if (!$fp) { - trigger_error("[plugin] unable to fetch: $errstr ($errno)", E_USER_NOTICE); - - return; - } else { - if ($_is_proxy) { - fputs($fp, 'GET ' . $params['file'] . " HTTP/1.0\r\n"); - } else { - fputs($fp, "GET $uri HTTP/1.0\r\n"); - } - if (!empty($host)) { - fputs($fp, "Host: $host\r\n"); - } - if (!empty($accept)) { - fputs($fp, "Accept: $accept\r\n"); - } - if (!empty($agent)) { - fputs($fp, "User-Agent: $agent\r\n"); - } - if (!empty($referer)) { - fputs($fp, "Referer: $referer\r\n"); - } - if (isset($extra_headers) && is_array($extra_headers)) { - foreach ($extra_headers as $curr_header) { - fputs($fp, $curr_header . "\r\n"); - } - } - if (!empty($user) && !empty($pass)) { - fputs($fp, "Authorization: BASIC " . base64_encode("$user:$pass") . "\r\n"); - } - - fputs($fp, "\r\n"); - while (!feof($fp)) { - $content .= fgets($fp, 4096); - } - fclose($fp); - $csplit = preg_split("!\r\n\r\n!", $content, 2); - - $content = $csplit[1]; - - if (!empty($params['assign_headers'])) { - $template->assign($params['assign_headers'], preg_split("!\r\n!", $csplit[0])); - } - } - } else { - trigger_error("[plugin fetch] unable to parse URL, check syntax", E_USER_NOTICE); - - return; - } - } else { - $content = @file_get_contents($params['file']); - if ($content === false) { - throw new SmartyException("{fetch} cannot read resource '" . $params['file'] . "'"); - } - } - - if (!empty($params['assign'])) { - $template->assign($params['assign'], $content); - } else { - return $content; - } -} diff --git a/library/smarty/libs/plugins/function.html_checkboxes.php b/library/smarty/libs/plugins/function.html_checkboxes.php deleted file mode 100644 --- a/library/smarty/libs/plugins/function.html_checkboxes.php +++ /dev/null @@ -1,235 +0,0 @@ -<?php -/** - * Smarty plugin - * - * @package Smarty - * @subpackage PluginsFunction - */ - -/** - * Smarty {html_checkboxes} function plugin - * File: function.html_checkboxes.php<br> - * Type: function<br> - * Name: html_checkboxes<br> - * Date: 24.Feb.2003<br> - * Purpose: Prints out a list of checkbox input types<br> - * Examples: - * <pre> - * {html_checkboxes values=$ids output=$names} - * {html_checkboxes values=$ids name='box' separator='<br>' output=$names} - * {html_checkboxes values=$ids checked=$checked separator='<br>' output=$names} - * </pre> - * Params: - * <pre> - * - name (optional) - string default "checkbox" - * - values (required) - array - * - options (optional) - associative array - * - checked (optional) - array default not set - * - separator (optional) - ie <br> or - * - output (optional) - the output next to each checkbox - * - assign (optional) - assign the output as an array to this variable - * - escape (optional) - escape the content (not value), defaults to true - * </pre> - * - * @link http://www.smarty.net/manual/en/language.function.html.checkboxes.php {html_checkboxes} - * (Smarty online manual) - * @author Christopher Kvarme <christopher.kvarme@flashjab.com> - * @author credits to Monte Ohrt <monte at ohrt dot com> - * @version 1.0 - * - * @param array $params parameters - * @param object $template template object - * - * @return string - * @uses smarty_function_escape_special_chars() - */ -function smarty_function_html_checkboxes($params, $template) { - require_once(SMARTY_PLUGINS_DIR . 'shared.escape_special_chars.php'); - - $name = 'checkbox'; - $values = null; - $options = null; - $selected = array(); - $separator = ''; - $escape = true; - $labels = true; - $label_ids = false; - $output = null; - - $extra = ''; - - foreach ($params as $_key => $_val) { - switch ($_key) { - case 'name': - case 'separator': - $$_key = (string)$_val; - break; - - case 'escape': - case 'labels': - case 'label_ids': - $$_key = (bool)$_val; - break; - - case 'options': - $$_key = (array)$_val; - break; - - case 'values': - case 'output': - $$_key = array_values((array)$_val); - break; - - case 'checked': - case 'selected': - if (is_array($_val)) { - $selected = array(); - foreach ($_val as $_sel) { - if (is_object($_sel)) { - if (method_exists($_sel, "__toString")) { - $_sel = smarty_function_escape_special_chars((string)$_sel->__toString()); - } else { - trigger_error("html_checkboxes: selected attribute contains an object of class '" . get_class($_sel) . "' without __toString() method", E_USER_NOTICE); - continue; - } - } else { - $_sel = smarty_function_escape_special_chars((string)$_sel); - } - $selected[$_sel] = true; - } - } elseif (is_object($_val)) { - if (method_exists($_val, "__toString")) { - $selected = smarty_function_escape_special_chars((string)$_val->__toString()); - } else { - trigger_error("html_checkboxes: selected attribute is an object of class '" . get_class($_val) . "' without __toString() method", E_USER_NOTICE); - } - } else { - $selected = smarty_function_escape_special_chars((string)$_val); - } - break; - - case 'checkboxes': - trigger_error('html_checkboxes: the use of the "checkboxes" attribute is deprecated, use "options" instead', E_USER_WARNING); - $options = (array)$_val; - break; - - case 'assign': - break; - - case 'strict': - break; - - case 'disabled': - case 'readonly': - if (!empty($params['strict'])) { - if (!is_scalar($_val)) { - trigger_error("html_options: $_key attribute must be a scalar, only boolean true or string '$_key' will actually add the attribute", E_USER_NOTICE); - } - - if ($_val === true || $_val === $_key) { - $extra .= ' ' . $_key . '="' . smarty_function_escape_special_chars($_key) . '"'; - } - - break; - } - // omit break; to fall through! - - default: - if (!is_array($_val)) { - $extra .= ' ' . $_key . '="' . smarty_function_escape_special_chars($_val) . '"'; - } else { - trigger_error("html_checkboxes: extra attribute '$_key' cannot be an array", E_USER_NOTICE); - } - break; - } - } - - if (!isset($options) && !isset($values)) { - return ''; - } /* raise error here? */ - - $_html_result = array(); - - if (isset($options)) { - foreach ($options as $_key => $_val) { - $_html_result[] = smarty_function_html_checkboxes_output($name, $_key, $_val, $selected, $extra, $separator, $labels, $label_ids, $escape); - } - } else { - foreach ($values as $_i => $_key) { - $_val = isset($output[$_i]) ? $output[$_i] : ''; - $_html_result[] = smarty_function_html_checkboxes_output($name, $_key, $_val, $selected, $extra, $separator, $labels, $label_ids, $escape); - } - } - - if (!empty($params['assign'])) { - $template->assign($params['assign'], $_html_result); - } else { - return implode("\n", $_html_result); - } -} - -function smarty_function_html_checkboxes_output($name, $value, $output, $selected, $extra, $separator, $labels, $label_ids, $escape = true) { - $_output = ''; - - if (is_object($value)) { - if (method_exists($value, "__toString")) { - $value = (string)$value->__toString(); - } else { - trigger_error("html_options: value is an object of class '" . get_class($value) . "' without __toString() method", E_USER_NOTICE); - - return ''; - } - } else { - $value = (string)$value; - } - - if (is_object($output)) { - if (method_exists($output, "__toString")) { - $output = (string)$output->__toString(); - } else { - trigger_error("html_options: output is an object of class '" . get_class($output) . "' without __toString() method", E_USER_NOTICE); - - return ''; - } - } else { - $output = (string)$output; - } - - if ($labels) { - if ($label_ids) { - $_id = smarty_function_escape_special_chars(preg_replace('![^\w\-\.]!' . Smarty::$_UTF8_MODIFIER, '_', $name . '_' . $value)); - $_output .= '<label for="' . $_id . '">'; - } else { - $_output .= '<label>'; - } - } - - $name = smarty_function_escape_special_chars($name); - $value = smarty_function_escape_special_chars($value); - if ($escape) { - $output = smarty_function_escape_special_chars($output); - } - - $_output .= '<input type="checkbox" name="' . $name . '[]" value="' . $value . '"'; - - if ($labels && $label_ids) { - $_output .= ' id="' . $_id . '"'; - } - - if (is_array($selected)) { - if (isset($selected[$value])) { - $_output .= ' checked="checked"'; - } - } elseif ($value === $selected) { - $_output .= ' checked="checked"'; - } - - $_output .= $extra . ' />' . $output; - if ($labels) { - $_output .= '</label>'; - } - - $_output .= $separator; - - return $_output; -} diff --git a/library/smarty/libs/plugins/function.html_image.php b/library/smarty/libs/plugins/function.html_image.php deleted file mode 100644 --- a/library/smarty/libs/plugins/function.html_image.php +++ /dev/null @@ -1,162 +0,0 @@ -<?php -/** - * Smarty plugin - * - * @package Smarty - * @subpackage PluginsFunction - */ - -/** - * Smarty {html_image} function plugin - * Type: function<br> - * Name: html_image<br> - * Date: Feb 24, 2003<br> - * Purpose: format HTML tags for the image<br> - * Examples: {html_image file="/images/masthead.gif"}<br> - * Output: <img src="/images/masthead.gif" width=400 height=23><br> - * Params: - * <pre> - * - file - (required) - file (and path) of image - * - height - (optional) - image height (default actual height) - * - width - (optional) - image width (default actual width) - * - basedir - (optional) - base directory for absolute paths, default is environment variable DOCUMENT_ROOT - * - path_prefix - prefix for path output (optional, default empty) - * </pre> - * - * @link http://www.smarty.net/manual/en/language.function.html.image.php {html_image} - * (Smarty online manual) - * @author Monte Ohrt <monte at ohrt dot com> - * @author credits to Duda <duda@big.hu> - * @version 1.0 - * - * @param array $params parameters - * @param Smarty_Internal_Template $template template object - * - * @throws SmartyException - * @return string - * @uses smarty_function_escape_special_chars() - */ -function smarty_function_html_image($params, $template) { - require_once(SMARTY_PLUGINS_DIR . 'shared.escape_special_chars.php'); - - $alt = ''; - $file = ''; - $height = ''; - $width = ''; - $extra = ''; - $prefix = ''; - $suffix = ''; - $path_prefix = ''; - $basedir = isset($_SERVER['DOCUMENT_ROOT']) ? $_SERVER['DOCUMENT_ROOT'] : ''; - foreach ($params as $_key => $_val) { - switch ($_key) { - case 'file': - case 'height': - case 'width': - case 'dpi': - case 'path_prefix': - case 'basedir': - $$_key = $_val; - break; - - case 'alt': - if (!is_array($_val)) { - $$_key = smarty_function_escape_special_chars($_val); - } else { - throw new SmartyException ("html_image: extra attribute '$_key' cannot be an array", E_USER_NOTICE); - } - break; - - case 'link': - case 'href': - $prefix = '<a href="' . $_val . '">'; - $suffix = '</a>'; - break; - - default: - if (!is_array($_val)) { - $extra .= ' ' . $_key . '="' . smarty_function_escape_special_chars($_val) . '"'; - } else { - throw new SmartyException ("html_image: extra attribute '$_key' cannot be an array", E_USER_NOTICE); - } - break; - } - } - - if (empty($file)) { - trigger_error("html_image: missing 'file' parameter", E_USER_NOTICE); - - return; - } - - if ($file[0] == '/') { - $_image_path = $basedir . $file; - } else { - $_image_path = $file; - } - - // strip file protocol - if (stripos($params['file'], 'file://') === 0) { - $params['file'] = substr($params['file'], 7); - } - - $protocol = strpos($params['file'], '://'); - if ($protocol !== false) { - $protocol = strtolower(substr($params['file'], 0, $protocol)); - } - - if (isset($template->smarty->security_policy)) { - if ($protocol) { - // remote resource (or php stream, …) - if (!$template->smarty->security_policy->isTrustedUri($params['file'])) { - return; - } - } else { - // local file - if (!$template->smarty->security_policy->isTrustedResourceDir($_image_path)) { - return; - } - } - } - - if (!isset($params['width']) || !isset($params['height'])) { - // FIXME: (rodneyrehm) getimagesize() loads the complete file off a remote resource, use custom [jpg,png,gif]header reader! - if (!$_image_data = @getimagesize($_image_path)) { - if (!file_exists($_image_path)) { - trigger_error("html_image: unable to find '$_image_path'", E_USER_NOTICE); - - return; - } elseif (!is_readable($_image_path)) { - trigger_error("html_image: unable to read '$_image_path'", E_USER_NOTICE); - - return; - } else { - trigger_error("html_image: '$_image_path' is not a valid image file", E_USER_NOTICE); - - return; - } - } - - if (!isset($params['width'])) { - $width = $_image_data[0]; - } - if (!isset($params['height'])) { - $height = $_image_data[1]; - } - } - - if (isset($params['dpi'])) { - if (strstr($_SERVER['HTTP_USER_AGENT'], 'Mac')) { - // FIXME: (rodneyrehm) wrong dpi assumption - // don't know who thought this up… even if it was true in 1998, it's definitely wrong in 2011. - $dpi_default = 72; - } else { - $dpi_default = 96; - } - $_resize = $dpi_default / $params['dpi']; - $width = round($width * $_resize); - $height = round($height * $_resize); - } - - return $prefix . '<img src="' . $path_prefix . $file . '" alt="' . $alt . '" width="' . $width . '" height="' . $height . '"' . $extra . ' />' . $suffix; -} diff --git a/library/smarty/libs/plugins/function.html_options.php b/library/smarty/libs/plugins/function.html_options.php deleted file mode 100644 --- a/library/smarty/libs/plugins/function.html_options.php +++ /dev/null @@ -1,193 +0,0 @@ -<?php -/** - * Smarty plugin - * - * @package Smarty - * @subpackage PluginsFunction - */ - -/** - * Smarty {html_options} function plugin - * Type: function<br> - * Name: html_options<br> - * Purpose: Prints the list of <option> tags generated from - * the passed parameters<br> - * Params: - * <pre> - * - name (optional) - string default "select" - * - values (required) - if no options supplied) - array - * - options (required) - if no values supplied) - associative array - * - selected (optional) - string default not set - * - output (required) - if not options supplied) - array - * - id (optional) - string default not set - * - class (optional) - string default not set - * </pre> - * - * @link http://www.smarty.net/manual/en/language.function.html.options.php {html_image} - * (Smarty online manual) - * @author Monte Ohrt <monte at ohrt dot com> - * @author Ralf Strehle (minor optimization) <ralf dot strehle at yahoo dot de> - * - * @param array $params parameters - * - * @return string - * @uses smarty_function_escape_special_chars() - */ -function smarty_function_html_options($params) { - require_once(SMARTY_PLUGINS_DIR . 'shared.escape_special_chars.php'); - - $name = null; - $values = null; - $options = null; - $selected = null; - $output = null; - $id = null; - $class = null; - - $extra = ''; - - foreach ($params as $_key => $_val) { - switch ($_key) { - case 'name': - case 'class': - case 'id': - $$_key = (string)$_val; - break; - - case 'options': - $options = (array)$_val; - break; - - case 'values': - case 'output': - $$_key = array_values((array)$_val); - break; - - case 'selected': - if (is_array($_val)) { - $selected = array(); - foreach ($_val as $_sel) { - if (is_object($_sel)) { - if (method_exists($_sel, "__toString")) { - $_sel = smarty_function_escape_special_chars((string)$_sel->__toString()); - } else { - trigger_error("html_options: selected attribute contains an object of class '" . get_class($_sel) . "' without __toString() method", E_USER_NOTICE); - continue; - } - } else { - $_sel = smarty_function_escape_special_chars((string)$_sel); - } - $selected[$_sel] = true; - } - } elseif (is_object($_val)) { - if (method_exists($_val, "__toString")) { - $selected = smarty_function_escape_special_chars((string)$_val->__toString()); - } else { - trigger_error("html_options: selected attribute is an object of class '" . get_class($_val) . "' without __toString() method", E_USER_NOTICE); - } - } else { - $selected = smarty_function_escape_special_chars((string)$_val); - } - break; - - case 'strict': - break; - - case 'disabled': - case 'readonly': - if (!empty($params['strict'])) { - if (!is_scalar($_val)) { - trigger_error("html_options: $_key attribute must be a scalar, only boolean true or string '$_key' will actually add the attribute", E_USER_NOTICE); - } - - if ($_val === true || $_val === $_key) { - $extra .= ' ' . $_key . '="' . smarty_function_escape_special_chars($_key) . '"'; - } - - break; - } - // omit break; to fall through! - - default: - if (!is_array($_val)) { - $extra .= ' ' . $_key . '="' . smarty_function_escape_special_chars($_val) . '"'; - } else { - trigger_error("html_options: extra attribute '$_key' cannot be an array", E_USER_NOTICE); - } - break; - } - } - - if (!isset($options) && !isset($values)) { - /* raise error here? */ - - return ''; - } - - $_html_result = ''; - $_idx = 0; - - if (isset($options)) { - foreach ($options as $_key => $_val) { - $_html_result .= smarty_function_html_options_optoutput($_key, $_val, $selected, $id, $class, $_idx); - } - } else { - foreach ($values as $_i => $_key) { - $_val = isset($output[$_i]) ? $output[$_i] : ''; - $_html_result .= smarty_function_html_options_optoutput($_key, $_val, $selected, $id, $class, $_idx); - } - } - - if (!empty($name)) { - $_html_class = !empty($class) ? ' class="' . $class . '"' : ''; - $_html_id = !empty($id) ? ' id="' . $id . '"' : ''; - $_html_result = '<select name="' . $name . '"' . $_html_class . $_html_id . $extra . '>' . "\n" . $_html_result . '</select>' . "\n"; - } - - return $_html_result; -} - -function smarty_function_html_options_optoutput($key, $value, $selected, $id, $class, &$idx) { - if (!is_array($value)) { - $_key = smarty_function_escape_special_chars($key); - $_html_result = '<option value="' . $_key . '"'; - if (is_array($selected)) { - if (isset($selected[$_key])) { - $_html_result .= ' selected="selected"'; - } - } elseif ($_key === $selected) { - $_html_result .= ' selected="selected"'; - } - $_html_class = !empty($class) ? ' class="' . $class . ' option"' : ''; - $_html_id = !empty($id) ? ' id="' . $id . '-' . $idx . '"' : ''; - if (is_object($value)) { - if (method_exists($value, "__toString")) { - $value = smarty_function_escape_special_chars((string)$value->__toString()); - } else { - trigger_error("html_options: value is an object of class '" . get_class($value) . "' without __toString() method", E_USER_NOTICE); - - return ''; - } - } else { - $value = smarty_function_escape_special_chars((string)$value); - } - $_html_result .= $_html_class . $_html_id . '>' . $value . '</option>' . "\n"; - $idx++; - } else { - $_idx = 0; - $_html_result = smarty_function_html_options_optgroup($key, $value, $selected, !empty($id) ? ($id . '-' . $idx) : null, $class, $_idx); - $idx++; - } - - return $_html_result; -} - -function smarty_function_html_options_optgroup($key, $values, $selected, $id, $class, &$idx) { - $optgroup_html = '<optgroup label="' . smarty_function_escape_special_chars($key) . '">' . "\n"; - foreach ($values as $key => $value) { - $optgroup_html .= smarty_function_html_options_optoutput($key, $value, $selected, $id, $class, $idx); - } - $optgroup_html .= "</optgroup>\n"; - - return $optgroup_html; -} diff --git a/library/smarty/libs/plugins/function.html_radios.php b/library/smarty/libs/plugins/function.html_radios.php deleted file mode 100644 --- a/library/smarty/libs/plugins/function.html_radios.php +++ /dev/null @@ -1,219 +0,0 @@ -<?php -/** - * Smarty plugin - * - * @package Smarty - * @subpackage PluginsFunction - */ - -/** - * Smarty {html_radios} function plugin - * File: function.html_radios.php<br> - * Type: function<br> - * Name: html_radios<br> - * Date: 24.Feb.2003<br> - * Purpose: Prints out a list of radio input types<br> - * Params: - * <pre> - * - name (optional) - string default "radio" - * - values (required) - array - * - options (required) - associative array - * - checked (optional) - array default not set - * - separator (optional) - ie <br> or - * - output (optional) - the output next to each radio button - * - assign (optional) - assign the output as an array to this variable - * - escape (optional) - escape the content (not value), defaults to true - * </pre> - * Examples: - * <pre> - * {html_radios values=$ids output=$names} - * {html_radios values=$ids name='box' separator='<br>' output=$names} - * {html_radios values=$ids checked=$checked separator='<br>' output=$names} - * </pre> - * - * @link http://smarty.php.net/manual/en/language.function.html.radios.php {html_radios} - * (Smarty online manual) - * @author Christopher Kvarme <christopher.kvarme@flashjab.com> - * @author credits to Monte Ohrt <monte at ohrt dot com> - * @version 1.0 - * - * @param array $params parameters - * @param Smarty_Internal_Template $template template object - * - * @return string - * @uses smarty_function_escape_special_chars() - */ -function smarty_function_html_radios($params, $template) { - require_once(SMARTY_PLUGINS_DIR . 'shared.escape_special_chars.php'); - - $name = 'radio'; - $values = null; - $options = null; - $selected = null; - $separator = ''; - $escape = true; - $labels = true; - $label_ids = false; - $output = null; - $extra = ''; - - foreach ($params as $_key => $_val) { - switch ($_key) { - case 'name': - case 'separator': - $$_key = (string)$_val; - break; - - case 'checked': - case 'selected': - if (is_array($_val)) { - trigger_error('html_radios: the "' . $_key . '" attribute cannot be an array', E_USER_WARNING); - } elseif (is_object($_val)) { - if (method_exists($_val, "__toString")) { - $selected = smarty_function_escape_special_chars((string)$_val->__toString()); - } else { - trigger_error("html_radios: selected attribute is an object of class '" . get_class($_val) . "' without __toString() method", E_USER_NOTICE); - } - } else { - $selected = (string)$_val; - } - break; - - case 'escape': - case 'labels': - case 'label_ids': - $$_key = (bool)$_val; - break; - - case 'options': - $$_key = (array)$_val; - break; - - case 'values': - case 'output': - $$_key = array_values((array)$_val); - break; - - case 'radios': - trigger_error('html_radios: the use of the "radios" attribute is deprecated, use "options" instead', E_USER_WARNING); - $options = (array)$_val; - break; - - case 'assign': - break; - - case 'strict': - break; - - case 'disabled': - case 'readonly': - if (!empty($params['strict'])) { - if (!is_scalar($_val)) { - trigger_error("html_options: $_key attribute must be a scalar, only boolean true or string '$_key' will actually add the attribute", E_USER_NOTICE); - } - - if ($_val === true || $_val === $_key) { - $extra .= ' ' . $_key . '="' . smarty_function_escape_special_chars($_key) . '"'; - } - - break; - } - // omit break; to fall through! - - default: - if (!is_array($_val)) { - $extra .= ' ' . $_key . '="' . smarty_function_escape_special_chars($_val) . '"'; - } else { - trigger_error("html_radios: extra attribute '$_key' cannot be an array", E_USER_NOTICE); - } - break; - } - } - - if (!isset($options) && !isset($values)) { - /* raise error here? */ - - return ''; - } - - $_html_result = array(); - - if (isset($options)) { - foreach ($options as $_key => $_val) { - $_html_result[] = smarty_function_html_radios_output($name, $_key, $_val, $selected, $extra, $separator, $labels, $label_ids, $escape); - } - } else { - foreach ($values as $_i => $_key) { - $_val = isset($output[$_i]) ? $output[$_i] : ''; - $_html_result[] = smarty_function_html_radios_output($name, $_key, $_val, $selected, $extra, $separator, $labels, $label_ids, $escape); - } - } - - if (!empty($params['assign'])) { - $template->assign($params['assign'], $_html_result); - } else { - return implode("\n", $_html_result); - } -} - -function smarty_function_html_radios_output($name, $value, $output, $selected, $extra, $separator, $labels, $label_ids, $escape) { - $_output = ''; - - if (is_object($value)) { - if (method_exists($value, "__toString")) { - $value = (string)$value->__toString(); - } else { - trigger_error("html_options: value is an object of class '" . get_class($value) . "' without __toString() method", E_USER_NOTICE); - - return ''; - } - } else { - $value = (string)$value; - } - - if (is_object($output)) { - if (method_exists($output, "__toString")) { - $output = (string)$output->__toString(); - } else { - trigger_error("html_options: output is an object of class '" . get_class($output) . "' without __toString() method", E_USER_NOTICE); - - return ''; - } - } else { - $output = (string)$output; - } - - if ($labels) { - if ($label_ids) { - $_id = smarty_function_escape_special_chars(preg_replace('![^\w\-\.]!' . Smarty::$_UTF8_MODIFIER, '_', $name . '_' . $value)); - $_output .= '<label for="' . $_id . '">'; - } else { - $_output .= '<label>'; - } - } - - $name = smarty_function_escape_special_chars($name); - $value = smarty_function_escape_special_chars($value); - if ($escape) { - $output = smarty_function_escape_special_chars($output); - } - - $_output .= '<input type="radio" name="' . $name . '" value="' . $value . '"'; - - if ($labels && $label_ids) { - $_output .= ' id="' . $_id . '"'; - } - - if ($value === $selected) { - $_output .= ' checked="checked"'; - } - - $_output .= $extra . ' />' . $output; - if ($labels) { - $_output .= '</label>'; - } - - $_output .= $separator; - - return $_output; -} diff --git a/library/smarty/libs/plugins/function.html_select_date.php b/library/smarty/libs/plugins/function.html_select_date.php deleted file mode 100644 --- a/library/smarty/libs/plugins/function.html_select_date.php +++ /dev/null @@ -1,386 +0,0 @@ -<?php -/** - * Smarty plugin - * - * @package Smarty - * @subpackage PluginsFunction - */ - -/** - * @ignore - */ -require_once(SMARTY_PLUGINS_DIR . 'shared.escape_special_chars.php'); -/** - * @ignore - */ -require_once(SMARTY_PLUGINS_DIR . 'shared.make_timestamp.php'); - -/** - * Smarty {html_select_date} plugin - * Type: function<br> - * Name: html_select_date<br> - * Purpose: Prints the dropdowns for date selection. - * ChangeLog: - * <pre> - * - 1.0 initial release - * - 1.1 added support for +/- N syntax for begin - * and end year values. (Monte) - * - 1.2 added support for yyyy-mm-dd syntax for - * time value. (Jan Rosier) - * - 1.3 added support for choosing format for - * month values (Gary Loescher) - * - 1.3.1 added support for choosing format for - * day values (Marcus Bointon) - * - 1.3.2 support negative timestamps, force year - * dropdown to include given date unless explicitly set (Monte) - * - 1.3.4 fix behaviour of 0000-00-00 00:00:00 dates to match that - * of 0000-00-00 dates (cybot, boots) - * - 2.0 complete rewrite for performance, - * added attributes month_names, *_id - * </pre> - * - * @link http://www.smarty.net/manual/en/language.function.html.select.date.php {html_select_date} - * (Smarty online manual) - * @version 2.0 - * @author Andrei Zmievski - * @author Monte Ohrt <monte at ohrt dot com> - * @author Rodney Rehm - * - * @param array $params parameters - * - * @return string - */ -function smarty_function_html_select_date($params) { - // generate timestamps used for month names only - static $_month_timestamps = null; - static $_current_year = null; - if ($_month_timestamps === null) { - $_current_year = date('Y'); - $_month_timestamps = array(); - for ($i = 1; $i <= 12; $i++) { - $_month_timestamps[$i] = mktime(0, 0, 0, $i, 1, 2000); - } - } - - /* Default values. */ - $prefix = "Date_"; - $start_year = null; - $end_year = null; - $display_days = true; - $display_months = true; - $display_years = true; - $month_format = "%B"; - /* Write months as numbers by default GL */ - $month_value_format = "%m"; - $day_format = "%02d"; - /* Write day values using this format MB */ - $day_value_format = "%d"; - $year_as_text = false; - /* Display years in reverse order? Ie. 2000,1999,.... */ - $reverse_years = false; - /* Should the select boxes be part of an array when returned from PHP? - e.g. setting it to "birthday", would create "birthday[Day]", - "birthday[Month]" & "birthday[Year]". Can be combined with prefix */ - $field_array = null; - /* <select size>'s of the different <select> tags. - If not set, uses default dropdown. */ - $day_size = null; - $month_size = null; - $year_size = null; - /* Unparsed attributes core to *ALL* the <select>/<input> tags. - An example might be in the template: all_extra ='class ="foo"'. */ - $all_extra = null; - /* Separate attributes for the tags. */ - $day_extra = null; - $month_extra = null; - $year_extra = null; - /* Order in which to display the fields. - "D" -> day, "M" -> month, "Y" -> year. */ - $field_order = 'MDY'; - /* String printed between the different fields. */ - $field_separator = "\n"; - $option_separator = "\n"; - $time = null; - // $all_empty = null; - // $day_empty = null; - // $month_empty = null; - // $year_empty = null; - $extra_attrs = ''; - $all_id = null; - $day_id = null; - $month_id = null; - $year_id = null; - - foreach ($params as $_key => $_value) { - switch ($_key) { - case 'time': - if (!is_array($_value) && $_value !== null) { - $time = smarty_make_timestamp($_value); - } - break; - - case 'month_names': - if (is_array($_value) && count($_value) == 12) { - $$_key = $_value; - } else { - trigger_error("html_select_date: month_names must be an array of 12 strings", E_USER_NOTICE); - } - break; - - case 'prefix': - case 'field_array': - case 'start_year': - case 'end_year': - case 'day_format': - case 'day_value_format': - case 'month_format': - case 'month_value_format': - case 'day_size': - case 'month_size': - case 'year_size': - case 'all_extra': - case 'day_extra': - case 'month_extra': - case 'year_extra': - case 'field_order': - case 'field_separator': - case 'option_separator': - case 'all_empty': - case 'month_empty': - case 'day_empty': - case 'year_empty': - case 'all_id': - case 'month_id': - case 'day_id': - case 'year_id': - $$_key = (string)$_value; - break; - - case 'display_days': - case 'display_months': - case 'display_years': - case 'year_as_text': - case 'reverse_years': - $$_key = (bool)$_value; - break; - - default: - if (!is_array($_value)) { - $extra_attrs .= ' ' . $_key . '="' . smarty_function_escape_special_chars($_value) . '"'; - } else { - trigger_error("html_select_date: extra attribute '$_key' cannot be an array", E_USER_NOTICE); - } - break; - } - } - - // Note: date() is faster than strftime() - // Note: explode(date()) is faster than date() date() date() - if (isset($params['time']) && is_array($params['time'])) { - if (isset($params['time'][$prefix . 'Year'])) { - // $_REQUEST[$field_array] given - foreach (array('Y' => 'Year', 'm' => 'Month', 'd' => 'Day') as $_elementKey => $_elementName) { - $_variableName = '_' . strtolower($_elementName); - $$_variableName = isset($params['time'][$prefix . $_elementName]) - ? $params['time'][$prefix . $_elementName] - : date($_elementKey); - } - } elseif (isset($params['time'][$field_array][$prefix . 'Year'])) { - // $_REQUEST given - foreach (array('Y' => 'Year', 'm' => 'Month', 'd' => 'Day') as $_elementKey => $_elementName) { - $_variableName = '_' . strtolower($_elementName); - $$_variableName = isset($params['time'][$field_array][$prefix . $_elementName]) - ? $params['time'][$field_array][$prefix . $_elementName] - : date($_elementKey); - } - } else { - // no date found, use NOW - list($_year, $_month, $_day) = $time = explode('-', date('Y-m-d')); - } - } elseif ($time === null) { - if (array_key_exists('time', $params)) { - $_year = $_month = $_day = $time = null; - } else { - list($_year, $_month, $_day) = $time = explode('-', date('Y-m-d')); - } - } else { - list($_year, $_month, $_day) = $time = explode('-', date('Y-m-d', $time)); - } - - // make syntax "+N" or "-N" work with $start_year and $end_year - // Note preg_match('!^(\+|\-)\s*(\d+)$!', $end_year, $match) is slower than trim+substr - foreach (array('start', 'end') as $key) { - $key .= '_year'; - $t = $$key; - if ($t === null) { - $$key = (int)$_current_year; - } elseif ($t[0] == '+') { - $$key = (int)($_current_year + (int)trim(substr($t, 1))); - } elseif ($t[0] == '-') { - $$key = (int)($_current_year - (int)trim(substr($t, 1))); - } else { - $$key = (int)$$key; - } - } - - // flip for ascending or descending - if (($start_year > $end_year && !$reverse_years) || ($start_year < $end_year && $reverse_years)) { - $t = $end_year; - $end_year = $start_year; - $start_year = $t; - } - - // generate year <select> or <input> - if ($display_years) { - $_extra = ''; - $_name = $field_array ? ($field_array . '[' . $prefix . 'Year]') : ($prefix . 'Year'); - if ($all_extra) { - $_extra .= ' ' . $all_extra; - } - if ($year_extra) { - $_extra .= ' ' . $year_extra; - } - - if ($year_as_text) { - $_html_years = '<input type="text" name="' . $_name . '" value="' . $_year . '" size="4" maxlength="4"' . $_extra . $extra_attrs . ' />'; - } else { - $_html_years = '<select name="' . $_name . '"'; - if ($year_id !== null || $all_id !== null) { - $_html_years .= ' id="' . smarty_function_escape_special_chars( - $year_id !== null ? ($year_id ? $year_id : $_name) : ($all_id ? ($all_id . $_name) : $_name) - ) . '"'; - } - if ($year_size) { - $_html_years .= ' size="' . $year_size . '"'; - } - $_html_years .= $_extra . $extra_attrs . '>' . $option_separator; - - if (isset($year_empty) || isset($all_empty)) { - $_html_years .= '<option value="">' . (isset($year_empty) ? $year_empty : $all_empty) . '</option>' . $option_separator; - } - - $op = $start_year > $end_year ? -1 : 1; - for ($i = $start_year; $op > 0 ? $i <= $end_year : $i >= $end_year; $i += $op) { - $_html_years .= '<option value="' . $i . '"' - . ($_year == $i ? ' selected="selected"' : '') - . '>' . $i . '</option>' . $option_separator; - } - - $_html_years .= '</select>'; - } - } - - // generate month <select> or <input> - if ($display_months) { - $_extra = ''; - $_name = $field_array ? ($field_array . '[' . $prefix . 'Month]') : ($prefix . 'Month'); - if ($all_extra) { - $_extra .= ' ' . $all_extra; - } - if ($month_extra) { - $_extra .= ' ' . $month_extra; - } - - $_html_months = '<select name="' . $_name . '"'; - if ($month_id !== null || $all_id !== null) { - $_html_months .= ' id="' . smarty_function_escape_special_chars( - $month_id !== null ? ($month_id ? $month_id : $_name) : ($all_id ? ($all_id . $_name) : $_name) - ) . '"'; - } - if ($month_size) { - $_html_months .= ' size="' . $month_size . '"'; - } - $_html_months .= $_extra . $extra_attrs . '>' . $option_separator; - - if (isset($month_empty) || isset($all_empty)) { - $_html_months .= '<option value="">' . (isset($month_empty) ? $month_empty : $all_empty) . '</option>' . $option_separator; - } - - for ($i = 1; $i <= 12; $i++) { - $_val = sprintf('%02d', $i); - $_text = isset($month_names) ? smarty_function_escape_special_chars($month_names[$i]) : ($month_format == "%m" ? $_val : strftime($month_format, $_month_timestamps[$i])); - $_value = $month_value_format == "%m" ? $_val : strftime($month_value_format, $_month_timestamps[$i]); - $_html_months .= '<option value="' . $_value . '"' - . ($_val == $_month ? ' selected="selected"' : '') - . '>' . $_text . '</option>' . $option_separator; - } - - $_html_months .= '</select>'; - } - - // generate day <select> or <input> - if ($display_days) { - $_extra = ''; - $_name = $field_array ? ($field_array . '[' . $prefix . 'Day]') : ($prefix . 'Day'); - if ($all_extra) { - $_extra .= ' ' . $all_extra; - } - if ($day_extra) { - $_extra .= ' ' . $day_extra; - } - - $_html_days = '<select name="' . $_name . '"'; - if ($day_id !== null || $all_id !== null) { - $_html_days .= ' id="' . smarty_function_escape_special_chars( - $day_id !== null ? ($day_id ? $day_id : $_name) : ($all_id ? ($all_id . $_name) : $_name) - ) . '"'; - } - if ($day_size) { - $_html_days .= ' size="' . $day_size . '"'; - } - $_html_days .= $_extra . $extra_attrs . '>' . $option_separator; - - if (isset($day_empty) || isset($all_empty)) { - $_html_days .= '<option value="">' . (isset($day_empty) ? $day_empty : $all_empty) . '</option>' . $option_separator; - } - - for ($i = 1; $i <= 31; $i++) { - $_val = sprintf('%02d', $i); - $_text = $day_format == '%02d' ? $_val : sprintf($day_format, $i); - $_value = $day_value_format == '%02d' ? $_val : sprintf($day_value_format, $i); - $_html_days .= '<option value="' . $_value . '"' - . ($_val == $_day ? ' selected="selected"' : '') - . '>' . $_text . '</option>' . $option_separator; - } - - $_html_days .= '</select>'; - } - - // order the fields for output - $_html = ''; - for ($i = 0; $i <= 2; $i++) { - switch ($field_order[$i]) { - case 'Y': - case 'y': - if (isset($_html_years)) { - if ($_html) { - $_html .= $field_separator; - } - $_html .= $_html_years; - } - break; - - case 'm': - case 'M': - if (isset($_html_months)) { - if ($_html) { - $_html .= $field_separator; - } - $_html .= $_html_months; - } - break; - - case 'd': - case 'D': - if (isset($_html_days)) { - if ($_html) { - $_html .= $field_separator; - } - $_html .= $_html_days; - } - break; - } - } - - return $_html; -} diff --git a/library/smarty/libs/plugins/function.html_select_time.php b/library/smarty/libs/plugins/function.html_select_time.php deleted file mode 100644 --- a/library/smarty/libs/plugins/function.html_select_time.php +++ /dev/null @@ -1,363 +0,0 @@ -<?php -/** - * Smarty plugin - * - * @package Smarty - * @subpackage PluginsFunction - */ - -/** - * @ignore - */ -require_once(SMARTY_PLUGINS_DIR . 'shared.escape_special_chars.php'); -/** - * @ignore - */ -require_once(SMARTY_PLUGINS_DIR . 'shared.make_timestamp.php'); - -/** - * Smarty {html_select_time} function plugin - * Type: function<br> - * Name: html_select_time<br> - * Purpose: Prints the dropdowns for time selection - * - * @link http://www.smarty.net/manual/en/language.function.html.select.time.php {html_select_time} - * (Smarty online manual) - * @author Roberto Berto <roberto@berto.net> - * @author Monte Ohrt <monte AT ohrt DOT com> - * - * @param array $params parameters - * - * @return string - * @uses smarty_make_timestamp() - */ -function smarty_function_html_select_time($params) { - $prefix = "Time_"; - $field_array = null; - $field_separator = "\n"; - $option_separator = "\n"; - $time = null; - - $display_hours = true; - $display_minutes = true; - $display_seconds = true; - $display_meridian = true; - - $hour_format = '%02d'; - $hour_value_format = '%02d'; - $minute_format = '%02d'; - $minute_value_format = '%02d'; - $second_format = '%02d'; - $second_value_format = '%02d'; - - $hour_size = null; - $minute_size = null; - $second_size = null; - $meridian_size = null; - - $all_empty = null; - $hour_empty = null; - $minute_empty = null; - $second_empty = null; - $meridian_empty = null; - - $all_id = null; - $hour_id = null; - $minute_id = null; - $second_id = null; - $meridian_id = null; - - $use_24_hours = true; - $minute_interval = 1; - $second_interval = 1; - - $extra_attrs = ''; - $all_extra = null; - $hour_extra = null; - $minute_extra = null; - $second_extra = null; - $meridian_extra = null; - - foreach ($params as $_key => $_value) { - switch ($_key) { - case 'time': - if (!is_array($_value) && $_value !== null) { - $time = smarty_make_timestamp($_value); - } - break; - - case 'prefix': - case 'field_array': - - case 'field_separator': - case 'option_separator': - - case 'all_extra': - case 'hour_extra': - case 'minute_extra': - case 'second_extra': - case 'meridian_extra': - - case 'all_empty': - case 'hour_empty': - case 'minute_empty': - case 'second_empty': - case 'meridian_empty': - - case 'all_id': - case 'hour_id': - case 'minute_id': - case 'second_id': - case 'meridian_id': - - case 'hour_format': - case 'hour_value_format': - case 'minute_format': - case 'minute_value_format': - case 'second_format': - case 'second_value_format': - $$_key = (string)$_value; - break; - - case 'display_hours': - case 'display_minutes': - case 'display_seconds': - case 'display_meridian': - case 'use_24_hours': - $$_key = (bool)$_value; - break; - - case 'minute_interval': - case 'second_interval': - - case 'hour_size': - case 'minute_size': - case 'second_size': - case 'meridian_size': - $$_key = (int)$_value; - break; - - default: - if (!is_array($_value)) { - $extra_attrs .= ' ' . $_key . '="' . smarty_function_escape_special_chars($_value) . '"'; - } else { - trigger_error("html_select_date: extra attribute '$_key' cannot be an array", E_USER_NOTICE); - } - break; - } - } - - if (isset($params['time']) && is_array($params['time'])) { - if (isset($params['time'][$prefix . 'Hour'])) { - // $_REQUEST[$field_array] given - foreach (array('H' => 'Hour', 'i' => 'Minute', 's' => 'Second') as $_elementKey => $_elementName) { - $_variableName = '_' . strtolower($_elementName); - $$_variableName = isset($params['time'][$prefix . $_elementName]) - ? $params['time'][$prefix . $_elementName] - : date($_elementKey); - } - $_meridian = isset($params['time'][$prefix . 'Meridian']) - ? (' ' . $params['time'][$prefix . 'Meridian']) - : ''; - $time = strtotime($_hour . ':' . $_minute . ':' . $_second . $_meridian); - list($_hour, $_minute, $_second) = $time = explode('-', date('H-i-s', $time)); - } elseif (isset($params['time'][$field_array][$prefix . 'Hour'])) { - // $_REQUEST given - foreach (array('H' => 'Hour', 'i' => 'Minute', 's' => 'Second') as $_elementKey => $_elementName) { - $_variableName = '_' . strtolower($_elementName); - $$_variableName = isset($params['time'][$field_array][$prefix . $_elementName]) - ? $params['time'][$field_array][$prefix . $_elementName] - : date($_elementKey); - } - $_meridian = isset($params['time'][$field_array][$prefix . 'Meridian']) - ? (' ' . $params['time'][$field_array][$prefix . 'Meridian']) - : ''; - $time = strtotime($_hour . ':' . $_minute . ':' . $_second . $_meridian); - list($_hour, $_minute, $_second) = $time = explode('-', date('H-i-s', $time)); - } else { - // no date found, use NOW - list($_year, $_month, $_day) = $time = explode('-', date('Y-m-d')); - } - } elseif ($time === null) { - if (array_key_exists('time', $params)) { - $_hour = $_minute = $_second = $time = null; - } else { - list($_hour, $_minute, $_second) = $time = explode('-', date('H-i-s')); - } - } else { - list($_hour, $_minute, $_second) = $time = explode('-', date('H-i-s', $time)); - } - - // generate hour <select> - if ($display_hours) { - $_html_hours = ''; - $_extra = ''; - $_name = $field_array ? ($field_array . '[' . $prefix . 'Hour]') : ($prefix . 'Hour'); - if ($all_extra) { - $_extra .= ' ' . $all_extra; - } - if ($hour_extra) { - $_extra .= ' ' . $hour_extra; - } - - $_html_hours = '<select name="' . $_name . '"'; - if ($hour_id !== null || $all_id !== null) { - $_html_hours .= ' id="' . smarty_function_escape_special_chars( - $hour_id !== null ? ($hour_id ? $hour_id : $_name) : ($all_id ? ($all_id . $_name) : $_name) - ) . '"'; - } - if ($hour_size) { - $_html_hours .= ' size="' . $hour_size . '"'; - } - $_html_hours .= $_extra . $extra_attrs . '>' . $option_separator; - - if (isset($hour_empty) || isset($all_empty)) { - $_html_hours .= '<option value="">' . (isset($hour_empty) ? $hour_empty : $all_empty) . '</option>' . $option_separator; - } - - $start = $use_24_hours ? 0 : 1; - $end = $use_24_hours ? 23 : 12; - for ($i = $start; $i <= $end; $i++) { - $_val = sprintf('%02d', $i); - $_text = $hour_format == '%02d' ? $_val : sprintf($hour_format, $i); - $_value = $hour_value_format == '%02d' ? $_val : sprintf($hour_value_format, $i); - - if (!$use_24_hours) { - $_hour12 = $_hour == 0 - ? 12 - : ($_hour <= 12 ? $_hour : $_hour - 12); - } - - $selected = $_hour !== null ? ($use_24_hours ? $_hour == $_val : $_hour12 == $_val) : null; - $_html_hours .= '<option value="' . $_value . '"' - . ($selected ? ' selected="selected"' : '') - . '>' . $_text . '</option>' . $option_separator; - } - - $_html_hours .= '</select>'; - } - - // generate minute <select> - if ($display_minutes) { - $_html_minutes = ''; - $_extra = ''; - $_name = $field_array ? ($field_array . '[' . $prefix . 'Minute]') : ($prefix . 'Minute'); - if ($all_extra) { - $_extra .= ' ' . $all_extra; - } - if ($minute_extra) { - $_extra .= ' ' . $minute_extra; - } - - $_html_minutes = '<select name="' . $_name . '"'; - if ($minute_id !== null || $all_id !== null) { - $_html_minutes .= ' id="' . smarty_function_escape_special_chars( - $minute_id !== null ? ($minute_id ? $minute_id : $_name) : ($all_id ? ($all_id . $_name) : $_name) - ) . '"'; - } - if ($minute_size) { - $_html_minutes .= ' size="' . $minute_size . '"'; - } - $_html_minutes .= $_extra . $extra_attrs . '>' . $option_separator; - - if (isset($minute_empty) || isset($all_empty)) { - $_html_minutes .= '<option value="">' . (isset($minute_empty) ? $minute_empty : $all_empty) . '</option>' . $option_separator; - } - - $selected = $_minute !== null ? ($_minute - $_minute % $minute_interval) : null; - for ($i = 0; $i <= 59; $i += $minute_interval) { - $_val = sprintf('%02d', $i); - $_text = $minute_format == '%02d' ? $_val : sprintf($minute_format, $i); - $_value = $minute_value_format == '%02d' ? $_val : sprintf($minute_value_format, $i); - $_html_minutes .= '<option value="' . $_value . '"' - . ($selected === $i ? ' selected="selected"' : '') - . '>' . $_text . '</option>' . $option_separator; - } - - $_html_minutes .= '</select>'; - } - - // generate second <select> - if ($display_seconds) { - $_html_seconds = ''; - $_extra = ''; - $_name = $field_array ? ($field_array . '[' . $prefix . 'Second]') : ($prefix . 'Second'); - if ($all_extra) { - $_extra .= ' ' . $all_extra; - } - if ($second_extra) { - $_extra .= ' ' . $second_extra; - } - - $_html_seconds = '<select name="' . $_name . '"'; - if ($second_id !== null || $all_id !== null) { - $_html_seconds .= ' id="' . smarty_function_escape_special_chars( - $second_id !== null ? ($second_id ? $second_id : $_name) : ($all_id ? ($all_id . $_name) : $_name) - ) . '"'; - } - if ($second_size) { - $_html_seconds .= ' size="' . $second_size . '"'; - } - $_html_seconds .= $_extra . $extra_attrs . '>' . $option_separator; - - if (isset($second_empty) || isset($all_empty)) { - $_html_seconds .= '<option value="">' . (isset($second_empty) ? $second_empty : $all_empty) . '</option>' . $option_separator; - } - - $selected = $_second !== null ? ($_second - $_second % $second_interval) : null; - for ($i = 0; $i <= 59; $i += $second_interval) { - $_val = sprintf('%02d', $i); - $_text = $second_format == '%02d' ? $_val : sprintf($second_format, $i); - $_value = $second_value_format == '%02d' ? $_val : sprintf($second_value_format, $i); - $_html_seconds .= '<option value="' . $_value . '"' - . ($selected === $i ? ' selected="selected"' : '') - . '>' . $_text . '</option>' . $option_separator; - } - - $_html_seconds .= '</select>'; - } - - // generate meridian <select> - if ($display_meridian && !$use_24_hours) { - $_html_meridian = ''; - $_extra = ''; - $_name = $field_array ? ($field_array . '[' . $prefix . 'Meridian]') : ($prefix . 'Meridian'); - if ($all_extra) { - $_extra .= ' ' . $all_extra; - } - if ($meridian_extra) { - $_extra .= ' ' . $meridian_extra; - } - - $_html_meridian = '<select name="' . $_name . '"'; - if ($meridian_id !== null || $all_id !== null) { - $_html_meridian .= ' id="' . smarty_function_escape_special_chars( - $meridian_id !== null ? ($meridian_id ? $meridian_id : $_name) : ($all_id ? ($all_id . $_name) : $_name) - ) . '"'; - } - if ($meridian_size) { - $_html_meridian .= ' size="' . $meridian_size . '"'; - } - $_html_meridian .= $_extra . $extra_attrs . '>' . $option_separator; - - if (isset($meridian_empty) || isset($all_empty)) { - $_html_meridian .= '<option value="">' . (isset($meridian_empty) ? $meridian_empty : $all_empty) . '</option>' . $option_separator; - } - - $_html_meridian .= '<option value="am"' . ($_hour > 0 && $_hour < 12 ? ' selected="selected"' : '') . '>AM</option>' . $option_separator - . '<option value="pm"' . ($_hour < 12 ? '' : ' selected="selected"') . '>PM</option>' . $option_separator - . '</select>'; - } - - $_html = ''; - foreach (array('_html_hours', '_html_minutes', '_html_seconds', '_html_meridian') as $k) { - if (isset($$k)) { - if ($_html) { - $_html .= $field_separator; - } - $_html .= $$k; - } - } - - return $_html; -} diff --git a/library/smarty/libs/plugins/function.html_table.php b/library/smarty/libs/plugins/function.html_table.php deleted file mode 100644 --- a/library/smarty/libs/plugins/function.html_table.php +++ /dev/null @@ -1,174 +0,0 @@ -<?php -/** - * Smarty plugin - * - * @package Smarty - * @subpackage PluginsFunction - */ - -/** - * Smarty {html_table} function plugin - * Type: function<br> - * Name: html_table<br> - * Date: Feb 17, 2003<br> - * Purpose: make an html table from an array of data<br> - * Params: - * <pre> - * - loop - array to loop through - * - cols - number of columns, comma separated list of column names - * or array of column names - * - rows - number of rows - * - table_attr - table attributes - * - th_attr - table heading attributes (arrays are cycled) - * - tr_attr - table row attributes (arrays are cycled) - * - td_attr - table cell attributes (arrays are cycled) - * - trailpad - value to pad trailing cells with - * - caption - text for caption element - * - vdir - vertical direction (default: "down", means top-to-bottom) - * - hdir - horizontal direction (default: "right", means left-to-right) - * - inner - inner loop (default "cols": print $loop line by line, - * $loop will be printed column by column otherwise) - * </pre> - * Examples: - * <pre> - * {table loop=$data} - * {table loop=$data cols=4 tr_attr='"bgcolor=red"'} - * {table loop=$data cols="first,second,third" tr_attr=$colors} - * </pre> - * - * @author Monte Ohrt <monte at ohrt dot com> - * @author credit to Messju Mohr <messju at lammfellpuschen dot de> - * @author credit to boots <boots dot smarty at yahoo dot com> - * @version 1.1 - * @link http://www.smarty.net/manual/en/language.function.html.table.php {html_table} - * (Smarty online manual) - * - * @param array $params parameters - * - * @return string - */ -function smarty_function_html_table($params) { - $table_attr = 'border="1"'; - $tr_attr = ''; - $th_attr = ''; - $td_attr = ''; - $cols = $cols_count = 3; - $rows = 3; - $trailpad = ' '; - $vdir = 'down'; - $hdir = 'right'; - $inner = 'cols'; - $caption = ''; - $loop = null; - - if (!isset($params['loop'])) { - trigger_error("html_table: missing 'loop' parameter", E_USER_WARNING); - - return; - } - - foreach ($params as $_key => $_value) { - switch ($_key) { - case 'loop': - $$_key = (array)$_value; - break; - - case 'cols': - if (is_array($_value) && !empty($_value)) { - $cols = $_value; - $cols_count = count($_value); - } elseif (!is_numeric($_value) && is_string($_value) && !empty($_value)) { - $cols = explode(',', $_value); - $cols_count = count($cols); - } elseif (!empty($_value)) { - $cols_count = (int)$_value; - } else { - $cols_count = $cols; - } - break; - - case 'rows': - $$_key = (int)$_value; - break; - - case 'table_attr': - case 'trailpad': - case 'hdir': - case 'vdir': - case 'inner': - case 'caption': - $$_key = (string)$_value; - break; - - case 'tr_attr': - case 'td_attr': - case 'th_attr': - $$_key = $_value; - break; - } - } - - $loop_count = count($loop); - if (empty($params['rows'])) { - /* no rows specified */ - $rows = ceil($loop_count / $cols_count); - } elseif (empty($params['cols'])) { - if (!empty($params['rows'])) { - /* no cols specified, but rows */ - $cols_count = ceil($loop_count / $rows); - } - } - - $output = "<table $table_attr>\n"; - - if (!empty($caption)) { - $output .= '<caption>' . $caption . "</caption>\n"; - } - - if (is_array($cols)) { - $cols = ($hdir == 'right') ? $cols : array_reverse($cols); - $output .= "<thead><tr>\n"; - - for ($r = 0; $r < $cols_count; $r++) { - $output .= '<th' . smarty_function_html_table_cycle('th', $th_attr, $r) . '>'; - $output .= $cols[$r]; - $output .= "</th>\n"; - } - $output .= "</tr></thead>\n"; - } - - $output .= "<tbody>\n"; - for ($r = 0; $r < $rows; $r++) { - $output .= "<tr" . smarty_function_html_table_cycle('tr', $tr_attr, $r) . ">\n"; - $rx = ($vdir == 'down') ? $r * $cols_count : ($rows - 1 - $r) * $cols_count; - - for ($c = 0; $c < $cols_count; $c++) { - $x = ($hdir == 'right') ? $rx + $c : $rx + $cols_count - 1 - $c; - if ($inner != 'cols') { - /* shuffle x to loop over rows*/ - $x = floor($x / $cols_count) + ($x % $cols_count) * $rows; - } - - if ($x < $loop_count) { - $output .= "<td" . smarty_function_html_table_cycle('td', $td_attr, $c) . ">" . $loop[$x] . "</td>\n"; - } else { - $output .= "<td" . smarty_function_html_table_cycle('td', $td_attr, $c) . ">$trailpad</td>\n"; - } - } - $output .= "</tr>\n"; - } - $output .= "</tbody>\n"; - $output .= "</table>\n"; - - return $output; -} - -function smarty_function_html_table_cycle($name, $var, $no) { - if (!is_array($var)) { - $ret = $var; - } else { - $ret = $var[$no % count($var)]; - } - - return ($ret) ? ' ' . $ret : ''; -} diff --git a/library/smarty/libs/plugins/function.mailto.php b/library/smarty/libs/plugins/function.mailto.php deleted file mode 100644 --- a/library/smarty/libs/plugins/function.mailto.php +++ /dev/null @@ -1,154 +0,0 @@ -<?php -/** - * Smarty plugin - * - * @package Smarty - * @subpackage PluginsFunction - */ - -/** - * Smarty {mailto} function plugin - * Type: function<br> - * Name: mailto<br> - * Date: May 21, 2002 - * Purpose: automate mailto address link creation, and optionally encode them.<br> - * Params: - * <pre> - * - address - (required) - e-mail address - * - text - (optional) - text to display, default is address - * - encode - (optional) - can be one of: - * * none : no encoding (default) - * * javascript : encode with javascript - * * javascript_charcode : encode with javascript charcode - * * hex : encode with hexidecimal (no javascript) - * - cc - (optional) - address(es) to carbon copy - * - bcc - (optional) - address(es) to blind carbon copy - * - subject - (optional) - e-mail subject - * - newsgroups - (optional) - newsgroup(s) to post to - * - followupto - (optional) - address(es) to follow up to - * - extra - (optional) - extra tags for the href link - * </pre> - * Examples: - * <pre> - * {mailto address="me@domain.com"} - * {mailto address="me@domain.com" encode="javascript"} - * {mailto address="me@domain.com" encode="hex"} - * {mailto address="me@domain.com" subject="Hello to you!"} - * {mailto address="me@domain.com" cc="you@domain.com,they@domain.com"} - * {mailto address="me@domain.com" extra='class="mailto"'} - * </pre> - * - * @link http://www.smarty.net/manual/en/language.function.mailto.php {mailto} - * (Smarty online manual) - * @version 1.2 - * @author Monte Ohrt <monte at ohrt dot com> - * @author credits to Jason Sweat (added cc, bcc and subject functionality) - * - * @param array $params parameters - * - * @return string - */ -function smarty_function_mailto($params) { - static $_allowed_encoding = array('javascript' => true, 'javascript_charcode' => true, 'hex' => true, 'none' => true); - $extra = ''; - - if (empty($params['address'])) { - trigger_error("mailto: missing 'address' parameter", E_USER_WARNING); - - return; - } else { - $address = $params['address']; - } - - $text = $address; - // netscape and mozilla do not decode %40 (@) in BCC field (bug?) - // so, don't encode it. - $search = array('%40', '%2C'); - $replace = array('@', ','); - $mail_parms = array(); - foreach ($params as $var => $value) { - switch ($var) { - case 'cc': - case 'bcc': - case 'followupto': - if (!empty($value)) { - $mail_parms[] = $var . '=' . str_replace($search, $replace, rawurlencode($value)); - } - break; - - case 'subject': - case 'newsgroups': - $mail_parms[] = $var . '=' . rawurlencode($value); - break; - - case 'extra': - case 'text': - $$var = $value; - - default: - } - } - - if ($mail_parms) { - $address .= '?' . join('&', $mail_parms); - } - - $encode = (empty($params['encode'])) ? 'none' : $params['encode']; - if (!isset($_allowed_encoding[$encode])) { - trigger_error("mailto: 'encode' parameter must be none, javascript, javascript_charcode or hex", E_USER_WARNING); - - return; - } - // FIXME: (rodneyrehm) document.write() excues me what? 1998 has passed! - if ($encode == 'javascript') { - $string = 'document.write(\'<a href="mailto:' . $address . '" ' . $extra . '>' . $text . '</a>\');'; - - $js_encode = ''; - for ($x = 0, $_length = strlen($string); $x < $_length; $x++) { - $js_encode .= '%' . bin2hex($string[$x]); - } - - return '<script type="text/javascript">eval(unescape(\'' . $js_encode . '\'))</script>'; - } elseif ($encode == 'javascript_charcode') { - $string = '<a href="mailto:' . $address . '" ' . $extra . '>' . $text . '</a>'; - - for ($x = 0, $y = strlen($string); $x < $y; $x++) { - $ord[] = ord($string[$x]); - } - - $_ret = "<script type=\"text/javascript\" language=\"javascript\">\n" - . "{document.write(String.fromCharCode(" - . implode(',', $ord) - . "))" - . "}\n" - . "</script>\n"; - - return $_ret; - } elseif ($encode == 'hex') { - preg_match('!^(.*)(\?.*)$!', $address, $match); - if (!empty($match[2])) { - trigger_error("mailto: hex encoding does not work with extra attributes. Try javascript.", E_USER_WARNING); - - return; - } - $address_encode = ''; - for ($x = 0, $_length = strlen($address); $x < $_length; $x++) { - if (preg_match('!\w!' . Smarty::$_UTF8_MODIFIER, $address[$x])) { - $address_encode .= '%' . bin2hex($address[$x]); - } else { - $address_encode .= $address[$x]; - } - } - $text_encode = ''; - for ($x = 0, $_length = strlen($text); $x < $_length; $x++) { - $text_encode .= '&#x' . bin2hex($text[$x]) . ';'; - } - - $mailto = "mailto:"; - - return '<a href="' . $mailto . $address_encode . '" ' . $extra . '>' . $text_encode . '</a>'; - } else { - // no encoding - return '<a href="mailto:' . $address . '" ' . $extra . '>' . $text . '</a>'; - } -} diff --git a/library/smarty/libs/plugins/function.math.php b/library/smarty/libs/plugins/function.math.php deleted file mode 100644 --- a/library/smarty/libs/plugins/function.math.php +++ /dev/null @@ -1,90 +0,0 @@ -<?php -/** - * Smarty plugin - * This plugin is only for Smarty2 BC - * - * @package Smarty - * @subpackage PluginsFunction - */ - -/** - * Smarty {math} function plugin - * Type: function<br> - * Name: math<br> - * Purpose: handle math computations in template - * - * @link http://www.smarty.net/manual/en/language.function.math.php {math} - * (Smarty online manual) - * @author Monte Ohrt <monte at ohrt dot com> - * - * @param array $params parameters - * @param Smarty_Internal_Template $template template object - * - * @return string|null - */ -function smarty_function_math($params, $template) { - static $_allowed_funcs = array( - 'int' => true, 'abs' => true, 'ceil' => true, 'cos' => true, 'exp' => true, 'floor' => true, - 'log' => true, 'log10' => true, 'max' => true, 'min' => true, 'pi' => true, 'pow' => true, - 'rand' => true, 'round' => true, 'sin' => true, 'sqrt' => true, 'srand' => true, 'tan' => true - ); - // be sure equation parameter is present - if (empty($params['equation'])) { - trigger_error("math: missing equation parameter", E_USER_WARNING); - - return; - } - - $equation = $params['equation']; - - // make sure parenthesis are balanced - if (substr_count($equation, "(") != substr_count($equation, ")")) { - trigger_error("math: unbalanced parenthesis", E_USER_WARNING); - - return; - } - - // match all vars in equation, make sure all are passed - preg_match_all("!(?:0x[a-fA-F0-9]+)|([a-zA-Z][a-zA-Z0-9_]*)!", $equation, $match); - - foreach ($match[1] as $curr_var) { - if ($curr_var && !isset($params[$curr_var]) && !isset($_allowed_funcs[$curr_var])) { - trigger_error("math: function call $curr_var not allowed", E_USER_WARNING); - - return; - } - } - - foreach ($params as $key => $val) { - if ($key != "equation" && $key != "format" && $key != "assign") { - // make sure value is not empty - if (strlen($val) == 0) { - trigger_error("math: parameter $key is empty", E_USER_WARNING); - - return; - } - if (!is_numeric($val)) { - trigger_error("math: parameter $key: is not numeric", E_USER_WARNING); - - return; - } - $equation = preg_replace("/\b$key\b/", " \$params['$key'] ", $equation); - } - } - $smarty_math_result = null; - eval("\$smarty_math_result = " . $equation . ";"); - - if (empty($params['format'])) { - if (empty($params['assign'])) { - return $smarty_math_result; - } else { - $template->assign($params['assign'], $smarty_math_result); - } - } else { - if (empty($params['assign'])) { - printf($params['format'], $smarty_math_result); - } else { - $template->assign($params['assign'], sprintf($params['format'], $smarty_math_result)); - } - } -} diff --git a/library/smarty/libs/plugins/modifier.capitalize.php b/library/smarty/libs/plugins/modifier.capitalize.php deleted file mode 100644 --- a/library/smarty/libs/plugins/modifier.capitalize.php +++ /dev/null @@ -1,85 +0,0 @@ -<?php -/** - * Smarty plugin - * - * @package Smarty - * @subpackage PluginsModifier - */ - -/** - * Smarty capitalize modifier plugin - * Type: modifier<br> - * Name: capitalize<br> - * Purpose: capitalize words in the string - * {@internal {$string|capitalize:true:true} is the fastest option for MBString enabled systems }} - * - * @param string $string string to capitalize - * @param boolean $uc_digits also capitalize "x123" to "X123" - * @param boolean $lc_rest capitalize first letters, lowercase all following letters "aAa" to "Aaa" - * - * @return string capitalized string - * @author Monte Ohrt <monte at ohrt dot com> - * @author Rodney Rehm - */ -function smarty_modifier_capitalize($string, $uc_digits = false, $lc_rest = false) { - if (Smarty::$_MBSTRING) { - if ($lc_rest) { - // uppercase (including hyphenated words) - $upper_string = mb_convert_case($string, MB_CASE_TITLE, Smarty::$_CHARSET); - } else { - // uppercase word breaks - $upper_string = preg_replace_callback("!(^|[^\p{L}'])([\p{Ll}])!S" . Smarty::$_UTF8_MODIFIER, 'smarty_mod_cap_mbconvert_cb', $string); - } - // check uc_digits case - if (!$uc_digits) { - if (preg_match_all("!\b([\p{L}]*[\p{N}]+[\p{L}]*)\b!" . Smarty::$_UTF8_MODIFIER, $string, $matches, PREG_OFFSET_CAPTURE)) { - foreach ($matches[1] as $match) { - $upper_string = substr_replace($upper_string, mb_strtolower($match[0], Smarty::$_CHARSET), $match[1], strlen($match[0])); - } - } - } - $upper_string = preg_replace_callback("!((^|\s)['\"])(\w)!" . Smarty::$_UTF8_MODIFIER, 'smarty_mod_cap_mbconvert2_cb', $upper_string); - return $upper_string; - } - - // lowercase first - if ($lc_rest) { - $string = strtolower($string); - } - // uppercase (including hyphenated words) - $upper_string = preg_replace_callback("!(^|[^\p{L}'])([\p{Ll}])!S" . Smarty::$_UTF8_MODIFIER, 'smarty_mod_cap_ucfirst_cb', $string); - // check uc_digits case - if (!$uc_digits) { - if (preg_match_all("!\b([\p{L}]*[\p{N}]+[\p{L}]*)\b!" . Smarty::$_UTF8_MODIFIER, $string, $matches, PREG_OFFSET_CAPTURE)) { - foreach ($matches[1] as $match) { - $upper_string = substr_replace($upper_string, strtolower($match[0]), $match[1], strlen($match[0])); - } - } - } - $upper_string = preg_replace_callback("!((^|\s)['\"])(\w)!" . Smarty::$_UTF8_MODIFIER, 'smarty_mod_cap_ucfirst2_cb', $upper_string); - return $upper_string; -} - -/* - * - * Bug: create_function() use exhausts memory when used in long loops - * Fix: use declared functions for callbacks instead of using create_function() - * Note: This can be fixed using anonymous functions instead, but that requires PHP >= 5.3 - * - * @author Kyle Renfrow - */ -function smarty_mod_cap_mbconvert_cb($matches) { - return stripslashes($matches[1]) . mb_convert_case(stripslashes($matches[2]), MB_CASE_UPPER, Smarty::$_CHARSET); -} - -function smarty_mod_cap_mbconvert2_cb($matches) { - return stripslashes($matches[1]) . mb_convert_case(stripslashes($matches[3]), MB_CASE_UPPER, Smarty::$_CHARSET); -} - -function smarty_mod_cap_ucfirst_cb($matches) { - return stripslashes($matches[1]) . ucfirst(stripslashes($matches[2])); -} - -function smarty_mod_cap_ucfirst2_cb($matches) { - return stripslashes($matches[1]) . ucfirst(stripslashes($matches[3])); -} diff --git a/library/smarty/libs/plugins/modifier.date_format.php b/library/smarty/libs/plugins/modifier.date_format.php deleted file mode 100644 --- a/library/smarty/libs/plugins/modifier.date_format.php +++ /dev/null @@ -1,64 +0,0 @@ -<?php -/** - * Smarty plugin - * - * @package Smarty - * @subpackage PluginsModifier - */ - -/** - * Smarty date_format modifier plugin - * Type: modifier<br> - * Name: date_format<br> - * Purpose: format datestamps via strftime<br> - * Input:<br> - * - string: input date string - * - format: strftime format for output - * - default_date: default date if $string is empty - * - * @link http://www.smarty.net/manual/en/language.modifier.date.format.php date_format (Smarty online manual) - * @author Monte Ohrt <monte at ohrt dot com> - * - * @param string $string input date string - * @param string $format strftime format for output - * @param string $default_date default date if $string is empty - * @param string $formatter either 'strftime' or 'auto' - * - * @return string |void - * @uses smarty_make_timestamp() - */ -function smarty_modifier_date_format($string, $format = null, $default_date = '', $formatter = 'auto') { - if ($format === null) { - $format = Smarty::$_DATE_FORMAT; - } - /** - * require_once the {@link shared.make_timestamp.php} plugin - */ - require_once(SMARTY_PLUGINS_DIR . 'shared.make_timestamp.php'); - if ($string != '' && $string != '0000-00-00' && $string != '0000-00-00 00:00:00') { - $timestamp = smarty_make_timestamp($string); - } elseif ($default_date != '') { - $timestamp = smarty_make_timestamp($default_date); - } else { - return; - } - if ($formatter == 'strftime' || ($formatter == 'auto' && strpos($format, '%') !== false)) { - if (DS == '\\') { - $_win_from = array('%D', '%h', '%n', '%r', '%R', '%t', '%T'); - $_win_to = array('%m/%d/%y', '%b', "\n", '%I:%M:%S %p', '%H:%M', "\t", '%H:%M:%S'); - if (strpos($format, '%e') !== false) { - $_win_from[] = '%e'; - $_win_to[] = sprintf('%\' 2d', date('j', $timestamp)); - } - if (strpos($format, '%l') !== false) { - $_win_from[] = '%l'; - $_win_to[] = sprintf('%\' 2d', date('h', $timestamp)); - } - $format = str_replace($_win_from, $_win_to, $format); - } - - return strftime($format, $timestamp); - } else { - return date($format, $timestamp); - } -} diff --git a/library/smarty/libs/plugins/modifier.debug_print_var.php b/library/smarty/libs/plugins/modifier.debug_print_var.php deleted file mode 100644 --- a/library/smarty/libs/plugins/modifier.debug_print_var.php +++ /dev/null @@ -1,115 +0,0 @@ -<?php -/** - * Smarty plugin - * - * @package Smarty - * @subpackage Debug - */ - -/** - * Smarty debug_print_var modifier plugin - * Type: modifier<br> - * Name: debug_print_var<br> - * Purpose: formats variable contents for display in the console - * - * @author Monte Ohrt <monte at ohrt dot com> - * - * @param array|object $var variable to be formatted - * @param int $max maximum recursion depth if $var is an array or object - * @param int $length maximum string length if $var is a string - * @param int $depth actual recursion depth - * @param array $objects processed objects in actual depth to prevent recursive object processing - * - * @return string - */ -function smarty_modifier_debug_print_var($var, $max = 10, $length = 40, $depth = 0, $objects = array()) { - $_replace = array("\n" => '<i>\n</i>', - "\r" => '<i>\r</i>', - "\t" => '<i>\t</i>' - ); - switch (gettype($var)) { - case 'array' : - $results = '<b>Array (' . count($var) . ')</b>'; - if ($depth == $max) { - break; - } - foreach ($var as $curr_key => $curr_val) { - $results .= '<br>' . str_repeat(' ', $depth * 2) - . '<b>' . strtr($curr_key, $_replace) . '</b> => ' - . smarty_modifier_debug_print_var($curr_val, $max, $length, ++$depth, $objects); - $depth--; - } - break; - - case 'object' : - $object_vars = get_object_vars($var); - $results = '<b>' . get_class($var) . ' Object (' . count($object_vars) . ')</b>'; - if (in_array($var, $objects)) { - $results .= ' called recursive'; - break; - } - if ($depth == $max) { - break; - } - $objects[] = $var; - foreach ($object_vars as $curr_key => $curr_val) { - $results .= '<br>' . str_repeat(' ', $depth * 2) - . '<b> ->' . strtr($curr_key, $_replace) . '</b> = ' - . smarty_modifier_debug_print_var($curr_val, $max, $length, ++$depth, $objects); - $depth--; - } - break; - - case 'boolean' : - case 'NULL' : - case 'resource' : - if (true === $var) { - $results = 'true'; - } elseif (false === $var) { - $results = 'false'; - } elseif (null === $var) { - $results = 'null'; - } else { - $results = htmlspecialchars((string)$var); - } - $results = '<i>' . $results . '</i>'; - break; - - case 'integer' : - case 'float' : - $results = htmlspecialchars((string)$var); - break; - - case 'string' : - $results = strtr($var, $_replace); - if (Smarty::$_MBSTRING) { - if (mb_strlen($var, Smarty::$_CHARSET) > $length) { - $results = mb_substr($var, 0, $length - 3, Smarty::$_CHARSET) . '...'; - } - } else { - if (isset($var[$length])) { - $results = substr($var, 0, $length - 3) . '...'; - } - } - - $results = htmlspecialchars('"' . $results . '"'); - break; - - case 'unknown type' : - default : - $results = strtr((string)$var, $_replace); - if (Smarty::$_MBSTRING) { - if (mb_strlen($results, Smarty::$_CHARSET) > $length) { - $results = mb_substr($results, 0, $length - 3, Smarty::$_CHARSET) . '...'; - } - } else { - if (strlen($results) > $length) { - $results = substr($results, 0, $length - 3) . '...'; - } - } - - $results = htmlspecialchars($results); - } - - return $results; -} diff --git a/library/smarty/libs/plugins/modifier.escape.php b/library/smarty/libs/plugins/modifier.escape.php deleted file mode 100644 --- a/library/smarty/libs/plugins/modifier.escape.php +++ /dev/null @@ -1,197 +0,0 @@ -<?php -/** - * Smarty plugin - * - * @package Smarty - * @subpackage PluginsModifier - */ - -/** - * Smarty escape modifier plugin - * Type: modifier<br> - * Name: escape<br> - * Purpose: escape string for output - * - * @link http://www.smarty.net/docs/en/language.modifier.escape - * @author Monte Ohrt <monte at ohrt dot com> - * - * @param string $string input string - * @param string $esc_type escape type - * @param string $char_set character set, used for htmlspecialchars() or htmlentities() - * @param boolean $double_encode encode already encoded entitites again, used for htmlspecialchars() or htmlentities() - * - * @return string escaped input string - */ -function smarty_modifier_escape($string, $esc_type = 'html', $char_set = null, $double_encode = true) { - static $_double_encode = null; - if ($_double_encode === null) { - $_double_encode = version_compare(PHP_VERSION, '5.2.3', '>='); - } - - if (!$char_set) { - $char_set = Smarty::$_CHARSET; - } - - switch ($esc_type) { - case 'html': - if ($_double_encode) { - // php >=5.3.2 - go native - return htmlspecialchars($string, ENT_QUOTES, $char_set, $double_encode); - } else { - if ($double_encode) { - // php <5.2.3 - only handle double encoding - return htmlspecialchars($string, ENT_QUOTES, $char_set); - } else { - // php <5.2.3 - prevent double encoding - $string = preg_replace('!&(#?\w+);!', '%%%SMARTY_START%%%\\1%%%SMARTY_END%%%', $string); - $string = htmlspecialchars($string, ENT_QUOTES, $char_set); - $string = str_replace(array('%%%SMARTY_START%%%', '%%%SMARTY_END%%%'), array('&', ';'), $string); - - return $string; - } - } - - case 'htmlall': - if (Smarty::$_MBSTRING) { - // mb_convert_encoding ignores htmlspecialchars() - if ($_double_encode) { - // php >=5.3.2 - go native - $string = htmlspecialchars($string, ENT_QUOTES, $char_set, $double_encode); - } else { - if ($double_encode) { - // php <5.2.3 - only handle double encoding - $string = htmlspecialchars($string, ENT_QUOTES, $char_set); - } else { - // php <5.2.3 - prevent double encoding - $string = preg_replace('!&(#?\w+);!', '%%%SMARTY_START%%%\\1%%%SMARTY_END%%%', $string); - $string = htmlspecialchars($string, ENT_QUOTES, $char_set); - $string = str_replace(array('%%%SMARTY_START%%%', '%%%SMARTY_END%%%'), array('&', ';'), $string); - - return $string; - } - } - - // htmlentities() won't convert everything, so use mb_convert_encoding - return mb_convert_encoding($string, 'HTML-ENTITIES', $char_set); - } - - // no MBString fallback - if ($_double_encode) { - return htmlentities($string, ENT_QUOTES, $char_set, $double_encode); - } else { - if ($double_encode) { - return htmlentities($string, ENT_QUOTES, $char_set); - } else { - $string = preg_replace('!&(#?\w+);!', '%%%SMARTY_START%%%\\1%%%SMARTY_END%%%', $string); - $string = htmlentities($string, ENT_QUOTES, $char_set); - $string = str_replace(array('%%%SMARTY_START%%%', '%%%SMARTY_END%%%'), array('&', ';'), $string); - - return $string; - } - } - - case 'url': - return rawurlencode($string); - - case 'urlpathinfo': - return str_replace('%2F', '/', rawurlencode($string)); - - case 'quotes': - // escape unescaped single quotes - return preg_replace("%(?<!\\\\)'%", "\\'", $string); - - case 'hex': - // escape every byte into hex - // Note that the UTF-8 encoded character ä will be represented as %c3%a4 - $return = ''; - $_length = strlen($string); - for ($x = 0; $x < $_length; $x++) { - $return .= '%' . bin2hex($string[$x]); - } - - return $return; - - case 'hexentity': - $return = ''; - if (Smarty::$_MBSTRING) { - require_once(SMARTY_PLUGINS_DIR . 'shared.mb_unicode.php'); - $return = ''; - foreach (smarty_mb_to_unicode($string, Smarty::$_CHARSET) as $unicode) { - $return .= '&#x' . strtoupper(dechex($unicode)) . ';'; - } - - return $return; - } - // no MBString fallback - $_length = strlen($string); - for ($x = 0; $x < $_length; $x++) { - $return .= '&#x' . bin2hex($string[$x]) . ';'; - } - - return $return; - - case 'decentity': - $return = ''; - if (Smarty::$_MBSTRING) { - require_once(SMARTY_PLUGINS_DIR . 'shared.mb_unicode.php'); - $return = ''; - foreach (smarty_mb_to_unicode($string, Smarty::$_CHARSET) as $unicode) { - $return .= '&#' . $unicode . ';'; - } - - return $return; - } - // no MBString fallback - $_length = strlen($string); - for ($x = 0; $x < $_length; $x++) { - $return .= '&#' . ord($string[$x]) . ';'; - } - - return $return; - - case 'javascript': - // escape quotes and backslashes, newlines, etc. - return strtr($string, array('\\' => '\\\\', "'" => "\\'", '"' => '\\"', "\r" => '\\r', "\n" => '\\n', '</' => '<\/')); - - case 'mail': - if (Smarty::$_MBSTRING) { - require_once(SMARTY_PLUGINS_DIR . 'shared.mb_str_replace.php'); - - return smarty_mb_str_replace(array('@', '.'), array(' [AT] ', ' [DOT] '), $string); - } - // no MBString fallback - return str_replace(array('@', '.'), array(' [AT] ', ' [DOT] '), $string); - - case 'nonstd': - // escape non-standard chars, such as ms document quotes - $return = ''; - if (Smarty::$_MBSTRING) { - require_once(SMARTY_PLUGINS_DIR . 'shared.mb_unicode.php'); - foreach (smarty_mb_to_unicode($string, Smarty::$_CHARSET) as $unicode) { - if ($unicode >= 126) { - $return .= '&#' . $unicode . ';'; - } else { - $return .= chr($unicode); - } - } - - return $return; - } - - $_length = strlen($string); - for ($_i = 0; $_i < $_length; $_i++) { - $_ord = ord(substr($string, $_i, 1)); - // non-standard char, escape it - if ($_ord >= 126) { - $return .= '&#' . $_ord . ';'; - } else { - $return .= substr($string, $_i, 1); - } - } - - return $return; - - default: - return $string; - } -} diff --git a/library/smarty/libs/plugins/modifier.regex_replace.php b/library/smarty/libs/plugins/modifier.regex_replace.php deleted file mode 100644 --- a/library/smarty/libs/plugins/modifier.regex_replace.php +++ /dev/null @@ -1,55 +0,0 @@ -<?php -/** - * Smarty plugin - * - * @package Smarty - * @subpackage PluginsModifier - */ - -/** - * Smarty regex_replace modifier plugin - * Type: modifier<br> - * Name: regex_replace<br> - * Purpose: regular expression search/replace - * - * @link http://smarty.php.net/manual/en/language.modifier.regex.replace.php - * regex_replace (Smarty online manual) - * @author Monte Ohrt <monte at ohrt dot com> - * - * @param string $string input string - * @param string|array $search regular expression(s) to search for - * @param string|array $replace string(s) that should be replaced - * - * @return string - */ -function smarty_modifier_regex_replace($string, $search, $replace) { - if (is_array($search)) { - foreach ($search as $idx => $s) { - $search[$idx] = _smarty_regex_replace_check($s); - } - } else { - $search = _smarty_regex_replace_check($search); - } - - return preg_replace($search, $replace, $string); -} - -/** - * @param string $search string(s) that should be replaced - * - * @return string - * @ignore - */ -function _smarty_regex_replace_check($search) { - // null-byte injection detection - // anything behind the first null-byte is ignored - if (($pos = strpos($search, "\0")) !== false) { - $search = substr($search, 0, $pos); - } - // remove eval-modifier from $search - if (preg_match('!([a-zA-Z\s]+)$!s', $search, $match) && (strpos($match[1], 'e') !== false)) { - $search = substr($search, 0, -strlen($match[1])) . preg_replace('![e\s]+!', '', $match[1]); - } - - return $search; -} diff --git a/library/smarty/libs/plugins/modifier.replace.php b/library/smarty/libs/plugins/modifier.replace.php deleted file mode 100644 --- a/library/smarty/libs/plugins/modifier.replace.php +++ /dev/null @@ -1,33 +0,0 @@ -<?php -/** - * Smarty plugin - * - * @package Smarty - * @subpackage PluginsModifier - */ - -/** - * Smarty replace modifier plugin - * Type: modifier<br> - * Name: replace<br> - * Purpose: simple search/replace - * - * @link http://smarty.php.net/manual/en/language.modifier.replace.php replace (Smarty online manual) - * @author Monte Ohrt <monte at ohrt dot com> - * @author Uwe Tews - * - * @param string $string input string - * @param string $search text to search for - * @param string $replace replacement text - * - * @return string - */ -function smarty_modifier_replace($string, $search, $replace) { - if (Smarty::$_MBSTRING) { - require_once(SMARTY_PLUGINS_DIR . 'shared.mb_str_replace.php'); - - return smarty_mb_str_replace($search, $replace, $string); - } - - return str_replace($search, $replace, $string); -} diff --git a/library/smarty/libs/plugins/modifier.spacify.php b/library/smarty/libs/plugins/modifier.spacify.php deleted file mode 100644 --- a/library/smarty/libs/plugins/modifier.spacify.php +++ /dev/null @@ -1,26 +0,0 @@ -<?php -/** - * Smarty plugin - * - * @package Smarty - * @subpackage PluginsModifier - */ - -/** - * Smarty spacify modifier plugin - * Type: modifier<br> - * Name: spacify<br> - * Purpose: add spaces between characters in a string - * - * @link http://smarty.php.net/manual/en/language.modifier.spacify.php spacify (Smarty online manual) - * @author Monte Ohrt <monte at ohrt dot com> - * - * @param string $string input string - * @param string $spacify_char string to insert between characters. - * - * @return string - */ -function smarty_modifier_spacify($string, $spacify_char = ' ') { - // well… what about charsets besides latin and UTF-8? - return implode($spacify_char, preg_split('//' . Smarty::$_UTF8_MODIFIER, $string, -1, PREG_SPLIT_NO_EMPTY)); -} diff --git a/library/smarty/libs/plugins/modifier.truncate.php b/library/smarty/libs/plugins/modifier.truncate.php deleted file mode 100644 --- a/library/smarty/libs/plugins/modifier.truncate.php +++ /dev/null @@ -1,63 +0,0 @@ -<?php -/** - * Smarty plugin - * - * @package Smarty - * @subpackage PluginsModifier - */ - -/** - * Smarty truncate modifier plugin - * Type: modifier<br> - * Name: truncate<br> - * Purpose: Truncate a string to a certain length if necessary, - * optionally splitting in the middle of a word, and - * appending the $etc string or inserting $etc into the middle. - * - * @link http://smarty.php.net/manual/en/language.modifier.truncate.php truncate (Smarty online manual) - * @author Monte Ohrt <monte at ohrt dot com> - * - * @param string $string input string - * @param integer $length length of truncated text - * @param string $etc end string - * @param boolean $break_words truncate at word boundary - * @param boolean $middle truncate in the middle of text - * - * @return string truncated string - */ -function smarty_modifier_truncate($string, $length = 80, $etc = '...', $break_words = false, $middle = false) { - if ($length == 0) { - return ''; - } - - if (Smarty::$_MBSTRING) { - if (mb_strlen($string, Smarty::$_CHARSET) > $length) { - $length -= min($length, mb_strlen($etc, Smarty::$_CHARSET)); - if (!$break_words && !$middle) { - $string = preg_replace('/\s+?(\S+)?$/' . Smarty::$_UTF8_MODIFIER, '', mb_substr($string, 0, $length + 1, Smarty::$_CHARSET)); - } - if (!$middle) { - return mb_substr($string, 0, $length, Smarty::$_CHARSET) . $etc; - } - - return mb_substr($string, 0, $length / 2, Smarty::$_CHARSET) . $etc . mb_substr($string, -$length / 2, $length, Smarty::$_CHARSET); - } - - return $string; - } - - // no MBString fallback - if (isset($string[$length])) { - $length -= min($length, strlen($etc)); - if (!$break_words && !$middle) { - $string = preg_replace('/\s+?(\S+)?$/', '', substr($string, 0, $length + 1)); - } - if (!$middle) { - return substr($string, 0, $length) . $etc; - } - - return substr($string, 0, $length / 2) . $etc . substr($string, -$length / 2); - } - - return $string; -} diff --git a/library/smarty/libs/plugins/modifiercompiler.cat.php b/library/smarty/libs/plugins/modifiercompiler.cat.php deleted file mode 100644 --- a/library/smarty/libs/plugins/modifiercompiler.cat.php +++ /dev/null @@ -1,28 +0,0 @@ -<?php -/** - * Smarty plugin - * - * @package Smarty - * @subpackage PluginsModifierCompiler - */ - -/** - * Smarty cat modifier plugin - * Type: modifier<br> - * Name: cat<br> - * Date: Feb 24, 2003<br> - * Purpose: catenate a value to a variable<br> - * Input: string to catenate<br> - * Example: {$var|cat:"foo"} - * - * @link http://smarty.php.net/manual/en/language.modifier.cat.php cat - * (Smarty online manual) - * @author Uwe Tews - * - * @param array $params parameters - * - * @return string with compiled code - */ -function smarty_modifiercompiler_cat($params) { - return '(' . implode(').(', $params) . ')'; -} diff --git a/library/smarty/libs/plugins/modifiercompiler.count_characters.php b/library/smarty/libs/plugins/modifiercompiler.count_characters.php deleted file mode 100644 --- a/library/smarty/libs/plugins/modifiercompiler.count_characters.php +++ /dev/null @@ -1,31 +0,0 @@ -<?php -/** - * Smarty plugin - * - * @package Smarty - * @subpackage PluginsModifierCompiler - */ - -/** - * Smarty count_characters modifier plugin - * Type: modifier<br> - * Name: count_characteres<br> - * Purpose: count the number of characters in a text - * - * @link http://www.smarty.net/manual/en/language.modifier.count.characters.php count_characters (Smarty online manual) - * @author Uwe Tews - * - * @param array $params parameters - * - * @return string with compiled code - */ -function smarty_modifiercompiler_count_characters($params) { - if (!isset($params[1]) || $params[1] != 'true') { - return 'preg_match_all(\'/[^\s]/' . Smarty::$_UTF8_MODIFIER . '\',' . $params[0] . ', $tmp)'; - } - if (Smarty::$_MBSTRING) { - return 'mb_strlen(' . $params[0] . ', \'' . addslashes(Smarty::$_CHARSET) . '\')'; - } - // no MBString fallback - return 'strlen(' . $params[0] . ')'; -} diff --git a/library/smarty/libs/plugins/modifiercompiler.count_paragraphs.php b/library/smarty/libs/plugins/modifiercompiler.count_paragraphs.php deleted file mode 100644 --- a/library/smarty/libs/plugins/modifiercompiler.count_paragraphs.php +++ /dev/null @@ -1,26 +0,0 @@ -<?php -/** - * Smarty plugin - * - * @package Smarty - * @subpackage PluginsModifierCompiler - */ - -/** - * Smarty count_paragraphs modifier plugin - * Type: modifier<br> - * Name: count_paragraphs<br> - * Purpose: count the number of paragraphs in a text - * - * @link http://www.smarty.net/manual/en/language.modifier.count.paragraphs.php - * count_paragraphs (Smarty online manual) - * @author Uwe Tews - * - * @param array $params parameters - * - * @return string with compiled code - */ -function smarty_modifiercompiler_count_paragraphs($params) { - // count \r or \n characters - return '(preg_match_all(\'#[\r\n]+#\', ' . $params[0] . ', $tmp)+1)'; -} diff --git a/library/smarty/libs/plugins/modifiercompiler.count_sentences.php b/library/smarty/libs/plugins/modifiercompiler.count_sentences.php deleted file mode 100644 --- a/library/smarty/libs/plugins/modifiercompiler.count_sentences.php +++ /dev/null @@ -1,26 +0,0 @@ -<?php -/** - * Smarty plugin - * - * @package Smarty - * @subpackage PluginsModifierCompiler - */ - -/** - * Smarty count_sentences modifier plugin - * Type: modifier<br> - * Name: count_sentences - * Purpose: count the number of sentences in a text - * - * @link http://www.smarty.net/manual/en/language.modifier.count.paragraphs.php - * count_sentences (Smarty online manual) - * @author Uwe Tews - * - * @param array $params parameters - * - * @return string with compiled code - */ -function smarty_modifiercompiler_count_sentences($params) { - // find periods, question marks, exclamation marks with a word before but not after. - return 'preg_match_all("#\w[\.\?\!](\W|$)#S' . Smarty::$_UTF8_MODIFIER . '", ' . $params[0] . ', $tmp)'; -} diff --git a/library/smarty/libs/plugins/modifiercompiler.count_words.php b/library/smarty/libs/plugins/modifiercompiler.count_words.php deleted file mode 100644 --- a/library/smarty/libs/plugins/modifiercompiler.count_words.php +++ /dev/null @@ -1,30 +0,0 @@ -<?php -/** - * Smarty plugin - * - * @package Smarty - * @subpackage PluginsModifierCompiler - */ - -/** - * Smarty count_words modifier plugin - * Type: modifier<br> - * Name: count_words<br> - * Purpose: count the number of words in a text - * - * @link http://www.smarty.net/manual/en/language.modifier.count.words.php count_words (Smarty online manual) - * @author Uwe Tews - * - * @param array $params parameters - * - * @return string with compiled code - */ -function smarty_modifiercompiler_count_words($params) { - if (Smarty::$_MBSTRING) { - // return 'preg_match_all(\'#[\w\pL]+#' . Smarty::$_UTF8_MODIFIER . '\', ' . $params[0] . ', $tmp)'; - // expression taken from http://de.php.net/manual/en/function.str-word-count.php#85592 - return 'preg_match_all(\'/\p{L}[\p{L}\p{Mn}\p{Pd}\\\'\x{2019}]*/' . Smarty::$_UTF8_MODIFIER . '\', ' . $params[0] . ', $tmp)'; - } - // no MBString fallback - return 'str_word_count(' . $params[0] . ')'; -} diff --git a/library/smarty/libs/plugins/modifiercompiler.default.php b/library/smarty/libs/plugins/modifiercompiler.default.php deleted file mode 100644 --- a/library/smarty/libs/plugins/modifiercompiler.default.php +++ /dev/null @@ -1,34 +0,0 @@ -<?php -/** - * Smarty plugin - * - * @package Smarty - * @subpackage PluginsModifierCompiler - */ - -/** - * Smarty default modifier plugin - * Type: modifier<br> - * Name: default<br> - * Purpose: designate default value for empty variables - * - * @link http://www.smarty.net/manual/en/language.modifier.default.php default (Smarty online manual) - * @author Uwe Tews - * - * @param array $params parameters - * - * @return string with compiled code - */ -function smarty_modifiercompiler_default($params) { - $output = $params[0]; - if (!isset($params[1])) { - $params[1] = "''"; - } - - array_shift($params); - foreach ($params as $param) { - $output = '(($tmp = @' . $output . ')===null||$tmp===\'\' ? ' . $param . ' : $tmp)'; - } - - return $output; -} diff --git a/library/smarty/libs/plugins/modifiercompiler.escape.php b/library/smarty/libs/plugins/modifiercompiler.escape.php deleted file mode 100644 --- a/library/smarty/libs/plugins/modifiercompiler.escape.php +++ /dev/null @@ -1,124 +0,0 @@ -<?php -/** - * Smarty plugin - * - * @package Smarty - * @subpackage PluginsModifierCompiler - */ - -/** - * @ignore - */ -require_once(SMARTY_PLUGINS_DIR . 'shared.literal_compiler_param.php'); - -/** - * Smarty escape modifier plugin - * Type: modifier<br> - * Name: escape<br> - * Purpose: escape string for output - * - * @link http://www.smarty.net/docsv2/en/language.modifier.escape count_characters (Smarty online manual) - * @author Rodney Rehm - * - * @param array $params parameters - * @param $compiler - * - * @return string with compiled code - */ -function smarty_modifiercompiler_escape($params, $compiler) { - static $_double_encode = null; - if ($_double_encode === null) { - $_double_encode = version_compare(PHP_VERSION, '5.2.3', '>='); - } - - try { - $esc_type = smarty_literal_compiler_param($params, 1, 'html'); - $char_set = smarty_literal_compiler_param($params, 2, Smarty::$_CHARSET); - $double_encode = smarty_literal_compiler_param($params, 3, true); - - if (!$char_set) { - $char_set = Smarty::$_CHARSET; - } - - switch ($esc_type) { - case 'html': - if ($_double_encode) { - return 'htmlspecialchars(' - . $params[0] . ', ENT_QUOTES, ' - . var_export($char_set, true) . ', ' - . var_export($double_encode, true) . ')'; - } elseif ($double_encode) { - return 'htmlspecialchars(' - . $params[0] . ', ENT_QUOTES, ' - . var_export($char_set, true) . ')'; - } else { - // fall back to modifier.escape.php - } - - case 'htmlall': - if (Smarty::$_MBSTRING) { - if ($_double_encode) { - // php >=5.2.3 - go native - return 'mb_convert_encoding(htmlspecialchars(' - . $params[0] . ', ENT_QUOTES, ' - . var_export($char_set, true) . ', ' - . var_export($double_encode, true) - . '), "HTML-ENTITIES", ' - . var_export($char_set, true) . ')'; - } elseif ($double_encode) { - // php <5.2.3 - only handle double encoding - return 'mb_convert_encoding(htmlspecialchars(' - . $params[0] . ', ENT_QUOTES, ' - . var_export($char_set, true) - . '), "HTML-ENTITIES", ' - . var_export($char_set, true) . ')'; - } else { - // fall back to modifier.escape.php - } - } - - // no MBString fallback - if ($_double_encode) { - // php >=5.2.3 - go native - return 'htmlentities(' - . $params[0] . ', ENT_QUOTES, ' - . var_export($char_set, true) . ', ' - . var_export($double_encode, true) . ')'; - } elseif ($double_encode) { - // php <5.2.3 - only handle double encoding - return 'htmlentities(' - . $params[0] . ', ENT_QUOTES, ' - . var_export($char_set, true) . ')'; - } else { - // fall back to modifier.escape.php - } - - case 'url': - return 'rawurlencode(' . $params[0] . ')'; - - case 'urlpathinfo': - return 'str_replace("%2F", "/", rawurlencode(' . $params[0] . '))'; - - case 'quotes': - // escape unescaped single quotes - return 'preg_replace("%(?<!\\\\\\\\)\'%", "\\\'",' . $params[0] . ')'; - - case 'javascript': - // escape quotes and backslashes, newlines, etc. - return 'strtr(' . $params[0] . ', array("\\\\" => "\\\\\\\\", "\'" => "\\\\\'", "\"" => "\\\\\"", "\\r" => "\\\\r", "\\n" => "\\\n", "</" => "<\/" ))'; - } - } catch (SmartyException $e) { - // pass through to regular plugin fallback - } - - // could not optimize |escape call, so fallback to regular plugin - if ($compiler->template->caching && ($compiler->tag_nocache | $compiler->nocache)) { - $compiler->template->required_plugins['nocache']['escape']['modifier']['file'] = SMARTY_PLUGINS_DIR . 'modifier.escape.php'; - $compiler->template->required_plugins['nocache']['escape']['modifier']['function'] = 'smarty_modifier_escape'; - } else { - $compiler->template->required_plugins['compiled']['escape']['modifier']['file'] = SMARTY_PLUGINS_DIR . 'modifier.escape.php'; - $compiler->template->required_plugins['compiled']['escape']['modifier']['function'] = 'smarty_modifier_escape'; - } - - return 'smarty_modifier_escape(' . join(', ', $params) . ')'; -} diff --git a/library/smarty/libs/plugins/modifiercompiler.from_charset.php b/library/smarty/libs/plugins/modifiercompiler.from_charset.php deleted file mode 100644 --- a/library/smarty/libs/plugins/modifiercompiler.from_charset.php +++ /dev/null @@ -1,32 +0,0 @@ -<?php -/** - * Smarty plugin - * - * @package Smarty - * @subpackage PluginsModifierCompiler - */ - -/** - * Smarty from_charset modifier plugin - * Type: modifier<br> - * Name: from_charset<br> - * Purpose: convert character encoding from $charset to internal encoding - * - * @author Rodney Rehm - * - * @param array $params parameters - * - * @return string with compiled code - */ -function smarty_modifiercompiler_from_charset($params) { - if (!Smarty::$_MBSTRING) { - // FIXME: (rodneyrehm) shouldn't this throw an error? - return $params[0]; - } - - if (!isset($params[1])) { - $params[1] = '"ISO-8859-1"'; - } - - return 'mb_convert_encoding(' . $params[0] . ', "' . addslashes(Smarty::$_CHARSET) . '", ' . $params[1] . ')'; -} diff --git a/library/smarty/libs/plugins/modifiercompiler.indent.php b/library/smarty/libs/plugins/modifiercompiler.indent.php deleted file mode 100644 --- a/library/smarty/libs/plugins/modifiercompiler.indent.php +++ /dev/null @@ -1,32 +0,0 @@ -<?php -/** - * Smarty plugin - * - * @package Smarty - * @subpackage PluginsModifierCompiler - */ - -/** - * Smarty indent modifier plugin - * Type: modifier<br> - * Name: indent<br> - * Purpose: indent lines of text - * - * @link http://www.smarty.net/manual/en/language.modifier.indent.php indent (Smarty online manual) - * @author Uwe Tews - * - * @param array $params parameters - * - * @return string with compiled code - */ - -function smarty_modifiercompiler_indent($params) { - if (!isset($params[1])) { - $params[1] = 4; - } - if (!isset($params[2])) { - $params[2] = "' '"; - } - - return 'preg_replace(\'!^!m\',str_repeat(' . $params[2] . ',' . $params[1] . '),' . $params[0] . ')'; -} diff --git a/library/smarty/libs/plugins/modifiercompiler.lower.php b/library/smarty/libs/plugins/modifiercompiler.lower.php deleted file mode 100644 --- a/library/smarty/libs/plugins/modifiercompiler.lower.php +++ /dev/null @@ -1,30 +0,0 @@ -<?php -/** - * Smarty plugin - * - * @package Smarty - * @subpackage PluginsModifierCompiler - */ - -/** - * Smarty lower modifier plugin - * Type: modifier<br> - * Name: lower<br> - * Purpose: convert string to lowercase - * - * @link http://www.smarty.net/manual/en/language.modifier.lower.php lower (Smarty online manual) - * @author Monte Ohrt <monte at ohrt dot com> - * @author Uwe Tews - * - * @param array $params parameters - * - * @return string with compiled code - */ - -function smarty_modifiercompiler_lower($params) { - if (Smarty::$_MBSTRING) { - return 'mb_strtolower(' . $params[0] . ', \'' . addslashes(Smarty::$_CHARSET) . '\')'; - } - // no MBString fallback - return 'strtolower(' . $params[0] . ')'; -} diff --git a/library/smarty/libs/plugins/modifiercompiler.noprint.php b/library/smarty/libs/plugins/modifiercompiler.noprint.php deleted file mode 100644 --- a/library/smarty/libs/plugins/modifiercompiler.noprint.php +++ /dev/null @@ -1,20 +0,0 @@ -<?php -/** - * Smarty plugin - * - * @package Smarty - * @subpackage PluginsModifierCompiler - */ - -/** - * Smarty noprint modifier plugin - * Type: modifier<br> - * Name: noprint<br> - * Purpose: return an empty string - * - * @author Uwe Tews - * @return string with compiled code - */ -function smarty_modifiercompiler_noprint() { - return "''"; -} diff --git a/library/smarty/libs/plugins/modifiercompiler.string_format.php b/library/smarty/libs/plugins/modifiercompiler.string_format.php deleted file mode 100644 --- a/library/smarty/libs/plugins/modifiercompiler.string_format.php +++ /dev/null @@ -1,24 +0,0 @@ -<?php -/** - * Smarty plugin - * - * @package Smarty - * @subpackage PluginsModifierCompiler - */ - -/** - * Smarty string_format modifier plugin - * Type: modifier<br> - * Name: string_format<br> - * Purpose: format strings via sprintf - * - * @link http://www.smarty.net/manual/en/language.modifier.string.format.php string_format (Smarty online manual) - * @author Uwe Tews - * - * @param array $params parameters - * - * @return string with compiled code - */ -function smarty_modifiercompiler_string_format($params) { - return 'sprintf(' . $params[1] . ',' . $params[0] . ')'; -} diff --git a/library/smarty/libs/plugins/modifiercompiler.strip.php b/library/smarty/libs/plugins/modifiercompiler.strip.php deleted file mode 100644 --- a/library/smarty/libs/plugins/modifiercompiler.strip.php +++ /dev/null @@ -1,32 +0,0 @@ -<?php -/** - * Smarty plugin - * - * @package Smarty - * @subpackage PluginsModifierCompiler - */ - -/** - * Smarty strip modifier plugin - * Type: modifier<br> - * Name: strip<br> - * Purpose: Replace all repeated spaces, newlines, tabs - * with a single space or supplied replacement string.<br> - * Example: {$var|strip} {$var|strip:" "}<br> - * Date: September 25th, 2002 - * - * @link http://www.smarty.net/manual/en/language.modifier.strip.php strip (Smarty online manual) - * @author Uwe Tews - * - * @param array $params parameters - * - * @return string with compiled code - */ - -function smarty_modifiercompiler_strip($params) { - if (!isset($params[1])) { - $params[1] = "' '"; - } - - return "preg_replace('!\s+!" . Smarty::$_UTF8_MODIFIER . "', {$params[1]},{$params[0]})"; -} diff --git a/library/smarty/libs/plugins/modifiercompiler.strip_tags.php b/library/smarty/libs/plugins/modifiercompiler.strip_tags.php deleted file mode 100644 --- a/library/smarty/libs/plugins/modifiercompiler.strip_tags.php +++ /dev/null @@ -1,28 +0,0 @@ -<?php -/** - * Smarty plugin - * - * @package Smarty - * @subpackage PluginsModifierCompiler - */ - -/** - * Smarty strip_tags modifier plugin - * Type: modifier<br> - * Name: strip_tags<br> - * Purpose: strip html tags from text - * - * @link http://www.smarty.net/manual/en/language.modifier.strip.tags.php strip_tags (Smarty online manual) - * @author Uwe Tews - * - * @param array $params parameters - * - * @return string with compiled code - */ -function smarty_modifiercompiler_strip_tags($params) { - if (!isset($params[1]) || $params[1] === true || trim($params[1], '"') == 'true') { - return "preg_replace('!<[^>]*?>!', ' ', {$params[0]})"; - } else { - return 'strip_tags(' . $params[0] . ')'; - } -} diff --git a/library/smarty/libs/plugins/modifiercompiler.to_charset.php b/library/smarty/libs/plugins/modifiercompiler.to_charset.php deleted file mode 100644 --- a/library/smarty/libs/plugins/modifiercompiler.to_charset.php +++ /dev/null @@ -1,32 +0,0 @@ -<?php -/** - * Smarty plugin - * - * @package Smarty - * @subpackage PluginsModifierCompiler - */ - -/** - * Smarty to_charset modifier plugin - * Type: modifier<br> - * Name: to_charset<br> - * Purpose: convert character encoding from internal encoding to $charset - * - * @author Rodney Rehm - * - * @param array $params parameters - * - * @return string with compiled code - */ -function smarty_modifiercompiler_to_charset($params) { - if (!Smarty::$_MBSTRING) { - // FIXME: (rodneyrehm) shouldn't this throw an error? - return $params[0]; - } - - if (!isset($params[1])) { - $params[1] = '"ISO-8859-1"'; - } - - return 'mb_convert_encoding(' . $params[0] . ', ' . $params[1] . ', "' . addslashes(Smarty::$_CHARSET) . '")'; -} diff --git a/library/smarty/libs/plugins/modifiercompiler.unescape.php b/library/smarty/libs/plugins/modifiercompiler.unescape.php deleted file mode 100644 --- a/library/smarty/libs/plugins/modifiercompiler.unescape.php +++ /dev/null @@ -1,49 +0,0 @@ -<?php -/** - * Smarty plugin - * - * @package Smarty - * @subpackage PluginsModifierCompiler - */ - -/** - * Smarty unescape modifier plugin - * Type: modifier<br> - * Name: unescape<br> - * Purpose: unescape html entities - * - * @author Rodney Rehm - * - * @param array $params parameters - * - * @return string with compiled code - */ -function smarty_modifiercompiler_unescape($params) { - if (!isset($params[1])) { - $params[1] = 'html'; - } - if (!isset($params[2])) { - $params[2] = '\'' . addslashes(Smarty::$_CHARSET) . '\''; - } else { - $params[2] = "'" . $params[2] . "'"; - } - - switch (trim($params[1], '"\'')) { - case 'entity': - case 'htmlall': - if (Smarty::$_MBSTRING) { - return 'mb_convert_encoding(' . $params[0] . ', ' . $params[2] . ', \'HTML-ENTITIES\')'; - } - - return 'html_entity_decode(' . $params[0] . ', ENT_NOQUOTES, ' . $params[2] . ')'; - - case 'html': - return 'htmlspecialchars_decode(' . $params[0] . ', ENT_QUOTES)'; - - case 'url': - return 'rawurldecode(' . $params[0] . ')'; - - default: - return $params[0]; - } -} diff --git a/library/smarty/libs/plugins/modifiercompiler.upper.php b/library/smarty/libs/plugins/modifiercompiler.upper.php deleted file mode 100644 --- a/library/smarty/libs/plugins/modifiercompiler.upper.php +++ /dev/null @@ -1,28 +0,0 @@ -<?php -/** - * Smarty plugin - * - * @package Smarty - * @subpackage PluginsModifierCompiler - */ - -/** - * Smarty upper modifier plugin - * Type: modifier<br> - * Name: lower<br> - * Purpose: convert string to uppercase - * - * @link http://smarty.php.net/manual/en/language.modifier.upper.php lower (Smarty online manual) - * @author Uwe Tews - * - * @param array $params parameters - * - * @return string with compiled code - */ -function smarty_modifiercompiler_upper($params) { - if (Smarty::$_MBSTRING) { - return 'mb_strtoupper(' . $params[0] . ', \'' . addslashes(Smarty::$_CHARSET) . '\')'; - } - // no MBString fallback - return 'strtoupper(' . $params[0] . ')'; -} diff --git a/library/smarty/libs/plugins/modifiercompiler.wordwrap.php b/library/smarty/libs/plugins/modifiercompiler.wordwrap.php deleted file mode 100644 --- a/library/smarty/libs/plugins/modifiercompiler.wordwrap.php +++ /dev/null @@ -1,46 +0,0 @@ -<?php -/** - * Smarty plugin - * - * @package Smarty - * @subpackage PluginsModifierCompiler - */ - -/** - * Smarty wordwrap modifier plugin - * Type: modifier<br> - * Name: wordwrap<br> - * Purpose: wrap a string of text at a given length - * - * @link http://smarty.php.net/manual/en/language.modifier.wordwrap.php wordwrap (Smarty online manual) - * @author Uwe Tews - * - * @param array $params parameters - * @param $compiler - * - * @return string with compiled code - */ -function smarty_modifiercompiler_wordwrap($params, $compiler) { - if (!isset($params[1])) { - $params[1] = 80; - } - if (!isset($params[2])) { - $params[2] = '"\n"'; - } - if (!isset($params[3])) { - $params[3] = 'false'; - } - $function = 'wordwrap'; - if (Smarty::$_MBSTRING) { - if ($compiler->template->caching && ($compiler->tag_nocache | $compiler->nocache)) { - $compiler->template->required_plugins['nocache']['wordwrap']['modifier']['file'] = SMARTY_PLUGINS_DIR . 'shared.mb_wordwrap.php'; - $compiler->template->required_plugins['nocache']['wordwrap']['modifier']['function'] = 'smarty_mb_wordwrap'; - } else { - $compiler->template->required_plugins['compiled']['wordwrap']['modifier']['file'] = SMARTY_PLUGINS_DIR . 'shared.mb_wordwrap.php'; - $compiler->template->required_plugins['compiled']['wordwrap']['modifier']['function'] = 'smarty_mb_wordwrap'; - } - $function = 'smarty_mb_wordwrap'; - } - - return $function . '(' . $params[0] . ',' . $params[1] . ',' . $params[2] . ',' . $params[3] . ')'; -} diff --git a/library/smarty/libs/plugins/outputfilter.trimwhitespace.php b/library/smarty/libs/plugins/outputfilter.trimwhitespace.php deleted file mode 100644 --- a/library/smarty/libs/plugins/outputfilter.trimwhitespace.php +++ /dev/null @@ -1,89 +0,0 @@ -<?php -/** - * Smarty plugin - * - * @package Smarty - * @subpackage PluginsFilter - */ - -/** - * Smarty trimwhitespace outputfilter plugin - * Trim unnecessary whitespace from HTML markup. - * - * @author Rodney Rehm - * - * @param string $source input string - * - * @return string filtered output - * @todo substr_replace() is not overloaded by mbstring.func_overload - so this function might fail! - */ -function smarty_outputfilter_trimwhitespace($source) { - $store = array(); - $_store = 0; - $_offset = 0; - - // Unify Line-Breaks to \n - $source = preg_replace("/\015\012|\015|\012/", "\n", $source); - - // capture Internet Explorer Conditional Comments - if (preg_match_all('#<!--\[[^\]]+\]>.*?<!\[[^\]]+\]-->#is', $source, $matches, PREG_OFFSET_CAPTURE | PREG_SET_ORDER)) { - foreach ($matches as $match) { - $store[] = $match[0][0]; - $_length = strlen($match[0][0]); - $replace = '@!@SMARTY:' . $_store . ':SMARTY@!@'; - $source = substr_replace($source, $replace, $match[0][1] - $_offset, $_length); - - $_offset += $_length - strlen($replace); - $_store++; - } - } - - // Strip all HTML-Comments - // yes, even the ones in <script> - see http://stackoverflow.com/a/808850/515124 - $source = preg_replace('#<!--.*?-->#ms', '', $source); - - // capture html elements not to be messed with - $_offset = 0; - if (preg_match_all('#(<script[^>]*>.*?</script[^>]*>)|(<textarea[^>]*>.*?</textarea[^>]*>)|(<pre[^>]*>.*?</pre[^>]*>)#is', $source, $matches, PREG_OFFSET_CAPTURE | PREG_SET_ORDER)) { - foreach ($matches as $match) { - $store[] = $match[0][0]; - $_length = strlen($match[0][0]); - $replace = '@!@SMARTY:' . $_store . ':SMARTY@!@'; - $source = substr_replace($source, $replace, $match[0][1] - $_offset, $_length); - - $_offset += $_length - strlen($replace); - $_store++; - } - } - - $expressions = array( - // replace multiple spaces between tags by a single space - // can't remove them entirely, becaue that might break poorly implemented CSS display:inline-block elements - '#(:SMARTY@!@|>)\s+(?=@!@SMARTY:|<)#s' => '\1 \2', - // remove spaces between attributes (but not in attribute values!) - '#(([a-z0-9]\s*=\s*("[^"]*?")|(\'[^\']*?\'))|<[a-z0-9_]+)\s+([a-z/>])#is' => '\1 \5', - // note: for some very weird reason trim() seems to remove spaces inside attributes. - // maybe a \0 byte or something is interfering? - '#^\s+<#Ss' => '<', - '#>\s+$#Ss' => '>', - ); - - $source = preg_replace(array_keys($expressions), array_values($expressions), $source); - // note: for some very weird reason trim() seems to remove spaces inside attributes. - // maybe a \0 byte or something is interfering? - // $source = trim( $source ); - - $_offset = 0; - if (preg_match_all('#@!@SMARTY:([0-9]+):SMARTY@!@#is', $source, $matches, PREG_OFFSET_CAPTURE | PREG_SET_ORDER)) { - foreach ($matches as $match) { - $_length = strlen($match[0][0]); - $replace = $store[$match[1][0]]; - $source = substr_replace($source, $replace, $match[0][1] + $_offset, $_length); - - $_offset += strlen($replace) - $_length; - $_store++; - } - } - - return $source; -} diff --git a/library/smarty/libs/plugins/shared.escape_special_chars.php b/library/smarty/libs/plugins/shared.escape_special_chars.php deleted file mode 100644 --- a/library/smarty/libs/plugins/shared.escape_special_chars.php +++ /dev/null @@ -1,51 +0,0 @@ -<?php -/** - * Smarty shared plugin - * - * @package Smarty - * @subpackage PluginsShared - */ - -if (version_compare(PHP_VERSION, '5.2.3', '>=')) { - /** - * escape_special_chars core function - * Function: smarty_function_escape_special_chars<br> - * Purpose: used by other smarty functions to escape - * special chars except for already escaped ones - * - * @author Monte Ohrt <monte at ohrt dot com> - * - * @param string $string text that should by escaped - * - * @return string - */ - function smarty_function_escape_special_chars($string) { - if (!is_array($string)) { - $string = htmlspecialchars($string, ENT_COMPAT, Smarty::$_CHARSET, false); - } - - return $string; - } -} else { - /** - * escape_special_chars core function - * Function: smarty_function_escape_special_chars<br> - * Purpose: used by other smarty functions to escape - * special chars except for already escaped ones - * - * @author Monte Ohrt <monte at ohrt dot com> - * - * @param string $string text that should by escaped - * - * @return string - */ - function smarty_function_escape_special_chars($string) { - if (!is_array($string)) { - $string = preg_replace('!&(#?\w+);!', '%%%SMARTY_START%%%\\1%%%SMARTY_END%%%', $string); - $string = htmlspecialchars($string); - $string = str_replace(array('%%%SMARTY_START%%%', '%%%SMARTY_END%%%'), array('&', ';'), $string); - } - - return $string; - } -} diff --git a/library/smarty/libs/plugins/shared.literal_compiler_param.php b/library/smarty/libs/plugins/shared.literal_compiler_param.php deleted file mode 100644 --- a/library/smarty/libs/plugins/shared.literal_compiler_param.php +++ /dev/null @@ -1,34 +0,0 @@ -<?php -/** - * Smarty plugin - * - * @package Smarty - * @subpackage PluginsShared - */ - -/** - * evaluate compiler parameter - * - * @param array $params parameter array as given to the compiler function - * @param integer $index array index of the parameter to convert - * @param mixed $default value to be returned if the parameter is not present - * - * @return mixed evaluated value of parameter or $default - * @throws SmartyException if parameter is not a literal (but an expression, variable, …) - * @author Rodney Rehm - */ -function smarty_literal_compiler_param($params, $index, $default = null) { - // not set, go default - if (!isset($params[$index])) { - return $default; - } - // test if param is a literal - if (!preg_match('/^([\'"]?)[a-zA-Z0-9-]+(\\1)$/', $params[$index])) { - throw new SmartyException('$param[' . $index . '] is not a literal and is thus not evaluatable at compile time'); - } - - $t = null; - eval("\$t = " . $params[$index] . ";"); - - return $t; -} diff --git a/library/smarty/libs/plugins/shared.make_timestamp.php b/library/smarty/libs/plugins/shared.make_timestamp.php deleted file mode 100644 --- a/library/smarty/libs/plugins/shared.make_timestamp.php +++ /dev/null @@ -1,42 +0,0 @@ -<?php -/** - * Smarty shared plugin - * - * @package Smarty - * @subpackage PluginsShared - */ - -/** - * Function: smarty_make_timestamp<br> - * Purpose: used by other smarty functions to make a timestamp from a string. - * - * @author Monte Ohrt <monte at ohrt dot com> - * - * @param DateTime|int|string $string date object, timestamp or string that can be converted using strtotime() - * - * @return int - */ -function smarty_make_timestamp($string) { - if (empty($string)) { - // use "now": - return time(); - } elseif ($string instanceof DateTime) { - return $string->getTimestamp(); - } elseif (strlen($string) == 14 && ctype_digit($string)) { - // it is mysql timestamp format of YYYYMMDDHHMMSS? - return mktime(substr($string, 8, 2), substr($string, 10, 2), substr($string, 12, 2), - substr($string, 4, 2), substr($string, 6, 2), substr($string, 0, 4)); - } elseif (is_numeric($string)) { - // it is a numeric string, we handle it as timestamp - return (int)$string; - } else { - // strtotime should handle it - $time = strtotime($string); - if ($time == -1 || $time === false) { - // strtotime() was not able to parse $string, use "now": - return time(); - } - - return $time; - } -} diff --git a/library/smarty/libs/plugins/shared.mb_str_replace.php b/library/smarty/libs/plugins/shared.mb_str_replace.php deleted file mode 100644 --- a/library/smarty/libs/plugins/shared.mb_str_replace.php +++ /dev/null @@ -1,54 +0,0 @@ -<?php -/** - * Smarty shared plugin - * - * @package Smarty - * @subpackage PluginsShared - */ -if (!function_exists('smarty_mb_str_replace')) { - - /** - * Multibyte string replace - * - * @param string $search the string to be searched - * @param string $replace the replacement string - * @param string $subject the source string - * @param int &$count number of matches found - * - * @return string replaced string - * @author Rodney Rehm - */ - function smarty_mb_str_replace($search, $replace, $subject, &$count = 0) { - if (!is_array($search) && is_array($replace)) { - return false; - } - if (is_array($subject)) { - // call mb_replace for each single string in $subject - foreach ($subject as &$string) { - $string = &smarty_mb_str_replace($search, $replace, $string, $c); - $count += $c; - } - } elseif (is_array($search)) { - if (!is_array($replace)) { - foreach ($search as &$string) { - $subject = smarty_mb_str_replace($string, $replace, $subject, $c); - $count += $c; - } - } else { - $n = max(count($search), count($replace)); - while ($n--) { - $subject = smarty_mb_str_replace(current($search), current($replace), $subject, $c); - $count += $c; - next($search); - next($replace); - } - } - } else { - $parts = mb_split(preg_quote($search), $subject); - $count = count($parts) - 1; - $subject = implode($replace, $parts); - } - - return $subject; - } -} diff --git a/library/smarty/libs/plugins/shared.mb_unicode.php b/library/smarty/libs/plugins/shared.mb_unicode.php deleted file mode 100644 --- a/library/smarty/libs/plugins/shared.mb_unicode.php +++ /dev/null @@ -1,52 +0,0 @@ -<?php -/** - * Smarty shared plugin - * - * @package Smarty - * @subpackage PluginsShared - */ - -/** - * convert characters to their decimal unicode equivalents - * - * @link http://www.ibm.com/developerworks/library/os-php-unicode/index.html#listing3 for inspiration - * - * @param string $string characters to calculate unicode of - * @param string $encoding encoding of $string, if null mb_internal_encoding() is used - * - * @return array sequence of unicodes - * @author Rodney Rehm - */ -function smarty_mb_to_unicode($string, $encoding = null) { - if ($encoding) { - $expanded = mb_convert_encoding($string, "UTF-32BE", $encoding); - } else { - $expanded = mb_convert_encoding($string, "UTF-32BE"); - } - - return unpack("N*", $expanded); -} - -/** - * convert unicodes to the character of given encoding - * - * @link http://www.ibm.com/developerworks/library/os-php-unicode/index.html#listing3 for inspiration - * - * @param integer|array $unicode single unicode or list of unicodes to convert - * @param string $encoding encoding of returned string, if null mb_internal_encoding() is used - * - * @return string unicode as character sequence in given $encoding - * @author Rodney Rehm - */ -function smarty_mb_from_unicode($unicode, $encoding = null) { - $t = ''; - if (!$encoding) { - $encoding = mb_internal_encoding(); - } - foreach ((array)$unicode as $utf32be) { - $character = pack("N*", $utf32be); - $t .= mb_convert_encoding($character, $encoding, "UTF-32BE"); - } - - return $t; -} diff --git a/library/smarty/libs/plugins/shared.mb_wordwrap.php b/library/smarty/libs/plugins/shared.mb_wordwrap.php deleted file mode 100644 --- a/library/smarty/libs/plugins/shared.mb_wordwrap.php +++ /dev/null @@ -1,72 +0,0 @@ -<?php -/** - * Smarty shared plugin - * - * @package Smarty - * @subpackage PluginsShared - */ - -if (!function_exists('smarty_mb_wordwrap')) { - - /** - * Wrap a string to a given number of characters - * - * @link http://php.net/manual/en/function.wordwrap.php for similarity - * - * @param string $str the string to wrap - * @param int $width the width of the output - * @param string $break the character used to break the line - * @param boolean $cut ignored parameter, just for the sake of - * - * @return string wrapped string - * @author Rodney Rehm - */ - function smarty_mb_wordwrap($str, $width = 75, $break = "\n", $cut = false) { - // break words into tokens using white space as a delimiter - $tokens = preg_split('!(\s)!S' . Smarty::$_UTF8_MODIFIER, $str, -1, PREG_SPLIT_NO_EMPTY + PREG_SPLIT_DELIM_CAPTURE); - $length = 0; - $t = ''; - $_previous = false; - $_space = false; - - foreach ($tokens as $_token) { - $token_length = mb_strlen($_token, Smarty::$_CHARSET); - $_tokens = array($_token); - if ($token_length > $width) { - if ($cut) { - $_tokens = preg_split('!(.{' . $width . '})!S' . Smarty::$_UTF8_MODIFIER, $_token, -1, PREG_SPLIT_NO_EMPTY + PREG_SPLIT_DELIM_CAPTURE); - } - } - - foreach ($_tokens as $token) { - $_space = !!preg_match('!^\s$!S' . Smarty::$_UTF8_MODIFIER, $token); - $token_length = mb_strlen($token, Smarty::$_CHARSET); - $length += $token_length; - - if ($length > $width) { - // remove space before inserted break - if ($_previous) { - $t = mb_substr($t, 0, -1, Smarty::$_CHARSET); - } - - if (!$_space) { - // add the break before the token - if (!empty($t)) { - $t .= $break; - } - $length = $token_length; - } - } elseif ($token == "\n") { - // hard break must reset counters - $_previous = 0; - $length = 0; - } - $_previous = $_space; - // add the token - $t .= $token; - } - } - - return $t; - } -} diff --git a/library/smarty/libs/plugins/variablefilter.htmlspecialchars.php b/library/smarty/libs/plugins/variablefilter.htmlspecialchars.php deleted file mode 100644 --- a/library/smarty/libs/plugins/variablefilter.htmlspecialchars.php +++ /dev/null @@ -1,18 +0,0 @@ -<?php -/** - * Smarty plugin - * - * @package Smarty - * @subpackage PluginsFilter - */ - -/** - * Smarty htmlspecialchars variablefilter plugin - * - * @param string $source input string - * - * @return string filtered output - */ -function smarty_variablefilter_htmlspecialchars($source) { - return htmlspecialchars($source, ENT_QUOTES, Smarty::$_CHARSET); -} diff --git a/library/smarty/libs/sysplugins/smarty_cacheresource.php b/library/smarty/libs/sysplugins/smarty_cacheresource.php deleted file mode 100644 --- a/library/smarty/libs/sysplugins/smarty_cacheresource.php +++ /dev/null @@ -1,221 +0,0 @@ -<?php -/** - * Smarty Internal Plugin - * - * @package Smarty - * @subpackage Cacher - */ - -/** - * Cache Handler API - * - * @package Smarty - * @subpackage Cacher - * @author Rodney Rehm - */ -abstract class Smarty_CacheResource { - /** - * resource types provided by the core - * - * @var array - */ - protected static $sysplugins = array( - 'file' => 'smarty_internal_cacheresource_file.php', - ); - - /** - * populate Cached Object with meta data from Resource - * - * @param Smarty_Template_Cached $cached cached object - * @param Smarty_Internal_Template $_template template object - * - * @return void - */ - abstract public function populate(Smarty_Template_Cached $cached, Smarty_Internal_Template $_template); - - /** - * populate Cached Object with timestamp and exists from Resource - * - * @param Smarty_Template_Cached $cached - * - * @return void - */ - abstract public function populateTimestamp(Smarty_Template_Cached $cached); - - /** - * Read the cached template and process header - * - * @param Smarty_Internal_Template $_template template object - * @param Smarty_Template_Cached $cached cached object - * - * @return boolean true or false if the cached content does not exist - */ - abstract public function process(Smarty_Internal_Template $_template, Smarty_Template_Cached $cached = null); - - /** - * Write the rendered template output to cache - * - * @param Smarty_Internal_Template $_template template object - * @param string $content content to cache - * - * @return boolean success - */ - abstract public function writeCachedContent(Smarty_Internal_Template $_template, $content); - - /** - * Return cached content - * - * @param Smarty_Internal_Template $_template template object - * - * @return null|string - */ - public function getCachedContent(Smarty_Internal_Template $_template) { - if ($_template->cached->handler->process($_template)) { - ob_start(); - $_template->properties['unifunc']($_template); - - return ob_get_clean(); - } - - return null; - } - - /** - * Empty cache - * - * @param Smarty $smarty Smarty object - * @param integer $exp_time expiration time (number of seconds, not timestamp) - * - * @return integer number of cache files deleted - */ - abstract public function clearAll(Smarty $smarty, $exp_time = null); - - /** - * Empty cache for a specific template - * - * @param Smarty $smarty Smarty object - * @param string $resource_name template name - * @param string $cache_id cache id - * @param string $compile_id compile id - * @param integer $exp_time expiration time (number of seconds, not timestamp) - * - * @return integer number of cache files deleted - */ - abstract public function clear(Smarty $smarty, $resource_name, $cache_id, $compile_id, $exp_time); - - /** - * @param Smarty $smarty - * @param Smarty_Template_Cached $cached - * - * @return bool|null - */ - public function locked(Smarty $smarty, Smarty_Template_Cached $cached) { - // theoretically locking_timeout should be checked against time_limit (max_execution_time) - $start = microtime(true); - $hadLock = null; - while ($this->hasLock($smarty, $cached)) { - $hadLock = true; - if (microtime(true) - $start > $smarty->locking_timeout) { - // abort waiting for lock release - return false; - } - sleep(1); - } - - return $hadLock; - } - - /** - * Check is cache is locked for this template - * - * @param Smarty $smarty - * @param Smarty_Template_Cached $cached - * - * @return bool - */ - public function hasLock(Smarty $smarty, Smarty_Template_Cached $cached) { - // check if lock exists - return false; - } - - /** - * Lock cache for this template - * - * @param Smarty $smarty - * @param Smarty_Template_Cached $cached - * - * @return bool - */ - public function acquireLock(Smarty $smarty, Smarty_Template_Cached $cached) { - // create lock - return true; - } - - /** - * Unlock cache for this template - * - * @param Smarty $smarty - * @param Smarty_Template_Cached $cached - * - * @return bool - */ - public function releaseLock(Smarty $smarty, Smarty_Template_Cached $cached) { - // release lock - return true; - } - - /** - * Load Cache Resource Handler - * - * @param Smarty $smarty Smarty object - * @param string $type name of the cache resource - * - * @throws SmartyException - * @return Smarty_CacheResource Cache Resource Handler - */ - public static function load(Smarty $smarty, $type = null) { - if (!isset($type)) { - $type = $smarty->caching_type; - } - - // try smarty's cache - if (isset($smarty->_cacheresource_handlers[$type])) { - return $smarty->_cacheresource_handlers[$type]; - } - - // try registered resource - if (isset($smarty->registered_cache_resources[$type])) { - // do not cache these instances as they may vary from instance to instance - return $smarty->_cacheresource_handlers[$type] = $smarty->registered_cache_resources[$type]; - } - // try sysplugins dir - if (isset(self::$sysplugins[$type])) { - $cache_resource_class = 'Smarty_Internal_CacheResource_' . ucfirst($type); - if (!class_exists($cache_resource_class, false)) { - require SMARTY_SYSPLUGINS_DIR . self::$sysplugins[$type]; - } - return $smarty->_cacheresource_handlers[$type] = new $cache_resource_class(); - } - // try plugins dir - $cache_resource_class = 'Smarty_CacheResource_' . ucfirst($type); - if ($smarty->loadPlugin($cache_resource_class)) { - return $smarty->_cacheresource_handlers[$type] = new $cache_resource_class(); - } - // give up - throw new SmartyException("Unable to load cache resource '{$type}'"); - } - - /** - * Invalid Loaded Cache Files - * - * @param Smarty $smarty Smarty object - */ - public static function invalidLoadedCache(Smarty $smarty) { - foreach ($smarty->template_objects as $tpl) { - if (isset($tpl->cached)) { - $tpl->cached->valid = false; - $tpl->cached->processed = false; - } - } - } -} diff --git a/library/smarty/libs/sysplugins/smarty_cacheresource_custom.php b/library/smarty/libs/sysplugins/smarty_cacheresource_custom.php deleted file mode 100644 --- a/library/smarty/libs/sysplugins/smarty_cacheresource_custom.php +++ /dev/null @@ -1,300 +0,0 @@ -<?php -/** - * Smarty Internal Plugin - * - * @package Smarty - * @subpackage Cacher - */ - -/** - * Cache Handler API - * - * @package Smarty - * @subpackage Cacher - * @author Rodney Rehm - */ -abstract class Smarty_CacheResource_Custom extends Smarty_CacheResource { - /** - * fetch cached content and its modification time from data source - * - * @param string $id unique cache content identifier - * @param string $name template name - * @param string $cache_id cache id - * @param string $compile_id compile id - * @param string $content cached content - * @param integer $mtime cache modification timestamp (epoch) - * - * @return void - */ - abstract protected function fetch($id, $name, $cache_id, $compile_id, &$content, &$mtime); - - /** - * Fetch cached content's modification timestamp from data source - * {@internal implementing this method is optional. - * Only implement it if modification times can be accessed faster than loading the complete cached content.}} - * - * @param string $id unique cache content identifier - * @param string $name template name - * @param string $cache_id cache id - * @param string $compile_id compile id - * - * @return integer|boolean timestamp (epoch) the template was modified, or false if not found - */ - protected function fetchTimestamp($id, $name, $cache_id, $compile_id) { - return null; - } - - /** - * Save content to cache - * - * @param string $id unique cache content identifier - * @param string $name template name - * @param string $cache_id cache id - * @param string $compile_id compile id - * @param integer|null $exp_time seconds till expiration or null - * @param string $content content to cache - * - * @return boolean success - */ - abstract protected function save($id, $name, $cache_id, $compile_id, $exp_time, $content); - - /** - * Delete content from cache - * - * @param string $name template name - * @param string $cache_id cache id - * @param string $compile_id compile id - * @param integer|null $exp_time seconds till expiration time in seconds or null - * - * @return integer number of deleted caches - */ - abstract protected function delete($name, $cache_id, $compile_id, $exp_time); - - /** - * populate Cached Object with meta data from Resource - * - * @param Smarty_Template_Cached $cached cached object - * @param Smarty_Internal_Template $_template template object - * - * @return void - */ - public function populate(Smarty_Template_Cached $cached, Smarty_Internal_Template $_template) { - $_cache_id = isset($cached->cache_id) ? preg_replace('![^\w\|]+!', '_', $cached->cache_id) : null; - $_compile_id = isset($cached->compile_id) ? preg_replace('![^\w\|]+!', '_', $cached->compile_id) : null; - $path = $cached->source->filepath . $_cache_id . $_compile_id; - $cached->filepath = sha1($path); - if ($_template->smarty->cache_locking) { - $cached->lock_id = sha1('lock.' . $path); - } - $this->populateTimestamp($cached); - } - - /** - * populate Cached Object with timestamp and exists from Resource - * - * @param Smarty_Template_Cached $cached - * - * @return void - */ - public function populateTimestamp(Smarty_Template_Cached $cached) { - $mtime = $this->fetchTimestamp($cached->filepath, $cached->source->name, $cached->cache_id, $cached->compile_id); - if ($mtime !== null) { - $cached->timestamp = $mtime; - $cached->exists = !!$cached->timestamp; - - return; - } - $timestamp = null; - $this->fetch($cached->filepath, $cached->source->name, $cached->cache_id, $cached->compile_id, $cached->content, $timestamp); - $cached->timestamp = isset($timestamp) ? $timestamp : false; - $cached->exists = !!$cached->timestamp; - } - - /** - * Read the cached template and process the header - * - * @param Smarty_Internal_Template $_template template object - * @param Smarty_Template_Cached $cached cached object - * - * @return boolean true or false if the cached content does not exist - */ - public function process(Smarty_Internal_Template $_template, Smarty_Template_Cached $cached = null) { - if (!$cached) { - $cached = $_template->cached; - } - $content = $cached->content ? $cached->content : null; - $timestamp = $cached->timestamp ? $cached->timestamp : null; - if ($content === null || !$timestamp) { - $this->fetch( - $_template->cached->filepath, - $_template->source->name, - $_template->cache_id, - $_template->compile_id, - $content, - $timestamp - ); - } - if (isset($content)) { - /** @var Smarty_Internal_Template $_smarty_tpl - * used in evaluated code - */ - $_smarty_tpl = $_template; - eval("?>" . $content); - - return true; - } - - return false; - } - - /** - * Write the rendered template output to cache - * - * @param Smarty_Internal_Template $_template template object - * @param string $content content to cache - * - * @return boolean success - */ - public function writeCachedContent(Smarty_Internal_Template $_template, $content) { - return $this->save( - $_template->cached->filepath, - $_template->source->name, - $_template->cache_id, - $_template->compile_id, - $_template->properties['cache_lifetime'], - $content - ); - } - - /** - * Read cached template from cache - * - * @param Smarty_Internal_Template $_template template object - * - * @return string content - */ - public function readCachedContent(Smarty_Internal_Template $_template) { - $content = $_template->cached->content ? $_template->cached->content : null; - $timestamp = null; - if ($content === null) { - $timestamp = null; - $this->fetch( - $_template->cached->filepath, - $_template->source->name, - $_template->cache_id, - $_template->compile_id, - $content, - $timestamp - ); - } - if (isset($content)) { - return $content; - } - return false; - } - - /** - * Empty cache - * - * @param Smarty $smarty Smarty object - * @param integer $exp_time expiration time (number of seconds, not timestamp) - * - * @return integer number of cache files deleted - */ - public function clearAll(Smarty $smarty, $exp_time = null) { - $this->cache = array(); - - return $this->delete(null, null, null, $exp_time); - } - - /** - * Empty cache for a specific template - * - * @param Smarty $smarty Smarty object - * @param string $resource_name template name - * @param string $cache_id cache id - * @param string $compile_id compile id - * @param integer $exp_time expiration time (number of seconds, not timestamp) - * - * @return integer number of cache files deleted - */ - public function clear(Smarty $smarty, $resource_name, $cache_id, $compile_id, $exp_time) { - $this->cache = array(); - $cache_name = null; - - if (isset($resource_name)) { - $_save_stat = $smarty->caching; - $smarty->caching = true; - $tpl = new $smarty->template_class($resource_name, $smarty); - $smarty->caching = $_save_stat; - - if ($tpl->source->exists) { - $cache_name = $tpl->source->name; - } else { - return 0; - } - // remove from template cache - if ($smarty->allow_ambiguous_resources) { - $_templateId = $tpl->source->unique_resource . $tpl->cache_id . $tpl->compile_id; - } else { - $_templateId = $smarty->joined_template_dir . '#' . $resource_name . $tpl->cache_id . $tpl->compile_id; - } - if (isset($_templateId[150])) { - $_templateId = sha1($_templateId); - } - unset($smarty->template_objects[$_templateId]); - // template object no longer needed - unset($tpl); - } - - return $this->delete($cache_name, $cache_id, $compile_id, $exp_time); - } - - /** - * Check is cache is locked for this template - * - * @param Smarty $smarty Smarty object - * @param Smarty_Template_Cached $cached cached object - * - * @return boolean true or false if cache is locked - */ - public function hasLock(Smarty $smarty, Smarty_Template_Cached $cached) { - $id = $cached->lock_id; - $name = $cached->source->name . '.lock'; - - $mtime = $this->fetchTimestamp($id, $name, $cached->cache_id, $cached->compile_id); - if ($mtime === null) { - $this->fetch($id, $name, $cached->cache_id, $cached->compile_id, $content, $mtime); - } - return $mtime && ($t = time()) - $mtime < $smarty->locking_timeout; - } - - /** - * Lock cache for this template - * - * @param Smarty $smarty Smarty object - * @param Smarty_Template_Cached $cached cached object - * - * @return bool|void - */ - public function acquireLock(Smarty $smarty, Smarty_Template_Cached $cached) { - $cached->is_locked = true; - $id = $cached->lock_id; - $name = $cached->source->name . '.lock'; - $this->save($id, $name, $cached->cache_id, $cached->compile_id, $smarty->locking_timeout, ''); - } - - /** - * Unlock cache for this template - * - * @param Smarty $smarty Smarty object - * @param Smarty_Template_Cached $cached cached object - * - * @return bool|void - */ - public function releaseLock(Smarty $smarty, Smarty_Template_Cached $cached) { - $cached->is_locked = false; - $name = $cached->source->name . '.lock'; - $this->delete($name, $cached->cache_id, $cached->compile_id, null); - } -} diff --git a/library/smarty/libs/sysplugins/smarty_cacheresource_keyvaluestore.php b/library/smarty/libs/sysplugins/smarty_cacheresource_keyvaluestore.php deleted file mode 100644 --- a/library/smarty/libs/sysplugins/smarty_cacheresource_keyvaluestore.php +++ /dev/null @@ -1,490 +0,0 @@ -<?php -/** - * Smarty Internal Plugin - * - * @package Smarty - * @subpackage Cacher - */ - -/** - * Smarty Cache Handler Base for Key/Value Storage Implementations - * This class implements the functionality required to use simple key/value stores - * for hierarchical cache groups. key/value stores like memcache or APC do not support - * wildcards in keys, therefore a cache group cannot be cleared like "a|*" - which - * is no problem to filesystem and RDBMS implementations. - * This implementation is based on the concept of invalidation. While one specific cache - * can be identified and cleared, any range of caches cannot be identified. For this reason - * each level of the cache group hierarchy can have its own value in the store. These values - * are nothing but microtimes, telling us when a particular cache group was cleared for the - * last time. These keys are evaluated for every cache read to determine if the cache has - * been invalidated since it was created and should hence be treated as inexistent. - * Although deep hierarchies are possible, they are not recommended. Try to keep your - * cache groups as shallow as possible. Anything up 3-5 parents should be ok. So - * »a|b|c« is a good depth where »a|b|c|d|e|f|g|h|i|j|k« isn't. Try to join correlating - * cache groups: if your cache groups look somewhat like »a|b|$page|$items|$whatever« - * consider using »a|b|c|$page-$items-$whatever« instead. - * - * @package Smarty - * @subpackage Cacher - * @author Rodney Rehm - */ -abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource { - /** - * cache for contents - * - * @var array - */ - protected $contents = array(); - - /** - * cache for timestamps - * - * @var array - */ - protected $timestamps = array(); - - /** - * populate Cached Object with meta data from Resource - * - * @param Smarty_Template_Cached $cached cached object - * @param Smarty_Internal_Template $_template template object - * - * @return void - */ - public function populate(Smarty_Template_Cached $cached, Smarty_Internal_Template $_template) { - $cached->filepath = $_template->source->uid . '#' . $this->sanitize($cached->source->resource) . '#' . $this->sanitize($cached->cache_id) . '#' . $this->sanitize($cached->compile_id); - - $this->populateTimestamp($cached); - } - - /** - * populate Cached Object with timestamp and exists from Resource - * - * @param Smarty_Template_Cached $cached cached object - * - * @return void - */ - public function populateTimestamp(Smarty_Template_Cached $cached) { - if (!$this->fetch($cached->filepath, $cached->source->name, $cached->cache_id, $cached->compile_id, $content, $timestamp, $cached->source->uid)) { - return; - } - $cached->content = $content; - $cached->timestamp = (int)$timestamp; - $cached->exists = $cached->timestamp; - } - - /** - * Read the cached template and process the header - * - * @param Smarty_Internal_Template $_template template object - * @param Smarty_Template_Cached $cached cached object - * - * @return boolean true or false if the cached content does not exist - */ - public function process(Smarty_Internal_Template $_template, Smarty_Template_Cached $cached = null) { - if (!$cached) { - $cached = $_template->cached; - } - $content = $cached->content ? $cached->content : null; - $timestamp = $cached->timestamp ? $cached->timestamp : null; - if ($content === null || !$timestamp) { - if (!$this->fetch($_template->cached->filepath, $_template->source->name, $_template->cache_id, $_template->compile_id, $content, $timestamp, $_template->source->uid)) { - return false; - } - } - if (isset($content)) { - /** @var Smarty_Internal_Template $_smarty_tpl - * used in evaluated code - */ - $_smarty_tpl = $_template; - eval("?>" . $content); - - return true; - } - - return false; - } - - /** - * Write the rendered template output to cache - * - * @param Smarty_Internal_Template $_template template object - * @param string $content content to cache - * - * @return boolean success - */ - public function writeCachedContent(Smarty_Internal_Template $_template, $content) { - $this->addMetaTimestamp($content); - - return $this->write(array($_template->cached->filepath => $content), $_template->properties['cache_lifetime']); - } - - /** - * Read cached template from cache - * - * @param Smarty_Internal_Template $_template template object - * - * @return string content - */ - public function readCachedContent(Smarty_Internal_Template $_template) { - $content = $_template->cached->content ? $_template->cached->content : null; - $timestamp = null; - if ($content === null) { - if (!$this->fetch($_template->cached->filepath, $_template->source->name, $_template->cache_id, $_template->compile_id, $content, $timestamp, $_template->source->uid)) { - return false; - } - } - if (isset($content)) { - return $content; - } - return false; - } - - /** - * Empty cache - * {@internal the $exp_time argument is ignored altogether }} - * - * @param Smarty $smarty Smarty object - * @param integer $exp_time expiration time [being ignored] - * - * @return integer number of cache files deleted [always -1] - * @uses purge() to clear the whole store - * @uses invalidate() to mark everything outdated if purge() is inapplicable - */ - public function clearAll(Smarty $smarty, $exp_time = null) { - if (!$this->purge()) { - $this->invalidate(null); - } - - return -1; - } - - /** - * Empty cache for a specific template - * {@internal the $exp_time argument is ignored altogether}} - * - * @param Smarty $smarty Smarty object - * @param string $resource_name template name - * @param string $cache_id cache id - * @param string $compile_id compile id - * @param integer $exp_time expiration time [being ignored] - * - * @return integer number of cache files deleted [always -1] - * @uses buildCachedFilepath() to generate the CacheID - * @uses invalidate() to mark CacheIDs parent chain as outdated - * @uses delete() to remove CacheID from cache - */ - public function clear(Smarty $smarty, $resource_name, $cache_id, $compile_id, $exp_time) { - $uid = $this->getTemplateUid($smarty, $resource_name, $cache_id, $compile_id); - $cid = $uid . '#' . $this->sanitize($resource_name) . '#' . $this->sanitize($cache_id) . '#' . $this->sanitize($compile_id); - $this->delete(array($cid)); - $this->invalidate($cid, $resource_name, $cache_id, $compile_id, $uid); - - return -1; - } - - /** - * Get template's unique ID - * - * @param Smarty $smarty Smarty object - * @param string $resource_name template name - * @param string $cache_id cache id - * @param string $compile_id compile id - * - * @return string filepath of cache file - */ - protected function getTemplateUid(Smarty $smarty, $resource_name, $cache_id, $compile_id) { - $uid = ''; - if (isset($resource_name)) { - $tpl = new $smarty->template_class($resource_name, $smarty); - if ($tpl->source->exists) { - $uid = $tpl->source->uid; - } - - // remove from template cache - if ($smarty->allow_ambiguous_resources) { - $_templateId = $tpl->source->unique_resource . $tpl->cache_id . $tpl->compile_id; - } else { - $_templateId = $smarty->joined_template_dir . '#' . $resource_name . $tpl->cache_id . $tpl->compile_id; - } - if (isset($_templateId[150])) { - $_templateId = sha1($_templateId); - } - unset($smarty->template_objects[$_templateId]); - } - - return $uid; - } - - /** - * Sanitize CacheID components - * - * @param string $string CacheID component to sanitize - * - * @return string sanitized CacheID component - */ - protected function sanitize($string) { - // some poeple smoke bad weed - $string = trim($string, '|'); - if (!$string) { - return null; - } - - return preg_replace('#[^\w\|]+#S', '_', $string); - } - - /** - * Fetch and prepare a cache object. - * - * @param string $cid CacheID to fetch - * @param string $resource_name template name - * @param string $cache_id cache id - * @param string $compile_id compile id - * @param string $content cached content - * @param integer &$timestamp cached timestamp (epoch) - * @param string $resource_uid resource's uid - * - * @return boolean success - */ - protected function fetch($cid, $resource_name = null, $cache_id = null, $compile_id = null, &$content = null, &$timestamp = null, $resource_uid = null) { - $t = $this->read(array($cid)); - $content = !empty($t[$cid]) ? $t[$cid] : null; - $timestamp = null; - - if ($content && ($timestamp = $this->getMetaTimestamp($content))) { - $invalidated = $this->getLatestInvalidationTimestamp($cid, $resource_name, $cache_id, $compile_id, $resource_uid); - if ($invalidated > $timestamp) { - $timestamp = null; - $content = null; - } - } - - return !!$content; - } - - /** - * Add current microtime to the beginning of $cache_content - * {@internal the header uses 8 Bytes, the first 4 Bytes are the seconds, the second 4 Bytes are the microseconds}} - * - * @param string &$content the content to be cached - */ - protected function addMetaTimestamp(&$content) { - $mt = explode(" ", microtime()); - $ts = pack("NN", $mt[1], (int)($mt[0] * 100000000)); - $content = $ts . $content; - } - - /** - * Extract the timestamp the $content was cached - * - * @param string &$content the cached content - * - * @return float the microtime the content was cached - */ - protected function getMetaTimestamp(&$content) { - extract(unpack('N1s/N1m/a*content', $content)); - return $s + ($m / 100000000); - } - - /** - * Invalidate CacheID - * - * @param string $cid CacheID - * @param string $resource_name template name - * @param string $cache_id cache id - * @param string $compile_id compile id - * @param string $resource_uid source's uid - * - * @return void - */ - protected function invalidate($cid = null, $resource_name = null, $cache_id = null, $compile_id = null, $resource_uid = null) { - $now = microtime(true); - $key = null; - // invalidate everything - if (!$resource_name && !$cache_id && !$compile_id) { - $key = 'IVK#ALL'; - } // invalidate all caches by template - else { - if ($resource_name && !$cache_id && !$compile_id) { - $key = 'IVK#TEMPLATE#' . $resource_uid . '#' . $this->sanitize($resource_name); - } // invalidate all caches by cache group - else { - if (!$resource_name && $cache_id && !$compile_id) { - $key = 'IVK#CACHE#' . $this->sanitize($cache_id); - } // invalidate all caches by compile id - else { - if (!$resource_name && !$cache_id && $compile_id) { - $key = 'IVK#COMPILE#' . $this->sanitize($compile_id); - } // invalidate by combination - else { - $key = 'IVK#CID#' . $cid; - } - } - } - } - $this->write(array($key => $now)); - } - - /** - * Determine the latest timestamp known to the invalidation chain - * - * @param string $cid CacheID to determine latest invalidation timestamp of - * @param string $resource_name template name - * @param string $cache_id cache id - * @param string $compile_id compile id - * @param string $resource_uid source's filepath - * - * @return float the microtime the CacheID was invalidated - */ - protected function getLatestInvalidationTimestamp($cid, $resource_name = null, $cache_id = null, $compile_id = null, $resource_uid = null) { - // abort if there is no CacheID - if (false && !$cid) { - return 0; - } - // abort if there are no InvalidationKeys to check - if (!($_cid = $this->listInvalidationKeys($cid, $resource_name, $cache_id, $compile_id, $resource_uid))) { - return 0; - } - - // there are no InValidationKeys - if (!($values = $this->read($_cid))) { - return 0; - } - // make sure we're dealing with floats - $values = array_map('floatval', $values); - - return max($values); - } - - /** - * Translate a CacheID into the list of applicable InvalidationKeys. - * Splits "some|chain|into|an|array" into array( '#clearAll#', 'some', 'some|chain', 'some|chain|into', ... ) - * - * @param string $cid CacheID to translate - * @param string $resource_name template name - * @param string $cache_id cache id - * @param string $compile_id compile id - * @param string $resource_uid source's filepath - * - * @return array list of InvalidationKeys - * @uses $invalidationKeyPrefix to prepend to each InvalidationKey - */ - protected function listInvalidationKeys($cid, $resource_name = null, $cache_id = null, $compile_id = null, $resource_uid = null) { - $t = array('IVK#ALL'); - $_name = $_compile = '#'; - if ($resource_name) { - $_name .= $resource_uid . '#' . $this->sanitize($resource_name); - $t[] = 'IVK#TEMPLATE' . $_name; - } - if ($compile_id) { - $_compile .= $this->sanitize($compile_id); - $t[] = 'IVK#COMPILE' . $_compile; - } - $_name .= '#'; - // some poeple smoke bad weed - $cid = trim($cache_id, '|'); - if (!$cid) { - return $t; - } - $i = 0; - while (true) { - // determine next delimiter position - $i = strpos($cid, '|', $i); - // add complete CacheID if there are no more delimiters - if ($i === false) { - $t[] = 'IVK#CACHE#' . $cid; - $t[] = 'IVK#CID' . $_name . $cid . $_compile; - $t[] = 'IVK#CID' . $_name . $_compile; - break; - } - $part = substr($cid, 0, $i); - // add slice to list - $t[] = 'IVK#CACHE#' . $part; - $t[] = 'IVK#CID' . $_name . $part . $_compile; - // skip past delimiter position - $i++; - } - - return $t; - } - - /** - * Check is cache is locked for this template - * - * @param Smarty $smarty Smarty object - * @param Smarty_Template_Cached $cached cached object - * - * @return boolean true or false if cache is locked - */ - public function hasLock(Smarty $smarty, Smarty_Template_Cached $cached) { - $key = 'LOCK#' . $cached->filepath; - $data = $this->read(array($key)); - - return $data && time() - $data[$key] < $smarty->locking_timeout; - } - - /** - * Lock cache for this template - * - * @param Smarty $smarty Smarty object - * @param Smarty_Template_Cached $cached cached object - * - * @return bool|void - */ - public function acquireLock(Smarty $smarty, Smarty_Template_Cached $cached) { - $cached->is_locked = true; - $key = 'LOCK#' . $cached->filepath; - $this->write(array($key => time()), $smarty->locking_timeout); - } - - /** - * Unlock cache for this template - * - * @param Smarty $smarty Smarty object - * @param Smarty_Template_Cached $cached cached object - * - * @return bool|void - */ - public function releaseLock(Smarty $smarty, Smarty_Template_Cached $cached) { - $cached->is_locked = false; - $key = 'LOCK#' . $cached->filepath; - $this->delete(array($key)); - } - - /** - * Read values for a set of keys from cache - * - * @param array $keys list of keys to fetch - * - * @return array list of values with the given keys used as indexes - */ - abstract protected function read(array $keys); - - /** - * Save values for a set of keys to cache - * - * @param array $keys list of values to save - * @param int $expire expiration time - * - * @return boolean true on success, false on failure - */ - abstract protected function write(array $keys, $expire = null); - - /** - * Remove values from cache - * - * @param array $keys list of keys to delete - * - * @return boolean true on success, false on failure - */ - abstract protected function delete(array $keys); - - /** - * Remove *all* values from cache - * - * @return boolean true on success, false on failure - */ - protected function purge() { - return false; - } -} diff --git a/library/smarty/libs/sysplugins/smarty_data.php b/library/smarty/libs/sysplugins/smarty_data.php deleted file mode 100644 --- a/library/smarty/libs/sysplugins/smarty_data.php +++ /dev/null @@ -1,64 +0,0 @@ -<?php -/** - * Smarty Plugin Data - * This file contains the data object - * - * @package Smarty - * @subpackage Template - * @author Uwe Tews - */ - -/** - * class for the Smarty data object - * The Smarty data object will hold Smarty variables in the current scope - * - * @package Smarty - * @subpackage Template - */ -class Smarty_Data extends Smarty_Internal_Data { - /** - * Counter - * - * @var int - */ - static $count = 0; - - /** - * Data block name - * - * @var string - */ - public $dataObjectName = ''; - /** - * Smarty object - * - * @var Smarty - */ - public $smarty = null; - - /** - * create Smarty data object - * - * @param Smarty|array $_parent parent template - * @param Smarty|Smarty_Internal_Template $smarty global smarty instance - * @param string $name optional data block name - * - * @throws SmartyException - */ - public function __construct($_parent = null, $smarty = null, $name = null) { - self::$count++; - $this->dataObjectName = 'Data_object ' . (isset($name) ? "'{$name}'" : self::$count); - $this->smarty = $smarty; - if (is_object($_parent)) { - // when object set up back pointer - $this->parent = $_parent; - } elseif (is_array($_parent)) { - // set up variable values - foreach ($_parent as $_key => $_val) { - $this->tpl_vars[$_key] = new Smarty_Variable($_val); - } - } elseif ($_parent != null) { - throw new SmartyException("Wrong type for template variables"); - } - } -} diff --git a/library/smarty/libs/sysplugins/smarty_internal_cacheresource_file.php b/library/smarty/libs/sysplugins/smarty_internal_cacheresource_file.php deleted file mode 100644 --- a/library/smarty/libs/sysplugins/smarty_internal_cacheresource_file.php +++ /dev/null @@ -1,309 +0,0 @@ -<?php -/** - * Smarty Internal Plugin CacheResource File - * - * @package Smarty - * @subpackage Cacher - * @author Uwe Tews - * @author Rodney Rehm - */ - -/** - * This class does contain all necessary methods for the HTML cache on file system - * Implements the file system as resource for the HTML cache Version ussing nocache inserts. - * - * @package Smarty - * @subpackage Cacher - */ -class Smarty_Internal_CacheResource_File extends Smarty_CacheResource { - /** - * populate Cached Object with meta data from Resource - * - * @param Smarty_Template_Cached $cached cached object - * @param Smarty_Internal_Template $_template template object - * - * @return void - */ - public function populate(Smarty_Template_Cached $cached, Smarty_Internal_Template $_template) { - $_source_file_path = str_replace(':', '.', $_template->source->filepath); - $_cache_id = isset($_template->cache_id) ? preg_replace('![^\w\|]+!', '_', $_template->cache_id) : null; - $_compile_id = isset($_template->compile_id) ? preg_replace('![^\w\|]+!', '_', $_template->compile_id) : null; - $_filepath = $_template->source->uid; - // if use_sub_dirs, break file into directories - if ($_template->smarty->use_sub_dirs) { - $_filepath = substr($_filepath, 0, 2) . DS - . substr($_filepath, 2, 2) . DS - . substr($_filepath, 4, 2) . DS - . $_filepath; - } - $_compile_dir_sep = $_template->smarty->use_sub_dirs ? DS : '^'; - if (isset($_cache_id)) { - $_cache_id = str_replace('|', $_compile_dir_sep, $_cache_id) . $_compile_dir_sep; - } else { - $_cache_id = ''; - } - if (isset($_compile_id)) { - $_compile_id = $_compile_id . $_compile_dir_sep; - } else { - $_compile_id = ''; - } - $_cache_dir = $_template->smarty->getCacheDir(); - if ($_template->smarty->cache_locking) { - // create locking file name - // relative file name? - if (!preg_match('/^([\/\\\\]|[a-zA-Z]:[\/\\\\])/', $_cache_dir)) { - $_lock_dir = rtrim(getcwd(), '/\\') . DS . $_cache_dir; - } else { - $_lock_dir = $_cache_dir; - } - $cached->lock_id = $_lock_dir . sha1($_cache_id . $_compile_id . $_template->source->uid) . '.lock'; - } - $cached->filepath = $_cache_dir . $_cache_id . $_compile_id . $_filepath . '.' . basename($_source_file_path) . '.php'; - $cached->timestamp = $cached->exists = is_file($cached->filepath); - if ($cached->exists) { - $cached->timestamp = filemtime($cached->filepath); - } - } - - /** - * populate Cached Object with timestamp and exists from Resource - * - * @param Smarty_Template_Cached $cached cached object - * - * @return void - */ - public function populateTimestamp(Smarty_Template_Cached $cached) { - $cached->timestamp = $cached->exists = is_file($cached->filepath); - if ($cached->exists) { - $cached->timestamp = filemtime($cached->filepath); - } - } - - /** - * Read the cached template and process its header - * - * @param Smarty_Internal_Template $_template template object - * @param Smarty_Template_Cached $cached cached object - * - * @return booleantrue or false if the cached content does not exist - */ - public function process(Smarty_Internal_Template $_template, Smarty_Template_Cached $cached = null) { - /** @var Smarty_Internal_Template $_smarty_tpl - * used in included file - */ - $_smarty_tpl = $_template; - - return @include $_template->cached->filepath; - } - - /** - * Write the rendered template output to cache - * - * @param Smarty_Internal_Template $_template template object - * @param string $content content to cache - * - * @return boolean success - */ - public function writeCachedContent(Smarty_Internal_Template $_template, $content) { - $obj = new Smarty_Internal_Write_File(); - if ($obj->writeFile($_template->cached->filepath, $content, $_template->smarty) === true) { - $cached = $_template->cached; - $cached->timestamp = $cached->exists = is_file($cached->filepath); - if ($cached->exists) { - $cached->timestamp = filemtime($cached->filepath); - return true; - } - } - return false; - } - - /** - * Read cached template from cache - * - * @param Smarty_Internal_Template $_template template object - * - * @return string content - */ - public function readCachedContent(Smarty_Internal_Template $_template) { - if (is_file($_template->cached->filepath)) { - return file_get_contents($_template->cached->filepath); - } - return false; - } - - /** - * Empty cache - * - * @param Smarty $smarty - * @param integer $exp_time expiration time (number of seconds, not timestamp) - * - * @return integer number of cache files deleted - */ - public function clearAll(Smarty $smarty, $exp_time = null) { - return $this->clear($smarty, null, null, null, $exp_time); - } - - /** - * Empty cache for a specific template - * - * @param Smarty $smarty - * @param string $resource_name template name - * @param string $cache_id cache id - * @param string $compile_id compile id - * @param integer $exp_time expiration time (number of seconds, not timestamp) - * - * @return integer number of cache files deleted - */ - public function clear(Smarty $smarty, $resource_name, $cache_id, $compile_id, $exp_time) { - $_cache_id = isset($cache_id) ? preg_replace('![^\w\|]+!', '_', $cache_id) : null; - $_compile_id = isset($compile_id) ? preg_replace('![^\w\|]+!', '_', $compile_id) : null; - $_dir_sep = $smarty->use_sub_dirs ? '/' : '^'; - $_compile_id_offset = $smarty->use_sub_dirs ? 3 : 0; - $_dir = realpath($smarty->getCacheDir()) . '/'; - if ($_dir == '/') { //We should never want to delete this! - return 0; - } - $_dir_length = strlen($_dir); - if (isset($_cache_id)) { - $_cache_id_parts = explode('|', $_cache_id); - $_cache_id_parts_count = count($_cache_id_parts); - if ($smarty->use_sub_dirs) { - foreach ($_cache_id_parts as $id_part) { - $_dir .= $id_part . DS; - } - } - } - if (isset($resource_name)) { - $_save_stat = $smarty->caching; - $smarty->caching = true; - $tpl = new $smarty->template_class($resource_name, $smarty); - $smarty->caching = $_save_stat; - - // remove from template cache - $tpl->source; // have the template registered before unset() - if ($smarty->allow_ambiguous_resources) { - $_templateId = $tpl->source->unique_resource . $tpl->cache_id . $tpl->compile_id; - } else { - $_templateId = $smarty->joined_template_dir . '#' . $resource_name . $tpl->cache_id . $tpl->compile_id; - } - if (isset($_templateId[150])) { - $_templateId = sha1($_templateId); - } - unset($smarty->template_objects[$_templateId]); - - if ($tpl->source->exists) { - $_resourcename_parts = basename(str_replace('^', '/', $tpl->cached->filepath)); - } else { - return 0; - } - } - $_count = 0; - $_time = time(); - if (file_exists($_dir)) { - $_cacheDirs = new RecursiveDirectoryIterator($_dir); - $_cache = new RecursiveIteratorIterator($_cacheDirs, RecursiveIteratorIterator::CHILD_FIRST); - foreach ($_cache as $_file) { - if (substr(basename($_file->getPathname()), 0, 1) == '.' || strpos($_file, '.svn') !== false) { - continue; - } - // directory ? - if ($_file->isDir()) { - if (!$_cache->isDot()) { - // delete folder if empty - @rmdir($_file->getPathname()); - } - } else { - $_parts = explode($_dir_sep, str_replace('\\', '/', substr((string)$_file, $_dir_length))); - $_parts_count = count($_parts); - // check name - if (isset($resource_name)) { - if ($_parts[$_parts_count - 1] != $_resourcename_parts) { - continue; - } - } - // check compile id - if (isset($_compile_id) && (!isset($_parts[$_parts_count - 2 - $_compile_id_offset]) || $_parts[$_parts_count - 2 - $_compile_id_offset] != $_compile_id)) { - continue; - } - // check cache id - if (isset($_cache_id)) { - // count of cache id parts - $_parts_count = (isset($_compile_id)) ? $_parts_count - 2 - $_compile_id_offset : $_parts_count - 1 - $_compile_id_offset; - if ($_parts_count < $_cache_id_parts_count) { - continue; - } - for ($i = 0; $i < $_cache_id_parts_count; $i++) { - if ($_parts[$i] != $_cache_id_parts[$i]) { - continue 2; - } - } - } - // expired ? - if (isset($exp_time)) { - if ($exp_time < 0) { - preg_match('#\'cache_lifetime\' =>\s*(\d*)#', file_get_contents($_file), $match); - if ($_time < (@filemtime($_file) + $match[1])) { - continue; - } - } else { - if ($_time - @filemtime($_file) < $exp_time) { - continue; - } - } - } - $_count += @unlink((string)$_file) ? 1 : 0; - } - } - } - - return $_count; - } - - /** - * Check is cache is locked for this template - * - * @param Smarty $smarty Smarty object - * @param Smarty_Template_Cached $cached cached object - * - * @return boolean true or false if cache is locked - */ - public function hasLock(Smarty $smarty, Smarty_Template_Cached $cached) { - if (version_compare(PHP_VERSION, '5.3.0', '>=')) { - clearstatcache(true, $cached->lock_id); - } else { - clearstatcache(); - } - if (is_file($cached->lock_id)) { - $t = @filemtime($cached->lock_id); - return $t && (time() - $t < $smarty->locking_timeout); - } else { - return false; - } - } - - /** - * Lock cache for this template - * - * @param Smarty $smarty Smarty object - * @param Smarty_Template_Cached $cached cached object - * - * @return bool|void - */ - public function acquireLock(Smarty $smarty, Smarty_Template_Cached $cached) { - $cached->is_locked = true; - touch($cached->lock_id); - } - - /** - * Unlock cache for this template - * - * @param Smarty $smarty Smarty object - * @param Smarty_Template_Cached $cached cached object - * - * @return bool|void - */ - public function releaseLock(Smarty $smarty, Smarty_Template_Cached $cached) { - $cached->is_locked = false; - @unlink($cached->lock_id); - } -} diff --git a/library/smarty/libs/sysplugins/smarty_internal_compile_append.php b/library/smarty/libs/sysplugins/smarty_internal_compile_append.php deleted file mode 100644 --- a/library/smarty/libs/sysplugins/smarty_internal_compile_append.php +++ /dev/null @@ -1,48 +0,0 @@ -<?php -/** - * Smarty Internal Plugin Compile Append - * Compiles the {append} tag - * - * @package Smarty - * @subpackage Compiler - * @author Uwe Tews - */ - -/** - * Smarty Internal Plugin Compile Append Class - * - * @package Smarty - * @subpackage Compiler - */ -class Smarty_Internal_Compile_Append extends Smarty_Internal_Compile_Assign { - /** - * Compiles code for the {append} tag - * - * @param array $args array with attributes from parser - * @param object $compiler compiler object - * @param array $parameter array with compilation parameter - * - * @return string compiled code - */ - public function compile($args, $compiler, $parameter) { - // the following must be assigned at runtime because it will be overwritten in parent class - $this->required_attributes = array('var', 'value'); - $this->shorttag_order = array('var', 'value'); - $this->optional_attributes = array('scope', 'index'); - // check and get attributes - $_attr = $this->getAttributes($compiler, $args); - // map to compile assign attributes - if (isset($_attr['index'])) { - $_params['smarty_internal_index'] = '[' . $_attr['index'] . ']'; - unset($_attr['index']); - } else { - $_params['smarty_internal_index'] = '[]'; - } - $_new_attr = array(); - foreach ($_attr as $key => $value) { - $_new_attr[] = array($key => $value); - } - // call compile assign - return parent::compile($_new_attr, $compiler, $_params); - } -} diff --git a/library/smarty/libs/sysplugins/smarty_internal_compile_assign.php b/library/smarty/libs/sysplugins/smarty_internal_compile_assign.php deleted file mode 100644 --- a/library/smarty/libs/sysplugins/smarty_internal_compile_assign.php +++ /dev/null @@ -1,84 +0,0 @@ -<?php -/** - * Smarty Internal Plugin Compile Assign - * Compiles the {assign} tag - * - * @package Smarty - * @subpackage Compiler - * @author Uwe Tews - */ - -/** - * Smarty Internal Plugin Compile Assign Class - * - * @package Smarty - * @subpackage Compiler - */ -class Smarty_Internal_Compile_Assign extends Smarty_Internal_CompileBase { - /** - * Compiles code for the {assign} tag - * - * @param array $args array with attributes from parser - * @param object $compiler compiler object - * @param array $parameter array with compilation parameter - * - * @return string compiled code - */ - public function compile($args, $compiler, $parameter) { - // the following must be assigned at runtime because it will be overwritten in Smarty_Internal_Compile_Append - $this->required_attributes = array('var', 'value'); - $this->shorttag_order = array('var', 'value'); - $this->optional_attributes = array('scope'); - $_nocache = 'null'; - $_scope = Smarty::SCOPE_LOCAL; - // check and get attributes - $_attr = $this->getAttributes($compiler, $args); - // nocache ? - if ($compiler->tag_nocache || $compiler->nocache) { - $_nocache = 'true'; - // create nocache var to make it know for further compiling - if (isset($compiler->template->tpl_vars[trim($_attr['var'], "'")])) { - $compiler->template->tpl_vars[trim($_attr['var'], "'")]->nocache = true; - } else { - $compiler->template->tpl_vars[trim($_attr['var'], "'")] = new Smarty_Variable(null, true); - } - } - // scope setup - if (isset($_attr['scope'])) { - $_attr['scope'] = trim($_attr['scope'], "'\""); - if ($_attr['scope'] == 'parent') { - $_scope = Smarty::SCOPE_PARENT; - } elseif ($_attr['scope'] == 'root') { - $_scope = Smarty::SCOPE_ROOT; - } elseif ($_attr['scope'] == 'global') { - $_scope = Smarty::SCOPE_GLOBAL; - } else { - $compiler->trigger_template_error('illegal value for "scope" attribute', $compiler->lex->taglineno); - } - } - // compiled output - if (isset($parameter['smarty_internal_index'])) { - $output = "<?php \$_smarty_tpl->createLocalArrayVariable($_attr[var], $_nocache, $_scope);\n\$_smarty_tpl->tpl_vars[$_attr[var]]->value$parameter[smarty_internal_index] = $_attr[value];"; - } else { - // implement Smarty2's behaviour of variables assigned by reference - if ($compiler->template->smarty instanceof SmartyBC) { - $output = "<?php if (isset(\$_smarty_tpl->tpl_vars[$_attr[var]])) {\$_smarty_tpl->tpl_vars[$_attr[var]] = clone \$_smarty_tpl->tpl_vars[$_attr[var]];"; - $output .= "\n\$_smarty_tpl->tpl_vars[$_attr[var]]->value = $_attr[value]; \$_smarty_tpl->tpl_vars[$_attr[var]]->nocache = $_nocache; \$_smarty_tpl->tpl_vars[$_attr[var]]->scope = $_scope;"; - $output .= "\n} else \$_smarty_tpl->tpl_vars[$_attr[var]] = new Smarty_Variable($_attr[value], $_nocache, $_scope);"; - } else { - $output = "<?php \$_smarty_tpl->tpl_vars[$_attr[var]] = new Smarty_Variable($_attr[value], $_nocache, $_scope);"; - } - } - if ($_scope == Smarty::SCOPE_PARENT) { - $output .= "\nif (\$_smarty_tpl->parent != null) \$_smarty_tpl->parent->tpl_vars[$_attr[var]] = clone \$_smarty_tpl->tpl_vars[$_attr[var]];"; - } elseif ($_scope == Smarty::SCOPE_ROOT || $_scope == Smarty::SCOPE_GLOBAL) { - $output .= "\n\$_ptr = \$_smarty_tpl->parent; while (\$_ptr != null) {\$_ptr->tpl_vars[$_attr[var]] = clone \$_smarty_tpl->tpl_vars[$_attr[var]]; \$_ptr = \$_ptr->parent; }"; - } - if ($_scope == Smarty::SCOPE_GLOBAL) { - $output .= "\nSmarty::\$global_tpl_vars[$_attr[var]] = clone \$_smarty_tpl->tpl_vars[$_attr[var]];"; - } - $output .= '?>'; - - return $output; - } -} diff --git a/library/smarty/libs/sysplugins/smarty_internal_compile_block.php b/library/smarty/libs/sysplugins/smarty_internal_compile_block.php deleted file mode 100644 --- a/library/smarty/libs/sysplugins/smarty_internal_compile_block.php +++ /dev/null @@ -1,432 +0,0 @@ -<?php - -/** - * Smarty Internal Plugin Compile Block - * Compiles the {block}{/block} tags - * - * @package Smarty - * @subpackage Compiler - * @author Uwe Tews - */ - -/** - * Smarty Internal Plugin Compile Block Class - * - * @package Smarty - * @subpackage Compiler - */ -class Smarty_Internal_Compile_Block extends Smarty_Internal_CompileBase { - - const parent = '____SMARTY_BLOCK_PARENT____'; - /** - * Attribute definition: Overwrites base class. - * - * @var array - * @see Smarty_Internal_CompileBase - */ - public $required_attributes = array('name'); - - /** - * Attribute definition: Overwrites base class. - * - * @var array - * @see Smarty_Internal_CompileBase - */ - public $shorttag_order = array('name'); - - /** - * Attribute definition: Overwrites base class. - * - * @var array - * @see Smarty_Internal_CompileBase - */ - public $option_flags = array('hide', 'append', 'prepend', 'nocache'); - - /** - * Attribute definition: Overwrites base class. - * - * @var array - * @see Smarty_Internal_CompileBase - */ - public $optional_attributes = array('internal_file', 'internal_uid', 'internal_line'); - /** - * nested child block names - * - * @var array - */ - public static $nested_block_names = array(); - - /** - * child block source buffer - * - * @var array - */ - public static $block_data = array(); - - /** - * Compiles code for the {block} tag - * - * @param array $args array with attributes from parser - * @param object $compiler compiler object - * - * @return boolean true - */ - public function compile($args, $compiler) { - // check and get attributes - $_attr = $this->getAttributes($compiler, $args); - $_name = trim($_attr['name'], "\"'"); - - // existing child must override parent settings - if (isset($compiler->template->block_data[$_name]) && $compiler->template->block_data[$_name]['mode'] == 'replace') { - $_attr['append'] = false; - $_attr['prepend'] = false; - } - - // check if we process an inheritance child template - if ($compiler->inheritance_child) { - array_unshift(self::$nested_block_names, $_name); - // build {block} for child block - self::$block_data[$_name]['source'] = - "{$compiler->smarty->left_delimiter}private_child_block name={$_attr['name']} file='{$compiler->template->source->filepath}' type='{$compiler->template->source->type}' resource='{$compiler->template->template_resource}'" . - " uid='{$compiler->template->source->uid}' line={$compiler->lex->line}"; - if ($_attr['nocache']) { - self::$block_data[$_name]['source'] .= ' nocache'; - } - self::$block_data[$_name]['source'] .= $compiler->smarty->right_delimiter; - - $save = array($_attr, $compiler->inheritance); - $this->openTag($compiler, 'block', $save); - // set flag for {block} tag - $compiler->inheritance = true; - $compiler->lex->yypushstate(Smarty_Internal_Templatelexer::CHILDBLOCK); - $compiler->has_code = false; - return; - } - // must merge includes - if ($_attr['nocache'] == true) { - $compiler->tag_nocache = true; - } - $save = array($_attr, $compiler->inheritance, $compiler->parser->current_buffer, $compiler->nocache); - $this->openTag($compiler, 'block', $save); - $compiler->inheritance = true; - $compiler->nocache = $compiler->nocache | $compiler->tag_nocache; - - $compiler->parser->current_buffer = new Smarty_Internal_ParseTree_Template($compiler->parser); - $compiler->has_code = false; - - return true; - } - - /** - * Compile saved child block source - * - * @param object $compiler compiler object - * @param string $_name optional name of child block - * - * @return string compiled code of child block - */ - static function compileChildBlock($compiler, $_name = null) { - if ($compiler->inheritance_child) { - $name1 = Smarty_Internal_Compile_Block::$nested_block_names[0]; - if (isset($compiler->template->block_data[$name1])) { - // replace inner block name with generic - Smarty_Internal_Compile_Block::$block_data[$name1]['source'] .= $compiler->template->block_data[$name1]['source']; - Smarty_Internal_Compile_Block::$block_data[$name1]['child'] = true; - } - $compiler->lex->yypushstate(Smarty_Internal_Templatelexer::CHILDBLOCK); - $compiler->has_code = false; - return; - } - // if called by {$smarty.block.child} we must search the name of enclosing {block} - if ($_name == null) { - $stack_count = count($compiler->_tag_stack); - while (--$stack_count >= 0) { - if ($compiler->_tag_stack[$stack_count][0] == 'block') { - $_name = trim($compiler->_tag_stack[$stack_count][1][0]['name'], "\"'"); - break; - } - } - } - if ($_name == null) { - $compiler->trigger_template_error(' tag {$smarty.block.child} used outside {block} tags ', $compiler->lex->taglineno); - } - // undefined child? - if (!isset($compiler->template->block_data[$_name]['source'])) { - $compiler->popTrace(); - return ''; - } - // flag that child is already compile by {$smarty.block.child} inclusion - $compiler->template->block_data[$_name]['compiled'] = true; - $_tpl = new Smarty_Internal_template('string:' . $compiler->template->block_data[$_name]['source'], $compiler->smarty, $compiler->template, $compiler->template->cache_id, - $compiler->template->compile_id, $compiler->template->caching, $compiler->template->cache_lifetime); - if ($compiler->smarty->debugging) { - Smarty_Internal_Debug::ignore($_tpl); - } - $_tpl->tpl_vars = $compiler->template->tpl_vars; - $_tpl->variable_filters = $compiler->template->variable_filters; - $_tpl->properties['nocache_hash'] = $compiler->template->properties['nocache_hash']; - $_tpl->allow_relative_path = true; - $_tpl->compiler->inheritance = true; - $_tpl->compiler->suppressHeader = true; - $_tpl->compiler->suppressFilter = true; - $_tpl->compiler->suppressTemplatePropertyHeader = true; - $nocache = $compiler->nocache || $compiler->tag_nocache; - if (strpos($compiler->template->block_data[$_name]['source'], self::parent) !== false) { - $_output = str_replace(self::parent, $compiler->parser->current_buffer->to_smarty_php(), $_tpl->compiler->compileTemplate($_tpl, $nocache, $compiler->parent_compiler)); - } elseif ($compiler->template->block_data[$_name]['mode'] == 'prepend') { - $_output = $_tpl->compiler->compileTemplate($_tpl, $nocache, $compiler->parent_compiler) . $compiler->parser->current_buffer->to_smarty_php(); - } elseif ($compiler->template->block_data[$_name]['mode'] == 'append') { - $_output = $compiler->parser->current_buffer->to_smarty_php() . $_tpl->compiler->compileTemplate($_tpl, $nocache, $compiler->parent_compiler); - } elseif (!empty($compiler->template->block_data[$_name])) { - $_output = $_tpl->compiler->compileTemplate($_tpl, $nocache, $compiler->parent_compiler); - } - $compiler->template->properties['file_dependency'] = array_merge($compiler->template->properties['file_dependency'], $_tpl->properties['file_dependency']); - $compiler->template->properties['tpl_function'] = array_merge($compiler->template->properties['tpl_function'], $_tpl->properties['tpl_function']); - $compiler->template->variable_filters = $_tpl->variable_filters; - if ($_tpl->has_nocache_code) { - $compiler->template->has_nocache_code = true; - } - foreach ($_tpl->required_plugins as $key => $tmp1) { - if ($compiler->nocache && $compiler->template->caching) { - $code = 'nocache'; - } else { - $code = $key; - } - foreach ($tmp1 as $name => $tmp) { - foreach ($tmp as $type => $data) { - $compiler->template->required_plugins[$code][$name][$type] = $data; - } - } - } - unset($_tpl); - $compiler->has_code = true; - return $_output; - } - - /** - * Compile $smarty.block.parent - * - * @param object $compiler compiler object - * @param string $_name optional name of child block - * - * @return string compiled code of child block - */ - static function compileParentBlock($compiler, $_name = null) { - // if called by {$smarty.block.parent} we must search the name of enclosing {block} - if ($_name == null) { - $stack_count = count($compiler->_tag_stack); - while (--$stack_count >= 0) { - if ($compiler->_tag_stack[$stack_count][0] == 'block') { - $_name = trim($compiler->_tag_stack[$stack_count][1][0]['name'], "\"'"); - break; - } - } - } - if ($_name == null) { - $compiler->trigger_template_error(' tag {$smarty.block.parent} used outside {block} tags ', $compiler->lex->taglineno); - } - if (empty(Smarty_Internal_Compile_Block::$nested_block_names)) { - $compiler->trigger_template_error(' illegal {$smarty.block.parent} in parent template ', $compiler->lex->taglineno); - } - Smarty_Internal_Compile_Block::$block_data[Smarty_Internal_Compile_Block::$nested_block_names[0]]['source'] .= Smarty_Internal_Compile_Block::parent; - $compiler->lex->yypushstate(Smarty_Internal_Templatelexer::CHILDBLOCK); - $compiler->has_code = false; - return; - } - - /** - * Process block source - * - * @param $compiler - * @param string $source source text - */ - static function blockSource($compiler, $source) { - Smarty_Internal_Compile_Block::$block_data[Smarty_Internal_Compile_Block::$nested_block_names[0]]['source'] .= $source; - } -} - -/** - * Smarty Internal Plugin Compile BlockClose Class - * - * @package Smarty - * @subpackage Compiler - */ -class Smarty_Internal_Compile_Blockclose extends Smarty_Internal_CompileBase { - /** - * Compiles code for the {/block} tag - * - * @param array $args array with attributes from parser - * @param object $compiler compiler object - * - * @return string compiled code - */ - public function compile($args, $compiler) { - $compiler->has_code = true; - // check and get attributes - $_attr = $this->getAttributes($compiler, $args); - $saved_data = $this->closeTag($compiler, array('block')); - $_name = trim($saved_data[0]['name'], "\"'"); - // reset flag for {block} tag - $compiler->inheritance = $saved_data[1]; - // check if we process an inheritance child template - if ($compiler->inheritance_child) { - $name1 = Smarty_Internal_Compile_Block::$nested_block_names[0]; - Smarty_Internal_Compile_Block::$block_data[$name1]['source'] .= "{$compiler->smarty->left_delimiter}/private_child_block{$compiler->smarty->right_delimiter}"; - array_shift(Smarty_Internal_Compile_Block::$nested_block_names); - if (!empty(Smarty_Internal_Compile_Block::$nested_block_names)) { - $name2 = Smarty_Internal_Compile_Block::$nested_block_names[0]; - if (isset($compiler->template->block_data[$name1]) || !$saved_data[0]['hide']) { - if (isset(Smarty_Internal_Compile_Block::$block_data[$name1]['child']) || !isset($compiler->template->block_data[$name1])) { - Smarty_Internal_Compile_Block::$block_data[$name2]['source'] .= Smarty_Internal_Compile_Block::$block_data[$name1]['source']; - } else { - if ($compiler->template->block_data[$name1]['mode'] == 'append') { - Smarty_Internal_Compile_Block::$block_data[$name2]['source'] .= Smarty_Internal_Compile_Block::$block_data[$name1]['source'] . $compiler->template->block_data[$name1]['source']; - } elseif ($compiler->template->block_data[$name1]['mode'] == 'prepend') { - Smarty_Internal_Compile_Block::$block_data[$name2]['source'] .= $compiler->template->block_data[$name1]['source'] . Smarty_Internal_Compile_Block::$block_data[$name1]['source']; - } else { - Smarty_Internal_Compile_Block::$block_data[$name2]['source'] .= $compiler->template->block_data[$name1]['source']; - } - } - } - unset(Smarty_Internal_Compile_Block::$block_data[$name1]); - $compiler->lex->yypushstate(Smarty_Internal_Templatelexer::CHILDBLOCK); - } else { - if (isset($compiler->template->block_data[$name1]) || !$saved_data[0]['hide']) { - if (isset($compiler->template->block_data[$name1]) && !isset(Smarty_Internal_Compile_Block::$block_data[$name1]['child'])) { - if (strpos($compiler->template->block_data[$name1]['source'], Smarty_Internal_Compile_Block::parent) !== false) { - $compiler->template->block_data[$name1]['source'] = - str_replace(Smarty_Internal_Compile_Block::parent, Smarty_Internal_Compile_Block::$block_data[$name1]['source'], $compiler->template->block_data[$name1]['source']); - } elseif ($compiler->template->block_data[$name1]['mode'] == 'prepend') { - $compiler->template->block_data[$name1]['source'] .= Smarty_Internal_Compile_Block::$block_data[$name1]['source']; - } elseif ($compiler->template->block_data[$name1]['mode'] == 'append') { - $compiler->template->block_data[$name1]['source'] = Smarty_Internal_Compile_Block::$block_data[$name1]['source'] . $compiler->template->block_data[$name1]['source']; - } - } else { - $compiler->template->block_data[$name1]['source'] = Smarty_Internal_Compile_Block::$block_data[$name1]['source']; - } - $compiler->template->block_data[$name1]['mode'] = 'replace'; - if ($saved_data[0]['append']) { - $compiler->template->block_data[$name1]['mode'] = 'append'; - } - if ($saved_data[0]['prepend']) { - $compiler->template->block_data[$name1]['mode'] = 'prepend'; - } - } - unset(Smarty_Internal_Compile_Block::$block_data[$name1]); - $compiler->lex->yypushstate(Smarty_Internal_Templatelexer::CHILDBODY); - } - $compiler->has_code = false; - return; - } - if (isset($compiler->template->block_data[$_name]) && !isset($compiler->template->block_data[$_name]['compiled'])) { - $_output = Smarty_Internal_Compile_Block::compileChildBlock($compiler, $_name); - } else { - if ($saved_data[0]['hide'] && !isset($compiler->template->block_data[$_name]['source'])) { - $_output = ''; - } else { - $_output = $compiler->parser->current_buffer->to_smarty_php(); - } - } - if (isset($compiler->template->block_data[$_name]['compiled'])) { - unset($compiler->template->block_data[$_name]['compiled']); - } - // reset flags - $compiler->parser->current_buffer = $saved_data[2]; - if ($compiler->nocache) { - $compiler->tag_nocache = true; - } - $compiler->nocache = $saved_data[3]; - // $_output content has already nocache code processed - $compiler->suppressNocacheProcessing = true; - - return $_output; - } -} - -/** - * Smarty Internal Plugin Compile Child Block Class - * - * @package Smarty - * @subpackage Compiler - */ -class Smarty_Internal_Compile_Private_Child_Block extends Smarty_Internal_CompileBase { - - /** - * Attribute definition: Overwrites base class. - * - * @var array - * @see Smarty_Internal_CompileBase - */ - public $required_attributes = array('name', 'file', 'uid', 'line', 'type', 'resource'); - - /** - * Compiles code for the {private_child_block} tag - * - * @param array $args array with attributes from parser - * @param object $compiler compiler object - * - * @return boolean true - */ - public function compile($args, $compiler) { - // check and get attributes - $_attr = $this->getAttributes($compiler, $args); - - // update template with original template resource of {block} - if (trim($_attr['type'], "'") == 'file') { - $compiler->template->template_resource = 'file:' . realpath(trim($_attr['file'], "'")); - } else { - $compiler->template->template_resource = trim($_attr['resource'], "'"); - } - // source object - unset ($compiler->template->source); - $exists = $compiler->template->source->exists; - - // must merge includes - if ($_attr['nocache'] == true) { - $compiler->tag_nocache = true; - } - $save = array($_attr, $compiler->nocache); - - // set trace back to child block - $compiler->pushTrace(trim($_attr['file'], "\"'"), trim($_attr['uid'], "\"'"), $_attr['line'] - $compiler->lex->line); - - $this->openTag($compiler, 'private_child_block', $save); - - $compiler->nocache = $compiler->nocache | $compiler->tag_nocache; - $compiler->has_code = false; - - return true; - } -} - -/** - * Smarty Internal Plugin Compile Child Block Close Class - * - * @package Smarty - * @subpackage Compiler - */ -class Smarty_Internal_Compile_Private_Child_Blockclose extends Smarty_Internal_CompileBase { - - /** - * Compiles code for the {/private_child_block} tag - * - * @param array $args array with attributes from parser - * @param object $compiler compiler object - * - * @return boolean true - */ - public function compile($args, $compiler) { - // check and get attributes - $_attr = $this->getAttributes($compiler, $args); - - $saved_data = $this->closeTag($compiler, array('private_child_block')); - - // end of child block - $compiler->popTrace(); - - $compiler->nocache = $saved_data[1]; - $compiler->has_code = false; - - return true; - } -} diff --git a/library/smarty/libs/sysplugins/smarty_internal_compile_break.php b/library/smarty/libs/sysplugins/smarty_internal_compile_break.php deleted file mode 100644 --- a/library/smarty/libs/sysplugins/smarty_internal_compile_break.php +++ /dev/null @@ -1,73 +0,0 @@ -<?php -/** - * Smarty Internal Plugin Compile Break - * Compiles the {break} tag - * - * @package Smarty - * @subpackage Compiler - * @author Uwe Tews - */ - -/** - * Smarty Internal Plugin Compile Break Class - * - * @package Smarty - * @subpackage Compiler - */ -class Smarty_Internal_Compile_Break extends Smarty_Internal_CompileBase { - /** - * Attribute definition: Overwrites base class. - * - * @var array - * @see Smarty_Internal_CompileBase - */ - public $optional_attributes = array('levels'); - /** - * Attribute definition: Overwrites base class. - * - * @var array - * @see Smarty_Internal_CompileBase - */ - public $shorttag_order = array('levels'); - - /** - * Compiles code for the {break} tag - * - * @param array $args array with attributes from parser - * @param object $compiler compiler object - * @param array $parameter array with compilation parameter - * - * @return string compiled code - */ - public function compile($args, $compiler, $parameter) { - static $_is_loopy = array('for' => true, 'foreach' => true, 'while' => true, 'section' => true); - // check and get attributes - $_attr = $this->getAttributes($compiler, $args); - - if ($_attr['nocache'] === true) { - $compiler->trigger_template_error('nocache option not allowed', $compiler->lex->taglineno); - } - - if (isset($_attr['levels'])) { - if (!is_numeric($_attr['levels'])) { - $compiler->trigger_template_error('level attribute must be a numeric constant', $compiler->lex->taglineno); - } - $_levels = $_attr['levels']; - } else { - $_levels = 1; - } - $level_count = $_levels; - $stack_count = count($compiler->_tag_stack) - 1; - while ($level_count > 0 && $stack_count >= 0) { - if (isset($_is_loopy[$compiler->_tag_stack[$stack_count][0]])) { - $level_count--; - } - $stack_count--; - } - if ($level_count != 0) { - $compiler->trigger_template_error("cannot break {$_levels} level(s)", $compiler->lex->taglineno); - } - - return "<?php break {$_levels};?>"; - } -} diff --git a/library/smarty/libs/sysplugins/smarty_internal_compile_call.php b/library/smarty/libs/sysplugins/smarty_internal_compile_call.php deleted file mode 100644 --- a/library/smarty/libs/sysplugins/smarty_internal_compile_call.php +++ /dev/null @@ -1,83 +0,0 @@ -<?php -/** - * Smarty Internal Plugin Compile Function_Call - * Compiles the calls of user defined tags defined by {function} - * - * @package Smarty - * @subpackage Compiler - * @author Uwe Tews - */ - -/** - * Smarty Internal Plugin Compile Function_Call Class - * - * @package Smarty - * @subpackage Compiler - */ -class Smarty_Internal_Compile_Call extends Smarty_Internal_CompileBase { - /** - * Attribute definition: Overwrites base class. - * - * @var array - * @see Smarty_Internal_CompileBase - */ - public $required_attributes = array('name'); - /** - * Attribute definition: Overwrites base class. - * - * @var array - * @see Smarty_Internal_CompileBase - */ - public $shorttag_order = array('name'); - /** - * Attribute definition: Overwrites base class. - * - * @var array - * @see Smarty_Internal_CompileBase - */ - public $optional_attributes = array('_any'); - - /** - * Compiles the calls of user defined tags defined by {function} - * - * @param array $args array with attributes from parser - * @param object $compiler compiler object - * - * @return string compiled code - */ - public function compile($args, $compiler) { - // check and get attributes - $_attr = $this->getAttributes($compiler, $args); - // save possible attributes - if (isset($_attr['assign'])) { - // output will be stored in a smarty variable instead of being displayed - $_assign = $_attr['assign']; - } - //$_name = trim($_attr['name'], "'\""); - $_name = $_attr['name']; - unset($_attr['name'], $_attr['assign'], $_attr['nocache']); - // set flag (compiled code of {function} must be included in cache file - if (!$compiler->template->caching || $compiler->nocache || $compiler->tag_nocache) { - $_nocache = 'true'; - } else { - $_nocache = 'false'; - } - $_paramsArray = array(); - foreach ($_attr as $_key => $_value) { - if (is_int($_key)) { - $_paramsArray[] = "$_key=>$_value"; - } else { - $_paramsArray[] = "'$_key'=>$_value"; - } - } - $_params = 'array(' . implode(",", $_paramsArray) . ')'; - //$compiler->suppressNocacheProcessing = true; - // was there an assign attribute - if (isset($_assign)) { - $_output = "<?php ob_start();\$_smarty_tpl->callTemplateFunction ({$_name}, \$_smarty_tpl, {$_params}, {$_nocache}); \$_smarty_tpl->assign({$_assign}, ob_get_clean());?>\n"; - } else { - $_output = "<?php \$_smarty_tpl->callTemplateFunction ({$_name}, \$_smarty_tpl, {$_params}, {$_nocache});?>\n"; - } - return $_output; - } -} diff --git a/library/smarty/libs/sysplugins/smarty_internal_compile_capture.php b/library/smarty/libs/sysplugins/smarty_internal_compile_capture.php deleted file mode 100644 --- a/library/smarty/libs/sysplugins/smarty_internal_compile_capture.php +++ /dev/null @@ -1,92 +0,0 @@ -<?php -/** - * Smarty Internal Plugin Compile Capture - * Compiles the {capture} tag - * - * @package Smarty - * @subpackage Compiler - * @author Uwe Tews - */ - -/** - * Smarty Internal Plugin Compile Capture Class - * - * @package Smarty - * @subpackage Compiler - */ -class Smarty_Internal_Compile_Capture extends Smarty_Internal_CompileBase { - /** - * Attribute definition: Overwrites base class. - * - * @var array - * @see Smarty_Internal_CompileBase - */ - public $shorttag_order = array('name'); - /** - * Attribute definition: Overwrites base class. - * - * @var array - * @see Smarty_Internal_CompileBase - */ - public $optional_attributes = array('name', 'assign', 'append'); - - /** - * Compiles code for the {capture} tag - * - * @param array $args array with attributes from parser - * @param object $compiler compiler object - * - * @return string compiled code - */ - public function compile($args, $compiler) { - // check and get attributes - $_attr = $this->getAttributes($compiler, $args); - - $buffer = isset($_attr['name']) ? $_attr['name'] : "'default'"; - $assign = isset($_attr['assign']) ? $_attr['assign'] : 'null'; - $append = isset($_attr['append']) ? $_attr['append'] : 'null'; - - $compiler->_capture_stack[0][] = array($buffer, $assign, $append, $compiler->nocache); - // maybe nocache because of nocache variables - $compiler->nocache = $compiler->nocache | $compiler->tag_nocache; - $_output = "<?php \$_smarty_tpl->_capture_stack[0][] = array($buffer, $assign, $append); ob_start(); ?>"; - - return $_output; - } -} - -/** - * Smarty Internal Plugin Compile Captureclose Class - * - * @package Smarty - * @subpackage Compiler - */ -class Smarty_Internal_Compile_CaptureClose extends Smarty_Internal_CompileBase { - /** - * Compiles code for the {/capture} tag - * - * @param array $args array with attributes from parser - * @param object $compiler compiler object - * - * @return string compiled code - */ - public function compile($args, $compiler) { - // check and get attributes - $_attr = $this->getAttributes($compiler, $args); - // must endblock be nocache? - if ($compiler->nocache) { - $compiler->tag_nocache = true; - } - - list($buffer, $assign, $append, $compiler->nocache) = array_pop($compiler->_capture_stack[0]); - - $_output = "<?php list(\$_capture_buffer, \$_capture_assign, \$_capture_append) = array_pop(\$_smarty_tpl->_capture_stack[0]);\n"; - $_output .= "if (!empty(\$_capture_buffer)) {\n"; - $_output .= " if (isset(\$_capture_assign)) \$_smarty_tpl->assign(\$_capture_assign, ob_get_contents());\n"; - $_output .= " if (isset( \$_capture_append)) \$_smarty_tpl->append( \$_capture_append, ob_get_contents());\n"; - $_output .= " Smarty::\$_smarty_vars['capture'][\$_capture_buffer]=ob_get_clean();\n"; - $_output .= "} else \$_smarty_tpl->capture_error();?>"; - - return $_output; - } -} diff --git a/library/smarty/libs/sysplugins/smarty_internal_compile_config_load.php b/library/smarty/libs/sysplugins/smarty_internal_compile_config_load.php deleted file mode 100644 --- a/library/smarty/libs/sysplugins/smarty_internal_compile_config_load.php +++ /dev/null @@ -1,79 +0,0 @@ -<?php -/** - * Smarty Internal Plugin Compile Config Load - * Compiles the {config load} tag - * - * @package Smarty - * @subpackage Compiler - * @author Uwe Tews - */ - -/** - * Smarty Internal Plugin Compile Config Load Class - * - * @package Smarty - * @subpackage Compiler - */ -class Smarty_Internal_Compile_Config_Load extends Smarty_Internal_CompileBase { - /** - * Attribute definition: Overwrites base class. - * - * @var array - * @see Smarty_Internal_CompileBase - */ - public $required_attributes = array('file'); - /** - * Attribute definition: Overwrites base class. - * - * @var array - * @see Smarty_Internal_CompileBase - */ - public $shorttag_order = array('file', 'section'); - /** - * Attribute definition: Overwrites base class. - * - * @var array - * @see Smarty_Internal_CompileBase - */ - public $optional_attributes = array('section', 'scope'); - - /** - * Compiles code for the {config_load} tag - * - * @param array $args array with attributes from parser - * @param object $compiler compiler object - * - * @return string compiled code - */ - public function compile($args, $compiler) { - static $_is_legal_scope = array('local' => true, 'parent' => true, 'root' => true, 'global' => true); - // check and get attributes - $_attr = $this->getAttributes($compiler, $args); - - if ($_attr['nocache'] === true) { - $compiler->trigger_template_error('nocache option not allowed', $compiler->lex->taglineno); - } - - // save possible attributes - $conf_file = $_attr['file']; - if (isset($_attr['section'])) { - $section = $_attr['section']; - } else { - $section = 'null'; - } - $scope = 'local'; - // scope setup - if (isset($_attr['scope'])) { - $_attr['scope'] = trim($_attr['scope'], "'\""); - if (isset($_is_legal_scope[$_attr['scope']])) { - $scope = $_attr['scope']; - } else { - $compiler->trigger_template_error('illegal value for "scope" attribute', $compiler->lex->taglineno); - } - } - // create config object - $_output = "<?php Smarty_Internal_Extension_Config::configLoad(\$_smarty_tpl, $conf_file, $section, '$scope');?>"; - - return $_output; - } -} diff --git a/library/smarty/libs/sysplugins/smarty_internal_compile_continue.php b/library/smarty/libs/sysplugins/smarty_internal_compile_continue.php deleted file mode 100644 --- a/library/smarty/libs/sysplugins/smarty_internal_compile_continue.php +++ /dev/null @@ -1,73 +0,0 @@ -<?php -/** - * Smarty Internal Plugin Compile Continue - * Compiles the {continue} tag - * - * @package Smarty - * @subpackage Compiler - * @author Uwe Tews - */ - -/** - * Smarty Internal Plugin Compile Continue Class - * - * @package Smarty - * @subpackage Compiler - */ -class Smarty_Internal_Compile_Continue extends Smarty_Internal_CompileBase { - /** - * Attribute definition: Overwrites base class. - * - * @var array - * @see Smarty_Internal_CompileBase - */ - public $optional_attributes = array('levels'); - /** - * Attribute definition: Overwrites base class. - * - * @var array - * @see Smarty_Internal_CompileBase - */ - public $shorttag_order = array('levels'); - - /** - * Compiles code for the {continue} tag - * - * @param array $args array with attributes from parser - * @param object $compiler compiler object - * @param array $parameter array with compilation parameter - * - * @return string compiled code - */ - public function compile($args, $compiler, $parameter) { - static $_is_loopy = array('for' => true, 'foreach' => true, 'while' => true, 'section' => true); - // check and get attributes - $_attr = $this->getAttributes($compiler, $args); - - if ($_attr['nocache'] === true) { - $compiler->trigger_template_error('nocache option not allowed', $compiler->lex->taglineno); - } - - if (isset($_attr['levels'])) { - if (!is_numeric($_attr['levels'])) { - $compiler->trigger_template_error('level attribute must be a numeric constant', $compiler->lex->taglineno); - } - $_levels = $_attr['levels']; - } else { - $_levels = 1; - } - $level_count = $_levels; - $stack_count = count($compiler->_tag_stack) - 1; - while ($level_count > 0 && $stack_count >= 0) { - if (isset($_is_loopy[$compiler->_tag_stack[$stack_count][0]])) { - $level_count--; - } - $stack_count--; - } - if ($level_count != 0) { - $compiler->trigger_template_error("cannot continue {$_levels} level(s)", $compiler->lex->taglineno); - } - - return "<?php continue {$_levels};?>"; - } -} diff --git a/library/smarty/libs/sysplugins/smarty_internal_compile_debug.php b/library/smarty/libs/sysplugins/smarty_internal_compile_debug.php deleted file mode 100644 --- a/library/smarty/libs/sysplugins/smarty_internal_compile_debug.php +++ /dev/null @@ -1,39 +0,0 @@ -<?php -/** - * Smarty Internal Plugin Compile Debug - * Compiles the {debug} tag. - * It opens a window the the Smarty Debugging Console. - * - * @package Smarty - * @subpackage Compiler - * @author Uwe Tews - */ - -/** - * Smarty Internal Plugin Compile Debug Class - * - * @package Smarty - * @subpackage Compiler - */ -class Smarty_Internal_Compile_Debug extends Smarty_Internal_CompileBase { - /** - * Compiles code for the {debug} tag - * - * @param array $args array with attributes from parser - * @param object $compiler compiler object - * - * @return string compiled code - */ - public function compile($args, $compiler) { - // check and get attributes - $_attr = $this->getAttributes($compiler, $args); - - // compile always as nocache - $compiler->tag_nocache = true; - - // display debug template - $_output = "<?php \$_smarty_tpl->smarty->loadPlugin('Smarty_Internal_Debug'); Smarty_Internal_Debug::display_debug(\$_smarty_tpl); ?>"; - - return $_output; - } -} diff --git a/library/smarty/libs/sysplugins/smarty_internal_compile_eval.php b/library/smarty/libs/sysplugins/smarty_internal_compile_eval.php deleted file mode 100644 --- a/library/smarty/libs/sysplugins/smarty_internal_compile_eval.php +++ /dev/null @@ -1,69 +0,0 @@ -<?php -/** - * Smarty Internal Plugin Compile Eval - * Compiles the {eval} tag. - * - * @package Smarty - * @subpackage Compiler - * @author Uwe Tews - */ - -/** - * Smarty Internal Plugin Compile Eval Class - * - * @package Smarty - * @subpackage Compiler - */ -class Smarty_Internal_Compile_Eval extends Smarty_Internal_CompileBase { - /** - * Attribute definition: Overwrites base class. - * - * @var array - * @see Smarty_Internal_CompileBase - */ - public $required_attributes = array('var'); - /** - * Attribute definition: Overwrites base class. - * - * @var array - * @see Smarty_Internal_CompileBase - */ - public $optional_attributes = array('assign'); - /** - * Attribute definition: Overwrites base class. - * - * @var array - * @see Smarty_Internal_CompileBase - */ - public $shorttag_order = array('var', 'assign'); - - /** - * Compiles code for the {eval} tag - * - * @param array $args array with attributes from parser - * @param object $compiler compiler object - * - * @return string compiled code - */ - public function compile($args, $compiler) { - $this->required_attributes = array('var'); - $this->optional_attributes = array('assign'); - // check and get attributes - $_attr = $this->getAttributes($compiler, $args); - if (isset($_attr['assign'])) { - // output will be stored in a smarty variable instead of being displayed - $_assign = $_attr['assign']; - } - - // create template object - $_output = "\$_template = new {$compiler->smarty->template_class}('eval:'." . $_attr['var'] . ", \$_smarty_tpl->smarty, \$_smarty_tpl);"; - //was there an assign attribute? - if (isset($_assign)) { - $_output .= "\$_smarty_tpl->assign($_assign,\$_template->fetch());"; - } else { - $_output .= "echo \$_template->fetch();"; - } - - return "<?php $_output ?>"; - } -} diff --git a/library/smarty/libs/sysplugins/smarty_internal_compile_extends.php b/library/smarty/libs/sysplugins/smarty_internal_compile_extends.php deleted file mode 100644 --- a/library/smarty/libs/sysplugins/smarty_internal_compile_extends.php +++ /dev/null @@ -1,83 +0,0 @@ -<?php - -/** - * Smarty Internal Plugin Compile extend - * Compiles the {extends} tag - * - * @package Smarty - * @subpackage Compiler - * @author Uwe Tews - */ - -/** - * Smarty Internal Plugin Compile extend Class - * - * @package Smarty - * @subpackage Compiler - */ -class Smarty_Internal_Compile_Extends extends Smarty_Internal_CompileBase { - /** - * Attribute definition: Overwrites base class. - * - * @var array - * @see Smarty_Internal_CompileBase - */ - public $required_attributes = array('file'); - /** - * Attribute definition: Overwrites base class. - * - * @var array - * @see Smarty_Internal_CompileBase - */ - public $shorttag_order = array('file'); - - /** - * Compiles code for the {extends} tag - * - * @param array $args array with attributes from parser - * @param object $compiler compiler object - * - * @return string compiled code - */ - public function compile($args, $compiler) { - // check and get attributes - $_attr = $this->getAttributes($compiler, $args); - if ($_attr['nocache'] === true) { - $compiler->trigger_template_error('nocache option not allowed', $compiler->lex->taglineno); - } - if (strpos($_attr['file'], '$_tmp') !== false) { - $compiler->trigger_template_error('illegal value for file attribute', $compiler->lex->taglineno); - } - - $name = $_attr['file']; - /** @var Smarty_Internal_Template $_smarty_tpl - * used in evaluated code - */ - $_smarty_tpl = $compiler->template; - eval("\$tpl_name = $name;"); - // create template object - $_template = new $compiler->smarty->template_class($tpl_name, $compiler->smarty, $compiler->template); - // check for recursion - $uid = $_template->source->uid; - if (isset($compiler->extends_uid[$uid])) { - $compiler->trigger_template_error("illegal recursive call of \"$include_file\"", $compiler->lex->line - 1); - } - $compiler->extends_uid[$uid] = true; - if (empty($_template->source->components)) { - array_unshift($compiler->sources, $_template->source); - } else { - foreach ($_template->source->components as $source) { - array_unshift($compiler->sources, $source); - $uid = $source->uid; - if (isset($compiler->extends_uid[$uid])) { - $compiler->trigger_template_error("illegal recursive call of \"{$source->filepath}\"", $compiler->lex->line - 1); - } - $compiler->extends_uid[$uid] = true; - } - } - unset ($_template); - $compiler->inheritance_child = true; - $compiler->lex->yypushstate(Smarty_Internal_Templatelexer::CHILDBODY); - return ''; - } -} diff --git a/library/smarty/libs/sysplugins/smarty_internal_compile_for.php b/library/smarty/libs/sysplugins/smarty_internal_compile_for.php deleted file mode 100644 --- a/library/smarty/libs/sysplugins/smarty_internal_compile_for.php +++ /dev/null @@ -1,160 +0,0 @@ -<?php -/** - * Smarty Internal Plugin Compile For - * Compiles the {for} {forelse} {/for} tags - * - * @package Smarty - * @subpackage Compiler - * @author Uwe Tews - */ - -/** - * Smarty Internal Plugin Compile For Class - * - * @package Smarty - * @subpackage Compiler - */ -class Smarty_Internal_Compile_For extends Smarty_Internal_CompileBase { - /** - * Compiles code for the {for} tag - * Smarty 3 does implement two different syntax's: - * - {for $var in $array} - * For looping over arrays or iterators - * - {for $x=0; $x<$y; $x++} - * For general loops - * The parser is generating different sets of attribute by which this compiler can - * determine which syntax is used. - * - * @param array $args array with attributes from parser - * @param object $compiler compiler object - * @param array $parameter array with compilation parameter - * - * @return string compiled code - */ - public function compile($args, $compiler, $parameter) { - if ($parameter == 0) { - $this->required_attributes = array('start', 'to'); - $this->optional_attributes = array('max', 'step'); - } else { - $this->required_attributes = array('start', 'ifexp', 'var', 'step'); - $this->optional_attributes = array(); - } - // check and get attributes - $_attr = $this->getAttributes($compiler, $args); - - $output = "<?php "; - if ($parameter == 1) { - foreach ($_attr['start'] as $_statement) { - if (is_array($_statement['var'])) { - $var = $_statement['var']['var']; - $index = $_statement['var']['smarty_internal_index']; - } else { - $var = $_statement['var']; - $index = ''; - } - $output .= " \$_smarty_tpl->tpl_vars[$var] = new Smarty_Variable;"; - $output .= " \$_smarty_tpl->tpl_vars[$var]->value{$index} = $_statement[value];\n"; - } - if (is_array($_attr['var'])) { - $var = $_attr['var']['var']; - $index = $_attr['var']['smarty_internal_index']; - } else { - $var = $_attr['var']; - $index = ''; - } - $output .= " if ($_attr[ifexp]) { for (\$_foo=true;$_attr[ifexp]; \$_smarty_tpl->tpl_vars[$var]->value{$index}$_attr[step]) {\n"; - } else { - $_statement = $_attr['start']; - if (is_array($_statement['var'])) { - $var = $_statement['var']['var']; - $index = $_statement['var']['smarty_internal_index']; - } else { - $var = $_statement['var']; - $index = ''; - } - $output .= "\$_smarty_tpl->tpl_vars[$var] = new Smarty_Variable;"; - if (isset($_attr['step'])) { - $output .= "\$_smarty_tpl->tpl_vars[$var]->step = $_attr[step];"; - } else { - $output .= "\$_smarty_tpl->tpl_vars[$var]->step = 1;"; - } - if (isset($_attr['max'])) { - $output .= "\$_smarty_tpl->tpl_vars[$var]->total = (int) min(ceil((\$_smarty_tpl->tpl_vars[$var]->step > 0 ? $_attr[to]+1 - ($_statement[value]) : $_statement[value]-($_attr[to])+1)/abs(\$_smarty_tpl->tpl_vars[$var]->step)),$_attr[max]);\n"; - } else { - $output .= "\$_smarty_tpl->tpl_vars[$var]->total = (int) ceil((\$_smarty_tpl->tpl_vars[$var]->step > 0 ? $_attr[to]+1 - ($_statement[value]) : $_statement[value]-($_attr[to])+1)/abs(\$_smarty_tpl->tpl_vars[$var]->step));\n"; - } - $output .= "if (\$_smarty_tpl->tpl_vars[$var]->total > 0) {\n"; - $output .= "for (\$_smarty_tpl->tpl_vars[$var]->value{$index} = $_statement[value], \$_smarty_tpl->tpl_vars[$var]->iteration = 1;\$_smarty_tpl->tpl_vars[$var]->iteration <= \$_smarty_tpl->tpl_vars[$var]->total;\$_smarty_tpl->tpl_vars[$var]->value{$index} += \$_smarty_tpl->tpl_vars[$var]->step, \$_smarty_tpl->tpl_vars[$var]->iteration++) {\n"; - $output .= "\$_smarty_tpl->tpl_vars[$var]->first = \$_smarty_tpl->tpl_vars[$var]->iteration == 1;"; - $output .= "\$_smarty_tpl->tpl_vars[$var]->last = \$_smarty_tpl->tpl_vars[$var]->iteration == \$_smarty_tpl->tpl_vars[$var]->total;"; - } - $output .= "?>"; - - $this->openTag($compiler, 'for', array('for', $compiler->nocache)); - // maybe nocache because of nocache variables - $compiler->nocache = $compiler->nocache | $compiler->tag_nocache; - // return compiled code - return $output; - } -} - -/** - * Smarty Internal Plugin Compile Forelse Class - * - * @package Smarty - * @subpackage Compiler - */ -class Smarty_Internal_Compile_Forelse extends Smarty_Internal_CompileBase { - /** - * Compiles code for the {forelse} tag - * - * @param array $args array with attributes from parser - * @param object $compiler compiler object - * @param array $parameter array with compilation parameter - * - * @return string compiled code - */ - public function compile($args, $compiler, $parameter) { - // check and get attributes - $_attr = $this->getAttributes($compiler, $args); - - list($openTag, $nocache) = $this->closeTag($compiler, array('for')); - $this->openTag($compiler, 'forelse', array('forelse', $nocache)); - - return "<?php }} else { ?>"; - } -} - -/** - * Smarty Internal Plugin Compile Forclose Class - * - * @package Smarty - * @subpackage Compiler - */ -class Smarty_Internal_Compile_Forclose extends Smarty_Internal_CompileBase { - /** - * Compiles code for the {/for} tag - * - * @param array $args array with attributes from parser - * @param object $compiler compiler object - * @param array $parameter array with compilation parameter - * - * @return string compiled code - */ - public function compile($args, $compiler, $parameter) { - // check and get attributes - $_attr = $this->getAttributes($compiler, $args); - // must endblock be nocache? - if ($compiler->nocache) { - $compiler->tag_nocache = true; - } - - list($openTag, $compiler->nocache) = $this->closeTag($compiler, array('for', 'forelse')); - - if ($openTag == 'forelse') { - return "<?php } ?>"; - } else { - return "<?php }} ?>"; - } - } -} diff --git a/library/smarty/libs/sysplugins/smarty_internal_compile_foreach.php b/library/smarty/libs/sysplugins/smarty_internal_compile_foreach.php deleted file mode 100644 --- a/library/smarty/libs/sysplugins/smarty_internal_compile_foreach.php +++ /dev/null @@ -1,282 +0,0 @@ -<?php -/** - * Smarty Internal Plugin Compile Foreach - * Compiles the {foreach} {foreachelse} {/foreach} tags - * - * @package Smarty - * @subpackage Compiler - * @author Uwe Tews - */ - -/** - * Smarty Internal Plugin Compile Foreach Class - * - * @package Smarty - * @subpackage Compiler - */ -class Smarty_Internal_Compile_Foreach extends Smarty_Internal_CompileBase { - /** - * Attribute definition: Overwrites base class. - * - * @var array - * @see Smarty_Internal_CompileBase - */ - public $required_attributes = array('from', 'item'); - /** - * Attribute definition: Overwrites base class. - * - * @var array - * @see Smarty_Internal_CompileBase - */ - public $optional_attributes = array('name', 'key'); - /** - * Attribute definition: Overwrites base class. - * - * @var array - * @see Smarty_Internal_CompileBase - */ - public $shorttag_order = array('from', 'item', 'key', 'name'); - - /** - * Compiles code for the {foreach} tag - * - * @param array $args array with attributes from parser - * @param object $compiler compiler object - * @param array $parameter array with compilation parameter - * - * @return string compiled code - */ - public function compile($args, $compiler, $parameter) { - // check and get attributes - $_attr = $this->getAttributes($compiler, $args); - - $from = $_attr['from']; - $item = $_attr['item']; - if (!strncmp("\$_smarty_tpl->tpl_vars[$item]", $from, strlen($item) + 24)) { - $compiler->trigger_template_error("item variable {$item} may not be the same variable as at 'from'", $compiler->lex->taglineno); - } - - if (isset($_attr['key'])) { - $key = $_attr['key']; - } else { - $key = null; - } - - $this->openTag($compiler, 'foreach', array('foreach', $compiler->nocache, $item, $key, true)); - // maybe nocache because of nocache variables - $compiler->nocache = $compiler->nocache | $compiler->tag_nocache; - - if (isset($_attr['name'])) { - $name = trim($_attr['name'], '\'"'); - $has_name = true; - $SmartyVarName = "\$smarty.foreach.{$name}."; - } else { - $has_name = false; - } - $ItemVarName = '$' . trim($item, '\'"') . '@'; - // evaluates which Smarty variables and properties have to be computed - - if ($has_name) { - $useSmartyForeach = $usesSmartyFirst = strpos($compiler->lex->data, $SmartyVarName . 'first') !== false; - $useSmartyForeach = ($usesSmartyLast = strpos($compiler->lex->data, $SmartyVarName . 'last') !== false) || $useSmartyForeach; - $useSmartyForeach = ($usesSmartyIndex = strpos($compiler->lex->data, $SmartyVarName . 'index') !== false) || $useSmartyForeach; - $useSmartyForeach = ($usesSmartyIteration = (!$usesSmartyIndex && ($usesSmartyFirst || $usesSmartyLast)) || strpos($compiler->lex->data, $SmartyVarName . 'iteration') !== false) || $useSmartyForeach; - $useSmartyForeach = ($usesSmartyShow = strpos($compiler->lex->data, $SmartyVarName . 'show') !== false) || $useSmartyForeach; - $useSmartyForeach = ($usesSmartyTotal = $usesSmartyLast || strpos($compiler->lex->data, $SmartyVarName . 'total') !== false) || $useSmartyForeach; - } else { - $usesSmartyFirst = false; - $usesSmartyLast = false; - $usesSmartyTotal = false; - $usesSmartyShow = false; - $useSmartyForeach = false; - } - - $usesPropKey = strpos($compiler->lex->data, $ItemVarName . 'key') !== false; - $usesPropFirst = strpos($compiler->lex->data, $ItemVarName . 'first') !== false; - $usesPropLast = strpos($compiler->lex->data, $ItemVarName . 'last') !== false; - $usesPropIndex = strpos($compiler->lex->data, $ItemVarName . 'index') !== false; - $usesPropIteration = (!$usesPropIndex && ($usesPropFirst || $usesPropLast)) || strpos($compiler->lex->data, $ItemVarName . 'iteration') !== false; - $usesPropShow = strpos($compiler->lex->data, $ItemVarName . 'show') !== false; - $usesPropTotal = $usesPropLast || strpos($compiler->lex->data, $ItemVarName . 'total') !== false; - - $keyTerm = ''; - if ($usesPropKey) { - $keyTerm = "\$_smarty_tpl->tpl_vars[$item]->key => "; - } elseif ($key != null) { - $keyTerm = "\$_smarty_tpl->tpl_vars[$key]->value => "; - } - // generate output code - $output = "<?php\n"; - $output .= "\$_from = $from;\n"; - $output .= "if (!is_array(\$_from) && !is_object(\$_from)) {\n"; - $output .= "settype(\$_from, 'array');\n"; - $output .= "}\n"; - $output .= "\$_smarty_tpl->tpl_vars[$item] = new Smarty_Variable;\n"; - $output .= "\$_smarty_tpl->tpl_vars[$item]->_loop = false;\n"; - if ($key != null) { - $output .= "\$_smarty_tpl->tpl_vars[$key] = new Smarty_Variable;\n"; - } - if ($usesPropTotal) { - $output .= "\$_smarty_tpl->tpl_vars[$item]->total= \$_smarty_tpl->_count(\$_from);\n"; - } - if ($usesPropIteration) { - $output .= "\$_smarty_tpl->tpl_vars[$item]->iteration=0;\n"; - } - if ($usesPropIndex) { - $output .= "\$_smarty_tpl->tpl_vars[$item]->index=-1;\n"; - } - if ($usesPropShow) { - if ($usesPropTotal) { - $output .= "\$_smarty_tpl->tpl_vars[$item]->show = (\$_smarty_tpl->tpl_vars[$item]->total > 0);\n"; - } else { - $output .= "\$_smarty_tpl->tpl_vars[$item]->show = (\$_smarty_tpl->_count(\$_from) > 0);\n"; - } - } - if ($has_name) { - $prop = array(); - if ($usesSmartyTotal) { - $prop['total'] = "'total' => "; - $prop['total'] .= $usesSmartyShow ? '$total = ' : ''; - $prop['total'] .= '$_smarty_tpl->_count($_from)'; - } - if ($usesSmartyIteration) { - $prop['iteration'] = "'iteration' => 0"; - } - if ($usesSmartyIndex) { - $prop['index'] = "'index' => -1"; - } - if ($usesSmartyShow) { - $prop['show'] = "'show' => "; - if ($usesSmartyTotal) { - $prop['show'] .= "(\$total > 0)"; - } else { - $prop['show'] .= "(\$_smarty_tpl->_count(\$_from) > 0)"; - } - } - if ($useSmartyForeach) { - $_vars = 'array(' . join(', ', $prop) . ')'; - $foreachVar = "'__foreach_{$name}'"; - $output .= "\$_smarty_tpl->tpl_vars[$foreachVar] = new Smarty_Variable({$_vars});\n"; - } - } - $output .= "foreach (\$_from as {$keyTerm}\$_smarty_tpl->tpl_vars[$item]->value) {\n"; - $output .= "\$_smarty_tpl->tpl_vars[$item]->_loop = true;\n"; - if ($key != null && $usesPropKey) { - $output .= "\$_smarty_tpl->tpl_vars[$key]->value = \$_smarty_tpl->tpl_vars[$item]->key;\n"; - } - if ($usesPropIteration) { - $output .= "\$_smarty_tpl->tpl_vars[$item]->iteration++;\n"; - } - if ($usesPropIndex) { - $output .= "\$_smarty_tpl->tpl_vars[$item]->index++;\n"; - } - if ($usesPropFirst) { - if ($usesPropIndex) { - $output .= "\$_smarty_tpl->tpl_vars[$item]->first = \$_smarty_tpl->tpl_vars[$item]->index == 0;\n"; - } else { - $output .= "\$_smarty_tpl->tpl_vars[$item]->first = \$_smarty_tpl->tpl_vars[$item]->iteration == 1;\n"; - } - } - if ($usesPropLast) { - if ($usesPropIndex) { - $output .= "\$_smarty_tpl->tpl_vars[$item]->last = \$_smarty_tpl->tpl_vars[$item]->index + 1 == \$_smarty_tpl->tpl_vars[$item]->total;\n"; - } else { - $output .= "\$_smarty_tpl->tpl_vars[$item]->last = \$_smarty_tpl->tpl_vars[$item]->iteration == \$_smarty_tpl->tpl_vars[$item]->total;\n"; - } - } - if ($has_name) { - if ($usesSmartyIteration) { - $output .= "\$_smarty_tpl->tpl_vars[$foreachVar]->value['iteration']++;\n"; - } - if ($usesSmartyIndex) { - $output .= "\$_smarty_tpl->tpl_vars[$foreachVar]->value['index']++;\n"; - } - if ($usesSmartyFirst) { - if ($usesSmartyIndex) { - $output .= "\$_smarty_tpl->tpl_vars[$foreachVar]->value['first'] = \$_smarty_tpl->tpl_vars[$foreachVar]->value['index'] == 0;\n"; - } else { - $output .= "\$_smarty_tpl->tpl_vars[$foreachVar]->value['first'] = \$_smarty_tpl->tpl_vars[$foreachVar]->value['iteration'] == 1;\n"; - } - } - if ($usesSmartyLast) { - if ($usesSmartyIndex) { - $output .= "\$_smarty_tpl->tpl_vars[$foreachVar]->value['last'] = \$_smarty_tpl->tpl_vars[$foreachVar]->value['index'] + 1 == \$_smarty_tpl->tpl_vars[$foreachVar]->value['total'];\n"; - } else { - $output .= "\$_smarty_tpl->tpl_vars[$foreachVar]->value['last'] = \$_smarty_tpl->tpl_vars[$foreachVar]->value['iteration'] == \$_smarty_tpl->tpl_vars[$foreachVar]->value['total'];\n"; - } - } - } - $itemName = trim($item, "'\""); - $output .= "\$foreach_{$itemName}_Sav = \$_smarty_tpl->tpl_vars[$item];\n"; - $output .= "?>"; - - return $output; - } -} - -/** - * Smarty Internal Plugin Compile Foreachelse Class - * - * @package Smarty - * @subpackage Compiler - */ -class Smarty_Internal_Compile_Foreachelse extends Smarty_Internal_CompileBase { - /** - * Compiles code for the {foreachelse} tag - * - * @param array $args array with attributes from parser - * @param object $compiler compiler object - * @param array $parameter array with compilation parameter - * - * @return string compiled code - */ - public function compile($args, $compiler, $parameter) { - // check and get attributes - $_attr = $this->getAttributes($compiler, $args); - - list($openTag, $nocache, $item, $key, $foo) = $this->closeTag($compiler, array('foreach')); - $this->openTag($compiler, 'foreachelse', array('foreachelse', $nocache, $item, $key, false)); - $itemName = trim($item, "'\""); - $output = "<?php\n"; - $output .= "\$_smarty_tpl->tpl_vars[$item] = \$foreach_{$itemName}_Sav;\n"; - $output .= "}\n"; - $output .= "if (!\$_smarty_tpl->tpl_vars[$item]->_loop) {\n?>"; - return $output; - } -} - -/** - * Smarty Internal Plugin Compile Foreachclose Class - * - * @package Smarty - * @subpackage Compiler - */ -class Smarty_Internal_Compile_Foreachclose extends Smarty_Internal_CompileBase { - /** - * Compiles code for the {/foreach} tag - * - * @param array $args array with attributes from parser - * @param object $compiler compiler object - * @param array $parameter array with compilation parameter - * - * @return string compiled code - */ - public function compile($args, $compiler, $parameter) { - // check and get attributes - $_attr = $this->getAttributes($compiler, $args); - // must endblock be nocache? - if ($compiler->nocache) { - $compiler->tag_nocache = true; - } - - list($openTag, $compiler->nocache, $item, $key, $restore) = $this->closeTag($compiler, array('foreach', 'foreachelse')); - $itemName = trim($item, "'\""); - $output = "<?php\n"; - if ($restore) { - $output .= "\$_smarty_tpl->tpl_vars[$item] = \$foreach_{$itemName}_Sav;\n"; - } - $output .= "}\n?>"; - - return $output; - } -} diff --git a/library/smarty/libs/sysplugins/smarty_internal_compile_function.php b/library/smarty/libs/sysplugins/smarty_internal_compile_function.php deleted file mode 100644 --- a/library/smarty/libs/sysplugins/smarty_internal_compile_function.php +++ /dev/null @@ -1,225 +0,0 @@ -<?php -/** - * Smarty Internal Plugin Compile Function - * Compiles the {function} {/function} tags - * - * @package Smarty - * @subpackage Compiler - * @author Uwe Tews - */ - -/** - * Smarty Internal Plugin Compile Function Class - * - * @package Smarty - * @subpackage Compiler - */ -class Smarty_Internal_Compile_Function extends Smarty_Internal_CompileBase { - - /** - * Attribute definition: Overwrites base class. - * - * @var array - * @see Smarty_Internal_CompileBase - */ - public $required_attributes = array('name'); - - /** - * Attribute definition: Overwrites base class. - * - * @var array - * @see Smarty_Internal_CompileBase - */ - public $shorttag_order = array('name'); - - /** - * Attribute definition: Overwrites base class. - * - * @var array - * @see Smarty_Internal_CompileBase - */ - public $optional_attributes = array('_any'); - - /** - * Compiles code for the {function} tag - * - * @param array $args array with attributes from parser - * @param object $compiler compiler object - * @param array $parameter array with compilation parameter - * - * @return boolean true - */ - public function compile($args, $compiler, $parameter) { - // check and get attributes - $_attr = $this->getAttributes($compiler, $args); - - if ($_attr['nocache'] === true) { - $compiler->trigger_template_error('nocache option not allowed', $compiler->lex->taglineno); - } - unset($_attr['nocache']); - $_name = trim($_attr['name'], "'\""); - $compiler->parent_compiler->templateProperties['tpl_function'][$_name] = array(); - $save = array($_attr, $compiler->parser->current_buffer, $compiler->template->has_nocache_code, $compiler->template->required_plugins, $compiler->template->caching); - $this->openTag($compiler, 'function', $save); - // set flag that we are compiling a template function - $compiler->compiles_template_function = true; - // Init temporary context - $compiler->template->required_plugins = array('compiled' => array(), 'nocache' => array()); - $compiler->parser->current_buffer = new Smarty_Internal_ParseTree_Template($compiler->parser); - $compiler->template->has_nocache_code = false; - $compiler->template->caching = true; - return true; - } -} - -/** - * Smarty Internal Plugin Compile Functionclose Class - * - * @package Smarty - * @subpackage Compiler - */ -class Smarty_Internal_Compile_Functionclose extends Smarty_Internal_CompileBase { - - /** - * Compiler object - * - * @var object - */ - private $compiler = null; - - /** - * Compiles code for the {/function} tag - * - * @param array $args array with attributes from parser - * @param object|\Smarty_Internal_TemplateCompilerBase $compiler compiler object - * @param array $parameter array with compilation parameter - * - * @return bool true - */ - public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter) { - $this->compiler = $compiler; - $saved_data = $this->closeTag($compiler, array('function')); - $_attr = $saved_data[0]; - $_name = trim($_attr['name'], "'\""); - // reset flag that we are compiling a template function - $compiler->compiles_template_function = false; - $compiler->parent_compiler->templateProperties['tpl_function'][$_name]['called_functions'] = $compiler->called_functions; - $compiler->parent_compiler->templateProperties['tpl_function'][$_name]['compiled_filepath'] = $compiler->parent_compiler->template->compiled->filepath; - $compiler->parent_compiler->templateProperties['tpl_function'][$_name]['uid'] = $compiler->template->source->uid; - $compiler->called_functions = array(); - $_parameter = $_attr; - unset($_parameter['name']); - // default parameter - $_paramsArray = array(); - foreach ($_parameter as $_key => $_value) { - if (is_int($_key)) { - $_paramsArray[] = "$_key=>$_value"; - } else { - $_paramsArray[] = "'$_key'=>$_value"; - } - } - if (!empty($_paramsArray)) { - $_params = 'array(' . implode(",", $_paramsArray) . ')'; - $_paramsCode = "\$params = array_merge($_params, \$params);\n"; - } else { - $_paramsCode = ''; - } - $_functionCode = $compiler->parser->current_buffer; - // setup buffer for template function code - $compiler->parser->current_buffer = new Smarty_Internal_ParseTree_Template($compiler->parser); - - $_funcName = "smarty_template_function_{$_name}_{$compiler->template->properties['nocache_hash']}"; - $_funcNameCaching = $_funcName . '_nocache'; - if ($compiler->template->has_nocache_code) { - $compiler->parent_compiler->templateProperties['tpl_function'][$_name]['call_name_caching'] = $_funcNameCaching; - $output = "<?php\n"; - $output .= "/* {$_funcNameCaching} */\n"; - $output .= "if (!function_exists('{$_funcNameCaching}')) {\n"; - $output .= "function {$_funcNameCaching} (\$_smarty_tpl,\$params) {\n"; - // build plugin include code - if (!empty($compiler->template->required_plugins['compiled'])) { - foreach ($compiler->template->required_plugins['compiled'] as $tmp) { - foreach ($tmp as $data) { - $output .= "if (!is_callable('{$data['function']}')) require_once '{$data['file']}';\n"; - } - } - } - if (!empty($compiler->template->required_plugins['nocache'])) { - $output .= "echo '/*%%SmartyNocache:{$compiler->template->properties['nocache_hash']}%%*/<?php "; - foreach ($compiler->template->required_plugins['nocache'] as $tmp) { - foreach ($tmp as $data) { - $output .= "if (!is_callable(\'{$data['function']}\')) require_once \'{$data['file']}\';\n"; - } - } - $output .= "?>/*/%%SmartyNocache:{$compiler->template->properties['nocache_hash']}%%*/';\n"; - } - $output .= "ob_start();\n"; - $output .= $_paramsCode; - $output .= "\$_smarty_tpl->properties['saved_tpl_vars'][] = \$_smarty_tpl->tpl_vars;\n"; - $output .= "foreach (\$params as \$key => \$value) {\n\$_smarty_tpl->tpl_vars[\$key] = new Smarty_Variable(\$value);\n}"; - $output .= "\$params = var_export(\$params, true);\n"; - $output .= "echo \"/*%%SmartyNocache:{$compiler->template->properties['nocache_hash']}%%*/<?php "; - $output .= "\\\$saved_tpl_vars = \\\$_smarty_tpl->tpl_vars;\nforeach (\$params as \\\$key => \\\$value) {\n\\\$_smarty_tpl->tpl_vars[\\\$key] = new Smarty_Variable(\\\$value);\n}\n?>"; - $output .= "/*/%%SmartyNocache:{$compiler->template->properties['nocache_hash']}%%*/\n\";?>"; - $compiler->parser->current_buffer->append_subtree(new Smarty_Internal_ParseTree_Tag($compiler->parser, $output)); - $compiler->parser->current_buffer->append_subtree($_functionCode); - $output = "<?php echo \"/*%%SmartyNocache:{$compiler->template->properties['nocache_hash']}%%*/<?php "; - $output .= "foreach (Smarty::\\\$global_tpl_vars as \\\$key => \\\$value){\n"; - $output .= "if (\\\$_smarty_tpl->tpl_vars[\\\$key] === \\\$value) \\\$saved_tpl_vars[\\\$key] = \\\$value;\n}\n"; - $output .= "\\\$_smarty_tpl->tpl_vars = \\\$saved_tpl_vars;?>\n"; - $output .= "/*/%%SmartyNocache:{$compiler->template->properties['nocache_hash']}%%*/\";\n?>"; - $output .= "<?php echo str_replace('{$compiler->template->properties['nocache_hash']}', \$_smarty_tpl->properties['nocache_hash'], ob_get_clean());\n"; - $output .= "\$_smarty_tpl->tpl_vars = array_pop(\$_smarty_tpl->properties['saved_tpl_vars']);\n}\n}\n"; - $output .= "/*/ {$_funcName}_nocache */\n\n"; - $output .= "?>\n"; - $compiler->parser->current_buffer->append_subtree(new Smarty_Internal_ParseTree_Tag($compiler->parser, $output)); - $_functionCode = new Smarty_Internal_ParseTree_Tag($compiler->parser, preg_replace_callback("/((<\?php )?echo '\/\*%%SmartyNocache:{$compiler->template->properties['nocache_hash']}%%\*\/([\S\s]*?)\/\*\/%%SmartyNocache:{$compiler->template->properties['nocache_hash']}%%\*\/';(\?>\n)?)/", array($this, 'removeNocache'), $_functionCode->to_smarty_php())); - } - $compiler->parent_compiler->templateProperties['tpl_function'][$_name]['call_name'] = $_funcName; - $output = "<?php\n"; - $output .= "/* {$_funcName} */\n"; - $output .= "if (!function_exists('{$_funcName}')) {\n"; - $output .= "function {$_funcName}(\$_smarty_tpl,\$params) {\n"; - // build plugin include code - if (!empty($compiler->template->required_plugins['nocache'])) { - $compiler->template->required_plugins['compiled'] = array_merge($compiler->template->required_plugins['compiled'], $compiler->template->required_plugins['nocache']); - } - if (!empty($compiler->template->required_plugins['compiled'])) { - foreach ($compiler->template->required_plugins['compiled'] as $tmp) { - foreach ($tmp as $data) { - $output .= "if (!is_callable('{$data['function']}')) require_once '{$data['file']}';\n"; - } - } - } - $output .= "\$saved_tpl_vars = \$_smarty_tpl->tpl_vars;\n"; - $output .= $_paramsCode; - $output .= "foreach (\$params as \$key => \$value) {\n\$_smarty_tpl->tpl_vars[\$key] = new Smarty_Variable(\$value);\n}?>"; - $compiler->parser->current_buffer->append_subtree(new Smarty_Internal_ParseTree_Tag($compiler->parser, $output)); - $compiler->parser->current_buffer->append_subtree($_functionCode); - $output = "<?php foreach (Smarty::\$global_tpl_vars as \$key => \$value){\n"; - $output .= "if (\$_smarty_tpl->tpl_vars[\$key] === \$value) \$saved_tpl_vars[\$key] = \$value;\n}\n"; - $output .= "\$_smarty_tpl->tpl_vars = \$saved_tpl_vars;\n}\n}\n"; - $output .= "/*/ {$_funcName} */\n\n"; - $output .= "?>\n"; - $compiler->parser->current_buffer->append_subtree(new Smarty_Internal_ParseTree_Tag($compiler->parser, $output)); - $compiler->parent_compiler->templateFunctionCode .= $compiler->parser->current_buffer->to_smarty_php(); - // restore old buffer - $compiler->parser->current_buffer = $saved_data[1]; - // restore old status - $compiler->template->has_nocache_code = $saved_data[2]; - $compiler->template->required_plugins = $saved_data[3]; - $compiler->template->caching = $saved_data[4]; - return true; - } - - /** - * @param $match - * - * @return mixed - */ - function removeNocache($match) { - $code = preg_replace("/((<\?php )?echo '\/\*%%SmartyNocache:{$this->compiler->template->properties['nocache_hash']}%%\*\/)|(\/\*\/%%SmartyNocache:{$this->compiler->template->properties['nocache_hash']}%%\*\/';(\?>\n)?)/", '', $match[0]); - $code = str_replace(array('\\\'', '\\\\\''), array('\'', '\\\''), $code); - return $code; - } -} diff --git a/library/smarty/libs/sysplugins/smarty_internal_compile_if.php b/library/smarty/libs/sysplugins/smarty_internal_compile_if.php deleted file mode 100644 --- a/library/smarty/libs/sysplugins/smarty_internal_compile_if.php +++ /dev/null @@ -1,213 +0,0 @@ -<?php -/** - * Smarty Internal Plugin Compile If - * Compiles the {if} {else} {elseif} {/if} tags - * - * @package Smarty - * @subpackage Compiler - * @author Uwe Tews - */ - -/** - * Smarty Internal Plugin Compile If Class - * - * @package Smarty - * @subpackage Compiler - */ -class Smarty_Internal_Compile_If extends Smarty_Internal_CompileBase { - /** - * Compiles code for the {if} tag - * - * @param array $args array with attributes from parser - * @param object $compiler compiler object - * @param array $parameter array with compilation parameter - * - * @return string compiled code - */ - public function compile($args, $compiler, $parameter) { - // check and get attributes - $_attr = $this->getAttributes($compiler, $args); - $this->openTag($compiler, 'if', array(1, $compiler->nocache)); - // must whole block be nocache ? - $compiler->nocache = $compiler->nocache | $compiler->tag_nocache; - - if (!array_key_exists("if condition", $parameter)) { - $compiler->trigger_template_error("missing if condition", $compiler->lex->taglineno); - } - - if (is_array($parameter['if condition'])) { - if ($compiler->nocache) { - $_nocache = ',true'; - // create nocache var to make it know for further compiling - if (is_array($parameter['if condition']['var'])) { - $var = trim($parameter['if condition']['var']['var'], "'"); - } else { - $var = trim($parameter['if condition']['var'], "'"); - } - if (isset($compiler->template->tpl_vars[$var])) { - $compiler->template->tpl_vars[$var]->nocache = true; - } else { - $compiler->template->tpl_vars[$var] = new Smarty_Variable(null, true); - } - } else { - $_nocache = ''; - } - if (is_array($parameter['if condition']['var'])) { - $_output = "<?php if (!isset(\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var']['var'] . "]) || !is_array(\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var']['var'] . "]->value)) \$_smarty_tpl->createLocalArrayVariable(" . $parameter['if condition']['var']['var'] . "$_nocache);\n"; - $_output .= "if (\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var']['var'] . "]->value" . $parameter['if condition']['var']['smarty_internal_index'] . " = " . $parameter['if condition']['value'] . ") {?>"; - } else { - $_output = "<?php if (!isset(\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var'] . "])) \$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var'] . "] = new Smarty_Variable(null{$_nocache});"; - $_output .= "if (\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var'] . "]->value = " . $parameter['if condition']['value'] . ") {?>"; - } - - return $_output; - } else { - return "<?php if ({$parameter['if condition']}) {?>"; - } - } -} - -/** - * Smarty Internal Plugin Compile Else Class - * - * @package Smarty - * @subpackage Compiler - */ -class Smarty_Internal_Compile_Else extends Smarty_Internal_CompileBase { - /** - * Compiles code for the {else} tag - * - * @param array $args array with attributes from parser - * @param object $compiler compiler object - * @param array $parameter array with compilation parameter - * - * @return string compiled code - */ - public function compile($args, $compiler, $parameter) { - list($nesting, $compiler->tag_nocache) = $this->closeTag($compiler, array('if', 'elseif')); - $this->openTag($compiler, 'else', array($nesting, $compiler->tag_nocache)); - - return "<?php } else { ?>"; - } -} - -/** - * Smarty Internal Plugin Compile ElseIf Class - * - * @package Smarty - * @subpackage Compiler - */ -class Smarty_Internal_Compile_Elseif extends Smarty_Internal_CompileBase { - /** - * Compiles code for the {elseif} tag - * - * @param array $args array with attributes from parser - * @param object $compiler compiler object - * @param array $parameter array with compilation parameter - * - * @return string compiled code - */ - public function compile($args, $compiler, $parameter) { - // check and get attributes - $_attr = $this->getAttributes($compiler, $args); - - list($nesting, $compiler->tag_nocache) = $this->closeTag($compiler, array('if', 'elseif')); - - if (!array_key_exists("if condition", $parameter)) { - $compiler->trigger_template_error("missing elseif condition", $compiler->lex->taglineno); - } - - if (is_array($parameter['if condition'])) { - $condition_by_assign = true; - if ($compiler->nocache) { - $_nocache = ',true'; - // create nocache var to make it know for further compiling - if (is_array($parameter['if condition']['var'])) { - $var = trim($parameter['if condition']['var']['var'], "'"); - } else { - $var = trim($parameter['if condition']['var'], "'"); - } - if (isset($compiler->template->tpl_vars[$var])) { - $compiler->template->tpl_vars[$var]->nocache = true; - } else { - $compiler->template->tpl_vars[$var] = new Smarty_Variable(null, true); - } - } else { - $_nocache = ''; - } - } else { - $condition_by_assign = false; - } - - if (empty($compiler->prefix_code)) { - if ($condition_by_assign) { - $this->openTag($compiler, 'elseif', array($nesting + 1, $compiler->tag_nocache)); - if (is_array($parameter['if condition']['var'])) { - $_output = "<?php } else { if (!isset(\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var']['var'] . "]) || !is_array(\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var']['var'] . "]->value)) \$_smarty_tpl->createLocalArrayVariable(" . $parameter['if condition']['var']['var'] . "$_nocache);\n"; - $_output .= "if (\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var']['var'] . "]->value" . $parameter['if condition']['var']['smarty_internal_index'] . " = " . $parameter['if condition']['value'] . ") {?>"; - } else { - $_output = "<?php } else { if (!isset(\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var'] . "])) \$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var'] . "] = new Smarty_Variable(null{$_nocache});"; - $_output .= "if (\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var'] . "]->value = " . $parameter['if condition']['value'] . ") {?>"; - } - - return $_output; - } else { - $this->openTag($compiler, 'elseif', array($nesting, $compiler->tag_nocache)); - - return "<?php } elseif ({$parameter['if condition']}) {?>"; - } - } else { - $tmp = ''; - foreach ($compiler->prefix_code as $code) { - $tmp = $compiler->appendCode($tmp, $code); - } - $compiler->prefix_code = array(); - $tmp = $compiler->appendCode("<?php } else {?>", $tmp); - $this->openTag($compiler, 'elseif', array($nesting + 1, $compiler->tag_nocache)); - if ($condition_by_assign) { - if (is_array($parameter['if condition']['var'])) { - $_output = $compiler->appendCode($tmp, "<?php if (!isset(\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var']['var'] . "]) || !is_array(\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var']['var'] . "]->value)) \$_smarty_tpl->createLocalArrayVariable(" . $parameter['if condition']['var']['var'] . "$_nocache);\n"); - $_output .= "if (\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var']['var'] . "]->value" . $parameter['if condition']['var']['smarty_internal_index'] . " = " . $parameter['if condition']['value'] . ") {?>"; - } else { - $_output = $compiler->appendCode($tmp, "<?php if (!isset(\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var'] . "])) \$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var'] . "] = new Smarty_Variable(null{$_nocache});"); - $_output .= "if (\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var'] . "]->value = " . $parameter['if condition']['value'] . ") {?>"; - } - - return $_output; - } else { - return $compiler->appendCode($tmp, "<?php if ({$parameter['if condition']}) {?>"); - } - } - } -} - -/** - * Smarty Internal Plugin Compile Ifclose Class - * - * @package Smarty - * @subpackage Compiler - */ -class Smarty_Internal_Compile_Ifclose extends Smarty_Internal_CompileBase { - /** - * Compiles code for the {/if} tag - * - * @param array $args array with attributes from parser - * @param object $compiler compiler object - * @param array $parameter array with compilation parameter - * - * @return string compiled code - */ - public function compile($args, $compiler, $parameter) { - // must endblock be nocache? - if ($compiler->nocache) { - $compiler->tag_nocache = true; - } - list($nesting, $compiler->nocache) = $this->closeTag($compiler, array('if', 'else', 'elseif')); - $tmp = ''; - for ($i = 0; $i < $nesting; $i++) { - $tmp .= '}'; - } - - return "<?php {$tmp}?>"; - } -} diff --git a/library/smarty/libs/sysplugins/smarty_internal_compile_include.php b/library/smarty/libs/sysplugins/smarty_internal_compile_include.php deleted file mode 100644 --- a/library/smarty/libs/sysplugins/smarty_internal_compile_include.php +++ /dev/null @@ -1,296 +0,0 @@ -<?php -/** - * Smarty Internal Plugin Compile Include - * Compiles the {include} tag - * - * @package Smarty - * @subpackage Compiler - * @author Uwe Tews - */ - -/** - * Smarty Internal Plugin Compile Include Class - * - * @package Smarty - * @subpackage Compiler - */ -class Smarty_Internal_Compile_Include extends Smarty_Internal_CompileBase { - /** - * caching mode to create nocache code but no cache file - */ - const CACHING_NOCACHE_CODE = 9999; - /** - * Attribute definition: Overwrites base class. - * - * @var array - * @see Smarty_Internal_CompileBase - */ - public $required_attributes = array('file'); - /** - * Attribute definition: Overwrites base class. - * - * @var array - * @see Smarty_Internal_CompileBase - */ - public $shorttag_order = array('file'); - /** - * Attribute definition: Overwrites base class. - * - * @var array - * @see Smarty_Internal_CompileBase - */ - public $option_flags = array('nocache', 'inline', 'caching'); - /** - * Attribute definition: Overwrites base class. - * - * @var array - * @see Smarty_Internal_CompileBase - */ - public $optional_attributes = array('_any'); - - /** - * Compiles code for the {include} tag - * - * @param array $args array with attributes from parser - * @param Smarty_Internal_SmartyTemplateCompiler $compiler compiler object - * @param array $parameter array with compilation parameter - * - * @throws SmartyCompilerException - * @return string compiled code - */ - public function compile($args, Smarty_Internal_SmartyTemplateCompiler $compiler, $parameter) { - // check and get attributes - $_attr = $this->getAttributes($compiler, $args); - - // save possible attributes - $include_file = $_attr['file']; - - if (isset($_attr['assign'])) { - // output will be stored in a smarty variable instead of being displayed - $_assign = $_attr['assign']; - } - - $_parent_scope = Smarty::SCOPE_LOCAL; - if (isset($_attr['scope'])) { - $_attr['scope'] = trim($_attr['scope'], "'\""); - if ($_attr['scope'] == 'parent') { - $_parent_scope = Smarty::SCOPE_PARENT; - } elseif ($_attr['scope'] == 'root') { - $_parent_scope = Smarty::SCOPE_ROOT; - } elseif ($_attr['scope'] == 'global') { - $_parent_scope = Smarty::SCOPE_GLOBAL; - } - } - - // assume caching is off - $_caching = Smarty::CACHING_OFF; - - if ($_attr['nocache'] === true) { - $compiler->tag_nocache = true; - } - - $call_nocache = $compiler->tag_nocache || $compiler->nocache; - - // caching was on and {include} is not in nocache mode - if ($compiler->template->caching && !$compiler->nocache && !$compiler->tag_nocache) { - $_caching = self::CACHING_NOCACHE_CODE; - } - - // flag if included template code should be merged into caller - $merge_compiled_includes = ($compiler->smarty->merge_compiled_includes || ($compiler->inheritance && $compiler->smarty->inheritance_merge_compiled_includes) || $_attr['inline'] === true) && !$compiler->template->source->recompiled; - - if ($merge_compiled_includes && $_attr['inline'] !== true) { - // variable template name ? - if ($compiler->has_variable_string || !((substr_count($include_file, '"') == 2 || substr_count($include_file, "'") == 2)) || substr_count($include_file, '(') != 0 || substr_count($include_file, '$_smarty_tpl->') != 0) { - $merge_compiled_includes = false; - if ($compiler->template->caching) { - // must use individual cache file - //$_attr['caching'] = 1; - } - if ($compiler->inheritance && $compiler->smarty->inheritance_merge_compiled_includes && $_attr['inline'] !== true) { - $compiler->trigger_template_error(' variable template file names not allow within {block} tags'); - } - } - // variable compile_id? - if (isset($_attr['compile_id'])) { - if (!((substr_count($_attr['compile_id'], '"') == 2 || substr_count($_attr['compile_id'], "'") == 2 || is_numeric($_attr['compile_id']))) || substr_count($_attr['compile_id'], '(') != 0 || substr_count($_attr['compile_id'], '$_smarty_tpl->') != 0) { - $merge_compiled_includes = false; - if ($compiler->template->caching) { - // must use individual cache file - //$_attr['caching'] = 1; - } - if ($compiler->inheritance && $compiler->smarty->inheritance_merge_compiled_includes && $_attr['inline'] !== true) { - $compiler->trigger_template_error(' variable compile_id not allow within {block} tags'); - } - } - } - } - - /* - * if the {include} tag provides individual parameter for caching or compile_id - * the subtemplate must not be included into the core cache file and is treated like - * a call in nocache mode. - * - */ - if ($_attr['nocache'] !== true && $_attr['caching']) { - $_caching = $_new_caching = (int)$_attr['caching']; - $call_nocache = true; - } else { - $_new_caching = Smarty::CACHING_LIFETIME_CURRENT; - } - if (isset($_attr['cache_lifetime'])) { - $_cache_lifetime = $_attr['cache_lifetime']; - $call_nocache = true; - $_caching = $_new_caching; - } else { - $_cache_lifetime = '$_smarty_tpl->cache_lifetime'; - } - if (isset($_attr['cache_id'])) { - $_cache_id = $_attr['cache_id']; - $call_nocache = true; - $_caching = $_new_caching; - } else { - $_cache_id = '$_smarty_tpl->cache_id'; - } - if (isset($_attr['compile_id'])) { - $_compile_id = $_attr['compile_id']; - } else { - $_compile_id = '$_smarty_tpl->compile_id'; - } - - // if subtemplate will be called in nocache mode do not merge - if ($compiler->template->caching && $call_nocache) { - $merge_compiled_includes = false; - } - - $has_compiled_template = false; - if ($merge_compiled_includes) { - if ($compiler->template->caching && ($compiler->tag_nocache || $compiler->nocache) && $_caching != self::CACHING_NOCACHE_CODE) { - // $merge_compiled_includes = false; - if ($compiler->inheritance && $compiler->smarty->inheritance_merge_compiled_includes) { - $compiler->trigger_template_error(' invalid caching mode of subtemplate within {block} tags'); - } - } - $c_id = isset($_attr['compile_id']) ? $_attr['compile_id'] : $compiler->template->compile_id; - // we must observe different compile_id and caching - $uid = sha1($c_id . ($_caching ? '--caching' : '--nocaching')); - $tpl_name = null; - - /** @var Smarty_Internal_Template $_smarty_tpl - * used in evaluated code - */ - $_smarty_tpl = $compiler->template; - eval("\$tpl_name = $include_file;"); - if (!isset($compiler->parent_compiler->mergedSubTemplatesData[$tpl_name][$uid])) { - $compiler->smarty->allow_ambiguous_resources = true; - $tpl = new $compiler->smarty->template_class ($tpl_name, $compiler->smarty, $compiler->template, $compiler->template->cache_id, $c_id, $_caching); - // save unique function name - $compiler->parent_compiler->mergedSubTemplatesData[$tpl_name][$uid]['func'] = $tpl->properties['unifunc'] = 'content_' . str_replace(array('.', ','), '_', uniqid('', true)); - if ($compiler->inheritance) { - $tpl->compiler->inheritance = true; - } - // make sure whole chain gets compiled - $tpl->mustCompile = true; - if (!($tpl->source->uncompiled) && $tpl->source->exists) { - $tpl->compiler->suppressTemplatePropertyHeader = true; - $compiler->parent_compiler->mergedSubTemplatesData[$tpl_name][$uid]['nocache_hash'] = $tpl->properties['nocache_hash'] = str_replace(array('.', ','), '_', uniqid(rand(), true)); - // get compiled code - $compiled_code = Smarty_Internal_Extension_CodeFrame::createFunctionFrame($tpl, $tpl->compiler->compileTemplate($tpl, null, $compiler->parent_compiler)); - unset($tpl->compiler); - - // remove header code - $compiled_code = preg_replace("/(<\?php \/\*%%SmartyHeaderCode:{$tpl->properties['nocache_hash']}%%\*\/(.+?)\/\*\/%%SmartyHeaderCode%%\*\/\?>\n)/s", '', $compiled_code); - if ($tpl->has_nocache_code) { - // replace nocache_hash - $compiled_code = str_replace("{$tpl->properties['nocache_hash']}", $compiler->template->properties['nocache_hash'], $compiled_code); - $compiler->template->has_nocache_code = true; - } - $compiler->parent_compiler->mergedSubTemplatesCode[$tpl->properties['unifunc']] = $compiled_code; - $has_compiled_template = true; - if (!empty($tpl->required_plugins['compiled'])) { - foreach ($tpl->required_plugins['compiled'] as $name => $callBack) { - if (!isset($compiler->template->required_plugins['compiled'][$name])) { - $compiler->template->required_plugins['compiled'][$name] = $callBack; - } - } - } - if (!empty($tpl->required_plugins['nocache'])) { - foreach ($tpl->required_plugins['nocache'] as $name => $callBack) { - if (!isset($compiler->template->required_plugins['nocache'][$name])) { - $compiler->template->required_plugins['nocache'][$name] = $callBack; - } - } - } - unset ($tpl); - } - } else { - $has_compiled_template = true; - } - } - // delete {include} standard attributes - unset($_attr['file'], $_attr['assign'], $_attr['cache_id'], $_attr['compile_id'], $_attr['cache_lifetime'], $_attr['nocache'], $_attr['caching'], $_attr['scope'], $_attr['inline']); - // remaining attributes must be assigned as smarty variable - $_vars_nc = ''; - if (!empty($_attr)) { - if ($_parent_scope == Smarty::SCOPE_LOCAL) { - $_pairs = array(); - // create variables - foreach ($_attr as $key => $value) { - $_pairs[] = "'$key'=>$value"; - $_vars_nc .= "\$_smarty_tpl->tpl_vars['$key'] = new Smarty_Variable($value);\n"; - } - $_vars = 'array(' . join(',', $_pairs) . ')'; - } else { - $compiler->trigger_template_error('variable passing not allowed in parent/global scope', $compiler->lex->taglineno); - } - } else { - $_vars = 'array()'; - } - $update_compile_id = $compiler->template->caching && !$compiler->tag_nocache && !$compiler->nocache && $_compile_id != '$_smarty_tpl->compile_id'; - if ($has_compiled_template && !$call_nocache) { - // if ($has_compiled_template && !$compiler->tag_nocache && !$compiler->nocache) { - // never call inline templates in nocache mode - //$compiler->suppressNocacheProcessing = true; - $_hash = $compiler->parent_compiler->mergedSubTemplatesData[$tpl_name][$uid]['nocache_hash']; - $_output = "<?php /* Call merged included template \"" . $tpl_name . "\" */\n"; - if ($update_compile_id) { - $_output .= $compiler->makeNocacheCode("\$_compile_id_save[] = \$_smarty_tpl->compile_id;\n\$_smarty_tpl->compile_id = {$_compile_id};\n"); - } - if (!empty($_vars_nc) && $_caching == 9999 && $_smarty_tpl->caching) { - //$compiler->suppressNocacheProcessing = false; - $_output .= substr($compiler->processNocacheCode('<?php ' . $_vars_nc . "?>\n", true), 6, -3); - //$compiler->suppressNocacheProcessing = true; - } - if (isset($_assign)) { - $_output .= " \$_smarty_tpl->tpl_vars[$_assign] = new Smarty_Variable(\$_smarty_tpl->getInlineSubTemplate({$include_file}, {$_cache_id}, {$_compile_id}, {$_caching}, {$_cache_lifetime}, {$_vars}, {$_parent_scope}, '{$_hash}', '{$compiler->parent_compiler->mergedSubTemplatesData[$tpl_name][$uid]['func']}'));\n"; - } else { - $_output .= "echo \$_smarty_tpl->getInlineSubTemplate({$include_file}, {$_cache_id}, {$_compile_id}, {$_caching}, {$_cache_lifetime}, {$_vars}, {$_parent_scope}, '{$_hash}', '{$compiler->parent_compiler->mergedSubTemplatesData[$tpl_name][$uid]['func']}');\n"; - } - if ($update_compile_id) { - $_output .= $compiler->makeNocacheCode("\$_smarty_tpl->compile_id = array_pop(\$_compile_id_save);\n"); - } - $_output .= "/* End of included template \"" . $tpl_name . "\" */?>\n"; - - return $_output; - } - - if ($call_nocache) { - $compiler->tag_nocache = true; - } - $_output = "<?php "; - if ($update_compile_id) { - $_output .= "\$_compile_id_save[] = \$_smarty_tpl->compile_id;\n\$_smarty_tpl->compile_id = {$_compile_id};\n"; - } - // was there an assign attribute - if (isset($_assign)) { - $_output .= "\$_smarty_tpl->tpl_vars[$_assign] = new Smarty_Variable(\$_smarty_tpl->getSubTemplate ($include_file, $_cache_id, $_compile_id, $_caching, $_cache_lifetime, $_vars, $_parent_scope));\n"; - } else { - $_output .= "echo \$_smarty_tpl->getSubTemplate ($include_file, $_cache_id, $_compile_id, $_caching, $_cache_lifetime, $_vars, $_parent_scope);\n"; - } - if ($update_compile_id) { - $_output .= "\$_smarty_tpl->compile_id = array_pop(\$_compile_id_save);\n"; - } - $_output .= "?>\n"; - return $_output; - } -} diff --git a/library/smarty/libs/sysplugins/smarty_internal_compile_include_php.php b/library/smarty/libs/sysplugins/smarty_internal_compile_include_php.php deleted file mode 100644 --- a/library/smarty/libs/sysplugins/smarty_internal_compile_include_php.php +++ /dev/null @@ -1,105 +0,0 @@ -<?php -/** - * Smarty Internal Plugin Compile Include PHP - * Compiles the {include_php} tag - * - * @package Smarty - * @subpackage Compiler - * @author Uwe Tews - */ - -/** - * Smarty Internal Plugin Compile Insert Class - * - * @package Smarty - * @subpackage Compiler - */ -class Smarty_Internal_Compile_Include_Php extends Smarty_Internal_CompileBase { - /** - * Attribute definition: Overwrites base class. - * - * @var array - * @see Smarty_Internal_CompileBase - */ - public $required_attributes = array('file'); - /** - * Attribute definition: Overwrites base class. - * - * @var array - * @see Smarty_Internal_CompileBase - */ - public $shorttag_order = array('file'); - /** - * Attribute definition: Overwrites base class. - * - * @var array - * @see Smarty_Internal_CompileBase - */ - public $optional_attributes = array('once', 'assign'); - - /** - * Compiles code for the {include_php} tag - * - * @param array $args array with attributes from parser - * @param object $compiler compiler object - * - * @throws SmartyException - * @return string compiled code - */ - public function compile($args, $compiler) { - if (!($compiler->smarty instanceof SmartyBC)) { - throw new SmartyException("{include_php} is deprecated, use SmartyBC class to enable"); - } - // check and get attributes - $_attr = $this->getAttributes($compiler, $args); - - /** @var Smarty_Internal_Template $_smarty_tpl - * used in evaluated code - */ - $_smarty_tpl = $compiler->template; - $_filepath = false; - eval('$_file = ' . $_attr['file'] . ';'); - if (!isset($compiler->smarty->security_policy) && file_exists($_file)) { - $_filepath = $_file; - } else { - if (isset($compiler->smarty->security_policy)) { - $_dir = $compiler->smarty->security_policy->trusted_dir; - } else { - $_dir = $compiler->smarty->trusted_dir; - } - if (!empty($_dir)) { - foreach ((array)$_dir as $_script_dir) { - $_script_dir = rtrim($_script_dir, '/\\') . DS; - if (file_exists($_script_dir . $_file)) { - $_filepath = $_script_dir . $_file; - break; - } - } - } - } - if ($_filepath == false) { - $compiler->trigger_template_error("{include_php} file '{$_file}' is not readable", $compiler->lex->taglineno); - } - - if (isset($compiler->smarty->security_policy)) { - $compiler->smarty->security_policy->isTrustedPHPDir($_filepath); - } - - if (isset($_attr['assign'])) { - // output will be stored in a smarty variable instead of being displayed - $_assign = $_attr['assign']; - } - $_once = '_once'; - if (isset($_attr['once'])) { - if ($_attr['once'] == 'false') { - $_once = ''; - } - } - - if (isset($_assign)) { - return "<?php ob_start(); include{$_once} ('{$_filepath}'); \$_smarty_tpl->assign({$_assign},ob_get_contents()); ob_end_clean();?>"; - } else { - return "<?php include{$_once} ('{$_filepath}');?>\n"; - } - } -} diff --git a/library/smarty/libs/sysplugins/smarty_internal_compile_insert.php b/library/smarty/libs/sysplugins/smarty_internal_compile_insert.php deleted file mode 100644 --- a/library/smarty/libs/sysplugins/smarty_internal_compile_insert.php +++ /dev/null @@ -1,146 +0,0 @@ -<?php - -/** - * Smarty Internal Plugin Compile Insert - * Compiles the {insert} tag - * - * @package Smarty - * @subpackage Compiler - * @author Uwe Tews - */ - -/** - * Smarty Internal Plugin Compile Insert Class - * - * @package Smarty - * @subpackage Compiler - */ -class Smarty_Internal_Compile_Insert extends Smarty_Internal_CompileBase { - /** - * Attribute definition: Overwrites base class. - * - * @var array - * @see Smarty_Internal_CompileBase - */ - public $required_attributes = array('name'); - /** - * Attribute definition: Overwrites base class. - * - * @var array - * @see Smarty_Internal_CompileBase - */ - public $shorttag_order = array('name'); - /** - * Attribute definition: Overwrites base class. - * - * @var array - * @see Smarty_Internal_CompileBase - */ - public $optional_attributes = array('_any'); - - /** - * Compiles code for the {insert} tag - * - * @param array $args array with attributes from parser - * @param object $compiler compiler object - * - * @return string compiled code - */ - public function compile($args, $compiler) { - // check and get attributes - $_attr = $this->getAttributes($compiler, $args); - $nocacheParam = $compiler->template->caching && ($compiler->tag_nocache || $compiler->nocache); - if (!$nocacheParam) { - // do not compile as nocache code - $compiler->suppressNocacheProcessing = true; - } - $compiler->tag_nocache = true; - $_smarty_tpl = $compiler->template; - $_name = null; - $_script = null; - - $_output = '<?php '; - // save possible attributes - eval('$_name = ' . $_attr['name'] . ';'); - if (isset($_attr['assign'])) { - // output will be stored in a smarty variable instead of being displayed - $_assign = $_attr['assign']; - // create variable to make sure that the compiler knows about its nocache status - $var = trim($_attr['assign'], "'"); - if (isset($compiler->template->tpl_vars[$var])) { - $compiler->template->tpl_vars[$var]->nocache = true; - } else { - $compiler->template->tpl_vars[$var] = new Smarty_Variable(null, true); - } - } - if (isset($_attr['script'])) { - // script which must be included - $_function = "smarty_insert_{$_name}"; - $_smarty_tpl = $compiler->template; - $_filepath = false; - eval('$_script = ' . $_attr['script'] . ';'); - if (!isset($compiler->smarty->security_policy) && file_exists($_script)) { - $_filepath = $_script; - } else { - if (isset($compiler->smarty->security_policy)) { - $_dir = $compiler->smarty->security_policy->trusted_dir; - } else { - $_dir = $compiler->smarty->trusted_dir; - } - if (!empty($_dir)) { - foreach ((array)$_dir as $_script_dir) { - $_script_dir = rtrim($_script_dir, '/\\') . DS; - if (file_exists($_script_dir . $_script)) { - $_filepath = $_script_dir . $_script; - break; - } - } - } - } - if ($_filepath == false) { - $compiler->trigger_template_error("{insert} missing script file '{$_script}'", $compiler->lex->taglineno); - } - // code for script file loading - $_output .= "require_once '{$_filepath}' ;"; - require_once $_filepath; - if (!is_callable($_function)) { - $compiler->trigger_template_error(" {insert} function '{$_function}' is not callable in script file '{$_script}'", $compiler->lex->taglineno); - } - } else { - $_filepath = 'null'; - $_function = "insert_{$_name}"; - // function in PHP script ? - if (!is_callable($_function)) { - // try plugin - if (!$_function = $compiler->getPlugin($_name, 'insert')) { - $compiler->trigger_template_error("{insert} no function or plugin found for '{$_name}'", $compiler->lex->taglineno); - } - } - } - // delete {insert} standard attributes - unset($_attr['name'], $_attr['assign'], $_attr['script'], $_attr['nocache']); - // convert attributes into parameter array string - $_paramsArray = array(); - foreach ($_attr as $_key => $_value) { - $_paramsArray[] = "'$_key' => $_value"; - } - $_params = 'array(' . implode(", ", $_paramsArray) . ')'; - // call insert - if (isset($_assign)) { - if ($_smarty_tpl->caching && !$nocacheParam) { - $_output .= "echo Smarty_Internal_Nocache_Insert::compile ('{$_function}',{$_params}, \$_smarty_tpl, '{$_filepath}',{$_assign});?>"; - } else { - $_output .= "\$_smarty_tpl->assign({$_assign} , {$_function} ({$_params},\$_smarty_tpl), true);?>"; - } - } else { - $compiler->has_output = true; - if ($_smarty_tpl->caching && !$nocacheParam) { - $_output .= "echo Smarty_Internal_Nocache_Insert::compile ('{$_function}',{$_params}, \$_smarty_tpl, '{$_filepath}');?>"; - } else { - $_output .= "echo {$_function}({$_params},\$_smarty_tpl);?>"; - } - } - - return $_output; - } -} diff --git a/library/smarty/libs/sysplugins/smarty_internal_compile_ldelim.php b/library/smarty/libs/sysplugins/smarty_internal_compile_ldelim.php deleted file mode 100644 --- a/library/smarty/libs/sysplugins/smarty_internal_compile_ldelim.php +++ /dev/null @@ -1,37 +0,0 @@ -<?php -/** - * Smarty Internal Plugin Compile Ldelim - * Compiles the {ldelim} tag - * - * @package Smarty - * @subpackage Compiler - * @author Uwe Tews - */ - -/** - * Smarty Internal Plugin Compile Ldelim Class - * - * @package Smarty - * @subpackage Compiler - */ -class Smarty_Internal_Compile_Ldelim extends Smarty_Internal_CompileBase { - /** - * Compiles code for the {ldelim} tag - * This tag does output the left delimiter - * - * @param array $args array with attributes from parser - * @param object $compiler compiler object - * - * @return string compiled code - */ - public function compile($args, $compiler) { - $_attr = $this->getAttributes($compiler, $args); - if ($_attr['nocache'] === true) { - $compiler->trigger_template_error('nocache option not allowed', $compiler->lex->taglineno); - } - // this tag does not return compiled code - $compiler->has_code = true; - - return $compiler->smarty->left_delimiter; - } -} diff --git a/library/smarty/libs/sysplugins/smarty_internal_compile_nocache.php b/library/smarty/libs/sysplugins/smarty_internal_compile_nocache.php deleted file mode 100644 --- a/library/smarty/libs/sysplugins/smarty_internal_compile_nocache.php +++ /dev/null @@ -1,71 +0,0 @@ -<?php -/** - * Smarty Internal Plugin Compile Nocache - * Compiles the {nocache} {/nocache} tags. - * - * @package Smarty - * @subpackage Compiler - * @author Uwe Tews - */ - -/** - * Smarty Internal Plugin Compile Nocache Class - * - * @package Smarty - * @subpackage Compiler - */ -class Smarty_Internal_Compile_Nocache extends Smarty_Internal_CompileBase { - /** - * Array of names of valid option flags - * - * @var array - */ - public $option_flags = array(); - - /** - * Compiles code for the {nocache} tag - * This tag does not generate compiled output. It only sets a compiler flag. - * - * @param array $args array with attributes from parser - * @param object $compiler compiler object - * - * @return bool - */ - public function compile($args, $compiler) { - $_attr = $this->getAttributes($compiler, $args); - $this->openTag($compiler, 'nocache', array($compiler->nocache)); - // enter nocache mode - $compiler->nocache = true; - // this tag does not return compiled code - $compiler->has_code = false; - - return true; - } -} - -/** - * Smarty Internal Plugin Compile Nocacheclose Class - * - * @package Smarty - * @subpackage Compiler - */ -class Smarty_Internal_Compile_Nocacheclose extends Smarty_Internal_CompileBase { - /** - * Compiles code for the {/nocache} tag - * This tag does not generate compiled output. It only sets a compiler flag. - * - * @param array $args array with attributes from parser - * @param object $compiler compiler object - * - * @return bool - */ - public function compile($args, $compiler) { - $_attr = $this->getAttributes($compiler, $args); - // leave nocache mode - list($compiler->nocache) = $this->closeTag($compiler, array('nocache')); - // this tag does not return compiled code - $compiler->has_code = false; - - return true; - } -} diff --git a/library/smarty/libs/sysplugins/smarty_internal_compile_private_block_plugin.php b/library/smarty/libs/sysplugins/smarty_internal_compile_private_block_plugin.php deleted file mode 100644 --- a/library/smarty/libs/sysplugins/smarty_internal_compile_private_block_plugin.php +++ /dev/null @@ -1,83 +0,0 @@ -<?php -/** - * Smarty Internal Plugin Compile Block Plugin - * Compiles code for the execution of block plugin - * - * @package Smarty - * @subpackage Compiler - * @author Uwe Tews - */ - -/** - * Smarty Internal Plugin Compile Block Plugin Class - * - * @package Smarty - * @subpackage Compiler - */ -class Smarty_Internal_Compile_Private_Block_Plugin extends Smarty_Internal_CompileBase { - /** - * Attribute definition: Overwrites base class. - * - * @var array - * @see Smarty_Internal_CompileBase - */ - public $optional_attributes = array('_any'); - - /** - * Compiles code for the execution of block plugin - * - * @param array $args array with attributes from parser - * @param object $compiler compiler object - * @param array $parameter array with compilation parameter - * @param string $tag name of block plugin - * @param string $function PHP function name - * - * @return string compiled code - */ - public function compile($args, $compiler, $parameter, $tag, $function) { - if (!isset($tag[5]) || substr($tag, -5) != 'close') { - // opening tag of block plugin - // check and get attributes - $_attr = $this->getAttributes($compiler, $args); - if ($_attr['nocache'] === true) { - $compiler->tag_nocache = true; - } - unset($_attr['nocache']); - // convert attributes into parameter array string - $_paramsArray = array(); - foreach ($_attr as $_key => $_value) { - if (is_int($_key)) { - $_paramsArray[] = "$_key=>$_value"; - } else { - $_paramsArray[] = "'$_key'=>$_value"; - } - } - $_params = 'array(' . implode(",", $_paramsArray) . ')'; - - $this->openTag($compiler, $tag, array($_params, $compiler->nocache)); - // maybe nocache because of nocache variables or nocache plugin - $compiler->nocache = $compiler->nocache | $compiler->tag_nocache; - // compile code - $output = "<?php \$_smarty_tpl->smarty->_tag_stack[] = array('{$tag}', {$_params}); \$_block_repeat=true; echo {$function}({$_params}, null, \$_smarty_tpl, \$_block_repeat);while (\$_block_repeat) { ob_start();?>"; - } else { - // must endblock be nocache? - if ($compiler->nocache) { - $compiler->tag_nocache = true; - } - // closing tag of block plugin, restore nocache - list($_params, $compiler->nocache) = $this->closeTag($compiler, substr($tag, 0, -5)); - // This tag does create output - $compiler->has_output = true; - // compile code - if (!isset($parameter['modifier_list'])) { - $mod_pre = $mod_post = ''; - } else { - $mod_pre = ' ob_start(); '; - $mod_post = 'echo ' . $compiler->compileTag('private_modifier', array(), array('modifierlist' => $parameter['modifier_list'], 'value' => 'ob_get_clean()')) . ';'; - } - $output = "<?php \$_block_content = ob_get_clean(); \$_block_repeat=false;" . $mod_pre . " echo {$function}({$_params}, \$_block_content, \$_smarty_tpl, \$_block_repeat); " . $mod_post . " } array_pop(\$_smarty_tpl->smarty->_tag_stack);?>"; - } - - return $output . "\n"; - } -} diff --git a/library/smarty/libs/sysplugins/smarty_internal_compile_private_function_plugin.php b/library/smarty/libs/sysplugins/smarty_internal_compile_private_function_plugin.php deleted file mode 100644 --- a/library/smarty/libs/sysplugins/smarty_internal_compile_private_function_plugin.php +++ /dev/null @@ -1,69 +0,0 @@ -<?php -/** - * Smarty Internal Plugin Compile Function Plugin - * Compiles code for the execution of function plugin - * - * @package Smarty - * @subpackage Compiler - * @author Uwe Tews - */ - -/** - * Smarty Internal Plugin Compile Function Plugin Class - * - * @package Smarty - * @subpackage Compiler - */ -class Smarty_Internal_Compile_Private_Function_Plugin extends Smarty_Internal_CompileBase { - /** - * Attribute definition: Overwrites base class. - * - * @var array - * @see Smarty_Internal_CompileBase - */ - public $required_attributes = array(); - /** - * Attribute definition: Overwrites base class. - * - * @var array - * @see Smarty_Internal_CompileBase - */ - public $optional_attributes = array('_any'); - - /** - * Compiles code for the execution of function plugin - * - * @param array $args array with attributes from parser - * @param object $compiler compiler object - * @param array $parameter array with compilation parameter - * @param string $tag name of function plugin - * @param string $function PHP function name - * - * @return string compiled code - */ - public function compile($args, $compiler, $parameter, $tag, $function) { - // This tag does create output - $compiler->has_output = true; - - // check and get attributes - $_attr = $this->getAttributes($compiler, $args); - if ($_attr['nocache'] === true) { - $compiler->tag_nocache = true; - } - unset($_attr['nocache']); - // convert attributes into parameter array string - $_paramsArray = array(); - foreach ($_attr as $_key => $_value) { - if (is_int($_key)) { - $_paramsArray[] = "$_key=>$_value"; - } else { - $_paramsArray[] = "'$_key'=>$_value"; - } - } - $_params = 'array(' . implode(",", $_paramsArray) . ')'; - // compile code - $output = "<?php echo {$function}({$_params},\$_smarty_tpl);?>\n"; - - return $output; - } -} diff --git a/library/smarty/libs/sysplugins/smarty_internal_compile_private_modifier.php b/library/smarty/libs/sysplugins/smarty_internal_compile_private_modifier.php deleted file mode 100644 --- a/library/smarty/libs/sysplugins/smarty_internal_compile_private_modifier.php +++ /dev/null @@ -1,137 +0,0 @@ -<?php - -/** - * Smarty Internal Plugin Compile Modifier - * Compiles code for modifier execution - * - * @package Smarty - * @subpackage Compiler - * @author Uwe Tews - */ - -/** - * Smarty Internal Plugin Compile Modifier Class - * - * @package Smarty - * @subpackage Compiler - */ -class Smarty_Internal_Compile_Private_Modifier extends Smarty_Internal_CompileBase { - /** - * Compiles code for modifier execution - * - * @param array $args array with attributes from parser - * @param object $compiler compiler object - * @param array $parameter array with compilation parameter - * - * @return string compiled code - */ - public function compile($args, $compiler, $parameter) { - // check and get attributes - $_attr = $this->getAttributes($compiler, $args); - $output = $parameter['value']; - // loop over list of modifiers - foreach ($parameter['modifierlist'] as $single_modifier) { - $modifier = $single_modifier[0]; - $single_modifier[0] = $output; - $params = implode(',', $single_modifier); - // check if we know already the type of modifier - if (isset($compiler->known_modifier_type[$modifier])) { - $modifier_types = array($compiler->known_modifier_type[$modifier]); - } else { - $modifier_types = array(1, 2, 3, 4, 5, 6); - } - foreach ($modifier_types as $type) { - switch ($type) { - case 1: - // registered modifier - if (isset($compiler->smarty->registered_plugins[Smarty::PLUGIN_MODIFIER][$modifier])) { - $function = $compiler->smarty->registered_plugins[Smarty::PLUGIN_MODIFIER][$modifier][0]; - if (!is_array($function)) { - $output = "{$function}({$params})"; - } else { - if (is_object($function[0])) { - $output = '$_smarty_tpl->smarty->registered_plugins[Smarty::PLUGIN_MODIFIER][\'' . $modifier . '\'][0][0]->' . $function[1] . '(' . $params . ')'; - } else { - $output = $function[0] . '::' . $function[1] . '(' . $params . ')'; - } - } - $compiler->known_modifier_type[$modifier] = $type; - break 2; - } - break; - case 2: - // registered modifier compiler - if (isset($compiler->smarty->registered_plugins[Smarty::PLUGIN_MODIFIERCOMPILER][$modifier][0])) { - $output = call_user_func($compiler->smarty->registered_plugins[Smarty::PLUGIN_MODIFIERCOMPILER][$modifier][0], $single_modifier, $compiler->smarty); - $compiler->known_modifier_type[$modifier] = $type; - break 2; - } - break; - case 3: - // modifiercompiler plugin - if ($compiler->smarty->loadPlugin('smarty_modifiercompiler_' . $modifier)) { - // check if modifier allowed - if (!is_object($compiler->smarty->security_policy) || $compiler->smarty->security_policy->isTrustedModifier($modifier, $compiler)) { - $plugin = 'smarty_modifiercompiler_' . $modifier; - $output = $plugin($single_modifier, $compiler); - } - $compiler->known_modifier_type[$modifier] = $type; - break 2; - } - break; - case 4: - // modifier plugin - if ($function = $compiler->getPlugin($modifier, Smarty::PLUGIN_MODIFIER)) { - // check if modifier allowed - if (!is_object($compiler->smarty->security_policy) || $compiler->smarty->security_policy->isTrustedModifier($modifier, $compiler)) { - $output = "{$function}({$params})"; - } - $compiler->known_modifier_type[$modifier] = $type; - break 2; - } - break; - case 5: - // PHP function - if (is_callable($modifier)) { - // check if modifier allowed - if (!is_object($compiler->smarty->security_policy) || $compiler->smarty->security_policy->isTrustedPhpModifier($modifier, $compiler)) { - $output = "{$modifier}({$params})"; - } - $compiler->known_modifier_type[$modifier] = $type; - break 2; - } - break; - case 6: - // default plugin handler - if (isset($compiler->default_handler_plugins[Smarty::PLUGIN_MODIFIER][$modifier]) || (is_callable($compiler->smarty->default_plugin_handler_func) && $compiler->getPluginFromDefaultHandler($modifier, Smarty::PLUGIN_MODIFIER))) { - $function = $compiler->default_handler_plugins[Smarty::PLUGIN_MODIFIER][$modifier][0]; - // check if modifier allowed - if (!is_object($compiler->smarty->security_policy) || $compiler->smarty->security_policy->isTrustedModifier($modifier, $compiler)) { - if (!is_array($function)) { - $output = "{$function}({$params})"; - } else { - if (is_object($function[0])) { - $output = '$_smarty_tpl->smarty->registered_plugins[Smarty::PLUGIN_MODIFIER][\'' . $modifier . '\'][0][0]->' . $function[1] . '(' . $params . ')'; - } else { - $output = $function[0] . '::' . $function[1] . '(' . $params . ')'; - } - } - } - if (isset($compiler->template->required_plugins['nocache'][$modifier][Smarty::PLUGIN_MODIFIER]['file']) || isset($compiler->template->required_plugins['compiled'][$modifier][Smarty::PLUGIN_MODIFIER]['file'])) { - // was a plugin - $compiler->known_modifier_type[$modifier] = 4; - } else { - $compiler->known_modifier_type[$modifier] = $type; - } - break 2; - } - } - } - if (!isset($compiler->known_modifier_type[$modifier])) { - $compiler->trigger_template_error("unknown modifier \"" . $modifier . "\"", $compiler->lex->taglineno); - } - } - - return $output; - } -} diff --git a/library/smarty/libs/sysplugins/smarty_internal_compile_private_object_block_function.php b/library/smarty/libs/sysplugins/smarty_internal_compile_private_object_block_function.php deleted file mode 100644 --- a/library/smarty/libs/sysplugins/smarty_internal_compile_private_object_block_function.php +++ /dev/null @@ -1,84 +0,0 @@ -<?php -/** - * Smarty Internal Plugin Compile Object Block Function - * Compiles code for registered objects as block function - * - * @package Smarty - * @subpackage Compiler - * @author Uwe Tews - */ - -/** - * Smarty Internal Plugin Compile Object Block Function Class - * - * @package Smarty - * @subpackage Compiler - */ -class Smarty_Internal_Compile_Private_Object_Block_Function extends Smarty_Internal_CompileBase { - /** - * Attribute definition: Overwrites base class. - * - * @var array - * @see Smarty_Internal_CompileBase - */ - public $optional_attributes = array('_any'); - - /** - * Compiles code for the execution of block plugin - * - * @param array $args array with attributes from parser - * @param object $compiler compiler object - * @param array $parameter array with compilation parameter - * @param string $tag name of block object - * @param string $method name of method to call - * - * @return string compiled code - */ - public function compile($args, $compiler, $parameter, $tag, $method) { - if (!isset($tag[5]) || substr($tag, -5) != 'close') { - // opening tag of block plugin - // check and get attributes - $_attr = $this->getAttributes($compiler, $args); - if ($_attr['nocache'] === true) { - $compiler->tag_nocache = true; - } - unset($_attr['nocache']); - // convert attributes into parameter array string - $_paramsArray = array(); - foreach ($_attr as $_key => $_value) { - if (is_int($_key)) { - $_paramsArray[] = "$_key=>$_value"; - } else { - $_paramsArray[] = "'$_key'=>$_value"; - } - } - $_params = 'array(' . implode(",", $_paramsArray) . ')'; - - $this->openTag($compiler, $tag . '->' . $method, array($_params, $compiler->nocache)); - // maybe nocache because of nocache variables or nocache plugin - $compiler->nocache = $compiler->nocache | $compiler->tag_nocache; - // compile code - $output = "<?php \$_smarty_tpl->smarty->_tag_stack[] = array('{$tag}->{$method}', {$_params}); \$_block_repeat=true; echo \$_smarty_tpl->smarty->registered_objects['{$tag}'][0]->{$method}({$_params}, null, \$_smarty_tpl, \$_block_repeat);while (\$_block_repeat) { ob_start();?>"; - } else { - $base_tag = substr($tag, 0, -5); - // must endblock be nocache? - if ($compiler->nocache) { - $compiler->tag_nocache = true; - } - // closing tag of block plugin, restore nocache - list($_params, $compiler->nocache) = $this->closeTag($compiler, $base_tag . '->' . $method); - // This tag does create output - $compiler->has_output = true; - // compile code - if (!isset($parameter['modifier_list'])) { - $mod_pre = $mod_post = ''; - } else { - $mod_pre = ' ob_start(); '; - $mod_post = 'echo ' . $compiler->compileTag('private_modifier', array(), array('modifierlist' => $parameter['modifier_list'], 'value' => 'ob_get_clean()')) . ';'; - } - $output = "<?php \$_block_content = ob_get_contents(); ob_end_clean(); \$_block_repeat=false;" . $mod_pre . " echo \$_smarty_tpl->smarty->registered_objects['{$base_tag}'][0]->{$method}({$_params}, \$_block_content, \$_smarty_tpl, \$_block_repeat); " . $mod_post . " } array_pop(\$_smarty_tpl->smarty->_tag_stack);?>"; - } - - return $output . "\n"; - } -} diff --git a/library/smarty/libs/sysplugins/smarty_internal_compile_private_object_function.php b/library/smarty/libs/sysplugins/smarty_internal_compile_private_object_function.php deleted file mode 100644 --- a/library/smarty/libs/sysplugins/smarty_internal_compile_private_object_function.php +++ /dev/null @@ -1,82 +0,0 @@ -<?php -/** - * Smarty Internal Plugin Compile Object Function - * Compiles code for registered objects as function - * - * @package Smarty - * @subpackage Compiler - * @author Uwe Tews - */ - -/** - * Smarty Internal Plugin Compile Object Function Class - * - * @package Smarty - * @subpackage Compiler - */ -class Smarty_Internal_Compile_Private_Object_Function extends Smarty_Internal_CompileBase { - /** - * Attribute definition: Overwrites base class. - * - * @var array - * @see Smarty_Internal_CompileBase - */ - public $optional_attributes = array('_any'); - - /** - * Compiles code for the execution of function plugin - * - * @param array $args array with attributes from parser - * @param object $compiler compiler object - * @param array $parameter array with compilation parameter - * @param string $tag name of function - * @param string $method name of method to call - * - * @return string compiled code - */ - public function compile($args, $compiler, $parameter, $tag, $method) { - // check and get attributes - $_attr = $this->getAttributes($compiler, $args); - if ($_attr['nocache'] === true) { - $compiler->tag_nocache = true; - } - unset($_attr['nocache']); - $_assign = null; - if (isset($_attr['assign'])) { - $_assign = $_attr['assign']; - unset($_attr['assign']); - } - // method or property ? - if (method_exists($compiler->smarty->registered_objects[$tag][0], $method)) { - // convert attributes into parameter array string - if ($compiler->smarty->registered_objects[$tag][2]) { - $_paramsArray = array(); - foreach ($_attr as $_key => $_value) { - if (is_int($_key)) { - $_paramsArray[] = "$_key=>$_value"; - } else { - $_paramsArray[] = "'$_key'=>$_value"; - } - } - $_params = 'array(' . implode(",", $_paramsArray) . ')'; - $return = "\$_smarty_tpl->smarty->registered_objects['{$tag}'][0]->{$method}({$_params},\$_smarty_tpl)"; - } else { - $_params = implode(",", $_attr); - $return = "\$_smarty_tpl->smarty->registered_objects['{$tag}'][0]->{$method}({$_params})"; - } - } else { - // object property - $return = "\$_smarty_tpl->smarty->registered_objects['{$tag}'][0]->{$method}"; - } - - if (empty($_assign)) { - // This tag does create output - $compiler->has_output = true; - $output = "<?php echo {$return};?>\n"; - } else { - $output = "<?php \$_smarty_tpl->assign({$_assign},{$return});?>\n"; - } - - return $output; - } -} diff --git a/library/smarty/libs/sysplugins/smarty_internal_compile_private_php.php b/library/smarty/libs/sysplugins/smarty_internal_compile_private_php.php deleted file mode 100644 --- a/library/smarty/libs/sysplugins/smarty_internal_compile_private_php.php +++ /dev/null @@ -1,193 +0,0 @@ -<?php -/** - * Smarty Internal Plugin Compile PHP Expression - * Compiles any tag which will output an expression or variable - * - * @package Smarty - * @subpackage Compiler - * @author Uwe Tews - */ - -/** - * Smarty Internal Plugin Compile PHP Expression Class - * - * @package Smarty - * @subpackage Compiler - */ -class Smarty_Internal_Compile_Private_Php extends Smarty_Internal_CompileBase { - - /** - * Attribute definition: Overwrites base class. - * - * @var array - * @see Smarty_Internal_CompileBase - */ - public $required_attributes = array('code', 'type'); - - /** - * Compiles code for generating output from any expression - * - * @param array $args array with attributes from parser - * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object - * @param array $parameter array with compilation parameter - * - * @return string - * @throws \SmartyException - */ - public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter) { - // check and get attributes - $_attr = $this->getAttributes($compiler, $args); - $compiler->has_code = false; - if ($_attr['type'] == 'xml') { - $compiler->tag_nocache = true; - $save = $compiler->template->has_nocache_code; - $output = addcslashes($_attr['code'], "'\\"); - $compiler->parser->current_buffer->append_subtree(new Smarty_Internal_ParseTree_Tag($compiler->parser, $compiler->processNocacheCode("<?php echo '" . $output . "';?>", $compiler, true))); - $compiler->template->has_nocache_code = $save; - return ''; - } - if ($_attr['type'] != 'tag') { - if ($compiler->php_handling == Smarty::PHP_REMOVE) { - return ''; - } elseif ($compiler->php_handling == Smarty::PHP_QUOTE) { - $output = preg_replace_callback('#(<\?(?:php|=)?)|(<%)|(<script\s+language\s*=\s*["\']?\s*php\s*["\']?\s*>)|(\?>)|(%>)|(<\/script>)#i', array($this, - 'quote'), $_attr['code']); - $compiler->parser->current_buffer->append_subtree(new Smarty_Internal_ParseTree_Text($compiler->parser, $output)); - return ''; - } elseif ($compiler->php_handling == Smarty::PHP_PASSTHRU || $_attr['type'] == 'unmatched') { - $compiler->tag_nocache = true; - $save = $compiler->template->has_nocache_code; - $output = addcslashes($_attr['code'], "'\\"); - $compiler->parser->current_buffer->append_subtree(new Smarty_Internal_ParseTree_Tag($compiler->parser, $compiler->processNocacheCode("<?php echo '" . $output . "';?>", $compiler, true))); - $compiler->template->has_nocache_code = $save; - return ''; - } elseif ($compiler->php_handling == Smarty::PHP_ALLOW) { - if (!($compiler->smarty instanceof SmartyBC)) { - $compiler->trigger_template_error('$smarty->php_handling PHP_ALLOW not allowed. Use SmartyBC to enable it', $compiler->lex->taglineno); - } - $compiler->has_code = true; - return $_attr['code']; - } else { - $compiler->trigger_template_error('Illegal $smarty->php_handling value', $compiler->lex->taglineno); - } - } else { - $compiler->has_code = true; - if (!($compiler->smarty instanceof SmartyBC)) { - $compiler->trigger_template_error('{php}[/php} tags not allowed. Use SmartyBC to enable them', $compiler->lex->taglineno); - } - $ldel = preg_quote($compiler->smarty->left_delimiter, '#'); - $rdel = preg_quote($compiler->smarty->right_delimiter, '#'); - preg_match("#^({$ldel}php\\s*)((.)*?)({$rdel})#", $_attr['code'], $match); - if (!empty($match[2])) { - if ('nocache' == trim($match[2])) { - $compiler->tag_nocache = true; - } else { - $compiler->trigger_template_error("illegal value of option flag \"{$match[2]}\"", $compiler->lex->taglineno); - } - } - return preg_replace(array("#^{$ldel}\\s*php\\s*(.)*?{$rdel}#", - "#{$ldel}\\s*/\\s*php\\s*{$rdel}$#"), array('<?php ', '?>'), $_attr['code']); - } - } - - /** - * Lexer code for PHP tags - * - * This code has been moved from lexer here fo easier debugging and maintenance - * - * @param $lex - */ - public function parsePhp($lex) { - $lex->token = Smarty_Internal_Templateparser::TP_PHP; - $close = 0; - $lex->taglineno = $lex->line; - $closeTag = '?>'; - if (strpos($lex->value, '<?xml') === 0) { - $lex->is_xml = true; - $lex->token = Smarty_Internal_Templateparser::TP_NOCACHE; - return; - } elseif (strpos($lex->value, '<?') === 0) { - $lex->phpType = 'php'; - } elseif (strpos($lex->value, '<%') === 0) { - $lex->phpType = 'asp'; - $closeTag = '%>'; - } elseif (strpos($lex->value, '%>') === 0) { - $lex->phpType = 'unmatched'; - } elseif (strpos($lex->value, '?>') === 0) { - if ($lex->is_xml) { - $lex->is_xml = false; - $lex->token = Smarty_Internal_Templateparser::TP_NOCACHE; - return; - } - $lex->phpType = 'unmatched'; - } elseif (strpos($lex->value, '<s') === 0) { - $lex->phpType = 'script'; - $closeTag = '</script>'; - } elseif (strpos($lex->value, $lex->smarty->left_delimiter) === 0) { - if ($lex->isAutoLiteral()) { - $lex->token = Smarty_Internal_Templateparser::TP_TEXT; - return; - } - $closeTag = "{$lex->smarty->left_delimiter}/php{$lex->smarty->right_delimiter}"; - if ($lex->value == $closeTag) { - $lex->compiler->trigger_template_error("unexpected closing tag '{$closeTag}'"); - } - $lex->phpType = 'tag'; - } - if ($lex->phpType == 'unmatched') { - return; - } - if (($lex->phpType == 'php' || $lex->phpType == 'asp') && ($lex->compiler->php_handling == Smarty::PHP_PASSTHRU || $lex->compiler->php_handling == Smarty::PHP_QUOTE)) { - return; - } - $start = $lex->counter + strlen($lex->value); - $body = true; - if (preg_match('~' . preg_quote($closeTag, '~') . '~i', $lex->data, $match, PREG_OFFSET_CAPTURE, $start)) { - $close = $match[0][1]; - } else { - $lex->compiler->trigger_template_error("missing closing tag '{$closeTag}'"); - } - while ($body) { - if (preg_match('~([/][*])|([/][/][^\n]*)|(\'[^\'\\\\]*(?:\\.[^\'\\\\]*)*\')|("[^"\\\\]*(?:\\.[^"\\\\]*)*")~', $lex->data, $match, PREG_OFFSET_CAPTURE, $start)) { - $value = $match[0][0]; - $from = $pos = $match[0][1]; - if ($pos > $close) { - $body = false; - } else { - $start = $pos + strlen($value); - $phpCommentStart = $value == '/*'; - if ($phpCommentStart) { - $phpCommentEnd = preg_match('~([*][/])~', $lex->data, $match, PREG_OFFSET_CAPTURE, $start); - if ($phpCommentEnd) { - $pos2 = $match[0][1]; - $start = $pos2 + strlen($match[0][0]); - } - } - while ($close > $pos && $close < $start) { - if (preg_match('~' . preg_quote($closeTag, '~') . '~i', $lex->data, $match, PREG_OFFSET_CAPTURE, $from)) { - $close = $match[0][1]; - $from = $close + strlen($match[0][0]); - } else { - $lex->compiler->trigger_template_error("missing closing tag '{$closeTag}'"); - } - } - if ($phpCommentStart && (!$phpCommentEnd || $pos2 > $close)) { - $lex->taglineno = $lex->line + substr_count(substr($lex->data, $lex->counter, $start), "\n"); - $lex->compiler->trigger_template_error("missing PHP comment closing tag '*/'"); - } - } - } else { - $body = false; - } - } - $lex->value = substr($lex->data, $lex->counter, $close + strlen($closeTag) - $lex->counter); - } - - /* - * Call back function for $php_handling = PHP_QUOTE - * - */ - private function quote($match) { - return htmlspecialchars($match[0], ENT_QUOTES); - } -} diff --git a/library/smarty/libs/sysplugins/smarty_internal_compile_private_print_expression.php b/library/smarty/libs/sysplugins/smarty_internal_compile_private_print_expression.php deleted file mode 100644 --- a/library/smarty/libs/sysplugins/smarty_internal_compile_private_print_expression.php +++ /dev/null @@ -1,148 +0,0 @@ -<?php -/** - * Smarty Internal Plugin Compile Print Expression - * Compiles any tag which will output an expression or variable - * - * @package Smarty - * @subpackage Compiler - * @author Uwe Tews - */ - -/** - * Smarty Internal Plugin Compile Print Expression Class - * - * @package Smarty - * @subpackage Compiler - */ -class Smarty_Internal_Compile_Private_Print_Expression extends Smarty_Internal_CompileBase { - /** - * Attribute definition: Overwrites base class. - * - * @var array - * @see Smarty_Internal_CompileBase - */ - public $optional_attributes = array('assign'); - /** - * Attribute definition: Overwrites base class. - * - * @var array - * @see Smarty_Internal_CompileBase - */ - public $option_flags = array('nocache', 'nofilter'); - - /** - * Compiles code for generating output from any expression - * - * @param array $args array with attributes from parser - * @param object $compiler compiler object - * @param array $parameter array with compilation parameter - * - * @throws SmartyException - * @return string compiled code - */ - public function compile($args, $compiler, $parameter) { - // check and get attributes - $_attr = $this->getAttributes($compiler, $args); - // nocache option - if ($_attr['nocache'] === true) { - $compiler->tag_nocache = true; - } - if (isset($_attr['assign'])) { - // assign output to variable - $output = "<?php \$_smarty_tpl->assign({$_attr['assign']},{$parameter['value']});?>"; - } else { - // display value - $output = $parameter['value']; - // tag modifier - if (!empty($parameter['modifierlist'])) { - $output = $compiler->compileTag('private_modifier', array(), array('modifierlist' => $parameter['modifierlist'], 'value' => $output)); - } - if (!$_attr['nofilter']) { - // default modifier - if (!empty($compiler->smarty->default_modifiers)) { - if (empty($compiler->default_modifier_list)) { - $modifierlist = array(); - foreach ($compiler->smarty->default_modifiers as $key => $single_default_modifier) { - preg_match_all('/(\'[^\'\\\\]*(?:\\\\.[^\'\\\\]*)*\'|"[^"\\\\]*(?:\\\\.[^"\\\\]*)*"|:|[^:]+)/', $single_default_modifier, $mod_array); - for ($i = 0, $count = count($mod_array[0]); $i < $count; $i++) { - if ($mod_array[0][$i] != ':') { - $modifierlist[$key][] = $mod_array[0][$i]; - } - } - } - $compiler->default_modifier_list = $modifierlist; - } - $output = $compiler->compileTag('private_modifier', array(), array('modifierlist' => $compiler->default_modifier_list, 'value' => $output)); - } - // autoescape html - if ($compiler->template->smarty->escape_html) { - $output = "htmlspecialchars({$output}, ENT_QUOTES, '" . addslashes(Smarty::$_CHARSET) . "')"; - } - // loop over registered filters - if (!empty($compiler->template->smarty->registered_filters[Smarty::FILTER_VARIABLE])) { - foreach ($compiler->template->smarty->registered_filters[Smarty::FILTER_VARIABLE] as $key => $function) { - if (!is_array($function)) { - $output = "{$function}({$output},\$_smarty_tpl)"; - } elseif (is_object($function[0])) { - $output = "\$_smarty_tpl->smarty->registered_filters[Smarty::FILTER_VARIABLE]['{$key}'][0]->{$function[1]}({$output},\$_smarty_tpl)"; - } else { - $output = "{$function[0]}::{$function[1]}({$output},\$_smarty_tpl)"; - } - } - } - // auto loaded filters - if (isset($compiler->smarty->autoload_filters[Smarty::FILTER_VARIABLE])) { - foreach ((array)$compiler->template->smarty->autoload_filters[Smarty::FILTER_VARIABLE] as $name) { - $result = $this->compile_output_filter($compiler, $name, $output); - if ($result !== false) { - $output = $result; - } else { - // not found, throw exception - throw new SmartyException("Unable to load filter '{$name}'"); - } - } - } - if (isset($compiler->template->variable_filters)) { - foreach ($compiler->template->variable_filters as $filter) { - if (count($filter) == 1 && ($result = $this->compile_output_filter($compiler, $filter[0], $output)) !== false) { - $output = $result; - } else { - $output = $compiler->compileTag('private_modifier', array(), array('modifierlist' => array($filter), 'value' => $output)); - } - } - } - } - - $compiler->has_output = true; - $output = "<?php echo {$output};?>"; - } - - return $output; - } - - /** - * @param object $compiler compiler object - * @param string $name name of variable filter - * @param string $output embedded output - * - * @return string - */ - private function compile_output_filter($compiler, $name, $output) { - $plugin_name = "smarty_variablefilter_{$name}"; - $path = $compiler->smarty->loadPlugin($plugin_name, false); - if ($path) { - if ($compiler->template->caching) { - $compiler->template->required_plugins['nocache'][$name][Smarty::FILTER_VARIABLE]['file'] = $path; - $compiler->template->required_plugins['nocache'][$name][Smarty::FILTER_VARIABLE]['function'] = $plugin_name; - } else { - $compiler->template->required_plugins['compiled'][$name][Smarty::FILTER_VARIABLE]['file'] = $path; - $compiler->template->required_plugins['compiled'][$name][Smarty::FILTER_VARIABLE]['function'] = $plugin_name; - } - } else { - // not found - return false; - } - - return "{$plugin_name}({$output},\$_smarty_tpl)"; - } -} diff --git a/library/smarty/libs/sysplugins/smarty_internal_compile_private_registered_block.php b/library/smarty/libs/sysplugins/smarty_internal_compile_private_registered_block.php deleted file mode 100644 --- a/library/smarty/libs/sysplugins/smarty_internal_compile_private_registered_block.php +++ /dev/null @@ -1,109 +0,0 @@ -<?php -/** - * Smarty Internal Plugin Compile Registered Block - * Compiles code for the execution of a registered block function - * - * @package Smarty - * @subpackage Compiler - * @author Uwe Tews - */ - -/** - * Smarty Internal Plugin Compile Registered Block Class - * - * @package Smarty - * @subpackage Compiler - */ -class Smarty_Internal_Compile_Private_Registered_Block extends Smarty_Internal_CompileBase { - /** - * Attribute definition: Overwrites base class. - * - * @var array - * @see Smarty_Internal_CompileBase - */ - public $optional_attributes = array('_any'); - - /** - * Compiles code for the execution of a block function - * - * @param array $args array with attributes from parser - * @param object $compiler compiler object - * @param array $parameter array with compilation parameter - * @param string $tag name of block function - * - * @return string compiled code - */ - public function compile($args, $compiler, $parameter, $tag) { - if (!isset($tag[5]) || substr($tag, -5) != 'close') { - // opening tag of block plugin - // check and get attributes - $_attr = $this->getAttributes($compiler, $args); - if ($_attr['nocache']) { - $compiler->tag_nocache = true; - } - unset($_attr['nocache']); - if (isset($compiler->smarty->registered_plugins[Smarty::PLUGIN_BLOCK][$tag])) { - $tag_info = $compiler->smarty->registered_plugins[Smarty::PLUGIN_BLOCK][$tag]; - } else { - $tag_info = $compiler->default_handler_plugins[Smarty::PLUGIN_BLOCK][$tag]; - } - // convert attributes into parameter array string - $_paramsArray = array(); - foreach ($_attr as $_key => $_value) { - if (is_int($_key)) { - $_paramsArray[] = "$_key=>$_value"; - } elseif ($compiler->template->caching && in_array($_key, $tag_info[2])) { - $_value = str_replace("'", "^#^", $_value); - $_paramsArray[] = "'$_key'=>^#^.var_export($_value,true).^#^"; - } else { - $_paramsArray[] = "'$_key'=>$_value"; - } - } - $_params = 'array(' . implode(",", $_paramsArray) . ')'; - - $this->openTag($compiler, $tag, array($_params, $compiler->nocache)); - // maybe nocache because of nocache variables or nocache plugin - $compiler->nocache = !$tag_info[1] | $compiler->nocache | $compiler->tag_nocache; - $function = $tag_info[0]; - // compile code - if (!is_array($function)) { - $output = "<?php \$_smarty_tpl->smarty->_tag_stack[] = array('{$tag}', {$_params}); \$_block_repeat=true; echo {$function}({$_params}, null, \$_smarty_tpl, \$_block_repeat);while (\$_block_repeat) { ob_start();?>"; - } elseif (is_object($function[0])) { - $output = "<?php \$_smarty_tpl->smarty->_tag_stack[] = array('{$tag}', {$_params}); \$_block_repeat=true; echo \$_smarty_tpl->smarty->registered_plugins['block']['{$tag}'][0][0]->{$function[1]}({$_params}, null, \$_smarty_tpl, \$_block_repeat);while (\$_block_repeat) { ob_start();?>"; - } else { - $output = "<?php \$_smarty_tpl->smarty->_tag_stack[] = array('{$tag}', {$_params}); \$_block_repeat=true; echo {$function[0]}::{$function[1]}({$_params}, null, \$_smarty_tpl, \$_block_repeat);while (\$_block_repeat) { ob_start();?>"; - } - } else { - // must endblock be nocache? - if ($compiler->nocache) { - $compiler->tag_nocache = true; - } - $base_tag = substr($tag, 0, -5); - // closing tag of block plugin, restore nocache - list($_params, $compiler->nocache) = $this->closeTag($compiler, $base_tag); - // This tag does create output - $compiler->has_output = true; - if (isset($compiler->smarty->registered_plugins[Smarty::PLUGIN_BLOCK][$base_tag])) { - $function = $compiler->smarty->registered_plugins[Smarty::PLUGIN_BLOCK][$base_tag][0]; - } else { - $function = $compiler->default_handler_plugins[Smarty::PLUGIN_BLOCK][$base_tag][0]; - } - // compile code - if (!isset($parameter['modifier_list'])) { - $mod_pre = $mod_post = ''; - } else { - $mod_pre = ' ob_start(); '; - $mod_post = 'echo ' . $compiler->compileTag('private_modifier', array(), array('modifierlist' => $parameter['modifier_list'], 'value' => 'ob_get_clean()')) . ';'; - } - if (!is_array($function)) { - $output = "<?php \$_block_content = ob_get_clean(); \$_block_repeat=false;" . $mod_pre . " echo {$function}({$_params}, \$_block_content, \$_smarty_tpl, \$_block_repeat);" . $mod_post . " } array_pop(\$_smarty_tpl->smarty->_tag_stack);?>"; - } elseif (is_object($function[0])) { - $output = "<?php \$_block_content = ob_get_clean(); \$_block_repeat=false;" . $mod_pre . " echo \$_smarty_tpl->smarty->registered_plugins['block']['{$base_tag}'][0][0]->{$function[1]}({$_params}, \$_block_content, \$_smarty_tpl, \$_block_repeat); " . $mod_post . "} array_pop(\$_smarty_tpl->smarty->_tag_stack);?>"; - } else { - $output = "<?php \$_block_content = ob_get_clean(); \$_block_repeat=false;" . $mod_pre . " echo {$function[0]}::{$function[1]}({$_params}, \$_block_content, \$_smarty_tpl, \$_block_repeat); " . $mod_post . "} array_pop(\$_smarty_tpl->smarty->_tag_stack);?>"; - } - } - - return $output . "\n"; - } -} diff --git a/library/smarty/libs/sysplugins/smarty_internal_compile_private_registered_function.php b/library/smarty/libs/sysplugins/smarty_internal_compile_private_registered_function.php deleted file mode 100644 --- a/library/smarty/libs/sysplugins/smarty_internal_compile_private_registered_function.php +++ /dev/null @@ -1,77 +0,0 @@ -<?php -/** - * Smarty Internal Plugin Compile Registered Function - * Compiles code for the execution of a registered function - * - * @package Smarty - * @subpackage Compiler - * @author Uwe Tews - */ - -/** - * Smarty Internal Plugin Compile Registered Function Class - * - * @package Smarty - * @subpackage Compiler - */ -class Smarty_Internal_Compile_Private_Registered_Function extends Smarty_Internal_CompileBase { - /** - * Attribute definition: Overwrites base class. - * - * @var array - * @see Smarty_Internal_CompileBase - */ - public $optional_attributes = array('_any'); - - /** - * Compiles code for the execution of a registered function - * - * @param array $args array with attributes from parser - * @param object $compiler compiler object - * @param array $parameter array with compilation parameter - * @param string $tag name of function - * - * @return string compiled code - */ - public function compile($args, $compiler, $parameter, $tag) { - // This tag does create output - $compiler->has_output = true; - // check and get attributes - $_attr = $this->getAttributes($compiler, $args); - if ($_attr['nocache']) { - $compiler->tag_nocache = true; - } - unset($_attr['nocache']); - if (isset($compiler->smarty->registered_plugins[Smarty::PLUGIN_FUNCTION][$tag])) { - $tag_info = $compiler->smarty->registered_plugins[Smarty::PLUGIN_FUNCTION][$tag]; - } else { - $tag_info = $compiler->default_handler_plugins[Smarty::PLUGIN_FUNCTION][$tag]; - } - // not cachable? - $compiler->tag_nocache = $compiler->tag_nocache || !$tag_info[1]; - // convert attributes into parameter array string - $_paramsArray = array(); - foreach ($_attr as $_key => $_value) { - if (is_int($_key)) { - $_paramsArray[] = "$_key=>$_value"; - } elseif ($compiler->template->caching && in_array($_key, $tag_info[2])) { - $_value = str_replace("'", "^#^", $_value); - $_paramsArray[] = "'$_key'=>^#^.var_export($_value,true).^#^"; - } else { - $_paramsArray[] = "'$_key'=>$_value"; - } - } - $_params = 'array(' . implode(",", $_paramsArray) . ')'; - $function = $tag_info[0]; - // compile code - if (!is_array($function)) { - $output = "<?php echo {$function}({$_params},\$_smarty_tpl);?>\n"; - } elseif (is_object($function[0])) { - $output = "<?php echo \$_smarty_tpl->smarty->registered_plugins[Smarty::PLUGIN_FUNCTION]['{$tag}'][0][0]->{$function[1]}({$_params},\$_smarty_tpl);?>\n"; - } else { - $output = "<?php echo {$function[0]}::{$function[1]}({$_params},\$_smarty_tpl);?>\n"; - } - - return $output; - } -} diff --git a/library/smarty/libs/sysplugins/smarty_internal_compile_private_special_variable.php b/library/smarty/libs/sysplugins/smarty_internal_compile_private_special_variable.php deleted file mode 100644 --- a/library/smarty/libs/sysplugins/smarty_internal_compile_private_special_variable.php +++ /dev/null @@ -1,118 +0,0 @@ -<?php -/** - * Smarty Internal Plugin Compile Special Smarty Variable - * Compiles the special $smarty variables - * - * @package Smarty - * @subpackage Compiler - * @author Uwe Tews - */ - -/** - * Smarty Internal Plugin Compile special Smarty Variable Class - * - * @package Smarty - * @subpackage Compiler - */ -class Smarty_Internal_Compile_Private_Special_Variable extends Smarty_Internal_CompileBase { - /** - * Compiles code for the special $smarty variables - * - * @param array $args array with attributes from parser - * @param object $compiler compiler object - * @param $parameter - * - * @return string compiled code - */ - public function compile($args, $compiler, $parameter) { - $_index = preg_split("/\]\[/", substr($parameter, 1, strlen($parameter) - 2)); - $compiled_ref = ' '; - $variable = trim($_index[0], "'"); - if (!isset($compiler->smarty->security_policy) || $compiler->smarty->security_policy->isTrustedSpecialSmartyVar($variable, $compiler)) { - switch ($variable) { - case 'foreach': - $name = trim($_index[1], "'"); - $foreachVar = "'__foreach_{$name}'"; - return "(isset(\$_smarty_tpl->tpl_vars[$foreachVar]->value[{$_index[2]}]) ? \$_smarty_tpl->tpl_vars[$foreachVar]->value[{$_index[2]}] : null)"; - case 'section': - return "\$_smarty_tpl->getVariable('smarty')->value$parameter"; - case 'capture': - return "Smarty::\$_smarty_vars$parameter"; - case 'now': - return 'time()'; - case 'cookies': - if (isset($compiler->smarty->security_policy) && !$compiler->smarty->security_policy->allow_super_globals) { - $compiler->trigger_template_error("(secure mode) super globals not permitted"); - break; - } - $compiled_ref = '$_COOKIE'; - break; - - case 'get': - case 'post': - case 'env': - case 'server': - case 'session': - case 'request': - if (isset($compiler->smarty->security_policy) && !$compiler->smarty->security_policy->allow_super_globals) { - $compiler->trigger_template_error("(secure mode) super globals not permitted"); - break; - } - $compiled_ref = '$_' . strtoupper($variable); - break; - - case 'template': - return 'basename($_smarty_tpl->source->filepath)'; - - case 'template_object': - return '$_smarty_tpl'; - - case 'current_dir': - return 'dirname($_smarty_tpl->source->filepath)'; - - case 'version': - $_version = Smarty::SMARTY_VERSION; - - return "'$_version'"; - - case 'const': - if (isset($compiler->smarty->security_policy) && !$compiler->smarty->security_policy->allow_constants) { - $compiler->trigger_template_error("(secure mode) constants not permitted"); - break; - } - if (strpos($_index[1], '$') === false && strpos($_index[1], '\'') === false) { - return "@constant('{$_index[1]}')"; - } else { - return "@constant({$_index[1]})"; - } - - case 'config': - if (isset($_index[2])) { - return "(is_array(\$tmp = \$_smarty_tpl->getConfigVariable($_index[1])) ? \$tmp[$_index[2]] : null)"; - } else { - return "\$_smarty_tpl->getConfigVariable($_index[1])"; - } - case 'ldelim': - $_ldelim = $compiler->smarty->left_delimiter; - - return "'$_ldelim'"; - - case 'rdelim': - $_rdelim = $compiler->smarty->right_delimiter; - - return "'$_rdelim'"; - - default: - $compiler->trigger_template_error('$smarty.' . trim($_index[0], "'") . ' is invalid'); - break; - } - if (isset($_index[1])) { - array_shift($_index); - foreach ($_index as $_ind) { - $compiled_ref = $compiled_ref . "[$_ind]"; - } - } - } - return $compiled_ref; - } -} diff --git a/library/smarty/libs/sysplugins/smarty_internal_compile_rdelim.php b/library/smarty/libs/sysplugins/smarty_internal_compile_rdelim.php deleted file mode 100644 --- a/library/smarty/libs/sysplugins/smarty_internal_compile_rdelim.php +++ /dev/null @@ -1,37 +0,0 @@ -<?php -/** - * Smarty Internal Plugin Compile Rdelim - * Compiles the {rdelim} tag - * - * @package Smarty - * @subpackage Compiler - * @author Uwe Tews - */ - -/** - * Smarty Internal Plugin Compile Rdelim Class - * - * @package Smarty - * @subpackage Compiler - */ -class Smarty_Internal_Compile_Rdelim extends Smarty_Internal_CompileBase { - /** - * Compiles code for the {rdelim} tag - * This tag does output the right delimiter. - * - * @param array $args array with attributes from parser - * @param object $compiler compiler object - * - * @return string compiled code - */ - public function compile($args, $compiler) { - $_attr = $this->getAttributes($compiler, $args); - if ($_attr['nocache'] === true) { - $compiler->trigger_template_error('nocache option not allowed', $compiler->lex->taglineno); - } - // this tag does not return compiled code - $compiler->has_code = true; - - return $compiler->smarty->right_delimiter; - } -} diff --git a/library/smarty/libs/sysplugins/smarty_internal_compile_section.php b/library/smarty/libs/sysplugins/smarty_internal_compile_section.php deleted file mode 100644 --- a/library/smarty/libs/sysplugins/smarty_internal_compile_section.php +++ /dev/null @@ -1,200 +0,0 @@ -<?php -/** - * Smarty Internal Plugin Compile Section - * Compiles the {section} {sectionelse} {/section} tags - * - * @package Smarty - * @subpackage Compiler - * @author Uwe Tews - */ - -/** - * Smarty Internal Plugin Compile Section Class - * - * @package Smarty - * @subpackage Compiler - */ -class Smarty_Internal_Compile_Section extends Smarty_Internal_CompileBase { - /** - * Attribute definition: Overwrites base class. - * - * @var array - * @see Smarty_Internal_CompileBase - */ - public $required_attributes = array('name', 'loop'); - /** - * Attribute definition: Overwrites base class. - * - * @var array - * @see Smarty_Internal_CompileBase - */ - public $shorttag_order = array('name', 'loop'); - /** - * Attribute definition: Overwrites base class. - * - * @var array - * @see Smarty_Internal_CompileBase - */ - public $optional_attributes = array('start', 'step', 'max', 'show'); - - /** - * Compiles code for the {section} tag - * - * @param array $args array with attributes from parser - * @param object $compiler compiler object - * - * @return string compiled code - */ - public function compile($args, $compiler) { - // check and get attributes - $_attr = $this->getAttributes($compiler, $args); - - $this->openTag($compiler, 'section', array('section', $compiler->nocache)); - // maybe nocache because of nocache variables - $compiler->nocache = $compiler->nocache | $compiler->tag_nocache; - - $output = "<?php "; - - $section_name = $_attr['name']; - - $output .= "if (isset(\$_smarty_tpl->tpl_vars['smarty']->value['section'][$section_name])) unset(\$_smarty_tpl->tpl_vars['smarty']->value['section'][$section_name]);\n"; - $section_props = "\$_smarty_tpl->tpl_vars['smarty']->value['section'][$section_name]"; - - foreach ($_attr as $attr_name => $attr_value) { - switch ($attr_name) { - case 'loop': - $output .= "{$section_props}['loop'] = is_array(\$_loop=$attr_value) ? count(\$_loop) : max(0, (int) \$_loop); unset(\$_loop);\n"; - break; - - case 'show': - if (is_bool($attr_value)) { - $show_attr_value = $attr_value ? 'true' : 'false'; - } else { - $show_attr_value = "(bool) $attr_value"; - } - $output .= "{$section_props}['show'] = $show_attr_value;\n"; - break; - - case 'name': - $output .= "{$section_props}['$attr_name'] = $attr_value;\n"; - break; - - case 'max': - case 'start': - $output .= "{$section_props}['$attr_name'] = (int) $attr_value;\n"; - break; - - case 'step': - $output .= "{$section_props}['$attr_name'] = ((int) $attr_value) == 0 ? 1 : (int) $attr_value;\n"; - break; - } - } - - if (!isset($_attr['show'])) { - $output .= "{$section_props}['show'] = true;\n"; - } - - if (!isset($_attr['loop'])) { - $output .= "{$section_props}['loop'] = 1;\n"; - } - - if (!isset($_attr['max'])) { - $output .= "{$section_props}['max'] = {$section_props}['loop'];\n"; - } else { - $output .= "if ({$section_props}['max'] < 0)\n" . " {$section_props}['max'] = {$section_props}['loop'];\n"; - } - - if (!isset($_attr['step'])) { - $output .= "{$section_props}['step'] = 1;\n"; - } - - if (!isset($_attr['start'])) { - $output .= "{$section_props}['start'] = {$section_props}['step'] > 0 ? 0 : {$section_props}['loop']-1;\n"; - } else { - $output .= "if ({$section_props}['start'] < 0)\n" . " {$section_props}['start'] = max({$section_props}['step'] > 0 ? 0 : -1, {$section_props}['loop'] + {$section_props}['start']);\n" . "else\n" . " {$section_props}['start'] = min({$section_props}['start'], {$section_props}['step'] > 0 ? {$section_props}['loop'] : {$section_props}['loop']-1);\n"; - } - - $output .= "if ({$section_props}['show']) {\n"; - if (!isset($_attr['start']) && !isset($_attr['step']) && !isset($_attr['max'])) { - $output .= " {$section_props}['total'] = {$section_props}['loop'];\n"; - } else { - $output .= " {$section_props}['total'] = min(ceil(({$section_props}['step'] > 0 ? {$section_props}['loop'] - {$section_props}['start'] : {$section_props}['start']+1)/abs({$section_props}['step'])), {$section_props}['max']);\n"; - } - $output .= " if ({$section_props}['total'] == 0)\n" . " {$section_props}['show'] = false;\n" . "} else\n" . " {$section_props}['total'] = 0;\n"; - - $output .= "if ({$section_props}['show']):\n"; - $output .= " - for ({$section_props}['index'] = {$section_props}['start'], {$section_props}['iteration'] = 1; - {$section_props}['iteration'] <= {$section_props}['total']; - {$section_props}['index'] += {$section_props}['step'], {$section_props}['iteration']++):\n"; - $output .= "{$section_props}['rownum'] = {$section_props}['iteration'];\n"; - $output .= "{$section_props}['index_prev'] = {$section_props}['index'] - {$section_props}['step'];\n"; - $output .= "{$section_props}['index_next'] = {$section_props}['index'] + {$section_props}['step'];\n"; - $output .= "{$section_props}['first'] = ({$section_props}['iteration'] == 1);\n"; - $output .= "{$section_props}['last'] = ({$section_props}['iteration'] == {$section_props}['total']);\n"; - - $output .= "?>"; - - return $output; - } -} - -/** - * Smarty Internal Plugin Compile Sectionelse Class - * - * @package Smarty - * @subpackage Compiler - */ -class Smarty_Internal_Compile_Sectionelse extends Smarty_Internal_CompileBase { - /** - * Compiles code for the {sectionelse} tag - * - * @param array $args array with attributes from parser - * @param object $compiler compiler object - * - * @return string compiled code - */ - public function compile($args, $compiler) { - // check and get attributes - $_attr = $this->getAttributes($compiler, $args); - - list($openTag, $nocache) = $this->closeTag($compiler, array('section')); - $this->openTag($compiler, 'sectionelse', array('sectionelse', $nocache)); - - return "<?php endfor; else: ?>"; - } -} - -/** - * Smarty Internal Plugin Compile Sectionclose Class - * - * @package Smarty - * @subpackage Compiler - */ -class Smarty_Internal_Compile_Sectionclose extends Smarty_Internal_CompileBase { - /** - * Compiles code for the {/section} tag - * - * @param array $args array with attributes from parser - * @param object $compiler compiler object - * - * @return string compiled code - */ - public function compile($args, $compiler) { - // check and get attributes - $_attr = $this->getAttributes($compiler, $args); - - // must endblock be nocache? - if ($compiler->nocache) { - $compiler->tag_nocache = true; - } - - list($openTag, $compiler->nocache) = $this->closeTag($compiler, array('section', 'sectionelse')); - - if ($openTag == 'sectionelse') { - return "<?php endif; ?>"; - } else { - return "<?php endfor; endif; ?>"; - } - } -} diff --git a/library/smarty/libs/sysplugins/smarty_internal_compile_setfilter.php b/library/smarty/libs/sysplugins/smarty_internal_compile_setfilter.php deleted file mode 100644 --- a/library/smarty/libs/sysplugins/smarty_internal_compile_setfilter.php +++ /dev/null @@ -1,66 +0,0 @@ -<?php -/** - * Smarty Internal Plugin Compile Setfilter - * Compiles code for setfilter tag - * - * @package Smarty - * @subpackage Compiler - * @author Uwe Tews - */ - -/** - * Smarty Internal Plugin Compile Setfilter Class - * - * @package Smarty - * @subpackage Compiler - */ -class Smarty_Internal_Compile_Setfilter extends Smarty_Internal_CompileBase { - /** - * Compiles code for setfilter tag - * - * @param array $args array with attributes from parser - * @param object $compiler compiler object - * @param array $parameter array with compilation parameter - * - * @return string compiled code - */ - public function compile($args, $compiler, $parameter) { - $compiler->variable_filter_stack[] = $compiler->template->variable_filters; - $compiler->template->variable_filters = $parameter['modifier_list']; - // this tag does not return compiled code - $compiler->has_code = false; - - return true; - } -} - -/** - * Smarty Internal Plugin Compile Setfilterclose Class - * - * @package Smarty - * @subpackage Compiler - */ -class Smarty_Internal_Compile_Setfilterclose extends Smarty_Internal_CompileBase { - /** - * Compiles code for the {/setfilter} tag - * This tag does not generate compiled output. It resets variable filter. - * - * @param array $args array with attributes from parser - * @param object $compiler compiler object - * - * @return string compiled code - */ - public function compile($args, $compiler) { - $_attr = $this->getAttributes($compiler, $args); - // reset variable filter to previous state - if (count($compiler->variable_filter_stack)) { - $compiler->template->variable_filters = array_pop($compiler->variable_filter_stack); - } else { - $compiler->template->variable_filters = array(); - } - // this tag does not return compiled code - $compiler->has_code = false; - - return true; - } -} diff --git a/library/smarty/libs/sysplugins/smarty_internal_compile_while.php b/library/smarty/libs/sysplugins/smarty_internal_compile_while.php deleted file mode 100644 --- a/library/smarty/libs/sysplugins/smarty_internal_compile_while.php +++ /dev/null @@ -1,94 +0,0 @@ -<?php -/** - * Smarty Internal Plugin Compile While - * Compiles the {while} tag - * - * @package Smarty - * @subpackage Compiler - * @author Uwe Tews - */ - -/** - * Smarty Internal Plugin Compile While Class - * - * @package Smarty - * @subpackage Compiler - */ -class Smarty_Internal_Compile_While extends Smarty_Internal_CompileBase { - /** - * Compiles code for the {while} tag - * - * @param array $args array with attributes from parser - * @param object $compiler compiler object - * @param array $parameter array with compilation parameter - * - * @return string compiled code - */ - public function compile($args, $compiler, $parameter) { - // check and get attributes - $_attr = $this->getAttributes($compiler, $args); - $this->openTag($compiler, 'while', $compiler->nocache); - - if (!array_key_exists("if condition", $parameter)) { - $compiler->trigger_template_error("missing while condition", $compiler->lex->taglineno); - } - - // maybe nocache because of nocache variables - $compiler->nocache = $compiler->nocache | $compiler->tag_nocache; - if (is_array($parameter['if condition'])) { - if ($compiler->nocache) { - $_nocache = ',true'; - // create nocache var to make it know for further compiling - if (is_array($parameter['if condition']['var'])) { - $var = trim($parameter['if condition']['var']['var'], "'"); - } else { - $var = trim($parameter['if condition']['var'], "'"); - } - if (isset($compiler->template->tpl_vars[$var])) { - $compiler->template->tpl_vars[$var]->nocache = true; - } else { - $compiler->template->tpl_vars[$var] = new Smarty_Variable(null, true); - } - } else { - $_nocache = ''; - } - if (is_array($parameter['if condition']['var'])) { - $_output = "<?php if (!isset(\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var']['var'] . "]) || !is_array(\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var']['var'] . "]->value)) \$_smarty_tpl->createLocalArrayVariable(" . $parameter['if condition']['var']['var'] . "$_nocache);\n"; - $_output .= "while (\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var']['var'] . "]->value" . $parameter['if condition']['var']['smarty_internal_index'] . " = " . $parameter['if condition']['value'] . ") {?>"; - } else { - $_output = "<?php if (!isset(\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var'] . "])) \$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var'] . "] = new Smarty_Variable(null{$_nocache});"; - $_output .= "while (\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var'] . "]->value = " . $parameter['if condition']['value'] . ") {?>"; - } - - return $_output; - } else { - return "<?php while ({$parameter['if condition']}) {?>"; - } - } -} - -/** - * Smarty Internal Plugin Compile Whileclose Class - * - * @package Smarty - * @subpackage Compiler - */ -class Smarty_Internal_Compile_Whileclose extends Smarty_Internal_CompileBase { - /** - * Compiles code for the {/while} tag - * - * @param array $args array with attributes from parser - * @param object $compiler compiler object - * - * @return string compiled code - */ - public function compile($args, $compiler) { - // must endblock be nocache? - if ($compiler->nocache) { - $compiler->tag_nocache = true; - } - $compiler->nocache = $this->closeTag($compiler, array('while')); - - return "<?php }?>"; - } -} diff --git a/library/smarty/libs/sysplugins/smarty_internal_compilebase.php b/library/smarty/libs/sysplugins/smarty_internal_compilebase.php deleted file mode 100644 --- a/library/smarty/libs/sysplugins/smarty_internal_compilebase.php +++ /dev/null @@ -1,170 +0,0 @@ -<?php -/** - * Smarty Internal Plugin CompileBase - * - * @package Smarty - * @subpackage Compiler - * @author Uwe Tews - */ - -/** - * This class does extend all internal compile plugins - * - * @package Smarty - * @subpackage Compiler - */ -abstract class Smarty_Internal_CompileBase { - /** - * Array of names of required attribute required by tag - * - * @var array - */ - public $required_attributes = array(); - /** - * Array of names of optional attribute required by tag - * use array('_any') if there is no restriction of attributes names - * - * @var array - */ - public $optional_attributes = array(); - /** - * Shorttag attribute order defined by its names - * - * @var array - */ - public $shorttag_order = array(); - /** - * Array of names of valid option flags - * - * @var array - */ - public $option_flags = array('nocache'); - - /** - * This function checks if the attributes passed are valid - * The attributes passed for the tag to compile are checked against the list of required and - * optional attributes. Required attributes must be present. Optional attributes are check against - * the corresponding list. The keyword '_any' specifies that any attribute will be accepted - * as valid - * - * @param object $compiler compiler object - * @param array $attributes attributes applied to the tag - * - * @return array of mapped attributes for further processing - */ - public function getAttributes($compiler, $attributes) { - $_indexed_attr = array(); - // loop over attributes - foreach ($attributes as $key => $mixed) { - // shorthand ? - if (!is_array($mixed)) { - // option flag ? - if (in_array(trim($mixed, '\'"'), $this->option_flags)) { - $_indexed_attr[trim($mixed, '\'"')] = true; - // shorthand attribute ? - } elseif (isset($this->shorttag_order[$key])) { - $_indexed_attr[$this->shorttag_order[$key]] = $mixed; - } else { - // too many shorthands - $compiler->trigger_template_error('too many shorthand attributes', $compiler->lex->taglineno); - } - // named attribute - } else { - $kv = each($mixed); - // option flag? - if (in_array($kv['key'], $this->option_flags)) { - if (is_bool($kv['value'])) { - $_indexed_attr[$kv['key']] = $kv['value']; - } elseif (is_string($kv['value']) && in_array(trim($kv['value'], '\'"'), array('true', 'false'))) { - if (trim($kv['value']) == 'true') { - $_indexed_attr[$kv['key']] = true; - } else { - $_indexed_attr[$kv['key']] = false; - } - } elseif (is_numeric($kv['value']) && in_array($kv['value'], array(0, 1))) { - if ($kv['value'] == 1) { - $_indexed_attr[$kv['key']] = true; - } else { - $_indexed_attr[$kv['key']] = false; - } - } else { - $compiler->trigger_template_error("illegal value of option flag \"{$kv['key']}\"", $compiler->lex->taglineno); - } - // must be named attribute - } else { - reset($mixed); - $_indexed_attr[key($mixed)] = $mixed[key($mixed)]; - } - } - } - // check if all required attributes present - foreach ($this->required_attributes as $attr) { - if (!array_key_exists($attr, $_indexed_attr)) { - $compiler->trigger_template_error("missing \"" . $attr . "\" attribute", $compiler->lex->taglineno); - } - } - // check for not allowed attributes - if ($this->optional_attributes != array('_any')) { - $tmp_array = array_merge($this->required_attributes, $this->optional_attributes, $this->option_flags); - foreach ($_indexed_attr as $key => $dummy) { - if (!in_array($key, $tmp_array) && $key !== 0) { - $compiler->trigger_template_error("unexpected \"" . $key . "\" attribute", $compiler->lex->taglineno); - } - } - } - // default 'false' for all option flags not set - foreach ($this->option_flags as $flag) { - if (!isset($_indexed_attr[$flag])) { - $_indexed_attr[$flag] = false; - } - } - - return $_indexed_attr; - } - - /** - * Push opening tag name on stack - * Optionally additional data can be saved on stack - * - * @param object $compiler compiler object - * @param string $openTag the opening tag's name - * @param mixed $data optional data saved - */ - public function openTag($compiler, $openTag, $data = null) { - array_push($compiler->_tag_stack, array($openTag, $data)); - } - - /** - * Pop closing tag - * Raise an error if this stack-top doesn't match with expected opening tags - * - * @param object $compiler compiler object - * @param array|string $expectedTag the expected opening tag names - * - * @return mixed any type the opening tag's name or saved data - */ - public function closeTag($compiler, $expectedTag) { - if (count($compiler->_tag_stack) > 0) { - // get stacked info - list($_openTag, $_data) = array_pop($compiler->_tag_stack); - // open tag must match with the expected ones - if (in_array($_openTag, (array)$expectedTag)) { - if (is_null($_data)) { - // return opening tag - return $_openTag; - } else { - // return restored data - return $_data; - } - } - // wrong nesting of tags - $compiler->trigger_template_error("unclosed {$compiler->smarty->left_delimiter}" . $_openTag . "{$compiler->smarty->right_delimiter} tag"); - - return; - } - // wrong nesting of tags - $compiler->trigger_template_error("unexpected closing tag", $compiler->lex->taglineno); - - return; - } -} diff --git a/library/smarty/libs/sysplugins/smarty_internal_config_file_compiler.php b/library/smarty/libs/sysplugins/smarty_internal_config_file_compiler.php deleted file mode 100644 --- a/library/smarty/libs/sysplugins/smarty_internal_config_file_compiler.php +++ /dev/null @@ -1,186 +0,0 @@ -<?php -/** - * Smarty Internal Plugin Config File Compiler - * This is the config file compiler class. It calls the lexer and parser to - * perform the compiling. - * - * @package Smarty - * @subpackage Config - * @author Uwe Tews - */ - -/** - * Main config file compiler class - * - * @package Smarty - * @subpackage Config - */ -class Smarty_Internal_Config_File_Compiler { - /** - * Lexer class name - * - * @var string - */ - public $lexer_class; - - /** - * Parser class name - * - * @var string - */ - public $parser_class; - /** - * Lexer object - * - * @var object - */ - public $lex; - - /** - * Parser object - * - * @var object - */ - public $parser; - - /** - * Smarty object - * - * @var Smarty object - */ - public $smarty; - - /** - * Smarty object - * - * @var Smarty_Internal_Template object - */ - public $template; - - /** - * Compiled config data sections and variables - * - * @var array - */ - public $config_data = array(); - - /** - * compiled config data must always be written - * - * @var bool - */ - public $write_compiled_code = true; - - /** - * Initialize compiler - * - * @param string $lexer_class class name - * @param string $parser_class class name - * @param Smarty $smarty global instance - */ - public function __construct($lexer_class, $parser_class, Smarty $smarty) { - $this->smarty = $smarty; - // get required plugins - $this->lexer_class = $lexer_class; - $this->parser_class = $parser_class; - $this->smarty = $smarty; - $this->config_data['sections'] = array(); - $this->config_data['vars'] = array(); - } - - /** - * Method to compile Smarty config source. - * - * @param Smarty_Internal_Template $template - * - * @return bool true if compiling succeeded, false if it failed - */ - public function compileTemplate(Smarty_Internal_Template $template) { - $this->template = $template; - $this->template->properties['file_dependency'][$this->template->source->uid] = array($this->template->source->name, $this->template->source->timestamp, $this->template->source->type); - // on empty config just return - if ($template->source->content == '') { - return true; - } - if ($this->smarty->debugging) { - Smarty_Internal_Debug::start_compile($this->template); - } - // init the lexer/parser to compile the config file - $lex = new $this->lexer_class(str_replace(array("\r\n", "\r"), "\n", $template->source->content) . "\n", $this); - $parser = new $this->parser_class($lex, $this); - - if (function_exists('mb_internal_encoding') && ((int)ini_get('mbstring.func_overload')) & 2) { - $mbEncoding = mb_internal_encoding(); - mb_internal_encoding('ASCII'); - } else { - $mbEncoding = null; - } - - if ($this->smarty->_parserdebug) { - $parser->PrintTrace(); - } - // get tokens from lexer and parse them - while ($lex->yylex()) { - if ($this->smarty->_parserdebug) { - echo "<br>Parsing {$parser->yyTokenName[$lex->token]} Token {$lex->value} Line {$lex->line} \n"; - } - $parser->doParse($lex->token, $lex->value); - } - // finish parsing process - $parser->doParse(0, 0); - - if ($mbEncoding) { - mb_internal_encoding($mbEncoding); - } - if ($this->smarty->debugging) { - Smarty_Internal_Debug::end_compile($this->template); - } - // template header code - $template_header = "<?php /* Smarty version " . Smarty::SMARTY_VERSION . ", created on " . strftime("%Y-%m-%d %H:%M:%S") . "\n"; - $template_header .= " compiled from \"" . $this->template->source->filepath . "\" */ ?>\n"; - - $code = '<?php Smarty_Internal_Extension_Config::loadConfigVars($_smarty_tpl, ' . var_export($this->config_data, true) . '); ?>'; - return $template_header . Smarty_Internal_Extension_CodeFrame::create($this->template, $code); - } - - /** - * display compiler error messages without dying - * If parameter $args is empty it is a parser detected syntax error. - * In this case the parser is called to obtain information about expected tokens. - * If parameter $args contains a string this is used as error message - * - * @param string $args individual error message or null - * - * @throws SmartyCompilerException - */ - public function trigger_config_file_error($args = null) { - $this->lex = Smarty_Internal_Configfilelexer::instance(); - $this->parser = Smarty_Internal_Configfileparser::instance(); - // get config source line which has error - $line = $this->lex->line; - if (isset($args)) { - // $line--; - } - $match = preg_split("/\n/", $this->lex->data); - $error_text = "Syntax error in config file '{$this->template->source->filepath}' on line {$line} '{$match[$line - 1]}' "; - if (isset($args)) { - // individual error message - $error_text .= $args; - } else { - // expected token from parser - foreach ($this->parser->yy_get_expected_tokens($this->parser->yymajor) as $token) { - $exp_token = $this->parser->yyTokenName[$token]; - if (isset($this->lex->smarty_token_names[$exp_token])) { - // token type from lexer - $expect[] = '"' . $this->lex->smarty_token_names[$exp_token] . '"'; - } else { - // otherwise internal token name - $expect[] = $this->parser->yyTokenName[$token]; - } - } - // output parser error message - $error_text .= ' - Unexpected "' . $this->lex->value . '", expected one of: ' . implode(' , ', $expect); - } - throw new SmartyCompilerException($error_text); - } -} diff --git a/library/smarty/libs/sysplugins/smarty_internal_configfilelexer.php b/library/smarty/libs/sysplugins/smarty_internal_configfilelexer.php deleted file mode 100644 --- a/library/smarty/libs/sysplugins/smarty_internal_configfilelexer.php +++ /dev/null @@ -1,660 +0,0 @@ -<?php -/** - * Smarty Internal Plugin Configfilelexer - * - * This is the lexer to break the config file source into tokens - * - * @package Smarty - * @subpackage Config - * @author Uwe Tews - */ - -/** - * Smarty_Internal_Configfilelexer - * - * This is the config file lexer. - * It is generated from the smarty_internal_configfilelexer.plex file - * - * @package Smarty - * @subpackage Compiler - * @author Uwe Tews - */ -class Smarty_Internal_Configfilelexer { - /** - * Source - * - * @var string - */ - public $data; - - /** - * byte counter - * - * @var int - */ - public $counter; - - /** - * token number - * - * @var int - */ - public $token; - - /** - * token value - * - * @var string - */ - public $value; - - /** - * current line - * - * @var int - */ - public $line; - - /** - * state number - * - * @var int - */ - public $state = 1; - - /** - * Smarty object - * - * @var Smarty - */ - public $smarty = null; - - /** - * compiler object - * - * @var Smarty_Internal_Config_File_Compiler - */ - private $compiler = null; - - /** - * copy of config_booleanize - * - * @var bool - */ - private $configBooleanize = false; - - /** - * trace file - * - * @var resource - */ - public $yyTraceFILE; - - /** - * trace prompt - * - * @var string - */ - public $yyTracePrompt; - - /** - * state names - * - * @var array - */ - public $state_name = array(1 => 'START', 2 => 'VALUE', 3 => 'NAKED_STRING_VALUE', 4 => 'COMMENT', 5 => 'SECTION', - 6 => 'TRIPPLE'); - - /** - * storage for assembled token patterns - * - * @var sring - */ - private $yy_global_pattern1 = null; - - private $yy_global_pattern2 = null; - - private $yy_global_pattern3 = null; - - private $yy_global_pattern4 = null; - - private $yy_global_pattern5 = null; - - private $yy_global_pattern6 = null; - - /** - * token names - * - * @var array - */ - public $smarty_token_names = array( // Text for parser error messages - ); - - /** - * constructor - * - * @param string $data template source - * @param Smarty_Internal_Config_File_Compiler $compiler - */ - function __construct($data, Smarty_Internal_Config_File_Compiler $compiler) { - // set instance object - self::instance($this); - $this->data = $data . "\n"; //now all lines are \n-terminated - $this->counter = 0; - if (preg_match('/^\xEF\xBB\xBF/', $this->data, $match)) { - $this->counter += strlen($match[0]); - } - $this->line = 1; - $this->compiler = $compiler; - $this->smarty = $compiler->smarty; - $this->configBooleanize = $this->smarty->config_booleanize; - } - - public static function &instance($new_instance = null) { - static $instance = null; - if (isset($new_instance) && is_object($new_instance)) { - $instance = $new_instance; - } - return $instance; - } - - public function PrintTrace() { - $this->yyTraceFILE = fopen('php://output', 'w'); - $this->yyTracePrompt = '<br>'; - } - - private $_yy_state = 1; - - private $_yy_stack = array(); - - public function yylex() { - return $this->{'yylex' . $this->_yy_state}(); - } - - public function yypushstate($state) { - if ($this->yyTraceFILE) { - fprintf($this->yyTraceFILE, "%sState push %s\n", $this->yyTracePrompt, isset($this->state_name[$this->_yy_state]) ? $this->state_name[$this->_yy_state] : $this->_yy_state); - } - array_push($this->_yy_stack, $this->_yy_state); - $this->_yy_state = $state; - if ($this->yyTraceFILE) { - fprintf($this->yyTraceFILE, "%snew State %s\n", $this->yyTracePrompt, isset($this->state_name[$this->_yy_state]) ? $this->state_name[$this->_yy_state] : $this->_yy_state); - } - } - - public function yypopstate() { - if ($this->yyTraceFILE) { - fprintf($this->yyTraceFILE, "%sState pop %s\n", $this->yyTracePrompt, isset($this->state_name[$this->_yy_state]) ? $this->state_name[$this->_yy_state] : $this->_yy_state); - } - $this->_yy_state = array_pop($this->_yy_stack); - if ($this->yyTraceFILE) { - fprintf($this->yyTraceFILE, "%snew State %s\n", $this->yyTracePrompt, isset($this->state_name[$this->_yy_state]) ? $this->state_name[$this->_yy_state] : $this->_yy_state); - } - } - - public function yybegin($state) { - $this->_yy_state = $state; - if ($this->yyTraceFILE) { - fprintf($this->yyTraceFILE, "%sState set %s\n", $this->yyTracePrompt, isset($this->state_name[$this->_yy_state]) ? $this->state_name[$this->_yy_state] : $this->_yy_state); - } - } - - public function yylex1() { - if (!isset($this->yy_global_pattern1)) { - $this->yy_global_pattern1 = "/\G(#|;)|\G(\\[)|\G(\\])|\G(=)|\G([ \t\r]+)|\G(\n)|\G([0-9]*[a-zA-Z_]\\w*)|\G([\S\s])/isS"; - } - if ($this->counter >= strlen($this->data)) { - return false; // end of input - } - - do { - if (preg_match($this->yy_global_pattern1, $this->data, $yymatches, null, $this->counter)) { - $yysubmatches = $yymatches; - if (strlen($yysubmatches[0]) < 200) { - $yymatches = preg_grep("/(.|\s)+/", $yysubmatches); - } else { - $yymatches = array_filter($yymatches, 'strlen'); - } - if (empty($yymatches)) { - throw new Exception('Error: lexing failed because a rule matched' . ' an empty string. Input "' . substr($this->data, $this->counter, 5) . '... state START'); - } - next($yymatches); // skip global match - $this->token = key($yymatches); // token number - $this->value = current($yymatches); // token value - $r = $this->{'yy_r1_' . $this->token}(); - if ($r === null) { - $this->counter += strlen($this->value); - $this->line += substr_count($this->value, "\n"); - // accept this token - return true; - } elseif ($r === true) { - // we have changed state - // process this token in the new state - return $this->yylex(); - } elseif ($r === false) { - $this->counter += strlen($this->value); - $this->line += substr_count($this->value, "\n"); - if ($this->counter >= strlen($this->data)) { - return false; // end of input - } - // skip this token - continue; - } - } else { - throw new Exception('Unexpected input at line' . $this->line . ': ' . $this->data[$this->counter]); - } - break; - } while (true); - } // end function - - const START = 1; - - function yy_r1_1() { - - $this->token = Smarty_Internal_Configfileparser::TPC_COMMENTSTART; - $this->yypushstate(self::COMMENT); - } - - function yy_r1_2() { - - $this->token = Smarty_Internal_Configfileparser::TPC_OPENB; - $this->yypushstate(self::SECTION); - } - - function yy_r1_3() { - - $this->token = Smarty_Internal_Configfileparser::TPC_CLOSEB; - } - - function yy_r1_4() { - - $this->token = Smarty_Internal_Configfileparser::TPC_EQUAL; - $this->yypushstate(self::VALUE); - } - - function yy_r1_5() { - - return false; - } - - function yy_r1_6() { - - $this->token = Smarty_Internal_Configfileparser::TPC_NEWLINE; - } - - function yy_r1_7() { - - $this->token = Smarty_Internal_Configfileparser::TPC_ID; - } - - function yy_r1_8() { - - $this->token = Smarty_Internal_Configfileparser::TPC_OTHER; - } - - public function yylex2() { - if (!isset($this->yy_global_pattern2)) { - $this->yy_global_pattern2 = "/\G([ \t\r]+)|\G(\\d+\\.\\d+(?=[ \t\r]*[\n#;]))|\G(\\d+(?=[ \t\r]*[\n#;]))|\G(\"\"\")|\G('[^'\\\\]*(?:\\\\.[^'\\\\]*)*'(?=[ \t\r]*[\n#;]))|\G(\"[^\"\\\\]*(?:\\\\.[^\"\\\\]*)*\"(?=[ \t\r]*[\n#;]))|\G([a-zA-Z]+(?=[ \t\r]*[\n#;]))|\G([^\n]+?(?=[ \t\r]*\n))|\G(\n)/isS"; - } - if ($this->counter >= strlen($this->data)) { - return false; // end of input - } - - do { - if (preg_match($this->yy_global_pattern2, $this->data, $yymatches, null, $this->counter)) { - $yysubmatches = $yymatches; - if (strlen($yysubmatches[0]) < 200) { - $yymatches = preg_grep("/(.|\s)+/", $yysubmatches); - } else { - $yymatches = array_filter($yymatches, 'strlen'); - } - if (empty($yymatches)) { - throw new Exception('Error: lexing failed because a rule matched' . ' an empty string. Input "' . substr($this->data, $this->counter, 5) . '... state VALUE'); - } - next($yymatches); // skip global match - $this->token = key($yymatches); // token number - $this->value = current($yymatches); // token value - $r = $this->{'yy_r2_' . $this->token}(); - if ($r === null) { - $this->counter += strlen($this->value); - $this->line += substr_count($this->value, "\n"); - // accept this token - return true; - } elseif ($r === true) { - // we have changed state - // process this token in the new state - return $this->yylex(); - } elseif ($r === false) { - $this->counter += strlen($this->value); - $this->line += substr_count($this->value, "\n"); - if ($this->counter >= strlen($this->data)) { - return false; // end of input - } - // skip this token - continue; - } - } else { - throw new Exception('Unexpected input at line' . $this->line . ': ' . $this->data[$this->counter]); - } - break; - } while (true); - } // end function - - const VALUE = 2; - - function yy_r2_1() { - - return false; - } - - function yy_r2_2() { - - $this->token = Smarty_Internal_Configfileparser::TPC_FLOAT; - $this->yypopstate(); - } - - function yy_r2_3() { - - $this->token = Smarty_Internal_Configfileparser::TPC_INT; - $this->yypopstate(); - } - - function yy_r2_4() { - - $this->token = Smarty_Internal_Configfileparser::TPC_TRIPPLE_QUOTES; - $this->yypushstate(self::TRIPPLE); - } - - function yy_r2_5() { - - $this->token = Smarty_Internal_Configfileparser::TPC_SINGLE_QUOTED_STRING; - $this->yypopstate(); - } - - function yy_r2_6() { - - $this->token = Smarty_Internal_Configfileparser::TPC_DOUBLE_QUOTED_STRING; - $this->yypopstate(); - } - - function yy_r2_7() { - - if (!$this->configBooleanize || !in_array(strtolower($this->value), Array("true", "false", "on", "off", "yes", - "no")) - ) { - $this->yypopstate(); - $this->yypushstate(self::NAKED_STRING_VALUE); - return true; //reprocess in new state - } else { - $this->token = Smarty_Internal_Configfileparser::TPC_BOOL; - $this->yypopstate(); - } - } - - function yy_r2_8() { - - $this->token = Smarty_Internal_Configfileparser::TPC_NAKED_STRING; - $this->yypopstate(); - } - - function yy_r2_9() { - - $this->token = Smarty_Internal_Configfileparser::TPC_NAKED_STRING; - $this->value = ""; - $this->yypopstate(); - } - - public function yylex3() { - if (!isset($this->yy_global_pattern3)) { - $this->yy_global_pattern3 = "/\G([^\n]+?(?=[ \t\r]*\n))/isS"; - } - if ($this->counter >= strlen($this->data)) { - return false; // end of input - } - - do { - if (preg_match($this->yy_global_pattern3, $this->data, $yymatches, null, $this->counter)) { - $yysubmatches = $yymatches; - if (strlen($yysubmatches[0]) < 200) { - $yymatches = preg_grep("/(.|\s)+/", $yysubmatches); - } else { - $yymatches = array_filter($yymatches, 'strlen'); - } - if (empty($yymatches)) { - throw new Exception('Error: lexing failed because a rule matched' . ' an empty string. Input "' . substr($this->data, $this->counter, 5) . '... state NAKED_STRING_VALUE'); - } - next($yymatches); // skip global match - $this->token = key($yymatches); // token number - $this->value = current($yymatches); // token value - $r = $this->{'yy_r3_' . $this->token}(); - if ($r === null) { - $this->counter += strlen($this->value); - $this->line += substr_count($this->value, "\n"); - // accept this token - return true; - } elseif ($r === true) { - // we have changed state - // process this token in the new state - return $this->yylex(); - } elseif ($r === false) { - $this->counter += strlen($this->value); - $this->line += substr_count($this->value, "\n"); - if ($this->counter >= strlen($this->data)) { - return false; // end of input - } - // skip this token - continue; - } - } else { - throw new Exception('Unexpected input at line' . $this->line . ': ' . $this->data[$this->counter]); - } - break; - } while (true); - } // end function - - const NAKED_STRING_VALUE = 3; - - function yy_r3_1() { - - $this->token = Smarty_Internal_Configfileparser::TPC_NAKED_STRING; - $this->yypopstate(); - } - - public function yylex4() { - if (!isset($this->yy_global_pattern4)) { - $this->yy_global_pattern4 = "/\G([ \t\r]+)|\G([^\n]+?(?=[ \t\r]*\n))|\G(\n)/isS"; - } - if ($this->counter >= strlen($this->data)) { - return false; // end of input - } - - do { - if (preg_match($this->yy_global_pattern4, $this->data, $yymatches, null, $this->counter)) { - $yysubmatches = $yymatches; - if (strlen($yysubmatches[0]) < 200) { - $yymatches = preg_grep("/(.|\s)+/", $yysubmatches); - } else { - $yymatches = array_filter($yymatches, 'strlen'); - } - if (empty($yymatches)) { - throw new Exception('Error: lexing failed because a rule matched' . ' an empty string. Input "' . substr($this->data, $this->counter, 5) . '... state COMMENT'); - } - next($yymatches); // skip global match - $this->token = key($yymatches); // token number - $this->value = current($yymatches); // token value - $r = $this->{'yy_r4_' . $this->token}(); - if ($r === null) { - $this->counter += strlen($this->value); - $this->line += substr_count($this->value, "\n"); - // accept this token - return true; - } elseif ($r === true) { - // we have changed state - // process this token in the new state - return $this->yylex(); - } elseif ($r === false) { - $this->counter += strlen($this->value); - $this->line += substr_count($this->value, "\n"); - if ($this->counter >= strlen($this->data)) { - return false; // end of input - } - // skip this token - continue; - } - } else { - throw new Exception('Unexpected input at line' . $this->line . ': ' . $this->data[$this->counter]); - } - break; - } while (true); - } // end function - - const COMMENT = 4; - - function yy_r4_1() { - - return false; - } - - function yy_r4_2() { - - $this->token = Smarty_Internal_Configfileparser::TPC_NAKED_STRING; - } - - function yy_r4_3() { - - $this->token = Smarty_Internal_Configfileparser::TPC_NEWLINE; - $this->yypopstate(); - } - - public function yylex5() { - if (!isset($this->yy_global_pattern5)) { - $this->yy_global_pattern5 = "/\G(\\.)|\G(.*?(?=[\.=[\]\r\n]))/isS"; - } - if ($this->counter >= strlen($this->data)) { - return false; // end of input - } - - do { - if (preg_match($this->yy_global_pattern5, $this->data, $yymatches, null, $this->counter)) { - $yysubmatches = $yymatches; - if (strlen($yysubmatches[0]) < 200) { - $yymatches = preg_grep("/(.|\s)+/", $yysubmatches); - } else { - $yymatches = array_filter($yymatches, 'strlen'); - } - if (empty($yymatches)) { - throw new Exception('Error: lexing failed because a rule matched' . ' an empty string. Input "' . substr($this->data, $this->counter, 5) . '... state SECTION'); - } - next($yymatches); // skip global match - $this->token = key($yymatches); // token number - $this->value = current($yymatches); // token value - $r = $this->{'yy_r5_' . $this->token}(); - if ($r === null) { - $this->counter += strlen($this->value); - $this->line += substr_count($this->value, "\n"); - // accept this token - return true; - } elseif ($r === true) { - // we have changed state - // process this token in the new state - return $this->yylex(); - } elseif ($r === false) { - $this->counter += strlen($this->value); - $this->line += substr_count($this->value, "\n"); - if ($this->counter >= strlen($this->data)) { - return false; // end of input - } - // skip this token - continue; - } - } else { - throw new Exception('Unexpected input at line' . $this->line . ': ' . $this->data[$this->counter]); - } - break; - } while (true); - } // end function - - const SECTION = 5; - - function yy_r5_1() { - - $this->token = Smarty_Internal_Configfileparser::TPC_DOT; - } - - function yy_r5_2() { - - $this->token = Smarty_Internal_Configfileparser::TPC_SECTION; - $this->yypopstate(); - } - - public function yylex6() { - if (!isset($this->yy_global_pattern6)) { - $this->yy_global_pattern6 = "/\G(\"\"\"(?=[ \t\r]*[\n#;]))|\G([\S\s])/isS"; - } - if ($this->counter >= strlen($this->data)) { - return false; // end of input - } - - do { - if (preg_match($this->yy_global_pattern6, $this->data, $yymatches, null, $this->counter)) { - $yysubmatches = $yymatches; - if (strlen($yysubmatches[0]) < 200) { - $yymatches = preg_grep("/(.|\s)+/", $yysubmatches); - } else { - $yymatches = array_filter($yymatches, 'strlen'); - } - if (empty($yymatches)) { - throw new Exception('Error: lexing failed because a rule matched' . ' an empty string. Input "' . substr($this->data, $this->counter, 5) . '... state TRIPPLE'); - } - next($yymatches); // skip global match - $this->token = key($yymatches); // token number - $this->value = current($yymatches); // token value - $r = $this->{'yy_r6_' . $this->token}(); - if ($r === null) { - $this->counter += strlen($this->value); - $this->line += substr_count($this->value, "\n"); - // accept this token - return true; - } elseif ($r === true) { - // we have changed state - // process this token in the new state - return $this->yylex(); - } elseif ($r === false) { - $this->counter += strlen($this->value); - $this->line += substr_count($this->value, "\n"); - if ($this->counter >= strlen($this->data)) { - return false; // end of input - } - // skip this token - continue; - } - } else { - throw new Exception('Unexpected input at line' . $this->line . ': ' . $this->data[$this->counter]); - } - break; - } while (true); - } // end function - - const TRIPPLE = 6; - - function yy_r6_1() { - - $this->token = Smarty_Internal_Configfileparser::TPC_TRIPPLE_QUOTES_END; - $this->yypopstate(); - $this->yypushstate(self::START); - } - - function yy_r6_2() { - - $to = strlen($this->data); - preg_match("/\"\"\"[ \t\r]*[\n#;]/", $this->data, $match, PREG_OFFSET_CAPTURE, $this->counter); - if (isset($match[0][1])) { - $to = $match[0][1]; - } else { - $this->compiler->trigger_template_error("missing or misspelled literal closing tag"); - } - $this->value = substr($this->data, $this->counter, $to - $this->counter); - $this->token = Smarty_Internal_Configfileparser::TPC_TRIPPLE_TEXT; - } - -} diff --git a/library/smarty/libs/sysplugins/smarty_internal_configfileparser.php b/library/smarty/libs/sysplugins/smarty_internal_configfileparser.php deleted file mode 100644 --- a/library/smarty/libs/sysplugins/smarty_internal_configfileparser.php +++ /dev/null @@ -1,960 +0,0 @@ -<?php - -class TPC_yyToken implements ArrayAccess { - public $string = ''; - - public $metadata = array(); - - public function __construct($s, $m = array()) { - if ($s instanceof TPC_yyToken) { - $this->string = $s->string; - $this->metadata = $s->metadata; - } else { - $this->string = (string)$s; - if ($m instanceof TPC_yyToken) { - $this->metadata = $m->metadata; - } elseif (is_array($m)) { - $this->metadata = $m; - } - } - } - - public function __toString() { - return $this->string; - } - - public function offsetExists($offset) { - return isset($this->metadata[$offset]); - } - - public function offsetGet($offset) { - return $this->metadata[$offset]; - } - - public function offsetSet($offset, $value) { - if ($offset === null) { - if (isset($value[0])) { - $x = ($value instanceof TPC_yyToken) ? $value->metadata : $value; - $this->metadata = array_merge($this->metadata, $x); - - return; - } - $offset = count($this->metadata); - } - if ($value === null) { - return; - } - if ($value instanceof TPC_yyToken) { - if ($value->metadata) { - $this->metadata[$offset] = $value->metadata; - } - } elseif ($value) { - $this->metadata[$offset] = $value; - } - } - - public function offsetUnset($offset) { - unset($this->metadata[$offset]); - } -} - -class TPC_yyStackEntry { - public $stateno; /* The state-number */ - public $major; /* The major token value. This is the code - ** number for the token at this stack level */ - public $minor; /* The user-supplied minor token value. This - ** is the value of the token */ -} - -; - -#line 12 "../smarty/lexer/smarty_internal_configfileparser.y" - -/** - * Smarty Internal Plugin Configfileparse - * - * This is the config file parser. - * It is generated from the smarty_internal_configfileparser.y file - * - * @package Smarty - * @subpackage Compiler - * @author Uwe Tews - */ -class Smarty_Internal_Configfileparser { - #line 25 "../smarty/lexer/smarty_internal_configfileparser.y" - - /** - * result status - * - * @var bool - */ - public $successful = true; - - /** - * return value - * - * @var mixed - */ - public $retvalue = 0; - - /** - * @var - */ - public $yymajor; - - /** - * lexer object - * - * @var Smarty_Internal_Configfilelexer - */ - private $lex; - - /** - * internal error flag - * - * @var bool - */ - private $internalError = false; - - /** - * compiler object - * - * @var Smarty_Internal_Config_File_Compiler - */ - public $compiler = null; - - /** - * smarty object - * - * @var Smarty - */ - public $smarty = null; - - /** - * copy of config_overwrite property - * - * @var bool - */ - private $configOverwrite = false; - - /** - * copy of config_read_hidden property - * - * @var bool - */ - private $configReadHidden = false; - - /** - * helper map - * - * @var array - */ - private static $escapes_single = Array('\\' => '\\', '\'' => '\''); - - /** - * constructor - * - * @param Smarty_Internal_Configfilelexer $lex - * @param Smarty_Internal_Config_File_Compiler $compiler - */ - function __construct(Smarty_Internal_Configfilelexer $lex, Smarty_Internal_Config_File_Compiler $compiler) { - // set instance object - self::instance($this); - $this->lex = $lex; - $this->smarty = $compiler->smarty; - $this->compiler = $compiler; - $this->configOverwrite = $this->smarty->config_overwrite; - $this->configReadHidden = $this->smarty->config_read_hidden; - } - - /** - * @param null $new_instance - * - * @return null - */ - public static function &instance($new_instance = null) { - static $instance = null; - if (isset($new_instance) && is_object($new_instance)) { - $instance = $new_instance; - } - return $instance; - } - - /** - * parse optional boolean keywords - * - * @param string $str - * - * @return bool - */ - private function parse_bool($str) { - $str = strtolower($str); - if (in_array($str, array('on', 'yes', 'true'))) { - $res = true; - } else { - $res = false; - } - return $res; - } - - /** - * parse single quoted string - * remove outer quotes - * unescape inner quotes - * - * @param string $qstr - * - * @return string - */ - private static function parse_single_quoted_string($qstr) { - $escaped_string = substr($qstr, 1, strlen($qstr) - 2); //remove outer quotes - - $ss = preg_split('/(\\\\.)/', $escaped_string, -1, PREG_SPLIT_DELIM_CAPTURE); - - $str = ""; - foreach ($ss as $s) { - if (strlen($s) === 2 && $s[0] === '\\') { - if (isset(self::$escapes_single[$s[1]])) { - $s = self::$escapes_single[$s[1]]; - } - } - $str .= $s; - } - return $str; - } - - /** - * parse double quoted string - * - * @param string $qstr - * - * @return string - */ - private static function parse_double_quoted_string($qstr) { - $inner_str = substr($qstr, 1, strlen($qstr) - 2); - return stripcslashes($inner_str); - } - - /** - * parse triple quoted string - * - * @param string $qstr - * - * @return string - */ - private static function parse_tripple_double_quoted_string($qstr) { - return stripcslashes($qstr); - } - - /** - * set a config variable in target array - * - * @param array $var - * @param array $target_array - */ - private function set_var(Array $var, Array &$target_array) { - $key = $var["key"]; - $value = $var["value"]; - - if ($this->configOverwrite || !isset($target_array['vars'][$key])) { - $target_array['vars'][$key] = $value; - } else { - settype($target_array['vars'][$key], 'array'); - $target_array['vars'][$key][] = $value; - } - } - - /** - * add config variable to global vars - * - * @param array $vars - */ - private function add_global_vars(Array $vars) { - if (!isset($this->compiler->config_data['vars'])) { - $this->compiler->config_data['vars'] = Array(); - } - foreach ($vars as $var) { - $this->set_var($var, $this->compiler->config_data); - } - } - - /** - * add config variable to section - * - * @param string $section_name - * @param array $vars - */ - private function add_section_vars($section_name, Array $vars) { - if (!isset($this->compiler->config_data['sections'][$section_name]['vars'])) { - $this->compiler->config_data['sections'][$section_name]['vars'] = Array(); - } - foreach ($vars as $var) { - $this->set_var($var, $this->compiler->config_data['sections'][$section_name]); - } - } - - const TPC_OPENB = 1; - - const TPC_SECTION = 2; - - const TPC_CLOSEB = 3; - - const TPC_DOT = 4; - - const TPC_ID = 5; - - const TPC_EQUAL = 6; - - const TPC_FLOAT = 7; - - const TPC_INT = 8; - - const TPC_BOOL = 9; - - const TPC_SINGLE_QUOTED_STRING = 10; - - const TPC_DOUBLE_QUOTED_STRING = 11; - - const TPC_TRIPPLE_QUOTES = 12; - - const TPC_TRIPPLE_TEXT = 13; - - const TPC_TRIPPLE_QUOTES_END = 14; - - const TPC_NAKED_STRING = 15; - - const TPC_OTHER = 16; - - const TPC_NEWLINE = 17; - - const TPC_COMMENTSTART = 18; - - const YY_NO_ACTION = 60; - - const YY_ACCEPT_ACTION = 59; - - const YY_ERROR_ACTION = 58; - - const YY_SZ_ACTTAB = 38; - - static public $yy_action = array(29, 30, 34, 33, 24, 13, 19, 25, 35, 21, 59, 8, 3, 1, 20, 12, 14, 31, 20, 12, 15, - 17, 23, 18, 27, 26, 4, 5, 6, 32, 2, 11, 28, 22, 16, 9, 7, 10,); - - static public $yy_lookahead = array(7, 8, 9, 10, 11, 12, 5, 27, 15, 16, 20, 21, 23, 23, 17, 18, 13, 14, 17, 18, 15, - 2, 17, 4, 25, 26, 6, 3, 3, 14, 23, 1, 24, 17, 2, 25, 22, 25,); - - const YY_SHIFT_USE_DFLT = -8; - - const YY_SHIFT_MAX = 19; - - static public $yy_shift_ofst = array(-8, 1, 1, 1, -7, -3, -3, 30, -8, -8, -8, 19, 5, 3, 15, 16, 24, 25, 32, - 20,); - - const YY_REDUCE_USE_DFLT = -21; - - const YY_REDUCE_MAX = 10; - - static public $yy_reduce_ofst = array(-10, -1, -1, -1, -20, 10, 12, 8, 14, 7, -11,); - - static public $yyExpectedTokens = array(array(), array(5, 17, 18,), array(5, 17, 18,), array(5, 17, 18,), - array(7, 8, 9, 10, 11, 12, 15, 16,), array(17, 18,), array(17, 18,), array(1,), array(), array(), array(), - array(2, 4,), array(15, 17,), array(13, 14,), array(14,), array(17,), array(3,), array(3,), array(2,), - array(6,), array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), - array(), array(), array(), array(), array(),); - - static public $yy_default = array(44, 37, 41, 40, 58, 58, 58, 36, 39, 44, 44, 58, 58, 58, 58, 58, 58, 58, 58, 58, - 55, 54, 57, 56, 50, 45, 43, 42, 38, 46, 47, 52, 51, 49, 48, 53,); - - const YYNOCODE = 29; - - const YYSTACKDEPTH = 100; - - const YYNSTATE = 36; - - const YYNRULE = 22; - - const YYERRORSYMBOL = 19; - - const YYERRSYMDT = 'yy0'; - - const YYFALLBACK = 0; - - public static $yyFallback = array(); - - public function Trace($TraceFILE, $zTracePrompt) { - if (!$TraceFILE) { - $zTracePrompt = 0; - } elseif (!$zTracePrompt) { - $TraceFILE = 0; - } - $this->yyTraceFILE = $TraceFILE; - $this->yyTracePrompt = $zTracePrompt; - } - - public function PrintTrace() { - $this->yyTraceFILE = fopen('php://output', 'w'); - $this->yyTracePrompt = '<br>'; - } - - public $yyTraceFILE; - - public $yyTracePrompt; - - public $yyidx; /* Index of top element in stack */ - public $yyerrcnt; /* Shifts left before out of the error */ - public $yystack = array(); /* The parser's stack */ - - public $yyTokenName = array('$', 'OPENB', 'SECTION', 'CLOSEB', 'DOT', 'ID', 'EQUAL', 'FLOAT', 'INT', 'BOOL', - 'SINGLE_QUOTED_STRING', 'DOUBLE_QUOTED_STRING', 'TRIPPLE_QUOTES', 'TRIPPLE_TEXT', 'TRIPPLE_QUOTES_END', - 'NAKED_STRING', 'OTHER', 'NEWLINE', 'COMMENTSTART', 'error', 'start', 'global_vars', 'sections', 'var_list', - 'section', 'newline', 'var', 'value',); - - public static $yyRuleName = array('start ::= global_vars sections', 'global_vars ::= var_list', - 'sections ::= sections section', 'sections ::=', 'section ::= OPENB SECTION CLOSEB newline var_list', - 'section ::= OPENB DOT SECTION CLOSEB newline var_list', 'var_list ::= var_list newline', - 'var_list ::= var_list var', 'var_list ::=', 'var ::= ID EQUAL value', 'value ::= FLOAT', 'value ::= INT', - 'value ::= BOOL', 'value ::= SINGLE_QUOTED_STRING', 'value ::= DOUBLE_QUOTED_STRING', - 'value ::= TRIPPLE_QUOTES TRIPPLE_TEXT TRIPPLE_QUOTES_END', 'value ::= TRIPPLE_QUOTES TRIPPLE_QUOTES_END', - 'value ::= NAKED_STRING', 'value ::= OTHER', 'newline ::= NEWLINE', 'newline ::= COMMENTSTART NEWLINE', - 'newline ::= COMMENTSTART NAKED_STRING NEWLINE',); - - public function tokenName($tokenType) { - if ($tokenType === 0) { - return 'End of Input'; - } - if ($tokenType > 0 && $tokenType < count($this->yyTokenName)) { - return $this->yyTokenName[$tokenType]; - } else { - return "Unknown"; - } - } - - public static function yy_destructor($yymajor, $yypminor) { - switch ($yymajor) { - default: - break; /* If no destructor action specified: do nothing */ - } - } - - public function yy_pop_parser_stack() { - if (empty($this->yystack)) { - return; - } - $yytos = array_pop($this->yystack); - if ($this->yyTraceFILE && $this->yyidx >= 0) { - fwrite($this->yyTraceFILE, $this->yyTracePrompt . 'Popping ' . $this->yyTokenName[$yytos->major] . "\n"); - } - $yymajor = $yytos->major; - self::yy_destructor($yymajor, $yytos->minor); - $this->yyidx--; - - return $yymajor; - } - - public function __destruct() { - while ($this->yystack !== Array()) { - $this->yy_pop_parser_stack(); - } - if (is_resource($this->yyTraceFILE)) { - fclose($this->yyTraceFILE); - } - } - - public function yy_get_expected_tokens($token) { - static $res3 = array(); - static $res4 = array(); - $state = $this->yystack[$this->yyidx]->stateno; - $expected = self::$yyExpectedTokens[$state]; - if (isset($res3[$state][$token])) { - if ($res3[$state][$token]) { - return $expected; - } - } else { - if ($res3[$state][$token] = in_array($token, self::$yyExpectedTokens[$state], true)) { - return $expected; - } - } - $stack = $this->yystack; - $yyidx = $this->yyidx; - do { - $yyact = $this->yy_find_shift_action($token); - if ($yyact >= self::YYNSTATE && $yyact < self::YYNSTATE + self::YYNRULE) { - // reduce action - $done = 0; - do { - if ($done++ == 100) { - $this->yyidx = $yyidx; - $this->yystack = $stack; - // too much recursion prevents proper detection - // so give up - return array_unique($expected); - } - $yyruleno = $yyact - self::YYNSTATE; - $this->yyidx -= self::$yyRuleInfo[$yyruleno][1]; - $nextstate = $this->yy_find_reduce_action($this->yystack[$this->yyidx]->stateno, self::$yyRuleInfo[$yyruleno][0]); - if (isset(self::$yyExpectedTokens[$nextstate])) { - $expected = array_merge($expected, self::$yyExpectedTokens[$nextstate]); - if (isset($res4[$nextstate][$token])) { - if ($res4[$nextstate][$token]) { - $this->yyidx = $yyidx; - $this->yystack = $stack; - return array_unique($expected); - } - } else { - if ($res4[$nextstate][$token] = in_array($token, self::$yyExpectedTokens[$nextstate], true)) { - $this->yyidx = $yyidx; - $this->yystack = $stack; - return array_unique($expected); - } - } - } - if ($nextstate < self::YYNSTATE) { - // we need to shift a non-terminal - $this->yyidx++; - $x = new TPC_yyStackEntry; - $x->stateno = $nextstate; - $x->major = self::$yyRuleInfo[$yyruleno][0]; - $this->yystack[$this->yyidx] = $x; - continue 2; - } elseif ($nextstate == self::YYNSTATE + self::YYNRULE + 1) { - $this->yyidx = $yyidx; - $this->yystack = $stack; - // the last token was just ignored, we can't accept - // by ignoring input, this is in essence ignoring a - // syntax error! - return array_unique($expected); - } elseif ($nextstate === self::YY_NO_ACTION) { - $this->yyidx = $yyidx; - $this->yystack = $stack; - // input accepted, but not shifted (I guess) - return $expected; - } else { - $yyact = $nextstate; - } - } while (true); - } - break; - } while (true); - $this->yyidx = $yyidx; - $this->yystack = $stack; - - return array_unique($expected); - } - - public function yy_is_expected_token($token) { - static $res = array(); - static $res2 = array(); - if ($token === 0) { - return true; // 0 is not part of this - } - $state = $this->yystack[$this->yyidx]->stateno; - if (isset($res[$state][$token])) { - if ($res[$state][$token]) { - return true; - } - } else { - if ($res[$state][$token] = in_array($token, self::$yyExpectedTokens[$state], true)) { - return true; - } - } - $stack = $this->yystack; - $yyidx = $this->yyidx; - do { - $yyact = $this->yy_find_shift_action($token); - if ($yyact >= self::YYNSTATE && $yyact < self::YYNSTATE + self::YYNRULE) { - // reduce action - $done = 0; - do { - if ($done++ == 100) { - $this->yyidx = $yyidx; - $this->yystack = $stack; - // too much recursion prevents proper detection - // so give up - return true; - } - $yyruleno = $yyact - self::YYNSTATE; - $this->yyidx -= self::$yyRuleInfo[$yyruleno][1]; - $nextstate = $this->yy_find_reduce_action($this->yystack[$this->yyidx]->stateno, self::$yyRuleInfo[$yyruleno][0]); - if (isset($res2[$nextstate][$token])) { - if ($res2[$nextstate][$token]) { - $this->yyidx = $yyidx; - $this->yystack = $stack; - return true; - } - } else { - if ($res2[$nextstate][$token] = (isset(self::$yyExpectedTokens[$nextstate]) && in_array($token, self::$yyExpectedTokens[$nextstate], true))) { - $this->yyidx = $yyidx; - $this->yystack = $stack; - return true; - } - } - if ($nextstate < self::YYNSTATE) { - // we need to shift a non-terminal - $this->yyidx++; - $x = new TPC_yyStackEntry; - $x->stateno = $nextstate; - $x->major = self::$yyRuleInfo[$yyruleno][0]; - $this->yystack[$this->yyidx] = $x; - continue 2; - } elseif ($nextstate == self::YYNSTATE + self::YYNRULE + 1) { - $this->yyidx = $yyidx; - $this->yystack = $stack; - if (!$token) { - // end of input: this is valid - return true; - } - // the last token was just ignored, we can't accept - // by ignoring input, this is in essence ignoring a - // syntax error! - return false; - } elseif ($nextstate === self::YY_NO_ACTION) { - $this->yyidx = $yyidx; - $this->yystack = $stack; - // input accepted, but not shifted (I guess) - return true; - } else { - $yyact = $nextstate; - } - } while (true); - } - break; - } while (true); - $this->yyidx = $yyidx; - $this->yystack = $stack; - - return true; - } - - public function yy_find_shift_action($iLookAhead) { - $stateno = $this->yystack[$this->yyidx]->stateno; - - /* if ($this->yyidx < 0) return self::YY_NO_ACTION; */ - if (!isset(self::$yy_shift_ofst[$stateno])) { - // no shift actions - return self::$yy_default[$stateno]; - } - $i = self::$yy_shift_ofst[$stateno]; - if ($i === self::YY_SHIFT_USE_DFLT) { - return self::$yy_default[$stateno]; - } - if ($iLookAhead == self::YYNOCODE) { - return self::YY_NO_ACTION; - } - $i += $iLookAhead; - if ($i < 0 || $i >= self::YY_SZ_ACTTAB || self::$yy_lookahead[$i] != $iLookAhead) { - if (count(self::$yyFallback) && $iLookAhead < count(self::$yyFallback) && ($iFallback = self::$yyFallback[$iLookAhead]) != 0) { - if ($this->yyTraceFILE) { - fwrite($this->yyTraceFILE, $this->yyTracePrompt . "FALLBACK " . $this->yyTokenName[$iLookAhead] . " => " . $this->yyTokenName[$iFallback] . "\n"); - } - - return $this->yy_find_shift_action($iFallback); - } - - return self::$yy_default[$stateno]; - } else { - return self::$yy_action[$i]; - } - } - - public function yy_find_reduce_action($stateno, $iLookAhead) { - /* $stateno = $this->yystack[$this->yyidx]->stateno; */ - - if (!isset(self::$yy_reduce_ofst[$stateno])) { - return self::$yy_default[$stateno]; - } - $i = self::$yy_reduce_ofst[$stateno]; - if ($i == self::YY_REDUCE_USE_DFLT) { - return self::$yy_default[$stateno]; - } - if ($iLookAhead == self::YYNOCODE) { - return self::YY_NO_ACTION; - } - $i += $iLookAhead; - if ($i < 0 || $i >= self::YY_SZ_ACTTAB || self::$yy_lookahead[$i] != $iLookAhead) { - return self::$yy_default[$stateno]; - } else { - return self::$yy_action[$i]; - } - } - - public function yy_shift($yyNewState, $yyMajor, $yypMinor) { - $this->yyidx++; - if ($this->yyidx >= self::YYSTACKDEPTH) { - $this->yyidx--; - if ($this->yyTraceFILE) { - fprintf($this->yyTraceFILE, "%sStack Overflow!\n", $this->yyTracePrompt); - } - while ($this->yyidx >= 0) { - $this->yy_pop_parser_stack(); - } - #line 255 "../smarty/lexer/smarty_internal_configfileparser.y" - - $this->internalError = true; - $this->compiler->trigger_config_file_error("Stack overflow in configfile parser"); - - return; - } - $yytos = new TPC_yyStackEntry; - $yytos->stateno = $yyNewState; - $yytos->major = $yyMajor; - $yytos->minor = $yypMinor; - $this->yystack[] = $yytos; - if ($this->yyTraceFILE && $this->yyidx > 0) { - fprintf($this->yyTraceFILE, "%sShift %d\n", $this->yyTracePrompt, $yyNewState); - fprintf($this->yyTraceFILE, "%sStack:", $this->yyTracePrompt); - for ($i = 1; $i <= $this->yyidx; $i++) { - fprintf($this->yyTraceFILE, " %s", $this->yyTokenName[$this->yystack[$i]->major]); - } - fwrite($this->yyTraceFILE, "\n"); - } - } - - public static $yyRuleInfo = array(array(0 => 20, 1 => 2), array(0 => 21, 1 => 1), array(0 => 22, 1 => 2), - array(0 => 22, 1 => 0), array(0 => 24, 1 => 5), array(0 => 24, 1 => 6), array(0 => 23, 1 => 2), - array(0 => 23, 1 => 2), array(0 => 23, 1 => 0), array(0 => 26, 1 => 3), array(0 => 27, 1 => 1), - array(0 => 27, 1 => 1), array(0 => 27, 1 => 1), array(0 => 27, 1 => 1), array(0 => 27, 1 => 1), - array(0 => 27, 1 => 3), array(0 => 27, 1 => 2), array(0 => 27, 1 => 1), array(0 => 27, 1 => 1), - array(0 => 25, 1 => 1), array(0 => 25, 1 => 2), array(0 => 25, 1 => 3),); - - public static $yyReduceMap = array(0 => 0, 2 => 0, 3 => 0, 19 => 0, 20 => 0, 21 => 0, 1 => 1, 4 => 4, 5 => 5, - 6 => 6, 7 => 7, 8 => 8, 9 => 9, 10 => 10, 11 => 11, 12 => 12, 13 => 13, - 14 => 14, 15 => 15, 16 => 16, 17 => 17, 18 => 17,); - - #line 261 "../smarty/lexer/smarty_internal_configfileparser.y" - function yy_r0() { - $this->_retvalue = null; - } - - #line 266 "../smarty/lexer/smarty_internal_configfileparser.y" - function yy_r1() { - $this->add_global_vars($this->yystack[$this->yyidx + 0]->minor); - $this->_retvalue = null; - } - - #line 280 "../smarty/lexer/smarty_internal_configfileparser.y" - function yy_r4() { - $this->add_section_vars($this->yystack[$this->yyidx + -3]->minor, $this->yystack[$this->yyidx + 0]->minor); - $this->_retvalue = null; - } - - #line 285 "../smarty/lexer/smarty_internal_configfileparser.y" - function yy_r5() { - if ($this->configReadHidden) { - $this->add_section_vars($this->yystack[$this->yyidx + -3]->minor, $this->yystack[$this->yyidx + 0]->minor); - } - $this->_retvalue = null; - } - - #line 293 "../smarty/lexer/smarty_internal_configfileparser.y" - function yy_r6() { - $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor; - } - - #line 297 "../smarty/lexer/smarty_internal_configfileparser.y" - function yy_r7() { - $this->_retvalue = array_merge($this->yystack[$this->yyidx + -1]->minor, Array($this->yystack[$this->yyidx + 0]->minor)); - } - - #line 301 "../smarty/lexer/smarty_internal_configfileparser.y" - function yy_r8() { - $this->_retvalue = Array(); - } - - #line 307 "../smarty/lexer/smarty_internal_configfileparser.y" - function yy_r9() { - $this->_retvalue = Array("key" => $this->yystack[$this->yyidx + -2]->minor, - "value" => $this->yystack[$this->yyidx + 0]->minor); - } - - #line 312 "../smarty/lexer/smarty_internal_configfileparser.y" - function yy_r10() { - $this->_retvalue = (float)$this->yystack[$this->yyidx + 0]->minor; - } - - #line 316 "../smarty/lexer/smarty_internal_configfileparser.y" - function yy_r11() { - $this->_retvalue = (int)$this->yystack[$this->yyidx + 0]->minor; - } - - #line 320 "../smarty/lexer/smarty_internal_configfileparser.y" - function yy_r12() { - $this->_retvalue = $this->parse_bool($this->yystack[$this->yyidx + 0]->minor); - } - - #line 324 "../smarty/lexer/smarty_internal_configfileparser.y" - function yy_r13() { - $this->_retvalue = self::parse_single_quoted_string($this->yystack[$this->yyidx + 0]->minor); - } - - #line 328 "../smarty/lexer/smarty_internal_configfileparser.y" - function yy_r14() { - $this->_retvalue = self::parse_double_quoted_string($this->yystack[$this->yyidx + 0]->minor); - } - - #line 332 "../smarty/lexer/smarty_internal_configfileparser.y" - function yy_r15() { - $this->_retvalue = self::parse_tripple_double_quoted_string($this->yystack[$this->yyidx + -1]->minor); - } - - #line 336 "../smarty/lexer/smarty_internal_configfileparser.y" - function yy_r16() { - $this->_retvalue = ''; - } - - #line 340 "../smarty/lexer/smarty_internal_configfileparser.y" - function yy_r17() { - $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor; - } - - private $_retvalue; - - public function yy_reduce($yyruleno) { - if ($this->yyTraceFILE && $yyruleno >= 0 && $yyruleno < count(self::$yyRuleName)) { - fprintf($this->yyTraceFILE, "%sReduce (%d) [%s].\n", $this->yyTracePrompt, $yyruleno, self::$yyRuleName[$yyruleno]); - } - - $this->_retvalue = $yy_lefthand_side = null; - if (isset(self::$yyReduceMap[$yyruleno])) { - // call the action - $this->_retvalue = null; - $this->{'yy_r' . self::$yyReduceMap[$yyruleno]}(); - $yy_lefthand_side = $this->_retvalue; - } - $yygoto = self::$yyRuleInfo[$yyruleno][0]; - $yysize = self::$yyRuleInfo[$yyruleno][1]; - $this->yyidx -= $yysize; - for ($i = $yysize; $i; $i--) { - // pop all of the right-hand side parameters - array_pop($this->yystack); - } - $yyact = $this->yy_find_reduce_action($this->yystack[$this->yyidx]->stateno, $yygoto); - if ($yyact < self::YYNSTATE) { - if (!$this->yyTraceFILE && $yysize) { - $this->yyidx++; - $x = new TPC_yyStackEntry; - $x->stateno = $yyact; - $x->major = $yygoto; - $x->minor = $yy_lefthand_side; - $this->yystack[$this->yyidx] = $x; - } else { - $this->yy_shift($yyact, $yygoto, $yy_lefthand_side); - } - } elseif ($yyact == self::YYNSTATE + self::YYNRULE + 1) { - $this->yy_accept(); - } - } - - public function yy_parse_failed() { - if ($this->yyTraceFILE) { - fprintf($this->yyTraceFILE, "%sFail!\n", $this->yyTracePrompt); - } - while ($this->yyidx >= 0) { - $this->yy_pop_parser_stack(); - } - } - - public function yy_syntax_error($yymajor, $TOKEN) { - #line 248 "../smarty/lexer/smarty_internal_configfileparser.y" - - $this->internalError = true; - $this->yymajor = $yymajor; - $this->compiler->trigger_config_file_error(); - } - - public function yy_accept() { - if ($this->yyTraceFILE) { - fprintf($this->yyTraceFILE, "%sAccept!\n", $this->yyTracePrompt); - } - while ($this->yyidx >= 0) { - $this->yy_pop_parser_stack(); - } - #line 241 "../smarty/lexer/smarty_internal_configfileparser.y" - - $this->successful = !$this->internalError; - $this->internalError = false; - $this->retvalue = $this->_retvalue; - } - - public function doParse($yymajor, $yytokenvalue) { - $yyerrorhit = 0; /* True if yymajor has invoked an error */ - - if ($this->yyidx === null || $this->yyidx < 0) { - $this->yyidx = 0; - $this->yyerrcnt = -1; - $x = new TPC_yyStackEntry; - $x->stateno = 0; - $x->major = 0; - $this->yystack = array(); - $this->yystack[] = $x; - } - $yyendofinput = ($yymajor == 0); - - if ($this->yyTraceFILE) { - fprintf($this->yyTraceFILE, "%sInput %s\n", $this->yyTracePrompt, $this->yyTokenName[$yymajor]); - } - - do { - $yyact = $this->yy_find_shift_action($yymajor); - if ($yymajor < self::YYERRORSYMBOL && !$this->yy_is_expected_token($yymajor)) { - // force a syntax error - $yyact = self::YY_ERROR_ACTION; - } - if ($yyact < self::YYNSTATE) { - $this->yy_shift($yyact, $yymajor, $yytokenvalue); - $this->yyerrcnt--; - if ($yyendofinput && $this->yyidx >= 0) { - $yymajor = 0; - } else { - $yymajor = self::YYNOCODE; - } - } elseif ($yyact < self::YYNSTATE + self::YYNRULE) { - $this->yy_reduce($yyact - self::YYNSTATE); - } elseif ($yyact == self::YY_ERROR_ACTION) { - if ($this->yyTraceFILE) { - fprintf($this->yyTraceFILE, "%sSyntax Error!\n", $this->yyTracePrompt); - } - if (self::YYERRORSYMBOL) { - if ($this->yyerrcnt < 0) { - $this->yy_syntax_error($yymajor, $yytokenvalue); - } - $yymx = $this->yystack[$this->yyidx]->major; - if ($yymx == self::YYERRORSYMBOL || $yyerrorhit) { - if ($this->yyTraceFILE) { - fprintf($this->yyTraceFILE, "%sDiscard input token %s\n", $this->yyTracePrompt, $this->yyTokenName[$yymajor]); - } - $this->yy_destructor($yymajor, $yytokenvalue); - $yymajor = self::YYNOCODE; - } else { - while ($this->yyidx >= 0 && $yymx != self::YYERRORSYMBOL && ($yyact = $this->yy_find_shift_action(self::YYERRORSYMBOL)) >= self::YYNSTATE) { - $this->yy_pop_parser_stack(); - } - if ($this->yyidx < 0 || $yymajor == 0) { - $this->yy_destructor($yymajor, $yytokenvalue); - $this->yy_parse_failed(); - $yymajor = self::YYNOCODE; - } elseif ($yymx != self::YYERRORSYMBOL) { - $u2 = 0; - $this->yy_shift($yyact, self::YYERRORSYMBOL, $u2); - } - } - $this->yyerrcnt = 3; - $yyerrorhit = 1; - } else { - if ($this->yyerrcnt <= 0) { - $this->yy_syntax_error($yymajor, $yytokenvalue); - } - $this->yyerrcnt = 3; - $this->yy_destructor($yymajor, $yytokenvalue); - if ($yyendofinput) { - $this->yy_parse_failed(); - } - $yymajor = self::YYNOCODE; - } - } else { - $this->yy_accept(); - $yymajor = self::YYNOCODE; - } - } while ($yymajor != self::YYNOCODE && $this->yyidx >= 0); - } -} - diff --git a/library/smarty/libs/sysplugins/smarty_internal_data.php b/library/smarty/libs/sysplugins/smarty_internal_data.php deleted file mode 100644 --- a/library/smarty/libs/sysplugins/smarty_internal_data.php +++ /dev/null @@ -1,389 +0,0 @@ -<?php -/** - * Smarty Internal Plugin Data - * This file contains the basic classes and methods for template and variable creation - * - * @package Smarty - * @subpackage Template - * @author Uwe Tews - */ - -/** - * Base class with template and variable methods - * - * @package Smarty - * @subpackage Template - */ -class Smarty_Internal_Data { - /** - * name of class used for templates - * - * @var string - */ - public $template_class = 'Smarty_Internal_Template'; - /** - * template variables - * - * @var array - */ - public $tpl_vars = array(); - /** - * parent template (if any) - * - * @var Smarty_Internal_Template - */ - public $parent = null; - /** - * configuration settings - * - * @var array - */ - public $config_vars = array(); - - /** - * assigns a Smarty variable - * - * @param array|string $tpl_var the template variable name(s) - * @param mixed $value the value to assign - * @param boolean $nocache if true any output of this variable will be not cached - * - * @return Smarty_Internal_Data current Smarty_Internal_Data (or Smarty or Smarty_Internal_Template) instance for chaining - */ - public function assign($tpl_var, $value = null, $nocache = false) { - if (is_array($tpl_var)) { - foreach ($tpl_var as $_key => $_val) { - if ($_key != '') { - $this->tpl_vars[$_key] = new Smarty_Variable($_val, $nocache); - } - } - } else { - if ($tpl_var != '') { - $this->tpl_vars[$tpl_var] = new Smarty_Variable($value, $nocache); - } - } - - return $this; - } - - /** - * assigns a global Smarty variable - * - * @param string $varname the global variable name - * @param mixed $value the value to assign - * @param boolean $nocache if true any output of this variable will be not cached - * - * @return Smarty_Internal_Data current Smarty_Internal_Data (or Smarty or Smarty_Internal_Template) instance for chaining - */ - public function assignGlobal($varname, $value = null, $nocache = false) { - if ($varname != '') { - Smarty::$global_tpl_vars[$varname] = new Smarty_Variable($value, $nocache); - $ptr = $this; - while ($ptr instanceof Smarty_Internal_Template) { - $ptr->tpl_vars[$varname] = clone Smarty::$global_tpl_vars[$varname]; - $ptr = $ptr->parent; - } - } - - return $this; - } - - /** - * assigns values to template variables by reference - * - * @param string $tpl_var the template variable name - * @param $value - * @param boolean $nocache if true any output of this variable will be not cached - * - * @return Smarty_Internal_Data current Smarty_Internal_Data (or Smarty or Smarty_Internal_Template) instance for chaining - */ - public function assignByRef($tpl_var, &$value, $nocache = false) { - if ($tpl_var != '') { - $this->tpl_vars[$tpl_var] = new Smarty_Variable(null, $nocache); - $this->tpl_vars[$tpl_var]->value = &$value; - } - - return $this; - } - - /** - * appends values to template variables - * - * @param array|string $tpl_var the template variable name(s) - * @param mixed $value the value to append - * @param boolean $merge flag if array elements shall be merged - * @param boolean $nocache if true any output of this variable will be not cached - * - * @return Smarty_Internal_Data current Smarty_Internal_Data (or Smarty or Smarty_Internal_Template) instance for chaining - */ - public function append($tpl_var, $value = null, $merge = false, $nocache = false) { - if (is_array($tpl_var)) { - // $tpl_var is an array, ignore $value - foreach ($tpl_var as $_key => $_val) { - if ($_key != '') { - if (!isset($this->tpl_vars[$_key])) { - $tpl_var_inst = $this->getVariable($_key, null, true, false); - if ($tpl_var_inst instanceof Smarty_Undefined_Variable) { - $this->tpl_vars[$_key] = new Smarty_Variable(null, $nocache); - } else { - $this->tpl_vars[$_key] = clone $tpl_var_inst; - } - } - if (!(is_array($this->tpl_vars[$_key]->value) || $this->tpl_vars[$_key]->value instanceof ArrayAccess)) { - settype($this->tpl_vars[$_key]->value, 'array'); - } - if ($merge && is_array($_val)) { - foreach ($_val as $_mkey => $_mval) { - $this->tpl_vars[$_key]->value[$_mkey] = $_mval; - } - } else { - $this->tpl_vars[$_key]->value[] = $_val; - } - } - } - } else { - if ($tpl_var != '' && isset($value)) { - if (!isset($this->tpl_vars[$tpl_var])) { - $tpl_var_inst = $this->getVariable($tpl_var, null, true, false); - if ($tpl_var_inst instanceof Smarty_Undefined_Variable) { - $this->tpl_vars[$tpl_var] = new Smarty_Variable(null, $nocache); - } else { - $this->tpl_vars[$tpl_var] = clone $tpl_var_inst; - } - } - if (!(is_array($this->tpl_vars[$tpl_var]->value) || $this->tpl_vars[$tpl_var]->value instanceof ArrayAccess)) { - settype($this->tpl_vars[$tpl_var]->value, 'array'); - } - if ($merge && is_array($value)) { - foreach ($value as $_mkey => $_mval) { - $this->tpl_vars[$tpl_var]->value[$_mkey] = $_mval; - } - } else { - $this->tpl_vars[$tpl_var]->value[] = $value; - } - } - } - - return $this; - } - - /** - * appends values to template variables by reference - * - * @param string $tpl_var the template variable name - * @param mixed &$value the referenced value to append - * @param boolean $merge flag if array elements shall be merged - * - * @return Smarty_Internal_Data current Smarty_Internal_Data (or Smarty or Smarty_Internal_Template) instance for chaining - */ - public function appendByRef($tpl_var, &$value, $merge = false) { - if ($tpl_var != '' && isset($value)) { - if (!isset($this->tpl_vars[$tpl_var])) { - $this->tpl_vars[$tpl_var] = new Smarty_Variable(); - } - if (!is_array($this->tpl_vars[$tpl_var]->value)) { - settype($this->tpl_vars[$tpl_var]->value, 'array'); - } - if ($merge && is_array($value)) { - foreach ($value as $_key => $_val) { - $this->tpl_vars[$tpl_var]->value[$_key] = &$value[$_key]; - } - } else { - $this->tpl_vars[$tpl_var]->value[] = &$value; - } - } - - return $this; - } - - /** - * Returns a single or all template variables - * - * @param string $varname variable name or null - * @param object $_ptr optional pointer to data object - * @param boolean $search_parents include parent templates? - * - * @return string variable value or or array of variables - */ - public function getTemplateVars($varname = null, $_ptr = null, $search_parents = true) { - if (isset($varname)) { - $_var = $this->getVariable($varname, $_ptr, $search_parents, false); - if (is_object($_var)) { - return $_var->value; - } else { - return null; - } - } else { - $_result = array(); - if ($_ptr === null) { - $_ptr = $this; - } - while ($_ptr !== null) { - foreach ($_ptr->tpl_vars AS $key => $var) { - if (!array_key_exists($key, $_result)) { - $_result[$key] = $var->value; - } - } - // not found, try at parent - if ($search_parents) { - $_ptr = $_ptr->parent; - } else { - $_ptr = null; - } - } - if ($search_parents && isset(Smarty::$global_tpl_vars)) { - foreach (Smarty::$global_tpl_vars AS $key => $var) { - if (!array_key_exists($key, $_result)) { - $_result[$key] = $var->value; - } - } - } - - return $_result; - } - } - - /** - * clear the given assigned template variable. - * - * @param string|array $tpl_var the template variable(s) to clear - * - * @return Smarty_Internal_Data current Smarty_Internal_Data (or Smarty or Smarty_Internal_Template) instance for chaining - */ - public function clearAssign($tpl_var) { - if (is_array($tpl_var)) { - foreach ($tpl_var as $curr_var) { - unset($this->tpl_vars[$curr_var]); - } - } else { - unset($this->tpl_vars[$tpl_var]); - } - - return $this; - } - - /** - * clear all the assigned template variables. - * - * @return Smarty_Internal_Data current Smarty_Internal_Data (or Smarty or Smarty_Internal_Template) instance for chaining - */ - public function clearAllAssign() { - $this->tpl_vars = array(); - - return $this; - } - - /** - * load a config file, optionally load just selected sections - * - * @param string $config_file filename - * @param mixed $sections array of section names, single section or null - * - * @return Smarty_Internal_Data current Smarty_Internal_Data (or Smarty or Smarty_Internal_Template) instance for chaining - */ - public function configLoad($config_file, $sections = null) { - // load Config class - Smarty_Internal_Extension_Config::configLoad($this, $config_file, $sections); - return $this; - } - - /** - * gets the object of a Smarty variable - * - * @param string $variable the name of the Smarty variable - * @param object $_ptr optional pointer to data object - * @param boolean $search_parents search also in parent data - * @param bool $error_enable - * - * @return object the object of the variable - */ - public function getVariable($variable, $_ptr = null, $search_parents = true, $error_enable = true) { - if ($_ptr === null) { - $_ptr = $this; - } - while ($_ptr !== null) { - if (isset($_ptr->tpl_vars[$variable])) { - // found it, return it - return $_ptr->tpl_vars[$variable]; - } - // not found, try at parent - if ($search_parents) { - $_ptr = $_ptr->parent; - } else { - $_ptr = null; - } - } - if (isset(Smarty::$global_tpl_vars[$variable])) { - // found it, return it - return Smarty::$global_tpl_vars[$variable]; - } - $smarty = isset($this->smarty) ? $this->smarty : $this; - if ($smarty->error_unassigned && $error_enable) { - // force a notice - $x = $$variable; - } - - return new Smarty_Undefined_Variable; - } - - /** - * gets a config variable - * - * @param string $variable the name of the config variable - * @param bool $error_enable - * - * @return mixed the value of the config variable - */ - public function getConfigVariable($variable, $error_enable = true) { - return Smarty_Internal_Extension_Config::getConfigVariable($this, $variable, $error_enable = true); - } - - /** - * Returns a single or all config variables - * - * @param string $varname variable name or null - * @param bool $search_parents - * - * @return string variable value or or array of variables - */ - public function getConfigVars($varname = null, $search_parents = true) { - return Smarty_Internal_Extension_Config::getConfigVars($this, $varname, $search_parents); - } - - /** - * Deassigns a single or all config variables - * - * @param string $varname variable name or null - * - * @return Smarty_Internal_Data current Smarty_Internal_Data (or Smarty or Smarty_Internal_Template) instance for chaining - */ - public function clearConfig($varname = null) { - return Smarty_Internal_Extension_Config::clearConfig($this, $varname); - } - - /** - * gets a stream variable - * - * @param string $variable the stream of the variable - * - * @throws SmartyException - * @return mixed the value of the stream variable - */ - public function getStreamVariable($variable) { - $_result = ''; - $fp = fopen($variable, 'r+'); - if ($fp) { - while (!feof($fp) && ($current_line = fgets($fp)) !== false) { - $_result .= $current_line; - } - fclose($fp); - - return $_result; - } - $smarty = isset($this->smarty) ? $this->smarty : $this; - if ($smarty->error_unassigned) { - throw new SmartyException('Undefined stream variable "' . $variable . '"'); - } else { - return null; - } - } -} diff --git a/library/smarty/libs/sysplugins/smarty_internal_debug.php b/library/smarty/libs/sysplugins/smarty_internal_debug.php deleted file mode 100644 --- a/library/smarty/libs/sysplugins/smarty_internal_debug.php +++ /dev/null @@ -1,408 +0,0 @@ -<?php -/** - * Smarty Internal Plugin Debug - * Class to collect data for the Smarty Debugging Console - * - * @package Smarty - * @subpackage Debug - * @author Uwe Tews - */ - -/** - * Smarty Internal Plugin Debug Class - * - * @package Smarty - * @subpackage Debug - */ -class Smarty_Internal_Debug extends Smarty_Internal_Data { - /** - * template data - * - * @var array - */ - public static $template_data = array(); - - /** - * List of uid's which shall be ignored - * - * @var array - */ - public static $ignore_uid = array(); - - /** - * Index of display() and fetch() calls - * - * @var int - */ - public static $index = 0; - - /** - * Counter for window offset - * - * @var int - */ - public static $offset = 0; - - /** - * Start logging template - * - * @param \Smarty_Internal_Template $template template - * @param null $mode true: display false: fetch null: subtemolate - */ - public static function start_template(Smarty_Internal_Template $template, $mode = null) { - if (isset($mode)) { - self::$index++; - self::$offset++; - self::$template_data[self::$index] = null; - } - $key = self::get_key($template); - self::$template_data[self::$index][$key]['start_template_time'] = microtime(true); - } - - /** - * End logging of cache time - * - * @param \Smarty_Internal_Template $template cached template - */ - public static function end_template(Smarty_Internal_Template $template) { - $key = self::get_key($template); - self::$template_data[self::$index][$key]['total_time'] += microtime(true) - self::$template_data[self::$index][$key]['start_template_time']; - self::$template_data[self::$index][$key]['properties'] = $template->properties; - } - - /** - * Start logging of compile time - * - * @param \Smarty_Internal_Template $template - */ - public static function start_compile(Smarty_Internal_Template $template) { - static $_is_stringy = array('string' => true, 'eval' => true); - if (!empty($template->compiler->trace_uid)) { - $key = $template->compiler->trace_uid; - if (!isset(self::$template_data[self::$index][$key])) { - if (isset($_is_stringy[$template->source->type])) { - self::$template_data[self::$index][$key]['name'] = '\'' . substr($template->source->name, 0, 25) . '...\''; - } else { - self::$template_data[self::$index][$key]['name'] = $template->source->filepath; - } - self::$template_data[self::$index][$key]['compile_time'] = 0; - self::$template_data[self::$index][$key]['render_time'] = 0; - self::$template_data[self::$index][$key]['cache_time'] = 0; - } - } else { - if (isset(self::$ignore_uid[$template->source->uid])) { - return; - } - $key = self::get_key($template); - } - self::$template_data[self::$index][$key]['start_time'] = microtime(true); - } - - /** - * End logging of compile time - * - * @param \Smarty_Internal_Template $template - */ - public static function end_compile(Smarty_Internal_Template $template) { - if (!empty($template->compiler->trace_uid)) { - $key = $template->compiler->trace_uid; - } else { - if (isset(self::$ignore_uid[$template->source->uid])) { - return; - } - - $key = self::get_key($template); - } - self::$template_data[self::$index][$key]['compile_time'] += microtime(true) - self::$template_data[self::$index][$key]['start_time']; - } - - /** - * Start logging of render time - * - * @param \Smarty_Internal_Template $template - */ - public static function start_render(Smarty_Internal_Template $template) { - $key = self::get_key($template); - self::$template_data[self::$index][$key]['start_time'] = microtime(true); - } - - /** - * End logging of compile time - * - * @param \Smarty_Internal_Template $template - */ - public static function end_render(Smarty_Internal_Template $template) { - $key = self::get_key($template); - self::$template_data[self::$index][$key]['render_time'] += microtime(true) - self::$template_data[self::$index][$key]['start_time']; - } - - /** - * Start logging of cache time - * - * @param \Smarty_Internal_Template $template cached template - */ - public static function start_cache(Smarty_Internal_Template $template) { - $key = self::get_key($template); - self::$template_data[self::$index][$key]['start_time'] = microtime(true); - } - - /** - * End logging of cache time - * - * @param \Smarty_Internal_Template $template cached template - */ - public static function end_cache(Smarty_Internal_Template $template) { - $key = self::get_key($template); - self::$template_data[self::$index][$key]['cache_time'] += microtime(true) - self::$template_data[self::$index][$key]['start_time']; - } - - /** - * Register template object - * - * @param \Smarty_Internal_Template $template cached template - */ - public static function register_template(Smarty_Internal_Template $template) { - } - - /** - * Register data object - * - * @param \Smarty_Data $data data object - */ - public static function register_data(Smarty_Data $data) { - } - - /** - * Opens a window for the Smarty Debugging Console and display the data - * - * @param Smarty_Internal_Template|Smarty $obj object to debug - * @param bool $full - */ - public static function display_debug($obj, $full = false) { - if (!$full) { - self::$offset++; - $savedIndex = self::$index; - self::$index = 9999; - } - if ($obj instanceof Smarty) { - $smarty = $obj; - } else { - $smarty = $obj->smarty; - } - // create fresh instance of smarty for displaying the debug console - // to avoid problems if the application did overload the Smarty class - $debObj = new Smarty(); - // copy the working dirs from application - $debObj->setCompileDir($smarty->getCompileDir()); - // init properties by hand as user may have edited the original Smarty class - $debObj->setPluginsDir(is_dir(__DIR__ . '/../plugins') ? __DIR__ . '/../plugins' : $smarty->getPluginsDir()); - $debObj->force_compile = false; - $debObj->compile_check = true; - $debObj->left_delimiter = '{'; - $debObj->right_delimiter = '}'; - $debObj->security_policy = null; - $debObj->debugging = false; - $debObj->debugging_ctrl = 'NONE'; - $debObj->error_reporting = E_ALL & ~E_NOTICE; - $debObj->debug_tpl = isset($smarty->debug_tpl) ? $smarty->debug_tpl : 'file:' . __DIR__ . '/../debug.tpl'; - $debObj->registered_plugins = array(); - $debObj->registered_resources = array(); - $debObj->registered_filters = array(); - $debObj->autoload_filters = array(); - $debObj->default_modifiers = array(); - $debObj->escape_html = true; - $debObj->caching = false; - $debObj->compile_id = null; - $debObj->cache_id = null; - // prepare information of assigned variables - $ptr = self::get_debug_vars($obj); - $_assigned_vars = $ptr->tpl_vars; - ksort($_assigned_vars); - $_config_vars = $ptr->config_vars; - ksort($_config_vars); - $debugging = $smarty->debugging; - - $_template = new Smarty_Internal_Template($debObj->debug_tpl, $debObj); - if ($obj instanceof Smarty_Internal_Template) { - $_template->assign('template_name', $obj->source->type . ':' . $obj->source->name); - } - if ($obj instanceof Smarty || $full) { - $_template->assign('template_data', self::$template_data[self::$index]); - } else { - $_template->assign('template_data', null); - } - $_template->assign('assigned_vars', $_assigned_vars); - $_template->assign('config_vars', $_config_vars); - $_template->assign('execution_time', microtime(true) - $smarty->start_time); - $_template->assign('display_mode', $debugging == 2 || !$full); - $_template->assign('offset', self::$offset * 50); - echo $_template->fetch(); - if (isset($full)) { - self::$index--; - } - if (!$full) { - self::$index = $savedIndex; - } - } - - /** - * Recursively gets variables from all template/data scopes - * - * @param Smarty_Internal_Template|Smarty_Data $obj object to debug - * - * @return StdClass - */ - public static function get_debug_vars($obj) { - $config_vars = array(); - foreach ($obj->config_vars as $key => $var) { - $config_vars[$key]['value'] = $var; - if ($obj instanceof Smarty_Internal_Template) { - $config_vars[$key]['scope'] = $obj->source->type . ':' . $obj->source->name; - } elseif ($obj instanceof Smarty_Data) { - $tpl_vars[$key]['scope'] = $obj->dataObjectName; - } else { - $config_vars[$key]['scope'] = 'Smarty object'; - } - } - $tpl_vars = array(); - foreach ($obj->tpl_vars as $key => $var) { - foreach ($var as $varkey => $varvalue) { - if ($varkey == 'value') { - $tpl_vars[$key][$varkey] = $varvalue; - } else { - if ($varkey == 'nocache') { - if ($varvalue == true) { - $tpl_vars[$key][$varkey] = $varvalue; - } - } else { - if ($varkey != 'scope' || $varvalue !== 0) { - $tpl_vars[$key]['attributes'][$varkey] = $varvalue; - } - } - } - } - if ($obj instanceof Smarty_Internal_Template) { - $tpl_vars[$key]['scope'] = $obj->source->type . ':' . $obj->source->name; - } elseif ($obj instanceof Smarty_Data) { - $tpl_vars[$key]['scope'] = $obj->dataObjectName; - } else { - $tpl_vars[$key]['scope'] = 'Smarty object'; - } - } - - if (isset($obj->parent)) { - $parent = self::get_debug_vars($obj->parent); - foreach ($parent->tpl_vars as $name => $pvar) { - if (isset($tpl_vars[$name]) && $tpl_vars[$name]['value'] === $pvar['value']) { - $tpl_vars[$name]['scope'] = $pvar['scope']; - } - } - $tpl_vars = array_merge($parent->tpl_vars, $tpl_vars); - - foreach ($parent->config_vars as $name => $pvar) { - if (isset($config_vars[$name]) && $config_vars[$name]['value'] === $pvar['value']) { - $config_vars[$name]['scope'] = $pvar['scope']; - } - } - $config_vars = array_merge($parent->config_vars, $config_vars); - } else { - foreach (Smarty::$global_tpl_vars as $key => $var) { - if (!array_key_exists($key, $tpl_vars)) { - foreach ($var as $varkey => $varvalue) { - if ($varkey == 'value') { - $tpl_vars[$key][$varkey] = $varvalue; - } else { - if ($varkey == 'nocache') { - if ($varvalue == true) { - $tpl_vars[$key][$varkey] = $varvalue; - } - } else { - if ($varkey != 'scope' || $varvalue !== 0) { - $tpl_vars[$key]['attributes'][$varkey] = $varvalue; - } - } - } - } - $tpl_vars[$key]['scope'] = 'Global'; - } - } - } - - return (object)array('tpl_vars' => $tpl_vars, 'config_vars' => $config_vars); - } - - /** - * Return key into $template_data for template - * - * @param \Smarty_Internal_Template $template template object - * - * @return string key into $template_data - */ - private static function get_key(Smarty_Internal_Template $template) { - static $_is_stringy = array('string' => true, 'eval' => true); - // calculate Uid if not already done - if ($template->source->uid == '') { - $template->source->filepath; - } - $key = $template->source->uid; - if (isset(self::$template_data[self::$index][$key])) { - return $key; - } else { - if (isset($_is_stringy[$template->source->type])) { - self::$template_data[self::$index][$key]['name'] = '\'' . substr($template->source->name, 0, 25) . '...\''; - } else { - self::$template_data[self::$index][$key]['name'] = $template->source->filepath; - } - self::$template_data[self::$index][$key]['compile_time'] = 0; - self::$template_data[self::$index][$key]['render_time'] = 0; - self::$template_data[self::$index][$key]['cache_time'] = 0; - self::$template_data[self::$index][$key]['total_time'] = 0; - - return $key; - } - } - - /** - * Ignore template - * - * @param \Smarty_Internal_Template $template - */ - public static function ignore(Smarty_Internal_Template $template) { - // calculate Uid if not already done - if ($template->source->uid == '') { - $template->source->filepath; - } - self::$ignore_uid[$template->source->uid] = true; - } - - /** - * handle 'URL' debugging mode - * - * @param Smarty_Internal_Template $_template - */ - public static function debugUrl(Smarty_Internal_Template $_template) { - if (isset($_SERVER['QUERY_STRING'])) { - $_query_string = $_SERVER['QUERY_STRING']; - } else { - $_query_string = ''; - } - if (false !== strpos($_query_string, $_template->smarty->smarty_debug_id)) { - if (false !== strpos($_query_string, $_template->smarty->smarty_debug_id . '=on')) { - // enable debugging for this browser session - setcookie('SMARTY_DEBUG', true); - $_template->smarty->debugging = true; - } elseif (false !== strpos($_query_string, $_template->smarty->smarty_debug_id . '=off')) { - // disable debugging for this browser session - setcookie('SMARTY_DEBUG', false); - $_template->smarty->debugging = false; - } else { - // enable debugging for this page - $_template->smarty->debugging = true; - } - } else { - if (isset($_COOKIE['SMARTY_DEBUG'])) { - $_template->smarty->debugging = true; - } - } - } -} diff --git a/library/smarty/libs/sysplugins/smarty_internal_extension_codeframe.php b/library/smarty/libs/sysplugins/smarty_internal_extension_codeframe.php deleted file mode 100644 --- a/library/smarty/libs/sysplugins/smarty_internal_extension_codeframe.php +++ /dev/null @@ -1,123 +0,0 @@ -<?php -/** - * Smarty Internal Extension - * This file contains the Smarty template extension to create a code frame - * - * @package Smarty - * @subpackage Template - * @author Uwe Tews - */ - -/** - * Class Smarty_Internal_Extension_CodeFrame - * Create code frame for compiled and cached templates - */ -class Smarty_Internal_Extension_CodeFrame { - /** - * Create code frame for compiled and cached templates - * - * @param Smarty_Internal_Template $_template - * @param string $content optional template content - * @param bool $cache flag for cache file - * - * @return string - */ - public static function create(Smarty_Internal_Template $_template, $content = '', $cache = false) { - // build property code - $_template->properties['has_nocache_code'] = $_template->has_nocache_code || !empty($_template->required_plugins['nocache']); - $_template->properties['version'] = Smarty::SMARTY_VERSION; - if (!isset($_template->properties['unifunc'])) { - $_template->properties['unifunc'] = 'content_' . str_replace(array('.', ','), '_', uniqid('', true)); - } - $properties = $_template->properties; - if (!$cache) { - unset($properties['tpl_function']); - if (!empty($_template->compiler->templateProperties)) { - $properties['tpl_function'] = $_template->compiler->templateProperties['tpl_function']; - } - } - $output = "<?php\n"; - $output .= "/*%%SmartyHeaderCode:{$_template->properties['nocache_hash']}%%*/\n"; - if ($_template->smarty->direct_access_security) { - $output .= "if(!defined('SMARTY_DIR')) exit('no direct access allowed');\n"; - } - $output .= "\$_valid = \$_smarty_tpl->decodeProperties(" . var_export($properties, true) . ',' . ($cache ? 'true' : 'false') . ");\n"; - $output .= "/*/%%SmartyHeaderCode%%*/\n"; - $output .= "if (\$_valid && !is_callable('{$_template->properties['unifunc']}')) {\n"; - $output .= "function {$_template->properties['unifunc']} (\$_smarty_tpl) {\n"; - // include code for plugins - if (!$cache) { - if (!empty($_template->required_plugins['compiled'])) { - foreach ($_template->required_plugins['compiled'] as $tmp) { - foreach ($tmp as $data) { - $file = addslashes($data['file']); - if (is_Array($data['function'])) { - $output .= "if (!is_callable(array('{$data['function'][0]}','{$data['function'][1]}'))) require_once '{$file}';\n"; - } else { - $output .= "if (!is_callable('{$data['function']}')) require_once '{$file}';\n"; - } - } - } - } - if (!empty($_template->required_plugins['nocache'])) { - $_template->has_nocache_code = true; - $output .= "echo '/*%%SmartyNocache:{$_template->properties['nocache_hash']}%%*/<?php \$_smarty = \$_smarty_tpl->smarty; "; - foreach ($_template->required_plugins['nocache'] as $tmp) { - foreach ($tmp as $data) { - $file = addslashes($data['file']); - if (is_Array($data['function'])) { - $output .= addslashes("if (!is_callable(array('{$data['function'][0]}','{$data['function'][1]}'))) require_once '{$file}';\n"); - } else { - $output .= addslashes("if (!is_callable('{$data['function']}')) require_once '{$file}';\n"); - } - } - } - $output .= "?>/*/%%SmartyNocache:{$_template->properties['nocache_hash']}%%*/';\n"; - } - } - $output .= "?>\n"; - $output = self::appendCode($output, $content); - return self::appendCode($output, "<?php }\n}\n?>"); - } - - /** - * Create code frame of compiled template function - * - * @param \Smarty_Internal_Template $_template - * @param string $content - * - * @return string - */ - public static function createFunctionFrame(Smarty_Internal_Template $_template, $content = '') { - if (!isset($_template->properties['unifunc'])) { - $_template->properties['unifunc'] = 'content_' . str_replace(array('.', ','), '_', uniqid('', true)); - } - $output = "<?php\n"; - $output .= "/*%%SmartyHeaderCode:{$_template->properties['nocache_hash']}%%*/\n"; - $output .= "if (\$_valid && !is_callable('{$_template->properties['unifunc']}')) {\n"; - $output .= "function {$_template->properties['unifunc']} (\$_smarty_tpl) {\n"; - $output .= "?>\n" . $content; - $output .= "<?php\n"; - $output .= "/*/%%SmartyNocache:{$_template->properties['nocache_hash']}%%*/\n"; - $output .= "}\n}\n?>"; - return $output; - } - - /** - * Append code segments and remove unneeded ?> <?php transitions - * - * @param string $left - * @param string $right - * - * @return string - */ - public static function appendCode($left, $right) { - if (preg_match('/\s*\?>$/', $left) && preg_match('/^<\?php\s+/', $right)) { - $left = preg_replace('/\s*\?>$/', "\n", $left); - $left .= preg_replace('/^<\?php\s+/', '', $right); - } else { - $left .= $right; - } - return $left; - } -} \ No newline at end of file diff --git a/library/smarty/libs/sysplugins/smarty_internal_extension_config.php b/library/smarty/libs/sysplugins/smarty_internal_extension_config.php deleted file mode 100644 --- a/library/smarty/libs/sysplugins/smarty_internal_extension_config.php +++ /dev/null @@ -1,154 +0,0 @@ -<?php - -/** - * @package Smarty - * @subpackage PluginsInternal - */ -class Smarty_Internal_Extension_Config { - /** - * @param $obj - * @param $config_file - * @param null $sections - * @param string $scope - */ - static function configLoad($obj, $config_file, $sections = null, $scope = 'local') { - $smarty = isset($obj->smarty) ? $obj->smarty : $obj; - $confObj = new $smarty->template_class($config_file, $smarty, $obj); - $confObj->caching = Smarty::CACHING_OFF; - $confObj->source = Smarty_Template_Config::load($confObj); - $confObj->source->config_sections = $sections; - $confObj->source->scope = $scope; - $confObj->compiled = Smarty_Template_Compiled::load($confObj); - if ($confObj->smarty->debugging) { - Smarty_Internal_Debug::start_render($confObj); - } - $confObj->compiled->render($confObj); - if ($confObj->smarty->debugging) { - Smarty_Internal_Debug::end_render($confObj); - } - if ($obj instanceof Smarty_Internal_Template) { - $obj->properties['file_dependency'][$confObj->source->uid] = array($confObj->source->filepath, $confObj->source->timestamp, $confObj->source->type); - } - } - - /** - * load config variables - * - * @param mixed $sections array of section names, single section or null - * @param string $scope global,parent or local - * - * @throws Exception - */ - static function loadConfigVars($_template, $_config_vars) { - $scope = $_template->source->scope; - // pointer to scope (local scope is parent of template object - $scope_ptr = $_template->parent; - if ($scope == 'parent') { - if (isset($_template->parent->parent)) { - $scope_ptr = $_template->parent->parent; - } - } elseif ($scope == 'root' || $scope == 'global') { - while (isset($scope_ptr->parent)) { - $scope_ptr = $scope_ptr->parent; - } - } - // copy global config vars - foreach ($_config_vars['vars'] as $variable => $value) { - if ($_template->smarty->config_overwrite || !isset($scope_ptr->config_vars[$variable])) { - $scope_ptr->config_vars[$variable] = $value; - } else { - $scope_ptr->config_vars[$variable] = array_merge((array)$scope_ptr->config_vars[$variable], (array)$value); - } - } - // scan sections - $sections = $_template->source->config_sections; - if (!empty($sections)) { - foreach ((array)$sections as $_template_section) { - if (isset($_config_vars['sections'][$_template_section])) { - foreach ($_config_vars['sections'][$_template_section]['vars'] as $variable => $value) { - if ($_template->smarty->config_overwrite || !isset($scope_ptr->config_vars[$variable])) { - $scope_ptr->config_vars[$variable] = $value; - } else { - $scope_ptr->config_vars[$variable] = array_merge((array)$scope_ptr->config_vars[$variable], (array)$value); - } - } - } - } - } - } - - /** - * Returns a single or all config variables - * - * @param string $varname variable name or null - * @param bool $search_parents - * - * @return string variable value or or array of variables - */ - static function getConfigVars($obj, $varname = null, $search_parents = true) { - $_ptr = $obj; - $var_array = array(); - while ($_ptr !== null) { - if (isset($varname)) { - if (isset($_ptr->config_vars[$varname])) { - return $_ptr->config_vars[$varname]; - } - } else { - $var_array = array_merge($_ptr->config_vars, $var_array); - } - // not found, try at parent - if ($search_parents) { - $_ptr = $_ptr->parent; - } else { - $_ptr = null; - } - } - if (isset($varname)) { - return ''; - } else { - return $var_array; - } - } - - /** - * gets a config variable - * - * @param string $variable the name of the config variable - * @param bool $error_enable - * - * @return mixed the value of the config variable - */ - static function getConfigVariable($obj, $variable, $error_enable = true) { - $_ptr = $obj; - while ($_ptr !== null) { - if (isset($_ptr->config_vars[$variable])) { - // found it, return it - return $_ptr->config_vars[$variable]; - } - // not found, try at parent - $_ptr = $_ptr->parent; - } - if ($obj->error_unassigned && $error_enable) { - // force a notice - $x = $$variable; - } - - return null; - } - - /** - * remove a single or all config variables - * - * @param string $name variable name or null - * - * @return Smarty_Internal_Data current Smarty_Internal_Data (or Smarty or Smarty_Internal_Template) instance for chaining - */ - static function clearConfig($obj, $name = null) { - if (isset($name)) { - unset($obj->config_vars[$name]); - } else { - $obj->config_vars = array(); - } - return $obj; - } -} diff --git a/library/smarty/libs/sysplugins/smarty_internal_extension_defaulttemplatehandler.php b/library/smarty/libs/sysplugins/smarty_internal_extension_defaulttemplatehandler.php deleted file mode 100644 --- a/library/smarty/libs/sysplugins/smarty_internal_extension_defaulttemplatehandler.php +++ /dev/null @@ -1,81 +0,0 @@ -<?php -/** - * Smarty Resource Extension - * - * @package Smarty - * @subpackage TemplateResources - * @author Uwe Tews - */ - -/** - * Smarty Resource Extension - * Default template and config file handling - * - * @package Smarty - * @subpackage TemplateResources - */ -class Smarty_Internal_Extension_DefaultTemplateHandler { - - /** - * get default content from template of config resource handler - * - * @param Smarty_Internal_Template $_template - * @param Smarty_Internal_Template_Source $source - * @param Smarty_Resource $resObj - */ - static function _getDefault(Smarty_Internal_Template $_template, &$source, &$resObj) { - if ($source->isConfig) { - $default_handler = $_template->smarty->default_config_handler_func; - } else { - $default_handler = $_template->smarty->default_template_handler_func; - } - $_content = $_timestamp = null; - $_return = call_user_func_array($default_handler, - array($source->type, $source->name, &$_content, &$_timestamp, $source->smarty)); - if (is_string($_return)) { - $source->exists = is_file($_return); - if ($source->exists) { - $source->timestamp = filemtime($_return); - } - $source->filepath = $_return; - } elseif ($_return === true) { - $source->content = $_content; - $source->timestamp = $_timestamp; - $source->exists = true; - $source->recompiled = true; - $source->filepath = false; - } - } - - /** - * register template default handler - * - * @param Smarty $smarty - * @param mixed $callback - * - * @throws SmartyException - */ - static function registerDefaultTemplateHandler(Smarty $smarty, $callback) { - if (is_callable($callback)) { - $smarty->default_template_handler_func = $callback; - } else { - throw new SmartyException("Default template handler not callable"); - } - } - - /** - * register config default handler - * - * @param Smarty $smarty - * @param mixed $callback - * - * @throws SmartyException - */ - static function registerDefaultConfigHandler(Smarty $smarty, $callback) { - if (is_callable($callback)) { - $smarty->default_config_handler_func = $callback; - } else { - throw new SmartyException("Default config handler not callable"); - } - } -} \ No newline at end of file diff --git a/library/smarty/libs/sysplugins/smarty_internal_filter_handler.php b/library/smarty/libs/sysplugins/smarty_internal_filter_handler.php deleted file mode 100644 --- a/library/smarty/libs/sysplugins/smarty_internal_filter_handler.php +++ /dev/null @@ -1,65 +0,0 @@ -<?php -/** - * Smarty Internal Plugin Filter Handler - * Smarty filter handler class - * - * @package Smarty - * @subpackage PluginsInternal - * @author Uwe Tews - */ - -/** - * Class for filter processing - * - * @package Smarty - * @subpackage PluginsInternal - */ -class Smarty_Internal_Filter_Handler { - /** - * Run filters over content - * The filters will be lazy loaded if required - * class name format: Smarty_FilterType_FilterName - * plugin filename format: filtertype.filtername.php - * Smarty2 filter plugins could be used - * - * @param string $type the type of filter ('pre','post','output') which shall run - * @param string $content the content which shall be processed by the filters - * @param Smarty_Internal_Template $template template object - * - * @throws SmartyException - * @return string the filtered content - */ - public static function runFilter($type, $content, Smarty_Internal_Template $template) { - $output = $content; - // loop over autoload filters of specified type - if (!empty($template->smarty->autoload_filters[$type])) { - foreach ((array)$template->smarty->autoload_filters[$type] as $name) { - $plugin_name = "Smarty_{$type}filter_{$name}"; - if ($template->smarty->loadPlugin($plugin_name)) { - if (function_exists($plugin_name)) { - // use loaded Smarty2 style plugin - $output = $plugin_name($output, $template); - } elseif (class_exists($plugin_name, false)) { - // loaded class of filter plugin - $output = call_user_func(array($plugin_name, 'execute'), $output, $template); - } - } else { - // nothing found, throw exception - throw new SmartyException("Unable to load filter {$plugin_name}"); - } - } - } - // loop over registerd filters of specified type - if (!empty($template->smarty->registered_filters[$type])) { - foreach ($template->smarty->registered_filters[$type] as $key => $name) { - if (is_array($template->smarty->registered_filters[$type][$key])) { - $output = call_user_func($template->smarty->registered_filters[$type][$key], $output, $template); - } else { - $output = $template->smarty->registered_filters[$type][$key]($output, $template); - } - } - } - // return filtered output - return $output; - } -} diff --git a/library/smarty/libs/sysplugins/smarty_internal_function_call_handler.php b/library/smarty/libs/sysplugins/smarty_internal_function_call_handler.php deleted file mode 100644 --- a/library/smarty/libs/sysplugins/smarty_internal_function_call_handler.php +++ /dev/null @@ -1,69 +0,0 @@ -<?php -/** - * Smarty Internal Plugin Function Call Handler - * - * @package Smarty - * @subpackage PluginsInternal - * @author Uwe Tews - */ - -/** - * This class does handles template functions defined with the {function} tag missing in cache file. - * It can happen when the template function was called with the nocache option or within a nocache section. - * The template function will be loaded from it's compiled template file, executed and added to the cache file - * for later use. - * - * @package Smarty - * @subpackage PluginsInternal - */ -class Smarty_Internal_Function_Call_Handler { - /** - * This function handles calls to template functions defined by {function} - * It does create a PHP function at the first call - * - * @param string $_name template function name - * @param Smarty_Internal_Template $_smarty_tpl - * @param string $_function PHP function name - * @param array $_params Smarty variables passed as call parameter - * @param bool $_nocache nocache flag - * - * @return bool - */ - public static function call($_name, Smarty_Internal_Template $_smarty_tpl, $_function, $_params, $_nocache) { - $funcParam = $_smarty_tpl->properties['tpl_function'][$_name]; - if (is_file($funcParam['compiled_filepath'])) { - // read compiled file - $code = file_get_contents($funcParam['compiled_filepath']); - // grab template function - if (preg_match("/\/\* {$_function} \*\/([\S\s]*?)\/\*\/ {$_function} \*\//", $code, $match)) { - // grab source info from file dependency - preg_match("/\s*'{$funcParam['uid']}'([\S\s]*?)\),/", $code, $match1); - unset($code); - $output = ''; - // make PHP function known - eval($match[0]); - if (function_exists($_function)) { - // search cache file template - $tplPtr = $_smarty_tpl; - while (!isset($tplPtr->cached) && isset($tplPtr->parent)) { - $tplPtr = $tplPtr->parent; - } - // add template function code to cache file - if (isset($tplPtr->cached)) { - $cache = $tplPtr->cached; - $content = $cache->read($tplPtr); - if ($content) { - // check if we must update file dependency - if (!preg_match("/'{$funcParam['uid']}'([\S\s]*?)'nocache_hash'/", $content, $match2)) { - $content = preg_replace("/('file_dependency'([\S\s]*?)\()/", "\\1{$match1[0]}", $content); - } - $cache->write($tplPtr, $content . "<?php " . $match[0] . "?>\n"); - } - } - return true; - } - } - } - return false; - } -} diff --git a/library/smarty/libs/sysplugins/smarty_internal_get_include_path.php b/library/smarty/libs/sysplugins/smarty_internal_get_include_path.php deleted file mode 100644 --- a/library/smarty/libs/sysplugins/smarty_internal_get_include_path.php +++ /dev/null @@ -1,44 +0,0 @@ -<?php -/** - * Smarty read include path plugin - * - * @package Smarty - * @subpackage PluginsInternal - * @author Monte Ohrt - */ - -/** - * Smarty Internal Read Include Path Class - * - * @package Smarty - * @subpackage PluginsInternal - */ -class Smarty_Internal_Get_Include_Path { - /** - * Return full file path from PHP include_path - * - * @param string $filepath filepath - * - * @return string|boolean full filepath or false - */ - public static function getIncludePath($filepath) { - static $_include_path = null; - - if (function_exists('stream_resolve_include_path')) { - // available since PHP 5.3.2 - return stream_resolve_include_path($filepath); - } - - if ($_include_path === null) { - $_include_path = explode(PATH_SEPARATOR, get_include_path()); - } - - foreach ($_include_path as $_path) { - if (file_exists($_path . DS . $filepath)) { - return $_path . DS . $filepath; - } - } - - return false; - } -} diff --git a/library/smarty/libs/sysplugins/smarty_internal_nocache_insert.php b/library/smarty/libs/sysplugins/smarty_internal_nocache_insert.php deleted file mode 100644 --- a/library/smarty/libs/sysplugins/smarty_internal_nocache_insert.php +++ /dev/null @@ -1,49 +0,0 @@ -<?php -/** - * Smarty Internal Plugin Nocache Insert - * Compiles the {insert} tag into the cache file - * - * @package Smarty - * @subpackage Compiler - * @author Uwe Tews - */ - -/** - * Smarty Internal Plugin Compile Insert Class - * - * @package Smarty - * @subpackage Compiler - */ -class Smarty_Internal_Nocache_Insert { - /** - * Compiles code for the {insert} tag into cache file - * - * @param string $_function insert function name - * @param array $_attr array with parameter - * @param Smarty_Internal_Template $_template template object - * @param string $_script script name to load or 'null' - * @param string $_assign optional variable name - * - * @return string compiled code - */ - public static function compile($_function, $_attr, $_template, $_script, $_assign = null) { - $_output = '<?php '; - if ($_script != 'null') { - // script which must be included - // code for script file loading - $_output .= "require_once '{$_script}';"; - } - // call insert - if (isset($_assign)) { - $_output .= "\$_smarty_tpl->assign('{$_assign}' , {$_function} (" . var_export($_attr, true) . ",\$_smarty_tpl), true);?>"; - } else { - $_output .= "echo {$_function}(" . var_export($_attr, true) . ",\$_smarty_tpl);?>"; - } - $_tpl = $_template; - while ($_tpl->parent instanceof Smarty_Internal_Template) { - $_tpl = $_tpl->parent; - } - - return "/*%%SmartyNocache:{$_tpl->properties['nocache_hash']}%%*/" . $_output . "/*/%%SmartyNocache:{$_tpl->properties['nocache_hash']}%%*/"; - } -} diff --git a/library/smarty/libs/sysplugins/smarty_internal_parsetree.php b/library/smarty/libs/sysplugins/smarty_internal_parsetree.php deleted file mode 100644 --- a/library/smarty/libs/sysplugins/smarty_internal_parsetree.php +++ /dev/null @@ -1,48 +0,0 @@ -<?php -/** - * Smarty Internal Plugin Templateparser Parsetrees - * These are classes to build parsetrees in the template parser - * - * @package Smarty - * @subpackage Compiler - * @author Thue Kristensen - * @author Uwe Tews - */ - -/** - * @package Smarty - * @subpackage Compiler - * @ignore - */ -abstract class Smarty_Internal_ParseTree { - - /** - * Parser object - * - * @var object - */ - public $parser; - - /** - * Buffer content - * - * @var mixed - */ - public $data; - - /** - * Subtree array - * - * @var array - */ - public $subtrees = array(); - - /** - * Return buffer - * - * @return string buffer content - */ - abstract public function to_smarty_php(); -} - - diff --git a/library/smarty/libs/sysplugins/smarty_internal_parsetree_code.php b/library/smarty/libs/sysplugins/smarty_internal_parsetree_code.php deleted file mode 100644 --- a/library/smarty/libs/sysplugins/smarty_internal_parsetree_code.php +++ /dev/null @@ -1,39 +0,0 @@ -<?php -/** - * Smarty Internal Plugin Templateparser Parse Tree - * These are classes to build parse trees in the template parser - * - * @package Smarty - * @subpackage Compiler - * @author Thue Kristensen - * @author Uwe Tews - */ - -/** - * Code fragment inside a tag . - * - * @package Smarty - * @subpackage Compiler - * @ignore - */ -class Smarty_Internal_ParseTree_Code extends Smarty_Internal_ParseTree { - /** - * Create parse tree buffer for code fragment - * - * @param object $parser parser object - * @param string $data content - */ - public function __construct($parser, $data) { - $this->parser = $parser; - $this->data = $data; - } - - /** - * Return buffer content in parentheses - * - * @return string content - */ - public function to_smarty_php() { - return sprintf("(%s)", $this->data); - } -} diff --git a/library/smarty/libs/sysplugins/smarty_internal_parsetree_dq.php b/library/smarty/libs/sysplugins/smarty_internal_parsetree_dq.php deleted file mode 100644 --- a/library/smarty/libs/sysplugins/smarty_internal_parsetree_dq.php +++ /dev/null @@ -1,82 +0,0 @@ -<?php - -/** - * Double quoted string inside a tag. - * - * @package Smarty - * @subpackage Compiler - * @ignore - */ - -/** - * Double quoted string inside a tag. - * - * @package Smarty - * @subpackage Compiler - * @ignore - */ -class Smarty_Internal_ParseTree_Dq extends Smarty_Internal_ParseTree { - /** - * Create parse tree buffer for double quoted string subtrees - * - * @param object $parser parser object - * @param Smarty_Internal_ParseTree $subtree parse tree buffer - */ - public function __construct($parser, Smarty_Internal_ParseTree $subtree) { - $this->parser = $parser; - $this->subtrees[] = $subtree; - if ($subtree instanceof Smarty_Internal_ParseTree_Tag) { - $this->parser->block_nesting_level = count($this->parser->compiler->_tag_stack); - } - } - - /** - * Append buffer to subtree - * - * @param Smarty_Internal_ParseTree $subtree parse tree buffer - */ - public function append_subtree(Smarty_Internal_ParseTree $subtree) { - $last_subtree = count($this->subtrees) - 1; - if ($last_subtree >= 0 && $this->subtrees[$last_subtree] instanceof Smarty_Internal_ParseTree_Tag && $this->subtrees[$last_subtree]->saved_block_nesting < $this->parser->block_nesting_level) { - if ($subtree instanceof Smarty_Internal_ParseTree_Code) { - $this->subtrees[$last_subtree]->data = $this->parser->compiler->appendCode($this->subtrees[$last_subtree]->data, '<?php echo ' . $subtree->data . ';?>'); - } elseif ($subtree instanceof Smarty_Internal_ParseTree_DqContent) { - $this->subtrees[$last_subtree]->data = $this->parser->compiler->appendCode($this->subtrees[$last_subtree]->data, '<?php echo "' . $subtree->data . '";?>'); - } else { - $this->subtrees[$last_subtree]->data = $this->parser->compiler->appendCode($this->subtrees[$last_subtree]->data, $subtree->data); - } - } else { - $this->subtrees[] = $subtree; - } - if ($subtree instanceof Smarty_Internal_ParseTree_Tag) { - $this->parser->block_nesting_level = count($this->parser->compiler->_tag_stack); - } - } - - /** - * Merge subtree buffer content together - * - * @return string compiled template code - */ - public function to_smarty_php() { - $code = ''; - foreach ($this->subtrees as $subtree) { - if ($code !== "") { - $code .= "."; - } - if ($subtree instanceof Smarty_Internal_ParseTree_Tag) { - $more_php = $subtree->assign_to_var(); - } else { - $more_php = $subtree->to_smarty_php(); - } - - $code .= $more_php; - - if (!$subtree instanceof Smarty_Internal_ParseTree_DqContent) { - $this->parser->compiler->has_variable_string = true; - } - } - - return $code; - } -} diff --git a/library/smarty/libs/sysplugins/smarty_internal_parsetree_dqcontent.php b/library/smarty/libs/sysplugins/smarty_internal_parsetree_dqcontent.php deleted file mode 100644 --- a/library/smarty/libs/sysplugins/smarty_internal_parsetree_dqcontent.php +++ /dev/null @@ -1,39 +0,0 @@ -<?php -/** - * Smarty Internal Plugin Templateparser Parse Tree - * These are classes to build parse tree in the template parser - * - * @package Smarty - * @subpackage Compiler - * @author Thue Kristensen - * @author Uwe Tews - */ - -/** - * Raw chars as part of a double quoted string. - * - * @package Smarty - * @subpackage Compiler - * @ignore - */ -class Smarty_Internal_ParseTree_DqContent extends Smarty_Internal_ParseTree { - /** - * Create parse tree buffer with string content - * - * @param object $parser parser object - * @param string $data string section - */ - public function __construct($parser, $data) { - $this->parser = $parser; - $this->data = $data; - } - - /** - * Return content as double quoted string - * - * @return string doubled quoted string - */ - public function to_smarty_php() { - return '"' . $this->data . '"'; - } -} diff --git a/library/smarty/libs/sysplugins/smarty_internal_parsetree_tag.php b/library/smarty/libs/sysplugins/smarty_internal_parsetree_tag.php deleted file mode 100644 --- a/library/smarty/libs/sysplugins/smarty_internal_parsetree_tag.php +++ /dev/null @@ -1,62 +0,0 @@ -<?php -/** - * Smarty Internal Plugin Templateparser Parse Tree - * These are classes to build parse tree in the template parser - * - * @package Smarty - * @subpackage Compiler - * @author Thue Kristensen - * @author Uwe Tews - */ - -/** - * A complete smarty tag. - * - * @package Smarty - * @subpackage Compiler - * @ignore - */ -class Smarty_Internal_ParseTree_Tag extends Smarty_Internal_ParseTree { - - /** - * Saved block nesting level - * - * @var int - */ - public $saved_block_nesting; - - /** - * Create parse tree buffer for Smarty tag - * - * @param object $parser parser object - * @param string $data content - */ - public function __construct($parser, $data) { - $this->parser = $parser; - $this->data = $data; - $this->saved_block_nesting = $parser->block_nesting_level; - } - - /** - * Return buffer content - * - * @return string content - */ - public function to_smarty_php() { - return $this->data; - } - - /** - * Return complied code that loads the evaluated output of buffer content into a temporary variable - * - * @return string template code - */ - public function assign_to_var() { - $var = sprintf('$_tmp%d', ++Smarty_Internal_Templateparser::$prefix_number); - $tmp = $this->parser->compiler->appendCode('<?php ob_start();?>', $this->data); - $tmp = $this->parser->compiler->appendCode($tmp, "<?php {$var}=ob_get_clean();?>"); - $this->parser->compiler->prefix_code[] = sprintf("%s", $tmp); - - return $var; - } -} diff --git a/library/smarty/libs/sysplugins/smarty_internal_parsetree_template.php b/library/smarty/libs/sysplugins/smarty_internal_parsetree_template.php deleted file mode 100644 --- a/library/smarty/libs/sysplugins/smarty_internal_parsetree_template.php +++ /dev/null @@ -1,94 +0,0 @@ -<?php -/** - * Smarty Internal Plugin Templateparser Parse Tree - * These are classes to build parse tree in the template parser - * - * @package Smarty - * @subpackage Compiler - * @author Thue Kristensen - * @author Uwe Tews - */ - -/** - * Template element - * - * @package Smarty - * @subpackage Compiler - * @ignore - */ -class Smarty_Internal_ParseTree_Template extends Smarty_Internal_ParseTree { - - /** - * Array of template elements - * - * @var array - */ - public $subtrees = Array(); - - /** - * Create root of parse tree for template elements - * - * @param object $parser parse object - */ - public function __construct($parser) { - $this->parser = $parser; - } - - /** - * Append buffer to subtree - * - * @param Smarty_Internal_ParseTree $subtree - */ - public function append_subtree(Smarty_Internal_ParseTree $subtree) { - if (!empty($subtree->subtrees)) { - $this->subtrees = array_merge($this->subtrees, $subtree->subtrees); - } else { - if ($subtree->data !== '') { - $this->subtrees[] = $subtree; - } - } - } - - /** - * Sanitize and merge subtree buffers together - * - * @return string template code content - */ - public function to_smarty_php() { - $code = ''; - for ($key = 0, $cnt = count($this->subtrees); $key < $cnt; $key++) { - if ($this->subtrees[$key] instanceof Smarty_Internal_ParseTree_Text) { - $subtree = $this->subtrees[$key]->to_smarty_php(); - while ($key + 1 < $cnt && ($this->subtrees[$key + 1] instanceof Smarty_Internal_ParseTree_Text || $this->subtrees[$key + 1]->data == '')) { - $key++; - if ($this->subtrees[$key]->data == '') { - continue; - } - $subtree .= $this->subtrees[$key]->to_smarty_php(); - } - if ($subtree == '') { - continue; - } - $code .= preg_replace('/((<%)|(%>)|(<\?php)|(<\?)|(\?>)|(<\/?script))/', "<?php echo '\$1'; ?>\n", $subtree); - continue; - } - if ($this->subtrees[$key] instanceof Smarty_Internal_ParseTree_Tag) { - $subtree = $this->subtrees[$key]->to_smarty_php(); - while ($key + 1 < $cnt && ($this->subtrees[$key + 1] instanceof Smarty_Internal_ParseTree_Tag || $this->subtrees[$key + 1]->data == '')) { - $key++; - if ($this->subtrees[$key]->data == '') { - continue; - } - $subtree = $this->parser->compiler->appendCode($subtree, $this->subtrees[$key]->to_smarty_php()); - } - if ($subtree == '') { - continue; - } - $code .= $subtree; - continue; - } - $code .= $this->subtrees[$key]->to_smarty_php(); - } - return $code; - } -} diff --git a/library/smarty/libs/sysplugins/smarty_internal_parsetree_text.php b/library/smarty/libs/sysplugins/smarty_internal_parsetree_text.php deleted file mode 100644 --- a/library/smarty/libs/sysplugins/smarty_internal_parsetree_text.php +++ /dev/null @@ -1,37 +0,0 @@ -<?php - -/** - * Smarty Internal Plugin Templateparser Parse Tree - * These are classes to build parse tree in the template parser - * - * @package Smarty - * @subpackage Compiler - * @author Thue Kristensen - * @author Uwe Tews - * * - * template text - * @package Smarty - * @subpackage Compiler - * @ignore - */ -class Smarty_Internal_ParseTree_Text extends Smarty_Internal_ParseTree { - /** - * Create template text buffer - * - * @param object $parser parser object - * @param string $data text - */ - public function __construct($parser, $data) { - $this->parser = $parser; - $this->data = $data; - } - - /** - * Return buffer content - * - * @return string text - */ - public function to_smarty_php() { - return $this->data; - } -} diff --git a/library/smarty/libs/sysplugins/smarty_internal_resource_eval.php b/library/smarty/libs/sysplugins/smarty_internal_resource_eval.php deleted file mode 100644 --- a/library/smarty/libs/sysplugins/smarty_internal_resource_eval.php +++ /dev/null @@ -1,90 +0,0 @@ -<?php -/** - * Smarty Internal Plugin Resource Eval - * - * @package Smarty - * @subpackage TemplateResources - * @author Uwe Tews - * @author Rodney Rehm - */ - -/** - * Smarty Internal Plugin Resource Eval - * Implements the strings as resource for Smarty template - * {@internal unlike string-resources the compiled state of eval-resources is NOT saved for subsequent access}} - * - * @package Smarty - * @subpackage TemplateResources - */ -class Smarty_Internal_Resource_Eval extends Smarty_Resource_Recompiled { - /** - * populate Source Object with meta data from Resource - * - * @param Smarty_Template_Source $source source object - * @param Smarty_Internal_Template $_template template object - * - * @return void - */ - public function populate(Smarty_Template_Source $source, Smarty_Internal_Template $_template = null) { - $source->uid = $source->filepath = sha1($source->name); - $source->timestamp = false; - $source->exists = true; - } - - /** - * Load template's source from $resource_name into current template object - * - * @uses decode() to decode base64 and urlencoded template_resources - * - * @param Smarty_Template_Source $source source object - * - * @return string template source - */ - public function getContent(Smarty_Template_Source $source) { - return $this->decode($source->name); - } - - /** - * decode base64 and urlencode - * - * @param string $string template_resource to decode - * - * @return string decoded template_resource - */ - protected function decode($string) { - // decode if specified - if (($pos = strpos($string, ':')) !== false) { - if (!strncmp($string, 'base64', 6)) { - return base64_decode(substr($string, 7)); - } elseif (!strncmp($string, 'urlencode', 9)) { - return urldecode(substr($string, 10)); - } - } - - return $string; - } - - /** - * modify resource_name according to resource handlers specifications - * - * @param Smarty $smarty Smarty instance - * @param string $resource_name resource_name to make unique - * @param boolean $isConfig flag for config resource - * - * @return string unique resource name - */ - public function buildUniqueResourceName(Smarty $smarty, $resource_name, $isConfig = false) { - return get_class($this) . '#' . $this->decode($resource_name); - } - - /** - * Determine basename for compiled filename - * - * @param Smarty_Template_Source $source source object - * - * @return string resource's basename - */ - public function getBasename(Smarty_Template_Source $source) { - return ''; - } -} diff --git a/library/smarty/libs/sysplugins/smarty_internal_resource_extends.php b/library/smarty/libs/sysplugins/smarty_internal_resource_extends.php deleted file mode 100644 --- a/library/smarty/libs/sysplugins/smarty_internal_resource_extends.php +++ /dev/null @@ -1,107 +0,0 @@ -<?php -/** - * Smarty Internal Plugin Resource Extends - * - * @package Smarty - * @subpackage TemplateResources - * @author Uwe Tews - * @author Rodney Rehm - */ - -/** - * Smarty Internal Plugin Resource Extends - * Implements the file system as resource for Smarty which {extend}s a chain of template files templates - * - * @package Smarty - * @subpackage TemplateResources - */ -class Smarty_Internal_Resource_Extends extends Smarty_Resource { - /** - * mbstring.overload flag - * - * @var int - */ - public $mbstring_overload = 0; - - /** - * populate Source Object with meta data from Resource - * - * @param Smarty_Template_Source $source source object - * @param Smarty_Internal_Template $_template template object - * - * @throws SmartyException - */ - public function populate(Smarty_Template_Source $source, Smarty_Internal_Template $_template = null) { - $uid = sha1(getcwd()); - $sources = array(); - $components = explode('|', $source->name); - $exists = true; - foreach ($components as $component) { - $s = Smarty_Resource::source(null, $source->smarty, $component); - if ($s->type == 'php') { - throw new SmartyException("Resource type {$s->type} cannot be used with the extends resource type"); - } - $sources[$s->uid] = $s; - $uid .= realpath($s->filepath); - if ($_template && $_template->smarty->compile_check) { - $exists = $exists && $s->exists; - } - } - $source->components = $sources; - $source->filepath = $s->filepath; - $source->uid = sha1($uid); - if ($_template && $_template->smarty->compile_check) { - $source->timestamp = $s->timestamp; - $source->exists = $exists; - } - // need the template at getContent() - $source->template = $_template; - } - - /** - * populate Source Object with timestamp and exists from Resource - * - * @param Smarty_Template_Source $source source object - */ - public function populateTimestamp(Smarty_Template_Source $source) { - $source->exists = true; - foreach ($source->components as $s) { - $source->exists = $source->exists && $s->exists; - } - $source->timestamp = $s->timestamp; - } - - /** - * Load template's source from files into current template object - * - * @param Smarty_Template_Source $source source object - * - * @return string template source - * @throws SmartyException if source cannot be loaded - */ - public function getContent(Smarty_Template_Source $source) { - if (!$source->exists) { - throw new SmartyException("Unable to read template {$source->type} '{$source->name}'"); - } - - $_components = array_reverse($source->components); - - $_content = ''; - foreach ($_components as $_component) { - // read content - $_content .= $_component->content; - } - return $_content; - } - - /** - * Determine basename for compiled filename - * - * @param Smarty_Template_Source $source source object - * - * @return string resource's basename - */ - public function getBasename(Smarty_Template_Source $source) { - return str_replace(':', '.', basename($source->filepath)); - } -} diff --git a/library/smarty/libs/sysplugins/smarty_internal_resource_file.php b/library/smarty/libs/sysplugins/smarty_internal_resource_file.php deleted file mode 100644 --- a/library/smarty/libs/sysplugins/smarty_internal_resource_file.php +++ /dev/null @@ -1,208 +0,0 @@ -<?php -/** - * Smarty Internal Plugin Resource File - * - * @package Smarty - * @subpackage TemplateResources - * @author Uwe Tews - * @author Rodney Rehm - */ - -/** - * Smarty Internal Plugin Resource File - * Implements the file system as resource for Smarty templates - * - * @package Smarty - * @subpackage TemplateResources - */ -class Smarty_Internal_Resource_File extends Smarty_Resource { - /** - * build template filepath by traversing the template_dir array - * - * @param Smarty_Template_Source $source source object - * @param Smarty_Internal_Template $_template template object - * - * @return string fully qualified filepath - * @throws SmartyException - */ - protected function buildFilepath(Smarty_Template_Source $source, Smarty_Internal_Template $_template = null) { - $file = $source->name; - preg_match('#^(?P<absolute>[\\\/]|[a-zA-Z]:[\\\/])|(\[(?P<index>[^\]]+)\])|(?P<rel>\.[\\\/])#', $file, $fileMatch); - // save basename - if (!empty($fileMatch['absolute'])) { - $file = $this->normalizePath($file); - return is_file($file) ? $file : false; - } - // go relative to a given template? - if (!empty($fileMatch['rel']) && $_template && $_template->parent instanceof Smarty_Internal_Template) { - if ($_template->parent->source->type != 'file' && $_template->parent->source->type != 'extends' && !$_template->parent->allow_relative_path) { - throw new SmartyException("Template '{$file}' cannot be relative to template of resource type '{$_template->parent->source->type}'"); - } - $path = dirname($_template->parent->source->filepath) . DS . $file; - // normalize path - $path = $this->normalizePath($path); - // files relative to a template only get one shot - return is_file($path) ? $path : false; - } - - if ($source->isConfig) { - $_directories = $source->smarty->getConfigDir(); - } else { - $_directories = $source->smarty->getTemplateDir(); - } - // template_dir index? - if (!empty($fileMatch['index'])) { - $index = $fileMatch['index']; - $_directory = null; - // try string indexes - if (isset($_directories[$index])) { - $_directory = $_directories[$index]; - } elseif (is_numeric($index)) { - // try numeric index - $index = (int)$index; - if (isset($_directories[$index])) { - $_directory = $_directories[$index]; - } else { - // try at location index - $keys = array_keys($_directories); - $_directory = $_directories[$keys[$index]]; - } - } - if ($_directory) { - preg_match('#\](.+)$#', $file, $fileMatch); - $path = $_directory . $fileMatch[1]; - $path = $this->normalizePath($path); - if (is_file($path)) { - return $path; - } - } else { - // index not found - return false; - } - } - - // relative file name? - foreach ($_directories as $_directory) { - $_filepath = $_directory . $file; - $path = $this->normalizePath($_filepath); - if (is_file($path)) { - return $path; - } - if ($source->smarty->use_include_path && !preg_match('/^([\/\\\\]|[a-zA-Z]:[\/\\\\])/', $_directory)) { - // try PHP include_path - if (function_exists('stream_resolve_include_path')) { - $_filepath = stream_resolve_include_path($_filepath); - } else { - $_filepath = Smarty_Internal_Get_Include_Path::getIncludePath($_filepath); - } - if ($_filepath !== false) { - $path = $this->normalizePath($_filepath); - if (is_file($path)) { - return $path; - } - } - } - } - // Could be relative to cwd - $path = $this->normalizePath(getcwd() . DS . $file); - return is_file($path) ? $path : false; - } - - /** - * Normalize path - * - remove /./ and /../ - * - make it absolute - * - * @param string $path file path - * - * @return string - */ - public function normalizePath($path) { - if ($path[0] == '.') { - $path = getcwd() . DS . $path; - } - $path = preg_replace('#[\\\/]+([.][\\\/]+)*#', DS, $path); - while (strrpos($path, '.' . DS) !== false) { - $path = preg_replace('#([\\\/]([^\\\/]+[\\\/]){2}([.][.][\\\/]){2})|([\\\/][^\\\/]+[\\\/][.][.][\\\/])#', DS, $path); - } - return $path; - } - - /** - * test is file exists and save timestamp - * - * @param Smarty_Template_Source $source source object - * @param string $file file name - * - * @return bool true if file exists - */ - protected function fileExists(Smarty_Template_Source $source, $file) { - $source->timestamp = is_file($file) ? @filemtime($file) : false; - return $source->exists = !!$source->timestamp; - } - - /** - * populate Source Object with meta data from Resource - * - * @param Smarty_Template_Source $source source object - * @param Smarty_Internal_Template $_template template object - */ - public function populate(Smarty_Template_Source $source, Smarty_Internal_Template $_template = null) { - $source->filepath = $this->buildFilepath($source, $_template); - - if ($source->filepath !== false) { - if (is_object($source->smarty->security_policy)) { - $source->smarty->security_policy->isTrustedResourceDir($source->filepath); - } - $source->exists = true; - $source->uid = sha1($source->filepath); - if ($source->smarty->compile_check && !isset($source->timestamp)) { - $source->timestamp = @filemtime($source->filepath); - } - } else { - $source->timestamp = false; - $source->exists = false; - } - } - - /** - * populate Source Object with timestamp and exists from Resource - * - * @param Smarty_Template_Source $source source object - */ - public function populateTimestamp(Smarty_Template_Source $source) { - $source->timestamp = $source->exists = is_file($source->filepath); - if ($source->exists) { - $source->timestamp = @filemtime($source->filepath); - } - } - - /** - * Load template's source from file into current template object - * - * @param Smarty_Template_Source $source source object - * - * @return string template source - * @throws SmartyException if source cannot be loaded - */ - public function getContent(Smarty_Template_Source $source) { - if ($source->timestamp) { - return file_get_contents($source->filepath); - } - if ($source instanceof Smarty_Config_Source) { - throw new SmartyException("Unable to read config {$source->type} '{$source->name}'"); - } - throw new SmartyException("Unable to read template {$source->type} '{$source->name}'"); - } - - /** - * Determine basename for compiled filename - * - * @param Smarty_Template_Source $source source object - * - * @return string resource's basename - */ - public function getBasename(Smarty_Template_Source $source) { - return basename($source->filepath); - } -} diff --git a/library/smarty/libs/sysplugins/smarty_internal_resource_php.php b/library/smarty/libs/sysplugins/smarty_internal_resource_php.php deleted file mode 100644 --- a/library/smarty/libs/sysplugins/smarty_internal_resource_php.php +++ /dev/null @@ -1,94 +0,0 @@ -<?php - -/** - * Smarty Internal Plugin Resource PHP - * Implements the file system as resource for PHP templates - * - * @package Smarty - * @subpackage TemplateResources - * @author Uwe Tews - * @author Rodney Rehm - */ -class Smarty_Internal_Resource_Php extends Smarty_Internal_Resource_File { - /** - * Flag that it's an uncompiled resource - * - * @var bool - */ - public $uncompiled = true; - /** - * container for short_open_tag directive's value before executing PHP templates - * - * @var string - */ - protected $short_open_tag; - - /** - * Create a new PHP Resource - */ - public function __construct() { - $this->short_open_tag = ini_get('short_open_tag'); - } - - /** - * Load template's source from file into current template object - * - * @param Smarty_Template_Source $source source object - * - * @return string template source - * @throws SmartyException if source cannot be loaded - */ - public function getContent(Smarty_Template_Source $source) { - if ($source->timestamp) { - return ''; - } - throw new SmartyException("Unable to read template {$source->type} '{$source->name}'"); - } - - /** - * Render and output the template (without using the compiler) - * - * @param Smarty_Template_Source $source source object - * @param Smarty_Internal_Template $_template template object - * - * @return void - * @throws SmartyException if template cannot be loaded or allow_php_templates is disabled - */ - public function renderUncompiled(Smarty_Template_Source $source, Smarty_Internal_Template $_template) { - if (!$source->smarty->allow_php_templates) { - throw new SmartyException("PHP templates are disabled"); - } - if (!$source->exists) { - if ($_template->parent instanceof Smarty_Internal_Template) { - $parent_resource = " in '{$_template->parent->template_resource}'"; - } else { - $parent_resource = ''; - } - throw new SmartyException("Unable to load template {$source->type} '{$source->name}'{$parent_resource}"); - } - - // prepare variables - extract($_template->getTemplateVars()); - - // include PHP template with short open tags enabled - ini_set('short_open_tag', '1'); - /** @var Smarty_Internal_Template $_smarty_template - * used in included file - */ - $_smarty_template = $_template; - include($source->filepath); - ini_set('short_open_tag', $this->short_open_tag); - } - - /** - * populate compiled object with compiled filepath - * - * @param Smarty_Template_Compiled $compiled compiled object - * @param Smarty_Internal_Template $_template template object (is ignored) - */ - public function populateCompiledFilepath(Smarty_Template_Compiled $compiled, Smarty_Internal_Template $_template) { - $compiled->filepath = false; - $compiled->timestamp = false; - $compiled->exists = false; - } -} diff --git a/library/smarty/libs/sysplugins/smarty_internal_resource_registered.php b/library/smarty/libs/sysplugins/smarty_internal_resource_registered.php deleted file mode 100644 --- a/library/smarty/libs/sysplugins/smarty_internal_resource_registered.php +++ /dev/null @@ -1,92 +0,0 @@ -<?php -/** - * Smarty Internal Plugin Resource Registered - * - * @package Smarty - * @subpackage TemplateResources - * @author Uwe Tews - * @author Rodney Rehm - */ - -/** - * Smarty Internal Plugin Resource Registered - * Implements the registered resource for Smarty template - * - * @package Smarty - * @subpackage TemplateResources - * @deprecated - */ -class Smarty_Internal_Resource_Registered extends Smarty_Resource { - /** - * populate Source Object with meta data from Resource - * - * @param Smarty_Template_Source $source source object - * @param Smarty_Internal_Template $_template template object - * - * @return void - */ - public function populate(Smarty_Template_Source $source, Smarty_Internal_Template $_template = null) { - $source->filepath = $source->type . ':' . $source->name; - $source->uid = sha1($source->filepath); - if ($source->smarty->compile_check) { - $source->timestamp = $this->getTemplateTimestamp($source); - $source->exists = !!$source->timestamp; - } - } - - /** - * populate Source Object with timestamp and exists from Resource - * - * @param Smarty_Template_Source $source source object - * - * @return void - */ - public function populateTimestamp(Smarty_Template_Source $source) { - $source->timestamp = $this->getTemplateTimestamp($source); - $source->exists = !!$source->timestamp; - } - - /** - * Get timestamp (epoch) the template source was modified - * - * @param Smarty_Template_Source $source source object - * - * @return integer|boolean timestamp (epoch) the template was modified, false if resources has no timestamp - */ - public function getTemplateTimestamp(Smarty_Template_Source $source) { - // return timestamp - $time_stamp = false; - call_user_func_array($source->smarty->registered_resources[$source->type][0][1], array($source->name, &$time_stamp, $source->smarty)); - - return is_numeric($time_stamp) ? (int)$time_stamp : $time_stamp; - } - - /** - * Load template's source by invoking the registered callback into current template object - * - * @param Smarty_Template_Source $source source object - * - * @return string template source - * @throws SmartyException if source cannot be loaded - */ - public function getContent(Smarty_Template_Source $source) { - // return template string - $t = call_user_func_array($source->smarty->registered_resources[$source->type][0][0], array($source->name, &$source->content, $source->smarty)); - if (is_bool($t) && !$t) { - throw new SmartyException("Unable to read template {$source->type} '{$source->name}'"); - } - - return $source->content; - } - - /** - * Determine basename for compiled filename - * - * @param Smarty_Template_Source $source source object - * - * @return string resource's basename - */ - public function getBasename(Smarty_Template_Source $source) { - return basename($source->name); - } -} diff --git a/library/smarty/libs/sysplugins/smarty_internal_resource_stream.php b/library/smarty/libs/sysplugins/smarty_internal_resource_stream.php deleted file mode 100644 --- a/library/smarty/libs/sysplugins/smarty_internal_resource_stream.php +++ /dev/null @@ -1,77 +0,0 @@ -<?php -/** - * Smarty Internal Plugin Resource Stream - * Implements the streams as resource for Smarty template - * - * @package Smarty - * @subpackage TemplateResources - * @author Uwe Tews - * @author Rodney Rehm - */ - -/** - * Smarty Internal Plugin Resource Stream - * Implements the streams as resource for Smarty template - * - * @link http://php.net/streams - * @package Smarty - * @subpackage TemplateResources - */ -class Smarty_Internal_Resource_Stream extends Smarty_Resource_Recompiled { - /** - * populate Source Object with meta data from Resource - * - * @param Smarty_Template_Source $source source object - * @param Smarty_Internal_Template $_template template object - * - * @return void - */ - public function populate(Smarty_Template_Source $source, Smarty_Internal_Template $_template = null) { - if (strpos($source->resource, '://') !== false) { - $source->filepath = $source->resource; - } else { - $source->filepath = str_replace(':', '://', $source->resource); - } - $source->uid = false; - $source->content = $this->getContent($source); - $source->timestamp = false; - $source->exists = !!$source->content; - } - - /** - * Load template's source from stream into current template object - * - * @param Smarty_Template_Source $source source object - * - * @return string template source - * @throws SmartyException if source cannot be loaded - */ - public function getContent(Smarty_Template_Source $source) { - $t = ''; - // the availability of the stream has already been checked in Smarty_Resource::fetch() - $fp = fopen($source->filepath, 'r+'); - if ($fp) { - while (!feof($fp) && ($current_line = fgets($fp)) !== false) { - $t .= $current_line; - } - fclose($fp); - - return $t; - } else { - return false; - } - } - - /** - * modify resource_name according to resource handlers specifications - * - * @param Smarty $smarty Smarty instance - * @param string $resource_name resource_name to make unique - * @param boolean $isConfig flag for config resource - * - * @return string unique resource name - */ - public function buildUniqueResourceName(Smarty $smarty, $resource_name, $isConfig = false) { - return get_class($this) . '#' . $resource_name; - } -} diff --git a/library/smarty/libs/sysplugins/smarty_internal_resource_string.php b/library/smarty/libs/sysplugins/smarty_internal_resource_string.php deleted file mode 100644 --- a/library/smarty/libs/sysplugins/smarty_internal_resource_string.php +++ /dev/null @@ -1,91 +0,0 @@ -<?php -/** - * Smarty Internal Plugin Resource String - * - * @package Smarty - * @subpackage TemplateResources - * @author Uwe Tews - * @author Rodney Rehm - */ - -/** - * Smarty Internal Plugin Resource String - * Implements the strings as resource for Smarty template - * {@internal unlike eval-resources the compiled state of string-resources is saved for subsequent access}} - * - * @package Smarty - * @subpackage TemplateResources - */ -class Smarty_Internal_Resource_String extends Smarty_Resource { - /** - * populate Source Object with meta data from Resource - * - * @param Smarty_Template_Source $source source object - * @param Smarty_Internal_Template $_template template object - * - * @return void - */ - public function populate(Smarty_Template_Source $source, Smarty_Internal_Template $_template = null) { - $source->uid = $source->filepath = sha1($source->name); - $source->timestamp = 0; - $source->exists = true; - } - - /** - * Load template's source from $resource_name into current template object - * - * @uses decode() to decode base64 and urlencoded template_resources - * - * @param Smarty_Template_Source $source source object - * - * @return string template source - */ - public function getContent(Smarty_Template_Source $source) { - return $this->decode($source->name); - } - - /** - * decode base64 and urlencode - * - * @param string $string template_resource to decode - * - * @return string decoded template_resource - */ - protected function decode($string) { - // decode if specified - if (($pos = strpos($string, ':')) !== false) { - if (!strncmp($string, 'base64', 6)) { - return base64_decode(substr($string, 7)); - } elseif (!strncmp($string, 'urlencode', 9)) { - return urldecode(substr($string, 10)); - } - } - - return $string; - } - - /** - * modify resource_name according to resource handlers specifications - * - * @param Smarty $smarty Smarty instance - * @param string $resource_name resource_name to make unique - * @param boolean $isConfig flag for config resource - * - * @return string unique resource name - */ - public function buildUniqueResourceName(Smarty $smarty, $resource_name, $isConfig = false) { - return get_class($this) . '#' . $this->decode($resource_name); - } - - /** - * Determine basename for compiled filename - * Always returns an empty string. - * - * @param Smarty_Template_Source $source source object - * - * @return string resource's basename - */ - public function getBasename(Smarty_Template_Source $source) { - return ''; - } -} diff --git a/library/smarty/libs/sysplugins/smarty_internal_smartytemplatecompiler.php b/library/smarty/libs/sysplugins/smarty_internal_smartytemplatecompiler.php deleted file mode 100644 --- a/library/smarty/libs/sysplugins/smarty_internal_smartytemplatecompiler.php +++ /dev/null @@ -1,133 +0,0 @@ -<?php -/** - * Smarty Internal Plugin Smarty Template Compiler Base - * This file contains the basic classes and methods for compiling Smarty templates with lexer/parser - * - * @package Smarty - * @subpackage Compiler - * @author Uwe Tews - */ - -/** - * @ignore - */ -//include 'smarty_internal_parsetree.php'; - -/** - * Class SmartyTemplateCompiler - * - * @package Smarty - * @subpackage Compiler - */ -class Smarty_Internal_SmartyTemplateCompiler extends Smarty_Internal_TemplateCompilerBase { - /** - * Lexer class name - * - * @var string - */ - public $lexer_class; - - /** - * Parser class name - * - * @var string - */ - public $parser_class; - - /** - * Lexer object - * - * @var object - */ - public $lex; - - /** - * Parser object - * - * @var object - */ - public $parser; - - /** - * array of vars which can be compiled in local scope - * - * @var array - */ - public $local_var = array(); - - /** - * Initialize compiler - * - * @param string $lexer_class class name - * @param string $parser_class class name - * @param Smarty $smarty global instance - */ - public function __construct($lexer_class, $parser_class, $smarty) { - $this->smarty = $smarty; - parent::__construct(); - // get required plugins - $this->lexer_class = $lexer_class; - $this->parser_class = $parser_class; - } - - /** - * method to compile a Smarty template - * - * @param mixed $_content template source - * - * @return bool true if compiling succeeded, false if it failed - */ - protected function doCompile($_content, $isTemplateSource = false) { - /* here is where the compiling takes place. Smarty - tags in the templates are replaces with PHP code, - then written to compiled files. */ - // init the lexer/parser to compile the template - $this->lex = new $this->lexer_class(str_replace(array("\r\n", "\r"), "\n", $_content), $this); - $this->parser = new $this->parser_class($this->lex, $this); - if ($isTemplateSource) { - $this->parser->insertPhpCode("<?php\n\$_smarty_tpl->properties['nocache_hash'] = '{$this->nocache_hash}';\n?>\n"); - } - if ($this->inheritance_child) { - // start state on child templates - $this->lex->yypushstate(Smarty_Internal_Templatelexer::CHILDBODY); - } - if (function_exists('mb_internal_encoding') && ((int)ini_get('mbstring.func_overload')) & 2) { - $mbEncoding = mb_internal_encoding(); - mb_internal_encoding('ASCII'); - } else { - $mbEncoding = null; - } - - if ($this->smarty->_parserdebug) { - $this->parser->PrintTrace(); - $this->lex->PrintTrace(); - } - // get tokens from lexer and parse them - while ($this->lex->yylex() && !$this->abort_and_recompile) { - if ($this->smarty->_parserdebug) { - echo "<pre>Line {$this->lex->line} Parsing {$this->parser->yyTokenName[$this->lex->token]} Token " . - htmlentities($this->lex->value) . "</pre>"; - } - $this->parser->doParse($this->lex->token, $this->lex->value); - } - - if ($this->abort_and_recompile) { - // exit here on abort - return false; - } - // finish parsing process - $this->parser->doParse(0, 0); - if ($mbEncoding) { - mb_internal_encoding($mbEncoding); - } - // check for unclosed tags - if (count($this->_tag_stack) > 0) { - // get stacked info - list($openTag, $_data) = array_pop($this->_tag_stack); - $this->trigger_template_error("unclosed {$this->smarty->left_delimiter}" . $openTag . "{$this->smarty->right_delimiter} tag"); - } - // return compiled code - // return str_replace(array("? >\n<?php","? ><?php"), array('',''), $this->parser->retvalue); - return $this->parser->retvalue; - } -} diff --git a/library/smarty/libs/sysplugins/smarty_internal_template.php b/library/smarty/libs/sysplugins/smarty_internal_template.php deleted file mode 100644 --- a/library/smarty/libs/sysplugins/smarty_internal_template.php +++ /dev/null @@ -1,893 +0,0 @@ -<?php -/** - * Smarty Internal Plugin Template - * This file contains the Smarty template engine - * - * @package Smarty - * @subpackage Template - * @author Uwe Tews - */ - -/** - * Main class with template data structures and methods - * - * @package Smarty - * @subpackage Template - * - * @property Smarty_Template_Source $source - * @property Smarty_Template_Compiled $compiled - * @property Smarty_Template_Cached $cached - */ -class Smarty_Internal_Template extends Smarty_Internal_TemplateBase { - /** - * Global smarty instance - * - * @var Smarty - */ - public $smarty = null; - - /** - * Template resource - * - * @var string - */ - public $template_resource = null; - /** - * Saved template Id - * - * @var null|string - */ - public $templateId = null; - /** - * flag if compiled template is invalid and must be (re)compiled - * - * @var bool - */ - public $mustCompile = null; - /** - * flag if template does contain nocache code sections - * - * @var bool - */ - public $has_nocache_code = false; - /** - * special compiled and cached template properties - * - * @var array - */ - public $properties = array('file_dependency' => array(), - 'nocache_hash' => '', - 'tpl_function' => array(), - ); - /** - * required plugins - * - * @var array - */ - public $required_plugins = array('compiled' => array(), 'nocache' => array()); - /** - * blocks for template inheritance - * - * @var array - */ - public $block_data = array(); - /** - * variable filters - * - * @var array - */ - public $variable_filters = array(); - /** - * optional log of tag/attributes - * - * @var array - */ - public $used_tags = array(); - /** - * internal flag to allow relative path in child template blocks - * - * @var bool - */ - public $allow_relative_path = false; - /** - * internal capture runtime stack - * - * @var array - */ - public $_capture_stack = array(0 => array()); - - /** - * Create template data object - * Some of the global Smarty settings copied to template scope - * It load the required template resources and caching plugins - * - * @param string $template_resource template resource string - * @param Smarty $smarty Smarty instance - * @param Smarty_Internal_Template $_parent back pointer to parent object with variables or null - * @param mixed $_cache_id cache id or null - * @param mixed $_compile_id compile id or null - * @param bool $_caching use caching? - * @param int $_cache_lifetime cache life-time in seconds - */ - public function __construct($template_resource, $smarty, $_parent = null, $_cache_id = null, $_compile_id = null, $_caching = null, $_cache_lifetime = null) { - $this->smarty = &$smarty; - // Smarty parameter - $this->cache_id = $_cache_id === null ? $this->smarty->cache_id : $_cache_id; - $this->compile_id = $_compile_id === null ? $this->smarty->compile_id : $_compile_id; - $this->caching = $_caching === null ? $this->smarty->caching : $_caching; - if ($this->caching === true) { - $this->caching = Smarty::CACHING_LIFETIME_CURRENT; - } - $this->cache_lifetime = $_cache_lifetime === null ? $this->smarty->cache_lifetime : $_cache_lifetime; - $this->parent = $_parent; - // Template resource - $this->template_resource = $template_resource; - // copy block data of template inheritance - if ($this->parent instanceof Smarty_Internal_Template) { - $this->block_data = $this->parent->block_data; - } - } - - /** - * fetches rendered template - * - * @throws Exception - * @throws SmartyException - * @return string rendered template output - */ - public function fetch() { - return $this->render(true, false, false); - } - - /** - * displays a Smarty template - */ - public function display() { - $this->render(true, false, true); - } - - /** - * render template - * - * @param bool $merge_tpl_vars if true parent template variables merged in to local scope - * @param bool $no_output_filter if true do not run output filter - * @param bool $display true: display, false: fetch null: subtemplate - * - * @throws Exception - * @throws SmartyException - * @return string rendered template output - */ - public function render($merge_tpl_vars = false, $no_output_filter = true, $display = null) { - $parentIsTpl = $this->parent instanceof Smarty_Internal_Template; - if ($this->smarty->debugging) { - Smarty_Internal_Debug::start_template($this, $display); - } - $save_tpl_vars = null; - $save_config_vars = null; - // merge all variable scopes into template - if ($merge_tpl_vars) { - // save local variables - $save_tpl_vars = $this->tpl_vars; - $save_config_vars = $this->config_vars; - $ptr_array = array($this); - $ptr = $this; - while (isset($ptr->parent)) { - $ptr_array[] = $ptr = $ptr->parent; - } - $ptr_array = array_reverse($ptr_array); - $parent_ptr = reset($ptr_array); - $tpl_vars = $parent_ptr->tpl_vars; - $config_vars = $parent_ptr->config_vars; - while ($parent_ptr = next($ptr_array)) { - if (!empty($parent_ptr->tpl_vars)) { - $tpl_vars = array_merge($tpl_vars, $parent_ptr->tpl_vars); - } - if (!empty($parent_ptr->config_vars)) { - $config_vars = array_merge($config_vars, $parent_ptr->config_vars); - } - } - if (!empty(Smarty::$global_tpl_vars)) { - $tpl_vars = array_merge(Smarty::$global_tpl_vars, $tpl_vars); - } - $this->tpl_vars = $tpl_vars; - $this->config_vars = $config_vars; - } - // dummy local smarty variable - if (!isset($this->tpl_vars['smarty'])) { - $this->tpl_vars['smarty'] = new Smarty_Variable; - } - $_smarty_old_error_level = isset($this->smarty->error_reporting) ? error_reporting($this->smarty->error_reporting) : null; - // check URL debugging control - if (!$this->smarty->debugging && $this->smarty->debugging_ctrl == 'URL') { - Smarty_Internal_Debug::debugUrl($this); - } - if (!isset($this->source)) { - $this->loadSource(); - } - // checks if template exists - if (!$this->source->exists) { - if ($parentIsTpl) { - $parent_resource = " in '{$this->parent->template_resource}'"; - } else { - $parent_resource = ''; - } - throw new SmartyException("Unable to load template {$this->source->type} '{$this->source->name}'{$parent_resource}"); - } - // disable caching for evaluated code - if ($this->source->recompiled) { - $this->caching = false; - } - // read from cache or render - $isCacheTpl = $this->caching == Smarty::CACHING_LIFETIME_CURRENT || $this->caching == Smarty::CACHING_LIFETIME_SAVED; - if ($isCacheTpl) { - if (!isset($this->cached)) { - $this->loadCached(); - } - $this->cached->isCached($this); - } - if (!($isCacheTpl) || !$this->cached->valid) { - if ($isCacheTpl) { - $this->properties['tpl_function'] = array(); - } - // render template (not loaded and not in cache) - if ($this->smarty->debugging) { - Smarty_Internal_Debug::start_render($this); - } - if (!$this->source->uncompiled) { - // render compiled code - if (!isset($this->compiled)) { - $this->loadCompiled(); - } - $content = $this->compiled->render($this); - } else { - $content = $this->source->renderUncompiled($this); - } - if (!$this->source->recompiled && empty($this->properties['file_dependency'][$this->source->uid])) { - $this->properties['file_dependency'][$this->source->uid] = array($this->source->filepath, $this->source->timestamp, $this->source->type); - } - if ($parentIsTpl) { - $this->parent->properties['file_dependency'] = array_merge($this->parent->properties['file_dependency'], $this->properties['file_dependency']); - //$this->parent->properties['tpl_function'] = array_merge($this->parent->properties['tpl_function'], $this->properties['tpl_function']); - } - if ($this->smarty->debugging) { - Smarty_Internal_Debug::end_render($this); - } - // write to cache when necessary - if (!$this->source->recompiled && $isCacheTpl) { - if ($this->smarty->debugging) { - Smarty_Internal_Debug::start_cache($this); - } - $this->cached->updateCache($this, $content, $no_output_filter); - $compile_check = $this->smarty->compile_check; - $this->smarty->compile_check = false; - if ($parentIsTpl) { - $this->properties['tpl_function'] = $this->parent->properties['tpl_function']; - } - if (!$this->cached->processed) { - $this->cached->process($this); - } - $this->smarty->compile_check = $compile_check; - $content = $this->getRenderedTemplateCode(); - if ($this->smarty->debugging) { - Smarty_Internal_Debug::end_cache($this); - } - } else { - if (!empty($this->properties['nocache_hash']) && !empty($this->parent->properties['nocache_hash'])) { - // replace nocache_hash - $content = str_replace("{$this->properties['nocache_hash']}", $this->parent->properties['nocache_hash'], $content); - $this->parent->has_nocache_code = $this->parent->has_nocache_code || $this->has_nocache_code; - } - } - } else { - if ($this->smarty->debugging) { - Smarty_Internal_Debug::start_cache($this); - } - $content = $this->cached->render($this); - if ($this->smarty->debugging) { - Smarty_Internal_Debug::end_cache($this); - } - } - if ((!$this->caching || $this->has_nocache_code || $this->source->recompiled) && !$no_output_filter && (isset($this->smarty->autoload_filters['output']) || isset($this->smarty->registered_filters['output']))) { - $content = Smarty_Internal_Filter_Handler::runFilter('output', $content, $this); - } - if (isset($_smarty_old_error_level)) { - error_reporting($_smarty_old_error_level); - } - // display or fetch - if ($display) { - if ($this->caching && $this->smarty->cache_modified_check) { - $this->cached->cacheModifiedCheck($this, $content); - } else { - echo $content; - } - if ($this->smarty->debugging) { - Smarty_Internal_Debug::end_template($this); - } - // debug output - if ($this->smarty->debugging) { - Smarty_Internal_Debug::display_debug($this, true); - } - if ($merge_tpl_vars) { - // restore local variables - $this->tpl_vars = $save_tpl_vars; - $this->config_vars = $save_config_vars; - } - return ''; - } else { - if ($merge_tpl_vars) { - // restore local variables - $this->tpl_vars = $save_tpl_vars; - $this->config_vars = $save_config_vars; - } - if ($this->smarty->debugging) { - Smarty_Internal_Debug::end_template($this); - } - if ($this->smarty->debugging == 2 and $display === false) { - if ($this->smarty->debugging) { - Smarty_Internal_Debug::display_debug($this, true); - } - } - if ($parentIsTpl) { - $this->parent->properties['tpl_function'] = array_merge($this->parent->properties['tpl_function'], $this->properties['tpl_function']); - foreach ($this->required_plugins as $code => $tmp1) { - foreach ($tmp1 as $name => $tmp) { - foreach ($tmp as $type => $data) { - $this->parent->required_plugins[$code][$name][$type] = $data; - } - } - } - } - // return cache content - return $content; - } - } - - /** - * get rendered template content by calling compiled or cached template code - * - * @return string - * @throws Exception - */ - public function getRenderedTemplateCode() { - $level = ob_get_level(); - try { - ob_start(); - if (empty($this->properties['unifunc']) || !is_callable($this->properties['unifunc'])) { - throw new SmartyException("Invalid compiled template for '{$this->template_resource}'"); - } - if (isset($this->smarty->security_policy)) { - $this->smarty->security_policy->startTemplate($this); - } - array_unshift($this->_capture_stack, array()); - // - // render compiled or saved template code - // - $this->properties['unifunc']($this); - // any unclosed {capture} tags ? - if (isset($this->_capture_stack[0][0])) { - $this->capture_error(); - } - array_shift($this->_capture_stack); - if (isset($this->smarty->security_policy)) { - $this->smarty->security_policy->exitTemplate($this); - } - return ob_get_clean(); - } catch (Exception $e) { - while (ob_get_level() > $level) { - ob_end_clean(); - } - throw $e; - } - } - - /** - * Returns if the current template must be compiled by the Smarty compiler - * It does compare the timestamps of template source and the compiled templates and checks the force compile - * configuration - * - * @throws SmartyException - * @return boolean true if the template must be compiled - */ - public function mustCompile() { - if (!$this->source->exists) { - if ($this->parent instanceof Smarty_Internal_Template) { - $parent_resource = " in '$this->parent->template_resource}'"; - } else { - $parent_resource = ''; - } - throw new SmartyException("Unable to load template {$this->source->type} '{$this->source->name}'{$parent_resource}"); - } - if ($this->mustCompile === null) { - $this->mustCompile = (!$this->source->uncompiled && ($this->smarty->force_compile || $this->source->recompiled || $this->compiled->timestamp === false || - ($this->smarty->compile_check && $this->compiled->timestamp < $this->source->timestamp))); - } - - return $this->mustCompile; - } - - /** - * Compiles the template - * If the template is not evaluated the compiled template is saved on disk - */ - public function compileTemplateSource() { - return $this->compiled->compileTemplateSource($this); - } - - /** - * Writes the content to cache resource - * - * @param string $content - * - * @return bool - */ - public function writeCachedContent($content) { - return $this->cached->writeCachedContent($this, $content); - } - - /** - * Template code runtime function to get subtemplate content - * - * @param string $template the resource handle of the template file - * @param mixed $cache_id cache id to be used with this template - * @param mixed $compile_id compile id to be used with this template - * @param integer $caching cache mode - * @param integer $cache_lifetime life time of cache data - * @param $data - * @param int $parent_scope scope in which {include} should execute - * - * @returns string template content - */ - public function getSubTemplate($template, $cache_id, $compile_id, $caching, $cache_lifetime, $data, $parent_scope) { - $tpl = $this->setupSubTemplate($template, $cache_id, $compile_id, $caching, $cache_lifetime, $data, $parent_scope); - return $tpl->render(); - } - - /** - * Template code runtime function to set up an inline subtemplate - * - * @param string $template the resource handle of the template file - * @param mixed $cache_id cache id to be used with this template - * @param mixed $compile_id compile id to be used with this template - * @param integer $caching cache mode - * @param integer $cache_lifetime life time of cache data - * @param array $data passed parameter template variables - * @param int $parent_scope scope in which {include} should execute - * - * @returns object template object - */ - public function setupSubTemplate($template, $cache_id, $compile_id, $caching, $cache_lifetime, $data, $parent_scope) { - $_templateId = $this->getTemplateId($template, $cache_id, $compile_id); - // already in template cache? - if (isset($this->smarty->template_objects[$_templateId])) { - // clone cached template object because of possible recursive call - $tpl = clone $this->smarty->template_objects[$_templateId]; - $tpl->parent = $this; - if ((bool)$tpl->caching !== (bool)$caching) { - unset($tpl->compiled); - } - $tpl->caching = $caching; - $tpl->cache_lifetime = $cache_lifetime; - } else { - $tpl = new $this->smarty->template_class($template, $this->smarty, $this, $cache_id, $compile_id, $caching, $cache_lifetime); - $tpl->templateId = $_templateId; - } - // get variables from calling scope - if ($parent_scope == Smarty::SCOPE_LOCAL) { - $tpl->tpl_vars = $this->tpl_vars; - $tpl->tpl_vars['smarty'] = clone $this->tpl_vars['smarty']; - } elseif ($parent_scope == Smarty::SCOPE_PARENT) { - $tpl->tpl_vars = &$this->tpl_vars; - } elseif ($parent_scope == Smarty::SCOPE_GLOBAL) { - $tpl->tpl_vars = &Smarty::$global_tpl_vars; - } elseif (($scope_ptr = $this->getScopePointer($parent_scope)) == null) { - $tpl->tpl_vars = &$this->tpl_vars; - } else { - $tpl->tpl_vars = &$scope_ptr->tpl_vars; - } - $tpl->config_vars = $this->config_vars; - if (!empty($data)) { - // set up variable values - foreach ($data as $_key => $_val) { - $tpl->tpl_vars[$_key] = new Smarty_Variable($_val); - } - } - $tpl->properties['tpl_function'] = $this->properties['tpl_function']; - return $tpl; - } - - /** - * Template code runtime function to set up an inline subtemplate - * - * @param string $template the resource handle of the template file - * @param mixed $cache_id cache id to be used with this template - * @param mixed $compile_id compile id to be used with this template - * @param integer $caching cache mode - * @param integer $cache_lifetime life time of cache data - * @param array $data passed parameter template variables - * @param int $parent_scope scope in which {include} should execute - * @param string $hash nocache hash code - * @param string $content_func name of content function - * - * @returns object template content - */ - public function getInlineSubTemplate($template, $cache_id, $compile_id, $caching, $cache_lifetime, $data, $parent_scope, $hash, $content_func) { - $tpl = $this->setupSubTemplate($template, $cache_id, $compile_id, $caching, $cache_lifetime, $data, $parent_scope); - $tpl->properties['nocache_hash'] = $hash; - if (!isset($this->smarty->template_objects[$tpl->templateId])) { - $this->smarty->template_objects[$tpl->templateId] = $tpl; - } - if ($this->smarty->debugging) { - Smarty_Internal_Debug::start_template($tpl); - Smarty_Internal_Debug::start_render($tpl); - } - $tpl->properties['unifunc'] = $content_func; - $output = $tpl->getRenderedTemplateCode(); - if ($this->smarty->debugging) { - Smarty_Internal_Debug::end_template($tpl); - Smarty_Internal_Debug::end_render($tpl); - } - if (!empty($tpl->properties['file_dependency'])) { - $this->properties['file_dependency'] = array_merge($this->properties['file_dependency'], $tpl->properties['file_dependency']); - } - $this->properties['tpl_function'] = $tpl->properties['tpl_function']; - return str_replace($tpl->properties['nocache_hash'], $this->properties['nocache_hash'], $output); - } - - /** - * Call template function - * - * @param string $name template function name - * @param object|\Smarty_Internal_Template $_smarty_tpl template object - * @param array $params parameter array - * @param bool $nocache true if called nocache - * - * @throws \SmartyException - */ - public function callTemplateFunction($name, Smarty_Internal_Template $_smarty_tpl, $params, $nocache) { - if (isset($_smarty_tpl->properties['tpl_function'][$name])) { - if (!$_smarty_tpl->caching || ($_smarty_tpl->caching && $nocache)) { - $function = $_smarty_tpl->properties['tpl_function'][$name]['call_name']; - } else { - if (isset($_smarty_tpl->properties['tpl_function'][$name]['call_name_caching'])) { - $function = $_smarty_tpl->properties['tpl_function'][$name]['call_name_caching']; - } else { - $function = $_smarty_tpl->properties['tpl_function'][$name]['call_name']; - } - } - if (function_exists($function)) { - $function ($_smarty_tpl, $params); - return; - } - // try to load template function dynamically - if (Smarty_Internal_Function_Call_Handler::call($name, $_smarty_tpl, $function, $params, $nocache)) { - $function ($_smarty_tpl, $params); - return; - } - } - throw new SmartyException("Unable to find template function '{$name}'"); - } - - /** - * This function is executed automatically when a compiled or cached template file is included - * - Decode saved properties from compiled template and cache files - * - Check if compiled or cache file is valid - * - * @param array $properties special template properties - * @param bool $cache flag if called from cache file - * - * @return bool flag if compiled or cache file is valid - */ - public function decodeProperties($properties, $cache = false) { - $properties['version'] = (isset($properties['version'])) ? $properties['version'] : ''; - $is_valid = true; - if (Smarty::SMARTY_VERSION != $properties['version']) { - // new version must rebuild - $is_valid = false; - } elseif ((!$cache && $this->smarty->compile_check || $cache && ($this->smarty->compile_check === true || $this->smarty->compile_check === Smarty::COMPILECHECK_ON)) && !empty($properties['file_dependency'])) { - // check file dependencies at compiled code - foreach ($properties['file_dependency'] as $_file_to_check) { - if ($_file_to_check[2] == 'file' || $_file_to_check[2] == 'php') { - if ($this->source->filepath == $_file_to_check[0] && isset($this->source->timestamp)) { - // do not recheck current template - $mtime = $this->source->timestamp; - } else { - // file and php types can be checked without loading the respective resource handlers - $mtime = is_file($_file_to_check[0]) ? @filemtime($_file_to_check[0]) : false; - } - } elseif ($_file_to_check[2] == 'string') { - continue; - } else { - $source = Smarty_Resource::source(null, $this->smarty, $_file_to_check[0]); - $mtime = $source->timestamp; - } - if (!$mtime || $mtime > $_file_to_check[1]) { - $is_valid = false; - break; - } - } - } - if ($cache) { - // CACHING_LIFETIME_SAVED cache expiry has to be validated here since otherwise we'd define the unifunc - if ($this->caching === Smarty::CACHING_LIFETIME_SAVED && - $properties['cache_lifetime'] >= 0 && - (time() > ($this->cached->timestamp + $properties['cache_lifetime'])) - ) { - $is_valid = false; - } - $this->cached->valid = $is_valid; - } else { - $this->mustCompile = !$is_valid; - } - if ($is_valid) { - $this->has_nocache_code = $properties['has_nocache_code']; - // $this->properties['nocache_hash'] = $properties['nocache_hash']; - if (isset($properties['cache_lifetime'])) { - $this->properties['cache_lifetime'] = $properties['cache_lifetime']; - } - if (isset($properties['file_dependency'])) { - $this->properties['file_dependency'] = array_merge($this->properties['file_dependency'], $properties['file_dependency']); - } - if (isset($properties['tpl_function'])) { - $this->properties['tpl_function'] = array_merge($this->properties['tpl_function'], $properties['tpl_function']); - } - $this->properties['version'] = $properties['version']; - $this->properties['unifunc'] = $properties['unifunc']; - } - return $is_valid; - } - - /** - * Template code runtime function to create a local Smarty variable for array assignments - * - * @param string $tpl_var template variable name - * @param bool $nocache cache mode of variable - * @param int $scope scope of variable - */ - public function createLocalArrayVariable($tpl_var, $nocache = false, $scope = Smarty::SCOPE_LOCAL) { - if (!isset($this->tpl_vars[$tpl_var])) { - $this->tpl_vars[$tpl_var] = new Smarty_Variable(array(), $nocache, $scope); - } else { - $this->tpl_vars[$tpl_var] = clone $this->tpl_vars[$tpl_var]; - if ($scope != Smarty::SCOPE_LOCAL) { - $this->tpl_vars[$tpl_var]->scope = $scope; - } - if (!(is_array($this->tpl_vars[$tpl_var]->value) || $this->tpl_vars[$tpl_var]->value instanceof ArrayAccess)) { - settype($this->tpl_vars[$tpl_var]->value, 'array'); - } - } - } - - /** - * Template code runtime function to get pointer to template variable array of requested scope - * - * @param int $scope requested variable scope - * - * @return array array of template variables - */ - public function &getScope($scope) { - if ($scope == Smarty::SCOPE_PARENT && !empty($this->parent)) { - return $this->parent->tpl_vars; - } elseif ($scope == Smarty::SCOPE_ROOT && !empty($this->parent)) { - $ptr = $this->parent; - while (!empty($ptr->parent)) { - $ptr = $ptr->parent; - } - - return $ptr->tpl_vars; - } elseif ($scope == Smarty::SCOPE_GLOBAL) { - return Smarty::$global_tpl_vars; - } - $null = null; - - return $null; - } - - /** - * Get parent or root of template parent chain - * - * @param int $scope parent or root scope - * - * @return mixed object - */ - public function getScopePointer($scope) { - if ($scope == Smarty::SCOPE_PARENT && !empty($this->parent)) { - return $this->parent; - } elseif ($scope == Smarty::SCOPE_ROOT && !empty($this->parent)) { - $ptr = $this->parent; - while (!empty($ptr->parent)) { - $ptr = $ptr->parent; - } - - return $ptr; - } - - return null; - } - - /** - * [util function] counts an array, arrayAccess/traversable or PDOStatement object - * - * @param mixed $value - * - * @return int the count for arrays and objects that implement countable, 1 for other objects that don't, and 0 - * for empty elements - */ - public function _count($value) { - if (is_array($value) === true || $value instanceof Countable) { - return count($value); - } elseif ($value instanceof IteratorAggregate) { - // Note: getIterator() returns a Traversable, not an Iterator - // thus rewind() and valid() methods may not be present - return iterator_count($value->getIterator()); - } elseif ($value instanceof Iterator) { - return iterator_count($value); - } elseif ($value instanceof PDOStatement) { - return $value->rowCount(); - } elseif ($value instanceof Traversable) { - return iterator_count($value); - } elseif ($value instanceof ArrayAccess) { - if ($value->offsetExists(0)) { - return 1; - } - } elseif (is_object($value)) { - return count($value); - } - - return 0; - } - - /** - * runtime error not matching capture tags - */ - public function capture_error() { - throw new SmartyException("Not matching {capture} open/close in \"{$this->template_resource}\""); - } - - /** - * Empty cache for this template - * - * @param integer $exp_time expiration time - * - * @return integer number of cache files deleted - */ - public function clearCache($exp_time = null) { - Smarty_CacheResource::invalidLoadedCache($this->smarty); - - return $this->cached->handler->clear($this->smarty, $this->template_resource, $this->cache_id, $this->compile_id, $exp_time); - } - - /** - * Load source resource - * - * @throws SmartyException - */ - public function loadSource() { - $this->source = Smarty_Template_Source::load($this); - if ($this->smarty->template_resource_caching && !$this->source->recompiled && isset($this->templateId)) { - $this->smarty->template_objects[$this->templateId] = $this; - } - } - - /** - * Load compiled object - * - */ - public function loadCompiled() { - if (!isset($this->compiled)) { - if (!class_exists('Smarty_Template_Compiled', false)) { - require SMARTY_SYSPLUGINS_DIR . 'smarty_template_compiled.php'; - } - $this->compiled = Smarty_Template_Compiled::load($this); - } - } - - /** - * Load cached object - * - */ - public function loadCached() { - if (!isset($this->cached)) { - if (!class_exists('Smarty_Template_Cached', false)) { - require SMARTY_SYSPLUGINS_DIR . 'smarty_template_cached.php'; - } - $this->cached = Smarty_Template_Cached::load($this); - } - } - - /** - * Load compiler object - * - * @throws \SmartyException - */ - public function loadCompiler() { - $this->smarty->loadPlugin($this->source->compiler_class); - $this->compiler = new $this->source->compiler_class($this->source->template_lexer_class, $this->source->template_parser_class, $this->smarty); - } - - /** - * Handle unknown class methods - * - * @param string $name unknown method-name - * @param array $args argument array - * - * @return mixed - * @throws SmartyException - */ - public function __call($name, $args) { - // method of Smarty object? - if (method_exists($this->smarty, $name)) { - return call_user_func_array(array($this->smarty, $name), $args); - } - // parent - return parent::__call($name, $args); - } - - /** - * set Smarty property in template context - * - * @param string $property_name property name - * @param mixed $value value - * - * @throws SmartyException - */ - public function __set($property_name, $value) { - switch ($property_name) { - case 'source': - case 'compiled': - case 'cached': - case 'compiler': - $this->$property_name = $value; - return; - default: - // Smarty property ? - if (property_exists($this->smarty, $property_name)) { - $this->smarty->$property_name = $value; - return; - } - } - throw new SmartyException("invalid template property '$property_name'."); - } - - /** - * get Smarty property in template context - * - * @param string $property_name property name - * - * @return mixed|Smarty_Template_Cached - * @throws SmartyException - */ - public function __get($property_name) { - switch ($property_name) { - case 'source': - $this->loadSource(); - return $this->source; - - case 'compiled': - $this->loadCompiled(); - return $this->compiled; - - case 'cached': - $this->loadCached(); - return $this->cached; - - case 'compiler': - $this->loadCompiler(); - return $this->compiler; - default: - // Smarty property ? - if (property_exists($this->smarty, $property_name)) { - return $this->smarty->$property_name; - } - } - throw new SmartyException("template property '$property_name' does not exist."); - } - - /** - * Template data object destructor - */ - public function __destruct() { - if ($this->smarty->cache_locking && isset($this->cached) && $this->cached->is_locked) { - $this->cached->handler->releaseLock($this->smarty, $this->cached); - } - } -} diff --git a/library/smarty/libs/sysplugins/smarty_internal_templatebase.php b/library/smarty/libs/sysplugins/smarty_internal_templatebase.php deleted file mode 100644 --- a/library/smarty/libs/sysplugins/smarty_internal_templatebase.php +++ /dev/null @@ -1,533 +0,0 @@ -<?php -/** - * Smarty Internal Plugin Smarty Template Base - * This file contains the basic shared methods for template handling - * - * @package Smarty - * @subpackage Template - * @author Uwe Tews - */ - -/** - * Class with shared template methods - * - * @package Smarty - * @subpackage Template - */ -abstract class Smarty_Internal_TemplateBase extends Smarty_Internal_Data { - /** - * Set this if you want different sets of cache files for the same - * templates. - * - * @var string - */ - public $cache_id = null; - /** - * Set this if you want different sets of compiled files for the same - * templates. - * - * @var string - */ - public $compile_id = null; - /** - * caching enabled - * - * @var boolean - */ - public $caching = false; - /** - * cache lifetime in seconds - * - * @var integer - */ - public $cache_lifetime = 3600; - - /** - * test if cache is valid - * - * @param string|object $template the resource handle of the template file or template object - * @param mixed $cache_id cache id to be used with this template - * @param mixed $compile_id compile id to be used with this template - * @param object $parent next higher level of Smarty variables - * - * @return boolean cache status - */ - public function isCached($template = null, $cache_id = null, $compile_id = null, $parent = null) { - if ($template === null && $this instanceof $this->template_class) { - $template = $this; - } else { - if (!($template instanceof $this->template_class)) { - if ($parent === null) { - $parent = $this; - } - $smarty = isset($this->smarty) ? $this->smarty : $this; - $template = $smarty->createTemplate($template, $cache_id, $compile_id, $parent, false); - } - } - // return cache status of template - if (!isset($template->cached)) { - $template->loadCached(); - } - return $template->cached->isCached($template); - } - - /** - * creates a data object - * - * @param object $parent next higher level of Smarty variables - * @param string $name optional data block name - * - * @returns Smarty_Data data object - */ - public function createData($parent = null, $name = null) { - $dataObj = new Smarty_Data($parent, $this, $name); - if ($this->debugging) { - Smarty_Internal_Debug::register_data($dataObj); - } - return $dataObj; - } - - /** - * Get unique template id - * - * @param string $template_name - * @param null|mixed $cache_id - * @param null|mixed $compile_id - * - * @return string - */ - public function getTemplateId($template_name, $cache_id = null, $compile_id = null) { - $cache_id = isset($cache_id) ? $cache_id : $this->cache_id; - $compile_id = isset($compile_id) ? $compile_id : $this->compile_id; - $smarty = isset($this->smarty) ? $this->smarty : $this; - if ($smarty->allow_ambiguous_resources) { - $_templateId = Smarty_Resource::getUniqueTemplateName($this, $template_name) . "#{$cache_id}#{$compile_id}"; - } else { - $_templateId = $smarty->joined_template_dir . "#{$template_name}#{$cache_id}#{$compile_id}"; - } - if (isset($_templateId[150])) { - $_templateId = sha1($_templateId); - } - return $_templateId; - } - - /** - * Registers plugin to be used in templates - * - * @param string $type plugin type - * @param string $tag name of template tag - * @param callback $callback PHP callback to register - * @param boolean $cacheable if true (default) this fuction is cachable - * @param array $cache_attr caching attributes if any - * - * @return Smarty_Internal_Templatebase current Smarty_Internal_Templatebase (or Smarty or - * Smarty_Internal_Template) instance for chaining - * @throws SmartyException when the plugin tag is invalid - */ - public function registerPlugin($type, $tag, $callback, $cacheable = true, $cache_attr = null) { - $smarty = isset($this->smarty) ? $this->smarty : $this; - if (isset($smarty->registered_plugins[$type][$tag])) { - throw new SmartyException("Plugin tag \"{$tag}\" already registered"); - } elseif (!is_callable($callback)) { - throw new SmartyException("Plugin \"{$tag}\" not callable"); - } else { - $smarty->registered_plugins[$type][$tag] = array($callback, (bool)$cacheable, (array)$cache_attr); - } - - return $this; - } - - /** - * Unregister Plugin - * - * @param string $type of plugin - * @param string $tag name of plugin - * - * @return Smarty_Internal_Templatebase current Smarty_Internal_Templatebase (or Smarty or - * Smarty_Internal_Template) instance for chaining - */ - public function unregisterPlugin($type, $tag) { - $smarty = isset($this->smarty) ? $this->smarty : $this; - if (isset($smarty->registered_plugins[$type][$tag])) { - unset($smarty->registered_plugins[$type][$tag]); - } - - return $this; - } - - /** - * Registers a resource to fetch a template - * - * @param string $type name of resource type - * @param Smarty_Resource|array $callback or instance of Smarty_Resource, or array of callbacks to handle resource - * (deprecated) - * - * @return Smarty_Internal_Templatebase current Smarty_Internal_Templatebase (or Smarty or - * Smarty_Internal_Template) instance for chaining - */ - public function registerResource($type, $callback) { - $smarty = isset($this->smarty) ? $this->smarty : $this; - $smarty->registered_resources[$type] = $callback instanceof Smarty_Resource ? $callback : array($callback, false); - - return $this; - } - - /** - * Unregisters a resource - * - * @param string $type name of resource type - * - * @return Smarty_Internal_Templatebase current Smarty_Internal_Templatebase (or Smarty or - * Smarty_Internal_Template) instance for chaining - */ - public function unregisterResource($type) { - $smarty = isset($this->smarty) ? $this->smarty : $this; - if (isset($smarty->registered_resources[$type])) { - unset($smarty->registered_resources[$type]); - } - - return $this; - } - - /** - * Registers a cache resource to cache a template's output - * - * @param string $type name of cache resource type - * @param Smarty_CacheResource $callback instance of Smarty_CacheResource to handle output caching - * - * @return Smarty_Internal_Templatebase current Smarty_Internal_Templatebase (or Smarty or - * Smarty_Internal_Template) instance for chaining - */ - public function registerCacheResource($type, Smarty_CacheResource $callback) { - $smarty = isset($this->smarty) ? $this->smarty : $this; - $smarty->registered_cache_resources[$type] = $callback; - - return $this; - } - - /** - * Unregisters a cache resource - * - * @param string $type name of cache resource type - * - * @return Smarty_Internal_Templatebase current Smarty_Internal_Templatebase (or Smarty or - * Smarty_Internal_Template) instance for chaining - */ - public function unregisterCacheResource($type) { - $smarty = isset($this->smarty) ? $this->smarty : $this; - if (isset($smarty->registered_cache_resources[$type])) { - unset($smarty->registered_cache_resources[$type]); - } - - return $this; - } - - /** - * Registers object to be used in templates - * - * @param $object_name - * @param object $object_impl the referenced PHP object to register - * @param array $allowed list of allowed methods (empty = all) - * @param boolean $smarty_args smarty argument format, else traditional - * @param array $block_methods list of block-methods - * - * @throws SmartyException - * @return Smarty_Internal_Templatebase current Smarty_Internal_Templatebase (or Smarty or - * Smarty_Internal_Template) instance for chaining - */ - public function registerObject($object_name, $object_impl, $allowed = array(), $smarty_args = true, $block_methods = array()) { - // test if allowed methods callable - if (!empty($allowed)) { - foreach ((array)$allowed as $method) { - if (!is_callable(array($object_impl, $method)) && !property_exists($object_impl, $method)) { - throw new SmartyException("Undefined method or property '$method' in registered object"); - } - } - } - // test if block methods callable - if (!empty($block_methods)) { - foreach ((array)$block_methods as $method) { - if (!is_callable(array($object_impl, $method))) { - throw new SmartyException("Undefined method '$method' in registered object"); - } - } - } - // register the object - $smarty = isset($this->smarty) ? $this->smarty : $this; - $smarty->registered_objects[$object_name] = - array($object_impl, (array)$allowed, (boolean)$smarty_args, (array)$block_methods); - - return $this; - } - - /** - * return a reference to a registered object - * - * @param string $name object name - * - * @return object - * @throws SmartyException if no such object is found - */ - public function getRegisteredObject($name) { - $smarty = isset($this->smarty) ? $this->smarty : $this; - if (!isset($smarty->registered_objects[$name])) { - throw new SmartyException("'$name' is not a registered object"); - } - if (!is_object($smarty->registered_objects[$name][0])) { - throw new SmartyException("registered '$name' is not an object"); - } - - return $smarty->registered_objects[$name][0]; - } - - /** - * unregister an object - * - * @param string $name object name - * - * @return Smarty_Internal_Templatebase current Smarty_Internal_Templatebase (or Smarty or - * Smarty_Internal_Template) instance for chaining - */ - public function unregisterObject($name) { - $smarty = isset($this->smarty) ? $this->smarty : $this; - if (isset($smarty->registered_objects[$name])) { - unset($smarty->registered_objects[$name]); - } - - return $this; - } - - /** - * Registers static classes to be used in templates - * - * @param $class_name - * @param string $class_impl the referenced PHP class to register - * - * @throws SmartyException - * @return Smarty_Internal_Templatebase current Smarty_Internal_Templatebase (or Smarty or - * Smarty_Internal_Template) instance for chaining - */ - public function registerClass($class_name, $class_impl) { - // test if exists - if (!class_exists($class_impl)) { - throw new SmartyException("Undefined class '$class_impl' in register template class"); - } - // register the class - $smarty = isset($this->smarty) ? $this->smarty : $this; - $smarty->registered_classes[$class_name] = $class_impl; - - return $this; - } - - /** - * Registers a default plugin handler - * - * @param callable $callback class/method name - * - * @return Smarty_Internal_Templatebase current Smarty_Internal_Templatebase (or Smarty or - * Smarty_Internal_Template) instance for chaining - * @throws SmartyException if $callback is not callable - */ - public function registerDefaultPluginHandler($callback) { - $smarty = isset($this->smarty) ? $this->smarty : $this; - if (is_callable($callback)) { - $smarty->default_plugin_handler_func = $callback; - } else { - throw new SmartyException("Default plugin handler '$callback' not callable"); - } - - return $this; - } - - /** - * Registers a default template handler - * - * @param callable $callback class/method name - * - * @return Smarty_Internal_Templatebase current Smarty_Internal_Templatebase (or Smarty or - * Smarty_Internal_Template) instance for chaining - * @throws SmartyException if $callback is not callable - */ - public function registerDefaultTemplateHandler($callback) { - Smarty_Internal_Extension_DefaultTemplateHandler::registerDefaultTemplateHandler($this, $callback); - return $this; - } - - /** - * Registers a default template handler - * - * @param callable $callback class/method name - * - * @return Smarty_Internal_Templatebase current Smarty_Internal_Templatebase (or Smarty or - * Smarty_Internal_Template) instance for chaining - * @throws SmartyException if $callback is not callable - */ - public function registerDefaultConfigHandler($callback) { - Smarty_Internal_Extension_DefaultTemplateHandler::registerDefaultConfigHandler($this, $callback); - return $this; - } - - /** - * Registers a filter function - * - * @param string $type filter type - * @param callback $callback - * - * @return Smarty_Internal_Templatebase current Smarty_Internal_Templatebase (or Smarty or - * Smarty_Internal_Template) instance for chaining - */ - public function registerFilter($type, $callback) { - $smarty = isset($this->smarty) ? $this->smarty : $this; - $smarty->registered_filters[$type][$this->_get_filter_name($callback)] = $callback; - - return $this; - } - - /** - * Unregisters a filter function - * - * @param string $type filter type - * @param callback $callback - * - * @return Smarty_Internal_Templatebase current Smarty_Internal_Templatebase (or Smarty or - * Smarty_Internal_Template) instance for chaining - */ - public function unregisterFilter($type, $callback) { - $name = $this->_get_filter_name($callback); - $smarty = isset($this->smarty) ? $this->smarty : $this; - if (isset($smarty->registered_filters[$type][$name])) { - unset($smarty->registered_filters[$type][$name]); - } - - return $this; - } - - /** - * Return internal filter name - * - * @param callback $function_name - * - * @return string internal filter name - */ - public function _get_filter_name($function_name) { - if (is_array($function_name)) { - $_class_name = (is_object($function_name[0]) ? - get_class($function_name[0]) : $function_name[0]); - - return $_class_name . '_' . $function_name[1]; - } else { - return $function_name; - } - } - - /** - * load a filter of specified type and name - * - * @param string $type filter type - * @param string $name filter name - * - * @throws SmartyException if filter could not be loaded - */ - public function loadFilter($type, $name) { - $smarty = isset($this->smarty) ? $this->smarty : $this; - $_plugin = "smarty_{$type}filter_{$name}"; - $_filter_name = $_plugin; - if ($smarty->loadPlugin($_plugin)) { - if (class_exists($_plugin, false)) { - $_plugin = array($_plugin, 'execute'); - } - if (is_callable($_plugin)) { - $smarty->registered_filters[$type][$_filter_name] = $_plugin; - - return true; - } - } - throw new SmartyException("{$type}filter \"{$name}\" not callable"); - } - - /** - * unload a filter of specified type and name - * - * @param string $type filter type - * @param string $name filter name - * - * @return Smarty_Internal_Templatebase current Smarty_Internal_Templatebase (or Smarty or - * Smarty_Internal_Template) instance for chaining - */ - public function unloadFilter($type, $name) { - $smarty = isset($this->smarty) ? $this->smarty : $this; - $_filter_name = "smarty_{$type}filter_{$name}"; - if (isset($smarty->registered_filters[$type][$_filter_name])) { - unset ($smarty->registered_filters[$type][$_filter_name]); - } - - return $this; - } - - /** - * preg_replace callback to convert camelcase getter/setter to underscore property names - * - * @param string $match match string - * - * @return string replacemant - */ - private function replaceCamelcase($match) { - return "_" . strtolower($match[1]); - } - - /** - * Handle unknown class methods - * - * @param string $name unknown method-name - * @param array $args argument array - * - * @throws SmartyException - */ - public function __call($name, $args) { - static $_prefixes = array('set' => true, 'get' => true); - static $_resolved_property_name = array(); - static $_resolved_property_source = array(); - - // see if this is a set/get for a property - $first3 = strtolower(substr($name, 0, 3)); - if (isset($_prefixes[$first3]) && isset($name[3]) && $name[3] !== '_') { - if (isset($_resolved_property_name[$name])) { - $property_name = $_resolved_property_name[$name]; - } else { - // try to keep case correct for future PHP 6.0 case-sensitive class methods - // lcfirst() not available < PHP 5.3.0, so improvise - $property_name = strtolower(substr($name, 3, 1)) . substr($name, 4); - // convert camel case to underscored name - $property_name = preg_replace_callback('/([A-Z])/', array($this, 'replaceCamelcase'), $property_name); - $_resolved_property_name[$name] = $property_name; - } - if (isset($_resolved_property_source[$property_name])) { - $status = $_resolved_property_source[$property_name]; - } else { - $status = null; - if (property_exists($this, $property_name)) { - $status = true; - } elseif (property_exists($this->smarty, $property_name)) { - $status = false; - } - $_resolved_property_source[$property_name] = $status; - } - $smarty = null; - if ($status === true) { - $smarty = $this; - } elseif ($status === false) { - $smarty = $this->smarty; - } - if ($smarty) { - if ($first3 == 'get') { - return $smarty->$property_name; - } else { - return $smarty->$property_name = $args[0]; - } - } - throw new SmartyException("property '$property_name' does not exist."); - } - throw new SmartyException("Call of unknown method '$name'."); - } -} - diff --git a/library/smarty/libs/sysplugins/smarty_internal_templatecompilerbase.php b/library/smarty/libs/sysplugins/smarty_internal_templatecompilerbase.php deleted file mode 100644 --- a/library/smarty/libs/sysplugins/smarty_internal_templatecompilerbase.php +++ /dev/null @@ -1,1010 +0,0 @@ -<?php - -/** - * Smarty Internal Plugin Smarty Template Compiler Base - * This file contains the basic classes and methods for compiling Smarty templates with lexer/parser - * - * @package Smarty - * @subpackage Compiler - * @author Uwe Tews - */ - -/** - * Main abstract compiler class - * - * @package Smarty - * @subpackage Compiler - */ -abstract class Smarty_Internal_TemplateCompilerBase { - - /** - * Smarty object - * - * @var Smarty - */ - public $smarty = null; - - /** - * hash for nocache sections - * - * @var mixed - */ - public $nocache_hash = null; - - /** - * suppress generation of nocache code - * - * @var bool - */ - public $suppressNocacheProcessing = false; - - /** - * compile tag objects - * - * @var array - */ - public static $_tag_objects = array(); - - /** - * tag stack - * - * @var array - */ - public $_tag_stack = array(); - - /** - * current template - * - * @var Smarty_Internal_Template - */ - public $template = null; - - /** - * merged included sub template data - * - * @var array - */ - public $mergedSubTemplatesData = array(); - - /** - * merged sub template code - * - * @var array - */ - public $mergedSubTemplatesCode = array(); - - /** - * collected template properties during compilation - * - * @var array - */ - public $templateProperties = array(); - - /** - * sources which must be compiled - * - * @var array - */ - public $sources = array(); - - /** - * flag that we are inside {block} - * - * @var bool - */ - public $inheritance = false; - - /** - * flag when compiling inheritance child template - * - * @var bool - */ - public $inheritance_child = false; - - /** - * uid of templates called by {extends} for recursion check - * - * @var array - */ - public $extends_uid = array(); - - /** - * source line offset for error messages - * - * @var int - */ - public $trace_line_offset = 0; - - /** - * trace uid - * - * @var string - */ - public $trace_uid = ''; - - /** - * trace file path - * - * @var string - */ - public $trace_filepath = ''; - - /** - * stack for tracing file and line of nested {block} tags - * - * @var array - */ - public $trace_stack = array(); - - /** - * plugins loaded by default plugin handler - * - * @var array - */ - public $default_handler_plugins = array(); - - /** - * saved preprocessed modifier list - * - * @var mixed - */ - public $default_modifier_list = null; - - /** - * force compilation of complete template as nocache - * - * @var boolean - */ - public $forceNocache = false; - - /** - * suppress Smarty header code in compiled template - * - * @var bool - */ - public $suppressHeader = false; - - /** - * suppress template property header code in compiled template - * - * @var bool - */ - public $suppressTemplatePropertyHeader = false; - - /** - * suppress pre and post filter - * - * @var bool - */ - public $suppressFilter = false; - - /** - * flag if compiled template file shall we written - * - * @var bool - */ - public $write_compiled_code = true; - - /** - * flag if currently a template function is compiled - * - * @var bool - */ - public $compiles_template_function = false; - - /** - * called sub functions from template function - * - * @var array - */ - public $called_functions = array(); - - /** - * compiled template function code - * - * @var string - */ - public $templateFunctionCode = ''; - - /** - * php_handling setting either from Smarty or security - * - * @var int - */ - public $php_handling = 0; - - /** - * flags for used modifier plugins - * - * @var array - */ - public $modifier_plugins = array(); - - /** - * type of already compiled modifier - * - * @var array - */ - public $known_modifier_type = array(); - - /** - * parent compiler object for merged subtemplates and template functions - * - * @var Smarty_Internal_TemplateCompilerBase - */ - public $parent_compiler = null; - - /** - * Flag true when compiling nocache section - * - * @var bool - */ - public $nocache = false; - - /** - * Flag true when tag is compiled as nocache - * - * @var bool - */ - public $tag_nocache = false; - - /** - * Flag to restart parsing - * - * @var bool - */ - public $abort_and_recompile = false; - - /** - * Compiled tag prefix code - * - * @var array - */ - public $prefix_code = array(); - - /** - * Prefix code stack - * - * @var array - */ - public $prefixCodeStack = array(); - - /** - * Tag has compiled code - * - * @var bool - */ - public $has_code = false; - - /** - * A variable string was compiled - * - * @var bool - */ - public $has_variable_string = false; - - /** - * Tag creates output - * - * @var bool - */ - public $has_output = false; - - /** - * Strip preg pattern - * - * @var string - */ - public $stripRegEx = '![\t ]*[\r\n]+[\t ]*!'; - - /** - * method to compile a Smarty template - * - * @param mixed $_content template source - * - * @return bool true if compiling succeeded, false if it failed - */ - abstract protected function doCompile($_content); - - /** - * Initialize compiler - */ - public function __construct() { - $this->nocache_hash = str_replace(array('.', ','), '_', uniqid(rand(), true)); - } - - /** - * Method to compile a Smarty template - * - * @param Smarty_Internal_Template $template template object to compile - * @param bool $nocache true is shall be compiled in nocache mode - * @param null|Smarty_Internal_TemplateCompilerBase $parent_compiler - * - * @return bool true if compiling succeeded, false if it failed - */ - public function compileTemplate(Smarty_Internal_Template $template, $nocache = null, $parent_compiler = null) { - // save template object in compiler class - $this->template = $template; - if (isset($this->template->smarty->security_policy)) { - $this->php_handling = $this->template->smarty->security_policy->php_handling; - } else { - $this->php_handling = $this->template->smarty->php_handling; - } - $this->parent_compiler = $parent_compiler ? $parent_compiler : $this; - $nocache = isset($nocache) ? $nocache : false; - if (empty($template->properties['nocache_hash'])) { - $template->properties['nocache_hash'] = $this->nocache_hash; - } else { - $this->nocache_hash = $template->properties['nocache_hash']; - } - $save_source = $this->template->source; - // template header code - $template_header = ''; - if (!$this->suppressHeader) { - $template_header .= "<?php /* Smarty version " . Smarty::SMARTY_VERSION . ", created on " . strftime("%Y-%m-%d %H:%M:%S") . "\n"; - $template_header .= " compiled from \"" . $this->template->source->filepath . "\" */ ?>\n"; - } - - if (empty($this->template->source->components)) { - $this->sources = array($template->source); - } else { - // we have array of inheritance templates by extends: resource - $this->sources = array_reverse($template->source->components); - } - $loop = 0; - // the $this->sources array can get additional elements while compiling by the {extends} tag - while ($this->template->source = array_shift($this->sources)) { - $this->smarty->_current_file = $this->template->source->filepath; - if ($this->smarty->debugging) { - Smarty_Internal_Debug::start_compile($this->template); - } - $no_sources = count($this->sources); - $this->parent_compiler->template->properties['file_dependency'][$this->template->source->uid] = array($this->template->source->filepath, $this->template->source->timestamp, $this->template->source->type); - $loop++; - if ($no_sources) { - $this->inheritance_child = true; - } else { - $this->inheritance_child = false; - } - do { - // flag for nochache sections - $this->nocache = $nocache; - $this->tag_nocache = false; - // reset has nocache code flag - $this->template->has_nocache_code = false; - $this->has_variable_string = false; - $this->prefix_code = array(); - $_compiled_code = ''; - // flag for aborting current and start recompile - $this->abort_and_recompile = false; - // get template source - $_content = $this->template->source->content; - if ($_content != '') { - // run prefilter if required - if ((isset($this->smarty->autoload_filters['pre']) || isset($this->smarty->registered_filters['pre'])) && !$this->suppressFilter) { - $_content = Smarty_Internal_Filter_Handler::runFilter('pre', $_content, $template); - } - // call compiler - $_compiled_code = $this->doCompile($_content, true); - } - } while ($this->abort_and_recompile); - if ($this->smarty->debugging) { - Smarty_Internal_Debug::end_compile($this->template); - } - } - // restore source - $this->template->source = $save_source; - unset($save_source); - $this->smarty->_current_file = $this->template->source->filepath; - // free memory - unset($this->parser->root_buffer, $this->parser->current_buffer, $this->parser, $this->lex); - self::$_tag_objects = array(); - // return compiled code to template object - $merged_code = ''; - if (!empty($this->mergedSubTemplatesCode)) { - foreach ($this->mergedSubTemplatesCode as $code) { - $merged_code .= $code; - } - } - // run postfilter if required on compiled template code - if ((isset($this->smarty->autoload_filters['post']) || isset($this->smarty->registered_filters['post'])) && !$this->suppressFilter && $_compiled_code != '') { - $_compiled_code = Smarty_Internal_Filter_Handler::runFilter('post', $_compiled_code, $template); - } - if ($this->suppressTemplatePropertyHeader) { - $_compiled_code .= $merged_code; - } else { - $_compiled_code = $template_header . Smarty_Internal_Extension_CodeFrame::create($template, $_compiled_code) . $merged_code; - } - if (!empty($this->templateFunctionCode)) { - // run postfilter if required on compiled template code - if ((isset($this->smarty->autoload_filters['post']) || isset($this->smarty->registered_filters['post'])) && !$this->suppressFilter) { - $_compiled_code .= Smarty_Internal_Filter_Handler::runFilter('post', $this->templateFunctionCode, $template); - } else { - $_compiled_code .= $this->templateFunctionCode; - } - } - // unset content because template inheritance could have replace source with parent code - unset ($template->source->content); - $this->parent_compiler = null; - $this->template = null; - return $_compiled_code; - } - - /** - * Compile Tag - * This is a call back from the lexer/parser - * - * Save current prefix code - * Compile tag - * Merge tag prefix code with saved one - * (required nested tags in attributes) - * - * @param string $tag tag name - * @param array $args array with tag attributes - * @param array $parameter array with compilation parameter - * - * @throws SmartyCompilerException - * @throws SmartyException - * @return string compiled code - */ - public function compileTag($tag, $args, $parameter = array()) { - $this->prefixCodeStack[] = $this->prefix_code; - $this->prefix_code = array(); - $result = $this->compileTag2($tag, $args, $parameter); - $this->prefix_code = array_merge($this->prefix_code, array_pop($this->prefixCodeStack)); - return $result; - } - - /** - * Compile Tag - * - * @param string $tag tag name - * @param array $args array with tag attributes - * @param array $parameter array with compilation parameter - * - * @throws SmartyCompilerException - * @throws SmartyException - * @return string compiled code - */ - private function compileTag2($tag, $args, $parameter) { - $plugin_type = ''; - // $args contains the attributes parsed and compiled by the lexer/parser - // assume that tag does compile into code, but creates no HTML output - $this->has_code = true; - $this->has_output = false; - // log tag/attributes - if (isset($this->smarty->get_used_tags) && $this->smarty->get_used_tags) { - $this->template->used_tags[] = array($tag, $args); - } - // check nocache option flag - if (in_array("'nocache'", $args) || in_array(array('nocache' => 'true'), $args) || in_array(array('nocache' => '"true"'), $args) || in_array(array('nocache' => "'true'"), $args) - ) { - $this->tag_nocache = true; - } - // compile the smarty tag (required compile classes to compile the tag are autoloaded) - if (($_output = $this->callTagCompiler($tag, $args, $parameter)) === false) { - if (isset($this->parent_compiler->templateProperties['tpl_function'][$tag])) { - // template defined by {template} tag - $args['_attr']['name'] = "'" . $tag . "'"; - $_output = $this->callTagCompiler('call', $args, $parameter); - } - } - if ($_output !== false) { - if ($_output !== true) { - // did we get compiled code - if ($this->has_code) { - // Does it create output? - if ($this->has_output) { - $_output .= "\n"; - } - // return compiled code - return $_output; - } - } - // tag did not produce compiled code - return null; - } else { - // map_named attributes - if (isset($args['_attr'])) { - foreach ($args['_attr'] as $key => $attribute) { - if (is_array($attribute)) { - $args = array_merge($args, $attribute); - } - } - } - // not an internal compiler tag - if (strlen($tag) < 6 || substr($tag, -5) != 'close') { - // check if tag is a registered object - if (isset($this->smarty->registered_objects[$tag]) && isset($parameter['object_method'])) { - $method = $parameter['object_method']; - if (!in_array($method, $this->smarty->registered_objects[$tag][3]) && (empty($this->smarty->registered_objects[$tag][1]) || in_array($method, $this->smarty->registered_objects[$tag][1])) - ) { - return $this->callTagCompiler('private_object_function', $args, $parameter, $tag, $method); - } elseif (in_array($method, $this->smarty->registered_objects[$tag][3])) { - return $this->callTagCompiler('private_object_block_function', $args, $parameter, $tag, $method); - } else { - // throw exception - $this->trigger_template_error('not allowed method "' . $method . '" in registered object "' . $tag . '"', $this->lex->taglineno); - } - } - // check if tag is registered - foreach (array(Smarty::PLUGIN_COMPILER, Smarty::PLUGIN_FUNCTION, Smarty::PLUGIN_BLOCK) as $plugin_type) { - if (isset($this->smarty->registered_plugins[$plugin_type][$tag])) { - // if compiler function plugin call it now - if ($plugin_type == Smarty::PLUGIN_COMPILER) { - $new_args = array(); - foreach ($args as $key => $mixed) { - if (is_array($mixed)) { - $new_args = array_merge($new_args, $mixed); - } else { - $new_args[$key] = $mixed; - } - } - if (!$this->smarty->registered_plugins[$plugin_type][$tag][1]) { - $this->tag_nocache = true; - } - $function = $this->smarty->registered_plugins[$plugin_type][$tag][0]; - if (!is_array($function)) { - return $function($new_args, $this); - } elseif (is_object($function[0])) { - return $this->smarty->registered_plugins[$plugin_type][$tag][0][0]->$function[1]($new_args, $this); - } else { - return call_user_func_array($function, array($new_args, $this)); - } - } - // compile registered function or block function - if ($plugin_type == Smarty::PLUGIN_FUNCTION || $plugin_type == Smarty::PLUGIN_BLOCK) { - return $this->callTagCompiler('private_registered_' . $plugin_type, $args, $parameter, $tag); - } - } - } - // check plugins from plugins folder - foreach ($this->smarty->plugin_search_order as $plugin_type) { - if ($plugin_type == Smarty::PLUGIN_COMPILER && $this->smarty->loadPlugin('smarty_compiler_' . $tag) && (!isset($this->smarty->security_policy) || $this->smarty->security_policy->isTrustedTag($tag, $this))) { - $plugin = 'smarty_compiler_' . $tag; - if (is_callable($plugin)) { - // convert arguments format for old compiler plugins - $new_args = array(); - foreach ($args as $key => $mixed) { - if (is_array($mixed)) { - $new_args = array_merge($new_args, $mixed); - } else { - $new_args[$key] = $mixed; - } - } - - return $plugin($new_args, $this->smarty); - } - if (class_exists($plugin, false)) { - $plugin_object = new $plugin; - if (method_exists($plugin_object, 'compile')) { - return $plugin_object->compile($args, $this); - } - } - throw new SmartyException("Plugin \"{$tag}\" not callable"); - } else { - if ($function = $this->getPlugin($tag, $plugin_type)) { - if (!isset($this->smarty->security_policy) || $this->smarty->security_policy->isTrustedTag($tag, $this)) { - return $this->callTagCompiler('private_' . $plugin_type . '_plugin', $args, $parameter, $tag, $function); - } - } - } - } - if (is_callable($this->smarty->default_plugin_handler_func)) { - $found = false; - // look for already resolved tags - foreach ($this->smarty->plugin_search_order as $plugin_type) { - if (isset($this->default_handler_plugins[$plugin_type][$tag])) { - $found = true; - break; - } - } - if (!$found) { - // call default handler - foreach ($this->smarty->plugin_search_order as $plugin_type) { - if ($this->getPluginFromDefaultHandler($tag, $plugin_type)) { - $found = true; - break; - } - } - } - if ($found) { - // if compiler function plugin call it now - if ($plugin_type == Smarty::PLUGIN_COMPILER) { - $new_args = array(); - foreach ($args as $mixed) { - $new_args = array_merge($new_args, $mixed); - } - $function = $this->default_handler_plugins[$plugin_type][$tag][0]; - if (!is_array($function)) { - return $function($new_args, $this); - } elseif (is_object($function[0])) { - return $this->default_handler_plugins[$plugin_type][$tag][0][0]->$function[1]($new_args, $this); - } else { - return call_user_func_array($function, array($new_args, $this)); - } - } else { - return $this->callTagCompiler('private_registered_' . $plugin_type, $args, $parameter, $tag); - } - } - } - } else { - // compile closing tag of block function - $base_tag = substr($tag, 0, -5); - // check if closing tag is a registered object - if (isset($this->smarty->registered_objects[$base_tag]) && isset($parameter['object_method'])) { - $method = $parameter['object_method']; - if (in_array($method, $this->smarty->registered_objects[$base_tag][3])) { - return $this->callTagCompiler('private_object_block_function', $args, $parameter, $tag, $method); - } else { - // throw exception - $this->trigger_template_error('not allowed closing tag method "' . $method . '" in registered object "' . $base_tag . '"', $this->lex->taglineno); - } - } - // registered block tag ? - if (isset($this->smarty->registered_plugins[Smarty::PLUGIN_BLOCK][$base_tag]) || isset($this->default_handler_plugins[Smarty::PLUGIN_BLOCK][$base_tag])) { - return $this->callTagCompiler('private_registered_block', $args, $parameter, $tag); - } - // block plugin? - if ($function = $this->getPlugin($base_tag, Smarty::PLUGIN_BLOCK)) { - return $this->callTagCompiler('private_block_plugin', $args, $parameter, $tag, $function); - } - // registered compiler plugin ? - if (isset($this->smarty->registered_plugins[Smarty::PLUGIN_COMPILER][$tag])) { - // if compiler function plugin call it now - $args = array(); - if (!$this->smarty->registered_plugins[Smarty::PLUGIN_COMPILER][$tag][1]) { - $this->tag_nocache = true; - } - $function = $this->smarty->registered_plugins[Smarty::PLUGIN_COMPILER][$tag][0]; - if (!is_array($function)) { - return $function($args, $this); - } elseif (is_object($function[0])) { - return $this->smarty->registered_plugins[Smarty::PLUGIN_COMPILER][$tag][0][0]->$function[1]($args, $this); - } else { - return call_user_func_array($function, array($args, $this)); - } - } - if ($this->smarty->loadPlugin('smarty_compiler_' . $tag)) { - $plugin = 'smarty_compiler_' . $tag; - if (is_callable($plugin)) { - return $plugin($args, $this->smarty); - } - if (class_exists($plugin, false)) { - $plugin_object = new $plugin; - if (method_exists($plugin_object, 'compile')) { - return $plugin_object->compile($args, $this); - } - } - throw new SmartyException("Plugin \"{$tag}\" not callable"); - } - } - $this->trigger_template_error("unknown tag \"" . $tag . "\"", $this->lex->taglineno); - } - } - - /** - * compile variable - * - * @param string $variable - * - * @return string - */ - public function compileVariable($variable) { - if (strpos($variable, '(') == 0) { - // not a variable variable - $var = trim($variable, '\''); - $this->tag_nocache = $this->tag_nocache | $this->template->getVariable($var, null, true, false)->nocache; - $this->template->properties['variables'][$var] = $this->tag_nocache | $this->nocache; - } - return '$_smarty_tpl->tpl_vars[' . $variable . ']->value'; - } - - /** - * This method is called from parser to process a text content section - * - remove text from inheritance child templates as they may generate output - * - strip text if strip is enabled - * - * @param string $text - * - * @return null|\Smarty_Internal_ParseTree_Text - */ - public function processText($text) { - if ($this->parser->strip) { - return new Smarty_Internal_ParseTree_Text($this->parser, preg_replace($this->stripRegEx, '', $text)); - } else { - return new Smarty_Internal_ParseTree_Text($this->parser, $text); - } - } - - /** - * lazy loads internal compile plugin for tag and calls the compile method - * compile objects cached for reuse. - * class name format: Smarty_Internal_Compile_TagName - * plugin filename format: Smarty_Internal_Tagname.php - * - * @param string $tag tag name - * @param array $args list of tag attributes - * @param mixed $param1 optional parameter - * @param mixed $param2 optional parameter - * @param mixed $param3 optional parameter - * - * @return string compiled code - */ - public function callTagCompiler($tag, $args, $param1 = null, $param2 = null, $param3 = null) { - // check if tag allowed by security - if (!isset($this->smarty->security_policy) || $this->smarty->security_policy->isTrustedTag($tag, $this)) { - // re-use object if already exists - if (!isset(self::$_tag_objects[$tag])) { - // lazy load internal compiler plugin - $class_name = 'Smarty_Internal_Compile_' . $tag; - if ($this->smarty->loadPlugin($class_name)) { - self::$_tag_objects[$tag] = new $class_name; - } else { - return false; - } - } - // compile this tag - return self::$_tag_objects[$tag]->compile($args, $this, $param1, $param2, $param3); - } - // no internal compile plugin for this tag - return false; - } - - /** - * Check for plugins and return function name - * - * @param $plugin_name - * @param string $plugin_type type of plugin - * - * @return string call name of function - */ - public function getPlugin($plugin_name, $plugin_type) { - $function = null; - if ($this->template->caching && ($this->nocache || $this->tag_nocache)) { - if (isset($this->template->required_plugins['nocache'][$plugin_name][$plugin_type])) { - $function = $this->template->required_plugins['nocache'][$plugin_name][$plugin_type]['function']; - } elseif (isset($this->template->required_plugins['compiled'][$plugin_name][$plugin_type])) { - $this->template->required_plugins['nocache'][$plugin_name][$plugin_type] = $this->template->required_plugins['compiled'][$plugin_name][$plugin_type]; - $function = $this->template->required_plugins['nocache'][$plugin_name][$plugin_type]['function']; - } - } else { - if (isset($this->template->required_plugins['compiled'][$plugin_name][$plugin_type])) { - $function = $this->template->required_plugins['compiled'][$plugin_name][$plugin_type]['function']; - } elseif (isset($this->template->required_plugins['nocache'][$plugin_name][$plugin_type])) { - $this->template->required_plugins['compiled'][$plugin_name][$plugin_type] = $this->template->required_plugins['nocache'][$plugin_name][$plugin_type]; - $function = $this->template->required_plugins['compiled'][$plugin_name][$plugin_type]['function']; - } - } - if (isset($function)) { - if ($plugin_type == 'modifier') { - $this->modifier_plugins[$plugin_name] = true; - } - - return $function; - } - // loop through plugin dirs and find the plugin - $function = 'smarty_' . $plugin_type . '_' . $plugin_name; - $file = $this->smarty->loadPlugin($function, false); - - if (is_string($file)) { - if ($this->template->caching && ($this->nocache || $this->tag_nocache)) { - $this->template->required_plugins['nocache'][$plugin_name][$plugin_type]['file'] = $file; - $this->template->required_plugins['nocache'][$plugin_name][$plugin_type]['function'] = $function; - } else { - $this->template->required_plugins['compiled'][$plugin_name][$plugin_type]['file'] = $file; - $this->template->required_plugins['compiled'][$plugin_name][$plugin_type]['function'] = $function; - } - if ($plugin_type == 'modifier') { - $this->modifier_plugins[$plugin_name] = true; - } - - return $function; - } - if (is_callable($function)) { - // plugin function is defined in the script - return $function; - } - - return false; - } - - /** - * Check for plugins by default plugin handler - * - * @param string $tag name of tag - * @param string $plugin_type type of plugin - * - * @return boolean true if found - */ - public function getPluginFromDefaultHandler($tag, $plugin_type) { - $callback = null; - $script = null; - $cacheable = true; - $result = call_user_func_array($this->smarty->default_plugin_handler_func, array($tag, $plugin_type, $this->template, &$callback, &$script, &$cacheable)); - if ($result) { - $this->tag_nocache = $this->tag_nocache || !$cacheable; - if ($script !== null) { - if (is_file($script)) { - if ($this->template->caching && ($this->nocache || $this->tag_nocache)) { - $this->template->required_plugins['nocache'][$tag][$plugin_type]['file'] = $script; - $this->template->required_plugins['nocache'][$tag][$plugin_type]['function'] = $callback; - } else { - $this->template->required_plugins['compiled'][$tag][$plugin_type]['file'] = $script; - $this->template->required_plugins['compiled'][$tag][$plugin_type]['function'] = $callback; - } - require_once $script; - } else { - $this->trigger_template_error("Default plugin handler: Returned script file \"{$script}\" for \"{$tag}\" not found"); - } - } - if (!is_string($callback) && !(is_array($callback) && is_string($callback[0]) && is_string($callback[1]))) { - $this->trigger_template_error("Default plugin handler: Returned callback for \"{$tag}\" must be a static function name or array of class and function name"); - } - if (is_callable($callback)) { - $this->default_handler_plugins[$plugin_type][$tag] = array($callback, true, array()); - - return true; - } else { - $this->trigger_template_error("Default plugin handler: Returned callback for \"{$tag}\" not callable"); - } - } - - return false; - } - - /** - * Append code segments and remove unneeded ?> <?php transitions - * - * @param string $left - * @param string $right - * - * @return string - */ - public function appendCode($left, $right) { - if (preg_match('/\s*\?>\s*$/', $left) && preg_match('/^\s*<\?php\s+/', $right)) { - $left = preg_replace('/\s*\?>\s*$/', "\n", $left); - $left .= preg_replace('/^\s*<\?php\s+/', '', $right); - } else { - $left .= $right; - } - return $left; - } - - /** - * Inject inline code for nocache template sections - * This method gets the content of each template element from the parser. - * If the content is compiled code and it should be not cached the code is injected - * into the rendered output. - * - * @param string $content content of template element - * @param boolean $is_code true if content is compiled code - * - * @return string content - */ - public function processNocacheCode($content, $is_code) { - // If the template is not evaluated and we have a nocache section and or a nocache tag - if ($is_code && !empty($content)) { - // generate replacement code - if ((!($this->template->source->recompiled) || $this->forceNocache) && $this->template->caching && !$this->suppressNocacheProcessing && ($this->nocache || $this->tag_nocache) - ) { - $this->template->has_nocache_code = true; - $_output = addcslashes($content, '\'\\'); - $_output = str_replace("^#^", "'", $_output); - $_output = "<?php echo '/*%%SmartyNocache:{$this->nocache_hash}%%*/" . $_output . "/*/%%SmartyNocache:{$this->nocache_hash}%%*/';?>\n"; - // make sure we include modifier plugins for nocache code - foreach ($this->modifier_plugins as $plugin_name => $dummy) { - if (isset($this->template->required_plugins['compiled'][$plugin_name]['modifier'])) { - $this->template->required_plugins['nocache'][$plugin_name]['modifier'] = $this->template->required_plugins['compiled'][$plugin_name]['modifier']; - } - } - } else { - $_output = $content; - } - } else { - $_output = $content; - } - $this->modifier_plugins = array(); - $this->suppressNocacheProcessing = false; - $this->tag_nocache = false; - - return $_output; - } - - /** - * Generate nocache code string - * - * @param string $code PHP code - * - * @return string - */ - public function makeNocacheCode($code) { - return "echo '/*%%SmartyNocache:{$this->nocache_hash}%%*/<?php " . str_replace("^#^", "'", addcslashes($code, '\'\\')) . "?>/*/%%SmartyNocache:{$this->nocache_hash}%%*/';\n"; - } - - /** - * push current file and line offset on stack for tracing {block} source lines - * - * @param string $file new filename - * @param string $uid uid of file - * @param int $line line offset to source - * @param bool $debug false debug end_compile shall not be called - */ - public function pushTrace($file, $uid, $line, $debug = true) { - if ($this->smarty->debugging && $debug) { - Smarty_Internal_Debug::end_compile($this->template); - } - array_push($this->trace_stack, array($this->smarty->_current_file, $this->trace_filepath, $this->trace_uid, $this->trace_line_offset)); - $this->trace_filepath = $this->smarty->_current_file = $file; - $this->trace_uid = $uid; - $this->trace_line_offset = $line; - if ($this->smarty->debugging) { - Smarty_Internal_Debug::start_compile($this->template); - } - } - - /** - * restore file and line offset - */ - public function popTrace() { - if ($this->smarty->debugging) { - Smarty_Internal_Debug::end_compile($this->template); - } - $r = array_pop($this->trace_stack); - $this->smarty->_current_file = $r[0]; - $this->trace_filepath = $r[1]; - $this->trace_uid = $r[2]; - $this->trace_line_offset = $r[3]; - if ($this->smarty->debugging) { - Smarty_Internal_Debug::start_compile($this->template); - } - } - - /** - * display compiler error messages without dying - * If parameter $args is empty it is a parser detected syntax error. - * In this case the parser is called to obtain information about expected tokens. - * If parameter $args contains a string this is used as error message - * - * @param string $args individual error message or null - * @param string $line line-number - * - * @throws SmartyCompilerException when an unexpected token is found - */ - public function trigger_template_error($args = null, $line = null) { - // get template source line which has error - if (!isset($line)) { - $line = $this->lex->line; - } - // $line += $this->trace_line_offset; - $match = preg_split("/\n/", $this->lex->data); - $error_text = 'Syntax error in template "' . (empty($this->trace_filepath) ? $this->template->source->filepath : $this->trace_filepath) . '" on line ' . ($line + $this->trace_line_offset) . ' "' . trim(preg_replace('![\t\r\n]+!', ' ', $match[$line - 1])) . '" '; - if (isset($args)) { - // individual error message - $error_text .= $args; - } else { - $expect = array(); - // expected token from parser - $error_text .= ' - Unexpected "' . $this->lex->value . '"'; - if (count($this->parser->yy_get_expected_tokens($this->parser->yymajor)) <= 4) { - foreach ($this->parser->yy_get_expected_tokens($this->parser->yymajor) as $token) { - $exp_token = $this->parser->yyTokenName[$token]; - if (isset($this->lex->smarty_token_names[$exp_token])) { - // token type from lexer - $expect[] = '"' . $this->lex->smarty_token_names[$exp_token] . '"'; - } else { - // otherwise internal token name - $expect[] = $this->parser->yyTokenName[$token]; - } - } - $error_text .= ', expected one of: ' . implode(' , ', $expect); - } - } - $e = new SmartyCompilerException($error_text); - $e->line = $line; - $e->source = trim(preg_replace('![\t\r\n]+!', ' ', $match[$line - 1])); - $e->desc = $args; - $e->template = $this->template->source->filepath; - throw $e; - } -} diff --git a/library/smarty/libs/sysplugins/smarty_internal_templatelexer.php b/library/smarty/libs/sysplugins/smarty_internal_templatelexer.php deleted file mode 100644 --- a/library/smarty/libs/sysplugins/smarty_internal_templatelexer.php +++ /dev/null @@ -1,1266 +0,0 @@ -<?php -/** - * Smarty Internal Plugin Templatelexer - * This is the lexer to break the template source into tokens - * - * @package Smarty - * @subpackage Compiler - * @author Uwe Tews - */ - -/** - * Smarty_Internal_Templatelexer - * This is the template file lexer. - * It is generated from the smarty_internal_templatelexer.plex file - * - * @package Smarty - * @subpackage Compiler - * @author Uwe Tews - */ -class Smarty_Internal_Templatelexer { - /** - * Source - * - * @var string - */ - public $data; - - /** - * byte counter - * - * @var int - */ - public $counter; - - /** - * token number - * - * @var int - */ - public $token; - - /** - * token value - * - * @var string - */ - public $value; - - /** - * current line - * - * @var int - */ - public $line; - - /** - * tag start line - * - * @var - */ - public $taglineno; - - /** - * php code type - * - * @var string - */ - public $phpType = ''; - - /** - * escaped left delimiter - * - * @var string - */ - public $ldel = ''; - - /** - * escaped left delimiter length - * - * @var int - */ - public $ldel_length = 0; - - /** - * escaped right delimiter - * - * @var string - */ - public $rdel = ''; - - /** - * escaped right delimiter length - * - * @var int - */ - public $rdel_length = 0; - - /** - * state number - * - * @var int - */ - public $state = 1; - - /** - * Smarty object - * - * @var Smarty - */ - public $smarty = null; - - /** - * compiler object - * - * @var Smarty_Internal_TemplateCompilerBase - */ - public $compiler = null; - - /** - * literal tag nesting level - * - * @var int - */ - private $literal_cnt = 0; - - /** - * PHP start tag string - * - * @var string - */ - - /** - * trace file - * - * @var resource - */ - public $yyTraceFILE; - - /** - * trace prompt - * - * @var string - */ - public $yyTracePrompt; - - /** - * XML flag true while processing xml - * - * @var bool - */ - public $is_xml = false; - - /** - * state names - * - * @var array - */ - public $state_name = array(1 => 'TEXT', 2 => 'TAG', 3 => 'TAGBODY', 4 => 'LITERAL', 5 => 'DOUBLEQUOTEDSTRING', - 6 => 'CHILDBODY', 7 => 'CHILDBLOCK', 8 => 'CHILDLITERAL'); - - /** - * storage for assembled token patterns - * - * @var string - */ - private $yy_global_pattern1 = null; - - private $yy_global_pattern2 = null; - - private $yy_global_pattern3 = null; - - private $yy_global_pattern4 = null; - - private $yy_global_pattern5 = null; - - private $yy_global_pattern6 = null; - - private $yy_global_pattern7 = null; - - private $yy_global_pattern8 = null; - - /** - * token names - * - * @var array - */ - public $smarty_token_names = array( // Text for parser error messages - 'NOT' => '(!,not)', 'OPENP' => '(', 'CLOSEP' => ')', 'OPENB' => '[', 'CLOSEB' => ']', 'PTR' => '->', - 'APTR' => '=>', 'EQUAL' => '=', 'NUMBER' => 'number', 'UNIMATH' => '+" , "-', 'MATH' => '*" , "/" , "%', - 'INCDEC' => '++" , "--', 'SPACE' => ' ', 'DOLLAR' => '$', 'SEMICOLON' => ';', 'COLON' => ':', - 'DOUBLECOLON' => '::', 'AT' => '@', 'HATCH' => '#', 'QUOTE' => '"', 'BACKTICK' => '`', 'VERT' => '"|" modifier', - 'DOT' => '.', 'COMMA' => '","', 'QMARK' => '"?"', 'ID' => 'id, name', 'TEXT' => 'text', - 'LDELSLASH' => '{/..} closing tag', 'LDEL' => '{...} Smarty tag', 'COMMENT' => 'comment', 'AS' => 'as', - 'TO' => 'to', 'PHP' => '"<?php", "<%", "{php}" tag', 'LOGOP' => '"<", "==" ... logical operator', - 'TLOGOP' => '"lt", "eq" ... logical operator; "is div by" ... if condition', - 'SCOND' => '"is even" ... if condition',); - - /** - * constructor - * - * @param string $data template source - * @param Smarty_Internal_TemplateCompilerBase $compiler - */ - function __construct($data, Smarty_Internal_TemplateCompilerBase $compiler) { - $this->data = $data; - $this->counter = 0; - if (preg_match('~^\xEF\xBB\xBF~i', $this->data, $match)) { - $this->counter += strlen($match[0]); - } - $this->line = 1; - $this->smarty = $compiler->smarty; - $this->compiler = $compiler; - $this->ldel = preg_quote($this->smarty->left_delimiter, '~'); - $this->ldel_length = strlen($this->smarty->left_delimiter); - $this->rdel = preg_quote($this->smarty->right_delimiter, '~'); - $this->rdel_length = strlen($this->smarty->right_delimiter); - $this->smarty_token_names['LDEL'] = $this->smarty->left_delimiter; - $this->smarty_token_names['RDEL'] = $this->smarty->right_delimiter; - } - - public function PrintTrace() { - $this->yyTraceFILE = fopen('php://output', 'w'); - $this->yyTracePrompt = '<br>'; - } - - /* - * Check if this tag is autoliteral - */ - public function isAutoLiteral() { - return $this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false; - } - - private $_yy_state = 1; - - private $_yy_stack = array(); - - public function yylex() { - return $this->{'yylex' . $this->_yy_state}(); - } - - public function yypushstate($state) { - if ($this->yyTraceFILE) { - fprintf($this->yyTraceFILE, "%sState push %s\n", $this->yyTracePrompt, isset($this->state_name[$this->_yy_state]) ? $this->state_name[$this->_yy_state] : $this->_yy_state); - } - array_push($this->_yy_stack, $this->_yy_state); - $this->_yy_state = $state; - if ($this->yyTraceFILE) { - fprintf($this->yyTraceFILE, "%snew State %s\n", $this->yyTracePrompt, isset($this->state_name[$this->_yy_state]) ? $this->state_name[$this->_yy_state] : $this->_yy_state); - } - } - - public function yypopstate() { - if ($this->yyTraceFILE) { - fprintf($this->yyTraceFILE, "%sState pop %s\n", $this->yyTracePrompt, isset($this->state_name[$this->_yy_state]) ? $this->state_name[$this->_yy_state] : $this->_yy_state); - } - $this->_yy_state = array_pop($this->_yy_stack); - if ($this->yyTraceFILE) { - fprintf($this->yyTraceFILE, "%snew State %s\n", $this->yyTracePrompt, isset($this->state_name[$this->_yy_state]) ? $this->state_name[$this->_yy_state] : $this->_yy_state); - } - } - - public function yybegin($state) { - $this->_yy_state = $state; - if ($this->yyTraceFILE) { - fprintf($this->yyTraceFILE, "%sState set %s\n", $this->yyTracePrompt, isset($this->state_name[$this->_yy_state]) ? $this->state_name[$this->_yy_state] : $this->_yy_state); - } - } - - public function yylex1() { - if (!isset($this->yy_global_pattern1)) { - $this->yy_global_pattern1 = "/\G([{][}])|\G(" . $this->ldel . "[*])|\G((<[?]((php\\s+|=)|\\s+))|(<[%])|(<[?]xml\\s+)|(<script\\s+language\\s*=\\s*[\"']?\\s*php\\s*[\"']?\\s*>)|([?][>])|([%][>])|(" . $this->ldel . "\\s*php(.*?)" . $this->rdel . ")|(" . $this->ldel . "\\s*[\/]php" . $this->rdel . "))|\G(" . $this->ldel . "\\s*literal\\s*" . $this->rdel . ")|\G(" . $this->ldel . "\\s*)|\G(\\s*" . $this->rdel . ")|\G([\S\s])/isS"; - } - if ($this->counter >= strlen($this->data)) { - return false; // end of input - } - - do { - if (preg_match($this->yy_global_pattern1, $this->data, $yymatches, null, $this->counter)) { - $yysubmatches = $yymatches; - if (strlen($yysubmatches[0]) < 200) { - $yymatches = preg_grep("/(.|\s)+/", $yysubmatches); - } else { - $yymatches = array_filter($yymatches, 'strlen'); - } - if (empty($yymatches)) { - throw new Exception('Error: lexing failed because a rule matched' . ' an empty string. Input "' . substr($this->data, $this->counter, 5) . '... state TEXT'); - } - next($yymatches); // skip global match - $this->token = key($yymatches); // token number - $this->value = current($yymatches); // token value - $r = $this->{'yy_r1_' . $this->token}(); - if ($r === null) { - $this->counter += strlen($this->value); - $this->line += substr_count($this->value, "\n"); - // accept this token - return true; - } elseif ($r === true) { - // we have changed state - // process this token in the new state - return $this->yylex(); - } elseif ($r === false) { - $this->counter += strlen($this->value); - $this->line += substr_count($this->value, "\n"); - if ($this->counter >= strlen($this->data)) { - return false; // end of input - } - // skip this token - continue; - } - } else { - throw new Exception('Unexpected input at line' . $this->line . ': ' . $this->data[$this->counter]); - } - break; - } while (true); - } // end function - - const TEXT = 1; - - function yy_r1_1() { - - $this->token = Smarty_Internal_Templateparser::TP_TEXT; - } - - function yy_r1_2() { - - preg_match("~[*]{$this->rdel}~", $this->data, $match, PREG_OFFSET_CAPTURE, $this->counter); - if (isset($match[0][1])) { - $to = $match[0][1] + strlen($match[0][0]); - } else { - $this->compiler->trigger_template_error("missing or misspelled comment closing tag '*{$this->smarty->right_delimiter}'"); - } - $this->value = substr($this->data, $this->counter, $to - $this->counter); - return false; - } - - function yy_r1_3() { - - $obj = new Smarty_Internal_Compile_Private_Php(); - $obj->parsePhp($this); - } - - function yy_r1_15() { - - if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) { - $this->token = Smarty_Internal_Templateparser::TP_TEXT; - } else { - $this->token = Smarty_Internal_Templateparser::TP_LITERALSTART; - $this->yypushstate(self::LITERAL); - } - } - - function yy_r1_16() { - - if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) { - $this->token = Smarty_Internal_Templateparser::TP_TEXT; - } else { - $this->yypushstate(self::TAG); - return true; - } - } - - function yy_r1_17() { - - $this->token = Smarty_Internal_Templateparser::TP_TEXT; - } - - function yy_r1_18() { - - $to = strlen($this->data); - preg_match("~($this->ldel)|([<]script\s+language\s*=\s*[\"\']?\s*php\s*[\"\']?\s*[>])|([<][?])|([<][%])|([?][>])|([%][>])~i", $this->data, $match, PREG_OFFSET_CAPTURE, $this->counter); - if (isset($match[0][1])) { - $to = $match[0][1]; - } - $this->value = substr($this->data, $this->counter, $to - $this->counter); - $this->token = Smarty_Internal_Templateparser::TP_TEXT; - } - - public function yylex2() { - if (!isset($this->yy_global_pattern2)) { - $this->yy_global_pattern2 = "/\G(" . $this->ldel . "\\s*(if|elseif|else if|while)\\s+)|\G(" . $this->ldel . "\\s*for\\s+)|\G(" . $this->ldel . "\\s*foreach(?![^\s]))|\G(" . $this->ldel . "\\s*setfilter\\s+)|\G(" . $this->ldel . "\\s*[0-9]*[a-zA-Z_]\\w*(\\s+nocache)?\\s*" . $this->rdel . ")|\G(" . $this->ldel . "\\s*[\/](?:(?!block)[0-9]*[a-zA-Z_]\\w*)\\s*" . $this->rdel . ")|\G(" . $this->ldel . "\\s*[$][0-9]*[a-zA-Z_]\\w*(\\s+nocache)?\\s*" . $this->rdel . ")|\G(" . $this->ldel . "\\s*[\/])|\G(" . $this->ldel . "\\s*)/isS"; - } - if ($this->counter >= strlen($this->data)) { - return false; // end of input - } - - do { - if (preg_match($this->yy_global_pattern2, $this->data, $yymatches, null, $this->counter)) { - $yysubmatches = $yymatches; - if (strlen($yysubmatches[0]) < 200) { - $yymatches = preg_grep("/(.|\s)+/", $yysubmatches); - } else { - $yymatches = array_filter($yymatches, 'strlen'); - } - if (empty($yymatches)) { - throw new Exception('Error: lexing failed because a rule matched' . ' an empty string. Input "' . substr($this->data, $this->counter, 5) . '... state TAG'); - } - next($yymatches); // skip global match - $this->token = key($yymatches); // token number - $this->value = current($yymatches); // token value - $r = $this->{'yy_r2_' . $this->token}(); - if ($r === null) { - $this->counter += strlen($this->value); - $this->line += substr_count($this->value, "\n"); - // accept this token - return true; - } elseif ($r === true) { - // we have changed state - // process this token in the new state - return $this->yylex(); - } elseif ($r === false) { - $this->counter += strlen($this->value); - $this->line += substr_count($this->value, "\n"); - if ($this->counter >= strlen($this->data)) { - return false; // end of input - } - // skip this token - continue; - } - } else { - throw new Exception('Unexpected input at line' . $this->line . ': ' . $this->data[$this->counter]); - } - break; - } while (true); - } // end function - - const TAG = 2; - - function yy_r2_1() { - - $this->token = Smarty_Internal_Templateparser::TP_LDELIF; - $this->yybegin(self::TAGBODY); - $this->taglineno = $this->line; - } - - function yy_r2_3() { - - $this->token = Smarty_Internal_Templateparser::TP_LDELFOR; - $this->yybegin(self::TAGBODY); - $this->taglineno = $this->line; - } - - function yy_r2_4() { - - $this->token = Smarty_Internal_Templateparser::TP_LDELFOREACH; - $this->yybegin(self::TAGBODY); - $this->taglineno = $this->line; - } - - function yy_r2_5() { - - $this->token = Smarty_Internal_Templateparser::TP_LDELSETFILTER; - $this->yybegin(self::TAGBODY); - $this->taglineno = $this->line; - } - - function yy_r2_6() { - - $this->yypopstate(); - $this->token = Smarty_Internal_Templateparser::TP_SIMPLETAG; - $this->taglineno = $this->line; - } - - function yy_r2_8() { - - $this->yypopstate(); - $this->token = Smarty_Internal_Templateparser::TP_CLOSETAG; - $this->taglineno = $this->line; - } - - function yy_r2_9() { - - if ($this->_yy_stack[count($this->_yy_stack) - 1] == self::TEXT) { - $this->yypopstate(); - $this->token = Smarty_Internal_Templateparser::TP_SIMPLEOUTPUT; - $this->taglineno = $this->line; - } else { - $this->value = $this->smarty->left_delimiter; - $this->token = Smarty_Internal_Templateparser::TP_LDEL; - $this->yybegin(self::TAGBODY); - $this->taglineno = $this->line; - } - } - - function yy_r2_11() { - - $this->token = Smarty_Internal_Templateparser::TP_LDELSLASH; - $this->yybegin(self::TAGBODY); - $this->taglineno = $this->line; - } - - function yy_r2_12() { - - $this->token = Smarty_Internal_Templateparser::TP_LDEL; - $this->yybegin(self::TAGBODY); - $this->taglineno = $this->line; - } - - public function yylex3() { - if (!isset($this->yy_global_pattern3)) { - $this->yy_global_pattern3 = "/\G(\\s*" . $this->rdel . ")|\G([\"])|\G('[^'\\\\]*(?:\\\\.[^'\\\\]*)*')|\G([$]smarty\\.block\\.(child|parent))|\G([$][0-9]*[a-zA-Z_]\\w*)|\G([$])|\G(\\s+is\\s+in\\s+)|\G(\\s+as\\s+)|\G(\\s+to\\s+)|\G(\\s+step\\s+)|\G(\\s+instanceof\\s+)|\G(\\s*(([!=][=]{1,2})|([<][=>]?)|([>][=]?)|[&|]{2})\\s*)|\G(\\s+(eq|ne|neq|gt|ge|gte|lt|le|lte|mod|and|or|xor|(is\\s+(not\\s+)?(odd|even|div)\\s+by))\\s+)|\G(\\s+is\\s+(not\\s+)?(odd|even))|\G(([!]\\s*)|(not\\s+))|\G([(](int(eger)?|bool(ean)?|float|double|real|string|binary|array|object)[)]\\s*)|\G(\\s*[(]\\s*)|\G(\\s*[)])|\G(\\[\\s*)|\G(\\s*\\])|\G(\\s*[-][>]\\s*)|\G(\\s*[=][>]\\s*)|\G(\\s*[=]\\s*)|\G(([+]|[-]){2})|\G(\\s*([+]|[-])\\s*)|\G(\\s*([*]{1,2}|[%\/^&]|[<>]{2})\\s*)|\G([@])|\G([#])|\G(\\s+[0-9]*[a-zA-Z_][a-zA-Z0-9_\-:]*\\s*[=]\\s*)|\G(([0-9]*[a-zA-Z_]\\w*)?(\\\\[0-9]*[a-zA-Z_]\\w*)+)|\G([0-9]*[a-zA-Z_]\\w*)|\G(\\d+)|\G([`])|\G([|])|\G([.])|\G(\\s*[,]\\s*)|\G(\\s*[;]\\s*)|\G([:]{2})|\G(\\s*[:]\\s*)|\G(\\s*[?]\\s*)|\G(0[xX][0-9a-fA-F]+)|\G(\\s+)|\G(" . $this->ldel . "\\s*)|\G([\S\s])/isS"; - } - if ($this->counter >= strlen($this->data)) { - return false; // end of input - } - - do { - if (preg_match($this->yy_global_pattern3, $this->data, $yymatches, null, $this->counter)) { - $yysubmatches = $yymatches; - if (strlen($yysubmatches[0]) < 200) { - $yymatches = preg_grep("/(.|\s)+/", $yysubmatches); - } else { - $yymatches = array_filter($yymatches, 'strlen'); - } - if (empty($yymatches)) { - throw new Exception('Error: lexing failed because a rule matched' . ' an empty string. Input "' . substr($this->data, $this->counter, 5) . '... state TAGBODY '); - } - next($yymatches); // skip global match - $this->token = key($yymatches); // token number - $this->value = current($yymatches); // token value - $r = $this->{'yy_r3_' . $this->token}(); - if ($r === null) { - $this->counter += strlen($this->value); - $this->line += substr_count($this->value, "\n"); - // accept this token - return true; - } elseif ($r === true) { - // we have changed state - // process this token in the new state - return $this->yylex(); - } elseif ($r === false) { - $this->counter += strlen($this->value); - $this->line += substr_count($this->value, "\n"); - if ($this->counter >= strlen($this->data)) { - return false; // end of input - } - // skip this token - continue; - } - } else { - throw new Exception('Unexpected input at line' . $this->line . ': ' . $this->data[$this->counter]); - } - break; - } while (true); - } // end function - - const TAGBODY = 3; - - function yy_r3_1() { - - $this->token = Smarty_Internal_Templateparser::TP_RDEL; - $this->yypopstate(); - } - - function yy_r3_2() { - - $this->token = Smarty_Internal_Templateparser::TP_QUOTE; - $this->yypushstate(self::DOUBLEQUOTEDSTRING); - } - - function yy_r3_3() { - - $this->token = Smarty_Internal_Templateparser::TP_SINGLEQUOTESTRING; - } - - function yy_r3_4() { - - $this->token = Smarty_Internal_Templateparser::TP_SMARTYBLOCKCHILDPARENT; - $this->taglineno = $this->line; - } - - function yy_r3_6() { - - $this->token = Smarty_Internal_Templateparser::TP_DOLLARID; - } - - function yy_r3_7() { - - $this->token = Smarty_Internal_Templateparser::TP_DOLLAR; - } - - function yy_r3_8() { - - $this->token = Smarty_Internal_Templateparser::TP_ISIN; - } - - function yy_r3_9() { - - $this->token = Smarty_Internal_Templateparser::TP_AS; - } - - function yy_r3_10() { - - $this->token = Smarty_Internal_Templateparser::TP_TO; - } - - function yy_r3_11() { - - $this->token = Smarty_Internal_Templateparser::TP_STEP; - } - - function yy_r3_12() { - - $this->token = Smarty_Internal_Templateparser::TP_INSTANCEOF; - } - - function yy_r3_13() { - - $this->token = Smarty_Internal_Templateparser::TP_LOGOP; - } - - function yy_r3_18() { - - $this->token = Smarty_Internal_Templateparser::TP_TLOGOP; - } - - function yy_r3_23() { - - $this->token = Smarty_Internal_Templateparser::TP_SINGLECOND; - } - - function yy_r3_26() { - - $this->token = Smarty_Internal_Templateparser::TP_NOT; - } - - function yy_r3_29() { - - $this->token = Smarty_Internal_Templateparser::TP_TYPECAST; - } - - function yy_r3_33() { - - $this->token = Smarty_Internal_Templateparser::TP_OPENP; - } - - function yy_r3_34() { - - $this->token = Smarty_Internal_Templateparser::TP_CLOSEP; - } - - function yy_r3_35() { - - $this->token = Smarty_Internal_Templateparser::TP_OPENB; - } - - function yy_r3_36() { - - $this->token = Smarty_Internal_Templateparser::TP_CLOSEB; - } - - function yy_r3_37() { - - $this->token = Smarty_Internal_Templateparser::TP_PTR; - } - - function yy_r3_38() { - - $this->token = Smarty_Internal_Templateparser::TP_APTR; - } - - function yy_r3_39() { - - $this->token = Smarty_Internal_Templateparser::TP_EQUAL; - } - - function yy_r3_40() { - - $this->token = Smarty_Internal_Templateparser::TP_INCDEC; - } - - function yy_r3_42() { - - $this->token = Smarty_Internal_Templateparser::TP_UNIMATH; - } - - function yy_r3_44() { - - $this->token = Smarty_Internal_Templateparser::TP_MATH; - } - - function yy_r3_46() { - - $this->token = Smarty_Internal_Templateparser::TP_AT; - } - - function yy_r3_47() { - - $this->token = Smarty_Internal_Templateparser::TP_HATCH; - } - - function yy_r3_48() { - - // resolve conflicts with shorttag and right_delimiter starting with '=' - if (substr($this->data, $this->counter + strlen($this->value) - 1, $this->rdel_length) == $this->smarty->right_delimiter) { - preg_match("~\s+~", $this->value, $match); - $this->value = $match[0]; - $this->token = Smarty_Internal_Templateparser::TP_SPACE; - } else { - $this->token = Smarty_Internal_Templateparser::TP_ATTR; - } - } - - function yy_r3_49() { - - $this->token = Smarty_Internal_Templateparser::TP_NAMESPACE; - } - - function yy_r3_52() { - - $this->token = Smarty_Internal_Templateparser::TP_ID; - } - - function yy_r3_53() { - - $this->token = Smarty_Internal_Templateparser::TP_INTEGER; - } - - function yy_r3_54() { - - $this->token = Smarty_Internal_Templateparser::TP_BACKTICK; - $this->yypopstate(); - } - - function yy_r3_55() { - - $this->token = Smarty_Internal_Templateparser::TP_VERT; - } - - function yy_r3_56() { - - $this->token = Smarty_Internal_Templateparser::TP_DOT; - } - - function yy_r3_57() { - - $this->token = Smarty_Internal_Templateparser::TP_COMMA; - } - - function yy_r3_58() { - - $this->token = Smarty_Internal_Templateparser::TP_SEMICOLON; - } - - function yy_r3_59() { - - $this->token = Smarty_Internal_Templateparser::TP_DOUBLECOLON; - } - - function yy_r3_60() { - - $this->token = Smarty_Internal_Templateparser::TP_COLON; - } - - function yy_r3_61() { - - $this->token = Smarty_Internal_Templateparser::TP_QMARK; - } - - function yy_r3_62() { - - $this->token = Smarty_Internal_Templateparser::TP_HEX; - } - - function yy_r3_63() { - - $this->token = Smarty_Internal_Templateparser::TP_SPACE; - } - - function yy_r3_64() { - - if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) { - $this->token = Smarty_Internal_Templateparser::TP_TEXT; - } else { - $this->yypushstate(self::TAG); - return true; - } - } - - function yy_r3_65() { - - $this->token = Smarty_Internal_Templateparser::TP_TEXT; - } - - public function yylex4() { - if (!isset($this->yy_global_pattern4)) { - $this->yy_global_pattern4 = "/\G(" . $this->ldel . "\\s*literal\\s*" . $this->rdel . ")|\G(" . $this->ldel . "\\s*[\/]literal\\s*" . $this->rdel . ")|\G([\S\s])/isS"; - } - if ($this->counter >= strlen($this->data)) { - return false; // end of input - } - - do { - if (preg_match($this->yy_global_pattern4, $this->data, $yymatches, null, $this->counter)) { - $yysubmatches = $yymatches; - if (strlen($yysubmatches[0]) < 200) { - $yymatches = preg_grep("/(.|\s)+/", $yysubmatches); - } else { - $yymatches = array_filter($yymatches, 'strlen'); - } - if (empty($yymatches)) { - throw new Exception('Error: lexing failed because a rule matched' . ' an empty string. Input "' . substr($this->data, $this->counter, 5) . '... state LITERAL'); - } - next($yymatches); // skip global match - $this->token = key($yymatches); // token number - $this->value = current($yymatches); // token value - $r = $this->{'yy_r4_' . $this->token}(); - if ($r === null) { - $this->counter += strlen($this->value); - $this->line += substr_count($this->value, "\n"); - // accept this token - return true; - } elseif ($r === true) { - // we have changed state - // process this token in the new state - return $this->yylex(); - } elseif ($r === false) { - $this->counter += strlen($this->value); - $this->line += substr_count($this->value, "\n"); - if ($this->counter >= strlen($this->data)) { - return false; // end of input - } - // skip this token - continue; - } - } else { - throw new Exception('Unexpected input at line' . $this->line . ': ' . $this->data[$this->counter]); - } - break; - } while (true); - } // end function - - const LITERAL = 4; - - function yy_r4_1() { - - $this->literal_cnt++; - $this->token = Smarty_Internal_Templateparser::TP_LITERAL; - } - - function yy_r4_2() { - - if ($this->literal_cnt) { - $this->literal_cnt--; - $this->token = Smarty_Internal_Templateparser::TP_LITERAL; - } else { - $this->token = Smarty_Internal_Templateparser::TP_LITERALEND; - $this->yypopstate(); - } - } - - function yy_r4_3() { - - $to = strlen($this->data); - preg_match("~{$this->ldel}[/]?literal{$this->rdel}~i", $this->data, $match, PREG_OFFSET_CAPTURE, $this->counter); - if (isset($match[0][1])) { - $to = $match[0][1]; - } else { - $this->compiler->trigger_template_error("missing or misspelled literal closing tag"); - } - $this->value = substr($this->data, $this->counter, $to - $this->counter); - $this->token = Smarty_Internal_Templateparser::TP_LITERAL; - } - - public function yylex5() { - if (!isset($this->yy_global_pattern5)) { - $this->yy_global_pattern5 = "/\G(" . $this->ldel . "\\s*literal\\s*" . $this->rdel . ")|\G(" . $this->ldel . "\\s*[\/]literal\\s*" . $this->rdel . ")|\G(" . $this->ldel . "\\s*[\/])|\G(" . $this->ldel . "\\s*[0-9]*[a-zA-Z_]\\w*)|\G(" . $this->ldel . "\\s*)|\G([\"])|\G([`][$])|\G([$][0-9]*[a-zA-Z_]\\w*)|\G([$])|\G(([^\"\\\\]*?)((?:\\\\.[^\"\\\\]*?)*?)(?=(" . $this->ldel . "|\\$|`\\$|\")))|\G([\S\s])/isS"; - } - if ($this->counter >= strlen($this->data)) { - return false; // end of input - } - - do { - if (preg_match($this->yy_global_pattern5, $this->data, $yymatches, null, $this->counter)) { - $yysubmatches = $yymatches; - if (strlen($yysubmatches[0]) < 200) { - $yymatches = preg_grep("/(.|\s)+/", $yysubmatches); - } else { - $yymatches = array_filter($yymatches, 'strlen'); - } - if (empty($yymatches)) { - throw new Exception('Error: lexing failed because a rule matched' . ' an empty string. Input "' . substr($this->data, $this->counter, 5) . '... state DOUBLEQUOTEDSTRING'); - } - next($yymatches); // skip global match - $this->token = key($yymatches); // token number - $this->value = current($yymatches); // token value - $r = $this->{'yy_r5_' . $this->token}(); - if ($r === null) { - $this->counter += strlen($this->value); - $this->line += substr_count($this->value, "\n"); - // accept this token - return true; - } elseif ($r === true) { - // we have changed state - // process this token in the new state - return $this->yylex(); - } elseif ($r === false) { - $this->counter += strlen($this->value); - $this->line += substr_count($this->value, "\n"); - if ($this->counter >= strlen($this->data)) { - return false; // end of input - } - // skip this token - continue; - } - } else { - throw new Exception('Unexpected input at line' . $this->line . ': ' . $this->data[$this->counter]); - } - break; - } while (true); - } // end function - - const DOUBLEQUOTEDSTRING = 5; - - function yy_r5_1() { - - $this->token = Smarty_Internal_Templateparser::TP_TEXT; - } - - function yy_r5_2() { - - $this->token = Smarty_Internal_Templateparser::TP_TEXT; - } - - function yy_r5_3() { - - if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) { - $this->token = Smarty_Internal_Templateparser::TP_TEXT; - } else { - $this->yypushstate(self::TAG); - return true; - } - } - - function yy_r5_4() { - - if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) { - $this->token = Smarty_Internal_Templateparser::TP_TEXT; - } else { - $this->yypushstate(self::TAG); - return true; - } - } - - function yy_r5_5() { - - if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) { - $this->token = Smarty_Internal_Templateparser::TP_TEXT; - } else { - $this->token = Smarty_Internal_Templateparser::TP_LDEL; - $this->taglineno = $this->line; - $this->yypushstate(self::TAGBODY); - } - } - - function yy_r5_6() { - - $this->token = Smarty_Internal_Templateparser::TP_QUOTE; - $this->yypopstate(); - } - - function yy_r5_7() { - - $this->token = Smarty_Internal_Templateparser::TP_BACKTICK; - $this->value = substr($this->value, 0, -1); - $this->yypushstate(self::TAGBODY); - $this->taglineno = $this->line; - } - - function yy_r5_8() { - - $this->token = Smarty_Internal_Templateparser::TP_DOLLARID; - } - - function yy_r5_9() { - - $this->token = Smarty_Internal_Templateparser::TP_TEXT; - } - - function yy_r5_10() { - - $this->token = Smarty_Internal_Templateparser::TP_TEXT; - } - - function yy_r5_14() { - - $to = strlen($this->data); - $this->value = substr($this->data, $this->counter, $to - $this->counter); - $this->token = Smarty_Internal_Templateparser::TP_TEXT; - } - - public function yylex6() { - if (!isset($this->yy_global_pattern6)) { - $this->yy_global_pattern6 = "/\G(" . $this->ldel . "\\s*strip\\s*" . $this->rdel . ")|\G(" . $this->ldel . "\\s*[\/]strip\\s*" . $this->rdel . ")|\G(" . $this->ldel . "\\s*block)|\G([\S\s])/isS"; - } - if ($this->counter >= strlen($this->data)) { - return false; // end of input - } - - do { - if (preg_match($this->yy_global_pattern6, $this->data, $yymatches, null, $this->counter)) { - $yysubmatches = $yymatches; - if (strlen($yysubmatches[0]) < 200) { - $yymatches = preg_grep("/(.|\s)+/", $yysubmatches); - } else { - $yymatches = array_filter($yymatches, 'strlen'); - } - if (empty($yymatches)) { - throw new Exception('Error: lexing failed because a rule matched' . ' an empty string. Input "' . substr($this->data, $this->counter, 5) . '... state CHILDBODY'); - } - next($yymatches); // skip global match - $this->token = key($yymatches); // token number - $this->value = current($yymatches); // token value - $r = $this->{'yy_r6_' . $this->token}(); - if ($r === null) { - $this->counter += strlen($this->value); - $this->line += substr_count($this->value, "\n"); - // accept this token - return true; - } elseif ($r === true) { - // we have changed state - // process this token in the new state - return $this->yylex(); - } elseif ($r === false) { - $this->counter += strlen($this->value); - $this->line += substr_count($this->value, "\n"); - if ($this->counter >= strlen($this->data)) { - return false; // end of input - } - // skip this token - continue; - } - } else { - throw new Exception('Unexpected input at line' . $this->line . ': ' . $this->data[$this->counter]); - } - break; - } while (true); - } // end function - - const CHILDBODY = 6; - - function yy_r6_1() { - - if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) { - return false; - } else { - $this->token = Smarty_Internal_Templateparser::TP_STRIPON; - } - } - - function yy_r6_2() { - - if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) { - return false; - } else { - $this->token = Smarty_Internal_Templateparser::TP_STRIPOFF; - } - } - - function yy_r6_3() { - - if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) { - return false; - } else { - $this->yypopstate(); - return true; - } - } - - function yy_r6_4() { - - $to = strlen($this->data); - preg_match("~" . $this->ldel . "\s*(([/])?strip\s*" . $this->rdel . "|block\s+)~i", $this->data, $match, PREG_OFFSET_CAPTURE, $this->counter); - if (isset($match[0][1])) { - $to = $match[0][1]; - } - $this->value = substr($this->data, $this->counter, $to - $this->counter); - return false; - } - - public function yylex7() { - if (!isset($this->yy_global_pattern7)) { - $this->yy_global_pattern7 = "/\G(" . $this->ldel . "\\s*literal\\s*" . $this->rdel . ")|\G(" . $this->ldel . "\\s*block)|\G(" . $this->ldel . "\\s*[\/]block)|\G(" . $this->ldel . "\\s*[$]smarty\\.block\\.(child|parent))|\G([\S\s])/isS"; - } - if ($this->counter >= strlen($this->data)) { - return false; // end of input - } - - do { - if (preg_match($this->yy_global_pattern7, $this->data, $yymatches, null, $this->counter)) { - $yysubmatches = $yymatches; - if (strlen($yysubmatches[0]) < 200) { - $yymatches = preg_grep("/(.|\s)+/", $yysubmatches); - } else { - $yymatches = array_filter($yymatches, 'strlen'); - } - if (empty($yymatches)) { - throw new Exception('Error: lexing failed because a rule matched' . ' an empty string. Input "' . substr($this->data, $this->counter, 5) . '... state CHILDBLOCK'); - } - next($yymatches); // skip global match - $this->token = key($yymatches); // token number - $this->value = current($yymatches); // token value - $r = $this->{'yy_r7_' . $this->token}(); - if ($r === null) { - $this->counter += strlen($this->value); - $this->line += substr_count($this->value, "\n"); - // accept this token - return true; - } elseif ($r === true) { - // we have changed state - // process this token in the new state - return $this->yylex(); - } elseif ($r === false) { - $this->counter += strlen($this->value); - $this->line += substr_count($this->value, "\n"); - if ($this->counter >= strlen($this->data)) { - return false; // end of input - } - // skip this token - continue; - } - } else { - throw new Exception('Unexpected input at line' . $this->line . ': ' . $this->data[$this->counter]); - } - break; - } while (true); - } // end function - - const CHILDBLOCK = 7; - - function yy_r7_1() { - - if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) { - $this->token = Smarty_Internal_Templateparser::TP_BLOCKSOURCE; - } else { - $this->token = Smarty_Internal_Templateparser::TP_BLOCKSOURCE; - $this->yypushstate(self::CHILDLITERAL); - } - } - - function yy_r7_2() { - - if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) { - $this->token = Smarty_Internal_Templateparser::TP_BLOCKSOURCE; - } else { - $this->yypopstate(); - return true; - } - } - - function yy_r7_3() { - - if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) { - $this->token = Smarty_Internal_Templateparser::TP_BLOCKSOURCE; - } else { - $this->yypopstate(); - return true; - } - } - - function yy_r7_4() { - - if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) { - $this->token = Smarty_Internal_Templateparser::TP_BLOCKSOURCE; - } else { - $this->yypopstate(); - return true; - } - } - - function yy_r7_6() { - - $to = strlen($this->data); - preg_match("~" . $this->ldel . "\s*(literal\s*" . $this->rdel . "|([/])?block(\s|" . $this->rdel . ")|[\$]smarty\.block\.(child|parent))~i", $this->data, $match, PREG_OFFSET_CAPTURE, $this->counter); - if (isset($match[0][1])) { - $to = $match[0][1]; - } - $this->value = substr($this->data, $this->counter, $to - $this->counter); - $this->token = Smarty_Internal_Templateparser::TP_BLOCKSOURCE; - } - - public function yylex8() { - if (!isset($this->yy_global_pattern8)) { - $this->yy_global_pattern8 = "/\G(" . $this->ldel . "\\s*literal\\s*" . $this->rdel . ")|\G(" . $this->ldel . "\\s*[\/]literal\\s*" . $this->rdel . ")|\G([\S\s])/isS"; - } - if ($this->counter >= strlen($this->data)) { - return false; // end of input - } - - do { - if (preg_match($this->yy_global_pattern8, $this->data, $yymatches, null, $this->counter)) { - $yysubmatches = $yymatches; - if (strlen($yysubmatches[0]) < 200) { - $yymatches = preg_grep("/(.|\s)+/", $yysubmatches); - } else { - $yymatches = array_filter($yymatches, 'strlen'); - } - if (empty($yymatches)) { - throw new Exception('Error: lexing failed because a rule matched' . ' an empty string. Input "' . substr($this->data, $this->counter, 5) . '... state CHILDLITERAL'); - } - next($yymatches); // skip global match - $this->token = key($yymatches); // token number - $this->value = current($yymatches); // token value - $r = $this->{'yy_r8_' . $this->token}(); - if ($r === null) { - $this->counter += strlen($this->value); - $this->line += substr_count($this->value, "\n"); - // accept this token - return true; - } elseif ($r === true) { - // we have changed state - // process this token in the new state - return $this->yylex(); - } elseif ($r === false) { - $this->counter += strlen($this->value); - $this->line += substr_count($this->value, "\n"); - if ($this->counter >= strlen($this->data)) { - return false; // end of input - } - // skip this token - continue; - } - } else { - throw new Exception('Unexpected input at line' . $this->line . ': ' . $this->data[$this->counter]); - } - break; - } while (true); - } // end function - - const CHILDLITERAL = 8; - - function yy_r8_1() { - - if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) { - $this->token = Smarty_Internal_Templateparser::TP_BLOCKSOURCE; - } else { - $this->token = Smarty_Internal_Templateparser::TP_BLOCKSOURCE; - $this->yypushstate(self::CHILDLITERAL); - } - } - - function yy_r8_2() { - - if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) { - $this->token = Smarty_Internal_Templateparser::TP_BLOCKSOURCE; - } else { - $this->token = Smarty_Internal_Templateparser::TP_BLOCKSOURCE; - $this->yypopstate(); - } - } - - function yy_r8_3() { - - $to = strlen($this->data); - preg_match("~{$this->ldel}[/]?literal\s*{$this->rdel}~i", $this->data, $match, PREG_OFFSET_CAPTURE, $this->counter); - if (isset($match[0][1])) { - $to = $match[0][1]; - } else { - $this->compiler->trigger_template_error("missing or misspelled literal closing tag"); - } - $this->value = substr($this->data, $this->counter, $to - $this->counter); - $this->token = Smarty_Internal_Templateparser::TP_BLOCKSOURCE; - } - -} - - \ No newline at end of file diff --git a/library/smarty/libs/sysplugins/smarty_internal_templateparser.php b/library/smarty/libs/sysplugins/smarty_internal_templateparser.php deleted file mode 100644 --- a/library/smarty/libs/sysplugins/smarty_internal_templateparser.php +++ /dev/null @@ -1,2244 +0,0 @@ -<?php - -class TP_yyToken implements ArrayAccess { - public $string = ''; - - public $metadata = array(); - - public function __construct($s, $m = array()) { - if ($s instanceof TP_yyToken) { - $this->string = $s->string; - $this->metadata = $s->metadata; - } else { - $this->string = (string)$s; - if ($m instanceof TP_yyToken) { - $this->metadata = $m->metadata; - } elseif (is_array($m)) { - $this->metadata = $m; - } - } - } - - public function __toString() { - return $this->string; - } - - public function offsetExists($offset) { - return isset($this->metadata[$offset]); - } - - public function offsetGet($offset) { - return $this->metadata[$offset]; - } - - public function offsetSet($offset, $value) { - if ($offset === null) { - if (isset($value[0])) { - $x = ($value instanceof TP_yyToken) ? $value->metadata : $value; - $this->metadata = array_merge($this->metadata, $x); - - return; - } - $offset = count($this->metadata); - } - if ($value === null) { - return; - } - if ($value instanceof TP_yyToken) { - if ($value->metadata) { - $this->metadata[$offset] = $value->metadata; - } - } elseif ($value) { - $this->metadata[$offset] = $value; - } - } - - public function offsetUnset($offset) { - unset($this->metadata[$offset]); - } -} - -class TP_yyStackEntry { - public $stateno; /* The state-number */ - public $major; /* The major token value. This is the code - ** number for the token at this stack level */ - public $minor; /* The user-supplied minor token value. This - ** is the value of the token */ -} - -; - -#line 13 "../smarty/lexer/smarty_internal_templateparser.y" - -/** - * Smarty Internal Plugin Templateparser - * - * This is the template parser. - * It is generated from the smarty_internal_templateparser.y file - * - * @package Smarty - * @subpackage Compiler - * @author Uwe Tews - */ -class Smarty_Internal_Templateparser { - #line 26 "../smarty/lexer/smarty_internal_templateparser.y" - - const Err1 = "Security error: Call to private object member not allowed"; - - const Err2 = "Security error: Call to dynamic object member not allowed"; - - const Err3 = "PHP in template not allowed. Use SmartyBC to enable it"; - - /** - * result status - * - * @var bool - */ - public $successful = true; - - /** - * return value - * - * @var mixed - */ - public $retvalue = 0; - - /** - * counter for prefix code - * - * @var int - */ - public static $prefix_number = 0; - - /** - * @var - */ - public $yymajor; - - /** - * last index of array variable - * - * @var mixed - */ - public $last_index; - - /** - * last variable name - * - * @var string - */ - public $last_variable; - - /** - * root parse tree buffer - * - * @var Smarty_Internal_ParseTree - */ - public $root_buffer; - - /** - * current parse tree object - * - * @var Smarty_Internal_ParseTree - */ - public $current_buffer; - - /** - * lexer object - * - * @var Smarty_Internal_Templatelexer - */ - private $lex; - - /** - * internal error flag - * - * @var bool - */ - private $internalError = false; - - /** - * {strip} status - * - * @var bool - */ - public $strip = false; - - /** - * compiler object - * - * @var Smarty_Internal_TemplateCompilerBase - */ - public $compiler = null; - - /** - * smarty object - * - * @var Smarty - */ - public $smarty = null; - - /** - * template object - * - * @var Smarty_Internal_Template - */ - public $template = null; - - /** - * block nesting level - * - * @var int - */ - public $block_nesting_level = 0; - - /** - * security object - * - * @var Smarty_Security - */ - private $security = null; - - /** - * constructor - * - * @param Smarty_Internal_Templatelexer $lex - * @param Smarty_Internal_TemplateCompilerBase $compiler - */ - function __construct(Smarty_Internal_Templatelexer $lex, Smarty_Internal_TemplateCompilerBase $compiler) { - $this->lex = $lex; - $this->compiler = $compiler; - $this->template = $this->compiler->template; - $this->smarty = $this->template->smarty; - $this->security = isset($this->smarty->security_policy) ? $this->smarty->security_policy : false; - $this->current_buffer = $this->root_buffer = new Smarty_Internal_ParseTree_Template($this); - } - - /** - * insert PHP code in current buffer - * - * @param string $code - */ - public function insertPhpCode($code) { - $this->current_buffer->append_subtree(new Smarty_Internal_ParseTree_Tag($this, $code)); - } - - /** - * merge PHP code with prefix code and return parse tree tag object - * - * @param string $code - * - * @return Smarty_Internal_ParseTree_Tag - */ - public function mergePrefixCode($code) { - $tmp = ''; - foreach ($this->compiler->prefix_code as $preCode) { - $tmp = empty($tmp) ? $preCode : $this->compiler->appendCode($tmp, $preCode); - } - $this->compiler->prefix_code = array(); - $tmp = empty($tmp) ? $code : $this->compiler->appendCode($tmp, $code); - return new Smarty_Internal_ParseTree_Tag($this, $this->compiler->processNocacheCode($tmp, true)); - } - - const TP_VERT = 1; - - const TP_COLON = 2; - - const TP_PHP = 3; - - const TP_NOCACHE = 4; - - const TP_TEXT = 5; - - const TP_STRIPON = 6; - - const TP_STRIPOFF = 7; - - const TP_BLOCKSOURCE = 8; - - const TP_LITERALSTART = 9; - - const TP_LITERALEND = 10; - - const TP_LITERAL = 11; - - const TP_RDEL = 12; - - const TP_SIMPLEOUTPUT = 13; - - const TP_LDEL = 14; - - const TP_DOLLARID = 15; - - const TP_EQUAL = 16; - - const TP_SIMPLETAG = 17; - - const TP_ID = 18; - - const TP_PTR = 19; - - const TP_LDELIF = 20; - - const TP_LDELFOR = 21; - - const TP_SEMICOLON = 22; - - const TP_INCDEC = 23; - - const TP_TO = 24; - - const TP_STEP = 25; - - const TP_LDELFOREACH = 26; - - const TP_SPACE = 27; - - const TP_AS = 28; - - const TP_APTR = 29; - - const TP_LDELSETFILTER = 30; - - const TP_SMARTYBLOCKCHILDPARENT = 31; - - const TP_CLOSETAG = 32; - - const TP_LDELSLASH = 33; - - const TP_ATTR = 34; - - const TP_INTEGER = 35; - - const TP_COMMA = 36; - - const TP_OPENP = 37; - - const TP_CLOSEP = 38; - - const TP_MATH = 39; - - const TP_UNIMATH = 40; - - const TP_ISIN = 41; - - const TP_INSTANCEOF = 42; - - const TP_QMARK = 43; - - const TP_NOT = 44; - - const TP_TYPECAST = 45; - - const TP_HEX = 46; - - const TP_DOT = 47; - - const TP_SINGLEQUOTESTRING = 48; - - const TP_DOUBLECOLON = 49; - - const TP_NAMESPACE = 50; - - const TP_AT = 51; - - const TP_HATCH = 52; - - const TP_OPENB = 53; - - const TP_CLOSEB = 54; - - const TP_DOLLAR = 55; - - const TP_LOGOP = 56; - - const TP_TLOGOP = 57; - - const TP_SINGLECOND = 58; - - const TP_QUOTE = 59; - - const TP_BACKTICK = 60; - - const YY_NO_ACTION = 525; - - const YY_ACCEPT_ACTION = 524; - - const YY_ERROR_ACTION = 523; - - const YY_SZ_ACTTAB = 1908; - - static public $yy_action = array(287, 9, 129, 251, 273, 194, 441, 2, 82, 280, 281, 282, 216, 110, 353, 223, 212, - 229, 441, 258, 217, 12, 199, 240, 32, 257, 257, 39, 17, 12, 25, 43, 42, 263, 224, 233, 17, 206, 441, 80, 1, 244, - 311, 311, 172, 172, 52, 287, 9, 128, 441, 273, 65, 178, 2, 82, 268, 14, 184, 298, 110, 262, 13, 319, 229, 297, - 258, 217, 31, 225, 12, 32, 170, 257, 39, 239, 189, 17, 43, 42, 263, 224, 292, 214, 206, 249, 80, 1, 113, 311, - 164, 442, 172, 52, 287, 9, 132, 201, 273, 209, 260, 2, 82, 442, 14, 141, 256, 110, 262, 88, 303, 229, 261, 258, - 217, 260, 225, 12, 32, 168, 36, 39, 241, 12, 17, 43, 42, 263, 224, 292, 17, 206, 189, 80, 1, 7, 311, 180, 257, - 219, 52, 287, 9, 132, 134, 273, 193, 470, 2, 82, 10, 470, 156, 304, 110, 300, 89, 172, 229, 310, 258, 217, 260, - 205, 223, 32, 257, 14, 39, 324, 12, 262, 43, 42, 263, 224, 292, 17, 206, 189, 80, 1, 470, 311, 470, 172, 470, - 52, 287, 9, 131, 201, 273, 209, 257, 2, 82, 83, 307, 232, 201, 110, 399, 454, 230, 229, 237, 258, 217, 454, 225, - 355, 32, 133, 201, 39, 215, 399, 144, 43, 42, 263, 224, 292, 399, 206, 12, 80, 1, 326, 311, 157, 236, 17, 52, - 287, 9, 133, 201, 273, 209, 260, 2, 82, 214, 201, 235, 202, 110, 113, 80, 99, 229, 311, 258, 217, 396, 225, 187, - 19, 14, 323, 39, 18, 262, 28, 43, 42, 263, 224, 292, 396, 206, 12, 80, 1, 143, 311, 396, 134, 17, 52, 287, 9, - 132, 10, 273, 209, 4, 2, 82, 313, 14, 146, 454, 110, 262, 181, 158, 229, 454, 258, 217, 260, 192, 12, 32, 20, - 260, 39, 99, 441, 17, 43, 42, 263, 224, 292, 243, 206, 189, 80, 1, 441, 311, 187, 182, 298, 52, 287, 9, 130, - 201, 273, 209, 14, 2, 82, 93, 262, 104, 24, 110, 399, 99, 169, 229, 154, 258, 217, 220, 225, 113, 5, 124, 260, - 39, 135, 399, 100, 43, 42, 263, 224, 292, 399, 206, 261, 80, 1, 325, 311, 228, 112, 104, 52, 287, 9, 132, 92, - 273, 191, 173, 2, 82, 174, 291, 285, 16, 110, 330, 312, 260, 229, 310, 258, 217, 311, 225, 223, 32, 259, 90, 39, - 261, 6, 264, 43, 42, 263, 224, 292, 181, 206, 175, 80, 1, 116, 311, 171, 201, 21, 52, 287, 9, 132, 37, 273, 195, - 260, 2, 82, 36, 296, 238, 189, 110, 189, 259, 201, 229, 261, 258, 217, 214, 225, 218, 32, 35, 113, 39, 36, 232, - 299, 43, 42, 263, 224, 292, 15, 206, 183, 80, 1, 211, 311, 17, 91, 226, 52, 287, 9, 133, 177, 273, 209, 179, 2, - 82, 318, 470, 99, 18, 110, 470, 454, 121, 229, 288, 258, 217, 289, 225, 316, 19, 145, 189, 39, 187, 189, 121, - 43, 42, 263, 224, 292, 161, 206, 261, 80, 99, 104, 311, 454, 14, 454, 52, 470, 262, 454, 279, 278, 276, 277, - 283, 284, 174, 159, 470, 261, 287, 9, 470, 454, 273, 311, 317, 2, 82, 176, 298, 223, 204, 110, 115, 68, 107, - 229, 117, 258, 217, 100, 3, 201, 272, 329, 138, 29, 210, 271, 293, 454, 325, 454, 359, 470, 260, 454, 254, 317, - 139, 275, 200, 306, 223, 204, 111, 119, 72, 107, 260, 201, 37, 242, 100, 255, 151, 272, 329, 213, 4, 210, 271, - 293, 150, 325, 245, 167, 20, 152, 317, 81, 208, 149, 260, 223, 204, 260, 119, 60, 102, 186, 218, 185, 265, 100, - 269, 22, 272, 329, 286, 270, 210, 271, 293, 317, 325, 248, 147, 148, 223, 204, 178, 119, 72, 107, 153, 232, 260, - 274, 100, 13, 319, 272, 329, 261, 397, 210, 271, 293, 231, 325, 268, 136, 317, 189, 165, 106, 207, 223, 204, - 397, 115, 68, 107, 84, 327, 85, 397, 100, 103, 441, 272, 329, 290, 86, 210, 271, 293, 87, 325, 299, 299, 441, - 317, 299, 155, 299, 299, 223, 204, 305, 119, 50, 102, 299, 108, 299, 299, 100, 299, 299, 272, 329, 299, 299, - 210, 271, 293, 317, 325, 299, 299, 299, 223, 204, 299, 119, 72, 107, 299, 299, 299, 299, 100, 27, 227, 272, 329, - 160, 299, 210, 271, 293, 299, 325, 299, 299, 317, 299, 299, 299, 203, 223, 204, 299, 109, 46, 107, 299, 299, - 299, 299, 100, 299, 299, 272, 329, 299, 308, 210, 271, 293, 299, 325, 299, 311, 287, 8, 309, 299, 273, 299, 317, - 2, 82, 299, 299, 223, 204, 110, 119, 49, 107, 229, 299, 258, 217, 100, 299, 142, 272, 329, 299, 178, 210, 271, - 293, 299, 325, 260, 317, 299, 13, 319, 299, 223, 204, 299, 119, 70, 107, 299, 294, 23, 299, 100, 189, 299, 272, - 329, 299, 299, 210, 271, 293, 317, 325, 299, 299, 299, 223, 204, 299, 119, 77, 107, 299, 299, 299, 299, 100, - 299, 299, 272, 329, 299, 308, 210, 271, 293, 299, 325, 299, 299, 287, 8, 309, 299, 273, 299, 317, 2, 82, 299, - 299, 223, 204, 110, 119, 71, 107, 229, 299, 258, 217, 100, 299, 299, 272, 329, 299, 299, 210, 271, 293, 299, - 325, 299, 317, 299, 299, 299, 299, 223, 204, 299, 119, 60, 107, 299, 295, 23, 299, 100, 299, 299, 272, 329, 299, - 299, 210, 271, 293, 317, 325, 299, 140, 299, 223, 204, 178, 119, 73, 107, 299, 299, 260, 299, 100, 13, 319, 272, - 329, 299, 299, 210, 271, 293, 299, 325, 317, 201, 299, 189, 299, 223, 204, 299, 119, 62, 107, 299, 41, 40, 38, - 100, 299, 299, 272, 329, 299, 299, 210, 271, 293, 299, 325, 317, 163, 321, 322, 328, 223, 204, 299, 119, 63, - 107, 299, 41, 40, 38, 100, 299, 299, 272, 329, 299, 299, 210, 271, 293, 299, 325, 317, 201, 321, 322, 328, 223, - 204, 299, 97, 69, 107, 299, 299, 299, 299, 100, 299, 299, 272, 329, 299, 299, 210, 271, 293, 299, 325, 317, 299, - 299, 299, 299, 223, 204, 299, 119, 75, 107, 222, 41, 40, 38, 100, 299, 299, 272, 329, 299, 299, 210, 271, 293, - 299, 325, 317, 201, 321, 322, 328, 223, 204, 299, 119, 64, 107, 299, 247, 299, 299, 100, 299, 299, 272, 329, - 299, 299, 210, 271, 293, 299, 325, 317, 201, 26, 299, 299, 223, 204, 299, 98, 74, 107, 299, 41, 40, 38, 100, - 299, 299, 272, 329, 299, 299, 210, 271, 293, 299, 325, 317, 201, 321, 322, 328, 223, 198, 299, 105, 59, 107, - 299, 41, 40, 38, 100, 299, 299, 272, 329, 299, 299, 210, 271, 293, 299, 325, 317, 299, 321, 322, 328, 223, 204, - 299, 119, 45, 107, 246, 41, 40, 38, 100, 299, 299, 272, 329, 299, 299, 210, 271, 293, 299, 325, 317, 201, 321, - 322, 328, 223, 94, 299, 79, 48, 101, 299, 252, 299, 299, 100, 299, 299, 272, 329, 299, 299, 210, 271, 293, 299, - 325, 317, 299, 299, 299, 299, 223, 204, 299, 119, 56, 107, 299, 41, 40, 38, 100, 299, 299, 272, 329, 299, 299, - 210, 271, 293, 299, 325, 317, 201, 321, 322, 328, 223, 204, 299, 119, 61, 107, 299, 190, 299, 299, 100, 299, - 299, 272, 329, 299, 299, 210, 271, 293, 299, 325, 317, 299, 299, 299, 299, 223, 204, 299, 96, 58, 107, 299, 41, - 40, 38, 100, 299, 299, 272, 329, 299, 299, 210, 271, 293, 299, 325, 317, 201, 321, 322, 328, 223, 204, 299, 119, - 66, 107, 299, 188, 299, 299, 100, 299, 299, 272, 329, 299, 299, 210, 271, 293, 299, 325, 317, 201, 299, 299, - 299, 223, 204, 299, 119, 47, 107, 299, 41, 40, 38, 100, 299, 299, 272, 329, 299, 299, 210, 271, 293, 299, 325, - 317, 299, 321, 322, 328, 223, 204, 299, 119, 78, 107, 299, 41, 40, 38, 100, 299, 299, 272, 329, 299, 299, 210, - 271, 293, 299, 325, 317, 299, 321, 322, 328, 223, 204, 299, 119, 54, 107, 299, 299, 299, 299, 100, 299, 299, - 272, 329, 299, 299, 210, 271, 293, 299, 325, 317, 299, 299, 299, 299, 223, 204, 299, 119, 53, 107, 299, 299, - 299, 299, 100, 299, 299, 272, 329, 299, 299, 210, 271, 293, 299, 325, 317, 299, 299, 299, 299, 223, 95, 299, 79, - 44, 101, 299, 299, 299, 299, 100, 299, 299, 272, 329, 299, 299, 210, 271, 293, 299, 325, 317, 299, 299, 299, - 299, 223, 197, 299, 119, 57, 107, 299, 299, 299, 299, 100, 299, 299, 272, 329, 299, 299, 210, 271, 293, 299, - 325, 317, 299, 299, 299, 299, 223, 204, 299, 119, 76, 107, 299, 299, 299, 299, 100, 299, 299, 272, 329, 299, - 299, 210, 271, 293, 299, 325, 317, 299, 299, 299, 299, 223, 204, 299, 119, 55, 107, 299, 299, 299, 299, 100, - 299, 299, 272, 329, 299, 299, 210, 271, 293, 299, 325, 317, 299, 299, 299, 299, 223, 204, 299, 119, 67, 107, - 299, 299, 299, 299, 100, 299, 299, 272, 329, 299, 299, 210, 271, 293, 299, 325, 317, 299, 299, 299, 299, 223, - 234, 299, 122, 299, 107, 299, 299, 299, 299, 100, 299, 299, 299, 320, 299, 299, 210, 271, 293, 299, 325, 317, - 409, 409, 299, 299, 223, 234, 299, 127, 299, 107, 299, 299, 299, 299, 100, 299, 299, 299, 250, 299, 299, 210, - 271, 293, 299, 325, 524, 51, 253, 281, 282, 216, 299, 299, 223, 299, 441, 317, 409, 409, 409, 201, 223, 234, - 299, 126, 299, 107, 441, 299, 299, 299, 100, 299, 299, 409, 409, 409, 299, 210, 271, 293, 201, 325, 299, 33, - 299, 12, 299, 299, 299, 299, 299, 301, 17, 299, 299, 299, 299, 41, 40, 38, 299, 299, 317, 299, 299, 299, 12, - 223, 234, 299, 123, 299, 107, 17, 321, 322, 328, 100, 41, 40, 38, 299, 299, 299, 210, 271, 293, 299, 325, 299, - 299, 403, 299, 299, 299, 321, 322, 328, 299, 317, 299, 403, 299, 403, 223, 234, 403, 118, 299, 107, 299, 299, - 299, 403, 100, 403, 299, 403, 299, 299, 299, 210, 271, 293, 317, 325, 232, 299, 299, 223, 234, 299, 125, 299, - 107, 299, 299, 226, 299, 100, 299, 201, 299, 299, 299, 299, 210, 271, 293, 470, 325, 317, 201, 470, 454, 226, - 223, 234, 299, 120, 299, 107, 299, 299, 299, 299, 100, 470, 299, 30, 299, 470, 454, 210, 271, 293, 201, 325, 12, - 41, 40, 38, 454, 299, 454, 17, 470, 299, 454, 314, 41, 40, 38, 299, 315, 299, 321, 322, 328, 201, 454, 34, 454, - 299, 470, 299, 454, 321, 322, 328, 299, 299, 226, 470, 41, 40, 38, 470, 454, 299, 114, 299, 299, 299, 470, 299, - 299, 299, 470, 454, 299, 321, 322, 328, 299, 302, 299, 41, 40, 38, 201, 299, 299, 299, 299, 299, 454, 299, 454, - 299, 470, 365, 454, 299, 321, 322, 328, 454, 221, 454, 299, 470, 299, 454, 166, 299, 12, 299, 178, 299, 299, - 299, 299, 17, 260, 299, 441, 13, 319, 162, 299, 11, 196, 178, 299, 266, 137, 299, 441, 260, 178, 189, 13, 319, - 299, 299, 260, 299, 299, 13, 319, 299, 267, 299, 299, 299, 189, 299, 299, 299, 299, 299, 299, 189, 299, 299, - 299, 299, 299, 299, 299, 299, 311,); - - static public $yy_lookahead = array(13, 14, 15, 15, 17, 18, 37, 20, 21, 64, 65, 66, 67, 26, 12, 70, 47, 30, 49, 32, - 33, 27, 35, 54, 37, 23, 23, 40, 34, 27, 29, 44, 45, 46, 47, 48, 34, 50, 37, 52, 53, 54, 55, 55, 42, 42, 59, 13, - 14, 15, 49, 17, 18, 76, 20, 21, 93, 14, 95, 96, 26, 18, 85, 86, 30, 31, 32, 33, 16, 35, 27, 37, 29, 23, 40, 23, - 99, 34, 44, 45, 46, 47, 48, 75, 50, 77, 52, 53, 80, 55, 72, 37, 42, 59, 13, 14, 15, 1, 17, 18, 82, 20, 21, 49, - 14, 72, 18, 26, 18, 76, 60, 30, 94, 32, 33, 82, 35, 27, 37, 29, 36, 40, 38, 27, 34, 44, 45, 46, 47, 48, 34, 50, - 99, 52, 53, 36, 55, 81, 23, 51, 59, 13, 14, 15, 47, 17, 18, 14, 20, 21, 53, 18, 72, 54, 26, 12, 76, 42, 30, 65, - 32, 33, 82, 35, 70, 37, 23, 14, 40, 54, 27, 18, 44, 45, 46, 47, 48, 34, 50, 99, 52, 53, 14, 55, 51, 42, 18, 59, - 13, 14, 15, 1, 17, 18, 23, 20, 21, 103, 104, 47, 1, 26, 12, 47, 51, 30, 54, 32, 33, 53, 35, 12, 37, 15, 1, 40, - 18, 27, 28, 44, 45, 46, 47, 48, 34, 50, 27, 52, 53, 18, 55, 72, 19, 34, 59, 13, 14, 15, 1, 17, 18, 82, 20, 21, - 75, 1, 77, 78, 26, 80, 52, 19, 30, 55, 32, 33, 12, 35, 99, 37, 14, 50, 40, 16, 18, 14, 44, 45, 46, 47, 48, 27, - 50, 27, 52, 53, 92, 55, 34, 47, 34, 59, 13, 14, 15, 53, 17, 18, 37, 20, 21, 54, 14, 72, 47, 26, 18, 76, 72, 30, - 53, 32, 33, 82, 35, 27, 37, 16, 82, 40, 19, 37, 34, 44, 45, 46, 47, 48, 54, 50, 99, 52, 53, 49, 55, 99, 95, 96, - 59, 13, 14, 15, 1, 17, 18, 14, 20, 21, 81, 18, 49, 16, 26, 12, 19, 72, 30, 75, 32, 33, 71, 35, 80, 37, 75, 82, - 40, 15, 27, 80, 44, 45, 46, 47, 48, 34, 50, 94, 52, 53, 91, 55, 51, 80, 49, 59, 13, 14, 15, 37, 17, 18, 72, 20, - 21, 9, 10, 11, 22, 26, 97, 96, 82, 30, 65, 32, 33, 55, 35, 70, 37, 100, 36, 40, 94, 37, 35, 44, 45, 46, 47, 48, - 76, 50, 76, 52, 53, 49, 55, 72, 1, 16, 59, 13, 14, 15, 2, 17, 18, 82, 20, 21, 36, 104, 38, 99, 26, 99, 100, 1, - 30, 94, 32, 33, 75, 35, 77, 37, 29, 80, 40, 36, 47, 38, 44, 45, 46, 47, 48, 27, 50, 15, 52, 53, 18, 55, 34, 92, - 2, 59, 13, 14, 15, 76, 17, 18, 76, 20, 21, 90, 14, 19, 16, 26, 18, 19, 97, 30, 66, 32, 33, 69, 35, 90, 37, 15, - 99, 40, 99, 99, 97, 44, 45, 46, 47, 48, 92, 50, 94, 52, 19, 49, 55, 47, 14, 49, 59, 51, 18, 53, 3, 4, 5, 6, 7, - 8, 9, 92, 14, 94, 13, 14, 18, 19, 17, 55, 65, 20, 21, 95, 96, 70, 71, 26, 73, 74, 75, 30, 18, 32, 33, 80, 37, 1, - 83, 84, 72, 24, 87, 88, 89, 47, 91, 49, 12, 51, 82, 53, 18, 65, 72, 5, 101, 102, 70, 71, 18, 73, 74, 75, 82, 1, - 2, 38, 80, 18, 52, 83, 84, 18, 37, 87, 88, 89, 72, 91, 54, 72, 16, 52, 65, 18, 98, 92, 82, 70, 71, 82, 73, 74, - 75, 18, 77, 81, 18, 80, 18, 43, 83, 84, 12, 35, 87, 88, 89, 65, 91, 18, 72, 92, 70, 71, 76, 73, 74, 75, 92, 47, - 82, 82, 80, 85, 86, 83, 84, 94, 12, 87, 88, 89, 16, 91, 93, 80, 65, 99, 92, 79, 98, 70, 71, 27, 73, 74, 75, 80, - 87, 80, 34, 80, 68, 37, 83, 84, 10, 80, 87, 88, 89, 80, 91, 105, 105, 49, 65, 105, 92, 105, 105, 70, 71, 102, - 73, 74, 75, 105, 77, 105, 105, 80, 105, 105, 83, 84, 105, 105, 87, 88, 89, 65, 91, 105, 105, 105, 70, 71, 105, - 73, 74, 75, 105, 105, 105, 105, 80, 14, 15, 83, 84, 18, 105, 87, 88, 89, 105, 91, 105, 105, 65, 105, 105, 105, - 98, 70, 71, 105, 73, 74, 75, 105, 105, 105, 105, 80, 105, 105, 83, 84, 105, 5, 87, 88, 89, 105, 91, 105, 55, 13, - 14, 15, 105, 17, 105, 65, 20, 21, 105, 105, 70, 71, 26, 73, 74, 75, 30, 105, 32, 33, 80, 105, 72, 83, 84, 105, - 76, 87, 88, 89, 105, 91, 82, 65, 105, 85, 86, 105, 70, 71, 105, 73, 74, 75, 105, 59, 60, 105, 80, 99, 105, 83, - 84, 105, 105, 87, 88, 89, 65, 91, 105, 105, 105, 70, 71, 105, 73, 74, 75, 105, 105, 105, 105, 80, 105, 105, 83, - 84, 105, 5, 87, 88, 89, 105, 91, 105, 105, 13, 14, 15, 105, 17, 105, 65, 20, 21, 105, 105, 70, 71, 26, 73, 74, - 75, 30, 105, 32, 33, 80, 105, 105, 83, 84, 105, 105, 87, 88, 89, 105, 91, 105, 65, 105, 105, 105, 105, 70, 71, - 105, 73, 74, 75, 105, 59, 60, 105, 80, 105, 105, 83, 84, 105, 105, 87, 88, 89, 65, 91, 105, 72, 105, 70, 71, 76, - 73, 74, 75, 105, 105, 82, 105, 80, 85, 86, 83, 84, 105, 105, 87, 88, 89, 105, 91, 65, 1, 105, 99, 105, 70, 71, - 105, 73, 74, 75, 105, 39, 40, 41, 80, 105, 105, 83, 84, 105, 105, 87, 88, 89, 105, 91, 65, 28, 56, 57, 58, 70, - 71, 105, 73, 74, 75, 105, 39, 40, 41, 80, 105, 105, 83, 84, 105, 105, 87, 88, 89, 105, 91, 65, 1, 56, 57, 58, - 70, 71, 105, 73, 74, 75, 105, 105, 105, 105, 80, 105, 105, 83, 84, 105, 105, 87, 88, 89, 105, 91, 65, 105, 105, - 105, 105, 70, 71, 105, 73, 74, 75, 38, 39, 40, 41, 80, 105, 105, 83, 84, 105, 105, 87, 88, 89, 105, 91, 65, 1, - 56, 57, 58, 70, 71, 105, 73, 74, 75, 105, 12, 105, 105, 80, 105, 105, 83, 84, 105, 105, 87, 88, 89, 105, 91, 65, - 1, 2, 105, 105, 70, 71, 105, 73, 74, 75, 105, 39, 40, 41, 80, 105, 105, 83, 84, 105, 105, 87, 88, 89, 105, 91, - 65, 1, 56, 57, 58, 70, 71, 105, 73, 74, 75, 105, 39, 40, 41, 80, 105, 105, 83, 84, 105, 105, 87, 88, 89, 105, - 91, 65, 105, 56, 57, 58, 70, 71, 105, 73, 74, 75, 38, 39, 40, 41, 80, 105, 105, 83, 84, 105, 105, 87, 88, 89, - 105, 91, 65, 1, 56, 57, 58, 70, 71, 105, 73, 74, 75, 105, 12, 105, 105, 80, 105, 105, 83, 84, 105, 105, 87, 88, - 89, 105, 91, 65, 105, 105, 105, 105, 70, 71, 105, 73, 74, 75, 105, 39, 40, 41, 80, 105, 105, 83, 84, 105, 105, - 87, 88, 89, 105, 91, 65, 1, 56, 57, 58, 70, 71, 105, 73, 74, 75, 105, 12, 105, 105, 80, 105, 105, 83, 84, 105, - 105, 87, 88, 89, 105, 91, 65, 105, 105, 105, 105, 70, 71, 105, 73, 74, 75, 105, 39, 40, 41, 80, 105, 105, 83, - 84, 105, 105, 87, 88, 89, 105, 91, 65, 1, 56, 57, 58, 70, 71, 105, 73, 74, 75, 105, 12, 105, 105, 80, 105, 105, - 83, 84, 105, 105, 87, 88, 89, 105, 91, 65, 1, 105, 105, 105, 70, 71, 105, 73, 74, 75, 105, 39, 40, 41, 80, 105, - 105, 83, 84, 105, 105, 87, 88, 89, 105, 91, 65, 105, 56, 57, 58, 70, 71, 105, 73, 74, 75, 105, 39, 40, 41, 80, - 105, 105, 83, 84, 105, 105, 87, 88, 89, 105, 91, 65, 105, 56, 57, 58, 70, 71, 105, 73, 74, 75, 105, 105, 105, - 105, 80, 105, 105, 83, 84, 105, 105, 87, 88, 89, 105, 91, 65, 105, 105, 105, 105, 70, 71, 105, 73, 74, 75, 105, - 105, 105, 105, 80, 105, 105, 83, 84, 105, 105, 87, 88, 89, 105, 91, 65, 105, 105, 105, 105, 70, 71, 105, 73, 74, - 75, 105, 105, 105, 105, 80, 105, 105, 83, 84, 105, 105, 87, 88, 89, 105, 91, 65, 105, 105, 105, 105, 70, 71, - 105, 73, 74, 75, 105, 105, 105, 105, 80, 105, 105, 83, 84, 105, 105, 87, 88, 89, 105, 91, 65, 105, 105, 105, - 105, 70, 71, 105, 73, 74, 75, 105, 105, 105, 105, 80, 105, 105, 83, 84, 105, 105, 87, 88, 89, 105, 91, 65, 105, - 105, 105, 105, 70, 71, 105, 73, 74, 75, 105, 105, 105, 105, 80, 105, 105, 83, 84, 105, 105, 87, 88, 89, 105, 91, - 65, 105, 105, 105, 105, 70, 71, 105, 73, 74, 75, 105, 105, 105, 105, 80, 105, 105, 83, 84, 105, 105, 87, 88, 89, - 105, 91, 65, 105, 105, 105, 105, 70, 71, 105, 73, 105, 75, 105, 105, 105, 105, 80, 105, 105, 105, 84, 105, 105, - 87, 88, 89, 105, 91, 65, 1, 2, 105, 105, 70, 71, 105, 73, 105, 75, 105, 105, 105, 105, 80, 105, 105, 105, 84, - 105, 105, 87, 88, 89, 105, 91, 62, 63, 64, 65, 66, 67, 105, 105, 70, 105, 37, 65, 39, 40, 41, 1, 70, 71, 105, - 73, 105, 75, 49, 105, 105, 105, 80, 105, 105, 56, 57, 58, 105, 87, 88, 89, 1, 91, 105, 25, 105, 27, 105, 105, - 105, 105, 105, 12, 34, 105, 105, 105, 105, 39, 40, 41, 105, 105, 65, 105, 105, 105, 27, 70, 71, 105, 73, 105, - 75, 34, 56, 57, 58, 80, 39, 40, 41, 105, 105, 105, 87, 88, 89, 105, 91, 105, 105, 12, 105, 105, 105, 56, 57, 58, - 105, 65, 105, 22, 105, 24, 70, 71, 27, 73, 105, 75, 105, 105, 105, 34, 80, 36, 105, 38, 105, 105, 105, 87, 88, - 89, 65, 91, 47, 105, 105, 70, 71, 105, 73, 105, 75, 105, 105, 2, 105, 80, 105, 1, 105, 105, 105, 105, 87, 88, - 89, 14, 91, 65, 1, 18, 19, 2, 70, 71, 105, 73, 105, 75, 105, 105, 105, 105, 80, 14, 105, 16, 105, 18, 19, 87, - 88, 89, 1, 91, 27, 39, 40, 41, 47, 105, 49, 34, 51, 105, 53, 54, 39, 40, 41, 105, 54, 105, 56, 57, 58, 1, 47, 2, - 49, 105, 51, 105, 53, 56, 57, 58, 105, 105, 2, 14, 39, 40, 41, 18, 19, 105, 22, 105, 105, 105, 14, 105, 105, - 105, 18, 19, 105, 56, 57, 58, 105, 60, 105, 39, 40, 41, 1, 105, 105, 105, 105, 105, 47, 105, 49, 105, 51, 12, - 53, 105, 56, 57, 58, 47, 19, 49, 105, 51, 105, 53, 72, 105, 27, 105, 76, 105, 105, 105, 105, 34, 82, 105, 37, - 85, 86, 72, 105, 14, 15, 76, 105, 18, 72, 105, 49, 82, 76, 99, 85, 86, 105, 105, 82, 105, 105, 85, 86, 105, 35, - 105, 105, 105, 99, 105, 105, 105, 105, 105, 105, 99, 105, 105, 105, 105, 105, 105, 105, 105, 55,); - - const YY_SHIFT_USE_DFLT = -32; - - const YY_SHIFT_MAX = 236; - - static public $yy_shift_ofst = array(517, 410, 316, 81, 81, 316, 81, 410, 34, 34, -13, 81, 128, 81, 81, 128, 81, - 81, 269, 81, 81, 81, 175, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 363, 81, 81, 222, 222, 457, 457, 457, 457, - 457, 1624, 1603, 1736, 1736, 1736, 1736, 1736, 517, 754, 1211, 1265, 1076, 1157, 1760, 941, 1725, 995, 1103, - 1049, 1783, 1292, 1824, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 914, 914, 199, 198, - 96, 342, 842, 90, 43, 278, 246, 96, 96, 342, 232, 342, 580, 2, 143, 190, 244, 331, 711, 321, 325, 291, 376, 446, - 237, -6, 462, -6, 552, 432, 213, 500, 500, 480, 419, 446, 438, 438, 438, 438, 491, 438, 438, 491, 438, 438, - -32, 1738, 1720, 466, 1784, 1795, 514, 1852, 247, 153, -6, -6, -6, -6, -6, -6, 97, -12, 168, -6, -6, - 97, 97, -6, 156, 156, 97, 52, 97, -6, -6, -6, 97, 251, 97, -6, -12, -6, 97, -6, -6, -12, -6, -12, - -6, 211, -6, 664, 438, 491, 438, 438, 438, 424, 438, 491, 515, 491, 424, -32, -32, -32, -32, -32, 1562, - 1664, 634, -31, 1, 133, 50, 115, 152, 99, 88, 366, 84, 3, 405, 54, 415, 396, 274, 368, 553, 571, 542, 582, 534, - 566, 558, 545, 567, 547, 583, 574, 608, 586, 590, 598, 515, 550, 593, 596, 609, 371, 264, 171, 533, 530,); - - const YY_REDUCE_USE_DFLT = -56; - - const YY_REDUCE_MAX = 190; - - static public $yy_reduce_ofst = array(1527, 471, 619, 560, 644, 535, 504, 589, 1335, 1092, 1038, 1119, 1011, 984, - 876, 1173, 903, 930, 957, 1146, 1200, 1443, 1416, 1362, 1227, 1389, 1254, 1281, 1308, 1065, 673, 849, 824, 708, - 761, 736, 796, 1497, 1470, 1619, 1535, 1671, 1644, 1582, 1792, 1777, 1799, 845, 1792, 718, 556, -55, 94, -23, - -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, 33, -23, -23, -23, -23, -23, -23, -23, - -23, -23, -23, -23, -23, -23, 221, 279, 80, 169, 329, 347, 310, 18, 273, 159, 226, 8, -37, 369, 338, 525, - 525, 336, 336, 336, 293, 414, 231, 231, 422, 389, 336, 522, 231, 498, 336, 484, 400, 435, 414, 272, 336, 403, - 397, 336, 336, 336, 444, 336, 336, 231, 336, 336, 336, 184, 184, 184, 184, 184, 184, 573, 184, 551, 557, 557, - 557, 557, 557, 557, 559, 585, 184, 557, 557, 559, 559, 557, 544, 564, 559, 578, 559, 557, 557, 557, 559, 594, - 559, 557, 587, 557, 559, 557, 557, 595, 557, 599, 557, 579, 557, 602, 399, 295, 399, 399, 399, 301, 399, 295, - 375, 295, 301, 257, 56, 537, 532, 511,); - - static public $yyExpectedTokens = array(array(3, 4, 5, 6, 7, 8, 9, 13, 14, 17, 20, 21, 26, 30, 32, 33,), - array(13, 14, 15, 17, 18, 20, 21, 26, 30, 32, 33, 35, 37, 40, 44, 45, 46, 47, 48, 50, 52, 53, 55, 59,), - array(13, 14, 15, 17, 18, 20, 21, 26, 30, 32, 33, 35, 37, 40, 44, 45, 46, 47, 48, 50, 52, 53, 55, 59,), - array(13, 14, 15, 17, 18, 20, 21, 26, 30, 32, 33, 35, 37, 40, 44, 45, 46, 47, 48, 50, 52, 53, 55, 59,), - array(13, 14, 15, 17, 18, 20, 21, 26, 30, 32, 33, 35, 37, 40, 44, 45, 46, 47, 48, 50, 52, 53, 55, 59,), - array(13, 14, 15, 17, 18, 20, 21, 26, 30, 32, 33, 35, 37, 40, 44, 45, 46, 47, 48, 50, 52, 53, 55, 59,), - array(13, 14, 15, 17, 18, 20, 21, 26, 30, 32, 33, 35, 37, 40, 44, 45, 46, 47, 48, 50, 52, 53, 55, 59,), - array(13, 14, 15, 17, 18, 20, 21, 26, 30, 32, 33, 35, 37, 40, 44, 45, 46, 47, 48, 50, 52, 53, 55, 59,), - array(13, 14, 15, 17, 18, 20, 21, 26, 30, 31, 32, 33, 35, 37, 40, 44, 45, 46, 47, 48, 50, 52, 53, 55, 59,), - array(13, 14, 15, 17, 18, 20, 21, 26, 30, 31, 32, 33, 35, 37, 40, 44, 45, 46, 47, 48, 50, 52, 53, 55, 59,), - array(13, 14, 15, 17, 18, 20, 21, 26, 30, 32, 33, 35, 37, 40, 44, 45, 46, 47, 48, 50, 52, 53, 54, 55, 59,), - array(13, 14, 15, 17, 18, 20, 21, 26, 30, 32, 33, 35, 37, 40, 44, 45, 46, 47, 48, 50, 52, 53, 55, 59,), - array(13, 14, 15, 17, 18, 20, 21, 26, 30, 32, 33, 35, 37, 40, 44, 45, 46, 47, 48, 50, 52, 53, 55, 59,), - array(13, 14, 15, 17, 18, 20, 21, 26, 30, 32, 33, 35, 37, 40, 44, 45, 46, 47, 48, 50, 52, 53, 55, 59,), - array(13, 14, 15, 17, 18, 20, 21, 26, 30, 32, 33, 35, 37, 40, 44, 45, 46, 47, 48, 50, 52, 53, 55, 59,), - array(13, 14, 15, 17, 18, 20, 21, 26, 30, 32, 33, 35, 37, 40, 44, 45, 46, 47, 48, 50, 52, 53, 55, 59,), - array(13, 14, 15, 17, 18, 20, 21, 26, 30, 32, 33, 35, 37, 40, 44, 45, 46, 47, 48, 50, 52, 53, 55, 59,), - array(13, 14, 15, 17, 18, 20, 21, 26, 30, 32, 33, 35, 37, 40, 44, 45, 46, 47, 48, 50, 52, 53, 55, 59,), - array(13, 14, 15, 17, 18, 20, 21, 26, 30, 32, 33, 35, 37, 40, 44, 45, 46, 47, 48, 50, 52, 53, 55, 59,), - array(13, 14, 15, 17, 18, 20, 21, 26, 30, 32, 33, 35, 37, 40, 44, 45, 46, 47, 48, 50, 52, 53, 55, 59,), - array(13, 14, 15, 17, 18, 20, 21, 26, 30, 32, 33, 35, 37, 40, 44, 45, 46, 47, 48, 50, 52, 53, 55, 59,), - array(13, 14, 15, 17, 18, 20, 21, 26, 30, 32, 33, 35, 37, 40, 44, 45, 46, 47, 48, 50, 52, 53, 55, 59,), - array(13, 14, 15, 17, 18, 20, 21, 26, 30, 32, 33, 35, 37, 40, 44, 45, 46, 47, 48, 50, 52, 53, 55, 59,), - array(13, 14, 15, 17, 18, 20, 21, 26, 30, 32, 33, 35, 37, 40, 44, 45, 46, 47, 48, 50, 52, 53, 55, 59,), - array(13, 14, 15, 17, 18, 20, 21, 26, 30, 32, 33, 35, 37, 40, 44, 45, 46, 47, 48, 50, 52, 53, 55, 59,), - array(13, 14, 15, 17, 18, 20, 21, 26, 30, 32, 33, 35, 37, 40, 44, 45, 46, 47, 48, 50, 52, 53, 55, 59,), - array(13, 14, 15, 17, 18, 20, 21, 26, 30, 32, 33, 35, 37, 40, 44, 45, 46, 47, 48, 50, 52, 53, 55, 59,), - array(13, 14, 15, 17, 18, 20, 21, 26, 30, 32, 33, 35, 37, 40, 44, 45, 46, 47, 48, 50, 52, 53, 55, 59,), - array(13, 14, 15, 17, 18, 20, 21, 26, 30, 32, 33, 35, 37, 40, 44, 45, 46, 47, 48, 50, 52, 53, 55, 59,), - array(13, 14, 15, 17, 18, 20, 21, 26, 30, 32, 33, 35, 37, 40, 44, 45, 46, 47, 48, 50, 52, 53, 55, 59,), - array(13, 14, 15, 17, 18, 20, 21, 26, 30, 32, 33, 35, 37, 40, 44, 45, 46, 47, 48, 50, 52, 53, 55, 59,), - array(13, 14, 15, 17, 18, 20, 21, 26, 30, 32, 33, 35, 37, 40, 44, 45, 46, 47, 48, 50, 52, 53, 55, 59,), - array(13, 14, 15, 17, 18, 20, 21, 26, 30, 32, 33, 35, 37, 40, 44, 45, 46, 47, 48, 50, 52, 53, 55, 59,), - array(13, 14, 15, 17, 18, 20, 21, 26, 30, 32, 33, 35, 37, 40, 44, 45, 46, 47, 48, 50, 52, 53, 55, 59,), - array(13, 14, 15, 17, 18, 20, 21, 26, 30, 32, 33, 35, 37, 40, 44, 45, 46, 47, 48, 50, 52, 53, 55, 59,), - array(13, 14, 15, 17, 18, 20, 21, 26, 30, 32, 33, 35, 37, 40, 44, 45, 46, 47, 48, 50, 52, 53, 55, 59,), - array(13, 14, 15, 17, 18, 20, 21, 26, 30, 32, 33, 35, 37, 40, 44, 45, 46, 47, 48, 50, 52, 53, 55, 59,), - array(13, 14, 15, 17, 18, 20, 21, 26, 30, 32, 33, 35, 37, 40, 44, 45, 46, 47, 48, 50, 52, 53, 55, 59,), - array(13, 14, 15, 17, 18, 20, 21, 26, 30, 32, 33, 35, 37, 40, 44, 45, 46, 47, 48, 50, 52, 53, 55, 59,), - array(13, 14, 15, 17, 18, 20, 21, 26, 30, 32, 33, 35, 37, 40, 44, 45, 46, 47, 48, 50, 52, 55, 59,), - array(13, 14, 15, 17, 18, 20, 21, 26, 30, 32, 33, 35, 37, 40, 44, 45, 46, 47, 48, 50, 52, 55, 59,), - array(13, 14, 15, 17, 18, 20, 21, 26, 30, 32, 33, 35, 37, 40, 44, 45, 46, 47, 48, 50, 52, 55, 59,), - array(13, 14, 15, 17, 18, 20, 21, 26, 30, 32, 33, 35, 37, 40, 44, 45, 46, 47, 48, 50, 52, 55, 59,), - array(13, 14, 15, 17, 18, 20, 21, 26, 30, 32, 33, 35, 37, 40, 44, 45, 46, 47, 48, 50, 52, 55, 59,), - array(1, 12, 27, 34, 39, 40, 41, 56, 57, 58,), array(1, 25, 27, 34, 39, 40, 41, 56, 57, 58,), - array(1, 27, 34, 39, 40, 41, 56, 57, 58,), array(1, 27, 34, 39, 40, 41, 56, 57, 58,), - array(1, 27, 34, 39, 40, 41, 56, 57, 58,), array(1, 27, 34, 39, 40, 41, 56, 57, 58,), - array(1, 27, 34, 39, 40, 41, 56, 57, 58,), array(3, 4, 5, 6, 7, 8, 9, 13, 14, 17, 20, 21, 26, 30, 32, 33,), - array(5, 13, 14, 15, 17, 20, 21, 26, 30, 32, 33, 59, 60,), array(1, 12, 39, 40, 41, 56, 57, 58,), - array(1, 12, 39, 40, 41, 56, 57, 58,), array(1, 2, 39, 40, 41, 56, 57, 58,), - array(1, 12, 39, 40, 41, 56, 57, 58,), array(1, 39, 40, 41, 56, 57, 58, 60,), - array(1, 28, 39, 40, 41, 56, 57, 58,), array(1, 39, 40, 41, 54, 56, 57, 58,), - array(1, 38, 39, 40, 41, 56, 57, 58,), array(1, 38, 39, 40, 41, 56, 57, 58,), - array(1, 12, 39, 40, 41, 56, 57, 58,), array(1, 22, 39, 40, 41, 56, 57, 58,), array(1, 39, 40, 41, 56, 57, 58,), - array(1, 12, 19, 27, 34, 37, 49,), array(1, 39, 40, 41, 56, 57, 58,), array(1, 39, 40, 41, 56, 57, 58,), - array(1, 39, 40, 41, 56, 57, 58,), array(1, 39, 40, 41, 56, 57, 58,), array(1, 39, 40, 41, 56, 57, 58,), - array(1, 39, 40, 41, 56, 57, 58,), array(1, 39, 40, 41, 56, 57, 58,), array(1, 39, 40, 41, 56, 57, 58,), - array(1, 39, 40, 41, 56, 57, 58,), array(1, 39, 40, 41, 56, 57, 58,), array(1, 39, 40, 41, 56, 57, 58,), - array(39, 40, 41, 56, 57, 58,), array(39, 40, 41, 56, 57, 58,), array(1, 12, 27, 34,), array(15, 18, 52, 55,), - array(1, 27, 34,), array(15, 37, 55,), array(5, 13, 14, 15, 17, 20, 21, 26, 30, 32, 33, 59, 60,), - array(14, 18, 27, 29, 34,), array(14, 18, 27, 29, 34,), array(14, 18, 27, 34,), array(14, 18, 27, 34,), - array(1, 27, 34,), array(1, 27, 34,), array(15, 37, 55,), array(19, 47, 53,), array(15, 37, 55,), array(1, 2,), - array(12, 23, 27, 34, 42,), array(12, 23, 27, 34, 42,), array(1, 12, 27, 28, 34,), array(1, 12, 27, 34,), - array(1, 12, 27, 34,), array(14, 15, 18, 55,), array(14, 18, 51,), array(16, 19, 49,), array(16, 19, 49,), - array(9, 10, 11,), array(15, 18,), array(1, 54,), array(27, 34,), array(19, 49,), array(27, 34,), array(1, 12,), - array(27, 34,), array(1, 19,), array(14, 18,), array(14, 18,), array(15, 55,), array(1, 29,), array(15, 18,), - array(1,), array(1,), array(1,), array(1,), array(19,), array(1,), array(1,), array(19,), array(1,), array(1,), - array(), array(2, 14, 16, 18, 19, 47, 49, 51, 53,), array(2, 14, 18, 19, 47, 49, 51, 53, 54,), - array(2, 14, 16, 18, 19, 47, 49, 51, 53,), array(2, 14, 18, 19, 47, 49, 51, 53,), - array(2, 14, 18, 19, 47, 49, 51, 53,), array(14, 18, 19, 47, 49, 51, 53,), array(14, 15, 18, 35, 55,), - array(16, 47, 53,), array(14, 18, 51,), array(27, 34,), array(27, 34,), array(27, 34,), array(27, 34,), - array(27, 34,), array(27, 34,), array(47, 53,), array(15, 55,), array(14, 18,), array(27, 34,), array(27, 34,), - array(47, 53,), array(47, 53,), array(27, 34,), array(47, 53,), array(47, 53,), array(47, 53,), array(16, 23,), - array(47, 53,), array(27, 34,), array(27, 34,), array(27, 34,), array(47, 53,), array(14, 37,), array(47, 53,), - array(27, 34,), array(15, 55,), array(27, 34,), array(47, 53,), array(27, 34,), array(27, 34,), array(15, 55,), - array(27, 34,), array(15, 55,), array(27, 34,), array(18, 50,), array(27, 34,), array(10,), array(1,), - array(19,), array(1,), array(1,), array(1,), array(2,), array(1,), array(19,), array(37,), array(19,), - array(2,), array(), array(), array(), array(), array(), array(1, 2, 37, 39, 40, 41, 49, 56, 57, 58,), - array(12, 22, 24, 27, 34, 36, 38, 47,), array(12, 16, 27, 34, 37, 49,), array(37, 47, 49, 54,), - array(29, 37, 49,), array(14, 18, 51,), array(23, 42, 60,), array(23, 42, 54,), array(47, 54,), array(36, 54,), - array(18, 51,), array(22, 36,), array(36, 38,), array(23, 42,), array(16, 47,), array(37, 49,), array(36, 38,), - array(36, 38,), array(37, 49,), array(37, 49,), array(37,), array(18,), array(54,), array(16,), array(52,), - array(5,), array(18,), array(38,), array(18,), array(52,), array(18,), array(43,), array(12,), array(35,), - array(47,), array(18,), array(37,), array(18,), array(18,), array(18,), array(18,), array(35,), array(54,), - array(23,), array(24,), array(18,), array(), array(), array(), array(), array(), array(), array(), array(), - array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), - array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), - array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), - array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), - array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), - array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), - array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), - array(), array(),); - - static public $yy_default = array(334, 508, 523, 488, 488, 523, 488, 523, 523, 523, 523, 523, 523, 523, 523, 523, - 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, - 523, 523, 523, 523, 523, 523, 523, 393, 360, 393, 357, 393, 369, 331, 523, 523, 523, 523, 523, 523, 398, 523, - 523, 523, 523, 523, 414, 431, 405, 400, 511, 395, 509, 486, 487, 374, 398, 404, 510, 419, 420, 407, 523, 393, - 523, 523, 393, 393, 393, 393, 393, 393, 523, 500, 523, 383, 421, 421, 407, 407, 407, 523, 454, 444, 444, 523, - 523, 407, 393, 444, 371, 407, 393, 387, 454, 454, 523, 407, 523, 389, 422, 407, 410, 497, 417, 423, 444, 424, - 411, 495, 443, 443, 443, 443, 443, 443, 523, 470, 456, 361, 378, 372, 362, 364, 377, 451, 523, 454, 356, 370, - 480, 481, 373, 447, 449, 448, 523, 478, 367, 366, 368, 479, 454, 452, 358, 523, 380, 450, 376, 354, 523, 382, - 523, 379, 523, 381, 348, 384, 498, 390, 413, 388, 489, 438, 475, 454, 501, 490, 494, 494, 454, 494, 454, 431, - 427, 431, 431, 431, 455, 421, 421, 427, 523, 523, 523, 523, 421, 427, 439, 523, 523, 431, 523, 499, 523, 523, - 523, 523, 339, 523, 523, 523, 523, 523, 433, 523, 523, 427, 523, 470, 523, 523, 523, 523, 429, 434, 421, 401, - 523, 464, 483, 375, 461, 484, 406, 463, 469, 462, 433, 474, 394, 402, 496, 470, 460, 332, 445, 491, 492, 425, - 386, 493, 392, 472, 473, 426, 428, 457, 458, 459, 453, 409, 430, 432, 408, 363, 391, 341, 340, 342, 338, 337, - 333, 335, 336, 343, 344, 350, 351, 352, 349, 347, 345, 346, 434, 435, 512, 513, 514, 385, 476, 485, 519, 520, - 517, 516, 505, 507, 506, 515, 522, 518, 521, 471, 477, 467, 465, 468, 440, 437, 436, 415, 416, 502, 503, 442, - 466, 446, 441, 418, 504, 412, 482,); - - const YYNOCODE = 106; - - const YYSTACKDEPTH = 500; - - const YYNSTATE = 331; - - const YYNRULE = 192; - - const YYERRORSYMBOL = 61; - - const YYERRSYMDT = 'yy0'; - - const YYFALLBACK = 0; - - public static $yyFallback = array(); - - public function Trace($TraceFILE, $zTracePrompt) { - if (!$TraceFILE) { - $zTracePrompt = 0; - } elseif (!$zTracePrompt) { - $TraceFILE = 0; - } - $this->yyTraceFILE = $TraceFILE; - $this->yyTracePrompt = $zTracePrompt; - } - - public function PrintTrace() { - $this->yyTraceFILE = fopen('php://output', 'w'); - $this->yyTracePrompt = '<br>'; - } - - public $yyTraceFILE; - - public $yyTracePrompt; - - public $yyidx; /* Index of top element in stack */ - public $yyerrcnt; /* Shifts left before out of the error */ - public $yystack = array(); /* The parser's stack */ - - public $yyTokenName = array('$', 'VERT', 'COLON', 'PHP', 'NOCACHE', 'TEXT', 'STRIPON', 'STRIPOFF', 'BLOCKSOURCE', - 'LITERALSTART', 'LITERALEND', 'LITERAL', 'RDEL', 'SIMPLEOUTPUT', 'LDEL', 'DOLLARID', 'EQUAL', 'SIMPLETAG', 'ID', - 'PTR', 'LDELIF', 'LDELFOR', 'SEMICOLON', 'INCDEC', 'TO', 'STEP', 'LDELFOREACH', 'SPACE', 'AS', 'APTR', - 'LDELSETFILTER', 'SMARTYBLOCKCHILDPARENT', 'CLOSETAG', 'LDELSLASH', 'ATTR', 'INTEGER', 'COMMA', 'OPENP', - 'CLOSEP', 'MATH', 'UNIMATH', 'ISIN', 'INSTANCEOF', 'QMARK', 'NOT', 'TYPECAST', 'HEX', 'DOT', - 'SINGLEQUOTESTRING', 'DOUBLECOLON', 'NAMESPACE', 'AT', 'HATCH', 'OPENB', 'CLOSEB', 'DOLLAR', 'LOGOP', 'TLOGOP', - 'SINGLECOND', 'QUOTE', 'BACKTICK', 'error', 'start', 'template', 'template_element', 'smartytag', 'literal', - 'text_content', 'literal_elements', 'literal_element', 'tag', 'variable', 'attributes', 'value', 'expr', - 'varindexed', 'modifierlist', 'statement', 'statements', 'foraction', 'varvar', 'modparameters', 'attribute', - 'ternary', 'array', 'lop', 'scond', 'ns1', 'function', 'doublequoted_with_quotes', 'static_class_access', - 'object', 'arrayindex', 'indexdef', 'varvarele', 'objectchain', 'objectelement', 'method', 'params', 'modifier', - 'modparameter', 'arrayelements', 'arrayelement', 'doublequoted', 'doublequotedcontent',); - - public static $yyRuleName = array('start ::= template', 'template ::= template_element', - 'template ::= template template_element', 'template ::=', 'template_element ::= smartytag', - 'template_element ::= literal', 'template_element ::= PHP', 'template_element ::= NOCACHE', - 'template_element ::= text_content', 'text_content ::= TEXT', 'text_content ::= text_content TEXT', - 'template_element ::= STRIPON', 'template_element ::= STRIPOFF', 'template_element ::= BLOCKSOURCE', - 'literal ::= LITERALSTART LITERALEND', 'literal ::= LITERALSTART literal_elements LITERALEND', - 'literal_elements ::= literal_elements literal_element', 'literal_elements ::=', 'literal_element ::= literal', - 'literal_element ::= LITERAL', 'smartytag ::= tag RDEL', 'smartytag ::= SIMPLEOUTPUT', 'tag ::= LDEL variable', - 'tag ::= LDEL variable attributes', 'tag ::= LDEL value', 'tag ::= LDEL value attributes', 'tag ::= LDEL expr', - 'tag ::= LDEL expr attributes', 'tag ::= LDEL DOLLARID EQUAL value', 'tag ::= LDEL DOLLARID EQUAL expr', - 'tag ::= LDEL DOLLARID EQUAL expr attributes', 'tag ::= LDEL varindexed EQUAL expr attributes', - 'smartytag ::= SIMPLETAG', 'tag ::= LDEL ID attributes', 'tag ::= LDEL ID', - 'tag ::= LDEL ID modifierlist attributes', 'tag ::= LDEL ID PTR ID attributes', - 'tag ::= LDEL ID PTR ID modifierlist attributes', 'tag ::= LDELIF expr', 'tag ::= LDELIF expr attributes', - 'tag ::= LDELIF statement', 'tag ::= LDELIF statement attributes', - 'tag ::= LDELFOR statements SEMICOLON expr SEMICOLON varindexed foraction attributes', - 'foraction ::= EQUAL expr', 'foraction ::= INCDEC', 'tag ::= LDELFOR statement TO expr attributes', - 'tag ::= LDELFOR statement TO expr STEP expr attributes', 'tag ::= LDELFOREACH attributes', - 'tag ::= LDELFOREACH SPACE value AS varvar attributes', - 'tag ::= LDELFOREACH SPACE value AS varvar APTR varvar attributes', - 'tag ::= LDELFOREACH SPACE expr AS varvar attributes', - 'tag ::= LDELFOREACH SPACE expr AS varvar APTR varvar attributes', 'tag ::= LDELSETFILTER ID modparameters', - 'tag ::= LDELSETFILTER ID modparameters modifierlist', 'tag ::= LDEL SMARTYBLOCKCHILDPARENT', - 'smartytag ::= CLOSETAG', 'tag ::= LDELSLASH ID', 'tag ::= LDELSLASH ID modifierlist', - 'tag ::= LDELSLASH ID PTR ID', 'tag ::= LDELSLASH ID PTR ID modifierlist', - 'attributes ::= attributes attribute', 'attributes ::= attribute', 'attributes ::=', - 'attribute ::= SPACE ID EQUAL ID', 'attribute ::= ATTR expr', 'attribute ::= ATTR value', - 'attribute ::= SPACE ID', 'attribute ::= SPACE expr', 'attribute ::= SPACE value', - 'attribute ::= SPACE INTEGER EQUAL expr', 'statements ::= statement', - 'statements ::= statements COMMA statement', 'statement ::= DOLLARID EQUAL INTEGER', - 'statement ::= DOLLARID EQUAL expr', 'statement ::= varindexed EQUAL expr', - 'statement ::= OPENP statement CLOSEP', 'expr ::= value', 'expr ::= ternary', 'expr ::= DOLLARID COLON ID', - 'expr ::= expr MATH value', 'expr ::= expr UNIMATH value', 'expr ::= array', 'expr ::= expr modifierlist', - 'expr ::= expr lop expr', 'expr ::= expr scond', 'expr ::= expr ISIN array', 'expr ::= expr ISIN value', - 'expr ::= variable INSTANCEOF ns1', 'ternary ::= OPENP expr CLOSEP QMARK DOLLARID COLON expr', - 'ternary ::= OPENP expr CLOSEP QMARK expr COLON expr', 'value ::= variable', 'value ::= UNIMATH value', - 'value ::= NOT value', 'value ::= TYPECAST value', 'value ::= variable INCDEC', 'value ::= HEX', - 'value ::= INTEGER', 'value ::= INTEGER DOT INTEGER', 'value ::= INTEGER DOT', 'value ::= DOT INTEGER', - 'value ::= ID', 'value ::= function', 'value ::= OPENP expr CLOSEP', 'value ::= SINGLEQUOTESTRING', - 'value ::= doublequoted_with_quotes', 'value ::= varindexed DOUBLECOLON static_class_access', - 'value ::= smartytag', 'value ::= value modifierlist', 'value ::= NAMESPACE', - 'value ::= ns1 DOUBLECOLON static_class_access', 'ns1 ::= ID', 'ns1 ::= NAMESPACE', 'variable ::= DOLLARID', - 'variable ::= varindexed', 'variable ::= varvar AT ID', 'variable ::= object', 'variable ::= HATCH ID HATCH', - 'variable ::= HATCH ID HATCH arrayindex', 'variable ::= HATCH variable HATCH', - 'variable ::= HATCH variable HATCH arrayindex', 'varindexed ::= DOLLARID arrayindex', - 'varindexed ::= varvar arrayindex', 'arrayindex ::= arrayindex indexdef', 'arrayindex ::=', - 'indexdef ::= DOT DOLLARID', 'indexdef ::= DOT varvar', 'indexdef ::= DOT varvar AT ID', 'indexdef ::= DOT ID', - 'indexdef ::= DOT INTEGER', 'indexdef ::= DOT LDEL expr RDEL', 'indexdef ::= OPENB ID CLOSEB', - 'indexdef ::= OPENB ID DOT ID CLOSEB', 'indexdef ::= OPENB SINGLEQUOTESTRING CLOSEB', - 'indexdef ::= OPENB INTEGER CLOSEB', 'indexdef ::= OPENB DOLLARID CLOSEB', 'indexdef ::= OPENB variable CLOSEB', - 'indexdef ::= OPENB value CLOSEB', 'indexdef ::= OPENB expr CLOSEB', 'indexdef ::= OPENB CLOSEB', - 'varvar ::= DOLLARID', 'varvar ::= DOLLAR', 'varvar ::= varvar varvarele', 'varvarele ::= ID', - 'varvarele ::= LDEL expr RDEL', 'object ::= varindexed objectchain', 'objectchain ::= objectelement', - 'objectchain ::= objectchain objectelement', 'objectelement ::= PTR ID arrayindex', - 'objectelement ::= PTR varvar arrayindex', 'objectelement ::= PTR LDEL expr RDEL arrayindex', - 'objectelement ::= PTR ID LDEL expr RDEL arrayindex', 'objectelement ::= PTR method', - 'function ::= ns1 OPENP params CLOSEP', 'method ::= ID OPENP params CLOSEP', - 'method ::= DOLLARID OPENP params CLOSEP', 'params ::= params COMMA expr', 'params ::= expr', 'params ::=', - 'modifierlist ::= modifierlist modifier modparameters', 'modifierlist ::= modifier modparameters', - 'modifier ::= VERT AT ID', 'modifier ::= VERT ID', 'modparameters ::= modparameters modparameter', - 'modparameters ::=', 'modparameter ::= COLON value', 'modparameter ::= COLON array', - 'static_class_access ::= method', 'static_class_access ::= method objectchain', 'static_class_access ::= ID', - 'static_class_access ::= DOLLARID arrayindex', 'static_class_access ::= DOLLARID arrayindex objectchain', - 'lop ::= LOGOP', 'lop ::= TLOGOP', 'scond ::= SINGLECOND', 'array ::= OPENB arrayelements CLOSEB', - 'arrayelements ::= arrayelement', 'arrayelements ::= arrayelements COMMA arrayelement', 'arrayelements ::=', - 'arrayelement ::= value APTR expr', 'arrayelement ::= ID APTR expr', 'arrayelement ::= expr', - 'doublequoted_with_quotes ::= QUOTE QUOTE', 'doublequoted_with_quotes ::= QUOTE doublequoted QUOTE', - 'doublequoted ::= doublequoted doublequotedcontent', 'doublequoted ::= doublequotedcontent', - 'doublequotedcontent ::= BACKTICK variable BACKTICK', 'doublequotedcontent ::= BACKTICK expr BACKTICK', - 'doublequotedcontent ::= DOLLARID', 'doublequotedcontent ::= LDEL variable RDEL', - 'doublequotedcontent ::= LDEL expr RDEL', 'doublequotedcontent ::= smartytag', 'doublequotedcontent ::= TEXT',); - - public function tokenName($tokenType) { - if ($tokenType === 0) { - return 'End of Input'; - } - if ($tokenType > 0 && $tokenType < count($this->yyTokenName)) { - return $this->yyTokenName[$tokenType]; - } else { - return "Unknown"; - } - } - - public static function yy_destructor($yymajor, $yypminor) { - switch ($yymajor) { - default: - break; /* If no destructor action specified: do nothing */ - } - } - - public function yy_pop_parser_stack() { - if (empty($this->yystack)) { - return; - } - $yytos = array_pop($this->yystack); - if ($this->yyTraceFILE && $this->yyidx >= 0) { - fwrite($this->yyTraceFILE, $this->yyTracePrompt . 'Popping ' . $this->yyTokenName[$yytos->major] . "\n"); - } - $yymajor = $yytos->major; - self::yy_destructor($yymajor, $yytos->minor); - $this->yyidx--; - - return $yymajor; - } - - public function __destruct() { - while ($this->yystack !== Array()) { - $this->yy_pop_parser_stack(); - } - if (is_resource($this->yyTraceFILE)) { - fclose($this->yyTraceFILE); - } - } - - public function yy_get_expected_tokens($token) { - static $res3 = array(); - static $res4 = array(); - $state = $this->yystack[$this->yyidx]->stateno; - $expected = self::$yyExpectedTokens[$state]; - if (isset($res3[$state][$token])) { - if ($res3[$state][$token]) { - return $expected; - } - } else { - if ($res3[$state][$token] = in_array($token, self::$yyExpectedTokens[$state], true)) { - return $expected; - } - } - $stack = $this->yystack; - $yyidx = $this->yyidx; - do { - $yyact = $this->yy_find_shift_action($token); - if ($yyact >= self::YYNSTATE && $yyact < self::YYNSTATE + self::YYNRULE) { - // reduce action - $done = 0; - do { - if ($done++ == 100) { - $this->yyidx = $yyidx; - $this->yystack = $stack; - // too much recursion prevents proper detection - // so give up - return array_unique($expected); - } - $yyruleno = $yyact - self::YYNSTATE; - $this->yyidx -= self::$yyRuleInfo[$yyruleno][1]; - $nextstate = $this->yy_find_reduce_action($this->yystack[$this->yyidx]->stateno, self::$yyRuleInfo[$yyruleno][0]); - if (isset(self::$yyExpectedTokens[$nextstate])) { - $expected = array_merge($expected, self::$yyExpectedTokens[$nextstate]); - if (isset($res4[$nextstate][$token])) { - if ($res4[$nextstate][$token]) { - $this->yyidx = $yyidx; - $this->yystack = $stack; - return array_unique($expected); - } - } else { - if ($res4[$nextstate][$token] = in_array($token, self::$yyExpectedTokens[$nextstate], true)) { - $this->yyidx = $yyidx; - $this->yystack = $stack; - return array_unique($expected); - } - } - } - if ($nextstate < self::YYNSTATE) { - // we need to shift a non-terminal - $this->yyidx++; - $x = new TP_yyStackEntry; - $x->stateno = $nextstate; - $x->major = self::$yyRuleInfo[$yyruleno][0]; - $this->yystack[$this->yyidx] = $x; - continue 2; - } elseif ($nextstate == self::YYNSTATE + self::YYNRULE + 1) { - $this->yyidx = $yyidx; - $this->yystack = $stack; - // the last token was just ignored, we can't accept - // by ignoring input, this is in essence ignoring a - // syntax error! - return array_unique($expected); - } elseif ($nextstate === self::YY_NO_ACTION) { - $this->yyidx = $yyidx; - $this->yystack = $stack; - // input accepted, but not shifted (I guess) - return $expected; - } else { - $yyact = $nextstate; - } - } while (true); - } - break; - } while (true); - $this->yyidx = $yyidx; - $this->yystack = $stack; - - return array_unique($expected); - } - - public function yy_is_expected_token($token) { - static $res = array(); - static $res2 = array(); - if ($token === 0) { - return true; // 0 is not part of this - } - $state = $this->yystack[$this->yyidx]->stateno; - if (isset($res[$state][$token])) { - if ($res[$state][$token]) { - return true; - } - } else { - if ($res[$state][$token] = in_array($token, self::$yyExpectedTokens[$state], true)) { - return true; - } - } - $stack = $this->yystack; - $yyidx = $this->yyidx; - do { - $yyact = $this->yy_find_shift_action($token); - if ($yyact >= self::YYNSTATE && $yyact < self::YYNSTATE + self::YYNRULE) { - // reduce action - $done = 0; - do { - if ($done++ == 100) { - $this->yyidx = $yyidx; - $this->yystack = $stack; - // too much recursion prevents proper detection - // so give up - return true; - } - $yyruleno = $yyact - self::YYNSTATE; - $this->yyidx -= self::$yyRuleInfo[$yyruleno][1]; - $nextstate = $this->yy_find_reduce_action($this->yystack[$this->yyidx]->stateno, self::$yyRuleInfo[$yyruleno][0]); - if (isset($res2[$nextstate][$token])) { - if ($res2[$nextstate][$token]) { - $this->yyidx = $yyidx; - $this->yystack = $stack; - return true; - } - } else { - if ($res2[$nextstate][$token] = (isset(self::$yyExpectedTokens[$nextstate]) && in_array($token, self::$yyExpectedTokens[$nextstate], true))) { - $this->yyidx = $yyidx; - $this->yystack = $stack; - return true; - } - } - if ($nextstate < self::YYNSTATE) { - // we need to shift a non-terminal - $this->yyidx++; - $x = new TP_yyStackEntry; - $x->stateno = $nextstate; - $x->major = self::$yyRuleInfo[$yyruleno][0]; - $this->yystack[$this->yyidx] = $x; - continue 2; - } elseif ($nextstate == self::YYNSTATE + self::YYNRULE + 1) { - $this->yyidx = $yyidx; - $this->yystack = $stack; - if (!$token) { - // end of input: this is valid - return true; - } - // the last token was just ignored, we can't accept - // by ignoring input, this is in essence ignoring a - // syntax error! - return false; - } elseif ($nextstate === self::YY_NO_ACTION) { - $this->yyidx = $yyidx; - $this->yystack = $stack; - // input accepted, but not shifted (I guess) - return true; - } else { - $yyact = $nextstate; - } - } while (true); - } - break; - } while (true); - $this->yyidx = $yyidx; - $this->yystack = $stack; - - return true; - } - - public function yy_find_shift_action($iLookAhead) { - $stateno = $this->yystack[$this->yyidx]->stateno; - - /* if ($this->yyidx < 0) return self::YY_NO_ACTION; */ - if (!isset(self::$yy_shift_ofst[$stateno])) { - // no shift actions - return self::$yy_default[$stateno]; - } - $i = self::$yy_shift_ofst[$stateno]; - if ($i === self::YY_SHIFT_USE_DFLT) { - return self::$yy_default[$stateno]; - } - if ($iLookAhead == self::YYNOCODE) { - return self::YY_NO_ACTION; - } - $i += $iLookAhead; - if ($i < 0 || $i >= self::YY_SZ_ACTTAB || self::$yy_lookahead[$i] != $iLookAhead) { - if (count(self::$yyFallback) && $iLookAhead < count(self::$yyFallback) && ($iFallback = self::$yyFallback[$iLookAhead]) != 0) { - if ($this->yyTraceFILE) { - fwrite($this->yyTraceFILE, $this->yyTracePrompt . "FALLBACK " . $this->yyTokenName[$iLookAhead] . " => " . $this->yyTokenName[$iFallback] . "\n"); - } - - return $this->yy_find_shift_action($iFallback); - } - - return self::$yy_default[$stateno]; - } else { - return self::$yy_action[$i]; - } - } - - public function yy_find_reduce_action($stateno, $iLookAhead) { - /* $stateno = $this->yystack[$this->yyidx]->stateno; */ - - if (!isset(self::$yy_reduce_ofst[$stateno])) { - return self::$yy_default[$stateno]; - } - $i = self::$yy_reduce_ofst[$stateno]; - if ($i == self::YY_REDUCE_USE_DFLT) { - return self::$yy_default[$stateno]; - } - if ($iLookAhead == self::YYNOCODE) { - return self::YY_NO_ACTION; - } - $i += $iLookAhead; - if ($i < 0 || $i >= self::YY_SZ_ACTTAB || self::$yy_lookahead[$i] != $iLookAhead) { - return self::$yy_default[$stateno]; - } else { - return self::$yy_action[$i]; - } - } - - public function yy_shift($yyNewState, $yyMajor, $yypMinor) { - $this->yyidx++; - if ($this->yyidx >= self::YYSTACKDEPTH) { - $this->yyidx--; - if ($this->yyTraceFILE) { - fprintf($this->yyTraceFILE, "%sStack Overflow!\n", $this->yyTracePrompt); - } - while ($this->yyidx >= 0) { - $this->yy_pop_parser_stack(); - } - #line 190 "../smarty/lexer/smarty_internal_templateparser.y" - - $this->internalError = true; - $this->compiler->trigger_template_error("Stack overflow in template parser"); - - return; - } - $yytos = new TP_yyStackEntry; - $yytos->stateno = $yyNewState; - $yytos->major = $yyMajor; - $yytos->minor = $yypMinor; - $this->yystack[] = $yytos; - if ($this->yyTraceFILE && $this->yyidx > 0) { - fprintf($this->yyTraceFILE, "%sShift %d\n", $this->yyTracePrompt, $yyNewState); - fprintf($this->yyTraceFILE, "%sStack:", $this->yyTracePrompt); - for ($i = 1; $i <= $this->yyidx; $i++) { - fprintf($this->yyTraceFILE, " %s", $this->yyTokenName[$this->yystack[$i]->major]); - } - fwrite($this->yyTraceFILE, "\n"); - } - } - - public static $yyRuleInfo = array(array(0 => 62, 1 => 1), array(0 => 63, 1 => 1), array(0 => 63, 1 => 2), - array(0 => 63, 1 => 0), array(0 => 64, 1 => 1), array(0 => 64, 1 => 1), array(0 => 64, 1 => 1), - array(0 => 64, 1 => 1), array(0 => 64, 1 => 1), array(0 => 67, 1 => 1), array(0 => 67, 1 => 2), - array(0 => 64, 1 => 1), array(0 => 64, 1 => 1), array(0 => 64, 1 => 1), array(0 => 66, 1 => 2), - array(0 => 66, 1 => 3), array(0 => 68, 1 => 2), array(0 => 68, 1 => 0), array(0 => 69, 1 => 1), - array(0 => 69, 1 => 1), array(0 => 65, 1 => 2), array(0 => 65, 1 => 1), array(0 => 70, 1 => 2), - array(0 => 70, 1 => 3), array(0 => 70, 1 => 2), array(0 => 70, 1 => 3), array(0 => 70, 1 => 2), - array(0 => 70, 1 => 3), array(0 => 70, 1 => 4), array(0 => 70, 1 => 4), array(0 => 70, 1 => 5), - array(0 => 70, 1 => 5), array(0 => 65, 1 => 1), array(0 => 70, 1 => 3), array(0 => 70, 1 => 2), - array(0 => 70, 1 => 4), array(0 => 70, 1 => 5), array(0 => 70, 1 => 6), array(0 => 70, 1 => 2), - array(0 => 70, 1 => 3), array(0 => 70, 1 => 2), array(0 => 70, 1 => 3), array(0 => 70, 1 => 8), - array(0 => 79, 1 => 2), array(0 => 79, 1 => 1), array(0 => 70, 1 => 5), array(0 => 70, 1 => 7), - array(0 => 70, 1 => 2), array(0 => 70, 1 => 6), array(0 => 70, 1 => 8), array(0 => 70, 1 => 6), - array(0 => 70, 1 => 8), array(0 => 70, 1 => 3), array(0 => 70, 1 => 4), array(0 => 70, 1 => 2), - array(0 => 65, 1 => 1), array(0 => 70, 1 => 2), array(0 => 70, 1 => 3), array(0 => 70, 1 => 4), - array(0 => 70, 1 => 5), array(0 => 72, 1 => 2), array(0 => 72, 1 => 1), array(0 => 72, 1 => 0), - array(0 => 82, 1 => 4), array(0 => 82, 1 => 2), array(0 => 82, 1 => 2), array(0 => 82, 1 => 2), - array(0 => 82, 1 => 2), array(0 => 82, 1 => 2), array(0 => 82, 1 => 4), array(0 => 78, 1 => 1), - array(0 => 78, 1 => 3), array(0 => 77, 1 => 3), array(0 => 77, 1 => 3), array(0 => 77, 1 => 3), - array(0 => 77, 1 => 3), array(0 => 74, 1 => 1), array(0 => 74, 1 => 1), array(0 => 74, 1 => 3), - array(0 => 74, 1 => 3), array(0 => 74, 1 => 3), array(0 => 74, 1 => 1), array(0 => 74, 1 => 2), - array(0 => 74, 1 => 3), array(0 => 74, 1 => 2), array(0 => 74, 1 => 3), array(0 => 74, 1 => 3), - array(0 => 74, 1 => 3), array(0 => 83, 1 => 7), array(0 => 83, 1 => 7), array(0 => 73, 1 => 1), - array(0 => 73, 1 => 2), array(0 => 73, 1 => 2), array(0 => 73, 1 => 2), array(0 => 73, 1 => 2), - array(0 => 73, 1 => 1), array(0 => 73, 1 => 1), array(0 => 73, 1 => 3), array(0 => 73, 1 => 2), - array(0 => 73, 1 => 2), array(0 => 73, 1 => 1), array(0 => 73, 1 => 1), array(0 => 73, 1 => 3), - array(0 => 73, 1 => 1), array(0 => 73, 1 => 1), array(0 => 73, 1 => 3), array(0 => 73, 1 => 1), - array(0 => 73, 1 => 2), array(0 => 73, 1 => 1), array(0 => 73, 1 => 3), array(0 => 87, 1 => 1), - array(0 => 87, 1 => 1), array(0 => 71, 1 => 1), array(0 => 71, 1 => 1), array(0 => 71, 1 => 3), - array(0 => 71, 1 => 1), array(0 => 71, 1 => 3), array(0 => 71, 1 => 4), array(0 => 71, 1 => 3), - array(0 => 71, 1 => 4), array(0 => 75, 1 => 2), array(0 => 75, 1 => 2), array(0 => 92, 1 => 2), - array(0 => 92, 1 => 0), array(0 => 93, 1 => 2), array(0 => 93, 1 => 2), array(0 => 93, 1 => 4), - array(0 => 93, 1 => 2), array(0 => 93, 1 => 2), array(0 => 93, 1 => 4), array(0 => 93, 1 => 3), - array(0 => 93, 1 => 5), array(0 => 93, 1 => 3), array(0 => 93, 1 => 3), array(0 => 93, 1 => 3), - array(0 => 93, 1 => 3), array(0 => 93, 1 => 3), array(0 => 93, 1 => 3), array(0 => 93, 1 => 2), - array(0 => 80, 1 => 1), array(0 => 80, 1 => 1), array(0 => 80, 1 => 2), array(0 => 94, 1 => 1), - array(0 => 94, 1 => 3), array(0 => 91, 1 => 2), array(0 => 95, 1 => 1), array(0 => 95, 1 => 2), - array(0 => 96, 1 => 3), array(0 => 96, 1 => 3), array(0 => 96, 1 => 5), array(0 => 96, 1 => 6), - array(0 => 96, 1 => 2), array(0 => 88, 1 => 4), array(0 => 97, 1 => 4), array(0 => 97, 1 => 4), - array(0 => 98, 1 => 3), array(0 => 98, 1 => 1), array(0 => 98, 1 => 0), array(0 => 76, 1 => 3), - array(0 => 76, 1 => 2), array(0 => 99, 1 => 3), array(0 => 99, 1 => 2), array(0 => 81, 1 => 2), - array(0 => 81, 1 => 0), array(0 => 100, 1 => 2), array(0 => 100, 1 => 2), array(0 => 90, 1 => 1), - array(0 => 90, 1 => 2), array(0 => 90, 1 => 1), array(0 => 90, 1 => 2), array(0 => 90, 1 => 3), - array(0 => 85, 1 => 1), array(0 => 85, 1 => 1), array(0 => 86, 1 => 1), array(0 => 84, 1 => 3), - array(0 => 101, 1 => 1), array(0 => 101, 1 => 3), array(0 => 101, 1 => 0), array(0 => 102, 1 => 3), - array(0 => 102, 1 => 3), array(0 => 102, 1 => 1), array(0 => 89, 1 => 2), array(0 => 89, 1 => 3), - array(0 => 103, 1 => 2), array(0 => 103, 1 => 1), array(0 => 104, 1 => 3), array(0 => 104, 1 => 3), - array(0 => 104, 1 => 1), array(0 => 104, 1 => 3), array(0 => 104, 1 => 3), array(0 => 104, 1 => 1), - array(0 => 104, 1 => 1),); - - public static $yyReduceMap = array(0 => 0, 1 => 1, 2 => 2, 4 => 4, 5 => 5, 6 => 6, 7 => 7, 8 => 8, 9 => 9, - 18 => 9, 19 => 9, 44 => 9, 67 => 9, 68 => 9, 76 => 9, 77 => 9, 81 => 9, 90 => 9, - 95 => 9, 96 => 9, 101 => 9, 103 => 9, 104 => 9, 108 => 9, 110 => 9, 111 => 9, - 115 => 9, 175 => 9, 180 => 9, 10 => 10, 11 => 11, 12 => 12, 13 => 13, 14 => 14, - 17 => 14, 15 => 15, 75 => 15, 16 => 16, 91 => 16, 93 => 16, 94 => 16, 122 => 16, - 20 => 20, 21 => 21, 22 => 22, 24 => 22, 26 => 22, 23 => 23, 25 => 23, 27 => 23, - 28 => 28, 29 => 28, 30 => 30, 31 => 31, 32 => 32, 33 => 33, 34 => 34, 35 => 35, - 36 => 36, 37 => 37, 38 => 38, 39 => 39, 41 => 39, 40 => 40, 42 => 42, 43 => 43, - 45 => 45, 46 => 46, 47 => 47, 48 => 48, 50 => 48, 49 => 49, 51 => 49, 52 => 52, - 53 => 53, 54 => 54, 55 => 55, 56 => 56, 57 => 57, 58 => 58, 59 => 59, 60 => 60, - 61 => 61, 70 => 61, 156 => 61, 160 => 61, 164 => 61, 165 => 61, 62 => 62, - 157 => 62, 163 => 62, 63 => 63, 64 => 64, 65 => 64, 66 => 66, 142 => 66, - 69 => 69, 71 => 71, 72 => 72, 73 => 72, 74 => 74, 78 => 78, 79 => 79, 80 => 79, - 82 => 82, 107 => 82, 83 => 83, 84 => 84, 85 => 85, 86 => 86, 87 => 87, 88 => 88, - 89 => 89, 92 => 92, 97 => 97, 98 => 98, 99 => 99, 100 => 100, 102 => 102, - 105 => 105, 106 => 106, 109 => 109, 112 => 112, 113 => 113, 114 => 114, - 116 => 116, 117 => 117, 118 => 118, 119 => 119, 120 => 120, 121 => 121, - 123 => 123, 177 => 123, 124 => 124, 125 => 125, 126 => 126, 127 => 127, - 128 => 128, 129 => 129, 137 => 129, 130 => 130, 131 => 131, 132 => 132, - 133 => 132, 135 => 132, 136 => 132, 134 => 134, 138 => 138, 139 => 139, - 140 => 140, 181 => 140, 141 => 141, 143 => 143, 144 => 144, 145 => 145, - 146 => 146, 147 => 147, 148 => 148, 149 => 149, 150 => 150, 151 => 151, - 152 => 152, 153 => 153, 154 => 154, 155 => 155, 158 => 158, 159 => 159, - 161 => 161, 162 => 162, 166 => 166, 167 => 167, 168 => 168, 169 => 169, - 170 => 170, 171 => 171, 172 => 172, 173 => 173, 174 => 174, 176 => 176, - 178 => 178, 179 => 179, 182 => 182, 183 => 183, 184 => 184, 185 => 185, - 186 => 185, 188 => 185, 187 => 187, 189 => 189, 190 => 190, 191 => 191,); - - #line 201 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r0() { - $this->_retvalue = $this->root_buffer->to_smarty_php(); - } - - #line 209 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r1() { - if ($this->yystack[$this->yyidx + 0]->minor != null) { - $this->current_buffer->append_subtree($this->yystack[$this->yyidx + 0]->minor); - } - } - - #line 216 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r2() { - if ($this->yystack[$this->yyidx + 0]->minor != null) { - // because of possible code injection - $this->current_buffer->append_subtree($this->yystack[$this->yyidx + 0]->minor); - } - } - - #line 230 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r4() { - if ($this->compiler->has_code) { - $this->_retvalue = $this->mergePrefixCode($this->yystack[$this->yyidx + 0]->minor); - } else { - $this->_retvalue = null; - } - $this->compiler->has_variable_string = false; - $this->block_nesting_level = count($this->compiler->_tag_stack); - } - - #line 241 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r5() { - $this->_retvalue = new Smarty_Internal_ParseTree_Text($this, $this->yystack[$this->yyidx + 0]->minor); - } - - #line 245 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r6() { - $code = $this->compiler->compileTag('private_php', array(array('code' => $this->yystack[$this->yyidx + 0]->minor), - array('type' => $this->lex->phpType)), array()); - if ($this->compiler->has_code && !empty($code)) { - $tmp = ''; - foreach ($this->compiler->prefix_code as $code) { - $tmp .= $code; - } - $this->compiler->prefix_code = array(); - $this->_retvalue = new Smarty_Internal_ParseTree_Tag($this, $this->compiler->processNocacheCode($tmp . $code, true)); - } else { - $this->_retvalue = null; - } - } - - #line 256 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r7() { - $this->compiler->tag_nocache = true; - $save = $this->template->has_nocache_code; - $this->_retvalue = new Smarty_Internal_ParseTree_Tag($this, $this->compiler->processNocacheCode("<?php echo '{$this->yystack[$this->yyidx + 0]->minor}';?>\n", $this->compiler, true)); - $this->template->has_nocache_code = $save; - } - - #line 263 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r8() { - $this->_retvalue = $this->compiler->processText($this->yystack[$this->yyidx + 0]->minor); - } - - #line 267 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r9() { - $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor; - } - - #line 271 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r10() { - $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor . $this->yystack[$this->yyidx + 0]->minor; - } - - #line 276 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r11() { - $this->strip = true; - } - - #line 280 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r12() { - $this->strip = false; - } - - #line 284 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r13() { - if ($this->strip) { - SMARTY_INTERNAL_COMPILE_BLOCK::blockSource($this->compiler, preg_replace('![\t ]*[\r\n]+[\t ]*!', '', $this->yystack[$this->yyidx + 0]->minor)); - } else { - SMARTY_INTERNAL_COMPILE_BLOCK::blockSource($this->compiler, $this->yystack[$this->yyidx + 0]->minor); - } - } - - #line 293 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r14() { - $this->_retvalue = ''; - } - - #line 297 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r15() { - $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor; - } - - #line 301 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r16() { - $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor . $this->yystack[$this->yyidx + 0]->minor; - } - - #line 317 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r20() { - $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor; - } - - #line 323 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r21() { - $var = trim(substr($this->yystack[$this->yyidx + 0]->minor, $this->lex->ldel_length, -$this->lex->rdel_length), ' $'); - if (preg_match('/^(.*)(\s+nocache)$/', $var, $match)) { - $this->_retvalue = $this->compiler->compileTag('private_print_expression', array('nocache'), array('value' => $this->compiler->compileVariable('\'' . $match[1] . '\''))); - } else { - $this->_retvalue = $this->compiler->compileTag('private_print_expression', array(), array('value' => $this->compiler->compileVariable('\'' . $var . '\''))); - } - } - - #line 333 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r22() { - $this->_retvalue = $this->compiler->compileTag('private_print_expression', array(), array('value' => $this->yystack[$this->yyidx + 0]->minor)); - } - - #line 337 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r23() { - $this->_retvalue = $this->compiler->compileTag('private_print_expression', $this->yystack[$this->yyidx + 0]->minor, array('value' => $this->yystack[$this->yyidx + -1]->minor)); - } - - #line 360 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r28() { - $this->_retvalue = $this->compiler->compileTag('assign', array(array('value' => $this->yystack[$this->yyidx + 0]->minor), - array('var' => '\'' . substr($this->yystack[$this->yyidx + -2]->minor, 1) . '\''))); - } - - #line 368 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r30() { - $this->_retvalue = $this->compiler->compileTag('assign', array_merge(array(array('value' => $this->yystack[$this->yyidx + -1]->minor), - array('var' => '\'' . substr($this->yystack[$this->yyidx + -3]->minor, 1) . '\'')), $this->yystack[$this->yyidx + 0]->minor)); - } - - #line 372 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r31() { - $this->_retvalue = $this->compiler->compileTag('assign', array_merge(array(array('value' => $this->yystack[$this->yyidx + -1]->minor), - array('var' => $this->yystack[$this->yyidx + -3]->minor['var'])), $this->yystack[$this->yyidx + 0]->minor), array('smarty_internal_index' => $this->yystack[$this->yyidx + -3]->minor['smarty_internal_index'])); - } - - #line 377 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r32() { - $tag = trim(substr($this->yystack[$this->yyidx + 0]->minor, $this->lex->ldel_length, -$this->lex->rdel_length)); - if ($tag == 'strip') { - $this->strip = true; - $this->_retvalue = null;; - } else { - if (defined($tag)) { - if ($this->security) { - $this->security->isTrustedConstant($tag, $this->compiler); - } - $this->_retvalue = $this->compiler->compileTag('private_print_expression', array(), array('value' => $tag)); - } else { - if (preg_match('/^(.*)(\s+nocache)$/', $tag, $match)) { - $this->_retvalue = $this->compiler->compileTag($match[1], array("'nocache'")); - } else { - $this->_retvalue = $this->compiler->compileTag($tag, array()); - } - } - } - } - - #line 399 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r33() { - if (defined($this->yystack[$this->yyidx + -1]->minor)) { - if ($this->security) { - $this->security->isTrustedConstant($this->yystack[$this->yyidx + -1]->minor, $this->compiler); - } - $this->_retvalue = $this->compiler->compileTag('private_print_expression', $this->yystack[$this->yyidx + 0]->minor, array('value' => $this->yystack[$this->yyidx + -1]->minor)); - } else { - $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -1]->minor, $this->yystack[$this->yyidx + 0]->minor); - } - } - - #line 409 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r34() { - if (defined($this->yystack[$this->yyidx + 0]->minor)) { - if ($this->security) { - $this->security->isTrustedConstant($this->yystack[$this->yyidx + 0]->minor, $this->compiler); - } - $this->_retvalue = $this->compiler->compileTag('private_print_expression', array(), array('value' => $this->yystack[$this->yyidx + 0]->minor)); - } else { - $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + 0]->minor, array()); - } - } - - #line 422 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r35() { - if (defined($this->yystack[$this->yyidx + -2]->minor)) { - if ($this->security) { - $this->security->isTrustedConstant($this->yystack[$this->yyidx + -2]->minor, $this->compiler); - } - $this->_retvalue = $this->compiler->compileTag('private_print_expression', $this->yystack[$this->yyidx + 0]->minor, array('value' => $this->yystack[$this->yyidx + -2]->minor, - 'modifierlist' => $this->yystack[$this->yyidx + -1]->minor)); - } else { - $this->_retvalue = '<?php ob_start();?>' . $this->compiler->compileTag($this->yystack[$this->yyidx + -2]->minor, $this->yystack[$this->yyidx + 0]->minor) . '<?php echo '; - $this->_retvalue .= $this->compiler->compileTag('private_modifier', array(), array('modifierlist' => $this->yystack[$this->yyidx + -1]->minor, - 'value' => 'ob_get_clean()')) . ';?>'; - } - } - - #line 435 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r36() { - $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -3]->minor, $this->yystack[$this->yyidx + 0]->minor, array('object_method' => $this->yystack[$this->yyidx + -1]->minor)); - } - - #line 440 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r37() { - $this->_retvalue = '<?php ob_start();?>' . $this->compiler->compileTag($this->yystack[$this->yyidx + -4]->minor, $this->yystack[$this->yyidx + 0]->minor, array('object_method' => $this->yystack[$this->yyidx + -2]->minor)) . '<?php echo '; - $this->_retvalue .= $this->compiler->compileTag('private_modifier', array(), array('modifierlist' => $this->yystack[$this->yyidx + -1]->minor, - 'value' => 'ob_get_clean()')) . ';?>'; - } - - #line 446 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r38() { - $tag = trim(substr($this->yystack[$this->yyidx + -1]->minor, $this->lex->ldel_length)); - $this->_retvalue = $this->compiler->compileTag(($tag == 'else if') ? 'elseif' : $tag, array(), array('if condition' => $this->yystack[$this->yyidx + 0]->minor)); - } - - #line 451 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r39() { - $tag = trim(substr($this->yystack[$this->yyidx + -2]->minor, $this->lex->ldel_length)); - $this->_retvalue = $this->compiler->compileTag(($tag == 'else if') ? 'elseif' : $tag, $this->yystack[$this->yyidx + 0]->minor, array('if condition' => $this->yystack[$this->yyidx + -1]->minor)); - } - - #line 456 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r40() { - $tag = trim(substr($this->yystack[$this->yyidx + -1]->minor, $this->lex->ldel_length)); - $this->_retvalue = $this->compiler->compileTag(($tag == 'else if') ? 'elseif' : $tag, array(), array('if condition' => $this->yystack[$this->yyidx + 0]->minor)); - } - - #line 467 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r42() { - $this->_retvalue = $this->compiler->compileTag('for', array_merge($this->yystack[$this->yyidx + 0]->minor, array(array('start' => $this->yystack[$this->yyidx + -6]->minor), - array('ifexp' => $this->yystack[$this->yyidx + -4]->minor), - array('var' => $this->yystack[$this->yyidx + -2]->minor), - array('step' => $this->yystack[$this->yyidx + -1]->minor))), 1); - } - - #line 471 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r43() { - $this->_retvalue = '=' . $this->yystack[$this->yyidx + 0]->minor; - } - - #line 479 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r45() { - $this->_retvalue = $this->compiler->compileTag('for', array_merge($this->yystack[$this->yyidx + 0]->minor, array(array('start' => $this->yystack[$this->yyidx + -3]->minor), - array('to' => $this->yystack[$this->yyidx + -1]->minor))), 0); - } - - #line 483 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r46() { - $this->_retvalue = $this->compiler->compileTag('for', array_merge($this->yystack[$this->yyidx + 0]->minor, array(array('start' => $this->yystack[$this->yyidx + -5]->minor), - array('to' => $this->yystack[$this->yyidx + -3]->minor), - array('step' => $this->yystack[$this->yyidx + -1]->minor))), 0); - } - - #line 488 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r47() { - $this->_retvalue = $this->compiler->compileTag('foreach', $this->yystack[$this->yyidx + 0]->minor); - } - - #line 493 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r48() { - $this->_retvalue = $this->compiler->compileTag('foreach', array_merge($this->yystack[$this->yyidx + 0]->minor, array(array('from' => $this->yystack[$this->yyidx + -3]->minor), - array('item' => $this->yystack[$this->yyidx + -1]->minor)))); - } - - #line 497 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r49() { - $this->_retvalue = $this->compiler->compileTag('foreach', array_merge($this->yystack[$this->yyidx + 0]->minor, array(array('from' => $this->yystack[$this->yyidx + -5]->minor), - array('item' => $this->yystack[$this->yyidx + -1]->minor), - array('key' => $this->yystack[$this->yyidx + -3]->minor)))); - } - - #line 510 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r52() { - $this->_retvalue = $this->compiler->compileTag('setfilter', array(), array('modifier_list' => array(array_merge(array($this->yystack[$this->yyidx + -1]->minor), $this->yystack[$this->yyidx + 0]->minor)))); - } - - #line 514 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r53() { - $this->_retvalue = $this->compiler->compileTag('setfilter', array(), array('modifier_list' => array_merge(array(array_merge(array($this->yystack[$this->yyidx + -2]->minor), $this->yystack[$this->yyidx + -1]->minor)), $this->yystack[$this->yyidx + 0]->minor))); - } - - #line 519 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r54() { - $j = strrpos($this->yystack[$this->yyidx + 0]->minor, '.'); - if ($this->yystack[$this->yyidx + 0]->minor[$j + 1] == 'c') { - // {$smarty.block.child} - $this->_retvalue = SMARTY_INTERNAL_COMPILE_BLOCK::compileChildBlock($this->compiler); - } else { - // {$smarty.block.parent} - $this->_retvalue = SMARTY_INTERNAL_COMPILE_BLOCK::compileParentBlock($this->compiler); - } - } - - #line 532 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r55() { - $tag = trim(substr($this->yystack[$this->yyidx + 0]->minor, $this->lex->ldel_length, -$this->lex->rdel_length), ' /'); - if ($tag == 'strip') { - $this->strip = false; - $this->_retvalue = null; - } else { - $this->_retvalue = $this->compiler->compileTag($tag . 'close', array()); - } - } - - #line 541 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r56() { - $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + 0]->minor . 'close', array()); - } - - #line 545 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r57() { - $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -1]->minor . 'close', array(), array('modifier_list' => $this->yystack[$this->yyidx + 0]->minor)); - } - - #line 550 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r58() { - $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -2]->minor . 'close', array(), array('object_method' => $this->yystack[$this->yyidx + 0]->minor)); - } - - #line 554 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r59() { - $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -3]->minor . 'close', array(), array('object_method' => $this->yystack[$this->yyidx + -1]->minor, - 'modifier_list' => $this->yystack[$this->yyidx + 0]->minor)); - } - - #line 562 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r60() { - $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor; - $this->_retvalue[] = $this->yystack[$this->yyidx + 0]->minor; - } - - #line 568 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r61() { - $this->_retvalue = array($this->yystack[$this->yyidx + 0]->minor); - } - - #line 573 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r62() { - $this->_retvalue = array(); - } - - #line 578 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r63() { - if (defined($this->yystack[$this->yyidx + 0]->minor)) { - if ($this->security) { - $this->security->isTrustedConstant($this->yystack[$this->yyidx + 0]->minor, $this->compiler); - } - $this->_retvalue = array($this->yystack[$this->yyidx + -2]->minor => $this->yystack[$this->yyidx + 0]->minor); - } else { - $this->_retvalue = array($this->yystack[$this->yyidx + -2]->minor => '\'' . $this->yystack[$this->yyidx + 0]->minor . '\''); - } - } - - #line 589 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r64() { - $this->_retvalue = array(trim($this->yystack[$this->yyidx + -1]->minor, " =\n\r\t") => $this->yystack[$this->yyidx + 0]->minor); - } - - #line 597 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r66() { - $this->_retvalue = '\'' . $this->yystack[$this->yyidx + 0]->minor . '\''; - } - - #line 609 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r69() { - $this->_retvalue = array($this->yystack[$this->yyidx + -2]->minor => $this->yystack[$this->yyidx + 0]->minor); - } - - #line 622 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r71() { - $this->yystack[$this->yyidx + -2]->minor[] = $this->yystack[$this->yyidx + 0]->minor; - $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor; - } - - #line 627 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r72() { - $this->_retvalue = array('var' => '\'' . substr($this->yystack[$this->yyidx + -2]->minor, 1) . '\'', - 'value' => $this->yystack[$this->yyidx + 0]->minor); - } - - #line 634 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r74() { - $this->_retvalue = array('var' => $this->yystack[$this->yyidx + -2]->minor, - 'value' => $this->yystack[$this->yyidx + 0]->minor); - } - - #line 658 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r78() { - $this->_retvalue = '$_smarty_tpl->getStreamVariable(\'' . substr($this->yystack[$this->yyidx + -2]->minor, 1) . '://' . $this->yystack[$this->yyidx + 0]->minor . '\')'; - } - - #line 663 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r79() { - $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor . trim($this->yystack[$this->yyidx + -1]->minor) . $this->yystack[$this->yyidx + 0]->minor; - } - - #line 677 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r82() { - $this->_retvalue = $this->compiler->compileTag('private_modifier', array(), array('value' => $this->yystack[$this->yyidx + -1]->minor, - 'modifierlist' => $this->yystack[$this->yyidx + 0]->minor)); - } - - #line 683 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r83() { - $this->_retvalue = (isset($this->yystack[$this->yyidx + -1]->minor['pre']) ? $this->yystack[$this->yyidx + -1]->minor['pre'] : '') . $this->yystack[$this->yyidx + -2]->minor . $this->yystack[$this->yyidx + -1]->minor['op'] . $this->yystack[$this->yyidx + 0]->minor . (isset($this->yystack[$this->yyidx + -1]->minor['pre']) ? ')' : ''); - } - - #line 686 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r84() { - $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor . $this->yystack[$this->yyidx + -1]->minor . ')'; - } - - #line 690 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r85() { - $this->_retvalue = 'in_array(' . $this->yystack[$this->yyidx + -2]->minor . ',' . $this->yystack[$this->yyidx + 0]->minor . ')'; - } - - #line 694 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r86() { - $this->_retvalue = 'in_array(' . $this->yystack[$this->yyidx + -2]->minor . ',(array)' . $this->yystack[$this->yyidx + 0]->minor . ')'; - } - - #line 698 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r87() { - $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor . $this->yystack[$this->yyidx + -1]->minor . $this->yystack[$this->yyidx + 0]->minor; - } - - #line 706 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r88() { - $this->_retvalue = $this->yystack[$this->yyidx + -5]->minor . ' ? ' . $this->compiler->compileVariable('\'' . substr($this->yystack[$this->yyidx + -2]->minor, 1) . '\'') . ' : ' . $this->yystack[$this->yyidx + 0]->minor; - } - - #line 710 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r89() { - $this->_retvalue = $this->yystack[$this->yyidx + -5]->minor . ' ? ' . $this->yystack[$this->yyidx + -2]->minor . ' : ' . $this->yystack[$this->yyidx + 0]->minor; - } - - #line 725 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r92() { - $this->_retvalue = '!' . $this->yystack[$this->yyidx + 0]->minor; - } - - #line 746 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r97() { - $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor . '.' . $this->yystack[$this->yyidx + 0]->minor; - } - - #line 750 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r98() { - $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor . '.'; - } - - #line 754 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r99() { - $this->_retvalue = '.' . $this->yystack[$this->yyidx + 0]->minor; - } - - #line 759 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r100() { - if (defined($this->yystack[$this->yyidx + 0]->minor)) { - if ($this->security) { - $this->security->isTrustedConstant($this->yystack[$this->yyidx + 0]->minor, $this->compiler); - } - $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor; - } else { - $this->_retvalue = '\'' . $this->yystack[$this->yyidx + 0]->minor . '\''; - } - } - - #line 776 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r102() { - $this->_retvalue = "(" . $this->yystack[$this->yyidx + -1]->minor . ")"; - } - - #line 791 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r105() { - self::$prefix_number++; - if ($this->yystack[$this->yyidx + -2]->minor['var'] == '\'smarty\'') { - $this->compiler->prefix_code[] = '<?php $_tmp' . self::$prefix_number . ' = ' . $this->compiler->compileTag('private_special_variable', array(), $this->yystack[$this->yyidx + -2]->minor['smarty_internal_index']) . ';?>'; - } else { - $this->compiler->prefix_code[] = '<?php $_tmp' . self::$prefix_number . ' = ' . $this->compiler->compileVariable($this->yystack[$this->yyidx + -2]->minor['var']) . $this->yystack[$this->yyidx + -2]->minor['smarty_internal_index'] . ';?>'; - } - $this->_retvalue = '$_tmp' . self::$prefix_number . '::' . $this->yystack[$this->yyidx + 0]->minor[0] . $this->yystack[$this->yyidx + 0]->minor[1]; - } - - #line 802 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r106() { - self::$prefix_number++; - $tmp = $this->compiler->appendCode('<?php ob_start();?>', $this->yystack[$this->yyidx + 0]->minor); - $this->compiler->prefix_code[] = $this->compiler->appendCode($tmp, '<?php $_tmp' . self::$prefix_number . '=ob_get_clean();?>'); - $this->_retvalue = '$_tmp' . self::$prefix_number; - } - - #line 819 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r109() { - if (!in_array(strtolower($this->yystack[$this->yyidx + -2]->minor), array('self', - 'parent')) && (!$this->security || $this->security->isTrustedStaticClassAccess($this->yystack[$this->yyidx + -2]->minor, $this->yystack[$this->yyidx + 0]->minor, $this->compiler)) - ) { - if (isset($this->smarty->registered_classes[$this->yystack[$this->yyidx + -2]->minor])) { - $this->_retvalue = $this->smarty->registered_classes[$this->yystack[$this->yyidx + -2]->minor] . '::' . $this->yystack[$this->yyidx + 0]->minor[0] . $this->yystack[$this->yyidx + 0]->minor[1]; - } else { - $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor . '::' . $this->yystack[$this->yyidx + 0]->minor[0] . $this->yystack[$this->yyidx + 0]->minor[1]; - } - } else { - $this->compiler->trigger_template_error("static class '" . $this->yystack[$this->yyidx + -2]->minor . "' is undefined or not allowed by security setting"); - } - } - - #line 853 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r112() { - $this->_retvalue = $this->compiler->compileVariable('\'' . substr($this->yystack[$this->yyidx + 0]->minor, 1) . '\''); - } - - #line 856 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r113() { - if ($this->yystack[$this->yyidx + 0]->minor['var'] == '\'smarty\'') { - $smarty_var = $this->compiler->compileTag('private_special_variable', array(), $this->yystack[$this->yyidx + 0]->minor['smarty_internal_index']); - $this->_retvalue = $smarty_var; - } else { - // used for array reset,next,prev,end,current - $this->last_variable = $this->yystack[$this->yyidx + 0]->minor['var']; - $this->last_index = $this->yystack[$this->yyidx + 0]->minor['smarty_internal_index']; - $this->_retvalue = $this->compiler->compileVariable($this->yystack[$this->yyidx + 0]->minor['var']) . $this->yystack[$this->yyidx + 0]->minor['smarty_internal_index']; - } - } - - #line 869 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r114() { - $this->_retvalue = '$_smarty_tpl->tpl_vars[' . $this->yystack[$this->yyidx + -2]->minor . ']->' . $this->yystack[$this->yyidx + 0]->minor; - } - - #line 879 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r116() { - $this->_retvalue = '$_smarty_tpl->getConfigVariable( \'' . $this->yystack[$this->yyidx + -1]->minor . '\')'; - } - - #line 883 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r117() { - $this->_retvalue = '(is_array($tmp = $_smarty_tpl->getConfigVariable( \'' . $this->yystack[$this->yyidx + -2]->minor . '\')) ? $tmp' . $this->yystack[$this->yyidx + 0]->minor . ' :null)'; - } - - #line 887 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r118() { - $this->_retvalue = '$_smarty_tpl->getConfigVariable( ' . $this->yystack[$this->yyidx + -1]->minor . ')'; - } - - #line 891 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r119() { - $this->_retvalue = '(is_array($tmp = $_smarty_tpl->getConfigVariable( ' . $this->yystack[$this->yyidx + -2]->minor . ')) ? $tmp' . $this->yystack[$this->yyidx + 0]->minor . ' : null)'; - } - - #line 895 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r120() { - $this->_retvalue = array('var' => '\'' . substr($this->yystack[$this->yyidx + -1]->minor, 1) . '\'', - 'smarty_internal_index' => $this->yystack[$this->yyidx + 0]->minor); - } - - #line 898 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r121() { - $this->_retvalue = array('var' => $this->yystack[$this->yyidx + -1]->minor, - 'smarty_internal_index' => $this->yystack[$this->yyidx + 0]->minor); - } - - #line 911 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r123() { - return; - } - - #line 917 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r124() { - $this->_retvalue = '[' . $this->compiler->compileVariable('\'' . substr($this->yystack[$this->yyidx + 0]->minor, 1) . '\'') . ']'; - } - - #line 920 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r125() { - $this->_retvalue = '[' . $this->compiler->compileVariable($this->yystack[$this->yyidx + 0]->minor) . ']'; - } - - #line 924 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r126() { - $this->_retvalue = '[' . $this->compiler->compileVariable($this->yystack[$this->yyidx + -2]->minor) . '->' . $this->yystack[$this->yyidx + 0]->minor . ']'; - } - - #line 928 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r127() { - if (defined($this->yystack[$this->yyidx + 0]->minor)) { - if ($this->security) { - $this->security->isTrustedConstant($this->yystack[$this->yyidx + 0]->minor, $this->compiler); - } - $this->_retvalue = '[' . $this->yystack[$this->yyidx + 0]->minor . ']'; - } else { - $this->_retvalue = "['" . $this->yystack[$this->yyidx + 0]->minor . "']"; - } - } - - #line 939 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r128() { - $this->_retvalue = '[' . $this->yystack[$this->yyidx + 0]->minor . ']'; - } - - #line 943 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r129() { - $this->_retvalue = '[' . $this->yystack[$this->yyidx + -1]->minor . ']'; - } - - #line 948 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r130() { - $this->_retvalue = '[' . $this->compiler->compileTag('private_special_variable', array(), '[\'section\'][\'' . $this->yystack[$this->yyidx + -1]->minor . '\'][\'index\']') . ']'; - } - - #line 952 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r131() { - $this->_retvalue = '[' . $this->compiler->compileTag('private_special_variable', array(), '[\'section\'][\'' . $this->yystack[$this->yyidx + -3]->minor . '\'][\'' . $this->yystack[$this->yyidx + -1]->minor . '\']') . ']'; - } - - #line 955 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r132() { - $this->_retvalue = '[' . $this->yystack[$this->yyidx + -1]->minor . ']'; - } - - #line 961 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r134() { - $this->_retvalue = '[' . $this->compiler->compileVariable('\'' . substr($this->yystack[$this->yyidx + -1]->minor, 1) . '\'') . ']';; - } - - #line 977 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r138() { - $this->_retvalue = '[]'; - } - - #line 987 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r139() { - $this->_retvalue = '\'' . substr($this->yystack[$this->yyidx + 0]->minor, 1) . '\''; - } - - #line 991 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r140() { - $this->_retvalue = "''"; - } - - #line 996 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r141() { - $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor . '.' . $this->yystack[$this->yyidx + 0]->minor; - } - - #line 1006 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r143() { - $this->_retvalue = '(' . $this->yystack[$this->yyidx + -1]->minor . ')'; - } - - #line 1013 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r144() { - if ($this->yystack[$this->yyidx + -1]->minor['var'] == '\'smarty\'') { - $this->_retvalue = $this->compiler->compileTag('private_special_variable', array(), $this->yystack[$this->yyidx + -1]->minor['smarty_internal_index']) . $this->yystack[$this->yyidx + 0]->minor; - } else { - $this->_retvalue = $this->compiler->compileVariable($this->yystack[$this->yyidx + -1]->minor['var']) . $this->yystack[$this->yyidx + -1]->minor['smarty_internal_index'] . $this->yystack[$this->yyidx + 0]->minor; - } - } - - #line 1022 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r145() { - $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor; - } - - #line 1027 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r146() { - $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor . $this->yystack[$this->yyidx + 0]->minor; - } - - #line 1032 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r147() { - if ($this->security && substr($this->yystack[$this->yyidx + -1]->minor, 0, 1) == '_') { - $this->compiler->trigger_template_error(self::Err1); - } - $this->_retvalue = '->' . $this->yystack[$this->yyidx + -1]->minor . $this->yystack[$this->yyidx + 0]->minor; - } - - #line 1039 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r148() { - if ($this->security) { - $this->compiler->trigger_template_error(self::Err2); - } - $this->_retvalue = '->{' . $this->compiler->compileVariable($this->yystack[$this->yyidx + -1]->minor) . $this->yystack[$this->yyidx + 0]->minor . '}'; - } - - #line 1046 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r149() { - if ($this->security) { - $this->compiler->trigger_template_error(self::Err2); - } - $this->_retvalue = '->{' . $this->yystack[$this->yyidx + -2]->minor . $this->yystack[$this->yyidx + 0]->minor . '}'; - } - - #line 1053 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r150() { - if ($this->security) { - $this->compiler->trigger_template_error(self::Err2); - } - $this->_retvalue = '->{\'' . $this->yystack[$this->yyidx + -4]->minor . '\'.' . $this->yystack[$this->yyidx + -2]->minor . $this->yystack[$this->yyidx + 0]->minor . '}'; - } - - #line 1061 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r151() { - $this->_retvalue = '->' . $this->yystack[$this->yyidx + 0]->minor; - } - - #line 1069 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r152() { - if (!$this->security || $this->security->isTrustedPhpFunction($this->yystack[$this->yyidx + -3]->minor, $this->compiler)) { - if (strcasecmp($this->yystack[$this->yyidx + -3]->minor, 'isset') === 0 || strcasecmp($this->yystack[$this->yyidx + -3]->minor, 'empty') === 0 || strcasecmp($this->yystack[$this->yyidx + -3]->minor, 'array') === 0 || is_callable($this->yystack[$this->yyidx + -3]->minor)) { - $func_name = strtolower($this->yystack[$this->yyidx + -3]->minor); - if ($func_name == 'isset') { - if (count($this->yystack[$this->yyidx + -1]->minor) == 0) { - $this->compiler->trigger_template_error('Illegal number of paramer in "isset()"'); - } - $par = implode(',', $this->yystack[$this->yyidx + -1]->minor); - if (strncasecmp($par, '$_smarty_tpl->getConfigVariable', strlen('$_smarty_tpl->getConfigVariable')) === 0) { - self::$prefix_number++; - $this->compiler->prefix_code[] = '<?php $_tmp' . self::$prefix_number . '=' . str_replace(')', ', false)', $par) . ';?>'; - $isset_par = '$_tmp' . self::$prefix_number; - } else { - $isset_par = str_replace("')->value", "',null,true,false)->value", $par); - } - $this->_retvalue = $this->yystack[$this->yyidx + -3]->minor . "(" . $isset_par . ")"; - } elseif (in_array($func_name, array('empty', 'reset', 'current', 'end', 'prev', 'next'))) { - if (count($this->yystack[$this->yyidx + -1]->minor) != 1) { - $this->compiler->trigger_template_error('Illegal number of paramer in "empty()"'); - } - if ($func_name == 'empty') { - $this->_retvalue = $func_name . '(' . str_replace("')->value", "',null,true,false)->value", $this->yystack[$this->yyidx + -1]->minor[0]) . ')'; - } else { - $this->_retvalue = $func_name . '(' . $this->yystack[$this->yyidx + -1]->minor[0] . ')'; - } - } else { - $this->_retvalue = $this->yystack[$this->yyidx + -3]->minor . "(" . implode(',', $this->yystack[$this->yyidx + -1]->minor) . ")"; - } - } else { - $this->compiler->trigger_template_error("unknown function \"" . $this->yystack[$this->yyidx + -3]->minor . "\""); - } - } - } - - #line 1108 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r153() { - if ($this->security && substr($this->yystack[$this->yyidx + -3]->minor, 0, 1) == '_') { - $this->compiler->trigger_template_error(self::Err1); - } - $this->_retvalue = $this->yystack[$this->yyidx + -3]->minor . "(" . implode(',', $this->yystack[$this->yyidx + -1]->minor) . ")"; - } - - #line 1115 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r154() { - if ($this->security) { - $this->compiler->trigger_template_error(self::Err2); - } - self::$prefix_number++; - $this->compiler->prefix_code[] = '<?php $_tmp' . self::$prefix_number . '=' . $this->compiler->compileVariable('\'' . substr($this->yystack[$this->yyidx + -3]->minor, 1) . '\'') . ';?>'; - $this->_retvalue = '$_tmp' . self::$prefix_number . '(' . implode(',', $this->yystack[$this->yyidx + -1]->minor) . ')'; - } - - #line 1126 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r155() { - $this->_retvalue = array_merge($this->yystack[$this->yyidx + -2]->minor, array($this->yystack[$this->yyidx + 0]->minor)); - } - - #line 1143 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r158() { - $this->_retvalue = array_merge($this->yystack[$this->yyidx + -2]->minor, array(array_merge($this->yystack[$this->yyidx + -1]->minor, $this->yystack[$this->yyidx + 0]->minor))); - } - - #line 1147 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r159() { - $this->_retvalue = array(array_merge($this->yystack[$this->yyidx + -1]->minor, $this->yystack[$this->yyidx + 0]->minor)); - } - - #line 1155 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r161() { - $this->_retvalue = array($this->yystack[$this->yyidx + 0]->minor); - } - - #line 1163 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r162() { - $this->_retvalue = array_merge($this->yystack[$this->yyidx + -1]->minor, $this->yystack[$this->yyidx + 0]->minor); - } - - #line 1182 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r166() { - $this->_retvalue = array($this->yystack[$this->yyidx + 0]->minor, '', 'method'); - } - - #line 1187 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r167() { - $this->_retvalue = array($this->yystack[$this->yyidx + -1]->minor, $this->yystack[$this->yyidx + 0]->minor, - 'method'); - } - - #line 1192 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r168() { - $this->_retvalue = array($this->yystack[$this->yyidx + 0]->minor, ''); - } - - #line 1197 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r169() { - $this->_retvalue = array($this->yystack[$this->yyidx + -1]->minor, $this->yystack[$this->yyidx + 0]->minor, - 'property'); - } - - #line 1202 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r170() { - $this->_retvalue = array($this->yystack[$this->yyidx + -2]->minor, - $this->yystack[$this->yyidx + -1]->minor . $this->yystack[$this->yyidx + 0]->minor, 'property'); - } - - #line 1208 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r171() { - $this->_retvalue['op'] = ' ' . trim($this->yystack[$this->yyidx + 0]->minor) . ' '; - } - - #line 1212 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r172() { - static $lops = array('eq' => array('op' => ' == ', 'pre' => null), - 'ne' => array('op' => ' != ', 'pre' => null), - 'neq' => array('op' => ' != ', 'pre' => null), - 'gt' => array('op' => ' > ', 'pre' => null), - 'ge' => array('op' => ' >= ', 'pre' => null), - 'gte' => array('op' => ' >= ', 'pre' => null), - 'lt' => array('op' => ' < ', 'pre' => null), - 'le' => array('op' => ' <= ', 'pre' => null), - 'lte' => array('op' => ' <= ', 'pre' => null), - 'mod' => array('op' => ' % ', 'pre' => null), - 'and' => array('op' => ' && ', 'pre' => null), - 'or' => array('op' => ' || ', 'pre' => null), - 'xor' => array('op' => ' xor ', 'pre' => null), - 'isdivby' => array('op' => ' % ', 'pre' => '!('), - 'isnotdivby' => array('op' => ' % ', 'pre' => '('), - 'isevenby' => array('op' => ' / ', 'pre' => '!(1 & '), - 'isnotevenby' => array('op' => ' / ', 'pre' => '(1 & '), - 'isoddby' => array('op' => ' / ', 'pre' => '(1 & '), - 'isnotoddby' => array('op' => ' / ', 'pre' => '!(1 & '),); - $op = strtolower(preg_replace('/\s*/', '', $this->yystack[$this->yyidx + 0]->minor)); - $this->_retvalue = $lops[$op]; - } - - #line 1238 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r173() { - static $scond = array('iseven' => '!(1 & ', 'isnoteven' => '(1 & ', 'isodd' => '(1 & ', - 'isnotodd' => '!(1 & ',); - $op = strtolower(str_replace(' ', '', $this->yystack[$this->yyidx + 0]->minor)); - $this->_retvalue = $scond[$op]; - } - - #line 1252 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r174() { - $this->_retvalue = 'array(' . $this->yystack[$this->yyidx + -1]->minor . ')'; - } - - #line 1260 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r176() { - $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor . ',' . $this->yystack[$this->yyidx + 0]->minor; - } - - #line 1268 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r178() { - $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor . '=>' . $this->yystack[$this->yyidx + 0]->minor; - } - - #line 1272 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r179() { - $this->_retvalue = '\'' . $this->yystack[$this->yyidx + -2]->minor . '\'=>' . $this->yystack[$this->yyidx + 0]->minor; - } - - #line 1288 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r182() { - $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor->to_smarty_php(); - } - - #line 1293 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r183() { - $this->yystack[$this->yyidx + -1]->minor->append_subtree($this->yystack[$this->yyidx + 0]->minor); - $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor; - } - - #line 1298 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r184() { - $this->_retvalue = new Smarty_Internal_ParseTree_Dq($this, $this->yystack[$this->yyidx + 0]->minor); - } - - #line 1302 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r185() { - $this->_retvalue = new Smarty_Internal_ParseTree_Code($this, '(string)' . $this->yystack[$this->yyidx + -1]->minor); - } - - #line 1310 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r187() { - $this->_retvalue = new Smarty_Internal_ParseTree_Code($this, '(string)$_smarty_tpl->tpl_vars[\'' . substr($this->yystack[$this->yyidx + 0]->minor, 1) . '\']->value'); - } - - #line 1318 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r189() { - $this->_retvalue = new Smarty_Internal_ParseTree_Code($this, '(string)(' . $this->yystack[$this->yyidx + -1]->minor . ')'); - } - - #line 1322 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r190() { - $this->_retvalue = new Smarty_Internal_ParseTree_Tag($this, $this->yystack[$this->yyidx + 0]->minor); - } - - #line 1326 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r191() { - $this->_retvalue = new Smarty_Internal_ParseTree_DqContent($this, $this->yystack[$this->yyidx + 0]->minor); - } - - private $_retvalue; - - public function yy_reduce($yyruleno) { - if ($this->yyTraceFILE && $yyruleno >= 0 && $yyruleno < count(self::$yyRuleName)) { - fprintf($this->yyTraceFILE, "%sReduce (%d) [%s].\n", $this->yyTracePrompt, $yyruleno, self::$yyRuleName[$yyruleno]); - } - - $this->_retvalue = $yy_lefthand_side = null; - if (isset(self::$yyReduceMap[$yyruleno])) { - // call the action - $this->_retvalue = null; - $this->{'yy_r' . self::$yyReduceMap[$yyruleno]}(); - $yy_lefthand_side = $this->_retvalue; - } - $yygoto = self::$yyRuleInfo[$yyruleno][0]; - $yysize = self::$yyRuleInfo[$yyruleno][1]; - $this->yyidx -= $yysize; - for ($i = $yysize; $i; $i--) { - // pop all of the right-hand side parameters - array_pop($this->yystack); - } - $yyact = $this->yy_find_reduce_action($this->yystack[$this->yyidx]->stateno, $yygoto); - if ($yyact < self::YYNSTATE) { - if (!$this->yyTraceFILE && $yysize) { - $this->yyidx++; - $x = new TP_yyStackEntry; - $x->stateno = $yyact; - $x->major = $yygoto; - $x->minor = $yy_lefthand_side; - $this->yystack[$this->yyidx] = $x; - } else { - $this->yy_shift($yyact, $yygoto, $yy_lefthand_side); - } - } elseif ($yyact == self::YYNSTATE + self::YYNRULE + 1) { - $this->yy_accept(); - } - } - - public function yy_parse_failed() { - if ($this->yyTraceFILE) { - fprintf($this->yyTraceFILE, "%sFail!\n", $this->yyTracePrompt); - } - while ($this->yyidx >= 0) { - $this->yy_pop_parser_stack(); - } - } - - public function yy_syntax_error($yymajor, $TOKEN) { - #line 183 "../smarty/lexer/smarty_internal_templateparser.y" - - $this->internalError = true; - $this->yymajor = $yymajor; - $this->compiler->trigger_template_error(); - } - - public function yy_accept() { - if ($this->yyTraceFILE) { - fprintf($this->yyTraceFILE, "%sAccept!\n", $this->yyTracePrompt); - } - while ($this->yyidx >= 0) { - $this->yy_pop_parser_stack(); - } - #line 176 "../smarty/lexer/smarty_internal_templateparser.y" - - $this->successful = !$this->internalError; - $this->internalError = false; - $this->retvalue = $this->_retvalue; - } - - public function doParse($yymajor, $yytokenvalue) { - $yyerrorhit = 0; /* True if yymajor has invoked an error */ - - if ($this->yyidx === null || $this->yyidx < 0) { - $this->yyidx = 0; - $this->yyerrcnt = -1; - $x = new TP_yyStackEntry; - $x->stateno = 0; - $x->major = 0; - $this->yystack = array(); - $this->yystack[] = $x; - } - $yyendofinput = ($yymajor == 0); - - if ($this->yyTraceFILE) { - fprintf($this->yyTraceFILE, "%sInput %s\n", $this->yyTracePrompt, $this->yyTokenName[$yymajor]); - } - - do { - $yyact = $this->yy_find_shift_action($yymajor); - if ($yymajor < self::YYERRORSYMBOL && !$this->yy_is_expected_token($yymajor)) { - // force a syntax error - $yyact = self::YY_ERROR_ACTION; - } - if ($yyact < self::YYNSTATE) { - $this->yy_shift($yyact, $yymajor, $yytokenvalue); - $this->yyerrcnt--; - if ($yyendofinput && $this->yyidx >= 0) { - $yymajor = 0; - } else { - $yymajor = self::YYNOCODE; - } - } elseif ($yyact < self::YYNSTATE + self::YYNRULE) { - $this->yy_reduce($yyact - self::YYNSTATE); - } elseif ($yyact == self::YY_ERROR_ACTION) { - if ($this->yyTraceFILE) { - fprintf($this->yyTraceFILE, "%sSyntax Error!\n", $this->yyTracePrompt); - } - if (self::YYERRORSYMBOL) { - if ($this->yyerrcnt < 0) { - $this->yy_syntax_error($yymajor, $yytokenvalue); - } - $yymx = $this->yystack[$this->yyidx]->major; - if ($yymx == self::YYERRORSYMBOL || $yyerrorhit) { - if ($this->yyTraceFILE) { - fprintf($this->yyTraceFILE, "%sDiscard input token %s\n", $this->yyTracePrompt, $this->yyTokenName[$yymajor]); - } - $this->yy_destructor($yymajor, $yytokenvalue); - $yymajor = self::YYNOCODE; - } else { - while ($this->yyidx >= 0 && $yymx != self::YYERRORSYMBOL && ($yyact = $this->yy_find_shift_action(self::YYERRORSYMBOL)) >= self::YYNSTATE) { - $this->yy_pop_parser_stack(); - } - if ($this->yyidx < 0 || $yymajor == 0) { - $this->yy_destructor($yymajor, $yytokenvalue); - $this->yy_parse_failed(); - $yymajor = self::YYNOCODE; - } elseif ($yymx != self::YYERRORSYMBOL) { - $u2 = 0; - $this->yy_shift($yyact, self::YYERRORSYMBOL, $u2); - } - } - $this->yyerrcnt = 3; - $yyerrorhit = 1; - } else { - if ($this->yyerrcnt <= 0) { - $this->yy_syntax_error($yymajor, $yytokenvalue); - } - $this->yyerrcnt = 3; - $this->yy_destructor($yymajor, $yytokenvalue); - if ($yyendofinput) { - $this->yy_parse_failed(); - } - $yymajor = self::YYNOCODE; - } - } else { - $this->yy_accept(); - $yymajor = self::YYNOCODE; - } - } while ($yymajor != self::YYNOCODE && $this->yyidx >= 0); - } -} - diff --git a/library/smarty/libs/sysplugins/smarty_internal_testinstall.php b/library/smarty/libs/sysplugins/smarty_internal_testinstall.php deleted file mode 100644 --- a/library/smarty/libs/sysplugins/smarty_internal_testinstall.php +++ /dev/null @@ -1,570 +0,0 @@ -<?php -/** - * Smarty Internal TestInstall - * Test Smarty installation - * - * @package Smarty - * @subpackage Utilities - * @author Uwe Tews - */ - -/** - * TestInstall class - * - * @package Smarty - * @subpackage Utilities - */ -class Smarty_Internal_TestInstall { - /** - * diagnose Smarty setup - * If $errors is secified, the diagnostic report will be appended to the array, rather than being output. - * - * @param Smarty $smarty Smarty instance to test - * @param array $errors array to push results into rather than outputting them - * - * @return bool status, true if everything is fine, false else - */ - public static function testInstall(Smarty $smarty, &$errors = null) { - $status = true; - - if ($errors === null) { - echo "<PRE>\n"; - echo "Smarty Installation test...\n"; - echo "Testing template directory...\n"; - } - - $_stream_resolve_include_path = function_exists('stream_resolve_include_path'); - - // test if all registered template_dir are accessible - foreach ($smarty->getTemplateDir() as $template_dir) { - $_template_dir = $template_dir; - $template_dir = realpath($template_dir); - // resolve include_path or fail existence - if (!$template_dir) { - if ($smarty->use_include_path && !preg_match('/^([\/\\\\]|[a-zA-Z]:[\/\\\\])/', $_template_dir)) { - // try PHP include_path - if ($_stream_resolve_include_path) { - $template_dir = stream_resolve_include_path($_template_dir); - } else { - $template_dir = Smarty_Internal_Get_Include_Path::getIncludePath($_template_dir); - } - - if ($template_dir !== false) { - if ($errors === null) { - echo "$template_dir is OK.\n"; - } - - continue; - } else { - $status = false; - $message = "FAILED: $_template_dir does not exist (and couldn't be found in include_path either)"; - if ($errors === null) { - echo $message . ".\n"; - } else { - $errors['template_dir'] = $message; - } - - continue; - } - } else { - $status = false; - $message = "FAILED: $_template_dir does not exist"; - if ($errors === null) { - echo $message . ".\n"; - } else { - $errors['template_dir'] = $message; - } - - continue; - } - } - - if (!is_dir($template_dir)) { - $status = false; - $message = "FAILED: $template_dir is not a directory"; - if ($errors === null) { - echo $message . ".\n"; - } else { - $errors['template_dir'] = $message; - } - } elseif (!is_readable($template_dir)) { - $status = false; - $message = "FAILED: $template_dir is not readable"; - if ($errors === null) { - echo $message . ".\n"; - } else { - $errors['template_dir'] = $message; - } - } else { - if ($errors === null) { - echo "$template_dir is OK.\n"; - } - } - } - - if ($errors === null) { - echo "Testing compile directory...\n"; - } - - // test if registered compile_dir is accessible - $__compile_dir = $smarty->getCompileDir(); - $_compile_dir = realpath($__compile_dir); - if (!$_compile_dir) { - $status = false; - $message = "FAILED: {$__compile_dir} does not exist"; - if ($errors === null) { - echo $message . ".\n"; - } else { - $errors['compile_dir'] = $message; - } - } elseif (!is_dir($_compile_dir)) { - $status = false; - $message = "FAILED: {$_compile_dir} is not a directory"; - if ($errors === null) { - echo $message . ".\n"; - } else { - $errors['compile_dir'] = $message; - } - } elseif (!is_readable($_compile_dir)) { - $status = false; - $message = "FAILED: {$_compile_dir} is not readable"; - if ($errors === null) { - echo $message . ".\n"; - } else { - $errors['compile_dir'] = $message; - } - } elseif (!is_writable($_compile_dir)) { - $status = false; - $message = "FAILED: {$_compile_dir} is not writable"; - if ($errors === null) { - echo $message . ".\n"; - } else { - $errors['compile_dir'] = $message; - } - } else { - if ($errors === null) { - echo "{$_compile_dir} is OK.\n"; - } - } - - if ($errors === null) { - echo "Testing plugins directory...\n"; - } - - // test if all registered plugins_dir are accessible - // and if core plugins directory is still registered - $_core_plugins_dir = realpath(dirname(__FILE__) . '/../plugins'); - $_core_plugins_available = false; - foreach ($smarty->getPluginsDir() as $plugin_dir) { - $_plugin_dir = $plugin_dir; - $plugin_dir = realpath($plugin_dir); - // resolve include_path or fail existence - if (!$plugin_dir) { - if ($smarty->use_include_path && !preg_match('/^([\/\\\\]|[a-zA-Z]:[\/\\\\])/', $_plugin_dir)) { - // try PHP include_path - if ($_stream_resolve_include_path) { - $plugin_dir = stream_resolve_include_path($_plugin_dir); - } else { - $plugin_dir = Smarty_Internal_Get_Include_Path::getIncludePath($_plugin_dir); - } - - if ($plugin_dir !== false) { - if ($errors === null) { - echo "$plugin_dir is OK.\n"; - } - - continue; - } else { - $status = false; - $message = "FAILED: $_plugin_dir does not exist (and couldn't be found in include_path either)"; - if ($errors === null) { - echo $message . ".\n"; - } else { - $errors['plugins_dir'] = $message; - } - - continue; - } - } else { - $status = false; - $message = "FAILED: $_plugin_dir does not exist"; - if ($errors === null) { - echo $message . ".\n"; - } else { - $errors['plugins_dir'] = $message; - } - - continue; - } - } - - if (!is_dir($plugin_dir)) { - $status = false; - $message = "FAILED: $plugin_dir is not a directory"; - if ($errors === null) { - echo $message . ".\n"; - } else { - $errors['plugins_dir'] = $message; - } - } elseif (!is_readable($plugin_dir)) { - $status = false; - $message = "FAILED: $plugin_dir is not readable"; - if ($errors === null) { - echo $message . ".\n"; - } else { - $errors['plugins_dir'] = $message; - } - } elseif ($_core_plugins_dir && $_core_plugins_dir == realpath($plugin_dir)) { - $_core_plugins_available = true; - if ($errors === null) { - echo "$plugin_dir is OK.\n"; - } - } else { - if ($errors === null) { - echo "$plugin_dir is OK.\n"; - } - } - } - if (!$_core_plugins_available) { - $status = false; - $message = "WARNING: Smarty's own libs/plugins is not available"; - if ($errors === null) { - echo $message . ".\n"; - } elseif (!isset($errors['plugins_dir'])) { - $errors['plugins_dir'] = $message; - } - } - - if ($errors === null) { - echo "Testing cache directory...\n"; - } - - // test if all registered cache_dir is accessible - $__cache_dir = $smarty->getCacheDir(); - $_cache_dir = realpath($__cache_dir); - if (!$_cache_dir) { - $status = false; - $message = "FAILED: {$__cache_dir} does not exist"; - if ($errors === null) { - echo $message . ".\n"; - } else { - $errors['cache_dir'] = $message; - } - } elseif (!is_dir($_cache_dir)) { - $status = false; - $message = "FAILED: {$_cache_dir} is not a directory"; - if ($errors === null) { - echo $message . ".\n"; - } else { - $errors['cache_dir'] = $message; - } - } elseif (!is_readable($_cache_dir)) { - $status = false; - $message = "FAILED: {$_cache_dir} is not readable"; - if ($errors === null) { - echo $message . ".\n"; - } else { - $errors['cache_dir'] = $message; - } - } elseif (!is_writable($_cache_dir)) { - $status = false; - $message = "FAILED: {$_cache_dir} is not writable"; - if ($errors === null) { - echo $message . ".\n"; - } else { - $errors['cache_dir'] = $message; - } - } else { - if ($errors === null) { - echo "{$_cache_dir} is OK.\n"; - } - } - - if ($errors === null) { - echo "Testing configs directory...\n"; - } - - // test if all registered config_dir are accessible - foreach ($smarty->getConfigDir() as $config_dir) { - $_config_dir = $config_dir; - $config_dir = realpath($config_dir); - // resolve include_path or fail existence - if (!$config_dir) { - if ($smarty->use_include_path && !preg_match('/^([\/\\\\]|[a-zA-Z]:[\/\\\\])/', $_config_dir)) { - // try PHP include_path - if ($_stream_resolve_include_path) { - $config_dir = stream_resolve_include_path($_config_dir); - } else { - $config_dir = Smarty_Internal_Get_Include_Path::getIncludePath($_config_dir); - } - - if ($config_dir !== false) { - if ($errors === null) { - echo "$config_dir is OK.\n"; - } - - continue; - } else { - $status = false; - $message = "FAILED: $_config_dir does not exist (and couldn't be found in include_path either)"; - if ($errors === null) { - echo $message . ".\n"; - } else { - $errors['config_dir'] = $message; - } - - continue; - } - } else { - $status = false; - $message = "FAILED: $_config_dir does not exist"; - if ($errors === null) { - echo $message . ".\n"; - } else { - $errors['config_dir'] = $message; - } - - continue; - } - } - - if (!is_dir($config_dir)) { - $status = false; - $message = "FAILED: $config_dir is not a directory"; - if ($errors === null) { - echo $message . ".\n"; - } else { - $errors['config_dir'] = $message; - } - } elseif (!is_readable($config_dir)) { - $status = false; - $message = "FAILED: $config_dir is not readable"; - if ($errors === null) { - echo $message . ".\n"; - } else { - $errors['config_dir'] = $message; - } - } else { - if ($errors === null) { - echo "$config_dir is OK.\n"; - } - } - } - - if ($errors === null) { - echo "Testing sysplugin files...\n"; - } - // test if sysplugins are available - $source = SMARTY_SYSPLUGINS_DIR; - if (is_dir($source)) { - $expected = array( - "smarty_cacheresource.php" => true, - "smarty_cacheresource_custom.php" => true, - "smarty_cacheresource_keyvaluestore.php" => true, - "smarty_data.php" => true, - "smarty_internal_cacheresource_file.php" => true, - "smarty_internal_compile_append.php" => true, - "smarty_internal_compile_assign.php" => true, - "smarty_internal_compile_block.php" => true, - "smarty_internal_compile_break.php" => true, - "smarty_internal_compile_call.php" => true, - "smarty_internal_compile_capture.php" => true, - "smarty_internal_compile_config_load.php" => true, - "smarty_internal_compile_continue.php" => true, - "smarty_internal_compile_debug.php" => true, - "smarty_internal_compile_eval.php" => true, - "smarty_internal_compile_extends.php" => true, - "smarty_internal_compile_for.php" => true, - "smarty_internal_compile_foreach.php" => true, - "smarty_internal_compile_function.php" => true, - "smarty_internal_compile_if.php" => true, - "smarty_internal_compile_include.php" => true, - "smarty_internal_compile_include_php.php" => true, - "smarty_internal_compile_insert.php" => true, - "smarty_internal_compile_ldelim.php" => true, - "smarty_internal_compile_nocache.php" => true, - "smarty_internal_compile_private_block_plugin.php" => true, - "smarty_internal_compile_private_function_plugin.php" => true, - "smarty_internal_compile_private_modifier.php" => true, - "smarty_internal_compile_private_object_block_function.php" => true, - "smarty_internal_compile_private_object_function.php" => true, - "smarty_internal_compile_private_print_expression.php" => true, - "smarty_internal_compile_private_registered_block.php" => true, - "smarty_internal_compile_private_registered_function.php" => true, - "smarty_internal_compile_private_special_variable.php" => true, - "smarty_internal_compile_rdelim.php" => true, - "smarty_internal_compile_section.php" => true, - "smarty_internal_compile_setfilter.php" => true, - "smarty_internal_compile_while.php" => true, - "smarty_internal_compilebase.php" => true, - "smarty_internal_config_file_compiler.php" => true, - "smarty_internal_configfilelexer.php" => true, - "smarty_internal_configfileparser.php" => true, - "smarty_internal_data.php" => true, - "smarty_internal_debug.php" => true, - "smarty_internal_extension_codeframe.php" => true, - "smarty_internal_extension_config.php" => true, - "smarty_internal_extension_defaulttemplatehandler.php" => true, - "smarty_internal_filter_handler.php" => true, - "smarty_internal_function_call_handler.php" => true, - "smarty_internal_get_include_path.php" => true, - "smarty_internal_nocache_insert.php" => true, - "smarty_internal_parsetree.php" => true, - "smarty_internal_parsetree_code.php" => true, - "smarty_internal_parsetree_dq.php" => true, - "smarty_internal_parsetree_dqcontent.php" => true, - "smarty_internal_parsetree_tag.php" => true, - "smarty_internal_parsetree_template.php" => true, - "smarty_internal_parsetree_text.php" => true, - "smarty_internal_resource_eval.php" => true, - "smarty_internal_resource_extends.php" => true, - "smarty_internal_resource_file.php" => true, - "smarty_internal_resource_php.php" => true, - "smarty_internal_resource_registered.php" => true, - "smarty_internal_resource_stream.php" => true, - "smarty_internal_resource_string.php" => true, - "smarty_internal_smartytemplatecompiler.php" => true, - "smarty_internal_template.php" => true, - "smarty_internal_templatebase.php" => true, - "smarty_internal_templatecompilerbase.php" => true, - "smarty_internal_templatelexer.php" => true, - "smarty_internal_templateparser.php" => true, - "smarty_internal_utility.php" => true, - "smarty_internal_write_file.php" => true, - "smarty_resource.php" => true, - "smarty_resource_custom.php" => true, - "smarty_resource_recompiled.php" => true, - "smarty_resource_uncompiled.php" => true, - "smarty_security.php" => true, - "smarty_template_cached.php" => true, - "smarty_template_compiled.php" => true, - "smarty_template_config.php" => true, - "smarty_template_source.php" => true, - "smarty_undefined_variable.php" => true, - "smarty_variable.php" => true, - "smartycompilerexception.php" => true, - "smartyexception.php" => true, - ); - $iterator = new DirectoryIterator($source); - foreach ($iterator as $file) { - if (!$file->isDot()) { - $filename = $file->getFilename(); - if (isset($expected[$filename])) { - unset($expected[$filename]); - } - } - } - if ($expected) { - $status = false; - $message = "FAILED: files missing from libs/sysplugins: " . join(', ', array_keys($expected)); - if ($errors === null) { - echo $message . ".\n"; - } else { - $errors['sysplugins'] = $message; - } - } elseif ($errors === null) { - echo "... OK\n"; - } - } else { - $status = false; - $message = "FAILED: " . SMARTY_SYSPLUGINS_DIR . ' is not a directory'; - if ($errors === null) { - echo $message . ".\n"; - } else { - $errors['sysplugins_dir_constant'] = $message; - } - } - - if ($errors === null) { - echo "Testing plugin files...\n"; - } - // test if core plugins are available - $source = SMARTY_PLUGINS_DIR; - if (is_dir($source)) { - $expected = array( - "block.textformat.php" => true, - "function.counter.php" => true, - "function.cycle.php" => true, - "function.fetch.php" => true, - "function.html_checkboxes.php" => true, - "function.html_image.php" => true, - "function.html_options.php" => true, - "function.html_radios.php" => true, - "function.html_select_date.php" => true, - "function.html_select_time.php" => true, - "function.html_table.php" => true, - "function.mailto.php" => true, - "function.math.php" => true, - "modifier.capitalize.php" => true, - "modifier.date_format.php" => true, - "modifier.debug_print_var.php" => true, - "modifier.escape.php" => true, - "modifier.regex_replace.php" => true, - "modifier.replace.php" => true, - "modifier.spacify.php" => true, - "modifier.truncate.php" => true, - "modifiercompiler.cat.php" => true, - "modifiercompiler.count_characters.php" => true, - "modifiercompiler.count_paragraphs.php" => true, - "modifiercompiler.count_sentences.php" => true, - "modifiercompiler.count_words.php" => true, - "modifiercompiler.default.php" => true, - "modifiercompiler.escape.php" => true, - "modifiercompiler.from_charset.php" => true, - "modifiercompiler.indent.php" => true, - "modifiercompiler.lower.php" => true, - "modifiercompiler.noprint.php" => true, - "modifiercompiler.string_format.php" => true, - "modifiercompiler.strip.php" => true, - "modifiercompiler.strip_tags.php" => true, - "modifiercompiler.to_charset.php" => true, - "modifiercompiler.unescape.php" => true, - "modifiercompiler.upper.php" => true, - "modifiercompiler.wordwrap.php" => true, - "outputfilter.trimwhitespace.php" => true, - "shared.escape_special_chars.php" => true, - "shared.literal_compiler_param.php" => true, - "shared.make_timestamp.php" => true, - "shared.mb_str_replace.php" => true, - "shared.mb_unicode.php" => true, - "shared.mb_wordwrap.php" => true, - "variablefilter.htmlspecialchars.php" => true, - ); - $iterator = new DirectoryIterator($source); - foreach ($iterator as $file) { - if (!$file->isDot()) { - $filename = $file->getFilename(); - if (isset($expected[$filename])) { - unset($expected[$filename]); - } - } - } - if ($expected) { - $status = false; - $message = "FAILED: files missing from libs/plugins: " . join(', ', array_keys($expected)); - if ($errors === null) { - echo $message . ".\n"; - } else { - $errors['plugins'] = $message; - } - } elseif ($errors === null) { - echo "... OK\n"; - } - } else { - $status = false; - $message = "FAILED: " . SMARTY_PLUGINS_DIR . ' is not a directory'; - if ($errors === null) { - echo $message . ".\n"; - } else { - $errors['plugins_dir_constant'] = $message; - } - } - - if ($errors === null) { - echo "Tests complete.\n"; - echo "</PRE>\n"; - } - - return $status; - } -} diff --git a/library/smarty/libs/sysplugins/smarty_internal_utility.php b/library/smarty/libs/sysplugins/smarty_internal_utility.php deleted file mode 100644 --- a/library/smarty/libs/sysplugins/smarty_internal_utility.php +++ /dev/null @@ -1,294 +0,0 @@ -<?php -/** - * Project: Smarty: the PHP compiling template engine - * File: smarty_internal_utility.php - * SVN: $Id: $ - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * For questions, help, comments, discussion, etc., please join the - * Smarty mailing list. Send a blank e-mail to - * smarty-discussion-subscribe@googlegroups.com - * - * @link http://www.smarty.net/ - * @copyright 2008 New Digital Group, Inc. - * @author Monte Ohrt <monte at ohrt dot com> - * @author Uwe Tews - * @package Smarty - * @subpackage PluginsInternal - * @version 3-SVN$Rev: 3286 $ - */ - -/** - * Utility class - * - * @package Smarty - * @subpackage Security - */ -class Smarty_Internal_Utility { - /** - * private constructor to prevent calls creation of new instances - */ - final private function __construct() { - // intentionally left blank - } - - /** - * Compile all template files - * - * @param string $extension template file name extension - * @param bool $force_compile force all to recompile - * @param int $time_limit set maximum execution time - * @param int $max_errors set maximum allowed errors - * @param Smarty $smarty Smarty instance - * - * @return integer number of template files compiled - */ - public static function compileAllTemplates($extension, $force_compile, $time_limit, $max_errors, Smarty $smarty) { - // switch off time limit - if (function_exists('set_time_limit')) { - @set_time_limit($time_limit); - } - $smarty->force_compile = $force_compile; - $_count = 0; - $_error_count = 0; - // loop over array of template directories - foreach ($smarty->getTemplateDir() as $_dir) { - $_compileDirs = new RecursiveDirectoryIterator($_dir); - $_compile = new RecursiveIteratorIterator($_compileDirs); - foreach ($_compile as $_fileinfo) { - $_file = $_fileinfo->getFilename(); - if (substr(basename($_fileinfo->getPathname()), 0, 1) == '.' || strpos($_file, '.svn') !== false) { - continue; - } - if (!substr_compare($_file, $extension, -strlen($extension)) == 0) { - continue; - } - if ($_fileinfo->getPath() == substr($_dir, 0, -1)) { - $_template_file = $_file; - } else { - $_template_file = substr($_fileinfo->getPath(), strlen($_dir)) . DS . $_file; - } - echo '<br>', $_dir, '---', $_template_file; - flush(); - $_start_time = microtime(true); - try { - $_tpl = $smarty->createTemplate($_template_file, null, null, null, false); - if ($_tpl->mustCompile()) { - $_tpl->compileTemplateSource(); - $_count++; - echo ' compiled in ', microtime(true) - $_start_time, ' seconds'; - flush(); - } else { - echo ' is up to date'; - flush(); - } - } catch (Exception $e) { - echo 'Error: ', $e->getMessage(), "<br><br>"; - $_error_count++; - } - // free memory - $smarty->template_objects = array(); - $_tpl->smarty->template_objects = array(); - $_tpl = null; - if ($max_errors !== null && $_error_count == $max_errors) { - echo '<br><br>too many errors'; - exit(); - } - } - } - - return $_count; - } - - /** - * Compile all config files - * - * @param string $extension config file name extension - * @param bool $force_compile force all to recompile - * @param int $time_limit set maximum execution time - * @param int $max_errors set maximum allowed errors - * @param Smarty $smarty Smarty instance - * - * @return integer number of config files compiled - */ - public static function compileAllConfig($extension, $force_compile, $time_limit, $max_errors, Smarty $smarty) { - // switch off time limit - if (function_exists('set_time_limit')) { - @set_time_limit($time_limit); - } - $smarty->force_compile = $force_compile; - $_count = 0; - $_error_count = 0; - // loop over array of template directories - foreach ($smarty->getConfigDir() as $_dir) { - $_compileDirs = new RecursiveDirectoryIterator($_dir); - $_compile = new RecursiveIteratorIterator($_compileDirs); - foreach ($_compile as $_fileinfo) { - $_file = $_fileinfo->getFilename(); - if (substr(basename($_fileinfo->getPathname()), 0, 1) == '.' || strpos($_file, '.svn') !== false) { - continue; - } - if (!substr_compare($_file, $extension, -strlen($extension)) == 0) { - continue; - } - if ($_fileinfo->getPath() == substr($_dir, 0, -1)) { - $_config_file = $_file; - } else { - $_config_file = substr($_fileinfo->getPath(), strlen($_dir)) . DS . $_file; - } - echo '<br>', $_dir, '---', $_config_file; - flush(); - $_start_time = microtime(true); - try { - $_config = new Smarty_Internal_Config($_config_file, $smarty); - if ($_config->mustCompile()) { - $_config->compileConfigSource(); - $_count++; - echo ' compiled in ', microtime(true) - $_start_time, ' seconds'; - flush(); - } else { - echo ' is up to date'; - flush(); - } - } catch (Exception $e) { - echo 'Error: ', $e->getMessage(), "<br><br>"; - $_error_count++; - } - if ($max_errors !== null && $_error_count == $max_errors) { - echo '<br><br>too many errors'; - exit(); - } - } - } - - return $_count; - } - - /** - * Delete compiled template file - * - * @param string $resource_name template name - * @param string $compile_id compile id - * @param integer $exp_time expiration time - * @param Smarty $smarty Smarty instance - * - * @return integer number of template files deleted - */ - public static function clearCompiledTemplate($resource_name, $compile_id, $exp_time, Smarty $smarty) { - $_compile_dir = realpath($smarty->getCompileDir()) . '/'; - if ($_compile_dir == '/') { //We should never want to delete this! - return 0; - } - $_compile_id = isset($compile_id) ? preg_replace('![^\w\|]+!', '_', $compile_id) : null; - $_dir_sep = $smarty->use_sub_dirs ? '/' : '^'; - if (isset($resource_name)) { - $_save_stat = $smarty->caching; - $smarty->caching = false; - $tpl = new $smarty->template_class($resource_name, $smarty); - $smarty->caching = $_save_stat; - - // remove from template cache - $tpl->source; // have the template registered before unset() - if ($smarty->allow_ambiguous_resources) { - $_templateId = $tpl->source->unique_resource . $tpl->cache_id . $tpl->compile_id; - } else { - $_templateId = $smarty->joined_template_dir . '#' . $resource_name . $tpl->cache_id . $tpl->compile_id; - } - if (isset($_templateId[150])) { - $_templateId = sha1($_templateId); - } - unset($smarty->template_objects[$_templateId]); - - if ($tpl->source->exists) { - $_resource_part_1 = basename(str_replace('^', '/', $tpl->compiled->filepath)); - $_resource_part_1_length = strlen($_resource_part_1); - } else { - return 0; - } - - $_resource_part_2 = str_replace('.php', '.cache.php', $_resource_part_1); - $_resource_part_2_length = strlen($_resource_part_2); - } - $_dir = $_compile_dir; - if ($smarty->use_sub_dirs && isset($_compile_id)) { - $_dir .= $_compile_id . $_dir_sep; - } - if (isset($_compile_id)) { - $_compile_id_part = str_replace('\\', '/', $_compile_dir . $_compile_id . $_dir_sep); - $_compile_id_part_length = strlen($_compile_id_part); - } - $_count = 0; - try { - $_compileDirs = new RecursiveDirectoryIterator($_dir); - // NOTE: UnexpectedValueException thrown for PHP >= 5.3 - } catch (Exception $e) { - return 0; - } - $_compile = new RecursiveIteratorIterator($_compileDirs, RecursiveIteratorIterator::CHILD_FIRST); - foreach ($_compile as $_file) { - if (substr(basename($_file->getPathname()), 0, 1) == '.' || strpos($_file, '.svn') !== false) { - continue; - } - - $_filepath = str_replace('\\', '/', (string)$_file); - - if ($_file->isDir()) { - if (!$_compile->isDot()) { - // delete folder if empty - @rmdir($_file->getPathname()); - } - } else { - $unlink = false; - if ((!isset($_compile_id) || (isset($_filepath[$_compile_id_part_length]) && $a = !strncmp($_filepath, $_compile_id_part, $_compile_id_part_length))) - && (!isset($resource_name) - || (isset($_filepath[$_resource_part_1_length]) - && substr_compare($_filepath, $_resource_part_1, -$_resource_part_1_length, $_resource_part_1_length) == 0) - || (isset($_filepath[$_resource_part_2_length]) - && substr_compare($_filepath, $_resource_part_2, -$_resource_part_2_length, $_resource_part_2_length) == 0)) - ) { - if (isset($exp_time)) { - if (time() - @filemtime($_filepath) >= $exp_time) { - $unlink = true; - } - } else { - $unlink = true; - } - } - - if ($unlink && @unlink($_filepath)) { - $_count++; - } - } - } - // clear compiled cache - Smarty_Resource::$sources = array(); - Smarty_Resource::$compileds = array(); - - return $_count; - } - - /** - * Return array of tag/attributes of all tags used by an template - * - * @param Smarty_Internal_Template $template - * - * @throws Exception - * @throws SmartyException - * @return array of tag/attributes - */ - public static function getTags(Smarty_Internal_Template $template) { - $template->smarty->get_used_tags = true; - $template->compileTemplateSource(); - - return $template->used_tags; - } -} diff --git a/library/smarty/libs/sysplugins/smarty_internal_write_file.php b/library/smarty/libs/sysplugins/smarty_internal_write_file.php deleted file mode 100644 --- a/library/smarty/libs/sysplugins/smarty_internal_write_file.php +++ /dev/null @@ -1,86 +0,0 @@ -<?php -/** - * Smarty write file plugin - * - * @package Smarty - * @subpackage PluginsInternal - * @author Monte Ohrt - */ - -/** - * Smarty Internal Write File Class - * - * @package Smarty - * @subpackage PluginsInternal - */ -class Smarty_Internal_Write_File { - /** - * Writes file in a safe way to disk - * - * @param string $_filepath complete filepath - * @param string $_contents file content - * @param Smarty $smarty smarty instance - * - * @throws SmartyException - * @return boolean true - */ - public function writeFile($_filepath, $_contents, Smarty $smarty) { - $_error_reporting = error_reporting(); - error_reporting($_error_reporting & ~E_NOTICE & ~E_WARNING); - if ($smarty->_file_perms !== null) { - $old_umask = umask(0); - } - - $_dirpath = dirname($_filepath); - // if subdirs, create dir structure - if ($_dirpath !== '.' && !file_exists($_dirpath)) { - mkdir($_dirpath, $smarty->_dir_perms === null ? 0777 : $smarty->_dir_perms, true); - } - - // write to tmp file, then move to overt file lock race condition - $_tmp_file = $_dirpath . DS . str_replace(array('.', ','), '_', uniqid('wrt', true)); - if (!file_put_contents($_tmp_file, $_contents)) { - error_reporting($_error_reporting); - throw new SmartyException("unable to write file {$_tmp_file}"); - } - - /* - * Windows' rename() fails if the destination exists, - * Linux' rename() properly handles the overwrite. - * Simply unlink()ing a file might cause other processes - * currently reading that file to fail, but linux' rename() - * seems to be smart enough to handle that for us. - */ - if (Smarty::$_IS_WINDOWS) { - // remove original file - if (is_file($_filepath)) { - @unlink($_filepath); - } - // rename tmp file - $success = @rename($_tmp_file, $_filepath); - } else { - // rename tmp file - $success = @rename($_tmp_file, $_filepath); - if (!$success) { - // remove original file - if (is_file($_filepath)) { - @unlink($_filepath); - } - // rename tmp file - $success = @rename($_tmp_file, $_filepath); - } - } - if (!$success) { - error_reporting($_error_reporting); - throw new SmartyException("unable to write file {$_filepath}"); - } - if ($smarty->_file_perms !== null) { - // set file permissions - chmod($_filepath, $smarty->_file_perms); - umask($old_umask); - } - error_reporting($_error_reporting); - - return true; - } -} diff --git a/library/smarty/libs/sysplugins/smarty_resource.php b/library/smarty/libs/sysplugins/smarty_resource.php deleted file mode 100644 --- a/library/smarty/libs/sysplugins/smarty_resource.php +++ /dev/null @@ -1,276 +0,0 @@ -<?php -/** - * Smarty Resource Plugin - * - * @package Smarty - * @subpackage TemplateResources - * @author Rodney Rehm - */ - -/** - * Smarty Resource Plugin - * Base implementation for resource plugins - * - * @package Smarty - * @subpackage TemplateResources - */ -abstract class Smarty_Resource { - /** - * Source is bypassing compiler - * - * @var boolean - */ - public $uncompiled = false; - - /** - * Source must be recompiled on every occasion - * - * @var boolean - */ - public $recompiled = false; - /** - * resource handler object - * - * @var Smarty_Resource - */ - public $handler = null; - /** - * cache for Smarty_Template_Source instances - * - * @var array - */ - public static $sources = array(); - /** - * cache for Smarty_Template_Compiled instances - * - * @var array - */ - public static $compileds = array(); - /** - * resource types provided by the core - * - * @var array - */ - protected static $sysplugins = array( - 'file' => 'smarty_internal_resource_file.php', - 'string' => 'smarty_internal_resource_string.php', - 'extends' => 'smarty_internal_resource_extends.php', - 'stream' => 'smarty_internal_resource_stream.php', - 'eval' => 'smarty_internal_resource_eval.php', - 'php' => 'smarty_internal_resource_php.php' - ); - - /** - * Name of the Class to compile this resource's contents with - * - * @var string - */ - public $compiler_class = 'Smarty_Internal_SmartyTemplateCompiler'; - - /** - * Name of the Class to tokenize this resource's contents with - * - * @var string - */ - public $template_lexer_class = 'Smarty_Internal_Templatelexer'; - - /** - * Name of the Class to parse this resource's contents with - * - * @var string - */ - public $template_parser_class = 'Smarty_Internal_Templateparser'; - - /** - * Load template's source into current template object - * {@internal The loaded source is assigned to $_template->source->content directly.}} - * - * @param Smarty_Template_Source $source source object - * - * @return string template source - * @throws SmartyException if source cannot be loaded - */ - abstract public function getContent(Smarty_Template_Source $source); - - /** - * populate Source Object with meta data from Resource - * - * @param Smarty_Template_Source $source source object - * @param Smarty_Internal_Template $_template template object - */ - abstract public function populate(Smarty_Template_Source $source, Smarty_Internal_Template $_template = null); - - /** - * populate Source Object with timestamp and exists from Resource - * - * @param Smarty_Template_Source $source source object - */ - public function populateTimestamp(Smarty_Template_Source $source) { - // intentionally left blank - } - - /** - * modify resource_name according to resource handlers specifications - * - * @param Smarty $smarty Smarty instance - * @param string $resource_name resource_name to make unique - * @param boolean $isConfig flag for config resource - * - * @return string unique resource name - */ - public function buildUniqueResourceName(Smarty $smarty, $resource_name, $isConfig = false) { - if ($isConfig) { - return get_class($this) . '#' . $smarty->joined_config_dir . '#' . $resource_name; - } else { - return get_class($this) . '#' . $smarty->joined_template_dir . '#' . $resource_name; - } - } - - /** - * Determine basename for compiled filename - * - * @param Smarty_Template_Source $source source object - * - * @return string resource's basename - */ - public function getBasename(Smarty_Template_Source $source) { - return null; - } - - /** - * Load Resource Handler - * - * @param Smarty $smarty smarty object - * @param string $type name of the resource - * - * @throws SmartyException - * @return Smarty_Resource Resource Handler - */ - public static function load(Smarty $smarty, $type) { - // try smarty's cache - if (isset($smarty->_resource_handlers[$type])) { - return $smarty->_resource_handlers[$type]; - } - - // try registered resource - if (isset($smarty->registered_resources[$type])) { - if ($smarty->registered_resources[$type] instanceof Smarty_Resource) { - $smarty->_resource_handlers[$type] = $smarty->registered_resources[$type]; - } else { - $smarty->_resource_handlers[$type] = new Smarty_Internal_Resource_Registered(); - } - - return $smarty->_resource_handlers[$type]; - } - - // try sysplugins dir - if (isset(self::$sysplugins[$type])) { - $_resource_class = 'Smarty_Internal_Resource_' . ucfirst($type); - if (!class_exists($_resource_class, false)) { - require SMARTY_SYSPLUGINS_DIR . self::$sysplugins[$type]; - } - return $smarty->_resource_handlers[$type] = new $_resource_class(); - } - - // try plugins dir - $_resource_class = 'Smarty_Resource_' . ucfirst($type); - if ($smarty->loadPlugin($_resource_class)) { - if (class_exists($_resource_class, false)) { - return $smarty->_resource_handlers[$type] = new $_resource_class(); - } else { - $smarty->registerResource($type, array( - "smarty_resource_{$type}_source", - "smarty_resource_{$type}_timestamp", - "smarty_resource_{$type}_secure", - "smarty_resource_{$type}_trusted" - )); - // give it another try, now that the resource is registered properly - return self::load($smarty, $type); - } - } - - // try streams - $_known_stream = stream_get_wrappers(); - if (in_array($type, $_known_stream)) { - // is known stream - if (is_object($smarty->security_policy)) { - $smarty->security_policy->isTrustedStream($type); - } - return $smarty->_resource_handlers[$type] = new Smarty_Internal_Resource_Stream();; - } - - // TODO: try default_(template|config)_handler - - // give up - throw new SmartyException("Unknown resource type '{$type}'"); - } - - /** - * extract resource_type and resource_name from template_resource and config_resource - * @note "C:/foo.tpl" was forced to file resource up till Smarty 3.1.3 (including). - * - * @param string $resource_name template_resource or config_resource to parse - * @param string $default_resource the default resource_type defined in $smarty - * - * @return array with parsed resource name and type - */ - public static function parseResourceName($resource_name, $default_resource) { - if (preg_match('/^([A-Za-z0-9_\-]{2,})[:]/', $resource_name, $match)) { - $type = $match[1]; - $name = substr($resource_name, strlen($match[0])); - } else { - // no resource given, use default - // or single character before the colon is not a resource type, but part of the filepath - $type = $default_resource; - $name = $resource_name; - - } - return array($name, $type); - } - - /** - * modify resource_name according to resource handlers specifications - * - * @param Smarty $smarty Smarty instance - * @param string $resource_name resource_name to make unique - * - * @return string unique resource name - */ - - /** - * modify template_resource according to resource handlers specifications - * - * @param Smarty_Internal_template $template Smarty instance - * @param string $template_resource template_resource to extract resource handler and name of - * - * @return string unique resource name - */ - public static function getUniqueTemplateName($template, $template_resource) { - $smarty = isset($template->smarty) ? $template->smarty : $template; - list($name, $type) = self::parseResourceName($template_resource, $smarty->default_resource_type); - // TODO: optimize for Smarty's internal resource types - $resource = Smarty_Resource::load($smarty, $type); - // go relative to a given template? - $_file_is_dotted = $name[0] == '.' && ($name[1] == '.' || $name[1] == '/'); - if ($template instanceof Smarty_Internal_Template && $_file_is_dotted && ($template->source->type == 'file' || $template->parent->source->type == 'extends')) { - $name = dirname($template->source->filepath) . DS . $name; - } - return $resource->buildUniqueResourceName($smarty, $name); - } - - /** - * initialize Source Object for given resource - * wrapper for backward compatibility to versions < 3.1.22 - * Either [$_template] or [$smarty, $template_resource] must be specified - * - * @param Smarty_Internal_Template $_template template object - * @param Smarty $smarty smarty object - * @param string $template_resource resource identifier - * - * @return Smarty_Template_Source Source Object - */ - public static function source(Smarty_Internal_Template $_template = null, Smarty $smarty = null, $template_resource = null) { - return Smarty_Template_Source::load($_template, $smarty, $template_resource); - } -} - diff --git a/library/smarty/libs/sysplugins/smarty_resource_custom.php b/library/smarty/libs/sysplugins/smarty_resource_custom.php deleted file mode 100644 --- a/library/smarty/libs/sysplugins/smarty_resource_custom.php +++ /dev/null @@ -1,90 +0,0 @@ -<?php -/** - * Smarty Resource Plugin - * - * @package Smarty - * @subpackage TemplateResources - * @author Rodney Rehm - */ - -/** - * Smarty Resource Plugin - * Wrapper Implementation for custom resource plugins - * - * @package Smarty - * @subpackage TemplateResources - */ -abstract class Smarty_Resource_Custom extends Smarty_Resource { - /** - * fetch template and its modification time from data source - * - * @param string $name template name - * @param string &$source template source - * @param integer &$mtime template modification timestamp (epoch) - */ - abstract protected function fetch($name, &$source, &$mtime); - - /** - * Fetch template's modification timestamp from data source - * {@internal implementing this method is optional. - * Only implement it if modification times can be accessed faster than loading the complete template source.}} - * - * @param string $name template name - * - * @return integer|boolean timestamp (epoch) the template was modified, or false if not found - */ - protected function fetchTimestamp($name) { - return null; - } - - /** - * populate Source Object with meta data from Resource - * - * @param Smarty_Template_Source $source source object - * @param Smarty_Internal_Template $_template template object - */ - public function populate(Smarty_Template_Source $source, Smarty_Internal_Template $_template = null) { - $source->filepath = $source->type . ':' . $source->name; - $source->uid = sha1($source->type . ':' . $source->name); - - $mtime = $this->fetchTimestamp($source->name); - if ($mtime !== null) { - $source->timestamp = $mtime; - } else { - $this->fetch($source->name, $content, $timestamp); - $source->timestamp = isset($timestamp) ? $timestamp : false; - if (isset($content)) { - $source->content = $content; - } - } - $source->exists = !!$source->timestamp; - } - - /** - * Load template's source into current template object - * - * @param Smarty_Template_Source $source source object - * - * @return string template source - * @throws SmartyException if source cannot be loaded - */ - public function getContent(Smarty_Template_Source $source) { - $this->fetch($source->name, $content, $timestamp); - if (isset($content)) { - return $content; - } - - throw new SmartyException("Unable to read template {$source->type} '{$source->name}'"); - } - - /** - * Determine basename for compiled filename - * - * @param Smarty_Template_Source $source source object - * - * @return string resource's basename - */ - public function getBasename(Smarty_Template_Source $source) { - return basename($source->name); - } -} diff --git a/library/smarty/libs/sysplugins/smarty_resource_recompiled.php b/library/smarty/libs/sysplugins/smarty_resource_recompiled.php deleted file mode 100644 --- a/library/smarty/libs/sysplugins/smarty_resource_recompiled.php +++ /dev/null @@ -1,38 +0,0 @@ -<?php -/** - * Smarty Resource Plugin - * - * @package Smarty - * @subpackage TemplateResources - * @author Rodney Rehm - */ - -/** - * Smarty Resource Plugin - * Base implementation for resource plugins that don't compile cache - * - * @package Smarty - * @subpackage TemplateResources - */ -abstract class Smarty_Resource_Recompiled extends Smarty_Resource { - /** - * Flag that it's an recompiled resource - * - * @var bool - */ - public $recompiled = true; - - /** - * populate Compiled Object with compiled filepath - * - * @param Smarty_Template_Compiled $compiled compiled object - * @param Smarty_Internal_Template $_template template object - * - * @return void - */ - public function populateCompiledFilepath(Smarty_Template_Compiled $compiled, Smarty_Internal_Template $_template) { - $compiled->filepath = false; - $compiled->timestamp = false; - $compiled->exists = false; - } -} diff --git a/library/smarty/libs/sysplugins/smarty_resource_uncompiled.php b/library/smarty/libs/sysplugins/smarty_resource_uncompiled.php deleted file mode 100644 --- a/library/smarty/libs/sysplugins/smarty_resource_uncompiled.php +++ /dev/null @@ -1,68 +0,0 @@ -<?php -/** - * Smarty Resource Plugin - * - * @package Smarty - * @subpackage TemplateResources - * @author Rodney Rehm - */ - -/** - * Smarty Resource Plugin - * Base implementation for resource plugins that don't use the compiler - * - * @package Smarty - * @subpackage TemplateResources - */ -abstract class Smarty_Resource_Uncompiled extends Smarty_Resource { - /** - * Flag that it's an uncompiled resource - * - * @var bool - */ - public $uncompiled = true; - - /** - * Render and output the template (without using the compiler) - * - * @param Smarty_Template_Source $source source object - * @param Smarty_Internal_Template $_template template object - * - * @throws SmartyException on failure - */ - abstract public function renderUncompiled(Smarty_Template_Source $source, Smarty_Internal_Template $_template); - - /** - * populate compiled object with compiled filepath - * - * @param Smarty_Template_Compiled $compiled compiled object - * @param Smarty_Internal_Template $_template template object (is ignored) - */ - public function populateCompiledFilepath(Smarty_Template_Compiled $compiled, Smarty_Internal_Template $_template) { - $compiled->filepath = false; - $compiled->timestamp = false; - $compiled->exists = false; - } - - /** - * render compiled template code - * - * @param Smarty_Internal_Template $_template - * - * @return string - * @throws Exception - */ - public function render($_template) { - $level = ob_get_level(); - ob_start(); - try { - $this->renderUncompiled($_template->source, $_template); - return ob_get_clean(); - } catch (Exception $e) { - while (ob_get_level() > $level) { - ob_end_clean(); - } - throw $e; - } - } -} diff --git a/library/smarty/libs/sysplugins/smarty_security.php b/library/smarty/libs/sysplugins/smarty_security.php deleted file mode 100644 --- a/library/smarty/libs/sysplugins/smarty_security.php +++ /dev/null @@ -1,628 +0,0 @@ -<?php -/** - * Smarty plugin - * - * @package Smarty - * @subpackage Security - * @author Uwe Tews - */ - -/* - * FIXME: Smarty_Security API - * - getter and setter instead of public properties would allow cultivating an internal cache properly - * - current implementation of isTrustedResourceDir() assumes that Smarty::$template_dir and Smarty::$config_dir are immutable - * the cache is killed every time either of the variables change. That means that two distinct Smarty objects with differing - * $template_dir or $config_dir should NOT share the same Smarty_Security instance, - * as this would lead to (severe) performance penalty! how should this be handled? - */ - -/** - * This class does contain the security settings - */ -class Smarty_Security { - /** - * This determines how Smarty handles "<?php ... ?>" tags in templates. - * possible values: - * <ul> - * <li>Smarty::PHP_PASSTHRU -> echo PHP tags as they are</li> - * <li>Smarty::PHP_QUOTE -> escape tags as entities</li> - * <li>Smarty::PHP_REMOVE -> remove php tags</li> - * <li>Smarty::PHP_ALLOW -> execute php tags</li> - * </ul> - * - * @var integer - */ - public $php_handling = Smarty::PHP_PASSTHRU; - /** - * This is the list of template directories that are considered secure. - * $template_dir is in this list implicitly. - * - * @var array - */ - public $secure_dir = array(); - /** - * This is an array of directories where trusted php scripts reside. - * {@link $security} is disabled during their inclusion/execution. - * - * @var array - */ - public $trusted_dir = array(); - /** - * List of regular expressions (PCRE) that include trusted URIs - * - * @var array - */ - public $trusted_uri = array(); - /** - * List of trusted constants names - * - * @var array - */ - public $trusted_constants = array(); - /** - * This is an array of trusted static classes. - * If empty access to all static classes is allowed. - * If set to 'none' none is allowed. - * - * @var array - */ - public $static_classes = array(); - - /** - * This is an nested array of trusted classes and static methods. - * If empty access to all static classes and methods is allowed. - * Format: - * array ( - * 'class_1' => array('method_1', 'method_2'), // allowed methods listed - * 'class_2' => array(), // all methods of class allowed - * ) - * If set to null none is allowed. - * - * @var array - */ - public $trusted_static_methods = array(); - - /** - * This is an array of trusted static properties. - * If empty access to all static classes and properties is allowed. - * Format: - * array ( - * 'class_1' => array('prop_1', 'prop_2'), // allowed properties listed - * 'class_2' => array(), // all properties of class allowed - * ) - * If set to null none is allowed. - * - * @var array - */ - public $trusted_static_properties = array(); - /** - * This is an array of trusted PHP functions. - * If empty all functions are allowed. - * To disable all PHP functions set $php_functions = null. - * - * @var array - */ - public $php_functions = array( - 'isset', 'empty', - 'count', 'sizeof', - 'in_array', 'is_array', - 'time', - ); - /** - * This is an array of trusted PHP modifiers. - * If empty all modifiers are allowed. - * To disable all modifier set $php_modifiers = null. - * - * @var array - */ - public $php_modifiers = array( - 'escape', - 'count', - 'nl2br', - ); - /** - * This is an array of allowed tags. - * If empty no restriction by allowed_tags. - * - * @var array - */ - public $allowed_tags = array(); - /** - * This is an array of disabled tags. - * If empty no restriction by disabled_tags. - * - * @var array - */ - public $disabled_tags = array(); - /** - * This is an array of allowed modifier plugins. - * If empty no restriction by allowed_modifiers. - * - * @var array - */ - public $allowed_modifiers = array(); - /** - * This is an array of disabled modifier plugins. - * If empty no restriction by disabled_modifiers. - * - * @var array - */ - public $disabled_modifiers = array(); - /** - * This is an array of disabled special $smarty variables. - * - * @var array - */ - public $disabled_special_smarty_vars = array(); - /** - * This is an array of trusted streams. - * If empty all streams are allowed. - * To disable all streams set $streams = null. - * - * @var array - */ - public $streams = array('file'); - /** - * + flag if constants can be accessed from template - * - * @var boolean - */ - public $allow_constants = true; - /** - * + flag if super globals can be accessed from template - * - * @var boolean - */ - public $allow_super_globals = true; - /** - * max template nesting level - * - * @var int - */ - public $max_template_nesting = 0; - /** - * current template nesting level - * - * @var int - */ - private $_current_template_nesting = 0; - /** - * Cache for $resource_dir lookup - * - * @var array - */ - protected $_resource_dir = null; - /** - * Cache for $template_dir lookup - * - * @var array - */ - protected $_template_dir = null; - /** - * Cache for $config_dir lookup - * - * @var array - */ - protected $_config_dir = null; - /** - * Cache for $secure_dir lookup - * - * @var array - */ - protected $_secure_dir = null; - /** - * Cache for $php_resource_dir lookup - * - * @var array - */ - protected $_php_resource_dir = null; - /** - * Cache for $trusted_dir lookup - * - * @var array - */ - protected $_trusted_dir = null; - - /** - * @param Smarty $smarty - */ - public function __construct($smarty) { - $this->smarty = $smarty; - } - - /** - * Check if PHP function is trusted. - * - * @param string $function_name - * @param object $compiler compiler object - * - * @return boolean true if function is trusted - * @throws SmartyCompilerException if php function is not trusted - */ - public function isTrustedPhpFunction($function_name, $compiler) { - if (isset($this->php_functions) && (empty($this->php_functions) || in_array($function_name, $this->php_functions))) { - return true; - } - - $compiler->trigger_template_error("PHP function '{$function_name}' not allowed by security setting"); - - return false; // should not, but who knows what happens to the compiler in the future? - } - - /** - * Check if static class is trusted. - * - * @param string $class_name - * @param object $compiler compiler object - * - * @return boolean true if class is trusted - * @throws SmartyCompilerException if static class is not trusted - */ - public function isTrustedStaticClass($class_name, $compiler) { - if (isset($this->static_classes) && (empty($this->static_classes) || in_array($class_name, $this->static_classes))) { - return true; - } - - $compiler->trigger_template_error("access to static class '{$class_name}' not allowed by security setting"); - - return false; // should not, but who knows what happens to the compiler in the future? - } - - /** - * Check if static class method/property is trusted. - * - * @param string $class_name - * @param string $params - * @param object $compiler compiler object - * - * @return boolean true if class method is trusted - * @throws SmartyCompilerException if static class method is not trusted - */ - public function isTrustedStaticClassAccess($class_name, $params, $compiler) { - if (!isset($params[2])) { - // fall back - return $this->isTrustedStaticClass($class_name, $compiler); - } - if ($params[2] == 'method') { - $allowed = $this->trusted_static_methods; - $name = substr($params[0], 0, strpos($params[0], '(')); - } else { - $allowed = $this->trusted_static_properties; - // strip '$' - $name = substr($params[0], 1); - } - if (isset($allowed)) { - if (empty($allowed)) { - // fall back - return $this->isTrustedStaticClass($class_name, $compiler); - } - if (isset($allowed[$class_name]) - && (empty($allowed[$class_name]) - || in_array($name, $allowed[$class_name])) - ) { - return true; - } - } - $compiler->trigger_template_error("access to static class '{$class_name}' {$params[2]} '{$name}' not allowed by security setting"); - return false; // should not, but who knows what happens to the compiler in the future? - } - - /** - * Check if PHP modifier is trusted. - * - * @param string $modifier_name - * @param object $compiler compiler object - * - * @return boolean true if modifier is trusted - * @throws SmartyCompilerException if modifier is not trusted - */ - public function isTrustedPhpModifier($modifier_name, $compiler) { - if (isset($this->php_modifiers) && (empty($this->php_modifiers) || in_array($modifier_name, $this->php_modifiers))) { - return true; - } - - $compiler->trigger_template_error("modifier '{$modifier_name}' not allowed by security setting"); - - return false; // should not, but who knows what happens to the compiler in the future? - } - - /** - * Check if tag is trusted. - * - * @param string $tag_name - * @param object $compiler compiler object - * - * @return boolean true if tag is trusted - * @throws SmartyCompilerException if modifier is not trusted - */ - public function isTrustedTag($tag_name, $compiler) { - // check for internal always required tags - if (in_array($tag_name, array('assign', 'call', 'private_filter', 'private_block_plugin', 'private_function_plugin', 'private_object_block_function', - 'private_object_function', 'private_registered_function', 'private_registered_block', 'private_special_variable', 'private_print_expression', 'private_modifier')) - ) { - return true; - } - // check security settings - if (empty($this->allowed_tags)) { - if (empty($this->disabled_tags) || !in_array($tag_name, $this->disabled_tags)) { - return true; - } else { - $compiler->trigger_template_error("tag '{$tag_name}' disabled by security setting", $compiler->lex->taglineno); - } - } elseif (in_array($tag_name, $this->allowed_tags) && !in_array($tag_name, $this->disabled_tags)) { - return true; - } else { - $compiler->trigger_template_error("tag '{$tag_name}' not allowed by security setting", $compiler->lex->taglineno); - } - - return false; // should not, but who knows what happens to the compiler in the future? - } - - /** - * Check if special $smarty variable is trusted. - * - * @param string $var_name - * @param object $compiler compiler object - * - * @return boolean true if tag is trusted - * @throws SmartyCompilerException if modifier is not trusted - */ - public function isTrustedSpecialSmartyVar($var_name, $compiler) { - if (!in_array($var_name, $this->disabled_special_smarty_vars)) { - return true; - } else { - $compiler->trigger_template_error("special variable '\$smarty.{$var_name}' not allowed by security setting", $compiler->lex->taglineno); - } - - return false; // should not, but who knows what happens to the compiler in the future? - } - - /** - * Check if modifier plugin is trusted. - * - * @param string $modifier_name - * @param object $compiler compiler object - * - * @return boolean true if tag is trusted - * @throws SmartyCompilerException if modifier is not trusted - */ - public function isTrustedModifier($modifier_name, $compiler) { - // check for internal always allowed modifier - if (in_array($modifier_name, array('default'))) { - return true; - } - // check security settings - if (empty($this->allowed_modifiers)) { - if (empty($this->disabled_modifiers) || !in_array($modifier_name, $this->disabled_modifiers)) { - return true; - } else { - $compiler->trigger_template_error("modifier '{$modifier_name}' disabled by security setting", $compiler->lex->taglineno); - } - } elseif (in_array($modifier_name, $this->allowed_modifiers) && !in_array($modifier_name, $this->disabled_modifiers)) { - return true; - } else { - $compiler->trigger_template_error("modifier '{$modifier_name}' not allowed by security setting", $compiler->lex->taglineno); - } - - return false; // should not, but who knows what happens to the compiler in the future? - } - - /** - * Check if constants are enabled or trusted - * - * @param string $const contant name - * @param object $compiler compiler object - * - * @return bool - */ - public function isTrustedConstant($const, $compiler) { - if (in_array($const, array('true', 'false', 'null'))) { - return true; - } - if (!empty($this->trusted_constants)) { - if (!in_array($const, $this->trusted_constants)) { - $compiler->trigger_template_error("Security: access to constant '{$const}' not permitted"); - return false; - } - return true; - } - if ($this->allow_constants) { - return true; - } - $compiler->trigger_template_error("Security: access to constants not permitted"); - return false; - } - - /** - * Check if stream is trusted. - * - * @param string $stream_name - * - * @return boolean true if stream is trusted - * @throws SmartyException if stream is not trusted - */ - public function isTrustedStream($stream_name) { - if (isset($this->streams) && (empty($this->streams) || in_array($stream_name, $this->streams))) { - return true; - } - - throw new SmartyException("stream '{$stream_name}' not allowed by security setting"); - } - - /** - * Check if directory of file resource is trusted. - * - * @param string $filepath - * - * @return boolean true if directory is trusted - * @throws SmartyException if directory is not trusted - */ - public function isTrustedResourceDir($filepath) { - $_template = false; - $_config = false; - $_secure = false; - - $_template_dir = $this->smarty->getTemplateDir(); - $_config_dir = $this->smarty->getConfigDir(); - - // check if index is outdated - if ((!$this->_template_dir || $this->_template_dir !== $_template_dir) - || (!$this->_config_dir || $this->_config_dir !== $_config_dir) - || (!empty($this->secure_dir) && (!$this->_secure_dir || $this->_secure_dir !== $this->secure_dir)) - ) { - $this->_resource_dir = array(); - $_template = true; - $_config = true; - $_secure = !empty($this->secure_dir); - } - - // rebuild template dir index - if ($_template) { - $this->_template_dir = $_template_dir; - foreach ($_template_dir as $directory) { - $directory = realpath($directory); - $this->_resource_dir[$directory] = true; - } - } - - // rebuild config dir index - if ($_config) { - $this->_config_dir = $_config_dir; - foreach ($_config_dir as $directory) { - $directory = realpath($directory); - $this->_resource_dir[$directory] = true; - } - } - - // rebuild secure dir index - if ($_secure) { - $this->_secure_dir = $this->secure_dir; - foreach ((array)$this->secure_dir as $directory) { - $directory = realpath($directory); - $this->_resource_dir[$directory] = true; - } - } - - $_filepath = realpath($filepath); - $directory = dirname($_filepath); - $_directory = array(); - while (true) { - // remember the directory to add it to _resource_dir in case we're successful - $_directory[$directory] = true; - // test if the directory is trusted - if (isset($this->_resource_dir[$directory])) { - // merge sub directories of current $directory into _resource_dir to speed up subsequent lookup - $this->_resource_dir = array_merge($this->_resource_dir, $_directory); - - return true; - } - // abort if we've reached root - if (($pos = strrpos($directory, DS)) === false || !isset($directory[1])) { - break; - } - // bubble up one level - $directory = substr($directory, 0, $pos); - } - - // give up - throw new SmartyException("directory '{$_filepath}' not allowed by security setting"); - } - - /** - * Check if URI (e.g. {fetch} or {html_image}) is trusted - * To simplify things, isTrustedUri() resolves all input to "{$PROTOCOL}://{$HOSTNAME}". - * So "http://username:password@hello.world.example.org:8080/some-path?some=query-string" - * is reduced to "http://hello.world.example.org" prior to applying the patters from {@link $trusted_uri}. - * - * @param string $uri - * - * @return boolean true if URI is trusted - * @throws SmartyException if URI is not trusted - * @uses $trusted_uri for list of patterns to match against $uri - */ - public function isTrustedUri($uri) { - $_uri = parse_url($uri); - if (!empty($_uri['scheme']) && !empty($_uri['host'])) { - $_uri = $_uri['scheme'] . '://' . $_uri['host']; - foreach ($this->trusted_uri as $pattern) { - if (preg_match($pattern, $_uri)) { - return true; - } - } - } - - throw new SmartyException("URI '{$uri}' not allowed by security setting"); - } - - /** - * Check if directory of file resource is trusted. - * - * @param string $filepath - * - * @return boolean true if directory is trusted - * @throws SmartyException if PHP directory is not trusted - */ - public function isTrustedPHPDir($filepath) { - if (empty($this->trusted_dir)) { - throw new SmartyException("directory '{$filepath}' not allowed by security setting (no trusted_dir specified)"); - } - - // check if index is outdated - if (!$this->_trusted_dir || $this->_trusted_dir !== $this->trusted_dir) { - $this->_php_resource_dir = array(); - - $this->_trusted_dir = $this->trusted_dir; - foreach ((array)$this->trusted_dir as $directory) { - $directory = realpath($directory); - $this->_php_resource_dir[$directory] = true; - } - } - - $_filepath = realpath($filepath); - $directory = dirname($_filepath); - $_directory = array(); - while (true) { - // remember the directory to add it to _resource_dir in case we're successful - $_directory[] = $directory; - // test if the directory is trusted - if (isset($this->_php_resource_dir[$directory])) { - // merge sub directories of current $directory into _resource_dir to speed up subsequent lookup - $this->_php_resource_dir = array_merge($this->_php_resource_dir, $_directory); - - return true; - } - // abort if we've reached root - if (($pos = strrpos($directory, DS)) === false || !isset($directory[2])) { - break; - } - // bubble up one level - $directory = substr($directory, 0, $pos); - } - - throw new SmartyException("directory '{$_filepath}' not allowed by security setting"); - } - - /** - * Start template processing - * - * @param $template - * - * @throws SmartyException - */ - public function startTemplate($template) { - if ($this->max_template_nesting > 0 && $this->_current_template_nesting++ >= $this->max_template_nesting) { - throw new SmartyException("maximum template nesting level of '{$this->max_template_nesting}' exceeded when calling '{$template->template_resource}'"); - } - } - - /** - * Exit template processing - * - * @param $template - */ - public function exitTemplate($template) { - if ($this->max_template_nesting > 0) { - $this->_current_template_nesting--; - } - } -} diff --git a/library/smarty/libs/sysplugins/smarty_template_cached.php b/library/smarty/libs/sysplugins/smarty_template_cached.php deleted file mode 100644 --- a/library/smarty/libs/sysplugins/smarty_template_cached.php +++ /dev/null @@ -1,392 +0,0 @@ -<?php -/** - * Created by PhpStorm. - * User: Uwe Tews - * Date: 04.12.2014 - * Time: 06:08 - */ - -/** - * Smarty Resource Data Object - * Cache Data Container for Template Files - * - * @package Smarty - * @subpackage TemplateResources - * @author Rodney Rehm - */ -class Smarty_Template_Cached { - /** - * Source Filepath - * - * @var string - */ - public $filepath = false; - - /** - * Source Content - * - * @var string - */ - public $content = null; - - /** - * Source Timestamp - * - * @var integer - */ - public $timestamp = false; - - /** - * Source Existence - * - * @var boolean - */ - public $exists = false; - - /** - * Cache Is Valid - * - * @var boolean - */ - public $valid = null; - - /** - * Cache was processed - * - * @var boolean - */ - public $processed = false; - - /** - * CacheResource Handler - * - * @var Smarty_CacheResource - */ - public $handler = null; - - /** - * Template Compile Id (Smarty_Internal_Template::$compile_id) - * - * @var string - */ - public $compile_id = null; - - /** - * Template Cache Id (Smarty_Internal_Template::$cache_id) - * - * @var string - */ - public $cache_id = null; - - /** - * Id for cache locking - * - * @var string - */ - public $lock_id = null; - - /** - * flag that cache is locked by this instance - * - * @var bool - */ - public $is_locked = false; - - /** - * Source Object - * - * @var Smarty_Template_Source - */ - public $source = null; - - /** - * create Cached Object container - * - * @param Smarty_Internal_Template $_template template object - */ - public function __construct(Smarty_Internal_Template $_template) { - $this->compile_id = $_template->compile_id; - $this->cache_id = $_template->cache_id; - if (!isset($_template->source)) { - $_template->loadSource(); - } - $this->source = $_template->source; - if (!class_exists('Smarty_CacheResource', false)) { - require SMARTY_SYSPLUGINS_DIR . 'smarty_cacheresource.php'; - } - $this->handler = Smarty_CacheResource::load($_template->smarty); - } - - /** - * @param Smarty_Internal_Template $_template - * - * @return Smarty_Template_Cached - */ - static function load(Smarty_Internal_Template $_template) { - $_template->cached = $cached = new Smarty_Template_Cached($_template); - $cached->handler->populate($cached, $_template); - // caching enabled ? - if (!($_template->caching == Smarty::CACHING_LIFETIME_CURRENT || $_template->caching == Smarty::CACHING_LIFETIME_SAVED) || $_template->source->recompiled) { - $cached->valid = false; - } - return $cached; - } - - /** - * Check if cache is valid, lock cache if required - * - * @param \Smarty_Internal_Template $_template - * - * @return bool flag true if cache is valid - */ - public function isCached(Smarty_Internal_Template $_template) { - if ($this->valid !== null) { - return $this->valid; - } - while (true) { - while (true) { - if ($this->exists === false || $_template->smarty->force_compile || $_template->smarty->force_cache) { - $this->valid = false; - } else { - $this->valid = true; - } - if ($this->valid && $_template->caching == Smarty::CACHING_LIFETIME_CURRENT && $_template->cache_lifetime >= 0 && time() > ($this->timestamp + $_template->cache_lifetime)) { - // lifetime expired - $this->valid = false; - } - if ($this->valid && $_template->source->timestamp > $this->timestamp) { - $this->valid = false; - } - if ($this->valid || !$_template->smarty->cache_locking) { - break; - } - if (!$this->handler->locked($_template->smarty, $this)) { - $this->handler->acquireLock($_template->smarty, $this); - break 2; - } - $this->handler->populate($this, $_template); - } - if ($this->valid) { - if (!$_template->smarty->cache_locking || $this->handler->locked($_template->smarty, $this) === null) { - // load cache file for the following checks - if ($_template->smarty->debugging) { - Smarty_Internal_Debug::start_cache($_template); - } - if ($this->handler->process($_template, $this) === false) { - $this->valid = false; - } else { - $this->processed = true; - } - if ($_template->smarty->debugging) { - Smarty_Internal_Debug::end_cache($_template); - } - } else { - $this->is_locked = true; - continue; - } - } else { - return $this->valid; - } - if ($this->valid && $_template->caching === Smarty::CACHING_LIFETIME_SAVED && $_template->properties['cache_lifetime'] >= 0 && (time() > ($_template->cached->timestamp + $_template->properties['cache_lifetime']))) { - $this->valid = false; - } - if ($_template->smarty->cache_locking) { - if (!$this->valid) { - $this->handler->acquireLock($_template->smarty, $this); - } elseif ($this->is_locked) { - $this->handler->releaseLock($_template->smarty, $this); - } - } - return $this->valid; - } - return $this->valid; - } - - /** - * Process cached template - * - * @param Smarty_Internal_Template $_template template object - */ - public function process(Smarty_Internal_Template $_template) { - if ($this->handler->process($_template, $this) === false) { - $this->valid = false; - } - if ($this->valid) { - $this->processed = true; - } else { - $this->processed = false; - } - } - - /** - * Render cached template - * - * @param Smarty_Internal_Template $_template - * - * @return string - * @throws Exception - */ - public function render(Smarty_Internal_Template $_template) { - if (!$this->processed) { - $this->process($_template); - } - return $_template->getRenderedTemplateCode(); - } - - /** - * Write this cache object to handler - * - * @param Smarty_Internal_Template $_template template object - * @param string $content content to cache - * - * @return boolean success - */ - public function write(Smarty_Internal_Template $_template, $content) { - if (!$_template->source->recompiled) { - if ($this->handler->writeCachedContent($_template, $content)) { - $this->content = null; - $this->timestamp = time(); - $this->exists = true; - $this->valid = true; - $this->processed = false; - if ($_template->smarty->cache_locking) { - $this->handler->releaseLock($_template->smarty, $this); - } - - return true; - } - $this->content = null; - $this->timestamp = false; - $this->exists = false; - $this->valid = false; - $this->processed = false; - } - - return false; - } - - /** - * Read cache content from handler - * - * @param Smarty_Internal_Template $_template template object - * - * @return string content - */ - public function read(Smarty_Internal_Template $_template) { - if (!$_template->source->recompiled) { - return $this->handler->readCachedContent($_template); - } - return false; - } - - /** - * Sanitize content and write it to cache resource - * - * @param Smarty_Internal_Template $_template - * @param string $content - * @param bool $no_output_filter - * - * @throws SmartyException - */ - public function updateCache(Smarty_Internal_Template $_template, $content, $no_output_filter) { - $_template->properties['has_nocache_code'] = false; - // get text between non-cached items - $cache_split = preg_split("!/\*%%SmartyNocache:{$_template->properties['nocache_hash']}%%\*\/(.+?)/\*/%%SmartyNocache:{$_template->properties['nocache_hash']}%%\*/!s", $content); - // get non-cached items - preg_match_all("!/\*%%SmartyNocache:{$_template->properties['nocache_hash']}%%\*\/(.+?)/\*/%%SmartyNocache:{$_template->properties['nocache_hash']}%%\*/!s", $content, $cache_parts); - $output = ''; - // loop over items, stitch back together - foreach ($cache_split as $curr_idx => $curr_split) { - // escape PHP tags in template content - $output .= preg_replace('/(<%|%>|<\?php|<\?|\?>|<script\s+language\s*=\s*[\"\']?\s*php\s*[\"\']?\s*>)/', "<?php echo '\$1'; ?>\n", $curr_split); - if (isset($cache_parts[0][$curr_idx])) { - $_template->properties['has_nocache_code'] = true; - $output .= $cache_parts[1][$curr_idx]; - } - } - if (!$no_output_filter && !$_template->has_nocache_code && (isset($_template->smarty->autoload_filters['output']) || isset($_template->smarty->registered_filters['output']))) { - $output = Smarty_Internal_Filter_Handler::runFilter('output', $output, $_template); - } - // write cache file content - $this->writeCachedContent($_template, $output); - } - - /** - * Writes the content to cache resource - * - * @param Smarty_Internal_Template $_template - * @param string $content - * - * @return bool - */ - public function writeCachedContent(Smarty_Internal_Template $_template, $content) { - if ($_template->source->recompiled || !($_template->caching == Smarty::CACHING_LIFETIME_CURRENT || $_template->caching == Smarty::CACHING_LIFETIME_SAVED)) { - // don't write cache file - return false; - } - $_template->properties['cache_lifetime'] = $_template->cache_lifetime; - $_template->properties['unifunc'] = 'content_' . str_replace(array('.', ','), '_', uniqid('', true)); - $content = Smarty_Internal_Extension_CodeFrame::create($_template, $content, true); - if (!empty($_template->properties['tpl_function'])) { - foreach ($_template->properties['tpl_function'] as $funcParam) { - if (is_file($funcParam['compiled_filepath'])) { - // read compiled file - $code = file_get_contents($funcParam['compiled_filepath']); - // grab template function - if (preg_match("/\/\* {$funcParam['call_name']} \*\/([\S\s]*?)\/\*\/ {$funcParam['call_name']} \*\//", $code, $match)) { - unset($code); - $content .= "<?php " . $match[0] . "?>\n"; - } - } - } - } - return $this->write($_template, $content); - } - - /** - * check client side cache - * - * @param Smarty_Internal_Template $_template - * @param string $content - */ - public function cacheModifiedCheck(Smarty_Internal_Template $_template, $content) { - $_isCached = $_template->isCached() && !$_template->has_nocache_code; - $_last_modified_date = @substr($_SERVER['HTTP_IF_MODIFIED_SINCE'], 0, strpos($_SERVER['HTTP_IF_MODIFIED_SINCE'], 'GMT') + 3); - if ($_isCached && $this->timestamp <= strtotime($_last_modified_date)) { - switch (PHP_SAPI) { - case 'cgi': // php-cgi < 5.3 - case 'cgi-fcgi': // php-cgi >= 5.3 - case 'fpm-fcgi': // php-fpm >= 5.3.3 - header('Status: 304 Not Modified'); - break; - - case 'cli': - if ( /* ^phpunit */ - !empty($_SERVER['SMARTY_PHPUNIT_DISABLE_HEADERS']) /* phpunit$ */ - ) { - $_SERVER['SMARTY_PHPUNIT_HEADERS'][] = '304 Not Modified'; - } - break; - - default: - header($_SERVER['SERVER_PROTOCOL'] . ' 304 Not Modified'); - break; - } - } else { - switch (PHP_SAPI) { - case 'cli': - if ( /* ^phpunit */ - !empty($_SERVER['SMARTY_PHPUNIT_DISABLE_HEADERS']) /* phpunit$ */ - ) { - $_SERVER['SMARTY_PHPUNIT_HEADERS'][] = 'Last-Modified: ' . gmdate('D, d M Y H:i:s', $this->timestamp) . ' GMT'; - } - break; - - default: - header('Last-Modified: ' . gmdate('D, d M Y H:i:s', $this->timestamp) . ' GMT'); - break; - } - echo $content; - } - } -} diff --git a/library/smarty/libs/sysplugins/smarty_template_compiled.php b/library/smarty/libs/sysplugins/smarty_template_compiled.php deleted file mode 100644 --- a/library/smarty/libs/sysplugins/smarty_template_compiled.php +++ /dev/null @@ -1,277 +0,0 @@ -<?php - -/** - * Smarty Resource Data Object - * Meta Data Container for Template Files - * - * @package Smarty - * @subpackage TemplateResources - * @author Rodney Rehm - * @property string $content compiled content - */ -class Smarty_Template_Compiled { - /** - * Compiled Filepath - * - * @var string - */ - public $filepath = null; - - /** - * Compiled Timestamp - * - * @var integer - */ - public $timestamp = null; - - /** - * Compiled Existence - * - * @var boolean - */ - public $exists = false; - - /** - * Compiled Content Loaded - * - * @var boolean - */ - public $processed = false; - /** - * Code of recompiled template resource - * - * @var string|null - */ - public $code = null; - - /** - * create Compiled Object container - */ - public function __construct() { - } - - /** - * get a Compiled Object of this source - * - * @param Smarty_Internal_Template $_template template object - * - * @return Smarty_Template_Compiled compiled object - */ - static function load($_template) { - if (!isset($_template->source)) { - $_template->loadSource(); - } - // check runtime cache - if (!$_template->source->recompiled && $_template->smarty->resource_caching) { - $_cache_key = $_template->source->unique_resource . '#'; - if ($_template->caching) { - $_cache_key .= 'caching#'; - } - $_cache_key .= $_template->compile_id; - if (isset($_template->source->compileds[$_cache_key])) { - return $_template->source->compileds[$_cache_key]; - } - } - $compiled = new Smarty_Template_Compiled(); - if (method_exists($_template->source->handler, 'populateCompiledFilepath')) { - $_template->source->handler->populateCompiledFilepath($compiled, $_template); - } else { - $compiled->populateCompiledFilepath($_template); - } - // runtime cache - if (!$_template->source->recompiled && $_template->smarty->resource_caching) { - $_template->source->compileds[$_cache_key] = $compiled; - } - return $compiled; - } - - /** - * populate Compiled Object with compiled filepath - * - * @param Smarty_Internal_Template $_template template object - **/ - public function populateCompiledFilepath(Smarty_Internal_Template $_template) { - $_compile_id = isset($_template->compile_id) ? preg_replace('![^\w\|]+!', '_', $_template->compile_id) : null; - if ($_template->source->isConfig) { - $_flag = '_' . ((int)$_template->smarty->config_read_hidden + (int)$_template->smarty->config_booleanize * 2 - + (int)$_template->smarty->config_overwrite * 4); - } else { - $_flag = '_' . ((int)$_template->smarty->merge_compiled_includes + (int)$_template->smarty->escape_html * 2); - } - $_filepath = $_template->source->uid . $_flag; - // if use_sub_dirs, break file into directories - if ($_template->smarty->use_sub_dirs) { - $_filepath = substr($_filepath, 0, 2) . DS - . substr($_filepath, 2, 2) . DS - . substr($_filepath, 4, 2) . DS - . $_filepath; - } - $_compile_dir_sep = $_template->smarty->use_sub_dirs ? DS : '^'; - if (isset($_compile_id)) { - $_filepath = $_compile_id . $_compile_dir_sep . $_filepath; - } - // caching token - if ($_template->caching) { - $_cache = '.cache'; - } else { - $_cache = ''; - } - $_compile_dir = $_template->smarty->getCompileDir(); - // set basename if not specified - $_basename = $_template->source->handler->getBasename($_template->source); - if ($_basename === null) { - $_basename = basename(preg_replace('![^\w\/]+!', '_', $_template->source->name)); - } - // separate (optional) basename by dot - if ($_basename) { - $_basename = '.' . $_basename; - } - - $this->filepath = $_compile_dir . $_filepath . '.' . $_template->source->type . $_basename . $_cache . '.php'; - $this->timestamp = $this->exists = is_file($this->filepath); - if ($this->exists) { - $this->timestamp = @filemtime($this->filepath); - } - } - - /** - * load compiled template or compile from source - * - * @param Smarty_Internal_Template $_template - * - * @throws Exception - */ - public function process(Smarty_Internal_Template $_template) { - $_smarty_tpl = $_template; - if ($_template->source->recompiled || !$_template->compiled->exists || $_template->smarty->force_compile) { - $this->compileTemplateSource($_template); - $compileCheck = $_template->smarty->compile_check; - $_template->smarty->compile_check = false; - if ($_template->source->recompiled) { - $level = ob_get_level(); - ob_start(); - try { - eval("?>" . $this->code); - } catch (Exception $e) { - while (ob_get_level() > $level) { - ob_end_clean(); - } - throw $e; - } - ob_get_clean(); - $this->code = null; - } else { - include($_template->compiled->filepath); - } - $_template->smarty->compile_check = $compileCheck; - } else { - include($_template->compiled->filepath); - if ($_template->mustCompile) { - $this->compileTemplateSource($_template); - $compileCheck = $_template->smarty->compile_check; - $_template->smarty->compile_check = false; - include($_template->compiled->filepath); - $_template->smarty->compile_check = $compileCheck; - } - } - $this->unifunc = $_template->properties['unifunc']; - $this->processed = true; - } - - /** - * render compiled template code - * - * @param Smarty_Internal_Template $_template - * - * @return string - * @throws Exception - */ - public function render(Smarty_Internal_Template $_template) { - - if (!$this->processed) { - $this->process($_template); - } - $_template->properties['unifunc'] = $this->unifunc; - return $_template->getRenderedTemplateCode(); - } - - /** - * compile template from source - * - * @param Smarty_Internal_Template $_template - * - * @return string - * @throws Exception - */ - public function compileTemplateSource(Smarty_Internal_Template $_template) { - if (!$_template->source->recompiled) { - $_template->properties['file_dependency'] = array(); - } - // compile locking - if (!$_template->source->recompiled) { - if ($saved_timestamp = $_template->compiled->timestamp) { - touch($_template->compiled->filepath); - } - } - // call compiler - try { - $code = $_template->compiler->compileTemplate($_template); - } catch (Exception $e) { - // restore old timestamp in case of error - if (!$_template->source->recompiled && $saved_timestamp) { - touch($_template->compiled->filepath, $saved_timestamp); - } - throw $e; - } - // compiling succeeded - if ($_template->compiler->write_compiled_code) { - // write compiled template - $this->write($_template, $code); - $code = ''; - } - // release compiler object to free memory - unset($_template->compiler); - return $code; - } - - /** - * Write compiled code by handler - * - * @param Smarty_Internal_Template $_template template object - * @param string $code compiled code - * - * @return boolean success - */ - public function write(Smarty_Internal_Template $_template, $code) { - if (!$_template->source->recompiled) { - $obj = new Smarty_Internal_Write_File(); - if ($obj->writeFile($this->filepath, $code, $_template->smarty) === true) { - $this->timestamp = $this->exists = is_file($this->filepath); - if ($this->exists) { - $this->timestamp = @filemtime($this->filepath); - return true; - } - } - return false; - } else { - $this->code = $code; - } - $this->timestamp = time(); - $this->exists = true; - return true; - } - - /** - * Read compiled content from handler - * - * @param Smarty_Internal_Template $_template template object - * - * @return string content - */ - public function read(Smarty_Internal_Template $_template) { - if (!$_template->source->recompiled) { - return file_get_contents($this->filepath); - } - return isset($this->content) ? $this->content : false; - } -} diff --git a/library/smarty/libs/sysplugins/smarty_template_config.php b/library/smarty/libs/sysplugins/smarty_template_config.php deleted file mode 100644 --- a/library/smarty/libs/sysplugins/smarty_template_config.php +++ /dev/null @@ -1,115 +0,0 @@ -<?php -/** - * Smarty Config Source Plugin - * - * @package Smarty - * @subpackage TemplateResources - * @author Uwe Tews - */ - -/** - * Smarty Connfig Resource Data Object - * Meta Data Container for Template Files - * - * @package Smarty - * @subpackage TemplateResources - * @author Uwe Tews - * @property integer $timestamp Source Timestamp - * @property boolean $exists Source Existence - * @property boolean $template Extended Template reference - * @property string $content Source Content - */ -class Smarty_Template_Config extends Smarty_Template_Source { - /** - * Name of the Class to compile this resource's contents with - * - * @var string - */ - public $compiler_class = 'Smarty_Internal_Config_File_Compiler'; - - /** - * Name of the Class to tokenize this resource's contents with - * - * @var string - */ - public $template_lexer_class = 'Smarty_Internal_Configfilelexer'; - - /** - * Name of the Class to parse this resource's contents with - * - * @var string - */ - public $template_parser_class = 'Smarty_Internal_Configfileparser'; - - /** - * array of section names, single section or null - * - * @var null|string|array - */ - public $config_sections = null; - - /** - * scope into which the config variables shall be loaded - * - * @var string - */ - public $scope = 'local'; - - /** - * Flag that source is a config file - * - * @var bool - */ - public $isConfig = true; - - /** - * create Source Object container - * - * @param Smarty_Resource $handler Resource Handler this source object communicates with - * @param Smarty $smarty Smarty instance this source object belongs to - * @param string $resource full template_resource - * @param string $type type of resource - * @param string $name resource name - */ - public function __construct(Smarty_Resource $handler, Smarty $smarty, $resource, $type, $name) { - $this->handler = clone $handler; // Note: prone to circular references - $this->resource = $resource; - $this->type = $type; - $this->name = $name; - $this->smarty = $smarty; - } - - /** - * initialize Source Object for given resource - * Either [$_template] or [$smarty, $template_resource] must be specified - * - * @param Smarty_Internal_Template $_template template object - * @param Smarty $smarty smarty object - * @param string $template_resource resource identifier - * - * @return Smarty_Template_Source Source Object - * @throws SmartyException - */ - public static function load(Smarty_Internal_Template $_template = null, Smarty $smarty = null, $template_resource = null) { - static $_incompatible_resources = array('extends' => true, 'php' => true); - $smarty = $_template->smarty; - $template_resource = $_template->template_resource; - if (empty($template_resource)) { - throw new SmartyException('Missing config name'); - } - // parse resource_name, load resource handler - list($name, $type) = Smarty_Resource::parseResourceName($template_resource, $smarty->default_config_type); - // make sure configs are not loaded via anything smarty can't handle - if (isset($_incompatible_resources[$type])) { - throw new SmartyException ("Unable to use resource '{$type}' for config"); - } - $resource = Smarty_Resource::load($smarty, $type); - $source = new Smarty_Template_Config($resource, $smarty, $template_resource, $type, $name); - $resource->populate($source, $_template); - if ((!isset($source->exists) || !$source->exists) && isset($_template->smarty->default_config_handler_func)) { - Smarty_Internal_Extension_DefaultTemplateHandler::_getDefault($_template, $source, $resource); - } - $source->unique_resource = $resource->buildUniqueResourceName($smarty, $name, true); - return $source; - } -} diff --git a/library/smarty/libs/sysplugins/smarty_template_source.php b/library/smarty/libs/sysplugins/smarty_template_source.php deleted file mode 100644 --- a/library/smarty/libs/sysplugins/smarty_template_source.php +++ /dev/null @@ -1,278 +0,0 @@ -<?php - -/** - * Smarty Resource Data Object - * Meta Data Container for Template Files - * - * @package Smarty - * @subpackage TemplateResources - * @author Rodney Rehm - * @property integer $timestamp Source Timestamp - * @property boolean $exists Source Existence - * @property boolean $template Extended Template reference - * @property string $content Source Content - */ -class Smarty_Template_Source { - /** - * Name of the Class to compile this resource's contents with - * - * @var string - */ - public $compiler_class = null; - - /** - * Name of the Class to tokenize this resource's contents with - * - * @var string - */ - public $template_lexer_class = null; - - /** - * Name of the Class to parse this resource's contents with - * - * @var string - */ - public $template_parser_class = null; - - /** - * Unique Template ID - * - * @var string - */ - public $uid = null; - - /** - * Template Resource (Smarty_Internal_Template::$template_resource) - * - * @var string - */ - public $resource = null; - - /** - * Resource Type - * - * @var string - */ - public $type = null; - - /** - * Resource Name - * - * @var string - */ - public $name = null; - - /** - * Unique Resource Name - * - * @var string - */ - public $unique_resource = null; - - /** - * Source Filepath - * - * @var string - */ - public $filepath = null; - /** - * Source File Base name - * - * @var string - */ - public $basename = null; - - /** - * The Components an extended template is made of - * - * @var array - */ - public $components = null; - - /** - * Resource Handler - * - * @var Smarty_Resource - */ - public $handler = null; - - /** - * Smarty instance - * - * @var Smarty - */ - public $smarty = null; - /** - * Resource is source - * - * @var bool - */ - public $isConfig = false; - /** - * Source is bypassing compiler - * - * @var boolean - */ - public $uncompiled = false; - - /** - * Source must be recompiled on every occasion - * - * @var boolean - */ - public $recompiled = false; - /** - * cache for Smarty_Template_Compiled instances - * - * @var array - */ - public $compileds = array(); - - /** - * create Source Object container - * - * @param Smarty_Resource $handler Resource Handler this source object communicates with - * @param Smarty $smarty Smarty instance this source object belongs to - * @param string $resource full template_resource - * @param string $type type of resource - * @param string $name resource name - * - * @internal param string $unique_resource unique resource name - */ - public function __construct(Smarty_Resource $handler, Smarty $smarty, $resource, $type, $name) { - $this->handler = $handler; // Note: prone to circular references - - $this->recompiled = $handler->recompiled; - $this->uncompiled = $handler->uncompiled; - $this->compiler_class = $handler->compiler_class; - $this->template_lexer_class = $handler->template_lexer_class; - $this->template_parser_class = $handler->template_parser_class; - - $this->smarty = $smarty; - $this->resource = $resource; - $this->type = $type; - $this->name = $name; - } - - /** - * initialize Source Object for given resource - * Either [$_template] or [$smarty, $template_resource] must be specified - * - * @param Smarty_Internal_Template $_template template object - * @param Smarty $smarty smarty object - * @param string $template_resource resource identifier - * - * @return Smarty_Template_Source Source Object - * @throws SmartyException - */ - public static function load(Smarty_Internal_Template $_template = null, Smarty $smarty = null, $template_resource = null) { - if ($_template) { - $smarty = $_template->smarty; - $template_resource = $_template->template_resource; - } - if (empty($template_resource)) { - throw new SmartyException('Missing template name'); - } - // parse resource_name, load resource handler, identify unique resource name - list($name, $type) = Smarty_Resource::parseResourceName($template_resource, $smarty->default_resource_type); - $resource = Smarty_Resource::load($smarty, $type); - // if resource is not recompiling and resource name is not dotted we can check the source cache - if ($smarty->resource_caching && !$resource->recompiled && !(isset($name[1]) && $name[0] == '.' && ($name[1] == '.' || $name[1] == '/'))) { - $unique_resource = $resource->buildUniqueResourceName($smarty, $name); - if (isset($smarty->source_objects[$unique_resource])) { - return $smarty->source_objects[$unique_resource]; - } - } else { - $unique_resource = null; - } - // create new source object - $source = new Smarty_Template_Source($resource, $smarty, $template_resource, $type, $name); - $resource->populate($source, $_template); - if ((!isset($source->exists) || !$source->exists) && isset($_template->smarty->default_template_handler_func)) { - Smarty_Internal_Extension_DefaultTemplateHandler::_getDefault($_template, $source, $resObj); - } - // on recompiling resources we are done - if ($smarty->resource_caching && !$resource->recompiled) { - // may by we have already $unique_resource - $is_relative = false; - if (!isset($unique_resource)) { - $is_relative = isset($name[1]) && $name[0] == '.' && ($name[1] == '.' || $name[1] == '/') && - ($type == 'file' || (isset($_template->parent->source) && $_template->parent->source->type == 'extends')); - $unique_resource = $resource->buildUniqueResourceName($smarty, $is_relative ? $source->filepath . $name : $name); - } - $source->unique_resource = $unique_resource; - // save in runtime cache if not relative - if (!$is_relative) { - $smarty->source_objects[$unique_resource] = $source; - } - } - return $source; - } - - /** - * render the uncompiled source - * - * @param Smarty_Internal_Template $_template template object - */ - public function renderUncompiled(Smarty_Internal_Template $_template) { - $level = ob_get_level(); - ob_start(); - try { - $this->handler->renderUncompiled($_template->source, $_template); - return ob_get_clean(); - } catch (Exception $e) { - while (ob_get_level() > $level) { - ob_end_clean(); - } - throw $e; - } - } - - /** - * <<magic>> Generic Setter. - * - * @param string $property_name valid: timestamp, exists, content, template - * @param mixed $value new value (is not checked) - * - * @throws SmartyException if $property_name is not valid - */ - public function __set($property_name, $value) { - switch ($property_name) { - // regular attributes - case 'timestamp': - case 'exists': - case 'content': - // required for extends: only - case 'template': - $this->$property_name = $value; - break; - - default: - throw new SmartyException("source property '$property_name' does not exist."); - } - } - - /** - * <<magic>> Generic getter. - * - * @param string $property_name valid: timestamp, exists, content - * - * @return mixed - * @throws SmartyException if $property_name is not valid - */ - public function __get($property_name) { - switch ($property_name) { - case 'timestamp': - case 'exists': - $this->handler->populateTimestamp($this); - - return $this->$property_name; - - case 'content': - return $this->content = $this->handler->getContent($this); - - default: - throw new SmartyException("source property '$property_name' does not exist."); - } - } -} diff --git a/library/smarty/libs/sysplugins/smarty_undefined_variable.php b/library/smarty/libs/sysplugins/smarty_undefined_variable.php deleted file mode 100644 --- a/library/smarty/libs/sysplugins/smarty_undefined_variable.php +++ /dev/null @@ -1,34 +0,0 @@ -<?php - -/** - * class for undefined variable object - * This class defines an object for undefined variable handling - * - * @package Smarty - * @subpackage Template - */ -class Smarty_Undefined_Variable { - /** - * Returns FALSE for 'nocache' and NULL otherwise. - * - * @param string $name - * - * @return bool - */ - public function __get($name) { - if ($name == 'nocache') { - return false; - } else { - return null; - } - } - - /** - * Always returns an empty string. - * - * @return string - */ - public function __toString() { - return ""; - } -} diff --git a/library/smarty/libs/sysplugins/smarty_variable.php b/library/smarty/libs/sysplugins/smarty_variable.php deleted file mode 100644 --- a/library/smarty/libs/sysplugins/smarty_variable.php +++ /dev/null @@ -1,52 +0,0 @@ -<?php - -/** - * class for the Smarty variable object - * This class defines the Smarty variable object - * - * @package Smarty - * @subpackage Template - */ -class Smarty_Variable { - /** - * template variable - * - * @var mixed - */ - public $value = null; - /** - * if true any output of this variable will be not cached - * - * @var boolean - */ - public $nocache = false; - /** - * the scope the variable will have (local,parent or root) - * - * @var int - */ - public $scope = Smarty::SCOPE_LOCAL; - - /** - * create Smarty variable object - * - * @param mixed $value the value to assign - * @param boolean $nocache if true any output of this variable will be not cached - * @param int $scope the scope the variable will have (local,parent or root) - */ - public function __construct($value = null, $nocache = false, $scope = Smarty::SCOPE_LOCAL) { - $this->value = $value; - $this->nocache = $nocache; - $this->scope = $scope; - } - - /** - * <<magic>> String conversion - * - * @return string - */ - public function __toString() { - return (string)$this->value; - } -} - diff --git a/library/smarty/libs/sysplugins/smartycompilerexception.php b/library/smarty/libs/sysplugins/smartycompilerexception.php deleted file mode 100644 --- a/library/smarty/libs/sysplugins/smartycompilerexception.php +++ /dev/null @@ -1,37 +0,0 @@ -<?php - -/** - * Smarty compiler exception class - * - * @package Smarty - */ -class SmartyCompilerException extends SmartyException { - public function __toString() { - return ' --> Smarty Compiler: ' . $this->message . ' <-- '; - } - - /** - * The line number of the template error - * - * @type int|null - */ - public $line = null; - /** - * The template source snippet relating to the error - * - * @type string|null - */ - public $source = null; - /** - * The raw text of the error message - * - * @type string|null - */ - public $desc = null; - /** - * The resource identifier or template name - * - * @type string|null - */ - public $template = null; -} diff --git a/library/smarty/libs/sysplugins/smartyexception.php b/library/smarty/libs/sysplugins/smartyexception.php deleted file mode 100644 --- a/library/smarty/libs/sysplugins/smartyexception.php +++ /dev/null @@ -1,14 +0,0 @@ -<?php - -/** - * Smarty exception class - * - * @package Smarty - */ -class SmartyException extends Exception { - public static $escape = false; - - public function __toString() { - return ' --> Smarty: ' . (self::$escape ? htmlentities($this->message) : $this->message) . ' <-- '; - } -}