Compare commits

..

21 Commits

Author SHA1 Message Date
Eric Espie
4ada74e63f Debug data within the form 2025-10-22 17:37:38 +02:00
Eric Espie
0ccb452ab7 merge 2025-10-22 16:55:09 +02:00
Benjamin Dalsass
600a6185a3 N°8771 - Add Symfony form component to iTop core
- restore $aAdditionalPaths missing parameter
2025-10-22 11:30:48 +02:00
Eric Espie
354a7cabab Merge branch 'feature/8781_-_Improve_twig_base_controller_render_error_report' into develop 2025-10-21 13:58:45 +02:00
Eric Espie
0802e5abb5 N°8781 - Improve twig base controller render error report 2025-10-21 13:57:35 +02:00
odain
8ade0a6e85 N°4058 - fix PHP Deprecated base64_decodestrlen : Passing nul 2025-10-21 08:09:48 +02:00
Benjamin Dalsass
0dae7346d1 N°8772 - Form dependencies manager implementation
- turbo implementation
2025-10-20 15:16:44 +02:00
Benjamin Dalsass
cdfded766f N°8772 - Form dependencies manager implementation 2025-10-17 09:03:45 +02:00
Stephen Abello
bfc583e6b5 N°8701 - Fix class icon alt text displaying in portal tile when there's no icon defined 2025-10-15 15:18:03 +02:00
Benjamin Dalsass
5bc453bca6 N°8755 - Remove unused Symfony features for iTop 3.3 2025-10-13 08:24:20 +02:00
Benjamin Dalsass
5dd450e9bf N°8771 - Add Symfony form component to iTop core (#760)
- Add Symfony Form Component
- Add Symfony CSRF security component
- Add iTop default form template
- Add Twig debug extension to Twig Environment
- Add iTop abstract controller facility to get form builder
- Add Twig filter to make trans an alias of dict_s filter
2025-10-10 16:02:25 +02:00
Anne-Cath
82395727bf N°8699 - add forgotten 'use' 2025-10-10 15:48:05 +02:00
odain-cbd
318b792b31 N°4058 - Setup failed when added an encrypted field due to default value NULL non SODIUM compatible (#754)
* N°4058 - Setup failed when added an encrypted field due to default value NULL non SODIUM compatible

* N°4058 - Setup failed when added an encrypted field due to default value NULL non SODIUM compatible

* change log level to warning
2025-10-10 14:25:39 +02:00
jf-cbd
0fe2183369 Update itop-version-history.md 2025-10-07 15:19:08 +02:00
Anne-Catherine
8f038d2f95 N°2683 - EnhancedSLAComputation: use common extension mechanism (#744) 2025-10-02 15:40:16 +02:00
jf-cbd
fbf3dd8cf7 📝 Update CONTRIBUTING.md for Hacktoberfest 2025-10-01 11:34:28 +02:00
jf-cbd
01c9e73020 Improve OQLTest.php so data produced by test (added ub N°8522) is removed at the end of its execution 2025-09-30 16:46:58 +02:00
jf-cbd
0736045b90 Update .doc 2025-09-30 14:53:25 +02:00
Eduardo Mozart de Oliveira
86776edfb3 Improved PT-BR Translation (#362) 2025-09-29 11:01:25 +02:00
jf-cbd
d78805d8ae 👥 Update README.md 2025-09-22 17:10:59 +02:00
Håkon Harnes
03e1d46586 🐛 N°8522 - check if org id is null when filtering (#727) 2025-09-22 16:51:32 +02:00
358 changed files with 14537 additions and 4623 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 MiB

View File

@@ -102,6 +102,8 @@ gitGraph
commit id: "2025-02-25 " tag: "3.2.1"
commit id: "2025-04-08" tag: "3.2.1-1"
commit id: "2025-08-19" tag: "3.2.2-1"
checkout support/2.7
commit id: "2025-10-07" tag: "2.7.13"
```
To learn more, check the [iTop community versions history on the official wiki](https://www.itophub.io/wiki/page?id=latest:release:start).

View File

@@ -7,6 +7,17 @@ Here are some guidelines that will help us integrate your work!
## Contributions
```
_ _ _ _ _ __ _
| | | | __ _ ___| | _| |_ ___ | |__ ___ _ __ / _| ___ ___| |_
| |_| |/ _` |/ __| |/ / __/ _ \| '_ \ / _ \ '__| |_ / _ \/ __| __|
| _ | (_| | (__| <| || (_) | |_) | __/ | | _| __/\__ \ |_
|_| |_|\__,_|\___|_|\_\\__\___/|_.__/ \___|_| |_| \___||___/\__|
```
This repository is part of Hacktoberfest. Contributions are welcome! Feel free to suggest improvements, add translation, fix bugs, or propose new features. Thank you for contributing !
### Subjects
You are welcome to create pull requests on any of those subjects:
@@ -161,4 +172,4 @@ We have one sticker per contribution type. You might get multiple stickers with
Here is the design of each stickers for year 2024:
![iTop stickers 2024](.doc/contributing-guide/2024.contributing-stickers-side-by-side.png)
![iTop stickers 2025](.doc/contributing-guide/2025.contributing-stickers-side-by-side.png)

View File

@@ -99,6 +99,7 @@ We would like to give a special thank you 🤗 to the people from the community
- Goethals, Stefan
- Giuva, Vincenzo Katriel (a.k.a [@DarkNight97boss](https://github.com/DarkNight97boss))
- Gumble, David
- Håkon, Harnes (a.k.a [@hakonharnes](https://github.com/hakonharnes))
- Heloir, Arthur
- Janssens, Jelle (a.k.a [@janssensjelle](https://github.com/janssensjelle))
- Ji, Leeb (冀利斌) (a.k.a [@chileeb](https://github.com/chileeb))

29
app.php
View File

@@ -1,29 +0,0 @@
<?php
/**
* Copyright (C) 2013-2024 Combodo SAS
*
* This file is part of iTop.
*
* iTop is free software; you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* iTop is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
*/
use Combodo\iTop\Kernel;
require_once __DIR__.'/lib/autoload_runtime.php';
require_once('approot.inc.php');
require_once('application/startup.inc.php');
return function (array $context) {
return new Kernel($context['APP_ENV'], (bool) $context['APP_DEBUG']);
};

View File

@@ -562,70 +562,7 @@ Call $this->AddInitialAttributeFlags($sAttCode, $iFlags) for all the initial att
</event_data>
</event>
</events>
<forms>
<form id="DashletHeaderDynamicProperties" xsi:type="FormType">
<form_types>
<form_type id="title" xsi:type="TextType">
<options>
<label>UI:DashletHeaderDynamic:Prop-Title</label>
<default>UI:DashletHeaderDynamic:Prop-Title:Default</default>
</options>
</form_type>
<form_type id="icon" xsi:type="IconType">
<options>
<label>UI:DashletHeaderDynamic:Prop-Icon</label>
<default>images/icons/icons8-customer.svg</default>
</options>
</form_type>
<form_type id="subtitle" xsi:type="TextType">
<options>
<label>UI:DashletHeaderDynamic:Prop-Subtitle</label>
<default>UI:DashletHeaderDynamic:Prop-Subtitle:Default</default>
</options>
</form_type>
<form_type id="query" xsi:type="QueryType">
<options>
<label>UI:DashletHeaderDynamic:Prop-Query</label>
<default>SELECT Contact</default>
</options>
</form_type>
<form_type id="group_by" xsi:type="GroupByAttcodeType">
<options>
<label>UI:DashletHeaderDynamic:Prop-GroupBy</label>
<default>status</default>
<class_source>query</class_source>
</options>
</form_type>
<form_type id="values" xsi:type="ValuesFromAttcodeType">
<options>
<label>UI:DashletHeaderDynamic:Prop-Values</label>
<default>
<values>
<value id="active"/>
<value id="inactive"/>
</values>
</default>
<attcode_source>group_by</attcode_source>
</options>
</form_type>
</form_types>
</form>
</forms>
<meta>
<form_type_definitions>
<form_type_definition id="IconType">
<options>
<option id="label">
<mandatory>true</mandatory>
<type>string</type>
</option>
<option id="default">
<mandatory>true</mandatory>
<type>string</type>
</option>
</options>
</form_type_definition>
</form_type_definitions>
<classes>
<class id="cmdbAbstractObject" _delta="define">
<methods>

View File

@@ -42,7 +42,6 @@ register_shutdown_function(function()
$sReservedMemory = null;
if (!is_null($err = error_get_last()) && ($err['type'] == E_ERROR))
{
var_export($err);
// Remove stack trace from MySQLException (since 2.7.2 see N°3174)
$sMessage = $err['message'];
if (strpos($sMessage, 'MySQLException') !== false) {

View File

@@ -29,15 +29,13 @@
"symfony/http-foundation": "~6.4.0",
"symfony/http-kernel": "~6.4.0",
"symfony/mailer": "^6.4",
"symfony/runtime": "~6.4.0",
"symfony/security-csrf": "^6.4",
"symfony/twig-bundle": "~6.4.0",
"symfony/var-dumper": "~6.4.0",
"symfony/yaml": "~6.4.0",
"tecnickcom/tcpdf": "^6.6.0",
"thenetworg/oauth2-azure": "^2.0"
},
"require-dev": {
"symfony/debug-bundle": "~6.4.0",
"symfony/stopwatch": "~6.4.0",
"symfony/web-profiler-bundle": "~6.4.0"
},
@@ -64,10 +62,7 @@
},
"sort-packages": true,
"classmap-authoritative": true,
"platform-check": true,
"allow-plugins": {
"symfony/runtime": true
}
"platform-check": true
},
"autoload": {
"classmap": [
@@ -95,7 +90,7 @@
"extra": {
"symfony": {
"allow-contrib": false,
"require": "3.4.*"
"require": "6.4.*"
},
"runtime": {
"dotenv_path": "resources/symfony/.env"

349
composer.lock generated
View File

@@ -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": "a8ec6335b5ece43315f493dc1bf72b51",
"content-hash": "26fa7aa920057d080bcc0948bf052fda",
"packages": [
{
"name": "apereo/phpcas",
@@ -3445,6 +3445,82 @@
],
"time": "2025-08-04T17:06:28+00:00"
},
{
"name": "symfony/password-hasher",
"version": "v6.4.24",
"source": {
"type": "git",
"url": "https://github.com/symfony/password-hasher.git",
"reference": "dcab5ac87450aaed26483ba49c2ce86808da7557"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/password-hasher/zipball/dcab5ac87450aaed26483ba49c2ce86808da7557",
"reference": "dcab5ac87450aaed26483ba49c2ce86808da7557",
"shasum": ""
},
"require": {
"php": ">=8.1"
},
"conflict": {
"symfony/security-core": "<5.4"
},
"require-dev": {
"symfony/console": "^5.4|^6.0|^7.0",
"symfony/security-core": "^5.4|^6.0|^7.0"
},
"type": "library",
"autoload": {
"psr-4": {
"Symfony\\Component\\PasswordHasher\\": ""
},
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Robin Chalas",
"email": "robin.chalas@gmail.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Provides password hashing utilities",
"homepage": "https://symfony.com",
"keywords": [
"hashing",
"password"
],
"support": {
"source": "https://github.com/symfony/password-hasher/tree/v6.4.24"
},
"funding": [
{
"url": "https://symfony.com/sponsor",
"type": "custom"
},
{
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://github.com/nicolas-grekas",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2025-07-10T08:14:14+00:00"
},
{
"name": "symfony/polyfill-ctype",
"version": "v1.33.0",
@@ -4294,41 +4370,51 @@
"time": "2025-07-15T08:46:37+00:00"
},
{
"name": "symfony/runtime",
"version": "v6.4.24",
"name": "symfony/security-core",
"version": "v6.4.26",
"source": {
"type": "git",
"url": "https://github.com/symfony/runtime.git",
"reference": "c1cc6721646f546627236c57f835272806087337"
"url": "https://github.com/symfony/security-core.git",
"reference": "8b7c95bf04d82fcd0c06a918b2d849bfb2ab9cc0"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/runtime/zipball/c1cc6721646f546627236c57f835272806087337",
"reference": "c1cc6721646f546627236c57f835272806087337",
"url": "https://api.github.com/repos/symfony/security-core/zipball/8b7c95bf04d82fcd0c06a918b2d849bfb2ab9cc0",
"reference": "8b7c95bf04d82fcd0c06a918b2d849bfb2ab9cc0",
"shasum": ""
},
"require": {
"composer-plugin-api": "^1.0|^2.0",
"php": ">=8.1"
"php": ">=8.1",
"symfony/deprecation-contracts": "^2.5|^3",
"symfony/event-dispatcher-contracts": "^2.5|^3",
"symfony/password-hasher": "^5.4|^6.0|^7.0",
"symfony/service-contracts": "^2.5|^3"
},
"conflict": {
"symfony/dotenv": "<5.4"
"symfony/event-dispatcher": "<5.4",
"symfony/http-foundation": "<5.4",
"symfony/ldap": "<5.4",
"symfony/security-guard": "<5.4",
"symfony/translation": "<5.4.35|>=6.0,<6.3.12|>=6.4,<6.4.3|>=7.0,<7.0.3",
"symfony/validator": "<5.4"
},
"require-dev": {
"composer/composer": "^1.0.2|^2.0",
"symfony/console": "^5.4.9|^6.0.9|^7.0",
"symfony/dotenv": "^5.4|^6.0|^7.0",
"psr/cache": "^1.0|^2.0|^3.0",
"psr/container": "^1.1|^2.0",
"psr/log": "^1|^2|^3",
"symfony/cache": "^5.4|^6.0|^7.0",
"symfony/event-dispatcher": "^5.4|^6.0|^7.0",
"symfony/expression-language": "^5.4|^6.0|^7.0",
"symfony/http-foundation": "^5.4|^6.0|^7.0",
"symfony/http-kernel": "^5.4|^6.0|^7.0"
},
"type": "composer-plugin",
"extra": {
"class": "Symfony\\Component\\Runtime\\Internal\\ComposerPlugin"
"symfony/ldap": "^5.4|^6.0|^7.0",
"symfony/string": "^5.4|^6.0|^7.0",
"symfony/translation": "^5.4.35|~6.3.12|^6.4.3|^7.0.3",
"symfony/validator": "^6.4|^7.0"
},
"type": "library",
"autoload": {
"psr-4": {
"Symfony\\Component\\Runtime\\": "",
"Symfony\\Runtime\\Symfony\\Component\\": "Internal/"
"Symfony\\Component\\Security\\Core\\": ""
},
"exclude-from-classmap": [
"/Tests/"
@@ -4340,21 +4426,90 @@
],
"authors": [
{
"name": "Nicolas Grekas",
"email": "p@tchwork.com"
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Enables decoupling PHP applications from global state",
"description": "Symfony Security Component - Core Library",
"homepage": "https://symfony.com",
"keywords": [
"runtime"
],
"support": {
"source": "https://github.com/symfony/runtime/tree/v6.4.24"
"source": "https://github.com/symfony/security-core/tree/v6.4.26"
},
"funding": [
{
"url": "https://symfony.com/sponsor",
"type": "custom"
},
{
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://github.com/nicolas-grekas",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2025-09-02T19:15:26+00:00"
},
{
"name": "symfony/security-csrf",
"version": "v6.4.24",
"source": {
"type": "git",
"url": "https://github.com/symfony/security-csrf.git",
"reference": "9a1efc8c10b86bcedc9233affd10c716b54ca1b7"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/security-csrf/zipball/9a1efc8c10b86bcedc9233affd10c716b54ca1b7",
"reference": "9a1efc8c10b86bcedc9233affd10c716b54ca1b7",
"shasum": ""
},
"require": {
"php": ">=8.1",
"symfony/security-core": "^5.4|^6.0|^7.0"
},
"conflict": {
"symfony/http-foundation": "<5.4"
},
"require-dev": {
"symfony/http-foundation": "^5.4|^6.0|^7.0"
},
"type": "library",
"autoload": {
"psr-4": {
"Symfony\\Component\\Security\\Csrf\\": ""
},
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony Security Component - CSRF Library",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/security-csrf/tree/v6.4.24"
},
"funding": [
{
@@ -4830,16 +4985,16 @@
},
{
"name": "symfony/var-dumper",
"version": "v6.4.25",
"version": "v6.4.26",
"source": {
"type": "git",
"url": "https://github.com/symfony/var-dumper.git",
"reference": "c6cd92486e9fc32506370822c57bc02353a5a92c"
"reference": "cfae1497a2f1eaad78dbc0590311c599c7178d4a"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/var-dumper/zipball/c6cd92486e9fc32506370822c57bc02353a5a92c",
"reference": "c6cd92486e9fc32506370822c57bc02353a5a92c",
"url": "https://api.github.com/repos/symfony/var-dumper/zipball/cfae1497a2f1eaad78dbc0590311c599c7178d4a",
"reference": "cfae1497a2f1eaad78dbc0590311c599c7178d4a",
"shasum": ""
},
"require": {
@@ -4894,7 +5049,7 @@
"dump"
],
"support": {
"source": "https://github.com/symfony/var-dumper/tree/v6.4.25"
"source": "https://github.com/symfony/var-dumper/tree/v6.4.26"
},
"funding": [
{
@@ -4914,7 +5069,7 @@
"type": "tidelift"
}
],
"time": "2025-08-13T09:41:44+00:00"
"time": "2025-09-25T15:37:27+00:00"
},
{
"name": "symfony/var-exporter",
@@ -5073,60 +5228,6 @@
],
"time": "2025-08-26T16:59:00+00:00"
},
{
"name": "symfonycasts/dynamic-forms",
"version": "v0.1.3",
"source": {
"type": "git",
"url": "https://github.com/SymfonyCasts/dynamic-forms.git",
"reference": "4c86c48f18a707e451c4dfffe87f3710b2052be6"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/SymfonyCasts/dynamic-forms/zipball/4c86c48f18a707e451c4dfffe87f3710b2052be6",
"reference": "4c86c48f18a707e451c4dfffe87f3710b2052be6",
"shasum": ""
},
"require": {
"php": ">=8.1",
"symfony/form": "^5.4|^6.3|^7.0"
},
"require-dev": {
"phpunit/phpunit": "^9.6",
"symfony/framework-bundle": "^6.3|^7.0",
"symfony/options-resolver": "^5.4|^6.3|^7.0",
"symfony/phpunit-bridge": "^5.4.32|^6.3.9|^7.0",
"symfony/twig-bundle": "^5.4|^6.3|^7.0",
"twig/twig": "^2.15|^3.0",
"zenstruck/browser": "^1.4"
},
"type": "library",
"autoload": {
"psr-4": {
"Symfonycasts\\DynamicForms\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Ryan Weaver",
"homepage": "https://symfonycasts.com"
}
],
"description": "Add dynamic/dependent fields to Symfony forms",
"keywords": [
"Forms",
"symfony"
],
"support": {
"issues": "https://github.com/SymfonyCasts/dynamic-forms/issues",
"source": "https://github.com/SymfonyCasts/dynamic-forms/tree/v0.1.3"
},
"time": "2024-10-22T16:59:02+00:00"
},
{
"name": "tecnickcom/tcpdf",
"version": "6.10.0",
@@ -5339,80 +5440,6 @@
}
],
"packages-dev": [
{
"name": "symfony/debug-bundle",
"version": "v6.4.13",
"source": {
"type": "git",
"url": "https://github.com/symfony/debug-bundle.git",
"reference": "7bcfaff39e094cc09455201916d016d9b2ae08ff"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/debug-bundle/zipball/7bcfaff39e094cc09455201916d016d9b2ae08ff",
"reference": "7bcfaff39e094cc09455201916d016d9b2ae08ff",
"shasum": ""
},
"require": {
"ext-xml": "*",
"php": ">=8.1",
"symfony/dependency-injection": "^5.4|^6.0|^7.0",
"symfony/http-kernel": "^5.4|^6.0|^7.0",
"symfony/twig-bridge": "^5.4|^6.0|^7.0",
"symfony/var-dumper": "^5.4|^6.0|^7.0"
},
"conflict": {
"symfony/config": "<5.4",
"symfony/dependency-injection": "<5.4"
},
"require-dev": {
"symfony/config": "^5.4|^6.0|^7.0",
"symfony/web-profiler-bundle": "^5.4|^6.0|^7.0"
},
"type": "symfony-bundle",
"autoload": {
"psr-4": {
"Symfony\\Bundle\\DebugBundle\\": ""
},
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Provides a tight integration of the Symfony VarDumper component and the ServerLogCommand from MonologBridge into the Symfony full-stack framework",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/debug-bundle/tree/v6.4.13"
},
"funding": [
{
"url": "https://symfony.com/sponsor",
"type": "custom"
},
{
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2024-09-25T14:18:03+00:00"
},
{
"name": "symfony/stopwatch",
"version": "v6.4.24",

View File

@@ -1797,14 +1797,6 @@ class Config
'source_of_value' => '',
'show_in_conf_sample' => false,
],
'application.secret' => [
'type' => 'string',
'description' => 'Application secret, uses this value for encrypting the cookies used in the remember me functionality and for creating signed URIs when using ESI (Edge Side Includes).',
'default' => '',
'value' => '',
'source_of_value' => '',
'show_in_conf_sample' => false,
],
'http.request.user_agent' => [
'type' => 'string',
'description' => 'HTTP request user agent, use this to set a custom agent on external requests.',
@@ -2198,7 +2190,6 @@ class Config
$this->m_sEncryptionLibrary = isset($MySettings['encryption_library']) ? trim($MySettings['encryption_library']) : $this->m_sEncryptionLibrary;
$this->m_aCharsets = isset($MySettings['csv_import_charsets']) ? $MySettings['csv_import_charsets'] : array();
$this->m_iPasswordHashAlgo = isset($MySettings['password_hash_algo']) ? $MySettings['password_hash_algo'] : $this->m_iPasswordHashAlgo;
$this->m_sAppSecret = isset($MySettings['application.secret']) ? trim($MySettings['application.secret']) : $this->m_sAppSecret;
}
protected function Verify()
@@ -2522,7 +2513,6 @@ class Config
$aSettings['encryption_library'] = $this->m_sEncryptionLibrary;
$aSettings['csv_import_charsets'] = $this->m_aCharsets;
$aSettings['password_hash_algo'] = $this->m_iPasswordHashAlgo;
$aSettings['application.secret'] = $this->m_sAppSecret;
foreach ($this->m_aModuleSettings as $sModule => $aProperties)
{
@@ -2636,7 +2626,6 @@ class Config
'encryption_library' => $this->m_sEncryptionLibrary,
'csv_import_charsets' => $this->m_aCharsets,
'password_hash_algo' => $this->m_iPasswordHashAlgo,
'application.secret' => $this->m_sAppSecret,
);
foreach ($aOtherValues as $sKey => $value)
{

View File

@@ -4927,7 +4927,7 @@ abstract class DBObject implements iDisplay
{
if (is_null($sWorkingTimeComputer))
{
$sWorkingTimeComputer = class_exists('SLAComputation') ? 'SLAComputation' : 'DefaultWorkingTimeComputer';
$sWorkingTimeComputer = MetaModel::GetWorkingTime(get_class($this));
}
$oComputer = new $sWorkingTimeComputer();
$aCallSpec = array($oComputer, 'GetOpenDuration');

View File

@@ -399,6 +399,32 @@ abstract class MetaModel
return null;
}
final public static function GetDefaultWorkingTime()
{
return 'DefaultWorkingTimeComputer';
}
/**
* @param string $sClass
*
* @return string the working time class
* @throws \CoreException
* @since 3.3.0
*/
final public static function GetWorkingTime($sClass)
{
self::_check_subclass($sClass);
if (array_key_exists('working_time', self::$m_aClassParams[$sClass])) {
return self::$m_aClassParams[$sClass]['working_time'];
} else {
$sParentClass = self::GetParentPersistentClass($sClass);
if (strlen($sParentClass) > 0) {
return self::GetWorkingTime($sParentClass);
}
}
return self::GetDefaultWorkingTime();
}
/**
* @param string $sClass
*

View File

@@ -289,7 +289,7 @@ class ormStopWatch
$sWorkingTimeComputer = $oAttDef->Get('working_time_computing');
if ($sWorkingTimeComputer == '')
{
$sWorkingTimeComputer = class_exists('SLAComputation') ? 'SLAComputation' : 'DefaultWorkingTimeComputer';
$sWorkingTimeComputer = MetaModel::GetWorkingTime(get_class($oObject));
}
$oComputer = new $sWorkingTimeComputer();
$aCallSpec = array($oComputer, 'GetDeadline');
@@ -318,7 +318,7 @@ class ormStopWatch
$sWorkingTimeComputer = $oAttDef->Get('working_time_computing');
if ($sWorkingTimeComputer == '')
{
$sWorkingTimeComputer = class_exists('SLAComputation') ? 'SLAComputation' : 'DefaultWorkingTimeComputer';
$sWorkingTimeComputer = MetaModel::GetWorkingTime(get_class($oObject));
}
$oComputer = new $sWorkingTimeComputer();
$aCallSpec = array($oComputer, 'GetOpenDuration');

View File

@@ -130,7 +130,13 @@ class SimpleCrypt
*/
function Decrypt($key, $string)
{
return $this->oEngine->Decrypt($key,$string);
if (is_null($string) || strlen($string) == 0) {
IssueLog::Warning("Cannot decrypt empty/null value");
return $string;
}
return $this->oEngine->Decrypt($key, $string);
}
/**
@@ -422,4 +428,4 @@ class SimpleCryptOpenSSLMcryptCompatibilityEngine implements CryptEngine
return trim($plaintext);
}
}
}

View File

@@ -142,7 +142,9 @@ abstract class UserRightsAddOnAPI
$oFilter = new DBObjectSearch($sClass);
$oListExpr = ListExpression::FromScalars($aAllowedOrgs);
$oCondition = new BinaryExpression($oExpression, 'IN', $oListExpr);
$oNullCondition = new FunctionExpression('ISNULL', [$oExpression]);
$oInCondition = new BinaryExpression($oExpression, 'IN', $oListExpr);
$oCondition = $oNullCondition->LogOr($oInCondition);
$oFilter->AddConditionExpression($oCondition);
if ($this->HasSharing())

View File

@@ -6,4 +6,44 @@
.ibo-prop-header {
@extend %ibo-font-size-150;
padding-bottom: 14px;
}
}
.help-text{
padding: 1px 5px;
background-color: #d7e3f8;
border: 1px solid #c6e7f5;
border-radius: 5px;
margin: 5px 0;
font-size: 0.9em;
}
.form-error ul{
padding: 1px 5px;
background-color: #f8d7da;
border: 1px solid #f5c6cb;
border-radius: 5px;
margin: 5px 0;
font-size: 0.9em;
}
.subform{
background-color: #efefef;
border-radius: 5px;
padding: 10px;
}
.form-buttons{
margin: 20px 0;
}
#form select{
padding: 0;
overflow-y: auto;
}
#form select option{
height: 30px;
display: flex;
align-items: center;
}

View File

@@ -26,7 +26,7 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:UserLocal/Attribute:expiration/Value:otp_expire+' => 'Senha não pode ser alterada pelo usuário',
'Class:UserLocal/Attribute:password_renewed_date' => 'Data da última alteração de senha',
'Class:UserLocal/Attribute:password_renewed_date+' => 'Quando a senha foi alterada anteriormente',
'Error:UserLocalPasswordValidator:UserPasswordPolicyRegex:ValidationFailed' => 'A senha deve ter no mínimo 8 caracteres e incluir letras maiúsculas, minúsculas, números e símbolos',
'Error:UserLocalPasswordValidator:UserPasswordPolicyRegex:ValidationFailed' => 'A senha deve conter no mínimo 8 caracteres e incluir letras maiúsculas, minúsculas, números e símbolos',
'UserLocal:password:expiration' => 'O campo abaixo requer uma extensão',
'Class:UserLocal/Error:OneTimePasswordChangeIsNotAllowed' => 'Definir a expiração da senha para One-Time Password (OTP) não é permitido para o seu próprio usuário',
));

View File

@@ -11,7 +11,7 @@
*
*/
Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:lnkFunctionalCIToTicket' => 'Link IC / Solicitação',
'Class:lnkFunctionalCIToTicket' => 'Relação entre IC / Solicitação',
'Class:lnkFunctionalCIToTicket+' => '',
'Class:lnkFunctionalCIToTicket/Name' => '%1$s / %2$s~~',
'Class:lnkFunctionalCIToTicket/Attribute:ticket_id' => 'Solicitação',
@@ -37,5 +37,5 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
//
Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:FunctionalCI/Attribute:tickets_list' => 'Solicitações',
'Class:FunctionalCI/Attribute:tickets_list+' => 'Todos as solicitações para este item de configuração',
'Class:FunctionalCI/Attribute:tickets_list+' => 'Todas as Solicitações associadas à este Item de Configuração (IC)',
));

View File

@@ -18,8 +18,8 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Relation:depends on/Description' => 'Elementos estes, que dependem deste elemento',
'Relation:depends on/DownStream' => 'Depende de...',
'Relation:depends on/UpStream' => 'Impactos...',
'Relation:impacts/LoadData' => 'Load data~~',
'Relation:impacts/NoFilteredData' => 'please select objects and load data~~',
'Relation:impacts/LoadData' => 'Carregando dados',
'Relation:impacts/NoFilteredData' => 'Por favor, selecione os objetos na tag de visualização Gráfica',
'Relation:impacts/FilteredData' => 'Filtered data~~',
));
@@ -66,7 +66,7 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
//
Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:lnkContactToFunctionalCI' => 'Link Contato / IC',
'Class:lnkContactToFunctionalCI' => 'Relação entre Contato / IC',
'Class:lnkContactToFunctionalCI+' => '',
'Class:lnkContactToFunctionalCI/Name' => '%1$s / %2$s~~',
'Class:lnkContactToFunctionalCI/Attribute:functionalci_id' => 'ICs',
@@ -105,16 +105,16 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:FunctionalCI/Attribute:move2production' => 'Data de migração para produção',
'Class:FunctionalCI/Attribute:move2production+' => '',
'Class:FunctionalCI/Attribute:contacts_list' => 'Contatos',
'Class:FunctionalCI/Attribute:contacts_list+' => 'Todos os contatos associados a este item de configuração',
'Class:FunctionalCI/Attribute:contacts_list+' => 'Todos os Contatos associados à este Item de Configuração (IC)',
'Class:FunctionalCI/Attribute:documents_list' => 'Documentos',
'Class:FunctionalCI/Attribute:documents_list+' => 'Todos os documentos associados a este item de configuração',
'Class:FunctionalCI/Attribute:documents_list+' => 'Todos os Documentos associados à este Item de Configuração (IC)',
'Class:FunctionalCI/Attribute:applicationsolution_list' => 'Soluções de aplicação',
'Class:FunctionalCI/Attribute:applicationsolution_list+' => 'Todas as soluções de aplicação dependentes desse item de configuração',
'Class:FunctionalCI/Attribute:applicationsolution_list+' => 'Todas as Soluções de Aplicação dependentes deste Item de Configuração (IC)',
'Class:FunctionalCI/Attribute:softwares_list' => 'Softwares',
'Class:FunctionalCI/Attribute:softwares_list+' => 'Todos os softwares instalados neste item de configuração',
'Class:FunctionalCI/Attribute:softwares_list+' => 'Todos os Softwares instalados neste Item de Configuração (IC)',
'Class:FunctionalCI/Attribute:finalclass' => 'Tipo de IC',
'Class:FunctionalCI/Attribute:finalclass+' => '',
'Class:FunctionalCI/Tab:OpenedTickets' => 'Solicitações Ativas',
'Class:FunctionalCI/Tab:OpenedTickets' => 'Solicitações ativas',
'Class:FunctionalCI/Tab:OpenedTickets+' => 'Active Tickets which are impacting this functional CI~~',
));
@@ -123,7 +123,7 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
//
Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:PhysicalDevice' => 'Dispositivo Físico',
'Class:PhysicalDevice' => 'Dispositivo físico',
'Class:PhysicalDevice+' => 'Lista de Dispositivos Físicos',
'Class:PhysicalDevice/ComplementaryName' => '%1$s - %2$s~~',
'Class:PhysicalDevice/Attribute:serialnumber' => 'Número serial',
@@ -169,9 +169,9 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:Rack/Attribute:nb_u' => 'Unidades',
'Class:Rack/Attribute:nb_u+' => '',
'Class:Rack/Attribute:device_list' => 'Dispositivos',
'Class:Rack/Attribute:device_list+' => 'Todos os dispositivos físicos empilhados neste rack',
'Class:Rack/Attribute:device_list+' => 'Todos os Dispositivos físicos empilhados neste Rack',
'Class:Rack/Attribute:enclosure_list' => 'Gavetas',
'Class:Rack/Attribute:enclosure_list+' => 'Todas as gavetas neste rack',
'Class:Rack/Attribute:enclosure_list+' => 'Todas as Gavetas neste Rack',
));
//
@@ -234,9 +234,9 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:ConnectableCI+' => 'Físico',
'Class:ConnectableCI/ComplementaryName' => '%1$s - %2$s~~',
'Class:ConnectableCI/Attribute:networkdevice_list' => 'Dispositivo de rede',
'Class:ConnectableCI/Attribute:networkdevice_list+' => 'Todos os dispositivos de rede conectados neste dispositivo',
'Class:ConnectableCI/Attribute:networkdevice_list+' => 'Todos os Dispositivos de rede conectados neste dispositivo',
'Class:ConnectableCI/Attribute:physicalinterface_list' => 'Interface de rede',
'Class:ConnectableCI/Attribute:physicalinterface_list+' => 'Todas as interfaces de rede',
'Class:ConnectableCI/Attribute:physicalinterface_list+' => 'Todas as Interfaces de rede presentes neste dispositivo',
));
//
@@ -268,9 +268,9 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:DatacenterDevice/Attribute:powerB_name' => 'Nome da fonte energia B',
'Class:DatacenterDevice/Attribute:powerB_name+' => '',
'Class:DatacenterDevice/Attribute:fiberinterfacelist_list' => 'Portas FC',
'Class:DatacenterDevice/Attribute:fiberinterfacelist_list+' => 'Todas as portas Fiber Channel para esse dispositivo',
'Class:DatacenterDevice/Attribute:fiberinterfacelist_list+' => 'Todas as portas Fiber Channel (FC) para este Dispositivo de datacenter',
'Class:DatacenterDevice/Attribute:san_list' => 'SANs',
'Class:DatacenterDevice/Attribute:san_list+' => 'Todos os switches SAN associados a este dispositivo',
'Class:DatacenterDevice/Attribute:san_list+' => 'Todos os Switches SAN associados à este Dispositivo de datacenter',
'Class:DatacenterDevice/Attribute:redundancy' => 'Redundância',
'Class:DatacenterDevice/Attribute:redundancy/count' => 'O dispositivo está ativo se pelo menos uma conexão de energia (A ou B) estiver ativa',
'Class:DatacenterDevice/Attribute:redundancy/disabled' => 'O dispositivo está ativo se todas as conexões de energia estiverem ativadas',
@@ -285,15 +285,15 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:NetworkDevice' => 'Dispositivo de Rede',
'Class:NetworkDevice+' => '',
'Class:NetworkDevice/ComplementaryName' => '%1$s - %2$s~~',
'Class:NetworkDevice/Attribute:networkdevicetype_id' => 'Tipo de rede',
'Class:NetworkDevice/Attribute:networkdevicetype_id' => 'Tipo de dispositivo de rede',
'Class:NetworkDevice/Attribute:networkdevicetype_id+' => '',
'Class:NetworkDevice/Attribute:networkdevicetype_name' => 'Nome do tipo de rede',
'Class:NetworkDevice/Attribute:networkdevicetype_name' => 'Nome do tipo de dispositivo de rede',
'Class:NetworkDevice/Attribute:networkdevicetype_name+' => '',
'Class:NetworkDevice/Attribute:connectablecis_list' => 'Dispositivos',
'Class:NetworkDevice/Attribute:connectablecis_list+' => 'Todos os dispositivos associados a este dispositivo de rede',
'Class:NetworkDevice/Attribute:iosversion_id' => 'Versão do IOS',
'Class:NetworkDevice/Attribute:connectablecis_list' => 'ICs',
'Class:NetworkDevice/Attribute:connectablecis_list+' => 'Todos os Itens de configuração (ICs) associados à este Dispositivo de rede',
'Class:NetworkDevice/Attribute:iosversion_id' => 'Versão do SO',
'Class:NetworkDevice/Attribute:iosversion_id+' => '',
'Class:NetworkDevice/Attribute:iosversion_name' => 'Nome da versão do IOS',
'Class:NetworkDevice/Attribute:iosversion_name' => 'Nome da versão do SO',
'Class:NetworkDevice/Attribute:iosversion_name+' => '',
'Class:NetworkDevice/Attribute:ram' => 'RAM',
'Class:NetworkDevice/Attribute:ram+' => '',
@@ -324,7 +324,7 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:Server/Attribute:ram' => 'RAM',
'Class:Server/Attribute:ram+' => '',
'Class:Server/Attribute:logicalvolumes_list' => 'Volumes lógicos',
'Class:Server/Attribute:logicalvolumes_list+' => 'Todos os volumoes lógicos associados a este servidor',
'Class:Server/Attribute:logicalvolumes_list+' => 'Todos os Volumes lógicos associados à este Servidor',
));
//
@@ -336,7 +336,7 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:StorageSystem+' => '',
'Class:StorageSystem/ComplementaryName' => '%1$s - %2$s~~',
'Class:StorageSystem/Attribute:logicalvolume_list' => 'Volumes lógicos',
'Class:StorageSystem/Attribute:logicalvolume_list+' => 'Todos os volumes lógicos neste sistema storage',
'Class:StorageSystem/Attribute:logicalvolume_list+' => 'Todos os Volumes lógicos neste Sistema de storage',
));
//
@@ -348,7 +348,7 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:SANSwitch+' => '',
'Class:SANSwitch/ComplementaryName' => '%1$s - %2$s~~',
'Class:SANSwitch/Attribute:datacenterdevice_list' => 'Dispositivos',
'Class:SANSwitch/Attribute:datacenterdevice_list+' => 'Todos os dispositivos associados a este switch SAN',
'Class:SANSwitch/Attribute:datacenterdevice_list+' => 'Todos os Dispositivos associados à este Switch SAN',
));
//
@@ -360,7 +360,7 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:TapeLibrary+' => '',
'Class:TapeLibrary/ComplementaryName' => '%1$s - %2$s~~',
'Class:TapeLibrary/Attribute:tapes_list' => 'Fitas',
'Class:TapeLibrary/Attribute:tapes_list+' => 'Todas as fitas associadas à esta biblioteca de fitas',
'Class:TapeLibrary/Attribute:tapes_list+' => 'Todas as Fitas associadas à esta Biblioteca de fitas',
));
//
@@ -372,7 +372,7 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:NAS+' => '',
'Class:NAS/ComplementaryName' => '%1$s - %2$s~~',
'Class:NAS/Attribute:nasfilesystem_list' => 'Sistemas de arquivos',
'Class:NAS/Attribute:nasfilesystem_list+' => 'Todos os sistemas de arquivos para esse NAS',
'Class:NAS/Attribute:nasfilesystem_list+' => 'Todos os Sistemas de arquivos para este NAS',
));
//
@@ -432,7 +432,7 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:PowerSource+' => '',
'Class:PowerSource/ComplementaryName' => '%1$s - %2$s~~',
'Class:PowerSource/Attribute:pdus_list' => 'PDUs',
'Class:PowerSource/Attribute:pdus_list+' => 'Todos os PDUs utilizando essa fonte de energia',
'Class:PowerSource/Attribute:pdus_list+' => 'Todos os PDUs utilizando esta Fonte de energia',
));
//
@@ -478,7 +478,7 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:Enclosure/Attribute:nb_u' => 'Unidades',
'Class:Enclosure/Attribute:nb_u+' => '',
'Class:Enclosure/Attribute:device_list' => 'Dispositivos',
'Class:Enclosure/Attribute:device_list+' => 'Todos os dispositivos para essa gaveta',
'Class:Enclosure/Attribute:device_list+' => 'Todos os Dispositivos presentes nesta Gaveta',
));
//
@@ -489,9 +489,9 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:ApplicationSolution' => 'Solução de Aplicação',
'Class:ApplicationSolution+' => '',
'Class:ApplicationSolution/Attribute:functionalcis_list' => 'ICs',
'Class:ApplicationSolution/Attribute:functionalcis_list+' => 'Todos os itens de configuração que compõem essa solução de aplicação',
'Class:ApplicationSolution/Attribute:functionalcis_list+' => 'Todos os Itens de configuração (IC) que compõem esta Solução de aplicação',
'Class:ApplicationSolution/Attribute:businessprocess_list' => 'Processos de negócio',
'Class:ApplicationSolution/Attribute:businessprocess_list+' => 'Todos os processos do negócio dependente para essa solução de aplicação',
'Class:ApplicationSolution/Attribute:businessprocess_list+' => 'Todos os Processos de negócio dependentes desta Solução de aplicação',
'Class:ApplicationSolution/Attribute:status' => 'Status',
'Class:ApplicationSolution/Attribute:status+' => '',
'Class:ApplicationSolution/Attribute:status/Value:active' => 'Ativo',
@@ -499,9 +499,9 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:ApplicationSolution/Attribute:status/Value:inactive' => 'Inativo',
'Class:ApplicationSolution/Attribute:status/Value:inactive+' => '',
'Class:ApplicationSolution/Attribute:redundancy' => 'Análise de impacto: configuração de redundância',
'Class:ApplicationSolution/Attribute:redundancy/disabled' => 'A solução está funcionando se todos os ICs estiverem funcionando',
'Class:ApplicationSolution/Attribute:redundancy/count' => 'A solução está funcionando se no mínimo %1$s IC(s) estiver(em) funcionando',
'Class:ApplicationSolution/Attribute:redundancy/percent' => 'A solução está funcionando se no mínimo %1$s %% dos ICs estiverem funcionando',
'Class:ApplicationSolution/Attribute:redundancy/disabled' => 'A Solução de aplicação está funcionando se todos os Itens de configuração (ICs) estiverem funcionando',
'Class:ApplicationSolution/Attribute:redundancy/count' => 'A Solução de aplicação está funcionando se no mínimo %1$s Item(ns) de configuração (IC(s)) estiver(em) funcionando',
'Class:ApplicationSolution/Attribute:redundancy/percent' => 'A Solução de aplicação está funcionando se no mínimo %1$s %% dos Itens de configuração (ICs) estiverem funcionando',
));
//
@@ -568,8 +568,8 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:DBServer' => 'Servidor de DB',
'Class:DBServer+' => '',
'Class:DBServer/Attribute:dbschema_list' => 'Esquemas de DB',
'Class:DBServer/Attribute:dbschema_list+' => 'Todos os esquemas para esse servidor de banco de dados',
'Class:DBServer/Attribute:dbschema_list' => 'Esquemas de BD',
'Class:DBServer/Attribute:dbschema_list+' => 'Todos os Esquemas de BD para este Servidor de Banco de Dados (BD)',
));
//
@@ -580,7 +580,7 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:WebServer' => 'Servidor Web',
'Class:WebServer+' => '',
'Class:WebServer/Attribute:webapp_list' => 'Aplicações Web',
'Class:WebServer/Attribute:webapp_list+' => 'Todas as aplicações web disponíveis para esse servidor web',
'Class:WebServer/Attribute:webapp_list+' => 'Todas as Aplicações Web disponíveis para este Servidor Web',
));
//
@@ -620,7 +620,7 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
//
Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:DatabaseSchema' => 'Esquema de DB',
'Class:DatabaseSchema' => 'Esquema de Banco de Dados (BD)',
'Class:DatabaseSchema+' => '',
'Class:DatabaseSchema/ComplementaryName' => '%1$s - %2$s~~',
'Class:DatabaseSchema/Attribute:dbserver_id' => 'Servidor de DB',
@@ -664,7 +664,7 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:VirtualDevice/Attribute:status/Value:stock' => 'Suporte',
'Class:VirtualDevice/Attribute:status/Value:stock+' => 'Suporte',
'Class:VirtualDevice/Attribute:logicalvolumes_list' => 'Volume lógico',
'Class:VirtualDevice/Attribute:logicalvolumes_list+' => 'Todos os volumes lógicos associados a este dispositivo',
'Class:VirtualDevice/Attribute:logicalvolumes_list+' => 'Todos os Volumes lógicos associados à este Dispositivo virtual',
));
//
@@ -674,8 +674,8 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:VirtualHost' => 'Host Virtual',
'Class:VirtualHost+' => '',
'Class:VirtualHost/Attribute:virtualmachine_list' => 'Máquinas Virtuais',
'Class:VirtualHost/Attribute:virtualmachine_list+' => 'Todas as máquinas virtuais hospedadas neste Host',
'Class:VirtualHost/Attribute:virtualmachine_list' => 'Máquinas virtuais (VMs)',
'Class:VirtualHost/Attribute:virtualmachine_list+' => 'Todas as Máquinas virtuais (VMs) hospedadas neste Host virtual',
));
//
@@ -703,11 +703,11 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:Farm' => 'Cluster/HA',
'Class:Farm+' => '',
'Class:Farm/Attribute:hypervisor_list' => 'Hypervisors',
'Class:Farm/Attribute:hypervisor_list+' => 'Todos os hypervisors que compõem esse Cluster/HA',
'Class:Farm/Attribute:hypervisor_list+' => 'Todos os Hypervisors que compõem este Cluster/HA',
'Class:Farm/Attribute:redundancy' => 'Alta disponibilidade',
'Class:Farm/Attribute:redundancy/disabled' => 'O farm está ativo se todos os hipervisores estiverem em alta',
'Class:Farm/Attribute:redundancy/count' => 'O farm está ativo se pelo menos %1$s hypervisor(es) estiver (ão) para cima',
'Class:Farm/Attribute:redundancy/percent' => 'O farm está ativo se pelo menos %1$s %% dos hipervisores estiverem em alta',
'Class:Farm/Attribute:redundancy/disabled' => 'O farm está ativo se todos os hypervisors estiverem disponíveis',
'Class:Farm/Attribute:redundancy/count' => 'O farm está ativo se pelo menos %1$s hypervisor(s) estiver(em) disponíveis',
'Class:Farm/Attribute:redundancy/percent' => 'O farm está ativo se pelo menos %1$s %% dos hypervisors estiverem disponíveis',
));
//
@@ -740,8 +740,8 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:VirtualMachine/Attribute:ram+' => '',
'Class:VirtualMachine/Attribute:managementip' => 'IP',
'Class:VirtualMachine/Attribute:managementip+' => '',
'Class:VirtualMachine/Attribute:logicalinterface_list' => 'Placas de rede',
'Class:VirtualMachine/Attribute:logicalinterface_list+' => 'Todas as placas de rede',
'Class:VirtualMachine/Attribute:logicalinterface_list' => 'Interfaces de rede',
'Class:VirtualMachine/Attribute:logicalinterface_list+' => 'Todas as interfaces de rede',
));
//
@@ -749,7 +749,7 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
//
Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:LogicalVolume' => 'Volume lógico',
'Class:LogicalVolume' => 'Volume Lógico',
'Class:LogicalVolume+' => '',
'Class:LogicalVolume/Attribute:name' => 'Nome',
'Class:LogicalVolume/Attribute:name+' => '',
@@ -757,7 +757,7 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:LogicalVolume/Attribute:lun_id+' => '',
'Class:LogicalVolume/Attribute:description' => 'Descrição',
'Class:LogicalVolume/Attribute:description+' => '',
'Class:LogicalVolume/Attribute:raid_level' => 'Nível RAID',
'Class:LogicalVolume/Attribute:raid_level' => 'Nível de RAID',
'Class:LogicalVolume/Attribute:raid_level+' => '',
'Class:LogicalVolume/Attribute:size' => 'Tamanho',
'Class:LogicalVolume/Attribute:size+' => '',
@@ -766,9 +766,9 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:LogicalVolume/Attribute:storagesystem_name' => 'Nome do sistema de arquivos',
'Class:LogicalVolume/Attribute:storagesystem_name+' => '',
'Class:LogicalVolume/Attribute:servers_list' => 'Servidores',
'Class:LogicalVolume/Attribute:servers_list+' => 'Todos os servidores usando esse volume',
'Class:LogicalVolume/Attribute:servers_list+' => 'Todos os Servidores usando este Volume lógico',
'Class:LogicalVolume/Attribute:virtualdevices_list' => 'Dispositivos virtuais',
'Class:LogicalVolume/Attribute:virtualdevices_list+' => 'Todos os dispositivos virtuais usando esse volume',
'Class:LogicalVolume/Attribute:virtualdevices_list+' => 'Todos os Dispositivos virtuais usando este Volume lógico',
));
//
@@ -776,7 +776,7 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
//
Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:lnkServerToVolume' => 'Link Servidor / Volume',
'Class:lnkServerToVolume' => 'Relação entre Servidor / Volume',
'Class:lnkServerToVolume+' => '',
'Class:lnkServerToVolume/Name' => '%1$s / %2$s~~',
'Class:lnkServerToVolume/Attribute:volume_id' => 'Volume',
@@ -796,7 +796,7 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
//
Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:lnkVirtualDeviceToVolume' => 'Link Dispositivo Virtual / Volume',
'Class:lnkVirtualDeviceToVolume' => 'Relação entre Dispositivo virtual / Volume',
'Class:lnkVirtualDeviceToVolume+' => '',
'Class:lnkVirtualDeviceToVolume/Name' => '%1$s / %2$s~~',
'Class:lnkVirtualDeviceToVolume/Attribute:volume_id' => 'Volume',
@@ -816,7 +816,7 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
//
Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:lnkSanToDatacenterDevice' => 'Link SAN / Dispositivo Datacenter',
'Class:lnkSanToDatacenterDevice' => 'Relação entre Switch SAN / Dispositivo de datacenter',
'Class:lnkSanToDatacenterDevice+' => '',
'Class:lnkSanToDatacenterDevice/Name' => '%1$s / %2$s~~',
'Class:lnkSanToDatacenterDevice/Attribute:san_id' => 'Switch SAN',
@@ -827,9 +827,9 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:lnkSanToDatacenterDevice/Attribute:datacenterdevice_id+' => '',
'Class:lnkSanToDatacenterDevice/Attribute:datacenterdevice_name' => 'Nome do dispositivo',
'Class:lnkSanToDatacenterDevice/Attribute:datacenterdevice_name+' => '',
'Class:lnkSanToDatacenterDevice/Attribute:san_port' => 'FC SAN',
'Class:lnkSanToDatacenterDevice/Attribute:san_port' => 'FC do SAN',
'Class:lnkSanToDatacenterDevice/Attribute:san_port+' => '',
'Class:lnkSanToDatacenterDevice/Attribute:datacenterdevice_port' => 'Dispositivo de FC',
'Class:lnkSanToDatacenterDevice/Attribute:datacenterdevice_port' => 'FC do dispositivo',
'Class:lnkSanToDatacenterDevice/Attribute:datacenterdevice_port+' => '',
));
@@ -888,7 +888,7 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:Software/Attribute:version' => 'Versão',
'Class:Software/Attribute:version+' => '',
'Class:Software/Attribute:documents_list' => 'Documentos',
'Class:Software/Attribute:documents_list+' => 'Todos os documentos associados a este software',
'Class:Software/Attribute:documents_list+' => 'Todos os Documentos associados a este Software',
'Class:Software/Attribute:type' => 'Tipo',
'Class:Software/Attribute:type+' => '',
'Class:Software/Attribute:type/Value:DBServer' => 'Servidor de DB',
@@ -902,11 +902,11 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:Software/Attribute:type/Value:WebServer' => 'Servidor Web',
'Class:Software/Attribute:type/Value:WebServer+' => 'Servidor Web',
'Class:Software/Attribute:softwareinstance_list' => 'Instâncias de Software',
'Class:Software/Attribute:softwareinstance_list+' => 'Todas as instâncias software para esse software',
'Class:Software/Attribute:softwareinstance_list+' => 'Todas as Instâncias de software para este Software',
'Class:Software/Attribute:softwarepatch_list' => 'Atualizações de software',
'Class:Software/Attribute:softwarepatch_list+' => 'Todas as atualizações para esse software',
'Class:Software/Attribute:softwarelicence_list' => 'Licenças de Software',
'Class:Software/Attribute:softwarelicence_list+' => 'Todas as licenças software para esse software',
'Class:Software/Attribute:softwarepatch_list+' => 'Todas as Atualizações para este Software',
'Class:Software/Attribute:softwarelicence_list' => 'Licenças de software',
'Class:Software/Attribute:softwarelicence_list+' => 'Todas as Licenças de software para este Software',
));
//
@@ -919,7 +919,7 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:Patch/Attribute:name' => 'Nome',
'Class:Patch/Attribute:name+' => '',
'Class:Patch/Attribute:documents_list' => 'Documentos',
'Class:Patch/Attribute:documents_list+' => 'Todos os documentos associados à esta atualização',
'Class:Patch/Attribute:documents_list+' => 'Todos os Documentos associados à esta Atualização',
'Class:Patch/Attribute:description' => 'Descrição',
'Class:Patch/Attribute:description+' => '',
'Class:Patch/Attribute:finalclass' => 'Tipo',
@@ -934,7 +934,7 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:OSPatch' => 'Atualização de SO',
'Class:OSPatch+' => '',
'Class:OSPatch/Attribute:functionalcis_list' => 'Dispositivos',
'Class:OSPatch/Attribute:functionalcis_list+' => 'Todos os sistemas onde essa atualização está instalada',
'Class:OSPatch/Attribute:functionalcis_list+' => 'Todos os sistemas onde essa Atualização de SO está instalada',
'Class:OSPatch/Attribute:osversion_id' => 'Versão do SO',
'Class:OSPatch/Attribute:osversion_id+' => '',
'Class:OSPatch/Attribute:osversion_name' => 'Nome da versão do SO',
@@ -952,8 +952,8 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:SoftwarePatch/Attribute:software_id+' => '',
'Class:SoftwarePatch/Attribute:software_name' => 'Nome do software',
'Class:SoftwarePatch/Attribute:software_name+' => '',
'Class:SoftwarePatch/Attribute:softwareinstances_list' => 'Instâncias do Software',
'Class:SoftwarePatch/Attribute:softwareinstances_list+' => 'Todos os sistemas onde essa atualização de software está instalada',
'Class:SoftwarePatch/Attribute:softwareinstances_list' => 'Instâncias de software',
'Class:SoftwarePatch/Attribute:softwareinstances_list+' => 'Todos os sistemas onde essa Atualização de software está instalada',
));
//
@@ -966,7 +966,7 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:Licence/Attribute:name' => 'Nome',
'Class:Licence/Attribute:name+' => '',
'Class:Licence/Attribute:documents_list' => 'Documentos',
'Class:Licence/Attribute:documents_list+' => 'Todos os documentos associados à esta licença',
'Class:Licence/Attribute:documents_list+' => 'Todos os Documentos associados à esta Licença',
'Class:Licence/Attribute:org_id' => 'Organização',
'Class:Licence/Attribute:org_id+' => '',
'Class:Licence/Attribute:organization_name' => 'Nome da organização',
@@ -1003,10 +1003,10 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:OSLicence/Attribute:osversion_id+' => '',
'Class:OSLicence/Attribute:osversion_name' => 'Nome da versão do SO',
'Class:OSLicence/Attribute:osversion_name+' => '',
'Class:OSLicence/Attribute:virtualmachines_list' => 'Máquinas virtuais',
'Class:OSLicence/Attribute:virtualmachines_list+' => 'Todas as máquinas virtuais onde essa licença é utilizada',
'Class:OSLicence/Attribute:servers_list' => 'servidores',
'Class:OSLicence/Attribute:servers_list+' => 'Todos os servidores onde essa licença é utilizada',
'Class:OSLicence/Attribute:virtualmachines_list' => 'Máquinas virtuais (VMs)',
'Class:OSLicence/Attribute:virtualmachines_list+' => 'Todas as Máquinas virtuais (VMs) onde essa Licença é utilizada',
'Class:OSLicence/Attribute:servers_list' => 'Servidores',
'Class:OSLicence/Attribute:servers_list+' => 'Todos os Servidores onde essa Licença é utilizada',
));
//
@@ -1014,15 +1014,15 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
//
Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:SoftwareLicence' => 'Licença de software',
'Class:SoftwareLicence' => 'Licença de Software',
'Class:SoftwareLicence+' => '',
'Class:SoftwareLicence/ComplementaryName' => '%1$s - %2$s~~',
'Class:SoftwareLicence/Attribute:software_id' => 'Software',
'Class:SoftwareLicence/Attribute:software_id+' => '',
'Class:SoftwareLicence/Attribute:software_name' => 'Nome do software',
'Class:SoftwareLicence/Attribute:software_name+' => '',
'Class:SoftwareLicence/Attribute:softwareinstance_list' => 'Instâncias do software',
'Class:SoftwareLicence/Attribute:softwareinstance_list+' => 'Todos os sistemas onde essa licença é utilizada',
'Class:SoftwareLicence/Attribute:softwareinstance_list' => 'Instâncias de software',
'Class:SoftwareLicence/Attribute:softwareinstance_list+' => 'Todos os sistemas onde esta Licença é utilizada',
));
//
@@ -1030,7 +1030,7 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
//
Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:lnkDocumentToLicence' => 'Link Documento / Licença',
'Class:lnkDocumentToLicence' => 'Relação entre Documento / Licença',
'Class:lnkDocumentToLicence+' => '',
'Class:lnkDocumentToLicence/Name' => '%1$s / %2$s~~',
'Class:lnkDocumentToLicence/Attribute:licence_id' => 'Licença',
@@ -1075,7 +1075,7 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:Brand/Attribute:logo' => 'Logo~~',
'Class:Brand/Attribute:logo+' => '~~',
'Class:Brand/Attribute:physicaldevices_list' => 'Dispositivos físicos',
'Class:Brand/Attribute:physicaldevices_list+' => 'Todos os dispositivos físicos correspondentes a esse(a) fabricante',
'Class:Brand/Attribute:physicaldevices_list+' => 'Todos os Dispositivos físicos correspondentes a esse(a) Fabricante',
'Class:Brand/UniquenessRule:name+' => 'O nome do(a) fabricante deve ser único',
'Class:Brand/UniquenessRule:name' => 'Esse(a) fabricante já existe',
));
@@ -1133,7 +1133,7 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:Model/Attribute:type/Value:Phone' => 'Telefone',
'Class:Model/Attribute:type/Value:Phone+' => '',
'Class:Model/Attribute:physicaldevices_list' => 'Dispositivo físico',
'Class:Model/Attribute:physicaldevices_list+' => 'Todos os dispositivos físicos correspondentes a este modelo',
'Class:Model/Attribute:physicaldevices_list+' => 'Todos os Dispositivos físicos correspondentes à este Modelo',
'Class:Model/UniquenessRule:name_brand+' => 'O nome do modelo deve ser único',
'Class:Model/UniquenessRule:name_brand' => 'Este modelo já existe',
));
@@ -1145,8 +1145,8 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:NetworkDeviceType' => 'Tipo de dispositivo de rede',
'Class:NetworkDeviceType+' => '',
'Class:NetworkDeviceType/Attribute:networkdevicesdevices_list' => 'Dispositivo de rede',
'Class:NetworkDeviceType/Attribute:networkdevicesdevices_list+' => 'Todos os dispositivo de rede correspondentes a este tipo',
'Class:NetworkDeviceType/Attribute:networkdevicesdevices_list' => 'Dispositivos de rede',
'Class:NetworkDeviceType/Attribute:networkdevicesdevices_list+' => 'Todos os Dispositivos de rede correspondentes a este Tipo',
));
//
@@ -1154,7 +1154,7 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
//
Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:IOSVersion' => 'Versão do IOS',
'Class:IOSVersion' => 'Versão do SO',
'Class:IOSVersion+' => '',
'Class:IOSVersion/Attribute:brand_id' => 'Fabricante',
'Class:IOSVersion/Attribute:brand_id+' => '',
@@ -1167,7 +1167,7 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
//
Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:lnkDocumentToPatch' => 'Link Documento / Atualização',
'Class:lnkDocumentToPatch' => 'Relação entre Documento / Atualização',
'Class:lnkDocumentToPatch+' => '',
'Class:lnkDocumentToPatch/Name' => '%1$s / %2$s~~',
'Class:lnkDocumentToPatch/Attribute:patch_id' => 'Atualização',
@@ -1185,7 +1185,7 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
//
Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:lnkSoftwareInstanceToSoftwarePatch' => 'Link Instância de Software / Atualização de Software',
'Class:lnkSoftwareInstanceToSoftwarePatch' => 'Relação entre Instância de software / Atualização de software',
'Class:lnkSoftwareInstanceToSoftwarePatch+' => '',
'Class:lnkSoftwareInstanceToSoftwarePatch/Name' => '%1$s / %2$s~~',
'Class:lnkSoftwareInstanceToSoftwarePatch/Attribute:softwarepatch_id' => 'Atualização de software',
@@ -1203,7 +1203,7 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
//
Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:lnkFunctionalCIToOSPatch' => 'Link IC / Atualização de SO',
'Class:lnkFunctionalCIToOSPatch' => 'Relação entre IC / Atualização de SO',
'Class:lnkFunctionalCIToOSPatch+' => '',
'Class:lnkFunctionalCIToOSPatch/Name' => '%1$s / %2$s~~',
'Class:lnkFunctionalCIToOSPatch/Attribute:ospatch_id' => 'Atualização de SO',
@@ -1221,7 +1221,7 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
//
Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:lnkDocumentToSoftware' => 'Link Documento / Software',
'Class:lnkDocumentToSoftware' => 'Relação entre Documento / Software',
'Class:lnkDocumentToSoftware+' => '',
'Class:lnkDocumentToSoftware/Name' => '%1$s / %2$s~~',
'Class:lnkDocumentToSoftware/Attribute:software_id' => 'Software',
@@ -1285,7 +1285,7 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
//
Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:lnkSubnetToVLAN' => 'Link Sub-rede / VLAN',
'Class:lnkSubnetToVLAN' => 'Relação entre Sub-rede / VLAN',
'Class:lnkSubnetToVLAN+' => '',
'Class:lnkSubnetToVLAN/Name' => '%1$s / %2$s~~',
'Class:lnkSubnetToVLAN/Attribute:subnet_id' => 'Sub-rede',
@@ -1305,7 +1305,7 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
//
Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:NetworkInterface' => 'Placa de Rede',
'Class:NetworkInterface' => 'Adaptador de Rede',
'Class:NetworkInterface+' => '',
'Class:NetworkInterface/Attribute:name' => 'Nome',
'Class:NetworkInterface/Attribute:name+' => '',
@@ -1355,7 +1355,7 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
//
Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:lnkPhysicalInterfaceToVLAN' => 'Link Interfaces físicas / VLAN',
'Class:lnkPhysicalInterfaceToVLAN' => 'Relação entre Interface física / VLAN',
'Class:lnkPhysicalInterfaceToVLAN+' => '',
'Class:lnkPhysicalInterfaceToVLAN/Name' => '%1$s %2$s / %3$s~~',
'Class:lnkPhysicalInterfaceToVLAN/Attribute:physicalinterface_id' => 'Interface física',
@@ -1410,7 +1410,7 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
//
Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:lnkConnectableCIToNetworkDevice' => 'Link ConnectableCI / NetworkDevice',
'Class:lnkConnectableCIToNetworkDevice' => 'Relação entre Dispositivo conectado / Dispositivo de rede',
'Class:lnkConnectableCIToNetworkDevice+' => '',
'Class:lnkConnectableCIToNetworkDevice/Name' => '%1$s / %2$s~~',
'Class:lnkConnectableCIToNetworkDevice/Attribute:networkdevice_id' => 'Dispositivo de rede',
@@ -1438,7 +1438,7 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
//
Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:lnkApplicationSolutionToFunctionalCI' => 'Link Solução de Aplicação / IC',
'Class:lnkApplicationSolutionToFunctionalCI' => 'Relação entre Solução de aplicação / IC',
'Class:lnkApplicationSolutionToFunctionalCI+' => '',
'Class:lnkApplicationSolutionToFunctionalCI/Name' => '%1$s / %2$s~~',
'Class:lnkApplicationSolutionToFunctionalCI/Attribute:applicationsolution_id' => 'Solução de aplicação',
@@ -1456,7 +1456,7 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
//
Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:lnkApplicationSolutionToBusinessProcess' => 'Link ApplicationSolution / BusinessProcess',
'Class:lnkApplicationSolutionToBusinessProcess' => 'Relação entre Solução de aplicação / Processo de negócio',
'Class:lnkApplicationSolutionToBusinessProcess+' => '',
'Class:lnkApplicationSolutionToBusinessProcess/Name' => '%1$s / %2$s~~',
'Class:lnkApplicationSolutionToBusinessProcess/Attribute:businessprocess_id' => 'Processo de negócio',
@@ -1500,7 +1500,7 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:Group/Attribute:parent_name' => 'Nome',
'Class:Group/Attribute:parent_name+' => '',
'Class:Group/Attribute:ci_list' => 'ICs relacionados',
'Class:Group/Attribute:ci_list+' => 'Todos os itens de configuração associados a este grupo',
'Class:Group/Attribute:ci_list+' => 'Todos os Itens de configuração (IC) associados à este Grupo',
'Class:Group/Attribute:parent_id_friendlyname' => 'Grupo pai',
'Class:Group/Attribute:parent_id_friendlyname+' => '',
));
@@ -1510,7 +1510,7 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
//
Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:lnkGroupToCI' => 'Link Grupo / IC',
'Class:lnkGroupToCI' => 'Relação entre Grupo / IC',
'Class:lnkGroupToCI+' => '',
'Class:lnkGroupToCI/Name' => '%1$s / %2$s~~',
'Class:lnkGroupToCI/Attribute:group_id' => 'Grupo',
@@ -1548,10 +1548,10 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
//
Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:lnkDocumentToFunctionalCI' => 'Link de Documento / IC',
'Class:lnkDocumentToFunctionalCI' => 'Relação entre Documento / IC',
'Class:lnkDocumentToFunctionalCI+' => '',
'Class:lnkDocumentToFunctionalCI/Name' => '%1$s / %2$s~~',
'Class:lnkDocumentToFunctionalCI/Attribute:functionalci_id' => 'ICs',
'Class:lnkDocumentToFunctionalCI/Attribute:functionalci_id' => 'IC',
'Class:lnkDocumentToFunctionalCI/Attribute:functionalci_id+' => '',
'Class:lnkDocumentToFunctionalCI/Attribute:functionalci_name' => 'Nome do IC',
'Class:lnkDocumentToFunctionalCI/Attribute:functionalci_name+' => '',
@@ -1579,7 +1579,7 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Menu:Licence+' => 'Lista de Licenças',
'Menu:Patch' => 'Atualizações',
'Menu:Patch+' => 'Lista de Atualizações',
'Menu:ApplicationInstance' => 'Softwares Instalados',
'Menu:ApplicationInstance' => 'Softwares instalados',
'Menu:ApplicationInstance+' => 'Serviços de aplicações e servidores de banco de dados',
'Menu:ConfigManagementHardware' => 'Gerenciamento de Infraestrutura',
'Menu:Subnet' => 'Sub-redes',
@@ -1595,9 +1595,9 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Menu:PC' => 'Estação de Trabalho',
'Menu:PC+' => 'Lista de Estações de Trabalho',
'Menu:NewCI' => 'Novo IC',
'Menu:NewCI+' => '',
'Menu:NewCI+' => 'Novo Item de Configuração (IC)',
'Menu:SearchCIs' => 'Pesquisar por ICs',
'Menu:SearchCIs+' => '',
'Menu:SearchCIs+' => 'Pesquisar por Itens de Configuração (ICs)',
'Menu:ConfigManagement:Devices' => 'Dispositivos',
'Menu:ConfigManagement:AllDevices' => 'Infraestrutura',
'Menu:ConfigManagement:virtualization' => 'Virtualização',
@@ -1605,7 +1605,7 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Menu:ConfigManagement:SWAndApps' => 'Softwares e aplicações',
'Menu:ConfigManagement:Misc' => 'Diversos',
'Menu:Group' => 'Grupos de ICs',
'Menu:Group+' => 'Lista de Grupos de ICs',
'Menu:Group+' => 'Lista de Grupos de Itens de Configuração (ICs)',
'Menu:OSVersion' => 'Versão do SO',
'Menu:OSVersion+' => 'Lista de Versões do SO',
'Menu:Software' => 'Catálogo de Software',

View File

@@ -10,7 +10,7 @@
*
*/
Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Menu:ConfigFileEditor' => 'Plain text editor~~',
'Menu:ConfigFileEditor' => 'Configurações',
'config-edit-title' => 'Editor do arquivo de configuração',
'config-edit-intro' => 'Tenha cuidado ao editar o arquivo de configuração',
'Menu:ConfigEditor' => 'Configurações',

View File

@@ -10,8 +10,16 @@
*
*/
Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'iTopUpdate:UI:PageTitle' => 'Atualização do '.ITOP_APPLICATION_SHORT, 'itop-core-update:UI:SelectUpdateFile' => 'Atualização do '.ITOP_APPLICATION_SHORT, 'itop-core-update:UI:ConfirmUpdate' => 'Atualização do '.ITOP_APPLICATION_SHORT, 'itop-core-update:UI:UpdateCoreFiles' => 'Atualização do '.ITOP_APPLICATION_SHORT, 'iTopUpdate:UI:MaintenanceModeActive' => 'O '.ITOP_APPLICATION_SHORT.' encontra-se em manutenção, nenhum usuário pode acessar a aplicação. Você precisa rodar o Setup ou restaurar os arquivos da aplicação para voltar ao modo normal',
'itop-core-update:UI:UpdateDone' => 'Atualização do '.ITOP_APPLICATION_SHORT, 'itop-core-update/Operation:SelectUpdateFile/Title' => 'Atualização do '.ITOP_APPLICATION_SHORT, 'itop-core-update/Operation:ConfirmUpdate/Title' => 'Confirmar Atualização do '.ITOP_APPLICATION_SHORT, 'itop-core-update/Operation:UpdateCoreFiles/Title' => 'Aplicação em Atualização',
'iTopUpdate:UI:PageTitle' => 'Atualização do '.ITOP_APPLICATION_SHORT,
'itop-core-update:UI:SelectUpdateFile' => 'Atualização do '.ITOP_APPLICATION_SHORT,
'itop-core-update:UI:ConfirmUpdate' => 'Atualização do '.ITOP_APPLICATION_SHORT,
'itop-core-update:UI:UpdateCoreFiles' => 'Atualização do '.ITOP_APPLICATION_SHORT,
'iTopUpdate:UI:MaintenanceModeActive' => 'O '.ITOP_APPLICATION_SHORT.' encontra-se em manutenção, nenhum usuário pode acessar a aplicação. Você precisa rodar o Setup ou restaurar os arquivos da aplicação para voltar ao modo normal',
'itop-core-update:UI:UpdateDone' => 'Atualização do '.ITOP_APPLICATION_SHORT,
'itop-core-update/Operation:SelectUpdateFile/Title' => 'Atualização do '.ITOP_APPLICATION_SHORT,
'itop-core-update/Operation:ConfirmUpdate/Title' => 'Confirmar Atualização do '.ITOP_APPLICATION_SHORT,
'itop-core-update/Operation:UpdateCoreFiles/Title' => 'Aplicação em Atualização',
'itop-core-update/Operation:UpdateDone/Title' => 'Atualização do '.ITOP_APPLICATION_SHORT.' finalizada',
'iTopUpdate:UI:SelectUpdateFile' => 'Escolha o arquivo de atualização para enviar',
'iTopUpdate:UI:CheckUpdate' => 'Verificando arquivo de atualização',
@@ -23,7 +31,7 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'iTopUpdate:UI:Cancel' => 'Cancelar',
'iTopUpdate:UI:CannotUpdateNewModules' => '<b>Alguns módulos novos foram detectados</b>, uma atualização parcial não pode ser executada.</br>Siga o <a target="_blank" href="%2$s"> procedimento</a> para atualizar manualmente seu iTop. Você deve usar o <a href="%1$s">Setup</a> para atualizar a aplicação.',
'iTopUpdate:UI:Continue' => 'Continuar',
'iTopUpdate:UI:RunSetup' => 'Rodar Setup',
'iTopUpdate:UI:RunSetup' => 'Executar Setup',
'iTopUpdate:UI:WithDBBackup' => 'Backup do banco de dados',
'iTopUpdate:UI:WithFilesBackup' => 'Backup dos arquivos da aplicação',
'iTopUpdate:UI:WithoutBackup' => 'Backup não planejado',
@@ -40,7 +48,8 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'iTopUpdate:UI:DoBackup:Label' => 'Backup de arquivos e banco de dados',
'iTopUpdate:UI:DoBackup:Warning' => 'Backup não recomendado devido ao espaço em disco limitado',
'iTopUpdate:UI:DiskFreeSpace' => 'Espaço em disco disponível',
'iTopUpdate:UI:ItopDiskSpace' => 'Espaço em disco do '.ITOP_APPLICATION_SHORT, 'iTopUpdate:UI:DBDiskSpace' => 'Espaço em disco do banco de dados',
'iTopUpdate:UI:ItopDiskSpace' => 'Espaço em disco do '.ITOP_APPLICATION_SHORT,
'iTopUpdate:UI:DBDiskSpace' => 'Espaço em disco do banco de dados',
'iTopUpdate:UI:FileUploadMaxSize' => 'Tamanho máximo de envio de arquivos',
'iTopUpdate:UI:PostMaxSize' => 'PHP ini post_max_size: %1$s',
'iTopUpdate:UI:UploadMaxFileSize' => 'PHP ini upload_max_filesize: %1$s',
@@ -81,7 +90,9 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'iTopUpdate:UI:RestoreArchive' => 'Você pode restaurar sua aplicação com o arquivo \'%1$s\'',
'iTopUpdate:UI:RestoreBackup' => 'Você pode restaurar seu banco de dados com \'%1$s\'',
'iTopUpdate:UI:UpdateDone' => 'Atualizado com sucesso',
'Menu:iTopUpdate' => 'Atualização do '.ITOP_APPLICATION_SHORT, 'Menu:iTopUpdate+' => 'Atualização do '.ITOP_APPLICATION_SHORT, 'Class:ModuleInstallation/Attribute:installed' => 'Instalado em',
'Menu:iTopUpdate' => 'Atualização do '.ITOP_APPLICATION_SHORT,
'Menu:iTopUpdate+' => 'Atualização do '.ITOP_APPLICATION_SHORT,
'Class:ModuleInstallation/Attribute:installed' => 'Instalado em',
'Class:ModuleInstallation/Attribute:name' => 'Nome',
'Class:ModuleInstallation/Attribute:version' => 'Versão',
'Class:ModuleInstallation/Attribute:comment' => 'Comentário'

View File

@@ -12,7 +12,7 @@
Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'FilesInformation:Error:MissingFile' => 'Arquivo ausente: %1$s',
'FilesInformation:Error:CorruptedFile' => 'Arquivo %1$s está corrompido',
'FilesInformation:Error:ListCorruptedFile' => 'File(s) corrupted: %1$s ~~',
'FilesInformation:Error:ListCorruptedFile' => 'Arquivo(s) corrompido(s): %1$s ',
'FilesInformation:Error:CantWriteToFile' => 'Sem permissão de escrita no arquivo %1$s',
));

View File

@@ -14,8 +14,8 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Menu:iTopHub:Register' => 'Conectar ao iTop Hub',
'Menu:iTopHub:Register+' => 'Vá para o iTop Hub para atualizar sua instância '.ITOP_APPLICATION_SHORT,
'Menu:iTopHub:Register:Description' => '<p>Obtenha acesso à sua plataforma da comunidade iTop Hub!</br>Encontre todos os conteúdos e informações necessárias, gerencie suas instâncias '.ITOP_APPLICATION_SHORT.' por meio de ferramentas personalizadas & instale mais extensões.</br><br/>Ao conectar-se ao iTop hub a partir desta página, você enviará informações da sua instância '.ITOP_APPLICATION_SHORT.' ao iTop Hub.</p>',
'Menu:iTopHub:MyExtensions' => 'Extensões Implantadas',
'Menu:iTopHub:MyExtensions+' => 'Veja a lista de extensões implantadas nesta instância do '.ITOP_APPLICATION_SHORT,
'Menu:iTopHub:MyExtensions' => 'Extensões Instaladas',
'Menu:iTopHub:MyExtensions+' => 'Veja a lista de extensões instaladas nesta instância do '.ITOP_APPLICATION_SHORT,
'Menu:iTopHub:BrowseExtensions' => 'Obter Extensões do iTop Hub',
'Menu:iTopHub:BrowseExtensions+' => 'Navegue por mais extensões no iTop Hub',
'Menu:iTopHub:BrowseExtensions:Description' => '<p>Visite a loja do iTop Hub, seu único lugar para encontrar extensões maravilhosas do '.ITOP_APPLICATION_SHORT.' !</br>Encontre as extensões que irão ajudá-lo a personalizar e adaptar o '.ITOP_APPLICATION_SHORT.' aos seus processos.</br><br/>Ao conectar-se ao iTop hub a partir desta página, você enviará informações da sua instância '.ITOP_APPLICATION_SHORT.' ao iTop Hub.</p>',
@@ -65,5 +65,3 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'iTopHub:InstallationStatus:Installed' => 'Instalado',
'iTopHub:InstallationStatus:Version_NotInstalled' => 'Versão %1$s <b>NÃO</b> instalada',
));

View File

@@ -188,7 +188,7 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:Incident/Attribute:related_request_list' => 'Solicitações filhas',
'Class:Incident/Attribute:related_request_list+' => '',
'Class:Incident/Attribute:child_incidents_list' => 'Incidentes filhos',
'Class:Incident/Attribute:child_incidents_list+' => 'Todos os subincidentes associados a este incidente',
'Class:Incident/Attribute:child_incidents_list+' => 'Todos os Subincidentes associados à este Incidente',
'Class:Incident/Attribute:public_log' => 'Log público',
'Class:Incident/Attribute:public_log+' => '',
'Class:Incident/Attribute:user_satisfaction' => 'Satisfação do usuário',

View File

@@ -20,7 +20,7 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:KnownError/Attribute:cust_name+' => '',
'Class:KnownError/Attribute:problem_id' => 'Problema relacionado',
'Class:KnownError/Attribute:problem_id+' => '',
'Class:KnownError/Attribute:problem_ref' => 'Ref. Problema relacionado',
'Class:KnownError/Attribute:problem_ref' => 'Ref. problema relacionado',
'Class:KnownError/Attribute:problem_ref+' => '',
'Class:KnownError/Attribute:symptom' => 'Sintoma do erro',
'Class:KnownError/Attribute:symptom+' => '',
@@ -49,9 +49,9 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:KnownError/Attribute:version' => 'Versão',
'Class:KnownError/Attribute:version+' => '',
'Class:KnownError/Attribute:ci_list' => 'ICs',
'Class:KnownError/Attribute:ci_list+' => 'Todos os itens de configuração associados a este erro conhecido',
'Class:KnownError/Attribute:ci_list+' => 'Todos os Itens de Configuração (ICs) associados à este Erro conhecido',
'Class:KnownError/Attribute:document_list' => 'Documentos',
'Class:KnownError/Attribute:document_list+' => 'Todos os documentos associados a este erro conhecido',
'Class:KnownError/Attribute:document_list+' => 'Todos os Documentos associados à este Erro conhecido',
));
//
@@ -59,8 +59,8 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
//
Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:lnkErrorToFunctionalCI' => 'Link Erro Conhecido / IC',
'Class:lnkErrorToFunctionalCI+' => 'Infraestrutura associada a este erro conhecido',
'Class:lnkErrorToFunctionalCI' => 'Relação entre Erro conhecido / IC',
'Class:lnkErrorToFunctionalCI+' => 'Itens de configuração (IC) associados à este Erro conhecido',
'Class:lnkErrorToFunctionalCI/Name' => '%1$s / %2$s~~',
'Class:lnkErrorToFunctionalCI/Attribute:functionalci_id' => 'ICs',
'Class:lnkErrorToFunctionalCI/Attribute:functionalci_id+' => '',
@@ -79,7 +79,7 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
//
Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:lnkDocumentToError' => 'Link Documentos / Erros',
'Class:lnkDocumentToError' => 'Relação entre Documento / Erro',
'Class:lnkDocumentToError+' => 'Uma ligação entre um documento e um erro conhecido',
'Class:lnkDocumentToError/Name' => '%1$s / %2$s~~',
'Class:lnkDocumentToError/Attribute:document_id' => 'Documento',

View File

@@ -1,10 +0,0 @@
<?php
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
return static function (ContainerConfigurator $container) {
// kernel.secret
$container->parameters()->set('kernel.secret', MetaModel::GetConfig()->Get('application.secret'));
};

View File

@@ -1,5 +1,5 @@
framework:
#secret: (part of iTop general configuration, will be set dynamically via bridge.php)
secret: '%env(APP_SECRET)%'
#default_locale: en
#csrf_protection: true
#http_method_override: true

View File

@@ -83,7 +83,6 @@ class Kernel extends BaseKernel
$confDir = '../config';
$container->import(new FileResource($this->getProjectDir().'/config/bundles.php'));
$container->import($confDir.'/bridge.php');
$container->parameters()->set('container.dumper.inline_class_loader', true);
$container->import($confDir.'/{packages}/*'.self::CONFIG_EXTS);

View File

@@ -5,7 +5,7 @@
{% block pTileTitle %}
<div class="ipb-tile--title">
<span>{{ oBrick.GetTitle()|dict_s }}</span><span><span>{{ iCount }}</span>
{% if sIconURL is defined %}
{% if sIconURL is defined and sIconURL is not empty %}
<img id="img{{ id }}" src="{{ sIconURL }}" class="ipb-tile--decoration--icon class-icon" alt="Class Icon">
{% endif %}
</span>

View File

@@ -97,11 +97,11 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:Problem/Attribute:resolution_date' => 'Data de solução',
'Class:Problem/Attribute:resolution_date+' => '',
'Class:Problem/Attribute:knownerrors_list' => 'Erros conhecidos',
'Class:Problem/Attribute:knownerrors_list+' => 'Todos os erros conhecidos associados a este problema',
'Class:Problem/Attribute:knownerrors_list+' => 'Todos os Erros conhecidos associados à este Problema',
'Class:Problem/Attribute:related_request_list' => 'Solicitações relacionadas',
'Class:Problem/Attribute:related_request_list+' => 'Todas as solicitações associadas a este problema',
'Class:Problem/Attribute:related_request_list+' => 'Todas as Solicitações associados à este Problema',
'Class:Problem/Attribute:related_incident_list' => 'Incidentes relacionados',
'Class:Problem/Attribute:related_incident_list+' => 'Todos os incidentes associados a este problema',
'Class:Problem/Attribute:related_incident_list+' => 'Todos os Incidentes associados à este Problema',
'Class:Problem/Stimulus:ev_assign' => 'Atribuir',
'Class:Problem/Stimulus:ev_assign+' => '',
'Class:Problem/Stimulus:ev_reassign' => 'Reatribuir',

View File

@@ -11,11 +11,11 @@
*/
Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Menu:RequestManagement' => 'Gerenciamento de Solicitações',
'Menu:RequestManagement+' => 'Gerenciamento de Solicitações',
'Menu:RequestManagementProvider' => 'Solicitações a provedores',
'Menu:RequestManagementProvider+' => 'Solicitações a provedores',
'Menu:RequestManagement+' => '',
'Menu:RequestManagementProvider' => 'Solicitações a provedores(as)',
'Menu:RequestManagementProvider+' => '',
'Menu:UserRequest:Provider' => 'Solicitações abertas transferidas a provedores',
'Menu:UserRequest:Provider+' => 'Solicitações abertas transferidas a provedores',
'Menu:UserRequest:Provider+' => '',
'Menu:UserRequest:Overview' => 'Visão geral',
'Menu:UserRequest:Overview+' => 'Visão geral',
'Menu:NewUserRequest' => 'Nova solicitação',
@@ -24,8 +24,8 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Menu:SearchUserRequests+' => 'Pesquisar por solicitações',
'Menu:UserRequest:Shortcuts' => 'Atalhos',
'Menu:UserRequest:Shortcuts+' => '',
'Menu:UserRequest:MyRequests' => 'Solicitações abertas por mim',
'Menu:UserRequest:MyRequests+' => 'Solicitações abertas por mim (como Agente)',
'Menu:UserRequest:MyRequests' => 'Solicitações atribuídas a mim',
'Menu:UserRequest:MyRequests+' => 'Solicitações atribuídas a mim (como Agente)',
'Menu:UserRequest:MySupportRequests' => 'Minhas solicitações de suporte',
'Menu:UserRequest:MySupportRequests+' => 'Minhas solicitações de suporte',
'Menu:UserRequest:EscalatedRequests' => 'Solicitações escalonados',
@@ -159,7 +159,7 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:UserRequest/Attribute:tto' => 'TTO',
'Class:UserRequest/Attribute:tto+' => 'Tempo para atribuição (TTO)',
'Class:UserRequest/Attribute:ttr' => 'TTR',
'Class:UserRequest/Attribute:ttr+' => 'Tempo para solução (TTR)',
'Class:UserRequest/Attribute:ttr+' => 'Tempo para resolução (TTR)',
'Class:UserRequest/Attribute:tto_escalation_deadline' => 'Prazo determinado de atribuição (TTO)',
'Class:UserRequest/Attribute:tto_escalation_deadline+' => 'Prazo determinado de Tempo para atribuição (TTO)',
'Class:UserRequest/Attribute:sla_tto_passed' => 'SLA TTO superado',
@@ -172,7 +172,7 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:UserRequest/Attribute:sla_ttr_passed+' => 'Tempo para solução (TTR) do Acordo de Nível de Serviço (ANS) superado',
'Class:UserRequest/Attribute:sla_ttr_over' => 'SLA TTR ultrapassado',
'Class:UserRequest/Attribute:sla_ttr_over+' => 'Tempo para solução (TTR) do Acordo de Nível de Serviço (ANS) ultrapassado',
'Class:UserRequest/Attribute:time_spent' => 'Tempo de solução',
'Class:UserRequest/Attribute:time_spent' => 'Tempo de resolução',
'Class:UserRequest/Attribute:time_spent+' => '',
'Class:UserRequest/Attribute:resolution_code' => 'Código da solução',
'Class:UserRequest/Attribute:resolution_code+' => '',
@@ -198,17 +198,17 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:UserRequest/Attribute:parent_request_id+' => '',
'Class:UserRequest/Attribute:parent_incident_id' => 'Incidente pai',
'Class:UserRequest/Attribute:parent_incident_id+' => '',
'Class:UserRequest/Attribute:parent_request_ref' => 'Ref. Solitação pai',
'Class:UserRequest/Attribute:parent_request_ref' => 'Ref. solitação pai',
'Class:UserRequest/Attribute:parent_request_ref+' => '',
'Class:UserRequest/Attribute:parent_problem_id' => 'Problema pai',
'Class:UserRequest/Attribute:parent_problem_id+' => '',
'Class:UserRequest/Attribute:parent_problem_ref' => 'Ref. Problema pai',
'Class:UserRequest/Attribute:parent_problem_ref' => 'Ref. problema pai',
'Class:UserRequest/Attribute:parent_problem_ref+' => '',
'Class:UserRequest/Attribute:parent_change_id' => 'Mudança pai',
'Class:UserRequest/Attribute:parent_change_id+' => '',
'Class:UserRequest/Attribute:parent_change_ref' => 'Ref. Mudança pai',
'Class:UserRequest/Attribute:parent_change_ref' => 'Ref. mudança pai',
'Class:UserRequest/Attribute:parent_change_ref+' => '',
'Class:UserRequest/Attribute:parent_incident_ref' => 'Ref. Incidente pai',
'Class:UserRequest/Attribute:parent_incident_ref' => 'Ref. incidente pai',
'Class:UserRequest/Attribute:parent_incident_ref+' => '',
'Class:UserRequest/Attribute:related_request_list' => 'Subsolicitações',
'Class:UserRequest/Attribute:related_request_list+' => 'Todas as solicitações associadas à esta solicitação pai',
@@ -253,8 +253,8 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:UserRequest/Stimulus:ev_wait_for_approval' => 'Aguardar por aprovação',
'Class:UserRequest/Stimulus:ev_wait_for_approval+' => '',
'Class:UserRequest/Error:CannotAssignParentRequestIdToSelf' => 'Não é possível atribuir a solicitação pai a própria solicitação',
'Class:UserRequest/Method:ResolveChildTickets' => 'ResolveChildTickets',
'Class:UserRequest/Method:ResolveChildTickets+' => 'Conecte a solução a pedidos filhos (ev_autoresolve) e alinhe as seguintes características da requisição: serviço, equipe, agente, info de solução',
'Class:UserRequest/Method:ResolveChildTickets' => 'ResolveChildTickets (resolver solicitações filhas)',
'Class:UserRequest/Method:ResolveChildTickets+' => 'Conecte a solução a solicitações filhas (ev_autoresolve) e alinhe as seguintes características da requisição: serviço, equipe, agente, info de solução',
));

View File

@@ -11,9 +11,9 @@
*/
Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Menu:RequestManagement' => 'Gerenciamento de Solicitações',
'Menu:RequestManagement+' => 'Gerenciamento de Solicitações',
'Menu:RequestManagementProvider' => 'Solicitações a provedores',
'Menu:RequestManagementProvider+' => 'Solicitações a provedores',
'Menu:RequestManagement+' => '',
'Menu:RequestManagementProvider' => 'Solicitações a provedores(as)',
'Menu:RequestManagementProvider+' => '',
'Menu:UserRequest:Provider' => 'Solicitações abertas transferidas a provedores',
'Menu:UserRequest:Provider+' => 'Solicitações abertas transferidas a provedores',
'Menu:UserRequest:Overview' => 'Visão geral',
@@ -24,8 +24,8 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Menu:SearchUserRequests+' => 'Pesquisar por solicitações',
'Menu:UserRequest:Shortcuts' => 'Atalhos',
'Menu:UserRequest:Shortcuts+' => '',
'Menu:UserRequest:MyRequests' => 'Solicitações abertas por mim',
'Menu:UserRequest:MyRequests+' => 'Solicitações abertas por mim (como Agente)',
'Menu:UserRequest:MyRequests' => 'Solicitações atribuídas a mim',
'Menu:UserRequest:MyRequests+' => 'Solicitações atribuídas a mim (como Agente)',
'Menu:UserRequest:MySupportRequests' => 'Minhas solicitações de suporte',
'Menu:UserRequest:MySupportRequests+' => 'Minhas solicitações de suporte',
'Menu:UserRequest:EscalatedRequests' => 'Solicitações escalonadas',
@@ -165,7 +165,7 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:UserRequest/Attribute:tto' => 'TTO',
'Class:UserRequest/Attribute:tto+' => 'Tempo para atribuição (Time To Own)',
'Class:UserRequest/Attribute:ttr' => 'TTR',
'Class:UserRequest/Attribute:ttr+' => 'Tempo para solução (Time To Resolution)',
'Class:UserRequest/Attribute:ttr+' => 'Tempo para resolução (Time To Resolution)',
'Class:UserRequest/Attribute:tto_escalation_deadline' => 'Prazo determinado de atribuição (TTO)',
'Class:UserRequest/Attribute:tto_escalation_deadline+' => 'Prazo determinado de Tempo para atribuição (TTO)',
'Class:UserRequest/Attribute:sla_tto_passed' => 'SLA TTO superado',
@@ -202,15 +202,15 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:UserRequest/Attribute:pending_reason+' => '',
'Class:UserRequest/Attribute:parent_request_id' => 'Solicitação pai',
'Class:UserRequest/Attribute:parent_request_id+' => '',
'Class:UserRequest/Attribute:parent_request_ref' => 'Ref. Solicitação pai',
'Class:UserRequest/Attribute:parent_request_ref' => 'Ref. solicitação pai',
'Class:UserRequest/Attribute:parent_request_ref+' => '',
'Class:UserRequest/Attribute:parent_problem_id' => 'Problema pai',
'Class:UserRequest/Attribute:parent_problem_id+' => '',
'Class:UserRequest/Attribute:parent_problem_ref' => 'Ref. Problema pai',
'Class:UserRequest/Attribute:parent_problem_ref' => 'Ref. problema pai',
'Class:UserRequest/Attribute:parent_problem_ref+' => '',
'Class:UserRequest/Attribute:parent_change_id' => 'Mudança pai',
'Class:UserRequest/Attribute:parent_change_id+' => '',
'Class:UserRequest/Attribute:parent_change_ref' => 'Ref. Mudança pai',
'Class:UserRequest/Attribute:parent_change_ref' => 'Ref. mudança',
'Class:UserRequest/Attribute:parent_change_ref+' => '',
'Class:UserRequest/Attribute:related_request_list' => 'Subsolicitações',
'Class:UserRequest/Attribute:related_request_list+' => 'Todas as solicitações associadas à esta solicitação pai',

View File

@@ -17,7 +17,7 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'UI-ServiceManagementMenu-ContractsBySrvLevel' => 'Contratos por nível serviço',
'UI-ServiceManagementMenu-ContractsByStatus' => 'Contratos por status',
'UI-ServiceManagementMenu-ContractsEndingIn30Days' => 'Contratos terminando em menos de 30 dias',
'Menu:ProviderContract' => 'Contratos de provedores',
'Menu:ProviderContract' => 'Contratos de provedores(as)',
'Menu:ProviderContract+' => '',
'Menu:CustomerContract' => 'Contratos de clientes',
'Menu:CustomerContract+' => '',
@@ -86,9 +86,9 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:Contract/Attribute:organization_name' => 'Nome da organização',
'Class:Contract/Attribute:organization_name+' => 'Nome comum',
'Class:Contract/Attribute:contacts_list' => 'Contatos',
'Class:Contract/Attribute:contacts_list+' => 'Todos os contatos para este contrato de cliente',
'Class:Contract/Attribute:contacts_list+' => 'Todos os Contatos associados à este Contrato',
'Class:Contract/Attribute:documents_list' => 'Documentos',
'Class:Contract/Attribute:documents_list+' => 'Todos os documentos para este contrato de cliente',
'Class:Contract/Attribute:documents_list+' => 'Todos os Documentos associados à este Contrato',
'Class:Contract/Attribute:description' => 'Descrição',
'Class:Contract/Attribute:description+' => '',
'Class:Contract/Attribute:start_date' => 'Data de início',
@@ -135,11 +135,11 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:CustomerContract' => 'Contrato de cliente',
'Class:CustomerContract+' => '',
'Class:CustomerContract/Attribute:services_list' => 'Serviços',
'Class:CustomerContract/Attribute:services_list+' => 'Todos os serviços contratados para este contrato',
'Class:CustomerContract/Attribute:services_list+' => 'Todos os Serviços contratados para este Contrato de cliente',
'Class:CustomerContract/Attribute:functionalcis_list' => 'ICs',
'Class:CustomerContract/Attribute:functionalcis_list+' => 'Todos os itens de configuração que são utilizados para a prestação deste contrato',
'Class:CustomerContract/Attribute:functionalcis_list+' => 'Todos os Itens de Configuração (IC) que são utilizados para a prestação deste Contrato de cliente',
'Class:CustomerContract/Attribute:providercontracts_list' => 'Contratos de provedores',
'Class:CustomerContract/Attribute:providercontracts_list+' => 'Todos os contratos de provedores para suportar este contrato de cliente',
'Class:CustomerContract/Attribute:providercontracts_list+' => 'Todos os Contratos de provedores para suportar este Contrato de cliente',
));
//
@@ -147,10 +147,10 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
//
Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:ProviderContract' => 'Contrato de Provedor',
'Class:ProviderContract' => 'Contrato de provedor',
'Class:ProviderContract+' => '',
'Class:ProviderContract/Attribute:functionalcis_list' => 'ICs',
'Class:ProviderContract/Attribute:functionalcis_list+' => 'Todos os itens de configuração abrangidos por esse contrato',
'Class:ProviderContract/Attribute:functionalcis_list+' => 'Todos os Itens de Configuração (IC) abrangidos por este Contrato',
'Class:ProviderContract/Attribute:sla' => 'SLA',
'Class:ProviderContract/Attribute:sla+' => 'Acordo de Nível de Serviço (ANS)',
'Class:ProviderContract/Attribute:coverage' => 'Horário de serviço',
@@ -162,7 +162,7 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
//
Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:lnkContactToContract' => 'Link Contato / Contrato',
'Class:lnkContactToContract' => 'Relação entre Contato / Contrato',
'Class:lnkContactToContract+' => '',
'Class:lnkContactToContract/Name' => '%1$s / %2$s~~',
'Class:lnkContactToContract/Attribute:contract_id' => 'Contrato',
@@ -180,7 +180,7 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
//
Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:lnkContractToDocument' => 'Link Contrato / Documento',
'Class:lnkContractToDocument' => 'Relação entre Contrato / Documento',
'Class:lnkContractToDocument+' => '',
'Class:lnkContractToDocument/Name' => '%1$s / %2$s~~',
'Class:lnkContractToDocument/Attribute:contract_id' => 'Contrato',
@@ -198,7 +198,7 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
//
Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:lnkFunctionalCIToProviderContract' => 'Link IC / Contrato de provedor',
'Class:lnkFunctionalCIToProviderContract' => 'Relação entre IC / Contrato de provedor',
'Class:lnkFunctionalCIToProviderContract+' => '',
'Class:lnkFunctionalCIToProviderContract/Name' => '%1$s / %2$s~~',
'Class:lnkFunctionalCIToProviderContract/Attribute:providercontract_id' => 'Contrato de provedor',
@@ -223,7 +223,7 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:ServiceFamily/Attribute:icon' => 'Ícone',
'Class:ServiceFamily/Attribute:icon+' => '',
'Class:ServiceFamily/Attribute:services_list' => 'Serviços',
'Class:ServiceFamily/Attribute:services_list+' => 'Todos os serviços para essa categoria',
'Class:ServiceFamily/Attribute:services_list+' => 'Todos os Serviços associados à esta Família de serviços',
));
//
@@ -236,10 +236,10 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:Service/ComplementaryName' => '%1$s - %2$s~~',
'Class:Service/Attribute:name' => 'Nome',
'Class:Service/Attribute:name+' => '',
'Class:Service/Attribute:org_id' => 'Organização',
'Class:Service/Attribute:org_id' => 'Provedor',
'Class:Service/Attribute:org_id+' => '',
'Class:Service/Attribute:organization_name' => 'Nome',
'Class:Service/Attribute:organization_name+' => 'Nome comum',
'Class:Service/Attribute:organization_name' => 'Nome do provedor',
'Class:Service/Attribute:organization_name+' => '',
'Class:Service/Attribute:description' => 'Descrição',
'Class:Service/Attribute:description+' => '',
'Class:Service/Attribute:servicefamily_id' => 'Família de serviços',
@@ -247,23 +247,23 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:Service/Attribute:servicefamily_name' => 'Nome da família de serviços',
'Class:Service/Attribute:servicefamily_name+' => '',
'Class:Service/Attribute:documents_list' => 'Documentos',
'Class:Service/Attribute:documents_list+' => 'Todos os documentos associados a este serviço',
'Class:Service/Attribute:documents_list+' => 'Todos os Documentos associados à este Serviço',
'Class:Service/Attribute:contacts_list' => 'Contatos',
'Class:Service/Attribute:contacts_list+' => 'Todos os contatos associados a este serviço',
'Class:Service/Attribute:contacts_list+' => 'Todos os Contatos associados à este Serviço',
'Class:Service/Attribute:status' => 'Status',
'Class:Service/Attribute:status+' => '',
'Class:Service/Attribute:status/Value:implementation' => 'Em homologação',
'Class:Service/Attribute:status/Value:implementation+' => 'Em homologação',
'Class:Service/Attribute:status/Value:implementation+' => '',
'Class:Service/Attribute:status/Value:obsolete' => 'Obsoleto',
'Class:Service/Attribute:status/Value:obsolete+' => '',
'Class:Service/Attribute:status/Value:production' => 'Em produção',
'Class:Service/Attribute:status/Value:production+' => '',
'Class:Service/Attribute:icon' => 'Icon',
'Class:Service/Attribute:icon' => 'Ícone',
'Class:Service/Attribute:icon+' => '',
'Class:Service/Attribute:customercontracts_list' => 'Contratos de clientes',
'Class:Service/Attribute:customercontracts_list+' => 'Todos os contratos de clientes que contrataram esse serviço',
'Class:Service/Attribute:customercontracts_list+' => 'Todos os Contratos de clientes que contrataram este Serviço',
'Class:Service/Attribute:servicesubcategories_list' => 'Subcategorias de serviço',
'Class:Service/Attribute:servicesubcategories_list+' => 'Todas as subcategorias associadas a esse serviço',
'Class:Service/Attribute:servicesubcategories_list+' => 'Todas as Subcategorias de serviço associadas à este Serviço',
));
//
@@ -271,7 +271,7 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
//
Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:lnkDocumentToService' => 'Link Documento / Serviço',
'Class:lnkDocumentToService' => 'Relação entre Documento / Serviço',
'Class:lnkDocumentToService+' => '',
'Class:lnkDocumentToService/Name' => '%1$s / %2$s~~',
'Class:lnkDocumentToService/Attribute:service_id' => 'Serviço',
@@ -289,7 +289,7 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
//
Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:lnkContactToService' => 'Link Contato / Serviço',
'Class:lnkContactToService' => 'Relação entre Contato / Serviço',
'Class:lnkContactToService+' => '',
'Class:lnkContactToService/Name' => '%1$s / %2$s~~',
'Class:lnkContactToService/Attribute:service_id' => 'Serviço',
@@ -352,10 +352,10 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:SLA/Attribute:organization_name' => 'Nome da organização',
'Class:SLA/Attribute:organization_name+' => '',
'Class:SLA/Attribute:slts_list' => 'SLTs',
'Class:SLA/Attribute:slts_list+' => 'Todos os Níveis Mínimos de Serviço (SLTs) para esse Acordo de Nível de Serviço (SLA)',
'Class:SLA/Attribute:slts_list+' => 'Todos os Níveis Mínimos de Serviço (SLTs) para este Acordo de Nível de Serviço (SLA)',
'Class:SLA/Attribute:customercontracts_list' => 'Contratos de clientes',
'Class:SLA/Attribute:customercontracts_list+' => 'Todos os contratos de clientes utilizando esse Acordo de Nível de Serviço (SLA)',
'Class:SLA/Error:UniqueLnkCustomerContractToService' => 'Não foi possível salvar o vínculo entre o Contrato do Cliente %1$s e Serviço %2$s : SLA já existe',
'Class:SLA/Attribute:customercontracts_list+' => 'Todos os Contratos de clientes utilizando este Acordo de Nível de Serviço (SLA)',
'Class:SLA/Error:UniqueLnkCustomerContractToService' => 'Não foi possível salvar o vínculo entre o Contrato de cliente %1$s e o Serviço %2$s : SLA já existe',
));
//
@@ -404,7 +404,7 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
//
Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:lnkSLAToSLT' => 'Link SLA / SLT',
'Class:lnkSLAToSLT' => 'Relação entre SLA / SLT',
'Class:lnkSLAToSLT+' => '',
'Class:lnkSLAToSLT/Name' => '%1$s / %2$s~~',
'Class:lnkSLAToSLT/Attribute:sla_id' => 'SLA',
@@ -432,7 +432,7 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
//
Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:lnkCustomerContractToService' => 'Link Contrato de cliente / Serviço',
'Class:lnkCustomerContractToService' => 'Relação entre Contrato de cliente / Serviço',
'Class:lnkCustomerContractToService+' => '',
'Class:lnkCustomerContractToService/Name' => '%1$s / %2$s~~',
'Class:lnkCustomerContractToService/Attribute:customercontract_id' => 'Contrato de cliente',
@@ -454,7 +454,7 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
//
Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:lnkCustomerContractToProviderContract' => 'Link Contrato de cliente / Contrato de provedor',
'Class:lnkCustomerContractToProviderContract' => 'Relação entre Contrato de cliente / Contrato de provedor',
'Class:lnkCustomerContractToProviderContract+' => '',
'Class:lnkCustomerContractToProviderContract/Name' => '%1$s / %2$s~~',
'Class:lnkCustomerContractToProviderContract/Attribute:customercontract_id' => 'Contrato de cliente',
@@ -472,7 +472,7 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
//
Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:lnkCustomerContractToFunctionalCI' => 'Link Contrato de cliente / IC',
'Class:lnkCustomerContractToFunctionalCI' => 'Relação entre Contrato de cliente / IC',
'Class:lnkCustomerContractToFunctionalCI+' => '',
'Class:lnkCustomerContractToFunctionalCI/Name' => '%1$s / %2$s~~',
'Class:lnkCustomerContractToFunctionalCI/Attribute:customercontract_id' => 'Contrato de cliente',
@@ -494,16 +494,16 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:DeliveryModel+' => '',
'Class:DeliveryModel/Attribute:name' => 'Nome',
'Class:DeliveryModel/Attribute:name+' => '',
'Class:DeliveryModel/Attribute:org_id' => 'Organização',
'Class:DeliveryModel/Attribute:org_id' => 'Provedor',
'Class:DeliveryModel/Attribute:org_id+' => '',
'Class:DeliveryModel/Attribute:organization_name' => 'Nome da organização',
'Class:DeliveryModel/Attribute:organization_name+' => '',
'Class:DeliveryModel/Attribute:description' => 'Descrição',
'Class:DeliveryModel/Attribute:description+' => '',
'Class:DeliveryModel/Attribute:contacts_list' => 'Contatos',
'Class:DeliveryModel/Attribute:contacts_list+' => 'Todos os contatos (Equipe e Pessoa) para esse Modelo de entrega',
'Class:DeliveryModel/Attribute:contacts_list+' => 'Todos os Contatos (Equipes e Pessoas) associados à este Modelo de entrega',
'Class:DeliveryModel/Attribute:customers_list' => 'Clientes',
'Class:DeliveryModel/Attribute:customers_list+' => 'Todos os clientes com esse Modelo de entrega',
'Class:DeliveryModel/Attribute:customers_list+' => 'Todos os clientes atendidos por este Modelo de entrega',
));
//
@@ -511,7 +511,7 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
//
Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:lnkDeliveryModelToContact' => 'Link Modelo de entrega / Contato',
'Class:lnkDeliveryModelToContact' => 'Relação entre Modelo de entrega / Contato',
'Class:lnkDeliveryModelToContact+' => '',
'Class:lnkDeliveryModelToContact/Name' => '%1$s / %2$s~~',
'Class:lnkDeliveryModelToContact/Attribute:deliverymodel_id' => 'Modelo de entrega',

View File

@@ -17,8 +17,8 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'UI-ServiceManagementMenu-ContractsBySrvLevel' => 'Contratos por nível de serviço',
'UI-ServiceManagementMenu-ContractsByStatus' => 'Contratos por status',
'UI-ServiceManagementMenu-ContractsEndingIn30Days' => 'Contratos finalizando em menos de 30 dias',
'Menu:ProviderContract' => 'Contratos de provedores',
'Menu:ProviderContract+' => 'Lista de contratos de provedores',
'Menu:ProviderContract' => 'Contratos de provedores(as)',
'Menu:ProviderContract+' => 'Lista de contratos de provedores(as)',
'Menu:CustomerContract' => 'Contratos de clientes',
'Menu:CustomerContract+' => 'Lista de contratos de clientes',
'Menu:ServiceSubcategory' => 'Subcategorias de serviços',
@@ -77,9 +77,9 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:Contract/Attribute:organization_name' => 'Nome da organização',
'Class:Contract/Attribute:organization_name+' => '',
'Class:Contract/Attribute:contacts_list' => 'Contatos',
'Class:Contract/Attribute:contacts_list+' => 'Todos os contatos para este contrato com o cliente',
'Class:Contract/Attribute:contacts_list+' => 'Todos os contatos associados à este contrato',
'Class:Contract/Attribute:documents_list' => 'Documentos',
'Class:Contract/Attribute:documents_list+' => 'Todos os documentos para este contrato com o cliente',
'Class:Contract/Attribute:documents_list+' => 'Todos os documentos associados à este contrato',
'Class:Contract/Attribute:description' => 'Descrição',
'Class:Contract/Attribute:description+' => '',
'Class:Contract/Attribute:start_date' => 'Data de início',
@@ -125,7 +125,7 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:CustomerContract' => 'Contrato de Cliente',
'Class:CustomerContract+' => '',
'Class:CustomerContract/Attribute:services_list' => 'Serviços',
'Class:CustomerContract/Attribute:services_list+' => 'Todos os serviços contratados para o presente contrato',
'Class:CustomerContract/Attribute:services_list+' => 'Todos os serviços contratados para este contrato de cliente',
));
//
@@ -136,7 +136,7 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:ProviderContract' => 'Contrato de provedor',
'Class:ProviderContract+' => '',
'Class:ProviderContract/Attribute:functionalcis_list' => 'ICs',
'Class:ProviderContract/Attribute:functionalcis_list+' => 'Todos os itens de configuração associados a este contrato',
'Class:ProviderContract/Attribute:functionalcis_list+' => 'Todos os itens de configuração (ICs) associados a este contrato',
'Class:ProviderContract/Attribute:sla' => 'SLA',
'Class:ProviderContract/Attribute:sla+' => '',
'Class:ProviderContract/Attribute:coverage' => 'Horário de serviço',
@@ -154,7 +154,7 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
//
Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:lnkContactToContract' => 'Link Contato / Contrato',
'Class:lnkContactToContract' => 'Relação entre Contato / Contrato',
'Class:lnkContactToContract+' => '',
'Class:lnkContactToContract/Name' => '%1$s / %2$s~~',
'Class:lnkContactToContract/Attribute:contract_id' => 'Contrato',
@@ -172,7 +172,7 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
//
Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:lnkContractToDocument' => 'Link Contrato / Documento',
'Class:lnkContractToDocument' => 'Relação entre Contrato / Documento',
'Class:lnkContractToDocument+' => '',
'Class:lnkContractToDocument/Name' => '%1$s / %2$s~~',
'Class:lnkContractToDocument/Attribute:contract_id' => 'Contrato',
@@ -190,14 +190,14 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
//
Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:ServiceFamily' => 'Família de Serviços',
'Class:ServiceFamily' => 'Família de serviços',
'Class:ServiceFamily+' => '',
'Class:ServiceFamily/Attribute:name' => 'Nome',
'Class:ServiceFamily/Attribute:name+' => '',
'Class:ServiceFamily/Attribute:icon' => 'Ícone',
'Class:ServiceFamily/Attribute:icon+' => '',
'Class:ServiceFamily/Attribute:services_list' => 'Serviços',
'Class:ServiceFamily/Attribute:services_list+' => 'Todos os serviços para essa categoria',
'Class:ServiceFamily/Attribute:services_list+' => 'Todos os serviços associados à esta família de serviços',
));
//
@@ -221,9 +221,9 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:Service/Attribute:description' => 'Descrição',
'Class:Service/Attribute:description+' => '',
'Class:Service/Attribute:documents_list' => 'Documentos',
'Class:Service/Attribute:documents_list+' => 'Todos os documentos associados a este serviço',
'Class:Service/Attribute:documents_list+' => 'Todos os documentos associados à este serviço',
'Class:Service/Attribute:contacts_list' => 'Contatos',
'Class:Service/Attribute:contacts_list+' => 'Todos os contatos associados a este serviço',
'Class:Service/Attribute:contacts_list+' => 'Todos os contatos associados à este serviço',
'Class:Service/Attribute:status' => 'Status',
'Class:Service/Attribute:status+' => '',
'Class:Service/Attribute:status/Value:implementation' => 'Em homologação',
@@ -239,9 +239,9 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:Service/Attribute:providercontracts_list' => 'Contratos de provedores',
'Class:Service/Attribute:providercontracts_list+' => 'Todos os contratos de provedores para suportar esse serviço',
'Class:Service/Attribute:functionalcis_list' => 'Dependências de ICs',
'Class:Service/Attribute:functionalcis_list+' => 'Todos os itens de configuração que são utilizados para a prestação deste serviço',
'Class:Service/Attribute:functionalcis_list+' => 'Todos os itens de configuração (ICs) que são utilizados para a prestação deste serviço',
'Class:Service/Attribute:servicesubcategories_list' => 'Subcategorias de serviço',
'Class:Service/Attribute:servicesubcategories_list+' => 'Todas as subcategorias para esse serviço',
'Class:Service/Attribute:servicesubcategories_list+' => 'Todas as subcategorias de serviço para esse serviço',
));
//
@@ -249,7 +249,7 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
//
Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:lnkDocumentToService' => 'Link Documento / Serviço',
'Class:lnkDocumentToService' => 'Relação entre Documento / Serviço',
'Class:lnkDocumentToService+' => '',
'Class:lnkDocumentToService/Name' => '%1$s / %2$s~~',
'Class:lnkDocumentToService/Attribute:service_id' => 'Serviço',
@@ -267,7 +267,7 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
//
Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:lnkContactToService' => 'Link Contato / Serviço',
'Class:lnkContactToService' => 'Relação entre Contato / Serviço',
'Class:lnkContactToService+' => '',
'Class:lnkContactToService/Name' => '%1$s / %2$s~~',
'Class:lnkContactToService/Attribute:service_id' => 'Serviço',
@@ -285,7 +285,7 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
//
Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:ServiceSubcategory' => 'Subcategorias de serviço',
'Class:ServiceSubcategory' => 'Subcategoria de serviço',
'Class:ServiceSubcategory+' => '',
'Class:ServiceSubcategory/ComplementaryName' => '%1$s - %2$s~~',
'Class:ServiceSubcategory/Attribute:name' => 'Nome',
@@ -323,15 +323,15 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:SLA/Attribute:name+' => '',
'Class:SLA/Attribute:description' => 'Descrição',
'Class:SLA/Attribute:description+' => '',
'Class:SLA/Attribute:org_id' => 'Organização',
'Class:SLA/Attribute:org_id' => 'Provedor',
'Class:SLA/Attribute:org_id+' => '',
'Class:SLA/Attribute:organization_name' => 'Nome da organização',
'Class:SLA/Attribute:organization_name+' => '',
'Class:SLA/Attribute:slts_list' => 'SLTs',
'Class:SLA/Attribute:slts_list+' => 'Todos os Níveis Mínimos de Serviço (SLTs) para esse Acordo de Nível de Serviço (SLA)',
'Class:SLA/Attribute:customercontracts_list' => 'Contratos de clientes',
'Class:SLA/Attribute:customercontracts_list+' => 'Todos os contratos de clientes utilizando esse Acordo de Nível de Serviço (SLA)',
'Class:SLA/Error:UniqueLnkCustomerContractToService' => 'Não foi possível salvar o vínculo entre o Contrato do Cliente "%1$s" e Serviço "%2$s": SLA já existe',
'Class:SLA/Attribute:customercontracts_list+' => 'Todos os Contratos de clientes utilizando esse Acordo de Nível de Serviço (SLA)',
'Class:SLA/Error:UniqueLnkCustomerContractToService' => 'Não foi possível salvar o vínculo entre o Contrato de cliente "%1$s" e o Serviço "%2$s": SLA já existe',
));
//
@@ -382,7 +382,7 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
//
Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:lnkSLAToSLT' => 'Link SLA / SLT',
'Class:lnkSLAToSLT' => 'Relação entre SLA / SLT',
'Class:lnkSLAToSLT+' => '',
'Class:lnkSLAToSLT/Name' => '%1$s / %2$s~~',
'Class:lnkSLAToSLT/Attribute:sla_id' => 'SLA',
@@ -410,7 +410,7 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
//
Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:lnkCustomerContractToService' => 'Link Contrato de cliente / Serviço',
'Class:lnkCustomerContractToService' => 'Relação entre Contrato de cliente / Serviço',
'Class:lnkCustomerContractToService+' => '',
'Class:lnkCustomerContractToService/Name' => '%1$s / %2$s~~',
'Class:lnkCustomerContractToService/Attribute:customercontract_id' => 'Contrato de cliente',
@@ -432,7 +432,7 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
//
Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:lnkProviderContractToService' => 'Link Contrato de provedor / Serviço',
'Class:lnkProviderContractToService' => 'Relação entre Contrato de provedor / Serviço',
'Class:lnkProviderContractToService+' => '',
'Class:lnkProviderContractToService/Name' => '%1$s / %2$s~~',
'Class:lnkProviderContractToService/Attribute:service_id' => 'Serviço',
@@ -450,20 +450,20 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
//
Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:DeliveryModel' => 'Modelo de Entrega',
'Class:DeliveryModel' => 'Modelo de entrega',
'Class:DeliveryModel+' => '',
'Class:DeliveryModel/Attribute:name' => 'Nome',
'Class:DeliveryModel/Attribute:name+' => 'Don\'t forget to add teams to this delivery model~~',
'Class:DeliveryModel/Attribute:org_id' => 'Organização',
'Class:DeliveryModel/Attribute:org_id' => 'Provedor',
'Class:DeliveryModel/Attribute:org_id+' => 'Usually the organization that provides the services~~',
'Class:DeliveryModel/Attribute:organization_name' => 'Nome da organização',
'Class:DeliveryModel/Attribute:organization_name+' => 'Nome comum',
'Class:DeliveryModel/Attribute:description' => 'Descrição',
'Class:DeliveryModel/Attribute:description+' => '',
'Class:DeliveryModel/Attribute:contacts_list' => 'Contatos',
'Class:DeliveryModel/Attribute:contacts_list+' => 'Todos os Contatos (Equipe e Pessoa) para esse Modelo de entrega',
'Class:DeliveryModel/Attribute:contacts_list+' => 'Todos os Contatos (Equipes e Pessoas) associados à este Modelo de entrega',
'Class:DeliveryModel/Attribute:customers_list' => 'Clientes',
'Class:DeliveryModel/Attribute:customers_list+' => 'Todos os Clientes com esse Modelo de entrega',
'Class:DeliveryModel/Attribute:customers_list+' => 'Todos os clientes atendidos por este Modelo de entrega',
));
//
@@ -471,7 +471,7 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
//
Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:lnkDeliveryModelToContact' => 'Link Modelo de entrega / Contato',
'Class:lnkDeliveryModelToContact' => 'Relação entre Modelo de entrega / Contato',
'Class:lnkDeliveryModelToContact+' => '',
'Class:lnkDeliveryModelToContact/Name' => '%1$s / %2$s~~',
'Class:lnkDeliveryModelToContact/Attribute:deliverymodel_id' => 'Modelo de entrega',

View File

@@ -1,12 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="3.3">
<meta>
<classes>
<class id="SLAComputation" _delta="define">
<interfaces>
<interface id="iWorkingTimeComputer"/>
</interfaces>
</class>
</classes>
</meta>
</itop_design>

View File

@@ -1,25 +0,0 @@
<?php
/**
* Localized data
*
* @copyright Copyright (C) 2010-2024 Combodo SAS
* @license http://opensource.org/licenses/AGPL-3.0
*
* This file is part of iTop.
*
* iTop is free software; you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* iTop is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with iTop. If not, see <http://www.gnu.org/licenses/>
*/
Dict::Add('CS CZ', 'Czech', 'Čeština', array(
// Dictionary entries go here
));

View File

@@ -1,25 +0,0 @@
<?php
/**
* Localized data
*
* @copyright Copyright (C) 2010-2024 Combodo SAS
* @license http://opensource.org/licenses/AGPL-3.0
*
* This file is part of iTop.
*
* iTop is free software; you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* iTop is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with iTop. If not, see <http://www.gnu.org/licenses/>
*/
Dict::Add('DA DA', 'Danish', 'Dansk', array(
// Dictionary entries go here
));

View File

@@ -1,25 +0,0 @@
<?php
/**
* Localized data
*
* @copyright Copyright (C) 2010-2024 Combodo SAS
* @license http://opensource.org/licenses/AGPL-3.0
*
* This file is part of iTop.
*
* iTop is free software; you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* iTop is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with iTop. If not, see <http://www.gnu.org/licenses/>
*/
Dict::Add('DE DE', 'German', 'Deutsch', array(
// Dictionary entries go here
));

View File

@@ -1,26 +0,0 @@
<?php
/**
* Localized data
*
* @copyright Copyright (C) 2010-2024 Combodo SAS
* @license http://opensource.org/licenses/AGPL-3.0
*
* This file is part of iTop.
*
* iTop is free software; you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* iTop is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with iTop. If not, see <http://www.gnu.org/licenses/>
*/
Dict::Add('EN US', 'English', 'English', array(
// Dictionary entries go here
));

View File

@@ -1,26 +0,0 @@
<?php
/**
* Localized data
*
* @copyright Copyright (C) 2024 Combodo SAS
* @license http://opensource.org/licenses/AGPL-3.0
*
* This file is part of iTop.
*
* iTop is free software; you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* iTop is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with iTop. If not, see <http://www.gnu.org/licenses/>
*/
Dict::Add('EN GB', 'British English', 'British English', array(
// Dictionary entries go here
));

View File

@@ -1,12 +0,0 @@
<?php
/**
* Spanish Localized data
*
* @copyright Copyright (C) 2010-2024 Combodo SAS
* @license https://opensource.org/licenses/AGPL-3.0
* @author Miguel Turrubiates <miguel_tf@yahoo.com>
* @notas Utilizar codificación UTF-8 para mostrar acentos y otros caracteres especiales
*/
Dict::Add('ES CR', 'Spanish', 'Español, Castellano', array(
// Dictionary entries go here
));

View File

@@ -1,25 +0,0 @@
<?php
/**
* Localized data
*
* @copyright Copyright (C) 2010-2024 Combodo SAS
* @license http://opensource.org/licenses/AGPL-3.0
*
* This file is part of iTop.
*
* iTop is free software; you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* iTop is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with iTop. If not, see <http://www.gnu.org/licenses/>
*/
Dict::Add('FR FR', 'French', 'Français', array(
// Dictionary entries go here
));

View File

@@ -1,25 +0,0 @@
<?php
/**
* Localized data
*
* @copyright Copyright (C) 2010-2024 Combodo SAS
* @license http://opensource.org/licenses/AGPL-3.0
*
* This file is part of iTop.
*
* iTop is free software; you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* iTop is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with iTop. If not, see <http://www.gnu.org/licenses/>
*/
Dict::Add('HU HU', 'Hungarian', 'Magyar', array(
// Dictionary entries go here
));

View File

@@ -1,25 +0,0 @@
<?php
/**
* Localized data
*
* @copyright Copyright (C) 2010-2024 Combodo SAS
* @license http://opensource.org/licenses/AGPL-3.0
*
* This file is part of iTop.
*
* iTop is free software; you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* iTop is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with iTop. If not, see <http://www.gnu.org/licenses/>
*/
Dict::Add('IT IT', 'Italian', 'Italiano', array(
// Dictionary entries go here
));

View File

@@ -1,25 +0,0 @@
<?php
/**
* Localized data
*
* @copyright Copyright (C) 2010-2024 Combodo SAS
* @license http://opensource.org/licenses/AGPL-3.0
*
* This file is part of iTop.
*
* iTop is free software; you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* iTop is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with iTop. If not, see <http://www.gnu.org/licenses/>
*/
Dict::Add('JA JP', 'Japanese', '日本語', array(
// Dictionary entries go here
));

View File

@@ -1,25 +0,0 @@
<?php
/**
* Localized data
*
* @copyright Copyright (C) 2010-2024 Combodo SAS
* @license http://opensource.org/licenses/AGPL-3.0
*
* This file is part of iTop.
*
* iTop is free software; you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* iTop is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with iTop. If not, see <http://www.gnu.org/licenses/>
*/
Dict::Add('NL NL', 'Dutch', 'Nederlands', array(
// Dictionary entries go here
));

View File

@@ -1,25 +0,0 @@
<?php
/**
* Localized data
*
* @copyright Copyright (C) 2010-2024 Combodo SAS
* @license http://opensource.org/licenses/AGPL-3.0
*
* This file is part of iTop.
*
* iTop is free software; you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* iTop is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with iTop. If not, see <http://www.gnu.org/licenses/>
*/
Dict::Add('PL PL', 'Polish', 'Polski', array(
// Dictionary entries go here
));

View File

@@ -1,25 +0,0 @@
<?php
/**
* Localized data
*
* @copyright Copyright (C) 2010-2024 Combodo SAS
* @license http://opensource.org/licenses/AGPL-3.0
*
* This file is part of iTop.
*
* iTop is free software; you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* iTop is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with iTop. If not, see <http://www.gnu.org/licenses/>
*/
Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
// Dictionary entries go here
));

View File

@@ -1,15 +0,0 @@
<?php
/**
* Localized data
*
* @copyright Copyright (C) 2010-2024 Combodo SAS
* @license https://opensource.org/licenses/AGPL-3.0
*
*/
/**
* @author Vladimir Kunin <v.b.kunin@gmail.com>
*
*/
Dict::Add('RU RU', 'Russian', 'Русский', array(
// Dictionary entries go here
));

View File

@@ -1,25 +0,0 @@
<?php
/**
* Localized data
*
* @copyright Copyright (C) 2010-2024 Combodo SAS
* @license http://opensource.org/licenses/AGPL-3.0
*
* This file is part of iTop.
*
* iTop is free software; you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* iTop is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with iTop. If not, see <http://www.gnu.org/licenses/>
*/
Dict::Add('SK SK', 'Slovak', 'Slovenčina', array(
// Dictionary entries go here
));

View File

@@ -1,25 +0,0 @@
<?php
/**
* Localized data
*
* @copyright Copyright (C) 2010-2024 Combodo SAS
* @license http://opensource.org/licenses/AGPL-3.0
*
* This file is part of iTop.
*
* iTop is free software; you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* iTop is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with iTop. If not, see <http://www.gnu.org/licenses/>
*/
Dict::Add('TR TR', 'Turkish', 'Türkçe', array(
// Dictionary entries go here
));

View File

@@ -1,25 +0,0 @@
<?php
/**
* Localized data
*
* @copyright Copyright (C) 2010-2024 Combodo SAS
* @license http://opensource.org/licenses/AGPL-3.0
*
* This file is part of iTop.
*
* iTop is free software; you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* iTop is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with iTop. If not, see <http://www.gnu.org/licenses/>
*/
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
// Dictionary entries go here
));

View File

@@ -18,177 +18,30 @@
/**
* Module itop-sla-computation: implements an extensible mechanism
* Module itop-sla-computation: deprecated
*
* @copyright Copyright (C) 2010-2024 Combodo SAS
* @license http://opensource.org/licenses/AGPL-3.0
*/
/**
* Implements the public interface for utilities
* related to the SLA computation
* @deprecated 3.3.0 This is actually a breaking change. The class has been left to ease migration to 3.3.0 (see N°2683)
*/
class SLAComputation implements iWorkingTimeComputer
{
/**
* @var \SLAComputationAddOnAPI
*/
protected static $m_oAddOn;
class SLAComputation {
/**
* Generic "extensibility" method: select which extension is actually used
*
* @param string $sClassName The name of the class (derived from SLAComputationAddOnAPI) to use
*
* @return void
* @throws \CoreException
*
* @deprecated will be removed soon (see N°2683)
* @deprecated 3.3.0 This is actually a breaking change. The function has been left to ease migration to 3.3.0 (see N°2683)
*/
public static function SelectModule($sClassName)
{
// cannot notify depreciation for now as this is still MASSIVELY used in iTop core !
//DeprecatedCallsLog::NotifyDeprecatedPhpMethod();
if (!class_exists($sClassName)) {
throw new CoreException("Could not select this module, '$sClassName' in not a valid class name");
}
if (($sClassName != 'SLAComputationAddOnAPI') && !is_subclass_of($sClassName, 'SLAComputationAddOnAPI')) {
throw new CoreException("Could not select this module, the class '$sClassName' is not derived from SLAComputationAddOnAPI (parent class:".get_parent_class($sClassName)." )");
}
self::$m_oAddOn = new $sClassName;
self::$m_oAddOn->Init();
//DeprecatedCallsLog::NotifyDeprecatedPhpMethod('Removed Class SLAComputation');
}
/**
* Get the class of the extension actually used
*
* @return string The name of the extension class used
*/
public static function GetModuleInstance()
{
return self::$m_oAddOn;
}
public static function GetDescription()
{
return "SLA computation (depends on the installed module)";
}
/**
* Get the date/time corresponding to a given delay in the future from the present
* considering only the valid (open) hours for a specified object
*
* @param Ticket $oObject The object for which to compute the deadline
* @param integer $iDuration The duration (in seconds) in the future
* @param DateTime $oStartDate The starting point for the computation
*
* @return DateTime The date/time for the deadline
* @throws \Exception
*/
public function GetDeadline($oObject, $iDuration, DateTime $oStartDate)
{
if (class_exists('WorkingTimeRecorder'))
{
WorkingTimeRecorder::Trace(WorkingTimeRecorder::TRACE_DEBUG, __class__.'::'.__function__);
}
$oEndDate = self::$m_oAddOn->GetDeadline($oObject, $iDuration, $oStartDate);
if (class_exists('WorkingTimeRecorder'))
{
WorkingTimeRecorder::SetValues($oStartDate->format('U'), $oEndDate->format('U'), $iDuration, WorkingTimeRecorder::COMPUTED_END);
}
return $oEndDate;
}
/**
* Get duration (considering only open hours) elapsed between two given DateTimes
*
* @param Ticket $oObject The object for which to compute the duration
* @param DateTime $oStartDate The starting point for the computation (default = now)
* @param DateTime $oEndDate The ending point for the computation (default = now)
*
* @return integer The duration (number of seconds) of open hours elapsed between the two dates
* @throws \Exception
*/
public function GetOpenDuration($oObject, DateTime $oStartDate, DateTime $oEndDate)
{
if (class_exists('WorkingTimeRecorder'))
{
WorkingTimeRecorder::Trace(WorkingTimeRecorder::TRACE_DEBUG, __class__.'::'.__function__);
}
$iDuration = self::$m_oAddOn->GetOpenDuration($oObject, $oStartDate, $oEndDate);
if (class_exists('WorkingTimeRecorder'))
{
WorkingTimeRecorder::SetValues($oStartDate->format('U'), $oEndDate->format('U'), $iDuration,
WorkingTimeRecorder::COMPUTED_DURATION);
}
return $iDuration;
}
}
/**
* Base class for extensions to the SLA computation mechanism
* This class implements a default behavior, suitable for a simple
* 24x7 (no holiday) computation. To override this behavior, implement
* a derived class from this one, overloading the behavior, and call
* SLAComputation::SetExtension()
*
* @deprecated will be removed soon (see N°2683)
* @deprecated 3.3.0 This is actually a breaking change. The class has been left to ease migration to 3.3.0 (see N°2683)
*/
class SLAComputationAddOnAPI
{
/**
* Called when the module is loaded, used for one time initialization (if needed)
*/
public function Init()
{
// cannot notify depreciation for now as this is still MASSIVELY used in iTop core !
//DeprecatedCallsLog::NotifyDeprecatedPhpMethod();
}
/**
* Get the date/time corresponding to a given delay in the future from the present
* considering only the valid (open) hours for a specified ticket
*
* @param Ticket $oTicket The ticket for which to compute the deadline
* @param integer $iDuration The duration (in seconds) in the future
* @param DateTime $oStartDate The starting point for the computation
*
* @return DateTime The date/time for the deadline
*/
public static function GetDeadline($oTicket, $iDuration, DateTime $oStartDate)
{
if (class_exists('WorkingTimeRecorder'))
{
WorkingTimeRecorder::Trace(WorkingTimeRecorder::TRACE_DEBUG, __class__.'::'.__function__);
}
// Default implementation: 24x7, no holidays: to compute the deadline, just add
// the specified duration to the given date/time
$oResult = clone $oStartDate;
$oResult->modify($iDuration.' seconds');
return $oResult;
}
/**
* Get duration (considering only open hours) elapsed between two given DateTimes
*
* @param Ticket $oTicket The ticket for which to compute the duration
* @param DateTime $oStartDate The starting point for the computation (default = now)
* @param DateTime $oEndDate The ending point for the computation (default = now)
*
* @return integer The duration (number of seconds) of open hours elapsed between the two dates
*/
public static function GetOpenDuration($oTicket, DateTime $oStartDate, DateTime $oEndDate)
{
if (class_exists('WorkingTimeRecorder'))
{
WorkingTimeRecorder::Trace(WorkingTimeRecorder::TRACE_DEBUG, __class__.'::'.__function__);
}
return abs($oEndDate->format('U') - $oStartDate->format('U'));
}
}
SLAComputation::SelectModule('SLAComputationAddOnAPI');

View File

View File

@@ -23,7 +23,7 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:Organization/Attribute:status/Value:active+' => '',
'Class:Organization/Attribute:status/Value:inactive' => 'Inativo',
'Class:Organization/Attribute:status/Value:inactive+' => '',
'Class:Organization/Attribute:parent_id' => 'Pai',
'Class:Organization/Attribute:parent_id' => 'Organização pai',
'Class:Organization/Attribute:parent_id+' => 'Organização pai',
'Class:Organization/Attribute:parent_name' => 'Organização pai',
'Class:Organization/Attribute:parent_name+' => 'Nome da organização pai',
@@ -31,12 +31,12 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:Organization/Attribute:deliverymodel_id+' => '',
'Class:Organization/Attribute:deliverymodel_name' => 'Nome do modelo de entrega',
'Class:Organization/Attribute:deliverymodel_name+' => '',
'Class:Organization/Attribute:parent_id_friendlyname' => 'Pai (nome amigável)',
'Class:Organization/Attribute:parent_id_friendlyname' => 'Organização pai (nome amigável)',
'Class:Organization/Attribute:parent_id_friendlyname+' => 'Nome amigável da organização pai',
'Class:Organization/Attribute:overview' => 'Visão geral',
'Organization:Overview:FunctionalCIs' => 'Itens de configuração associadas à esta organização',
'Organization:Overview:FunctionalCIs' => 'Itens de Configuração (ICs) associados à esta Organização',
'Organization:Overview:FunctionalCIs:subtitle' => 'por tipo',
'Organization:Overview:Users' => 'Usuários do '.ITOP_APPLICATION_SHORT.' associados à esta organização',
'Organization:Overview:Users' => 'Usuários do '.ITOP_APPLICATION_SHORT.' associados à esta Organização',
));
//
@@ -67,9 +67,9 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:Location/Attribute:country' => 'País',
'Class:Location/Attribute:country+' => '',
'Class:Location/Attribute:physicaldevice_list' => 'Dispositivos',
'Class:Location/Attribute:physicaldevice_list+' => 'Todos os dispositivos associados à esta localização',
'Class:Location/Attribute:physicaldevice_list+' => 'Todos os Dispositivos associados à esta Localização',
'Class:Location/Attribute:person_list' => 'Contatos',
'Class:Location/Attribute:person_list+' => 'Todos os contatos associados à esta localização',
'Class:Location/Attribute:person_list+' => 'Todos os Contatos associados à esta Localização',
));
//
@@ -105,7 +105,7 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:Contact/Attribute:function' => 'Função',
'Class:Contact/Attribute:function+' => '',
'Class:Contact/Attribute:cis_list' => 'ICs',
'Class:Contact/Attribute:cis_list+' => 'Todos os itens de configuração associados a este contato',
'Class:Contact/Attribute:cis_list+' => 'Todos os Itens de Configuração (ICs) associados à este Contato',
'Class:Contact/Attribute:finalclass' => 'Tipo de contato',
'Class:Contact/Attribute:finalclass+' => '',
));
@@ -118,11 +118,11 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:Person' => 'Pessoa',
'Class:Person+' => '',
'Class:Person/ComplementaryName' => '%1$s - %2$s~~',
'Class:Person/Attribute:name' => 'Último nome',
'Class:Person/Attribute:name' => 'Sobrenome',
'Class:Person/Attribute:name+' => '',
'Class:Person/Attribute:first_name' => 'Primeiro nome',
'Class:Person/Attribute:first_name' => 'Nome',
'Class:Person/Attribute:first_name+' => '',
'Class:Person/Attribute:employee_number' => 'Número de colaborador',
'Class:Person/Attribute:employee_number' => 'Matrícula do colaborador',
'Class:Person/Attribute:employee_number+' => '',
'Class:Person/Attribute:mobile_phone' => 'Celular',
'Class:Person/Attribute:mobile_phone+' => '',
@@ -135,9 +135,9 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:Person/Attribute:manager_name' => 'Nome do gerente',
'Class:Person/Attribute:manager_name+' => '',
'Class:Person/Attribute:team_list' => 'Equipes',
'Class:Person/Attribute:team_list+' => 'Todas as equipes que essa pessoa pertence',
'Class:Person/Attribute:team_list+' => 'Todas as Equipes que esta Pessoa pertence',
'Class:Person/Attribute:tickets_list' => 'Solicitações',
'Class:Person/Attribute:tickets_list+' => 'Todos as solicitações que essa pessoa solicitou',
'Class:Person/Attribute:tickets_list+' => 'Todas as Solicitações que esta Pessoa solicitou',
'Class:Person/Attribute:user_list' => 'Users~~',
'Class:Person/Attribute:user_list+' => 'All the Users associated to this person~~',
'Class:Person/Attribute:manager_id_friendlyname' => 'Nome amigável do gerente',
@@ -195,9 +195,9 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:Document/Attribute:status/Value:obsolete+' => '',
'Class:Document/Attribute:status/Value:published' => 'Publicado',
'Class:Document/Attribute:status/Value:published+' => '',
'Class:Document/Attribute:cis_list' => 'CIs',
'Class:Document/Attribute:cis_list+' => 'Todos os itens de configuração associados a este documento',
'Class:Document/Attribute:finalclass' => 'Tipo documento',
'Class:Document/Attribute:cis_list' => 'ICs',
'Class:Document/Attribute:cis_list+' => 'Todos os Itens de Configuração (IC) associados à este Documento',
'Class:Document/Attribute:finalclass' => 'Tipo de documento',
'Class:Document/Attribute:finalclass+' => '',
));
@@ -270,7 +270,7 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
//
Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:lnkPersonToTeam' => 'Link Pessoa / Equipe',
'Class:lnkPersonToTeam' => 'Relação entre Pessoa / Equipe',
'Class:lnkPersonToTeam+' => '',
'Class:lnkPersonToTeam/Name' => '%1$s / %2$s~~',
'Class:lnkPersonToTeam/Name+' => '~~',
@@ -302,24 +302,24 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Menu:CSVImport' => 'Importar CSV',
'Menu:CSVImport+' => 'Criação ou atualização em massa',
'Menu:Organization' => 'Organizações',
'Menu:Organization+' => 'Lista de organizações',
'Menu:Organization+' => 'Lista de Organizações',
'Menu:ConfigManagement' => 'Gerenciamento configuração',
'Menu:ConfigManagement+' => 'Gerenciamento de configuração',
'Menu:ConfigManagementCI' => 'Itens de configuração',
'Menu:ConfigManagementCI+' => 'Lista de itens de configuração',
'Menu:ConfigManagement+' => '',
'Menu:ConfigManagementCI' => 'Itens de Configuração (ICs)',
'Menu:ConfigManagementCI+' => 'Lista de Itens de Configuração (ICs)',
'Menu:ConfigManagementOverview' => 'Visão geral',
'Menu:ConfigManagementOverview+' => '',
'Menu:Contact' => 'Contatos',
'Menu:Contact+' => 'Lista de contatos',
'Menu:Contact+' => 'Lista de Contatos',
'Menu:Contact:Count' => '%1$d contato(s)',
'Menu:Person' => 'Pessoas',
'Menu:Person+' => 'Lista de pessoas',
'Menu:Person+' => 'Lista de Pessoas',
'Menu:Team' => 'Equipes',
'Menu:Team+' => 'Lista de equipes',
'Menu:Team+' => 'Lista de Equipes',
'Menu:Document' => 'Documentos',
'Menu:Document+' => 'Lista de documentos',
'Menu:Document+' => 'Lista de Documentos',
'Menu:Location' => 'Localizações',
'Menu:Location+' => 'Lista de localizações',
'Menu:Location+' => 'Lista de Localizações',
'Menu:NewContact' => 'Novo contato',
'Menu:NewContact+' => '',
'Menu:SearchContacts' => 'Pesquisar por contatos',

View File

@@ -10,5 +10,5 @@
*
*/
Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'theme:light-grey' => 'Light Grey (deprecated)~~',
'theme:light-grey' => 'Light Grey (depreciado)',
));

View File

@@ -45,11 +45,11 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:Ticket/Attribute:private_log' => 'Log privado',
'Class:Ticket/Attribute:private_log+' => '',
'Class:Ticket/Attribute:contacts_list' => 'Contatos',
'Class:Ticket/Attribute:contacts_list+' => 'Todos os contatos associados à esta solicitação',
'Class:Ticket/Attribute:contacts_list+' => 'Todos os Contatos associados à esta Solicitação',
'Class:Ticket/Attribute:functionalcis_list' => 'ICs',
'Class:Ticket/Attribute:functionalcis_list+' => 'Todos os itens de configuração afetados por essa solicitação',
'Class:Ticket/Attribute:functionalcis_list+' => 'Todos os Itens de Configuração (ICs) afetados por esta Solicitação',
'Class:Ticket/Attribute:workorders_list' => 'Ordens de serviço',
'Class:Ticket/Attribute:workorders_list+' => 'Todos as ordens de serviço para essa solicitação',
'Class:Ticket/Attribute:workorders_list+' => 'Todos as Ordens de serviço associadas à esta Solicitação',
'Class:Ticket/Attribute:finalclass' => 'Tipo',
'Class:Ticket/Attribute:finalclass+' => '',
'Class:Ticket/Attribute:operational_status' => 'Status operacional',
@@ -69,7 +69,7 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
//
Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:lnkContactToTicket' => 'Link Contato / Solicitação',
'Class:lnkContactToTicket' => 'Relação entre Contato / Solicitação',
'Class:lnkContactToTicket+' => '',
'Class:lnkContactToTicket/Name' => '%1$s / %2$s~~',
'Class:lnkContactToTicket/Attribute:ticket_id' => 'Solicitação',
@@ -109,7 +109,7 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:WorkOrder/Attribute:description+' => '',
'Class:WorkOrder/Attribute:ticket_id' => 'Solicitação',
'Class:WorkOrder/Attribute:ticket_id+' => '',
'Class:WorkOrder/Attribute:ticket_ref' => 'Ref. Solicitação',
'Class:WorkOrder/Attribute:ticket_ref' => 'Ref. solicitação',
'Class:WorkOrder/Attribute:ticket_ref+' => '',
'Class:WorkOrder/Attribute:team_id' => 'Equipe',
'Class:WorkOrder/Attribute:team_id+' => '',

View File

@@ -506,6 +506,7 @@ Dict::Add('EN US', 'English', 'English', array(
'UI:Error:MaintenanceMode' => 'Application is currently in maintenance',
'UI:Error:MaintenanceTitle' => 'Maintenance',
'UI:Error:InvalidToken' => 'Error: the requested operation has already been performed (CSRF token not found)',
'UI:Error:TwigController' => 'Internal error in form controller',
'UI:Error:SMTP:UnknownVendor' => 'OAuth SMTP provider %1$s does not exist (email_transport_smtp.oauth.provider)',

View File

@@ -500,6 +500,7 @@ Nous espérons que vous aimerez cette version autant que nous avons eu du plaisi
'UI:Error:MaintenanceMode' => 'L\'application est en maintenance',
'UI:Error:MaintenanceTitle' => 'Maintenance',
'UI:Error:InvalidToken' => 'Erreur: l\'opération a déjà été effectuée (CSRF token not found)',
'UI:Error:TwigController' => 'Erreur interne dans le contrôleur de formulaire',
'UI:Error:SMTP:UnknownVendor' => 'Le provider SMTP OAuth 2.0 %1$s n\'existe pas',
'UI:GroupBy:Count' => 'Nombre',
'UI:GroupBy:Count+' => 'Nombre d\'éléments',

View File

@@ -192,7 +192,7 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:CMDBChangeOp' => 'Operações de alteração',
'Class:CMDBChangeOp+' => 'Operações de controle de alteração',
'Class:CMDBChangeOp+' => 'Controle de operações de alteração',
'Class:CMDBChangeOp/Attribute:change' => 'Alteração',
'Class:CMDBChangeOp/Attribute:change+' => '',
'Class:CMDBChangeOp/Attribute:date' => 'Data',
@@ -296,7 +296,7 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:Event' => 'Registro de evento',
'Class:Event+' => 'Um evento interno do aplicativo',
'Class:Event+' => 'Um evento interno da aplicação',
'Class:Event/Attribute:message' => 'Mensagem',
'Class:Event/Attribute:message+' => 'Descrição curta deste evento',
'Class:Event/Attribute:date' => 'Data',
@@ -514,13 +514,13 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:ActionEmail/Attribute:status/Value:disabled+' => 'A notificação de e-mail não será enviada',
'Class:ActionEmail/Attribute:test_recipient' => 'Destinatário de teste',
'Class:ActionEmail/Attribute:test_recipient+' => 'Destinatário caso o status esteja definido como "teste"',
'Class:ActionEmail/Attribute:from' => 'De',
'Class:ActionEmail/Attribute:from' => 'De (e-mail)',
'Class:ActionEmail/Attribute:from+' => 'Endereço de e-mail do remetente enviado no cabeçalho do e-mail',
'Class:ActionEmail/Attribute:from_label' => 'De (campo)',
'Class:ActionEmail/Attribute:from_label' => 'De (nome)',
'Class:ActionEmail/Attribute:from_label+' => 'Nome de exibição enviado no cabeçalho do e-mail',
'Class:ActionEmail/Attribute:reply_to' => 'Responder para',
'Class:ActionEmail/Attribute:reply_to' => 'Responder para (e-mail)',
'Class:ActionEmail/Attribute:reply_to+' => 'Endereço de e-mail enviado no cabeçalho do e-mail',
'Class:ActionEmail/Attribute:reply_to_label' => 'Responder para (campo)',
'Class:ActionEmail/Attribute:reply_to_label' => 'Responder para (nome)',
'Class:ActionEmail/Attribute:reply_to_label+' => 'Nome de exibição enviado no cabeçalho do e-mail',
'Class:ActionEmail/Attribute:to' => 'Para',
'Class:ActionEmail/Attribute:to+' => 'Endereço(s) de e-mail do(s) destinatário(s)',
@@ -748,7 +748,7 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:lnkTriggerAction' => 'Ação/Gatilho',
'Class:lnkTriggerAction+' => 'Link Gatilho / Ação',
'Class:lnkTriggerAction+' => 'Relação entre Gatilho / Ação',
'Class:lnkTriggerAction/Attribute:action_id' => 'Ação',
'Class:lnkTriggerAction/Attribute:action_id+' => 'Ação a ser executada',
'Class:lnkTriggerAction/Attribute:action_name' => 'Ação',
@@ -1193,7 +1193,7 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
//
Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:ResourceSystemMenu' => 'Menu de Recursos do Sistema',
'Class:ResourceSystemMenu' => 'Recurso Menu do Sistema',
'Class:ResourceSystemMenu+' => '',
'Class:EventNotification/Attribute:object_class' => 'Object class~~',
'Class:EventNotification/Attribute:object_class+' => 'Object class (Same as trigger)~~',

View File

@@ -98,7 +98,7 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:Query/Attribute:name' => 'Nome',
'Class:Query/Attribute:name+' => 'Identificação da consulta',
'Class:Query/Attribute:description' => 'Descrição',
'Class:Query/Attribute:description+' => 'Descrição longa para a consulta (finalidade, uso, etc.)',
'Class:Query/Attribute:description+' => 'Descrição longa para a consulta (finalidade, uso etc.)',
'Class:Query/Attribute:is_template' => 'Template para campos OQL',
'Class:Query/Attribute:is_template+' => 'Utilizável como origem para o Destinatário OQL em Notificações',
'Class:Query/Attribute:is_template/Value:yes' => 'Sim',
@@ -141,7 +141,7 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:User/Attribute:org_id+' => 'Organização à qual esse usuário pertence',
'Class:User/Attribute:last_name' => 'Sobrenome',
'Class:User/Attribute:last_name+' => 'Último nome do usuário correspondente',
'Class:User/Attribute:first_name' => 'Primeiro nome',
'Class:User/Attribute:first_name' => 'Nome',
'Class:User/Attribute:first_name+' => 'Primeiro nome do usuário correspondente',
'Class:User/Attribute:email' => 'E-mail',
'Class:User/Attribute:email+' => 'Endereço de e-mail do usuário correspondente',
@@ -153,17 +153,17 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:User/Attribute:language/Value:EN US+' => 'Inglês (E.U.A.)',
'Class:User/Attribute:language/Value:FR FR' => 'Francês',
'Class:User/Attribute:language/Value:FR FR+' => 'Francês (França)',
'Class:User/Attribute:profile_list' => 'Perfil',
'Class:User/Attribute:profile_list' => 'Perfis',
'Class:User/Attribute:profile_list+' => 'Permissões de acesso para esse usuário',
'Class:User/Attribute:allowed_org_list' => 'Organizações permitidas',
'Class:User/Attribute:allowed_org_list+' => 'O usuário tem permissão de ver as informações para a(s) organização(ões) abaixo. Se nenhuma organização for especificada, não há restrição',
'Class:User/Attribute:status' => 'Status',
'Class:User/Attribute:status+' => 'Se a conta de usuário está habilitada ou desabilitada',
'Class:User/Attribute:status/Value:enabled' => 'Ativa',
'Class:User/Attribute:status/Value:disabled' => 'Desativada',
'Class:User/Error:LoginMustBeUnique' => 'Login é único - "%1s" já está ativo',
'Class:User/Attribute:status/Value:disabled' => 'Inativa',
'Class:User/Error:LoginMustBeUnique' => 'Login deve ser único - "%1s" já existe',
'Class:User/Error:AtLeastOneProfileIsNeeded' => 'Pelo menos um perfil deve ser atribuído a esse usuário',
'Class:User/Error:ProfileNotAllowed' => 'O perfil "%1$s" não pode ser adicionado, ele negará o acesso ao backoffice',
'Class:User/Error:ProfileNotAllowed' => 'O perfil "%1$s" não pôde ser adicionado, ele negará o acesso ao backoffice',
'Class:User/Error:StatusChangeIsNotAllowed' => 'Alterar o status da conta não é permitido para o seu próprio usuário',
'Class:User/Error:AllowedOrgsMustContainUserOrg' => 'As organizações permitidas devem conter apenas usuários pertencentes a organização',
'Class:User/Error:CurrentProfilesHaveInsufficientRights' => 'A lista atual de perfis não fornece permissões de acesso suficientes (os usuários não são mais modificáveis)',
@@ -213,9 +213,9 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
//
Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:URP_UserProfile' => 'Perfil de Usuário',
'Class:URP_UserProfile+' => 'Perfil de Usuário',
'Class:URP_UserProfile/Name' => 'Link entre %1$s e %2$s',
'Class:URP_UserProfile' => 'Perfil de usuário',
'Class:URP_UserProfile+' => '',
'Class:URP_UserProfile/Name' => 'Relação entre %1$s e %2$s',
'Class:URP_UserProfile/Attribute:userid' => 'Usuário',
'Class:URP_UserProfile/Attribute:userid+' => 'Conta de usuário',
'Class:URP_UserProfile/Attribute:userlogin' => 'Login',
@@ -236,7 +236,7 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:URP_UserOrg' => 'Organização do usuário',
'Class:URP_UserOrg+' => 'Organizações permitidas',
'Class:URP_UserOrg/Name' => 'Link entre %1$s e %2$s',
'Class:URP_UserOrg/Name' => 'Relação entre %1$s e %2$s',
'Class:URP_UserOrg/Attribute:userid' => 'Usuário',
'Class:URP_UserOrg/Attribute:userid+' => 'Conta de usuário',
'Class:URP_UserOrg/Attribute:userlogin' => 'Login',
@@ -278,9 +278,9 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:URP_ClassProjection' => 'class_projection',
'Class:URP_ClassProjection+' => 'class projections',
'Class:URP_ClassProjection/Attribute:dimensionid' => 'Dimensão',
'Class:URP_ClassProjection/Attribute:dimensionid+' => 'Dimensão aplicação',
'Class:URP_ClassProjection/Attribute:dimensionid+' => 'Dimensão de aplicação',
'Class:URP_ClassProjection/Attribute:dimension' => 'Dimensão',
'Class:URP_ClassProjection/Attribute:dimension+' => 'Dimensão aplicação',
'Class:URP_ClassProjection/Attribute:dimension+' => 'Dimensão de aplicação',
'Class:URP_ClassProjection/Attribute:class' => 'Classe',
'Class:URP_ClassProjection/Attribute:class+' => 'Classe alvo',
'Class:URP_ClassProjection/Attribute:value' => 'Expressão de valor',
@@ -390,7 +390,9 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'BooleanLabel:yes' => 'Sim',
'BooleanLabel:no' => 'Não',
'UI:Login:Title' => 'Login no '.ITOP_APPLICATION_SHORT, 'UI:WelcomeMenu:Title' => 'Bem-vindo ao '.ITOP_APPLICATION_SHORT, 'UI:WelcomeMenu:AllOpenRequests' => 'Solicitações abertas: %1$d',
'UI:Login:Title' => 'Login no '.ITOP_APPLICATION_SHORT,
'UI:WelcomeMenu:Title' => 'Bem-vindo ao '.ITOP_APPLICATION_SHORT,
'UI:WelcomeMenu:AllOpenRequests' => 'Solicitações abertas: %1$d',
'UI:WelcomeMenu:MyCalls' => 'Minhas solicitações',
'UI:WelcomeMenu:OpenIncidents' => 'Incidentes abertos: %1$d',
'UI:WelcomeMenu:AllConfigItems' => 'Itens de Configuração: %1$d',
@@ -484,7 +486,7 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'UI:Error:MaintenanceMode' => 'A aplicação está em manutenção',
'UI:Error:MaintenanceTitle' => 'Manutenção',
'UI:Error:InvalidToken' => 'Erro: A operação solicitada já foi executada (token CSRF não encontrado)',
'UI:Error:SMTP:UnknownVendor' => 'OAuth SMTP provider %1$s does not exist (email_transport_smtp.oauth.provider)~~',
'UI:Error:SMTP:UnknownVendor' => 'O provedor de autenticação SMTP OAuth %1$s não existe (email_transport_smtp.oauth.provider)',
'UI:GroupBy:Count' => 'Número',
'UI:GroupBy:Count+' => 'Número de elementos',
'UI:CountOfObjects' => '%1$d objeto(s) correspondem aos critérios',
@@ -526,7 +528,7 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'UI:Menu:BulkDelete_Class' => 'Delete %1$s objects...~~',
'UI:Menu:BulkDelete_Link' => 'Delete %1$s...~~',
'UI:Menu:BulkDelete_Remote' => 'Delete %1$s...~~',
'UI:UndefinedObject' => '(n/a)',
'UI:UndefinedObject' => '(objeto indefinido)',
'UI:Document:OpenInNewWindow:Download' => 'Abrir em uma nova janela: %1$s, Download: %2$s',
'UI:SplitDateTime-Date' => 'data',
'UI:SplitDateTime-Time' => 'hora',
@@ -569,7 +571,7 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'UI:ResetPwd-EmailSubject' => 'Alterar a senha',
'UI:ResetPwd-EmailBody' => '<body><p>Você solicitou a alteração da senha do '.ITOP_APPLICATION_SHORT.'.</p><p>Por favor, siga este link (passo simples) para <a href="%1$s">digitar a nova senha</a></p>.',
'UI:ResetPwd-Title' => 'Alterar senha',
'UI:ResetPwd-Error-InvalidToken' => 'Desculpe, a senha já foi alterada, ou você deve ter recebido múltiplos e-mails. Por favor, certifique-se que você acessou o link fornecido no último e-mail recebido',
'UI:ResetPwd-Error-InvalidToken' => 'Desculpe, a senha já foi alterada ou você deve ter recebido múltiplos e-mails. Por favor, certifique-se que você acessou o link fornecido no último e-mail recebido',
'UI:ResetPwd-Error-EnterPassword' => 'Digite a nova senha para a conta \'%1$s\'',
'UI:ResetPwd-Ready' => 'A senha foi alterada com sucesso',
'UI:ResetPwd-Login' => 'Clique para entrar...',
@@ -853,7 +855,7 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'UI:ManageObjectsOf_Class_LinkedWith_Class_Instance' => 'Gerenciar vínculo de objetos de %1$s com %2$s: %3$s',
'UI:AddLinkedObjectsOf_Class' => 'Associar %1$s',
'UI:RemoveLinkedObjectsOf_Class' => 'Desassociar objeto(s) selecionado(s)',
'UI:Message:EmptyList:UseAdd' => 'A lista está vazia, use o botão "Associar..." para adicionar elementos',
'UI:Message:EmptyList:UseAdd' => 'A lista está vazia. Use o botão "Associar..." para adicionar elementos',
'UI:Message:EmptyList:UseSearchForm' => 'Use o formulário de busca acima para procurar objeto(s) a ser(em) adicionado(s)',
'UI:Wizard:FinalStepTitle' => 'Passo final: confirmação',
'UI:Title:DeletionOf_Object' => 'Excluindo de %1$s',
@@ -905,8 +907,8 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'UI:SearchResultsTitle' => 'Resultados da pesquisa',
'UI:SearchResultsTitle+' => 'Resultados da pesquisa de texto completo',
'UI:Search:NoSearch' => 'Nada a pesquisar',
'UI:Search:NeedleTooShort' => 'A string de pesquisa \\"%1$s\\" é muito curta. Por favor, digite pelo menos %2$d caracteres.',
'UI:Search:Ongoing' => 'Procurando por \\"%1$s\\"',
'UI:Search:NeedleTooShort' => 'A string de pesquisa \"%1$s\" é muito curta. Por favor, digite pelo menos %2$d caracteres.',
'UI:Search:Ongoing' => 'Procurando por \"%1$s\"',
'UI:Search:Enlarge' => 'Amplie a pesquisa',
'UI:FullTextSearchTitle_Text' => 'Resultados da pesquisa para "%1$s":',
'UI:Search:Count_ObjectsOf_Class_Found' => '%1$d objeto(s) da classe %2$s encontrado(s).',
@@ -923,7 +925,7 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'UI:BulkDeletePageTitle' => 'Exclusão em massa',
'UI:BulkDeleteTitle' => 'Selecione o(s) objeto(s) que você deseja excluir:',
'UI:PageTitle:ObjectCreated' => 'Objeto criado',
'UI:Title:Object_Of_Class_Created' => '%1$s - %2$s criado(a)',
'UI:Title:Object_Of_Class_Created' => '%1$s - %2$s criado(a) com sucesso',
'UI:Toggle:CustomDashboard' => 'Customizado',
'UI:Toggle:StandardDashboard' => 'Padrão',
'UI:Apply_Stimulus_On_Object_In_State_ToTarget_State' => 'Aplicando %1$s no objeto: %2$s com status %3$s para o status alvo: %4$s',
@@ -1424,7 +1426,9 @@ Quando associada a um gatilho, cada ação recebe um número de "ordem", especif
'ExcelExport:AutoDownload' => 'Inicie o download automaticamente quando a exportação estiver pronta',
'ExcelExport:PreparingExport' => 'Preparando a exportação...',
'ExcelExport:Statistics' => 'Estatísticas',
'portal:legacy_portal' => 'Portal do usuário (legado) do '.ITOP_APPLICATION_SHORT, 'portal:backoffice' => 'Interface de usuário back-office do '.ITOP_APPLICATION_SHORT, 'UI:CurrentObjectIsLockedBy_User' => 'O objeto está bloqueado, pois está sendo modificado por %1$s',
'portal:legacy_portal' => 'Portal do usuário (legado) do '.ITOP_APPLICATION_SHORT,
'portal:backoffice' => 'Interface de usuário back-office do '.ITOP_APPLICATION_SHORT,
'UI:CurrentObjectIsLockedBy_User' => 'O objeto está bloqueado, pois está sendo modificado por %1$s',
'UI:CurrentObjectIsLockedBy_User_Explanation' => 'O objeto está sendo modificado por %1$s. Suas modificações não podem ser enviadas, pois seriam sobrescritas',
'UI:CurrentObjectIsSoftLockedBy_User' => 'O objeto está sendo modificado por %1$s. Você será capaz de enviar suas modificações quando terminarem',
'UI:CurrentObjectLockExpired' => 'O bloqueio para impedir modificações simultâneas do objeto expirou',
@@ -1587,11 +1591,11 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Menu:UniversalSearchMenu+' => 'Pesquisar por todo o aplicativo...',
'Menu:UserManagementMenu' => 'Gerenciamento de Usuários',
'Menu:UserManagementMenu+' => '',
'Menu:ProfilesMenu' => 'Perfis de Usuário',
'Menu:ProfilesMenu+' => 'Lista de Perfis de Usuário',
'Menu:ProfilesMenu:Title' => 'Perfis de Usuário',
'Menu:ProfilesMenu' => 'Perfis de usuário',
'Menu:ProfilesMenu+' => 'Lista de perfis de usuário',
'Menu:ProfilesMenu:Title' => 'Perfis de usuário',
'Menu:UserAccountsMenu' => 'Contas de Usuários',
'Menu:UserAccountsMenu+' => 'Lista de Contas de Usuário',
'Menu:UserAccountsMenu+' => 'Lista de contas de usuário',
'Menu:UserAccountsMenu:Title' => 'Contas de Usuários',
'Menu:UserManagement' => 'Gerenciamento de Usuários',
'Menu:Queries' => 'Consultas',

View File

@@ -28,7 +28,7 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'UI:Layout:ActivityPanel:Tab:Toolbar:Action:CloseAll:Tooltip' => 'Recolher todas as entradas',
'UI:Layout:ActivityPanel:Tab:Toolbar:Info:AuthorsCount:Tooltip' => 'Número de pessoas que contribuíram para as entradas exibidas',
'UI:Layout:ActivityPanel:Tab:Toolbar:Info:MessagesCount:Tooltip' => 'Número de entradas no(s) log(s) exibido(s)',
'UI:Layout:ActivityPanel:ComposeButton:Tooltip' => 'Adicionar uma nova entrada no log',
'UI:Layout:ActivityPanel:ComposeButton:Tooltip' => 'Criar uma nova entrada no log',
'UI:Layout:ActivityPanel:MultipleEntriesSaveConfirmation:Title' => 'Salvar múltiplos logs',
'UI:Layout:ActivityPanel:MultipleEntriesSaveConfirmation:Explanation' => 'Ao clicar no botão de "salvar", você enviará entradas para todos os logs alterados de uma só vez.',
'UI:Layout:ActivityPanel:NotificationEntry:MessageLink:Tooltip' => 'Clique para abrir a guia de notificações e obter mais informações',

View File

@@ -25,7 +25,7 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'UI:Preferences:ActivityPanel:Title' => 'Painel de atividades',
'UI:Preferences:ActivityPanel:EntryFormOpened' => 'Formulário de adicionar nova entrada aberto por padrão',
'UI:Preferences:ActivityPanel:EntryFormOpened+' => 'Se o formulário de adicionar nova entrada será aberto automaticamente ao abrir o Painel de Atividades. Se desmarcado, você ainda poderá abri-lo clicando no botão de "adicionar"',
'UI:Preferences:PersonalizeKeyboardShortcuts:Title' => 'Atalhos de teclado de aplicativo',
'UI:Preferences:PersonalizeKeyboardShortcuts:Title' => 'Atalhos de teclado do aplicativo',
'UI:Preferences:PersonalizeKeyboardShortcuts:Input:Hint' => 'Pressione um atalho de teclado',
'UI:Preferences:PersonalizeKeyboardShortcuts:Button:Tooltip' => 'Grave um atalho de teclado',
'UI:Preferences:PersonalizeKeyboardShortcuts:Button:Reset' => 'Redefinir',

View File

@@ -1,31 +0,0 @@
<?php
// autoload_runtime.php @generated by Symfony Runtime
if (true === (require_once __DIR__.'/autoload.php') || empty($_SERVER['SCRIPT_FILENAME'])) {
return;
}
$app = require $_SERVER['SCRIPT_FILENAME'];
if (!is_object($app)) {
throw new TypeError(sprintf('Invalid return value: callable object expected, "%s" returned from "%s".', get_debug_type($app), $_SERVER['SCRIPT_FILENAME']));
}
$runtime = $_SERVER['APP_RUNTIME'] ?? $_ENV['APP_RUNTIME'] ?? 'Symfony\\Component\\Runtime\\SymfonyRuntime';
$runtime = new $runtime(($_SERVER['APP_RUNTIME_OPTIONS'] ?? $_ENV['APP_RUNTIME_OPTIONS'] ?? []) + [
'dotenv_path' => 'resources/symfony/.env',
'project_dir' => dirname(__DIR__, 1),
]);
[$app, $args] = $runtime
->getResolver($app)
->resolve();
$app = $app(...$args);
exit(
$runtime
->getRunner($app)
->run()
);

5
lib/bin/var-dump-server.bat Executable file
View File

@@ -0,0 +1,5 @@
@ECHO OFF
setlocal DISABLEDELAYEDEXPANSION
SET BIN_TARGET=%~dp0/var-dump-server
SET COMPOSER_RUNTIME_BIN_DIR=%~dp0
php "%BIN_TARGET%" %*

View File

@@ -144,10 +144,10 @@ return array(
'Combodo\\iTop\\Application\\Search\\CriterionParser' => $baseDir . '/sources/Application/Search/criterionparser.class.inc.php',
'Combodo\\iTop\\Application\\Search\\SearchForm' => $baseDir . '/sources/Application/Search/searchform.class.inc.php',
'Combodo\\iTop\\Application\\Status\\Status' => $baseDir . '/sources/Application/Status/Status.php',
'Combodo\\iTop\\Application\\Symfony\\Poc\\BaseForm\\BaseFormController' => $baseDir . '/sources/Application/Symfony/Poc/BaseForm/BaseFormController.php',
'Combodo\\iTop\\Application\\Symfony\\Poc\\BaseForm\\BaseFormType' => $baseDir . '/sources/Application/Symfony/Poc/BaseForm/BaseFormType.php',
'Combodo\\iTop\\Application\\TwigBase\\Controller\\AbstractProfilerExtension' => $baseDir . '/sources/Application/TwigBase/Controller/AbstractProfilerExtension.php',
'Combodo\\iTop\\Application\\TwigBase\\Controller\\Controller' => $baseDir . '/sources/Application/TwigBase/Controller/Controller.php',
'Combodo\\iTop\\Application\\TwigBase\\Controller\\PageNotFoundException' => $baseDir . '/application/exceptions/PageNotFoundException.php',
'Combodo\\iTop\\Application\\TwigBase\\Controller\\iProfilerExtension' => $baseDir . '/sources/Application/TwigBase/Controller/iProfilerExtension.php',
'Combodo\\iTop\\Application\\TwigBase\\Twig\\Extension' => $baseDir . '/sources/Application/TwigBase/Twig/Extension.php',
'Combodo\\iTop\\Application\\TwigBase\\Twig\\TwigHelper' => $baseDir . '/sources/Application/TwigBase/Twig/TwigHelper.php',
'Combodo\\iTop\\Application\\TwigBase\\UI\\UIBlockExtension' => $baseDir . '/sources/Application/TwigBase/UI/UIBlockExtension.php',
@@ -473,25 +473,17 @@ return array(
'Combodo\\iTop\\Form\\Validator\\MultipleChoicesValidator' => $baseDir . '/sources/Form/Validator/MultipleChoicesValidator.php',
'Combodo\\iTop\\Form\\Validator\\NotEmptyExtKeyValidator' => $baseDir . '/sources/Form/Validator/NotEmptyExtKeyValidator.php',
'Combodo\\iTop\\Form\\Validator\\SelectObjectValidator' => $baseDir . '/sources/Form/Validator/SelectObjectValidator.php',
'Combodo\\iTop\\Forms\\Dependency\\DependencyException' => $baseDir . '/sources/Forms/Dependency/DependencyException.php',
'Combodo\\iTop\\Forms\\Dependency\\DependencyGraph' => $baseDir . '/sources/Forms/Dependency/DependencyGraph.php',
'Combodo\\iTop\\Forms\\Dependency\\DependencyNode' => $baseDir . '/sources/Forms/Dependency/DependencyNode.php',
'Combodo\\iTop\\Forms\\Dependency\\GraphTrait' => $baseDir . '/sources/Forms/Dependency/GraphTrait.php',
'Combodo\\iTop\\Forms\\FormException' => $baseDir . '/sources/Forms/FormException.php',
'Combodo\\iTop\\Forms\\FormType\\Base\\AbstractType' => $baseDir . '/sources/Forms/FormType/Base/AbstractType.php',
'Combodo\\iTop\\Forms\\FormType\\Base\\FormBuilder' => $baseDir . '/sources/Forms/FormType/Base/FormBuilder.php',
'Combodo\\iTop\\Forms\\FormType\\Base\\HiddenType' => $baseDir . '/sources/Forms/FormType/Base/HiddenType.php',
'Combodo\\iTop\\Forms\\FormType\\Base\\TextType' => $baseDir . '/sources/Forms/FormType/Base/TextType.php',
'Combodo\\iTop\\Forms\\FormType\\Base\\TextareaType' => $baseDir . '/sources/Forms/FormType/Base/TextareaType.php',
'Combodo\\iTop\\Forms\\FormType\\FormTypeException' => $baseDir . '/sources/Forms/FormType/FormTypeException.php',
'Combodo\\iTop\\Forms\\FormType\\Orm\\AttCodeGroupByType' => $baseDir . '/sources/Forms/FormType/Orm/AttCodeGroupByType.php',
'Combodo\\iTop\\Forms\\FormType\\Orm\\Attribute\\ExternalKeyType' => $baseDir . '/sources/Forms/FormType/Orm/Attribute/ExternalKeyType.php',
'Combodo\\iTop\\Forms\\FormType\\Orm\\QueryType' => $baseDir . '/sources/Forms/FormType/Orm/QueryType.php',
'Combodo\\iTop\\Forms\\FormType\\Orm\\ValuesFromAttcodeType' => $baseDir . '/sources/Forms/FormType/Orm/ValuesFromAttcodeType.php',
'Combodo\\iTop\\Forms\\Dependency\\DependencyDescription' => $baseDir . '/sources/Forms/Dependency/DependencyDescription.php',
'Combodo\\iTop\\Forms\\Dependency\\DependencyHandler' => $baseDir . '/sources/Forms/Dependency/DependencyHandler.php',
'Combodo\\iTop\\Forms\\FormBuilder\\FormBuilder' => $baseDir . '/sources/Forms/FormBuilder/FormBuilder.php',
'Combodo\\iTop\\Forms\\FormBuilder\\FormTypeExtension' => $baseDir . '/sources/Forms/FormBuilder/FormTypeExtension.php',
'Combodo\\iTop\\Forms\\FormBuilder\\ResolvedFormType' => $baseDir . '/sources/Forms/FormBuilder/ResolvedFormType.php',
'Combodo\\iTop\\Forms\\FormBuilder\\ResolvedFormTypeFactory' => $baseDir . '/sources/Forms/FormBuilder/ResolvedFormTypeFactory.php',
'Combodo\\iTop\\Forms\\FormType\\AttributeChoiceType' => $baseDir . '/sources/Forms/FormType/AttributeChoiceType.php',
'Combodo\\iTop\\Forms\\FormType\\AttributeValueChoiceType' => $baseDir . '/sources/Forms/FormType/AttributeValueChoiceType.php',
'Combodo\\iTop\\Forms\\FormType\\OqlType' => $baseDir . '/sources/Forms/FormType/OqlType.php',
'Combodo\\iTop\\Forms\\Forms' => $baseDir . '/sources/Forms/Forms.php',
'Combodo\\iTop\\Forms\\ResolvedFormType' => $baseDir . '/sources/Forms/ResolvedFormType.php',
'Combodo\\iTop\\Forms\\ResolvedFormTypeFactory' => $baseDir . '/sources/Forms/ResolvedFormTypeFactory.php',
'Combodo\\iTop\\Kernel' => $baseDir . '/sources/Kernel.php',
'Combodo\\iTop\\Forms\\Twig\\Extension\\FormCompatibilityExtension' => $baseDir . '/sources/Forms/Twig/Extension/FormCompatibilityExtension.php',
'Combodo\\iTop\\PhpParser\\Evaluation\\PhpExpressionEvaluator' => $baseDir . '/sources/PhpParser/Evaluation/PhpExpressionEvaluator.php',
'Combodo\\iTop\\Renderer\\BlockRenderer' => $baseDir . '/sources/Renderer/BlockRenderer.php',
'Combodo\\iTop\\Renderer\\Bootstrap\\BsFieldRendererMappings' => $baseDir . '/sources/Renderer/Bootstrap/BsFieldRendererMappings.php',
@@ -1506,11 +1498,6 @@ return array(
'Symfony\\Bridge\\Twig\\TokenParser\\TransTokenParser' => $vendorDir . '/symfony/twig-bridge/TokenParser/TransTokenParser.php',
'Symfony\\Bridge\\Twig\\Translation\\TwigExtractor' => $vendorDir . '/symfony/twig-bridge/Translation/TwigExtractor.php',
'Symfony\\Bridge\\Twig\\UndefinedCallableHandler' => $vendorDir . '/symfony/twig-bridge/UndefinedCallableHandler.php',
'Symfony\\Bundle\\DebugBundle\\Command\\ServerDumpPlaceholderCommand' => $vendorDir . '/symfony/debug-bundle/Command/ServerDumpPlaceholderCommand.php',
'Symfony\\Bundle\\DebugBundle\\DebugBundle' => $vendorDir . '/symfony/debug-bundle/DebugBundle.php',
'Symfony\\Bundle\\DebugBundle\\DependencyInjection\\Compiler\\DumpDataCollectorPass' => $vendorDir . '/symfony/debug-bundle/DependencyInjection/Compiler/DumpDataCollectorPass.php',
'Symfony\\Bundle\\DebugBundle\\DependencyInjection\\Configuration' => $vendorDir . '/symfony/debug-bundle/DependencyInjection/Configuration.php',
'Symfony\\Bundle\\DebugBundle\\DependencyInjection\\DebugExtension' => $vendorDir . '/symfony/debug-bundle/DependencyInjection/DebugExtension.php',
'Symfony\\Bundle\\FrameworkBundle\\CacheWarmer\\AbstractPhpFileCacheWarmer' => $vendorDir . '/symfony/framework-bundle/CacheWarmer/AbstractPhpFileCacheWarmer.php',
'Symfony\\Bundle\\FrameworkBundle\\CacheWarmer\\AnnotationsCacheWarmer' => $vendorDir . '/symfony/framework-bundle/CacheWarmer/AnnotationsCacheWarmer.php',
'Symfony\\Bundle\\FrameworkBundle\\CacheWarmer\\CachePoolClearerCacheWarmer' => $vendorDir . '/symfony/framework-bundle/CacheWarmer/CachePoolClearerCacheWarmer.php',
@@ -2437,13 +2424,6 @@ return array(
'Symfony\\Component\\Form\\SubmitButton' => $vendorDir . '/symfony/form/SubmitButton.php',
'Symfony\\Component\\Form\\SubmitButtonBuilder' => $vendorDir . '/symfony/form/SubmitButtonBuilder.php',
'Symfony\\Component\\Form\\SubmitButtonTypeInterface' => $vendorDir . '/symfony/form/SubmitButtonTypeInterface.php',
'Symfony\\Component\\Form\\Test\\FormBuilderInterface' => $vendorDir . '/symfony/form/Test/FormBuilderInterface.php',
'Symfony\\Component\\Form\\Test\\FormIntegrationTestCase' => $vendorDir . '/symfony/form/Test/FormIntegrationTestCase.php',
'Symfony\\Component\\Form\\Test\\FormInterface' => $vendorDir . '/symfony/form/Test/FormInterface.php',
'Symfony\\Component\\Form\\Test\\FormPerformanceTestCase' => $vendorDir . '/symfony/form/Test/FormPerformanceTestCase.php',
'Symfony\\Component\\Form\\Test\\Traits\\RunTestTrait' => $vendorDir . '/symfony/form/Test/Traits/RunTestTrait.php',
'Symfony\\Component\\Form\\Test\\Traits\\ValidatorExtensionTrait' => $vendorDir . '/symfony/form/Test/Traits/ValidatorExtensionTrait.php',
'Symfony\\Component\\Form\\Test\\TypeTestCase' => $vendorDir . '/symfony/form/Test/TypeTestCase.php',
'Symfony\\Component\\Form\\Util\\FormUtil' => $vendorDir . '/symfony/form/Util/FormUtil.php',
'Symfony\\Component\\Form\\Util\\InheritDataAwareIterator' => $vendorDir . '/symfony/form/Util/InheritDataAwareIterator.php',
'Symfony\\Component\\Form\\Util\\OptionsResolverWrapper' => $vendorDir . '/symfony/form/Util/OptionsResolverWrapper.php',
@@ -2844,6 +2824,24 @@ return array(
'Symfony\\Component\\OptionsResolver\\OptionConfigurator' => $vendorDir . '/symfony/options-resolver/OptionConfigurator.php',
'Symfony\\Component\\OptionsResolver\\Options' => $vendorDir . '/symfony/options-resolver/Options.php',
'Symfony\\Component\\OptionsResolver\\OptionsResolver' => $vendorDir . '/symfony/options-resolver/OptionsResolver.php',
'Symfony\\Component\\PasswordHasher\\Command\\UserPasswordHashCommand' => $vendorDir . '/symfony/password-hasher/Command/UserPasswordHashCommand.php',
'Symfony\\Component\\PasswordHasher\\Exception\\ExceptionInterface' => $vendorDir . '/symfony/password-hasher/Exception/ExceptionInterface.php',
'Symfony\\Component\\PasswordHasher\\Exception\\InvalidPasswordException' => $vendorDir . '/symfony/password-hasher/Exception/InvalidPasswordException.php',
'Symfony\\Component\\PasswordHasher\\Exception\\LogicException' => $vendorDir . '/symfony/password-hasher/Exception/LogicException.php',
'Symfony\\Component\\PasswordHasher\\Hasher\\CheckPasswordLengthTrait' => $vendorDir . '/symfony/password-hasher/Hasher/CheckPasswordLengthTrait.php',
'Symfony\\Component\\PasswordHasher\\Hasher\\MessageDigestPasswordHasher' => $vendorDir . '/symfony/password-hasher/Hasher/MessageDigestPasswordHasher.php',
'Symfony\\Component\\PasswordHasher\\Hasher\\MigratingPasswordHasher' => $vendorDir . '/symfony/password-hasher/Hasher/MigratingPasswordHasher.php',
'Symfony\\Component\\PasswordHasher\\Hasher\\NativePasswordHasher' => $vendorDir . '/symfony/password-hasher/Hasher/NativePasswordHasher.php',
'Symfony\\Component\\PasswordHasher\\Hasher\\PasswordHasherAwareInterface' => $vendorDir . '/symfony/password-hasher/Hasher/PasswordHasherAwareInterface.php',
'Symfony\\Component\\PasswordHasher\\Hasher\\PasswordHasherFactory' => $vendorDir . '/symfony/password-hasher/Hasher/PasswordHasherFactory.php',
'Symfony\\Component\\PasswordHasher\\Hasher\\PasswordHasherFactoryInterface' => $vendorDir . '/symfony/password-hasher/Hasher/PasswordHasherFactoryInterface.php',
'Symfony\\Component\\PasswordHasher\\Hasher\\Pbkdf2PasswordHasher' => $vendorDir . '/symfony/password-hasher/Hasher/Pbkdf2PasswordHasher.php',
'Symfony\\Component\\PasswordHasher\\Hasher\\PlaintextPasswordHasher' => $vendorDir . '/symfony/password-hasher/Hasher/PlaintextPasswordHasher.php',
'Symfony\\Component\\PasswordHasher\\Hasher\\SodiumPasswordHasher' => $vendorDir . '/symfony/password-hasher/Hasher/SodiumPasswordHasher.php',
'Symfony\\Component\\PasswordHasher\\Hasher\\UserPasswordHasher' => $vendorDir . '/symfony/password-hasher/Hasher/UserPasswordHasher.php',
'Symfony\\Component\\PasswordHasher\\Hasher\\UserPasswordHasherInterface' => $vendorDir . '/symfony/password-hasher/Hasher/UserPasswordHasherInterface.php',
'Symfony\\Component\\PasswordHasher\\LegacyPasswordHasherInterface' => $vendorDir . '/symfony/password-hasher/LegacyPasswordHasherInterface.php',
'Symfony\\Component\\PasswordHasher\\PasswordHasherInterface' => $vendorDir . '/symfony/password-hasher/PasswordHasherInterface.php',
'Symfony\\Component\\PropertyAccess\\Exception\\AccessException' => $vendorDir . '/symfony/property-access/Exception/AccessException.php',
'Symfony\\Component\\PropertyAccess\\Exception\\ExceptionInterface' => $vendorDir . '/symfony/property-access/Exception/ExceptionInterface.php',
'Symfony\\Component\\PropertyAccess\\Exception\\InvalidArgumentException' => $vendorDir . '/symfony/property-access/Exception/InvalidArgumentException.php',
@@ -2959,21 +2957,112 @@ return array(
'Symfony\\Component\\Routing\\RouteCompilerInterface' => $vendorDir . '/symfony/routing/RouteCompilerInterface.php',
'Symfony\\Component\\Routing\\Router' => $vendorDir . '/symfony/routing/Router.php',
'Symfony\\Component\\Routing\\RouterInterface' => $vendorDir . '/symfony/routing/RouterInterface.php',
'Symfony\\Component\\Runtime\\GenericRuntime' => $vendorDir . '/symfony/runtime/GenericRuntime.php',
'Symfony\\Component\\Runtime\\Internal\\BasicErrorHandler' => $vendorDir . '/symfony/runtime/Internal/BasicErrorHandler.php',
'Symfony\\Component\\Runtime\\Internal\\ComposerPlugin' => $vendorDir . '/symfony/runtime/Internal/ComposerPlugin.php',
'Symfony\\Component\\Runtime\\Internal\\MissingDotenv' => $vendorDir . '/symfony/runtime/Internal/MissingDotenv.php',
'Symfony\\Component\\Runtime\\Internal\\SymfonyErrorHandler' => $vendorDir . '/symfony/runtime/Internal/SymfonyErrorHandler.php',
'Symfony\\Component\\Runtime\\ResolverInterface' => $vendorDir . '/symfony/runtime/ResolverInterface.php',
'Symfony\\Component\\Runtime\\Resolver\\ClosureResolver' => $vendorDir . '/symfony/runtime/Resolver/ClosureResolver.php',
'Symfony\\Component\\Runtime\\Resolver\\DebugClosureResolver' => $vendorDir . '/symfony/runtime/Resolver/DebugClosureResolver.php',
'Symfony\\Component\\Runtime\\RunnerInterface' => $vendorDir . '/symfony/runtime/RunnerInterface.php',
'Symfony\\Component\\Runtime\\Runner\\ClosureRunner' => $vendorDir . '/symfony/runtime/Runner/ClosureRunner.php',
'Symfony\\Component\\Runtime\\Runner\\Symfony\\ConsoleApplicationRunner' => $vendorDir . '/symfony/runtime/Runner/Symfony/ConsoleApplicationRunner.php',
'Symfony\\Component\\Runtime\\Runner\\Symfony\\HttpKernelRunner' => $vendorDir . '/symfony/runtime/Runner/Symfony/HttpKernelRunner.php',
'Symfony\\Component\\Runtime\\Runner\\Symfony\\ResponseRunner' => $vendorDir . '/symfony/runtime/Runner/Symfony/ResponseRunner.php',
'Symfony\\Component\\Runtime\\RuntimeInterface' => $vendorDir . '/symfony/runtime/RuntimeInterface.php',
'Symfony\\Component\\Runtime\\SymfonyRuntime' => $vendorDir . '/symfony/runtime/SymfonyRuntime.php',
'Symfony\\Component\\Security\\Core\\AuthenticationEvents' => $vendorDir . '/symfony/security-core/AuthenticationEvents.php',
'Symfony\\Component\\Security\\Core\\Authentication\\AuthenticationTrustResolver' => $vendorDir . '/symfony/security-core/Authentication/AuthenticationTrustResolver.php',
'Symfony\\Component\\Security\\Core\\Authentication\\AuthenticationTrustResolverInterface' => $vendorDir . '/symfony/security-core/Authentication/AuthenticationTrustResolverInterface.php',
'Symfony\\Component\\Security\\Core\\Authentication\\RememberMe\\CacheTokenVerifier' => $vendorDir . '/symfony/security-core/Authentication/RememberMe/CacheTokenVerifier.php',
'Symfony\\Component\\Security\\Core\\Authentication\\RememberMe\\InMemoryTokenProvider' => $vendorDir . '/symfony/security-core/Authentication/RememberMe/InMemoryTokenProvider.php',
'Symfony\\Component\\Security\\Core\\Authentication\\RememberMe\\PersistentToken' => $vendorDir . '/symfony/security-core/Authentication/RememberMe/PersistentToken.php',
'Symfony\\Component\\Security\\Core\\Authentication\\RememberMe\\PersistentTokenInterface' => $vendorDir . '/symfony/security-core/Authentication/RememberMe/PersistentTokenInterface.php',
'Symfony\\Component\\Security\\Core\\Authentication\\RememberMe\\TokenProviderInterface' => $vendorDir . '/symfony/security-core/Authentication/RememberMe/TokenProviderInterface.php',
'Symfony\\Component\\Security\\Core\\Authentication\\RememberMe\\TokenVerifierInterface' => $vendorDir . '/symfony/security-core/Authentication/RememberMe/TokenVerifierInterface.php',
'Symfony\\Component\\Security\\Core\\Authentication\\Token\\AbstractToken' => $vendorDir . '/symfony/security-core/Authentication/Token/AbstractToken.php',
'Symfony\\Component\\Security\\Core\\Authentication\\Token\\NullToken' => $vendorDir . '/symfony/security-core/Authentication/Token/NullToken.php',
'Symfony\\Component\\Security\\Core\\Authentication\\Token\\PreAuthenticatedToken' => $vendorDir . '/symfony/security-core/Authentication/Token/PreAuthenticatedToken.php',
'Symfony\\Component\\Security\\Core\\Authentication\\Token\\RememberMeToken' => $vendorDir . '/symfony/security-core/Authentication/Token/RememberMeToken.php',
'Symfony\\Component\\Security\\Core\\Authentication\\Token\\Storage\\TokenStorage' => $vendorDir . '/symfony/security-core/Authentication/Token/Storage/TokenStorage.php',
'Symfony\\Component\\Security\\Core\\Authentication\\Token\\Storage\\TokenStorageInterface' => $vendorDir . '/symfony/security-core/Authentication/Token/Storage/TokenStorageInterface.php',
'Symfony\\Component\\Security\\Core\\Authentication\\Token\\Storage\\UsageTrackingTokenStorage' => $vendorDir . '/symfony/security-core/Authentication/Token/Storage/UsageTrackingTokenStorage.php',
'Symfony\\Component\\Security\\Core\\Authentication\\Token\\SwitchUserToken' => $vendorDir . '/symfony/security-core/Authentication/Token/SwitchUserToken.php',
'Symfony\\Component\\Security\\Core\\Authentication\\Token\\TokenInterface' => $vendorDir . '/symfony/security-core/Authentication/Token/TokenInterface.php',
'Symfony\\Component\\Security\\Core\\Authentication\\Token\\UsernamePasswordToken' => $vendorDir . '/symfony/security-core/Authentication/Token/UsernamePasswordToken.php',
'Symfony\\Component\\Security\\Core\\Authorization\\AccessDecisionManager' => $vendorDir . '/symfony/security-core/Authorization/AccessDecisionManager.php',
'Symfony\\Component\\Security\\Core\\Authorization\\AccessDecisionManagerInterface' => $vendorDir . '/symfony/security-core/Authorization/AccessDecisionManagerInterface.php',
'Symfony\\Component\\Security\\Core\\Authorization\\AuthorizationChecker' => $vendorDir . '/symfony/security-core/Authorization/AuthorizationChecker.php',
'Symfony\\Component\\Security\\Core\\Authorization\\AuthorizationCheckerInterface' => $vendorDir . '/symfony/security-core/Authorization/AuthorizationCheckerInterface.php',
'Symfony\\Component\\Security\\Core\\Authorization\\ExpressionLanguage' => $vendorDir . '/symfony/security-core/Authorization/ExpressionLanguage.php',
'Symfony\\Component\\Security\\Core\\Authorization\\ExpressionLanguageProvider' => $vendorDir . '/symfony/security-core/Authorization/ExpressionLanguageProvider.php',
'Symfony\\Component\\Security\\Core\\Authorization\\Strategy\\AccessDecisionStrategyInterface' => $vendorDir . '/symfony/security-core/Authorization/Strategy/AccessDecisionStrategyInterface.php',
'Symfony\\Component\\Security\\Core\\Authorization\\Strategy\\AffirmativeStrategy' => $vendorDir . '/symfony/security-core/Authorization/Strategy/AffirmativeStrategy.php',
'Symfony\\Component\\Security\\Core\\Authorization\\Strategy\\ConsensusStrategy' => $vendorDir . '/symfony/security-core/Authorization/Strategy/ConsensusStrategy.php',
'Symfony\\Component\\Security\\Core\\Authorization\\Strategy\\PriorityStrategy' => $vendorDir . '/symfony/security-core/Authorization/Strategy/PriorityStrategy.php',
'Symfony\\Component\\Security\\Core\\Authorization\\Strategy\\UnanimousStrategy' => $vendorDir . '/symfony/security-core/Authorization/Strategy/UnanimousStrategy.php',
'Symfony\\Component\\Security\\Core\\Authorization\\TraceableAccessDecisionManager' => $vendorDir . '/symfony/security-core/Authorization/TraceableAccessDecisionManager.php',
'Symfony\\Component\\Security\\Core\\Authorization\\Voter\\AuthenticatedVoter' => $vendorDir . '/symfony/security-core/Authorization/Voter/AuthenticatedVoter.php',
'Symfony\\Component\\Security\\Core\\Authorization\\Voter\\CacheableVoterInterface' => $vendorDir . '/symfony/security-core/Authorization/Voter/CacheableVoterInterface.php',
'Symfony\\Component\\Security\\Core\\Authorization\\Voter\\ExpressionVoter' => $vendorDir . '/symfony/security-core/Authorization/Voter/ExpressionVoter.php',
'Symfony\\Component\\Security\\Core\\Authorization\\Voter\\RoleHierarchyVoter' => $vendorDir . '/symfony/security-core/Authorization/Voter/RoleHierarchyVoter.php',
'Symfony\\Component\\Security\\Core\\Authorization\\Voter\\RoleVoter' => $vendorDir . '/symfony/security-core/Authorization/Voter/RoleVoter.php',
'Symfony\\Component\\Security\\Core\\Authorization\\Voter\\TraceableVoter' => $vendorDir . '/symfony/security-core/Authorization/Voter/TraceableVoter.php',
'Symfony\\Component\\Security\\Core\\Authorization\\Voter\\Voter' => $vendorDir . '/symfony/security-core/Authorization/Voter/Voter.php',
'Symfony\\Component\\Security\\Core\\Authorization\\Voter\\VoterInterface' => $vendorDir . '/symfony/security-core/Authorization/Voter/VoterInterface.php',
'Symfony\\Component\\Security\\Core\\Event\\AuthenticationEvent' => $vendorDir . '/symfony/security-core/Event/AuthenticationEvent.php',
'Symfony\\Component\\Security\\Core\\Event\\AuthenticationSuccessEvent' => $vendorDir . '/symfony/security-core/Event/AuthenticationSuccessEvent.php',
'Symfony\\Component\\Security\\Core\\Event\\VoteEvent' => $vendorDir . '/symfony/security-core/Event/VoteEvent.php',
'Symfony\\Component\\Security\\Core\\Exception\\AccessDeniedException' => $vendorDir . '/symfony/security-core/Exception/AccessDeniedException.php',
'Symfony\\Component\\Security\\Core\\Exception\\AccountExpiredException' => $vendorDir . '/symfony/security-core/Exception/AccountExpiredException.php',
'Symfony\\Component\\Security\\Core\\Exception\\AccountStatusException' => $vendorDir . '/symfony/security-core/Exception/AccountStatusException.php',
'Symfony\\Component\\Security\\Core\\Exception\\AuthenticationCredentialsNotFoundException' => $vendorDir . '/symfony/security-core/Exception/AuthenticationCredentialsNotFoundException.php',
'Symfony\\Component\\Security\\Core\\Exception\\AuthenticationException' => $vendorDir . '/symfony/security-core/Exception/AuthenticationException.php',
'Symfony\\Component\\Security\\Core\\Exception\\AuthenticationExpiredException' => $vendorDir . '/symfony/security-core/Exception/AuthenticationExpiredException.php',
'Symfony\\Component\\Security\\Core\\Exception\\AuthenticationServiceException' => $vendorDir . '/symfony/security-core/Exception/AuthenticationServiceException.php',
'Symfony\\Component\\Security\\Core\\Exception\\BadCredentialsException' => $vendorDir . '/symfony/security-core/Exception/BadCredentialsException.php',
'Symfony\\Component\\Security\\Core\\Exception\\CookieTheftException' => $vendorDir . '/symfony/security-core/Exception/CookieTheftException.php',
'Symfony\\Component\\Security\\Core\\Exception\\CredentialsExpiredException' => $vendorDir . '/symfony/security-core/Exception/CredentialsExpiredException.php',
'Symfony\\Component\\Security\\Core\\Exception\\CustomUserMessageAccountStatusException' => $vendorDir . '/symfony/security-core/Exception/CustomUserMessageAccountStatusException.php',
'Symfony\\Component\\Security\\Core\\Exception\\CustomUserMessageAuthenticationException' => $vendorDir . '/symfony/security-core/Exception/CustomUserMessageAuthenticationException.php',
'Symfony\\Component\\Security\\Core\\Exception\\DisabledException' => $vendorDir . '/symfony/security-core/Exception/DisabledException.php',
'Symfony\\Component\\Security\\Core\\Exception\\ExceptionInterface' => $vendorDir . '/symfony/security-core/Exception/ExceptionInterface.php',
'Symfony\\Component\\Security\\Core\\Exception\\InsufficientAuthenticationException' => $vendorDir . '/symfony/security-core/Exception/InsufficientAuthenticationException.php',
'Symfony\\Component\\Security\\Core\\Exception\\InvalidArgumentException' => $vendorDir . '/symfony/security-core/Exception/InvalidArgumentException.php',
'Symfony\\Component\\Security\\Core\\Exception\\InvalidCsrfTokenException' => $vendorDir . '/symfony/security-core/Exception/InvalidCsrfTokenException.php',
'Symfony\\Component\\Security\\Core\\Exception\\LazyResponseException' => $vendorDir . '/symfony/security-core/Exception/LazyResponseException.php',
'Symfony\\Component\\Security\\Core\\Exception\\LockedException' => $vendorDir . '/symfony/security-core/Exception/LockedException.php',
'Symfony\\Component\\Security\\Core\\Exception\\LogicException' => $vendorDir . '/symfony/security-core/Exception/LogicException.php',
'Symfony\\Component\\Security\\Core\\Exception\\LogoutException' => $vendorDir . '/symfony/security-core/Exception/LogoutException.php',
'Symfony\\Component\\Security\\Core\\Exception\\ProviderNotFoundException' => $vendorDir . '/symfony/security-core/Exception/ProviderNotFoundException.php',
'Symfony\\Component\\Security\\Core\\Exception\\RuntimeException' => $vendorDir . '/symfony/security-core/Exception/RuntimeException.php',
'Symfony\\Component\\Security\\Core\\Exception\\SessionUnavailableException' => $vendorDir . '/symfony/security-core/Exception/SessionUnavailableException.php',
'Symfony\\Component\\Security\\Core\\Exception\\TokenNotFoundException' => $vendorDir . '/symfony/security-core/Exception/TokenNotFoundException.php',
'Symfony\\Component\\Security\\Core\\Exception\\TooManyLoginAttemptsAuthenticationException' => $vendorDir . '/symfony/security-core/Exception/TooManyLoginAttemptsAuthenticationException.php',
'Symfony\\Component\\Security\\Core\\Exception\\UnsupportedUserException' => $vendorDir . '/symfony/security-core/Exception/UnsupportedUserException.php',
'Symfony\\Component\\Security\\Core\\Exception\\UserNotFoundException' => $vendorDir . '/symfony/security-core/Exception/UserNotFoundException.php',
'Symfony\\Component\\Security\\Core\\Role\\Role' => $vendorDir . '/symfony/security-core/Role/Role.php',
'Symfony\\Component\\Security\\Core\\Role\\RoleHierarchy' => $vendorDir . '/symfony/security-core/Role/RoleHierarchy.php',
'Symfony\\Component\\Security\\Core\\Role\\RoleHierarchyInterface' => $vendorDir . '/symfony/security-core/Role/RoleHierarchyInterface.php',
'Symfony\\Component\\Security\\Core\\Role\\SwitchUserRole' => $vendorDir . '/symfony/security-core/Role/SwitchUserRole.php',
'Symfony\\Component\\Security\\Core\\Security' => $vendorDir . '/symfony/security-core/Security.php',
'Symfony\\Component\\Security\\Core\\Signature\\Exception\\ExpiredSignatureException' => $vendorDir . '/symfony/security-core/Signature/Exception/ExpiredSignatureException.php',
'Symfony\\Component\\Security\\Core\\Signature\\Exception\\InvalidSignatureException' => $vendorDir . '/symfony/security-core/Signature/Exception/InvalidSignatureException.php',
'Symfony\\Component\\Security\\Core\\Signature\\ExpiredSignatureStorage' => $vendorDir . '/symfony/security-core/Signature/ExpiredSignatureStorage.php',
'Symfony\\Component\\Security\\Core\\Signature\\SignatureHasher' => $vendorDir . '/symfony/security-core/Signature/SignatureHasher.php',
'Symfony\\Component\\Security\\Core\\User\\AttributesBasedUserProviderInterface' => $vendorDir . '/symfony/security-core/User/AttributesBasedUserProviderInterface.php',
'Symfony\\Component\\Security\\Core\\User\\ChainUserChecker' => $vendorDir . '/symfony/security-core/User/ChainUserChecker.php',
'Symfony\\Component\\Security\\Core\\User\\ChainUserProvider' => $vendorDir . '/symfony/security-core/User/ChainUserProvider.php',
'Symfony\\Component\\Security\\Core\\User\\EquatableInterface' => $vendorDir . '/symfony/security-core/User/EquatableInterface.php',
'Symfony\\Component\\Security\\Core\\User\\InMemoryUser' => $vendorDir . '/symfony/security-core/User/InMemoryUser.php',
'Symfony\\Component\\Security\\Core\\User\\InMemoryUserChecker' => $vendorDir . '/symfony/security-core/User/InMemoryUserChecker.php',
'Symfony\\Component\\Security\\Core\\User\\InMemoryUserProvider' => $vendorDir . '/symfony/security-core/User/InMemoryUserProvider.php',
'Symfony\\Component\\Security\\Core\\User\\LegacyPasswordAuthenticatedUserInterface' => $vendorDir . '/symfony/security-core/User/LegacyPasswordAuthenticatedUserInterface.php',
'Symfony\\Component\\Security\\Core\\User\\MissingUserProvider' => $vendorDir . '/symfony/security-core/User/MissingUserProvider.php',
'Symfony\\Component\\Security\\Core\\User\\OidcUser' => $vendorDir . '/symfony/security-core/User/OidcUser.php',
'Symfony\\Component\\Security\\Core\\User\\PasswordAuthenticatedUserInterface' => $vendorDir . '/symfony/security-core/User/PasswordAuthenticatedUserInterface.php',
'Symfony\\Component\\Security\\Core\\User\\PasswordUpgraderInterface' => $vendorDir . '/symfony/security-core/User/PasswordUpgraderInterface.php',
'Symfony\\Component\\Security\\Core\\User\\UserCheckerInterface' => $vendorDir . '/symfony/security-core/User/UserCheckerInterface.php',
'Symfony\\Component\\Security\\Core\\User\\UserInterface' => $vendorDir . '/symfony/security-core/User/UserInterface.php',
'Symfony\\Component\\Security\\Core\\User\\UserProviderInterface' => $vendorDir . '/symfony/security-core/User/UserProviderInterface.php',
'Symfony\\Component\\Security\\Core\\Validator\\Constraints\\UserPassword' => $vendorDir . '/symfony/security-core/Validator/Constraints/UserPassword.php',
'Symfony\\Component\\Security\\Core\\Validator\\Constraints\\UserPasswordValidator' => $vendorDir . '/symfony/security-core/Validator/Constraints/UserPasswordValidator.php',
'Symfony\\Component\\Security\\Csrf\\CsrfToken' => $vendorDir . '/symfony/security-csrf/CsrfToken.php',
'Symfony\\Component\\Security\\Csrf\\CsrfTokenManager' => $vendorDir . '/symfony/security-csrf/CsrfTokenManager.php',
'Symfony\\Component\\Security\\Csrf\\CsrfTokenManagerInterface' => $vendorDir . '/symfony/security-csrf/CsrfTokenManagerInterface.php',
'Symfony\\Component\\Security\\Csrf\\Exception\\TokenNotFoundException' => $vendorDir . '/symfony/security-csrf/Exception/TokenNotFoundException.php',
'Symfony\\Component\\Security\\Csrf\\TokenGenerator\\TokenGeneratorInterface' => $vendorDir . '/symfony/security-csrf/TokenGenerator/TokenGeneratorInterface.php',
'Symfony\\Component\\Security\\Csrf\\TokenGenerator\\UriSafeTokenGenerator' => $vendorDir . '/symfony/security-csrf/TokenGenerator/UriSafeTokenGenerator.php',
'Symfony\\Component\\Security\\Csrf\\TokenStorage\\ClearableTokenStorageInterface' => $vendorDir . '/symfony/security-csrf/TokenStorage/ClearableTokenStorageInterface.php',
'Symfony\\Component\\Security\\Csrf\\TokenStorage\\NativeSessionTokenStorage' => $vendorDir . '/symfony/security-csrf/TokenStorage/NativeSessionTokenStorage.php',
'Symfony\\Component\\Security\\Csrf\\TokenStorage\\SessionTokenStorage' => $vendorDir . '/symfony/security-csrf/TokenStorage/SessionTokenStorage.php',
'Symfony\\Component\\Security\\Csrf\\TokenStorage\\TokenStorageInterface' => $vendorDir . '/symfony/security-csrf/TokenStorage/TokenStorageInterface.php',
'Symfony\\Component\\Stopwatch\\Section' => $vendorDir . '/symfony/stopwatch/Section.php',
'Symfony\\Component\\Stopwatch\\Stopwatch' => $vendorDir . '/symfony/stopwatch/Stopwatch.php',
'Symfony\\Component\\Stopwatch\\StopwatchEvent' => $vendorDir . '/symfony/stopwatch/StopwatchEvent.php',
@@ -3037,7 +3126,6 @@ return array(
'Symfony\\Component\\VarDumper\\Cloner\\Cursor' => $vendorDir . '/symfony/var-dumper/Cloner/Cursor.php',
'Symfony\\Component\\VarDumper\\Cloner\\Data' => $vendorDir . '/symfony/var-dumper/Cloner/Data.php',
'Symfony\\Component\\VarDumper\\Cloner\\DumperInterface' => $vendorDir . '/symfony/var-dumper/Cloner/DumperInterface.php',
'Symfony\\Component\\VarDumper\\Cloner\\Internal\\NoDefault' => $vendorDir . '/symfony/var-dumper/Cloner/Internal/NoDefault.php',
'Symfony\\Component\\VarDumper\\Cloner\\Stub' => $vendorDir . '/symfony/var-dumper/Cloner/Stub.php',
'Symfony\\Component\\VarDumper\\Cloner\\VarCloner' => $vendorDir . '/symfony/var-dumper/Cloner/VarCloner.php',
'Symfony\\Component\\VarDumper\\Command\\Descriptor\\CliDescriptor' => $vendorDir . '/symfony/var-dumper/Command/Descriptor/CliDescriptor.php',
@@ -3148,13 +3236,6 @@ return array(
'Symfony\\Polyfill\\Intl\\Normalizer\\Normalizer' => $vendorDir . '/symfony/polyfill-intl-normalizer/Normalizer.php',
'Symfony\\Polyfill\\Mbstring\\Mbstring' => $vendorDir . '/symfony/polyfill-mbstring/Mbstring.php',
'Symfony\\Polyfill\\Php83\\Php83' => $vendorDir . '/symfony/polyfill-php83/Php83.php',
'Symfony\\Runtime\\Symfony\\Component\\Console\\ApplicationRuntime' => $vendorDir . '/symfony/runtime/Internal/Console/ApplicationRuntime.php',
'Symfony\\Runtime\\Symfony\\Component\\Console\\Command\\CommandRuntime' => $vendorDir . '/symfony/runtime/Internal/Console/Command/CommandRuntime.php',
'Symfony\\Runtime\\Symfony\\Component\\Console\\Input\\InputInterfaceRuntime' => $vendorDir . '/symfony/runtime/Internal/Console/Input/InputInterfaceRuntime.php',
'Symfony\\Runtime\\Symfony\\Component\\Console\\Output\\OutputInterfaceRuntime' => $vendorDir . '/symfony/runtime/Internal/Console/Output/OutputInterfaceRuntime.php',
'Symfony\\Runtime\\Symfony\\Component\\HttpFoundation\\RequestRuntime' => $vendorDir . '/symfony/runtime/Internal/HttpFoundation/RequestRuntime.php',
'Symfony\\Runtime\\Symfony\\Component\\HttpFoundation\\ResponseRuntime' => $vendorDir . '/symfony/runtime/Internal/HttpFoundation/ResponseRuntime.php',
'Symfony\\Runtime\\Symfony\\Component\\HttpKernel\\HttpKernelInterfaceRuntime' => $vendorDir . '/symfony/runtime/Internal/HttpKernel/HttpKernelInterfaceRuntime.php',
'SynchroExceptionNotStarted' => $baseDir . '/application/exceptions/SynchroExceptionNotStarted.php',
'System' => $vendorDir . '/pear/pear-core-minimal/src/System.php',
'TCPDF' => $vendorDir . '/tecnickcom/tcpdf/tcpdf.php',

View File

@@ -10,8 +10,8 @@ return array(
'0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => $vendorDir . '/symfony/polyfill-mbstring/bootstrap.php',
'320cde22f66dd4f5d3fd621d3e88b98f' => $vendorDir . '/symfony/polyfill-ctype/bootstrap.php',
'662a729f963d39afe703c9d9b7ab4a8c' => $vendorDir . '/symfony/polyfill-php83/bootstrap.php',
'667aeda72477189d0494fecd327c3641' => $vendorDir . '/symfony/var-dumper/Resources/functions/dump.php',
'e69f7f6ee287b969198c3c9d6777bd38' => $vendorDir . '/symfony/polyfill-intl-normalizer/bootstrap.php',
'667aeda72477189d0494fecd327c3641' => $vendorDir . '/symfony/var-dumper/Resources/functions/dump.php',
'89efb1254ef2d1c5d80096acd12c4098' => $vendorDir . '/twig/twig/src/Resources/core.php',
'ffecb95d45175fd40f75be8a23b34f90' => $vendorDir . '/twig/twig/src/Resources/debug.php',
'c7baa00073ee9c61edf148c51917cfb4' => $vendorDir . '/twig/twig/src/Resources/escaper.php',

View File

@@ -8,7 +8,6 @@ $baseDir = dirname($vendorDir);
return array(
'Twig\\' => array($vendorDir . '/twig/twig/src'),
'TheNetworg\\OAuth2\\Client\\' => array($vendorDir . '/thenetworg/oauth2-azure/src'),
'Symfony\\Runtime\\Symfony\\Component\\' => array($vendorDir . '/symfony/runtime/Internal'),
'Symfony\\Polyfill\\Php83\\' => array($vendorDir . '/symfony/polyfill-php83'),
'Symfony\\Polyfill\\Mbstring\\' => array($vendorDir . '/symfony/polyfill-mbstring'),
'Symfony\\Polyfill\\Intl\\Normalizer\\' => array($vendorDir . '/symfony/polyfill-intl-normalizer'),
@@ -25,10 +24,12 @@ return array(
'Symfony\\Component\\VarDumper\\' => array($vendorDir . '/symfony/var-dumper'),
'Symfony\\Component\\String\\' => array($vendorDir . '/symfony/string'),
'Symfony\\Component\\Stopwatch\\' => array($vendorDir . '/symfony/stopwatch'),
'Symfony\\Component\\Runtime\\' => array($vendorDir . '/symfony/runtime'),
'Symfony\\Component\\Security\\Csrf\\' => array($vendorDir . '/symfony/security-csrf'),
'Symfony\\Component\\Security\\Core\\' => array($vendorDir . '/symfony/security-core'),
'Symfony\\Component\\Routing\\' => array($vendorDir . '/symfony/routing'),
'Symfony\\Component\\PropertyInfo\\' => array($vendorDir . '/symfony/property-info'),
'Symfony\\Component\\PropertyAccess\\' => array($vendorDir . '/symfony/property-access'),
'Symfony\\Component\\PasswordHasher\\' => array($vendorDir . '/symfony/password-hasher'),
'Symfony\\Component\\OptionsResolver\\' => array($vendorDir . '/symfony/options-resolver'),
'Symfony\\Component\\Mime\\' => array($vendorDir . '/symfony/mime'),
'Symfony\\Component\\Mailer\\' => array($vendorDir . '/symfony/mailer'),
@@ -48,7 +49,6 @@ return array(
'Symfony\\Bundle\\WebProfilerBundle\\' => array($vendorDir . '/symfony/web-profiler-bundle'),
'Symfony\\Bundle\\TwigBundle\\' => array($vendorDir . '/symfony/twig-bundle'),
'Symfony\\Bundle\\FrameworkBundle\\' => array($vendorDir . '/symfony/framework-bundle'),
'Symfony\\Bundle\\DebugBundle\\' => array($vendorDir . '/symfony/debug-bundle'),
'Symfony\\Bridge\\Twig\\' => array($vendorDir . '/symfony/twig-bridge'),
'Soundasleep\\' => array($vendorDir . '/soundasleep/html2text/src'),
'ScssPhp\\ScssPhp\\' => array($vendorDir . '/scssphp/scssphp/src'),

View File

@@ -11,8 +11,8 @@ class ComposerStaticInit7f81b4a2a468a061c306af5e447a9a9f
'0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => __DIR__ . '/..' . '/symfony/polyfill-mbstring/bootstrap.php',
'320cde22f66dd4f5d3fd621d3e88b98f' => __DIR__ . '/..' . '/symfony/polyfill-ctype/bootstrap.php',
'662a729f963d39afe703c9d9b7ab4a8c' => __DIR__ . '/..' . '/symfony/polyfill-php83/bootstrap.php',
'667aeda72477189d0494fecd327c3641' => __DIR__ . '/..' . '/symfony/var-dumper/Resources/functions/dump.php',
'e69f7f6ee287b969198c3c9d6777bd38' => __DIR__ . '/..' . '/symfony/polyfill-intl-normalizer/bootstrap.php',
'667aeda72477189d0494fecd327c3641' => __DIR__ . '/..' . '/symfony/var-dumper/Resources/functions/dump.php',
'89efb1254ef2d1c5d80096acd12c4098' => __DIR__ . '/..' . '/twig/twig/src/Resources/core.php',
'ffecb95d45175fd40f75be8a23b34f90' => __DIR__ . '/..' . '/twig/twig/src/Resources/debug.php',
'c7baa00073ee9c61edf148c51917cfb4' => __DIR__ . '/..' . '/twig/twig/src/Resources/escaper.php',
@@ -35,7 +35,6 @@ class ComposerStaticInit7f81b4a2a468a061c306af5e447a9a9f
),
'S' =>
array (
'Symfony\\Runtime\\Symfony\\Component\\' => 34,
'Symfony\\Polyfill\\Php83\\' => 23,
'Symfony\\Polyfill\\Mbstring\\' => 26,
'Symfony\\Polyfill\\Intl\\Normalizer\\' => 33,
@@ -52,10 +51,12 @@ class ComposerStaticInit7f81b4a2a468a061c306af5e447a9a9f
'Symfony\\Component\\VarDumper\\' => 28,
'Symfony\\Component\\String\\' => 25,
'Symfony\\Component\\Stopwatch\\' => 28,
'Symfony\\Component\\Runtime\\' => 26,
'Symfony\\Component\\Security\\Csrf\\' => 32,
'Symfony\\Component\\Security\\Core\\' => 32,
'Symfony\\Component\\Routing\\' => 26,
'Symfony\\Component\\PropertyInfo\\' => 31,
'Symfony\\Component\\PropertyAccess\\' => 33,
'Symfony\\Component\\PasswordHasher\\' => 33,
'Symfony\\Component\\OptionsResolver\\' => 34,
'Symfony\\Component\\Mime\\' => 23,
'Symfony\\Component\\Mailer\\' => 25,
@@ -75,7 +76,6 @@ class ComposerStaticInit7f81b4a2a468a061c306af5e447a9a9f
'Symfony\\Bundle\\WebProfilerBundle\\' => 33,
'Symfony\\Bundle\\TwigBundle\\' => 26,
'Symfony\\Bundle\\FrameworkBundle\\' => 31,
'Symfony\\Bundle\\DebugBundle\\' => 27,
'Symfony\\Bridge\\Twig\\' => 20,
'Soundasleep\\' => 12,
'ScssPhp\\ScssPhp\\' => 16,
@@ -125,10 +125,6 @@ class ComposerStaticInit7f81b4a2a468a061c306af5e447a9a9f
array (
0 => __DIR__ . '/..' . '/thenetworg/oauth2-azure/src',
),
'Symfony\\Runtime\\Symfony\\Component\\' =>
array (
0 => __DIR__ . '/..' . '/symfony/runtime/Internal',
),
'Symfony\\Polyfill\\Php83\\' =>
array (
0 => __DIR__ . '/..' . '/symfony/polyfill-php83',
@@ -193,9 +189,13 @@ class ComposerStaticInit7f81b4a2a468a061c306af5e447a9a9f
array (
0 => __DIR__ . '/..' . '/symfony/stopwatch',
),
'Symfony\\Component\\Runtime\\' =>
'Symfony\\Component\\Security\\Csrf\\' =>
array (
0 => __DIR__ . '/..' . '/symfony/runtime',
0 => __DIR__ . '/..' . '/symfony/security-csrf',
),
'Symfony\\Component\\Security\\Core\\' =>
array (
0 => __DIR__ . '/..' . '/symfony/security-core',
),
'Symfony\\Component\\Routing\\' =>
array (
@@ -209,6 +209,10 @@ class ComposerStaticInit7f81b4a2a468a061c306af5e447a9a9f
array (
0 => __DIR__ . '/..' . '/symfony/property-access',
),
'Symfony\\Component\\PasswordHasher\\' =>
array (
0 => __DIR__ . '/..' . '/symfony/password-hasher',
),
'Symfony\\Component\\OptionsResolver\\' =>
array (
0 => __DIR__ . '/..' . '/symfony/options-resolver',
@@ -285,10 +289,6 @@ class ComposerStaticInit7f81b4a2a468a061c306af5e447a9a9f
array (
0 => __DIR__ . '/..' . '/symfony/framework-bundle',
),
'Symfony\\Bundle\\DebugBundle\\' =>
array (
0 => __DIR__ . '/..' . '/symfony/debug-bundle',
),
'Symfony\\Bridge\\Twig\\' =>
array (
0 => __DIR__ . '/..' . '/symfony/twig-bridge',
@@ -525,10 +525,10 @@ class ComposerStaticInit7f81b4a2a468a061c306af5e447a9a9f
'Combodo\\iTop\\Application\\Search\\CriterionParser' => __DIR__ . '/../..' . '/sources/Application/Search/criterionparser.class.inc.php',
'Combodo\\iTop\\Application\\Search\\SearchForm' => __DIR__ . '/../..' . '/sources/Application/Search/searchform.class.inc.php',
'Combodo\\iTop\\Application\\Status\\Status' => __DIR__ . '/../..' . '/sources/Application/Status/Status.php',
'Combodo\\iTop\\Application\\Symfony\\Poc\\BaseForm\\BaseFormController' => __DIR__ . '/../..' . '/sources/Application/Symfony/Poc/BaseForm/BaseFormController.php',
'Combodo\\iTop\\Application\\Symfony\\Poc\\BaseForm\\BaseFormType' => __DIR__ . '/../..' . '/sources/Application/Symfony/Poc/BaseForm/BaseFormType.php',
'Combodo\\iTop\\Application\\TwigBase\\Controller\\AbstractProfilerExtension' => __DIR__ . '/../..' . '/sources/Application/TwigBase/Controller/AbstractProfilerExtension.php',
'Combodo\\iTop\\Application\\TwigBase\\Controller\\Controller' => __DIR__ . '/../..' . '/sources/Application/TwigBase/Controller/Controller.php',
'Combodo\\iTop\\Application\\TwigBase\\Controller\\PageNotFoundException' => __DIR__ . '/../..' . '/application/exceptions/PageNotFoundException.php',
'Combodo\\iTop\\Application\\TwigBase\\Controller\\iProfilerExtension' => __DIR__ . '/../..' . '/sources/Application/TwigBase/Controller/iProfilerExtension.php',
'Combodo\\iTop\\Application\\TwigBase\\Twig\\Extension' => __DIR__ . '/../..' . '/sources/Application/TwigBase/Twig/Extension.php',
'Combodo\\iTop\\Application\\TwigBase\\Twig\\TwigHelper' => __DIR__ . '/../..' . '/sources/Application/TwigBase/Twig/TwigHelper.php',
'Combodo\\iTop\\Application\\TwigBase\\UI\\UIBlockExtension' => __DIR__ . '/../..' . '/sources/Application/TwigBase/UI/UIBlockExtension.php',
@@ -854,25 +854,17 @@ class ComposerStaticInit7f81b4a2a468a061c306af5e447a9a9f
'Combodo\\iTop\\Form\\Validator\\MultipleChoicesValidator' => __DIR__ . '/../..' . '/sources/Form/Validator/MultipleChoicesValidator.php',
'Combodo\\iTop\\Form\\Validator\\NotEmptyExtKeyValidator' => __DIR__ . '/../..' . '/sources/Form/Validator/NotEmptyExtKeyValidator.php',
'Combodo\\iTop\\Form\\Validator\\SelectObjectValidator' => __DIR__ . '/../..' . '/sources/Form/Validator/SelectObjectValidator.php',
'Combodo\\iTop\\Forms\\Dependency\\DependencyException' => __DIR__ . '/../..' . '/sources/Forms/Dependency/DependencyException.php',
'Combodo\\iTop\\Forms\\Dependency\\DependencyGraph' => __DIR__ . '/../..' . '/sources/Forms/Dependency/DependencyGraph.php',
'Combodo\\iTop\\Forms\\Dependency\\DependencyNode' => __DIR__ . '/../..' . '/sources/Forms/Dependency/DependencyNode.php',
'Combodo\\iTop\\Forms\\Dependency\\GraphTrait' => __DIR__ . '/../..' . '/sources/Forms/Dependency/GraphTrait.php',
'Combodo\\iTop\\Forms\\FormException' => __DIR__ . '/../..' . '/sources/Forms/FormException.php',
'Combodo\\iTop\\Forms\\FormType\\Base\\AbstractType' => __DIR__ . '/../..' . '/sources/Forms/FormType/Base/AbstractType.php',
'Combodo\\iTop\\Forms\\FormType\\Base\\FormBuilder' => __DIR__ . '/../..' . '/sources/Forms/FormType/Base/FormBuilder.php',
'Combodo\\iTop\\Forms\\FormType\\Base\\HiddenType' => __DIR__ . '/../..' . '/sources/Forms/FormType/Base/HiddenType.php',
'Combodo\\iTop\\Forms\\FormType\\Base\\TextType' => __DIR__ . '/../..' . '/sources/Forms/FormType/Base/TextType.php',
'Combodo\\iTop\\Forms\\FormType\\Base\\TextareaType' => __DIR__ . '/../..' . '/sources/Forms/FormType/Base/TextareaType.php',
'Combodo\\iTop\\Forms\\FormType\\FormTypeException' => __DIR__ . '/../..' . '/sources/Forms/FormType/FormTypeException.php',
'Combodo\\iTop\\Forms\\FormType\\Orm\\AttCodeGroupByType' => __DIR__ . '/../..' . '/sources/Forms/FormType/Orm/AttCodeGroupByType.php',
'Combodo\\iTop\\Forms\\FormType\\Orm\\Attribute\\ExternalKeyType' => __DIR__ . '/../..' . '/sources/Forms/FormType/Orm/Attribute/ExternalKeyType.php',
'Combodo\\iTop\\Forms\\FormType\\Orm\\QueryType' => __DIR__ . '/../..' . '/sources/Forms/FormType/Orm/QueryType.php',
'Combodo\\iTop\\Forms\\FormType\\Orm\\ValuesFromAttcodeType' => __DIR__ . '/../..' . '/sources/Forms/FormType/Orm/ValuesFromAttcodeType.php',
'Combodo\\iTop\\Forms\\Dependency\\DependencyDescription' => __DIR__ . '/../..' . '/sources/Forms/Dependency/DependencyDescription.php',
'Combodo\\iTop\\Forms\\Dependency\\DependencyHandler' => __DIR__ . '/../..' . '/sources/Forms/Dependency/DependencyHandler.php',
'Combodo\\iTop\\Forms\\FormBuilder\\FormBuilder' => __DIR__ . '/../..' . '/sources/Forms/FormBuilder/FormBuilder.php',
'Combodo\\iTop\\Forms\\FormBuilder\\FormTypeExtension' => __DIR__ . '/../..' . '/sources/Forms/FormBuilder/FormTypeExtension.php',
'Combodo\\iTop\\Forms\\FormBuilder\\ResolvedFormType' => __DIR__ . '/../..' . '/sources/Forms/FormBuilder/ResolvedFormType.php',
'Combodo\\iTop\\Forms\\FormBuilder\\ResolvedFormTypeFactory' => __DIR__ . '/../..' . '/sources/Forms/FormBuilder/ResolvedFormTypeFactory.php',
'Combodo\\iTop\\Forms\\FormType\\AttributeChoiceType' => __DIR__ . '/../..' . '/sources/Forms/FormType/AttributeChoiceType.php',
'Combodo\\iTop\\Forms\\FormType\\AttributeValueChoiceType' => __DIR__ . '/../..' . '/sources/Forms/FormType/AttributeValueChoiceType.php',
'Combodo\\iTop\\Forms\\FormType\\OqlType' => __DIR__ . '/../..' . '/sources/Forms/FormType/OqlType.php',
'Combodo\\iTop\\Forms\\Forms' => __DIR__ . '/../..' . '/sources/Forms/Forms.php',
'Combodo\\iTop\\Forms\\ResolvedFormType' => __DIR__ . '/../..' . '/sources/Forms/ResolvedFormType.php',
'Combodo\\iTop\\Forms\\ResolvedFormTypeFactory' => __DIR__ . '/../..' . '/sources/Forms/ResolvedFormTypeFactory.php',
'Combodo\\iTop\\Kernel' => __DIR__ . '/../..' . '/sources/Kernel.php',
'Combodo\\iTop\\Forms\\Twig\\Extension\\FormCompatibilityExtension' => __DIR__ . '/../..' . '/sources/Forms/Twig/Extension/FormCompatibilityExtension.php',
'Combodo\\iTop\\PhpParser\\Evaluation\\PhpExpressionEvaluator' => __DIR__ . '/../..' . '/sources/PhpParser/Evaluation/PhpExpressionEvaluator.php',
'Combodo\\iTop\\Renderer\\BlockRenderer' => __DIR__ . '/../..' . '/sources/Renderer/BlockRenderer.php',
'Combodo\\iTop\\Renderer\\Bootstrap\\BsFieldRendererMappings' => __DIR__ . '/../..' . '/sources/Renderer/Bootstrap/BsFieldRendererMappings.php',
@@ -1887,11 +1879,6 @@ class ComposerStaticInit7f81b4a2a468a061c306af5e447a9a9f
'Symfony\\Bridge\\Twig\\TokenParser\\TransTokenParser' => __DIR__ . '/..' . '/symfony/twig-bridge/TokenParser/TransTokenParser.php',
'Symfony\\Bridge\\Twig\\Translation\\TwigExtractor' => __DIR__ . '/..' . '/symfony/twig-bridge/Translation/TwigExtractor.php',
'Symfony\\Bridge\\Twig\\UndefinedCallableHandler' => __DIR__ . '/..' . '/symfony/twig-bridge/UndefinedCallableHandler.php',
'Symfony\\Bundle\\DebugBundle\\Command\\ServerDumpPlaceholderCommand' => __DIR__ . '/..' . '/symfony/debug-bundle/Command/ServerDumpPlaceholderCommand.php',
'Symfony\\Bundle\\DebugBundle\\DebugBundle' => __DIR__ . '/..' . '/symfony/debug-bundle/DebugBundle.php',
'Symfony\\Bundle\\DebugBundle\\DependencyInjection\\Compiler\\DumpDataCollectorPass' => __DIR__ . '/..' . '/symfony/debug-bundle/DependencyInjection/Compiler/DumpDataCollectorPass.php',
'Symfony\\Bundle\\DebugBundle\\DependencyInjection\\Configuration' => __DIR__ . '/..' . '/symfony/debug-bundle/DependencyInjection/Configuration.php',
'Symfony\\Bundle\\DebugBundle\\DependencyInjection\\DebugExtension' => __DIR__ . '/..' . '/symfony/debug-bundle/DependencyInjection/DebugExtension.php',
'Symfony\\Bundle\\FrameworkBundle\\CacheWarmer\\AbstractPhpFileCacheWarmer' => __DIR__ . '/..' . '/symfony/framework-bundle/CacheWarmer/AbstractPhpFileCacheWarmer.php',
'Symfony\\Bundle\\FrameworkBundle\\CacheWarmer\\AnnotationsCacheWarmer' => __DIR__ . '/..' . '/symfony/framework-bundle/CacheWarmer/AnnotationsCacheWarmer.php',
'Symfony\\Bundle\\FrameworkBundle\\CacheWarmer\\CachePoolClearerCacheWarmer' => __DIR__ . '/..' . '/symfony/framework-bundle/CacheWarmer/CachePoolClearerCacheWarmer.php',
@@ -2818,13 +2805,6 @@ class ComposerStaticInit7f81b4a2a468a061c306af5e447a9a9f
'Symfony\\Component\\Form\\SubmitButton' => __DIR__ . '/..' . '/symfony/form/SubmitButton.php',
'Symfony\\Component\\Form\\SubmitButtonBuilder' => __DIR__ . '/..' . '/symfony/form/SubmitButtonBuilder.php',
'Symfony\\Component\\Form\\SubmitButtonTypeInterface' => __DIR__ . '/..' . '/symfony/form/SubmitButtonTypeInterface.php',
'Symfony\\Component\\Form\\Test\\FormBuilderInterface' => __DIR__ . '/..' . '/symfony/form/Test/FormBuilderInterface.php',
'Symfony\\Component\\Form\\Test\\FormIntegrationTestCase' => __DIR__ . '/..' . '/symfony/form/Test/FormIntegrationTestCase.php',
'Symfony\\Component\\Form\\Test\\FormInterface' => __DIR__ . '/..' . '/symfony/form/Test/FormInterface.php',
'Symfony\\Component\\Form\\Test\\FormPerformanceTestCase' => __DIR__ . '/..' . '/symfony/form/Test/FormPerformanceTestCase.php',
'Symfony\\Component\\Form\\Test\\Traits\\RunTestTrait' => __DIR__ . '/..' . '/symfony/form/Test/Traits/RunTestTrait.php',
'Symfony\\Component\\Form\\Test\\Traits\\ValidatorExtensionTrait' => __DIR__ . '/..' . '/symfony/form/Test/Traits/ValidatorExtensionTrait.php',
'Symfony\\Component\\Form\\Test\\TypeTestCase' => __DIR__ . '/..' . '/symfony/form/Test/TypeTestCase.php',
'Symfony\\Component\\Form\\Util\\FormUtil' => __DIR__ . '/..' . '/symfony/form/Util/FormUtil.php',
'Symfony\\Component\\Form\\Util\\InheritDataAwareIterator' => __DIR__ . '/..' . '/symfony/form/Util/InheritDataAwareIterator.php',
'Symfony\\Component\\Form\\Util\\OptionsResolverWrapper' => __DIR__ . '/..' . '/symfony/form/Util/OptionsResolverWrapper.php',
@@ -3225,6 +3205,24 @@ class ComposerStaticInit7f81b4a2a468a061c306af5e447a9a9f
'Symfony\\Component\\OptionsResolver\\OptionConfigurator' => __DIR__ . '/..' . '/symfony/options-resolver/OptionConfigurator.php',
'Symfony\\Component\\OptionsResolver\\Options' => __DIR__ . '/..' . '/symfony/options-resolver/Options.php',
'Symfony\\Component\\OptionsResolver\\OptionsResolver' => __DIR__ . '/..' . '/symfony/options-resolver/OptionsResolver.php',
'Symfony\\Component\\PasswordHasher\\Command\\UserPasswordHashCommand' => __DIR__ . '/..' . '/symfony/password-hasher/Command/UserPasswordHashCommand.php',
'Symfony\\Component\\PasswordHasher\\Exception\\ExceptionInterface' => __DIR__ . '/..' . '/symfony/password-hasher/Exception/ExceptionInterface.php',
'Symfony\\Component\\PasswordHasher\\Exception\\InvalidPasswordException' => __DIR__ . '/..' . '/symfony/password-hasher/Exception/InvalidPasswordException.php',
'Symfony\\Component\\PasswordHasher\\Exception\\LogicException' => __DIR__ . '/..' . '/symfony/password-hasher/Exception/LogicException.php',
'Symfony\\Component\\PasswordHasher\\Hasher\\CheckPasswordLengthTrait' => __DIR__ . '/..' . '/symfony/password-hasher/Hasher/CheckPasswordLengthTrait.php',
'Symfony\\Component\\PasswordHasher\\Hasher\\MessageDigestPasswordHasher' => __DIR__ . '/..' . '/symfony/password-hasher/Hasher/MessageDigestPasswordHasher.php',
'Symfony\\Component\\PasswordHasher\\Hasher\\MigratingPasswordHasher' => __DIR__ . '/..' . '/symfony/password-hasher/Hasher/MigratingPasswordHasher.php',
'Symfony\\Component\\PasswordHasher\\Hasher\\NativePasswordHasher' => __DIR__ . '/..' . '/symfony/password-hasher/Hasher/NativePasswordHasher.php',
'Symfony\\Component\\PasswordHasher\\Hasher\\PasswordHasherAwareInterface' => __DIR__ . '/..' . '/symfony/password-hasher/Hasher/PasswordHasherAwareInterface.php',
'Symfony\\Component\\PasswordHasher\\Hasher\\PasswordHasherFactory' => __DIR__ . '/..' . '/symfony/password-hasher/Hasher/PasswordHasherFactory.php',
'Symfony\\Component\\PasswordHasher\\Hasher\\PasswordHasherFactoryInterface' => __DIR__ . '/..' . '/symfony/password-hasher/Hasher/PasswordHasherFactoryInterface.php',
'Symfony\\Component\\PasswordHasher\\Hasher\\Pbkdf2PasswordHasher' => __DIR__ . '/..' . '/symfony/password-hasher/Hasher/Pbkdf2PasswordHasher.php',
'Symfony\\Component\\PasswordHasher\\Hasher\\PlaintextPasswordHasher' => __DIR__ . '/..' . '/symfony/password-hasher/Hasher/PlaintextPasswordHasher.php',
'Symfony\\Component\\PasswordHasher\\Hasher\\SodiumPasswordHasher' => __DIR__ . '/..' . '/symfony/password-hasher/Hasher/SodiumPasswordHasher.php',
'Symfony\\Component\\PasswordHasher\\Hasher\\UserPasswordHasher' => __DIR__ . '/..' . '/symfony/password-hasher/Hasher/UserPasswordHasher.php',
'Symfony\\Component\\PasswordHasher\\Hasher\\UserPasswordHasherInterface' => __DIR__ . '/..' . '/symfony/password-hasher/Hasher/UserPasswordHasherInterface.php',
'Symfony\\Component\\PasswordHasher\\LegacyPasswordHasherInterface' => __DIR__ . '/..' . '/symfony/password-hasher/LegacyPasswordHasherInterface.php',
'Symfony\\Component\\PasswordHasher\\PasswordHasherInterface' => __DIR__ . '/..' . '/symfony/password-hasher/PasswordHasherInterface.php',
'Symfony\\Component\\PropertyAccess\\Exception\\AccessException' => __DIR__ . '/..' . '/symfony/property-access/Exception/AccessException.php',
'Symfony\\Component\\PropertyAccess\\Exception\\ExceptionInterface' => __DIR__ . '/..' . '/symfony/property-access/Exception/ExceptionInterface.php',
'Symfony\\Component\\PropertyAccess\\Exception\\InvalidArgumentException' => __DIR__ . '/..' . '/symfony/property-access/Exception/InvalidArgumentException.php',
@@ -3340,21 +3338,112 @@ class ComposerStaticInit7f81b4a2a468a061c306af5e447a9a9f
'Symfony\\Component\\Routing\\RouteCompilerInterface' => __DIR__ . '/..' . '/symfony/routing/RouteCompilerInterface.php',
'Symfony\\Component\\Routing\\Router' => __DIR__ . '/..' . '/symfony/routing/Router.php',
'Symfony\\Component\\Routing\\RouterInterface' => __DIR__ . '/..' . '/symfony/routing/RouterInterface.php',
'Symfony\\Component\\Runtime\\GenericRuntime' => __DIR__ . '/..' . '/symfony/runtime/GenericRuntime.php',
'Symfony\\Component\\Runtime\\Internal\\BasicErrorHandler' => __DIR__ . '/..' . '/symfony/runtime/Internal/BasicErrorHandler.php',
'Symfony\\Component\\Runtime\\Internal\\ComposerPlugin' => __DIR__ . '/..' . '/symfony/runtime/Internal/ComposerPlugin.php',
'Symfony\\Component\\Runtime\\Internal\\MissingDotenv' => __DIR__ . '/..' . '/symfony/runtime/Internal/MissingDotenv.php',
'Symfony\\Component\\Runtime\\Internal\\SymfonyErrorHandler' => __DIR__ . '/..' . '/symfony/runtime/Internal/SymfonyErrorHandler.php',
'Symfony\\Component\\Runtime\\ResolverInterface' => __DIR__ . '/..' . '/symfony/runtime/ResolverInterface.php',
'Symfony\\Component\\Runtime\\Resolver\\ClosureResolver' => __DIR__ . '/..' . '/symfony/runtime/Resolver/ClosureResolver.php',
'Symfony\\Component\\Runtime\\Resolver\\DebugClosureResolver' => __DIR__ . '/..' . '/symfony/runtime/Resolver/DebugClosureResolver.php',
'Symfony\\Component\\Runtime\\RunnerInterface' => __DIR__ . '/..' . '/symfony/runtime/RunnerInterface.php',
'Symfony\\Component\\Runtime\\Runner\\ClosureRunner' => __DIR__ . '/..' . '/symfony/runtime/Runner/ClosureRunner.php',
'Symfony\\Component\\Runtime\\Runner\\Symfony\\ConsoleApplicationRunner' => __DIR__ . '/..' . '/symfony/runtime/Runner/Symfony/ConsoleApplicationRunner.php',
'Symfony\\Component\\Runtime\\Runner\\Symfony\\HttpKernelRunner' => __DIR__ . '/..' . '/symfony/runtime/Runner/Symfony/HttpKernelRunner.php',
'Symfony\\Component\\Runtime\\Runner\\Symfony\\ResponseRunner' => __DIR__ . '/..' . '/symfony/runtime/Runner/Symfony/ResponseRunner.php',
'Symfony\\Component\\Runtime\\RuntimeInterface' => __DIR__ . '/..' . '/symfony/runtime/RuntimeInterface.php',
'Symfony\\Component\\Runtime\\SymfonyRuntime' => __DIR__ . '/..' . '/symfony/runtime/SymfonyRuntime.php',
'Symfony\\Component\\Security\\Core\\AuthenticationEvents' => __DIR__ . '/..' . '/symfony/security-core/AuthenticationEvents.php',
'Symfony\\Component\\Security\\Core\\Authentication\\AuthenticationTrustResolver' => __DIR__ . '/..' . '/symfony/security-core/Authentication/AuthenticationTrustResolver.php',
'Symfony\\Component\\Security\\Core\\Authentication\\AuthenticationTrustResolverInterface' => __DIR__ . '/..' . '/symfony/security-core/Authentication/AuthenticationTrustResolverInterface.php',
'Symfony\\Component\\Security\\Core\\Authentication\\RememberMe\\CacheTokenVerifier' => __DIR__ . '/..' . '/symfony/security-core/Authentication/RememberMe/CacheTokenVerifier.php',
'Symfony\\Component\\Security\\Core\\Authentication\\RememberMe\\InMemoryTokenProvider' => __DIR__ . '/..' . '/symfony/security-core/Authentication/RememberMe/InMemoryTokenProvider.php',
'Symfony\\Component\\Security\\Core\\Authentication\\RememberMe\\PersistentToken' => __DIR__ . '/..' . '/symfony/security-core/Authentication/RememberMe/PersistentToken.php',
'Symfony\\Component\\Security\\Core\\Authentication\\RememberMe\\PersistentTokenInterface' => __DIR__ . '/..' . '/symfony/security-core/Authentication/RememberMe/PersistentTokenInterface.php',
'Symfony\\Component\\Security\\Core\\Authentication\\RememberMe\\TokenProviderInterface' => __DIR__ . '/..' . '/symfony/security-core/Authentication/RememberMe/TokenProviderInterface.php',
'Symfony\\Component\\Security\\Core\\Authentication\\RememberMe\\TokenVerifierInterface' => __DIR__ . '/..' . '/symfony/security-core/Authentication/RememberMe/TokenVerifierInterface.php',
'Symfony\\Component\\Security\\Core\\Authentication\\Token\\AbstractToken' => __DIR__ . '/..' . '/symfony/security-core/Authentication/Token/AbstractToken.php',
'Symfony\\Component\\Security\\Core\\Authentication\\Token\\NullToken' => __DIR__ . '/..' . '/symfony/security-core/Authentication/Token/NullToken.php',
'Symfony\\Component\\Security\\Core\\Authentication\\Token\\PreAuthenticatedToken' => __DIR__ . '/..' . '/symfony/security-core/Authentication/Token/PreAuthenticatedToken.php',
'Symfony\\Component\\Security\\Core\\Authentication\\Token\\RememberMeToken' => __DIR__ . '/..' . '/symfony/security-core/Authentication/Token/RememberMeToken.php',
'Symfony\\Component\\Security\\Core\\Authentication\\Token\\Storage\\TokenStorage' => __DIR__ . '/..' . '/symfony/security-core/Authentication/Token/Storage/TokenStorage.php',
'Symfony\\Component\\Security\\Core\\Authentication\\Token\\Storage\\TokenStorageInterface' => __DIR__ . '/..' . '/symfony/security-core/Authentication/Token/Storage/TokenStorageInterface.php',
'Symfony\\Component\\Security\\Core\\Authentication\\Token\\Storage\\UsageTrackingTokenStorage' => __DIR__ . '/..' . '/symfony/security-core/Authentication/Token/Storage/UsageTrackingTokenStorage.php',
'Symfony\\Component\\Security\\Core\\Authentication\\Token\\SwitchUserToken' => __DIR__ . '/..' . '/symfony/security-core/Authentication/Token/SwitchUserToken.php',
'Symfony\\Component\\Security\\Core\\Authentication\\Token\\TokenInterface' => __DIR__ . '/..' . '/symfony/security-core/Authentication/Token/TokenInterface.php',
'Symfony\\Component\\Security\\Core\\Authentication\\Token\\UsernamePasswordToken' => __DIR__ . '/..' . '/symfony/security-core/Authentication/Token/UsernamePasswordToken.php',
'Symfony\\Component\\Security\\Core\\Authorization\\AccessDecisionManager' => __DIR__ . '/..' . '/symfony/security-core/Authorization/AccessDecisionManager.php',
'Symfony\\Component\\Security\\Core\\Authorization\\AccessDecisionManagerInterface' => __DIR__ . '/..' . '/symfony/security-core/Authorization/AccessDecisionManagerInterface.php',
'Symfony\\Component\\Security\\Core\\Authorization\\AuthorizationChecker' => __DIR__ . '/..' . '/symfony/security-core/Authorization/AuthorizationChecker.php',
'Symfony\\Component\\Security\\Core\\Authorization\\AuthorizationCheckerInterface' => __DIR__ . '/..' . '/symfony/security-core/Authorization/AuthorizationCheckerInterface.php',
'Symfony\\Component\\Security\\Core\\Authorization\\ExpressionLanguage' => __DIR__ . '/..' . '/symfony/security-core/Authorization/ExpressionLanguage.php',
'Symfony\\Component\\Security\\Core\\Authorization\\ExpressionLanguageProvider' => __DIR__ . '/..' . '/symfony/security-core/Authorization/ExpressionLanguageProvider.php',
'Symfony\\Component\\Security\\Core\\Authorization\\Strategy\\AccessDecisionStrategyInterface' => __DIR__ . '/..' . '/symfony/security-core/Authorization/Strategy/AccessDecisionStrategyInterface.php',
'Symfony\\Component\\Security\\Core\\Authorization\\Strategy\\AffirmativeStrategy' => __DIR__ . '/..' . '/symfony/security-core/Authorization/Strategy/AffirmativeStrategy.php',
'Symfony\\Component\\Security\\Core\\Authorization\\Strategy\\ConsensusStrategy' => __DIR__ . '/..' . '/symfony/security-core/Authorization/Strategy/ConsensusStrategy.php',
'Symfony\\Component\\Security\\Core\\Authorization\\Strategy\\PriorityStrategy' => __DIR__ . '/..' . '/symfony/security-core/Authorization/Strategy/PriorityStrategy.php',
'Symfony\\Component\\Security\\Core\\Authorization\\Strategy\\UnanimousStrategy' => __DIR__ . '/..' . '/symfony/security-core/Authorization/Strategy/UnanimousStrategy.php',
'Symfony\\Component\\Security\\Core\\Authorization\\TraceableAccessDecisionManager' => __DIR__ . '/..' . '/symfony/security-core/Authorization/TraceableAccessDecisionManager.php',
'Symfony\\Component\\Security\\Core\\Authorization\\Voter\\AuthenticatedVoter' => __DIR__ . '/..' . '/symfony/security-core/Authorization/Voter/AuthenticatedVoter.php',
'Symfony\\Component\\Security\\Core\\Authorization\\Voter\\CacheableVoterInterface' => __DIR__ . '/..' . '/symfony/security-core/Authorization/Voter/CacheableVoterInterface.php',
'Symfony\\Component\\Security\\Core\\Authorization\\Voter\\ExpressionVoter' => __DIR__ . '/..' . '/symfony/security-core/Authorization/Voter/ExpressionVoter.php',
'Symfony\\Component\\Security\\Core\\Authorization\\Voter\\RoleHierarchyVoter' => __DIR__ . '/..' . '/symfony/security-core/Authorization/Voter/RoleHierarchyVoter.php',
'Symfony\\Component\\Security\\Core\\Authorization\\Voter\\RoleVoter' => __DIR__ . '/..' . '/symfony/security-core/Authorization/Voter/RoleVoter.php',
'Symfony\\Component\\Security\\Core\\Authorization\\Voter\\TraceableVoter' => __DIR__ . '/..' . '/symfony/security-core/Authorization/Voter/TraceableVoter.php',
'Symfony\\Component\\Security\\Core\\Authorization\\Voter\\Voter' => __DIR__ . '/..' . '/symfony/security-core/Authorization/Voter/Voter.php',
'Symfony\\Component\\Security\\Core\\Authorization\\Voter\\VoterInterface' => __DIR__ . '/..' . '/symfony/security-core/Authorization/Voter/VoterInterface.php',
'Symfony\\Component\\Security\\Core\\Event\\AuthenticationEvent' => __DIR__ . '/..' . '/symfony/security-core/Event/AuthenticationEvent.php',
'Symfony\\Component\\Security\\Core\\Event\\AuthenticationSuccessEvent' => __DIR__ . '/..' . '/symfony/security-core/Event/AuthenticationSuccessEvent.php',
'Symfony\\Component\\Security\\Core\\Event\\VoteEvent' => __DIR__ . '/..' . '/symfony/security-core/Event/VoteEvent.php',
'Symfony\\Component\\Security\\Core\\Exception\\AccessDeniedException' => __DIR__ . '/..' . '/symfony/security-core/Exception/AccessDeniedException.php',
'Symfony\\Component\\Security\\Core\\Exception\\AccountExpiredException' => __DIR__ . '/..' . '/symfony/security-core/Exception/AccountExpiredException.php',
'Symfony\\Component\\Security\\Core\\Exception\\AccountStatusException' => __DIR__ . '/..' . '/symfony/security-core/Exception/AccountStatusException.php',
'Symfony\\Component\\Security\\Core\\Exception\\AuthenticationCredentialsNotFoundException' => __DIR__ . '/..' . '/symfony/security-core/Exception/AuthenticationCredentialsNotFoundException.php',
'Symfony\\Component\\Security\\Core\\Exception\\AuthenticationException' => __DIR__ . '/..' . '/symfony/security-core/Exception/AuthenticationException.php',
'Symfony\\Component\\Security\\Core\\Exception\\AuthenticationExpiredException' => __DIR__ . '/..' . '/symfony/security-core/Exception/AuthenticationExpiredException.php',
'Symfony\\Component\\Security\\Core\\Exception\\AuthenticationServiceException' => __DIR__ . '/..' . '/symfony/security-core/Exception/AuthenticationServiceException.php',
'Symfony\\Component\\Security\\Core\\Exception\\BadCredentialsException' => __DIR__ . '/..' . '/symfony/security-core/Exception/BadCredentialsException.php',
'Symfony\\Component\\Security\\Core\\Exception\\CookieTheftException' => __DIR__ . '/..' . '/symfony/security-core/Exception/CookieTheftException.php',
'Symfony\\Component\\Security\\Core\\Exception\\CredentialsExpiredException' => __DIR__ . '/..' . '/symfony/security-core/Exception/CredentialsExpiredException.php',
'Symfony\\Component\\Security\\Core\\Exception\\CustomUserMessageAccountStatusException' => __DIR__ . '/..' . '/symfony/security-core/Exception/CustomUserMessageAccountStatusException.php',
'Symfony\\Component\\Security\\Core\\Exception\\CustomUserMessageAuthenticationException' => __DIR__ . '/..' . '/symfony/security-core/Exception/CustomUserMessageAuthenticationException.php',
'Symfony\\Component\\Security\\Core\\Exception\\DisabledException' => __DIR__ . '/..' . '/symfony/security-core/Exception/DisabledException.php',
'Symfony\\Component\\Security\\Core\\Exception\\ExceptionInterface' => __DIR__ . '/..' . '/symfony/security-core/Exception/ExceptionInterface.php',
'Symfony\\Component\\Security\\Core\\Exception\\InsufficientAuthenticationException' => __DIR__ . '/..' . '/symfony/security-core/Exception/InsufficientAuthenticationException.php',
'Symfony\\Component\\Security\\Core\\Exception\\InvalidArgumentException' => __DIR__ . '/..' . '/symfony/security-core/Exception/InvalidArgumentException.php',
'Symfony\\Component\\Security\\Core\\Exception\\InvalidCsrfTokenException' => __DIR__ . '/..' . '/symfony/security-core/Exception/InvalidCsrfTokenException.php',
'Symfony\\Component\\Security\\Core\\Exception\\LazyResponseException' => __DIR__ . '/..' . '/symfony/security-core/Exception/LazyResponseException.php',
'Symfony\\Component\\Security\\Core\\Exception\\LockedException' => __DIR__ . '/..' . '/symfony/security-core/Exception/LockedException.php',
'Symfony\\Component\\Security\\Core\\Exception\\LogicException' => __DIR__ . '/..' . '/symfony/security-core/Exception/LogicException.php',
'Symfony\\Component\\Security\\Core\\Exception\\LogoutException' => __DIR__ . '/..' . '/symfony/security-core/Exception/LogoutException.php',
'Symfony\\Component\\Security\\Core\\Exception\\ProviderNotFoundException' => __DIR__ . '/..' . '/symfony/security-core/Exception/ProviderNotFoundException.php',
'Symfony\\Component\\Security\\Core\\Exception\\RuntimeException' => __DIR__ . '/..' . '/symfony/security-core/Exception/RuntimeException.php',
'Symfony\\Component\\Security\\Core\\Exception\\SessionUnavailableException' => __DIR__ . '/..' . '/symfony/security-core/Exception/SessionUnavailableException.php',
'Symfony\\Component\\Security\\Core\\Exception\\TokenNotFoundException' => __DIR__ . '/..' . '/symfony/security-core/Exception/TokenNotFoundException.php',
'Symfony\\Component\\Security\\Core\\Exception\\TooManyLoginAttemptsAuthenticationException' => __DIR__ . '/..' . '/symfony/security-core/Exception/TooManyLoginAttemptsAuthenticationException.php',
'Symfony\\Component\\Security\\Core\\Exception\\UnsupportedUserException' => __DIR__ . '/..' . '/symfony/security-core/Exception/UnsupportedUserException.php',
'Symfony\\Component\\Security\\Core\\Exception\\UserNotFoundException' => __DIR__ . '/..' . '/symfony/security-core/Exception/UserNotFoundException.php',
'Symfony\\Component\\Security\\Core\\Role\\Role' => __DIR__ . '/..' . '/symfony/security-core/Role/Role.php',
'Symfony\\Component\\Security\\Core\\Role\\RoleHierarchy' => __DIR__ . '/..' . '/symfony/security-core/Role/RoleHierarchy.php',
'Symfony\\Component\\Security\\Core\\Role\\RoleHierarchyInterface' => __DIR__ . '/..' . '/symfony/security-core/Role/RoleHierarchyInterface.php',
'Symfony\\Component\\Security\\Core\\Role\\SwitchUserRole' => __DIR__ . '/..' . '/symfony/security-core/Role/SwitchUserRole.php',
'Symfony\\Component\\Security\\Core\\Security' => __DIR__ . '/..' . '/symfony/security-core/Security.php',
'Symfony\\Component\\Security\\Core\\Signature\\Exception\\ExpiredSignatureException' => __DIR__ . '/..' . '/symfony/security-core/Signature/Exception/ExpiredSignatureException.php',
'Symfony\\Component\\Security\\Core\\Signature\\Exception\\InvalidSignatureException' => __DIR__ . '/..' . '/symfony/security-core/Signature/Exception/InvalidSignatureException.php',
'Symfony\\Component\\Security\\Core\\Signature\\ExpiredSignatureStorage' => __DIR__ . '/..' . '/symfony/security-core/Signature/ExpiredSignatureStorage.php',
'Symfony\\Component\\Security\\Core\\Signature\\SignatureHasher' => __DIR__ . '/..' . '/symfony/security-core/Signature/SignatureHasher.php',
'Symfony\\Component\\Security\\Core\\User\\AttributesBasedUserProviderInterface' => __DIR__ . '/..' . '/symfony/security-core/User/AttributesBasedUserProviderInterface.php',
'Symfony\\Component\\Security\\Core\\User\\ChainUserChecker' => __DIR__ . '/..' . '/symfony/security-core/User/ChainUserChecker.php',
'Symfony\\Component\\Security\\Core\\User\\ChainUserProvider' => __DIR__ . '/..' . '/symfony/security-core/User/ChainUserProvider.php',
'Symfony\\Component\\Security\\Core\\User\\EquatableInterface' => __DIR__ . '/..' . '/symfony/security-core/User/EquatableInterface.php',
'Symfony\\Component\\Security\\Core\\User\\InMemoryUser' => __DIR__ . '/..' . '/symfony/security-core/User/InMemoryUser.php',
'Symfony\\Component\\Security\\Core\\User\\InMemoryUserChecker' => __DIR__ . '/..' . '/symfony/security-core/User/InMemoryUserChecker.php',
'Symfony\\Component\\Security\\Core\\User\\InMemoryUserProvider' => __DIR__ . '/..' . '/symfony/security-core/User/InMemoryUserProvider.php',
'Symfony\\Component\\Security\\Core\\User\\LegacyPasswordAuthenticatedUserInterface' => __DIR__ . '/..' . '/symfony/security-core/User/LegacyPasswordAuthenticatedUserInterface.php',
'Symfony\\Component\\Security\\Core\\User\\MissingUserProvider' => __DIR__ . '/..' . '/symfony/security-core/User/MissingUserProvider.php',
'Symfony\\Component\\Security\\Core\\User\\OidcUser' => __DIR__ . '/..' . '/symfony/security-core/User/OidcUser.php',
'Symfony\\Component\\Security\\Core\\User\\PasswordAuthenticatedUserInterface' => __DIR__ . '/..' . '/symfony/security-core/User/PasswordAuthenticatedUserInterface.php',
'Symfony\\Component\\Security\\Core\\User\\PasswordUpgraderInterface' => __DIR__ . '/..' . '/symfony/security-core/User/PasswordUpgraderInterface.php',
'Symfony\\Component\\Security\\Core\\User\\UserCheckerInterface' => __DIR__ . '/..' . '/symfony/security-core/User/UserCheckerInterface.php',
'Symfony\\Component\\Security\\Core\\User\\UserInterface' => __DIR__ . '/..' . '/symfony/security-core/User/UserInterface.php',
'Symfony\\Component\\Security\\Core\\User\\UserProviderInterface' => __DIR__ . '/..' . '/symfony/security-core/User/UserProviderInterface.php',
'Symfony\\Component\\Security\\Core\\Validator\\Constraints\\UserPassword' => __DIR__ . '/..' . '/symfony/security-core/Validator/Constraints/UserPassword.php',
'Symfony\\Component\\Security\\Core\\Validator\\Constraints\\UserPasswordValidator' => __DIR__ . '/..' . '/symfony/security-core/Validator/Constraints/UserPasswordValidator.php',
'Symfony\\Component\\Security\\Csrf\\CsrfToken' => __DIR__ . '/..' . '/symfony/security-csrf/CsrfToken.php',
'Symfony\\Component\\Security\\Csrf\\CsrfTokenManager' => __DIR__ . '/..' . '/symfony/security-csrf/CsrfTokenManager.php',
'Symfony\\Component\\Security\\Csrf\\CsrfTokenManagerInterface' => __DIR__ . '/..' . '/symfony/security-csrf/CsrfTokenManagerInterface.php',
'Symfony\\Component\\Security\\Csrf\\Exception\\TokenNotFoundException' => __DIR__ . '/..' . '/symfony/security-csrf/Exception/TokenNotFoundException.php',
'Symfony\\Component\\Security\\Csrf\\TokenGenerator\\TokenGeneratorInterface' => __DIR__ . '/..' . '/symfony/security-csrf/TokenGenerator/TokenGeneratorInterface.php',
'Symfony\\Component\\Security\\Csrf\\TokenGenerator\\UriSafeTokenGenerator' => __DIR__ . '/..' . '/symfony/security-csrf/TokenGenerator/UriSafeTokenGenerator.php',
'Symfony\\Component\\Security\\Csrf\\TokenStorage\\ClearableTokenStorageInterface' => __DIR__ . '/..' . '/symfony/security-csrf/TokenStorage/ClearableTokenStorageInterface.php',
'Symfony\\Component\\Security\\Csrf\\TokenStorage\\NativeSessionTokenStorage' => __DIR__ . '/..' . '/symfony/security-csrf/TokenStorage/NativeSessionTokenStorage.php',
'Symfony\\Component\\Security\\Csrf\\TokenStorage\\SessionTokenStorage' => __DIR__ . '/..' . '/symfony/security-csrf/TokenStorage/SessionTokenStorage.php',
'Symfony\\Component\\Security\\Csrf\\TokenStorage\\TokenStorageInterface' => __DIR__ . '/..' . '/symfony/security-csrf/TokenStorage/TokenStorageInterface.php',
'Symfony\\Component\\Stopwatch\\Section' => __DIR__ . '/..' . '/symfony/stopwatch/Section.php',
'Symfony\\Component\\Stopwatch\\Stopwatch' => __DIR__ . '/..' . '/symfony/stopwatch/Stopwatch.php',
'Symfony\\Component\\Stopwatch\\StopwatchEvent' => __DIR__ . '/..' . '/symfony/stopwatch/StopwatchEvent.php',
@@ -3418,7 +3507,6 @@ class ComposerStaticInit7f81b4a2a468a061c306af5e447a9a9f
'Symfony\\Component\\VarDumper\\Cloner\\Cursor' => __DIR__ . '/..' . '/symfony/var-dumper/Cloner/Cursor.php',
'Symfony\\Component\\VarDumper\\Cloner\\Data' => __DIR__ . '/..' . '/symfony/var-dumper/Cloner/Data.php',
'Symfony\\Component\\VarDumper\\Cloner\\DumperInterface' => __DIR__ . '/..' . '/symfony/var-dumper/Cloner/DumperInterface.php',
'Symfony\\Component\\VarDumper\\Cloner\\Internal\\NoDefault' => __DIR__ . '/..' . '/symfony/var-dumper/Cloner/Internal/NoDefault.php',
'Symfony\\Component\\VarDumper\\Cloner\\Stub' => __DIR__ . '/..' . '/symfony/var-dumper/Cloner/Stub.php',
'Symfony\\Component\\VarDumper\\Cloner\\VarCloner' => __DIR__ . '/..' . '/symfony/var-dumper/Cloner/VarCloner.php',
'Symfony\\Component\\VarDumper\\Command\\Descriptor\\CliDescriptor' => __DIR__ . '/..' . '/symfony/var-dumper/Command/Descriptor/CliDescriptor.php',
@@ -3529,13 +3617,6 @@ class ComposerStaticInit7f81b4a2a468a061c306af5e447a9a9f
'Symfony\\Polyfill\\Intl\\Normalizer\\Normalizer' => __DIR__ . '/..' . '/symfony/polyfill-intl-normalizer/Normalizer.php',
'Symfony\\Polyfill\\Mbstring\\Mbstring' => __DIR__ . '/..' . '/symfony/polyfill-mbstring/Mbstring.php',
'Symfony\\Polyfill\\Php83\\Php83' => __DIR__ . '/..' . '/symfony/polyfill-php83/Php83.php',
'Symfony\\Runtime\\Symfony\\Component\\Console\\ApplicationRuntime' => __DIR__ . '/..' . '/symfony/runtime/Internal/Console/ApplicationRuntime.php',
'Symfony\\Runtime\\Symfony\\Component\\Console\\Command\\CommandRuntime' => __DIR__ . '/..' . '/symfony/runtime/Internal/Console/Command/CommandRuntime.php',
'Symfony\\Runtime\\Symfony\\Component\\Console\\Input\\InputInterfaceRuntime' => __DIR__ . '/..' . '/symfony/runtime/Internal/Console/Input/InputInterfaceRuntime.php',
'Symfony\\Runtime\\Symfony\\Component\\Console\\Output\\OutputInterfaceRuntime' => __DIR__ . '/..' . '/symfony/runtime/Internal/Console/Output/OutputInterfaceRuntime.php',
'Symfony\\Runtime\\Symfony\\Component\\HttpFoundation\\RequestRuntime' => __DIR__ . '/..' . '/symfony/runtime/Internal/HttpFoundation/RequestRuntime.php',
'Symfony\\Runtime\\Symfony\\Component\\HttpFoundation\\ResponseRuntime' => __DIR__ . '/..' . '/symfony/runtime/Internal/HttpFoundation/ResponseRuntime.php',
'Symfony\\Runtime\\Symfony\\Component\\HttpKernel\\HttpKernelInterfaceRuntime' => __DIR__ . '/..' . '/symfony/runtime/Internal/HttpKernel/HttpKernelInterfaceRuntime.php',
'SynchroExceptionNotStarted' => __DIR__ . '/../..' . '/application/exceptions/SynchroExceptionNotStarted.php',
'System' => __DIR__ . '/..' . '/pear/pear-core-minimal/src/System.php',
'TCPDF' => __DIR__ . '/..' . '/tecnickcom/tcpdf/tcpdf.php',

View File

@@ -2228,83 +2228,6 @@
],
"install-path": "../symfony/css-selector"
},
{
"name": "symfony/debug-bundle",
"version": "v6.4.13",
"version_normalized": "6.4.13.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/debug-bundle.git",
"reference": "7bcfaff39e094cc09455201916d016d9b2ae08ff"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/debug-bundle/zipball/7bcfaff39e094cc09455201916d016d9b2ae08ff",
"reference": "7bcfaff39e094cc09455201916d016d9b2ae08ff",
"shasum": ""
},
"require": {
"ext-xml": "*",
"php": ">=8.1",
"symfony/dependency-injection": "^5.4|^6.0|^7.0",
"symfony/http-kernel": "^5.4|^6.0|^7.0",
"symfony/twig-bridge": "^5.4|^6.0|^7.0",
"symfony/var-dumper": "^5.4|^6.0|^7.0"
},
"conflict": {
"symfony/config": "<5.4",
"symfony/dependency-injection": "<5.4"
},
"require-dev": {
"symfony/config": "^5.4|^6.0|^7.0",
"symfony/web-profiler-bundle": "^5.4|^6.0|^7.0"
},
"time": "2024-09-25T14:18:03+00:00",
"type": "symfony-bundle",
"installation-source": "dist",
"autoload": {
"psr-4": {
"Symfony\\Bundle\\DebugBundle\\": ""
},
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Provides a tight integration of the Symfony VarDumper component and the ServerLogCommand from MonologBridge into the Symfony full-stack framework",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/debug-bundle/tree/v6.4.13"
},
"funding": [
{
"url": "https://symfony.com/sponsor",
"type": "custom"
},
{
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"install-path": "../symfony/debug-bundle"
},
{
"name": "symfony/dependency-injection",
"version": "v6.4.25",
@@ -3654,6 +3577,85 @@
],
"install-path": "../symfony/options-resolver"
},
{
"name": "symfony/password-hasher",
"version": "v6.4.24",
"version_normalized": "6.4.24.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/password-hasher.git",
"reference": "dcab5ac87450aaed26483ba49c2ce86808da7557"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/password-hasher/zipball/dcab5ac87450aaed26483ba49c2ce86808da7557",
"reference": "dcab5ac87450aaed26483ba49c2ce86808da7557",
"shasum": ""
},
"require": {
"php": ">=8.1"
},
"conflict": {
"symfony/security-core": "<5.4"
},
"require-dev": {
"symfony/console": "^5.4|^6.0|^7.0",
"symfony/security-core": "^5.4|^6.0|^7.0"
},
"time": "2025-07-10T08:14:14+00:00",
"type": "library",
"installation-source": "dist",
"autoload": {
"psr-4": {
"Symfony\\Component\\PasswordHasher\\": ""
},
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Robin Chalas",
"email": "robin.chalas@gmail.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Provides password hashing utilities",
"homepage": "https://symfony.com",
"keywords": [
"hashing",
"password"
],
"support": {
"source": "https://github.com/symfony/password-hasher/tree/v6.4.24"
},
"funding": [
{
"url": "https://symfony.com/sponsor",
"type": "custom"
},
{
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://github.com/nicolas-grekas",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"install-path": "../symfony/password-hasher"
},
{
"name": "symfony/polyfill-ctype",
"version": "v1.33.0",
@@ -4533,44 +4535,54 @@
"install-path": "../symfony/routing"
},
{
"name": "symfony/runtime",
"version": "v6.4.24",
"version_normalized": "6.4.24.0",
"name": "symfony/security-core",
"version": "v6.4.26",
"version_normalized": "6.4.26.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/runtime.git",
"reference": "c1cc6721646f546627236c57f835272806087337"
"url": "https://github.com/symfony/security-core.git",
"reference": "8b7c95bf04d82fcd0c06a918b2d849bfb2ab9cc0"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/runtime/zipball/c1cc6721646f546627236c57f835272806087337",
"reference": "c1cc6721646f546627236c57f835272806087337",
"url": "https://api.github.com/repos/symfony/security-core/zipball/8b7c95bf04d82fcd0c06a918b2d849bfb2ab9cc0",
"reference": "8b7c95bf04d82fcd0c06a918b2d849bfb2ab9cc0",
"shasum": ""
},
"require": {
"composer-plugin-api": "^1.0|^2.0",
"php": ">=8.1"
"php": ">=8.1",
"symfony/deprecation-contracts": "^2.5|^3",
"symfony/event-dispatcher-contracts": "^2.5|^3",
"symfony/password-hasher": "^5.4|^6.0|^7.0",
"symfony/service-contracts": "^2.5|^3"
},
"conflict": {
"symfony/dotenv": "<5.4"
"symfony/event-dispatcher": "<5.4",
"symfony/http-foundation": "<5.4",
"symfony/ldap": "<5.4",
"symfony/security-guard": "<5.4",
"symfony/translation": "<5.4.35|>=6.0,<6.3.12|>=6.4,<6.4.3|>=7.0,<7.0.3",
"symfony/validator": "<5.4"
},
"require-dev": {
"composer/composer": "^1.0.2|^2.0",
"symfony/console": "^5.4.9|^6.0.9|^7.0",
"symfony/dotenv": "^5.4|^6.0|^7.0",
"psr/cache": "^1.0|^2.0|^3.0",
"psr/container": "^1.1|^2.0",
"psr/log": "^1|^2|^3",
"symfony/cache": "^5.4|^6.0|^7.0",
"symfony/event-dispatcher": "^5.4|^6.0|^7.0",
"symfony/expression-language": "^5.4|^6.0|^7.0",
"symfony/http-foundation": "^5.4|^6.0|^7.0",
"symfony/http-kernel": "^5.4|^6.0|^7.0"
},
"time": "2025-07-10T08:14:14+00:00",
"type": "composer-plugin",
"extra": {
"class": "Symfony\\Component\\Runtime\\Internal\\ComposerPlugin"
"symfony/ldap": "^5.4|^6.0|^7.0",
"symfony/string": "^5.4|^6.0|^7.0",
"symfony/translation": "^5.4.35|~6.3.12|^6.4.3|^7.0.3",
"symfony/validator": "^6.4|^7.0"
},
"time": "2025-09-02T19:15:26+00:00",
"type": "library",
"installation-source": "dist",
"autoload": {
"psr-4": {
"Symfony\\Component\\Runtime\\": "",
"Symfony\\Runtime\\Symfony\\Component\\": "Internal/"
"Symfony\\Component\\Security\\Core\\": ""
},
"exclude-from-classmap": [
"/Tests/"
@@ -4582,21 +4594,18 @@
],
"authors": [
{
"name": "Nicolas Grekas",
"email": "p@tchwork.com"
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Enables decoupling PHP applications from global state",
"description": "Symfony Security Component - Core Library",
"homepage": "https://symfony.com",
"keywords": [
"runtime"
],
"support": {
"source": "https://github.com/symfony/runtime/tree/v6.4.24"
"source": "https://github.com/symfony/security-core/tree/v6.4.26"
},
"funding": [
{
@@ -4616,7 +4625,82 @@
"type": "tidelift"
}
],
"install-path": "../symfony/runtime"
"install-path": "../symfony/security-core"
},
{
"name": "symfony/security-csrf",
"version": "v6.4.24",
"version_normalized": "6.4.24.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/security-csrf.git",
"reference": "9a1efc8c10b86bcedc9233affd10c716b54ca1b7"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/security-csrf/zipball/9a1efc8c10b86bcedc9233affd10c716b54ca1b7",
"reference": "9a1efc8c10b86bcedc9233affd10c716b54ca1b7",
"shasum": ""
},
"require": {
"php": ">=8.1",
"symfony/security-core": "^5.4|^6.0|^7.0"
},
"conflict": {
"symfony/http-foundation": "<5.4"
},
"require-dev": {
"symfony/http-foundation": "^5.4|^6.0|^7.0"
},
"time": "2025-07-10T08:14:14+00:00",
"type": "library",
"installation-source": "dist",
"autoload": {
"psr-4": {
"Symfony\\Component\\Security\\Csrf\\": ""
},
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony Security Component - CSRF Library",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/security-csrf/tree/v6.4.24"
},
"funding": [
{
"url": "https://symfony.com/sponsor",
"type": "custom"
},
{
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://github.com/nicolas-grekas",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"install-path": "../symfony/security-csrf"
},
{
"name": "symfony/service-contracts",
@@ -5156,17 +5240,17 @@
},
{
"name": "symfony/var-dumper",
"version": "v6.4.25",
"version_normalized": "6.4.25.0",
"version": "v6.4.26",
"version_normalized": "6.4.26.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/var-dumper.git",
"reference": "c6cd92486e9fc32506370822c57bc02353a5a92c"
"reference": "cfae1497a2f1eaad78dbc0590311c599c7178d4a"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/var-dumper/zipball/c6cd92486e9fc32506370822c57bc02353a5a92c",
"reference": "c6cd92486e9fc32506370822c57bc02353a5a92c",
"url": "https://api.github.com/repos/symfony/var-dumper/zipball/cfae1497a2f1eaad78dbc0590311c599c7178d4a",
"reference": "cfae1497a2f1eaad78dbc0590311c599c7178d4a",
"shasum": ""
},
"require": {
@@ -5185,7 +5269,7 @@
"symfony/uid": "^5.4|^6.0|^7.0",
"twig/twig": "^2.13|^3.0.4"
},
"time": "2025-08-13T09:41:44+00:00",
"time": "2025-09-25T15:37:27+00:00",
"bin": [
"Resources/bin/var-dump-server"
],
@@ -5223,7 +5307,7 @@
"dump"
],
"support": {
"source": "https://github.com/symfony/var-dumper/tree/v6.4.25"
"source": "https://github.com/symfony/var-dumper/tree/v6.4.26"
},
"funding": [
{
@@ -5497,63 +5581,6 @@
],
"install-path": "../symfony/yaml"
},
{
"name": "symfonycasts/dynamic-forms",
"version": "v0.1.3",
"version_normalized": "0.1.3.0",
"source": {
"type": "git",
"url": "https://github.com/SymfonyCasts/dynamic-forms.git",
"reference": "4c86c48f18a707e451c4dfffe87f3710b2052be6"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/SymfonyCasts/dynamic-forms/zipball/4c86c48f18a707e451c4dfffe87f3710b2052be6",
"reference": "4c86c48f18a707e451c4dfffe87f3710b2052be6",
"shasum": ""
},
"require": {
"php": ">=8.1",
"symfony/form": "^5.4|^6.3|^7.0"
},
"require-dev": {
"phpunit/phpunit": "^9.6",
"symfony/framework-bundle": "^6.3|^7.0",
"symfony/options-resolver": "^5.4|^6.3|^7.0",
"symfony/phpunit-bridge": "^5.4.32|^6.3.9|^7.0",
"symfony/twig-bundle": "^5.4|^6.3|^7.0",
"twig/twig": "^2.15|^3.0",
"zenstruck/browser": "^1.4"
},
"time": "2024-10-22T16:59:02+00:00",
"type": "library",
"installation-source": "dist",
"autoload": {
"psr-4": {
"Symfonycasts\\DynamicForms\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Ryan Weaver",
"homepage": "https://symfonycasts.com"
}
],
"description": "Add dynamic/dependent fields to Symfony forms",
"keywords": [
"Forms",
"symfony"
],
"support": {
"issues": "https://github.com/SymfonyCasts/dynamic-forms/issues",
"source": "https://github.com/SymfonyCasts/dynamic-forms/tree/v0.1.3"
},
"install-path": "../symfonycasts/dynamic-forms"
},
{
"name": "tecnickcom/tcpdf",
"version": "6.10.0",
@@ -5776,7 +5803,6 @@
],
"dev": true,
"dev-package-names": [
"symfony/debug-bundle",
"symfony/stopwatch",
"symfony/web-profiler-bundle"
]

View File

@@ -3,7 +3,7 @@
'name' => 'combodo/itop',
'pretty_version' => 'dev-develop',
'version' => 'dev-develop',
'reference' => '0ea0da525e7dea5ec0ba619afa06a88abe5df919',
'reference' => '19d062aa830b6d6c7d17ac4046fc9ee2c5e3fab1',
'type' => 'project',
'install_path' => __DIR__ . '/../../',
'aliases' => array(),
@@ -22,7 +22,7 @@
'combodo/itop' => array(
'pretty_version' => 'dev-develop',
'version' => 'dev-develop',
'reference' => '0ea0da525e7dea5ec0ba619afa06a88abe5df919',
'reference' => '19d062aa830b6d6c7d17ac4046fc9ee2c5e3fab1',
'type' => 'project',
'install_path' => __DIR__ . '/../../',
'aliases' => array(),
@@ -360,15 +360,6 @@
'aliases' => array(),
'dev_requirement' => false,
),
'symfony/debug-bundle' => array(
'pretty_version' => 'v6.4.13',
'version' => '6.4.13.0',
'reference' => '7bcfaff39e094cc09455201916d016d9b2ae08ff',
'type' => 'symfony-bundle',
'install_path' => __DIR__ . '/../symfony/debug-bundle',
'aliases' => array(),
'dev_requirement' => true,
),
'symfony/dependency-injection' => array(
'pretty_version' => 'v6.4.25',
'version' => '6.4.25.0',
@@ -510,6 +501,15 @@
'aliases' => array(),
'dev_requirement' => false,
),
'symfony/password-hasher' => array(
'pretty_version' => 'v6.4.24',
'version' => '6.4.24.0',
'reference' => 'dcab5ac87450aaed26483ba49c2ce86808da7557',
'type' => 'library',
'install_path' => __DIR__ . '/../symfony/password-hasher',
'aliases' => array(),
'dev_requirement' => false,
),
'symfony/polyfill-ctype' => array(
'pretty_version' => 'v1.33.0',
'version' => '1.33.0.0',
@@ -600,12 +600,21 @@
'aliases' => array(),
'dev_requirement' => false,
),
'symfony/runtime' => array(
'symfony/security-core' => array(
'pretty_version' => 'v6.4.26',
'version' => '6.4.26.0',
'reference' => '8b7c95bf04d82fcd0c06a918b2d849bfb2ab9cc0',
'type' => 'library',
'install_path' => __DIR__ . '/../symfony/security-core',
'aliases' => array(),
'dev_requirement' => false,
),
'symfony/security-csrf' => array(
'pretty_version' => 'v6.4.24',
'version' => '6.4.24.0',
'reference' => 'c1cc6721646f546627236c57f835272806087337',
'type' => 'composer-plugin',
'install_path' => __DIR__ . '/../symfony/runtime',
'reference' => '9a1efc8c10b86bcedc9233affd10c716b54ca1b7',
'type' => 'library',
'install_path' => __DIR__ . '/../symfony/security-csrf',
'aliases' => array(),
'dev_requirement' => false,
),
@@ -670,9 +679,9 @@
'dev_requirement' => false,
),
'symfony/var-dumper' => array(
'pretty_version' => 'v6.4.25',
'version' => '6.4.25.0',
'reference' => 'c6cd92486e9fc32506370822c57bc02353a5a92c',
'pretty_version' => 'v6.4.26',
'version' => '6.4.26.0',
'reference' => 'cfae1497a2f1eaad78dbc0590311c599c7178d4a',
'type' => 'library',
'install_path' => __DIR__ . '/../symfony/var-dumper',
'aliases' => array(),
@@ -705,15 +714,6 @@
'aliases' => array(),
'dev_requirement' => false,
),
'symfonycasts/dynamic-forms' => array(
'pretty_version' => 'v0.1.3',
'version' => '0.1.3.0',
'reference' => '4c86c48f18a707e451c4dfffe87f3710b2052be6',
'type' => 'library',
'install_path' => __DIR__ . '/../symfonycasts/dynamic-forms',
'aliases' => array(),
'dev_requirement' => false,
),
'tecnickcom/tcpdf' => array(
'pretty_version' => '6.10.0',
'version' => '6.10.0.0',

View File

@@ -1,8 +0,0 @@
CHANGELOG
=========
4.1.0
-----
* Added the `server:dump` command to run a server collecting and displaying
dumps on a single place with multiple formats support

View File

@@ -1,54 +0,0 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Bundle\DebugBundle\Command;
use Symfony\Component\Console\Attribute\AsCommand;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Console\Style\SymfonyStyle;
use Symfony\Component\VarDumper\Command\ServerDumpCommand;
use Symfony\Component\VarDumper\Server\DumpServer;
/**
* A placeholder command easing VarDumper server discovery.
*
* @author Maxime Steinhausser <maxime.steinhausser@gmail.com>
*
* @internal
*/
#[AsCommand(name: 'server:dump', description: 'Start a dump server that collects and displays dumps in a single place')]
class ServerDumpPlaceholderCommand extends Command
{
private ServerDumpCommand $replacedCommand;
public function __construct(?DumpServer $server = null, array $descriptors = [])
{
$this->replacedCommand = new ServerDumpCommand((new \ReflectionClass(DumpServer::class))->newInstanceWithoutConstructor(), $descriptors);
parent::__construct();
}
protected function configure(): void
{
$this->setDefinition($this->replacedCommand->getDefinition());
$this->setHelp($this->replacedCommand->getHelp());
$this->setDescription($this->replacedCommand->getDescription());
}
protected function execute(InputInterface $input, OutputInterface $output): int
{
(new SymfonyStyle($input, $output))->getErrorStyle()->warning('In order to use the VarDumper server, set the "debug.dump_destination" config option to "tcp://%env(VAR_DUMPER_SERVER)%"');
return 8;
}
}

View File

@@ -1,72 +0,0 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Bundle\DebugBundle;
use Symfony\Bundle\DebugBundle\DependencyInjection\Compiler\DumpDataCollectorPass;
use Symfony\Component\Console\Application;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\HttpKernel\Bundle\Bundle;
use Symfony\Component\VarDumper\VarDumper;
/**
* @author Nicolas Grekas <p@tchwork.com>
*/
class DebugBundle extends Bundle
{
/**
* @return void
*/
public function boot()
{
if ($this->container->getParameter('kernel.debug')) {
$container = $this->container;
// This code is here to lazy load the dump stack. This default
// configuration is overridden in CLI mode on 'console.command' event.
// The dump data collector is used by default, so dump output is sent to
// the WDT. In a CLI context, if dump is used too soon, the data collector
// will buffer it, and release it at the end of the script.
VarDumper::setHandler(function ($var, ?string $label = null) use ($container) {
$dumper = $container->get('data_collector.dump');
$cloner = $container->get('var_dumper.cloner');
$handler = function ($var, ?string $label = null) use ($dumper, $cloner) {
$var = $cloner->cloneVar($var);
if (null !== $label) {
$var = $var->withContext(['label' => $label]);
}
$dumper->dump($var);
};
VarDumper::setHandler($handler);
$handler($var, $label);
});
}
}
/**
* @return void
*/
public function build(ContainerBuilder $container)
{
parent::build($container);
$container->addCompilerPass(new DumpDataCollectorPass());
}
/**
* @return void
*/
public function registerCommands(Application $application)
{
// noop
}
}

View File

@@ -1,45 +0,0 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Bundle\DebugBundle\DependencyInjection\Compiler;
use Symfony\Bundle\WebProfilerBundle\EventListener\WebDebugToolbarListener;
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Reference;
/**
* Registers the file link format for the {@link \Symfony\Component\HttpKernel\DataCollector\DumpDataCollector}.
*
* @author Christian Flothmann <christian.flothmann@xabbuh.de>
*/
class DumpDataCollectorPass implements CompilerPassInterface
{
/**
* @return void
*/
public function process(ContainerBuilder $container)
{
if (!$container->hasDefinition('data_collector.dump')) {
return;
}
$definition = $container->getDefinition('data_collector.dump');
if (!$container->has('.virtual_request_stack')) {
$definition->replaceArgument(3, new Reference('request_stack'));
}
if (!$container->hasParameter('web_profiler.debug_toolbar.mode') || WebDebugToolbarListener::DISABLED === $container->getParameter('web_profiler.debug_toolbar.mode')) {
$definition->replaceArgument(3, null);
}
}
}

View File

@@ -1,60 +0,0 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Bundle\DebugBundle\DependencyInjection;
use Symfony\Component\Config\Definition\Builder\TreeBuilder;
use Symfony\Component\Config\Definition\ConfigurationInterface;
/**
* DebugExtension configuration structure.
*
* @author Nicolas Grekas <p@tchwork.com>
*/
class Configuration implements ConfigurationInterface
{
public function getConfigTreeBuilder(): TreeBuilder
{
$treeBuilder = new TreeBuilder('debug');
$rootNode = $treeBuilder->getRootNode();
$rootNode->children()
->integerNode('max_items')
->info('Max number of displayed items past the first level, -1 means no limit')
->min(-1)
->defaultValue(2500)
->end()
->integerNode('min_depth')
->info('Minimum tree depth to clone all the items, 1 is default')
->min(0)
->defaultValue(1)
->end()
->integerNode('max_string_length')
->info('Max length of displayed strings, -1 means no limit')
->min(-1)
->defaultValue(-1)
->end()
->scalarNode('dump_destination')
->info('A stream URL where dumps should be written to')
->example('php://stderr, or tcp://%env(VAR_DUMPER_SERVER)% when using the "server:dump" command')
->defaultNull()
->end()
->enumNode('theme')
->info('Changes the color of the dump() output when rendered directly on the templating. "dark" (default) or "light"')
->example('dark')
->values(['dark', 'light'])
->defaultValue('dark')
->end()
;
return $treeBuilder;
}
}

View File

@@ -1,102 +0,0 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Bundle\DebugBundle\DependencyInjection;
use Symfony\Bridge\Monolog\Command\ServerLogCommand;
use Symfony\Bundle\DebugBundle\Command\ServerDumpPlaceholderCommand;
use Symfony\Component\Config\FileLocator;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Extension\Extension;
use Symfony\Component\DependencyInjection\Loader\PhpFileLoader;
use Symfony\Component\DependencyInjection\Reference;
use Symfony\Component\VarDumper\Caster\ReflectionCaster;
/**
* DebugExtension.
*
* @author Nicolas Grekas <p@tchwork.com>
*/
class DebugExtension extends Extension
{
/**
* @return void
*/
public function load(array $configs, ContainerBuilder $container)
{
$configuration = new Configuration();
$config = $this->processConfiguration($configuration, $configs);
$loader = new PhpFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
$loader->load('services.php');
$container->getDefinition('var_dumper.cloner')
->addMethodCall('setMaxItems', [$config['max_items']])
->addMethodCall('setMinDepth', [$config['min_depth']])
->addMethodCall('setMaxString', [$config['max_string_length']])
->addMethodCall('addCasters', [ReflectionCaster::UNSET_CLOSURE_FILE_INFO]);
if ('dark' !== $config['theme']) {
$container->getDefinition('var_dumper.html_dumper')
->addMethodCall('setTheme', [$config['theme']]);
}
if (null === $config['dump_destination']) {
$container->getDefinition('var_dumper.command.server_dump')
->setClass(ServerDumpPlaceholderCommand::class)
;
} elseif (str_starts_with($config['dump_destination'], 'tcp://')) {
$container->getDefinition('debug.dump_listener')
->replaceArgument(2, new Reference('var_dumper.server_connection'))
;
$container->getDefinition('data_collector.dump')
->replaceArgument(4, new Reference('var_dumper.server_connection'))
;
$container->getDefinition('var_dumper.dump_server')
->replaceArgument(0, $config['dump_destination'])
;
$container->getDefinition('var_dumper.server_connection')
->replaceArgument(0, $config['dump_destination'])
;
} else {
$container->getDefinition('var_dumper.cli_dumper')
->replaceArgument(0, $config['dump_destination'])
;
$container->getDefinition('data_collector.dump')
->replaceArgument(4, new Reference('var_dumper.cli_dumper'))
;
$container->getDefinition('var_dumper.command.server_dump')
->setClass(ServerDumpPlaceholderCommand::class)
;
}
$container->getDefinition('var_dumper.cli_dumper')
->addMethodCall('setDisplayOptions', [[
'fileLinkFormat' => new Reference('debug.file_link_formatter', ContainerBuilder::IGNORE_ON_INVALID_REFERENCE),
]])
;
if (!class_exists(Command::class) || !class_exists(ServerLogCommand::class)) {
$container->removeDefinition('monolog.command.server_log');
}
}
public function getXsdValidationBasePath(): string|false
{
return __DIR__.'/../Resources/config/schema';
}
public function getNamespace(): string
{
return 'http://symfony.com/schema/dic/debug';
}
}

View File

@@ -1,13 +0,0 @@
DebugBundle
===========
DebugBundle provides a tight integration of the Symfony VarDumper component and
the ServerLogCommand from MonologBridge into the Symfony full-stack framework.
Resources
---------
* [Contributing](https://symfony.com/doc/current/contributing/index.html)
* [Report issues](https://github.com/symfony/symfony/issues) and
[send Pull Requests](https://github.com/symfony/symfony/pulls)
in the [main Symfony repository](https://github.com/symfony/symfony)

View File

@@ -1,15 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<xsd:schema xmlns="http://symfony.com/schema/dic/debug"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://symfony.com/schema/dic/debug"
elementFormDefault="qualified">
<xsd:element name="config" type="config" />
<xsd:complexType name="config">
<xsd:attribute name="max-items" type="xsd:integer" />
<xsd:attribute name="min-depth" type="xsd:integer" />
<xsd:attribute name="max-string-length" type="xsd:integer" />
<xsd:attribute name="dump-destination" type="xsd:string" />
</xsd:complexType>
</xsd:schema>

View File

@@ -1,140 +0,0 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\DependencyInjection\Loader\Configurator;
use Monolog\Formatter\FormatterInterface;
use Symfony\Bridge\Monolog\Command\ServerLogCommand;
use Symfony\Bridge\Monolog\Formatter\ConsoleFormatter;
use Symfony\Bridge\Twig\Extension\DumpExtension;
use Symfony\Component\HttpKernel\DataCollector\DumpDataCollector;
use Symfony\Component\HttpKernel\EventListener\DumpListener;
use Symfony\Component\VarDumper\Cloner\VarCloner;
use Symfony\Component\VarDumper\Command\Descriptor\CliDescriptor;
use Symfony\Component\VarDumper\Command\Descriptor\HtmlDescriptor;
use Symfony\Component\VarDumper\Command\ServerDumpCommand;
use Symfony\Component\VarDumper\Dumper\CliDumper;
use Symfony\Component\VarDumper\Dumper\ContextProvider\CliContextProvider;
use Symfony\Component\VarDumper\Dumper\ContextProvider\RequestContextProvider;
use Symfony\Component\VarDumper\Dumper\ContextProvider\SourceContextProvider;
use Symfony\Component\VarDumper\Dumper\ContextualizedDumper;
use Symfony\Component\VarDumper\Dumper\HtmlDumper;
use Symfony\Component\VarDumper\Server\Connection;
use Symfony\Component\VarDumper\Server\DumpServer;
return static function (ContainerConfigurator $container) {
$container->parameters()
->set('env(VAR_DUMPER_SERVER)', '127.0.0.1:9912')
;
$container->services()
->set('twig.extension.dump', DumpExtension::class)
->args([
service('var_dumper.cloner'),
service('var_dumper.html_dumper'),
])
->tag('twig.extension')
->set('data_collector.dump', DumpDataCollector::class)
->public()
->args([
service('debug.stopwatch')->ignoreOnInvalid(),
service('debug.file_link_formatter')->ignoreOnInvalid(),
param('kernel.charset'),
service('.virtual_request_stack'),
null, // var_dumper.cli_dumper or var_dumper.server_connection when debug.dump_destination is set
])
->tag('data_collector', [
'id' => 'dump',
'template' => '@Debug/Profiler/dump.html.twig',
'priority' => 240,
])
->set('debug.dump_listener', DumpListener::class)
->args([
service('var_dumper.cloner'),
service('var_dumper.cli_dumper'),
null,
])
->tag('kernel.event_subscriber')
->set('var_dumper.cloner', VarCloner::class)
->public()
->set('var_dumper.cli_dumper', CliDumper::class)
->args([
null, // debug.dump_destination,
param('kernel.charset'),
0, // flags
])
->set('var_dumper.contextualized_cli_dumper', ContextualizedDumper::class)
->decorate('var_dumper.cli_dumper')
->args([
service('var_dumper.contextualized_cli_dumper.inner'),
[
'source' => inline_service(SourceContextProvider::class)->args([
param('kernel.charset'),
param('kernel.project_dir'),
service('debug.file_link_formatter')->nullOnInvalid(),
]),
],
])
->set('var_dumper.html_dumper', HtmlDumper::class)
->args([
null,
param('kernel.charset'),
0, // flags
])
->call('setDisplayOptions', [
['fileLinkFormat' => service('debug.file_link_formatter')->ignoreOnInvalid()],
])
->set('var_dumper.server_connection', Connection::class)
->args([
'', // server host
[
'source' => inline_service(SourceContextProvider::class)->args([
param('kernel.charset'),
param('kernel.project_dir'),
service('debug.file_link_formatter')->nullOnInvalid(),
]),
'request' => inline_service(RequestContextProvider::class)->args([service('request_stack')]),
'cli' => inline_service(CliContextProvider::class),
],
])
->set('var_dumper.dump_server', DumpServer::class)
->args([
'', // server host
service('logger')->nullOnInvalid(),
])
->tag('monolog.logger', ['channel' => 'debug'])
->set('var_dumper.command.server_dump', ServerDumpCommand::class)
->args([
service('var_dumper.dump_server'),
[
'cli' => inline_service(CliDescriptor::class)->args([service('var_dumper.contextualized_cli_dumper.inner')]),
'html' => inline_service(HtmlDescriptor::class)->args([service('var_dumper.html_dumper')]),
],
])
->tag('console.command')
->set('monolog.command.server_log', ServerLogCommand::class)
;
if (class_exists(ConsoleFormatter::class) && interface_exists(FormatterInterface::class)) {
$container->services()->get('monolog.command.server_log')->tag('console.command');
}
};

View File

@@ -1,83 +0,0 @@
{% extends '@WebProfiler/Profiler/layout.html.twig' %}
{% block toolbar %}
{% if collector.dumpsCount %}
{% set icon %}
{{ source('@Debug/Profiler/icon.svg') }}
<span class="sf-toolbar-value">{{ collector.dumpsCount }}</span>
{% endset %}
{% set text %}
{% for dump in collector.getDumps('html') %}
<div class="sf-toolbar-info-piece">
<span>
{% if dump.label is defined and '' != dump.label %}
<span class="sf-toolbar-file-line"><strong>{{ dump.label }}</strong> in </span>
{% endif %}
{% if dump.file %}
{% set link = dump.file|file_link(dump.line) %}
{% if link %}
<a href="{{ link }}" title="{{ dump.file }}">{{ dump.name }}</a>
{% else %}
<abbr title="{{ dump.file }}">{{ dump.name }}</abbr>
{% endif %}
{% else %}
{{ dump.name }}
{% endif %}
</span>
<span class="sf-toolbar-file-line">line {{ dump.line }}</span>
{{ dump.data|raw }}
</div>
{% endfor %}
{% endset %}
{{ include('@WebProfiler/Profiler/toolbar_item.html.twig', { 'link': true }) }}
{% endif %}
{% endblock %}
{% block menu %}
<span class="label {{ collector.dumpsCount == 0 ? 'disabled' }}">
<span class="icon">{{ source('@Debug/Profiler/icon.svg') }}</span>
<strong>Debug</strong>
</span>
{% endblock %}
{% block panel %}
<h2>Dumped Contents</h2>
{% for dump in collector.getDumps('html') %}
<div class="sf-dump sf-reset">
<span class="metadata">
{% if dump.label is defined and '' != dump.label %}
<strong>{{ dump.label }}</strong> in
{% else %}
In
{% endif %}
{% if dump.line %}
{% set link = dump.file|file_link(dump.line) %}
{% if link %}
<a href="{{ link }}" title="{{ dump.file }}">{{ dump.name }}</a>
{% else %}
<abbr title="{{ dump.file }}">{{ dump.name }}</abbr>
{% endif %}
{% else %}
{{ dump.name }}
{% endif %}
line <a class="text-small sf-toggle" data-toggle-selector="#sf-trace-{{ loop.index0 }}">{{ dump.line }}</a>:
</span>
<div class="sf-dump-compact hidden" id="sf-trace-{{ loop.index0 }}">
<div class="trace">
{{ dump.fileExcerpt ? dump.fileExcerpt|raw : dump.file|file_excerpt(dump.line) }}
</div>
</div>
{{ dump.data|raw }}
</div>
{% else %}
<div class="empty empty-panel">
<p>No content was dumped.</p>
</div>
{% endfor %}
{% endblock %}

View File

@@ -1,9 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" data-icon-name="icon-tabler-viewfinder" width="24" height="24" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round">
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
<circle cx="12" cy="12" r="9"></circle>
<line x1="12" y1="3" x2="12" y2="7"></line>
<line x1="12" y1="21" x2="12" y2="18"></line>
<line x1="3" y1="12" x2="7" y2="12"></line>
<line x1="21" y1="12" x2="18" y2="12"></line>
<line x1="12" y1="12" x2="12" y2="12.01"></line>
</svg>

Before

Width:  |  Height:  |  Size: 586 B

View File

@@ -1,41 +0,0 @@
{
"name": "symfony/debug-bundle",
"type": "symfony-bundle",
"description": "Provides a tight integration of the Symfony VarDumper component and the ServerLogCommand from MonologBridge into the Symfony full-stack framework",
"keywords": [],
"homepage": "https://symfony.com",
"license": "MIT",
"authors": [
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"require": {
"php": ">=8.1",
"ext-xml": "*",
"symfony/dependency-injection": "^5.4|^6.0|^7.0",
"symfony/http-kernel": "^5.4|^6.0|^7.0",
"symfony/twig-bridge": "^5.4|^6.0|^7.0",
"symfony/var-dumper": "^5.4|^6.0|^7.0"
},
"require-dev": {
"symfony/config": "^5.4|^6.0|^7.0",
"symfony/web-profiler-bundle": "^5.4|^6.0|^7.0"
},
"conflict": {
"symfony/config": "<5.4",
"symfony/dependency-injection": "<5.4"
},
"autoload": {
"psr-4": { "Symfony\\Bundle\\DebugBundle\\": "" },
"exclude-from-classmap": [
"/Tests/"
]
},
"minimum-stability": "dev"
}

View File

@@ -0,0 +1,13 @@
CHANGELOG
=========
6.2
---
* Use `SensitiveParameter` attribute to redact sensitive values in back traces
5.3
---
* Add the component
* Use `bcrypt` as default algorithm in `NativePasswordHasher`

View File

@@ -0,0 +1,215 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\PasswordHasher\Command;
use Symfony\Component\Console\Attribute\AsCommand;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Completion\CompletionInput;
use Symfony\Component\Console\Completion\CompletionSuggestions;
use Symfony\Component\Console\Exception\InvalidArgumentException;
use Symfony\Component\Console\Exception\RuntimeException;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Output\ConsoleOutputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Console\Question\Question;
use Symfony\Component\Console\Style\SymfonyStyle;
use Symfony\Component\PasswordHasher\Hasher\PasswordHasherFactoryInterface;
use Symfony\Component\PasswordHasher\LegacyPasswordHasherInterface;
/**
* Hashes a user's password.
*
* @author Sarah Khalil <mkhalil.sarah@gmail.com>
* @author Robin Chalas <robin.chalas@gmail.com>
*
* @final
*/
#[AsCommand(name: 'security:hash-password', description: 'Hash a user password')]
class UserPasswordHashCommand extends Command
{
private PasswordHasherFactoryInterface $hasherFactory;
private array $userClasses;
public function __construct(PasswordHasherFactoryInterface $hasherFactory, array $userClasses = [])
{
$this->hasherFactory = $hasherFactory;
$this->userClasses = $userClasses;
parent::__construct();
}
protected function configure(): void
{
$this
->addArgument('password', InputArgument::OPTIONAL, 'The plain password to hash.')
->addArgument('user-class', InputArgument::OPTIONAL, 'The User entity class path associated with the hasher used to hash the password.')
->addOption('empty-salt', null, InputOption::VALUE_NONE, 'Do not generate a salt or let the hasher generate one.')
->setHelp(<<<EOF
The <info>%command.name%</info> command hashes passwords according to your
security configuration. This command is mainly used to generate passwords for
the <comment>in_memory</comment> user provider type and for changing passwords
in the database while developing the application.
Suppose that you have the following security configuration in your application:
<comment>
# config/packages/security.yml
security:
password_hashers:
Symfony\Component\Security\Core\User\InMemoryUser: plaintext
App\Entity\User: auto
</comment>
If you execute the command non-interactively, the first available configured
user class under the <comment>security.password_hashers</comment> key is used and a random salt is
generated to hash the password:
<info>php %command.full_name% --no-interaction [password]</info>
Pass the full user class path as the second argument to hash passwords for
your own entities:
<info>php %command.full_name% --no-interaction [password] 'App\Entity\User'</info>
Executing the command interactively allows you to generate a random salt for
hashing the password:
<info>php %command.full_name% [password] 'App\Entity\User'</info>
In case your hasher doesn't require a salt, add the <comment>empty-salt</comment> option:
<info>php %command.full_name% --empty-salt [password] 'App\Entity\User'</info>
EOF
)
;
}
protected function execute(InputInterface $input, OutputInterface $output): int
{
$io = new SymfonyStyle($input, $output);
$errorIo = $output instanceof ConsoleOutputInterface ? new SymfonyStyle($input, $output->getErrorOutput()) : $io;
$input->isInteractive() ? $errorIo->title('Symfony Password Hash Utility') : $errorIo->newLine();
$password = $input->getArgument('password');
$userClass = $this->getUserClass($input, $io);
$emptySalt = $input->getOption('empty-salt');
$hasher = $this->hasherFactory->getPasswordHasher($userClass);
$saltlessWithoutEmptySalt = !$emptySalt && !$hasher instanceof LegacyPasswordHasherInterface;
if ($saltlessWithoutEmptySalt) {
$emptySalt = true;
}
if (!$password) {
if (!$input->isInteractive()) {
$errorIo->error('The password must not be empty.');
return 1;
}
$passwordQuestion = $this->createPasswordQuestion();
$password = $errorIo->askQuestion($passwordQuestion);
}
$salt = null;
if ($input->isInteractive() && !$emptySalt) {
$emptySalt = true;
$errorIo->note('The command will take care of generating a salt for you. Be aware that some hashers advise to let them generate their own salt. If you\'re using one of those hashers, please answer \'no\' to the question below. '.\PHP_EOL.'Provide the \'empty-salt\' option in order to let the hasher handle the generation itself.');
if ($errorIo->confirm('Confirm salt generation ?')) {
$salt = $this->generateSalt();
$emptySalt = false;
}
} elseif (!$emptySalt) {
$salt = $this->generateSalt();
}
$hashedPassword = $hasher->hash($password, $salt);
$rows = [
['Hasher used', $hasher::class],
['Password hash', $hashedPassword],
];
if (!$emptySalt) {
$rows[] = ['Generated salt', $salt];
}
$io->table(['Key', 'Value'], $rows);
if (!$emptySalt) {
$errorIo->note(\sprintf('Make sure that your salt storage field fits the salt length: %s chars', \strlen($salt)));
} elseif ($saltlessWithoutEmptySalt) {
$errorIo->note('Self-salting hasher used: the hasher generated its own built-in salt.');
}
$errorIo->success('Password hashing succeeded');
return 0;
}
public function complete(CompletionInput $input, CompletionSuggestions $suggestions): void
{
if ($input->mustSuggestArgumentValuesFor('user-class')) {
$suggestions->suggestValues($this->userClasses);
return;
}
}
/**
* Create the password question to ask the user for the password to be hashed.
*/
private function createPasswordQuestion(): Question
{
$passwordQuestion = new Question('Type in your password to be hashed');
return $passwordQuestion->setValidator(function ($value) {
if ('' === trim($value)) {
throw new InvalidArgumentException('The password must not be empty.');
}
return $value;
})->setHidden(true)->setMaxAttempts(20);
}
private function generateSalt(): string
{
return base64_encode(random_bytes(30));
}
private function getUserClass(InputInterface $input, SymfonyStyle $io): string
{
if (null !== $userClass = $input->getArgument('user-class')) {
return $userClass;
}
if (!$this->userClasses) {
throw new RuntimeException('There are no configured password hashers for the "security" extension.');
}
if (!$input->isInteractive() || 1 === \count($this->userClasses)) {
return reset($this->userClasses);
}
$userClasses = $this->userClasses;
natcasesort($userClasses);
$userClasses = array_values($userClasses);
return $io->choice('For which user class would you like to hash a password?', $userClasses, reset($userClasses));
}
}

View File

@@ -0,0 +1,21 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\PasswordHasher\Exception;
/**
* Interface for exceptions thrown by the password-hasher component.
*
* @author Robin Chalas <robin.chalas@gmail.com>
*/
interface ExceptionInterface extends \Throwable
{
}

View File

@@ -0,0 +1,23 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\PasswordHasher\Exception;
/**
* @author Robin Chalas <robin.chalas@gmail.com>
*/
class InvalidPasswordException extends \RuntimeException implements ExceptionInterface
{
public function __construct(string $message = 'Invalid password.', int $code = 0, ?\Throwable $previous = null)
{
parent::__construct($message, $code, $previous);
}
}

View File

@@ -9,13 +9,11 @@
* file that was distributed with this source code.
*/
namespace Symfony\Runtime\Symfony\Component\Console\Input;
use Symfony\Component\Runtime\SymfonyRuntime;
namespace Symfony\Component\PasswordHasher\Exception;
/**
* @internal
* @author Robin Chalas <robin.chalas@gmail.com>
*/
class InputInterfaceRuntime extends SymfonyRuntime
class LogicException extends \LogicException implements ExceptionInterface
{
}

View File

@@ -0,0 +1,25 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\PasswordHasher\Hasher;
use Symfony\Component\PasswordHasher\PasswordHasherInterface;
/**
* @author Robin Chalas <robin.chalas@gmail.com>
*/
trait CheckPasswordLengthTrait
{
private function isPasswordTooLong(#[\SensitiveParameter] string $password): bool
{
return PasswordHasherInterface::MAX_PASSWORD_LENGTH < \strlen($password);
}
}

View File

@@ -0,0 +1,98 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\PasswordHasher\Hasher;
use Symfony\Component\PasswordHasher\Exception\InvalidPasswordException;
use Symfony\Component\PasswordHasher\Exception\LogicException;
use Symfony\Component\PasswordHasher\LegacyPasswordHasherInterface;
/**
* MessageDigestPasswordHasher uses a message digest algorithm.
*
* @author Fabien Potencier <fabien@symfony.com>
*/
class MessageDigestPasswordHasher implements LegacyPasswordHasherInterface
{
use CheckPasswordLengthTrait;
private string $algorithm;
private bool $encodeHashAsBase64;
private int $iterations = 1;
private int $hashLength = -1;
/**
* @param string $algorithm The digest algorithm to use
* @param bool $encodeHashAsBase64 Whether to base64 encode the password hash
* @param int $iterations The number of iterations to use to stretch the password hash
*/
public function __construct(string $algorithm = 'sha512', bool $encodeHashAsBase64 = true, int $iterations = 5000)
{
$this->algorithm = $algorithm;
$this->encodeHashAsBase64 = $encodeHashAsBase64;
try {
$this->hashLength = \strlen($this->hash('', 'salt'));
} catch (\LogicException) {
// ignore algorithm not supported
}
$this->iterations = $iterations;
}
public function hash(#[\SensitiveParameter] string $plainPassword, ?string $salt = null): string
{
if ($this->isPasswordTooLong($plainPassword)) {
throw new InvalidPasswordException();
}
if (!\in_array($this->algorithm, hash_algos(), true)) {
throw new LogicException(\sprintf('The algorithm "%s" is not supported.', $this->algorithm));
}
$salted = $this->mergePasswordAndSalt($plainPassword, $salt);
$digest = hash($this->algorithm, $salted, true);
// "stretch" hash
for ($i = 1; $i < $this->iterations; ++$i) {
$digest = hash($this->algorithm, $digest.$salted, true);
}
return $this->encodeHashAsBase64 ? base64_encode($digest) : bin2hex($digest);
}
public function verify(string $hashedPassword, #[\SensitiveParameter] string $plainPassword, ?string $salt = null): bool
{
if (\strlen($hashedPassword) !== $this->hashLength || str_contains($hashedPassword, '$')) {
return false;
}
return !$this->isPasswordTooLong($plainPassword) && hash_equals($hashedPassword, $this->hash($plainPassword, $salt));
}
public function needsRehash(string $hashedPassword): bool
{
return false;
}
private function mergePasswordAndSalt(#[\SensitiveParameter] string $password, ?string $salt): string
{
if (!$salt) {
return $password;
}
if (false !== strrpos($salt, '{') || false !== strrpos($salt, '}')) {
throw new \InvalidArgumentException('Cannot use { or } in salt.');
}
return $password.'{'.$salt.'}';
}
}

View File

@@ -0,0 +1,64 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\PasswordHasher\Hasher;
use Symfony\Component\PasswordHasher\PasswordHasherInterface;
/**
* Hashes passwords using the best available hasher.
* Verifies them using a chain of hashers.
*
* /!\ Don't put a PlaintextPasswordHasher in the list as that'd mean a leaked hash
* could be used to authenticate successfully without knowing the cleartext password.
*
* @author Nicolas Grekas <p@tchwork.com>
*/
final class MigratingPasswordHasher implements PasswordHasherInterface
{
private PasswordHasherInterface $bestHasher;
private array $extraHashers;
public function __construct(PasswordHasherInterface $bestHasher, PasswordHasherInterface ...$extraHashers)
{
$this->bestHasher = $bestHasher;
$this->extraHashers = $extraHashers;
}
public function hash(#[\SensitiveParameter] string $plainPassword, ?string $salt = null): string
{
return $this->bestHasher->hash($plainPassword, $salt);
}
public function verify(string $hashedPassword, #[\SensitiveParameter] string $plainPassword, ?string $salt = null): bool
{
if ($this->bestHasher->verify($hashedPassword, $plainPassword, $salt)) {
return true;
}
if (!$this->bestHasher->needsRehash($hashedPassword)) {
return false;
}
foreach ($this->extraHashers as $hasher) {
if ($hasher->verify($hashedPassword, $plainPassword, $salt)) {
return true;
}
}
return false;
}
public function needsRehash(string $hashedPassword): bool
{
return $this->bestHasher->needsRehash($hashedPassword);
}
}

View File

@@ -0,0 +1,117 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\PasswordHasher\Hasher;
use Symfony\Component\PasswordHasher\Exception\InvalidPasswordException;
use Symfony\Component\PasswordHasher\PasswordHasherInterface;
/**
* Hashes passwords using password_hash().
*
* @author Elnur Abdurrakhimov <elnur@elnur.pro>
* @author Terje Bråten <terje@braten.be>
* @author Nicolas Grekas <p@tchwork.com>
*/
final class NativePasswordHasher implements PasswordHasherInterface
{
use CheckPasswordLengthTrait;
private string $algorithm = \PASSWORD_BCRYPT;
private array $options;
/**
* @param string|null $algorithm An algorithm supported by password_hash() or null to use the best available algorithm
*/
public function __construct(?int $opsLimit = null, ?int $memLimit = null, ?int $cost = null, ?string $algorithm = null)
{
$cost ??= 13;
$opsLimit ??= max(4, \defined('SODIUM_CRYPTO_PWHASH_OPSLIMIT_INTERACTIVE') ? \SODIUM_CRYPTO_PWHASH_OPSLIMIT_INTERACTIVE : 4);
$memLimit ??= max(64 * 1024 * 1024, \defined('SODIUM_CRYPTO_PWHASH_MEMLIMIT_INTERACTIVE') ? \SODIUM_CRYPTO_PWHASH_MEMLIMIT_INTERACTIVE : 64 * 1024 * 1024);
if (3 > $opsLimit) {
throw new \InvalidArgumentException('$opsLimit must be 3 or greater.');
}
if (10 * 1024 > $memLimit) {
throw new \InvalidArgumentException('$memLimit must be 10k or greater.');
}
if ($cost < 4 || 31 < $cost) {
throw new \InvalidArgumentException('$cost must be in the range of 4-31.');
}
if (null !== $algorithm) {
$algorithms = [1 => \PASSWORD_BCRYPT, '2y' => \PASSWORD_BCRYPT];
if (\defined('PASSWORD_ARGON2I')) {
$algorithms[2] = $algorithms['argon2i'] = \PASSWORD_ARGON2I;
}
if (\defined('PASSWORD_ARGON2ID')) {
$algorithms[3] = $algorithms['argon2id'] = \PASSWORD_ARGON2ID;
}
$this->algorithm = $algorithms[$algorithm] ?? $algorithm;
}
$this->options = [
'cost' => $cost,
'time_cost' => $opsLimit,
'memory_cost' => $memLimit >> 10,
'threads' => 1,
];
}
public function hash(#[\SensitiveParameter] string $plainPassword): string
{
if ($this->isPasswordTooLong($plainPassword)) {
throw new InvalidPasswordException();
}
if (\PASSWORD_BCRYPT === $this->algorithm && (72 < \strlen($plainPassword) || str_contains($plainPassword, "\0"))) {
$plainPassword = base64_encode(hash('sha512', $plainPassword, true));
}
return password_hash($plainPassword, $this->algorithm, $this->options);
}
public function verify(string $hashedPassword, #[\SensitiveParameter] string $plainPassword): bool
{
if ('' === $plainPassword || $this->isPasswordTooLong($plainPassword)) {
return false;
}
if (!str_starts_with($hashedPassword, '$argon')) {
// Bcrypt cuts on NUL chars and after 72 bytes
if (str_starts_with($hashedPassword, '$2') && (72 < \strlen($plainPassword) || str_contains($plainPassword, "\0"))) {
$plainPassword = base64_encode(hash('sha512', $plainPassword, true));
}
return password_verify($plainPassword, $hashedPassword);
}
if (\extension_loaded('sodium') && version_compare(\SODIUM_LIBRARY_VERSION, '1.0.14', '>=')) {
return sodium_crypto_pwhash_str_verify($hashedPassword, $plainPassword);
}
if (\extension_loaded('libsodium') && version_compare(phpversion('libsodium'), '1.0.14', '>=')) {
return \Sodium\crypto_pwhash_str_verify($hashedPassword, $plainPassword);
}
return password_verify($plainPassword, $hashedPassword);
}
public function needsRehash(string $hashedPassword): bool
{
return password_needs_rehash($hashedPassword, $this->algorithm, $this->options);
}
}

View File

@@ -0,0 +1,26 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\PasswordHasher\Hasher;
/**
* @author Christophe Coevoet <stof@notk.org>
*/
interface PasswordHasherAwareInterface
{
/**
* Gets the name of the password hasher used to hash the password.
*
* If the method returns null, the standard way to retrieve the password hasher
* will be used instead.
*/
public function getPasswordHasherName(): ?string;
}

View File

@@ -0,0 +1,240 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\PasswordHasher\Hasher;
use Symfony\Component\PasswordHasher\Exception\LogicException;
use Symfony\Component\PasswordHasher\PasswordHasherInterface;
use Symfony\Component\Security\Core\User\PasswordAuthenticatedUserInterface;
/**
* A generic hasher factory implementation.
*
* @author Nicolas Grekas <p@tchwork.com>
* @author Robin Chalas <robin.chalas@gmail.com>
*/
class PasswordHasherFactory implements PasswordHasherFactoryInterface
{
private array $passwordHashers;
/**
* @param array<string, PasswordHasherInterface|array> $passwordHashers
*/
public function __construct(array $passwordHashers)
{
$this->passwordHashers = $passwordHashers;
}
public function getPasswordHasher(string|PasswordAuthenticatedUserInterface|PasswordHasherAwareInterface $user): PasswordHasherInterface
{
$hasherKey = null;
if ($user instanceof PasswordHasherAwareInterface && null !== $hasherName = $user->getPasswordHasherName()) {
if (!\array_key_exists($hasherName, $this->passwordHashers)) {
throw new \RuntimeException(\sprintf('The password hasher "%s" was not configured.', $hasherName));
}
$hasherKey = $hasherName;
} else {
foreach ($this->passwordHashers as $class => $hasher) {
if ((\is_object($user) && $user instanceof $class) || (!\is_object($user) && (is_subclass_of($user, $class) || $user == $class))) {
$hasherKey = $class;
break;
}
}
}
if (null === $hasherKey) {
throw new \RuntimeException(\sprintf('No password hasher has been configured for account "%s".', \is_object($user) ? get_debug_type($user) : $user));
}
if (!$this->passwordHashers[$hasherKey] instanceof PasswordHasherInterface) {
$this->passwordHashers[$hasherKey] = $this->createHasher($this->passwordHashers[$hasherKey]);
}
return $this->passwordHashers[$hasherKey];
}
/**
* Creates the actual hasher instance.
*
* @throws \InvalidArgumentException
*/
private function createHasher(array $config, bool $isExtra = false): PasswordHasherInterface
{
if (isset($config['instance'])) {
if (!isset($config['migrate_from'])) {
return $config['instance'];
}
$config = $this->getMigratingPasswordConfig($config);
}
if (isset($config['algorithm'])) {
$rawConfig = $config;
$config = $this->getHasherConfigFromAlgorithm($config);
}
if (!isset($config['class'])) {
throw new \InvalidArgumentException('"class" must be set in '.json_encode($config));
}
if (!isset($config['arguments'])) {
throw new \InvalidArgumentException('"arguments" must be set in '.json_encode($config));
}
$hasher = new $config['class'](...$config['arguments']);
if ($isExtra || !\in_array($config['class'], [NativePasswordHasher::class, SodiumPasswordHasher::class], true)) {
return $hasher;
}
if ($rawConfig ?? null) {
$extrapasswordHashers = array_map(function (string $algo) use ($rawConfig): PasswordHasherInterface {
$rawConfig['algorithm'] = $algo;
return $this->createHasher($rawConfig);
}, ['pbkdf2', $rawConfig['hash_algorithm'] ?? 'sha512']);
} else {
$extrapasswordHashers = [new Pbkdf2PasswordHasher(), new MessageDigestPasswordHasher()];
}
return new MigratingPasswordHasher($hasher, ...$extrapasswordHashers);
}
private function getHasherConfigFromAlgorithm(array $config): array
{
if ('auto' === $config['algorithm']) {
// "plaintext" is not listed as any leaked hashes could then be used to authenticate directly
if (SodiumPasswordHasher::isSupported()) {
$algorithms = ['native', 'sodium', 'pbkdf2'];
} else {
$algorithms = ['native', 'pbkdf2'];
}
if ($config['hash_algorithm'] ?? '') {
$algorithms[] = $config['hash_algorithm'];
}
$hasherChain = [];
foreach ($algorithms as $algorithm) {
$config['algorithm'] = $algorithm;
$hasherChain[] = $this->createHasher($config, true);
}
return [
'class' => MigratingPasswordHasher::class,
'arguments' => $hasherChain,
];
}
if ($config['migrate_from'] ?? false) {
return $this->getMigratingPasswordConfig($config);
}
switch ($config['algorithm']) {
case 'plaintext':
return [
'class' => PlaintextPasswordHasher::class,
'arguments' => [$config['ignore_case'] ?? false],
];
case 'pbkdf2':
return [
'class' => Pbkdf2PasswordHasher::class,
'arguments' => [
$config['hash_algorithm'] ?? 'sha512',
$config['encode_as_base64'] ?? true,
$config['iterations'] ?? 1000,
$config['key_length'] ?? 40,
],
];
case 'bcrypt':
$config['algorithm'] = 'native';
$config['native_algorithm'] = \PASSWORD_BCRYPT;
return $this->getHasherConfigFromAlgorithm($config);
case 'native':
return [
'class' => NativePasswordHasher::class,
'arguments' => [
$config['time_cost'] ?? null,
(($config['memory_cost'] ?? 0) << 10) ?: null,
$config['cost'] ?? null,
] + (isset($config['native_algorithm']) ? [3 => $config['native_algorithm']] : []),
];
case 'sodium':
return [
'class' => SodiumPasswordHasher::class,
'arguments' => [
$config['time_cost'] ?? null,
(($config['memory_cost'] ?? 0) << 10) ?: null,
],
];
case 'argon2i':
if (SodiumPasswordHasher::isSupported() && !\defined('SODIUM_CRYPTO_PWHASH_ALG_ARGON2ID13')) {
$config['algorithm'] = 'sodium';
} elseif (\defined('PASSWORD_ARGON2I')) {
$config['algorithm'] = 'native';
$config['native_algorithm'] = \PASSWORD_ARGON2I;
} else {
throw new LogicException(\sprintf('Algorithm "argon2i" is not available. Use "%s" instead.', \defined('SODIUM_CRYPTO_PWHASH_ALG_ARGON2ID13') ? 'argon2id" or "auto' : 'auto'));
}
return $this->getHasherConfigFromAlgorithm($config);
case 'argon2id':
if (($hasSodium = SodiumPasswordHasher::isSupported()) && \defined('SODIUM_CRYPTO_PWHASH_ALG_ARGON2ID13')) {
$config['algorithm'] = 'sodium';
} elseif (\defined('PASSWORD_ARGON2ID')) {
$config['algorithm'] = 'native';
$config['native_algorithm'] = \PASSWORD_ARGON2ID;
} else {
throw new LogicException(\sprintf('Algorithm "argon2id" is not available. Either use "%s", upgrade to PHP 7.3+ or use libsodium 1.0.15+ instead.', \defined('PASSWORD_ARGON2I') || $hasSodium ? 'argon2i", "auto' : 'auto'));
}
return $this->getHasherConfigFromAlgorithm($config);
}
return [
'class' => MessageDigestPasswordHasher::class,
'arguments' => [
$config['algorithm'],
$config['encode_as_base64'] ?? true,
$config['iterations'] ?? 5000,
],
];
}
private function getMigratingPasswordConfig(array $config): array
{
$frompasswordHashers = $config['migrate_from'];
unset($config['migrate_from']);
$hasherChain = [$this->createHasher($config, true)];
foreach ($frompasswordHashers as $name) {
if ($hasher = $this->passwordHashers[$name] ?? false) {
$hasher = $hasher instanceof PasswordHasherInterface ? $hasher : $this->createHasher($hasher, true);
} else {
$hasher = $this->createHasher(['algorithm' => $name], true);
}
$hasherChain[] = $hasher;
}
return [
'class' => MigratingPasswordHasher::class,
'arguments' => $hasherChain,
];
}
}

View File

@@ -0,0 +1,31 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\PasswordHasher\Hasher;
use Symfony\Component\PasswordHasher\PasswordHasherInterface;
use Symfony\Component\Security\Core\User\PasswordAuthenticatedUserInterface;
/**
* PasswordHasherFactoryInterface to support different password hashers for different user accounts.
*
* @author Robin Chalas <robin.chalas@gmail.com>
* @author Johannes M. Schmitt <schmittjoh@gmail.com>
*/
interface PasswordHasherFactoryInterface
{
/**
* Returns the password hasher to use for the given user.
*
* @throws \RuntimeException When no password hasher could be found for the user
*/
public function getPasswordHasher(string|PasswordAuthenticatedUserInterface|PasswordHasherAwareInterface $user): PasswordHasherInterface;
}

View File

@@ -0,0 +1,90 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\PasswordHasher\Hasher;
use Symfony\Component\PasswordHasher\Exception\InvalidPasswordException;
use Symfony\Component\PasswordHasher\Exception\LogicException;
use Symfony\Component\PasswordHasher\LegacyPasswordHasherInterface;
/**
* Pbkdf2PasswordHasher uses the PBKDF2 (Password-Based Key Derivation Function 2).
*
* Providing a high level of Cryptographic security,
* PBKDF2 is recommended by the National Institute of Standards and Technology (NIST).
*
* But also warrants a warning, using PBKDF2 (with a high number of iterations) slows down the process.
* PBKDF2 should be used with caution and care.
*
* @author Sebastiaan Stok <s.stok@rollerscapes.net>
* @author Andrew Johnson
* @author Fabien Potencier <fabien@symfony.com>
*/
final class Pbkdf2PasswordHasher implements LegacyPasswordHasherInterface
{
use CheckPasswordLengthTrait;
private string $algorithm;
private bool $encodeHashAsBase64;
private int $iterations = 1;
private int $length;
private int $encodedLength = -1;
/**
* @param string $algorithm The digest algorithm to use
* @param bool $encodeHashAsBase64 Whether to base64 encode the password hash
* @param int $iterations The number of iterations to use to stretch the password hash
* @param int $length Length of derived key to create
*/
public function __construct(string $algorithm = 'sha512', bool $encodeHashAsBase64 = true, int $iterations = 1000, int $length = 40)
{
$this->algorithm = $algorithm;
$this->encodeHashAsBase64 = $encodeHashAsBase64;
$this->length = $length;
try {
$this->encodedLength = \strlen($this->hash('', 'salt'));
} catch (\LogicException) {
// ignore unsupported algorithm
}
$this->iterations = $iterations;
}
public function hash(#[\SensitiveParameter] string $plainPassword, ?string $salt = null): string
{
if ($this->isPasswordTooLong($plainPassword)) {
throw new InvalidPasswordException();
}
if (!\in_array($this->algorithm, hash_algos(), true)) {
throw new LogicException(\sprintf('The algorithm "%s" is not supported.', $this->algorithm));
}
$digest = hash_pbkdf2($this->algorithm, $plainPassword, $salt ?? '', $this->iterations, $this->length, true);
return $this->encodeHashAsBase64 ? base64_encode($digest) : bin2hex($digest);
}
public function verify(string $hashedPassword, #[\SensitiveParameter] string $plainPassword, ?string $salt = null): bool
{
if (\strlen($hashedPassword) !== $this->encodedLength || str_contains($hashedPassword, '$')) {
return false;
}
return !$this->isPasswordTooLong($plainPassword) && hash_equals($hashedPassword, $this->hash($plainPassword, $salt));
}
public function needsRehash(string $hashedPassword): bool
{
return false;
}
}

View File

@@ -0,0 +1,79 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\PasswordHasher\Hasher;
use Symfony\Component\PasswordHasher\Exception\InvalidPasswordException;
use Symfony\Component\PasswordHasher\LegacyPasswordHasherInterface;
/**
* PlaintextPasswordHasher does not do any hashing but is useful in testing environments.
*
* As this hasher is not cryptographically secure, usage of it in production environments is discouraged.
*
* @author Fabien Potencier <fabien@symfony.com>
*/
class PlaintextPasswordHasher implements LegacyPasswordHasherInterface
{
use CheckPasswordLengthTrait;
private bool $ignorePasswordCase;
/**
* @param bool $ignorePasswordCase Compare password case-insensitive
*/
public function __construct(bool $ignorePasswordCase = false)
{
$this->ignorePasswordCase = $ignorePasswordCase;
}
public function hash(#[\SensitiveParameter] string $plainPassword, ?string $salt = null): string
{
if ($this->isPasswordTooLong($plainPassword)) {
throw new InvalidPasswordException();
}
return $this->mergePasswordAndSalt($plainPassword, $salt);
}
public function verify(string $hashedPassword, #[\SensitiveParameter] string $plainPassword, ?string $salt = null): bool
{
if ($this->isPasswordTooLong($plainPassword)) {
return false;
}
$pass2 = $this->mergePasswordAndSalt($plainPassword, $salt);
if (!$this->ignorePasswordCase) {
return hash_equals($hashedPassword, $pass2);
}
return hash_equals(strtolower($hashedPassword), strtolower($pass2));
}
public function needsRehash(string $hashedPassword): bool
{
return false;
}
private function mergePasswordAndSalt(#[\SensitiveParameter] string $password, ?string $salt): string
{
if (empty($salt)) {
return $password;
}
if (false !== strrpos($salt, '{') || false !== strrpos($salt, '}')) {
throw new \InvalidArgumentException('Cannot use { or } in salt.');
}
return $password.'{'.$salt.'}';
}
}

View File

@@ -0,0 +1,114 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\PasswordHasher\Hasher;
use Symfony\Component\PasswordHasher\Exception\InvalidPasswordException;
use Symfony\Component\PasswordHasher\Exception\LogicException;
use Symfony\Component\PasswordHasher\PasswordHasherInterface;
/**
* Hashes passwords using libsodium.
*
* @author Robin Chalas <robin.chalas@gmail.com>
* @author Zan Baldwin <hello@zanbaldwin.com>
* @author Dominik Müller <dominik.mueller@jkweb.ch>
*/
final class SodiumPasswordHasher implements PasswordHasherInterface
{
use CheckPasswordLengthTrait;
private int $opsLimit;
private int $memLimit;
public function __construct(?int $opsLimit = null, ?int $memLimit = null)
{
if (!self::isSupported()) {
throw new LogicException('Libsodium is not available. You should either install the sodium extension or use a different password hasher.');
}
$this->opsLimit = $opsLimit ?? max(4, \defined('SODIUM_CRYPTO_PWHASH_OPSLIMIT_INTERACTIVE') ? \SODIUM_CRYPTO_PWHASH_OPSLIMIT_INTERACTIVE : 4);
$this->memLimit = $memLimit ?? max(64 * 1024 * 1024, \defined('SODIUM_CRYPTO_PWHASH_MEMLIMIT_INTERACTIVE') ? \SODIUM_CRYPTO_PWHASH_MEMLIMIT_INTERACTIVE : 64 * 1024 * 1024);
if (3 > $this->opsLimit) {
throw new \InvalidArgumentException('$opsLimit must be 3 or greater.');
}
if (10 * 1024 > $this->memLimit) {
throw new \InvalidArgumentException('$memLimit must be 10k or greater.');
}
}
public static function isSupported(): bool
{
return version_compare(\extension_loaded('sodium') ? \SODIUM_LIBRARY_VERSION : phpversion('libsodium'), '1.0.14', '>=');
}
public function hash(#[\SensitiveParameter] string $plainPassword): string
{
if ($this->isPasswordTooLong($plainPassword)) {
throw new InvalidPasswordException();
}
if (\function_exists('sodium_crypto_pwhash_str')) {
return sodium_crypto_pwhash_str($plainPassword, $this->opsLimit, $this->memLimit);
}
if (\extension_loaded('libsodium')) {
return \Sodium\crypto_pwhash_str($plainPassword, $this->opsLimit, $this->memLimit);
}
throw new LogicException('Libsodium is not available. You should either install the sodium extension or use a different password hasher.');
}
public function verify(string $hashedPassword, #[\SensitiveParameter] string $plainPassword): bool
{
if ('' === $plainPassword) {
return false;
}
if ($this->isPasswordTooLong($plainPassword)) {
return false;
}
if (!str_starts_with($hashedPassword, '$argon')) {
if (str_starts_with($hashedPassword, '$2') && (72 < \strlen($plainPassword) || str_contains($plainPassword, "\0"))) {
$plainPassword = base64_encode(hash('sha512', $plainPassword, true));
}
// Accept validating non-argon passwords for seamless migrations
return password_verify($plainPassword, $hashedPassword);
}
if (\function_exists('sodium_crypto_pwhash_str_verify')) {
return sodium_crypto_pwhash_str_verify($hashedPassword, $plainPassword);
}
if (\extension_loaded('libsodium')) {
return \Sodium\crypto_pwhash_str_verify($hashedPassword, $plainPassword);
}
return false;
}
public function needsRehash(string $hashedPassword): bool
{
if (\function_exists('sodium_crypto_pwhash_str_needs_rehash')) {
return sodium_crypto_pwhash_str_needs_rehash($hashedPassword, $this->opsLimit, $this->memLimit);
}
if (\extension_loaded('libsodium')) {
return \Sodium\crypto_pwhash_str_needs_rehash($hashedPassword, $this->opsLimit, $this->memLimit);
}
throw new LogicException('Libsodium is not available. You should either install the sodium extension or use a different password hasher.');
}
}

View File

@@ -0,0 +1,71 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\PasswordHasher\Hasher;
use Symfony\Component\Security\Core\User\LegacyPasswordAuthenticatedUserInterface;
use Symfony\Component\Security\Core\User\PasswordAuthenticatedUserInterface;
/**
* Hashes passwords based on the user and the PasswordHasherFactory.
*
* @author Ariel Ferrandini <arielferrandini@gmail.com>
*
* @final
*/
class UserPasswordHasher implements UserPasswordHasherInterface
{
private PasswordHasherFactoryInterface $hasherFactory;
public function __construct(PasswordHasherFactoryInterface $hasherFactory)
{
$this->hasherFactory = $hasherFactory;
}
public function hashPassword(PasswordAuthenticatedUserInterface $user, #[\SensitiveParameter] string $plainPassword): string
{
$salt = null;
if ($user instanceof LegacyPasswordAuthenticatedUserInterface) {
$salt = $user->getSalt();
}
$hasher = $this->hasherFactory->getPasswordHasher($user);
return $hasher->hash($plainPassword, $salt);
}
public function isPasswordValid(PasswordAuthenticatedUserInterface $user, #[\SensitiveParameter] string $plainPassword): bool
{
$salt = null;
if ($user instanceof LegacyPasswordAuthenticatedUserInterface) {
$salt = $user->getSalt();
}
if (null === $user->getPassword()) {
return false;
}
$hasher = $this->hasherFactory->getPasswordHasher($user);
return $hasher->verify($user->getPassword(), $plainPassword, $salt);
}
public function needsRehash(PasswordAuthenticatedUserInterface $user): bool
{
if (null === $user->getPassword()) {
return false;
}
$hasher = $this->hasherFactory->getPasswordHasher($user);
return $hasher->needsRehash($user->getPassword());
}
}

View File

@@ -0,0 +1,37 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\PasswordHasher\Hasher;
use Symfony\Component\Security\Core\User\PasswordAuthenticatedUserInterface;
/**
* Interface for the user password hasher service.
*
* @author Ariel Ferrandini <arielferrandini@gmail.com>
*/
interface UserPasswordHasherInterface
{
/**
* Hashes the plain password for the given user.
*/
public function hashPassword(PasswordAuthenticatedUserInterface $user, #[\SensitiveParameter] string $plainPassword): string;
/**
* Checks if the plaintext password matches the user's password.
*/
public function isPasswordValid(PasswordAuthenticatedUserInterface $user, #[\SensitiveParameter] string $plainPassword): bool;
/**
* Checks if an encoded password would benefit from rehashing.
*/
public function needsRehash(PasswordAuthenticatedUserInterface $user): bool;
}

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