mirror of
https://github.com/Combodo/iTop.git
synced 2026-04-23 18:48:51 +02:00
Compare commits
8 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6e3ff0e429 | ||
|
|
14facb4d6c | ||
|
|
f923ac879f | ||
|
|
0b46ab9e48 | ||
|
|
bdf11e32a7 | ||
|
|
1441b8a1d2 | ||
|
|
b1bc2cec1b | ||
|
|
e280f99996 |
@@ -5121,7 +5121,7 @@ HTML
|
|||||||
if ($sAttCode != MetaModel::GetStateAttributeCode($sClass) || !MetaModel::HasLifecycle($sClass)) {
|
if ($sAttCode != MetaModel::GetStateAttributeCode($sClass) || !MetaModel::HasLifecycle($sClass)) {
|
||||||
$sValueCheckbox = '<input type="checkbox" class="ibo-field--enable-bulk--checkbox" id="enable_'.$iFormId.'_'.$sAttCode.'" onClick="ToggleField(this.checked, \''.$iFormId.'_'.$sAttCode.'\')"/>';
|
$sValueCheckbox = '<input type="checkbox" class="ibo-field--enable-bulk--checkbox" id="enable_'.$iFormId.'_'.$sAttCode.'" onClick="ToggleField(this.checked, \''.$iFormId.'_'.$sAttCode.'\')"/>';
|
||||||
}
|
}
|
||||||
$aComments[$sAttCode] .= '<div class="multi_values ibo-field--enable-bulk ibo-pill ibo-is-failure" id="multi_values_'.$sAttCode.'" data-tooltip-content="'.$sTip.'" data-tooltip-html-enabled="true">'.$iCount.$sValueCheckbox.'</div>';
|
$aComments[$sAttCode] .= '<div class="multi_values ibo-field--enable-bulk ibo-pill ibo-is-failure" id="multi_values_'.$sAttCode.'" data-tooltip-content="'.$sTip.'" data-tooltip-html-enabled="true" data-tooltip-append-to="body">'.$iCount.$sValueCheckbox.'</div>';
|
||||||
}
|
}
|
||||||
$sReadyScript .= 'ToggleField('.(($iCount == 1) ? 'true' : 'false').', \''.$iFormId.'_'.$sAttCode.'\');'."\n";
|
$sReadyScript .= 'ToggleField('.(($iCount == 1) ? 'true' : 'false').', \''.$iFormId.'_'.$sAttCode.'\');'."\n";
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -44,15 +44,15 @@ class CoreCannotSaveObjectException extends CoreException
|
|||||||
public function getHtmlMessage()
|
public function getHtmlMessage()
|
||||||
{
|
{
|
||||||
$sTitle = Dict::S('UI:Error:SaveFailed');
|
$sTitle = Dict::S('UI:Error:SaveFailed');
|
||||||
$sContent = "<span><strong>{$sTitle}</strong></span>";
|
$sContent = "<span><strong>".utils::HtmlEntities($sTitle)."</strong></span>";
|
||||||
|
|
||||||
if (count($this->aIssues) == 1) {
|
if (count($this->aIssues) == 1) {
|
||||||
$sIssue = reset($this->aIssues);
|
$sIssue = reset($this->aIssues);
|
||||||
$sContent .= " <span>{$sIssue}</span>";
|
$sContent .= " <span>".utils::HtmlEntities($sIssue)."</span>";
|
||||||
} else {
|
} else {
|
||||||
$sContent .= '<ul>';
|
$sContent .= '<ul>';
|
||||||
foreach ($this->aIssues as $sError) {
|
foreach ($this->aIssues as $sError) {
|
||||||
$sContent .= "<li>$sError</li>";
|
$sContent .= "<li>".utils::HtmlEntities($sError)."</li>";
|
||||||
}
|
}
|
||||||
$sContent .= '</ul>';
|
$sContent .= '</ul>';
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,6 +23,6 @@ define('ITOP_DESIGN_LATEST_VERSION', '3.0');
|
|||||||
* @used-by utils::GetItopVersionWikiSyntax()
|
* @used-by utils::GetItopVersionWikiSyntax()
|
||||||
* @used-by iTopModulesPhpVersionIntegrationTest
|
* @used-by iTopModulesPhpVersionIntegrationTest
|
||||||
*/
|
*/
|
||||||
define('ITOP_CORE_VERSION', '3.0.1');
|
define('ITOP_CORE_VERSION', '3.0.2');
|
||||||
|
|
||||||
require_once APPROOT.'bootstrap.inc.php';
|
require_once APPROOT.'bootstrap.inc.php';
|
||||||
|
|||||||
@@ -28,7 +28,7 @@
|
|||||||
"symfony/twig-bundle": "~3.4.47",
|
"symfony/twig-bundle": "~3.4.47",
|
||||||
"symfony/yaml": "~3.4.47",
|
"symfony/yaml": "~3.4.47",
|
||||||
"thenetworg/oauth2-azure": "^2.0",
|
"thenetworg/oauth2-azure": "^2.0",
|
||||||
"twig/twig": "~1.42.5"
|
"twig/twig": "~1.43.1"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"symfony/stopwatch": "~3.4.47",
|
"symfony/stopwatch": "~3.4.47",
|
||||||
|
|||||||
30
composer.lock
generated
30
composer.lock
generated
@@ -4,7 +4,7 @@
|
|||||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
"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": "b3cdced77dc5a1160c12aadcafd9d7da",
|
"content-hash": "86ca84263f7f271dfc10e5e63bd02385",
|
||||||
"packages": [
|
"packages": [
|
||||||
{
|
{
|
||||||
"name": "combodo/tcpdf",
|
"name": "combodo/tcpdf",
|
||||||
@@ -4444,30 +4444,30 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "twig/twig",
|
"name": "twig/twig",
|
||||||
"version": "v1.42.5",
|
"version": "v1.43.1",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/twigphp/Twig.git",
|
"url": "https://github.com/twigphp/Twig.git",
|
||||||
"reference": "87b2ea9d8f6fd014d0621ca089bb1b3769ea3f8e"
|
"reference": "2311602f6a208715252febe682fa7c38e56a3373"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/twigphp/Twig/zipball/87b2ea9d8f6fd014d0621ca089bb1b3769ea3f8e",
|
"url": "https://api.github.com/repos/twigphp/Twig/zipball/2311602f6a208715252febe682fa7c38e56a3373",
|
||||||
"reference": "87b2ea9d8f6fd014d0621ca089bb1b3769ea3f8e",
|
"reference": "2311602f6a208715252febe682fa7c38e56a3373",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"php": ">=5.5.0",
|
"php": ">=7.1.3",
|
||||||
"symfony/polyfill-ctype": "^1.8"
|
"symfony/polyfill-ctype": "^1.8"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"psr/container": "^1.0",
|
"psr/container": "^1.0",
|
||||||
"symfony/phpunit-bridge": "^4.4|^5.0"
|
"symfony/phpunit-bridge": "^4.4.9|^5.0.9"
|
||||||
},
|
},
|
||||||
"type": "library",
|
"type": "library",
|
||||||
"extra": {
|
"extra": {
|
||||||
"branch-alias": {
|
"branch-alias": {
|
||||||
"dev-master": "1.42-dev"
|
"dev-master": "1.43-dev"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"autoload": {
|
"autoload": {
|
||||||
@@ -4506,9 +4506,19 @@
|
|||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/twigphp/Twig/issues",
|
"issues": "https://github.com/twigphp/Twig/issues",
|
||||||
"source": "https://github.com/twigphp/Twig/tree/1.x"
|
"source": "https://github.com/twigphp/Twig/tree/v1.43.1"
|
||||||
},
|
},
|
||||||
"time": "2020-02-11T05:59:23+00:00"
|
"funding": [
|
||||||
|
{
|
||||||
|
"url": "https://github.com/fabpot",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "https://tidelift.com/funding/github/packagist/twig/twig",
|
||||||
|
"type": "tidelift"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"time": "2020-08-05T15:05:05+00:00"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"packages-dev": [
|
"packages-dev": [
|
||||||
|
|||||||
@@ -78,7 +78,7 @@ class CMDBChangeOp extends DBObject implements iCMDBChangeOp
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Describe (as a text string) the modifications corresponding to this change
|
* @inheritDoc
|
||||||
*/
|
*/
|
||||||
public function GetDescription()
|
public function GetDescription()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
SetupWebPage::AddModule(
|
SetupWebPage::AddModule(
|
||||||
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
|
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
|
||||||
'authent-cas/3.0.1',
|
'authent-cas/3.0.2',
|
||||||
array(
|
array(
|
||||||
// Identification
|
// Identification
|
||||||
//
|
//
|
||||||
|
|||||||
@@ -27,7 +27,7 @@
|
|||||||
|
|
||||||
SetupWebPage::AddModule(
|
SetupWebPage::AddModule(
|
||||||
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
|
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
|
||||||
'authent-external/3.0.1',
|
'authent-external/3.0.2',
|
||||||
array(
|
array(
|
||||||
// Identification
|
// Identification
|
||||||
//
|
//
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ if (function_exists('ldap_connect'))
|
|||||||
|
|
||||||
SetupWebPage::AddModule(
|
SetupWebPage::AddModule(
|
||||||
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
|
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
|
||||||
'authent-ldap/3.0.1',
|
'authent-ldap/3.0.2',
|
||||||
array(
|
array(
|
||||||
// Identification
|
// Identification
|
||||||
//
|
//
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
SetupWebPage::AddModule(
|
SetupWebPage::AddModule(
|
||||||
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
|
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
|
||||||
'authent-local/3.0.1',
|
'authent-local/3.0.2',
|
||||||
array(
|
array(
|
||||||
// Identification
|
// Identification
|
||||||
//
|
//
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
SetupWebPage::AddModule(
|
SetupWebPage::AddModule(
|
||||||
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
|
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
|
||||||
'combodo-backoffice-darkmoon-theme/3.0.1',
|
'combodo-backoffice-darkmoon-theme/3.0.2',
|
||||||
array(
|
array(
|
||||||
// Identification
|
// Identification
|
||||||
//
|
//
|
||||||
|
|||||||
@@ -24,7 +24,7 @@
|
|||||||
/** @noinspection PhpUnhandledExceptionInspection */
|
/** @noinspection PhpUnhandledExceptionInspection */
|
||||||
SetupWebPage::AddModule(
|
SetupWebPage::AddModule(
|
||||||
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
|
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
|
||||||
'combodo-db-tools/3.0.1',
|
'combodo-db-tools/3.0.2',
|
||||||
array(
|
array(
|
||||||
// Identification
|
// Identification
|
||||||
//
|
//
|
||||||
|
|||||||
@@ -19,7 +19,7 @@
|
|||||||
|
|
||||||
SetupWebPage::AddModule(
|
SetupWebPage::AddModule(
|
||||||
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
|
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
|
||||||
'itop-attachments/3.0.1',
|
'itop-attachments/3.0.2',
|
||||||
array(
|
array(
|
||||||
// Identification
|
// Identification
|
||||||
//
|
//
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
SetupWebPage::AddModule(
|
SetupWebPage::AddModule(
|
||||||
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
|
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
|
||||||
'itop-backup/3.0.1',
|
'itop-backup/3.0.2',
|
||||||
array(
|
array(
|
||||||
// Identification
|
// Identification
|
||||||
//
|
//
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
SetupWebPage::AddModule(
|
SetupWebPage::AddModule(
|
||||||
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
|
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
|
||||||
'itop-bridge-cmdb-ticket/3.0.1',
|
'itop-bridge-cmdb-ticket/3.0.2',
|
||||||
array(
|
array(
|
||||||
// Identification
|
// Identification
|
||||||
//
|
//
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
SetupWebPage::AddModule(
|
SetupWebPage::AddModule(
|
||||||
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
|
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
|
||||||
'itop-bridge-virtualization-storage/3.0.1',
|
'itop-bridge-virtualization-storage/3.0.2',
|
||||||
array(
|
array(
|
||||||
// Identification
|
// Identification
|
||||||
//
|
//
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
SetupWebPage::AddModule(
|
SetupWebPage::AddModule(
|
||||||
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
|
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
|
||||||
'itop-change-mgmt-itil/3.0.1',
|
'itop-change-mgmt-itil/3.0.2',
|
||||||
array(
|
array(
|
||||||
// Identification
|
// Identification
|
||||||
//
|
//
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
SetupWebPage::AddModule(
|
SetupWebPage::AddModule(
|
||||||
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
|
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
|
||||||
'itop-change-mgmt/3.0.1',
|
'itop-change-mgmt/3.0.2',
|
||||||
array(
|
array(
|
||||||
// Identification
|
// Identification
|
||||||
//
|
//
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
SetupWebPage::AddModule(
|
SetupWebPage::AddModule(
|
||||||
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
|
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
|
||||||
'itop-config-mgmt/3.0.1',
|
'itop-config-mgmt/3.0.2',
|
||||||
array(
|
array(
|
||||||
// Identification
|
// Identification
|
||||||
//
|
//
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
SetupWebPage::AddModule(
|
SetupWebPage::AddModule(
|
||||||
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
|
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
|
||||||
'itop-config/3.0.1',
|
'itop-config/3.0.2',
|
||||||
array(
|
array(
|
||||||
// Identification
|
// Identification
|
||||||
//
|
//
|
||||||
|
|||||||
@@ -24,7 +24,7 @@
|
|||||||
/** @noinspection PhpUnhandledExceptionInspection */
|
/** @noinspection PhpUnhandledExceptionInspection */
|
||||||
SetupWebPage::AddModule(
|
SetupWebPage::AddModule(
|
||||||
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
|
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
|
||||||
'itop-core-update/3.0.1',
|
'itop-core-update/3.0.2',
|
||||||
array(
|
array(
|
||||||
// Identification
|
// Identification
|
||||||
//
|
//
|
||||||
|
|||||||
@@ -18,7 +18,7 @@
|
|||||||
|
|
||||||
SetupWebPage::AddModule(
|
SetupWebPage::AddModule(
|
||||||
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
|
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
|
||||||
'itop-datacenter-mgmt/3.0.1',
|
'itop-datacenter-mgmt/3.0.2',
|
||||||
array(
|
array(
|
||||||
// Identification
|
// Identification
|
||||||
//
|
//
|
||||||
|
|||||||
@@ -25,7 +25,7 @@
|
|||||||
|
|
||||||
SetupWebPage::AddModule(
|
SetupWebPage::AddModule(
|
||||||
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
|
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
|
||||||
'itop-endusers-devices/3.0.1',
|
'itop-endusers-devices/3.0.2',
|
||||||
array(
|
array(
|
||||||
// Identification
|
// Identification
|
||||||
//
|
//
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
SetupWebPage::AddModule(
|
SetupWebPage::AddModule(
|
||||||
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
|
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
|
||||||
'itop-faq-light/3.0.1',
|
'itop-faq-light/3.0.2',
|
||||||
array(
|
array(
|
||||||
// Identification
|
// Identification
|
||||||
//
|
//
|
||||||
|
|||||||
@@ -24,7 +24,7 @@
|
|||||||
/** @noinspection PhpUnhandledExceptionInspection */
|
/** @noinspection PhpUnhandledExceptionInspection */
|
||||||
SetupWebPage::AddModule(
|
SetupWebPage::AddModule(
|
||||||
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
|
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
|
||||||
'itop-files-information/3.0.1',
|
'itop-files-information/3.0.2',
|
||||||
array(
|
array(
|
||||||
// Identification
|
// Identification
|
||||||
//
|
//
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
SetupWebPage::AddModule(
|
SetupWebPage::AddModule(
|
||||||
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
|
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
|
||||||
'itop-full-itil/3.0.1',
|
'itop-full-itil/3.0.2',
|
||||||
array(
|
array(
|
||||||
// Identification
|
// Identification
|
||||||
//
|
//
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
SetupWebPage::AddModule(
|
SetupWebPage::AddModule(
|
||||||
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
|
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
|
||||||
'itop-hub-connector/3.0.1',
|
'itop-hub-connector/3.0.2',
|
||||||
array(
|
array(
|
||||||
// Identification
|
// Identification
|
||||||
//
|
//
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
SetupWebPage::AddModule(
|
SetupWebPage::AddModule(
|
||||||
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
|
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
|
||||||
'itop-incident-mgmt-itil/3.0.1',
|
'itop-incident-mgmt-itil/3.0.2',
|
||||||
array(
|
array(
|
||||||
// Identification
|
// Identification
|
||||||
//
|
//
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
SetupWebPage::AddModule(
|
SetupWebPage::AddModule(
|
||||||
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
|
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
|
||||||
'itop-knownerror-mgmt/3.0.1',
|
'itop-knownerror-mgmt/3.0.2',
|
||||||
array(
|
array(
|
||||||
// Identification
|
// Identification
|
||||||
//
|
//
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
SetupWebPage::AddModule(
|
SetupWebPage::AddModule(
|
||||||
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
|
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
|
||||||
'itop-oauth-client/3.0.1',
|
'itop-oauth-client/3.0.2',
|
||||||
array(
|
array(
|
||||||
// Identification
|
// Identification
|
||||||
//
|
//
|
||||||
|
|||||||
@@ -20,7 +20,7 @@
|
|||||||
/** @noinspection PhpUnhandledExceptionInspection */
|
/** @noinspection PhpUnhandledExceptionInspection */
|
||||||
SetupWebPage::AddModule(
|
SetupWebPage::AddModule(
|
||||||
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
|
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
|
||||||
'itop-portal-base/3.0.1', array(
|
'itop-portal-base/3.0.2', array(
|
||||||
// Identification
|
// Identification
|
||||||
'label' => 'Portal Development Library',
|
'label' => 'Portal Development Library',
|
||||||
'category' => 'Portal',
|
'category' => 'Portal',
|
||||||
|
|||||||
@@ -20,7 +20,7 @@
|
|||||||
/** @noinspection PhpUnhandledExceptionInspection */
|
/** @noinspection PhpUnhandledExceptionInspection */
|
||||||
SetupWebPage::AddModule(
|
SetupWebPage::AddModule(
|
||||||
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
|
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
|
||||||
'itop-portal/3.0.1', array(
|
'itop-portal/3.0.2', array(
|
||||||
// Identification
|
// Identification
|
||||||
'label' => 'Enhanced Customer Portal',
|
'label' => 'Enhanced Customer Portal',
|
||||||
'category' => 'Portal',
|
'category' => 'Portal',
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
SetupWebPage::AddModule(
|
SetupWebPage::AddModule(
|
||||||
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
|
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
|
||||||
'itop-problem-mgmt/3.0.1',
|
'itop-problem-mgmt/3.0.2',
|
||||||
array(
|
array(
|
||||||
// Identification
|
// Identification
|
||||||
//
|
//
|
||||||
|
|||||||
@@ -19,7 +19,7 @@
|
|||||||
|
|
||||||
SetupWebPage::AddModule(
|
SetupWebPage::AddModule(
|
||||||
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
|
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
|
||||||
'itop-profiles-itil/3.0.1',
|
'itop-profiles-itil/3.0.2',
|
||||||
array(
|
array(
|
||||||
// Identification
|
// Identification
|
||||||
//
|
//
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
SetupWebPage::AddModule(
|
SetupWebPage::AddModule(
|
||||||
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
|
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
|
||||||
'itop-request-mgmt-itil/3.0.1',
|
'itop-request-mgmt-itil/3.0.2',
|
||||||
array(
|
array(
|
||||||
// Identification
|
// Identification
|
||||||
//
|
//
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
SetupWebPage::AddModule(
|
SetupWebPage::AddModule(
|
||||||
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
|
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
|
||||||
'itop-request-mgmt/3.0.1',
|
'itop-request-mgmt/3.0.2',
|
||||||
array(
|
array(
|
||||||
// Identification
|
// Identification
|
||||||
//
|
//
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
SetupWebPage::AddModule(
|
SetupWebPage::AddModule(
|
||||||
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
|
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
|
||||||
'itop-service-mgmt-provider/3.0.1',
|
'itop-service-mgmt-provider/3.0.2',
|
||||||
array(
|
array(
|
||||||
// Identification
|
// Identification
|
||||||
//
|
//
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
SetupWebPage::AddModule(
|
SetupWebPage::AddModule(
|
||||||
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
|
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
|
||||||
'itop-service-mgmt/3.0.1',
|
'itop-service-mgmt/3.0.2',
|
||||||
array(
|
array(
|
||||||
// Identification
|
// Identification
|
||||||
//
|
//
|
||||||
|
|||||||
@@ -18,7 +18,7 @@
|
|||||||
|
|
||||||
SetupWebPage::AddModule(
|
SetupWebPage::AddModule(
|
||||||
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
|
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
|
||||||
'itop-sla-computation/3.0.1',
|
'itop-sla-computation/3.0.2',
|
||||||
array(
|
array(
|
||||||
// Identification
|
// Identification
|
||||||
//
|
//
|
||||||
|
|||||||
@@ -25,7 +25,7 @@
|
|||||||
|
|
||||||
SetupWebPage::AddModule(
|
SetupWebPage::AddModule(
|
||||||
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
|
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
|
||||||
'itop-storage-mgmt/3.0.1',
|
'itop-storage-mgmt/3.0.2',
|
||||||
array(
|
array(
|
||||||
// Identification
|
// Identification
|
||||||
//
|
//
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
SetupWebPage::AddModule(
|
SetupWebPage::AddModule(
|
||||||
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
|
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
|
||||||
'itop-structure/3.0.1',
|
'itop-structure/3.0.2',
|
||||||
array(
|
array(
|
||||||
// Identification
|
// Identification
|
||||||
//
|
//
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
SetupWebPage::AddModule(
|
SetupWebPage::AddModule(
|
||||||
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
|
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
|
||||||
'itop-themes-compat/3.0.1',
|
'itop-themes-compat/3.0.2',
|
||||||
array(
|
array(
|
||||||
// Identification
|
// Identification
|
||||||
//
|
//
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
SetupWebPage::AddModule(
|
SetupWebPage::AddModule(
|
||||||
__FILE__,
|
__FILE__,
|
||||||
'itop-tickets/3.0.1',
|
'itop-tickets/3.0.2',
|
||||||
array(
|
array(
|
||||||
// Identification
|
// Identification
|
||||||
//
|
//
|
||||||
|
|||||||
@@ -16,7 +16,7 @@
|
|||||||
|
|
||||||
SetupWebPage::AddModule(
|
SetupWebPage::AddModule(
|
||||||
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
|
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
|
||||||
'itop-virtualization-mgmt/3.0.1',
|
'itop-virtualization-mgmt/3.0.2',
|
||||||
array(
|
array(
|
||||||
// Identification
|
// Identification
|
||||||
//
|
//
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
SetupWebPage::AddModule(
|
SetupWebPage::AddModule(
|
||||||
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
|
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
|
||||||
'itop-welcome-itil/3.0.1',
|
'itop-welcome-itil/3.0.2',
|
||||||
array(
|
array(
|
||||||
// Identification
|
// Identification
|
||||||
//
|
//
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<information>
|
<information>
|
||||||
<version>3.0.1</version>
|
<version>3.0.2</version>
|
||||||
</information>
|
</information>
|
||||||
|
|||||||
@@ -24,8 +24,21 @@ use Composer\Semver\VersionParser;
|
|||||||
*/
|
*/
|
||||||
class InstalledVersions
|
class InstalledVersions
|
||||||
{
|
{
|
||||||
|
/**
|
||||||
|
* @var mixed[]|null
|
||||||
|
* @psalm-var array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}|array{}|null
|
||||||
|
*/
|
||||||
private static $installed;
|
private static $installed;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var bool|null
|
||||||
|
*/
|
||||||
private static $canGetVendors;
|
private static $canGetVendors;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var array[]
|
||||||
|
* @psalm-var array<string, array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}>
|
||||||
|
*/
|
||||||
private static $installedByVendor = array();
|
private static $installedByVendor = array();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -4848,32 +4848,32 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "twig/twig",
|
"name": "twig/twig",
|
||||||
"version": "v1.42.5",
|
"version": "v1.43.1",
|
||||||
"version_normalized": "1.42.5.0",
|
"version_normalized": "1.43.1.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/twigphp/Twig.git",
|
"url": "https://github.com/twigphp/Twig.git",
|
||||||
"reference": "87b2ea9d8f6fd014d0621ca089bb1b3769ea3f8e"
|
"reference": "2311602f6a208715252febe682fa7c38e56a3373"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/twigphp/Twig/zipball/87b2ea9d8f6fd014d0621ca089bb1b3769ea3f8e",
|
"url": "https://api.github.com/repos/twigphp/Twig/zipball/2311602f6a208715252febe682fa7c38e56a3373",
|
||||||
"reference": "87b2ea9d8f6fd014d0621ca089bb1b3769ea3f8e",
|
"reference": "2311602f6a208715252febe682fa7c38e56a3373",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"php": ">=5.5.0",
|
"php": ">=7.1.3",
|
||||||
"symfony/polyfill-ctype": "^1.8"
|
"symfony/polyfill-ctype": "^1.8"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"psr/container": "^1.0",
|
"psr/container": "^1.0",
|
||||||
"symfony/phpunit-bridge": "^4.4|^5.0"
|
"symfony/phpunit-bridge": "^4.4.9|^5.0.9"
|
||||||
},
|
},
|
||||||
"time": "2020-02-11T05:59:23+00:00",
|
"time": "2020-08-05T15:05:05+00:00",
|
||||||
"type": "library",
|
"type": "library",
|
||||||
"extra": {
|
"extra": {
|
||||||
"branch-alias": {
|
"branch-alias": {
|
||||||
"dev-master": "1.42-dev"
|
"dev-master": "1.43-dev"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"installation-source": "dist",
|
"installation-source": "dist",
|
||||||
@@ -4913,8 +4913,18 @@
|
|||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/twigphp/Twig/issues",
|
"issues": "https://github.com/twigphp/Twig/issues",
|
||||||
"source": "https://github.com/twigphp/Twig/tree/1.x"
|
"source": "https://github.com/twigphp/Twig/tree/v1.43.1"
|
||||||
},
|
},
|
||||||
|
"funding": [
|
||||||
|
{
|
||||||
|
"url": "https://github.com/fabpot",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "https://tidelift.com/funding/github/packagist/twig/twig",
|
||||||
|
"type": "tidelift"
|
||||||
|
}
|
||||||
|
],
|
||||||
"install-path": "../twig/twig"
|
"install-path": "../twig/twig"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|||||||
@@ -1,22 +1,22 @@
|
|||||||
<?php return array(
|
<?php return array(
|
||||||
'root' => array(
|
'root' => array(
|
||||||
'pretty_version' => 'dev-develop',
|
'pretty_version' => '3.0.2-rc1',
|
||||||
'version' => 'dev-develop',
|
'version' => '3.0.2.0-RC1',
|
||||||
'type' => 'project',
|
'type' => 'project',
|
||||||
'install_path' => __DIR__ . '/../../',
|
'install_path' => __DIR__ . '/../../',
|
||||||
'aliases' => array(),
|
'aliases' => array(),
|
||||||
'reference' => 'e4343ded01403f5b8b0499190ab60b004175bb19',
|
'reference' => 'c5d5379c492059a80eb72cc1dab148dd6e82705f',
|
||||||
'name' => 'combodo/itop',
|
'name' => 'combodo/itop',
|
||||||
'dev' => true,
|
'dev' => true,
|
||||||
),
|
),
|
||||||
'versions' => array(
|
'versions' => array(
|
||||||
'combodo/itop' => array(
|
'combodo/itop' => array(
|
||||||
'pretty_version' => 'dev-develop',
|
'pretty_version' => '3.0.2-rc1',
|
||||||
'version' => 'dev-develop',
|
'version' => '3.0.2.0-RC1',
|
||||||
'type' => 'project',
|
'type' => 'project',
|
||||||
'install_path' => __DIR__ . '/../../',
|
'install_path' => __DIR__ . '/../../',
|
||||||
'aliases' => array(),
|
'aliases' => array(),
|
||||||
'reference' => 'e4343ded01403f5b8b0499190ab60b004175bb19',
|
'reference' => 'c5d5379c492059a80eb72cc1dab148dd6e82705f',
|
||||||
'dev_requirement' => false,
|
'dev_requirement' => false,
|
||||||
),
|
),
|
||||||
'combodo/tcpdf' => array(
|
'combodo/tcpdf' => array(
|
||||||
@@ -654,12 +654,12 @@
|
|||||||
'dev_requirement' => false,
|
'dev_requirement' => false,
|
||||||
),
|
),
|
||||||
'twig/twig' => array(
|
'twig/twig' => array(
|
||||||
'pretty_version' => 'v1.42.5',
|
'pretty_version' => 'v1.43.1',
|
||||||
'version' => '1.42.5.0',
|
'version' => '1.43.1.0',
|
||||||
'type' => 'library',
|
'type' => 'library',
|
||||||
'install_path' => __DIR__ . '/../twig/twig',
|
'install_path' => __DIR__ . '/../twig/twig',
|
||||||
'aliases' => array(),
|
'aliases' => array(),
|
||||||
'reference' => '87b2ea9d8f6fd014d0621ca089bb1b3769ea3f8e',
|
'reference' => '2311602f6a208715252febe682fa7c38e56a3373',
|
||||||
'dev_requirement' => false,
|
'dev_requirement' => false,
|
||||||
),
|
),
|
||||||
'zendframework/zend-loader' => array(
|
'zendframework/zend-loader' => array(
|
||||||
|
|||||||
@@ -1,46 +1,36 @@
|
|||||||
language: php
|
language: php
|
||||||
|
|
||||||
dist: trusty
|
dist: xenial
|
||||||
|
|
||||||
sudo: false
|
|
||||||
|
|
||||||
cache:
|
cache:
|
||||||
directories:
|
directories:
|
||||||
- vendor
|
- vendor
|
||||||
- $HOME/.composer/cache/files
|
- $HOME/.composer/cache/files
|
||||||
|
|
||||||
|
|
||||||
env:
|
env:
|
||||||
global:
|
global:
|
||||||
- TWIG_EXT=no
|
- SYMFONY_PHPUNIT_DISABLE_RESULT_CACHE=1
|
||||||
- SYMFONY_PHPUNIT_REMOVE_RETURN_TYPEHINT=1
|
|
||||||
|
|
||||||
before_install:
|
before_install:
|
||||||
- phpenv config-rm xdebug.ini || return 0
|
- phpenv config-rm xdebug.ini || return 0
|
||||||
|
- echo memory_limit = -1 >> ~/.phpenv/versions/$TRAVIS_PHP_VERSION/etc/conf.d/travis.ini
|
||||||
|
|
||||||
install:
|
install:
|
||||||
- travis_retry composer install
|
- travis_retry composer install
|
||||||
|
- export PHPUNIT=$(readlink -f ./vendor/bin/simple-phpunit)
|
||||||
|
- $PHPUNIT install
|
||||||
|
|
||||||
before_script:
|
script:
|
||||||
- if [ "$TWIG_EXT" == "yes" ]; then sh -c "cd ext/twig && phpize && ./configure --enable-twig && make && make install"; fi
|
- $PHPUNIT
|
||||||
- if [ "$TWIG_EXT" == "yes" ]; then echo "extension=twig.so" >> `php --ini | grep "Loaded Configuration" | sed -e "s|.*:\s*||"`; fi
|
|
||||||
|
|
||||||
script: ./vendor/bin/simple-phpunit
|
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
fast_finish: true
|
fast_finish: true
|
||||||
include:
|
include:
|
||||||
- php: 5.5
|
|
||||||
- php: 5.5
|
|
||||||
env: TWIG_EXT=yes
|
|
||||||
- php: 5.6
|
|
||||||
- php: 5.6
|
|
||||||
env: TWIG_EXT=yes
|
|
||||||
- php: 7.0
|
|
||||||
- php: 7.1
|
- php: 7.1
|
||||||
- php: 7.2
|
- php: 7.2
|
||||||
- php: 7.3
|
- php: 7.3
|
||||||
- php: 7.4snapshot
|
- php: 7.4
|
||||||
|
- php: nightly
|
||||||
- stage: integration tests
|
- stage: integration tests
|
||||||
php: 7.3
|
php: 7.3
|
||||||
script: ./drupal_test.sh
|
script: ./drupal_test.sh
|
||||||
|
|||||||
@@ -1,13 +1,29 @@
|
|||||||
* 1.42.5 (2020-02-11)
|
# 1.43.1 (2020-08-05)
|
||||||
|
|
||||||
|
* Fix sandbox not disabled if syntax error occurs within {% sandbox %} tag
|
||||||
|
* Fix a regression when not using a space before an operator
|
||||||
|
* Restrict callables to closures in filters
|
||||||
|
* Allow trailing commas in argument lists (in calls as well as definitions)
|
||||||
|
|
||||||
|
# 1.43.0 (2020-07-05)
|
||||||
|
|
||||||
|
* Throw exception in case non-Traversable data is passed to "filter"
|
||||||
|
* Fix context optimization on PHP 7.4
|
||||||
|
* Fix PHP 8 compatibility
|
||||||
|
* Drop PHP 5.5 5.6, and 7.0 support
|
||||||
|
* Fix ambiguous syntax parsing
|
||||||
|
* In sandbox, the `filter`, `map` and `reduce` filters require Closures in `arrow` parameter
|
||||||
|
|
||||||
|
# 1.42.5 (2020-02-11)
|
||||||
|
|
||||||
* Fix implementation of case-insensitivity for method names
|
* Fix implementation of case-insensitivity for method names
|
||||||
|
|
||||||
* 1.42.4 (2019-11-11)
|
# 1.42.4 (2019-11-11)
|
||||||
|
|
||||||
* optimized "block('foo') ?? 'bar"
|
* optimized "block('foo') ?? 'bar"
|
||||||
* added supported for exponential numbers
|
* added supported for exponential numbers
|
||||||
|
|
||||||
* 1.42.3 (2019-08-24)
|
# 1.42.3 (2019-08-24)
|
||||||
|
|
||||||
* fixed the "split" filter when the delimiter is "0"
|
* fixed the "split" filter when the delimiter is "0"
|
||||||
* fixed the "empty" test on Traversable instances
|
* fixed the "empty" test on Traversable instances
|
||||||
@@ -15,34 +31,34 @@
|
|||||||
* fixed PHP 7.4 compatibility
|
* fixed PHP 7.4 compatibility
|
||||||
* bumped the minimal PHP version to 5.5
|
* bumped the minimal PHP version to 5.5
|
||||||
|
|
||||||
* 1.42.2 (2019-06-18)
|
# 1.42.2 (2019-06-18)
|
||||||
|
|
||||||
* Display partial output (PHP buffer) when an error occurs in debug mode
|
* Display partial output (PHP buffer) when an error occurs in debug mode
|
||||||
|
|
||||||
* 1.42.1 (2019-06-04)
|
# 1.42.1 (2019-06-04)
|
||||||
|
|
||||||
* added support for "Twig\Markup" instances in the "in" test (again)
|
* added support for "Twig\Markup" instances in the "in" test (again)
|
||||||
* allowed string operators as variables names in assignments
|
* allowed string operators as variables names in assignments
|
||||||
|
|
||||||
* 1.42.0 (2019-05-31)
|
# 1.42.0 (2019-05-31)
|
||||||
|
|
||||||
* fixed the "filter" filter when the argument is \Traversable but does not implement \Iterator (\SimpleXmlElement for instance)
|
* fixed the "filter" filter when the argument is \Traversable but does not implement \Iterator (\SimpleXmlElement for instance)
|
||||||
* fixed a PHP fatal error when calling a macro imported in a block in a nested block
|
* fixed a PHP fatal error when calling a macro imported in a block in a nested block
|
||||||
* fixed a PHP fatal error when calling a macro imported in the template in another macro
|
* fixed a PHP fatal error when calling a macro imported in the template in another macro
|
||||||
* fixed wrong error message on "import" and "from"
|
* fixed wrong error message on "import" and "from"
|
||||||
|
|
||||||
* 1.41.0 (2019-05-14)
|
# 1.41.0 (2019-05-14)
|
||||||
|
|
||||||
* fixed support for PHP 7.4
|
* fixed support for PHP 7.4
|
||||||
* added "filter", "map", and "reduce" filters (and support for arrow functions)
|
* added "filter", "map", and "reduce" filters (and support for arrow functions)
|
||||||
* fixed partial output leak when a PHP fatal error occurs
|
* fixed partial output leak when a PHP fatal error occurs
|
||||||
* optimized context access on PHP 7.4
|
* optimized context access on PHP 7.4
|
||||||
|
|
||||||
* 1.40.1 (2019-04-29)
|
# 1.40.1 (2019-04-29)
|
||||||
|
|
||||||
* fixed regression in NodeTraverser
|
# fixed regression in NodeTraverser
|
||||||
|
|
||||||
* 1.40.0 (2019-04-28)
|
# 1.40.0 (2019-04-28)
|
||||||
|
|
||||||
* allowed Twig\NodeVisitor\NodeVisitorInterface::leaveNode() to return "null" instead of "false" (same meaning)
|
* allowed Twig\NodeVisitor\NodeVisitorInterface::leaveNode() to return "null" instead of "false" (same meaning)
|
||||||
* added the "apply" tag as a replacement for the "filter" tag
|
* added the "apply" tag as a replacement for the "filter" tag
|
||||||
@@ -51,11 +67,11 @@
|
|||||||
* fixed Lexer when using custom options containing the # char
|
* fixed Lexer when using custom options containing the # char
|
||||||
* fixed "import" when macros are stored in a template string
|
* fixed "import" when macros are stored in a template string
|
||||||
|
|
||||||
* 1.39.1 (2019-04-16)
|
# 1.39.1 (2019-04-16)
|
||||||
|
|
||||||
* fixed EscaperNodeVisitor
|
* fixed EscaperNodeVisitor
|
||||||
|
|
||||||
* 1.39.0 (2019-04-16)
|
# 1.39.0 (2019-04-16)
|
||||||
|
|
||||||
* added Traversable support for the length filter
|
* added Traversable support for the length filter
|
||||||
* fixed some wrong location in error messages
|
* fixed some wrong location in error messages
|
||||||
@@ -66,11 +82,11 @@
|
|||||||
* fixed "include" with "ignore missing" when an error loading occurs in the included template
|
* fixed "include" with "ignore missing" when an error loading occurs in the included template
|
||||||
* added support for a new whitespace trimming option ({%~ ~%}, {{~ ~}}, {#~ ~#})
|
* added support for a new whitespace trimming option ({%~ ~%}, {{~ ~}}, {#~ ~#})
|
||||||
|
|
||||||
* 1.38.4 (2019-03-23)
|
# 1.38.4 (2019-03-23)
|
||||||
|
|
||||||
* fixed CheckToStringNode implementation (broken when a function/filter is variadic)
|
* fixed CheckToStringNode implementation (broken when a function/filter is variadic)
|
||||||
|
|
||||||
* 1.38.3 (2019-03-21)
|
# 1.38.3 (2019-03-21)
|
||||||
|
|
||||||
* fixed the spaceless filter so that it behaves like the spaceless tag
|
* fixed the spaceless filter so that it behaves like the spaceless tag
|
||||||
* fixed BC break on Environment::resolveTemplate()
|
* fixed BC break on Environment::resolveTemplate()
|
||||||
@@ -78,15 +94,15 @@
|
|||||||
* allowed Traversable objects to be used in the "with" tag
|
* allowed Traversable objects to be used in the "with" tag
|
||||||
* allowed Traversable objects to be used in the "with" argument of the "include" and "embed" tags
|
* allowed Traversable objects to be used in the "with" argument of the "include" and "embed" tags
|
||||||
|
|
||||||
* 1.38.2 (2019-03-12)
|
# 1.38.2 (2019-03-12)
|
||||||
|
|
||||||
* added TemplateWrapper::getTemplateName()
|
* added TemplateWrapper::getTemplateName()
|
||||||
|
|
||||||
* 1.38.1 (2019-03-12)
|
# 1.38.1 (2019-03-12)
|
||||||
|
|
||||||
* fixed class aliases
|
* fixed class aliases
|
||||||
|
|
||||||
* 1.38.0 (2019-03-12)
|
# 1.38.0 (2019-03-12)
|
||||||
|
|
||||||
* fixed sandbox security issue (under some circumstances, calling the
|
* fixed sandbox security issue (under some circumstances, calling the
|
||||||
__toString() method on an object was possible even if not allowed by the
|
__toString() method on an object was possible even if not allowed by the
|
||||||
@@ -103,12 +119,12 @@
|
|||||||
* added Twig\Loader\ChainLoader::getLoaders()
|
* added Twig\Loader\ChainLoader::getLoaders()
|
||||||
* changed internal code to use the namespaced classes as much as possible
|
* changed internal code to use the namespaced classes as much as possible
|
||||||
|
|
||||||
* 1.37.1 (2019-01-14)
|
# 1.37.1 (2019-01-14)
|
||||||
|
|
||||||
* fixed regression (key exists check for non ArrayObject objects)
|
* fixed regression (key exists check for non ArrayObject objects)
|
||||||
* fixed logic in TemplateWrapper
|
* fixed logic in TemplateWrapper
|
||||||
|
|
||||||
* 1.37.0 (2019-01-14)
|
# 1.37.0 (2019-01-14)
|
||||||
|
|
||||||
* fixed ArrayObject access with a null value
|
* fixed ArrayObject access with a null value
|
||||||
* fixed embedded templates starting with a BOM
|
* fixed embedded templates starting with a BOM
|
||||||
@@ -118,7 +134,7 @@
|
|||||||
* fixed float representation in compiled templates
|
* fixed float representation in compiled templates
|
||||||
* added a second argument to the join filter (last separator configuration)
|
* added a second argument to the join filter (last separator configuration)
|
||||||
|
|
||||||
* 1.36.0 (2018-12-16)
|
# 1.36.0 (2018-12-16)
|
||||||
|
|
||||||
* made sure twig_include returns a string
|
* made sure twig_include returns a string
|
||||||
* fixed multi-byte UFT-8 in escape('html_attr')
|
* fixed multi-byte UFT-8 in escape('html_attr')
|
||||||
@@ -127,24 +143,24 @@
|
|||||||
* fixed GlobalsInterface extended class
|
* fixed GlobalsInterface extended class
|
||||||
* fixed filesystem loader throwing an exception instead of returning false
|
* fixed filesystem loader throwing an exception instead of returning false
|
||||||
|
|
||||||
* 1.35.4 (2018-07-13)
|
# 1.35.4 (2018-07-13)
|
||||||
|
|
||||||
* ensured that syntax errors are triggered with the right line
|
* ensured that syntax errors are triggered with the right line
|
||||||
* added the Symfony ctype polyfill as a dependency
|
* added the Symfony ctype polyfill as a dependency
|
||||||
* "js" filter now produces valid JSON
|
* "js" filter now produces valid JSON
|
||||||
|
|
||||||
* 1.35.3 (2018-03-20)
|
# 1.35.3 (2018-03-20)
|
||||||
|
|
||||||
* fixed block names unicity
|
* fixed block names unicity
|
||||||
* fixed counting children of SimpleXMLElement objects
|
* fixed counting children of SimpleXMLElement objects
|
||||||
* added missing else clause to avoid infinite loops
|
* added missing else clause to avoid infinite loops
|
||||||
* fixed .. (range operator) in sandbox policy
|
* fixed .. (range operator) in sandbox policy
|
||||||
|
|
||||||
* 1.35.2 (2018-03-03)
|
# 1.35.2 (2018-03-03)
|
||||||
|
|
||||||
* fixed a regression in the way the profiler is registered in templates
|
* fixed a regression in the way the profiler is registered in templates
|
||||||
|
|
||||||
* 1.35.1 (2018-03-02)
|
# 1.35.1 (2018-03-02)
|
||||||
|
|
||||||
* added an exception when using "===" instead of "same as"
|
* added an exception when using "===" instead of "same as"
|
||||||
* fixed possible array to string conversion concealing actual error
|
* fixed possible array to string conversion concealing actual error
|
||||||
@@ -152,31 +168,31 @@
|
|||||||
* fixed length filter when passing an instance of IteratorAggregate
|
* fixed length filter when passing an instance of IteratorAggregate
|
||||||
* fixed Environment::resolveTemplate to accept instances of TemplateWrapper
|
* fixed Environment::resolveTemplate to accept instances of TemplateWrapper
|
||||||
|
|
||||||
* 1.35.0 (2017-09-27)
|
# 1.35.0 (2017-09-27)
|
||||||
|
|
||||||
* added Twig_Profiler_Profile::reset()
|
* added Twig_Profiler_Profile::reset()
|
||||||
* fixed use TokenParser to return an empty Node
|
* fixed use TokenParser to return an empty Node
|
||||||
* added RuntimeExtensionInterface
|
* added RuntimeExtensionInterface
|
||||||
* added circular reference detection when loading templates
|
* added circular reference detection when loading templates
|
||||||
|
|
||||||
* 1.34.4 (2017-07-04)
|
# 1.34.4 (2017-07-04)
|
||||||
|
|
||||||
* added support for runtime loaders in IntegrationTestCase
|
* added support for runtime loaders in IntegrationTestCase
|
||||||
* fixed deprecation when using Twig_Profiler_Dumper_Html
|
* fixed deprecation when using Twig_Profiler_Dumper_Html
|
||||||
|
|
||||||
* 1.34.3 (2017-06-07)
|
# 1.34.3 (2017-06-07)
|
||||||
|
|
||||||
* fixed namespaces introduction
|
* fixed namespaces introduction
|
||||||
|
|
||||||
* 1.34.2 (2017-06-05)
|
# 1.34.2 (2017-06-05)
|
||||||
|
|
||||||
* fixed namespaces introduction
|
* fixed namespaces introduction
|
||||||
|
|
||||||
* 1.34.1 (2017-06-05)
|
# 1.34.1 (2017-06-05)
|
||||||
|
|
||||||
* fixed namespaces introduction
|
* fixed namespaces introduction
|
||||||
|
|
||||||
* 1.34.0 (2017-06-05)
|
# 1.34.0 (2017-06-05)
|
||||||
|
|
||||||
* added support for PHPUnit 6 when testing extensions
|
* added support for PHPUnit 6 when testing extensions
|
||||||
* fixed PHP 7.2 compatibility
|
* fixed PHP 7.2 compatibility
|
||||||
@@ -186,15 +202,15 @@
|
|||||||
* dropped HHVM support
|
* dropped HHVM support
|
||||||
* dropped PHP 5.2 support
|
* dropped PHP 5.2 support
|
||||||
|
|
||||||
* 1.33.2 (2017-04-20)
|
# 1.33.2 (2017-04-20)
|
||||||
|
|
||||||
* fixed edge case in the method cache for Twig attributes
|
* fixed edge case in the method cache for Twig attributes
|
||||||
|
|
||||||
* 1.33.1 (2017-04-18)
|
# 1.33.1 (2017-04-18)
|
||||||
|
|
||||||
* fixed the empty() test
|
* fixed the empty() test
|
||||||
|
|
||||||
* 1.33.0 (2017-03-22)
|
# 1.33.0 (2017-03-22)
|
||||||
|
|
||||||
* fixed a race condition handling when writing cache files
|
* fixed a race condition handling when writing cache files
|
||||||
* "length" filter now returns string length when applied to an object that does
|
* "length" filter now returns string length when applied to an object that does
|
||||||
@@ -203,13 +219,13 @@
|
|||||||
objects implement __toString() but not \Countable
|
objects implement __toString() but not \Countable
|
||||||
* fixed JS escaping for unicode characters with higher code points
|
* fixed JS escaping for unicode characters with higher code points
|
||||||
|
|
||||||
* 1.32.0 (2017-02-26)
|
# 1.32.0 (2017-02-26)
|
||||||
|
|
||||||
* fixed deprecation notice in Twig_Util_DeprecationCollector
|
* fixed deprecation notice in Twig_Util_DeprecationCollector
|
||||||
* added a PSR-11 compatible runtime loader
|
* added a PSR-11 compatible runtime loader
|
||||||
* added `side` argument to `trim` to allow left or right trimming only.
|
* added `side` argument to `trim` to allow left or right trimming only.
|
||||||
|
|
||||||
* 1.31.0 (2017-01-11)
|
# 1.31.0 (2017-01-11)
|
||||||
|
|
||||||
* added Twig_NodeCaptureInterface for nodes that capture all output
|
* added Twig_NodeCaptureInterface for nodes that capture all output
|
||||||
* fixed marking the environment as initialized too early
|
* fixed marking the environment as initialized too early
|
||||||
@@ -217,13 +233,13 @@
|
|||||||
* turned fatal error into exception when a previously generated cache is corrupted
|
* turned fatal error into exception when a previously generated cache is corrupted
|
||||||
* fixed offline cache warm-ups for embedded templates
|
* fixed offline cache warm-ups for embedded templates
|
||||||
|
|
||||||
* 1.30.0 (2016-12-23)
|
# 1.30.0 (2016-12-23)
|
||||||
|
|
||||||
* added Twig_FactoryRuntimeLoader
|
* added Twig_FactoryRuntimeLoader
|
||||||
* deprecated function/test/filter/tag overriding
|
* deprecated function/test/filter/tag overriding
|
||||||
* deprecated the "disable_c_ext" attribute on Twig_Node_Expression_GetAttr
|
* deprecated the "disable_c_ext" attribute on Twig_Node_Expression_GetAttr
|
||||||
|
|
||||||
* 1.29.0 (2016-12-13)
|
# 1.29.0 (2016-12-13)
|
||||||
|
|
||||||
* fixed sandbox being left enabled if an exception is thrown while rendering
|
* fixed sandbox being left enabled if an exception is thrown while rendering
|
||||||
* marked some classes as being final (via @final)
|
* marked some classes as being final (via @final)
|
||||||
@@ -232,16 +248,16 @@
|
|||||||
* deprecated silent display of undefined blocks
|
* deprecated silent display of undefined blocks
|
||||||
* deprecated support for mbstring.func_overload != 0
|
* deprecated support for mbstring.func_overload != 0
|
||||||
|
|
||||||
* 1.28.2 (2016-11-23)
|
# 1.28.2 (2016-11-23)
|
||||||
|
|
||||||
* fixed precedence between getFoo() and isFoo() in Twig_Template::getAttribute()
|
* fixed precedence between getFoo() and isFoo() in Twig_Template::getAttribute()
|
||||||
* improved a deprecation message
|
* improved a deprecation message
|
||||||
|
|
||||||
* 1.28.1 (2016-11-18)
|
# 1.28.1 (2016-11-18)
|
||||||
|
|
||||||
* fixed block() function when used with a template argument
|
* fixed block() function when used with a template argument
|
||||||
|
|
||||||
* 1.28.0 (2016-11-17)
|
# 1.28.0 (2016-11-17)
|
||||||
|
|
||||||
* added support for the PHP 7 null coalescing operator for the ?? Twig implementation
|
* added support for the PHP 7 null coalescing operator for the ?? Twig implementation
|
||||||
* exposed a way to access template data and methods in a portable way
|
* exposed a way to access template data and methods in a portable way
|
||||||
@@ -251,7 +267,7 @@
|
|||||||
* added "is defined" support for block() and constant()
|
* added "is defined" support for block() and constant()
|
||||||
* optimized the way attributes are fetched
|
* optimized the way attributes are fetched
|
||||||
|
|
||||||
* 1.27.0 (2016-10-25)
|
# 1.27.0 (2016-10-25)
|
||||||
|
|
||||||
* deprecated Twig_Parser::getEnvironment()
|
* deprecated Twig_Parser::getEnvironment()
|
||||||
* deprecated Twig_Parser::addHandler() and Twig_Parser::addNodeVisitor()
|
* deprecated Twig_Parser::addHandler() and Twig_Parser::addNodeVisitor()
|
||||||
@@ -269,13 +285,13 @@
|
|||||||
* fixed template paths when a template name contains a protocol like vfs://
|
* fixed template paths when a template name contains a protocol like vfs://
|
||||||
* improved debugging with Twig_Sandbox_SecurityError exceptions for disallowed methods and properties
|
* improved debugging with Twig_Sandbox_SecurityError exceptions for disallowed methods and properties
|
||||||
|
|
||||||
* 1.26.1 (2016-10-05)
|
# 1.26.1 (2016-10-05)
|
||||||
|
|
||||||
* removed template source code from generated template classes when debug is disabled
|
* removed template source code from generated template classes when debug is disabled
|
||||||
* fixed default implementation of Twig_Template::getDebugInfo() for better BC
|
* fixed default implementation of Twig_Template::getDebugInfo() for better BC
|
||||||
* fixed regression on static calls for functions/filters/tests
|
* fixed regression on static calls for functions/filters/tests
|
||||||
|
|
||||||
* 1.26.0 (2016-10-02)
|
# 1.26.0 (2016-10-02)
|
||||||
|
|
||||||
* added template cache invalidation based on more environment options
|
* added template cache invalidation based on more environment options
|
||||||
* added a missing deprecation notice
|
* added a missing deprecation notice
|
||||||
@@ -283,7 +299,7 @@
|
|||||||
* allowed filters/functions/tests implementation to use a different class than the extension they belong to
|
* allowed filters/functions/tests implementation to use a different class than the extension they belong to
|
||||||
* deprecated Twig_ExtensionInterface::getName()
|
* deprecated Twig_ExtensionInterface::getName()
|
||||||
|
|
||||||
* 1.25.0 (2016-09-21)
|
# 1.25.0 (2016-09-21)
|
||||||
|
|
||||||
* changed the way we store template source in template classes
|
* changed the way we store template source in template classes
|
||||||
* removed usage of realpath in cache keys
|
* removed usage of realpath in cache keys
|
||||||
@@ -293,13 +309,13 @@
|
|||||||
* deprecated Twig_Environment::getLexer(), Twig_Environment::getParser(), Twig_Environment::getCompiler()
|
* deprecated Twig_Environment::getLexer(), Twig_Environment::getParser(), Twig_Environment::getCompiler()
|
||||||
* deprecated Twig_Compiler::getFilename()
|
* deprecated Twig_Compiler::getFilename()
|
||||||
|
|
||||||
* 1.24.2 (2016-09-01)
|
# 1.24.2 (2016-09-01)
|
||||||
|
|
||||||
* fixed static callables
|
* fixed static callables
|
||||||
* fixed a potential PHP warning when loading the cache
|
* fixed a potential PHP warning when loading the cache
|
||||||
* fixed a case where the autoescaping does not work as expected
|
* fixed a case where the autoescaping does not work as expected
|
||||||
|
|
||||||
* 1.24.1 (2016-05-30)
|
# 1.24.1 (2016-05-30)
|
||||||
|
|
||||||
* fixed reserved keywords (forbids true, false, null and none keywords for variables names)
|
* fixed reserved keywords (forbids true, false, null and none keywords for variables names)
|
||||||
* fixed support for PHP7 (Throwable support)
|
* fixed support for PHP7 (Throwable support)
|
||||||
@@ -308,36 +324,36 @@
|
|||||||
getTokenParsers(), getTags(), getNodeVisitors(), getUnaryOperators(), getBinaryOperators(),
|
getTokenParsers(), getTags(), getNodeVisitors(), getUnaryOperators(), getBinaryOperators(),
|
||||||
getFunctions(), getFilters(), getGlobals(), initGlobals(), initExtensions(), and initExtension()
|
getFunctions(), getFilters(), getGlobals(), initGlobals(), initExtensions(), and initExtension()
|
||||||
|
|
||||||
* 1.24.0 (2016-01-25)
|
# 1.24.0 (2016-01-25)
|
||||||
|
|
||||||
* adding support for the ?? operator
|
* adding support for the ?? operator
|
||||||
* fixed the defined test when used on a constant, a map, or a sequence
|
* fixed the defined test when used on a constant, a map, or a sequence
|
||||||
* undeprecated _self (should only be used to get the template name, not the template instance)
|
* undeprecated _self (should only be used to get the template name, not the template instance)
|
||||||
* fixed parsing on PHP7
|
* fixed parsing on PHP7
|
||||||
|
|
||||||
* 1.23.3 (2016-01-11)
|
# 1.23.3 (2016-01-11)
|
||||||
|
|
||||||
* fixed typo
|
* fixed typo
|
||||||
|
|
||||||
* 1.23.2 (2015-01-11)
|
# 1.23.2 (2015-01-11)
|
||||||
|
|
||||||
* added versions in deprecated messages
|
* added versions in deprecated messages
|
||||||
* made file cache tolerant for trailing (back)slashes on directory configuration
|
* made file cache tolerant for trailing (back)slashes on directory configuration
|
||||||
* deprecated unused Twig_Node_Expression_ExtensionReference class
|
* deprecated unused Twig_Node_Expression_ExtensionReference class
|
||||||
|
|
||||||
* 1.23.1 (2015-11-05)
|
# 1.23.1 (2015-11-05)
|
||||||
|
|
||||||
* fixed some exception messages which triggered PHP warnings
|
* fixed some exception messages which triggered PHP warnings
|
||||||
* fixed BC on Twig_Test_NodeTestCase
|
* fixed BC on Twig_Test_NodeTestCase
|
||||||
|
|
||||||
* 1.23.0 (2015-10-29)
|
# 1.23.0 (2015-10-29)
|
||||||
|
|
||||||
* deprecated the possibility to override an extension by registering another one with the same name
|
* deprecated the possibility to override an extension by registering another one with the same name
|
||||||
* deprecated Twig_ExtensionInterface::getGlobals() (added Twig_Extension_GlobalsInterface for BC)
|
* deprecated Twig_ExtensionInterface::getGlobals() (added Twig_Extension_GlobalsInterface for BC)
|
||||||
* deprecated Twig_ExtensionInterface::initRuntime() (added Twig_Extension_InitRuntimeInterface for BC)
|
* deprecated Twig_ExtensionInterface::initRuntime() (added Twig_Extension_InitRuntimeInterface for BC)
|
||||||
* deprecated Twig_Environment::computeAlternatives()
|
* deprecated Twig_Environment::computeAlternatives()
|
||||||
|
|
||||||
* 1.22.3 (2015-10-13)
|
# 1.22.3 (2015-10-13)
|
||||||
|
|
||||||
* fixed regression when using null as a cache strategy
|
* fixed regression when using null as a cache strategy
|
||||||
* improved performance when checking template freshness
|
* improved performance when checking template freshness
|
||||||
@@ -346,15 +362,15 @@
|
|||||||
* fixed logic for custom escapers to call them even on integers and null values
|
* fixed logic for custom escapers to call them even on integers and null values
|
||||||
* changed template cache names to take into account the Twig C extension
|
* changed template cache names to take into account the Twig C extension
|
||||||
|
|
||||||
* 1.22.2 (2015-09-22)
|
# 1.22.2 (2015-09-22)
|
||||||
|
|
||||||
* fixed a race condition in template loading
|
* fixed a race condition in template loading
|
||||||
|
|
||||||
* 1.22.1 (2015-09-15)
|
# 1.22.1 (2015-09-15)
|
||||||
|
|
||||||
* fixed regression in template_from_string
|
* fixed regression in template_from_string
|
||||||
|
|
||||||
* 1.22.0 (2015-09-13)
|
# 1.22.0 (2015-09-13)
|
||||||
|
|
||||||
* made Twig_Test_IntegrationTestCase more flexible
|
* made Twig_Test_IntegrationTestCase more flexible
|
||||||
* added an option to force PHP bytecode invalidation when writing a compiled template into the cache
|
* added an option to force PHP bytecode invalidation when writing a compiled template into the cache
|
||||||
@@ -365,23 +381,23 @@
|
|||||||
* added a way to override the filesystem template cache system
|
* added a way to override the filesystem template cache system
|
||||||
* added a way to get the original template source from Twig_Template
|
* added a way to get the original template source from Twig_Template
|
||||||
|
|
||||||
* 1.21.2 (2015-09-09)
|
# 1.21.2 (2015-09-09)
|
||||||
|
|
||||||
* fixed variable names for the deprecation triggering code
|
* fixed variable names for the deprecation triggering code
|
||||||
* fixed escaping strategy detection based on filename
|
* fixed escaping strategy detection based on filename
|
||||||
* added Traversable support for replace, merge, and sort
|
* added Traversable support for replace, merge, and sort
|
||||||
* deprecated support for character by character replacement for the "replace" filter
|
* deprecated support for character by character replacement for the "replace" filter
|
||||||
|
|
||||||
* 1.21.1 (2015-08-26)
|
# 1.21.1 (2015-08-26)
|
||||||
|
|
||||||
* fixed regression when using the deprecated Twig_Test_* classes
|
* fixed regression when using the deprecated Twig_Test_* classes
|
||||||
|
|
||||||
* 1.21.0 (2015-08-24)
|
# 1.21.0 (2015-08-24)
|
||||||
|
|
||||||
* added deprecation notices for deprecated features
|
* added deprecation notices for deprecated features
|
||||||
* added a deprecation "framework" for filters/functions/tests and test fixtures
|
* added a deprecation "framework" for filters/functions/tests and test fixtures
|
||||||
|
|
||||||
* 1.20.0 (2015-08-12)
|
# 1.20.0 (2015-08-12)
|
||||||
|
|
||||||
* forbid access to the Twig environment from templates and internal parts of Twig_Template
|
* forbid access to the Twig environment from templates and internal parts of Twig_Template
|
||||||
* fixed limited RCEs when in sandbox mode
|
* fixed limited RCEs when in sandbox mode
|
||||||
@@ -390,7 +406,7 @@
|
|||||||
* added Twig_BaseNodeVisitor to ease the compatibility of node visitors
|
* added Twig_BaseNodeVisitor to ease the compatibility of node visitors
|
||||||
between 1.x and 2.x
|
between 1.x and 2.x
|
||||||
|
|
||||||
* 1.19.0 (2015-07-31)
|
# 1.19.0 (2015-07-31)
|
||||||
|
|
||||||
* fixed wrong error message when including an undefined template in a child template
|
* fixed wrong error message when including an undefined template in a child template
|
||||||
* added support for variadic filters, functions, and tests
|
* added support for variadic filters, functions, and tests
|
||||||
@@ -400,19 +416,19 @@
|
|||||||
* deprecated Twig_Environment::clearTemplateCache()
|
* deprecated Twig_Environment::clearTemplateCache()
|
||||||
* fixed sandbox disabling when using the include function
|
* fixed sandbox disabling when using the include function
|
||||||
|
|
||||||
* 1.18.2 (2015-06-06)
|
# 1.18.2 (2015-06-06)
|
||||||
|
|
||||||
* fixed template/line guessing in exceptions for nested templates
|
* fixed template/line guessing in exceptions for nested templates
|
||||||
* optimized the number of inodes and the size of realpath cache when using the cache
|
* optimized the number of inodes and the size of realpath cache when using the cache
|
||||||
|
|
||||||
* 1.18.1 (2015-04-19)
|
# 1.18.1 (2015-04-19)
|
||||||
|
|
||||||
* fixed memory leaks in the C extension
|
* fixed memory leaks in the C extension
|
||||||
* deprecated Twig_Loader_String
|
* deprecated Twig_Loader_String
|
||||||
* fixed the slice filter when used with a SimpleXMLElement object
|
* fixed the slice filter when used with a SimpleXMLElement object
|
||||||
* fixed filesystem loader when trying to load non-files (like directories)
|
* fixed filesystem loader when trying to load non-files (like directories)
|
||||||
|
|
||||||
* 1.18.0 (2015-01-25)
|
# 1.18.0 (2015-01-25)
|
||||||
|
|
||||||
* fixed some error messages where the line was wrong (unknown variables or argument names)
|
* fixed some error messages where the line was wrong (unknown variables or argument names)
|
||||||
* added a new way to customize the main Module node (via empty nodes)
|
* added a new way to customize the main Module node (via empty nodes)
|
||||||
@@ -420,18 +436,18 @@
|
|||||||
* added a profiler
|
* added a profiler
|
||||||
* fixed filesystem loader cache when different file paths are used for the same template
|
* fixed filesystem loader cache when different file paths are used for the same template
|
||||||
|
|
||||||
* 1.17.0 (2015-01-14)
|
# 1.17.0 (2015-01-14)
|
||||||
|
|
||||||
* added a 'filename' autoescaping strategy, which dynamically chooses the
|
* added a 'filename' autoescaping strategy, which dynamically chooses the
|
||||||
autoescaping strategy for a template based on template file extension.
|
autoescaping strategy for a template based on template file extension.
|
||||||
|
|
||||||
* 1.16.3 (2014-12-25)
|
# 1.16.3 (2014-12-25)
|
||||||
|
|
||||||
* fixed regression for dynamic parent templates
|
* fixed regression for dynamic parent templates
|
||||||
* fixed cache management with statcache
|
* fixed cache management with statcache
|
||||||
* fixed a regression in the slice filter
|
* fixed a regression in the slice filter
|
||||||
|
|
||||||
* 1.16.2 (2014-10-17)
|
# 1.16.2 (2014-10-17)
|
||||||
|
|
||||||
* fixed timezone on dates as strings
|
* fixed timezone on dates as strings
|
||||||
* fixed 2-words test names when a custom node class is not used
|
* fixed 2-words test names when a custom node class is not used
|
||||||
@@ -442,7 +458,7 @@
|
|||||||
* fixed a regression in the in operator
|
* fixed a regression in the in operator
|
||||||
* fixed a regression in the slice filter
|
* fixed a regression in the slice filter
|
||||||
|
|
||||||
* 1.16.1 (2014-10-10)
|
# 1.16.1 (2014-10-10)
|
||||||
|
|
||||||
* improved error reporting in a sandboxed template
|
* improved error reporting in a sandboxed template
|
||||||
* fixed missing error file/line information under certain circumstances
|
* fixed missing error file/line information under certain circumstances
|
||||||
@@ -452,20 +468,20 @@
|
|||||||
* fixed for mb function overload mb_substr acting different
|
* fixed for mb function overload mb_substr acting different
|
||||||
* fixed the attribute() function when passing a variable for the arguments
|
* fixed the attribute() function when passing a variable for the arguments
|
||||||
|
|
||||||
* 1.16.0 (2014-07-05)
|
# 1.16.0 (2014-07-05)
|
||||||
|
|
||||||
* changed url_encode to always encode according to RFC 3986
|
* changed url_encode to always encode according to RFC 3986
|
||||||
* fixed inheritance in a 'use'-hierarchy
|
* fixed inheritance in a 'use'-hierarchy
|
||||||
* removed the __toString policy check when the sandbox is disabled
|
* removed the __toString policy check when the sandbox is disabled
|
||||||
* fixed recursively calling blocks in templates with inheritance
|
* fixed recursively calling blocks in templates with inheritance
|
||||||
|
|
||||||
* 1.15.1 (2014-02-13)
|
# 1.15.1 (2014-02-13)
|
||||||
|
|
||||||
* fixed the conversion of the special '0000-00-00 00:00' date
|
* fixed the conversion of the special '0000-00-00 00:00' date
|
||||||
* added an error message when trying to import an undefined block from a trait
|
* added an error message when trying to import an undefined block from a trait
|
||||||
* fixed a C extension crash when accessing defined but uninitialized property.
|
* fixed a C extension crash when accessing defined but uninitialized property.
|
||||||
|
|
||||||
* 1.15.0 (2013-12-06)
|
# 1.15.0 (2013-12-06)
|
||||||
|
|
||||||
* made ignoreStrictCheck in Template::getAttribute() works with __call() methods throwing BadMethodCallException
|
* made ignoreStrictCheck in Template::getAttribute() works with __call() methods throwing BadMethodCallException
|
||||||
* added min and max functions
|
* added min and max functions
|
||||||
@@ -475,19 +491,19 @@
|
|||||||
* added a source function to include the content of a template without rendering it
|
* added a source function to include the content of a template without rendering it
|
||||||
* fixed the C extension sandbox behavior when get or set is prepend to method name
|
* fixed the C extension sandbox behavior when get or set is prepend to method name
|
||||||
|
|
||||||
* 1.14.2 (2013-10-30)
|
# 1.14.2 (2013-10-30)
|
||||||
|
|
||||||
* fixed error filename/line when an error occurs in an included file
|
* fixed error filename/line when an error occurs in an included file
|
||||||
* allowed operators that contain whitespaces to have more than one whitespace
|
* allowed operators that contain whitespaces to have more than one whitespace
|
||||||
* allowed tests to be made of 1 or 2 words (like "same as" or "divisible by")
|
* allowed tests to be made of 1 or 2 words (like "same as" or "divisible by")
|
||||||
|
|
||||||
* 1.14.1 (2013-10-15)
|
# 1.14.1 (2013-10-15)
|
||||||
|
|
||||||
* made it possible to use named operators as variables
|
* made it possible to use named operators as variables
|
||||||
* fixed the possibility to have a variable named 'matches'
|
* fixed the possibility to have a variable named 'matches'
|
||||||
* added support for PHP 5.5 DateTimeInterface
|
* added support for PHP 5.5 DateTimeInterface
|
||||||
|
|
||||||
* 1.14.0 (2013-10-03)
|
# 1.14.0 (2013-10-03)
|
||||||
|
|
||||||
* fixed usage of the html_attr escaping strategy to avoid double-escaping with the html strategy
|
* fixed usage of the html_attr escaping strategy to avoid double-escaping with the html strategy
|
||||||
* added new operators: ends with, starts with, and matches
|
* added new operators: ends with, starts with, and matches
|
||||||
@@ -499,12 +515,12 @@
|
|||||||
* fixed template_from_string when the template includes or extends other ones
|
* fixed template_from_string when the template includes or extends other ones
|
||||||
* fixed a crash of the C extension on an edge case
|
* fixed a crash of the C extension on an edge case
|
||||||
|
|
||||||
* 1.13.2 (2013-08-03)
|
# 1.13.2 (2013-08-03)
|
||||||
|
|
||||||
* fixed the error line number for an error occurs in and embedded template
|
* fixed the error line number for an error occurs in and embedded template
|
||||||
* fixed crashes of the C extension on some edge cases
|
* fixed crashes of the C extension on some edge cases
|
||||||
|
|
||||||
* 1.13.1 (2013-06-06)
|
# 1.13.1 (2013-06-06)
|
||||||
|
|
||||||
* added the possibility to ignore the filesystem constructor argument in Twig_Loader_Filesystem
|
* added the possibility to ignore the filesystem constructor argument in Twig_Loader_Filesystem
|
||||||
* fixed Twig_Loader_Chain::exists() for a loader which implements Twig_ExistsLoaderInterface
|
* fixed Twig_Loader_Chain::exists() for a loader which implements Twig_ExistsLoaderInterface
|
||||||
@@ -512,7 +528,7 @@
|
|||||||
* added support for object instances as the second argument of the constant test
|
* added support for object instances as the second argument of the constant test
|
||||||
* fixed the include function when used in an assignment
|
* fixed the include function when used in an assignment
|
||||||
|
|
||||||
* 1.13.0 (2013-05-10)
|
# 1.13.0 (2013-05-10)
|
||||||
|
|
||||||
* fixed getting a numeric-like item on a variable ('09' for instance)
|
* fixed getting a numeric-like item on a variable ('09' for instance)
|
||||||
* fixed getting a boolean or float key on an array, so it is consistent with PHP's array access:
|
* fixed getting a boolean or float key on an array, so it is consistent with PHP's array access:
|
||||||
@@ -521,7 +537,7 @@
|
|||||||
* changed ☃ to § in tests
|
* changed ☃ to § in tests
|
||||||
* enforced usage of named arguments after positional ones
|
* enforced usage of named arguments after positional ones
|
||||||
|
|
||||||
* 1.12.3 (2013-04-08)
|
# 1.12.3 (2013-04-08)
|
||||||
|
|
||||||
* fixed a security issue in the filesystem loader where it was possible to include a template one
|
* fixed a security issue in the filesystem loader where it was possible to include a template one
|
||||||
level above the configured path
|
level above the configured path
|
||||||
@@ -529,25 +545,25 @@
|
|||||||
* added a batch filter
|
* added a batch filter
|
||||||
* added support for encoding an array as query string in the url_encode filter
|
* added support for encoding an array as query string in the url_encode filter
|
||||||
|
|
||||||
* 1.12.2 (2013-02-09)
|
# 1.12.2 (2013-02-09)
|
||||||
|
|
||||||
* fixed the timezone used by the date filter and function when the given date contains a timezone (like 2010-01-28T15:00:00+02:00)
|
* fixed the timezone used by the date filter and function when the given date contains a timezone (like 2010-01-28T15:00:00+02:00)
|
||||||
* fixed globals when getGlobals is called early on
|
* fixed globals when getGlobals is called early on
|
||||||
* added the first and last filter
|
* added the first and last filter
|
||||||
|
|
||||||
* 1.12.1 (2013-01-15)
|
# 1.12.1 (2013-01-15)
|
||||||
|
|
||||||
* added support for object instances as the second argument of the constant function
|
* added support for object instances as the second argument of the constant function
|
||||||
* relaxed globals management to avoid a BC break
|
* relaxed globals management to avoid a BC break
|
||||||
* added support for {{ some_string[:2] }}
|
* added support for {{ some_string[:2] }}
|
||||||
|
|
||||||
* 1.12.0 (2013-01-08)
|
# 1.12.0 (2013-01-08)
|
||||||
|
|
||||||
* added verbatim as an alias for the raw tag to avoid confusion with the raw filter
|
* added verbatim as an alias for the raw tag to avoid confusion with the raw filter
|
||||||
* fixed registration of tests and functions as anonymous functions
|
* fixed registration of tests and functions as anonymous functions
|
||||||
* fixed globals management
|
* fixed globals management
|
||||||
|
|
||||||
* 1.12.0-RC1 (2012-12-29)
|
# 1.12.0-RC1 (2012-12-29)
|
||||||
|
|
||||||
* added an include function (does the same as the include tag but in a more flexible way)
|
* added an include function (does the same as the include tag but in a more flexible way)
|
||||||
* added the ability to use any PHP callable to define filters, functions, and tests
|
* added the ability to use any PHP callable to define filters, functions, and tests
|
||||||
@@ -557,14 +573,14 @@
|
|||||||
* moved filters/functions/tests syntax errors to the parser
|
* moved filters/functions/tests syntax errors to the parser
|
||||||
* added support for extended ternary operator syntaxes
|
* added support for extended ternary operator syntaxes
|
||||||
|
|
||||||
* 1.11.1 (2012-11-11)
|
# 1.11.1 (2012-11-11)
|
||||||
|
|
||||||
* fixed debug info line numbering (was off by 2)
|
* fixed debug info line numbering (was off by 2)
|
||||||
* fixed escaping when calling a macro inside another one (regression introduced in 1.9.1)
|
* fixed escaping when calling a macro inside another one (regression introduced in 1.9.1)
|
||||||
* optimized variable access on PHP 5.4
|
* optimized variable access on PHP 5.4
|
||||||
* fixed a crash of the C extension when an exception was thrown from a macro called without being imported (using _self.XXX)
|
* fixed a crash of the C extension when an exception was thrown from a macro called without being imported (using _self.XXX)
|
||||||
|
|
||||||
* 1.11.0 (2012-11-07)
|
# 1.11.0 (2012-11-07)
|
||||||
|
|
||||||
* fixed macro compilation when a variable name is a PHP reserved keyword
|
* fixed macro compilation when a variable name is a PHP reserved keyword
|
||||||
* changed the date filter behavior to always apply the default timezone, except if false is passed as the timezone
|
* changed the date filter behavior to always apply the default timezone, except if false is passed as the timezone
|
||||||
@@ -574,41 +590,41 @@
|
|||||||
* optimized the way Twig exceptions are managed (to make them faster)
|
* optimized the way Twig exceptions are managed (to make them faster)
|
||||||
* added Twig_ExistsLoaderInterface (implementing this interface in your loader make the chain loader much faster)
|
* added Twig_ExistsLoaderInterface (implementing this interface in your loader make the chain loader much faster)
|
||||||
|
|
||||||
* 1.10.3 (2012-10-19)
|
# 1.10.3 (2012-10-19)
|
||||||
|
|
||||||
* fixed wrong template location in some error messages
|
* fixed wrong template location in some error messages
|
||||||
* reverted a BC break introduced in 1.10.2
|
* reverted a BC break introduced in 1.10.2
|
||||||
* added a split filter
|
* added a split filter
|
||||||
|
|
||||||
* 1.10.2 (2012-10-15)
|
# 1.10.2 (2012-10-15)
|
||||||
|
|
||||||
* fixed macro calls on PHP 5.4
|
* fixed macro calls on PHP 5.4
|
||||||
|
|
||||||
* 1.10.1 (2012-10-15)
|
# 1.10.1 (2012-10-15)
|
||||||
|
|
||||||
* made a speed optimization to macro calls when imported via the "import" tag
|
* made a speed optimization to macro calls when imported via the "import" tag
|
||||||
* fixed C extension compilation on Windows
|
* fixed C extension compilation on Windows
|
||||||
* fixed a segfault in the C extension when using DateTime objects
|
* fixed a segfault in the C extension when using DateTime objects
|
||||||
|
|
||||||
* 1.10.0 (2012-09-28)
|
# 1.10.0 (2012-09-28)
|
||||||
|
|
||||||
* extracted functional tests framework to make it reusable for third-party extensions
|
* extracted functional tests framework to make it reusable for third-party extensions
|
||||||
* added namespaced templates support in Twig_Loader_Filesystem
|
* added namespaced templates support in Twig_Loader_Filesystem
|
||||||
* added Twig_Loader_Filesystem::prependPath()
|
* added Twig_Loader_Filesystem::prependPath()
|
||||||
* fixed an error when a token parser pass a closure as a test to the subparse() method
|
* fixed an error when a token parser pass a closure as a test to the subparse() method
|
||||||
|
|
||||||
* 1.9.2 (2012-08-25)
|
# 1.9.2 (2012-08-25)
|
||||||
|
|
||||||
* fixed the in operator for objects that contain circular references
|
* fixed the in operator for objects that contain circular references
|
||||||
* fixed the C extension when accessing a public property of an object implementing the \ArrayAccess interface
|
* fixed the C extension when accessing a public property of an object implementing the \ArrayAccess interface
|
||||||
|
|
||||||
* 1.9.1 (2012-07-22)
|
# 1.9.1 (2012-07-22)
|
||||||
|
|
||||||
* optimized macro calls when auto-escaping is on
|
* optimized macro calls when auto-escaping is on
|
||||||
* fixed wrong parent class for Twig_Function_Node
|
* fixed wrong parent class for Twig_Function_Node
|
||||||
* made Twig_Loader_Chain more explicit about problems
|
* made Twig_Loader_Chain more explicit about problems
|
||||||
|
|
||||||
* 1.9.0 (2012-07-13)
|
# 1.9.0 (2012-07-13)
|
||||||
|
|
||||||
* made the parsing independent of the template loaders
|
* made the parsing independent of the template loaders
|
||||||
* fixed exception trace when an error occurs when rendering a child template
|
* fixed exception trace when an error occurs when rendering a child template
|
||||||
@@ -616,26 +632,26 @@
|
|||||||
* fixed nested embed tag calls
|
* fixed nested embed tag calls
|
||||||
* added the date_modify filter
|
* added the date_modify filter
|
||||||
|
|
||||||
* 1.8.3 (2012-06-17)
|
# 1.8.3 (2012-06-17)
|
||||||
|
|
||||||
* fixed paths in the filesystem loader when passing a path that ends with a slash or a backslash
|
* fixed paths in the filesystem loader when passing a path that ends with a slash or a backslash
|
||||||
* fixed escaping when a project defines a function named html or js
|
* fixed escaping when a project defines a function named html or js
|
||||||
* fixed chmod mode to apply the umask correctly
|
* fixed chmod mode to apply the umask correctly
|
||||||
|
|
||||||
* 1.8.2 (2012-05-30)
|
# 1.8.2 (2012-05-30)
|
||||||
|
|
||||||
* added the abs filter
|
* added the abs filter
|
||||||
* fixed a regression when using a number in template attributes
|
* fixed a regression when using a number in template attributes
|
||||||
* fixed compiler when mbstring.func_overload is set to 2
|
* fixed compiler when mbstring.func_overload is set to 2
|
||||||
* fixed DateTimeZone support in date filter
|
* fixed DateTimeZone support in date filter
|
||||||
|
|
||||||
* 1.8.1 (2012-05-17)
|
# 1.8.1 (2012-05-17)
|
||||||
|
|
||||||
* fixed a regression when dealing with SimpleXMLElement instances in templates
|
* fixed a regression when dealing with SimpleXMLElement instances in templates
|
||||||
* fixed "is_safe" value for the "dump" function when "html_errors" is not defined in php.ini
|
* fixed "is_safe" value for the "dump" function when "html_errors" is not defined in php.ini
|
||||||
* switched to use mbstring whenever possible instead of iconv (you might need to update your encoding as mbstring and iconv encoding names sometimes differ)
|
* switched to use mbstring whenever possible instead of iconv (you might need to update your encoding as mbstring and iconv encoding names sometimes differ)
|
||||||
|
|
||||||
* 1.8.0 (2012-05-08)
|
# 1.8.0 (2012-05-08)
|
||||||
|
|
||||||
* enforced interface when adding tests, filters, functions, and node visitors from extensions
|
* enforced interface when adding tests, filters, functions, and node visitors from extensions
|
||||||
* fixed a side-effect of the date filter where the timezone might be changed
|
* fixed a side-effect of the date filter where the timezone might be changed
|
||||||
@@ -644,7 +660,7 @@
|
|||||||
* changed the autoescape option to also accept a supported escaping strategy (for BC, true is equivalent to html)
|
* changed the autoescape option to also accept a supported escaping strategy (for BC, true is equivalent to html)
|
||||||
* added an embed tag
|
* added an embed tag
|
||||||
|
|
||||||
* 1.7.0 (2012-04-24)
|
# 1.7.0 (2012-04-24)
|
||||||
|
|
||||||
* fixed a PHP warning when using CIFS
|
* fixed a PHP warning when using CIFS
|
||||||
* fixed template line number in some exceptions
|
* fixed template line number in some exceptions
|
||||||
@@ -658,30 +674,30 @@
|
|||||||
* fixed filesystem loader freshness logic for high traffic websites
|
* fixed filesystem loader freshness logic for high traffic websites
|
||||||
* fixed random function when charset is null
|
* fixed random function when charset is null
|
||||||
|
|
||||||
* 1.6.5 (2012-04-11)
|
# 1.6.5 (2012-04-11)
|
||||||
|
|
||||||
* fixed a regression when a template only extends another one without defining any blocks
|
* fixed a regression when a template only extends another one without defining any blocks
|
||||||
|
|
||||||
* 1.6.4 (2012-04-02)
|
# 1.6.4 (2012-04-02)
|
||||||
|
|
||||||
* fixed PHP notice in Twig_Error::guessTemplateLine() introduced in 1.6.3
|
* fixed PHP notice in Twig_Error::guessTemplateLine() introduced in 1.6.3
|
||||||
* fixed performance when compiling large files
|
* fixed performance when compiling large files
|
||||||
* optimized parent template creation when the template does not use dynamic inheritance
|
* optimized parent template creation when the template does not use dynamic inheritance
|
||||||
|
|
||||||
* 1.6.3 (2012-03-22)
|
# 1.6.3 (2012-03-22)
|
||||||
|
|
||||||
* fixed usage of Z_ADDREF_P for PHP 5.2 in the C extension
|
* fixed usage of Z_ADDREF_P for PHP 5.2 in the C extension
|
||||||
* fixed compilation of numeric values used in templates when using a locale where the decimal separator is not a dot
|
* fixed compilation of numeric values used in templates when using a locale where the decimal separator is not a dot
|
||||||
* made the strategy used to guess the real template file name and line number in exception messages much faster and more accurate
|
* made the strategy used to guess the real template file name and line number in exception messages much faster and more accurate
|
||||||
|
|
||||||
* 1.6.2 (2012-03-18)
|
# 1.6.2 (2012-03-18)
|
||||||
|
|
||||||
* fixed sandbox mode when used with inheritance
|
* fixed sandbox mode when used with inheritance
|
||||||
* added preserveKeys support for the slice filter
|
* added preserveKeys support for the slice filter
|
||||||
* fixed the date filter when a DateTime instance is passed with a specific timezone
|
* fixed the date filter when a DateTime instance is passed with a specific timezone
|
||||||
* added a trim filter
|
* added a trim filter
|
||||||
|
|
||||||
* 1.6.1 (2012-02-29)
|
# 1.6.1 (2012-02-29)
|
||||||
|
|
||||||
* fixed Twig C extension
|
* fixed Twig C extension
|
||||||
* removed the creation of Twig_Markup instances when not needed
|
* removed the creation of Twig_Markup instances when not needed
|
||||||
@@ -689,7 +705,7 @@
|
|||||||
* fixed the slice filter on strings when the length is not specified
|
* fixed the slice filter on strings when the length is not specified
|
||||||
* fixed the creation of the cache directory in case of a race condition
|
* fixed the creation of the cache directory in case of a race condition
|
||||||
|
|
||||||
* 1.6.0 (2012-02-04)
|
# 1.6.0 (2012-02-04)
|
||||||
|
|
||||||
* fixed raw blocks when used with the whitespace trim option
|
* fixed raw blocks when used with the whitespace trim option
|
||||||
* made a speed optimization to macro calls when imported via the "from" tag
|
* made a speed optimization to macro calls when imported via the "from" tag
|
||||||
@@ -704,22 +720,22 @@
|
|||||||
* added recursive parsing support in the parser
|
* added recursive parsing support in the parser
|
||||||
* added string and integer handling for the random function
|
* added string and integer handling for the random function
|
||||||
|
|
||||||
* 1.5.1 (2012-01-05)
|
# 1.5.1 (2012-01-05)
|
||||||
|
|
||||||
* fixed a regression when parsing strings
|
* fixed a regression when parsing strings
|
||||||
|
|
||||||
* 1.5.0 (2012-01-04)
|
# 1.5.0 (2012-01-04)
|
||||||
|
|
||||||
* added Traversable objects support for the join filter
|
* added Traversable objects support for the join filter
|
||||||
|
|
||||||
* 1.5.0-RC2 (2011-12-30)
|
# 1.5.0-RC2 (2011-12-30)
|
||||||
|
|
||||||
* added a way to set the default global date interval format
|
* added a way to set the default global date interval format
|
||||||
* fixed the date filter for DateInterval instances (setTimezone() does not exist for them)
|
* fixed the date filter for DateInterval instances (setTimezone() does not exist for them)
|
||||||
* refactored Twig_Template::display() to ease its extension
|
* refactored Twig_Template::display() to ease its extension
|
||||||
* added a number_format filter
|
* added a number_format filter
|
||||||
|
|
||||||
* 1.5.0-RC1 (2011-12-26)
|
# 1.5.0-RC1 (2011-12-26)
|
||||||
|
|
||||||
* removed the need to quote hash keys
|
* removed the need to quote hash keys
|
||||||
* allowed hash keys to be any expression
|
* allowed hash keys to be any expression
|
||||||
@@ -734,19 +750,19 @@
|
|||||||
* added string interpolation support
|
* added string interpolation support
|
||||||
* enhanced exceptions for unknown filters, functions, tests, and tags
|
* enhanced exceptions for unknown filters, functions, tests, and tags
|
||||||
|
|
||||||
* 1.4.0 (2011-12-07)
|
# 1.4.0 (2011-12-07)
|
||||||
|
|
||||||
* fixed lexer when using big numbers (> PHP_INT_MAX)
|
* fixed lexer when using big numbers (> PHP_INT_MAX)
|
||||||
* added missing preserveKeys argument to the reverse filter
|
* added missing preserveKeys argument to the reverse filter
|
||||||
* fixed macros containing filter tag calls
|
* fixed macros containing filter tag calls
|
||||||
|
|
||||||
* 1.4.0-RC2 (2011-11-27)
|
# 1.4.0-RC2 (2011-11-27)
|
||||||
|
|
||||||
* removed usage of Reflection in Twig_Template::getAttribute()
|
* removed usage of Reflection in Twig_Template::getAttribute()
|
||||||
* added a C extension that can optionally replace Twig_Template::getAttribute()
|
* added a C extension that can optionally replace Twig_Template::getAttribute()
|
||||||
* added negative timestamp support to the date filter
|
* added negative timestamp support to the date filter
|
||||||
|
|
||||||
* 1.4.0-RC1 (2011-11-20)
|
# 1.4.0-RC1 (2011-11-20)
|
||||||
|
|
||||||
* optimized variable access when using PHP 5.4
|
* optimized variable access when using PHP 5.4
|
||||||
* changed the precedence of the .. operator to be more consistent with languages that implements such a feature like Ruby
|
* changed the precedence of the .. operator to be more consistent with languages that implements such a feature like Ruby
|
||||||
@@ -764,11 +780,11 @@
|
|||||||
* moved all node manipulations outside the compile() Node method
|
* moved all node manipulations outside the compile() Node method
|
||||||
* made several speed optimizations
|
* made several speed optimizations
|
||||||
|
|
||||||
* 1.3.0 (2011-10-08)
|
# 1.3.0 (2011-10-08)
|
||||||
|
|
||||||
no changes
|
no changes
|
||||||
|
|
||||||
* 1.3.0-RC1 (2011-10-04)
|
# 1.3.0-RC1 (2011-10-04)
|
||||||
|
|
||||||
* added an optimization for the parent() function
|
* added an optimization for the parent() function
|
||||||
* added cache reloading when auto_reload is true and an extension has been modified
|
* added cache reloading when auto_reload is true and an extension has been modified
|
||||||
@@ -776,11 +792,11 @@ no changes
|
|||||||
* allowed empty templates to be used as traits
|
* allowed empty templates to be used as traits
|
||||||
* added traits support for the "parent" function
|
* added traits support for the "parent" function
|
||||||
|
|
||||||
* 1.2.0 (2011-09-13)
|
# 1.2.0 (2011-09-13)
|
||||||
|
|
||||||
no changes
|
no changes
|
||||||
|
|
||||||
* 1.2.0-RC1 (2011-09-10)
|
# 1.2.0-RC1 (2011-09-10)
|
||||||
|
|
||||||
* enhanced the exception when a tag remains unclosed
|
* enhanced the exception when a tag remains unclosed
|
||||||
* added support for empty Countable objects for the "empty" test
|
* added support for empty Countable objects for the "empty" test
|
||||||
@@ -797,7 +813,7 @@ no changes
|
|||||||
* removed the possibility to use the "extends" tag from a block
|
* removed the possibility to use the "extends" tag from a block
|
||||||
* added "if" modifier support to "for" loops
|
* added "if" modifier support to "for" loops
|
||||||
|
|
||||||
* 1.1.2 (2011-07-30)
|
# 1.1.2 (2011-07-30)
|
||||||
|
|
||||||
* fixed json_encode filter on PHP 5.2
|
* fixed json_encode filter on PHP 5.2
|
||||||
* fixed regression introduced in 1.1.1 ({{ block(foo|lower) }})
|
* fixed regression introduced in 1.1.1 ({{ block(foo|lower) }})
|
||||||
@@ -807,28 +823,28 @@ no changes
|
|||||||
* fixed a parsing problem when a large chunk of text is enclosed in a comment tag
|
* fixed a parsing problem when a large chunk of text is enclosed in a comment tag
|
||||||
* added PHPDoc for all Token parsers and Core extension functions
|
* added PHPDoc for all Token parsers and Core extension functions
|
||||||
|
|
||||||
* 1.1.1 (2011-07-17)
|
# 1.1.1 (2011-07-17)
|
||||||
|
|
||||||
* added a performance optimization in the Optimizer (also helps to lower the number of nested level calls)
|
* added a performance optimization in the Optimizer (also helps to lower the number of nested level calls)
|
||||||
* made some performance improvement for some edge cases
|
* made some performance improvement for some edge cases
|
||||||
|
|
||||||
* 1.1.0 (2011-06-28)
|
# 1.1.0 (2011-06-28)
|
||||||
|
|
||||||
* fixed json_encode filter
|
* fixed json_encode filter
|
||||||
|
|
||||||
* 1.1.0-RC3 (2011-06-24)
|
# 1.1.0-RC3 (2011-06-24)
|
||||||
|
|
||||||
* fixed method case-sensitivity when using the sandbox mode
|
* fixed method case-sensitivity when using the sandbox mode
|
||||||
* added timezone support for the date filter
|
* added timezone support for the date filter
|
||||||
* fixed possible security problems with NUL bytes
|
* fixed possible security problems with NUL bytes
|
||||||
|
|
||||||
* 1.1.0-RC2 (2011-06-16)
|
# 1.1.0-RC2 (2011-06-16)
|
||||||
|
|
||||||
* added an exception when the template passed to "use" is not a string
|
* added an exception when the template passed to "use" is not a string
|
||||||
* made 'a.b is defined' not throw an exception if a is not defined (in strict mode)
|
* made 'a.b is defined' not throw an exception if a is not defined (in strict mode)
|
||||||
* added {% line \d+ %} directive
|
* added {% line \d+ %} directive
|
||||||
|
|
||||||
* 1.1.0-RC1 (2011-05-28)
|
# 1.1.0-RC1 (2011-05-28)
|
||||||
|
|
||||||
Flush your cache after upgrading.
|
Flush your cache after upgrading.
|
||||||
|
|
||||||
@@ -842,13 +858,13 @@ Flush your cache after upgrading.
|
|||||||
* wrapped all compilation and runtime exceptions with Twig_Error_Runtime and added logic to guess the template name and line
|
* wrapped all compilation and runtime exceptions with Twig_Error_Runtime and added logic to guess the template name and line
|
||||||
* moved display() method to Twig_Template (generated templates should now use doDisplay() instead)
|
* moved display() method to Twig_Template (generated templates should now use doDisplay() instead)
|
||||||
|
|
||||||
* 1.0.0 (2011-03-27)
|
# 1.0.0 (2011-03-27)
|
||||||
|
|
||||||
* fixed output when using mbstring
|
* fixed output when using mbstring
|
||||||
* fixed duplicate call of methods when using the sandbox
|
* fixed duplicate call of methods when using the sandbox
|
||||||
* made the charset configurable for the escape filter
|
* made the charset configurable for the escape filter
|
||||||
|
|
||||||
* 1.0.0-RC2 (2011-02-21)
|
# 1.0.0-RC2 (2011-02-21)
|
||||||
|
|
||||||
* changed the way {% set %} works when capturing (the content is now marked as safe)
|
* changed the way {% set %} works when capturing (the content is now marked as safe)
|
||||||
* added support for macro name in the endmacro tag
|
* added support for macro name in the endmacro tag
|
||||||
@@ -859,7 +875,7 @@ Flush your cache after upgrading.
|
|||||||
* removed coupling between Twig_Node and Twig_Template
|
* removed coupling between Twig_Node and Twig_Template
|
||||||
* fixed the ternary operator precedence rule
|
* fixed the ternary operator precedence rule
|
||||||
|
|
||||||
* 1.0.0-RC1 (2011-01-09)
|
# 1.0.0-RC1 (2011-01-09)
|
||||||
|
|
||||||
Backward incompatibilities:
|
Backward incompatibilities:
|
||||||
|
|
||||||
@@ -885,7 +901,7 @@ Changes:
|
|||||||
* the "default" filter now uses the "empty" test instead of just checking for null
|
* the "default" filter now uses the "empty" test instead of just checking for null
|
||||||
* added the "empty" test
|
* added the "empty" test
|
||||||
|
|
||||||
* 0.9.10 (2010-12-16)
|
# 0.9.10 (2010-12-16)
|
||||||
|
|
||||||
Backward incompatibilities:
|
Backward incompatibilities:
|
||||||
|
|
||||||
@@ -920,7 +936,7 @@ Changes:
|
|||||||
* added an Optimizer extension (enabled by default; optimizes "for" loops and "raw" filters)
|
* added an Optimizer extension (enabled by default; optimizes "for" loops and "raw" filters)
|
||||||
* added priority to node visitors
|
* added priority to node visitors
|
||||||
|
|
||||||
* 0.9.9 (2010-11-28)
|
# 0.9.9 (2010-11-28)
|
||||||
|
|
||||||
Backward incompatibilities:
|
Backward incompatibilities:
|
||||||
* the self special variable has been renamed to _self
|
* the self special variable has been renamed to _self
|
||||||
@@ -969,7 +985,7 @@ Changes:
|
|||||||
* renamed self to _self (to avoid conflict)
|
* renamed self to _self (to avoid conflict)
|
||||||
* fixed Twig_Template::getAttribute() for protected properties
|
* fixed Twig_Template::getAttribute() for protected properties
|
||||||
|
|
||||||
* 0.9.8 (2010-06-28)
|
# 0.9.8 (2010-06-28)
|
||||||
|
|
||||||
Backward incompatibilities:
|
Backward incompatibilities:
|
||||||
* the trans tag plural count is now attached to the plural tag:
|
* the trans tag plural count is now attached to the plural tag:
|
||||||
@@ -984,7 +1000,7 @@ Backward incompatibilities:
|
|||||||
* fixed set tag when used with a capture
|
* fixed set tag when used with a capture
|
||||||
* fixed type hinting for Twig_Environment::addFilter() method
|
* fixed type hinting for Twig_Environment::addFilter() method
|
||||||
|
|
||||||
* 0.9.7 (2010-06-12)
|
# 0.9.7 (2010-06-12)
|
||||||
|
|
||||||
Backward incompatibilities:
|
Backward incompatibilities:
|
||||||
* changed 'as' to '=' for the set tag ({% set title as "Title" %} must now be {% set title = "Title" %})
|
* changed 'as' to '=' for the set tag ({% set title as "Title" %} must now be {% set title = "Title" %})
|
||||||
@@ -1011,7 +1027,7 @@ Backward incompatibilities:
|
|||||||
* fixed sandbox mode (__toString() method check was not enforced if called implicitly from a simple statement like {{ article }})
|
* fixed sandbox mode (__toString() method check was not enforced if called implicitly from a simple statement like {{ article }})
|
||||||
* added an exception when a child template has a non-empty body (as it is always ignored when rendering)
|
* added an exception when a child template has a non-empty body (as it is always ignored when rendering)
|
||||||
|
|
||||||
* 0.9.6 (2010-05-12)
|
# 0.9.6 (2010-05-12)
|
||||||
|
|
||||||
* fixed variables defined outside a loop and for which the value changes in a for loop
|
* fixed variables defined outside a loop and for which the value changes in a for loop
|
||||||
* fixed the test suite for PHP 5.2 and older versions of PHPUnit
|
* fixed the test suite for PHP 5.2 and older versions of PHPUnit
|
||||||
@@ -1028,7 +1044,7 @@ Backward incompatibilities:
|
|||||||
* added support for escaping strategy in the autoescape tag
|
* added support for escaping strategy in the autoescape tag
|
||||||
* fixed lexer when a template has a big chunk of text between/in a block
|
* fixed lexer when a template has a big chunk of text between/in a block
|
||||||
|
|
||||||
* 0.9.5 (2010-01-20)
|
# 0.9.5 (2010-01-20)
|
||||||
|
|
||||||
As for any new release, don't forget to remove all cached templates after
|
As for any new release, don't forget to remove all cached templates after
|
||||||
upgrading.
|
upgrading.
|
||||||
@@ -1065,7 +1081,7 @@ stable).
|
|||||||
* added support for arrays (same behavior as in PHP, a mix between lists and dictionaries, arrays and hashes)
|
* added support for arrays (same behavior as in PHP, a mix between lists and dictionaries, arrays and hashes)
|
||||||
* enhanced some error messages to provide better feedback in case of parsing errors
|
* enhanced some error messages to provide better feedback in case of parsing errors
|
||||||
|
|
||||||
* 0.9.4 (2009-12-02)
|
# 0.9.4 (2009-12-02)
|
||||||
|
|
||||||
If you have custom loaders, you MUST upgrade them for this release: The
|
If you have custom loaders, you MUST upgrade them for this release: The
|
||||||
Twig_Loader base class has been removed, and the Twig_LoaderInterface has also
|
Twig_Loader base class has been removed, and the Twig_LoaderInterface has also
|
||||||
@@ -1078,7 +1094,7 @@ been changed (see the source code for more information or the documentation).
|
|||||||
* fixed bug when the filename of a template contains */
|
* fixed bug when the filename of a template contains */
|
||||||
* refactored loaders
|
* refactored loaders
|
||||||
|
|
||||||
* 0.9.3 (2009-11-11)
|
# 0.9.3 (2009-11-11)
|
||||||
|
|
||||||
This release is NOT backward compatible with the previous releases.
|
This release is NOT backward compatible with the previous releases.
|
||||||
|
|
||||||
@@ -1107,7 +1123,7 @@ This release is NOT backward compatible with the previous releases.
|
|||||||
* extended set tag to support expression as value ({% set foo as 'foo' ~ 'bar' %} )
|
* extended set tag to support expression as value ({% set foo as 'foo' ~ 'bar' %} )
|
||||||
* fixed bug when \ was used in HTML
|
* fixed bug when \ was used in HTML
|
||||||
|
|
||||||
* 0.9.2 (2009-10-29)
|
# 0.9.2 (2009-10-29)
|
||||||
|
|
||||||
* made some speed optimizations
|
* made some speed optimizations
|
||||||
* changed the cache extension to .php
|
* changed the cache extension to .php
|
||||||
@@ -1125,7 +1141,7 @@ This release is NOT backward compatible with the previous releases.
|
|||||||
* enhanced some error messages to ease debugging
|
* enhanced some error messages to ease debugging
|
||||||
* fixed empty cache files when the template contains an error
|
* fixed empty cache files when the template contains an error
|
||||||
|
|
||||||
* 0.9.1 (2009-10-14)
|
# 0.9.1 (2009-10-14)
|
||||||
|
|
||||||
* fixed a bug in PHP 5.2.6
|
* fixed a bug in PHP 5.2.6
|
||||||
* fixed numbers with one than one decimal
|
* fixed numbers with one than one decimal
|
||||||
@@ -1133,6 +1149,6 @@ This release is NOT backward compatible with the previous releases.
|
|||||||
* made small speed optimizations
|
* made small speed optimizations
|
||||||
* made minor tweaks to allow better extensibility and flexibility
|
* made minor tweaks to allow better extensibility and flexibility
|
||||||
|
|
||||||
* 0.9.0 (2009-10-12)
|
# 0.9.0 (2009-10-12)
|
||||||
|
|
||||||
* Initial release
|
* Initial release
|
||||||
|
|||||||
@@ -1,29 +1,27 @@
|
|||||||
Copyright (c) 2009-2020 by the Twig Team.
|
Copyright (c) 2009-2020 by the Twig Team.
|
||||||
|
|
||||||
Redistribution and use in source and binary forms, with or without
|
All rights reserved.
|
||||||
modification, are permitted provided that the following conditions are
|
|
||||||
met:
|
|
||||||
|
|
||||||
* Redistributions of source code must retain the above copyright
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
notice, this list of conditions and the following disclaimer.
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
* Redistributions in binary form must reproduce the above
|
* Redistributions of source code must retain the above copyright notice,
|
||||||
copyright notice, this list of conditions and the following
|
this list of conditions and the following disclaimer.
|
||||||
disclaimer in the documentation and/or other materials provided
|
* Redistributions in binary form must reproduce the above copyright notice,
|
||||||
with the distribution.
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
* The names of the contributors may not be used to endorse or
|
* Neither the name of Twig nor the names of its contributors
|
||||||
promote products derived from this software without specific
|
may be used to endorse or promote products derived from this software
|
||||||
prior written permission.
|
without specific prior written permission.
|
||||||
|
|
||||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||||
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||||
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|||||||
@@ -5,6 +5,7 @@
|
|||||||
"keywords": ["templating"],
|
"keywords": ["templating"],
|
||||||
"homepage": "https://twig.symfony.com",
|
"homepage": "https://twig.symfony.com",
|
||||||
"license": "BSD-3-Clause",
|
"license": "BSD-3-Clause",
|
||||||
|
"minimum-stability": "dev",
|
||||||
"authors": [
|
"authors": [
|
||||||
{
|
{
|
||||||
"name": "Fabien Potencier",
|
"name": "Fabien Potencier",
|
||||||
@@ -23,11 +24,11 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"require": {
|
"require": {
|
||||||
"php": ">=5.5.0",
|
"php": ">=7.1.3",
|
||||||
"symfony/polyfill-ctype": "^1.8"
|
"symfony/polyfill-ctype": "^1.8"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"symfony/phpunit-bridge": "^4.4|^5.0",
|
"symfony/phpunit-bridge": "^4.4.9|^5.0.9",
|
||||||
"psr/container": "^1.0"
|
"psr/container": "^1.0"
|
||||||
},
|
},
|
||||||
"autoload": {
|
"autoload": {
|
||||||
@@ -45,7 +46,7 @@
|
|||||||
},
|
},
|
||||||
"extra": {
|
"extra": {
|
||||||
"branch-alias": {
|
"branch-alias": {
|
||||||
"dev-master": "1.42-dev"
|
"dev-master": "1.43-dev"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ class Twig_Loader_String implements LoaderInterface, ExistsLoaderInterface, Sour
|
|||||||
{
|
{
|
||||||
public function getSource($name)
|
public function getSource($name)
|
||||||
{
|
{
|
||||||
@trigger_error(sprintf('Calling "getSource" on "%s" is deprecated since 1.27. Use getSourceContext() instead.', \get_class($this)), E_USER_DEPRECATED);
|
@trigger_error(sprintf('Calling "getSource" on "%s" is deprecated since 1.27. Use getSourceContext() instead.', static::class), E_USER_DEPRECATED);
|
||||||
|
|
||||||
return $name;
|
return $name;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -35,17 +35,17 @@ use Twig\RuntimeLoader\RuntimeLoaderInterface;
|
|||||||
use Twig\TokenParser\TokenParserInterface;
|
use Twig\TokenParser\TokenParserInterface;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Stores the Twig configuration.
|
* Stores the Twig configuration and renders templates.
|
||||||
*
|
*
|
||||||
* @author Fabien Potencier <fabien@symfony.com>
|
* @author Fabien Potencier <fabien@symfony.com>
|
||||||
*/
|
*/
|
||||||
class Environment
|
class Environment
|
||||||
{
|
{
|
||||||
const VERSION = '1.42.5';
|
const VERSION = '1.43.1';
|
||||||
const VERSION_ID = 14205;
|
const VERSION_ID = 14301;
|
||||||
const MAJOR_VERSION = 1;
|
const MAJOR_VERSION = 1;
|
||||||
const MINOR_VERSION = 42;
|
const MINOR_VERSION = 43;
|
||||||
const RELEASE_VERSION = 5;
|
const RELEASE_VERSION = 1;
|
||||||
const EXTRA_VERSION = '';
|
const EXTRA_VERSION = '';
|
||||||
|
|
||||||
protected $charset;
|
protected $charset;
|
||||||
|
|||||||
@@ -598,6 +598,11 @@ class ExpressionParser
|
|||||||
while (!$stream->test(Token::PUNCTUATION_TYPE, ')')) {
|
while (!$stream->test(Token::PUNCTUATION_TYPE, ')')) {
|
||||||
if (!empty($args)) {
|
if (!empty($args)) {
|
||||||
$stream->expect(Token::PUNCTUATION_TYPE, ',', 'Arguments must be separated by a comma');
|
$stream->expect(Token::PUNCTUATION_TYPE, ',', 'Arguments must be separated by a comma');
|
||||||
|
|
||||||
|
// if the comma above was a trailing comma, early exit the argument parse loop
|
||||||
|
if ($stream->test(Token::PUNCTUATION_TYPE, ')')) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($definition) {
|
if ($definition) {
|
||||||
@@ -740,7 +745,7 @@ class ExpressionParser
|
|||||||
$message .= sprintf('. Use "%s" instead', $test->getAlternative());
|
$message .= sprintf('. Use "%s" instead', $test->getAlternative());
|
||||||
}
|
}
|
||||||
$src = $stream->getSourceContext();
|
$src = $stream->getSourceContext();
|
||||||
$message .= sprintf(' in %s at line %d.', $src->getPath() ? $src->getPath() : $src->getName(), $stream->getCurrent()->getLine());
|
$message .= sprintf(' in %s at line %d.', $src->getPath() ?: $src->getName(), $stream->getCurrent()->getLine());
|
||||||
|
|
||||||
@trigger_error($message, E_USER_DEPRECATED);
|
@trigger_error($message, E_USER_DEPRECATED);
|
||||||
}
|
}
|
||||||
@@ -770,7 +775,7 @@ class ExpressionParser
|
|||||||
$message .= sprintf('. Use "%s" instead', $function->getAlternative());
|
$message .= sprintf('. Use "%s" instead', $function->getAlternative());
|
||||||
}
|
}
|
||||||
$src = $this->parser->getStream()->getSourceContext();
|
$src = $this->parser->getStream()->getSourceContext();
|
||||||
$message .= sprintf(' in %s at line %d.', $src->getPath() ? $src->getPath() : $src->getName(), $line);
|
$message .= sprintf(' in %s at line %d.', $src->getPath() ?: $src->getName(), $line);
|
||||||
|
|
||||||
@trigger_error($message, E_USER_DEPRECATED);
|
@trigger_error($message, E_USER_DEPRECATED);
|
||||||
}
|
}
|
||||||
@@ -800,7 +805,7 @@ class ExpressionParser
|
|||||||
$message .= sprintf('. Use "%s" instead', $filter->getAlternative());
|
$message .= sprintf('. Use "%s" instead', $filter->getAlternative());
|
||||||
}
|
}
|
||||||
$src = $this->parser->getStream()->getSourceContext();
|
$src = $this->parser->getStream()->getSourceContext();
|
||||||
$message .= sprintf(' in %s at line %d.', $src->getPath() ? $src->getPath() : $src->getName(), $line);
|
$message .= sprintf(' in %s at line %d.', $src->getPath() ?: $src->getName(), $line);
|
||||||
|
|
||||||
@trigger_error($message, E_USER_DEPRECATED);
|
@trigger_error($message, E_USER_DEPRECATED);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -65,7 +65,7 @@ abstract class AbstractExtension implements ExtensionInterface
|
|||||||
*/
|
*/
|
||||||
public function getName()
|
public function getName()
|
||||||
{
|
{
|
||||||
return \get_class($this);
|
return static::class;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -194,9 +194,9 @@ class CoreExtension extends AbstractExtension
|
|||||||
new TwigFilter('sort', 'twig_sort_filter'),
|
new TwigFilter('sort', 'twig_sort_filter'),
|
||||||
new TwigFilter('merge', 'twig_array_merge'),
|
new TwigFilter('merge', 'twig_array_merge'),
|
||||||
new TwigFilter('batch', 'twig_array_batch'),
|
new TwigFilter('batch', 'twig_array_batch'),
|
||||||
new TwigFilter('filter', 'twig_array_filter'),
|
new TwigFilter('filter', 'twig_array_filter', ['needs_environment' => true]),
|
||||||
new TwigFilter('map', 'twig_array_map'),
|
new TwigFilter('map', 'twig_array_map', ['needs_environment' => true]),
|
||||||
new TwigFilter('reduce', 'twig_array_reduce'),
|
new TwigFilter('reduce', 'twig_array_reduce', ['needs_environment' => true]),
|
||||||
|
|
||||||
// string/array filters
|
// string/array filters
|
||||||
new TwigFilter('reverse', 'twig_reverse_filter', ['needs_environment' => true]),
|
new TwigFilter('reverse', 'twig_reverse_filter', ['needs_environment' => true]),
|
||||||
@@ -539,11 +539,11 @@ function twig_replace_filter($str, $from, $to = null)
|
|||||||
*/
|
*/
|
||||||
function twig_round($value, $precision = 0, $method = 'common')
|
function twig_round($value, $precision = 0, $method = 'common')
|
||||||
{
|
{
|
||||||
if ('common' == $method) {
|
if ('common' === $method) {
|
||||||
return round($value, $precision);
|
return round($value, $precision);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ('ceil' != $method && 'floor' != $method) {
|
if ('ceil' !== $method && 'floor' !== $method) {
|
||||||
throw new RuntimeError('The round filter only supports the "common", "ceil", and "floor" methods.');
|
throw new RuntimeError('The round filter only supports the "common", "ceil", and "floor" methods.');
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1214,7 +1214,7 @@ function _twig_escape_js_callback($matches)
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* A few characters have short escape sequences in JSON and JavaScript.
|
* A few characters have short escape sequences in JSON and JavaScript.
|
||||||
* Escape sequences supported only by JavaScript, not JSON, are ommitted.
|
* Escape sequences supported only by JavaScript, not JSON, are omitted.
|
||||||
* \" is also supported but omitted, because the resulting string is not HTML safe.
|
* \" is also supported but omitted, because the resulting string is not HTML safe.
|
||||||
*/
|
*/
|
||||||
static $shortMap = [
|
static $shortMap = [
|
||||||
@@ -1504,7 +1504,7 @@ function twig_to_array($seq, $preserveKeys = true)
|
|||||||
function twig_test_empty($value)
|
function twig_test_empty($value)
|
||||||
{
|
{
|
||||||
if ($value instanceof \Countable) {
|
if ($value instanceof \Countable) {
|
||||||
return 0 == \count($value);
|
return 0 === \count($value);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($value instanceof \Traversable) {
|
if ($value instanceof \Traversable) {
|
||||||
@@ -1693,8 +1693,16 @@ function twig_array_batch($items, $size, $fill = null, $preserveKeys = true)
|
|||||||
return $result;
|
return $result;
|
||||||
}
|
}
|
||||||
|
|
||||||
function twig_array_filter($array, $arrow)
|
function twig_array_filter(Environment $env, $array, $arrow)
|
||||||
{
|
{
|
||||||
|
if (!twig_test_iterable($array)) {
|
||||||
|
throw new RuntimeError(sprintf('The "filter" filter expects an array or "Traversable", got "%s".', \is_object($array) ? \get_class($array) : \gettype($array)));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!$arrow instanceof Closure && $env->hasExtension('\Twig\Extension\SandboxExtension') && $env->getExtension('\Twig\Extension\SandboxExtension')->isSandboxed()) {
|
||||||
|
throw new RuntimeError('The callable passed to "filter" filter must be a Closure in sandbox mode.');
|
||||||
|
}
|
||||||
|
|
||||||
if (\is_array($array)) {
|
if (\is_array($array)) {
|
||||||
if (\PHP_VERSION_ID >= 50600) {
|
if (\PHP_VERSION_ID >= 50600) {
|
||||||
return array_filter($array, $arrow, \ARRAY_FILTER_USE_BOTH);
|
return array_filter($array, $arrow, \ARRAY_FILTER_USE_BOTH);
|
||||||
@@ -1707,8 +1715,12 @@ function twig_array_filter($array, $arrow)
|
|||||||
return new \CallbackFilterIterator(new \IteratorIterator($array), $arrow);
|
return new \CallbackFilterIterator(new \IteratorIterator($array), $arrow);
|
||||||
}
|
}
|
||||||
|
|
||||||
function twig_array_map($array, $arrow)
|
function twig_array_map(Environment $env, $array, $arrow)
|
||||||
{
|
{
|
||||||
|
if (!$arrow instanceof Closure && $env->hasExtension('\Twig\Extension\SandboxExtension') && $env->getExtension('\Twig\Extension\SandboxExtension')->isSandboxed()) {
|
||||||
|
throw new RuntimeError('The callable passed to the "map" filter must be a Closure in sandbox mode.');
|
||||||
|
}
|
||||||
|
|
||||||
$r = [];
|
$r = [];
|
||||||
foreach ($array as $k => $v) {
|
foreach ($array as $k => $v) {
|
||||||
$r[$k] = $arrow($v, $k);
|
$r[$k] = $arrow($v, $k);
|
||||||
@@ -1717,8 +1729,12 @@ function twig_array_map($array, $arrow)
|
|||||||
return $r;
|
return $r;
|
||||||
}
|
}
|
||||||
|
|
||||||
function twig_array_reduce($array, $arrow, $initial = null)
|
function twig_array_reduce(Environment $env, $array, $arrow, $initial = null)
|
||||||
{
|
{
|
||||||
|
if (!$arrow instanceof Closure && $env->hasExtension('\Twig\Extension\SandboxExtension') && $env->getExtension('\Twig\Extension\SandboxExtension')->isSandboxed()) {
|
||||||
|
throw new RuntimeError('The callable passed to the "reduce" filter must be a Closure in sandbox mode.');
|
||||||
|
}
|
||||||
|
|
||||||
if (!\is_array($array)) {
|
if (!\is_array($array)) {
|
||||||
$array = iterator_to_array($array);
|
$array = iterator_to_array($array);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ class ProfilerExtension extends AbstractExtension
|
|||||||
|
|
||||||
public function getNodeVisitors()
|
public function getNodeVisitors()
|
||||||
{
|
{
|
||||||
return [new ProfilerNodeVisitor(\get_class($this))];
|
return [new ProfilerNodeVisitor(static::class)];
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getName()
|
public function getName()
|
||||||
|
|||||||
@@ -499,11 +499,15 @@ class Lexer implements \Twig_LexerInterface
|
|||||||
$regex = [];
|
$regex = [];
|
||||||
foreach ($operators as $operator => $length) {
|
foreach ($operators as $operator => $length) {
|
||||||
// an operator that ends with a character must be followed by
|
// an operator that ends with a character must be followed by
|
||||||
// a whitespace or a parenthesis
|
// a whitespace, a parenthesis, an opening map [ or sequence {
|
||||||
|
$r = preg_quote($operator, '/');
|
||||||
if (ctype_alpha($operator[$length - 1])) {
|
if (ctype_alpha($operator[$length - 1])) {
|
||||||
$r = preg_quote($operator, '/').'(?=[\s()])';
|
$r .= '(?=[\s()\[{])';
|
||||||
} else {
|
}
|
||||||
$r = preg_quote($operator, '/');
|
|
||||||
|
// an operator that begins with a character must not have a dot or pipe before
|
||||||
|
if (ctype_alpha($operator[0])) {
|
||||||
|
$r = '(?<![\.\|])'.$r;
|
||||||
}
|
}
|
||||||
|
|
||||||
// an operator with a space can be any amount of whitespaces
|
// an operator with a space can be any amount of whitespaces
|
||||||
|
|||||||
@@ -53,7 +53,7 @@ class ArrayLoader implements LoaderInterface, ExistsLoaderInterface, SourceConte
|
|||||||
|
|
||||||
public function getSource($name)
|
public function getSource($name)
|
||||||
{
|
{
|
||||||
@trigger_error(sprintf('Calling "getSource" on "%s" is deprecated since 1.27. Use getSourceContext() instead.', \get_class($this)), E_USER_DEPRECATED);
|
@trigger_error(sprintf('Calling "getSource" on "%s" is deprecated since 1.27. Use getSourceContext() instead.', static::class), E_USER_DEPRECATED);
|
||||||
|
|
||||||
$name = (string) $name;
|
$name = (string) $name;
|
||||||
if (!isset($this->templates[$name])) {
|
if (!isset($this->templates[$name])) {
|
||||||
|
|||||||
@@ -52,7 +52,7 @@ class ChainLoader implements LoaderInterface, ExistsLoaderInterface, SourceConte
|
|||||||
|
|
||||||
public function getSource($name)
|
public function getSource($name)
|
||||||
{
|
{
|
||||||
@trigger_error(sprintf('Calling "getSource" on "%s" is deprecated since 1.27. Use getSourceContext() instead.', \get_class($this)), E_USER_DEPRECATED);
|
@trigger_error(sprintf('Calling "getSource" on "%s" is deprecated since 1.27. Use getSourceContext() instead.', static::class), E_USER_DEPRECATED);
|
||||||
|
|
||||||
$exceptions = [];
|
$exceptions = [];
|
||||||
foreach ($this->loaders as $loader) {
|
foreach ($this->loaders as $loader) {
|
||||||
|
|||||||
@@ -138,7 +138,7 @@ class FilesystemLoader implements LoaderInterface, ExistsLoaderInterface, Source
|
|||||||
|
|
||||||
public function getSource($name)
|
public function getSource($name)
|
||||||
{
|
{
|
||||||
@trigger_error(sprintf('Calling "getSource" on "%s" is deprecated since 1.27. Use getSourceContext() instead.', \get_class($this)), E_USER_DEPRECATED);
|
@trigger_error(sprintf('Calling "getSource" on "%s" is deprecated since 1.27. Use getSourceContext() instead.', static::class), E_USER_DEPRECATED);
|
||||||
|
|
||||||
if (null === ($path = $this->findTemplate($name)) || false === $path) {
|
if (null === ($path = $this->findTemplate($name)) || false === $path) {
|
||||||
return '';
|
return '';
|
||||||
@@ -180,7 +180,7 @@ class FilesystemLoader implements LoaderInterface, ExistsLoaderInterface, Source
|
|||||||
try {
|
try {
|
||||||
return null !== ($path = $this->findTemplate($name, false)) && false !== $path;
|
return null !== ($path = $this->findTemplate($name, false)) && false !== $path;
|
||||||
} catch (LoaderError $e) {
|
} catch (LoaderError $e) {
|
||||||
@trigger_error(sprintf('In %s::findTemplate(), you must accept a second argument that when set to "false" returns "false" instead of throwing an exception. Not supporting this argument is deprecated since version 1.27.', \get_class($this)), E_USER_DEPRECATED);
|
@trigger_error(sprintf('In %s::findTemplate(), you must accept a second argument that when set to "false" returns "false" instead of throwing an exception. Not supporting this argument is deprecated since version 1.27.', static::class), E_USER_DEPRECATED);
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ use Twig\Node\Expression\ConstantExpression;
|
|||||||
class EmbedNode extends IncludeNode
|
class EmbedNode extends IncludeNode
|
||||||
{
|
{
|
||||||
// we don't inject the module to avoid node visitors to traverse it twice (as it will be already visited in the main module)
|
// we don't inject the module to avoid node visitors to traverse it twice (as it will be already visited in the main module)
|
||||||
public function __construct($name, $index, AbstractExpression $variables = null, $only = false, $ignoreMissing = false, $lineno, $tag = null)
|
public function __construct($name, $index, ?AbstractExpression $variables, $only, $ignoreMissing, $lineno, $tag = null)
|
||||||
{
|
{
|
||||||
parent::__construct(new ConstantExpression('not_used', $lineno), $variables, $only, $ignoreMissing, $lineno, $tag);
|
parent::__construct(new ConstantExpression('not_used', $lineno), $variables, $only, $ignoreMissing, $lineno, $tag);
|
||||||
|
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ class BlockReferenceExpression extends AbstractExpression
|
|||||||
/**
|
/**
|
||||||
* @param Node|null $template
|
* @param Node|null $template
|
||||||
*/
|
*/
|
||||||
public function __construct(\Twig_NodeInterface $name, $template = null, $lineno, $tag = null)
|
public function __construct(\Twig_NodeInterface $name, $template, $lineno, $tag = null)
|
||||||
{
|
{
|
||||||
if (\is_bool($template)) {
|
if (\is_bool($template)) {
|
||||||
@trigger_error(sprintf('The %s method "$asString" argument is deprecated since version 1.28 and will be removed in 2.0.', __METHOD__), E_USER_DEPRECATED);
|
@trigger_error(sprintf('The %s method "$asString" argument is deprecated since version 1.28 and will be removed in 2.0.', __METHOD__), E_USER_DEPRECATED);
|
||||||
|
|||||||
@@ -254,7 +254,8 @@ abstract class CallExpression extends AbstractExpression
|
|||||||
}
|
}
|
||||||
if ($isVariadic) {
|
if ($isVariadic) {
|
||||||
$argument = end($parameters);
|
$argument = end($parameters);
|
||||||
if ($argument && $argument->isArray() && $argument->isDefaultValueAvailable() && [] === $argument->getDefaultValue()) {
|
$isArray = $argument && $argument->hasType() && 'array' === $argument->getType()->getName();
|
||||||
|
if ($isArray && $argument->isDefaultValueAvailable() && [] === $argument->getDefaultValue()) {
|
||||||
array_pop($parameters);
|
array_pop($parameters);
|
||||||
} else {
|
} else {
|
||||||
$callableName = $r->name;
|
$callableName = $r->name;
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ use Twig\Template;
|
|||||||
|
|
||||||
class GetAttrExpression extends AbstractExpression
|
class GetAttrExpression extends AbstractExpression
|
||||||
{
|
{
|
||||||
public function __construct(AbstractExpression $node, AbstractExpression $attribute, AbstractExpression $arguments = null, $type, $lineno)
|
public function __construct(AbstractExpression $node, AbstractExpression $attribute, ?AbstractExpression $arguments, string $type, int $lineno)
|
||||||
{
|
{
|
||||||
$nodes = ['node' => $node, 'attribute' => $attribute];
|
$nodes = ['node' => $node, 'attribute' => $attribute];
|
||||||
if (null !== $arguments) {
|
if (null !== $arguments) {
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ class NameExpression extends AbstractExpression
|
|||||||
if ($this->getAttribute('is_defined_test')) {
|
if ($this->getAttribute('is_defined_test')) {
|
||||||
if ($this->isSpecial()) {
|
if ($this->isSpecial()) {
|
||||||
$compiler->repr(true);
|
$compiler->repr(true);
|
||||||
} elseif (\PHP_VERSION_ID >= 700400) {
|
} elseif (\PHP_VERSION_ID >= 70400) {
|
||||||
$compiler
|
$compiler
|
||||||
->raw('array_key_exists(')
|
->raw('array_key_exists(')
|
||||||
->string($name)
|
->string($name)
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ use Twig\Node\Expression\TestExpression;
|
|||||||
*/
|
*/
|
||||||
class DefinedTest extends TestExpression
|
class DefinedTest extends TestExpression
|
||||||
{
|
{
|
||||||
public function __construct(\Twig_NodeInterface $node, $name, \Twig_NodeInterface $arguments = null, $lineno)
|
public function __construct(\Twig_NodeInterface $node, $name, ?\Twig_NodeInterface $arguments, $lineno)
|
||||||
{
|
{
|
||||||
if ($node instanceof NameExpression) {
|
if ($node instanceof NameExpression) {
|
||||||
$node->setAttribute('is_defined_test', true);
|
$node->setAttribute('is_defined_test', true);
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ use Twig\TwigTest;
|
|||||||
|
|
||||||
class TestExpression extends CallExpression
|
class TestExpression extends CallExpression
|
||||||
{
|
{
|
||||||
public function __construct(\Twig_NodeInterface $node, $name, \Twig_NodeInterface $arguments = null, $lineno)
|
public function __construct(\Twig_NodeInterface $node, $name, ?\Twig_NodeInterface $arguments, $lineno)
|
||||||
{
|
{
|
||||||
$nodes = ['node' => $node];
|
$nodes = ['node' => $node];
|
||||||
if (null !== $arguments) {
|
if (null !== $arguments) {
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ class ForNode extends Node
|
|||||||
{
|
{
|
||||||
protected $loop;
|
protected $loop;
|
||||||
|
|
||||||
public function __construct(AssignNameExpression $keyTarget, AssignNameExpression $valueTarget, AbstractExpression $seq, AbstractExpression $ifexpr = null, \Twig_NodeInterface $body, \Twig_NodeInterface $else = null, $lineno, $tag = null)
|
public function __construct(AssignNameExpression $keyTarget, AssignNameExpression $valueTarget, AbstractExpression $seq, ?AbstractExpression $ifexpr, \Twig_NodeInterface $body, ?\Twig_NodeInterface $else, $lineno, $tag = null)
|
||||||
{
|
{
|
||||||
$body = new Node([$body, $this->loop = new ForLoopNode($lineno, $tag)]);
|
$body = new Node([$body, $this->loop = new ForLoopNode($lineno, $tag)]);
|
||||||
|
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ use Twig\Compiler;
|
|||||||
*/
|
*/
|
||||||
class IfNode extends Node
|
class IfNode extends Node
|
||||||
{
|
{
|
||||||
public function __construct(\Twig_NodeInterface $tests, \Twig_NodeInterface $else = null, $lineno, $tag = null)
|
public function __construct(\Twig_NodeInterface $tests, ?\Twig_NodeInterface $else, $lineno, $tag = null)
|
||||||
{
|
{
|
||||||
$nodes = ['tests' => $tests];
|
$nodes = ['tests' => $tests];
|
||||||
if (null !== $else) {
|
if (null !== $else) {
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ use Twig\Node\Expression\AbstractExpression;
|
|||||||
*/
|
*/
|
||||||
class IncludeNode extends Node implements NodeOutputInterface
|
class IncludeNode extends Node implements NodeOutputInterface
|
||||||
{
|
{
|
||||||
public function __construct(AbstractExpression $expr, AbstractExpression $variables = null, $only = false, $ignoreMissing = false, $lineno, $tag = null)
|
public function __construct(AbstractExpression $expr, ?AbstractExpression $variables, $only, $ignoreMissing, $lineno, $tag = null)
|
||||||
{
|
{
|
||||||
$nodes = ['expr' => $expr];
|
$nodes = ['expr' => $expr];
|
||||||
if (null !== $variables) {
|
if (null !== $variables) {
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ use Twig\Source;
|
|||||||
*/
|
*/
|
||||||
class ModuleNode extends Node
|
class ModuleNode extends Node
|
||||||
{
|
{
|
||||||
public function __construct(\Twig_NodeInterface $body, AbstractExpression $parent = null, \Twig_NodeInterface $blocks, \Twig_NodeInterface $macros, \Twig_NodeInterface $traits, $embeddedTemplates, $name, $source = '')
|
public function __construct(\Twig_NodeInterface $body, ?AbstractExpression $parent, \Twig_NodeInterface $blocks, \Twig_NodeInterface $macros, \Twig_NodeInterface $traits, $embeddedTemplates, $name, $source = '')
|
||||||
{
|
{
|
||||||
if (!$name instanceof Source) {
|
if (!$name instanceof Source) {
|
||||||
@trigger_error(sprintf('Passing a string as the $name argument of %s() is deprecated since version 1.27. Pass a \Twig\Source instance instead.', __METHOD__), E_USER_DEPRECATED);
|
@trigger_error(sprintf('Passing a string as the $name argument of %s() is deprecated since version 1.27. Pass a \Twig\Source instance instead.', __METHOD__), E_USER_DEPRECATED);
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ class Node implements \Twig_NodeInterface
|
|||||||
{
|
{
|
||||||
foreach ($nodes as $name => $node) {
|
foreach ($nodes as $name => $node) {
|
||||||
if (!$node instanceof \Twig_NodeInterface) {
|
if (!$node instanceof \Twig_NodeInterface) {
|
||||||
@trigger_error(sprintf('Using "%s" for the value of node "%s" of "%s" is deprecated since version 1.25 and will be removed in 2.0.', \is_object($node) ? \get_class($node) : (null === $node ? 'null' : \gettype($node)), $name, \get_class($this)), E_USER_DEPRECATED);
|
@trigger_error(sprintf('Using "%s" for the value of node "%s" of "%s" is deprecated since version 1.25 and will be removed in 2.0.', \is_object($node) ? \get_class($node) : (null === $node ? 'null' : \gettype($node)), $name, static::class), E_USER_DEPRECATED);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$this->nodes = $nodes;
|
$this->nodes = $nodes;
|
||||||
@@ -56,7 +56,7 @@ class Node implements \Twig_NodeInterface
|
|||||||
$attributes[] = sprintf('%s: %s', $name, str_replace("\n", '', var_export($value, true)));
|
$attributes[] = sprintf('%s: %s', $name, str_replace("\n", '', var_export($value, true)));
|
||||||
}
|
}
|
||||||
|
|
||||||
$repr = [\get_class($this).'('.implode(', ', $attributes)];
|
$repr = [static::class.'('.implode(', ', $attributes)];
|
||||||
|
|
||||||
if (\count($this->nodes)) {
|
if (\count($this->nodes)) {
|
||||||
foreach ($this->nodes as $name => $node) {
|
foreach ($this->nodes as $name => $node) {
|
||||||
@@ -89,7 +89,7 @@ class Node implements \Twig_NodeInterface
|
|||||||
$dom->appendChild($xml = $dom->createElement('twig'));
|
$dom->appendChild($xml = $dom->createElement('twig'));
|
||||||
|
|
||||||
$xml->appendChild($node = $dom->createElement('node'));
|
$xml->appendChild($node = $dom->createElement('node'));
|
||||||
$node->setAttribute('class', \get_class($this));
|
$node->setAttribute('class', static::class);
|
||||||
|
|
||||||
foreach ($this->attributes as $name => $value) {
|
foreach ($this->attributes as $name => $value) {
|
||||||
$node->appendChild($attribute = $dom->createElement('attribute'));
|
$node->appendChild($attribute = $dom->createElement('attribute'));
|
||||||
@@ -153,7 +153,7 @@ class Node implements \Twig_NodeInterface
|
|||||||
public function getAttribute($name)
|
public function getAttribute($name)
|
||||||
{
|
{
|
||||||
if (!\array_key_exists($name, $this->attributes)) {
|
if (!\array_key_exists($name, $this->attributes)) {
|
||||||
throw new \LogicException(sprintf('Attribute "%s" does not exist for Node "%s".', $name, \get_class($this)));
|
throw new \LogicException(sprintf('Attribute "%s" does not exist for Node "%s".', $name, static::class));
|
||||||
}
|
}
|
||||||
|
|
||||||
return $this->attributes[$name];
|
return $this->attributes[$name];
|
||||||
@@ -187,7 +187,7 @@ class Node implements \Twig_NodeInterface
|
|||||||
public function getNode($name)
|
public function getNode($name)
|
||||||
{
|
{
|
||||||
if (!\array_key_exists($name, $this->nodes)) {
|
if (!\array_key_exists($name, $this->nodes)) {
|
||||||
throw new \LogicException(sprintf('Node "%s" does not exist for Node "%s".', $name, \get_class($this)));
|
throw new \LogicException(sprintf('Node "%s" does not exist for Node "%s".', $name, static::class));
|
||||||
}
|
}
|
||||||
|
|
||||||
return $this->nodes[$name];
|
return $this->nodes[$name];
|
||||||
@@ -196,7 +196,7 @@ class Node implements \Twig_NodeInterface
|
|||||||
public function setNode($name, $node = null)
|
public function setNode($name, $node = null)
|
||||||
{
|
{
|
||||||
if (!$node instanceof \Twig_NodeInterface) {
|
if (!$node instanceof \Twig_NodeInterface) {
|
||||||
@trigger_error(sprintf('Using "%s" for the value of node "%s" of "%s" is deprecated since version 1.25 and will be removed in 2.0.', \is_object($node) ? \get_class($node) : (null === $node ? 'null' : \gettype($node)), $name, \get_class($this)), E_USER_DEPRECATED);
|
@trigger_error(sprintf('Using "%s" for the value of node "%s" of "%s" is deprecated since version 1.25 and will be removed in 2.0.', \is_object($node) ? \get_class($node) : (null === $node ? 'null' : \gettype($node)), $name, static::class), E_USER_DEPRECATED);
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->nodes[$name] = $node;
|
$this->nodes[$name] = $node;
|
||||||
@@ -236,7 +236,7 @@ class Node implements \Twig_NodeInterface
|
|||||||
{
|
{
|
||||||
$this->sourceContext = $source;
|
$this->sourceContext = $source;
|
||||||
foreach ($this->nodes as $node) {
|
foreach ($this->nodes as $node) {
|
||||||
if ($node instanceof Node) {
|
if ($node instanceof self) {
|
||||||
$node->setSourceContext($source);
|
$node->setSourceContext($source);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -34,12 +34,19 @@ class SandboxNode extends Node
|
|||||||
->write("\$this->sandbox->enableSandbox();\n")
|
->write("\$this->sandbox->enableSandbox();\n")
|
||||||
->outdent()
|
->outdent()
|
||||||
->write("}\n")
|
->write("}\n")
|
||||||
|
->write("try {\n")
|
||||||
|
->indent()
|
||||||
->subcompile($this->getNode('body'))
|
->subcompile($this->getNode('body'))
|
||||||
|
->outdent()
|
||||||
|
->write("} finally {\n")
|
||||||
|
->indent()
|
||||||
->write("if (!\$alreadySandboxed) {\n")
|
->write("if (!\$alreadySandboxed) {\n")
|
||||||
->indent()
|
->indent()
|
||||||
->write("\$this->sandbox->disableSandbox();\n")
|
->write("\$this->sandbox->disableSandbox();\n")
|
||||||
->outdent()
|
->outdent()
|
||||||
->write("}\n")
|
->write("}\n")
|
||||||
|
->outdent()
|
||||||
|
->write("}\n")
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ use Twig\Compiler;
|
|||||||
*/
|
*/
|
||||||
class WithNode extends Node
|
class WithNode extends Node
|
||||||
{
|
{
|
||||||
public function __construct(Node $body, Node $variables = null, $only = false, $lineno, $tag = null)
|
public function __construct(Node $body, ?Node $variables, $only, $lineno, $tag = null)
|
||||||
{
|
{
|
||||||
$nodes = ['body' => $body];
|
$nodes = ['body' => $body];
|
||||||
if (null !== $variables) {
|
if (null !== $variables) {
|
||||||
|
|||||||
@@ -111,8 +111,6 @@ abstract class Template implements \Twig_TemplateInterface
|
|||||||
* This method is for internal use only and should never be called
|
* This method is for internal use only and should never be called
|
||||||
* directly.
|
* directly.
|
||||||
*
|
*
|
||||||
* @param array $context
|
|
||||||
*
|
|
||||||
* @return \Twig_TemplateInterface|TemplateWrapper|false The parent template or false if there is no parent
|
* @return \Twig_TemplateInterface|TemplateWrapper|false The parent template or false if there is no parent
|
||||||
*
|
*
|
||||||
* @internal
|
* @internal
|
||||||
@@ -366,7 +364,7 @@ abstract class Template implements \Twig_TemplateInterface
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ($template === $this->getTemplateName()) {
|
if ($template === $this->getTemplateName()) {
|
||||||
$class = \get_class($this);
|
$class = static::class;
|
||||||
if (false !== $pos = strrpos($class, '___', -1)) {
|
if (false !== $pos = strrpos($class, '___', -1)) {
|
||||||
$class = substr($class, 0, $pos);
|
$class = substr($class, 0, $pos);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ use Twig\Token;
|
|||||||
*
|
*
|
||||||
* {% apply upper %}
|
* {% apply upper %}
|
||||||
* This text becomes uppercase
|
* This text becomes uppercase
|
||||||
* {% endapplys %}
|
* {% endapply %}
|
||||||
*/
|
*/
|
||||||
final class ApplyTokenParser extends AbstractTokenParser
|
final class ApplyTokenParser extends AbstractTokenParser
|
||||||
{
|
{
|
||||||
|
|||||||
13
setup/permissions-test-folder/.htaccess
Normal file
13
setup/permissions-test-folder/.htaccess
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
# Apache 2.4
|
||||||
|
<ifModule mod_authz_core.c>
|
||||||
|
Require all denied
|
||||||
|
</ifModule>
|
||||||
|
|
||||||
|
# Apache 2.2
|
||||||
|
<ifModule !mod_authz_core.c>
|
||||||
|
deny from all
|
||||||
|
Satisfy All
|
||||||
|
</ifModule>
|
||||||
|
|
||||||
|
# Apache 2.2 and 2.4
|
||||||
|
IndexIgnore *
|
||||||
13
setup/permissions-test-folder/web.config
Normal file
13
setup/permissions-test-folder/web.config
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<configuration>
|
||||||
|
<system.webServer>
|
||||||
|
<security>
|
||||||
|
<requestFiltering>
|
||||||
|
<fileExtensions applyToWebDAV="false" allowUnlisted="false"></fileExtensions>
|
||||||
|
</requestFiltering>
|
||||||
|
<authorization>
|
||||||
|
<deny users="*" /> <!-- Denies all users -->
|
||||||
|
</authorization>
|
||||||
|
</security>
|
||||||
|
</system.webServer>
|
||||||
|
</configuration>
|
||||||
@@ -53,4 +53,17 @@ function ExecuteStep(sStep)
|
|||||||
} );
|
} );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function CheckDirectoryConfFilesPermissions(sWikiVersion){
|
||||||
|
$.ajax('permissions-test-folder/permissions-test-subfolder/permissions-test-file',
|
||||||
|
{
|
||||||
|
statusCode: {
|
||||||
|
200: function() {
|
||||||
|
$('#details').prepend('<div class="message message-warning"><span class="message-title">Security issue:</span> iTop is bundled with directory-level configuration files. You must check that those files will be read by your web server (eg. ' +
|
||||||
|
'AllowOverride directive should be set to <code>All</code> for Apache HTTP Server) <a href="https://www.itophub.io/wiki/page?id='+sWikiVersion+'%3Ainstall%3Asecurity#secure_critical_directories_access" target="_blank">see documentation</a>.</div>');
|
||||||
|
$('<span class="text-warning"> and 1 Security issue</span>').insertBefore('h2.message button:first');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
CombodoTooltip.InitAllNonInstantiatedTooltips();
|
CombodoTooltip.InitAllNonInstantiatedTooltips();
|
||||||
@@ -165,6 +165,7 @@ HTML
|
|||||||
$oPage->p('Sorry, the installation cannot continue. Please fix the errors and reload this page to launch the installation again.');
|
$oPage->p('Sorry, the installation cannot continue. Please fix the errors and reload this page to launch the installation again.');
|
||||||
$oPage->p('<button type="button" onclick="window.location.reload()">Reload</button>');
|
$oPage->p('<button type="button" onclick="window.location.reload()">Reload</button>');
|
||||||
}
|
}
|
||||||
|
$oPage->add_ready_script('CheckDirectoryConfFilesPermissions("'.utils::GetItopVersionWikiSyntax().'")');
|
||||||
}
|
}
|
||||||
|
|
||||||
public function CanMoveForward()
|
public function CanMoveForward()
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ namespace Combodo\iTop\Application\UI\Base\Component\FieldBadge;
|
|||||||
|
|
||||||
use Combodo\iTop\Application\UI\Base\AbstractUIBlockFactory;
|
use Combodo\iTop\Application\UI\Base\AbstractUIBlockFactory;
|
||||||
use ormStyle;
|
use ormStyle;
|
||||||
|
use utils;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class FieldBadgeUIBlockFactory
|
* Class FieldBadgeUIBlockFactory
|
||||||
@@ -36,6 +37,10 @@ class FieldBadgeUIBlockFactory extends AbstractUIBlockFactory
|
|||||||
{
|
{
|
||||||
$oBadge = null;
|
$oBadge = null;
|
||||||
$sHtml = '';
|
$sHtml = '';
|
||||||
|
|
||||||
|
// N°5318 - Sanitize value manually as this UIBlock is not using a proper TWIG template 😥
|
||||||
|
$sValueForHtml = utils::EscapeHtml($sValue);
|
||||||
|
|
||||||
if ($oStyle) {
|
if ($oStyle) {
|
||||||
$sStyleClass = $oStyle->GetStyleClass();
|
$sStyleClass = $oStyle->GetStyleClass();
|
||||||
$sPrimaryColor = $oStyle->GetMainColor();
|
$sPrimaryColor = $oStyle->GetMainColor();
|
||||||
@@ -47,12 +52,12 @@ class FieldBadgeUIBlockFactory extends AbstractUIBlockFactory
|
|||||||
if (!is_null($sDecorationClasses) && !empty($sDecorationClasses)) {
|
if (!is_null($sDecorationClasses) && !empty($sDecorationClasses)) {
|
||||||
$sHtml .= "<span class=\"ibo-field-badge--decoration\"><i class=\"$sDecorationClasses\"></i></span>";
|
$sHtml .= "<span class=\"ibo-field-badge--decoration\"><i class=\"$sDecorationClasses\"></i></span>";
|
||||||
}
|
}
|
||||||
$sHtml .= "<span class=\"ibo-field-badge--label\">$sValue</span>";
|
$sHtml .= "<span class=\"ibo-field-badge--label\">$sValueForHtml</span>";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!$oBadge) {
|
if (!$oBadge) {
|
||||||
$oBadge = new FieldBadge();
|
$oBadge = new FieldBadge();
|
||||||
$sHtml .= "<span>$sValue</span>";
|
$sHtml .= "<span>$sValueForHtml</span>";
|
||||||
}
|
}
|
||||||
$oBadge->AddHtml($sHtml);
|
$oBadge->AddHtml($sHtml);
|
||||||
return $oBadge;
|
return $oBadge;
|
||||||
|
|||||||
@@ -26,6 +26,7 @@ use Combodo\iTop\Test\UnitTest\ItopDataTestCase;
|
|||||||
*
|
*
|
||||||
* @covers utils
|
* @covers utils
|
||||||
* @group sampleDataNeeded
|
* @group sampleDataNeeded
|
||||||
|
* @group defaultProfiles
|
||||||
*/
|
*/
|
||||||
class privUITransactionFileTest extends ItopDataTestCase
|
class privUITransactionFileTest extends ItopDataTestCase
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ use MetaModel;
|
|||||||
* @backupGlobals disabled
|
* @backupGlobals disabled
|
||||||
*
|
*
|
||||||
* @group itopRequestMgmt
|
* @group itopRequestMgmt
|
||||||
|
* @group specificOrgInSampleData
|
||||||
* Class TransactionsTest
|
* Class TransactionsTest
|
||||||
*
|
*
|
||||||
* @package Combodo\iTop\Test\UnitTest\Core
|
* @package Combodo\iTop\Test\UnitTest\Core
|
||||||
@@ -248,4 +249,4 @@ class TransactionsTest extends ItopTestCase
|
|||||||
"History 13" => ['iFailAt' => 15, 'bIsModified' => true],
|
"History 13" => ['iFailAt' => 15, 'bIsModified' => true],
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -528,6 +528,7 @@ class DBSearchTest extends ItopDataTestCase
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @dataProvider GetFirstResultProvider
|
* @dataProvider GetFirstResultProvider
|
||||||
|
* @group specificOrgInSampleData
|
||||||
*
|
*
|
||||||
* @param string $sOql query to test
|
* @param string $sOql query to test
|
||||||
* @param bool $bMustHaveOneResultMax arg passed to the tested function
|
* @param bool $bMustHaveOneResultMax arg passed to the tested function
|
||||||
|
|||||||
@@ -12,8 +12,9 @@ use utils;
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @group getSelectFilterTest
|
* @group getSelectFilterTest
|
||||||
* @group sampleDataNeeded
|
* @group sampleDataNeeded
|
||||||
|
* @group specificOrgInSampleData
|
||||||
* Class GetSelectFilterTest
|
* Class GetSelectFilterTest
|
||||||
*
|
*
|
||||||
* @runTestsInSeparateProcesses
|
* @runTestsInSeparateProcesses
|
||||||
@@ -35,9 +36,9 @@ class GetSelectFilterTest extends ItopDataTestCase
|
|||||||
|
|
||||||
$oRestProfile = MetaModel::GetObjectFromOQL("SELECT URP_Profiles WHERE name = :name", array('name' => 'REST Services User'), true);
|
$oRestProfile = MetaModel::GetObjectFromOQL("SELECT URP_Profiles WHERE name = :name", array('name' => 'REST Services User'), true);
|
||||||
$oAdminProfile = MetaModel::GetObjectFromOQL("SELECT URP_Profiles WHERE name = :name", array('name' => 'Administrator'), true);
|
$oAdminProfile = MetaModel::GetObjectFromOQL("SELECT URP_Profiles WHERE name = :name", array('name' => 'Administrator'), true);
|
||||||
|
|
||||||
$this->sLogin = "getselectfilter-user-" . date('dmYHis');
|
$this->sLogin = "getselectfilter-user-" . date('dmYHis');
|
||||||
|
|
||||||
// Ensure that we have at least one administrator account
|
// Ensure that we have at least one administrator account
|
||||||
if (is_object($oRestProfile) && is_object($oAdminProfile))
|
if (is_object($oRestProfile) && is_object($oAdminProfile))
|
||||||
{
|
{
|
||||||
@@ -45,7 +46,7 @@ class GetSelectFilterTest extends ItopDataTestCase
|
|||||||
$this->AddProfileToUser($this->oUser, $oAdminProfile->GetKey());
|
$this->AddProfileToUser($this->oUser, $oAdminProfile->GetKey());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testGetSelectFilter()
|
public function testGetSelectFilter()
|
||||||
{
|
{
|
||||||
$oUserRights = new UserRightsProfile();
|
$oUserRights = new UserRightsProfile();
|
||||||
@@ -64,9 +65,9 @@ class GetSelectFilterTest extends ItopDataTestCase
|
|||||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
// Default behavior: Administrators, Administrator profile and URP_UserProfile related to administrators are visible
|
// Default behavior: Administrators, Administrator profile and URP_UserProfile related to administrators are visible
|
||||||
// via GetSelectFilter
|
// via GetSelectFilter
|
||||||
|
|
||||||
$oConfig->Set('security.hide_administrators', false);
|
$oConfig->Set('security.hide_administrators', false);
|
||||||
|
|
||||||
$oFilterProfiles = $oUserRights->GetSelectFilter($this->oUser, 'URP_Profiles');
|
$oFilterProfiles = $oUserRights->GetSelectFilter($this->oUser, 'URP_Profiles');
|
||||||
if ($oFilterProfiles === true)
|
if ($oFilterProfiles === true)
|
||||||
{
|
{
|
||||||
@@ -83,7 +84,7 @@ class GetSelectFilterTest extends ItopDataTestCase
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
$this->assertEquals($bAdminProfileFound, true);
|
$this->assertEquals($bAdminProfileFound, true);
|
||||||
|
|
||||||
foreach($aUserLocalAncestors as $sUserClass)
|
foreach($aUserLocalAncestors as $sUserClass)
|
||||||
{
|
{
|
||||||
$bAdminUserFound = false;
|
$bAdminUserFound = false;
|
||||||
@@ -103,7 +104,7 @@ class GetSelectFilterTest extends ItopDataTestCase
|
|||||||
}
|
}
|
||||||
$this->assertEquals($bAdminUserFound, true);
|
$this->assertEquals($bAdminUserFound, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
$oFilterLnkProfiles = $oUserRights->GetSelectFilter($this->oUser, 'URP_UserProfile');
|
$oFilterLnkProfiles = $oUserRights->GetSelectFilter($this->oUser, 'URP_UserProfile');
|
||||||
if ($oFilterLnkProfiles === true)
|
if ($oFilterLnkProfiles === true)
|
||||||
{
|
{
|
||||||
@@ -160,6 +161,6 @@ class GetSelectFilterTest extends ItopDataTestCase
|
|||||||
$this->assertNotEquals($oLnk->Get('userid'), $this->oUser->GetKey());
|
$this->assertNotEquals($oLnk->Get('userid'), $this->oUser->GetKey());
|
||||||
$this->assertNotEquals($oLnk->Get('profileid'), 1);
|
$this->assertNotEquals($oLnk->Get('profileid'), 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ class OQLParserTest extends ItopDataTestCase
|
|||||||
* @group iTopChangeMgt
|
* @group iTopChangeMgt
|
||||||
* @group itopConfigMgmt
|
* @group itopConfigMgmt
|
||||||
* @group itopRequestMgmt
|
* @group itopRequestMgmt
|
||||||
|
* @group specificOrgInSampleData
|
||||||
* @dataProvider NestedQueryProvider
|
* @dataProvider NestedQueryProvider
|
||||||
*
|
*
|
||||||
* @param $sQuery
|
* @param $sQuery
|
||||||
|
|||||||
@@ -40,6 +40,7 @@ use utils;
|
|||||||
/**
|
/**
|
||||||
* @group itopRequestMgmt
|
* @group itopRequestMgmt
|
||||||
* @group userRights
|
* @group userRights
|
||||||
|
* @group defaultProfiles
|
||||||
*
|
*
|
||||||
* @runTestsInSeparateProcesses
|
* @runTestsInSeparateProcesses
|
||||||
* @preserveGlobalState disabled
|
* @preserveGlobalState disabled
|
||||||
@@ -486,7 +487,7 @@ class UserRightsTest extends ItopDataTestCase
|
|||||||
// logout
|
// logout
|
||||||
$_SESSION = [];
|
$_SESSION = [];
|
||||||
}
|
}
|
||||||
|
|
||||||
public function NonAdminCanListOwnProfilesProvider(): array
|
public function NonAdminCanListOwnProfilesProvider(): array
|
||||||
{
|
{
|
||||||
return [
|
return [
|
||||||
@@ -495,7 +496,7 @@ class UserRightsTest extends ItopDataTestCase
|
|||||||
];
|
];
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
*@dataProvider NonAdminCannotListAdminProfilesProvider
|
*@dataProvider NonAdminCannotListAdminProfilesProvider
|
||||||
*/
|
*/
|
||||||
public function testNonAdminCannotListAdminProfiles($bHideAdministrators, $iExpectedCount)
|
public function testNonAdminCannotListAdminProfiles($bHideAdministrators, $iExpectedCount)
|
||||||
{
|
{
|
||||||
@@ -518,7 +519,7 @@ class UserRightsTest extends ItopDataTestCase
|
|||||||
// logout
|
// logout
|
||||||
$_SESSION = [];
|
$_SESSION = [];
|
||||||
}
|
}
|
||||||
|
|
||||||
public function NonAdminCannotListAdminProfilesProvider(): array
|
public function NonAdminCannotListAdminProfilesProvider(): array
|
||||||
{
|
{
|
||||||
return [
|
return [
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ use utils;
|
|||||||
*
|
*
|
||||||
* @package Combodo\iTop\Test\UnitTest\Synchro
|
* @package Combodo\iTop\Test\UnitTest\Synchro
|
||||||
* @group dataSynchro
|
* @group dataSynchro
|
||||||
|
* @group defaultProfiles
|
||||||
*
|
*
|
||||||
* @runTestsInSeparateProcesses
|
* @runTestsInSeparateProcesses
|
||||||
* @preserveGlobalState disabled
|
* @preserveGlobalState disabled
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ use Exception;
|
|||||||
/**
|
/**
|
||||||
* @group itopRequestMgmt
|
* @group itopRequestMgmt
|
||||||
* @group restApi
|
* @group restApi
|
||||||
|
* @group defaultProfiles
|
||||||
*
|
*
|
||||||
* @runTestsInSeparateProcesses
|
* @runTestsInSeparateProcesses
|
||||||
* @preserveGlobalState disabled
|
* @preserveGlobalState disabled
|
||||||
|
|||||||
Reference in New Issue
Block a user