⬆️ Update libraries.

Updating smarty/smarty (v3.1.31 => v3.1.32)
Updating sabre/vobject (4.1.5 => 4.1.6)
This commit is contained in:
Klaus Weidenbach 2018-05-04 22:44:22 +02:00
parent 30d0f9888c
commit dafe0afa65
186 changed files with 7468 additions and 6076 deletions

270
composer.lock generated
View File

@ -1,10 +1,10 @@
{ {
"_readme": [ "_readme": [
"This file locks the dependencies of your project to a known state", "This file locks the dependencies of your project to a known state",
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically" "This file is @generated automatically"
], ],
"content-hash": "516114a0fbd804e5234ebeacbac30376", "content-hash": "ca5770d3c97cc1d0375413eeb61758ab",
"packages": [ "packages": [
{ {
"name": "bshaffer/oauth2-server-php", "name": "bshaffer/oauth2-server-php",
@ -640,16 +640,16 @@
}, },
{ {
"name": "sabre/vobject", "name": "sabre/vobject",
"version": "4.1.5", "version": "4.1.6",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/sabre-io/vobject.git", "url": "https://github.com/sabre-io/vobject.git",
"reference": "0928660e92d46d2d24336a6db320636aa3a75414" "reference": "122cacbdea2c6133ac04db86ec05854beef75adf"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/sabre-io/vobject/zipball/0928660e92d46d2d24336a6db320636aa3a75414", "url": "https://api.github.com/repos/sabre-io/vobject/zipball/122cacbdea2c6133ac04db86ec05854beef75adf",
"reference": "0928660e92d46d2d24336a6db320636aa3a75414", "reference": "122cacbdea2c6133ac04db86ec05854beef75adf",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -733,7 +733,7 @@
"xCal", "xCal",
"xCard" "xCard"
], ],
"time": "2018-03-08T21:06:39+00:00" "time": "2018-04-20T07:22:50+00:00"
}, },
{ {
"name": "sabre/xml", "name": "sabre/xml",
@ -863,16 +863,16 @@
}, },
{ {
"name": "smarty/smarty", "name": "smarty/smarty",
"version": "v3.1.31", "version": "v3.1.32",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/smarty-php/smarty.git", "url": "https://github.com/smarty-php/smarty.git",
"reference": "c7d42e4a327c402897dd587871434888fde1e7a9" "reference": "ac9d4b587e5bf53381e21881820a9830765cb459"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/smarty-php/smarty/zipball/c7d42e4a327c402897dd587871434888fde1e7a9", "url": "https://api.github.com/repos/smarty-php/smarty/zipball/ac9d4b587e5bf53381e21881820a9830765cb459",
"reference": "c7d42e4a327c402897dd587871434888fde1e7a9", "reference": "ac9d4b587e5bf53381e21881820a9830765cb459",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -912,7 +912,7 @@
"keywords": [ "keywords": [
"templating" "templating"
], ],
"time": "2016-12-14T21:57:25+00:00" "time": "2018-04-24T14:53:33+00:00"
} }
], ],
"packages-dev": [ "packages-dev": [
@ -1118,27 +1118,27 @@
}, },
{ {
"name": "behat/mink-browserkit-driver", "name": "behat/mink-browserkit-driver",
"version": "v1.3.2", "version": "1.3.3",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/minkphp/MinkBrowserKitDriver.git", "url": "https://github.com/minkphp/MinkBrowserKitDriver.git",
"reference": "10e67fb4a295efcd62ea0bf16025a85ea19534fb" "reference": "1b9a7ce903cfdaaec5fb32bfdbb26118343662eb"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/minkphp/MinkBrowserKitDriver/zipball/10e67fb4a295efcd62ea0bf16025a85ea19534fb", "url": "https://api.github.com/repos/minkphp/MinkBrowserKitDriver/zipball/1b9a7ce903cfdaaec5fb32bfdbb26118343662eb",
"reference": "10e67fb4a295efcd62ea0bf16025a85ea19534fb", "reference": "1b9a7ce903cfdaaec5fb32bfdbb26118343662eb",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"behat/mink": "^1.7.1@dev", "behat/mink": "^1.7.1@dev",
"php": ">=5.3.6", "php": ">=5.3.6",
"symfony/browser-kit": "~2.3|~3.0", "symfony/browser-kit": "~2.3|~3.0|~4.0",
"symfony/dom-crawler": "~2.3|~3.0" "symfony/dom-crawler": "~2.3|~3.0|~4.0"
}, },
"require-dev": { "require-dev": {
"silex/silex": "~1.2", "mink/driver-testsuite": "dev-master",
"symfony/phpunit-bridge": "~2.7|~3.0" "symfony/http-kernel": "~2.3|~3.0|~4.0"
}, },
"type": "mink-driver", "type": "mink-driver",
"extra": { "extra": {
@ -1170,7 +1170,7 @@
"browser", "browser",
"testing" "testing"
], ],
"time": "2016-03-05T08:59:47+00:00" "time": "2018-05-02T09:25:31+00:00"
}, },
{ {
"name": "behat/mink-extension", "name": "behat/mink-extension",
@ -1472,16 +1472,16 @@
}, },
{ {
"name": "guzzlehttp/guzzle", "name": "guzzlehttp/guzzle",
"version": "6.3.0", "version": "6.3.3",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/guzzle/guzzle.git", "url": "https://github.com/guzzle/guzzle.git",
"reference": "f4db5a78a5ea468d4831de7f0bf9d9415e348699" "reference": "407b0cb880ace85c9b63c5f9551db498cb2d50ba"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/guzzle/guzzle/zipball/f4db5a78a5ea468d4831de7f0bf9d9415e348699", "url": "https://api.github.com/repos/guzzle/guzzle/zipball/407b0cb880ace85c9b63c5f9551db498cb2d50ba",
"reference": "f4db5a78a5ea468d4831de7f0bf9d9415e348699", "reference": "407b0cb880ace85c9b63c5f9551db498cb2d50ba",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -1491,7 +1491,7 @@
}, },
"require-dev": { "require-dev": {
"ext-curl": "*", "ext-curl": "*",
"phpunit/phpunit": "^4.0 || ^5.0", "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0",
"psr/log": "^1.0" "psr/log": "^1.0"
}, },
"suggest": { "suggest": {
@ -1500,7 +1500,7 @@
"type": "library", "type": "library",
"extra": { "extra": {
"branch-alias": { "branch-alias": {
"dev-master": "6.2-dev" "dev-master": "6.3-dev"
} }
}, },
"autoload": { "autoload": {
@ -1533,7 +1533,7 @@
"rest", "rest",
"web service" "web service"
], ],
"time": "2017-06-22T18:50:49+00:00" "time": "2018-04-22T15:46:56+00:00"
}, },
{ {
"name": "guzzlehttp/promises", "name": "guzzlehttp/promises",
@ -1914,25 +1914,28 @@
}, },
{ {
"name": "php-mock/php-mock-phpunit", "name": "php-mock/php-mock-phpunit",
"version": "2.0.1", "version": "2.1.1",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/php-mock/php-mock-phpunit.git", "url": "https://github.com/php-mock/php-mock-phpunit.git",
"reference": "b42fc41ecb7538564067527f6c30b8854f149d32" "reference": "ff1cc1d4e7478ce74221e05742588619bee84f69"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/php-mock/php-mock-phpunit/zipball/b42fc41ecb7538564067527f6c30b8854f149d32", "url": "https://api.github.com/repos/php-mock/php-mock-phpunit/zipball/ff1cc1d4e7478ce74221e05742588619bee84f69",
"reference": "b42fc41ecb7538564067527f6c30b8854f149d32", "reference": "ff1cc1d4e7478ce74221e05742588619bee84f69",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": ">=7", "php": ">=7",
"php-mock/php-mock-integration": "^2", "php-mock/php-mock-integration": "^2",
"phpunit/phpunit": "^6 <6.5" "phpunit/phpunit": "^6 || ^7"
}, },
"type": "library", "type": "library",
"autoload": { "autoload": {
"files": [
"autoload.php"
],
"psr-4": { "psr-4": {
"phpmock\\phpunit\\": "classes/" "phpmock\\phpunit\\": "classes/"
} }
@ -1961,7 +1964,7 @@
"test", "test",
"test double" "test double"
], ],
"time": "2017-12-02T09:49:02+00:00" "time": "2018-04-06T13:54:43+00:00"
}, },
{ {
"name": "phpdocumentor/reflection-common", "name": "phpdocumentor/reflection-common",
@ -2111,23 +2114,23 @@
}, },
{ {
"name": "phpspec/prophecy", "name": "phpspec/prophecy",
"version": "1.7.5", "version": "1.7.6",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/phpspec/prophecy.git", "url": "https://github.com/phpspec/prophecy.git",
"reference": "dfd6be44111a7c41c2e884a336cc4f461b3b2401" "reference": "33a7e3c4fda54e912ff6338c48823bd5c0f0b712"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/phpspec/prophecy/zipball/dfd6be44111a7c41c2e884a336cc4f461b3b2401", "url": "https://api.github.com/repos/phpspec/prophecy/zipball/33a7e3c4fda54e912ff6338c48823bd5c0f0b712",
"reference": "dfd6be44111a7c41c2e884a336cc4f461b3b2401", "reference": "33a7e3c4fda54e912ff6338c48823bd5c0f0b712",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"doctrine/instantiator": "^1.0.2", "doctrine/instantiator": "^1.0.2",
"php": "^5.3|^7.0", "php": "^5.3|^7.0",
"phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0", "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0",
"sebastian/comparator": "^1.1|^2.0", "sebastian/comparator": "^1.1|^2.0|^3.0",
"sebastian/recursion-context": "^1.0|^2.0|^3.0" "sebastian/recursion-context": "^1.0|^2.0|^3.0"
}, },
"require-dev": { "require-dev": {
@ -2170,7 +2173,7 @@
"spy", "spy",
"stub" "stub"
], ],
"time": "2018-02-19T10:16:54+00:00" "time": "2018-04-18T13:57:24+00:00"
}, },
{ {
"name": "phpunit/dbunit", "name": "phpunit/dbunit",
@ -2226,16 +2229,16 @@
}, },
{ {
"name": "phpunit/php-code-coverage", "name": "phpunit/php-code-coverage",
"version": "5.3.0", "version": "5.3.2",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/sebastianbergmann/php-code-coverage.git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
"reference": "661f34d0bd3f1a7225ef491a70a020ad23a057a1" "reference": "c89677919c5dd6d3b3852f230a663118762218ac"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/661f34d0bd3f1a7225ef491a70a020ad23a057a1", "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/c89677919c5dd6d3b3852f230a663118762218ac",
"reference": "661f34d0bd3f1a7225ef491a70a020ad23a057a1", "reference": "c89677919c5dd6d3b3852f230a663118762218ac",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -2285,7 +2288,7 @@
"testing", "testing",
"xunit" "xunit"
], ],
"time": "2017-12-06T09:29:45+00:00" "time": "2018-04-06T15:36:58+00:00"
}, },
{ {
"name": "phpunit/php-file-iterator", "name": "phpunit/php-file-iterator",
@ -2475,16 +2478,16 @@
}, },
{ {
"name": "phpunit/phpunit", "name": "phpunit/phpunit",
"version": "6.4.4", "version": "6.5.8",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/sebastianbergmann/phpunit.git", "url": "https://github.com/sebastianbergmann/phpunit.git",
"reference": "562f7dc75d46510a4ed5d16189ae57fbe45a9932" "reference": "4f21a3c6b97c42952fd5c2837bb354ec0199b97b"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/562f7dc75d46510a4ed5d16189ae57fbe45a9932", "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/4f21a3c6b97c42952fd5c2837bb354ec0199b97b",
"reference": "562f7dc75d46510a4ed5d16189ae57fbe45a9932", "reference": "4f21a3c6b97c42952fd5c2837bb354ec0199b97b",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -2498,12 +2501,12 @@
"phar-io/version": "^1.0", "phar-io/version": "^1.0",
"php": "^7.0", "php": "^7.0",
"phpspec/prophecy": "^1.7", "phpspec/prophecy": "^1.7",
"phpunit/php-code-coverage": "^5.2.2", "phpunit/php-code-coverage": "^5.3",
"phpunit/php-file-iterator": "^1.4.2", "phpunit/php-file-iterator": "^1.4.3",
"phpunit/php-text-template": "^1.2.1", "phpunit/php-text-template": "^1.2.1",
"phpunit/php-timer": "^1.0.9", "phpunit/php-timer": "^1.0.9",
"phpunit/phpunit-mock-objects": "^4.0.3", "phpunit/phpunit-mock-objects": "^5.0.5",
"sebastian/comparator": "^2.0.2", "sebastian/comparator": "^2.1",
"sebastian/diff": "^2.0", "sebastian/diff": "^2.0",
"sebastian/environment": "^3.1", "sebastian/environment": "^3.1",
"sebastian/exporter": "^3.1", "sebastian/exporter": "^3.1",
@ -2529,7 +2532,7 @@
"type": "library", "type": "library",
"extra": { "extra": {
"branch-alias": { "branch-alias": {
"dev-master": "6.4.x-dev" "dev-master": "6.5.x-dev"
} }
}, },
"autoload": { "autoload": {
@ -2555,33 +2558,33 @@
"testing", "testing",
"xunit" "xunit"
], ],
"time": "2017-11-08T11:26:09+00:00" "time": "2018-04-10T11:38:34+00:00"
}, },
{ {
"name": "phpunit/phpunit-mock-objects", "name": "phpunit/phpunit-mock-objects",
"version": "4.0.4", "version": "5.0.6",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git",
"reference": "2f789b59ab89669015ad984afa350c4ec577ade0" "reference": "33fd41a76e746b8fa96d00b49a23dadfa8334cdf"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/2f789b59ab89669015ad984afa350c4ec577ade0", "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/33fd41a76e746b8fa96d00b49a23dadfa8334cdf",
"reference": "2f789b59ab89669015ad984afa350c4ec577ade0", "reference": "33fd41a76e746b8fa96d00b49a23dadfa8334cdf",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"doctrine/instantiator": "^1.0.5", "doctrine/instantiator": "^1.0.5",
"php": "^7.0", "php": "^7.0",
"phpunit/php-text-template": "^1.2.1", "phpunit/php-text-template": "^1.2.1",
"sebastian/exporter": "^3.0" "sebastian/exporter": "^3.1"
}, },
"conflict": { "conflict": {
"phpunit/phpunit": "<6.0" "phpunit/phpunit": "<6.0"
}, },
"require-dev": { "require-dev": {
"phpunit/phpunit": "^6.0" "phpunit/phpunit": "^6.5"
}, },
"suggest": { "suggest": {
"ext-soap": "*" "ext-soap": "*"
@ -2589,7 +2592,7 @@
"type": "library", "type": "library",
"extra": { "extra": {
"branch-alias": { "branch-alias": {
"dev-master": "4.0.x-dev" "dev-master": "5.0.x-dev"
} }
}, },
"autoload": { "autoload": {
@ -2604,7 +2607,7 @@
"authors": [ "authors": [
{ {
"name": "Sebastian Bergmann", "name": "Sebastian Bergmann",
"email": "sb@sebastian-bergmann.de", "email": "sebastian@phpunit.de",
"role": "lead" "role": "lead"
} }
], ],
@ -2614,7 +2617,7 @@
"mock", "mock",
"xunit" "xunit"
], ],
"time": "2017-08-03T14:08:16+00:00" "time": "2018-01-06T05:45:45+00:00"
}, },
{ {
"name": "psr/container", "name": "psr/container",
@ -3276,16 +3279,16 @@
}, },
{ {
"name": "symfony/browser-kit", "name": "symfony/browser-kit",
"version": "v3.4.6", "version": "v3.4.9",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/browser-kit.git", "url": "https://github.com/symfony/browser-kit.git",
"reference": "490f27762705c8489bd042fe3e9377a191dba9b4" "reference": "840bb6f0d5b3701fd768b68adf7193c2d0f98f79"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/browser-kit/zipball/490f27762705c8489bd042fe3e9377a191dba9b4", "url": "https://api.github.com/repos/symfony/browser-kit/zipball/840bb6f0d5b3701fd768b68adf7193c2d0f98f79",
"reference": "490f27762705c8489bd042fe3e9377a191dba9b4", "reference": "840bb6f0d5b3701fd768b68adf7193c2d0f98f79",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -3329,11 +3332,11 @@
], ],
"description": "Symfony BrowserKit Component", "description": "Symfony BrowserKit Component",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"time": "2018-01-03T07:37:34+00:00" "time": "2018-03-19T22:32:39+00:00"
}, },
{ {
"name": "symfony/class-loader", "name": "symfony/class-loader",
"version": "v3.4.6", "version": "v3.4.9",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/class-loader.git", "url": "https://github.com/symfony/class-loader.git",
@ -3389,16 +3392,16 @@
}, },
{ {
"name": "symfony/config", "name": "symfony/config",
"version": "v3.4.6", "version": "v3.4.9",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/config.git", "url": "https://github.com/symfony/config.git",
"reference": "05e10567b529476a006b00746c5f538f1636810e" "reference": "7c2a9d44f4433863e9bca682e7f03609234657f9"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/config/zipball/05e10567b529476a006b00746c5f538f1636810e", "url": "https://api.github.com/repos/symfony/config/zipball/7c2a9d44f4433863e9bca682e7f03609234657f9",
"reference": "05e10567b529476a006b00746c5f538f1636810e", "reference": "7c2a9d44f4433863e9bca682e7f03609234657f9",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -3448,20 +3451,20 @@
], ],
"description": "Symfony Config Component", "description": "Symfony Config Component",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"time": "2018-02-14T10:03:57+00:00" "time": "2018-03-19T22:32:39+00:00"
}, },
{ {
"name": "symfony/console", "name": "symfony/console",
"version": "v3.4.6", "version": "v3.4.9",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/console.git", "url": "https://github.com/symfony/console.git",
"reference": "067339e9b8ec30d5f19f5950208893ff026b94f7" "reference": "5b1fdfa8eb93464bcc36c34da39cedffef822cdf"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/console/zipball/067339e9b8ec30d5f19f5950208893ff026b94f7", "url": "https://api.github.com/repos/symfony/console/zipball/5b1fdfa8eb93464bcc36c34da39cedffef822cdf",
"reference": "067339e9b8ec30d5f19f5950208893ff026b94f7", "reference": "5b1fdfa8eb93464bcc36c34da39cedffef822cdf",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -3482,7 +3485,7 @@
"symfony/process": "~3.3|~4.0" "symfony/process": "~3.3|~4.0"
}, },
"suggest": { "suggest": {
"psr/log": "For using the console logger", "psr/log-implementation": "For using the console logger",
"symfony/event-dispatcher": "", "symfony/event-dispatcher": "",
"symfony/lock": "", "symfony/lock": "",
"symfony/process": "" "symfony/process": ""
@ -3517,20 +3520,20 @@
], ],
"description": "Symfony Console Component", "description": "Symfony Console Component",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"time": "2018-02-26T15:46:28+00:00" "time": "2018-04-30T01:22:56+00:00"
}, },
{ {
"name": "symfony/css-selector", "name": "symfony/css-selector",
"version": "v3.4.6", "version": "v3.4.9",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/css-selector.git", "url": "https://github.com/symfony/css-selector.git",
"reference": "544655f1fc078a9cd839fdda2b7b1e64627c826a" "reference": "519a80d7c1d95c6cc0b67f686d15fe27c6910de0"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/css-selector/zipball/544655f1fc078a9cd839fdda2b7b1e64627c826a", "url": "https://api.github.com/repos/symfony/css-selector/zipball/519a80d7c1d95c6cc0b67f686d15fe27c6910de0",
"reference": "544655f1fc078a9cd839fdda2b7b1e64627c826a", "reference": "519a80d7c1d95c6cc0b67f686d15fe27c6910de0",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -3570,20 +3573,20 @@
], ],
"description": "Symfony CssSelector Component", "description": "Symfony CssSelector Component",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"time": "2018-02-03T14:55:07+00:00" "time": "2018-03-19T22:32:39+00:00"
}, },
{ {
"name": "symfony/debug", "name": "symfony/debug",
"version": "v3.4.6", "version": "v3.4.9",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/debug.git", "url": "https://github.com/symfony/debug.git",
"reference": "9b1071f86e79e1999b3d3675d2e0e7684268b9bc" "reference": "1b95888cfd996484527cb41e8952d9a5eaf7454f"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/debug/zipball/9b1071f86e79e1999b3d3675d2e0e7684268b9bc", "url": "https://api.github.com/repos/symfony/debug/zipball/1b95888cfd996484527cb41e8952d9a5eaf7454f",
"reference": "9b1071f86e79e1999b3d3675d2e0e7684268b9bc", "reference": "1b95888cfd996484527cb41e8952d9a5eaf7454f",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -3626,20 +3629,20 @@
], ],
"description": "Symfony Debug Component", "description": "Symfony Debug Component",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"time": "2018-02-28T21:49:22+00:00" "time": "2018-04-30T16:53:52+00:00"
}, },
{ {
"name": "symfony/dependency-injection", "name": "symfony/dependency-injection",
"version": "v3.4.6", "version": "v3.4.9",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/dependency-injection.git", "url": "https://github.com/symfony/dependency-injection.git",
"reference": "12e901abc1cb0d637a0e5abe9923471361d96b07" "reference": "54ff9d78b56429f9a1ac12e60bfb6d169c0468e3"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/dependency-injection/zipball/12e901abc1cb0d637a0e5abe9923471361d96b07", "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/54ff9d78b56429f9a1ac12e60bfb6d169c0468e3",
"reference": "12e901abc1cb0d637a0e5abe9923471361d96b07", "reference": "54ff9d78b56429f9a1ac12e60bfb6d169c0468e3",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -3697,20 +3700,20 @@
], ],
"description": "Symfony DependencyInjection Component", "description": "Symfony DependencyInjection Component",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"time": "2018-03-04T03:54:53+00:00" "time": "2018-04-29T14:04:08+00:00"
}, },
{ {
"name": "symfony/dom-crawler", "name": "symfony/dom-crawler",
"version": "v3.4.6", "version": "v3.4.9",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/dom-crawler.git", "url": "https://github.com/symfony/dom-crawler.git",
"reference": "2bb5d3101cc01f4fe580e536daf4f1959bc2d24d" "reference": "1a4cffeb059226ff6bee9f48acb388faf674afff"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/dom-crawler/zipball/2bb5d3101cc01f4fe580e536daf4f1959bc2d24d", "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/1a4cffeb059226ff6bee9f48acb388faf674afff",
"reference": "2bb5d3101cc01f4fe580e536daf4f1959bc2d24d", "reference": "1a4cffeb059226ff6bee9f48acb388faf674afff",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -3753,20 +3756,20 @@
], ],
"description": "Symfony DomCrawler Component", "description": "Symfony DomCrawler Component",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"time": "2018-02-22T10:48:49+00:00" "time": "2018-03-19T22:32:39+00:00"
}, },
{ {
"name": "symfony/event-dispatcher", "name": "symfony/event-dispatcher",
"version": "v3.4.6", "version": "v3.4.9",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/event-dispatcher.git", "url": "https://github.com/symfony/event-dispatcher.git",
"reference": "58990682ac3fdc1f563b7e705452921372aad11d" "reference": "fdd5abcebd1061ec647089c6c41a07ed60af09f8"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/58990682ac3fdc1f563b7e705452921372aad11d", "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/fdd5abcebd1061ec647089c6c41a07ed60af09f8",
"reference": "58990682ac3fdc1f563b7e705452921372aad11d", "reference": "fdd5abcebd1061ec647089c6c41a07ed60af09f8",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -3816,11 +3819,11 @@
], ],
"description": "Symfony EventDispatcher Component", "description": "Symfony EventDispatcher Component",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"time": "2018-02-14T10:03:57+00:00" "time": "2018-04-06T07:35:25+00:00"
}, },
{ {
"name": "symfony/filesystem", "name": "symfony/filesystem",
"version": "v3.4.6", "version": "v3.4.9",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/filesystem.git", "url": "https://github.com/symfony/filesystem.git",
@ -3869,16 +3872,16 @@
}, },
{ {
"name": "symfony/polyfill-mbstring", "name": "symfony/polyfill-mbstring",
"version": "v1.7.0", "version": "v1.8.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/polyfill-mbstring.git", "url": "https://github.com/symfony/polyfill-mbstring.git",
"reference": "78be803ce01e55d3491c1397cf1c64beb9c1b63b" "reference": "3296adf6a6454a050679cde90f95350ad604b171"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/78be803ce01e55d3491c1397cf1c64beb9c1b63b", "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/3296adf6a6454a050679cde90f95350ad604b171",
"reference": "78be803ce01e55d3491c1397cf1c64beb9c1b63b", "reference": "3296adf6a6454a050679cde90f95350ad604b171",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -3890,7 +3893,7 @@
"type": "library", "type": "library",
"extra": { "extra": {
"branch-alias": { "branch-alias": {
"dev-master": "1.7-dev" "dev-master": "1.8-dev"
} }
}, },
"autoload": { "autoload": {
@ -3924,20 +3927,20 @@
"portable", "portable",
"shim" "shim"
], ],
"time": "2018-01-30T19:27:44+00:00" "time": "2018-04-26T10:06:28+00:00"
}, },
{ {
"name": "symfony/translation", "name": "symfony/translation",
"version": "v3.4.6", "version": "v3.4.9",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/translation.git", "url": "https://github.com/symfony/translation.git",
"reference": "80e19eaf12cbb546ac40384e5c55c36306823e57" "reference": "d4af50f46cd8171fd5c1cdebdb9a8bbcd8078c6c"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/translation/zipball/80e19eaf12cbb546ac40384e5c55c36306823e57", "url": "https://api.github.com/repos/symfony/translation/zipball/d4af50f46cd8171fd5c1cdebdb9a8bbcd8078c6c",
"reference": "80e19eaf12cbb546ac40384e5c55c36306823e57", "reference": "d4af50f46cd8171fd5c1cdebdb9a8bbcd8078c6c",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -3958,7 +3961,7 @@
"symfony/yaml": "~3.4|~4.0" "symfony/yaml": "~3.4|~4.0"
}, },
"suggest": { "suggest": {
"psr/log": "To use logging capability in translator", "psr/log-implementation": "To use logging capability in translator",
"symfony/config": "", "symfony/config": "",
"symfony/yaml": "" "symfony/yaml": ""
}, },
@ -3992,20 +3995,20 @@
], ],
"description": "Symfony Translation Component", "description": "Symfony Translation Component",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"time": "2018-02-22T06:28:18+00:00" "time": "2018-04-30T01:22:56+00:00"
}, },
{ {
"name": "symfony/yaml", "name": "symfony/yaml",
"version": "v3.4.6", "version": "v3.4.9",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/yaml.git", "url": "https://github.com/symfony/yaml.git",
"reference": "6af42631dcf89e9c616242c900d6c52bd53bd1bb" "reference": "033cfa61ef06ee0847e056e530201842b6e926c3"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/yaml/zipball/6af42631dcf89e9c616242c900d6c52bd53bd1bb", "url": "https://api.github.com/repos/symfony/yaml/zipball/033cfa61ef06ee0847e056e530201842b6e926c3",
"reference": "6af42631dcf89e9c616242c900d6c52bd53bd1bb", "reference": "033cfa61ef06ee0847e056e530201842b6e926c3",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -4050,7 +4053,7 @@
], ],
"description": "Symfony Yaml Component", "description": "Symfony Yaml Component",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"time": "2018-02-16T09:50:28+00:00" "time": "2018-04-08T08:21:29+00:00"
}, },
{ {
"name": "theseer/tokenizer", "name": "theseer/tokenizer",
@ -4094,16 +4097,16 @@
}, },
{ {
"name": "webmozart/assert", "name": "webmozart/assert",
"version": "1.2.0", "version": "1.3.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/webmozart/assert.git", "url": "https://github.com/webmozart/assert.git",
"reference": "2db61e59ff05fe5126d152bd0655c9ea113e550f" "reference": "0df1908962e7a3071564e857d86874dad1ef204a"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/webmozart/assert/zipball/2db61e59ff05fe5126d152bd0655c9ea113e550f", "url": "https://api.github.com/repos/webmozart/assert/zipball/0df1908962e7a3071564e857d86874dad1ef204a",
"reference": "2db61e59ff05fe5126d152bd0655c9ea113e550f", "reference": "0df1908962e7a3071564e857d86874dad1ef204a",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -4140,15 +4143,18 @@
"check", "check",
"validate" "validate"
], ],
"time": "2016-11-23T20:04:58+00:00" "time": "2018-01-29T19:49:41+00:00"
} }
], ],
"aliases": [], "aliases": [],
"minimum-stability": "stable", "minimum-stability": "stable",
"stability-flags": { "stability-flags": {
"phpunit/phpunit": 0,
"behat/behat": 0, "behat/behat": 0,
"behat/mink-extension": 0, "behat/mink-extension": 0,
"behat/mink-goutte-driver": 0 "behat/mink-goutte-driver": 0,
"php-mock/php-mock-phpunit": 0,
"phpunit/dbunit": 0
}, },
"prefer-stable": false, "prefer-stable": false,
"prefer-lowest": false, "prefer-lowest": false,
@ -4160,7 +4166,5 @@
"ext-xml": "*", "ext-xml": "*",
"ext-openssl": "*" "ext-openssl": "*"
}, },
"platform-dev": { "platform-dev": []
"php": ">=5.6 || >=7.0"
}
} }

View File

@ -657,17 +657,17 @@
}, },
{ {
"name": "sabre/vobject", "name": "sabre/vobject",
"version": "4.1.5", "version": "4.1.6",
"version_normalized": "4.1.5.0", "version_normalized": "4.1.6.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/sabre-io/vobject.git", "url": "https://github.com/sabre-io/vobject.git",
"reference": "0928660e92d46d2d24336a6db320636aa3a75414" "reference": "122cacbdea2c6133ac04db86ec05854beef75adf"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/sabre-io/vobject/zipball/0928660e92d46d2d24336a6db320636aa3a75414", "url": "https://api.github.com/repos/sabre-io/vobject/zipball/122cacbdea2c6133ac04db86ec05854beef75adf",
"reference": "0928660e92d46d2d24336a6db320636aa3a75414", "reference": "122cacbdea2c6133ac04db86ec05854beef75adf",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -682,7 +682,7 @@
"suggest": { "suggest": {
"hoa/bench": "If you would like to run the benchmark scripts" "hoa/bench": "If you would like to run the benchmark scripts"
}, },
"time": "2018-03-08T21:06:39+00:00", "time": "2018-04-20T07:22:50+00:00",
"bin": [ "bin": [
"bin/vobject", "bin/vobject",
"bin/generate_vcards" "bin/generate_vcards"
@ -886,23 +886,23 @@
}, },
{ {
"name": "smarty/smarty", "name": "smarty/smarty",
"version": "v3.1.31", "version": "v3.1.32",
"version_normalized": "3.1.31.0", "version_normalized": "3.1.32.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/smarty-php/smarty.git", "url": "https://github.com/smarty-php/smarty.git",
"reference": "c7d42e4a327c402897dd587871434888fde1e7a9" "reference": "ac9d4b587e5bf53381e21881820a9830765cb459"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/smarty-php/smarty/zipball/c7d42e4a327c402897dd587871434888fde1e7a9", "url": "https://api.github.com/repos/smarty-php/smarty/zipball/ac9d4b587e5bf53381e21881820a9830765cb459",
"reference": "c7d42e4a327c402897dd587871434888fde1e7a9", "reference": "ac9d4b587e5bf53381e21881820a9830765cb459",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": ">=5.2" "php": ">=5.2"
}, },
"time": "2016-12-14T21:57:25+00:00", "time": "2018-04-24T14:53:33+00:00",
"type": "library", "type": "library",
"extra": { "extra": {
"branch-alias": { "branch-alias": {

View File

@ -1,10 +1,17 @@
ChangeLog ChangeLog
========= =========
4.1.6 (2018-04-20)
------------------
* #406, #407, #408, #409: Another round of performance improvements in serialization of properties (@gharlan, @staabm)
* #410: Fixes in iTip for handling `BYDAY=SA,SO` (@gharlan)
* #381: Fixes in iTip handling of `SCHEDULE-FORCE-SEND` (@alecpl)
4.1.5 (2018-03-08) 4.1.5 (2018-03-08)
------------------ ------------------
* Serialization: Performance boost for long properties (@gharlan) * #404: Serialization: Performance boost for long properties (@gharlan)
4.1.4 (2017-12-22) 4.1.4 (2017-12-22)
------------------ ------------------

View File

@ -897,6 +897,9 @@ class Broker {
if ($key === 'INTERVAL' && $val == 1) { if ($key === 'INTERVAL' && $val == 1) {
continue; continue;
} }
if (is_array($val)) {
$val = implode(',', $val);
}
$rrule[] = "$key=$val"; $rrule[] = "$key=$val";
} }
} }
@ -938,7 +941,7 @@ class Broker {
$attendees[$attendee->getNormalizedValue()]['instances'][$recurId] = [ $attendees[$attendee->getNormalizedValue()]['instances'][$recurId] = [
'id' => $recurId, 'id' => $recurId,
'partstat' => $partStat, 'partstat' => $partStat,
'force-send' => $forceSend, 'forceSend' => $forceSend,
]; ];
} else { } else {
$attendees[$attendee->getNormalizedValue()] = [ $attendees[$attendee->getNormalizedValue()] = [

View File

@ -283,22 +283,22 @@ class MimeDir extends Parser {
*/ */
protected function readLine() { protected function readLine() {
if (!is_null($this->lineBuffer)) { if (!\is_null($this->lineBuffer)) {
$rawLine = $this->lineBuffer; $rawLine = $this->lineBuffer;
$this->lineBuffer = null; $this->lineBuffer = null;
} else { } else {
do { do {
$eof = feof($this->input); $eof = \feof($this->input);
$rawLine = fgets($this->input); $rawLine = \fgets($this->input);
if ($eof || (feof($this->input) && $rawLine === false)) { if ($eof || (\feof($this->input) && $rawLine === false)) {
throw new EofException('End of document reached prematurely'); throw new EofException('End of document reached prematurely');
} }
if ($rawLine === false) { if ($rawLine === false) {
throw new ParseException('Error reading from input stream'); throw new ParseException('Error reading from input stream');
} }
$rawLine = rtrim($rawLine, "\r\n"); $rawLine = \rtrim($rawLine, "\r\n");
} while ($rawLine === ''); // Skipping empty lines } while ($rawLine === ''); // Skipping empty lines
$this->lineIndex++; $this->lineIndex++;
} }
@ -309,14 +309,15 @@ class MimeDir extends Parser {
// Looking ahead for folded lines. // Looking ahead for folded lines.
while (true) { while (true) {
$nextLine = rtrim(fgets($this->input), "\r\n"); $nextLine = \rtrim(\fgets($this->input), "\r\n");
$this->lineIndex++; $this->lineIndex++;
if (!$nextLine) { if (!$nextLine) {
break; break;
} }
if ($nextLine[0] === "\t" || $nextLine[0] === " ") { if ($nextLine[0] === "\t" || $nextLine[0] === " ") {
$line .= substr($nextLine, 1); $curLine = \substr($nextLine, 1);
$rawLine .= "\n " . substr($nextLine, 1); $line .= $curLine;
$rawLine .= "\n " . $curLine;
} else { } else {
$this->lineBuffer = $nextLine; $this->lineBuffer = $nextLine;
break; break;

View File

@ -246,20 +246,18 @@ abstract class Property extends Node {
$str .= ':' . $this->getRawMimeDirValue(); $str .= ':' . $this->getRawMimeDirValue();
$out = ''; $str = \preg_replace(
while (strlen($str) > 0) { '/(
if (strlen($str) > 75) { (?:^.)? # 1 additional byte in first line because of missing single space (see next line)
$part = mb_strcut($str, 0, 75, 'utf-8'); .{1,74} # max 75 bytes per line (1 byte is used for a single space added after every CRLF)
$out .= $part . "\r\n"; (?![\x80-\xbf]) # prevent splitting multibyte characters
$str = ' ' . substr($str, strlen($part)); )/x',
} else { "$1\r\n ",
$out .= $str . "\r\n"; $str
$str = ''; );
break;
}
}
return $out; // remove single space after last CRLF
return \substr($str, 0, -1);
} }

View File

@ -213,16 +213,16 @@ class Text extends Property {
$val = $this->getParts(); $val = $this->getParts();
if (isset($this->minimumPropertyValues[$this->name])) { if (isset($this->minimumPropertyValues[$this->name])) {
$val = array_pad($val, $this->minimumPropertyValues[$this->name], ''); $val = \array_pad($val, $this->minimumPropertyValues[$this->name], '');
} }
// Imploding multiple parts into a single value, and splitting the // Imploding multiple parts into a single value, and splitting the
// values with ;. // values with ;.
if (count($val) > 1) { if (\count($val) > 1) {
foreach ($val as $k => $v) { foreach ($val as $k => $v) {
$val[$k] = str_replace(';', '\;', $v); $val[$k] = \str_replace(';', '\;', $v);
} }
$val = implode(';', $val); $val = \implode(';', $val);
} else { } else {
$val = $val[0]; $val = $val[0];
} }
@ -242,7 +242,7 @@ class Text extends Property {
// If the resulting value contains a \n, we must encode it as // If the resulting value contains a \n, we must encode it as
// quoted-printable. // quoted-printable.
if (strpos($val, "\n") !== false) { if (\strpos($val, "\n") !== false) {
$str .= ';ENCODING=QUOTED-PRINTABLE:'; $str .= ';ENCODING=QUOTED-PRINTABLE:';
$lastLine = $str; $lastLine = $str;
@ -252,40 +252,39 @@ class Text extends Property {
// encode newlines for us. Specifically, the \r\n sequence must in // encode newlines for us. Specifically, the \r\n sequence must in
// vcards be encoded as =0D=OA and we must insert soft-newlines // vcards be encoded as =0D=OA and we must insert soft-newlines
// every 75 bytes. // every 75 bytes.
for ($ii = 0;$ii < strlen($val);$ii++) { for ($ii = 0;$ii < \strlen($val);$ii++) {
$ord = ord($val[$ii]); $ord = \ord($val[$ii]);
// These characters are encoded as themselves. // These characters are encoded as themselves.
if ($ord >= 32 && $ord <= 126) { if ($ord >= 32 && $ord <= 126) {
$lastLine .= $val[$ii]; $lastLine .= $val[$ii];
} else { } else {
$lastLine .= '=' . strtoupper(bin2hex($val[$ii])); $lastLine .= '=' . \strtoupper(\bin2hex($val[$ii]));
} }
if (strlen($lastLine) >= 75) { if (\strlen($lastLine) >= 75) {
// Soft line break // Soft line break
$out .= $lastLine . "=\r\n "; $out .= $lastLine . "=\r\n ";
$lastLine = null; $lastLine = null;
} }
} }
if (!is_null($lastLine)) $out .= $lastLine . "\r\n"; if (!\is_null($lastLine)) $out .= $lastLine . "\r\n";
return $out; return $out;
} else { } else {
$str .= ':' . $val; $str .= ':' . $val;
$out = '';
while (strlen($str) > 0) {
if (strlen($str) > 75) {
$part = mb_strcut($str, 0, 75, 'utf-8');
$out .= $part . "\r\n";
$str = ' ' . substr($str, strlen($part));
} else {
$out .= $str . "\r\n";
$str = '';
break;
}
}
return $out; $str = \preg_replace(
'/(
(?:^.)? # 1 additional byte in first line because of missing single space (see next line)
.{1,74} # max 75 bytes per line (1 byte is used for a single space added after every CRLF)
(?![\x80-\xbf]) # prevent splitting multibyte characters
)/x',
"$1\r\n ",
$str
);
// remove single space after last CRLF
return \substr($str, 0, -1);
} }

View File

@ -14,6 +14,6 @@ class Version {
/** /**
* Full version number. * Full version number.
*/ */
const VERSION = '4.1.5'; const VERSION = '4.1.6';
} }

View File

@ -27,3 +27,5 @@ To retrieve the development and documentation folders add
"smarty/smarty-dev": "~3.1@dev" "smarty/smarty-dev": "~3.1@dev"
} }
If you are using (include) the composer generated autoloader.php which is located
in the /vendor folder it is no longer needed to require the Smarty.class.php file.

View File

@ -1,4 +1,11 @@
3.1.31-dev 3.1.3"
New tags for inheritance parent and chilD
{parent} == {$smarty.block.parent}
{child} == {$smarty.block.child}
Both tags support the assign attribute like
{child assign=foo}
3.1.31
New tags for inheritance parent and child New tags for inheritance parent and child
{block_parent} == {$smarty.block.parent} {block_parent} == {$smarty.block.parent}
{block_child} == {$smarty.block.child} {block_child} == {$smarty.block.child}
@ -7,7 +14,6 @@ Since 3.1.28 you can mix inheritance by extends resource with the {extends} tag.
A template called by extends resource can extend a subtemplate or chain buy the {extends} tag. A template called by extends resource can extend a subtemplate or chain buy the {extends} tag.
Since 3.1.31 this feature can be turned off by setting the new Smarty property Smarty::$extends_recursion to false. Since 3.1.31 this feature can be turned off by setting the new Smarty property Smarty::$extends_recursion to false.
3.1.28 3.1.28
Starting with version 3.1.28 template inheritance is no longer a compile time process. Starting with version 3.1.28 template inheritance is no longer a compile time process.
All {block} tag parent/child relations are resolved at run time. All {block} tag parent/child relations are resolved at run time.
@ -63,7 +69,7 @@ the compiled code of {include} subtemplates gets also merged in compiled inherit
Merging the code into a single compile template has some drawbacks. 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. 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} 2. You could not use individual compile_id in {include}
3. Seperate caching of subtemplate was not possible 3. Separate caching of subtemplate was not possible
4. Any change of the template directory structure between calls was not necessarily seen. 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 Starting with 3.1.15 some of the above conditions got checked and resulted in an exception. It turned out
@ -75,13 +81,11 @@ With this setting all {include} subtemplate will be merge into the compiled inhe
could be rejected by exception. could be rejected by exception.
If $smarty->inheritance_merge_compiled_includes = false; {include} subtemplate will not be merged. 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.
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} {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; 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 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;
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 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. you must make the folder name part of the compile_id.

View File

@ -2,6 +2,53 @@
This file contains a brief description of new features which have been added to Smarty 3.1 This file contains a brief description of new features which have been added to Smarty 3.1
Smarty 3.1.32 New tags for inheritance parent and child
=========================================
{parent} == {$smarty.block.parent}
{child} == {$smarty.block.child}
Both tags support the assign attribute like
{child assign=foo}
Deprecate functions Smarty::muteExpectedErrors() and Smarty::unmuteExpectedErrors()
===================================================================================
These functions to start a special error handler are no longer needed as Smarty does
no longer use error suppression like @filemtime().
For backward compatibility the functions still can be called.
Using literals containing Smarty's left and right delimiter
===========================================================
New Methods
$smarty->setLiterals(array $literals)
$smarty->addLiterals(array $literals)
to define literals containing Smarty delimiter. This can avoid the need for extreme usage
of {literal} {/literal} tags.
A) Treat '{{' and '}}' as literal
If Smarty::$auto_literal is enabled
{{ foo }}
will be treated now as literal. (This does apply for any number of delimiter repeatations).
However {{foo}} is not an literal but will be interpreted as a recursive Smarty tag.
If you use
$smarty->setLiteral(array('{{','}}'));
{{foo}} is now a literal as well.
NOTE: In the last example nested Smarty tags starting with '{{' or ending with '}}' will not
work any longer, but this should be very very raw occouring restriction.
B) Example 2
Assume your delimiter are '<-' , '->' and '<--' , '-->' shall be literals
$smarty->setLiteral(array('<--','-->'));
The capture buffers can now be accessed as array
================================================
{capture name='foo'}
bah
{\capture}
{capture name='buh'}
blar
{\capture}
{foreach $smarty.capture as $name => $buffer}
....
{/foreach}
Smarty 3.1.31 Smarty 3.1.31
New tags for inheritance parent and child New tags for inheritance parent and child
========================================= =========================================
@ -45,8 +92,7 @@ Smarty 3.1.30
{/foreach} {/foreach}
The {foreach} loop is rendered while processing the compiled template, but $current is a nocache The {foreach} loop is rendered while processing the compiled template, but $current is a nocache
variable. Normally the {if $current==$item.id} would fail as the $item variable is unkown in the variable. Normally the {if $current==$item.id} would fail as the $item variable is unknown in the cached template. {make_nocache $item} does make the current $item value known in thee cached template.
cached template. {make_nocache $item} does make the current $item value known in thee cached template.
{make_nocache} is ignored when caching is disabled or the variable does exists as nocache variable. {make_nocache} is ignored when caching is disabled or the variable does exists as nocache variable.
@ -81,8 +127,7 @@ Smarty 3.1.30
Supported scope are parent, tpl_root, smarty, global and root. Supported scope are parent, tpl_root, smarty, global and root.
A scope used together with the {include} tag will cause that with some exceptions any variable A scope used together with the {include} tag will cause that with some exceptions any variable
assignment within that sub-template will update/assign the variable in other scopes according assignment within that sub-template will update/assign the variable in other scopes according
to the above rules. It does include also variables assigned by plugins, tags supporting the assign=foo to the above rules. It does include also variables assigned by plugins, tags supporting the assign=foo attribute and direct assignments in {if} and {while} like {if $foo=$bar}.
attribute and direct assignments in {if} and {while} like {if $foo=$bar}.
Excluded are the key and value variables of {foreach}, {for} loop variables , variables passed by attributes Excluded are the key and value variables of {foreach}, {for} loop variables , variables passed by attributes
in {include} and direct increments/decrements like {$foo++}, {$foo--} in {include} and direct increments/decrements like {$foo++}, {$foo--}

View File

@ -260,12 +260,12 @@ Example: {$object->method1($x)->method2($y)}
{for} tag added for looping (replacement for {section} tag): {for} tag added for looping (replacement for {section} tag):
{for $x=0, $y=count($foo); $x<$y; $x++} .... {/for} {for $x=0, $y=count($foo); $x<$y; $x++} .... {/for}
Any number of statements can be used separated by comma as the first Any number of statements can be used separated by comma as the first
inital expression at {for}. initial expression at {for}.
{for $x = $start to $end step $step} ... {/for}is in the SVN now . {for $x = $start to $end step $step} ... {/for}is in the SVN now .
You can use also You can use also
{for $x = $start to $end} ... {/for} {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. In this case the step value will be automatically 1 or -1 depending on the start and end values.
Instead of $start and $end you can use any valid expression. Instead of $start and $end you can use any valid expression.
Inside the loop the following special vars can be accessed: Inside the loop the following special vars can be accessed:
$x@iteration = number of iteration $x@iteration = number of iteration
@ -473,7 +473,7 @@ TEMPLATE INHERITANCE:
===================== =====================
With template inheritance you can define blocks, which are areas that can be With template inheritance you can define blocks, which are areas that can be
overriden by child templates, so your templates could look like this: overridden by child templates, so your templates could look like this:
parent.tpl: parent.tpl:
<html> <html>
@ -508,8 +508,8 @@ grandchild.tpl:
We redefined all the blocks here, however in the title block we used {$smarty.block.parent}, 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. 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 The content block was overridden to display the image files, and page-title has also be
overriden to display a completely different title. overridden to display a completely different title.
If we render grandchild.tpl we will get this: If we render grandchild.tpl we will get this:
<html> <html>

View File

@ -1,5 +1,12 @@
#Smarty 3 template engine # Smarty 3 template engine
##Distribution repository [smarty.net](https://www.smarty.net/)
## Documentation
For documentation see
[www.smarty.net/docs/en/](https://www.smarty.net/docs/en/)
## Distribution repository
> Smarty 3.1.28 introduces run time template inheritance > Smarty 3.1.28 introduces run time template inheritance
@ -10,7 +17,7 @@ Smarty versions 3.1.11 or later are now on github and can be installed with Comp
The "smarty/smarty" package will start at libs/.... subfolder. The "smarty/smarty" package will start at libs/.... subfolder.
To get the latest stable version of Smarty 3.1 use To get the latest stable version of Smarty 3.1 use:
```json ```json
"require": { "require": {
@ -20,7 +27,7 @@ To get the latest stable version of Smarty 3.1 use
in your composer.json file. in your composer.json file.
To get the trunk version use To get the trunk version use:
```json ```json
"require": { "require": {
@ -28,7 +35,7 @@ To get the trunk version use
} }
``` ```
For a specific version use something like For a specific version use something like:
```json ```json
"require": { "require": {
@ -36,7 +43,7 @@ For a specific version use something like
} }
``` ```
PHPUnit test can be installed by corresponding composer entries like PHPUnit test can be installed by corresponding composer entries like:
```json ```json
"require": { "require": {
@ -44,7 +51,7 @@ PHPUnit test can be installed by corresponding composer entries like
} }
``` ```
Similar applies for the lexer/parser generator Similar applies for the lexer/parser generator.
```json ```json
"require": { "require": {
@ -52,7 +59,7 @@ Similar applies for the lexer/parser generator
} }
``` ```
Or you could use Or you could use:
```json ```json
"require": { "require": {
@ -60,6 +67,6 @@ Or you could use
} }
``` ```
Which is a wrapper to install all 3 packages Which is a wrapper to install all 3 packages.
Composer can also be used for Smarty2 versions 2.6.24 to 2.6.28 Composer can also be used for Smarty2 versions 2.6.24 to 2.6.30.

View File

@ -1,5 +1,5 @@
== Smarty2 backward compatibility == == Smarty2 backward compatibility ==
All Smarty2 specific API functions and deprecated functionallity has been moved All Smarty2 specific API functions and deprecated functionality has been moved
to the SmartyBC class. to the SmartyBC class.
== {php} Tag == == {php} Tag ==

View File

@ -50,7 +50,7 @@ The escape modifier now knows the $double_encode option, which will
prevent entities from being encoded again. prevent entities from being encoded again.
The capitalize modifier now know the $lc_rest option, which makes sure The capitalize modifier now know the $lc_rest option, which makes sure
all letters following a captial letter are lower-cased. all letters following a capital letter are lower-cased.
The count_sentences modifier now accepts (.?!) as The count_sentences modifier now accepts (.?!) as
legitimate endings of a sentence - previously only (.) was legitimate endings of a sentence - previously only (.) was
@ -126,7 +126,7 @@ run on variable output.
SYNTAX: SYNTAX:
{setfilter filter1|filter2|filter3....} {setfilter filter1|filter2|filter3....}
Smarty3 will lookup up matching filters in the following search order: Smarty3 will lookup up matching filters in the following search order:
1. varibale filter plugin in plugins_dir. 1. variable filter plugin in plugins_dir.
2. a valid modifier. A modifier specification will also accept 2. a valid modifier. A modifier specification will also accept
additional parameter like filter2:'foo' additional parameter like filter2:'foo'
3. a PHP function 3. a PHP function

View File

@ -1,4 +1,145 @@
===== 3.1.31 ===== (14.12.2016) ===== 3.1.32 ===== (24.04.2018)
24.04.2018
- bugfix possible Security Vulnerability in Smarty_Security class.
26.03.2018
- bugfix plugins may not be loaded if {function} or {block} tags are executed in nocache mode
https://github.com/smarty-php/smarty/issues/371
26.03.2018
- new feature {parent} = {$smarty.block.parent} {child} = {$smarty.block.child}
23.03.2018
- bugfix preg_replace could fail on large content resulting in a blank page https://github.com/smarty-php/smarty/issues/417
21.03.2018
- bugfix {$smarty.section...} used outside {section}{/section} showed incorrect values if {section}{/section} was called inside
another loop https://github.com/smarty-php/smarty/issues/422
- bugfix short form of {section} attributes did not work https://github.com/smarty-php/smarty/issues/428
17.03.2018
- improvement Smarty::compileAllTemplates() exit with a non-zero status code if max errors is reached https://github.com/smarty-php/smarty/pull/402
16.03.2018
- bugfix extends resource did not work with user defined left/right delimiter https://github.com/smarty-php/smarty/issues/419
22.11.2017
- bugfix {break} and {continue} could fail if {foreach}{/foreach} did contain other
looping tags like {for}, {section} and {while} https://github.com/smarty-php/smarty/issues/323
20.11.2017
- bugfix rework of newline spacing between tag code and template text.
now again identical with Smarty2 (forum topic 26878)
- replacement of " by '
05.11.2017
- lexer/parser optimization
- code cleanup and optimizations
- bugfix {$smarty.section.name.loop} used together with {$smarty.section.name.total} could produce
wrong results (forum topic 27041)
26.10.2017
- bugfix Smarty version was not filled in header comment of compiled and cached files
- optimization replace internal Smarty::$ds property by DIRECTORY_SEPARATOR
- deprecate functions Smarty::muteExpectedErrors() and Smarty::unmuteExpectedErrors()
as Smarty does no longer use error suppression like @filemtime().
for backward compatibility code is moved from Smarty class to an external class and still can be
called.
- correction of PHPDoc blocks
- minor code cleanup
21.10.2017
- bugfix custom delimiters could fail since modification of version 3.1.32-dev-23
https://github.com/smarty-php/smarty/issues/394
18.10.2017
- bugfix fix implementation of unclosed block tag in double quoted string of 12.10.2017
https://github.com/smarty-php/smarty/issues/396 https://github.com/smarty-php/smarty/issues/397
https://github.com/smarty-php/smarty/issues/391 https://github.com/smarty-php/smarty/issues/392
12.10.2017
- bugfix $smarty.block.child and $smarty.block.parent could not be used like any
$smarty special variable https://github.com/smarty-php/smarty/issues/393
- unclosed block tag in double quoted string must throw compiler exception.
https://github.com/smarty-php/smarty/issues/391 https://github.com/smarty-php/smarty/issues/392
07.10.2017
- bugfix modification of 9.8.2017 did fail on some recursive
tag nesting. https://github.com/smarty-php/smarty/issues/389
26.8.2017
- bugfix chained modifier failed when last modifier parameter is a signed value
https://github.com/smarty-php/smarty/issues/327
- bugfix templates filepath with multibyte characters did not work
https://github.com/smarty-php/smarty/issues/385
- bugfix {make_nocache} did display code if the template did not contain other nocache code
https://github.com/smarty-php/smarty/issues/369
09.8.2017
- improvement repeated delimiter like {{ and }} will be treated as literal
https://groups.google.com/forum/#!topic/smarty-developers/h9r82Bx4KZw
05.8.2017
- bugfix wordwrap modifier could fail if used in nocache code.
converted plugin file shared.mb_wordwrap.php into modifier.mb_wordwrap.php
- cleanup of _getSmartyObj()
31.7.2017
- Call clearstatcache() after mkdir() failure https://github.com/smarty-php/smarty/pull/379
30.7.2017
- rewrite mkdir() bugfix to retry automatically see https://github.com/smarty-php/smarty/pull/377
https://github.com/smarty-php/smarty/pull/379
21.7.2017
- security possible PHP code injection on custom resources at display() or fetch()
calls if the resource does not sanitize the template name
- bugfix fix 'mkdir(): File exists' error on create directory from parallel
processes https://github.com/smarty-php/smarty/pull/377
- bugfix solve preg_match() hhvm parameter problem https://github.com/smarty-php/smarty/pull/372
27.5.2017
- bugfix change compiled code for registered function and modifiers to called as callable to allow closures
https://github.com/smarty-php/smarty/pull/368, https://github.com/smarty-php/smarty/issues/273
- bugfix https://github.com/smarty-php/smarty/pull/368 did break the default plugin handler
- improvement replace phpversion() by PHP_VERSION constant.
https://github.com/smarty-php/smarty/pull/363
21.5.2017
- performance store flag for already required shared plugin functions in static variable or
Smarty's $_cache to improve performance when plugins are often called
https://github.com/smarty-php/smarty/commit/51e0d5cd405d764a4ea257d1bac1fb1205f74528#commitcomment-22280086
- bugfix remove special treatment of classes implementing ArrayAccess in {foreach}
https://github.com/smarty-php/smarty/issues/332
- bugfix remove deleted files by clear_cache() and clear_compiled_template() from
ACP cache if present, add some is_file() checks to avoid possible warnings on filemtime()
caused by above functions.
https://github.com/smarty-php/smarty/issues/341
- bugfix version 3.1.31 did fail under PHP 5.2
https://github.com/smarty-php/smarty/issues/365
19.5.2017
- change properties $accessMap and $obsoleteProperties from private to protected
https://github.com/smarty-php/smarty/issues/351
- new feature The named capture buffers can now be accessed also as array
See NEWS_FEATURES.txt https://github.com/smarty-php/smarty/issues/366
- improvement check if ini_get() and ini_set() not disabled
https://github.com/smarty-php/smarty/pull/362
24.4.2017
- fix spelling https://github.com/smarty-php/smarty/commit/e3eda8a5f5653d8abb960eb1bc47e3eca679b1b4#commitcomment-21803095
17.4.2017
- correct generated code on empty() and isset() call, observe change PHP behaviour since PHP 5.5
https://github.com/smarty-php/smarty/issues/347
14.4.2017
- merge pull requests https://github.com/smarty-php/smarty/pull/349, https://github.com/smarty-php/smarty/pull/322 and https://github.com/smarty-php/smarty/pull/337 to fix spelling and annotation
13.4.2017
- bugfix array_merge() parameter should be checked https://github.com/smarty-php/smarty/issues/350
===== 3.1.31 ===== (14.12.2016)
23.11.2016 23.11.2016
- move template object cache into static variables - move template object cache into static variables

39
vendor/smarty/smarty/composer.json vendored Normal file
View File

@ -0,0 +1,39 @@
{
"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": {
"files": ["libs/bootstrap.php"]
},
"extra": {
"branch-alias": {
"dev-master": "3.1.x-dev"
}
}
}

View File

@ -91,7 +91,7 @@ class Smarty_CacheResource_Pdo extends Smarty_CacheResource_Custom
* *
* @param PDO $pdo PDO : active connection * @param PDO $pdo PDO : active connection
* @param string $table : table (or view) name * @param string $table : table (or view) name
* @param string $database : optionnal - if table is located in another db * @param string $database : optional - if table is located in another db
*/ */
public function __construct(PDO $pdo, $table, $database = null) public function __construct(PDO $pdo, $table, $database = null)
{ {

View File

@ -0,0 +1 @@
error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT

View File

@ -14,7 +14,7 @@
* require_once '...path/Autoloader.php'; * require_once '...path/Autoloader.php';
* Smarty_Autoloader::register(); * Smarty_Autoloader::register();
* or * or
* include '...path/bootstarp.php'; * include '...path/bootstrap.php';
* *
* $smarty = new Smarty(); * $smarty = new Smarty();
*/ */
@ -76,7 +76,7 @@ class Smarty_Autoloader
self::$SMARTY_DIR = defined('SMARTY_DIR') ? SMARTY_DIR : dirname(__FILE__) . DIRECTORY_SEPARATOR; self::$SMARTY_DIR = defined('SMARTY_DIR') ? SMARTY_DIR : dirname(__FILE__) . DIRECTORY_SEPARATOR;
self::$SMARTY_SYSPLUGINS_DIR = defined('SMARTY_SYSPLUGINS_DIR') ? SMARTY_SYSPLUGINS_DIR : self::$SMARTY_SYSPLUGINS_DIR = defined('SMARTY_SYSPLUGINS_DIR') ? SMARTY_SYSPLUGINS_DIR :
self::$SMARTY_DIR . 'sysplugins' . DIRECTORY_SEPARATOR; self::$SMARTY_DIR . 'sysplugins' . DIRECTORY_SEPARATOR;
if (version_compare(phpversion(), '5.3.0', '>=')) { if (version_compare(PHP_VERSION, '5.3.0', '>=')) {
spl_autoload_register(array(__CLASS__, 'autoload'), true, $prepend); spl_autoload_register(array(__CLASS__, 'autoload'), true, $prepend);
} else { } else {
spl_autoload_register(array(__CLASS__, 'autoload')); spl_autoload_register(array(__CLASS__, 'autoload'));

File diff suppressed because it is too large Load Diff

View File

@ -100,6 +100,8 @@ class SmartyBC extends Smarty
* @param string $function_impl the name of the PHP function to register * @param string $function_impl the name of the PHP function to register
* @param bool $cacheable * @param bool $cacheable
* @param mixed $cache_attrs * @param mixed $cache_attrs
*
* @throws \SmartyException
*/ */
public function register_function($function, $function_impl, $cacheable = true, $cache_attrs = null) public function register_function($function, $function_impl, $cacheable = true, $cache_attrs = null)
{ {
@ -153,6 +155,8 @@ class SmartyBC extends Smarty
* @param string $block_impl PHP function to register * @param string $block_impl PHP function to register
* @param bool $cacheable * @param bool $cacheable
* @param mixed $cache_attrs * @param mixed $cache_attrs
*
* @throws \SmartyException
*/ */
public function register_block($block, $block_impl, $cacheable = true, $cache_attrs = null) public function register_block($block, $block_impl, $cacheable = true, $cache_attrs = null)
{ {
@ -175,6 +179,8 @@ class SmartyBC extends Smarty
* @param string $function name of template function * @param string $function name of template function
* @param string $function_impl name of PHP function to register * @param string $function_impl name of PHP function to register
* @param bool $cacheable * @param bool $cacheable
*
* @throws \SmartyException
*/ */
public function register_compiler_function($function, $function_impl, $cacheable = true) public function register_compiler_function($function, $function_impl, $cacheable = true)
{ {
@ -196,6 +202,8 @@ class SmartyBC extends Smarty
* *
* @param string $modifier name of template modifier * @param string $modifier name of template modifier
* @param string $modifier_impl name of PHP function to register * @param string $modifier_impl name of PHP function to register
*
* @throws \SmartyException
*/ */
public function register_modifier($modifier, $modifier_impl) public function register_modifier($modifier, $modifier_impl)
{ {
@ -238,6 +246,8 @@ class SmartyBC extends Smarty
* to a template before compiling * to a template before compiling
* *
* @param callable $function * @param callable $function
*
* @throws \SmartyException
*/ */
public function register_prefilter($function) public function register_prefilter($function)
{ {
@ -259,6 +269,8 @@ class SmartyBC extends Smarty
* to a compiled template after compilation * to a compiled template after compilation
* *
* @param callable $function * @param callable $function
*
* @throws \SmartyException
*/ */
public function register_postfilter($function) public function register_postfilter($function)
{ {
@ -280,6 +292,8 @@ class SmartyBC extends Smarty
* to a template output * to a template output
* *
* @param callable $function * @param callable $function
*
* @throws \SmartyException
*/ */
public function register_outputfilter($function) public function register_outputfilter($function)
{ {
@ -301,6 +315,8 @@ class SmartyBC extends Smarty
* *
* @param string $type filter type * @param string $type filter type
* @param string $name filter name * @param string $name filter name
*
* @throws \SmartyException
*/ */
public function load_filter($type, $name) public function load_filter($type, $name)
{ {
@ -341,7 +357,9 @@ class SmartyBC extends Smarty
* @param string $cache_id * @param string $cache_id
* @param string $compile_id * @param string $compile_id
* *
* @return boolean * @return bool
* @throws \Exception
* @throws \SmartyException
*/ */
public function is_cached($tpl_file, $cache_id = null, $compile_id = null) public function is_cached($tpl_file, $cache_id = null, $compile_id = null)
{ {
@ -377,7 +395,8 @@ class SmartyBC extends Smarty
* *
* @param string $tpl_file * @param string $tpl_file
* *
* @return boolean * @return bool
* @throws \SmartyException
*/ */
public function template_exists($tpl_file) public function template_exists($tpl_file)
{ {

View File

@ -12,6 +12,6 @@
* Load and register Smarty Autoloader * Load and register Smarty Autoloader
*/ */
if (!class_exists('Smarty_Autoloader')) { if (!class_exists('Smarty_Autoloader')) {
require __DIR__ . '/Autoloader.php'; require dirname(__FILE__) . '/Autoloader.php';
} }
Smarty_Autoloader::register(); Smarty_Autoloader::register(true);

View File

@ -5,22 +5,21 @@
* @package Smarty * @package Smarty
* @subpackage PluginsBlock * @subpackage PluginsBlock
*/ */
/** /**
* Smarty {textformat}{/textformat} block plugin * Smarty {textformat}{/textformat} block plugin
* Type: block function<br> * Type: block function
* Name: textformat<br> * Name: textformat
* Purpose: format text a certain way with preset styles * Purpose: format text a certain way with preset styles
* or custom wrap/indent settings<br> * or custom wrap/indent settings
* Params: * Params:
* <pre> *
* - style - string (email) * - style - string (email)
* - indent - integer (0) * - indent - integer (0)
* - wrap - integer (80) * - wrap - integer (80)
* - wrap_char - string ("\n") * - wrap_char - string ("\n")
* - indent_char - string (" ") * - indent_char - string (" ")
* - wrap_boundary - boolean (true) * - wrap_boundary - boolean (true)
* </pre> *
* *
* @link http://www.smarty.net/manual/en/language.function.textformat.php {textformat} * @link http://www.smarty.net/manual/en/language.function.textformat.php {textformat}
* (Smarty online manual) * (Smarty online manual)
@ -32,14 +31,16 @@
* *
* @return string content re-formatted * @return string content re-formatted
* @author Monte Ohrt <monte at ohrt dot com> * @author Monte Ohrt <monte at ohrt dot com>
* @throws \SmartyException
*/ */
function smarty_block_textformat($params, $content, $template, &$repeat) function smarty_block_textformat($params, $content, Smarty_Internal_Template $template, &$repeat)
{ {
if (is_null($content)) { if (is_null($content)) {
return; return;
} }
if (Smarty::$_MBSTRING && !is_callable('smarty_mb_wordwrap')) { if (Smarty::$_MBSTRING) {
require_once(SMARTY_PLUGINS_DIR . 'shared.mb_wordwrap.php'); $template->_checkPlugins(array(array('function' => 'smarty_modifier_mb_wordwrap',
'file' => SMARTY_PLUGINS_DIR . 'modifier.mb_wordwrap.php')));
} }
$style = null; $style = null;
@ -71,11 +72,11 @@ function smarty_block_textformat($params, $content, $template, &$repeat)
break; break;
default: default:
trigger_error("textformat: unknown attribute '$_key'"); trigger_error("textformat: unknown attribute '{$_key}'");
} }
} }
if ($style == 'email') { if ($style === 'email') {
$wrap = 72; $wrap = 72;
} }
// split into paragraphs // split into paragraphs
@ -87,15 +88,17 @@ function smarty_block_textformat($params, $content, $template, &$repeat)
} }
// convert mult. spaces & special chars to single space // convert mult. spaces & special chars to single space
$_paragraph = $_paragraph =
preg_replace(array('!\s+!' . Smarty::$_UTF8_MODIFIER, '!(^\s+)|(\s+$)!' . Smarty::$_UTF8_MODIFIER), preg_replace(array('!\s+!' . Smarty::$_UTF8_MODIFIER,
array(' ', ''), $_paragraph); '!(^\s+)|(\s+$)!' . Smarty::$_UTF8_MODIFIER),
array(' ',
''), $_paragraph);
// indent first line // indent first line
if ($indent_first > 0) { if ($indent_first > 0) {
$_paragraph = str_repeat($indent_char, $indent_first) . $_paragraph; $_paragraph = str_repeat($indent_char, $indent_first) . $_paragraph;
} }
// wordwrap sentences // wordwrap sentences
if (Smarty::$_MBSTRING) { if (Smarty::$_MBSTRING) {
$_paragraph = smarty_mb_wordwrap($_paragraph, $wrap - $indent, $wrap_char, $wrap_cut); $_paragraph = smarty_modifier_mb_wordwrap($_paragraph, $wrap - $indent, $wrap_char, $wrap_cut);
} else { } else {
$_paragraph = wordwrap($_paragraph, $wrap - $indent, $wrap_char, $wrap_cut); $_paragraph = wordwrap($_paragraph, $wrap - $indent, $wrap_char, $wrap_cut);
} }

View File

@ -8,8 +8,8 @@
/** /**
* Smarty {counter} function plugin * Smarty {counter} function plugin
* Type: function<br> * Type: function
* Name: counter<br> * Name: counter
* Purpose: print out a counter value * Purpose: print out a counter value
* *
* @author Monte Ohrt <monte at ohrt dot com> * @author Monte Ohrt <monte at ohrt dot com>
@ -63,7 +63,7 @@ function smarty_function_counter($params, $template)
$counter[ 'direction' ] = $params[ 'direction' ]; $counter[ 'direction' ] = $params[ 'direction' ];
} }
if ($counter[ 'direction' ] == "down") { if ($counter[ 'direction' ] === 'down') {
$counter[ 'count' ] -= $counter[ 'skip' ]; $counter[ 'count' ] -= $counter[ 'skip' ];
} else { } else {
$counter[ 'count' ] += $counter[ 'skip' ]; $counter[ 'count' ] += $counter[ 'skip' ];

View File

@ -8,12 +8,12 @@
/** /**
* Smarty {cycle} function plugin * Smarty {cycle} function plugin
* Type: function<br> * Type: function
* Name: cycle<br> * Name: cycle
* Date: May 3, 2002<br> * Date: May 3, 2002
* Purpose: cycle through given values<br> * Purpose: cycle through given values
* Params: * Params:
* <pre> *
* - name - name of cycle (optional) * - name - name of cycle (optional)
* - values - comma separated list of values to cycle, or an array of values to cycle * - values - comma separated list of values to cycle, or an array of values to cycle
* (this can be left out for subsequent calls) * (this can be left out for subsequent calls)
@ -22,13 +22,13 @@
* - advance - boolean - whether or not to advance the cycle * - advance - boolean - whether or not to advance the cycle
* - delimiter - the value delimiter, default is "," * - delimiter - the value delimiter, default is ","
* - assign - boolean, assigns to template var instead of printed. * - assign - boolean, assigns to template var instead of printed.
* </pre> *
* Examples:<br> * Examples:
* <pre> *
* {cycle values="#eeeeee,#d0d0d0d"} * {cycle values="#eeeeee,#d0d0d0d"}
* {cycle name=row values="one,two,three" reset=true} * {cycle name=row values="one,two,three" reset=true}
* {cycle name=row} * {cycle name=row}
* </pre> *
* *
* @link http://www.smarty.net/manual/en/language.function.cycle.php {cycle} * @link http://www.smarty.net/manual/en/language.function.cycle.php {cycle}
* (Smarty online manual) * (Smarty online manual)
@ -55,12 +55,12 @@ function smarty_function_cycle($params, $template)
if (!isset($params[ 'values' ])) { if (!isset($params[ 'values' ])) {
if (!isset($cycle_vars[ $name ][ 'values' ])) { if (!isset($cycle_vars[ $name ][ 'values' ])) {
trigger_error("cycle: missing 'values' parameter"); trigger_error('cycle: missing \'values\' parameter');
return; return;
} }
} else { } else {
if (isset($cycle_vars[ $name ][ 'values' ]) && $cycle_vars[ $name ][ 'values' ] != $params[ 'values' ]) { if (isset($cycle_vars[ $name ][ 'values' ]) && $cycle_vars[ $name ][ 'values' ] !== $params[ 'values' ]) {
$cycle_vars[ $name ][ 'index' ] = 0; $cycle_vars[ $name ][ 'index' ] = 0;
} }
$cycle_vars[ $name ][ 'values' ] = $params[ 'values' ]; $cycle_vars[ $name ][ 'values' ] = $params[ 'values' ];

View File

@ -8,8 +8,8 @@
/** /**
* Smarty {fetch} plugin * Smarty {fetch} plugin
* Type: function<br> * Type: function
* Name: fetch<br> * Name: fetch
* Purpose: fetch file, web or ftp data and display results * Purpose: fetch file, web or ftp data and display results
* *
* @link http://www.smarty.net/manual/en/language.function.fetch.php {fetch} * @link http://www.smarty.net/manual/en/language.function.fetch.php {fetch}
@ -25,7 +25,7 @@
function smarty_function_fetch($params, $template) function smarty_function_fetch($params, $template)
{ {
if (empty($params[ 'file' ])) { if (empty($params[ 'file' ])) {
trigger_error("[plugin] fetch parameter 'file' cannot be empty", E_USER_NOTICE); trigger_error('[plugin] fetch parameter \'file\' cannot be empty', E_USER_NOTICE);
return; return;
} }
@ -55,15 +55,15 @@ function smarty_function_fetch($params, $template)
} }
$content = ''; $content = '';
if ($protocol == 'http') { if ($protocol === 'http') {
// http fetch // http fetch
if ($uri_parts = parse_url($params[ 'file' ])) { if ($uri_parts = parse_url($params[ 'file' ])) {
// set defaults // set defaults
$host = $server_name = $uri_parts[ 'host' ]; $host = $server_name = $uri_parts[ 'host' ];
$timeout = 30; $timeout = 30;
$accept = "image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*"; $accept = 'image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*';
$agent = "Smarty Template Engine " . Smarty::SMARTY_VERSION; $agent = 'Smarty Template Engine ' . Smarty::SMARTY_VERSION;
$referer = ""; $referer = '';
$uri = !empty($uri_parts[ 'path' ]) ? $uri_parts[ 'path' ] : '/'; $uri = !empty($uri_parts[ 'path' ]) ? $uri_parts[ 'path' ] : '/';
$uri .= !empty($uri_parts[ 'query' ]) ? '?' . $uri_parts[ 'query' ] : ''; $uri .= !empty($uri_parts[ 'query' ]) ? '?' . $uri_parts[ 'query' ] : '';
$_is_proxy = false; $_is_proxy = false;
@ -81,29 +81,29 @@ function smarty_function_fetch($params, $template)
// loop through parameters, setup headers // loop through parameters, setup headers
foreach ($params as $param_key => $param_value) { foreach ($params as $param_key => $param_value) {
switch ($param_key) { switch ($param_key) {
case "file": case 'file':
case "assign": case 'assign':
case "assign_headers": case 'assign_headers':
break; break;
case "user": case 'user':
if (!empty($param_value)) { if (!empty($param_value)) {
$user = $param_value; $user = $param_value;
} }
break; break;
case "pass": case 'pass':
if (!empty($param_value)) { if (!empty($param_value)) {
$pass = $param_value; $pass = $param_value;
} }
break; break;
case "accept": case 'accept':
if (!empty($param_value)) { if (!empty($param_value)) {
$accept = $param_value; $accept = $param_value;
} }
break; break;
case "header": case 'header':
if (!empty($param_value)) { if (!empty($param_value)) {
if (!preg_match('![\w\d-]+: .+!', $param_value)) { if (!preg_match('![\w\d-]+: .+!', $param_value)) {
trigger_error("[plugin] invalid header format '" . $param_value . "'", E_USER_NOTICE); trigger_error("[plugin] invalid header format '{$param_value}'", E_USER_NOTICE);
return; return;
} else { } else {
@ -111,41 +111,41 @@ function smarty_function_fetch($params, $template)
} }
} }
break; break;
case "proxy_host": case 'proxy_host':
if (!empty($param_value)) { if (!empty($param_value)) {
$proxy_host = $param_value; $proxy_host = $param_value;
} }
break; break;
case "proxy_port": case 'proxy_port':
if (!preg_match('!\D!', $param_value)) { if (!preg_match('!\D!', $param_value)) {
$proxy_port = (int) $param_value; $proxy_port = (int) $param_value;
} else { } else {
trigger_error("[plugin] invalid value for attribute '" . $param_key . "'", E_USER_NOTICE); trigger_error("[plugin] invalid value for attribute '{$param_key }'", E_USER_NOTICE);
return; return;
} }
break; break;
case "agent": case 'agent':
if (!empty($param_value)) { if (!empty($param_value)) {
$agent = $param_value; $agent = $param_value;
} }
break; break;
case "referer": case 'referer':
if (!empty($param_value)) { if (!empty($param_value)) {
$referer = $param_value; $referer = $param_value;
} }
break; break;
case "timeout": case 'timeout':
if (!preg_match('!\D!', $param_value)) { if (!preg_match('!\D!', $param_value)) {
$timeout = (int) $param_value; $timeout = (int) $param_value;
} else { } else {
trigger_error("[plugin] invalid value for attribute '" . $param_key . "'", E_USER_NOTICE); trigger_error("[plugin] invalid value for attribute '{$param_key}'", E_USER_NOTICE);
return; return;
} }
break; break;
default: default:
trigger_error("[plugin] unrecognized attribute '" . $param_key . "'", E_USER_NOTICE); trigger_error("[plugin] unrecognized attribute '{$param_key}'", E_USER_NOTICE);
return; return;
} }
@ -185,7 +185,7 @@ function smarty_function_fetch($params, $template)
} }
} }
if (!empty($user) && !empty($pass)) { if (!empty($user) && !empty($pass)) {
fputs($fp, "Authorization: BASIC " . base64_encode("$user:$pass") . "\r\n"); fputs($fp, 'Authorization: BASIC ' . base64_encode("$user:$pass") . "\r\n");
} }
fputs($fp, "\r\n"); fputs($fp, "\r\n");

View File

@ -5,22 +5,21 @@
* @package Smarty * @package Smarty
* @subpackage PluginsFunction * @subpackage PluginsFunction
*/ */
/** /**
* Smarty {html_checkboxes} function plugin * Smarty {html_checkboxes} function plugin
* File: function.html_checkboxes.php<br> * File: function.html_checkboxes.php
* Type: function<br> * Type: function
* Name: html_checkboxes<br> * Name: html_checkboxes
* Date: 24.Feb.2003<br> * Date: 24.Feb.2003
* Purpose: Prints out a list of checkbox input types<br> * Purpose: Prints out a list of checkbox input types
* Examples: * Examples:
* <pre> *
* {html_checkboxes values=$ids output=$names} * {html_checkboxes values=$ids output=$names}
* {html_checkboxes values=$ids name='box' separator='<br>' output=$names} * {html_checkboxes values=$ids name='box' separator='<br>' output=$names}
* {html_checkboxes values=$ids checked=$checked separator='<br>' output=$names} * {html_checkboxes values=$ids checked=$checked separator='<br>' output=$names}
* </pre> *
* Params: * Params:
* <pre> *
* - name (optional) - string default "checkbox" * - name (optional) - string default "checkbox"
* - values (required) - array * - values (required) - array
* - options (optional) - associative array * - options (optional) - associative array
@ -29,7 +28,7 @@
* - output (optional) - the output next to each checkbox * - output (optional) - the output next to each checkbox
* - assign (optional) - assign the output as an array to this variable * - assign (optional) - assign the output as an array to this variable
* - escape (optional) - escape the content (not value), defaults to true * - 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} * @link http://www.smarty.net/manual/en/language.function.html.checkboxes.php {html_checkboxes}
* (Smarty online manual) * (Smarty online manual)
@ -38,16 +37,16 @@
* @version 1.0 * @version 1.0
* *
* @param array $params parameters * @param array $params parameters
* @param object $template template object * @param Smarty_Internal_Template $template template object
* *
* @return string * @return string
* @uses smarty_function_escape_special_chars() * @uses smarty_function_escape_special_chars()
* @throws \SmartyException
*/ */
function smarty_function_html_checkboxes($params, $template) function smarty_function_html_checkboxes($params, Smarty_Internal_Template $template)
{ {
if (!is_callable('smarty_function_escape_special_chars')) { $template->_checkPlugins(array(array('function' => 'smarty_function_escape_special_chars',
require_once(SMARTY_PLUGINS_DIR . 'shared.escape_special_chars.php'); 'file' => SMARTY_PLUGINS_DIR . 'shared.escape_special_chars.php')));
}
$name = 'checkbox'; $name = 'checkbox';
$values = null; $values = null;
@ -89,11 +88,11 @@ function smarty_function_html_checkboxes($params, $template)
$selected = array(); $selected = array();
foreach ($_val as $_sel) { foreach ($_val as $_sel) {
if (is_object($_sel)) { if (is_object($_sel)) {
if (method_exists($_sel, "__toString")) { if (method_exists($_sel, '__toString')) {
$_sel = smarty_function_escape_special_chars((string) $_sel->__toString()); $_sel = smarty_function_escape_special_chars((string) $_sel->__toString());
} else { } else {
trigger_error("html_checkboxes: selected attribute contains an object of class '" . trigger_error('html_checkboxes: selected attribute contains an object of class \'' .
get_class($_sel) . "' without __toString() method", E_USER_NOTICE); get_class($_sel) . '\' without __toString() method', E_USER_NOTICE);
continue; continue;
} }
} else { } else {
@ -102,11 +101,11 @@ function smarty_function_html_checkboxes($params, $template)
$selected[ $_sel ] = true; $selected[ $_sel ] = true;
} }
} elseif (is_object($_val)) { } elseif (is_object($_val)) {
if (method_exists($_val, "__toString")) { if (method_exists($_val, '__toString')) {
$selected = smarty_function_escape_special_chars((string) $_val->__toString()); $selected = smarty_function_escape_special_chars((string) $_val->__toString());
} else { } else {
trigger_error("html_checkboxes: selected attribute is an object of class '" . get_class($_val) . trigger_error('html_checkboxes: selected attribute is an object of class \'' . get_class($_val) .
"' without __toString() method", E_USER_NOTICE); '\' without __toString() method', E_USER_NOTICE);
} }
} else { } else {
$selected = smarty_function_escape_special_chars((string) $_val); $selected = smarty_function_escape_special_chars((string) $_val);
@ -129,7 +128,7 @@ function smarty_function_html_checkboxes($params, $template)
case 'readonly': case 'readonly':
if (!empty($params[ 'strict' ])) { if (!empty($params[ 'strict' ])) {
if (!is_scalar($_val)) { 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", trigger_error("html_options: {$_key} attribute must be a scalar, only boolean true or string '{$_key}' will actually add the attribute",
E_USER_NOTICE); E_USER_NOTICE);
} }
@ -145,7 +144,7 @@ function smarty_function_html_checkboxes($params, $template)
if (!is_array($_val)) { if (!is_array($_val)) {
$extra .= ' ' . $_key . '="' . smarty_function_escape_special_chars($_val) . '"'; $extra .= ' ' . $_key . '="' . smarty_function_escape_special_chars($_val) . '"';
} else { } else {
trigger_error("html_checkboxes: extra attribute '$_key' cannot be an array", E_USER_NOTICE); trigger_error("html_checkboxes: extra attribute '{$_key}' cannot be an array", E_USER_NOTICE);
} }
break; break;
} }
@ -178,18 +177,30 @@ function smarty_function_html_checkboxes($params, $template)
return implode("\n", $_html_result); return implode("\n", $_html_result);
} }
} }
/**
* @param $name
* @param $value
* @param $output
* @param $selected
* @param $extra
* @param $separator
* @param $labels
* @param $label_ids
* @param bool $escape
*
* @return string
*/
function smarty_function_html_checkboxes_output($name, $value, $output, $selected, $extra, $separator, $labels, function smarty_function_html_checkboxes_output($name, $value, $output, $selected, $extra, $separator, $labels,
$label_ids, $escape = true) $label_ids, $escape = true)
{ {
$_output = ''; $_output = '';
if (is_object($value)) { if (is_object($value)) {
if (method_exists($value, "__toString")) { if (method_exists($value, '__toString')) {
$value = (string) $value->__toString(); $value = (string) $value->__toString();
} else { } else {
trigger_error("html_options: value is an object of class '" . get_class($value) . trigger_error('html_options: value is an object of class \'' . get_class($value) .
"' without __toString() method", E_USER_NOTICE); '\' without __toString() method', E_USER_NOTICE);
return ''; return '';
} }
@ -198,11 +209,11 @@ function smarty_function_html_checkboxes_output($name, $value, $output, $selecte
} }
if (is_object($output)) { if (is_object($output)) {
if (method_exists($output, "__toString")) { if (method_exists($output, '__toString')) {
$output = (string) $output->__toString(); $output = (string) $output->__toString();
} else { } else {
trigger_error("html_options: output is an object of class '" . get_class($output) . trigger_error('html_options: output is an object of class \'' . get_class($output) .
"' without __toString() method", E_USER_NOTICE); '\' without __toString() method', E_USER_NOTICE);
return ''; return '';
} }

View File

@ -8,20 +8,20 @@
/** /**
* Smarty {html_image} function plugin * Smarty {html_image} function plugin
* Type: function<br> * Type: function
* Name: html_image<br> * Name: html_image
* Date: Feb 24, 2003<br> * Date: Feb 24, 2003
* Purpose: format HTML tags for the image<br> * Purpose: format HTML tags for the image
* Examples: {html_image file="/images/masthead.gif"}<br> * Examples: {html_image file="/images/masthead.gif"}
* Output: <img src="/images/masthead.gif" width=400 height=23><br> * Output: <img src="/images/masthead.gif" width=400 height=23>
* Params: * Params:
* <pre> *
* - file - (required) - file (and path) of image * - file - (required) - file (and path) of image
* - height - (optional) - image height (default actual height) * - height - (optional) - image height (default actual height)
* - width - (optional) - image width (default actual width) * - width - (optional) - image width (default actual width)
* - basedir - (optional) - base directory for absolute paths, default is environment variable DOCUMENT_ROOT * - basedir - (optional) - base directory for absolute paths, default is environment variable DOCUMENT_ROOT
* - path_prefix - prefix for path output (optional, default empty) * - path_prefix - prefix for path output (optional, default empty)
* </pre> *
* *
* @link http://www.smarty.net/manual/en/language.function.html.image.php {html_image} * @link http://www.smarty.net/manual/en/language.function.html.image.php {html_image}
* (Smarty online manual) * (Smarty online manual)
@ -36,11 +36,10 @@
* @return string * @return string
* @uses smarty_function_escape_special_chars() * @uses smarty_function_escape_special_chars()
*/ */
function smarty_function_html_image($params, $template) function smarty_function_html_image($params, Smarty_Internal_Template $template)
{ {
if (!is_callable('smarty_function_escape_special_chars')) { $template->_checkPlugins(array(array('function' => 'smarty_function_escape_special_chars',
require_once(SMARTY_PLUGINS_DIR . 'shared.escape_special_chars.php'); 'file' => SMARTY_PLUGINS_DIR . 'shared.escape_special_chars.php')));
}
$alt = ''; $alt = '';
$file = ''; $file = '';
@ -66,7 +65,7 @@ function smarty_function_html_image($params, $template)
if (!is_array($_val)) { if (!is_array($_val)) {
$$_key = smarty_function_escape_special_chars($_val); $$_key = smarty_function_escape_special_chars($_val);
} else { } else {
throw new SmartyException ("html_image: extra attribute '$_key' cannot be an array", E_USER_NOTICE); throw new SmartyException ("html_image: extra attribute '{$_key}' cannot be an array", E_USER_NOTICE);
} }
break; break;
@ -80,19 +79,19 @@ function smarty_function_html_image($params, $template)
if (!is_array($_val)) { if (!is_array($_val)) {
$extra .= ' ' . $_key . '="' . smarty_function_escape_special_chars($_val) . '"'; $extra .= ' ' . $_key . '="' . smarty_function_escape_special_chars($_val) . '"';
} else { } else {
throw new SmartyException ("html_image: extra attribute '$_key' cannot be an array", E_USER_NOTICE); throw new SmartyException ("html_image: extra attribute '{$_key}' cannot be an array", E_USER_NOTICE);
} }
break; break;
} }
} }
if (empty($file)) { if (empty($file)) {
trigger_error("html_image: missing 'file' parameter", E_USER_NOTICE); trigger_error('html_image: missing \'file\' parameter', E_USER_NOTICE);
return; return;
} }
if ($file[ 0 ] == '/') { if ($file[ 0 ] === '/') {
$_image_path = $basedir . $file; $_image_path = $basedir . $file;
} else { } else {
$_image_path = $file; $_image_path = $file;
@ -126,15 +125,15 @@ function smarty_function_html_image($params, $template)
// FIXME: (rodneyrehm) getimagesize() loads the complete file off a remote resource, use custom [jpg,png,gif]header reader! // 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 (!$_image_data = @getimagesize($_image_path)) {
if (!file_exists($_image_path)) { if (!file_exists($_image_path)) {
trigger_error("html_image: unable to find '$_image_path'", E_USER_NOTICE); trigger_error("html_image: unable to find '{$_image_path}'", E_USER_NOTICE);
return; return;
} elseif (!is_readable($_image_path)) { } elseif (!is_readable($_image_path)) {
trigger_error("html_image: unable to read '$_image_path'", E_USER_NOTICE); trigger_error("html_image: unable to read '{$_image_path}'", E_USER_NOTICE);
return; return;
} else { } else {
trigger_error("html_image: '$_image_path' is not a valid image file", E_USER_NOTICE); trigger_error("html_image: '{$_image_path}' is not a valid image file", E_USER_NOTICE);
return; return;
} }

View File

@ -5,15 +5,14 @@
* @package Smarty * @package Smarty
* @subpackage PluginsFunction * @subpackage PluginsFunction
*/ */
/** /**
* Smarty {html_options} function plugin * Smarty {html_options} function plugin
* Type: function<br> * Type: function
* Name: html_options<br> * Name: html_options
* Purpose: Prints the list of <option> tags generated from * Purpose: Prints the list of <option> tags generated from
* the passed parameters<br> * the passed parameters
* Params: * Params:
* <pre> *
* - name (optional) - string default "select" * - name (optional) - string default "select"
* - values (required) - if no options supplied) - array * - values (required) - if no options supplied) - array
* - options (required) - if no values supplied) - associative array * - options (required) - if no values supplied) - associative array
@ -21,7 +20,7 @@
* - output (required) - if not options supplied) - array * - output (required) - if not options supplied) - array
* - id (optional) - string default not set * - id (optional) - string default not set
* - class (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} * @link http://www.smarty.net/manual/en/language.function.html.options.php {html_image}
* (Smarty online manual) * (Smarty online manual)
@ -30,14 +29,16 @@
* *
* @param array $params parameters * @param array $params parameters
* *
* @param \Smarty_Internal_Template $template
*
* @return string * @return string
* @uses smarty_function_escape_special_chars() * @uses smarty_function_escape_special_chars()
* @throws \SmartyException
*/ */
function smarty_function_html_options($params) function smarty_function_html_options($params, Smarty_Internal_Template $template)
{ {
if (!is_callable('smarty_function_escape_special_chars')) { $template->_checkPlugins(array(array('function' => 'smarty_function_escape_special_chars',
require_once(SMARTY_PLUGINS_DIR . 'shared.escape_special_chars.php'); 'file' => SMARTY_PLUGINS_DIR . 'shared.escape_special_chars.php')));
}
$name = null; $name = null;
$values = null; $values = null;
@ -71,11 +72,11 @@ function smarty_function_html_options($params)
$selected = array(); $selected = array();
foreach ($_val as $_sel) { foreach ($_val as $_sel) {
if (is_object($_sel)) { if (is_object($_sel)) {
if (method_exists($_sel, "__toString")) { if (method_exists($_sel, '__toString')) {
$_sel = smarty_function_escape_special_chars((string) $_sel->__toString()); $_sel = smarty_function_escape_special_chars((string) $_sel->__toString());
} else { } else {
trigger_error("html_options: selected attribute contains an object of class '" . trigger_error('html_options: selected attribute contains an object of class \'' .
get_class($_sel) . "' without __toString() method", E_USER_NOTICE); get_class($_sel) . '\' without __toString() method', E_USER_NOTICE);
continue; continue;
} }
} else { } else {
@ -84,11 +85,11 @@ function smarty_function_html_options($params)
$selected[ $_sel ] = true; $selected[ $_sel ] = true;
} }
} elseif (is_object($_val)) { } elseif (is_object($_val)) {
if (method_exists($_val, "__toString")) { if (method_exists($_val, '__toString')) {
$selected = smarty_function_escape_special_chars((string) $_val->__toString()); $selected = smarty_function_escape_special_chars((string) $_val->__toString());
} else { } else {
trigger_error("html_options: selected attribute is an object of class '" . get_class($_val) . trigger_error('html_options: selected attribute is an object of class \'' . get_class($_val) .
"' without __toString() method", E_USER_NOTICE); '\' without __toString() method', E_USER_NOTICE);
} }
} else { } else {
$selected = smarty_function_escape_special_chars((string) $_val); $selected = smarty_function_escape_special_chars((string) $_val);
@ -102,7 +103,7 @@ function smarty_function_html_options($params)
case 'readonly': case 'readonly':
if (!empty($params[ 'strict' ])) { if (!empty($params[ 'strict' ])) {
if (!is_scalar($_val)) { 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", trigger_error("html_options: {$_key} attribute must be a scalar, only boolean true or string '{$_key}' will actually add the attribute",
E_USER_NOTICE); E_USER_NOTICE);
} }
@ -118,7 +119,7 @@ function smarty_function_html_options($params)
if (!is_array($_val)) { if (!is_array($_val)) {
$extra .= ' ' . $_key . '="' . smarty_function_escape_special_chars($_val) . '"'; $extra .= ' ' . $_key . '="' . smarty_function_escape_special_chars($_val) . '"';
} else { } else {
trigger_error("html_options: extra attribute '$_key' cannot be an array", E_USER_NOTICE); trigger_error("html_options: extra attribute '{$_key}' cannot be an array", E_USER_NOTICE);
} }
break; break;
} }
@ -154,7 +155,16 @@ function smarty_function_html_options($params)
return $_html_result; return $_html_result;
} }
/**
* @param $key
* @param $value
* @param $selected
* @param $id
* @param $class
* @param $idx
*
* @return string
*/
function smarty_function_html_options_optoutput($key, $value, $selected, $id, $class, &$idx) function smarty_function_html_options_optoutput($key, $value, $selected, $id, $class, &$idx)
{ {
if (!is_array($value)) { if (!is_array($value)) {
@ -170,11 +180,11 @@ function smarty_function_html_options_optoutput($key, $value, $selected, $id, $c
$_html_class = !empty($class) ? ' class="' . $class . ' option"' : ''; $_html_class = !empty($class) ? ' class="' . $class . ' option"' : '';
$_html_id = !empty($id) ? ' id="' . $id . '-' . $idx . '"' : ''; $_html_id = !empty($id) ? ' id="' . $id . '-' . $idx . '"' : '';
if (is_object($value)) { if (is_object($value)) {
if (method_exists($value, "__toString")) { if (method_exists($value, '__toString')) {
$value = smarty_function_escape_special_chars((string) $value->__toString()); $value = smarty_function_escape_special_chars((string) $value->__toString());
} else { } else {
trigger_error("html_options: value is an object of class '" . get_class($value) . trigger_error('html_options: value is an object of class \'' . get_class($value) .
"' without __toString() method", E_USER_NOTICE); '\' without __toString() method', E_USER_NOTICE);
return ''; return '';
} }
@ -193,7 +203,16 @@ function smarty_function_html_options_optoutput($key, $value, $selected, $id, $c
return $_html_result; return $_html_result;
} }
/**
* @param $key
* @param $values
* @param $selected
* @param $id
* @param $class
* @param $idx
*
* @return string
*/
function smarty_function_html_options_optgroup($key, $values, $selected, $id, $class, &$idx) function smarty_function_html_options_optgroup($key, $values, $selected, $id, $class, &$idx)
{ {
$optgroup_html = '<optgroup label="' . smarty_function_escape_special_chars($key) . '">' . "\n"; $optgroup_html = '<optgroup label="' . smarty_function_escape_special_chars($key) . '">' . "\n";

View File

@ -5,16 +5,15 @@
* @package Smarty * @package Smarty
* @subpackage PluginsFunction * @subpackage PluginsFunction
*/ */
/** /**
* Smarty {html_radios} function plugin * Smarty {html_radios} function plugin
* File: function.html_radios.php<br> * File: function.html_radios.php
* Type: function<br> * Type: function
* Name: html_radios<br> * Name: html_radios
* Date: 24.Feb.2003<br> * Date: 24.Feb.2003
* Purpose: Prints out a list of radio input types<br> * Purpose: Prints out a list of radio input types
* Params: * Params:
* <pre> *
* - name (optional) - string default "radio" * - name (optional) - string default "radio"
* - values (required) - array * - values (required) - array
* - options (required) - associative array * - options (required) - associative array
@ -23,13 +22,13 @@
* - output (optional) - the output next to each radio button * - output (optional) - the output next to each radio button
* - assign (optional) - assign the output as an array to this variable * - assign (optional) - assign the output as an array to this variable
* - escape (optional) - escape the content (not value), defaults to true * - escape (optional) - escape the content (not value), defaults to true
* </pre> *
* Examples: * Examples:
* <pre> *
* {html_radios values=$ids output=$names} * {html_radios values=$ids output=$names}
* {html_radios values=$ids name='box' separator='<br>' output=$names} * {html_radios values=$ids name='box' separator='<br>' output=$names}
* {html_radios values=$ids checked=$checked 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} * @link http://smarty.php.net/manual/en/language.function.html.radios.php {html_radios}
* (Smarty online manual) * (Smarty online manual)
@ -42,12 +41,12 @@
* *
* @return string * @return string
* @uses smarty_function_escape_special_chars() * @uses smarty_function_escape_special_chars()
* @throws \SmartyException
*/ */
function smarty_function_html_radios($params, $template) function smarty_function_html_radios($params, Smarty_Internal_Template $template)
{ {
if (!is_callable('smarty_function_escape_special_chars')) { $template->_checkPlugins(array(array('function' => 'smarty_function_escape_special_chars',
require_once(SMARTY_PLUGINS_DIR . 'shared.escape_special_chars.php'); 'file' => SMARTY_PLUGINS_DIR . 'shared.escape_special_chars.php')));
}
$name = 'radio'; $name = 'radio';
$values = null; $values = null;
@ -72,11 +71,11 @@ function smarty_function_html_radios($params, $template)
if (is_array($_val)) { if (is_array($_val)) {
trigger_error('html_radios: the "' . $_key . '" attribute cannot be an array', E_USER_WARNING); trigger_error('html_radios: the "' . $_key . '" attribute cannot be an array', E_USER_WARNING);
} elseif (is_object($_val)) { } elseif (is_object($_val)) {
if (method_exists($_val, "__toString")) { if (method_exists($_val, '__toString')) {
$selected = smarty_function_escape_special_chars((string) $_val->__toString()); $selected = smarty_function_escape_special_chars((string) $_val->__toString());
} else { } else {
trigger_error("html_radios: selected attribute is an object of class '" . get_class($_val) . trigger_error('html_radios: selected attribute is an object of class \'' . get_class($_val) .
"' without __toString() method", E_USER_NOTICE); '\' without __toString() method', E_USER_NOTICE);
} }
} else { } else {
$selected = (string) $_val; $selected = (string) $_val;
@ -114,7 +113,7 @@ function smarty_function_html_radios($params, $template)
case 'readonly': case 'readonly':
if (!empty($params[ 'strict' ])) { if (!empty($params[ 'strict' ])) {
if (!is_scalar($_val)) { 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", trigger_error("html_options: {$_key} attribute must be a scalar, only boolean true or string '$_key' will actually add the attribute",
E_USER_NOTICE); E_USER_NOTICE);
} }
@ -130,7 +129,7 @@ function smarty_function_html_radios($params, $template)
if (!is_array($_val)) { if (!is_array($_val)) {
$extra .= ' ' . $_key . '="' . smarty_function_escape_special_chars($_val) . '"'; $extra .= ' ' . $_key . '="' . smarty_function_escape_special_chars($_val) . '"';
} else { } else {
trigger_error("html_radios: extra attribute '$_key' cannot be an array", E_USER_NOTICE); trigger_error("html_radios: extra attribute '{$_key}' cannot be an array", E_USER_NOTICE);
} }
break; break;
} }
@ -165,18 +164,30 @@ function smarty_function_html_radios($params, $template)
return implode("\n", $_html_result); return implode("\n", $_html_result);
} }
} }
/**
* @param $name
* @param $value
* @param $output
* @param $selected
* @param $extra
* @param $separator
* @param $labels
* @param $label_ids
* @param $escape
*
* @return string
*/
function smarty_function_html_radios_output($name, $value, $output, $selected, $extra, $separator, $labels, $label_ids, function smarty_function_html_radios_output($name, $value, $output, $selected, $extra, $separator, $labels, $label_ids,
$escape) $escape)
{ {
$_output = ''; $_output = '';
if (is_object($value)) { if (is_object($value)) {
if (method_exists($value, "__toString")) { if (method_exists($value, '__toString')) {
$value = (string) $value->__toString(); $value = (string) $value->__toString();
} else { } else {
trigger_error("html_options: value is an object of class '" . get_class($value) . trigger_error('html_options: value is an object of class \'' . get_class($value) .
"' without __toString() method", E_USER_NOTICE); '\' without __toString() method', E_USER_NOTICE);
return ''; return '';
} }
@ -185,11 +196,11 @@ function smarty_function_html_radios_output($name, $value, $output, $selected, $
} }
if (is_object($output)) { if (is_object($output)) {
if (method_exists($output, "__toString")) { if (method_exists($output, '__toString')) {
$output = (string) $output->__toString(); $output = (string) $output->__toString();
} else { } else {
trigger_error("html_options: output is an object of class '" . get_class($output) . trigger_error('html_options: output is an object of class \'' . get_class($output) .
"' without __toString() method", E_USER_NOTICE); '\' without __toString() method', E_USER_NOTICE);
return ''; return '';
} }

View File

@ -5,14 +5,13 @@
* @package Smarty * @package Smarty
* @subpackage PluginsFunction * @subpackage PluginsFunction
*/ */
/** /**
* Smarty {html_select_date} plugin * Smarty {html_select_date} plugin
* Type: function<br> * Type: function
* Name: html_select_date<br> * Name: html_select_date
* Purpose: Prints the dropdowns for date selection. * Purpose: Prints the dropdowns for date selection.
* ChangeLog: * ChangeLog:
* <pre> *
* - 1.0 initial release * - 1.0 initial release
* - 1.1 added support for +/- N syntax for begin * - 1.1 added support for +/- N syntax for begin
* and end year values. (Monte) * and end year values. (Monte)
@ -28,7 +27,7 @@
* of 0000-00-00 dates (cybot, boots) * of 0000-00-00 dates (cybot, boots)
* - 2.0 complete rewrite for performance, * - 2.0 complete rewrite for performance,
* added attributes month_names, *_id * added attributes month_names, *_id
* </pre> *
* *
* @link http://www.smarty.net/manual/en/language.function.html.select.date.php {html_select_date} * @link http://www.smarty.net/manual/en/language.function.html.select.date.php {html_select_date}
* (Smarty online manual) * (Smarty online manual)
@ -39,16 +38,15 @@
* *
* @param array $params parameters * @param array $params parameters
* *
* @param \Smarty_Internal_Template $template
*
* @return string * @return string
* @throws \SmartyException
*/ */
function smarty_function_html_select_date($params) function smarty_function_html_select_date($params, Smarty_Internal_Template $template)
{ {
if (!is_callable('smarty_function_escape_special_chars')) { $template->_checkPlugins(array(array('function' => 'smarty_function_escape_special_chars',
require_once(SMARTY_PLUGINS_DIR . 'shared.escape_special_chars.php'); 'file' => SMARTY_PLUGINS_DIR . 'shared.escape_special_chars.php')));
}
if (!is_callable('smarty_make_timestamp')) {
require_once(SMARTY_PLUGINS_DIR . 'shared.make_timestamp.php');
}
// generate timestamps used for month names only // generate timestamps used for month names only
static $_month_timestamps = null; static $_month_timestamps = null;
static $_current_year = null; static $_current_year = null;
@ -61,18 +59,18 @@ function smarty_function_html_select_date($params)
} }
/* Default values. */ /* Default values. */
$prefix = "Date_"; $prefix = 'Date_';
$start_year = null; $start_year = null;
$end_year = null; $end_year = null;
$display_days = true; $display_days = true;
$display_months = true; $display_months = true;
$display_years = true; $display_years = true;
$month_format = "%B"; $month_format = '%B';
/* Write months as numbers by default GL */ /* Write months as numbers by default GL */
$month_value_format = "%m"; $month_value_format = '%m';
$day_format = "%02d"; $day_format = '%02d';
/* Write day values using this format MB */ /* Write day values using this format MB */
$day_value_format = "%d"; $day_value_format = '%d';
$year_as_text = false; $year_as_text = false;
/* Display years in reverse order? Ie. 2000,1999,.... */ /* Display years in reverse order? Ie. 2000,1999,.... */
$reverse_years = false; $reverse_years = false;
@ -113,15 +111,17 @@ function smarty_function_html_select_date($params)
switch ($_key) { switch ($_key) {
case 'time': case 'time':
if (!is_array($_value) && $_value !== null) { if (!is_array($_value) && $_value !== null) {
$template->_checkPlugins(array(array('function' => 'smarty_make_timestamp',
'file' => SMARTY_PLUGINS_DIR . 'shared.make_timestamp.php')));
$time = smarty_make_timestamp($_value); $time = smarty_make_timestamp($_value);
} }
break; break;
case 'month_names': case 'month_names':
if (is_array($_value) && count($_value) == 12) { if (is_array($_value) && count($_value) === 12) {
$$_key = $_value; $$_key = $_value;
} else { } else {
trigger_error("html_select_date: month_names must be an array of 12 strings", E_USER_NOTICE); trigger_error('html_select_date: month_names must be an array of 12 strings', E_USER_NOTICE);
} }
break; break;
@ -166,7 +166,7 @@ function smarty_function_html_select_date($params)
if (!is_array($_value)) { if (!is_array($_value)) {
$extra_attrs .= ' ' . $_key . '="' . smarty_function_escape_special_chars($_value) . '"'; $extra_attrs .= ' ' . $_key . '="' . smarty_function_escape_special_chars($_value) . '"';
} else { } else {
trigger_error("html_select_date: extra attribute '$_key' cannot be an array", E_USER_NOTICE); trigger_error("html_select_date: extra attribute '{$_key}' cannot be an array", E_USER_NOTICE);
} }
break; break;
} }
@ -177,7 +177,9 @@ function smarty_function_html_select_date($params)
if (isset($params[ 'time' ]) && is_array($params[ 'time' ])) { if (isset($params[ 'time' ]) && is_array($params[ 'time' ])) {
if (isset($params[ 'time' ][ $prefix . 'Year' ])) { if (isset($params[ 'time' ][ $prefix . 'Year' ])) {
// $_REQUEST[$field_array] given // $_REQUEST[$field_array] given
foreach (array('Y' => 'Year', 'm' => 'Month', 'd' => 'Day') as $_elementKey => $_elementName) { foreach (array('Y' => 'Year',
'm' => 'Month',
'd' => 'Day') as $_elementKey => $_elementName) {
$_variableName = '_' . strtolower($_elementName); $_variableName = '_' . strtolower($_elementName);
$$_variableName = $$_variableName =
isset($params[ 'time' ][ $prefix . $_elementName ]) ? $params[ 'time' ][ $prefix . $_elementName ] : isset($params[ 'time' ][ $prefix . $_elementName ]) ? $params[ 'time' ][ $prefix . $_elementName ] :
@ -185,7 +187,9 @@ function smarty_function_html_select_date($params)
} }
} elseif (isset($params[ 'time' ][ $field_array ][ $prefix . 'Year' ])) { } elseif (isset($params[ 'time' ][ $field_array ][ $prefix . 'Year' ])) {
// $_REQUEST given // $_REQUEST given
foreach (array('Y' => 'Year', 'm' => 'Month', 'd' => 'Day') as $_elementKey => $_elementName) { foreach (array('Y' => 'Year',
'm' => 'Month',
'd' => 'Day') as $_elementKey => $_elementName) {
$_variableName = '_' . strtolower($_elementName); $_variableName = '_' . strtolower($_elementName);
$$_variableName = isset($params[ 'time' ][ $field_array ][ $prefix . $_elementName ]) ? $$_variableName = isset($params[ 'time' ][ $field_array ][ $prefix . $_elementName ]) ?
$params[ 'time' ][ $field_array ][ $prefix . $_elementName ] : date($_elementKey); $params[ 'time' ][ $field_array ][ $prefix . $_elementName ] : date($_elementKey);
@ -206,14 +210,15 @@ function smarty_function_html_select_date($params)
// make syntax "+N" or "-N" work with $start_year and $end_year // 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 // Note preg_match('!^(\+|\-)\s*(\d+)$!', $end_year, $match) is slower than trim+substr
foreach (array('start', 'end') as $key) { foreach (array('start',
'end') as $key) {
$key .= '_year'; $key .= '_year';
$t = $$key; $t = $$key;
if ($t === null) { if ($t === null) {
$$key = (int) $_current_year; $$key = (int) $_current_year;
} elseif ($t[ 0 ] == '+') { } elseif ($t[ 0 ] === '+') {
$$key = (int) ($_current_year + (int) trim(substr($t, 1))); $$key = (int) ($_current_year + (int) trim(substr($t, 1)));
} elseif ($t[ 0 ] == '-') { } elseif ($t[ 0 ] === '-') {
$$key = (int) ($_current_year - (int) trim(substr($t, 1))); $$key = (int) ($_current_year - (int) trim(substr($t, 1)));
} else { } else {
$$key = (int) $$key; $$key = (int) $$key;
@ -301,8 +306,8 @@ function smarty_function_html_select_date($params)
for ($i = 1; $i <= 12; $i ++) { for ($i = 1; $i <= 12; $i ++) {
$_val = sprintf('%02d', $i); $_val = sprintf('%02d', $i);
$_text = isset($month_names) ? smarty_function_escape_special_chars($month_names[ $i ]) : $_text = isset($month_names) ? smarty_function_escape_special_chars($month_names[ $i ]) :
($month_format == "%m" ? $_val : strftime($month_format, $_month_timestamps[ $i ])); ($month_format === '%m' ? $_val : strftime($month_format, $_month_timestamps[ $i ]));
$_value = $month_value_format == "%m" ? $_val : strftime($month_value_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"' : '') . $_html_months .= '<option value="' . $_value . '"' . ($_val == $_month ? ' selected="selected"' : '') .
'>' . $_text . '</option>' . $option_separator; '>' . $_text . '</option>' . $option_separator;
} }
@ -339,8 +344,8 @@ function smarty_function_html_select_date($params)
for ($i = 1; $i <= 31; $i ++) { for ($i = 1; $i <= 31; $i ++) {
$_val = sprintf('%02d', $i); $_val = sprintf('%02d', $i);
$_text = $day_format == '%02d' ? $_val : sprintf($day_format, $i); $_text = $day_format === '%02d' ? $_val : sprintf($day_format, $i);
$_value = $day_value_format == '%02d' ? $_val : sprintf($day_value_format, $i); $_value = $day_value_format === '%02d' ? $_val : sprintf($day_value_format, $i);
$_html_days .= '<option value="' . $_value . '"' . ($_val == $_day ? ' selected="selected"' : '') . '>' . $_html_days .= '<option value="' . $_value . '"' . ($_val == $_day ? ' selected="selected"' : '') . '>' .
$_text . '</option>' . $option_separator; $_text . '</option>' . $option_separator;
} }

View File

@ -5,11 +5,10 @@
* @package Smarty * @package Smarty
* @subpackage PluginsFunction * @subpackage PluginsFunction
*/ */
/** /**
* Smarty {html_select_time} function plugin * Smarty {html_select_time} function plugin
* Type: function<br> * Type: function
* Name: html_select_time<br> * Name: html_select_time
* Purpose: Prints the dropdowns for time selection * Purpose: Prints the dropdowns for time selection
* *
* @link http://www.smarty.net/manual/en/language.function.html.select.time.php {html_select_time} * @link http://www.smarty.net/manual/en/language.function.html.select.time.php {html_select_time}
@ -19,18 +18,17 @@
* *
* @param array $params parameters * @param array $params parameters
* *
* @param \Smarty_Internal_Template $template
*
* @return string * @return string
* @uses smarty_make_timestamp() * @uses smarty_make_timestamp()
* @throws \SmartyException
*/ */
function smarty_function_html_select_time($params) function smarty_function_html_select_time($params, Smarty_Internal_Template $template)
{ {
if (!is_callable('smarty_function_escape_special_chars')) { $template->_checkPlugins(array(array('function' => 'smarty_function_escape_special_chars',
require_once(SMARTY_PLUGINS_DIR . 'shared.escape_special_chars.php'); 'file' => SMARTY_PLUGINS_DIR . 'shared.escape_special_chars.php')));
} $prefix = 'Time_';
if (!is_callable('smarty_make_timestamp')) {
require_once(SMARTY_PLUGINS_DIR . 'shared.make_timestamp.php');
}
$prefix = "Time_";
$field_array = null; $field_array = null;
$field_separator = "\n"; $field_separator = "\n";
$option_separator = "\n"; $option_separator = "\n";
@ -80,6 +78,8 @@ function smarty_function_html_select_time($params)
switch ($_key) { switch ($_key) {
case 'time': case 'time':
if (!is_array($_value) && $_value !== null) { if (!is_array($_value) && $_value !== null) {
$template->_checkPlugins(array(array('function' => 'smarty_make_timestamp',
'file' => SMARTY_PLUGINS_DIR . 'shared.make_timestamp.php')));
$time = smarty_make_timestamp($_value); $time = smarty_make_timestamp($_value);
} }
break; break;
@ -139,7 +139,7 @@ function smarty_function_html_select_time($params)
if (!is_array($_value)) { if (!is_array($_value)) {
$extra_attrs .= ' ' . $_key . '="' . smarty_function_escape_special_chars($_value) . '"'; $extra_attrs .= ' ' . $_key . '="' . smarty_function_escape_special_chars($_value) . '"';
} else { } else {
trigger_error("html_select_date: extra attribute '$_key' cannot be an array", E_USER_NOTICE); trigger_error("html_select_date: extra attribute '{$_key}' cannot be an array", E_USER_NOTICE);
} }
break; break;
} }
@ -148,7 +148,9 @@ function smarty_function_html_select_time($params)
if (isset($params[ 'time' ]) && is_array($params[ 'time' ])) { if (isset($params[ 'time' ]) && is_array($params[ 'time' ])) {
if (isset($params[ 'time' ][ $prefix . 'Hour' ])) { if (isset($params[ 'time' ][ $prefix . 'Hour' ])) {
// $_REQUEST[$field_array] given // $_REQUEST[$field_array] given
foreach (array('H' => 'Hour', 'i' => 'Minute', 's' => 'Second') as $_elementKey => $_elementName) { foreach (array('H' => 'Hour',
'i' => 'Minute',
's' => 'Second') as $_elementKey => $_elementName) {
$_variableName = '_' . strtolower($_elementName); $_variableName = '_' . strtolower($_elementName);
$$_variableName = $$_variableName =
isset($params[ 'time' ][ $prefix . $_elementName ]) ? $params[ 'time' ][ $prefix . $_elementName ] : isset($params[ 'time' ][ $prefix . $_elementName ]) ? $params[ 'time' ][ $prefix . $_elementName ] :
@ -161,7 +163,9 @@ function smarty_function_html_select_time($params)
list($_hour, $_minute, $_second) = $time = explode('-', date('H-i-s', $time)); list($_hour, $_minute, $_second) = $time = explode('-', date('H-i-s', $time));
} elseif (isset($params[ 'time' ][ $field_array ][ $prefix . 'Hour' ])) { } elseif (isset($params[ 'time' ][ $field_array ][ $prefix . 'Hour' ])) {
// $_REQUEST given // $_REQUEST given
foreach (array('H' => 'Hour', 'i' => 'Minute', 's' => 'Second') as $_elementKey => $_elementName) { foreach (array('H' => 'Hour',
'i' => 'Minute',
's' => 'Second') as $_elementKey => $_elementName) {
$_variableName = '_' . strtolower($_elementName); $_variableName = '_' . strtolower($_elementName);
$$_variableName = isset($params[ 'time' ][ $field_array ][ $prefix . $_elementName ]) ? $$_variableName = isset($params[ 'time' ][ $field_array ][ $prefix . $_elementName ]) ?
$params[ 'time' ][ $field_array ][ $prefix . $_elementName ] : date($_elementKey); $params[ 'time' ][ $field_array ][ $prefix . $_elementName ] : date($_elementKey);
@ -216,8 +220,8 @@ function smarty_function_html_select_time($params)
$end = $use_24_hours ? 23 : 12; $end = $use_24_hours ? 23 : 12;
for ($i = $start; $i <= $end; $i ++) { for ($i = $start; $i <= $end; $i ++) {
$_val = sprintf('%02d', $i); $_val = sprintf('%02d', $i);
$_text = $hour_format == '%02d' ? $_val : sprintf($hour_format, $i); $_text = $hour_format === '%02d' ? $_val : sprintf($hour_format, $i);
$_value = $hour_value_format == '%02d' ? $_val : sprintf($hour_value_format, $i); $_value = $hour_value_format === '%02d' ? $_val : sprintf($hour_value_format, $i);
if (!$use_24_hours) { if (!$use_24_hours) {
$_hour12 = $_hour == 0 ? 12 : ($_hour <= 12 ? $_hour : $_hour - 12); $_hour12 = $_hour == 0 ? 12 : ($_hour <= 12 ? $_hour : $_hour - 12);
@ -263,8 +267,8 @@ function smarty_function_html_select_time($params)
$selected = $_minute !== null ? ($_minute - $_minute % $minute_interval) : null; $selected = $_minute !== null ? ($_minute - $_minute % $minute_interval) : null;
for ($i = 0; $i <= 59; $i += $minute_interval) { for ($i = 0; $i <= 59; $i += $minute_interval) {
$_val = sprintf('%02d', $i); $_val = sprintf('%02d', $i);
$_text = $minute_format == '%02d' ? $_val : sprintf($minute_format, $i); $_text = $minute_format === '%02d' ? $_val : sprintf($minute_format, $i);
$_value = $minute_value_format == '%02d' ? $_val : sprintf($minute_value_format, $i); $_value = $minute_value_format === '%02d' ? $_val : sprintf($minute_value_format, $i);
$_html_minutes .= '<option value="' . $_value . '"' . ($selected === $i ? ' selected="selected"' : '') . $_html_minutes .= '<option value="' . $_value . '"' . ($selected === $i ? ' selected="selected"' : '') .
'>' . $_text . '</option>' . $option_separator; '>' . $_text . '</option>' . $option_separator;
} }
@ -304,8 +308,8 @@ function smarty_function_html_select_time($params)
$selected = $_second !== null ? ($_second - $_second % $second_interval) : null; $selected = $_second !== null ? ($_second - $_second % $second_interval) : null;
for ($i = 0; $i <= 59; $i += $second_interval) { for ($i = 0; $i <= 59; $i += $second_interval) {
$_val = sprintf('%02d', $i); $_val = sprintf('%02d', $i);
$_text = $second_format == '%02d' ? $_val : sprintf($second_format, $i); $_text = $second_format === '%02d' ? $_val : sprintf($second_format, $i);
$_value = $second_value_format == '%02d' ? $_val : sprintf($second_value_format, $i); $_value = $second_value_format === '%02d' ? $_val : sprintf($second_value_format, $i);
$_html_seconds .= '<option value="' . $_value . '"' . ($selected === $i ? ' selected="selected"' : '') . $_html_seconds .= '<option value="' . $_value . '"' . ($selected === $i ? ' selected="selected"' : '') .
'>' . $_text . '</option>' . $option_separator; '>' . $_text . '</option>' . $option_separator;
} }
@ -350,7 +354,10 @@ function smarty_function_html_select_time($params)
} }
$_html = ''; $_html = '';
foreach (array('_html_hours', '_html_minutes', '_html_seconds', '_html_meridian') as $k) { foreach (array('_html_hours',
'_html_minutes',
'_html_seconds',
'_html_meridian') as $k) {
if (isset($$k)) { if (isset($$k)) {
if ($_html) { if ($_html) {
$_html .= $field_separator; $_html .= $field_separator;

View File

@ -8,12 +8,12 @@
/** /**
* Smarty {html_table} function plugin * Smarty {html_table} function plugin
* Type: function<br> * Type: function
* Name: html_table<br> * Name: html_table
* Date: Feb 17, 2003<br> * Date: Feb 17, 2003
* Purpose: make an html table from an array of data<br> * Purpose: make an html table from an array of data
* Params: * Params:
* <pre> *
* - loop - array to loop through * - loop - array to loop through
* - cols - number of columns, comma separated list of column names * - cols - number of columns, comma separated list of column names
* or array of column names * or array of column names
@ -28,13 +28,13 @@
* - hdir - horizontal direction (default: "right", means left-to-right) * - hdir - horizontal direction (default: "right", means left-to-right)
* - inner - inner loop (default "cols": print $loop line by line, * - inner - inner loop (default "cols": print $loop line by line,
* $loop will be printed column by column otherwise) * $loop will be printed column by column otherwise)
* </pre> *
* Examples: * Examples:
* <pre> *
* {table loop=$data} * {table loop=$data}
* {table loop=$data cols=4 tr_attr='"bgcolor=red"'} * {table loop=$data cols=4 tr_attr='"bgcolor=red"'}
* {table loop=$data cols="first,second,third" tr_attr=$colors} * {table loop=$data cols="first,second,third" tr_attr=$colors}
* </pre> *
* *
* @author Monte Ohrt <monte at ohrt dot com> * @author Monte Ohrt <monte at ohrt dot com>
* @author credit to Messju Mohr <messju at lammfellpuschen dot de> * @author credit to Messju Mohr <messju at lammfellpuschen dot de>
@ -127,7 +127,7 @@ function smarty_function_html_table($params)
} }
if (is_array($cols)) { if (is_array($cols)) {
$cols = ($hdir == 'right') ? $cols : array_reverse($cols); $cols = ($hdir === 'right') ? $cols : array_reverse($cols);
$output .= "<thead><tr>\n"; $output .= "<thead><tr>\n";
for ($r = 0; $r < $cols_count; $r ++) { for ($r = 0; $r < $cols_count; $r ++) {
@ -141,11 +141,11 @@ function smarty_function_html_table($params)
$output .= "<tbody>\n"; $output .= "<tbody>\n";
for ($r = 0; $r < $rows; $r ++) { for ($r = 0; $r < $rows; $r ++) {
$output .= "<tr" . smarty_function_html_table_cycle('tr', $tr_attr, $r) . ">\n"; $output .= "<tr" . smarty_function_html_table_cycle('tr', $tr_attr, $r) . ">\n";
$rx = ($vdir == 'down') ? $r * $cols_count : ($rows - 1 - $r) * $cols_count; $rx = ($vdir === 'down') ? $r * $cols_count : ($rows - 1 - $r) * $cols_count;
for ($c = 0; $c < $cols_count; $c ++) { for ($c = 0; $c < $cols_count; $c ++) {
$x = ($hdir == 'right') ? $rx + $c : $rx + $cols_count - 1 - $c; $x = ($hdir === 'right') ? $rx + $c : $rx + $cols_count - 1 - $c;
if ($inner != 'cols') { if ($inner !== 'cols') {
/* shuffle x to loop over rows*/ /* shuffle x to loop over rows*/
$x = floor($x / $cols_count) + ($x % $cols_count) * $rows; $x = floor($x / $cols_count) + ($x % $cols_count) * $rows;
} }
@ -163,7 +163,13 @@ function smarty_function_html_table($params)
return $output; return $output;
} }
/**
* @param $name
* @param $var
* @param $no
*
* @return string
*/
function smarty_function_html_table_cycle($name, $var, $no) function smarty_function_html_table_cycle($name, $var, $no)
{ {
if (!is_array($var)) { if (!is_array($var)) {

View File

@ -8,35 +8,35 @@
/** /**
* Smarty {mailto} function plugin * Smarty {mailto} function plugin
* Type: function<br> * Type: function
* Name: mailto<br> * Name: mailto
* Date: May 21, 2002 * Date: May 21, 2002
* Purpose: automate mailto address link creation, and optionally encode them.<br> * Purpose: automate mailto address link creation, and optionally encode them.
* Params: * Params:
* <pre> *
* - address - (required) - e-mail address * - address - (required) - e-mail address
* - text - (optional) - text to display, default is address * - text - (optional) - text to display, default is address
* - encode - (optional) - can be one of: * - encode - (optional) - can be one of:
* * none : no encoding (default) * * none : no encoding (default)
* * javascript : encode with javascript * * javascript : encode with javascript
* * javascript_charcode : encode with javascript charcode * * javascript_charcode : encode with javascript charcode
* * hex : encode with hexidecimal (no javascript) * * hex : encode with hexadecimal (no javascript)
* - cc - (optional) - address(es) to carbon copy * - cc - (optional) - address(es) to carbon copy
* - bcc - (optional) - address(es) to blind carbon copy * - bcc - (optional) - address(es) to blind carbon copy
* - subject - (optional) - e-mail subject * - subject - (optional) - e-mail subject
* - newsgroups - (optional) - newsgroup(s) to post to * - newsgroups - (optional) - newsgroup(s) to post to
* - followupto - (optional) - address(es) to follow up to * - followupto - (optional) - address(es) to follow up to
* - extra - (optional) - extra tags for the href link * - extra - (optional) - extra tags for the href link
* </pre> *
* Examples: * Examples:
* <pre> *
* {mailto address="me@domain.com"} * {mailto address="me@domain.com"}
* {mailto address="me@domain.com" encode="javascript"} * {mailto address="me@domain.com" encode="javascript"}
* {mailto address="me@domain.com" encode="hex"} * {mailto address="me@domain.com" encode="hex"}
* {mailto address="me@domain.com" subject="Hello to you!"} * {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" cc="you@domain.com,they@domain.com"}
* {mailto address="me@domain.com" extra='class="mailto"'} * {mailto address="me@domain.com" extra='class="mailto"'}
* </pre> *
* *
* @link http://www.smarty.net/manual/en/language.function.mailto.php {mailto} * @link http://www.smarty.net/manual/en/language.function.mailto.php {mailto}
* (Smarty online manual) * (Smarty online manual)
@ -103,7 +103,7 @@ function smarty_function_mailto($params)
return; return;
} }
// FIXME: (rodneyrehm) document.write() excues me what? 1998 has passed! // FIXME: (rodneyrehm) document.write() excues me what? 1998 has passed!
if ($encode == 'javascript') { if ($encode === 'javascript') {
$string = 'document.write(\'<a href="mailto:' . $address . '" ' . $extra . '>' . $text . '</a>\');'; $string = 'document.write(\'<a href="mailto:' . $address . '" ' . $extra . '>' . $text . '</a>\');';
$js_encode = ''; $js_encode = '';
@ -112,7 +112,7 @@ function smarty_function_mailto($params)
} }
return '<script type="text/javascript">eval(unescape(\'' . $js_encode . '\'))</script>'; return '<script type="text/javascript">eval(unescape(\'' . $js_encode . '\'))</script>';
} elseif ($encode == 'javascript_charcode') { } elseif ($encode === 'javascript_charcode') {
$string = '<a href="mailto:' . $address . '" ' . $extra . '>' . $text . '</a>'; $string = '<a href="mailto:' . $address . '" ' . $extra . '>' . $text . '</a>';
for ($x = 0, $y = strlen($string); $x < $y; $x ++) { for ($x = 0, $y = strlen($string); $x < $y; $x ++) {
@ -123,7 +123,7 @@ function smarty_function_mailto($params)
implode(',', $ord) . "))" . "}\n" . "</script>\n"; implode(',', $ord) . "))" . "}\n" . "</script>\n";
return $_ret; return $_ret;
} elseif ($encode == 'hex') { } elseif ($encode === 'hex') {
preg_match('!^(.*)(\?.*)$!', $address, $match); preg_match('!^(.*)(\?.*)$!', $address, $match);
if (!empty($match[ 2 ])) { if (!empty($match[ 2 ])) {
trigger_error("mailto: hex encoding does not work with extra attributes. Try javascript.", E_USER_WARNING); trigger_error("mailto: hex encoding does not work with extra attributes. Try javascript.", E_USER_WARNING);

View File

@ -9,8 +9,8 @@
/** /**
* Smarty {math} function plugin * Smarty {math} function plugin
* Type: function<br> * Type: function
* Name: math<br> * Name: math
* Purpose: handle math computations in template * Purpose: handle math computations in template
* *
* @link http://www.smarty.net/manual/en/language.function.math.php {math} * @link http://www.smarty.net/manual/en/language.function.math.php {math}
@ -38,7 +38,7 @@ function smarty_function_math($params, $template)
$equation = $params[ 'equation' ]; $equation = $params[ 'equation' ];
// make sure parenthesis are balanced // make sure parenthesis are balanced
if (substr_count($equation, "(") != substr_count($equation, ")")) { if (substr_count($equation, '(') !== substr_count($equation, ')')) {
trigger_error("math: unbalanced parenthesis", E_USER_WARNING); trigger_error("math: unbalanced parenthesis", E_USER_WARNING);
return; return;
@ -59,9 +59,9 @@ function smarty_function_math($params, $template)
} }
foreach ($params as $key => $val) { foreach ($params as $key => $val) {
if ($key != "equation" && $key != "format" && $key != "assign") { if ($key !== 'equation' && $key !== 'format' && $key !== 'assign') {
// make sure value is not empty // make sure value is not empty
if (strlen($val) == 0) { if (strlen($val) === 0) {
trigger_error("math: parameter '{$key}' is empty", E_USER_WARNING); trigger_error("math: parameter '{$key}' is empty", E_USER_WARNING);
return; return;
@ -86,7 +86,7 @@ function smarty_function_math($params, $template)
} }
foreach ($params as $key => $val) { foreach ($params as $key => $val) {
if ($key != "equation" && $key != "format" && $key != "assign") { if ($key !== 'equation' && $key !== 'format' && $key !== 'assign') {
$equation = preg_replace("/\b$key\b/", " \$params['$key'] ", $equation); $equation = preg_replace("/\b$key\b/", " \$params['$key'] ", $equation);
} }
} }

View File

@ -8,8 +8,8 @@
/** /**
* Smarty capitalize modifier plugin * Smarty capitalize modifier plugin
* Type: modifier<br> * Type: modifier
* Name: capitalize<br> * Name: capitalize
* Purpose: capitalize words in the string * Purpose: capitalize words in the string
* {@internal {$string|capitalize:true:true} is the fastest option for MBString enabled systems }} * {@internal {$string|capitalize:true:true} is the fastest option for MBString enabled systems }}
* *
@ -80,21 +80,38 @@ function smarty_modifier_capitalize($string, $uc_digits = false, $lc_rest = fals
* *
* @author Kyle Renfrow * @author Kyle Renfrow
*/ */
/**
* @param $matches
*
* @return string
*/
function smarty_mod_cap_mbconvert_cb($matches) function smarty_mod_cap_mbconvert_cb($matches)
{ {
return stripslashes($matches[ 1 ]) . mb_convert_case(stripslashes($matches[ 2 ]), MB_CASE_UPPER, Smarty::$_CHARSET); return stripslashes($matches[ 1 ]) . mb_convert_case(stripslashes($matches[ 2 ]), MB_CASE_UPPER, Smarty::$_CHARSET);
} }
/**
* @param $matches
*
* @return string
*/
function smarty_mod_cap_mbconvert2_cb($matches) function smarty_mod_cap_mbconvert2_cb($matches)
{ {
return stripslashes($matches[ 1 ]) . mb_convert_case(stripslashes($matches[ 3 ]), MB_CASE_UPPER, Smarty::$_CHARSET); return stripslashes($matches[ 1 ]) . mb_convert_case(stripslashes($matches[ 3 ]), MB_CASE_UPPER, Smarty::$_CHARSET);
} }
/**
* @param $matches
*
* @return string
*/
function smarty_mod_cap_ucfirst_cb($matches) function smarty_mod_cap_ucfirst_cb($matches)
{ {
return stripslashes($matches[ 1 ]) . ucfirst(stripslashes($matches[ 2 ])); return stripslashes($matches[ 1 ]) . ucfirst(stripslashes($matches[ 2 ]));
} }
/**
* @param $matches
*
* @return string
*/
function smarty_mod_cap_ucfirst2_cb($matches) function smarty_mod_cap_ucfirst2_cb($matches)
{ {
return stripslashes($matches[ 1 ]) . ucfirst(stripslashes($matches[ 3 ])); return stripslashes($matches[ 1 ]) . ucfirst(stripslashes($matches[ 3 ]));

View File

@ -8,10 +8,10 @@
/** /**
* Smarty date_format modifier plugin * Smarty date_format modifier plugin
* Type: modifier<br> * Type: modifier
* Name: date_format<br> * Name: date_format
* Purpose: format datestamps via strftime<br> * Purpose: format datestamps via strftime
* Input:<br> * Input:
* - string: input date string * - string: input date string
* - format: strftime format for output * - format: strftime format for output
* - default_date: default date if $string is empty * - default_date: default date if $string is empty
@ -35,20 +35,36 @@ function smarty_modifier_date_format($string, $format = null, $default_date = ''
/** /**
* require_once the {@link shared.make_timestamp.php} plugin * require_once the {@link shared.make_timestamp.php} plugin
*/ */
static $is_loaded = false;
if (!$is_loaded) {
if (!is_callable('smarty_make_timestamp')) { if (!is_callable('smarty_make_timestamp')) {
require_once(SMARTY_PLUGINS_DIR . 'shared.make_timestamp.php'); require_once(SMARTY_PLUGINS_DIR . 'shared.make_timestamp.php');
} }
if ($string != '' && $string != '0000-00-00' && $string != '0000-00-00 00:00:00') { $is_loaded = true;
}
if ($string !== '' && $string !== '0000-00-00' && $string !== '0000-00-00 00:00:00') {
$timestamp = smarty_make_timestamp($string); $timestamp = smarty_make_timestamp($string);
} elseif ($default_date != '') { } elseif ($default_date !== '') {
$timestamp = smarty_make_timestamp($default_date); $timestamp = smarty_make_timestamp($default_date);
} else { } else {
return; return;
} }
if ($formatter == 'strftime' || ($formatter == 'auto' && strpos($format, '%') !== false)) { if ($formatter === 'strftime' || ($formatter === 'auto' && strpos($format, '%') !== false)) {
if (Smarty::$_IS_WINDOWS) { if (Smarty::$_IS_WINDOWS) {
$_win_from = array('%D', '%h', '%n', '%r', '%R', '%t', '%T'); $_win_from = array('%D',
$_win_to = array('%m/%d/%y', '%b', "\n", '%I:%M:%S %p', '%H:%M', "\t", '%H:%M:%S'); '%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) { if (strpos($format, '%e') !== false) {
$_win_from[] = '%e'; $_win_from[] = '%e';
$_win_to[] = sprintf('%\' 2d', date('j', $timestamp)); $_win_to[] = sprintf('%\' 2d', date('j', $timestamp));

View File

@ -8,8 +8,8 @@
/** /**
* Smarty debug_print_var modifier plugin * Smarty debug_print_var modifier plugin
* Type: modifier<br> * Type: modifier
* Name: debug_print_var<br> * Name: debug_print_var
* Purpose: formats variable contents for display in the console * Purpose: formats variable contents for display in the console
* *
* @author Monte Ohrt <monte at ohrt dot com> * @author Monte Ohrt <monte at ohrt dot com>
@ -28,7 +28,7 @@ function smarty_modifier_debug_print_var($var, $max = 10, $length = 40, $depth =
switch (gettype($var)) { switch (gettype($var)) {
case 'array' : case 'array' :
$results = '<b>Array (' . count($var) . ')</b>'; $results = '<b>Array (' . count($var) . ')</b>';
if ($depth == $max) { if ($depth === $max) {
break; break;
} }
foreach ($var as $curr_key => $curr_val) { foreach ($var as $curr_key => $curr_val) {
@ -46,7 +46,7 @@ function smarty_modifier_debug_print_var($var, $max = 10, $length = 40, $depth =
$results .= ' called recursive'; $results .= ' called recursive';
break; break;
} }
if ($depth == $max) { if ($depth === $max) {
break; break;
} }
$objects[] = $var; $objects[] = $var;

View File

@ -8,8 +8,8 @@
/** /**
* Smarty escape modifier plugin * Smarty escape modifier plugin
* Type: modifier<br> * Type: modifier
* Name: escape<br> * Name: escape
* Purpose: escape string for output * Purpose: escape string for output
* *
* @link http://www.smarty.net/docs/en/language.modifier.escape * @link http://www.smarty.net/docs/en/language.modifier.escape
@ -25,6 +25,8 @@
function smarty_modifier_escape($string, $esc_type = 'html', $char_set = null, $double_encode = true) function smarty_modifier_escape($string, $esc_type = 'html', $char_set = null, $double_encode = true)
{ {
static $_double_encode = null; static $_double_encode = null;
static $is_loaded_1 = false;
static $is_loaded_2 = false;
if ($_double_encode === null) { if ($_double_encode === null) {
$_double_encode = version_compare(PHP_VERSION, '5.2.3', '>='); $_double_encode = version_compare(PHP_VERSION, '5.2.3', '>=');
} }
@ -46,7 +48,9 @@ function smarty_modifier_escape($string, $esc_type = 'html', $char_set = null, $
// php <5.2.3 - prevent double encoding // php <5.2.3 - prevent double encoding
$string = preg_replace('!&(#?\w+);!', '%%%SMARTY_START%%%\\1%%%SMARTY_END%%%', $string); $string = preg_replace('!&(#?\w+);!', '%%%SMARTY_START%%%\\1%%%SMARTY_END%%%', $string);
$string = htmlspecialchars($string, ENT_QUOTES, $char_set); $string = htmlspecialchars($string, ENT_QUOTES, $char_set);
$string = str_replace(array('%%%SMARTY_START%%%', '%%%SMARTY_END%%%'), array('&', ';'), $string); $string = str_replace(array('%%%SMARTY_START%%%',
'%%%SMARTY_END%%%'), array('&',
';'), $string);
return $string; return $string;
} }
@ -67,7 +71,9 @@ function smarty_modifier_escape($string, $esc_type = 'html', $char_set = null, $
$string = preg_replace('!&(#?\w+);!', '%%%SMARTY_START%%%\\1%%%SMARTY_END%%%', $string); $string = preg_replace('!&(#?\w+);!', '%%%SMARTY_START%%%\\1%%%SMARTY_END%%%', $string);
$string = htmlspecialchars($string, ENT_QUOTES, $char_set); $string = htmlspecialchars($string, ENT_QUOTES, $char_set);
$string = $string =
str_replace(array('%%%SMARTY_START%%%', '%%%SMARTY_END%%%'), array('&', ';'), $string); str_replace(array('%%%SMARTY_START%%%',
'%%%SMARTY_END%%%'), array('&',
';'), $string);
return $string; return $string;
} }
@ -86,7 +92,9 @@ function smarty_modifier_escape($string, $esc_type = 'html', $char_set = null, $
} else { } else {
$string = preg_replace('!&(#?\w+);!', '%%%SMARTY_START%%%\\1%%%SMARTY_END%%%', $string); $string = preg_replace('!&(#?\w+);!', '%%%SMARTY_START%%%\\1%%%SMARTY_END%%%', $string);
$string = htmlentities($string, ENT_QUOTES, $char_set); $string = htmlentities($string, ENT_QUOTES, $char_set);
$string = str_replace(array('%%%SMARTY_START%%%', '%%%SMARTY_END%%%'), array('&', ';'), $string); $string = str_replace(array('%%%SMARTY_START%%%',
'%%%SMARTY_END%%%'), array('&',
';'), $string);
return $string; return $string;
} }
@ -116,9 +124,12 @@ function smarty_modifier_escape($string, $esc_type = 'html', $char_set = null, $
case 'hexentity': case 'hexentity':
$return = ''; $return = '';
if (Smarty::$_MBSTRING) { if (Smarty::$_MBSTRING) {
if (!$is_loaded_1) {
if (!is_callable('smarty_mb_to_unicode')) { if (!is_callable('smarty_mb_to_unicode')) {
require_once(SMARTY_PLUGINS_DIR . 'shared.mb_unicode.php'); require_once(SMARTY_PLUGINS_DIR . 'shared.mb_unicode.php');
} }
$is_loaded_1 = true;
}
$return = ''; $return = '';
foreach (smarty_mb_to_unicode($string, Smarty::$_CHARSET) as $unicode) { foreach (smarty_mb_to_unicode($string, Smarty::$_CHARSET) as $unicode) {
$return .= '&#x' . strtoupper(dechex($unicode)) . ';'; $return .= '&#x' . strtoupper(dechex($unicode)) . ';';
@ -137,9 +148,12 @@ function smarty_modifier_escape($string, $esc_type = 'html', $char_set = null, $
case 'decentity': case 'decentity':
$return = ''; $return = '';
if (Smarty::$_MBSTRING) { if (Smarty::$_MBSTRING) {
if (!$is_loaded_1) {
if (!is_callable('smarty_mb_to_unicode')) { if (!is_callable('smarty_mb_to_unicode')) {
require_once(SMARTY_PLUGINS_DIR . 'shared.mb_unicode.php'); require_once(SMARTY_PLUGINS_DIR . 'shared.mb_unicode.php');
} }
$is_loaded_1 = true;
}
$return = ''; $return = '';
foreach (smarty_mb_to_unicode($string, Smarty::$_CHARSET) as $unicode) { foreach (smarty_mb_to_unicode($string, Smarty::$_CHARSET) as $unicode) {
$return .= '&#' . $unicode . ';'; $return .= '&#' . $unicode . ';';
@ -157,26 +171,40 @@ function smarty_modifier_escape($string, $esc_type = 'html', $char_set = null, $
case 'javascript': case 'javascript':
// escape quotes and backslashes, newlines, etc. // escape quotes and backslashes, newlines, etc.
return strtr($string, array('\\' => '\\\\', "'" => "\\'", '"' => '\\"', "\r" => '\\r', "\n" => '\\n', return strtr($string, array('\\' => '\\\\',
"'" => "\\'",
'"' => '\\"',
"\r" => '\\r',
"\n" => '\\n',
'</' => '<\/')); '</' => '<\/'));
case 'mail': case 'mail':
if (Smarty::$_MBSTRING) { if (Smarty::$_MBSTRING) {
if (!$is_loaded_2) {
if (!is_callable('smarty_mb_str_replace')) { if (!is_callable('smarty_mb_str_replace')) {
require_once(SMARTY_PLUGINS_DIR . 'shared.mb_str_replace.php'); require_once(SMARTY_PLUGINS_DIR . 'shared.mb_str_replace.php');
} }
return smarty_mb_str_replace(array('@', '.'), array(' [AT] ', ' [DOT] '), $string); $is_loaded_2 = true;
}
return smarty_mb_str_replace(array('@',
'.'), array(' [AT] ',
' [DOT] '), $string);
} }
// no MBString fallback // no MBString fallback
return str_replace(array('@', '.'), array(' [AT] ', ' [DOT] '), $string); return str_replace(array('@',
'.'), array(' [AT] ',
' [DOT] '), $string);
case 'nonstd': case 'nonstd':
// escape non-standard chars, such as ms document quotes // escape non-standard chars, such as ms document quotes
$return = ''; $return = '';
if (Smarty::$_MBSTRING) { if (Smarty::$_MBSTRING) {
if (!$is_loaded_1) {
if (!is_callable('smarty_mb_to_unicode')) { if (!is_callable('smarty_mb_to_unicode')) {
require_once(SMARTY_PLUGINS_DIR . 'shared.mb_unicode.php'); require_once(SMARTY_PLUGINS_DIR . 'shared.mb_unicode.php');
} }
$is_loaded_1 = true;
}
foreach (smarty_mb_to_unicode($string, Smarty::$_CHARSET) as $unicode) { foreach (smarty_mb_to_unicode($string, Smarty::$_CHARSET) as $unicode) {
if ($unicode >= 126) { if ($unicode >= 126) {
$return .= '&#' . $unicode . ';'; $return .= '&#' . $unicode . ';';

View File

@ -0,0 +1,75 @@
<?php
/**
* Smarty plugin
*
* @package Smarty
* @subpackage PluginsModifier
*/
/**
* Smarty wordwrap modifier plugin
* Type: modifier
* Name: mb_wordwrap
* Purpose: 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_modifier_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;
}
} else if ($token === "\n") {
// hard break must reset counters
$length = 0;
}
$_previous = $_space;
// add the token
$t .= $token;
}
}
return $t;
}

View File

@ -8,8 +8,8 @@
/** /**
* Smarty regex_replace modifier plugin * Smarty regex_replace modifier plugin
* Type: modifier<br> * Type: modifier
* Name: regex_replace<br> * Name: regex_replace
* Purpose: regular expression search/replace * Purpose: regular expression search/replace
* *
* @link http://smarty.php.net/manual/en/language.modifier.regex.replace.php * @link http://smarty.php.net/manual/en/language.modifier.regex.replace.php

View File

@ -8,8 +8,8 @@
/** /**
* Smarty replace modifier plugin * Smarty replace modifier plugin
* Type: modifier<br> * Type: modifier
* Name: replace<br> * Name: replace
* Purpose: simple search/replace * Purpose: simple search/replace
* *
* @link http://smarty.php.net/manual/en/language.modifier.replace.php replace (Smarty online manual) * @link http://smarty.php.net/manual/en/language.modifier.replace.php replace (Smarty online manual)
@ -24,9 +24,13 @@
*/ */
function smarty_modifier_replace($string, $search, $replace) function smarty_modifier_replace($string, $search, $replace)
{ {
static $is_loaded = false;
if (Smarty::$_MBSTRING) { if (Smarty::$_MBSTRING) {
if (!$is_loaded) {
if (!is_callable('smarty_mb_str_replace')) { if (!is_callable('smarty_mb_str_replace')) {
require_once(SMARTY_PLUGINS_DIR . 'shared.mb_str_replace.php'); require_once(SMARTY_PLUGINS_DIR . 'shared.mb_str_replace.php');
}
$is_loaded = true;
} }
return smarty_mb_str_replace($search, $replace, $string); return smarty_mb_str_replace($search, $replace, $string);
} }

View File

@ -8,8 +8,8 @@
/** /**
* Smarty spacify modifier plugin * Smarty spacify modifier plugin
* Type: modifier<br> * Type: modifier
* Name: spacify<br> * Name: spacify
* Purpose: add spaces between characters in a string * Purpose: add spaces between characters in a string
* *
* @link http://smarty.php.net/manual/en/language.modifier.spacify.php spacify (Smarty online manual) * @link http://smarty.php.net/manual/en/language.modifier.spacify.php spacify (Smarty online manual)

View File

@ -8,8 +8,8 @@
/** /**
* Smarty truncate modifier plugin * Smarty truncate modifier plugin
* Type: modifier<br> * Type: modifier
* Name: truncate<br> * Name: truncate
* Purpose: Truncate a string to a certain length if necessary, * Purpose: Truncate a string to a certain length if necessary,
* optionally splitting in the middle of a word, and * optionally splitting in the middle of a word, and
* appending the $etc string or inserting $etc into the middle. * appending the $etc string or inserting $etc into the middle.
@ -27,7 +27,7 @@
*/ */
function smarty_modifier_truncate($string, $length = 80, $etc = '...', $break_words = false, $middle = false) function smarty_modifier_truncate($string, $length = 80, $etc = '...', $break_words = false, $middle = false)
{ {
if ($length == 0) { if ($length === 0) {
return ''; return '';
} }

View File

@ -8,11 +8,11 @@
/** /**
* Smarty cat modifier plugin * Smarty cat modifier plugin
* Type: modifier<br> * Type: modifier
* Name: cat<br> * Name: cat
* Date: Feb 24, 2003<br> * Date: Feb 24, 2003
* Purpose: catenate a value to a variable<br> * Purpose: catenate a value to a variable
* Input: string to catenate<br> * Input: string to catenate
* Example: {$var|cat:"foo"} * Example: {$var|cat:"foo"}
* *
* @link http://smarty.php.net/manual/en/language.modifier.cat.php cat * @link http://smarty.php.net/manual/en/language.modifier.cat.php cat

View File

@ -8,8 +8,8 @@
/** /**
* Smarty count_characters modifier plugin * Smarty count_characters modifier plugin
* Type: modifier<br> * Type: modifier
* Name: count_characteres<br> * Name: count_characters
* Purpose: count the number of characters in a text * 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) * @link http://www.smarty.net/manual/en/language.modifier.count.characters.php count_characters (Smarty online manual)
@ -21,7 +21,7 @@
*/ */
function smarty_modifiercompiler_count_characters($params) function smarty_modifiercompiler_count_characters($params)
{ {
if (!isset($params[ 1 ]) || $params[ 1 ] != 'true') { if (!isset($params[ 1 ]) || $params[ 1 ] !== 'true') {
return 'preg_match_all(\'/[^\s]/' . Smarty::$_UTF8_MODIFIER . '\',' . $params[ 0 ] . ', $tmp)'; return 'preg_match_all(\'/[^\s]/' . Smarty::$_UTF8_MODIFIER . '\',' . $params[ 0 ] . ', $tmp)';
} }
if (Smarty::$_MBSTRING) { if (Smarty::$_MBSTRING) {

View File

@ -8,8 +8,8 @@
/** /**
* Smarty count_paragraphs modifier plugin * Smarty count_paragraphs modifier plugin
* Type: modifier<br> * Type: modifier
* Name: count_paragraphs<br> * Name: count_paragraphs
* Purpose: count the number of paragraphs in a text * Purpose: count the number of paragraphs in a text
* *
* @link http://www.smarty.net/manual/en/language.modifier.count.paragraphs.php * @link http://www.smarty.net/manual/en/language.modifier.count.paragraphs.php

View File

@ -8,7 +8,7 @@
/** /**
* Smarty count_sentences modifier plugin * Smarty count_sentences modifier plugin
* Type: modifier<br> * Type: modifier
* Name: count_sentences * Name: count_sentences
* Purpose: count the number of sentences in a text * Purpose: count the number of sentences in a text
* *

View File

@ -8,8 +8,8 @@
/** /**
* Smarty count_words modifier plugin * Smarty count_words modifier plugin
* Type: modifier<br> * Type: modifier
* Name: count_words<br> * Name: count_words
* Purpose: count the number of words in a text * 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) * @link http://www.smarty.net/manual/en/language.modifier.count.words.php count_words (Smarty online manual)

View File

@ -8,8 +8,8 @@
/** /**
* Smarty default modifier plugin * Smarty default modifier plugin
* Type: modifier<br> * Type: modifier
* Name: default<br> * Name: default
* Purpose: designate default value for empty variables * Purpose: designate default value for empty variables
* *
* @link http://www.smarty.net/manual/en/language.modifier.default.php default (Smarty online manual) * @link http://www.smarty.net/manual/en/language.modifier.default.php default (Smarty online manual)

View File

@ -5,27 +5,27 @@
* @package Smarty * @package Smarty
* @subpackage PluginsModifierCompiler * @subpackage PluginsModifierCompiler
*/ */
/** /**
* Smarty escape modifier plugin * Smarty escape modifier plugin
* Type: modifier<br> * Type: modifier
* Name: escape<br> * Name: escape
* Purpose: escape string for output * Purpose: escape string for output
* *
* @link http://www.smarty.net/docsv2/en/language.modifier.escape count_characters (Smarty online manual) * @link http://www.smarty.net/docsv2/en/language.modifier.escape count_characters (Smarty online manual)
* @author Rodney Rehm * @author Rodney Rehm
* *
* @param array $params parameters * @param array $params parameters
* @param $compiler * @param Smarty_Internal_TemplateCompilerBase $compiler
* *
* @return string with compiled code * @return string with compiled code
* @throws \SmartyException
*/ */
function smarty_modifiercompiler_escape($params, $compiler) function smarty_modifiercompiler_escape($params, Smarty_Internal_TemplateCompilerBase $compiler)
{ {
static $_double_encode = null; static $_double_encode = null;
if (!is_callable('smarty_literal_compiler_param')) { static $is_loaded = false;
require_once(SMARTY_PLUGINS_DIR . 'shared.literal_compiler_param.php'); $compiler->template->_checkPlugins(array(array('function' => 'smarty_literal_compiler_param',
} 'file' => SMARTY_PLUGINS_DIR . 'shared.literal_compiler_param.php')));
if ($_double_encode === null) { if ($_double_encode === null) {
$_double_encode = version_compare(PHP_VERSION, '5.2.3', '>='); $_double_encode = version_compare(PHP_VERSION, '5.2.3', '>=');
} }
@ -100,14 +100,14 @@ function smarty_modifiercompiler_escape($params, $compiler)
// could not optimize |escape call, so fallback to regular plugin // could not optimize |escape call, so fallback to regular plugin
if ($compiler->template->caching && ($compiler->tag_nocache | $compiler->nocache)) { if ($compiler->template->caching && ($compiler->tag_nocache | $compiler->nocache)) {
$compiler->parent_compiler->template->compiled->required_plugins[ 'nocache' ][ 'escape' ][ 'modifier' ][ 'file' ] = $compiler->required_plugins[ 'nocache' ][ 'escape' ][ 'modifier' ][ 'file' ] =
SMARTY_PLUGINS_DIR . 'modifier.escape.php'; SMARTY_PLUGINS_DIR . 'modifier.escape.php';
$compiler->parent_compiler->template->compiled->required_plugins[ 'nocache' ][ 'escape' ][ 'modifier' ][ 'function' ] = $compiler->required_plugins[ 'nocache' ][ 'escape' ][ 'modifier' ][ 'function' ] =
'smarty_modifier_escape'; 'smarty_modifier_escape';
} else { } else {
$compiler->parent_compiler->template->compiled->required_plugins[ 'compiled' ][ 'escape' ][ 'modifier' ][ 'file' ] = $compiler->required_plugins[ 'compiled' ][ 'escape' ][ 'modifier' ][ 'file' ] =
SMARTY_PLUGINS_DIR . 'modifier.escape.php'; SMARTY_PLUGINS_DIR . 'modifier.escape.php';
$compiler->parent_compiler->template->compiled->required_plugins[ 'compiled' ][ 'escape' ][ 'modifier' ][ 'function' ] = $compiler->required_plugins[ 'compiled' ][ 'escape' ][ 'modifier' ][ 'function' ] =
'smarty_modifier_escape'; 'smarty_modifier_escape';
} }

View File

@ -8,8 +8,8 @@
/** /**
* Smarty from_charset modifier plugin * Smarty from_charset modifier plugin
* Type: modifier<br> * Type: modifier
* Name: from_charset<br> * Name: from_charset
* Purpose: convert character encoding from $charset to internal encoding * Purpose: convert character encoding from $charset to internal encoding
* *
* @author Rodney Rehm * @author Rodney Rehm

View File

@ -8,8 +8,8 @@
/** /**
* Smarty indent modifier plugin * Smarty indent modifier plugin
* Type: modifier<br> * Type: modifier
* Name: indent<br> * Name: indent
* Purpose: indent lines of text * Purpose: indent lines of text
* *
* @link http://www.smarty.net/manual/en/language.modifier.indent.php indent (Smarty online manual) * @link http://www.smarty.net/manual/en/language.modifier.indent.php indent (Smarty online manual)

View File

@ -8,8 +8,8 @@
/** /**
* Smarty lower modifier plugin * Smarty lower modifier plugin
* Type: modifier<br> * Type: modifier
* Name: lower<br> * Name: lower
* Purpose: convert string to lowercase * Purpose: convert string to lowercase
* *
* @link http://www.smarty.net/manual/en/language.modifier.lower.php lower (Smarty online manual) * @link http://www.smarty.net/manual/en/language.modifier.lower.php lower (Smarty online manual)

View File

@ -8,8 +8,8 @@
/** /**
* Smarty noprint modifier plugin * Smarty noprint modifier plugin
* Type: modifier<br> * Type: modifier
* Name: noprint<br> * Name: noprint
* Purpose: return an empty string * Purpose: return an empty string
* *
* @author Uwe Tews * @author Uwe Tews

View File

@ -8,8 +8,8 @@
/** /**
* Smarty string_format modifier plugin * Smarty string_format modifier plugin
* Type: modifier<br> * Type: modifier
* Name: string_format<br> * Name: string_format
* Purpose: format strings via sprintf * Purpose: format strings via sprintf
* *
* @link http://www.smarty.net/manual/en/language.modifier.string.format.php string_format (Smarty online manual) * @link http://www.smarty.net/manual/en/language.modifier.string.format.php string_format (Smarty online manual)

View File

@ -8,11 +8,11 @@
/** /**
* Smarty strip modifier plugin * Smarty strip modifier plugin
* Type: modifier<br> * Type: modifier
* Name: strip<br> * Name: strip
* Purpose: Replace all repeated spaces, newlines, tabs * Purpose: Replace all repeated spaces, newlines, tabs
* with a single space or supplied replacement string.<br> * with a single space or supplied replacement string.
* Example: {$var|strip} {$var|strip:"&nbsp;"}<br> * Example: {$var|strip} {$var|strip:"&nbsp;"}
* Date: September 25th, 2002 * Date: September 25th, 2002
* *
* @link http://www.smarty.net/manual/en/language.modifier.strip.php strip (Smarty online manual) * @link http://www.smarty.net/manual/en/language.modifier.strip.php strip (Smarty online manual)

View File

@ -8,8 +8,8 @@
/** /**
* Smarty strip_tags modifier plugin * Smarty strip_tags modifier plugin
* Type: modifier<br> * Type: modifier
* Name: strip_tags<br> * Name: strip_tags
* Purpose: strip html tags from text * Purpose: strip html tags from text
* *
* @link http://www.smarty.net/docs/en/language.modifier.strip.tags.tpl strip_tags (Smarty online manual) * @link http://www.smarty.net/docs/en/language.modifier.strip.tags.tpl strip_tags (Smarty online manual)
@ -21,7 +21,7 @@
*/ */
function smarty_modifiercompiler_strip_tags($params) function smarty_modifiercompiler_strip_tags($params)
{ {
if (!isset($params[ 1 ]) || $params[ 1 ] === true || trim($params[ 1 ], '"') == 'true') { if (!isset($params[ 1 ]) || $params[ 1 ] === true || trim($params[ 1 ], '"') === 'true') {
return "preg_replace('!<[^>]*?>!', ' ', {$params[0]})"; return "preg_replace('!<[^>]*?>!', ' ', {$params[0]})";
} else { } else {
return 'strip_tags(' . $params[ 0 ] . ')'; return 'strip_tags(' . $params[ 0 ] . ')';

View File

@ -8,8 +8,8 @@
/** /**
* Smarty to_charset modifier plugin * Smarty to_charset modifier plugin
* Type: modifier<br> * Type: modifier
* Name: to_charset<br> * Name: to_charset
* Purpose: convert character encoding from internal encoding to $charset * Purpose: convert character encoding from internal encoding to $charset
* *
* @author Rodney Rehm * @author Rodney Rehm

View File

@ -8,8 +8,8 @@
/** /**
* Smarty unescape modifier plugin * Smarty unescape modifier plugin
* Type: modifier<br> * Type: modifier
* Name: unescape<br> * Name: unescape
* Purpose: unescape html entities * Purpose: unescape html entities
* *
* @author Rodney Rehm * @author Rodney Rehm
@ -26,7 +26,7 @@ function smarty_modifiercompiler_unescape($params)
if (!isset($params[ 2 ])) { if (!isset($params[ 2 ])) {
$params[ 2 ] = '\'' . addslashes(Smarty::$_CHARSET) . '\''; $params[ 2 ] = '\'' . addslashes(Smarty::$_CHARSET) . '\'';
} else { } else {
$params[ 2 ] = "'" . $params[ 2 ] . "'"; $params[ 2 ] = "'{$params[ 2 ]}'";
} }
switch (trim($params[ 1 ], '"\'')) { switch (trim($params[ 1 ], '"\'')) {

View File

@ -8,8 +8,8 @@
/** /**
* Smarty upper modifier plugin * Smarty upper modifier plugin
* Type: modifier<br> * Type: modifier
* Name: lower<br> * Name: lower
* Purpose: convert string to uppercase * Purpose: convert string to uppercase
* *
* @link http://smarty.php.net/manual/en/language.modifier.upper.php lower (Smarty online manual) * @link http://smarty.php.net/manual/en/language.modifier.upper.php lower (Smarty online manual)

View File

@ -5,22 +5,22 @@
* @package Smarty * @package Smarty
* @subpackage PluginsModifierCompiler * @subpackage PluginsModifierCompiler
*/ */
/** /**
* Smarty wordwrap modifier plugin * Smarty wordwrap modifier plugin
* Type: modifier<br> * Type: modifier
* Name: wordwrap<br> * Name: wordwrap
* Purpose: wrap a string of text at a given length * 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) * @link http://smarty.php.net/manual/en/language.modifier.wordwrap.php wordwrap (Smarty online manual)
* @author Uwe Tews * @author Uwe Tews
* *
* @param array $params parameters * @param array $params parameters
* @param $compiler * @param \Smarty_Internal_TemplateCompilerBase $compiler
* *
* @return string with compiled code * @return string with compiled code
* @throws \SmartyException
*/ */
function smarty_modifiercompiler_wordwrap($params, $compiler) function smarty_modifiercompiler_wordwrap($params, Smarty_Internal_TemplateCompilerBase $compiler)
{ {
if (!isset($params[ 1 ])) { if (!isset($params[ 1 ])) {
$params[ 1 ] = 80; $params[ 1 ] = 80;
@ -33,19 +33,7 @@ function smarty_modifiercompiler_wordwrap($params, $compiler)
} }
$function = 'wordwrap'; $function = 'wordwrap';
if (Smarty::$_MBSTRING) { if (Smarty::$_MBSTRING) {
if ($compiler->template->caching && ($compiler->tag_nocache | $compiler->nocache)) { $function = $compiler->getPlugin('mb_wordwrap','modifier');
$compiler->parent_compiler->template->compiled->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->parent_compiler->template->compiled->required_plugins[ 'compiled' ][ 'wordwrap' ][ 'modifier' ][ 'file' ] =
SMARTY_PLUGINS_DIR . 'shared.mb_wordwrap.php';
$compiler->parent_compiler->template->compiled->required_plugins[ 'compiled' ][ 'wordwrap' ][ 'modifier' ][ 'function' ] =
'smarty_mb_wordwrap';
} }
$function = 'smarty_mb_wordwrap';
}
return $function . '(' . $params[ 0 ] . ',' . $params[ 1 ] . ',' . $params[ 2 ] . ',' . $params[ 3 ] . ')'; return $function . '(' . $params[ 0 ] . ',' . $params[ 1 ] . ',' . $params[ 2 ] . ',' . $params[ 3 ] . ')';
} }

View File

@ -24,7 +24,7 @@ function smarty_outputfilter_trimwhitespace($source)
$_offset = 0; $_offset = 0;
// Unify Line-Breaks to \n // Unify Line-Breaks to \n
$source = preg_replace("/\015\012|\015|\012/", "\n", $source); $source = preg_replace('/\015\012|\015|\012/', "\n", $source);
// capture Internet Explorer and KnockoutJS Conditional Comments // capture Internet Explorer and KnockoutJS Conditional Comments
if (preg_match_all('#<!--((\[[^\]]+\]>.*?<!\[[^\]]+\])|(\s*/?ko\s+.+))-->#is', $source, $matches, if (preg_match_all('#<!--((\[[^\]]+\]>.*?<!\[[^\]]+\])|(\s*/?ko\s+.+))-->#is', $source, $matches,

View File

@ -8,7 +8,7 @@
/** /**
* escape_special_chars common function * escape_special_chars common function
* Function: smarty_function_escape_special_chars<br> * Function: smarty_function_escape_special_chars
* Purpose: used by other smarty functions to escape * Purpose: used by other smarty functions to escape
* special chars except for already escaped ones * special chars except for already escaped ones
* *

View File

@ -7,7 +7,7 @@
*/ */
/** /**
* Function: smarty_make_timestamp<br> * Function: smarty_make_timestamp
* Purpose: used by other smarty functions to make a timestamp from a string. * Purpose: used by other smarty functions to make a timestamp from a string.
* *
* @author Monte Ohrt <monte at ohrt dot com> * @author Monte Ohrt <monte at ohrt dot com>
@ -25,7 +25,7 @@ function smarty_make_timestamp($string)
(interface_exists('DateTimeInterface', false) && $string instanceof DateTimeInterface) (interface_exists('DateTimeInterface', false) && $string instanceof DateTimeInterface)
) { ) {
return (int) $string->format('U'); // PHP 5.2 BC return (int) $string->format('U'); // PHP 5.2 BC
} elseif (strlen($string) == 14 && ctype_digit($string)) { } elseif (strlen($string) === 14 && ctype_digit($string)) {
// it is mysql timestamp format of YYYYMMDDHHMMSS? // 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), 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)); substr($string, 6, 2), substr($string, 0, 4));
@ -35,7 +35,7 @@ function smarty_make_timestamp($string)
} else { } else {
// strtotime should handle it // strtotime should handle it
$time = strtotime($string); $time = strtotime($string);
if ($time == - 1 || $time === false) { if ($time === - 1 || $time === false) {
// strtotime() was not able to parse $string, use "now": // strtotime() was not able to parse $string, use "now":
return time(); return time();
} }

View File

@ -6,12 +6,11 @@
* @subpackage PluginsShared * @subpackage PluginsShared
*/ */
if (!function_exists('smarty_mb_str_replace')) { if (!function_exists('smarty_mb_str_replace')) {
/** /**
* Multibyte string replace * Multibyte string replace
* *
* @param string $search the string to be searched * @param string|string[] $search the string to be searched
* @param string $replace the replacement string * @param string|string[] $replace the replacement string
* @param string $subject the source string * @param string $subject the source string
* @param int &$count number of matches found * @param int &$count number of matches found
* *
@ -29,7 +28,7 @@ if (!function_exists('smarty_mb_str_replace')) {
$string = smarty_mb_str_replace($search, $replace, $string, $c); $string = smarty_mb_str_replace($search, $replace, $string, $c);
$count += $c; $count += $c;
} }
} elseif (is_array($search)) { } else if (is_array($search)) {
if (!is_array($replace)) { if (!is_array($replace)) {
foreach ($search as &$string) { foreach ($search as &$string) {
$subject = smarty_mb_str_replace($string, $replace, $subject, $c); $subject = smarty_mb_str_replace($string, $replace, $subject, $c);
@ -37,7 +36,7 @@ if (!function_exists('smarty_mb_str_replace')) {
} }
} else { } else {
$n = max(count($search), count($replace)); $n = max(count($search), count($replace));
while ($n --) { while ($n--) {
$subject = smarty_mb_str_replace(current($search), current($replace), $subject, $c); $subject = smarty_mb_str_replace(current($search), current($replace), $subject, $c);
$count += $c; $count += $c;
next($search); next($search);
@ -49,7 +48,6 @@ if (!function_exists('smarty_mb_str_replace')) {
$count = count($parts) - 1; $count = count($parts) - 1;
$subject = implode($replace, $parts); $subject = implode($replace, $parts);
} }
return $subject; return $subject;
} }
} }

View File

@ -20,12 +20,12 @@
function smarty_mb_to_unicode($string, $encoding = null) function smarty_mb_to_unicode($string, $encoding = null)
{ {
if ($encoding) { if ($encoding) {
$expanded = mb_convert_encoding($string, "UTF-32BE", $encoding); $expanded = mb_convert_encoding($string, 'UTF-32BE', $encoding);
} else { } else {
$expanded = mb_convert_encoding($string, "UTF-32BE"); $expanded = mb_convert_encoding($string, 'UTF-32BE');
} }
return unpack("N*", $expanded); return unpack('N*', $expanded);
} }
/** /**
@ -46,8 +46,8 @@ function smarty_mb_from_unicode($unicode, $encoding = null)
$encoding = mb_internal_encoding(); $encoding = mb_internal_encoding();
} }
foreach ((array) $unicode as $utf32be) { foreach ((array) $unicode as $utf32be) {
$character = pack("N*", $utf32be); $character = pack('N*', $utf32be);
$t .= mb_convert_encoding($character, $encoding, "UTF-32BE"); $t .= mb_convert_encoding($character, $encoding, 'UTF-32BE');
} }
return $t; return $t;

View File

@ -1,75 +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;
}
}

View File

@ -5,15 +5,15 @@
* @package Smarty * @package Smarty
* @subpackage PluginsFilter * @subpackage PluginsFilter
*/ */
/** /**
* Smarty htmlspecialchars variablefilter plugin * Smarty htmlspecialchars variablefilter plugin
* *
* @param string $source input string * @param string $source input string
* @param \Smarty_Internal_Template $template
* *
* @return string filtered output * @return string filtered output
*/ */
function smarty_variablefilter_htmlspecialchars($source) function smarty_variablefilter_htmlspecialchars($source, Smarty_Internal_Template $template)
{ {
return htmlspecialchars($source, ENT_QUOTES, Smarty::$_CHARSET); return htmlspecialchars($source, ENT_QUOTES, Smarty::$_CHARSET);
} }

View File

@ -138,7 +138,7 @@ abstract class Smarty_CacheResource_Custom extends Smarty_CacheResource
$_smarty_tpl->compile_id, $content, $timestamp); $_smarty_tpl->compile_id, $content, $timestamp);
} }
if (isset($content)) { if (isset($content)) {
eval("?>" . $content); eval('?>' . $content);
$cached->content = null; $cached->content = null;
return true; return true;
} }
@ -204,7 +204,8 @@ abstract class Smarty_CacheResource_Custom extends Smarty_CacheResource
* @param string $compile_id compile id * @param string $compile_id compile id
* @param integer $exp_time expiration time (number of seconds, not timestamp) * @param integer $exp_time expiration time (number of seconds, not timestamp)
* *
* @return integer number of cache files deleted * @return int number of cache files deleted
* @throws \SmartyException
*/ */
public function clear(Smarty $smarty, $resource_name, $cache_id, $compile_id, $exp_time) public function clear(Smarty $smarty, $resource_name, $cache_id, $compile_id, $exp_time)
{ {

View File

@ -104,7 +104,7 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource
} }
} }
if (isset($content)) { if (isset($content)) {
eval("?>" . $content); eval('?>' . $content);
return true; return true;
} }
@ -180,7 +180,8 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource
* @param string $compile_id compile id * @param string $compile_id compile id
* @param integer $exp_time expiration time [being ignored] * @param integer $exp_time expiration time [being ignored]
* *
* @return integer number of cache files deleted [always -1] * @return int number of cache files deleted [always -1]
* @throws \SmartyException
* @uses buildCachedFilepath() to generate the CacheID * @uses buildCachedFilepath() to generate the CacheID
* @uses invalidate() to mark CacheIDs parent chain as outdated * @uses invalidate() to mark CacheIDs parent chain as outdated
* @uses delete() to remove CacheID from cache * @uses delete() to remove CacheID from cache
@ -272,8 +273,8 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource
*/ */
protected function addMetaTimestamp(&$content) protected function addMetaTimestamp(&$content)
{ {
$mt = explode(" ", microtime()); $mt = explode(' ', microtime());
$ts = pack("NN", $mt[ 1 ], (int) ($mt[ 0 ] * 100000000)); $ts = pack('NN', $mt[ 1 ], (int) ($mt[ 0 ] * 100000000));
$content = $ts . $content; $content = $ts . $content;
} }
@ -370,7 +371,7 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource
/** /**
* Translate a CacheID into the list of applicable InvalidationKeys. * Translate a CacheID into the list of applicable InvalidationKeys.
* Splits "some|chain|into|an|array" into array( '#clearAll#', 'some', 'some|chain', 'some|chain|into', ... ) * Splits 'some|chain|into|an|array' into array( '#clearAll#', 'some', 'some|chain', 'some|chain|into', ... )
* *
* @param string $cid CacheID to translate * @param string $cid CacheID to translate
* @param string $resource_name template name * @param string $resource_name template name

View File

@ -61,8 +61,8 @@ class Smarty_Data extends Smarty_Internal_Data
foreach ($_parent as $_key => $_val) { foreach ($_parent as $_key => $_val) {
$this->tpl_vars[ $_key ] = new Smarty_Variable($_val); $this->tpl_vars[ $_key ] = new Smarty_Variable($_val);
} }
} elseif ($_parent != null) { } elseif ($_parent !== null) {
throw new SmartyException("Wrong type for template variables"); throw new SmartyException('Wrong type for template variables');
} }
} }
} }

View File

@ -38,7 +38,7 @@ class Smarty_Internal_Block
public $prepend = false; public $prepend = false;
/** /**
* Block calls {$smarty.block.child} * Block calls $smarty.block.child
* *
* @var bool * @var bool
*/ */
@ -67,7 +67,7 @@ class Smarty_Internal_Block
/** /**
* Smarty_Internal_Block constructor. * Smarty_Internal_Block constructor.
* - if outer level {block} of child template ($state == 1) save it as child root block * - if outer level {block} of child template ($state === 1) save it as child root block
* - otherwise process inheritance and render * - otherwise process inheritance and render
* *
* @param string $name block name * @param string $name block name

View File

@ -7,7 +7,6 @@
* @author Uwe Tews * @author Uwe Tews
* @author Rodney Rehm * @author Rodney Rehm
*/ */
/** /**
* This class does contain all necessary methods for the HTML cache on file system * 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. * Implements the file system as resource for the HTML cache Version ussing nocache inserts.
@ -29,11 +28,14 @@ class Smarty_Internal_CacheResource_File extends Smarty_CacheResource
{ {
$source = &$_template->source; $source = &$_template->source;
$smarty = &$_template->smarty; $smarty = &$_template->smarty;
$_compile_dir_sep = $smarty->use_sub_dirs ? $smarty->ds : '^'; $_compile_dir_sep = $smarty->use_sub_dirs ? DIRECTORY_SEPARATOR : '^';
$_filepath = sha1($source->uid . $smarty->_joined_template_dir); $_filepath = sha1($source->uid . $smarty->_joined_template_dir);
$cached->filepath = $smarty->getCacheDir(); $cached->filepath = $smarty->getCacheDir();
if (isset($_template->cache_id)) { if (isset($_template->cache_id)) {
$cached->filepath .= preg_replace(array('![^\w|]+!', '![|]+!'), array('_', $_compile_dir_sep), $cached->filepath .= preg_replace(array('![^\w|]+!',
'![|]+!'),
array('_',
$_compile_dir_sep),
$_template->cache_id) . $_compile_dir_sep; $_template->cache_id) . $_compile_dir_sep;
} }
if (isset($_template->compile_id)) { if (isset($_template->compile_id)) {
@ -41,8 +43,10 @@ class Smarty_Internal_CacheResource_File extends Smarty_CacheResource
} }
// if use_sub_dirs, break file into directories // if use_sub_dirs, break file into directories
if ($smarty->use_sub_dirs) { if ($smarty->use_sub_dirs) {
$cached->filepath .= $_filepath[ 0 ] . $_filepath[ 1 ] . $smarty->ds . $_filepath[ 2 ] . $_filepath[ 3 ] . $smarty->ds . $cached->filepath .= $_filepath[ 0 ] . $_filepath[ 1 ] . DIRECTORY_SEPARATOR . $_filepath[ 2 ] .
$_filepath[ 4 ] . $_filepath[ 5 ] . $smarty->ds; $_filepath[ 3 ] .
DIRECTORY_SEPARATOR .
$_filepath[ 4 ] . $_filepath[ 5 ] . DIRECTORY_SEPARATOR;
} }
$cached->filepath .= $_filepath; $cached->filepath .= $_filepath;
$basename = $source->handler->getBasename($source); $basename = $source->handler->getBasename($source);
@ -83,12 +87,13 @@ class Smarty_Internal_CacheResource_File extends Smarty_CacheResource
* *
* @return boolean true or false if the cached content does not exist * @return boolean true or false if the cached content does not exist
*/ */
public function process(Smarty_Internal_Template $_smarty_tpl, Smarty_Template_Cached $cached = null, public function process(Smarty_Internal_Template $_smarty_tpl,
Smarty_Template_Cached $cached = null,
$update = false) $update = false)
{ {
$_smarty_tpl->cached->valid = false; $_smarty_tpl->cached->valid = false;
if ($update && defined('HHVM_VERSION')) { if ($update && defined('HHVM_VERSION')) {
eval("?>" . file_get_contents($_smarty_tpl->cached->filepath)); eval('?>' . file_get_contents($_smarty_tpl->cached->filepath));
return true; return true;
} else { } else {
return @include $_smarty_tpl->cached->filepath; return @include $_smarty_tpl->cached->filepath;
@ -101,16 +106,20 @@ class Smarty_Internal_CacheResource_File extends Smarty_CacheResource
* @param Smarty_Internal_Template $_template template object * @param Smarty_Internal_Template $_template template object
* @param string $content content to cache * @param string $content content to cache
* *
* @return boolean success * @return bool success
* @throws \SmartyException
*/ */
public function writeCachedContent(Smarty_Internal_Template $_template, $content) public function writeCachedContent(Smarty_Internal_Template $_template, $content)
{ {
if ($_template->smarty->ext->_writeFile->writeFile($_template->cached->filepath, $content, if ($_template->smarty->ext->_writeFile->writeFile($_template->cached->filepath,
$content,
$_template->smarty) === true $_template->smarty) === true
) { ) {
if (function_exists('opcache_invalidate') && strlen(ini_get("opcache.restrict_api")) < 1) { if (function_exists('opcache_invalidate') &&
(!function_exists('ini_get') || strlen(ini_get('opcache.restrict_api'))) < 1
) {
opcache_invalidate($_template->cached->filepath, true); opcache_invalidate($_template->cached->filepath, true);
} elseif (function_exists('apc_compile_file')) { } else if (function_exists('apc_compile_file')) {
apc_compile_file($_template->cached->filepath); apc_compile_file($_template->cached->filepath);
} }
$cached = $_template->cached; $cached = $_template->cached;

View File

@ -24,6 +24,7 @@ class Smarty_Internal_Compile_Append extends Smarty_Internal_Compile_Assign
* @param array $parameter array with compilation parameter * @param array $parameter array with compilation parameter
* *
* @return string compiled code * @return string compiled code
* @throws \SmartyCompilerException
*/ */
public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter) public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter)
{ {

View File

@ -71,7 +71,7 @@ class Smarty_Internal_Compile_Assign extends Smarty_Internal_CompileBase
$_scope = $compiler->convertScope($_attr, $this->valid_scopes); $_scope = $compiler->convertScope($_attr, $this->valid_scopes);
} }
// optional parameter // optional parameter
$_params = ""; $_params = '';
if ($_nocache || $_scope) { if ($_nocache || $_scope) {
$_params .= ' ,' . var_export($_nocache, true); $_params .= ' ,' . var_export($_nocache, true);
} }
@ -85,9 +85,9 @@ class Smarty_Internal_Compile_Assign extends Smarty_Internal_CompileBase
$output .= "settype(\$_tmp_array, 'array');\n"; $output .= "settype(\$_tmp_array, 'array');\n";
$output .= "}\n"; $output .= "}\n";
$output .= "\$_tmp_array{$parameter['smarty_internal_index']} = {$_attr['value']};\n"; $output .= "\$_tmp_array{$parameter['smarty_internal_index']} = {$_attr['value']};\n";
$output .= "\$_smarty_tpl->_assignInScope({$_var}, \$_tmp_array{$_params});\n?>"; $output .= "\$_smarty_tpl->_assignInScope({$_var}, \$_tmp_array{$_params});?>";
} else { } else {
$output = "<?php \$_smarty_tpl->_assignInScope({$_var}, {$_attr['value']}{$_params});\n?>"; $output = "<?php \$_smarty_tpl->_assignInScope({$_var}, {$_attr['value']}{$_params});?>";
} }
return $output; return $output;
} }

View File

@ -22,7 +22,6 @@ class Smarty_Internal_Compile_Block extends Smarty_Internal_Compile_Shared_Inher
* @see Smarty_Internal_CompileBase * @see Smarty_Internal_CompileBase
*/ */
public $required_attributes = array('name'); public $required_attributes = array('name');
/** /**
* Attribute definition: Overwrites base class. * Attribute definition: Overwrites base class.
* *
@ -30,7 +29,6 @@ class Smarty_Internal_Compile_Block extends Smarty_Internal_Compile_Shared_Inher
* @see Smarty_Internal_CompileBase * @see Smarty_Internal_CompileBase
*/ */
public $shorttag_order = array('name'); public $shorttag_order = array('name');
/** /**
* Attribute definition: Overwrites base class. * Attribute definition: Overwrites base class.
* *
@ -38,7 +36,6 @@ class Smarty_Internal_Compile_Block extends Smarty_Internal_Compile_Shared_Inher
* @see Smarty_Internal_CompileBase * @see Smarty_Internal_CompileBase
*/ */
public $option_flags = array('hide', 'nocache'); public $option_flags = array('hide', 'nocache');
/** /**
* Attribute definition: Overwrites base class. * Attribute definition: Overwrites base class.
* *
@ -47,13 +44,6 @@ class Smarty_Internal_Compile_Block extends Smarty_Internal_Compile_Shared_Inher
*/ */
public $optional_attributes = array('assign'); public $optional_attributes = array('assign');
/**
* Saved compiler object
*
* @var Smarty_Internal_TemplateCompilerBase
*/
public $compiler = null;
/** /**
* Compiles code for the {block} tag * Compiles code for the {block} tag
* *
@ -61,14 +51,13 @@ class Smarty_Internal_Compile_Block extends Smarty_Internal_Compile_Shared_Inher
* @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object
* @param array $parameter array with compilation parameter * @param array $parameter array with compilation parameter
* *
* @return bool true
*/ */
public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter) public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter)
{ {
if (!isset($compiler->_cache[ 'blockNesting' ])) { if (!isset($compiler->_cache[ 'blockNesting' ])) {
$compiler->_cache[ 'blockNesting' ] = 0; $compiler->_cache[ 'blockNesting' ] = 0;
} }
if ($compiler->_cache[ 'blockNesting' ] == 0) { if ($compiler->_cache[ 'blockNesting' ] === 0) {
// make sure that inheritance gets initialized in template code // make sure that inheritance gets initialized in template code
$this->registerInit($compiler); $this->registerInit($compiler);
$this->option_flags = array('hide', 'nocache', 'append', 'prepend'); $this->option_flags = array('hide', 'nocache', 'append', 'prepend');
@ -77,30 +66,24 @@ class Smarty_Internal_Compile_Block extends Smarty_Internal_Compile_Shared_Inher
} }
// check and get attributes // check and get attributes
$_attr = $this->getAttributes($compiler, $args); $_attr = $this->getAttributes($compiler, $args);
$compiler->_cache[ 'blockNesting' ] ++; ++$compiler->_cache[ 'blockNesting' ];
$_className = 'Block_' . preg_replace('![^\w]+!', '_', uniqid(rand(), true)); $_className = 'Block_' . preg_replace('![^\w]+!', '_', uniqid(rand(), true));
$compiler->_cache[ 'blockName' ][ $compiler->_cache[ 'blockNesting' ] ] = $_attr[ 'name' ]; $compiler->_cache[ 'blockName' ][ $compiler->_cache[ 'blockNesting' ] ] = $_attr[ 'name' ];
$compiler->_cache[ 'blockClass' ][ $compiler->_cache[ 'blockNesting' ] ] = $_className; $compiler->_cache[ 'blockClass' ][ $compiler->_cache[ 'blockNesting' ] ] = $_className;
$compiler->_cache[ 'blockParams' ][ $compiler->_cache[ 'blockNesting' ] ] = array(); $compiler->_cache[ 'blockParams' ][ $compiler->_cache[ 'blockNesting' ] ] = array();
$compiler->_cache[ 'blockParams' ][ 1 ][ 'subBlocks' ][ trim($_attr[ 'name' ], '"\'') ][] = $_className; $compiler->_cache[ 'blockParams' ][ 1 ][ 'subBlocks' ][ trim($_attr[ 'name' ], '"\'') ][] = $_className;
$this->openTag($compiler, 'block', array($_attr, $compiler->nocache, $compiler->parser->current_buffer, $this->openTag($compiler,
'block',
array($_attr, $compiler->nocache, $compiler->parser->current_buffer,
$compiler->template->compiled->has_nocache_code, $compiler->template->compiled->has_nocache_code,
$compiler->template->caching)); $compiler->template->caching));
// must whole block be nocache ? $compiler->saveRequiredPlugins(true);
if ($compiler->tag_nocache) {
$i = 0;
}
$compiler->nocache = $compiler->nocache | $compiler->tag_nocache; $compiler->nocache = $compiler->nocache | $compiler->tag_nocache;
// $compiler->suppressNocacheProcessing = true;
if ($_attr[ 'nocache' ] === true) {
//$compiler->trigger_template_error('nocache option not allowed', $compiler->parser->lex->taglineno);
}
$compiler->parser->current_buffer = new Smarty_Internal_ParseTree_Template(); $compiler->parser->current_buffer = new Smarty_Internal_ParseTree_Template();
$compiler->template->compiled->has_nocache_code = false; $compiler->template->compiled->has_nocache_code = false;
$compiler->suppressNocacheProcessing = true; $compiler->suppressNocacheProcessing = true;
} }
} }
/** /**
* Smarty Internal Plugin Compile BlockClose Class * Smarty Internal Plugin Compile BlockClose Class
* *
@ -126,7 +109,7 @@ class Smarty_Internal_Compile_Blockclose extends Smarty_Internal_Compile_Shared_
$_assign = isset($_attr[ 'assign' ]) ? $_attr[ 'assign' ] : null; $_assign = isset($_attr[ 'assign' ]) ? $_attr[ 'assign' ] : null;
unset($_attr[ 'assign' ], $_attr[ 'name' ]); unset($_attr[ 'assign' ], $_attr[ 'name' ]);
foreach ($_attr as $name => $stat) { foreach ($_attr as $name => $stat) {
if ((is_bool($stat) && $stat !== false) || (!is_bool($stat) && $stat != 'false')) { if ((is_bool($stat) && $stat !== false) || (!is_bool($stat) && $stat !== 'false')) {
$_block[ $name ] = 'true'; $_block[ $name ] = 'true';
} }
} }
@ -144,7 +127,8 @@ class Smarty_Internal_Compile_Blockclose extends Smarty_Internal_Compile_Shared_
$output .= "public \${$property} = " . var_export($value,true) .";\n"; $output .= "public \${$property} = " . var_export($value,true) .";\n";
} }
$output .= "public function callBlock(Smarty_Internal_Template \$_smarty_tpl) {\n"; $output .= "public function callBlock(Smarty_Internal_Template \$_smarty_tpl) {\n";
//$output .= "/*/%%SmartyNocache:{$compiler->template->compiled->nocache_hash}%%*/\n"; $output .= $compiler->compileRequiredPlugins();
$compiler->restoreRequiredPlugins();
if ($compiler->template->compiled->has_nocache_code) { if ($compiler->template->compiled->has_nocache_code) {
$output .= "\$_smarty_tpl->cached->hashes['{$compiler->template->compiled->nocache_hash}'] = true;\n"; $output .= "\$_smarty_tpl->cached->hashes['{$compiler->template->compiled->nocache_hash}'] = true;\n";
} }
@ -167,32 +151,22 @@ class Smarty_Internal_Compile_Blockclose extends Smarty_Internal_Compile_Shared_
$compiler->parser->current_buffer->append_subtree($compiler->parser, $compiler->parser->current_buffer->append_subtree($compiler->parser,
new Smarty_Internal_ParseTree_Tag($compiler->parser, new Smarty_Internal_ParseTree_Tag($compiler->parser,
$output)); $output));
$compiler->blockOrFunctionCode .= $f = $compiler->parser->current_buffer->to_smarty_php($compiler->parser); $compiler->blockOrFunctionCode .= $compiler->parser->current_buffer->to_smarty_php($compiler->parser);
$compiler->parser->current_buffer = new Smarty_Internal_ParseTree_Template(); $compiler->parser->current_buffer = new Smarty_Internal_ParseTree_Template();
// nocache plugins must be copied
if (!empty($compiler->template->compiled->required_plugins[ 'nocache' ])) {
foreach ($compiler->template->compiled->required_plugins[ 'nocache' ] as $plugin => $tmp) {
foreach ($tmp as $type => $data) {
$compiler->parent_compiler->template->compiled->required_plugins[ 'compiled' ][ $plugin ][ $type ] =
$data;
}
}
}
// restore old status // restore old status
$compiler->template->compiled->has_nocache_code = $_has_nocache_code; $compiler->template->compiled->has_nocache_code = $_has_nocache_code;
$compiler->tag_nocache = $compiler->nocache; $compiler->tag_nocache = $compiler->nocache;
$compiler->nocache = $_nocache; $compiler->nocache = $_nocache;
$compiler->parser->current_buffer = $_buffer; $compiler->parser->current_buffer = $_buffer;
$output = "<?php \n"; $output = "<?php \n";
if ($compiler->_cache[ 'blockNesting' ] == 1) { if ($compiler->_cache[ 'blockNesting' ] === 1) {
$output .= "\$_smarty_tpl->inheritance->instanceBlock(\$_smarty_tpl, '$_className', $_name);\n"; $output .= "\$_smarty_tpl->inheritance->instanceBlock(\$_smarty_tpl, '$_className', $_name);\n";
} else { } else {
$output .= "\$_smarty_tpl->inheritance->instanceBlock(\$_smarty_tpl, '$_className', $_name, \$this->tplIndex);\n"; $output .= "\$_smarty_tpl->inheritance->instanceBlock(\$_smarty_tpl, '$_className', $_name, \$this->tplIndex);\n";
} }
$output .= "?>\n"; $output .= "?>\n";
$compiler->_cache[ 'blockNesting' ] --; --$compiler->_cache[ 'blockNesting' ];
if ($compiler->_cache[ 'blockNesting' ] == 0) { if ($compiler->_cache[ 'blockNesting' ] === 0) {
unset($compiler->_cache[ 'blockNesting' ]); unset($compiler->_cache[ 'blockNesting' ]);
} }
$compiler->has_code = true; $compiler->has_code = true;

View File

@ -9,46 +9,16 @@
*/ */
/** /**
* Smarty Internal Plugin Compile Block Parent Class * Smarty Internal Plugin Compile Block Child Class
* *
* @author Uwe Tews <uwe.tews@googlemail.com> * @author Uwe Tews <uwe.tews@googlemail.com>
*/ */
class Smarty_Internal_Compile_Block_Child extends Smarty_Internal_CompileBase class Smarty_Internal_Compile_Block_Child extends Smarty_Internal_Compile_Child
{ {
/** /**
* Attribute definition: Overwrites base class. * Tag name
* *
* @var array * @var string
* @see Smarty_Internal_CompileBase
*/ */
public $option_flags = array(); public $tag = 'block_child';
/**
* Saved compiler object
*
* @var Smarty_Internal_TemplateCompilerBase
*/
public $compiler = null;
/**
* Compiles code for the {block_parent} tag
*
* @param array $args array with attributes from parser
* @param \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)
{
if (!isset($compiler->_cache[ 'blockNesting' ])) {
$compiler->trigger_template_error(' tag {$smarty.block.child} used outside {block} tags ',
$compiler->parser->lex->taglineno);
}
$compiler->has_code = true;
$compiler->suppressNocacheProcessing = true;
$compiler->_cache[ 'blockParams' ][ $compiler->_cache[ 'blockNesting' ] ][ 'callsChild' ] = 'true';
$output = "<?php \n\$_smarty_tpl->inheritance->callChild(\$_smarty_tpl, \$this);\n?>\n";
return $output;
}
} }

View File

@ -13,61 +13,19 @@
* *
* @author Uwe Tews <uwe.tews@googlemail.com> * @author Uwe Tews <uwe.tews@googlemail.com>
*/ */
class Smarty_Internal_Compile_Block_Parent extends Smarty_Internal_Compile_Shared_Inheritance class Smarty_Internal_Compile_Block_Parent extends Smarty_Internal_Compile_Child
{ {
/**
* Tag name
*
* @var string
*/
public $tag = 'block_parent';
/** /**
* Attribute definition: Overwrites base class. * Block type
* *
* @var array * @var string
* @see Smarty_Internal_CompileBase
*/ */
public $optional_attributes = array('name'); public $blockType = 'Parent';
/**
* 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();
/**
* Saved compiler object
*
* @var Smarty_Internal_TemplateCompilerBase
*/
public $compiler = null;
/**
* Compiles code for the {block_parent} tag
*
* @param array $args array with attributes from parser
* @param \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)
{
// check and get attributes
$_attr = $this->getAttributes($compiler, $args);
if (!isset($compiler->_cache[ 'blockNesting' ])) {
$compiler->trigger_template_error(' tag {$smarty.block.parent} used outside {block} tags ',
$compiler->parser->lex->taglineno);
}
$compiler->suppressNocacheProcessing = true;
$compiler->has_code = true;
$output = "<?php \n\$_smarty_tpl->inheritance->callParent(\$_smarty_tpl, \$this" .
(isset($_attr[ 'name' ]) ? ", {$_attr[ 'name' ]}" : '') . ");\n?>\n";
return $output;
}
} }

View File

@ -32,25 +32,35 @@ class Smarty_Internal_Compile_Break extends Smarty_Internal_CompileBase
*/ */
public $shorttag_order = array('levels'); public $shorttag_order = array('levels');
/**
* Tag name may be overloaded by Smarty_Internal_Compile_Continue
*
* @var string
*/
public $tag = 'break';
/** /**
* Compiles code for the {break} tag * Compiles code for the {break} tag
* *
* @param array $args array with attributes from parser * @param array $args array with attributes from parser
* @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object
* @param array $parameter array with compilation parameter
* *
* @return string compiled code * @return string compiled code
* @throws \SmartyCompilerException
*/ */
public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter) public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler)
{ {
list($levels, $foreachLevels) = $this->checkLevels($args, $compiler); list($levels, $foreachLevels) = $this->checkLevels($args, $compiler);
$output = "<?php\n"; $output = "<?php ";
if ($foreachLevels) { if ($foreachLevels > 0 && $this->tag === 'continue') {
$foreachLevels--;
}
if ($foreachLevels > 0) {
/* @var Smarty_Internal_Compile_Foreach $foreachCompiler */ /* @var Smarty_Internal_Compile_Foreach $foreachCompiler */
$foreachCompiler = $compiler->getTagCompiler('foreach'); $foreachCompiler = $compiler->getTagCompiler('foreach');
$output .= $foreachCompiler->compileRestore($foreachLevels); $output .= $foreachCompiler->compileRestore($foreachLevels);
} }
$output .= "break {$levels};?>"; $output .= "{$this->tag} {$levels};?>";
return $output; return $output;
} }
@ -59,12 +69,11 @@ class Smarty_Internal_Compile_Break extends Smarty_Internal_CompileBase
* *
* @param array $args array with attributes from parser * @param array $args array with attributes from parser
* @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object
* @param string $tag tag name
* *
* @return array * @return array
* @throws \SmartyCompilerException * @throws \SmartyCompilerException
*/ */
public function checkLevels($args, Smarty_Internal_TemplateCompilerBase $compiler, $tag = 'break') public function checkLevels($args, Smarty_Internal_TemplateCompilerBase $compiler)
{ {
static $_is_loopy = array('for' => true, 'foreach' => true, 'while' => true, 'section' => true); static $_is_loopy = array('for' => true, 'foreach' => true, 'while' => true, 'section' => true);
// check and get attributes // check and get attributes
@ -86,7 +95,7 @@ class Smarty_Internal_Compile_Break extends Smarty_Internal_CompileBase
$stack_count = count($compiler->_tag_stack) - 1; $stack_count = count($compiler->_tag_stack) - 1;
$foreachLevels = 0; $foreachLevels = 0;
$lastTag = ''; $lastTag = '';
while ($level_count >= 0 && $stack_count >= 0) { while ($level_count > 0 && $stack_count >= 0) {
if (isset($_is_loopy[ $compiler->_tag_stack[ $stack_count ][ 0 ] ])) { if (isset($_is_loopy[ $compiler->_tag_stack[ $stack_count ][ 0 ] ])) {
$lastTag = $compiler->_tag_stack[ $stack_count ][ 0 ]; $lastTag = $compiler->_tag_stack[ $stack_count ][ 0 ];
if ($level_count === 0) { if ($level_count === 0) {
@ -99,10 +108,10 @@ class Smarty_Internal_Compile_Break extends Smarty_Internal_CompileBase
} }
$stack_count --; $stack_count --;
} }
if ($level_count != 0) { if ($level_count !== 0) {
$compiler->trigger_template_error("cannot {$tag} {$levels} level(s)", null, true); $compiler->trigger_template_error("cannot {$this->tag} {$levels} level(s)", null, true);
} }
if ($lastTag === 'foreach' && $tag === 'break') { if ($lastTag === 'foreach' && $this->tag === 'break' && $foreachLevels > 0) {
$foreachLevels --; $foreachLevels --;
} }
return array($levels, $foreachLevels); return array($levels, $foreachLevels);

View File

@ -57,7 +57,7 @@ class Smarty_Internal_Compile_Call extends Smarty_Internal_CompileBase
// output will be stored in a smarty variable instead of being displayed // output will be stored in a smarty variable instead of being displayed
$_assign = $_attr[ 'assign' ]; $_assign = $_attr[ 'assign' ];
} }
//$_name = trim($_attr['name'], "'\""); //$_name = trim($_attr['name'], "''");
$_name = $_attr[ 'name' ]; $_name = $_attr[ 'name' ];
unset($_attr[ 'name' ], $_attr[ 'assign' ], $_attr[ 'nocache' ]); unset($_attr[ 'name' ], $_attr[ 'assign' ], $_attr[ 'nocache' ]);
// set flag (compiled code of {function} must be included in cache file // set flag (compiled code of {function} must be included in cache file
@ -74,7 +74,7 @@ class Smarty_Internal_Compile_Call extends Smarty_Internal_CompileBase
$_paramsArray[] = "'$_key'=>$_value"; $_paramsArray[] = "'$_key'=>$_value";
} }
} }
$_params = 'array(' . implode(",", $_paramsArray) . ')'; $_params = 'array(' . implode(',', $_paramsArray) . ')';
//$compiler->suppressNocacheProcessing = true; //$compiler->suppressNocacheProcessing = true;
// was there an assign attribute // was there an assign attribute
if (isset($_assign)) { if (isset($_assign)) {

View File

@ -45,11 +45,11 @@ class Smarty_Internal_Compile_Capture extends Smarty_Internal_CompileBase
public static function compileSpecialVariable($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter = null) public static function compileSpecialVariable($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter = null)
{ {
$tag = trim($parameter[ 0 ], '"\''); $tag = trim($parameter[ 0 ], '"\'');
$name = isset($parameter[ 1 ]) ? $compiler->getId($parameter[ 1 ]) : false; $name = isset($parameter[ 1 ]) ? $compiler->getId($parameter[ 1 ]) : null;
if (!$name) { if (!$name) {
$compiler->trigger_template_error("missing or illegal \$smarty.{$tag} name attribute", null, true); //$compiler->trigger_template_error("missing or illegal \$smarty.{$tag} name attribute", null, true);
} }
return "\$_smarty_tpl->smarty->ext->_capture->getBuffer(\$_smarty_tpl, '{$name}')"; return '$_smarty_tpl->smarty->ext->_capture->getBuffer($_smarty_tpl'.(isset($name)?", '{$name}')":')');
} }
/** /**

View File

@ -0,0 +1,77 @@
<?php
/*
* This file is part of Smarty.
*
* (c) 2015 Uwe Tews
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
/**
* Smarty Internal Plugin Compile Child Class
*
* @author Uwe Tews <uwe.tews@googlemail.com>
*/
class Smarty_Internal_Compile_Child extends Smarty_Internal_CompileBase
{
/**
* Attribute definition: Overwrites base class.
*
* @var array
* @see Smarty_Internal_CompileBase
*/
public $optional_attributes = array('assign');
/**
* Tag name
*
* @var string
*/
public $tag = 'child';
/**
* Block type
*
* @var string
*/
public $blockType = 'Child';
/**
* Compiles code for the {child} tag
*
* @param array $args array with attributes from parser
* @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object
* @param array $parameter array with compilation parameter
*
* @return string compiled code
* @throws \SmartyCompilerException
*/
public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter)
{
// check and get attributes
$_attr = $this->getAttributes($compiler, $args);
$tag = isset($parameter[0]) ? "'{$parameter[0]}'" : "'{{$this->tag}}'";
if (!isset($compiler->_cache[ 'blockNesting' ])) {
$compiler->trigger_template_error("{$tag} used outside {block} tags ",
$compiler->parser->lex->taglineno);
}
$compiler->has_code = true;
$compiler->suppressNocacheProcessing = true;
if ($this->blockType === 'Child') {
$compiler->_cache[ 'blockParams' ][ $compiler->_cache[ 'blockNesting' ] ][ 'callsChild' ] = 'true';
}
$_assign = isset($_attr[ 'assign' ]) ? $_attr[ 'assign' ] : null;
$output = "<?php \n";
if (isset($_assign)) {
$output .= "ob_start();\n";
}
$output .= '$_smarty_tpl->inheritance->call' . $this->blockType . '($_smarty_tpl, $this' .
($this->blockType === 'Child' ? '' : ", {$tag}"). ");\n";
if (isset($_assign)) {
$output .= "\$_smarty_tpl->assign({$_assign}, ob_get_clean());\n";
}
$output .="?>\n";
return $output;
}
}

View File

@ -16,27 +16,10 @@
*/ */
class Smarty_Internal_Compile_Continue extends Smarty_Internal_Compile_Break class Smarty_Internal_Compile_Continue extends Smarty_Internal_Compile_Break
{ {
/** /**
* Compiles code for the {continue} tag * Tag name
* *
* @param array $args array with attributes from parser * @var string
* @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object
* @param array $parameter array with compilation parameter
*
* @return string compiled code
* @throws \SmartyCompilerException
*/ */
public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter) public $tag = 'continue';
{
list($levels, $foreachLevels) = $this->checkLevels($args, $compiler, 'continue');
$output = "<?php\n";
if ($foreachLevels > 1) {
/* @var Smarty_Internal_Compile_Foreach $foreachCompiler */
$foreachCompiler = $compiler->getTagCompiler('foreach');
$output .= $foreachCompiler->compileRestore($foreachLevels - 1);
}
$output .= "continue {$levels};?>";
return $output;
}
} }

View File

@ -58,13 +58,12 @@ class Smarty_Internal_Compile_Eval extends Smarty_Internal_CompileBase
} }
// create template object // create template object
$_output = "\$_template = new {$compiler->smarty->template_class}('eval:'." . $_attr[ 'var' ] . $_output = "\$_template = new {$compiler->smarty->template_class}('eval:'.{$_attr[ 'var' ]}, \$_smarty_tpl->smarty, \$_smarty_tpl);";
", \$_smarty_tpl->smarty, \$_smarty_tpl);";
//was there an assign attribute? //was there an assign attribute?
if (isset($_assign)) { if (isset($_assign)) {
$_output .= "\$_smarty_tpl->assign($_assign,\$_template->fetch());"; $_output .= "\$_smarty_tpl->assign($_assign,\$_template->fetch());";
} else { } else {
$_output .= "echo \$_template->fetch();"; $_output .= 'echo $_template->fetch();';
} }
return "<?php $_output ?>"; return "<?php $_output ?>";

View File

@ -64,18 +64,18 @@ class Smarty_Internal_Compile_Extends extends Smarty_Internal_Compile_Shared_Inh
// add code to initialize inheritance // add code to initialize inheritance
$this->registerInit($compiler, true); $this->registerInit($compiler, true);
$file = trim($_attr[ 'file' ], '\'"'); $file = trim($_attr[ 'file' ], '\'"');
if (strlen($file) > 8 && substr($file, 0, 8) == 'extends:') { if (strlen($file) > 8 && substr($file, 0, 8) === 'extends:') {
// generate code for each template // generate code for each template
$files = array_reverse(explode('|', substr($file, 8))); $files = array_reverse(explode('|', substr($file, 8)));
$i = 0; $i = 0;
foreach ($files as $file) { foreach ($files as $file) {
if ($file[ 0 ] == '"') { if ($file[ 0 ] === '"') {
$file = trim($file, '".'); $file = trim($file, '".');
} else { } else {
$file = "'{$file}'"; $file = "'{$file}'";
} }
$i ++; $i ++;
if ($i == count($files) && isset($_attr[ 'extends_resource' ])) { if ($i === count($files) && isset($_attr[ 'extends_resource' ])) {
$this->compileEndChild($compiler); $this->compileEndChild($compiler);
} }
$this->compileInclude($compiler, $file); $this->compileInclude($compiler, $file);
@ -95,21 +95,24 @@ class Smarty_Internal_Compile_Extends extends Smarty_Internal_Compile_Shared_Inh
* *
* @param \Smarty_Internal_TemplateCompilerBase $compiler * @param \Smarty_Internal_TemplateCompilerBase $compiler
* @param null|string $template optional inheritance parent template * @param null|string $template optional inheritance parent template
*
* @throws \SmartyCompilerException
* @throws \SmartyException
*/ */
private function compileEndChild(Smarty_Internal_TemplateCompilerBase $compiler, $template = null) private function compileEndChild(Smarty_Internal_TemplateCompilerBase $compiler, $template = null)
{ {
$inlineUids = ''; $inlineUids = '';
if (isset($template) && $compiler->smarty->merge_compiled_includes) { if (isset($template) && $compiler->smarty->merge_compiled_includes) {
$code = $compiler->compileTag('include', array($template, array('scope' => 'parent'))); $code = $compiler->compileTag('include', array($template, array('scope' => 'parent')));
if (preg_match("/([,][\s]*['][a-z0-9]+['][,][\s]*[']content.*['])[)]/", $code, $match)) { if (preg_match('/([,][\s]*[\'][a-z0-9]+[\'][,][\s]*[\']content.*[\'])[)]/', $code, $match)) {
$inlineUids = $match[ 1 ]; $inlineUids = $match[ 1 ];
} }
} }
$compiler->parser->template_postfix[] = new Smarty_Internal_ParseTree_Tag($compiler->parser, $compiler->parser->template_postfix[] = new Smarty_Internal_ParseTree_Tag($compiler->parser,
"<?php \$_smarty_tpl->inheritance->endChild(\$_smarty_tpl" . '<?php $_smarty_tpl->inheritance->endChild($_smarty_tpl' .
(isset($template) ? (isset($template) ?
', ' . $template . $inlineUids : ", {$template}{$inlineUids}" :
'') . ");\n?>\n"); '') . ");\n?>");
} }
/** /**
@ -117,6 +120,9 @@ class Smarty_Internal_Compile_Extends extends Smarty_Internal_Compile_Shared_Inh
* *
* @param \Smarty_Internal_TemplateCompilerBase $compiler * @param \Smarty_Internal_TemplateCompilerBase $compiler
* @param string $template subtemplate name * @param string $template subtemplate name
*
* @throws \SmartyCompilerException
* @throws \SmartyException
*/ */
private function compileInclude(Smarty_Internal_TemplateCompilerBase $compiler, $template) private function compileInclude(Smarty_Internal_TemplateCompilerBase $compiler, $template)
{ {
@ -129,16 +135,17 @@ class Smarty_Internal_Compile_Extends extends Smarty_Internal_Compile_Shared_Inh
/** /**
* Create source code for {extends} from source components array * Create source code for {extends} from source components array
* *
* @param []\Smarty_Internal_Template_Source $components * @param \Smarty_Internal_Template $template
* *
* @return string * @return string
*/ */
public static function extendsSourceArrayCode($components) public static function extendsSourceArrayCode(Smarty_Internal_Template $template)
{ {
$resources = array(); $resources = array();
foreach ($components as $source) { foreach ($template->source->components as $source) {
$resources[] = $source->resource; $resources[] = $source->resource;
} }
return '{extends file=\'extends:' . join('|', $resources) . '\' extends_resource=true}'; return $template->smarty->left_delimiter . 'extends file=\'extends:' . join('|', $resources) .
'\' extends_resource=true' . $template->smarty->right_delimiter;
} }
} }

View File

@ -35,7 +35,7 @@ class Smarty_Internal_Compile_For extends Smarty_Internal_CompileBase
public function compile($args, $compiler, $parameter) public function compile($args, $compiler, $parameter)
{ {
$compiler->loopNesting ++; $compiler->loopNesting ++;
if ($parameter == 0) { if ($parameter === 0) {
$this->required_attributes = array('start', 'to'); $this->required_attributes = array('start', 'to');
$this->optional_attributes = array('max', 'step'); $this->optional_attributes = array('max', 'step');
} else { } else {
@ -47,7 +47,7 @@ class Smarty_Internal_Compile_For extends Smarty_Internal_CompileBase
$_attr = $this->getAttributes($compiler, $args); $_attr = $this->getAttributes($compiler, $args);
$output = "<?php\n"; $output = "<?php\n";
if ($parameter == 1) { if ($parameter === 1) {
foreach ($_attr[ 'start' ] as $_statement) { foreach ($_attr[ 'start' ] as $_statement) {
if (is_array($_statement[ 'var' ])) { if (is_array($_statement[ 'var' ])) {
$var = $_statement[ 'var' ][ 'var' ]; $var = $_statement[ 'var' ][ 'var' ];
@ -89,10 +89,10 @@ class Smarty_Internal_Compile_For extends Smarty_Internal_CompileBase
} }
$output .= "if (\$_smarty_tpl->tpl_vars[$var]->total > 0) {\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 .= "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]->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 .= "\$_smarty_tpl->tpl_vars[$var]->last = \$_smarty_tpl->tpl_vars[$var]->iteration === \$_smarty_tpl->tpl_vars[$var]->total;";
} }
$output .= "?>"; $output .= '?>';
$this->openTag($compiler, 'for', array('for', $compiler->nocache)); $this->openTag($compiler, 'for', array('for', $compiler->nocache));
// maybe nocache because of nocache variables // maybe nocache because of nocache variables
@ -161,10 +161,10 @@ class Smarty_Internal_Compile_Forclose extends Smarty_Internal_CompileBase
list($openTag, $compiler->nocache) = $this->closeTag($compiler, array('for', 'forelse')); list($openTag, $compiler->nocache) = $this->closeTag($compiler, array('for', 'forelse'));
$output = "<?php }\n"; $output = "<?php }\n";
if ($openTag != 'forelse') { if ($openTag !== 'forelse') {
$output .= "}\n"; $output .= "}\n";
} }
$output .= "?>\n"; $output .= "?>";
return $output; return $output;
} }
} }

View File

@ -80,12 +80,12 @@ class Smarty_Internal_Compile_Foreach extends Smarty_Internal_Compile_Private_Fo
* *
* @param array $args array with attributes from parser * @param array $args array with attributes from parser
* @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object
* @param array $parameter array with compilation parameter
* *
* @return string compiled code * @return string compiled code
* @throws \SmartyCompilerException * @throws \SmartyCompilerException
* @throws \SmartyException
*/ */
public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter) public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler)
{ {
$compiler->loopNesting ++; $compiler->loopNesting ++;
// init // init
@ -118,7 +118,7 @@ class Smarty_Internal_Compile_Foreach extends Smarty_Internal_Compile_Private_Fo
$fromName = $compiler->getVariableName($_attr[ 'from' ]); $fromName = $compiler->getVariableName($_attr[ 'from' ]);
if ($fromName) { if ($fromName) {
foreach (array('item', 'key') as $a) { foreach (array('item', 'key') as $a) {
if (isset($attributes[ $a ]) && $attributes[ $a ] == $fromName) { if (isset($attributes[ $a ]) && $attributes[ $a ] === $fromName) {
$compiler->trigger_template_error("'{$a}' and 'from' may not have same variable name '{$fromName}'", $compiler->trigger_template_error("'{$a}' and 'from' may not have same variable name '{$fromName}'",
null, true); null, true);
} }
@ -137,7 +137,7 @@ class Smarty_Internal_Compile_Foreach extends Smarty_Internal_Compile_Private_Fo
if (!empty($this->matchResults[ 'named' ])) { if (!empty($this->matchResults[ 'named' ])) {
$namedAttr = $this->matchResults[ 'named' ]; $namedAttr = $this->matchResults[ 'named' ];
} }
if (isset($_attr[ 'properties' ]) && preg_match_all("/['](.*?)[']/", $_attr[ 'properties' ], $match)) { if (isset($_attr[ 'properties' ]) && preg_match_all('/[\'](.*?)[\']/', $_attr[ 'properties' ], $match)) {
foreach ($match[ 1 ] as $prop) { foreach ($match[ 1 ] as $prop) {
if (in_array($prop, $this->itemProperties)) { if (in_array($prop, $this->itemProperties)) {
$itemAttr[ $prop ] = true; $itemAttr[ $prop ] = true;
@ -229,7 +229,7 @@ class Smarty_Internal_Compile_Foreach extends Smarty_Internal_Compile_Private_Fo
$output .= "{$itemVar}->first = !{$itemVar}->index;\n"; $output .= "{$itemVar}->first = !{$itemVar}->index;\n";
} }
if (isset($itemAttr[ 'last' ])) { if (isset($itemAttr[ 'last' ])) {
$output .= "{$itemVar}->last = {$itemVar}->iteration == {$itemVar}->total;\n"; $output .= "{$itemVar}->last = {$itemVar}->iteration === {$itemVar}->total;\n";
} }
if (isset($foreachVar)) { if (isset($foreachVar)) {
if (isset($namedAttr[ 'iteration' ])) { if (isset($namedAttr[ 'iteration' ])) {
@ -242,13 +242,13 @@ class Smarty_Internal_Compile_Foreach extends Smarty_Internal_Compile_Private_Fo
$output .= "{$foreachVar}->value['first'] = !{$foreachVar}->value['index'];\n"; $output .= "{$foreachVar}->value['first'] = !{$foreachVar}->value['index'];\n";
} }
if (isset($namedAttr[ 'last' ])) { if (isset($namedAttr[ 'last' ])) {
$output .= "{$foreachVar}->value['last'] = {$foreachVar}->value['iteration'] == {$foreachVar}->value['total'];\n"; $output .= "{$foreachVar}->value['last'] = {$foreachVar}->value['iteration'] === {$foreachVar}->value['total'];\n";
} }
} }
if (!empty($itemAttr)) { if (!empty($itemAttr)) {
$output .= "{$local}saved = {$itemVar};\n"; $output .= "{$local}saved = {$itemVar};\n";
} }
$output .= "?>"; $output .= '?>';
return $output; return $output;
} }
@ -262,7 +262,7 @@ class Smarty_Internal_Compile_Foreach extends Smarty_Internal_Compile_Private_Fo
*/ */
public function compileRestore($levels) public function compileRestore($levels)
{ {
return "\$_smarty_tpl->smarty->ext->_foreach->restore(\$_smarty_tpl, {$levels});\n"; return "\$_smarty_tpl->smarty->ext->_foreach->restore(\$_smarty_tpl, {$levels});";
} }
} }
@ -279,11 +279,10 @@ class Smarty_Internal_Compile_Foreachelse extends Smarty_Internal_CompileBase
* *
* @param array $args array with attributes from parser * @param array $args array with attributes from parser
* @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object
* @param array $parameter array with compilation parameter
* *
* @return string compiled code * @return string compiled code
*/ */
public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter) public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler)
{ {
// check and get attributes // check and get attributes
$_attr = $this->getAttributes($compiler, $args); $_attr = $this->getAttributes($compiler, $args);
@ -291,10 +290,10 @@ class Smarty_Internal_Compile_Foreachelse extends Smarty_Internal_CompileBase
list($openTag, $nocache, $local, $itemVar, $restore) = $this->closeTag($compiler, array('foreach')); list($openTag, $nocache, $local, $itemVar, $restore) = $this->closeTag($compiler, array('foreach'));
$this->openTag($compiler, 'foreachelse', array('foreachelse', $nocache, $local, $itemVar, 0)); $this->openTag($compiler, 'foreachelse', array('foreachelse', $nocache, $local, $itemVar, 0));
$output = "<?php\n"; $output = "<?php\n";
if ($restore == 2) { if ($restore === 2) {
$output .= "{$itemVar} = {$local}saved;\n"; $output .= "{$itemVar} = {$local}saved;\n";
} }
$output .= "}\n} else {\n?>\n"; $output .= "}\n} else {\n?>";
return $output; return $output;
} }
} }
@ -312,11 +311,11 @@ class Smarty_Internal_Compile_Foreachclose extends Smarty_Internal_CompileBase
* *
* @param array $args array with attributes from parser * @param array $args array with attributes from parser
* @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object
* @param array $parameter array with compilation parameter
* *
* @return string compiled code * @return string compiled code
* @throws \SmartyCompilerException
*/ */
public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter) public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler)
{ {
$compiler->loopNesting --; $compiler->loopNesting --;
// must endblock be nocache? // must endblock be nocache?
@ -328,7 +327,7 @@ class Smarty_Internal_Compile_Foreachclose extends Smarty_Internal_CompileBase
$this->closeTag($compiler, array('foreach', 'foreachelse')); $this->closeTag($compiler, array('foreach', 'foreachelse'));
$output = "<?php\n"; $output = "<?php\n";
if ($restore == 2) { if ($restore === 2) {
$output .= "{$itemVar} = {$local}saved;\n"; $output .= "{$itemVar} = {$local}saved;\n";
} }
if ($restore > 0) { if ($restore > 0) {
@ -338,7 +337,7 @@ class Smarty_Internal_Compile_Foreachclose extends Smarty_Internal_CompileBase
/* @var Smarty_Internal_Compile_Foreach $foreachCompiler */ /* @var Smarty_Internal_Compile_Foreach $foreachCompiler */
$foreachCompiler = $compiler->getTagCompiler('foreach'); $foreachCompiler = $compiler->getTagCompiler('foreach');
$output .= $foreachCompiler->compileRestore(1); $output .= $foreachCompiler->compileRestore(1);
$output .= "?>\n"; $output .= "?>";
return $output; return $output;
} }
} }

View File

@ -46,12 +46,11 @@ class Smarty_Internal_Compile_Function extends Smarty_Internal_CompileBase
* *
* @param array $args array with attributes from parser * @param array $args array with attributes from parser
* @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object
* @param array $parameter array with compilation parameter
* *
* @return bool true * @return bool true
* @throws \SmartyCompilerException * @throws \SmartyCompilerException
*/ */
public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter) public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler)
{ {
// check and get attributes // check and get attributes
$_attr = $this->getAttributes($compiler, $args); $_attr = $this->getAttributes($compiler, $args);
@ -60,7 +59,7 @@ class Smarty_Internal_Compile_Function extends Smarty_Internal_CompileBase
$compiler->trigger_template_error('nocache option not allowed', null, true); $compiler->trigger_template_error('nocache option not allowed', null, true);
} }
unset($_attr[ 'nocache' ]); unset($_attr[ 'nocache' ]);
$_name = trim($_attr[ 'name' ], "'\""); $_name = trim($_attr[ 'name' ], '\'"');
$compiler->parent_compiler->tpl_function[ $_name ] = array(); $compiler->parent_compiler->tpl_function[ $_name ] = array();
$save = array($_attr, $compiler->parser->current_buffer, $compiler->template->compiled->has_nocache_code, $save = array($_attr, $compiler->parser->current_buffer, $compiler->template->compiled->has_nocache_code,
$compiler->template->caching); $compiler->template->caching);
@ -68,6 +67,7 @@ class Smarty_Internal_Compile_Function extends Smarty_Internal_CompileBase
// Init temporary context // Init temporary context
$compiler->parser->current_buffer = new Smarty_Internal_ParseTree_Template(); $compiler->parser->current_buffer = new Smarty_Internal_ParseTree_Template();
$compiler->template->compiled->has_nocache_code = false; $compiler->template->compiled->has_nocache_code = false;
$compiler->saveRequiredPlugins(true);
return true; return true;
} }
} }
@ -93,16 +93,15 @@ class Smarty_Internal_Compile_Functionclose extends Smarty_Internal_CompileBase
* *
* @param array $args array with attributes from parser * @param array $args array with attributes from parser
* @param object|\Smarty_Internal_TemplateCompilerBase $compiler compiler object * @param object|\Smarty_Internal_TemplateCompilerBase $compiler compiler object
* @param array $parameter array with compilation parameter
* *
* @return bool true * @return bool true
*/ */
public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter) public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler)
{ {
$this->compiler = $compiler; $this->compiler = $compiler;
$saved_data = $this->closeTag($compiler, array('function')); $saved_data = $this->closeTag($compiler, array('function'));
$_attr = $saved_data[ 0 ]; $_attr = $saved_data[ 0 ];
$_name = trim($_attr[ 'name' ], "'\""); $_name = trim($_attr[ 'name' ], '\'"');
$compiler->parent_compiler->tpl_function[ $_name ][ 'compiled_filepath' ] = $compiler->parent_compiler->tpl_function[ $_name ][ 'compiled_filepath' ] =
$compiler->parent_compiler->template->compiled->filepath; $compiler->parent_compiler->template->compiled->filepath;
$compiler->parent_compiler->tpl_function[ $_name ][ 'uid' ] = $compiler->template->source->uid; $compiler->parent_compiler->tpl_function[ $_name ][ 'uid' ] = $compiler->template->source->uid;
@ -118,7 +117,7 @@ class Smarty_Internal_Compile_Functionclose extends Smarty_Internal_CompileBase
} }
} }
if (!empty($_paramsArray)) { if (!empty($_paramsArray)) {
$_params = 'array(' . implode(",", $_paramsArray) . ')'; $_params = 'array(' . implode(',', $_paramsArray) . ')';
$_paramsCode = "\$params = array_merge($_params, \$params);\n"; $_paramsCode = "\$params = array_merge($_params, \$params);\n";
} else { } else {
$_paramsCode = ''; $_paramsCode = '';
@ -134,15 +133,16 @@ class Smarty_Internal_Compile_Functionclose extends Smarty_Internal_CompileBase
$output = "<?php\n"; $output = "<?php\n";
$output .= "/* {$_funcNameCaching} */\n"; $output .= "/* {$_funcNameCaching} */\n";
$output .= "if (!function_exists('{$_funcNameCaching}')) {\n"; $output .= "if (!function_exists('{$_funcNameCaching}')) {\n";
$output .= "function {$_funcNameCaching} (\$_smarty_tpl,\$params) {\n"; $output .= "function {$_funcNameCaching} (Smarty_Internal_Template \$_smarty_tpl,\$params) {\n";
$output .= "ob_start();\n"; $output .= "ob_start();\n";
$output .= $compiler->compileRequiredPlugins();
$output .= "\$_smarty_tpl->compiled->has_nocache_code = true;\n"; $output .= "\$_smarty_tpl->compiled->has_nocache_code = true;\n";
$output .= $_paramsCode; $output .= $_paramsCode;
$output .= "foreach (\$params as \$key => \$value) {\n\$_smarty_tpl->tpl_vars[\$key] = new Smarty_Variable(\$value, \$_smarty_tpl->isRenderingCache);\n}"; $output .= "foreach (\$params as \$key => \$value) {\n\$_smarty_tpl->tpl_vars[\$key] = new Smarty_Variable(\$value, \$_smarty_tpl->isRenderingCache);\n}\n";
$output .= "\$params = var_export(\$params, true);\n"; $output .= "\$params = var_export(\$params, true);\n";
$output .= "echo \"/*%%SmartyNocache:{$compiler->template->compiled->nocache_hash}%%*/<?php "; $output .= "echo \"/*%%SmartyNocache:{$compiler->template->compiled->nocache_hash}%%*/<?php ";
$output .= "\\\$_smarty_tpl->smarty->ext->_tplFunction->saveTemplateVariables(\\\$_smarty_tpl, '{$_name}');\nforeach (\$params as \\\$key => \\\$value) {\n\\\$_smarty_tpl->tpl_vars[\\\$key] = new Smarty_Variable(\\\$value, \\\$_smarty_tpl->isRenderingCache);\n}\n?>"; $output .= "\\\$_smarty_tpl->smarty->ext->_tplFunction->saveTemplateVariables(\\\$_smarty_tpl, '{$_name}');\nforeach (\$params as \\\$key => \\\$value) {\n\\\$_smarty_tpl->tpl_vars[\\\$key] = new Smarty_Variable(\\\$value, \\\$_smarty_tpl->isRenderingCache);\n}\n?>";
$output .= "/*/%%SmartyNocache:{$compiler->template->compiled->nocache_hash}%%*/\n\";?>"; $output .= "/*/%%SmartyNocache:{$compiler->template->compiled->nocache_hash}%%*/\";?>";
$compiler->parser->current_buffer->append_subtree($compiler->parser, $compiler->parser->current_buffer->append_subtree($compiler->parser,
new Smarty_Internal_ParseTree_Tag($compiler->parser, new Smarty_Internal_ParseTree_Tag($compiler->parser,
$output)); $output));
@ -166,9 +166,11 @@ class Smarty_Internal_Compile_Functionclose extends Smarty_Internal_CompileBase
$output = "<?php\n"; $output = "<?php\n";
$output .= "/* {$_funcName} */\n"; $output .= "/* {$_funcName} */\n";
$output .= "if (!function_exists('{$_funcName}')) {\n"; $output .= "if (!function_exists('{$_funcName}')) {\n";
$output .= "function {$_funcName}(\$_smarty_tpl,\$params) {\n"; $output .= "function {$_funcName}(Smarty_Internal_Template \$_smarty_tpl,\$params) {\n";
$output .= $_paramsCode; $output .= $_paramsCode;
$output .= "foreach (\$params as \$key => \$value) {\n\$_smarty_tpl->tpl_vars[\$key] = new Smarty_Variable(\$value, \$_smarty_tpl->isRenderingCache);\n}?>"; $output .= "foreach (\$params as \$key => \$value) {\n\$_smarty_tpl->tpl_vars[\$key] = new Smarty_Variable(\$value, \$_smarty_tpl->isRenderingCache);\n}\n";
$output .= $compiler->compileCheckPlugins(array_merge($compiler->required_plugins[ 'compiled' ], $compiler->required_plugins[ 'nocache' ]));
$output .= "?>\n";
$compiler->parser->current_buffer->append_subtree($compiler->parser, $compiler->parser->current_buffer->append_subtree($compiler->parser,
new Smarty_Internal_ParseTree_Tag($compiler->parser, new Smarty_Internal_ParseTree_Tag($compiler->parser,
$output)); $output));
@ -180,19 +182,10 @@ class Smarty_Internal_Compile_Functionclose extends Smarty_Internal_CompileBase
new Smarty_Internal_ParseTree_Tag($compiler->parser, new Smarty_Internal_ParseTree_Tag($compiler->parser,
$output)); $output));
$compiler->parent_compiler->blockOrFunctionCode .= $compiler->parser->current_buffer->to_smarty_php($compiler->parser); $compiler->parent_compiler->blockOrFunctionCode .= $compiler->parser->current_buffer->to_smarty_php($compiler->parser);
// nocache plugins must be copied
if (!empty($compiler->template->compiled->required_plugins[ 'nocache' ])) {
foreach ($compiler->template->compiled->required_plugins[ 'nocache' ] as $plugin => $tmp) {
foreach ($tmp as $type => $data) {
$compiler->parent_compiler->template->compiled->required_plugins[ 'compiled' ][ $plugin ][ $type ] =
$data;
}
}
}
// restore old buffer // restore old buffer
$compiler->parser->current_buffer = $saved_data[ 1 ]; $compiler->parser->current_buffer = $saved_data[ 1 ];
// restore old status // restore old status
$compiler->restoreRequiredPlugins();
$compiler->template->compiled->has_nocache_code = $saved_data[ 2 ]; $compiler->template->compiled->has_nocache_code = $saved_data[ 2 ];
$compiler->template->caching = $saved_data[ 3 ]; $compiler->template->caching = $saved_data[ 3 ];
return true; return true;

View File

@ -34,8 +34,8 @@ class Smarty_Internal_Compile_If extends Smarty_Internal_CompileBase
// must whole block be nocache ? // must whole block be nocache ?
$compiler->nocache = $compiler->nocache | $compiler->tag_nocache; $compiler->nocache = $compiler->nocache | $compiler->tag_nocache;
if (!array_key_exists("if condition", $parameter)) { if (!isset($parameter['if condition'])) {
$compiler->trigger_template_error("missing if condition", null, true); $compiler->trigger_template_error('missing if condition', null, true);
} }
if (is_array($parameter[ 'if condition' ])) { if (is_array($parameter[ 'if condition' ])) {
@ -49,9 +49,9 @@ class Smarty_Internal_Compile_If extends Smarty_Internal_CompileBase
$compiler->setNocacheInVariable($var); $compiler->setNocacheInVariable($var);
} }
$prefixVar = $compiler->getNewPrefixVariable(); $prefixVar = $compiler->getNewPrefixVariable();
$_output = "<?php {$prefixVar} = " . $parameter[ 'if condition' ][ 'value' ] . ";?>\n"; $_output = "<?php {$prefixVar} = {$parameter[ 'if condition' ][ 'value' ]};?>\n";
$assignAttr = array(); $assignAttr = array();
$assignAttr[][ 'value' ] = "{$prefixVar}"; $assignAttr[][ 'value' ] = $prefixVar;
$assignCompiler = new Smarty_Internal_Compile_Assign(); $assignCompiler = new Smarty_Internal_Compile_Assign();
if (is_array($parameter[ 'if condition' ][ 'var' ])) { if (is_array($parameter[ 'if condition' ][ 'var' ])) {
$assignAttr[][ 'var' ] = $parameter[ 'if condition' ][ 'var' ][ 'var' ]; $assignAttr[][ 'var' ] = $parameter[ 'if condition' ][ 'var' ][ 'var' ];
@ -82,16 +82,15 @@ class Smarty_Internal_Compile_Else extends Smarty_Internal_CompileBase
* *
* @param array $args array with attributes from parser * @param array $args array with attributes from parser
* @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object
* @param array $parameter array with compilation parameter
* *
* @return string compiled code * @return string compiled code
*/ */
public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter) public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler)
{ {
list($nesting, $compiler->tag_nocache) = $this->closeTag($compiler, array('if', 'elseif')); list($nesting, $compiler->tag_nocache) = $this->closeTag($compiler, array('if', 'elseif'));
$this->openTag($compiler, 'else', array($nesting, $compiler->tag_nocache)); $this->openTag($compiler, 'else', array($nesting, $compiler->tag_nocache));
return "<?php } else { ?>"; return '<?php } else { ?>';
} }
} }
@ -120,8 +119,8 @@ class Smarty_Internal_Compile_Elseif extends Smarty_Internal_CompileBase
list($nesting, $compiler->tag_nocache) = $this->closeTag($compiler, array('if', 'elseif')); list($nesting, $compiler->tag_nocache) = $this->closeTag($compiler, array('if', 'elseif'));
if (!array_key_exists("if condition", $parameter)) { if (!isset($parameter['if condition'])) {
$compiler->trigger_template_error("missing elseif condition", null, true); $compiler->trigger_template_error('missing elseif condition', null, true);
} }
$assignCode = ''; $assignCode = '';
@ -138,10 +137,10 @@ class Smarty_Internal_Compile_Elseif extends Smarty_Internal_CompileBase
$compiler->setNocacheInVariable($var); $compiler->setNocacheInVariable($var);
} }
$prefixVar = $compiler->getNewPrefixVariable(); $prefixVar = $compiler->getNewPrefixVariable();
$assignCode = "<?php {$prefixVar} = " . $parameter[ 'if condition' ][ 'value' ] . ";?>\n"; $assignCode = "<?php {$prefixVar} = {$parameter[ 'if condition' ][ 'value' ]};?>\n";
$assignCompiler = new Smarty_Internal_Compile_Assign(); $assignCompiler = new Smarty_Internal_Compile_Assign();
$assignAttr = array(); $assignAttr = array();
$assignAttr[][ 'value' ] = "{$prefixVar}"; $assignAttr[][ 'value' ] = $prefixVar;
if (is_array($parameter[ 'if condition' ][ 'var' ])) { if (is_array($parameter[ 'if condition' ][ 'var' ])) {
$assignAttr[][ 'var' ] = $parameter[ 'if condition' ][ 'var' ][ 'var' ]; $assignAttr[][ 'var' ] = $parameter[ 'if condition' ][ 'var' ][ 'var' ];
$assignCode .= $assignCompiler->compile($assignAttr, $compiler, $assignCode .= $assignCompiler->compile($assignAttr, $compiler,
@ -190,11 +189,10 @@ class Smarty_Internal_Compile_Ifclose extends Smarty_Internal_CompileBase
* *
* @param array $args array with attributes from parser * @param array $args array with attributes from parser
* @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object
* @param array $parameter array with compilation parameter
* *
* @return string compiled code * @return string compiled code
*/ */
public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter) public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler)
{ {
// must endblock be nocache? // must endblock be nocache?
if ($compiler->nocache) { if ($compiler->nocache) {

View File

@ -7,7 +7,6 @@
* @subpackage Compiler * @subpackage Compiler
* @author Uwe Tews * @author Uwe Tews
*/ */
/** /**
* Smarty Internal Plugin Compile Include Class * Smarty Internal Plugin Compile Include Class
* *
@ -20,7 +19,6 @@ class Smarty_Internal_Compile_Include extends Smarty_Internal_CompileBase
* caching mode to create nocache code but no cache file * caching mode to create nocache code but no cache file
*/ */
const CACHING_NOCACHE_CODE = 9999; const CACHING_NOCACHE_CODE = 9999;
/** /**
* Attribute definition: Overwrites base class. * Attribute definition: Overwrites base class.
* *
@ -28,7 +26,6 @@ class Smarty_Internal_Compile_Include extends Smarty_Internal_CompileBase
* @see Smarty_Internal_CompileBase * @see Smarty_Internal_CompileBase
*/ */
public $required_attributes = array('file'); public $required_attributes = array('file');
/** /**
* Attribute definition: Overwrites base class. * Attribute definition: Overwrites base class.
* *
@ -36,7 +33,6 @@ class Smarty_Internal_Compile_Include extends Smarty_Internal_CompileBase
* @see Smarty_Internal_CompileBase * @see Smarty_Internal_CompileBase
*/ */
public $shorttag_order = array('file'); public $shorttag_order = array('file');
/** /**
* Attribute definition: Overwrites base class. * Attribute definition: Overwrites base class.
* *
@ -44,7 +40,6 @@ class Smarty_Internal_Compile_Include extends Smarty_Internal_CompileBase
* @see Smarty_Internal_CompileBase * @see Smarty_Internal_CompileBase
*/ */
public $option_flags = array('nocache', 'inline', 'caching'); public $option_flags = array('nocache', 'inline', 'caching');
/** /**
* Attribute definition: Overwrites base class. * Attribute definition: Overwrites base class.
* *
@ -52,7 +47,6 @@ class Smarty_Internal_Compile_Include extends Smarty_Internal_CompileBase
* @see Smarty_Internal_CompileBase * @see Smarty_Internal_CompileBase
*/ */
public $optional_attributes = array('_any'); public $optional_attributes = array('_any');
/** /**
* Valid scope names * Valid scope names
* *
@ -67,17 +61,17 @@ class Smarty_Internal_Compile_Include extends Smarty_Internal_CompileBase
* *
* @param array $args array with attributes from parser * @param array $args array with attributes from parser
* @param Smarty_Internal_SmartyTemplateCompiler $compiler compiler object * @param Smarty_Internal_SmartyTemplateCompiler $compiler compiler object
* @param array $parameter array with compilation parameter
* *
* @throws SmartyCompilerException * @return string
* @return string compiled code * @throws \Exception
* @throws \SmartyCompilerException
* @throws \SmartyException
*/ */
public function compile($args, Smarty_Internal_SmartyTemplateCompiler $compiler, $parameter) public function compile($args, Smarty_Internal_SmartyTemplateCompiler $compiler)
{ {
$uid = $t_hash = null; $uid = $t_hash = null;
// check and get attributes // check and get attributes
$_attr = $this->getAttributes($compiler, $args); $_attr = $this->getAttributes($compiler, $args);
$fullResourceName = $source_resource = $_attr[ 'file' ]; $fullResourceName = $source_resource = $_attr[ 'file' ];
$variable_template = false; $variable_template = false;
$cache_tpl = false; $cache_tpl = false;
@ -90,11 +84,11 @@ class Smarty_Internal_Compile_Include extends Smarty_Internal_CompileBase
$variable_template = true; $variable_template = true;
} }
if (!$variable_template) { if (!$variable_template) {
if ($type != 'string') { if ($type !== 'string') {
$fullResourceName = "{$type}:{$name}"; $fullResourceName = "{$type}:{$name}";
$compiled = $compiler->parent_compiler->template->compiled; $compiled = $compiler->parent_compiler->template->compiled;
if (isset($compiled->includes[ $fullResourceName ])) { if (isset($compiled->includes[ $fullResourceName ])) {
$compiled->includes[ $fullResourceName ] ++; $compiled->includes[ $fullResourceName ]++;
$cache_tpl = true; $cache_tpl = true;
} else { } else {
if ("{$compiler->template->source->type}:{$compiler->template->source->name}" == if ("{$compiler->template->source->type}:{$compiler->template->source->name}" ==
@ -116,10 +110,8 @@ class Smarty_Internal_Compile_Include extends Smarty_Internal_CompileBase
} else { } else {
$variable_template = true; $variable_template = true;
} }
// scope setup // scope setup
$_scope = $compiler->convertScope($_attr, $this->valid_scopes); $_scope = $compiler->convertScope($_attr, $this->valid_scopes);
// set flag to cache subtemplate object when called within loop or template name is variable. // set flag to cache subtemplate object when called within loop or template name is variable.
if ($cache_tpl || $variable_template || $compiler->loopNesting > 0) { if ($cache_tpl || $variable_template || $compiler->loopNesting > 0) {
$_cache_tpl = 'true'; $_cache_tpl = 'true';
@ -128,18 +120,14 @@ class Smarty_Internal_Compile_Include extends Smarty_Internal_CompileBase
} }
// assume caching is off // assume caching is off
$_caching = Smarty::CACHING_OFF; $_caching = Smarty::CACHING_OFF;
$call_nocache = $compiler->tag_nocache || $compiler->nocache; $call_nocache = $compiler->tag_nocache || $compiler->nocache;
// caching was on and {include} is not in nocache mode // caching was on and {include} is not in nocache mode
if ($compiler->template->caching && !$compiler->nocache && !$compiler->tag_nocache) { if ($compiler->template->caching && !$compiler->nocache && !$compiler->tag_nocache) {
$_caching = self::CACHING_NOCACHE_CODE; $_caching = self::CACHING_NOCACHE_CODE;
} }
// flag if included template code should be merged into caller // flag if included template code should be merged into caller
$merge_compiled_includes = ($compiler->smarty->merge_compiled_includes || $_attr[ 'inline' ] === true) && $merge_compiled_includes = ($compiler->smarty->merge_compiled_includes || $_attr[ 'inline' ] === true) &&
!$compiler->template->source->handler->recompiled; !$compiler->template->source->handler->recompiled;
if ($merge_compiled_includes) { if ($merge_compiled_includes) {
// variable template name ? // variable template name ?
if ($variable_template) { if ($variable_template) {
@ -150,7 +138,6 @@ class Smarty_Internal_Compile_Include extends Smarty_Internal_CompileBase
$merge_compiled_includes = false; $merge_compiled_includes = false;
} }
} }
/* /*
* if the {include} tag provides individual parameter for caching or compile_id * if the {include} tag provides individual parameter for caching or compile_id
* the subtemplate must not be included into the common cache file and is treated like * the subtemplate must not be included into the common cache file and is treated like
@ -158,7 +145,7 @@ class Smarty_Internal_Compile_Include extends Smarty_Internal_CompileBase
* *
*/ */
if ($_attr[ 'nocache' ] !== true && $_attr[ 'caching' ]) { if ($_attr[ 'nocache' ] !== true && $_attr[ 'caching' ]) {
$_caching = $_new_caching = (int) $_attr[ 'caching' ]; $_caching = $_new_caching = (int)$_attr[ 'caching' ];
$call_nocache = true; $call_nocache = true;
} else { } else {
$_new_caching = Smarty::CACHING_LIFETIME_CURRENT; $_new_caching = Smarty::CACHING_LIFETIME_CURRENT;
@ -182,7 +169,6 @@ class Smarty_Internal_Compile_Include extends Smarty_Internal_CompileBase
} else { } else {
$_compile_id = '$_smarty_tpl->compile_id'; $_compile_id = '$_smarty_tpl->compile_id';
} }
// if subtemplate will be called in nocache mode do not merge // if subtemplate will be called in nocache mode do not merge
if ($compiler->template->caching && $call_nocache) { if ($compiler->template->caching && $call_nocache) {
$merge_compiled_includes = false; $merge_compiled_includes = false;
@ -200,7 +186,6 @@ class Smarty_Internal_Compile_Include extends Smarty_Internal_CompileBase
$_assign = $_attr[ 'assign' ]; $_assign = $_attr[ 'assign' ];
} }
} }
$has_compiled_template = false; $has_compiled_template = false;
if ($merge_compiled_includes) { if ($merge_compiled_includes) {
$c_id = isset($_attr[ 'compile_id' ]) ? $_attr[ 'compile_id' ] : $compiler->template->compile_id; $c_id = isset($_attr[ 'compile_id' ]) ? $_attr[ 'compile_id' ] : $compiler->template->compile_id;
@ -232,17 +217,17 @@ class Smarty_Internal_Compile_Include extends Smarty_Internal_CompileBase
$_vars = 'array(' . join(',', $_pairs) . ')'; $_vars = 'array(' . join(',', $_pairs) . ')';
} }
$update_compile_id = $compiler->template->caching && !$compiler->tag_nocache && !$compiler->nocache && $update_compile_id = $compiler->template->caching && !$compiler->tag_nocache && !$compiler->nocache &&
$_compile_id != '$_smarty_tpl->compile_id'; $_compile_id !== '$_smarty_tpl->compile_id';
if ($has_compiled_template && !$call_nocache) { if ($has_compiled_template && !$call_nocache) {
$_output = "<?php\n"; $_output = "<?php\n";
if ($update_compile_id) { if ($update_compile_id) {
$_output .= $compiler->makeNocacheCode("\$_compile_id_save[] = \$_smarty_tpl->compile_id;\n\$_smarty_tpl->compile_id = {$_compile_id};\n"); $_output .= $compiler->makeNocacheCode("\$_compile_id_save[] = \$_smarty_tpl->compile_id;\n\$_smarty_tpl->compile_id = {$_compile_id};\n");
} }
if (!empty($_attr) && $_caching == 9999 && $compiler->template->caching) { if (!empty($_attr) && $_caching === 9999 && $compiler->template->caching) {
$_vars_nc = "foreach ($_vars as \$ik => \$iv) {\n"; $_vars_nc = "foreach ($_vars as \$ik => \$iv) {\n";
$_vars_nc .= "\$_smarty_tpl->tpl_vars[\$ik] = new Smarty_Variable(\$iv);\n"; $_vars_nc .= "\$_smarty_tpl->tpl_vars[\$ik] = new Smarty_Variable(\$iv);\n";
$_vars_nc .= "}\n"; $_vars_nc .= "}\n";
$_output .= substr($compiler->processNocacheCode('<?php ' . $_vars_nc . "?>\n", true), 6, - 3); $_output .= substr($compiler->processNocacheCode('<?php ' . $_vars_nc . "?>\n", true), 6, -3);
} }
if (isset($_assign)) { if (isset($_assign)) {
$_output .= "ob_start();\n"; $_output .= "ob_start();\n";
@ -254,11 +239,9 @@ class Smarty_Internal_Compile_Include extends Smarty_Internal_CompileBase
if ($update_compile_id) { if ($update_compile_id) {
$_output .= $compiler->makeNocacheCode("\$_smarty_tpl->compile_id = array_pop(\$_compile_id_save);\n"); $_output .= $compiler->makeNocacheCode("\$_smarty_tpl->compile_id = array_pop(\$_compile_id_save);\n");
} }
$_output .= "?>\n"; $_output .= "?>";
return $_output; return $_output;
} }
if ($call_nocache) { if ($call_nocache) {
$compiler->tag_nocache = true; $compiler->tag_nocache = true;
} }
@ -277,7 +260,7 @@ class Smarty_Internal_Compile_Include extends Smarty_Internal_CompileBase
if ($update_compile_id) { if ($update_compile_id) {
$_output .= "\$_smarty_tpl->compile_id = array_pop(\$_compile_id_save);\n"; $_output .= "\$_smarty_tpl->compile_id = array_pop(\$_compile_id_save);\n";
} }
$_output .= "?>\n"; $_output .= "?>";
return $_output; return $_output;
} }
@ -289,9 +272,12 @@ class Smarty_Internal_Compile_Include extends Smarty_Internal_CompileBase
* @param string $t_hash * @param string $t_hash
* *
* @return bool * @return bool
* @throws \Exception
* @throws \SmartyException
*/ */
public function compileInlineTemplate(Smarty_Internal_SmartyTemplateCompiler $compiler, public function compileInlineTemplate(Smarty_Internal_SmartyTemplateCompiler $compiler,
Smarty_Internal_Template $tpl, $t_hash) Smarty_Internal_Template $tpl,
$t_hash)
{ {
$uid = $tpl->source->type . $tpl->source->uid; $uid = $tpl->source->type . $tpl->source->uid;
if (!($tpl->source->handler->uncompiled) && $tpl->source->exists) { if (!($tpl->source->handler->uncompiled) && $tpl->source->exists) {
@ -309,29 +295,30 @@ class Smarty_Internal_Compile_Include extends Smarty_Internal_CompileBase
$tpl->mustCompile = true; $tpl->mustCompile = true;
$compiler->parent_compiler->mergedSubTemplatesData[ $uid ][ $t_hash ][ 'nocache_hash' ] = $compiler->parent_compiler->mergedSubTemplatesData[ $uid ][ $t_hash ][ 'nocache_hash' ] =
$tpl->compiled->nocache_hash; $tpl->compiled->nocache_hash;
if ($compiler->template->source->type == 'file') { if ($tpl->source->type === 'file') {
$sourceInfo = $compiler->template->source->filepath; $sourceInfo = $tpl->source->filepath;
} else { } else {
$basename = $compiler->template->source->handler->getBasename($compiler->template->source); $basename = $tpl->source->handler->getBasename($tpl->source);
$sourceInfo = $compiler->template->source->type . ':' . $sourceInfo = $tpl->source->type . ':' .
($basename ? $basename : $compiler->template->source->name); ($basename ? $basename : $tpl->source->name);
} }
// get compiled code // get compiled code
$compiled_code = "<?php\n\n"; $compiled_code = "<?php\n\n";
$compiled_code .= "/* Start inline template \"{$sourceInfo}\" =============================*/\n"; $compiled_code .= "/* Start inline template \"{$sourceInfo}\" =============================*/\n";
$compiled_code .= "function {$tpl->compiled->unifunc} (\$_smarty_tpl) {\n"; $compiled_code .= "function {$tpl->compiled->unifunc} (Smarty_Internal_Template \$_smarty_tpl) {\n";
$compiled_code .= "?>\n" . $tpl->compiler->compileTemplateSource($tpl, null, $compiler->parent_compiler); $compiled_code .= "?>\n" . $tpl->compiler->compileTemplateSource($tpl, null, $compiler->parent_compiler);
$compiled_code .= "<?php\n"; $compiled_code .= "<?php\n";
$compiled_code .= "}\n?>\n"; $compiled_code .= "}\n?>\n";
$compiled_code .= $tpl->compiler->postFilter($tpl->compiler->blockOrFunctionCode); $compiled_code .= $tpl->compiler->postFilter($tpl->compiler->blockOrFunctionCode);
$compiled_code .= "<?php\n\n"; $compiled_code .= "<?php\n\n";
$compiled_code .= "/* End inline template \"{$sourceInfo}\" =============================*/\n"; $compiled_code .= "/* End inline template \"{$sourceInfo}\" =============================*/\n";
$compiled_code .= "?>"; $compiled_code .= '?>';
unset($tpl->compiler); unset($tpl->compiler);
if ($tpl->compiled->has_nocache_code) { if ($tpl->compiled->has_nocache_code) {
// replace nocache_hash // replace nocache_hash
$compiled_code = $compiled_code =
str_replace("{$tpl->compiled->nocache_hash}", $compiler->template->compiled->nocache_hash, str_replace("{$tpl->compiled->nocache_hash}",
$compiler->template->compiled->nocache_hash,
$compiled_code); $compiled_code);
$compiler->template->compiled->has_nocache_code = true; $compiler->template->compiled->has_nocache_code = true;
} }

View File

@ -7,7 +7,6 @@
* @subpackage Compiler * @subpackage Compiler
* @author Uwe Tews * @author Uwe Tews
*/ */
/** /**
* Smarty Internal Plugin Compile Insert Class * Smarty Internal Plugin Compile Insert Class
* *
@ -57,7 +56,6 @@ class Smarty_Internal_Compile_Include_Php extends Smarty_Internal_CompileBase
} }
// check and get attributes // check and get attributes
$_attr = $this->getAttributes($compiler, $args); $_attr = $this->getAttributes($compiler, $args);
/** @var Smarty_Internal_Template $_smarty_tpl /** @var Smarty_Internal_Template $_smarty_tpl
* used in evaluated code * used in evaluated code
*/ */
@ -74,8 +72,8 @@ class Smarty_Internal_Compile_Include_Php extends Smarty_Internal_CompileBase
$_dir = $compiler->smarty->trusted_dir; $_dir = $compiler->smarty->trusted_dir;
} }
if (!empty($_dir)) { if (!empty($_dir)) {
foreach ((array) $_dir as $_script_dir) { foreach ((array)$_dir as $_script_dir) {
$_path = $compiler->smarty->_realpath($_script_dir . $compiler->smarty->ds . $_file, true); $_path = $compiler->smarty->_realpath($_script_dir . DIRECTORY_SEPARATOR . $_file, true);
if (file_exists($_path)) { if (file_exists($_path)) {
$_filepath = $_path; $_filepath = $_path;
break; break;
@ -83,25 +81,22 @@ class Smarty_Internal_Compile_Include_Php extends Smarty_Internal_CompileBase
} }
} }
} }
if ($_filepath == false) { if ($_filepath === false) {
$compiler->trigger_template_error("{include_php} file '{$_file}' is not readable", null, true); $compiler->trigger_template_error("{include_php} file '{$_file}' is not readable", null, true);
} }
if (isset($compiler->smarty->security_policy)) { if (isset($compiler->smarty->security_policy)) {
$compiler->smarty->security_policy->isTrustedPHPDir($_filepath); $compiler->smarty->security_policy->isTrustedPHPDir($_filepath);
} }
if (isset($_attr[ 'assign' ])) { if (isset($_attr[ 'assign' ])) {
// output will be stored in a smarty variable instead of being displayed // output will be stored in a smarty variable instead of being displayed
$_assign = $_attr[ 'assign' ]; $_assign = $_attr[ 'assign' ];
} }
$_once = '_once'; $_once = '_once';
if (isset($_attr[ 'once' ])) { if (isset($_attr[ 'once' ])) {
if ($_attr[ 'once' ] == 'false') { if ($_attr[ 'once' ] === 'false') {
$_once = ''; $_once = '';
} }
} }
if (isset($_assign)) { if (isset($_assign)) {
return "<?php ob_start();\ninclude{$_once} ('{$_filepath}');\n\$_smarty_tpl->assign({$_assign},ob_get_clean());\n?>"; return "<?php ob_start();\ninclude{$_once} ('{$_filepath}');\n\$_smarty_tpl->assign({$_assign},ob_get_clean());\n?>";
} else { } else {

View File

@ -1,5 +1,4 @@
<?php <?php
/** /**
* Smarty Internal Plugin Compile Insert * Smarty Internal Plugin Compile Insert
* Compiles the {insert} tag * Compiles the {insert} tag
@ -24,7 +23,6 @@ class Smarty_Internal_Compile_Insert extends Smarty_Internal_CompileBase
* @see Smarty_Internal_CompileBase * @see Smarty_Internal_CompileBase
*/ */
public $required_attributes = array('name'); public $required_attributes = array('name');
/** /**
* Attribute definition: Overwrites base class. * Attribute definition: Overwrites base class.
* *
@ -32,7 +30,6 @@ class Smarty_Internal_Compile_Insert extends Smarty_Internal_CompileBase
* @see Smarty_Internal_CompileBase * @see Smarty_Internal_CompileBase
*/ */
public $shorttag_order = array('name'); public $shorttag_order = array('name');
/** /**
* Attribute definition: Overwrites base class. * Attribute definition: Overwrites base class.
* *
@ -49,14 +46,12 @@ class Smarty_Internal_Compile_Insert extends Smarty_Internal_CompileBase
* *
* @return string compiled code * @return string compiled code
* @throws \SmartyCompilerException * @throws \SmartyCompilerException
* @throws \SmartyException
*/ */
public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler) public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler)
{ {
// check and get attributes // check and get attributes
$_attr = $this->getAttributes($compiler, $args); $_attr = $this->getAttributes($compiler, $args);
//Does tag create output
$compiler->has_output = isset($_attr[ 'assign' ]) ? false : true;
$nocacheParam = $compiler->template->caching && ($compiler->tag_nocache || $compiler->nocache); $nocacheParam = $compiler->template->caching && ($compiler->tag_nocache || $compiler->nocache);
if (!$nocacheParam) { if (!$nocacheParam) {
// do not compile as nocache code // do not compile as nocache code
@ -66,7 +61,6 @@ class Smarty_Internal_Compile_Insert extends Smarty_Internal_CompileBase
$_smarty_tpl = $compiler->template; $_smarty_tpl = $compiler->template;
$_name = null; $_name = null;
$_script = null; $_script = null;
$_output = '<?php '; $_output = '<?php ';
// save possible attributes // save possible attributes
eval('$_name = @' . $_attr[ 'name' ] . ';'); eval('$_name = @' . $_attr[ 'name' ] . ';');
@ -74,7 +68,7 @@ class Smarty_Internal_Compile_Insert extends Smarty_Internal_CompileBase
// output will be stored in a smarty variable instead of being displayed // output will be stored in a smarty variable instead of being displayed
$_assign = $_attr[ 'assign' ]; $_assign = $_attr[ 'assign' ];
// create variable to make sure that the compiler knows about its nocache status // create variable to make sure that the compiler knows about its nocache status
$var = trim($_attr[ 'assign' ], "'"); $var = trim($_attr[ 'assign' ], '\'');
if (isset($compiler->template->tpl_vars[ $var ])) { if (isset($compiler->template->tpl_vars[ $var ])) {
$compiler->template->tpl_vars[ $var ]->nocache = true; $compiler->template->tpl_vars[ $var ]->nocache = true;
} else { } else {
@ -96,8 +90,8 @@ class Smarty_Internal_Compile_Insert extends Smarty_Internal_CompileBase
$_dir = $compiler->smarty instanceof SmartyBC ? $compiler->smarty->trusted_dir : null; $_dir = $compiler->smarty instanceof SmartyBC ? $compiler->smarty->trusted_dir : null;
} }
if (!empty($_dir)) { if (!empty($_dir)) {
foreach ((array) $_dir as $_script_dir) { foreach ((array)$_dir as $_script_dir) {
$_script_dir = rtrim($_script_dir, '/\\') . $compiler->smarty->ds; $_script_dir = rtrim($_script_dir, '/\\') . DIRECTORY_SEPARATOR;
if (file_exists($_script_dir . $_script)) { if (file_exists($_script_dir . $_script)) {
$_filepath = $_script_dir . $_script; $_filepath = $_script_dir . $_script;
break; break;
@ -105,7 +99,7 @@ class Smarty_Internal_Compile_Insert extends Smarty_Internal_CompileBase
} }
} }
} }
if ($_filepath == false) { if ($_filepath === false) {
$compiler->trigger_template_error("{insert} missing script file '{$_script}'", null, true); $compiler->trigger_template_error("{insert} missing script file '{$_script}'", null, true);
} }
// code for script file loading // code for script file loading
@ -113,7 +107,8 @@ class Smarty_Internal_Compile_Insert extends Smarty_Internal_CompileBase
require_once $_filepath; require_once $_filepath;
if (!is_callable($_function)) { if (!is_callable($_function)) {
$compiler->trigger_template_error(" {insert} function '{$_function}' is not callable in script file '{$_script}'", $compiler->trigger_template_error(" {insert} function '{$_function}' is not callable in script file '{$_script}'",
null, true); null,
true);
} }
} else { } else {
$_filepath = 'null'; $_filepath = 'null';
@ -122,7 +117,8 @@ class Smarty_Internal_Compile_Insert extends Smarty_Internal_CompileBase
if (!is_callable($_function)) { if (!is_callable($_function)) {
// try plugin // try plugin
if (!$_function = $compiler->getPlugin($_name, 'insert')) { if (!$_function = $compiler->getPlugin($_name, 'insert')) {
$compiler->trigger_template_error("{insert} no function or plugin found for '{$_name}'", null, $compiler->trigger_template_error("{insert} no function or plugin found for '{$_name}'",
null,
true); true);
} }
} }
@ -149,7 +145,6 @@ class Smarty_Internal_Compile_Insert extends Smarty_Internal_CompileBase
$_output .= "echo {$_function}({$_params},\$_smarty_tpl);?>"; $_output .= "echo {$_function}({$_params},\$_smarty_tpl);?>";
} }
} }
return $_output; return $_output;
} }
} }

View File

@ -32,9 +32,6 @@ class Smarty_Internal_Compile_Ldelim extends Smarty_Internal_CompileBase
if ($_attr[ 'nocache' ] === true) { if ($_attr[ 'nocache' ] === true) {
$compiler->trigger_template_error('nocache option not allowed', null, true); $compiler->trigger_template_error('nocache option not allowed', null, true);
} }
// this tag does not return compiled code
$compiler->has_code = true;
return $compiler->smarty->left_delimiter; return $compiler->smarty->left_delimiter;
} }
} }

View File

@ -43,18 +43,16 @@ class Smarty_Internal_Compile_Make_Nocache extends Smarty_Internal_CompileBase
* *
* @param array $args array with attributes from parser * @param array $args array with attributes from parser
* @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object
* @param array $parameter array with compilation parameter
* *
* @return string compiled code * @return string compiled code
* @throws \SmartyCompilerException
*/ */
public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter) public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler)
{ {
// check and get attributes // check and get attributes
$_attr = $this->getAttributes($compiler, $args); $_attr = $this->getAttributes($compiler, $args);
if ($compiler->template->caching) { if ($compiler->template->caching) {
$output = "<?php \$_smarty_tpl->smarty->ext->_make_nocache->save(\$_smarty_tpl, {$_attr[ 'var' ]});\n?>\n"; $output = "<?php \$_smarty_tpl->smarty->ext->_make_nocache->save(\$_smarty_tpl, {$_attr[ 'var' ]});\n?>\n";
$compiler->has_code = true; $compiler->template->compiled->has_nocache_code = true;
$compiler->suppressNocacheProcessing = true; $compiler->suppressNocacheProcessing = true;
return $output; return $output;
} else { } else {

View File

@ -0,0 +1,32 @@
<?php
/*
* This file is part of Smarty.
*
* (c) 2015 Uwe Tews
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
/**
* Smarty Internal Plugin Compile Parent Class
*
* @author Uwe Tews <uwe.tews@googlemail.com>
*/
class Smarty_Internal_Compile_Parent extends Smarty_Internal_Compile_Child
{
/**
* Tag name
*
* @var string
*/
public $tag = 'parent';
/**
* Block type
*
* @var string
*/
public $blockType = 'Parent';
}

View File

@ -41,17 +41,19 @@ class Smarty_Internal_Compile_Private_Block_Plugin extends Smarty_Internal_Compi
* @param string $function PHP function name * @param string $function PHP function name
* *
* @return string compiled code * @return string compiled code
* @throws \SmartyCompilerException
* @throws \SmartyException
*/ */
public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter, $tag, $function = null) public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter, $tag, $function = null)
{ {
if (!isset($tag[ 5 ]) || substr($tag, - 5) != 'close') { if (!isset($tag[ 5 ]) || substr($tag, - 5) !== 'close') {
// opening tag of block plugin // opening tag of block plugin
// check and get attributes // check and get attributes
$_attr = $this->getAttributes($compiler, $args); $_attr = $this->getAttributes($compiler, $args);
$this->nesting ++; $this->nesting ++;
unset($_attr[ 'nocache' ]); unset($_attr[ 'nocache' ]);
list($callback, $_paramsArray, $callable) = $this->setup($compiler, $_attr, $tag, $function); list($callback, $_paramsArray, $callable) = $this->setup($compiler, $_attr, $tag, $function);
$_params = 'array(' . implode(",", $_paramsArray) . ')'; $_params = 'array(' . implode(',', $_paramsArray) . ')';
// compile code // compile code
$output = "<?php "; $output = "<?php ";
@ -63,7 +65,7 @@ class Smarty_Internal_Compile_Private_Block_Plugin extends Smarty_Internal_Compi
$output .= "if (!is_callable({$callable})) {\nthrow new SmartyException('block tag \'{$tag}\' not callable or registered');\n}\n"; $output .= "if (!is_callable({$callable})) {\nthrow new SmartyException('block tag \'{$tag}\' not callable or registered');\n}\n";
} }
$output .= "\$_smarty_tpl->smarty->_cache['_tag_stack'][] = array('{$tag}', {$_params});\n"; $output .= "\$_smarty_tpl->smarty->_cache['_tag_stack'][] = array('{$tag}', {$_params});\n";
$output .= "\$_block_repeat=true;\necho {$callback}({$_params}, null, \$_smarty_tpl, \$_block_repeat);\nwhile (\$_block_repeat) {\nob_start();\n?>"; $output .= "\$_block_repeat=true;\necho {$callback}({$_params}, null, \$_smarty_tpl, \$_block_repeat);\nwhile (\$_block_repeat) {\nob_start();?>";
$this->openTag($compiler, $tag, array($_params, $compiler->nocache, $callback)); $this->openTag($compiler, $tag, array($_params, $compiler->nocache, $callback));
// maybe nocache because of nocache variables or nocache plugin // maybe nocache because of nocache variables or nocache plugin
$compiler->nocache = $compiler->nocache | $compiler->tag_nocache; $compiler->nocache = $compiler->nocache | $compiler->tag_nocache;
@ -74,8 +76,6 @@ class Smarty_Internal_Compile_Private_Block_Plugin extends Smarty_Internal_Compi
} }
// closing tag of block plugin, restore nocache // closing tag of block plugin, restore nocache
list($_params, $compiler->nocache, $callback) = $this->closeTag($compiler, substr($tag, 0, - 5)); list($_params, $compiler->nocache, $callback) = $this->closeTag($compiler, substr($tag, 0, - 5));
//Does tag create output
$compiler->has_output = isset($_params[ 'assign' ]) ? false : true;
// compile code // compile code
if (!isset($parameter[ 'modifier_list' ])) { if (!isset($parameter[ 'modifier_list' ])) {
$mod_pre = $mod_post = $mod_content = ''; $mod_pre = $mod_post = $mod_content = '';
@ -88,13 +88,10 @@ class Smarty_Internal_Compile_Private_Block_Plugin extends Smarty_Internal_Compi
array('modifierlist' => $parameter[ 'modifier_list' ], array('modifierlist' => $parameter[ 'modifier_list' ],
'value' => 'ob_get_clean()')) . ";\n"; 'value' => 'ob_get_clean()')) . ";\n";
} }
$output = "<?php " . $mod_content . "\$_block_repeat=false;\n" . $mod_pre . $output = "<?php {$mod_content}\$_block_repeat=false;\n{$mod_pre}echo {$callback}({$_params}, {$mod_content2}, \$_smarty_tpl, \$_block_repeat);\n{$mod_post}}\n";
"echo {$callback}({$_params}, " . $mod_content2 . $output .= 'array_pop($_smarty_tpl->smarty->_cache[\'_tag_stack\']);?>';
", \$_smarty_tpl, \$_block_repeat);\n" . $mod_post . "}\n";
$output .= "array_pop(\$_smarty_tpl->smarty->_cache['_tag_stack']);";
$output .= "?>";
} }
return $output . "\n"; return $output;
} }
/** /**

View File

@ -76,6 +76,8 @@ class Smarty_Internal_Compile_Private_ForeachSection extends Smarty_Internal_Com
* *
* @param array $attributes * @param array $attributes
* @param \Smarty_Internal_TemplateCompilerBase $compiler * @param \Smarty_Internal_TemplateCompilerBase $compiler
*
* @throws \SmartyException
*/ */
public function scanForProperties($attributes, Smarty_Internal_TemplateCompilerBase $compiler) public function scanForProperties($attributes, Smarty_Internal_TemplateCompilerBase $compiler)
{ {
@ -110,8 +112,9 @@ class Smarty_Internal_Compile_Private_ForeachSection extends Smarty_Internal_Com
public function buildPropertyPreg($named, $attributes) public function buildPropertyPreg($named, $attributes)
{ {
if ($named) { if ($named) {
$this->resultOffsets[ 'named' ] = $this->startOffset + 3; $this->resultOffsets[ 'named' ] = $this->startOffset + 4;
$this->propertyPreg .= "([\$]smarty[.]{$this->tagName}[.]{$attributes['name']}[.]("; $this->propertyPreg .= "(([\$]smarty[.]{$this->tagName}[.]" . ($this->tagName === 'section' ? "|[\[]\s*" : '')
. "){$attributes['name']}[.](";
$properties = $this->nameProperties; $properties = $this->nameProperties;
} else { } else {
$this->resultOffsets[ 'item' ] = $this->startOffset + 3; $this->resultOffsets[ 'item' ] = $this->startOffset + 3;
@ -161,6 +164,8 @@ class Smarty_Internal_Compile_Private_ForeachSection extends Smarty_Internal_Com
* Find matches in all parent template source * Find matches in all parent template source
* *
* @param \Smarty_Internal_TemplateCompilerBase $compiler * @param \Smarty_Internal_TemplateCompilerBase $compiler
*
* @throws \SmartyException
*/ */
public function matchParentTemplateSource(Smarty_Internal_TemplateCompilerBase $compiler) public function matchParentTemplateSource(Smarty_Internal_TemplateCompilerBase $compiler)
{ {
@ -171,7 +176,7 @@ class Smarty_Internal_Compile_Private_ForeachSection extends Smarty_Internal_Com
if ($compiler !== $nextCompiler) { if ($compiler !== $nextCompiler) {
// get template source // get template source
$_content = $nextCompiler->template->source->getContent(); $_content = $nextCompiler->template->source->getContent();
if ($_content != '') { if ($_content !== '') {
// run pre filter if required // run pre filter if required
if ((isset($nextCompiler->smarty->autoload_filters[ 'pre' ]) || if ((isset($nextCompiler->smarty->autoload_filters[ 'pre' ]) ||
isset($nextCompiler->smarty->registered_filters[ 'pre' ])) isset($nextCompiler->smarty->registered_filters[ 'pre' ]))

View File

@ -42,6 +42,8 @@ class Smarty_Internal_Compile_Private_Function_Plugin extends Smarty_Internal_Co
* @param string $function PHP function name * @param string $function PHP function name
* *
* @return string compiled code * @return string compiled code
* @throws \SmartyCompilerException
* @throws \SmartyException
*/ */
public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter, $tag, $function) public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter, $tag, $function)
{ {
@ -58,7 +60,7 @@ class Smarty_Internal_Compile_Private_Function_Plugin extends Smarty_Internal_Co
$_paramsArray[] = "'$_key'=>$_value"; $_paramsArray[] = "'$_key'=>$_value";
} }
} }
$_params = 'array(' . implode(",", $_paramsArray) . ')'; $_params = 'array(' . implode(',', $_paramsArray) . ')';
// compile code // compile code
$output = "{$function}({$_params},\$_smarty_tpl)"; $output = "{$function}({$_params},\$_smarty_tpl)";
if (!empty($parameter[ 'modifierlist' ])) { if (!empty($parameter[ 'modifierlist' ])) {
@ -66,8 +68,6 @@ class Smarty_Internal_Compile_Private_Function_Plugin extends Smarty_Internal_Co
array('modifierlist' => $parameter[ 'modifierlist' ], array('modifierlist' => $parameter[ 'modifierlist' ],
'value' => $output)); 'value' => $output));
} }
//Does tag create output
$compiler->has_output = true;
$output = "<?php echo {$output};?>\n"; $output = "<?php echo {$output};?>\n";
return $output; return $output;
} }

Some files were not shown because too many files have changed in this diff Show More