mirror of
https://github.com/Combodo/iTop.git
synced 2026-02-18 09:54:11 +01:00
Compare commits
8 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6e3ff0e429 | ||
|
|
14facb4d6c | ||
|
|
f923ac879f | ||
|
|
0b46ab9e48 | ||
|
|
bdf11e32a7 | ||
|
|
1441b8a1d2 | ||
|
|
b1bc2cec1b | ||
|
|
e280f99996 |
@@ -5121,7 +5121,7 @@ HTML
|
||||
if ($sAttCode != MetaModel::GetStateAttributeCode($sClass) || !MetaModel::HasLifecycle($sClass)) {
|
||||
$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";
|
||||
}
|
||||
|
||||
@@ -44,15 +44,15 @@ class CoreCannotSaveObjectException extends CoreException
|
||||
public function getHtmlMessage()
|
||||
{
|
||||
$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) {
|
||||
$sIssue = reset($this->aIssues);
|
||||
$sContent .= " <span>{$sIssue}</span>";
|
||||
$sContent .= " <span>".utils::HtmlEntities($sIssue)."</span>";
|
||||
} else {
|
||||
$sContent .= '<ul>';
|
||||
foreach ($this->aIssues as $sError) {
|
||||
$sContent .= "<li>$sError</li>";
|
||||
$sContent .= "<li>".utils::HtmlEntities($sError)."</li>";
|
||||
}
|
||||
$sContent .= '</ul>';
|
||||
}
|
||||
|
||||
@@ -23,6 +23,6 @@ define('ITOP_DESIGN_LATEST_VERSION', '3.0');
|
||||
* @used-by utils::GetItopVersionWikiSyntax()
|
||||
* @used-by iTopModulesPhpVersionIntegrationTest
|
||||
*/
|
||||
define('ITOP_CORE_VERSION', '3.0.1');
|
||||
define('ITOP_CORE_VERSION', '3.0.2');
|
||||
|
||||
require_once APPROOT.'bootstrap.inc.php';
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
"symfony/twig-bundle": "~3.4.47",
|
||||
"symfony/yaml": "~3.4.47",
|
||||
"thenetworg/oauth2-azure": "^2.0",
|
||||
"twig/twig": "~1.42.5"
|
||||
"twig/twig": "~1.43.1"
|
||||
},
|
||||
"require-dev": {
|
||||
"symfony/stopwatch": "~3.4.47",
|
||||
|
||||
30
composer.lock
generated
30
composer.lock
generated
@@ -4,7 +4,7 @@
|
||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||
"This file is @generated automatically"
|
||||
],
|
||||
"content-hash": "b3cdced77dc5a1160c12aadcafd9d7da",
|
||||
"content-hash": "86ca84263f7f271dfc10e5e63bd02385",
|
||||
"packages": [
|
||||
{
|
||||
"name": "combodo/tcpdf",
|
||||
@@ -4444,30 +4444,30 @@
|
||||
},
|
||||
{
|
||||
"name": "twig/twig",
|
||||
"version": "v1.42.5",
|
||||
"version": "v1.43.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/twigphp/Twig.git",
|
||||
"reference": "87b2ea9d8f6fd014d0621ca089bb1b3769ea3f8e"
|
||||
"reference": "2311602f6a208715252febe682fa7c38e56a3373"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/twigphp/Twig/zipball/87b2ea9d8f6fd014d0621ca089bb1b3769ea3f8e",
|
||||
"reference": "87b2ea9d8f6fd014d0621ca089bb1b3769ea3f8e",
|
||||
"url": "https://api.github.com/repos/twigphp/Twig/zipball/2311602f6a208715252febe682fa7c38e56a3373",
|
||||
"reference": "2311602f6a208715252febe682fa7c38e56a3373",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=5.5.0",
|
||||
"php": ">=7.1.3",
|
||||
"symfony/polyfill-ctype": "^1.8"
|
||||
},
|
||||
"require-dev": {
|
||||
"psr/container": "^1.0",
|
||||
"symfony/phpunit-bridge": "^4.4|^5.0"
|
||||
"symfony/phpunit-bridge": "^4.4.9|^5.0.9"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "1.42-dev"
|
||||
"dev-master": "1.43-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
@@ -4506,9 +4506,19 @@
|
||||
],
|
||||
"support": {
|
||||
"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": [
|
||||
|
||||
@@ -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()
|
||||
{
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
|
||||
SetupWebPage::AddModule(
|
||||
__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(
|
||||
// Identification
|
||||
//
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
|
||||
SetupWebPage::AddModule(
|
||||
__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(
|
||||
// Identification
|
||||
//
|
||||
|
||||
@@ -9,7 +9,7 @@ if (function_exists('ldap_connect'))
|
||||
|
||||
SetupWebPage::AddModule(
|
||||
__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(
|
||||
// Identification
|
||||
//
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
|
||||
SetupWebPage::AddModule(
|
||||
__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(
|
||||
// Identification
|
||||
//
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
|
||||
SetupWebPage::AddModule(
|
||||
__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(
|
||||
// Identification
|
||||
//
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
/** @noinspection PhpUnhandledExceptionInspection */
|
||||
SetupWebPage::AddModule(
|
||||
__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(
|
||||
// Identification
|
||||
//
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
|
||||
SetupWebPage::AddModule(
|
||||
__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(
|
||||
// Identification
|
||||
//
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
|
||||
SetupWebPage::AddModule(
|
||||
__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(
|
||||
// Identification
|
||||
//
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
|
||||
SetupWebPage::AddModule(
|
||||
__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(
|
||||
// Identification
|
||||
//
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
|
||||
SetupWebPage::AddModule(
|
||||
__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(
|
||||
// Identification
|
||||
//
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
|
||||
SetupWebPage::AddModule(
|
||||
__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(
|
||||
// Identification
|
||||
//
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
|
||||
SetupWebPage::AddModule(
|
||||
__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(
|
||||
// Identification
|
||||
//
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
|
||||
SetupWebPage::AddModule(
|
||||
__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(
|
||||
// Identification
|
||||
//
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
|
||||
SetupWebPage::AddModule(
|
||||
__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(
|
||||
// Identification
|
||||
//
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
/** @noinspection PhpUnhandledExceptionInspection */
|
||||
SetupWebPage::AddModule(
|
||||
__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(
|
||||
// Identification
|
||||
//
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
|
||||
SetupWebPage::AddModule(
|
||||
__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(
|
||||
// Identification
|
||||
//
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
|
||||
SetupWebPage::AddModule(
|
||||
__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(
|
||||
// Identification
|
||||
//
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
|
||||
SetupWebPage::AddModule(
|
||||
__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(
|
||||
// Identification
|
||||
//
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
/** @noinspection PhpUnhandledExceptionInspection */
|
||||
SetupWebPage::AddModule(
|
||||
__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(
|
||||
// Identification
|
||||
//
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
|
||||
SetupWebPage::AddModule(
|
||||
__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(
|
||||
// Identification
|
||||
//
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
|
||||
SetupWebPage::AddModule(
|
||||
__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(
|
||||
// Identification
|
||||
//
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
|
||||
SetupWebPage::AddModule(
|
||||
__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(
|
||||
// Identification
|
||||
//
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
|
||||
SetupWebPage::AddModule(
|
||||
__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(
|
||||
// Identification
|
||||
//
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
|
||||
SetupWebPage::AddModule(
|
||||
__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(
|
||||
// Identification
|
||||
//
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
/** @noinspection PhpUnhandledExceptionInspection */
|
||||
SetupWebPage::AddModule(
|
||||
__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
|
||||
'label' => 'Portal Development Library',
|
||||
'category' => 'Portal',
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
/** @noinspection PhpUnhandledExceptionInspection */
|
||||
SetupWebPage::AddModule(
|
||||
__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
|
||||
'label' => 'Enhanced Customer Portal',
|
||||
'category' => 'Portal',
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
|
||||
SetupWebPage::AddModule(
|
||||
__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(
|
||||
// Identification
|
||||
//
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
|
||||
SetupWebPage::AddModule(
|
||||
__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(
|
||||
// Identification
|
||||
//
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
|
||||
SetupWebPage::AddModule(
|
||||
__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(
|
||||
// Identification
|
||||
//
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
|
||||
SetupWebPage::AddModule(
|
||||
__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(
|
||||
// Identification
|
||||
//
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
|
||||
SetupWebPage::AddModule(
|
||||
__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(
|
||||
// Identification
|
||||
//
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
|
||||
SetupWebPage::AddModule(
|
||||
__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(
|
||||
// Identification
|
||||
//
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
|
||||
SetupWebPage::AddModule(
|
||||
__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(
|
||||
// Identification
|
||||
//
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
|
||||
SetupWebPage::AddModule(
|
||||
__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(
|
||||
// Identification
|
||||
//
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
|
||||
SetupWebPage::AddModule(
|
||||
__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(
|
||||
// Identification
|
||||
//
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
|
||||
SetupWebPage::AddModule(
|
||||
__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(
|
||||
// Identification
|
||||
//
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
|
||||
SetupWebPage::AddModule(
|
||||
__FILE__,
|
||||
'itop-tickets/3.0.1',
|
||||
'itop-tickets/3.0.2',
|
||||
array(
|
||||
// Identification
|
||||
//
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
|
||||
SetupWebPage::AddModule(
|
||||
__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(
|
||||
// Identification
|
||||
//
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
|
||||
SetupWebPage::AddModule(
|
||||
__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(
|
||||
// Identification
|
||||
//
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<information>
|
||||
<version>3.0.1</version>
|
||||
<version>3.0.2</version>
|
||||
</information>
|
||||
|
||||
@@ -24,8 +24,21 @@ use Composer\Semver\VersionParser;
|
||||
*/
|
||||
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;
|
||||
|
||||
/**
|
||||
* @var bool|null
|
||||
*/
|
||||
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();
|
||||
|
||||
/**
|
||||
|
||||
@@ -4848,32 +4848,32 @@
|
||||
},
|
||||
{
|
||||
"name": "twig/twig",
|
||||
"version": "v1.42.5",
|
||||
"version_normalized": "1.42.5.0",
|
||||
"version": "v1.43.1",
|
||||
"version_normalized": "1.43.1.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/twigphp/Twig.git",
|
||||
"reference": "87b2ea9d8f6fd014d0621ca089bb1b3769ea3f8e"
|
||||
"reference": "2311602f6a208715252febe682fa7c38e56a3373"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/twigphp/Twig/zipball/87b2ea9d8f6fd014d0621ca089bb1b3769ea3f8e",
|
||||
"reference": "87b2ea9d8f6fd014d0621ca089bb1b3769ea3f8e",
|
||||
"url": "https://api.github.com/repos/twigphp/Twig/zipball/2311602f6a208715252febe682fa7c38e56a3373",
|
||||
"reference": "2311602f6a208715252febe682fa7c38e56a3373",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=5.5.0",
|
||||
"php": ">=7.1.3",
|
||||
"symfony/polyfill-ctype": "^1.8"
|
||||
},
|
||||
"require-dev": {
|
||||
"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",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "1.42-dev"
|
||||
"dev-master": "1.43-dev"
|
||||
}
|
||||
},
|
||||
"installation-source": "dist",
|
||||
@@ -4913,8 +4913,18 @@
|
||||
],
|
||||
"support": {
|
||||
"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"
|
||||
}
|
||||
],
|
||||
|
||||
@@ -1,22 +1,22 @@
|
||||
<?php return array(
|
||||
'root' => array(
|
||||
'pretty_version' => 'dev-develop',
|
||||
'version' => 'dev-develop',
|
||||
'pretty_version' => '3.0.2-rc1',
|
||||
'version' => '3.0.2.0-RC1',
|
||||
'type' => 'project',
|
||||
'install_path' => __DIR__ . '/../../',
|
||||
'aliases' => array(),
|
||||
'reference' => 'e4343ded01403f5b8b0499190ab60b004175bb19',
|
||||
'reference' => 'c5d5379c492059a80eb72cc1dab148dd6e82705f',
|
||||
'name' => 'combodo/itop',
|
||||
'dev' => true,
|
||||
),
|
||||
'versions' => array(
|
||||
'combodo/itop' => array(
|
||||
'pretty_version' => 'dev-develop',
|
||||
'version' => 'dev-develop',
|
||||
'pretty_version' => '3.0.2-rc1',
|
||||
'version' => '3.0.2.0-RC1',
|
||||
'type' => 'project',
|
||||
'install_path' => __DIR__ . '/../../',
|
||||
'aliases' => array(),
|
||||
'reference' => 'e4343ded01403f5b8b0499190ab60b004175bb19',
|
||||
'reference' => 'c5d5379c492059a80eb72cc1dab148dd6e82705f',
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'combodo/tcpdf' => array(
|
||||
@@ -654,12 +654,12 @@
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'twig/twig' => array(
|
||||
'pretty_version' => 'v1.42.5',
|
||||
'version' => '1.42.5.0',
|
||||
'pretty_version' => 'v1.43.1',
|
||||
'version' => '1.43.1.0',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../twig/twig',
|
||||
'aliases' => array(),
|
||||
'reference' => '87b2ea9d8f6fd014d0621ca089bb1b3769ea3f8e',
|
||||
'reference' => '2311602f6a208715252febe682fa7c38e56a3373',
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'zendframework/zend-loader' => array(
|
||||
|
||||
@@ -1,46 +1,36 @@
|
||||
language: php
|
||||
|
||||
dist: trusty
|
||||
|
||||
sudo: false
|
||||
dist: xenial
|
||||
|
||||
cache:
|
||||
directories:
|
||||
- vendor
|
||||
- $HOME/.composer/cache/files
|
||||
|
||||
|
||||
env:
|
||||
global:
|
||||
- TWIG_EXT=no
|
||||
- SYMFONY_PHPUNIT_REMOVE_RETURN_TYPEHINT=1
|
||||
- SYMFONY_PHPUNIT_DISABLE_RESULT_CACHE=1
|
||||
|
||||
before_install:
|
||||
- phpenv config-rm xdebug.ini || return 0
|
||||
- echo memory_limit = -1 >> ~/.phpenv/versions/$TRAVIS_PHP_VERSION/etc/conf.d/travis.ini
|
||||
|
||||
install:
|
||||
- travis_retry composer install
|
||||
- export PHPUNIT=$(readlink -f ./vendor/bin/simple-phpunit)
|
||||
- $PHPUNIT install
|
||||
|
||||
before_script:
|
||||
- if [ "$TWIG_EXT" == "yes" ]; then sh -c "cd ext/twig && phpize && ./configure --enable-twig && make && make install"; fi
|
||||
- if [ "$TWIG_EXT" == "yes" ]; then echo "extension=twig.so" >> `php --ini | grep "Loaded Configuration" | sed -e "s|.*:\s*||"`; fi
|
||||
|
||||
script: ./vendor/bin/simple-phpunit
|
||||
script:
|
||||
- $PHPUNIT
|
||||
|
||||
jobs:
|
||||
fast_finish: true
|
||||
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.2
|
||||
- php: 7.3
|
||||
- php: 7.4snapshot
|
||||
- php: 7.4
|
||||
- php: nightly
|
||||
- stage: integration tests
|
||||
php: 7.3
|
||||
script: ./drupal_test.sh
|
||||
|
||||
@@ -1,13 +1,29 @@
|
||||
* 1.42.5 (2020-02-11)
|
||||
# 1.43.1 (2020-08-05)
|
||||
|
||||
* Fix sandbox not disabled if syntax error occurs within {% sandbox %} tag
|
||||
* Fix a regression when not using a space before an operator
|
||||
* Restrict callables to closures in filters
|
||||
* Allow trailing commas in argument lists (in calls as well as definitions)
|
||||
|
||||
# 1.43.0 (2020-07-05)
|
||||
|
||||
* Throw exception in case non-Traversable data is passed to "filter"
|
||||
* Fix context optimization on PHP 7.4
|
||||
* Fix PHP 8 compatibility
|
||||
* Drop PHP 5.5 5.6, and 7.0 support
|
||||
* Fix ambiguous syntax parsing
|
||||
* In sandbox, the `filter`, `map` and `reduce` filters require Closures in `arrow` parameter
|
||||
|
||||
# 1.42.5 (2020-02-11)
|
||||
|
||||
* Fix implementation of case-insensitivity for method names
|
||||
|
||||
* 1.42.4 (2019-11-11)
|
||||
# 1.42.4 (2019-11-11)
|
||||
|
||||
* optimized "block('foo') ?? 'bar"
|
||||
* 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 "empty" test on Traversable instances
|
||||
@@ -15,34 +31,34 @@
|
||||
* fixed PHP 7.4 compatibility
|
||||
* 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
|
||||
|
||||
* 1.42.1 (2019-06-04)
|
||||
# 1.42.1 (2019-06-04)
|
||||
|
||||
* added support for "Twig\Markup" instances in the "in" test (again)
|
||||
* 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 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 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
|
||||
* added "filter", "map", and "reduce" filters (and support for arrow functions)
|
||||
* fixed partial output leak when a PHP fatal error occurs
|
||||
* 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)
|
||||
* 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 "import" when macros are stored in a template string
|
||||
|
||||
* 1.39.1 (2019-04-16)
|
||||
# 1.39.1 (2019-04-16)
|
||||
|
||||
* fixed EscaperNodeVisitor
|
||||
|
||||
* 1.39.0 (2019-04-16)
|
||||
# 1.39.0 (2019-04-16)
|
||||
|
||||
* added Traversable support for the length filter
|
||||
* 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
|
||||
* 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)
|
||||
|
||||
* 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 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" argument of the "include" and "embed" tags
|
||||
|
||||
* 1.38.2 (2019-03-12)
|
||||
# 1.38.2 (2019-03-12)
|
||||
|
||||
* added TemplateWrapper::getTemplateName()
|
||||
|
||||
* 1.38.1 (2019-03-12)
|
||||
# 1.38.1 (2019-03-12)
|
||||
|
||||
* fixed class aliases
|
||||
|
||||
* 1.38.0 (2019-03-12)
|
||||
# 1.38.0 (2019-03-12)
|
||||
|
||||
* fixed sandbox security issue (under some circumstances, calling the
|
||||
__toString() method on an object was possible even if not allowed by the
|
||||
@@ -103,12 +119,12 @@
|
||||
* added Twig\Loader\ChainLoader::getLoaders()
|
||||
* 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 logic in TemplateWrapper
|
||||
|
||||
* 1.37.0 (2019-01-14)
|
||||
# 1.37.0 (2019-01-14)
|
||||
|
||||
* fixed ArrayObject access with a null value
|
||||
* fixed embedded templates starting with a BOM
|
||||
@@ -118,7 +134,7 @@
|
||||
* fixed float representation in compiled templates
|
||||
* 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
|
||||
* fixed multi-byte UFT-8 in escape('html_attr')
|
||||
@@ -127,24 +143,24 @@
|
||||
* fixed GlobalsInterface extended class
|
||||
* 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
|
||||
* added the Symfony ctype polyfill as a dependency
|
||||
* "js" filter now produces valid JSON
|
||||
|
||||
* 1.35.3 (2018-03-20)
|
||||
# 1.35.3 (2018-03-20)
|
||||
|
||||
* fixed block names unicity
|
||||
* fixed counting children of SimpleXMLElement objects
|
||||
* added missing else clause to avoid infinite loops
|
||||
* 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
|
||||
|
||||
* 1.35.1 (2018-03-02)
|
||||
# 1.35.1 (2018-03-02)
|
||||
|
||||
* added an exception when using "===" instead of "same as"
|
||||
* fixed possible array to string conversion concealing actual error
|
||||
@@ -152,31 +168,31 @@
|
||||
* fixed length filter when passing an instance of IteratorAggregate
|
||||
* 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()
|
||||
* fixed use TokenParser to return an empty Node
|
||||
* added RuntimeExtensionInterface
|
||||
* 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
|
||||
* fixed deprecation when using Twig_Profiler_Dumper_Html
|
||||
|
||||
* 1.34.3 (2017-06-07)
|
||||
# 1.34.3 (2017-06-07)
|
||||
|
||||
* fixed namespaces introduction
|
||||
|
||||
* 1.34.2 (2017-06-05)
|
||||
# 1.34.2 (2017-06-05)
|
||||
|
||||
* fixed namespaces introduction
|
||||
|
||||
* 1.34.1 (2017-06-05)
|
||||
# 1.34.1 (2017-06-05)
|
||||
|
||||
* fixed namespaces introduction
|
||||
|
||||
* 1.34.0 (2017-06-05)
|
||||
# 1.34.0 (2017-06-05)
|
||||
|
||||
* added support for PHPUnit 6 when testing extensions
|
||||
* fixed PHP 7.2 compatibility
|
||||
@@ -186,15 +202,15 @@
|
||||
* dropped HHVM 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
|
||||
|
||||
* 1.33.1 (2017-04-18)
|
||||
# 1.33.1 (2017-04-18)
|
||||
|
||||
* 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
|
||||
* "length" filter now returns string length when applied to an object that does
|
||||
@@ -203,13 +219,13 @@
|
||||
objects implement __toString() but not \Countable
|
||||
* 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
|
||||
* added a PSR-11 compatible runtime loader
|
||||
* 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
|
||||
* fixed marking the environment as initialized too early
|
||||
@@ -217,13 +233,13 @@
|
||||
* turned fatal error into exception when a previously generated cache is corrupted
|
||||
* fixed offline cache warm-ups for embedded templates
|
||||
|
||||
* 1.30.0 (2016-12-23)
|
||||
# 1.30.0 (2016-12-23)
|
||||
|
||||
* added Twig_FactoryRuntimeLoader
|
||||
* deprecated function/test/filter/tag overriding
|
||||
* 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
|
||||
* marked some classes as being final (via @final)
|
||||
@@ -232,16 +248,16 @@
|
||||
* deprecated silent display of undefined blocks
|
||||
* 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()
|
||||
* 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
|
||||
|
||||
* 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
|
||||
* 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()
|
||||
* 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::addHandler() and Twig_Parser::addNodeVisitor()
|
||||
@@ -269,13 +285,13 @@
|
||||
* fixed template paths when a template name contains a protocol like vfs://
|
||||
* 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
|
||||
* fixed default implementation of Twig_Template::getDebugInfo() for better BC
|
||||
* 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 a missing deprecation notice
|
||||
@@ -283,7 +299,7 @@
|
||||
* allowed filters/functions/tests implementation to use a different class than the extension they belong to
|
||||
* 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
|
||||
* removed usage of realpath in cache keys
|
||||
@@ -293,13 +309,13 @@
|
||||
* deprecated Twig_Environment::getLexer(), Twig_Environment::getParser(), Twig_Environment::getCompiler()
|
||||
* deprecated Twig_Compiler::getFilename()
|
||||
|
||||
* 1.24.2 (2016-09-01)
|
||||
# 1.24.2 (2016-09-01)
|
||||
|
||||
* fixed static callables
|
||||
* fixed a potential PHP warning when loading the cache
|
||||
* 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 support for PHP7 (Throwable support)
|
||||
@@ -308,36 +324,36 @@
|
||||
getTokenParsers(), getTags(), getNodeVisitors(), getUnaryOperators(), getBinaryOperators(),
|
||||
getFunctions(), getFilters(), getGlobals(), initGlobals(), initExtensions(), and initExtension()
|
||||
|
||||
* 1.24.0 (2016-01-25)
|
||||
# 1.24.0 (2016-01-25)
|
||||
|
||||
* adding support for the ?? operator
|
||||
* 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)
|
||||
* fixed parsing on PHP7
|
||||
|
||||
* 1.23.3 (2016-01-11)
|
||||
# 1.23.3 (2016-01-11)
|
||||
|
||||
* fixed typo
|
||||
|
||||
* 1.23.2 (2015-01-11)
|
||||
# 1.23.2 (2015-01-11)
|
||||
|
||||
* added versions in deprecated messages
|
||||
* made file cache tolerant for trailing (back)slashes on directory configuration
|
||||
* 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 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 Twig_ExtensionInterface::getGlobals() (added Twig_Extension_GlobalsInterface for BC)
|
||||
* deprecated Twig_ExtensionInterface::initRuntime() (added Twig_Extension_InitRuntimeInterface for BC)
|
||||
* 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
|
||||
* improved performance when checking template freshness
|
||||
@@ -346,15 +362,15 @@
|
||||
* 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
|
||||
|
||||
* 1.22.2 (2015-09-22)
|
||||
# 1.22.2 (2015-09-22)
|
||||
|
||||
* 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
|
||||
|
||||
* 1.22.0 (2015-09-13)
|
||||
# 1.22.0 (2015-09-13)
|
||||
|
||||
* made Twig_Test_IntegrationTestCase more flexible
|
||||
* 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 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 escaping strategy detection based on filename
|
||||
* added Traversable support for replace, merge, and sort
|
||||
* 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
|
||||
|
||||
* 1.21.0 (2015-08-24)
|
||||
# 1.21.0 (2015-08-24)
|
||||
|
||||
* added deprecation notices for deprecated features
|
||||
* 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
|
||||
* fixed limited RCEs when in sandbox mode
|
||||
@@ -390,7 +406,7 @@
|
||||
* added Twig_BaseNodeVisitor to ease the compatibility of node visitors
|
||||
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
|
||||
* added support for variadic filters, functions, and tests
|
||||
@@ -400,19 +416,19 @@
|
||||
* deprecated Twig_Environment::clearTemplateCache()
|
||||
* 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
|
||||
* 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
|
||||
* deprecated Twig_Loader_String
|
||||
* fixed the slice filter when used with a SimpleXMLElement object
|
||||
* 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)
|
||||
* added a new way to customize the main Module node (via empty nodes)
|
||||
@@ -420,18 +436,18 @@
|
||||
* added a profiler
|
||||
* 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
|
||||
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 cache management with statcache
|
||||
* 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 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 slice filter
|
||||
|
||||
* 1.16.1 (2014-10-10)
|
||||
# 1.16.1 (2014-10-10)
|
||||
|
||||
* improved error reporting in a sandboxed template
|
||||
* fixed missing error file/line information under certain circumstances
|
||||
@@ -452,20 +468,20 @@
|
||||
* fixed for mb function overload mb_substr acting different
|
||||
* 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
|
||||
* fixed inheritance in a 'use'-hierarchy
|
||||
* removed the __toString policy check when the sandbox is disabled
|
||||
* 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
|
||||
* 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.
|
||||
|
||||
* 1.15.0 (2013-12-06)
|
||||
# 1.15.0 (2013-12-06)
|
||||
|
||||
* made ignoreStrictCheck in Template::getAttribute() works with __call() methods throwing BadMethodCallException
|
||||
* added min and max functions
|
||||
@@ -475,19 +491,19 @@
|
||||
* 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
|
||||
|
||||
* 1.14.2 (2013-10-30)
|
||||
# 1.14.2 (2013-10-30)
|
||||
|
||||
* fixed error filename/line when an error occurs in an included file
|
||||
* 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")
|
||||
|
||||
* 1.14.1 (2013-10-15)
|
||||
# 1.14.1 (2013-10-15)
|
||||
|
||||
* made it possible to use named operators as variables
|
||||
* fixed the possibility to have a variable named 'matches'
|
||||
* 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
|
||||
* 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 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 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
|
||||
* 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
|
||||
* 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 boolean or float key on an array, so it is consistent with PHP's array access:
|
||||
@@ -521,7 +537,7 @@
|
||||
* changed ☃ to § in tests
|
||||
* 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
|
||||
level above the configured path
|
||||
@@ -529,25 +545,25 @@
|
||||
* added a batch 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 globals when getGlobals is called early on
|
||||
* 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
|
||||
* relaxed globals management to avoid a BC break
|
||||
* 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
|
||||
* fixed registration of tests and functions as anonymous functions
|
||||
* 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 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
|
||||
* 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 escaping when calling a macro inside another one (regression introduced in 1.9.1)
|
||||
* 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)
|
||||
|
||||
* 1.11.0 (2012-11-07)
|
||||
# 1.11.0 (2012-11-07)
|
||||
|
||||
* 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
|
||||
@@ -574,41 +590,41 @@
|
||||
* 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)
|
||||
|
||||
* 1.10.3 (2012-10-19)
|
||||
# 1.10.3 (2012-10-19)
|
||||
|
||||
* fixed wrong template location in some error messages
|
||||
* reverted a BC break introduced in 1.10.2
|
||||
* added a split filter
|
||||
|
||||
* 1.10.2 (2012-10-15)
|
||||
# 1.10.2 (2012-10-15)
|
||||
|
||||
* 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
|
||||
* fixed C extension compilation on Windows
|
||||
* 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
|
||||
* added namespaced templates support in Twig_Loader_Filesystem
|
||||
* added Twig_Loader_Filesystem::prependPath()
|
||||
* 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 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
|
||||
* fixed wrong parent class for Twig_Function_Node
|
||||
* 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
|
||||
* fixed exception trace when an error occurs when rendering a child template
|
||||
@@ -616,26 +632,26 @@
|
||||
* fixed nested embed tag calls
|
||||
* 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 escaping when a project defines a function named html or js
|
||||
* fixed chmod mode to apply the umask correctly
|
||||
|
||||
* 1.8.2 (2012-05-30)
|
||||
# 1.8.2 (2012-05-30)
|
||||
|
||||
* added the abs filter
|
||||
* fixed a regression when using a number in template attributes
|
||||
* fixed compiler when mbstring.func_overload is set to 2
|
||||
* 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 "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)
|
||||
|
||||
* 1.8.0 (2012-05-08)
|
||||
# 1.8.0 (2012-05-08)
|
||||
|
||||
* 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
|
||||
@@ -644,7 +660,7 @@
|
||||
* changed the autoescape option to also accept a supported escaping strategy (for BC, true is equivalent to html)
|
||||
* added an embed tag
|
||||
|
||||
* 1.7.0 (2012-04-24)
|
||||
# 1.7.0 (2012-04-24)
|
||||
|
||||
* fixed a PHP warning when using CIFS
|
||||
* fixed template line number in some exceptions
|
||||
@@ -658,30 +674,30 @@
|
||||
* fixed filesystem loader freshness logic for high traffic websites
|
||||
* 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
|
||||
|
||||
* 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 performance when compiling large files
|
||||
* 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 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
|
||||
|
||||
* 1.6.2 (2012-03-18)
|
||||
# 1.6.2 (2012-03-18)
|
||||
|
||||
* fixed sandbox mode when used with inheritance
|
||||
* added preserveKeys support for the slice filter
|
||||
* fixed the date filter when a DateTime instance is passed with a specific timezone
|
||||
* added a trim filter
|
||||
|
||||
* 1.6.1 (2012-02-29)
|
||||
# 1.6.1 (2012-02-29)
|
||||
|
||||
* fixed Twig C extension
|
||||
* 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 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
|
||||
* 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 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
|
||||
|
||||
* 1.5.0 (2012-01-04)
|
||||
# 1.5.0 (2012-01-04)
|
||||
|
||||
* 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
|
||||
* fixed the date filter for DateInterval instances (setTimezone() does not exist for them)
|
||||
* refactored Twig_Template::display() to ease its extension
|
||||
* 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
|
||||
* allowed hash keys to be any expression
|
||||
@@ -734,19 +750,19 @@
|
||||
* added string interpolation support
|
||||
* 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)
|
||||
* added missing preserveKeys argument to the reverse filter
|
||||
* 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()
|
||||
* added a C extension that can optionally replace Twig_Template::getAttribute()
|
||||
* 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
|
||||
* 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
|
||||
* made several speed optimizations
|
||||
|
||||
* 1.3.0 (2011-10-08)
|
||||
# 1.3.0 (2011-10-08)
|
||||
|
||||
no changes
|
||||
|
||||
* 1.3.0-RC1 (2011-10-04)
|
||||
# 1.3.0-RC1 (2011-10-04)
|
||||
|
||||
* added an optimization for the parent() function
|
||||
* 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
|
||||
* added traits support for the "parent" function
|
||||
|
||||
* 1.2.0 (2011-09-13)
|
||||
# 1.2.0 (2011-09-13)
|
||||
|
||||
no changes
|
||||
|
||||
* 1.2.0-RC1 (2011-09-10)
|
||||
# 1.2.0-RC1 (2011-09-10)
|
||||
|
||||
* enhanced the exception when a tag remains unclosed
|
||||
* 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
|
||||
* 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 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
|
||||
* 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)
|
||||
* made some performance improvement for some edge cases
|
||||
|
||||
* 1.1.0 (2011-06-28)
|
||||
# 1.1.0 (2011-06-28)
|
||||
|
||||
* 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
|
||||
* added timezone support for the date filter
|
||||
* 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
|
||||
* made 'a.b is defined' not throw an exception if a is not defined (in strict mode)
|
||||
* added {% line \d+ %} directive
|
||||
|
||||
* 1.1.0-RC1 (2011-05-28)
|
||||
# 1.1.0-RC1 (2011-05-28)
|
||||
|
||||
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
|
||||
* 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 duplicate call of methods when using the sandbox
|
||||
* 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)
|
||||
* 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
|
||||
* fixed the ternary operator precedence rule
|
||||
|
||||
* 1.0.0-RC1 (2011-01-09)
|
||||
# 1.0.0-RC1 (2011-01-09)
|
||||
|
||||
Backward incompatibilities:
|
||||
|
||||
@@ -885,7 +901,7 @@ Changes:
|
||||
* the "default" filter now uses the "empty" test instead of just checking for null
|
||||
* added the "empty" test
|
||||
|
||||
* 0.9.10 (2010-12-16)
|
||||
# 0.9.10 (2010-12-16)
|
||||
|
||||
Backward incompatibilities:
|
||||
|
||||
@@ -920,7 +936,7 @@ Changes:
|
||||
* added an Optimizer extension (enabled by default; optimizes "for" loops and "raw" filters)
|
||||
* added priority to node visitors
|
||||
|
||||
* 0.9.9 (2010-11-28)
|
||||
# 0.9.9 (2010-11-28)
|
||||
|
||||
Backward incompatibilities:
|
||||
* the self special variable has been renamed to _self
|
||||
@@ -969,7 +985,7 @@ Changes:
|
||||
* renamed self to _self (to avoid conflict)
|
||||
* fixed Twig_Template::getAttribute() for protected properties
|
||||
|
||||
* 0.9.8 (2010-06-28)
|
||||
# 0.9.8 (2010-06-28)
|
||||
|
||||
Backward incompatibilities:
|
||||
* 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 type hinting for Twig_Environment::addFilter() method
|
||||
|
||||
* 0.9.7 (2010-06-12)
|
||||
# 0.9.7 (2010-06-12)
|
||||
|
||||
Backward incompatibilities:
|
||||
* 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 }})
|
||||
* 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 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
|
||||
* 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
|
||||
upgrading.
|
||||
@@ -1065,7 +1081,7 @@ stable).
|
||||
* 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
|
||||
|
||||
* 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
|
||||
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 */
|
||||
* refactored loaders
|
||||
|
||||
* 0.9.3 (2009-11-11)
|
||||
# 0.9.3 (2009-11-11)
|
||||
|
||||
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' %} )
|
||||
* fixed bug when \ was used in HTML
|
||||
|
||||
* 0.9.2 (2009-10-29)
|
||||
# 0.9.2 (2009-10-29)
|
||||
|
||||
* made some speed optimizations
|
||||
* 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
|
||||
* 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 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 minor tweaks to allow better extensibility and flexibility
|
||||
|
||||
* 0.9.0 (2009-10-12)
|
||||
# 0.9.0 (2009-10-12)
|
||||
|
||||
* Initial release
|
||||
|
||||
@@ -1,29 +1,27 @@
|
||||
Copyright (c) 2009-2020 by the Twig Team.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are
|
||||
met:
|
||||
All rights reserved.
|
||||
|
||||
* Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions in binary form must reproduce the above
|
||||
copyright notice, 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
|
||||
promote products derived from this software without specific
|
||||
prior written permission.
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
* Redistributions in binary form must reproduce the above copyright notice,
|
||||
this list of conditions and the following disclaimer in the documentation
|
||||
and/or other materials provided with the distribution.
|
||||
* Neither the name of Twig nor the names of its contributors
|
||||
may be used to endorse or promote products derived from this software
|
||||
without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
"keywords": ["templating"],
|
||||
"homepage": "https://twig.symfony.com",
|
||||
"license": "BSD-3-Clause",
|
||||
"minimum-stability": "dev",
|
||||
"authors": [
|
||||
{
|
||||
"name": "Fabien Potencier",
|
||||
@@ -23,11 +24,11 @@
|
||||
}
|
||||
],
|
||||
"require": {
|
||||
"php": ">=5.5.0",
|
||||
"php": ">=7.1.3",
|
||||
"symfony/polyfill-ctype": "^1.8"
|
||||
},
|
||||
"require-dev": {
|
||||
"symfony/phpunit-bridge": "^4.4|^5.0",
|
||||
"symfony/phpunit-bridge": "^4.4.9|^5.0.9",
|
||||
"psr/container": "^1.0"
|
||||
},
|
||||
"autoload": {
|
||||
@@ -45,7 +46,7 @@
|
||||
},
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "1.42-dev"
|
||||
"dev-master": "1.43-dev"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -36,7 +36,7 @@ class Twig_Loader_String implements LoaderInterface, ExistsLoaderInterface, Sour
|
||||
{
|
||||
public function getSource($name)
|
||||
{
|
||||
@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;
|
||||
}
|
||||
|
||||
@@ -35,17 +35,17 @@ use Twig\RuntimeLoader\RuntimeLoaderInterface;
|
||||
use Twig\TokenParser\TokenParserInterface;
|
||||
|
||||
/**
|
||||
* Stores the Twig configuration.
|
||||
* Stores the Twig configuration and renders templates.
|
||||
*
|
||||
* @author Fabien Potencier <fabien@symfony.com>
|
||||
*/
|
||||
class Environment
|
||||
{
|
||||
const VERSION = '1.42.5';
|
||||
const VERSION_ID = 14205;
|
||||
const VERSION = '1.43.1';
|
||||
const VERSION_ID = 14301;
|
||||
const MAJOR_VERSION = 1;
|
||||
const MINOR_VERSION = 42;
|
||||
const RELEASE_VERSION = 5;
|
||||
const MINOR_VERSION = 43;
|
||||
const RELEASE_VERSION = 1;
|
||||
const EXTRA_VERSION = '';
|
||||
|
||||
protected $charset;
|
||||
|
||||
@@ -598,6 +598,11 @@ class ExpressionParser
|
||||
while (!$stream->test(Token::PUNCTUATION_TYPE, ')')) {
|
||||
if (!empty($args)) {
|
||||
$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) {
|
||||
@@ -740,7 +745,7 @@ class ExpressionParser
|
||||
$message .= sprintf('. Use "%s" instead', $test->getAlternative());
|
||||
}
|
||||
$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);
|
||||
}
|
||||
@@ -770,7 +775,7 @@ class ExpressionParser
|
||||
$message .= sprintf('. Use "%s" instead', $function->getAlternative());
|
||||
}
|
||||
$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);
|
||||
}
|
||||
@@ -800,7 +805,7 @@ class ExpressionParser
|
||||
$message .= sprintf('. Use "%s" instead', $filter->getAlternative());
|
||||
}
|
||||
$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);
|
||||
}
|
||||
|
||||
@@ -65,7 +65,7 @@ abstract class AbstractExtension implements ExtensionInterface
|
||||
*/
|
||||
public function getName()
|
||||
{
|
||||
return \get_class($this);
|
||||
return static::class;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -194,9 +194,9 @@ class CoreExtension extends AbstractExtension
|
||||
new TwigFilter('sort', 'twig_sort_filter'),
|
||||
new TwigFilter('merge', 'twig_array_merge'),
|
||||
new TwigFilter('batch', 'twig_array_batch'),
|
||||
new TwigFilter('filter', 'twig_array_filter'),
|
||||
new TwigFilter('map', 'twig_array_map'),
|
||||
new TwigFilter('reduce', 'twig_array_reduce'),
|
||||
new TwigFilter('filter', 'twig_array_filter', ['needs_environment' => true]),
|
||||
new TwigFilter('map', 'twig_array_map', ['needs_environment' => true]),
|
||||
new TwigFilter('reduce', 'twig_array_reduce', ['needs_environment' => true]),
|
||||
|
||||
// string/array filters
|
||||
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')
|
||||
{
|
||||
if ('common' == $method) {
|
||||
if ('common' === $method) {
|
||||
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.');
|
||||
}
|
||||
|
||||
@@ -1214,7 +1214,7 @@ function _twig_escape_js_callback($matches)
|
||||
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
static $shortMap = [
|
||||
@@ -1504,7 +1504,7 @@ function twig_to_array($seq, $preserveKeys = true)
|
||||
function twig_test_empty($value)
|
||||
{
|
||||
if ($value instanceof \Countable) {
|
||||
return 0 == \count($value);
|
||||
return 0 === \count($value);
|
||||
}
|
||||
|
||||
if ($value instanceof \Traversable) {
|
||||
@@ -1693,8 +1693,16 @@ function twig_array_batch($items, $size, $fill = null, $preserveKeys = true)
|
||||
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 (\PHP_VERSION_ID >= 50600) {
|
||||
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);
|
||||
}
|
||||
|
||||
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 = [];
|
||||
foreach ($array as $k => $v) {
|
||||
$r[$k] = $arrow($v, $k);
|
||||
@@ -1717,8 +1729,12 @@ function twig_array_map($array, $arrow)
|
||||
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)) {
|
||||
$array = iterator_to_array($array);
|
||||
}
|
||||
|
||||
@@ -41,7 +41,7 @@ class ProfilerExtension extends AbstractExtension
|
||||
|
||||
public function getNodeVisitors()
|
||||
{
|
||||
return [new ProfilerNodeVisitor(\get_class($this))];
|
||||
return [new ProfilerNodeVisitor(static::class)];
|
||||
}
|
||||
|
||||
public function getName()
|
||||
|
||||
@@ -499,11 +499,15 @@ class Lexer implements \Twig_LexerInterface
|
||||
$regex = [];
|
||||
foreach ($operators as $operator => $length) {
|
||||
// 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])) {
|
||||
$r = preg_quote($operator, '/').'(?=[\s()])';
|
||||
} else {
|
||||
$r = preg_quote($operator, '/');
|
||||
$r .= '(?=[\s()\[{])';
|
||||
}
|
||||
|
||||
// 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
|
||||
|
||||
@@ -53,7 +53,7 @@ class ArrayLoader implements LoaderInterface, ExistsLoaderInterface, SourceConte
|
||||
|
||||
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;
|
||||
if (!isset($this->templates[$name])) {
|
||||
|
||||
@@ -52,7 +52,7 @@ class ChainLoader implements LoaderInterface, ExistsLoaderInterface, SourceConte
|
||||
|
||||
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 = [];
|
||||
foreach ($this->loaders as $loader) {
|
||||
|
||||
@@ -138,7 +138,7 @@ class FilesystemLoader implements LoaderInterface, ExistsLoaderInterface, Source
|
||||
|
||||
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) {
|
||||
return '';
|
||||
@@ -180,7 +180,7 @@ class FilesystemLoader implements LoaderInterface, ExistsLoaderInterface, Source
|
||||
try {
|
||||
return null !== ($path = $this->findTemplate($name, false)) && false !== $path;
|
||||
} 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;
|
||||
}
|
||||
|
||||
@@ -23,7 +23,7 @@ use Twig\Node\Expression\ConstantExpression;
|
||||
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)
|
||||
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);
|
||||
|
||||
|
||||
@@ -25,7 +25,7 @@ class BlockReferenceExpression extends AbstractExpression
|
||||
/**
|
||||
* @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)) {
|
||||
@trigger_error(sprintf('The %s method "$asString" argument is deprecated since version 1.28 and will be removed in 2.0.', __METHOD__), E_USER_DEPRECATED);
|
||||
|
||||
@@ -254,7 +254,8 @@ abstract class CallExpression extends AbstractExpression
|
||||
}
|
||||
if ($isVariadic) {
|
||||
$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);
|
||||
} else {
|
||||
$callableName = $r->name;
|
||||
|
||||
@@ -17,7 +17,7 @@ use Twig\Template;
|
||||
|
||||
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];
|
||||
if (null !== $arguments) {
|
||||
|
||||
@@ -36,7 +36,7 @@ class NameExpression extends AbstractExpression
|
||||
if ($this->getAttribute('is_defined_test')) {
|
||||
if ($this->isSpecial()) {
|
||||
$compiler->repr(true);
|
||||
} elseif (\PHP_VERSION_ID >= 700400) {
|
||||
} elseif (\PHP_VERSION_ID >= 70400) {
|
||||
$compiler
|
||||
->raw('array_key_exists(')
|
||||
->string($name)
|
||||
|
||||
@@ -33,7 +33,7 @@ use Twig\Node\Expression\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) {
|
||||
$node->setAttribute('is_defined_test', true);
|
||||
|
||||
@@ -16,7 +16,7 @@ use Twig\TwigTest;
|
||||
|
||||
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];
|
||||
if (null !== $arguments) {
|
||||
|
||||
@@ -25,7 +25,7 @@ class ForNode extends Node
|
||||
{
|
||||
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)]);
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@ use Twig\Compiler;
|
||||
*/
|
||||
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];
|
||||
if (null !== $else) {
|
||||
|
||||
@@ -22,7 +22,7 @@ use Twig\Node\Expression\AbstractExpression;
|
||||
*/
|
||||
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];
|
||||
if (null !== $variables) {
|
||||
|
||||
@@ -28,7 +28,7 @@ use Twig\Source;
|
||||
*/
|
||||
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) {
|
||||
@trigger_error(sprintf('Passing a string as the $name argument of %s() is deprecated since version 1.27. Pass a \Twig\Source instance instead.', __METHOD__), E_USER_DEPRECATED);
|
||||
|
||||
@@ -40,7 +40,7 @@ class Node implements \Twig_NodeInterface
|
||||
{
|
||||
foreach ($nodes as $name => $node) {
|
||||
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;
|
||||
@@ -56,7 +56,7 @@ class Node implements \Twig_NodeInterface
|
||||
$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)) {
|
||||
foreach ($this->nodes as $name => $node) {
|
||||
@@ -89,7 +89,7 @@ class Node implements \Twig_NodeInterface
|
||||
$dom->appendChild($xml = $dom->createElement('twig'));
|
||||
|
||||
$xml->appendChild($node = $dom->createElement('node'));
|
||||
$node->setAttribute('class', \get_class($this));
|
||||
$node->setAttribute('class', static::class);
|
||||
|
||||
foreach ($this->attributes as $name => $value) {
|
||||
$node->appendChild($attribute = $dom->createElement('attribute'));
|
||||
@@ -153,7 +153,7 @@ class Node implements \Twig_NodeInterface
|
||||
public function getAttribute($name)
|
||||
{
|
||||
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];
|
||||
@@ -187,7 +187,7 @@ class Node implements \Twig_NodeInterface
|
||||
public function getNode($name)
|
||||
{
|
||||
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];
|
||||
@@ -196,7 +196,7 @@ class Node implements \Twig_NodeInterface
|
||||
public function setNode($name, $node = null)
|
||||
{
|
||||
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;
|
||||
@@ -236,7 +236,7 @@ class Node implements \Twig_NodeInterface
|
||||
{
|
||||
$this->sourceContext = $source;
|
||||
foreach ($this->nodes as $node) {
|
||||
if ($node instanceof Node) {
|
||||
if ($node instanceof self) {
|
||||
$node->setSourceContext($source);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -34,12 +34,19 @@ class SandboxNode extends Node
|
||||
->write("\$this->sandbox->enableSandbox();\n")
|
||||
->outdent()
|
||||
->write("}\n")
|
||||
->write("try {\n")
|
||||
->indent()
|
||||
->subcompile($this->getNode('body'))
|
||||
->outdent()
|
||||
->write("} finally {\n")
|
||||
->indent()
|
||||
->write("if (!\$alreadySandboxed) {\n")
|
||||
->indent()
|
||||
->write("\$this->sandbox->disableSandbox();\n")
|
||||
->outdent()
|
||||
->write("}\n")
|
||||
->outdent()
|
||||
->write("}\n")
|
||||
;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20,7 +20,7 @@ use Twig\Compiler;
|
||||
*/
|
||||
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];
|
||||
if (null !== $variables) {
|
||||
|
||||
@@ -111,8 +111,6 @@ abstract class Template implements \Twig_TemplateInterface
|
||||
* This method is for internal use only and should never be called
|
||||
* directly.
|
||||
*
|
||||
* @param array $context
|
||||
*
|
||||
* @return \Twig_TemplateInterface|TemplateWrapper|false The parent template or false if there is no parent
|
||||
*
|
||||
* @internal
|
||||
@@ -366,7 +364,7 @@ abstract class Template implements \Twig_TemplateInterface
|
||||
}
|
||||
|
||||
if ($template === $this->getTemplateName()) {
|
||||
$class = \get_class($this);
|
||||
$class = static::class;
|
||||
if (false !== $pos = strrpos($class, '___', -1)) {
|
||||
$class = substr($class, 0, $pos);
|
||||
}
|
||||
|
||||
@@ -22,7 +22,7 @@ use Twig\Token;
|
||||
*
|
||||
* {% apply upper %}
|
||||
* This text becomes uppercase
|
||||
* {% endapplys %}
|
||||
* {% endapply %}
|
||||
*/
|
||||
final class ApplyTokenParser extends AbstractTokenParser
|
||||
{
|
||||
|
||||
13
setup/permissions-test-folder/.htaccess
Normal file
13
setup/permissions-test-folder/.htaccess
Normal file
@@ -0,0 +1,13 @@
|
||||
# Apache 2.4
|
||||
<ifModule mod_authz_core.c>
|
||||
Require all denied
|
||||
</ifModule>
|
||||
|
||||
# Apache 2.2
|
||||
<ifModule !mod_authz_core.c>
|
||||
deny from all
|
||||
Satisfy All
|
||||
</ifModule>
|
||||
|
||||
# Apache 2.2 and 2.4
|
||||
IndexIgnore *
|
||||
13
setup/permissions-test-folder/web.config
Normal file
13
setup/permissions-test-folder/web.config
Normal file
@@ -0,0 +1,13 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<configuration>
|
||||
<system.webServer>
|
||||
<security>
|
||||
<requestFiltering>
|
||||
<fileExtensions applyToWebDAV="false" allowUnlisted="false"></fileExtensions>
|
||||
</requestFiltering>
|
||||
<authorization>
|
||||
<deny users="*" /> <!-- Denies all users -->
|
||||
</authorization>
|
||||
</security>
|
||||
</system.webServer>
|
||||
</configuration>
|
||||
@@ -53,4 +53,17 @@ function ExecuteStep(sStep)
|
||||
} );
|
||||
}
|
||||
|
||||
function CheckDirectoryConfFilesPermissions(sWikiVersion){
|
||||
$.ajax('permissions-test-folder/permissions-test-subfolder/permissions-test-file',
|
||||
{
|
||||
statusCode: {
|
||||
200: function() {
|
||||
$('#details').prepend('<div class="message message-warning"><span class="message-title">Security issue:</span> iTop is bundled with directory-level configuration files. You must check that those files will be read by your web server (eg. ' +
|
||||
'AllowOverride directive should be set to <code>All</code> for Apache HTTP Server) <a href="https://www.itophub.io/wiki/page?id='+sWikiVersion+'%3Ainstall%3Asecurity#secure_critical_directories_access" target="_blank">see documentation</a>.</div>');
|
||||
$('<span class="text-warning"> and 1 Security issue</span>').insertBefore('h2.message button:first');
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
CombodoTooltip.InitAllNonInstantiatedTooltips();
|
||||
@@ -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('<button type="button" onclick="window.location.reload()">Reload</button>');
|
||||
}
|
||||
$oPage->add_ready_script('CheckDirectoryConfFilesPermissions("'.utils::GetItopVersionWikiSyntax().'")');
|
||||
}
|
||||
|
||||
public function CanMoveForward()
|
||||
|
||||
@@ -10,6 +10,7 @@ namespace Combodo\iTop\Application\UI\Base\Component\FieldBadge;
|
||||
|
||||
use Combodo\iTop\Application\UI\Base\AbstractUIBlockFactory;
|
||||
use ormStyle;
|
||||
use utils;
|
||||
|
||||
/**
|
||||
* Class FieldBadgeUIBlockFactory
|
||||
@@ -36,6 +37,10 @@ class FieldBadgeUIBlockFactory extends AbstractUIBlockFactory
|
||||
{
|
||||
$oBadge = null;
|
||||
$sHtml = '';
|
||||
|
||||
// N°5318 - Sanitize value manually as this UIBlock is not using a proper TWIG template 😥
|
||||
$sValueForHtml = utils::EscapeHtml($sValue);
|
||||
|
||||
if ($oStyle) {
|
||||
$sStyleClass = $oStyle->GetStyleClass();
|
||||
$sPrimaryColor = $oStyle->GetMainColor();
|
||||
@@ -47,12 +52,12 @@ class FieldBadgeUIBlockFactory extends AbstractUIBlockFactory
|
||||
if (!is_null($sDecorationClasses) && !empty($sDecorationClasses)) {
|
||||
$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) {
|
||||
$oBadge = new FieldBadge();
|
||||
$sHtml .= "<span>$sValue</span>";
|
||||
$sHtml .= "<span>$sValueForHtml</span>";
|
||||
}
|
||||
$oBadge->AddHtml($sHtml);
|
||||
return $oBadge;
|
||||
|
||||
@@ -26,6 +26,7 @@ use Combodo\iTop\Test\UnitTest\ItopDataTestCase;
|
||||
*
|
||||
* @covers utils
|
||||
* @group sampleDataNeeded
|
||||
* @group defaultProfiles
|
||||
*/
|
||||
class privUITransactionFileTest extends ItopDataTestCase
|
||||
{
|
||||
|
||||
@@ -18,6 +18,7 @@ use MetaModel;
|
||||
* @backupGlobals disabled
|
||||
*
|
||||
* @group itopRequestMgmt
|
||||
* @group specificOrgInSampleData
|
||||
* Class TransactionsTest
|
||||
*
|
||||
* @package Combodo\iTop\Test\UnitTest\Core
|
||||
@@ -248,4 +249,4 @@ class TransactionsTest extends ItopTestCase
|
||||
"History 13" => ['iFailAt' => 15, 'bIsModified' => true],
|
||||
];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -528,6 +528,7 @@ class DBSearchTest extends ItopDataTestCase
|
||||
|
||||
/**
|
||||
* @dataProvider GetFirstResultProvider
|
||||
* @group specificOrgInSampleData
|
||||
*
|
||||
* @param string $sOql query to test
|
||||
* @param bool $bMustHaveOneResultMax arg passed to the tested function
|
||||
|
||||
@@ -12,8 +12,9 @@ use utils;
|
||||
|
||||
|
||||
/**
|
||||
* @group getSelectFilterTest
|
||||
* @group getSelectFilterTest
|
||||
* @group sampleDataNeeded
|
||||
* @group specificOrgInSampleData
|
||||
* Class GetSelectFilterTest
|
||||
*
|
||||
* @runTestsInSeparateProcesses
|
||||
@@ -35,9 +36,9 @@ class GetSelectFilterTest extends ItopDataTestCase
|
||||
|
||||
$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);
|
||||
|
||||
|
||||
$this->sLogin = "getselectfilter-user-" . date('dmYHis');
|
||||
|
||||
|
||||
// Ensure that we have at least one administrator account
|
||||
if (is_object($oRestProfile) && is_object($oAdminProfile))
|
||||
{
|
||||
@@ -45,7 +46,7 @@ class GetSelectFilterTest extends ItopDataTestCase
|
||||
$this->AddProfileToUser($this->oUser, $oAdminProfile->GetKey());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public function testGetSelectFilter()
|
||||
{
|
||||
$oUserRights = new UserRightsProfile();
|
||||
@@ -64,9 +65,9 @@ class GetSelectFilterTest extends ItopDataTestCase
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Default behavior: Administrators, Administrator profile and URP_UserProfile related to administrators are visible
|
||||
// via GetSelectFilter
|
||||
|
||||
|
||||
$oConfig->Set('security.hide_administrators', false);
|
||||
|
||||
|
||||
$oFilterProfiles = $oUserRights->GetSelectFilter($this->oUser, 'URP_Profiles');
|
||||
if ($oFilterProfiles === true)
|
||||
{
|
||||
@@ -83,7 +84,7 @@ class GetSelectFilterTest extends ItopDataTestCase
|
||||
}
|
||||
}
|
||||
$this->assertEquals($bAdminProfileFound, true);
|
||||
|
||||
|
||||
foreach($aUserLocalAncestors as $sUserClass)
|
||||
{
|
||||
$bAdminUserFound = false;
|
||||
@@ -103,7 +104,7 @@ class GetSelectFilterTest extends ItopDataTestCase
|
||||
}
|
||||
$this->assertEquals($bAdminUserFound, true);
|
||||
}
|
||||
|
||||
|
||||
$oFilterLnkProfiles = $oUserRights->GetSelectFilter($this->oUser, 'URP_UserProfile');
|
||||
if ($oFilterLnkProfiles === true)
|
||||
{
|
||||
@@ -160,6 +161,6 @@ class GetSelectFilterTest extends ItopDataTestCase
|
||||
$this->assertNotEquals($oLnk->Get('userid'), $this->oUser->GetKey());
|
||||
$this->assertNotEquals($oLnk->Get('profileid'), 1);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -29,6 +29,7 @@ class OQLParserTest extends ItopDataTestCase
|
||||
* @group iTopChangeMgt
|
||||
* @group itopConfigMgmt
|
||||
* @group itopRequestMgmt
|
||||
* @group specificOrgInSampleData
|
||||
* @dataProvider NestedQueryProvider
|
||||
*
|
||||
* @param $sQuery
|
||||
|
||||
@@ -40,6 +40,7 @@ use utils;
|
||||
/**
|
||||
* @group itopRequestMgmt
|
||||
* @group userRights
|
||||
* @group defaultProfiles
|
||||
*
|
||||
* @runTestsInSeparateProcesses
|
||||
* @preserveGlobalState disabled
|
||||
@@ -486,7 +487,7 @@ class UserRightsTest extends ItopDataTestCase
|
||||
// logout
|
||||
$_SESSION = [];
|
||||
}
|
||||
|
||||
|
||||
public function NonAdminCanListOwnProfilesProvider(): array
|
||||
{
|
||||
return [
|
||||
@@ -495,7 +496,7 @@ class UserRightsTest extends ItopDataTestCase
|
||||
];
|
||||
}
|
||||
/**
|
||||
*@dataProvider NonAdminCannotListAdminProfilesProvider
|
||||
*@dataProvider NonAdminCannotListAdminProfilesProvider
|
||||
*/
|
||||
public function testNonAdminCannotListAdminProfiles($bHideAdministrators, $iExpectedCount)
|
||||
{
|
||||
@@ -518,7 +519,7 @@ class UserRightsTest extends ItopDataTestCase
|
||||
// logout
|
||||
$_SESSION = [];
|
||||
}
|
||||
|
||||
|
||||
public function NonAdminCannotListAdminProfilesProvider(): array
|
||||
{
|
||||
return [
|
||||
|
||||
@@ -30,6 +30,7 @@ use utils;
|
||||
*
|
||||
* @package Combodo\iTop\Test\UnitTest\Synchro
|
||||
* @group dataSynchro
|
||||
* @group defaultProfiles
|
||||
*
|
||||
* @runTestsInSeparateProcesses
|
||||
* @preserveGlobalState disabled
|
||||
|
||||
@@ -9,6 +9,7 @@ use Exception;
|
||||
/**
|
||||
* @group itopRequestMgmt
|
||||
* @group restApi
|
||||
* @group defaultProfiles
|
||||
*
|
||||
* @runTestsInSeparateProcesses
|
||||
* @preserveGlobalState disabled
|
||||
|
||||
Reference in New Issue
Block a user