mirror of
https://github.com/smarty-php/smarty.git
synced 2025-08-05 10:54:27 +02:00
Merge branch 'trunk'
This commit is contained in:
22
.gitattributes
vendored
Normal file
22
.gitattributes
vendored
Normal file
@@ -0,0 +1,22 @@
|
||||
# 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
|
218
.gitignore
vendored
Normal file
218
.gitignore
vendored
Normal file
@@ -0,0 +1,218 @@
|
||||
#################
|
||||
## 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\
|
29
COMPOSER_RELEASE_NOTES.txt
Normal file
29
COMPOSER_RELEASE_NOTES.txt
Normal file
@@ -0,0 +1,29 @@
|
||||
|
||||
|
||||
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"
|
||||
}
|
||||
|
@@ -1,10 +1,21 @@
|
||||
===== 3.1.22-dev ===== (xx.xx.2014)
|
||||
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)
|
||||
|
||||
|
322
demo/plugins/cacheresource.pdo.php
Normal file
322
demo/plugins/cacheresource.pdo.php
Normal file
@@ -0,0 +1,322 @@
|
||||
<?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}`";
|
||||
}
|
||||
}
|
||||
|
43
demo/plugins/cacheresource.pdo_gzip.php
Normal file
43
demo/plugins/cacheresource.pdo_gzip.php
Normal file
@@ -0,0 +1,43 @@
|
||||
<?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);
|
||||
}
|
||||
}
|
||||
|
@@ -1,5 +1,5 @@
|
||||
<HTML>
|
||||
<HEAD>
|
||||
<TITLE>{$title} - {$Name}</TITLE>
|
||||
<TITLE>{$title} - {$Name}</TITLE>
|
||||
</HEAD>
|
||||
<BODY bgcolor="#ffffff">
|
||||
|
@@ -2,7 +2,10 @@
|
||||
/**
|
||||
* Project: Smarty: the PHP compiling template engine
|
||||
* File: Smarty.class.php
|
||||
<<<<<<< HEAD
|
||||
* SVN: $Id$
|
||||
=======
|
||||
>>>>>>> trunk
|
||||
* 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
|
||||
@@ -24,7 +27,11 @@
|
||||
* @author Uwe Tews
|
||||
* @author Rodney Rehm
|
||||
* @package Smarty
|
||||
<<<<<<< HEAD
|
||||
* @version 3.1-DEV
|
||||
=======
|
||||
* @version 3.1.22-dev
|
||||
>>>>>>> trunk
|
||||
*/
|
||||
|
||||
/**
|
||||
@@ -110,7 +117,11 @@ class Smarty extends Smarty_Internal_TemplateBase
|
||||
/**
|
||||
* smarty version
|
||||
*/
|
||||
<<<<<<< HEAD
|
||||
const SMARTY_VERSION = 'Smarty-3.1.21';
|
||||
=======
|
||||
const SMARTY_VERSION = 'Smarty-3.1.22-dev/1';
|
||||
>>>>>>> trunk
|
||||
|
||||
/**
|
||||
* define variable scopes
|
||||
|
@@ -87,9 +87,13 @@ class Smarty_Internal_Compile_Include extends Smarty_Internal_CompileBase
|
||||
// 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 ($_attr['nocache'] === true) {
|
||||
$compiler->tag_nocache = true;
|
||||
}
|
||||
|
||||
// set default when in nocache mode
|
||||
// if ($compiler->template->caching && ($compiler->nocache || $compiler->tag_nocache || $compiler->forceNocache == 2)) {
|
||||
if ($compiler->template->caching && ((!$compiler->inheritance && !$compiler->nocache && !$compiler->tag_nocache) || ($compiler->inheritance && ($compiler->nocache || $compiler->tag_nocache)))) {
|
||||
if ($compiler->template->caching && !$compiler->nocache && !$compiler->tag_nocache) {
|
||||
//if ($compiler->template->caching && ((!$compiler->inheritance && !$compiler->nocache && !$compiler->tag_nocache) || ($compiler->inheritance && ($compiler->nocache || $compiler->tag_nocache)))) {
|
||||
$_caching = self::CACHING_NOCACHE_CODE;
|
||||
}
|
||||
/*
|
||||
@@ -119,14 +123,6 @@ class Smarty_Internal_Compile_Include extends Smarty_Internal_CompileBase
|
||||
if ($_attr['caching'] === true) {
|
||||
$_caching = Smarty::CACHING_LIFETIME_CURRENT;
|
||||
}
|
||||
if ($_attr['nocache'] === true) {
|
||||
$compiler->tag_nocache = true;
|
||||
if ($merge_compiled_includes) {
|
||||
$_caching = self::CACHING_NOCACHE_CODE;
|
||||
} else {
|
||||
$_caching = Smarty::CACHING_OFF;
|
||||
}
|
||||
}
|
||||
|
||||
$has_compiled_template = false;
|
||||
if ($merge_compiled_includes && $_attr['inline'] !== true) {
|
||||
@@ -153,33 +149,28 @@ class Smarty_Internal_Compile_Include extends Smarty_Internal_CompileBase
|
||||
}
|
||||
if ($merge_compiled_includes) {
|
||||
if ($compiler->template->caching && ($compiler->tag_nocache || $compiler->nocache) && $_caching != self::CACHING_NOCACHE_CODE) {
|
||||
$merge_compiled_includes = false;
|
||||
// $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');
|
||||
}
|
||||
}
|
||||
}
|
||||
if ($merge_compiled_includes) {
|
||||
// we must observe different compile_id
|
||||
$uid = sha1($_compile_id);
|
||||
// we must observe different compile_id and caching
|
||||
$uid = sha1($_compile_id . ($_caching ? '--caching' : '--nocaching'));
|
||||
$tpl_name = null;
|
||||
$nocache = false;
|
||||
/** @var Smarty_Internal_Template $_smarty_tpl
|
||||
* used in evaluated code
|
||||
*/
|
||||
$_smarty_tpl = $compiler->template;
|
||||
eval("\$tpl_name = $include_file;");
|
||||
if (!isset($compiler->smarty->merged_templates_func[$tpl_name][$uid])) {
|
||||
$tpl = new $compiler->smarty->template_class ($tpl_name, $compiler->smarty, $compiler->template, $compiler->template->cache_id, $compiler->template->compile_id);
|
||||
$tpl = new $compiler->smarty->template_class ($tpl_name, $compiler->smarty, $compiler->template, $compiler->template->cache_id, $compiler->template->compile_id, $_caching);
|
||||
// save unique function name
|
||||
$compiler->smarty->merged_templates_func[$tpl_name][$uid]['func'] = $tpl->properties['unifunc'] = 'content_' . str_replace(array('.', ','), '_', uniqid('', true));
|
||||
// use current nocache hash for inlined code
|
||||
$compiler->smarty->merged_templates_func[$tpl_name][$uid]['nocache_hash'] = $tpl->properties['nocache_hash'] = $compiler->template->properties['nocache_hash'];
|
||||
if ($compiler->template->caching && $_caching == self::CACHING_NOCACHE_CODE) {
|
||||
// all code must be nocache
|
||||
$nocache = true;
|
||||
}
|
||||
if ($compiler->inheritance) {
|
||||
if ($compiler->inheritance) {
|
||||
$tpl->compiler->inheritance = true;
|
||||
}
|
||||
// make sure whole chain gets compiled
|
||||
@@ -187,7 +178,7 @@ class Smarty_Internal_Compile_Include extends Smarty_Internal_CompileBase
|
||||
if (!($tpl->source->uncompiled) && $tpl->source->exists) {
|
||||
|
||||
// get compiled code
|
||||
$compiled_code = $tpl->compiler->compileTemplate($tpl, $nocache);
|
||||
$compiled_code = $tpl->compiler->compileTemplate($tpl);
|
||||
// release compiler object to free memory
|
||||
unset($tpl->compiler);
|
||||
// merge compiled code for {function} tags
|
||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user