Compare commits

..

8 Commits

93 changed files with 441 additions and 319 deletions

View File

@@ -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";
} }

View File

@@ -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>';
} }

View File

@@ -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';

View File

@@ -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
View File

@@ -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": [

View File

@@ -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()
{ {

View File

@@ -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
// //

View File

@@ -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
// //

View File

@@ -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
// //

View File

@@ -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
// //

View File

@@ -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
// //

View File

@@ -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
// //

View File

@@ -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
// //

View File

@@ -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
// //

View File

@@ -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
// //

View File

@@ -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
// //

View File

@@ -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
// //

View File

@@ -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
// //

View File

@@ -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
// //

View File

@@ -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
// //

View File

@@ -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
// //

View File

@@ -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
// //

View File

@@ -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
// //

View File

@@ -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
// //

View File

@@ -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
// //

View File

@@ -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
// //

View File

@@ -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
// //

View File

@@ -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
// //

View File

@@ -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
// //

View File

@@ -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
// //

View File

@@ -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',

View File

@@ -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',

View File

@@ -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
// //

View File

@@ -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
// //

View File

@@ -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
// //

View File

@@ -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
// //

View File

@@ -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
// //

View File

@@ -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
// //

View File

@@ -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
// //

View File

@@ -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
// //

View File

@@ -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
// //

View File

@@ -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
// //

View File

@@ -3,7 +3,7 @@
SetupWebPage::AddModule( SetupWebPage::AddModule(
__FILE__, __FILE__,
'itop-tickets/3.0.1', 'itop-tickets/3.0.2',
array( array(
// Identification // Identification
// //

View File

@@ -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
// //

View File

@@ -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
// //

View File

@@ -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>

View File

@@ -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();
/** /**

View File

@@ -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"
} }
], ],

View File

@@ -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(

View File

@@ -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

View File

@@ -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

View File

@@ -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.

View File

@@ -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"
} }
} }
} }

View File

@@ -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;
} }

View File

@@ -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;

View File

@@ -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);
} }

View File

@@ -65,7 +65,7 @@ abstract class AbstractExtension implements ExtensionInterface
*/ */
public function getName() public function getName()
{ {
return \get_class($this); return static::class;
} }
} }

View File

@@ -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);
} }

View File

@@ -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()

View File

@@ -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

View File

@@ -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])) {

View File

@@ -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) {

View File

@@ -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;
} }

View File

@@ -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);

View File

@@ -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);

View File

@@ -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;

View File

@@ -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) {

View File

@@ -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)

View File

@@ -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);

View File

@@ -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) {

View File

@@ -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)]);

View File

@@ -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) {

View File

@@ -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) {

View File

@@ -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);

View File

@@ -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);
} }
} }

View File

@@ -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")
; ;
} }
} }

View File

@@ -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) {

View File

@@ -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);
} }

View File

@@ -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
{ {

View 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 *

View 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>

View File

@@ -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();

View File

@@ -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()

View File

@@ -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;

View File

@@ -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
{ {

View File

@@ -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],
]; ];
} }
} }

View File

@@ -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

View File

@@ -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);
} }
} }
} }

View File

@@ -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

View File

@@ -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 [

View File

@@ -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

View File

@@ -9,6 +9,7 @@ use Exception;
/** /**
* @group itopRequestMgmt * @group itopRequestMgmt
* @group restApi * @group restApi
* @group defaultProfiles
* *
* @runTestsInSeparateProcesses * @runTestsInSeparateProcesses
* @preserveGlobalState disabled * @preserveGlobalState disabled