mirror of
https://github.com/Combodo/iTop.git
synced 2026-05-05 00:18:46 +02:00
Compare commits
5 Commits
feature/75
...
fix/9342
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2a44bc0227 | ||
|
|
d76752a988 | ||
|
|
8c2c4e5ff0 | ||
|
|
4bc28ea38a | ||
|
|
805087a01b |
@@ -4,7 +4,7 @@
|
||||
"type": "project",
|
||||
"license": "AGPL-3.0-only",
|
||||
"require": {
|
||||
"php": ">=8.1.0 <8.5.0",
|
||||
"php": ">=8.2.0 <8.5.0",
|
||||
"ext-ctype": "*",
|
||||
"ext-dom": "*",
|
||||
"ext-gd": "*",
|
||||
@@ -15,18 +15,21 @@
|
||||
"apereo/phpcas": "dev-master",
|
||||
"guzzlehttp/guzzle": "^7.5.1",
|
||||
"league/oauth2-google": "^4.0.1",
|
||||
"nikic/php-parser": "^4.14.0",
|
||||
"nikic/php-parser": "dev-master",
|
||||
"pear/archive_tar": "~1.4.14",
|
||||
"pelago/emogrifier": "^7.2.0",
|
||||
"psr/log": "^3.0.0",
|
||||
"scssphp/scssphp": "dev-combodo/1.x",
|
||||
"symfony/console": "~6.4.0",
|
||||
"symfony/dotenv": "~6.4.0",
|
||||
"symfony/form": "^6.4",
|
||||
"symfony/framework-bundle": "~6.4.0",
|
||||
"symfony/http-foundation": "~6.4.0",
|
||||
"symfony/http-kernel": "~6.4.0",
|
||||
"symfony/runtime": "~6.4.0",
|
||||
"symfony/security-csrf": "~6.4.0",
|
||||
"symfony/twig-bundle": "~6.4.0",
|
||||
"symfony/validator" : "~6.4.0",
|
||||
"symfony/var-dumper": "~6.4.0",
|
||||
"symfony/yaml": "~6.4.0",
|
||||
"symfony/mailer": "~6.4.0",
|
||||
@@ -40,6 +43,10 @@
|
||||
"symfony/web-profiler-bundle": "~6.4.0"
|
||||
},
|
||||
"repositories": [
|
||||
{
|
||||
"type": "vcs",
|
||||
"url": "https://github.com/Combodo/PHP-Parser"
|
||||
},
|
||||
{
|
||||
"type": "vcs",
|
||||
"url": "https://github.com/EsupPortail/phpCAS"
|
||||
@@ -60,7 +67,7 @@
|
||||
},
|
||||
"config": {
|
||||
"platform": {
|
||||
"php": "8.1.0"
|
||||
"php": "8.2.0"
|
||||
},
|
||||
"vendor-dir": "lib",
|
||||
"preferred-install": {
|
||||
@@ -80,7 +87,6 @@
|
||||
"sources"
|
||||
],
|
||||
"exclude-from-classmap": [
|
||||
"application/twigextension.class.inc.php",
|
||||
"core/oql/build/PHP/",
|
||||
"core/apc-emulation.php",
|
||||
"application/startup.inc.php",
|
||||
@@ -100,7 +106,7 @@
|
||||
"extra": {
|
||||
"symfony": {
|
||||
"allow-contrib": false,
|
||||
"require": "3.4.*"
|
||||
"require": "6.4.*"
|
||||
},
|
||||
"runtime": {
|
||||
"dotenv_path": "resources/symfony/.env"
|
||||
|
||||
1241
composer.lock
generated
1241
composer.lock
generated
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
@@ -4197,6 +4197,10 @@
|
||||
<is_null_allowed>false</is_null_allowed>
|
||||
<on_target_delete>DEL_MANUAL</on_target_delete>
|
||||
</field>
|
||||
<field id="osfamily_id" xsi:type="AttributeExternalField">
|
||||
<extkey_attcode>osversion_id</extkey_attcode>
|
||||
<target_attcode>osfamily_id</target_attcode>
|
||||
</field>
|
||||
<field id="osversion_name" xsi:type="AttributeExternalField">
|
||||
<extkey_attcode>osversion_id</extkey_attcode>
|
||||
<target_attcode>name</target_attcode>
|
||||
@@ -4218,9 +4222,12 @@
|
||||
</item>
|
||||
<item id="fieldset:Software:moreinfo">
|
||||
<items>
|
||||
<item id="osversion_id">
|
||||
<item id="osfamily_id">
|
||||
<rank>10</rank>
|
||||
</item>
|
||||
<item id="osversion_id">
|
||||
<rank>20</rank>
|
||||
</item>
|
||||
</items>
|
||||
<rank>20</rank>
|
||||
</item>
|
||||
@@ -4665,6 +4672,10 @@
|
||||
<is_null_allowed>false</is_null_allowed>
|
||||
<on_target_delete>DEL_MANUAL</on_target_delete>
|
||||
</field>
|
||||
<field id="osfamily_id" xsi:type="AttributeExternalField">
|
||||
<extkey_attcode>osversion_id</extkey_attcode>
|
||||
<target_attcode>osfamily_id</target_attcode>
|
||||
</field>
|
||||
<field id="osversion_name" xsi:type="AttributeExternalField">
|
||||
<extkey_attcode>osversion_id</extkey_attcode>
|
||||
<target_attcode>name</target_attcode>
|
||||
@@ -4704,6 +4715,9 @@
|
||||
<item id="fieldset:ConfigMgmt:moreinfo">
|
||||
<rank>20</rank>
|
||||
<items>
|
||||
<item id="osfamily_id">
|
||||
<rank>10</rank>
|
||||
</item>
|
||||
<item id="osversion_id">
|
||||
<rank>30</rank>
|
||||
</item>
|
||||
@@ -5107,7 +5121,7 @@
|
||||
</complementary_attributes>
|
||||
</naming>
|
||||
<style>
|
||||
<icon/>
|
||||
<icon>images/icons8-os-version-software.svg</icon>
|
||||
</style>
|
||||
<reconciliation>
|
||||
<attributes>
|
||||
@@ -5218,7 +5232,7 @@
|
||||
<image_attribute>logo</image_attribute>
|
||||
</fields_semantic>
|
||||
<style>
|
||||
<icon/>
|
||||
<icon>images/icons8-os-family-software.svg</icon>
|
||||
</style>
|
||||
<reconciliation>
|
||||
<attributes>
|
||||
@@ -5694,7 +5708,7 @@
|
||||
</attributes>
|
||||
</naming>
|
||||
<style>
|
||||
<icon/>
|
||||
<icon>images/icons8-ios-version-software.svg</icon>
|
||||
</style>
|
||||
<reconciliation>
|
||||
<attributes>
|
||||
@@ -8338,6 +8352,22 @@
|
||||
<title>Menu:ConfigManagement:SWAndApps</title>
|
||||
<icon>../images/icons/icons8-software.svg</icon>
|
||||
</dashlet>
|
||||
<dashlet id="Software" xsi:type="DashletBadge">
|
||||
<rank>0.1</rank>
|
||||
<class>Software</class>
|
||||
</dashlet>
|
||||
<dashlet id="OSFamily" xsi:type="DashletBadge">
|
||||
<rank>0.2</rank>
|
||||
<class>OSFamily</class>
|
||||
</dashlet>
|
||||
<dashlet id="OSVersion" xsi:type="DashletBadge">
|
||||
<rank>0.3</rank>
|
||||
<class>OSVersion</class>
|
||||
</dashlet>
|
||||
<dashlet id="IOSVersion" xsi:type="DashletBadge">
|
||||
<rank>0.4</rank>
|
||||
<class>IOSVersion</class>
|
||||
</dashlet>
|
||||
<dashlet id="5" xsi:type="DashletBadge">
|
||||
<rank>1</rank>
|
||||
<class>Middleware</class>
|
||||
|
||||
@@ -948,6 +948,8 @@ Dict::Add('CS CZ', 'Czech', 'Čeština', [
|
||||
'Class:OSPatch/Attribute:functionalcis_list+' => 'Všechna zařízení, kde je tato záplata (patch) instalována',
|
||||
'Class:OSPatch/Attribute:osversion_id' => 'Verze OS',
|
||||
'Class:OSPatch/Attribute:osversion_id+' => '',
|
||||
'Class:OSPatch/Attribute:osfamily_id' => 'OS Family~~',
|
||||
'Class:OSPatch/Attribute:osfamily_id+' => '',
|
||||
'Class:OSPatch/Attribute:osversion_name' => 'Název verze OS',
|
||||
'Class:OSPatch/Attribute:osversion_name+' => '',
|
||||
]);
|
||||
@@ -1012,6 +1014,8 @@ Dict::Add('CS CZ', 'Czech', 'Čeština', [
|
||||
'Class:OSLicence/ComplementaryName' => '%1$s - %2$s~~',
|
||||
'Class:OSLicence/Attribute:osversion_id' => 'Verze OS',
|
||||
'Class:OSLicence/Attribute:osversion_id+' => '',
|
||||
'Class:OSLicence/Attribute:osfamily_id' => 'OS Family~~',
|
||||
'Class:OSLicence/Attribute:osfamily_id+' => '',
|
||||
'Class:OSLicence/Attribute:osversion_name' => 'Název verze OS',
|
||||
'Class:OSLicence/Attribute:osversion_name+' => '',
|
||||
'Class:OSLicence/Attribute:virtualmachines_list' => 'Virtuální stroje (VM)',
|
||||
|
||||
@@ -947,6 +947,8 @@ Dict::Add('DA DA', 'Danish', 'Dansk', [
|
||||
'Class:OSPatch/Attribute:functionalcis_list+' => 'All the systems where this patch is installed~~',
|
||||
'Class:OSPatch/Attribute:osversion_id' => 'OS Version',
|
||||
'Class:OSPatch/Attribute:osversion_id+' => '',
|
||||
'Class:OSPatch/Attribute:osfamily_id' => 'OS Family~~',
|
||||
'Class:OSPatch/Attribute:osfamily_id+' => '',
|
||||
'Class:OSPatch/Attribute:osversion_name' => 'OS versionsnavn',
|
||||
'Class:OSPatch/Attribute:osversion_name+' => '',
|
||||
]);
|
||||
@@ -1011,6 +1013,8 @@ Dict::Add('DA DA', 'Danish', 'Dansk', [
|
||||
'Class:OSLicence/ComplementaryName' => '%1$s - %2$s~~',
|
||||
'Class:OSLicence/Attribute:osversion_id' => 'OS-Version',
|
||||
'Class:OSLicence/Attribute:osversion_id+' => '',
|
||||
'Class:OSLicence/Attribute:osfamily_id' => 'OS Family~~',
|
||||
'Class:OSLicence/Attribute:osfamily_id+' => '',
|
||||
'Class:OSLicence/Attribute:osversion_name' => 'OS versionsnavn',
|
||||
'Class:OSLicence/Attribute:osversion_name+' => '',
|
||||
'Class:OSLicence/Attribute:virtualmachines_list' => 'Virtuelle Maskiner',
|
||||
|
||||
@@ -947,6 +947,8 @@ Dict::Add('DE DE', 'German', 'Deutsch', [
|
||||
'Class:OSPatch/Attribute:functionalcis_list+' => 'Alle Systeme, auf denen dieser Patch installiert ist',
|
||||
'Class:OSPatch/Attribute:osversion_id' => 'OS Version',
|
||||
'Class:OSPatch/Attribute:osversion_id+' => '',
|
||||
'Class:OSPatch/Attribute:osfamily_id' => 'OS Family~~',
|
||||
'Class:OSPatch/Attribute:osfamily_id+' => '',
|
||||
'Class:OSPatch/Attribute:osversion_name' => 'OS-Versionsname',
|
||||
'Class:OSPatch/Attribute:osversion_name+' => '',
|
||||
]);
|
||||
@@ -1011,6 +1013,8 @@ Dict::Add('DE DE', 'German', 'Deutsch', [
|
||||
'Class:OSLicence/ComplementaryName' => '%1$s - %2$s',
|
||||
'Class:OSLicence/Attribute:osversion_id' => 'OS-Version',
|
||||
'Class:OSLicence/Attribute:osversion_id+' => '',
|
||||
'Class:OSLicence/Attribute:osfamily_id' => 'OS Family~~',
|
||||
'Class:OSLicence/Attribute:osfamily_id+' => '',
|
||||
'Class:OSLicence/Attribute:osversion_name' => 'OS-Versionsname',
|
||||
'Class:OSLicence/Attribute:osversion_name+' => '',
|
||||
'Class:OSLicence/Attribute:virtualmachines_list' => 'Virtuelle Maschinen',
|
||||
|
||||
@@ -963,6 +963,8 @@ Dict::Add('EN US', 'English', 'English', [
|
||||
'Class:OSPatch/Attribute:functionalcis_list+' => 'All the systems where this patch is installed',
|
||||
'Class:OSPatch/Attribute:osversion_id' => 'OS version',
|
||||
'Class:OSPatch/Attribute:osversion_id+' => '',
|
||||
'Class:OSPatch/Attribute:osfamily_id' => 'OS Family',
|
||||
'Class:OSPatch/Attribute:osfamily_id+' => '',
|
||||
'Class:OSPatch/Attribute:osversion_name' => 'OS version name',
|
||||
'Class:OSPatch/Attribute:osversion_name+' => '',
|
||||
]);
|
||||
@@ -1027,6 +1029,8 @@ Dict::Add('EN US', 'English', 'English', [
|
||||
'Class:OSLicence/ComplementaryName' => '%1$s - %2$s',
|
||||
'Class:OSLicence/Attribute:osversion_id' => 'OS version',
|
||||
'Class:OSLicence/Attribute:osversion_id+' => '',
|
||||
'Class:OSLicence/Attribute:osfamily_id' => 'OS Family',
|
||||
'Class:OSLicence/Attribute:osfamily_id+' => '',
|
||||
'Class:OSLicence/Attribute:osversion_name' => 'OS version name',
|
||||
'Class:OSLicence/Attribute:osversion_name+' => '',
|
||||
'Class:OSLicence/Attribute:virtualmachines_list' => 'Virtual machines',
|
||||
|
||||
@@ -945,6 +945,8 @@ Dict::Add('EN GB', 'British English', 'British English', [
|
||||
'Class:OSPatch/Attribute:functionalcis_list+' => 'All the systems where this patch is installed',
|
||||
'Class:OSPatch/Attribute:osversion_id' => 'OS version',
|
||||
'Class:OSPatch/Attribute:osversion_id+' => '',
|
||||
'Class:OSPatch/Attribute:osfamily_id' => 'OS Family~~',
|
||||
'Class:OSPatch/Attribute:osfamily_id+' => '',
|
||||
'Class:OSPatch/Attribute:osversion_name' => 'OS version name',
|
||||
'Class:OSPatch/Attribute:osversion_name+' => '',
|
||||
]);
|
||||
@@ -1010,6 +1012,8 @@ Dict::Add('EN GB', 'British English', 'British English', [
|
||||
'Class:OSLicence/ComplementaryName' => '%1$s - %2$s',
|
||||
'Class:OSLicence/Attribute:osversion_id' => 'OS version',
|
||||
'Class:OSLicence/Attribute:osversion_id+' => '',
|
||||
'Class:OSLicence/Attribute:osfamily_id' => 'OS Family~~',
|
||||
'Class:OSLicence/Attribute:osfamily_id+' => '~~',
|
||||
'Class:OSLicence/Attribute:osversion_name' => 'OS version name',
|
||||
'Class:OSLicence/Attribute:osversion_name+' => '',
|
||||
'Class:OSLicence/Attribute:virtualmachines_list' => 'Virtual machines',
|
||||
|
||||
@@ -943,7 +943,9 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [
|
||||
'Class:OSPatch/Attribute:functionalcis_list' => 'Dispositivos',
|
||||
'Class:OSPatch/Attribute:functionalcis_list+' => 'Dispositivos',
|
||||
'Class:OSPatch/Attribute:osversion_id' => 'Versión de SO',
|
||||
'Class:OSPatch/Attribute:osversion_id+' => 'Versión de SO',
|
||||
'Class:OSPatch/Attribute:osversion_id+' => '',
|
||||
'Class:OSPatch/Attribute:osfamily_id' => 'OS Family~~',
|
||||
'Class:OSPatch/Attribute:osfamily_id+' => '',
|
||||
'Class:OSPatch/Attribute:osversion_name' => 'Versión de SO',
|
||||
'Class:OSPatch/Attribute:osversion_name+' => 'Versión de SO',
|
||||
]);
|
||||
@@ -1008,6 +1010,8 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [
|
||||
'Class:OSLicence/ComplementaryName' => '%1$s - %2$s',
|
||||
'Class:OSLicence/Attribute:osversion_id' => 'Versión de SO',
|
||||
'Class:OSLicence/Attribute:osversion_id+' => 'Versión de SO',
|
||||
'Class:OSLicence/Attribute:osfamily_id' => 'OS Family~~',
|
||||
'Class:OSLicence/Attribute:osfamily_id+' => '',
|
||||
'Class:OSLicence/Attribute:osversion_name' => 'Versión de SO',
|
||||
'Class:OSLicence/Attribute:osversion_name+' => 'Versión de SO',
|
||||
'Class:OSLicence/Attribute:virtualmachines_list' => 'Máquinas Virtuales',
|
||||
|
||||
@@ -1068,6 +1068,8 @@ Dict::Add('FR FR', 'French', 'Français', [
|
||||
'Class:OSPatch/Attribute:functionalcis_list+' => 'Tous les systèmes où ce patch est installé',
|
||||
'Class:OSPatch/Attribute:osversion_id' => 'Version OS',
|
||||
'Class:OSPatch/Attribute:osversion_id+' => '',
|
||||
'Class:OSPatch/Attribute:osfamily_id' => 'Famille d\'OS',
|
||||
'Class:OSPatch/Attribute:osfamily_id+' => 'Déduite de la version d\'OS sélectionnée',
|
||||
'Class:OSPatch/Attribute:osversion_name' => 'Nom Version OS',
|
||||
'Class:OSPatch/Attribute:osversion_name+' => '',
|
||||
]);
|
||||
@@ -1143,6 +1145,8 @@ Dict::Add('FR FR', 'French', 'Français', [
|
||||
'Class:OSLicence/ComplementaryName' => '%1$s - %2$s',
|
||||
'Class:OSLicence/Attribute:osversion_id' => 'Version OS',
|
||||
'Class:OSLicence/Attribute:osversion_id+' => '',
|
||||
'Class:OSLicence/Attribute:osfamily_id' => 'Famille d\'OS',
|
||||
'Class:OSLicence/Attribute:osfamily_id+' => 'Déduite de la version d\'OS sélectionnée',
|
||||
'Class:OSLicence/Attribute:osversion_name' => 'Nom Version OS',
|
||||
'Class:OSLicence/Attribute:osversion_name+' => '',
|
||||
'Class:OSLicence/Attribute:virtualmachines_list' => 'Machines virtuelles',
|
||||
|
||||
@@ -36,23 +36,6 @@ Dict::Add('HU HU', 'Hungarian', 'Magyar', [
|
||||
// Class:<class_name>/UniquenessRule:<rule_code>
|
||||
// Class:<class_name>/UniquenessRule:<rule_code>+
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
// Classes in 'bizmodel'
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
|
||||
// Dictionnay conventions
|
||||
// Class:<class_name>
|
||||
// Class:<class_name>+
|
||||
// Class:<class_name>/Attribute:<attribute_code>
|
||||
// Class:<class_name>/Attribute:<attribute_code>+
|
||||
// Class:<class_name>/Attribute:<attribute_code>/Value:<value>
|
||||
// Class:<class_name>/Attribute:<attribute_code>/Value:<value>+
|
||||
// Class:<class_name>/Stimulus:<stimulus_code>
|
||||
// Class:<class_name>/Stimulus:<stimulus_code>+
|
||||
// Class:<class_name>/UniquenessRule:<rule_code>
|
||||
// Class:<class_name>/UniquenessRule:<rule_code>+
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
// Note: The classes have been grouped by categories: bizmodel
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
@@ -946,6 +929,8 @@ Dict::Add('HU HU', 'Hungarian', 'Magyar', [
|
||||
'Class:OSPatch/Attribute:functionalcis_list+' => 'Rendszerek, amelyekre telepítve lett ez az OS javítócsomag',
|
||||
'Class:OSPatch/Attribute:osversion_id' => 'OS verzió',
|
||||
'Class:OSPatch/Attribute:osversion_id+' => '~~',
|
||||
'Class:OSPatch/Attribute:osfamily_id' => 'OS Family~~',
|
||||
'Class:OSPatch/Attribute:osfamily_id+' => '~~',
|
||||
'Class:OSPatch/Attribute:osversion_name' => 'OS verzió név',
|
||||
'Class:OSPatch/Attribute:osversion_name+' => '~~',
|
||||
]);
|
||||
@@ -1010,6 +995,8 @@ Dict::Add('HU HU', 'Hungarian', 'Magyar', [
|
||||
'Class:OSLicence/ComplementaryName' => '%1$s - %2$s~~',
|
||||
'Class:OSLicence/Attribute:osversion_id' => 'OS verzió',
|
||||
'Class:OSLicence/Attribute:osversion_id+' => '~~',
|
||||
'Class:OSLicence/Attribute:osfamily_id' => 'OS Family~~',
|
||||
'Class:OSLicence/Attribute:osfamily_id+' => '~~',
|
||||
'Class:OSLicence/Attribute:osversion_name' => 'OS verzió név',
|
||||
'Class:OSLicence/Attribute:osversion_name+' => '~~',
|
||||
'Class:OSLicence/Attribute:virtualmachines_list' => 'Virtuális gépek',
|
||||
|
||||
@@ -946,6 +946,8 @@ Dict::Add('IT IT', 'Italian', 'Italiano', [
|
||||
'Class:OSPatch/Attribute:functionalcis_list+' => 'Tutti i sistemi in cui questa patch è installata',
|
||||
'Class:OSPatch/Attribute:osversion_id' => 'Versione del Sistema Operativo',
|
||||
'Class:OSPatch/Attribute:osversion_id+' => '~~',
|
||||
'Class:OSPatch/Attribute:osfamily_id' => 'OS Family~~',
|
||||
'Class:OSPatch/Attribute:osfamily_id+' => '~~',
|
||||
'Class:OSPatch/Attribute:osversion_name' => 'Nome della Versione del Sistema Operativo',
|
||||
'Class:OSPatch/Attribute:osversion_name+' => '~~',
|
||||
]);
|
||||
@@ -1010,6 +1012,8 @@ Dict::Add('IT IT', 'Italian', 'Italiano', [
|
||||
'Class:OSLicence/ComplementaryName' => '%1$s - %2$s',
|
||||
'Class:OSLicence/Attribute:osversion_id' => 'Versione del sistema operativo',
|
||||
'Class:OSLicence/Attribute:osversion_id+' => '~~',
|
||||
'Class:OSLicence/Attribute:osfamily_id' => 'OS Family~~',
|
||||
'Class:OSLicence/Attribute:osfamily_id+' => '~~',
|
||||
'Class:OSLicence/Attribute:osversion_name' => 'Nome della versione del sistema operativo',
|
||||
'Class:OSLicence/Attribute:osversion_name+' => '~~',
|
||||
'Class:OSLicence/Attribute:virtualmachines_list' => 'Macchine virtuali',
|
||||
|
||||
@@ -946,6 +946,8 @@ Dict::Add('JA JP', 'Japanese', '日本語', [
|
||||
'Class:OSPatch/Attribute:functionalcis_list+' => 'All the systems where this patch is installed~~',
|
||||
'Class:OSPatch/Attribute:osversion_id' => 'OSバージョン',
|
||||
'Class:OSPatch/Attribute:osversion_id+' => '',
|
||||
'Class:OSPatch/Attribute:osfamily_id' => 'OS Family~~',
|
||||
'Class:OSPatch/Attribute:osfamily_id+' => '',
|
||||
'Class:OSPatch/Attribute:osversion_name' => 'OSバージョン名',
|
||||
'Class:OSPatch/Attribute:osversion_name+' => '',
|
||||
]);
|
||||
@@ -1010,6 +1012,8 @@ Dict::Add('JA JP', 'Japanese', '日本語', [
|
||||
'Class:OSLicence/ComplementaryName' => '%1$s - %2$s~~',
|
||||
'Class:OSLicence/Attribute:osversion_id' => 'OSバージョン',
|
||||
'Class:OSLicence/Attribute:osversion_id+' => '',
|
||||
'Class:OSLicence/Attribute:osfamily_id' => 'OS Family~~',
|
||||
'Class:OSLicence/Attribute:osfamily_id+' => '~~',
|
||||
'Class:OSLicence/Attribute:osversion_name' => 'OSバージョン名',
|
||||
'Class:OSLicence/Attribute:osversion_name+' => '',
|
||||
'Class:OSLicence/Attribute:virtualmachines_list' => '仮想マシン',
|
||||
|
||||
@@ -948,6 +948,8 @@ Dict::Add('NL NL', 'Dutch', 'Nederlands', [
|
||||
'Class:OSPatch/Attribute:functionalcis_list+' => 'Alle systemen waarop deze patch is geïnstalleerd',
|
||||
'Class:OSPatch/Attribute:osversion_id' => 'Versie besturingssysteem',
|
||||
'Class:OSPatch/Attribute:osversion_id+' => '',
|
||||
'Class:OSPatch/Attribute:osfamily_id' => 'Soort besturingssysteem',
|
||||
'Class:OSPatch/Attribute:osfamily_id+' => '',
|
||||
'Class:OSPatch/Attribute:osversion_name' => 'Naam versie besturingssysteem',
|
||||
'Class:OSPatch/Attribute:osversion_name+' => '',
|
||||
]);
|
||||
@@ -1012,6 +1014,8 @@ Dict::Add('NL NL', 'Dutch', 'Nederlands', [
|
||||
'Class:OSLicence/ComplementaryName' => '%1$s - %2$s',
|
||||
'Class:OSLicence/Attribute:osversion_id' => 'Versie besturingssysteem',
|
||||
'Class:OSLicence/Attribute:osversion_id+' => '',
|
||||
'Class:OSLicence/Attribute:osfamily_id' => 'Soort besturingssysteem',
|
||||
'Class:OSLicence/Attribute:osfamily_id+' => '~~',
|
||||
'Class:OSLicence/Attribute:osversion_name' => 'Naam versie bestandssysteem',
|
||||
'Class:OSLicence/Attribute:osversion_name+' => '',
|
||||
'Class:OSLicence/Attribute:virtualmachines_list' => 'Virtuele machines',
|
||||
|
||||
@@ -946,6 +946,8 @@ Dict::Add('PL PL', 'Polish', 'Polski', [
|
||||
'Class:OSPatch/Attribute:functionalcis_list+' => 'Wszystkie systemy, w których jest zainstalowana ta poprawka',
|
||||
'Class:OSPatch/Attribute:osversion_id' => 'Wersja OS',
|
||||
'Class:OSPatch/Attribute:osversion_id+' => '',
|
||||
'Class:OSPatch/Attribute:osfamily_id' => 'OS Family~~',
|
||||
'Class:OSPatch/Attribute:osfamily_id+' => '',
|
||||
'Class:OSPatch/Attribute:osversion_name' => 'Nazwa wersji OS',
|
||||
'Class:OSPatch/Attribute:osversion_name+' => '',
|
||||
]);
|
||||
@@ -1010,6 +1012,8 @@ Dict::Add('PL PL', 'Polish', 'Polski', [
|
||||
'Class:OSLicence/ComplementaryName' => '%1$s - %2$s',
|
||||
'Class:OSLicence/Attribute:osversion_id' => 'Wersja OS',
|
||||
'Class:OSLicence/Attribute:osversion_id+' => '',
|
||||
'Class:OSLicence/Attribute:osfamily_id' => 'OS Family~~',
|
||||
'Class:OSLicence/Attribute:osfamily_id+' => '~~',
|
||||
'Class:OSLicence/Attribute:osversion_name' => 'Nazwa wersji OS',
|
||||
'Class:OSLicence/Attribute:osversion_name+' => '',
|
||||
'Class:OSLicence/Attribute:virtualmachines_list' => 'Maszyny wirtualne',
|
||||
|
||||
@@ -946,6 +946,8 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', [
|
||||
'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:osfamily_id' => 'OS Family~~',
|
||||
'Class:OSPatch/Attribute:osfamily_id+' => '',
|
||||
'Class:OSPatch/Attribute:osversion_name' => 'Nome da versão do SO',
|
||||
'Class:OSPatch/Attribute:osversion_name+' => '',
|
||||
]);
|
||||
@@ -1010,6 +1012,8 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', [
|
||||
'Class:OSLicence/ComplementaryName' => '%1$s - %2$s~~',
|
||||
'Class:OSLicence/Attribute:osversion_id' => 'Versão do SO',
|
||||
'Class:OSLicence/Attribute:osversion_id+' => '',
|
||||
'Class:OSLicence/Attribute:osfamily_id' => 'OS Family~~',
|
||||
'Class:OSLicence/Attribute:osfamily_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 (VMs)',
|
||||
|
||||
@@ -947,6 +947,8 @@ Dict::Add('RU RU', 'Russian', 'Русский', [
|
||||
'Class:OSPatch/Attribute:functionalcis_list+' => 'Все системы, где установлен этот патч',
|
||||
'Class:OSPatch/Attribute:osversion_id' => 'Версия ОС',
|
||||
'Class:OSPatch/Attribute:osversion_id+' => '',
|
||||
'Class:OSPatch/Attribute:osfamily_id' => 'OS Family~~',
|
||||
'Class:OSPatch/Attribute:osfamily_id+' => '',
|
||||
'Class:OSPatch/Attribute:osversion_name' => 'Версия ОС',
|
||||
'Class:OSPatch/Attribute:osversion_name+' => '',
|
||||
]);
|
||||
@@ -1011,6 +1013,8 @@ Dict::Add('RU RU', 'Russian', 'Русский', [
|
||||
'Class:OSLicence/ComplementaryName' => '%1$s - %2$s~~',
|
||||
'Class:OSLicence/Attribute:osversion_id' => 'Версия ОС',
|
||||
'Class:OSLicence/Attribute:osversion_id+' => '',
|
||||
'Class:OSLicence/Attribute:osfamily_id' => 'OS Family~~',
|
||||
'Class:OSLicence/Attribute:osfamily_id+' => '~~',
|
||||
'Class:OSLicence/Attribute:osversion_name' => 'Версия ОС',
|
||||
'Class:OSLicence/Attribute:osversion_name+' => '',
|
||||
'Class:OSLicence/Attribute:virtualmachines_list' => 'Виртуальные машины',
|
||||
|
||||
@@ -946,6 +946,8 @@ Dict::Add('SK SK', 'Slovak', 'Slovenčina', [
|
||||
'Class:OSPatch/Attribute:functionalcis_list+' => 'All the systems where this patch is installed~~',
|
||||
'Class:OSPatch/Attribute:osversion_id' => 'Verzia OS',
|
||||
'Class:OSPatch/Attribute:osversion_id+' => '~~',
|
||||
'Class:OSPatch/Attribute:osfamily_id' => 'OS Family~~',
|
||||
'Class:OSPatch/Attribute:osfamily_id+' => '~~',
|
||||
'Class:OSPatch/Attribute:osversion_name' => 'Názov OS verzie',
|
||||
'Class:OSPatch/Attribute:osversion_name+' => '~~',
|
||||
]);
|
||||
@@ -1010,6 +1012,8 @@ Dict::Add('SK SK', 'Slovak', 'Slovenčina', [
|
||||
'Class:OSLicence/ComplementaryName' => '%1$s - %2$s~~',
|
||||
'Class:OSLicence/Attribute:osversion_id' => 'Verzia OS',
|
||||
'Class:OSLicence/Attribute:osversion_id+' => '~~',
|
||||
'Class:OSLicence/Attribute:osfamily_id' => 'OS Family~~',
|
||||
'Class:OSLicence/Attribute:osfamily_id+' => '~~',
|
||||
'Class:OSLicence/Attribute:osversion_name' => 'Názov OS verzie',
|
||||
'Class:OSLicence/Attribute:osversion_name+' => '~~',
|
||||
'Class:OSLicence/Attribute:virtualmachines_list' => 'Virtuálne zariadenia',
|
||||
|
||||
@@ -947,6 +947,8 @@ Dict::Add('TR TR', 'Turkish', 'Türkçe', [
|
||||
'Class:OSPatch/Attribute:functionalcis_list+' => 'Bu yamanın kurulduğu tüm sistemler',
|
||||
'Class:OSPatch/Attribute:osversion_id' => 'OS Sürümü',
|
||||
'Class:OSPatch/Attribute:osversion_id+' => '~~',
|
||||
'Class:OSPatch/Attribute:osfamily_id' => 'OS Family~~',
|
||||
'Class:OSPatch/Attribute:osfamily_id+' => '~~',
|
||||
'Class:OSPatch/Attribute:osversion_name' => 'OS Sürüm Adı',
|
||||
'Class:OSPatch/Attribute:osversion_name+' => '~~',
|
||||
]);
|
||||
@@ -1011,6 +1013,8 @@ Dict::Add('TR TR', 'Turkish', 'Türkçe', [
|
||||
'Class:OSLicence/ComplementaryName' => '%1$s - %2$s~~',
|
||||
'Class:OSLicence/Attribute:osversion_id' => 'OS Sürümü',
|
||||
'Class:OSLicence/Attribute:osversion_id+' => '~~',
|
||||
'Class:OSLicence/Attribute:osfamily_id' => 'OS Family~~',
|
||||
'Class:OSLicence/Attribute:osfamily_id+' => '~~',
|
||||
'Class:OSLicence/Attribute:osversion_name' => 'OS Sürüm Adı',
|
||||
'Class:OSLicence/Attribute:osversion_name+' => '~~',
|
||||
'Class:OSLicence/Attribute:virtualmachines_list' => 'Sanal Makineler',
|
||||
|
||||
@@ -963,6 +963,8 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', [
|
||||
'Class:OSPatch/Attribute:functionalcis_list+' => '已安装此补丁的所有系统',
|
||||
'Class:OSPatch/Attribute:osversion_id' => '操作系统版本',
|
||||
'Class:OSPatch/Attribute:osversion_id+' => '',
|
||||
'Class:OSPatch/Attribute:osfamily_id' => 'OS Family~~',
|
||||
'Class:OSPatch/Attribute:osfamily_id+' => '',
|
||||
'Class:OSPatch/Attribute:osversion_name' => '名称',
|
||||
'Class:OSPatch/Attribute:osversion_name+' => '',
|
||||
]);
|
||||
@@ -1027,6 +1029,8 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', [
|
||||
'Class:OSLicence/ComplementaryName' => '%1$s - %2$s',
|
||||
'Class:OSLicence/Attribute:osversion_id' => '操作系统版本',
|
||||
'Class:OSLicence/Attribute:osversion_id+' => '',
|
||||
'Class:OSLicence/Attribute:osfamily_id' => 'OS Family~~',
|
||||
'Class:OSLicence/Attribute:osfamily_id+' => '~~',
|
||||
'Class:OSLicence/Attribute:osversion_name' => '名称',
|
||||
'Class:OSLicence/Attribute:osversion_name+' => '',
|
||||
'Class:OSLicence/Attribute:virtualmachines_list' => '虚拟机',
|
||||
|
||||
@@ -0,0 +1,207 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
viewBox="0 0 48 48"
|
||||
width="240px"
|
||||
height="240px"
|
||||
version="1.1"
|
||||
id="svg8"
|
||||
sodipodi:docname="icons8-ios-version-software.svg"
|
||||
inkscape:version="1.4.3 (0d15f75042, 2025-12-25)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs8" />
|
||||
<sodipodi:namedview
|
||||
id="namedview8"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#000000"
|
||||
borderopacity="0.25"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
showguides="true"
|
||||
inkscape:zoom="4.7666667"
|
||||
inkscape:cx="64.405594"
|
||||
inkscape:cy="137.83217"
|
||||
inkscape:window-width="2560"
|
||||
inkscape:window-height="1360"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg8">
|
||||
<sodipodi:guide
|
||||
position="24.038024,7.4691871"
|
||||
orientation="1,0"
|
||||
id="guide8"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="17.329983,10.650049"
|
||||
orientation="0,-1"
|
||||
id="guide9"
|
||||
inkscape:locked="false" />
|
||||
</sodipodi:namedview>
|
||||
<linearGradient
|
||||
id="SVGID_1_"
|
||||
x1="23.855"
|
||||
x2="23.983"
|
||||
y1="4.908"
|
||||
y2="17.227"
|
||||
gradientUnits="userSpaceOnUse">
|
||||
<stop
|
||||
offset="0"
|
||||
stop-color="#7dd8f3"
|
||||
id="stop1" />
|
||||
<stop
|
||||
offset="1"
|
||||
stop-color="#45b0d0"
|
||||
id="stop2" />
|
||||
</linearGradient>
|
||||
<circle
|
||||
cx="24"
|
||||
cy="18.9"
|
||||
r="15"
|
||||
fill="url(#SVGID_1_)"
|
||||
id="circle2" />
|
||||
<linearGradient
|
||||
id="SVGID_2_"
|
||||
x1="18.175"
|
||||
x2="29.825"
|
||||
y1="19.021"
|
||||
y2="19.021"
|
||||
gradientUnits="userSpaceOnUse">
|
||||
<stop
|
||||
offset="0"
|
||||
stop-color="#3079d6"
|
||||
id="stop3" />
|
||||
<stop
|
||||
offset="1"
|
||||
stop-color="#297cd2"
|
||||
id="stop4" />
|
||||
</linearGradient>
|
||||
<circle
|
||||
cx="24"
|
||||
cy="19"
|
||||
r="5.8"
|
||||
fill="url(#SVGID_2_)"
|
||||
id="circle4" />
|
||||
<circle
|
||||
cx="24"
|
||||
cy="19"
|
||||
r="2.3"
|
||||
fill="#fff"
|
||||
id="circle5" />
|
||||
<path
|
||||
d="M9,18.9c0,8.3,6.7,15,15,15s15-6.7,15-15c0-0.3,0-0.6,0-0.9H9C9,18.3,9,18.6,9,18.9z"
|
||||
opacity=".05"
|
||||
id="path5" />
|
||||
<path
|
||||
d="M9,18.9c0,8.3,6.7,15,15,15s15-6.7,15-15c0-0.1,0-0.2,0-0.4H9C9,18.6,9,18.7,9,18.9z"
|
||||
opacity=".07"
|
||||
id="path6" />
|
||||
<linearGradient
|
||||
id="SVGID_3_"
|
||||
x1="16.786"
|
||||
x2="30.174"
|
||||
y1="-440.286"
|
||||
y2="-472.232"
|
||||
gradientTransform="matrix(1 0 0 -1 0 -426)"
|
||||
gradientUnits="userSpaceOnUse">
|
||||
<stop
|
||||
offset="0"
|
||||
stop-color="#eba84b"
|
||||
id="stop6" />
|
||||
<stop
|
||||
offset="1"
|
||||
stop-color="#d97218"
|
||||
id="stop7" />
|
||||
</linearGradient>
|
||||
<path
|
||||
fill="url(#SVGID_3_)"
|
||||
d="M41,44H7c-0.6,0-1-0.5-1-1V20c0-0.6,0.4-1,1-1h34c0.6,0,1,0.4,1,1v23C42,43.5,41.5,44,41,44z"
|
||||
id="path7" />
|
||||
<path
|
||||
fill="#633412"
|
||||
d="M20,23h8c0.6,0,1,0.4,1,1l0,0c0,0.6-0.4,1-1,1h-8c-0.6,0-1-0.4-1-1l0,0C19,23.4,19.4,23,20,23z"
|
||||
id="path8" />
|
||||
<g
|
||||
opacity="0.05"
|
||||
id="g4"
|
||||
style="display:inline"
|
||||
transform="matrix(0.71297721,0,0,0.71297721,5.7848117,15.025827)">
|
||||
<path
|
||||
d="m 23.884,17.895 c -1.408,-1.526 -3.274,-2.3 -5.546,-2.3 -2.431,0 -4.395,0.794 -5.838,2.359 -1.422,1.543 -2.144,3.607 -2.144,6.136 0,2.374 0.71,4.343 2.111,5.853 1.421,1.531 3.32,2.308 5.644,2.308 2.365,0 4.292,-0.787 5.727,-2.338 1.417,-1.53 2.136,-3.605 2.136,-6.168 0,-2.379 -0.703,-4.347 -2.09,-5.85 z m -3.309,9.273 c -0.599,0.699 -1.378,1.025 -2.454,1.025 -0.987,0 -1.729,-0.343 -2.333,-1.078 -0.636,-0.775 -0.959,-1.843 -0.959,-3.173 0,-1.334 0.332,-2.405 0.987,-3.185 0.629,-0.748 1.393,-1.097 2.404,-1.097 1.048,0 1.804,0.324 2.379,1.021 0.606,0.734 0.914,1.841 0.914,3.289 -0.001,1.396 -0.317,2.472 -0.938,3.198 z"
|
||||
id="path3" />
|
||||
<path
|
||||
d="m 36.615,25.494 v 0 c -0.241,-0.519 -0.571,-0.995 -0.981,-1.419 -0.387,-0.397 -0.834,-0.762 -1.331,-1.081 -0.472,-0.306 -0.967,-0.592 -1.542,-0.888 -0.464,-0.203 -0.873,-0.391 -1.229,-0.569 -0.305,-0.15 -0.564,-0.306 -0.771,-0.46 -0.144,-0.108 -0.249,-0.22 -0.313,-0.333 -0.042,-0.074 -0.065,-0.186 -0.065,-0.322 0,-0.162 0.039,-0.235 0.069,-0.276 0.085,-0.118 0.193,-0.212 0.338,-0.292 0.18,-0.1 0.394,-0.173 0.633,-0.22 0.286,-0.054 0.574,-0.081 0.858,-0.081 1.046,0 1.894,0.229 2.522,0.683 0.308,0.219 0.706,0.249 1.039,0.078 0.336,-0.173 0.544,-0.514 0.544,-0.891 v -2.324 c 0,-0.384 -0.213,-0.728 -0.557,-0.896 -0.826,-0.408 -2.031,-0.607 -3.687,-0.607 -0.733,0 -1.459,0.088 -2.159,0.262 -0.733,0.182 -1.4,0.466 -1.98,0.845 -0.613,0.397 -1.116,0.913 -1.496,1.532 -0.396,0.647 -0.596,1.407 -0.596,2.258 0,0.676 0.116,1.285 0.345,1.813 0.221,0.509 0.53,0.973 0.917,1.376 0.355,0.372 0.782,0.717 1.268,1.027 0.436,0.277 0.906,0.549 1.467,0.848 0.442,0.201 0.857,0.395 1.245,0.58 0.338,0.161 0.634,0.331 0.878,0.503 0.185,0.131 0.325,0.269 0.417,0.408 0.034,0.052 0.079,0.143 0.079,0.328 0,0.34 -0.116,0.488 -0.291,0.607 -0.214,0.146 -0.674,0.32 -1.646,0.32 -0.226,0 -0.48,-0.024 -0.755,-0.073 -0.292,-0.052 -0.586,-0.125 -0.874,-0.219 -0.286,-0.093 -0.554,-0.205 -0.798,-0.334 -0.223,-0.117 -0.415,-0.248 -0.57,-0.39 -0.295,-0.268 -0.72,-0.337 -1.077,-0.174 -0.361,0.16 -0.595,0.519 -0.595,0.914 v 2.423 c 0,0.345 0.174,0.661 0.466,0.846 0.274,0.173 0.618,0.323 1.019,0.445 0.357,0.11 0.737,0.203 1.134,0.279 0.393,0.076 0.778,0.133 1.147,0.17 0.388,0.041 0.715,0.061 0.981,0.061 0.784,0 1.538,-0.077 2.239,-0.23 0.751,-0.162 1.429,-0.433 2.017,-0.804 0.625,-0.394 1.131,-0.913 1.502,-1.546 0.382,-0.65 0.574,-1.432 0.574,-2.327 0,-0.677 -0.129,-1.3 -0.385,-1.85 z"
|
||||
id="path4" />
|
||||
</g>
|
||||
<g
|
||||
opacity="0.07"
|
||||
id="g6"
|
||||
style="display:inline"
|
||||
transform="matrix(0.71297721,0,0,0.71297721,5.7848117,15.025827)">
|
||||
<path
|
||||
d="m 18.338,16.095 c -2.285,0 -4.125,0.739 -5.47,2.198 -1.334,1.447 -2.011,3.397 -2.011,5.797 0,2.243 0.666,4.099 1.978,5.513 1.322,1.425 3.097,2.147 5.277,2.147 2.219,0 4.023,-0.732 5.36,-2.178 1.329,-1.435 2.003,-3.396 2.003,-5.828 0,-2.247 -0.658,-4.102 -1.958,-5.511 -1.31,-1.419 -3.052,-2.138 -5.179,-2.138 z m 3.674,7.877 c 0,1.518 -0.355,2.702 -1.057,3.521 -0.691,0.808 -1.618,1.2 -2.834,1.2 -1.133,0 -2.022,-0.412 -2.719,-1.261 -0.712,-0.867 -1.073,-2.041 -1.073,-3.49 0,-1.454 0.372,-2.635 1.104,-3.507 0.721,-0.857 1.633,-1.274 2.787,-1.274 1.192,0 2.096,0.394 2.764,1.203 0.682,0.826 1.028,2.04 1.028,3.608 z"
|
||||
id="path5-3" />
|
||||
<path
|
||||
d="m 36.162,25.704 c -0.217,-0.467 -0.515,-0.897 -0.886,-1.28 -0.361,-0.371 -0.78,-0.711 -1.244,-1.01 -0.448,-0.29 -0.933,-0.571 -1.471,-0.85 -0.473,-0.207 -0.889,-0.398 -1.25,-0.579 -0.334,-0.165 -0.621,-0.337 -0.85,-0.509 -0.198,-0.149 -0.348,-0.312 -0.446,-0.483 -0.087,-0.151 -0.131,-0.344 -0.131,-0.571 0,-0.23 0.053,-0.416 0.163,-0.568 0.128,-0.178 0.293,-0.321 0.503,-0.438 0.226,-0.124 0.489,-0.216 0.781,-0.272 0.316,-0.06 0.636,-0.09 0.951,-0.09 1.153,0 2.099,0.261 2.813,0.775 0.153,0.109 0.354,0.125 0.52,0.04 0.167,-0.086 0.272,-0.258 0.272,-0.445 V 17.1 c 0,-0.19 -0.108,-0.364 -0.278,-0.448 -0.755,-0.374 -1.889,-0.556 -3.465,-0.556 -0.692,0 -1.378,0.083 -2.039,0.247 -0.678,0.168 -1.293,0.43 -1.829,0.778 -0.551,0.357 -1.002,0.82 -1.341,1.374 -0.347,0.568 -0.523,1.24 -0.523,1.997 0,0.606 0.102,1.149 0.303,1.613 0.197,0.453 0.472,0.867 0.82,1.229 0.33,0.345 0.725,0.664 1.175,0.951 0.425,0.271 0.885,0.536 1.406,0.814 0.445,0.203 0.862,0.397 1.252,0.584 0.364,0.174 0.684,0.357 0.951,0.546 0.236,0.167 0.42,0.35 0.547,0.543 0.108,0.165 0.161,0.362 0.161,0.602 0,0.46 -0.162,0.784 -0.509,1.021 -0.396,0.271 -1.045,0.407 -1.928,0.407 -0.255,0 -0.539,-0.027 -0.842,-0.081 -0.313,-0.056 -0.631,-0.135 -0.941,-0.235 -0.312,-0.102 -0.606,-0.225 -0.876,-0.367 -0.26,-0.137 -0.486,-0.292 -0.673,-0.462 -0.146,-0.133 -0.357,-0.169 -0.539,-0.087 -0.181,0.08 -0.297,0.259 -0.297,0.457 v 2.423 c 0,0.172 0.088,0.331 0.233,0.423 0.235,0.148 0.539,0.28 0.901,0.391 0.34,0.105 0.702,0.193 1.081,0.266 0.377,0.073 0.748,0.128 1.105,0.164 0.367,0.039 0.676,0.058 0.929,0.058 0.747,0 1.465,-0.073 2.133,-0.219 0.693,-0.15 1.317,-0.398 1.856,-0.738 0.557,-0.351 1.007,-0.813 1.337,-1.376 0.334,-0.57 0.503,-1.269 0.503,-2.073 0,-0.607 -0.114,-1.158 -0.338,-1.642 z"
|
||||
id="path6-6" />
|
||||
</g>
|
||||
<path
|
||||
fill="#ffffff"
|
||||
d="m 18.697543,37.306366 c -1.457325,0 -2.624468,-0.47199 -3.500718,-1.417397 -0.876962,-0.944696 -1.315442,-2.173869 -1.315442,-3.68752 0,-1.6263 0.446322,-2.923206 1.339684,-3.891429 0.893359,-0.968223 2.106133,-1.452335 3.638321,-1.452335 1.419538,0 2.563153,0.469852 3.430135,1.41027 0.86698,0.940417 1.301182,2.168876 1.301182,3.687518 0,1.649829 -0.444183,2.954577 -1.332554,3.912818 -0.888368,0.958955 -2.075476,1.438075 -3.560608,1.438075 z m 0.077,-8.97567 c -0.926159,0 -1.679064,0.345081 -2.259426,1.035956 -0.581077,0.691588 -0.870545,1.600634 -0.870545,2.729278 0,1.123651 0.282338,2.027706 0.84559,2.714304 0.563967,0.686596 1.301898,1.029538 2.213795,1.029538 0.968223,0 1.731822,-0.326543 2.291509,-0.980343 0.558973,-0.653087 0.839174,-1.567837 0.839174,-2.74211 0,-1.208496 -0.271645,-2.141071 -0.81422,-2.799149 -0.543289,-0.658078 -1.291915,-0.987474 -2.245877,-0.987474 z"
|
||||
id="path7-7"
|
||||
style="display:inline;stroke-width:0.712977" />
|
||||
<path
|
||||
fill="#ffffff"
|
||||
d="m 24.979585,36.735273 v -1.727544 c 0.155429,0.140455 0.339378,0.268078 0.553271,0.380728 0.213893,0.112651 0.44062,0.207476 0.68018,0.285193 0.23956,0.07771 0.479833,0.137604 0.719394,0.179669 0.23956,0.04207 0.460584,0.06345 0.663069,0.06345 0.705134,0 1.230599,-0.117641 1.575678,-0.352923 0.345795,-0.235283 0.518337,-0.575373 0.518337,-1.02241 0,-0.240273 -0.05775,-0.447749 -0.172542,-0.623855 -0.115502,-0.176104 -0.276634,-0.337237 -0.482685,-0.482684 -0.206764,-0.146161 -0.449889,-0.285905 -0.730088,-0.419943 -0.280201,-0.134042 -0.579651,-0.27307 -0.899065,-0.419231 -0.342942,-0.183237 -0.662356,-0.369323 -0.958955,-0.556836 -0.295885,-0.188225 -0.553269,-0.396415 -0.772154,-0.623855 -0.218884,-0.228153 -0.389999,-0.485537 -0.514769,-0.772153 -0.124772,-0.286618 -0.186801,-0.623143 -0.186801,-1.008151 0,-0.474843 0.106947,-0.887656 0.320841,-1.237728 0.213893,-0.349359 0.496231,-0.63954 0.846304,-0.866981 0.350072,-0.228152 0.748626,-0.397128 1.19495,-0.50764 0.446322,-0.110511 0.902628,-0.16541 1.367489,-0.16541 1.057346,0 1.828075,0.11978 2.312185,0.35934 v 1.656959 c -0.573234,-0.413527 -1.311163,-0.620289 -2.213792,-0.620289 -0.24883,0 -0.496946,0.02352 -0.743637,0.07059 -0.246691,0.04706 -0.467713,0.124771 -0.663069,0.23243 -0.195357,0.108374 -0.353636,0.24669 -0.475555,0.416379 -0.122632,0.168976 -0.183236,0.372889 -0.183236,0.613161 0,0.225301 0.04706,0.421369 0.14117,0.585354 0.09411,0.164698 0.231718,0.315137 0.412101,0.451314 0.180383,0.136179 0.402119,0.268793 0.663069,0.397842 0.260949,0.129761 0.562538,0.268792 0.906193,0.419944 0.352211,0.183236 0.685171,0.375738 0.997456,0.578224 0.312997,0.201773 0.587493,0.425648 0.824914,0.669486 0.237423,0.244551 0.425647,0.516195 0.563966,0.81422 0.13903,0.29945 0.208189,0.638827 0.208189,1.019557 0,0.511918 -0.103382,0.944694 -0.310145,1.296906 -0.206765,0.352923 -0.485537,0.639541 -0.83561,0.860563 -0.35007,0.22031 -0.752904,0.38073 -1.209209,0.479121 -0.455593,0.0991 -0.937565,0.147585 -1.445206,0.147585 -0.169688,0 -0.377165,-0.01282 -0.623854,-0.0385 -0.24669,-0.02568 -0.499797,-0.06274 -0.757896,-0.112652 -0.258098,-0.04919 -0.502648,-0.109085 -0.73294,-0.179668 -0.231003,-0.06987 -0.416379,-0.150439 -0.557548,-0.239562 z"
|
||||
id="path8-5"
|
||||
style="display:inline;stroke-width:0.712977" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:7.01985px;writing-mode:lr-tb;direction:ltr;display:inline;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.61415;stroke-linejoin:round;stroke-miterlimit:0;stroke-dasharray:none;stroke-opacity:0.0516633;paint-order:stroke fill markers"
|
||||
x="29.674702"
|
||||
y="41.839462"
|
||||
id="text19"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan19"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.01985px;font-family:Futura-Medium;-inkscape-font-specification:Futura-Medium;stroke:#000000;stroke-width:0.61415;stroke-linejoin:round;stroke-miterlimit:0;stroke-dasharray:none;stroke-opacity:0.0516633;paint-order:stroke fill markers"
|
||||
x="29.674702"
|
||||
y="41.839462">x.y</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:7.01985px;writing-mode:lr-tb;direction:ltr;display:inline;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.14064;stroke-linejoin:round;stroke-miterlimit:0;stroke-dasharray:none;stroke-opacity:0.0516633;paint-order:stroke fill markers"
|
||||
x="29.675184"
|
||||
y="41.839504"
|
||||
id="text19-7"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan19-2"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.01985px;font-family:Futura-Medium;-inkscape-font-specification:Futura-Medium;stroke:#000000;stroke-width:1.14064;stroke-linejoin:round;stroke-miterlimit:0;stroke-dasharray:none;stroke-opacity:0.0516633;paint-order:stroke fill markers"
|
||||
x="29.675184"
|
||||
y="41.839504">x.y</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:13.8667px;writing-mode:lr-tb;direction:ltr;display:inline;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.61415;stroke-linejoin:round;stroke-miterlimit:0;stroke-dasharray:none;stroke-opacity:0.0516633;paint-order:stroke fill markers"
|
||||
x="9.1199589"
|
||||
y="37.324699"
|
||||
id="text19-5"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan19-6"
|
||||
style="font-style:normal;font-variant:normal;font-weight:600;font-stretch:normal;font-size:13.8667px;font-family:'Adwaita Sans';-inkscape-font-specification:'Adwaita Sans Semi-Bold';stroke:#000000;stroke-width:0.61415;stroke-linejoin:round;stroke-miterlimit:0;stroke-dasharray:none;stroke-opacity:0.0516633;paint-order:stroke fill markers"
|
||||
x="9.1199589"
|
||||
y="37.324699">I</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:13.8667px;writing-mode:lr-tb;direction:ltr;display:inline;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.14064;stroke-linejoin:round;stroke-miterlimit:0;stroke-dasharray:none;stroke-opacity:0.0516633;paint-order:stroke fill markers"
|
||||
x="9.1539106"
|
||||
y="37.267509"
|
||||
id="text19-7-2"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan19-2-9"
|
||||
style="font-style:normal;font-variant:normal;font-weight:600;font-stretch:normal;font-size:13.8667px;font-family:'Adwaita Sans';-inkscape-font-specification:'Adwaita Sans Semi-Bold';stroke:#000000;stroke-width:1.14064;stroke-linejoin:round;stroke-miterlimit:0;stroke-dasharray:none;stroke-opacity:0.0516633;paint-order:stroke fill markers"
|
||||
x="9.1539106"
|
||||
y="37.267509">I</tspan></text>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 15 KiB |
@@ -0,0 +1,158 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
viewBox="0 0 48 48"
|
||||
width="240px"
|
||||
height="240px"
|
||||
version="1.1"
|
||||
id="svg8"
|
||||
sodipodi:docname="icons8-os-family-software.svg"
|
||||
inkscape:version="1.4.3 (0d15f75042, 2025-12-25)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs8" />
|
||||
<sodipodi:namedview
|
||||
id="namedview8"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#000000"
|
||||
borderopacity="0.25"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
showguides="true"
|
||||
inkscape:zoom="4.7666667"
|
||||
inkscape:cx="91.993007"
|
||||
inkscape:cy="189.44056"
|
||||
inkscape:window-width="2560"
|
||||
inkscape:window-height="1360"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg8">
|
||||
<sodipodi:guide
|
||||
position="24.038024,7.4691871"
|
||||
orientation="1,0"
|
||||
id="guide8"
|
||||
inkscape:locked="false" />
|
||||
</sodipodi:namedview>
|
||||
<linearGradient
|
||||
id="SVGID_1_"
|
||||
x1="23.855"
|
||||
x2="23.983"
|
||||
y1="4.908"
|
||||
y2="17.227"
|
||||
gradientUnits="userSpaceOnUse">
|
||||
<stop
|
||||
offset="0"
|
||||
stop-color="#7dd8f3"
|
||||
id="stop1" />
|
||||
<stop
|
||||
offset="1"
|
||||
stop-color="#45b0d0"
|
||||
id="stop2" />
|
||||
</linearGradient>
|
||||
<circle
|
||||
cx="24"
|
||||
cy="18.9"
|
||||
r="15"
|
||||
fill="url(#SVGID_1_)"
|
||||
id="circle2" />
|
||||
<linearGradient
|
||||
id="SVGID_2_"
|
||||
x1="18.175"
|
||||
x2="29.825"
|
||||
y1="19.021"
|
||||
y2="19.021"
|
||||
gradientUnits="userSpaceOnUse">
|
||||
<stop
|
||||
offset="0"
|
||||
stop-color="#3079d6"
|
||||
id="stop3" />
|
||||
<stop
|
||||
offset="1"
|
||||
stop-color="#297cd2"
|
||||
id="stop4" />
|
||||
</linearGradient>
|
||||
<circle
|
||||
cx="24"
|
||||
cy="19"
|
||||
r="5.8"
|
||||
fill="url(#SVGID_2_)"
|
||||
id="circle4" />
|
||||
<circle
|
||||
cx="24"
|
||||
cy="19"
|
||||
r="2.3"
|
||||
fill="#fff"
|
||||
id="circle5" />
|
||||
<path
|
||||
d="M9,18.9c0,8.3,6.7,15,15,15s15-6.7,15-15c0-0.3,0-0.6,0-0.9H9C9,18.3,9,18.6,9,18.9z"
|
||||
opacity=".05"
|
||||
id="path5" />
|
||||
<path
|
||||
d="M9,18.9c0,8.3,6.7,15,15,15s15-6.7,15-15c0-0.1,0-0.2,0-0.4H9C9,18.6,9,18.7,9,18.9z"
|
||||
opacity=".07"
|
||||
id="path6" />
|
||||
<linearGradient
|
||||
id="SVGID_3_"
|
||||
x1="16.786"
|
||||
x2="30.174"
|
||||
y1="-440.286"
|
||||
y2="-472.232"
|
||||
gradientTransform="matrix(1 0 0 -1 0 -426)"
|
||||
gradientUnits="userSpaceOnUse">
|
||||
<stop
|
||||
offset="0"
|
||||
stop-color="#eba84b"
|
||||
id="stop6" />
|
||||
<stop
|
||||
offset="1"
|
||||
stop-color="#d97218"
|
||||
id="stop7" />
|
||||
</linearGradient>
|
||||
<path
|
||||
fill="url(#SVGID_3_)"
|
||||
d="M41,44H7c-0.6,0-1-0.5-1-1V20c0-0.6,0.4-1,1-1h34c0.6,0,1,0.4,1,1v23C42,43.5,41.5,44,41,44z"
|
||||
id="path7" />
|
||||
<path
|
||||
fill="#633412"
|
||||
d="M20,23h8c0.6,0,1,0.4,1,1l0,0c0,0.6-0.4,1-1,1h-8c-0.6,0-1-0.4-1-1l0,0C19,23.4,19.4,23,20,23z"
|
||||
id="path8" />
|
||||
<g
|
||||
opacity="0.05"
|
||||
id="g4"
|
||||
style="display:inline"
|
||||
transform="matrix(0.8851155,0,0,0.8851155,3.0134076,13.351562)">
|
||||
<path
|
||||
d="m 23.884,17.895 c -1.408,-1.526 -3.274,-2.3 -5.546,-2.3 -2.431,0 -4.395,0.794 -5.838,2.359 -1.422,1.543 -2.144,3.607 -2.144,6.136 0,2.374 0.71,4.343 2.111,5.853 1.421,1.531 3.32,2.308 5.644,2.308 2.365,0 4.292,-0.787 5.727,-2.338 1.417,-1.53 2.136,-3.605 2.136,-6.168 0,-2.379 -0.703,-4.347 -2.09,-5.85 z m -3.309,9.273 c -0.599,0.699 -1.378,1.025 -2.454,1.025 -0.987,0 -1.729,-0.343 -2.333,-1.078 -0.636,-0.775 -0.959,-1.843 -0.959,-3.173 0,-1.334 0.332,-2.405 0.987,-3.185 0.629,-0.748 1.393,-1.097 2.404,-1.097 1.048,0 1.804,0.324 2.379,1.021 0.606,0.734 0.914,1.841 0.914,3.289 -0.001,1.396 -0.317,2.472 -0.938,3.198 z"
|
||||
id="path3" />
|
||||
<path
|
||||
d="m 36.615,25.494 v 0 c -0.241,-0.519 -0.571,-0.995 -0.981,-1.419 -0.387,-0.397 -0.834,-0.762 -1.331,-1.081 -0.472,-0.306 -0.967,-0.592 -1.542,-0.888 -0.464,-0.203 -0.873,-0.391 -1.229,-0.569 -0.305,-0.15 -0.564,-0.306 -0.771,-0.46 -0.144,-0.108 -0.249,-0.22 -0.313,-0.333 -0.042,-0.074 -0.065,-0.186 -0.065,-0.322 0,-0.162 0.039,-0.235 0.069,-0.276 0.085,-0.118 0.193,-0.212 0.338,-0.292 0.18,-0.1 0.394,-0.173 0.633,-0.22 0.286,-0.054 0.574,-0.081 0.858,-0.081 1.046,0 1.894,0.229 2.522,0.683 0.308,0.219 0.706,0.249 1.039,0.078 0.336,-0.173 0.544,-0.514 0.544,-0.891 v -2.324 c 0,-0.384 -0.213,-0.728 -0.557,-0.896 -0.826,-0.408 -2.031,-0.607 -3.687,-0.607 -0.733,0 -1.459,0.088 -2.159,0.262 -0.733,0.182 -1.4,0.466 -1.98,0.845 -0.613,0.397 -1.116,0.913 -1.496,1.532 -0.396,0.647 -0.596,1.407 -0.596,2.258 0,0.676 0.116,1.285 0.345,1.813 0.221,0.509 0.53,0.973 0.917,1.376 0.355,0.372 0.782,0.717 1.268,1.027 0.436,0.277 0.906,0.549 1.467,0.848 0.442,0.201 0.857,0.395 1.245,0.58 0.338,0.161 0.634,0.331 0.878,0.503 0.185,0.131 0.325,0.269 0.417,0.408 0.034,0.052 0.079,0.143 0.079,0.328 0,0.34 -0.116,0.488 -0.291,0.607 -0.214,0.146 -0.674,0.32 -1.646,0.32 -0.226,0 -0.48,-0.024 -0.755,-0.073 -0.292,-0.052 -0.586,-0.125 -0.874,-0.219 -0.286,-0.093 -0.554,-0.205 -0.798,-0.334 -0.223,-0.117 -0.415,-0.248 -0.57,-0.39 -0.295,-0.268 -0.72,-0.337 -1.077,-0.174 -0.361,0.16 -0.595,0.519 -0.595,0.914 v 2.423 c 0,0.345 0.174,0.661 0.466,0.846 0.274,0.173 0.618,0.323 1.019,0.445 0.357,0.11 0.737,0.203 1.134,0.279 0.393,0.076 0.778,0.133 1.147,0.17 0.388,0.041 0.715,0.061 0.981,0.061 0.784,0 1.538,-0.077 2.239,-0.23 0.751,-0.162 1.429,-0.433 2.017,-0.804 0.625,-0.394 1.131,-0.913 1.502,-1.546 0.382,-0.65 0.574,-1.432 0.574,-2.327 0,-0.677 -0.129,-1.3 -0.385,-1.85 z"
|
||||
id="path4" />
|
||||
</g>
|
||||
<g
|
||||
opacity="0.07"
|
||||
id="g6"
|
||||
style="display:inline"
|
||||
transform="matrix(0.8851155,0,0,0.8851155,3.0134076,13.351562)">
|
||||
<path
|
||||
d="m 18.338,16.095 c -2.285,0 -4.125,0.739 -5.47,2.198 -1.334,1.447 -2.011,3.397 -2.011,5.797 0,2.243 0.666,4.099 1.978,5.513 1.322,1.425 3.097,2.147 5.277,2.147 2.219,0 4.023,-0.732 5.36,-2.178 1.329,-1.435 2.003,-3.396 2.003,-5.828 0,-2.247 -0.658,-4.102 -1.958,-5.511 -1.31,-1.419 -3.052,-2.138 -5.179,-2.138 z m 3.674,7.877 c 0,1.518 -0.355,2.702 -1.057,3.521 -0.691,0.808 -1.618,1.2 -2.834,1.2 -1.133,0 -2.022,-0.412 -2.719,-1.261 -0.712,-0.867 -1.073,-2.041 -1.073,-3.49 0,-1.454 0.372,-2.635 1.104,-3.507 0.721,-0.857 1.633,-1.274 2.787,-1.274 1.192,0 2.096,0.394 2.764,1.203 0.682,0.826 1.028,2.04 1.028,3.608 z"
|
||||
id="path5-3" />
|
||||
<path
|
||||
d="m 36.162,25.704 c -0.217,-0.467 -0.515,-0.897 -0.886,-1.28 -0.361,-0.371 -0.78,-0.711 -1.244,-1.01 -0.448,-0.29 -0.933,-0.571 -1.471,-0.85 -0.473,-0.207 -0.889,-0.398 -1.25,-0.579 -0.334,-0.165 -0.621,-0.337 -0.85,-0.509 -0.198,-0.149 -0.348,-0.312 -0.446,-0.483 -0.087,-0.151 -0.131,-0.344 -0.131,-0.571 0,-0.23 0.053,-0.416 0.163,-0.568 0.128,-0.178 0.293,-0.321 0.503,-0.438 0.226,-0.124 0.489,-0.216 0.781,-0.272 0.316,-0.06 0.636,-0.09 0.951,-0.09 1.153,0 2.099,0.261 2.813,0.775 0.153,0.109 0.354,0.125 0.52,0.04 0.167,-0.086 0.272,-0.258 0.272,-0.445 V 17.1 c 0,-0.19 -0.108,-0.364 -0.278,-0.448 -0.755,-0.374 -1.889,-0.556 -3.465,-0.556 -0.692,0 -1.378,0.083 -2.039,0.247 -0.678,0.168 -1.293,0.43 -1.829,0.778 -0.551,0.357 -1.002,0.82 -1.341,1.374 -0.347,0.568 -0.523,1.24 -0.523,1.997 0,0.606 0.102,1.149 0.303,1.613 0.197,0.453 0.472,0.867 0.82,1.229 0.33,0.345 0.725,0.664 1.175,0.951 0.425,0.271 0.885,0.536 1.406,0.814 0.445,0.203 0.862,0.397 1.252,0.584 0.364,0.174 0.684,0.357 0.951,0.546 0.236,0.167 0.42,0.35 0.547,0.543 0.108,0.165 0.161,0.362 0.161,0.602 0,0.46 -0.162,0.784 -0.509,1.021 -0.396,0.271 -1.045,0.407 -1.928,0.407 -0.255,0 -0.539,-0.027 -0.842,-0.081 -0.313,-0.056 -0.631,-0.135 -0.941,-0.235 -0.312,-0.102 -0.606,-0.225 -0.876,-0.367 -0.26,-0.137 -0.486,-0.292 -0.673,-0.462 -0.146,-0.133 -0.357,-0.169 -0.539,-0.087 -0.181,0.08 -0.297,0.259 -0.297,0.457 v 2.423 c 0,0.172 0.088,0.331 0.233,0.423 0.235,0.148 0.539,0.28 0.901,0.391 0.34,0.105 0.702,0.193 1.081,0.266 0.377,0.073 0.748,0.128 1.105,0.164 0.367,0.039 0.676,0.058 0.929,0.058 0.747,0 1.465,-0.073 2.133,-0.219 0.693,-0.15 1.317,-0.398 1.856,-0.738 0.557,-0.351 1.007,-0.813 1.337,-1.376 0.334,-0.57 0.503,-1.269 0.503,-2.073 0,-0.607 -0.114,-1.158 -0.338,-1.642 z"
|
||||
id="path6-6" />
|
||||
</g>
|
||||
<path
|
||||
fill="#ffffff"
|
||||
d="m 19.043737,41.011422 c -1.809176,0 -3.258109,-0.585946 -4.345917,-1.759608 -1.088692,-1.172779 -1.633038,-2.698718 -1.633038,-4.577819 0,-2.018948 0.554082,-3.628973 1.663133,-4.83096 1.109048,-1.201986 2.614629,-1.802981 4.516743,-1.802981 1.762265,0 3.18199,0.583292 4.258291,1.75076 1.076301,1.167467 1.615335,2.692521 1.615335,4.577817 0,2.048157 -0.551426,3.667918 -1.654281,4.857513 -1.102852,1.190482 -2.57657,1.785278 -4.420266,1.785278 z m 0.09559,-11.142718 c -1.149767,0 -2.08445,0.428395 -2.804933,1.286073 -0.721369,0.858562 -1.080726,1.987084 -1.080726,3.388222 0,1.394942 0.350506,2.517268 1.049747,3.369635 0.700128,0.852365 1.616222,1.278106 2.748285,1.278106 1.201986,0 2.149945,-0.405383 2.84476,-1.217034 0.69393,-0.810765 1.041782,-1.946368 1.041782,-3.404153 0,-1.500271 -0.33723,-2.658003 -1.010803,-3.474964 -0.674458,-0.816962 -1.603829,-1.225885 -2.788112,-1.225885 z"
|
||||
id="path7-7"
|
||||
style="display:inline;stroke-width:0.885115" />
|
||||
<path
|
||||
fill="#ffffff"
|
||||
d="m 26.842489,40.302446 v -2.144635 c 0.192955,0.174367 0.421316,0.332803 0.686851,0.47265 0.265534,0.139849 0.547001,0.257569 0.844399,0.354048 0.297399,0.09647 0.595683,0.170827 0.893082,0.223048 0.297398,0.05222 0.571785,0.07877 0.823158,0.07877 0.875379,0 1.527709,-0.146045 1.956104,-0.438132 0.429282,-0.292089 0.64348,-0.714289 0.64348,-1.269256 0,-0.298284 -0.07169,-0.555853 -0.214198,-0.774477 -0.14339,-0.218622 -0.343425,-0.418658 -0.599224,-0.599221 -0.256683,-0.181449 -0.558507,-0.354932 -0.906357,-0.521333 -0.347852,-0.166403 -0.719599,-0.338999 -1.116131,-0.520448 -0.425741,-0.227476 -0.822273,-0.458491 -1.190481,-0.691276 -0.367323,-0.233669 -0.686849,-0.492123 -0.95858,-0.774475 -0.271731,-0.283238 -0.484158,-0.602764 -0.639053,-0.95858 -0.154896,-0.355817 -0.231901,-0.773592 -0.231901,-1.251554 0,-0.589488 0.132768,-1.101969 0.398303,-1.53656 0.265535,-0.433707 0.616039,-0.793948 1.050632,-1.076301 0.434593,-0.283237 0.929371,-0.493009 1.483454,-0.630203 0.554081,-0.137192 1.120555,-0.205346 1.69765,-0.205346 1.312627,0 2.269438,0.148699 2.87043,0.446098 v 2.057009 c -0.711633,-0.513368 -1.627726,-0.77005 -2.748282,-0.77005 -0.308906,0 -0.616926,0.0292 -0.923177,0.08763 -0.306251,0.05843 -0.580635,0.154895 -0.823157,0.288547 -0.242523,0.134538 -0.439018,0.30625 -0.590372,0.516907 -0.15224,0.209773 -0.227476,0.462917 -0.227476,0.761201 0,0.279697 0.05842,0.523102 0.175254,0.726679 0.116836,0.204462 0.287663,0.391222 0.511597,0.560277 0.223934,0.169058 0.499205,0.33369 0.823157,0.493896 0.323952,0.16109 0.698356,0.333688 1.124982,0.521333 0.437247,0.227475 0.850596,0.466455 1.238277,0.717828 0.388566,0.250488 0.729335,0.528414 1.024077,0.831124 0.294746,0.303594 0.528414,0.640824 0.700128,1.010802 0.172597,0.371747 0.258454,0.793063 0.258454,1.265714 0,0.635514 -0.128343,1.172778 -0.385026,1.610026 -0.256684,0.438132 -0.602763,0.793949 -1.037356,1.068334 -0.43459,0.273501 -0.934681,0.472652 -1.501155,0.594798 -0.56559,0.123031 -1.163928,0.183218 -1.79413,0.183218 -0.210657,0 -0.468227,-0.01592 -0.774475,-0.0478 -0.30625,-0.03187 -0.620466,-0.07789 -0.940879,-0.139849 -0.320412,-0.06107 -0.624006,-0.135423 -0.909899,-0.223048 -0.286776,-0.08675 -0.516907,-0.18676 -0.69216,-0.297399 z"
|
||||
id="path8-5"
|
||||
style="display:inline;stroke-width:0.885115" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 11 KiB |
@@ -0,0 +1,180 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
viewBox="0 0 48 48"
|
||||
width="240px"
|
||||
height="240px"
|
||||
version="1.1"
|
||||
id="svg8"
|
||||
sodipodi:docname="icons8-os-version-software.svg"
|
||||
inkscape:version="1.4.3 (0d15f75042, 2025-12-25)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs8" />
|
||||
<sodipodi:namedview
|
||||
id="namedview8"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#000000"
|
||||
borderopacity="0.25"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
showguides="true"
|
||||
inkscape:zoom="3.3705423"
|
||||
inkscape:cx="-18.988042"
|
||||
inkscape:cy="175.04601"
|
||||
inkscape:window-width="2560"
|
||||
inkscape:window-height="1360"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg8">
|
||||
<sodipodi:guide
|
||||
position="24.038024,7.4691871"
|
||||
orientation="1,0"
|
||||
id="guide8"
|
||||
inkscape:locked="false" />
|
||||
</sodipodi:namedview>
|
||||
<linearGradient
|
||||
id="SVGID_1_"
|
||||
x1="23.855"
|
||||
x2="23.983"
|
||||
y1="4.908"
|
||||
y2="17.227"
|
||||
gradientUnits="userSpaceOnUse">
|
||||
<stop
|
||||
offset="0"
|
||||
stop-color="#7dd8f3"
|
||||
id="stop1" />
|
||||
<stop
|
||||
offset="1"
|
||||
stop-color="#45b0d0"
|
||||
id="stop2" />
|
||||
</linearGradient>
|
||||
<circle
|
||||
cx="24"
|
||||
cy="18.9"
|
||||
r="15"
|
||||
fill="url(#SVGID_1_)"
|
||||
id="circle2" />
|
||||
<linearGradient
|
||||
id="SVGID_2_"
|
||||
x1="18.175"
|
||||
x2="29.825"
|
||||
y1="19.021"
|
||||
y2="19.021"
|
||||
gradientUnits="userSpaceOnUse">
|
||||
<stop
|
||||
offset="0"
|
||||
stop-color="#3079d6"
|
||||
id="stop3" />
|
||||
<stop
|
||||
offset="1"
|
||||
stop-color="#297cd2"
|
||||
id="stop4" />
|
||||
</linearGradient>
|
||||
<circle
|
||||
cx="24"
|
||||
cy="19"
|
||||
r="5.8"
|
||||
fill="url(#SVGID_2_)"
|
||||
id="circle4" />
|
||||
<circle
|
||||
cx="24"
|
||||
cy="19"
|
||||
r="2.3"
|
||||
fill="#fff"
|
||||
id="circle5" />
|
||||
<path
|
||||
d="M9,18.9c0,8.3,6.7,15,15,15s15-6.7,15-15c0-0.3,0-0.6,0-0.9H9C9,18.3,9,18.6,9,18.9z"
|
||||
opacity=".05"
|
||||
id="path5" />
|
||||
<path
|
||||
d="M9,18.9c0,8.3,6.7,15,15,15s15-6.7,15-15c0-0.1,0-0.2,0-0.4H9C9,18.6,9,18.7,9,18.9z"
|
||||
opacity=".07"
|
||||
id="path6" />
|
||||
<linearGradient
|
||||
id="SVGID_3_"
|
||||
x1="16.786"
|
||||
x2="30.174"
|
||||
y1="-440.286"
|
||||
y2="-472.232"
|
||||
gradientTransform="matrix(1 0 0 -1 0 -426)"
|
||||
gradientUnits="userSpaceOnUse">
|
||||
<stop
|
||||
offset="0"
|
||||
stop-color="#eba84b"
|
||||
id="stop6" />
|
||||
<stop
|
||||
offset="1"
|
||||
stop-color="#d97218"
|
||||
id="stop7" />
|
||||
</linearGradient>
|
||||
<path
|
||||
fill="url(#SVGID_3_)"
|
||||
d="M41,44H7c-0.6,0-1-0.5-1-1V20c0-0.6,0.4-1,1-1h34c0.6,0,1,0.4,1,1v23C42,43.5,41.5,44,41,44z"
|
||||
id="path7" />
|
||||
<path
|
||||
fill="#633412"
|
||||
d="M20,23h8c0.6,0,1,0.4,1,1l0,0c0,0.6-0.4,1-1,1h-8c-0.6,0-1-0.4-1-1l0,0C19,23.4,19.4,23,20,23z"
|
||||
id="path8" />
|
||||
<g
|
||||
opacity="0.05"
|
||||
id="g4"
|
||||
style="display:inline"
|
||||
transform="matrix(0.71297721,0,0,0.71297721,5.7848117,15.025827)">
|
||||
<path
|
||||
d="m 23.884,17.895 c -1.408,-1.526 -3.274,-2.3 -5.546,-2.3 -2.431,0 -4.395,0.794 -5.838,2.359 -1.422,1.543 -2.144,3.607 -2.144,6.136 0,2.374 0.71,4.343 2.111,5.853 1.421,1.531 3.32,2.308 5.644,2.308 2.365,0 4.292,-0.787 5.727,-2.338 1.417,-1.53 2.136,-3.605 2.136,-6.168 0,-2.379 -0.703,-4.347 -2.09,-5.85 z m -3.309,9.273 c -0.599,0.699 -1.378,1.025 -2.454,1.025 -0.987,0 -1.729,-0.343 -2.333,-1.078 -0.636,-0.775 -0.959,-1.843 -0.959,-3.173 0,-1.334 0.332,-2.405 0.987,-3.185 0.629,-0.748 1.393,-1.097 2.404,-1.097 1.048,0 1.804,0.324 2.379,1.021 0.606,0.734 0.914,1.841 0.914,3.289 -0.001,1.396 -0.317,2.472 -0.938,3.198 z"
|
||||
id="path3" />
|
||||
<path
|
||||
d="m 36.615,25.494 v 0 c -0.241,-0.519 -0.571,-0.995 -0.981,-1.419 -0.387,-0.397 -0.834,-0.762 -1.331,-1.081 -0.472,-0.306 -0.967,-0.592 -1.542,-0.888 -0.464,-0.203 -0.873,-0.391 -1.229,-0.569 -0.305,-0.15 -0.564,-0.306 -0.771,-0.46 -0.144,-0.108 -0.249,-0.22 -0.313,-0.333 -0.042,-0.074 -0.065,-0.186 -0.065,-0.322 0,-0.162 0.039,-0.235 0.069,-0.276 0.085,-0.118 0.193,-0.212 0.338,-0.292 0.18,-0.1 0.394,-0.173 0.633,-0.22 0.286,-0.054 0.574,-0.081 0.858,-0.081 1.046,0 1.894,0.229 2.522,0.683 0.308,0.219 0.706,0.249 1.039,0.078 0.336,-0.173 0.544,-0.514 0.544,-0.891 v -2.324 c 0,-0.384 -0.213,-0.728 -0.557,-0.896 -0.826,-0.408 -2.031,-0.607 -3.687,-0.607 -0.733,0 -1.459,0.088 -2.159,0.262 -0.733,0.182 -1.4,0.466 -1.98,0.845 -0.613,0.397 -1.116,0.913 -1.496,1.532 -0.396,0.647 -0.596,1.407 -0.596,2.258 0,0.676 0.116,1.285 0.345,1.813 0.221,0.509 0.53,0.973 0.917,1.376 0.355,0.372 0.782,0.717 1.268,1.027 0.436,0.277 0.906,0.549 1.467,0.848 0.442,0.201 0.857,0.395 1.245,0.58 0.338,0.161 0.634,0.331 0.878,0.503 0.185,0.131 0.325,0.269 0.417,0.408 0.034,0.052 0.079,0.143 0.079,0.328 0,0.34 -0.116,0.488 -0.291,0.607 -0.214,0.146 -0.674,0.32 -1.646,0.32 -0.226,0 -0.48,-0.024 -0.755,-0.073 -0.292,-0.052 -0.586,-0.125 -0.874,-0.219 -0.286,-0.093 -0.554,-0.205 -0.798,-0.334 -0.223,-0.117 -0.415,-0.248 -0.57,-0.39 -0.295,-0.268 -0.72,-0.337 -1.077,-0.174 -0.361,0.16 -0.595,0.519 -0.595,0.914 v 2.423 c 0,0.345 0.174,0.661 0.466,0.846 0.274,0.173 0.618,0.323 1.019,0.445 0.357,0.11 0.737,0.203 1.134,0.279 0.393,0.076 0.778,0.133 1.147,0.17 0.388,0.041 0.715,0.061 0.981,0.061 0.784,0 1.538,-0.077 2.239,-0.23 0.751,-0.162 1.429,-0.433 2.017,-0.804 0.625,-0.394 1.131,-0.913 1.502,-1.546 0.382,-0.65 0.574,-1.432 0.574,-2.327 0,-0.677 -0.129,-1.3 -0.385,-1.85 z"
|
||||
id="path4" />
|
||||
</g>
|
||||
<g
|
||||
opacity="0.07"
|
||||
id="g6"
|
||||
style="display:inline"
|
||||
transform="matrix(0.71297721,0,0,0.71297721,5.7848117,15.025827)">
|
||||
<path
|
||||
d="m 18.338,16.095 c -2.285,0 -4.125,0.739 -5.47,2.198 -1.334,1.447 -2.011,3.397 -2.011,5.797 0,2.243 0.666,4.099 1.978,5.513 1.322,1.425 3.097,2.147 5.277,2.147 2.219,0 4.023,-0.732 5.36,-2.178 1.329,-1.435 2.003,-3.396 2.003,-5.828 0,-2.247 -0.658,-4.102 -1.958,-5.511 -1.31,-1.419 -3.052,-2.138 -5.179,-2.138 z m 3.674,7.877 c 0,1.518 -0.355,2.702 -1.057,3.521 -0.691,0.808 -1.618,1.2 -2.834,1.2 -1.133,0 -2.022,-0.412 -2.719,-1.261 -0.712,-0.867 -1.073,-2.041 -1.073,-3.49 0,-1.454 0.372,-2.635 1.104,-3.507 0.721,-0.857 1.633,-1.274 2.787,-1.274 1.192,0 2.096,0.394 2.764,1.203 0.682,0.826 1.028,2.04 1.028,3.608 z"
|
||||
id="path5-3" />
|
||||
<path
|
||||
d="m 36.162,25.704 c -0.217,-0.467 -0.515,-0.897 -0.886,-1.28 -0.361,-0.371 -0.78,-0.711 -1.244,-1.01 -0.448,-0.29 -0.933,-0.571 -1.471,-0.85 -0.473,-0.207 -0.889,-0.398 -1.25,-0.579 -0.334,-0.165 -0.621,-0.337 -0.85,-0.509 -0.198,-0.149 -0.348,-0.312 -0.446,-0.483 -0.087,-0.151 -0.131,-0.344 -0.131,-0.571 0,-0.23 0.053,-0.416 0.163,-0.568 0.128,-0.178 0.293,-0.321 0.503,-0.438 0.226,-0.124 0.489,-0.216 0.781,-0.272 0.316,-0.06 0.636,-0.09 0.951,-0.09 1.153,0 2.099,0.261 2.813,0.775 0.153,0.109 0.354,0.125 0.52,0.04 0.167,-0.086 0.272,-0.258 0.272,-0.445 V 17.1 c 0,-0.19 -0.108,-0.364 -0.278,-0.448 -0.755,-0.374 -1.889,-0.556 -3.465,-0.556 -0.692,0 -1.378,0.083 -2.039,0.247 -0.678,0.168 -1.293,0.43 -1.829,0.778 -0.551,0.357 -1.002,0.82 -1.341,1.374 -0.347,0.568 -0.523,1.24 -0.523,1.997 0,0.606 0.102,1.149 0.303,1.613 0.197,0.453 0.472,0.867 0.82,1.229 0.33,0.345 0.725,0.664 1.175,0.951 0.425,0.271 0.885,0.536 1.406,0.814 0.445,0.203 0.862,0.397 1.252,0.584 0.364,0.174 0.684,0.357 0.951,0.546 0.236,0.167 0.42,0.35 0.547,0.543 0.108,0.165 0.161,0.362 0.161,0.602 0,0.46 -0.162,0.784 -0.509,1.021 -0.396,0.271 -1.045,0.407 -1.928,0.407 -0.255,0 -0.539,-0.027 -0.842,-0.081 -0.313,-0.056 -0.631,-0.135 -0.941,-0.235 -0.312,-0.102 -0.606,-0.225 -0.876,-0.367 -0.26,-0.137 -0.486,-0.292 -0.673,-0.462 -0.146,-0.133 -0.357,-0.169 -0.539,-0.087 -0.181,0.08 -0.297,0.259 -0.297,0.457 v 2.423 c 0,0.172 0.088,0.331 0.233,0.423 0.235,0.148 0.539,0.28 0.901,0.391 0.34,0.105 0.702,0.193 1.081,0.266 0.377,0.073 0.748,0.128 1.105,0.164 0.367,0.039 0.676,0.058 0.929,0.058 0.747,0 1.465,-0.073 2.133,-0.219 0.693,-0.15 1.317,-0.398 1.856,-0.738 0.557,-0.351 1.007,-0.813 1.337,-1.376 0.334,-0.57 0.503,-1.269 0.503,-2.073 0,-0.607 -0.114,-1.158 -0.338,-1.642 z"
|
||||
id="path6-6" />
|
||||
</g>
|
||||
<path
|
||||
fill="#ffffff"
|
||||
d="m 18.697543,37.306366 c -1.457325,0 -2.624468,-0.47199 -3.500718,-1.417397 -0.876962,-0.944696 -1.315442,-2.173869 -1.315442,-3.68752 0,-1.6263 0.446322,-2.923206 1.339684,-3.891429 0.893359,-0.968223 2.106133,-1.452335 3.638321,-1.452335 1.419538,0 2.563153,0.469852 3.430135,1.41027 0.86698,0.940417 1.301182,2.168876 1.301182,3.687518 0,1.649829 -0.444183,2.954577 -1.332554,3.912818 -0.888368,0.958955 -2.075476,1.438075 -3.560608,1.438075 z m 0.077,-8.97567 c -0.926159,0 -1.679064,0.345081 -2.259426,1.035956 -0.581077,0.691588 -0.870545,1.600634 -0.870545,2.729278 0,1.123651 0.282338,2.027706 0.84559,2.714304 0.563967,0.686596 1.301898,1.029538 2.213795,1.029538 0.968223,0 1.731822,-0.326543 2.291509,-0.980343 0.558973,-0.653087 0.839174,-1.567837 0.839174,-2.74211 0,-1.208496 -0.271645,-2.141071 -0.81422,-2.799149 -0.543289,-0.658078 -1.291915,-0.987474 -2.245877,-0.987474 z"
|
||||
id="path7-7"
|
||||
style="display:inline;stroke-width:0.712977" />
|
||||
<path
|
||||
fill="#ffffff"
|
||||
d="m 24.979585,36.735273 v -1.727544 c 0.155429,0.140455 0.339378,0.268078 0.553271,0.380728 0.213893,0.112651 0.44062,0.207476 0.68018,0.285193 0.23956,0.07771 0.479833,0.137604 0.719394,0.179669 0.23956,0.04207 0.460584,0.06345 0.663069,0.06345 0.705134,0 1.230599,-0.117641 1.575678,-0.352923 0.345795,-0.235283 0.518337,-0.575373 0.518337,-1.02241 0,-0.240273 -0.05775,-0.447749 -0.172542,-0.623855 -0.115502,-0.176104 -0.276634,-0.337237 -0.482685,-0.482684 -0.206764,-0.146161 -0.449889,-0.285905 -0.730088,-0.419943 -0.280201,-0.134042 -0.579651,-0.27307 -0.899065,-0.419231 -0.342942,-0.183237 -0.662356,-0.369323 -0.958955,-0.556836 -0.295885,-0.188225 -0.553269,-0.396415 -0.772154,-0.623855 -0.218884,-0.228153 -0.389999,-0.485537 -0.514769,-0.772153 -0.124772,-0.286618 -0.186801,-0.623143 -0.186801,-1.008151 0,-0.474843 0.106947,-0.887656 0.320841,-1.237728 0.213893,-0.349359 0.496231,-0.63954 0.846304,-0.866981 0.350072,-0.228152 0.748626,-0.397128 1.19495,-0.50764 0.446322,-0.110511 0.902628,-0.16541 1.367489,-0.16541 1.057346,0 1.828075,0.11978 2.312185,0.35934 v 1.656959 c -0.573234,-0.413527 -1.311163,-0.620289 -2.213792,-0.620289 -0.24883,0 -0.496946,0.02352 -0.743637,0.07059 -0.246691,0.04706 -0.467713,0.124771 -0.663069,0.23243 -0.195357,0.108374 -0.353636,0.24669 -0.475555,0.416379 -0.122632,0.168976 -0.183236,0.372889 -0.183236,0.613161 0,0.225301 0.04706,0.421369 0.14117,0.585354 0.09411,0.164698 0.231718,0.315137 0.412101,0.451314 0.180383,0.136179 0.402119,0.268793 0.663069,0.397842 0.260949,0.129761 0.562538,0.268792 0.906193,0.419944 0.352211,0.183236 0.685171,0.375738 0.997456,0.578224 0.312997,0.201773 0.587493,0.425648 0.824914,0.669486 0.237423,0.244551 0.425647,0.516195 0.563966,0.81422 0.13903,0.29945 0.208189,0.638827 0.208189,1.019557 0,0.511918 -0.103382,0.944694 -0.310145,1.296906 -0.206765,0.352923 -0.485537,0.639541 -0.83561,0.860563 -0.35007,0.22031 -0.752904,0.38073 -1.209209,0.479121 -0.455593,0.0991 -0.937565,0.147585 -1.445206,0.147585 -0.169688,0 -0.377165,-0.01282 -0.623854,-0.0385 -0.24669,-0.02568 -0.499797,-0.06274 -0.757896,-0.112652 -0.258098,-0.04919 -0.502648,-0.109085 -0.73294,-0.179668 -0.231003,-0.06987 -0.416379,-0.150439 -0.557548,-0.239562 z"
|
||||
id="path8-5"
|
||||
style="display:inline;stroke-width:0.712977" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:7.01985px;writing-mode:lr-tb;direction:ltr;display:inline;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.61415;stroke-linejoin:round;stroke-miterlimit:0;stroke-dasharray:none;stroke-opacity:0.0516633;paint-order:stroke fill markers"
|
||||
x="29.674702"
|
||||
y="41.839462"
|
||||
id="text19"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan19"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.01985px;font-family:Futura-Medium;-inkscape-font-specification:Futura-Medium;stroke:#000000;stroke-width:0.61415;stroke-linejoin:round;stroke-miterlimit:0;stroke-dasharray:none;stroke-opacity:0.0516633;paint-order:stroke fill markers"
|
||||
x="29.674702"
|
||||
y="41.839462">x.y</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:7.01985px;writing-mode:lr-tb;direction:ltr;display:inline;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.14064;stroke-linejoin:round;stroke-miterlimit:0;stroke-dasharray:none;stroke-opacity:0.0516633;paint-order:stroke fill markers"
|
||||
x="29.675184"
|
||||
y="41.839504"
|
||||
id="text19-7"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan19-2"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.01985px;font-family:Futura-Medium;-inkscape-font-specification:Futura-Medium;stroke:#000000;stroke-width:1.14064;stroke-linejoin:round;stroke-miterlimit:0;stroke-dasharray:none;stroke-opacity:0.0516633;paint-order:stroke fill markers"
|
||||
x="29.675184"
|
||||
y="41.839504">x.y</tspan></text>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 13 KiB |
@@ -255,7 +255,7 @@
|
||||
</complementary_attributes>
|
||||
</naming>
|
||||
<style>
|
||||
<icon>../../images/icons/icons8-rack.svg</icon>
|
||||
<icon>../../images/icons/icons8-enclosure.svg</icon>
|
||||
</style>
|
||||
<reconciliation>
|
||||
<attributes>
|
||||
|
||||
402
images/icons/icons8-enclosure.svg
Normal file
402
images/icons/icons8-enclosure.svg
Normal file
@@ -0,0 +1,402 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
viewBox="0 0 48 48"
|
||||
width="240"
|
||||
height="240"
|
||||
version="1.1"
|
||||
id="svg23"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs23">
|
||||
<linearGradient
|
||||
xlink:href="#CUS1GTjxW93JoLSxxDmIFd"
|
||||
id="linearGradient24"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0,1.7895657,1.5991582,0,-13.182815,-25.608581)"
|
||||
x1="22.52"
|
||||
y1="46.992001"
|
||||
x2="30.243999"
|
||||
y2="7.164" />
|
||||
<linearGradient
|
||||
id="linearGradient26"
|
||||
x1="34"
|
||||
x2="34"
|
||||
y1="36.889999"
|
||||
y2="-43.611"
|
||||
gradientTransform="matrix(0.23509745,0,0,-0.01725654,-40.467326,-44.147807)"
|
||||
gradientUnits="userSpaceOnUse">
|
||||
<stop
|
||||
offset="0"
|
||||
stop-color="#737b80"
|
||||
id="stop6-3" />
|
||||
<stop
|
||||
offset=".473"
|
||||
stop-color="#686f74"
|
||||
id="stop7-6" />
|
||||
<stop
|
||||
offset="1"
|
||||
stop-color="#575c61"
|
||||
id="stop8-1" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
xlink:href="#CUS1GTjxW93JoLSxxDmIFc"
|
||||
id="linearGradient27"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.57713921,0,0,-1.1998834,3.037442,3.6530127)"
|
||||
x1="34"
|
||||
y1="36.889999"
|
||||
x2="34"
|
||||
y2="-43.611" />
|
||||
<linearGradient
|
||||
xlink:href="#linearGradient26"
|
||||
id="linearGradient28"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.60926825,0,0,-0.02832103,-55.217613,-43.960564)"
|
||||
x1="34"
|
||||
y1="36.889999"
|
||||
x2="34"
|
||||
y2="-43.611" />
|
||||
<linearGradient
|
||||
xlink:href="#linearGradient26"
|
||||
id="linearGradient31"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.60926825,0,0,-0.02832103,-57.137164,-43.960562)"
|
||||
x1="34"
|
||||
y1="36.889999"
|
||||
x2="34"
|
||||
y2="-43.611" />
|
||||
<linearGradient
|
||||
xlink:href="#linearGradient26"
|
||||
id="linearGradient33"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.60926825,0,0,-0.02832103,-55.217613,-43.960564)"
|
||||
x1="34"
|
||||
y1="36.889999"
|
||||
x2="34"
|
||||
y2="-43.611" />
|
||||
<linearGradient
|
||||
xlink:href="#linearGradient26"
|
||||
id="linearGradient34"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.60926825,0,0,-0.02832103,-57.137164,-43.960562)"
|
||||
x1="34"
|
||||
y1="36.889999"
|
||||
x2="34"
|
||||
y2="-43.611" />
|
||||
<linearGradient
|
||||
xlink:href="#linearGradient26"
|
||||
id="linearGradient35"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.60926825,0,0,-0.02832103,-55.217613,-43.960564)"
|
||||
x1="34"
|
||||
y1="36.889999"
|
||||
x2="34"
|
||||
y2="-43.611" />
|
||||
<linearGradient
|
||||
xlink:href="#linearGradient26"
|
||||
id="linearGradient36"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.60926825,0,0,-0.02832103,-57.137164,-43.960562)"
|
||||
x1="34"
|
||||
y1="36.889999"
|
||||
x2="34"
|
||||
y2="-43.611" />
|
||||
<linearGradient
|
||||
xlink:href="#linearGradient26"
|
||||
id="linearGradient37"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.60926825,0,0,-0.02832103,-55.217613,-43.960564)"
|
||||
x1="34"
|
||||
y1="36.889999"
|
||||
x2="34"
|
||||
y2="-43.611" />
|
||||
<linearGradient
|
||||
xlink:href="#linearGradient26"
|
||||
id="linearGradient38"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.60926825,0,0,-0.02832103,-57.137164,-43.960562)"
|
||||
x1="34"
|
||||
y1="36.889999"
|
||||
x2="34"
|
||||
y2="-43.611" />
|
||||
<linearGradient
|
||||
xlink:href="#CUS1GTjxW93JoLSxxDmIFc"
|
||||
id="linearGradient39"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.7032709,0,0,-1.2407066,-28.115337,4.6664811)"
|
||||
x1="34"
|
||||
y1="36.889999"
|
||||
x2="34"
|
||||
y2="-43.611" />
|
||||
</defs>
|
||||
<linearGradient
|
||||
id="CUS1GTjxW93JoLSxxDmIFa"
|
||||
x1="14.066"
|
||||
x2="34.933998"
|
||||
y1="43.514"
|
||||
y2="4.2659998"
|
||||
gradientTransform="matrix(0,0.401447,1.2405339,0,-4.6651188,13.785861)"
|
||||
gradientUnits="userSpaceOnUse">
|
||||
<stop
|
||||
offset="0"
|
||||
stop-color="#899198"
|
||||
id="stop1" />
|
||||
<stop
|
||||
offset="1"
|
||||
stop-color="#787e85"
|
||||
id="stop2" />
|
||||
</linearGradient>
|
||||
<g
|
||||
id="g31"
|
||||
transform="translate(0.63253916,-5.8066324)">
|
||||
<rect
|
||||
width="1.2185365"
|
||||
height="0.90627307"
|
||||
x="-35.111713"
|
||||
y="-45.090282"
|
||||
fill="url(#CUS1GTjxW93JoLSxxDmIFc)"
|
||||
id="rect8-5-0"
|
||||
style="fill:url(#linearGradient28);stroke-width:0.131358"
|
||||
transform="matrix(0,-1,-1,0,0,0)" />
|
||||
<rect
|
||||
width="1.2185365"
|
||||
height="0.90627307"
|
||||
x="-37.031265"
|
||||
y="-45.090282"
|
||||
fill="url(#CUS1GTjxW93JoLSxxDmIFc)"
|
||||
id="rect8-5-0-2"
|
||||
style="fill:url(#linearGradient31);stroke-width:0.131358"
|
||||
transform="matrix(0,-1,-1,0,0,0)" />
|
||||
</g>
|
||||
<g
|
||||
id="g31-6"
|
||||
transform="matrix(-1,0,0,1,49.318466,-5.81045)">
|
||||
<rect
|
||||
width="1.2185365"
|
||||
height="0.90627307"
|
||||
x="-35.111713"
|
||||
y="-45.090282"
|
||||
fill="url(#CUS1GTjxW93JoLSxxDmIFc)"
|
||||
id="rect8-5-0-4"
|
||||
style="fill:url(#linearGradient35);stroke-width:0.131358"
|
||||
transform="matrix(0,-1,-1,0,0,0)" />
|
||||
<rect
|
||||
width="1.2185365"
|
||||
height="0.90627307"
|
||||
x="-37.031265"
|
||||
y="-45.090282"
|
||||
fill="url(#CUS1GTjxW93JoLSxxDmIFc)"
|
||||
id="rect8-5-0-2-9"
|
||||
style="fill:url(#linearGradient36);stroke-width:0.131358"
|
||||
transform="matrix(0,-1,-1,0,0,0)" />
|
||||
</g>
|
||||
<g
|
||||
id="g31-4"
|
||||
transform="translate(0.66235463,-17.16045)">
|
||||
<rect
|
||||
width="1.2185365"
|
||||
height="0.90627307"
|
||||
x="-35.111713"
|
||||
y="-45.090282"
|
||||
fill="url(#CUS1GTjxW93JoLSxxDmIFc)"
|
||||
id="rect8-5-0-9"
|
||||
style="fill:url(#linearGradient33);stroke-width:0.131358"
|
||||
transform="matrix(0,-1,-1,0,0,0)" />
|
||||
<rect
|
||||
width="1.2185365"
|
||||
height="0.90627307"
|
||||
x="-37.031265"
|
||||
y="-45.090282"
|
||||
fill="url(#CUS1GTjxW93JoLSxxDmIFc)"
|
||||
id="rect8-5-0-2-2"
|
||||
style="fill:url(#linearGradient34);stroke-width:0.131358"
|
||||
transform="matrix(0,-1,-1,0,0,0)" />
|
||||
</g>
|
||||
<path
|
||||
fill="url(#CUS1GTjxW93JoLSxxDmIFa)"
|
||||
d="m 5.1281483,27.916098 -0.00687,-11.462496 c 0,0 0.6501327,-0.0035 2.2849319,-0.0044 l 34.7276738,-0.02019 c 2.055565,-0.0012 2.722533,0.0049 2.722533,0.0049 l -0.03664,13.81124 c -0.0018,0.665195 -1.666037,1.20434 -3.721602,1.20434 H 8.8442955 c -2.0555647,0 -3.7204953,-0.539145 -3.7216017,-1.20434 z"
|
||||
id="path2"
|
||||
style="fill:url(#CUS1GTjxW93JoLSxxDmIFa);stroke-width:0.705698" />
|
||||
<rect
|
||||
width="3.4065418"
|
||||
height="39.70261"
|
||||
x="28.092623"
|
||||
y="-44.825306"
|
||||
fill="url(#CUS1GTjxW93JoLSxxDmIFc)"
|
||||
id="rect8"
|
||||
style="fill:url(#linearGradient39);stroke-width:1.4537"
|
||||
transform="rotate(90)" />
|
||||
<linearGradient
|
||||
id="CUS1GTjxW93JoLSxxDmIFb"
|
||||
x1="39.122002"
|
||||
x2="40.195999"
|
||||
y1="14.451"
|
||||
y2="11.437"
|
||||
gradientTransform="matrix(0.66161808,0,0,-0.66161808,4.1427485,0.92148795)"
|
||||
gradientUnits="userSpaceOnUse">
|
||||
<stop
|
||||
offset="0"
|
||||
stop-color="#32bdef"
|
||||
id="stop4" />
|
||||
<stop
|
||||
offset="1"
|
||||
stop-color="#1ea2e4"
|
||||
id="stop5" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="CUS1GTjxW93JoLSxxDmIFc"
|
||||
x1="34"
|
||||
x2="34"
|
||||
y1="36.889999"
|
||||
y2="-43.611"
|
||||
gradientTransform="matrix(1.2405339,0,0,-1.2405339,-11.919537,4.6651188)"
|
||||
gradientUnits="userSpaceOnUse">
|
||||
<stop
|
||||
offset="0"
|
||||
stop-color="#737b80"
|
||||
id="stop6" />
|
||||
<stop
|
||||
offset=".473"
|
||||
stop-color="#686f74"
|
||||
id="stop7" />
|
||||
<stop
|
||||
offset="1"
|
||||
stop-color="#575c61"
|
||||
id="stop8" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="CUS1GTjxW93JoLSxxDmIFd"
|
||||
x1="22.52"
|
||||
x2="30.243999"
|
||||
y1="46.992001"
|
||||
y2="7.164"
|
||||
gradientTransform="matrix(0,1,1,0,0.61,-0.5)"
|
||||
gradientUnits="userSpaceOnUse">
|
||||
<stop
|
||||
offset="0"
|
||||
stop-color="#737b80"
|
||||
id="stop13" />
|
||||
<stop
|
||||
offset="0.47299999"
|
||||
stop-color="#686f74"
|
||||
id="stop14"
|
||||
style="stop-color:#5d6369;stop-opacity:1;" />
|
||||
<stop
|
||||
offset="1"
|
||||
stop-color="#575c61"
|
||||
id="stop15"
|
||||
style="stop-color:#3d4245;stop-opacity:1;" />
|
||||
</linearGradient>
|
||||
<path
|
||||
fill="url(#CUS1GTjxW93JoLSxxDmIFd)"
|
||||
d="m 5.8311761,26.28882 0.00301,-8.946303 c 0,0.0076 0.7134151,-0.0013 1.5961526,-0.0015 l 36.7768693,-0.0066 c 0,0 0.004,0.808324 0.0037,1.796165 l -0.0031,8.949926 c 0,0 -2.308668,-0.0021 -3.191405,-0.0021 H 5.8349475 c 0,0 -0.0041,-0.801726 -0.00377,-1.789566 z"
|
||||
id="path15-6"
|
||||
style="fill:url(#linearGradient24);stroke-width:1.69168" />
|
||||
<linearGradient
|
||||
id="CUS1GTjxW93JoLSxxDmIFe"
|
||||
x1="14.81"
|
||||
x2="22.533001"
|
||||
y1="45.495998"
|
||||
y2="5.6690001"
|
||||
gradientTransform="matrix(0,1,1,0,0.61,-0.5)"
|
||||
gradientUnits="userSpaceOnUse">
|
||||
<stop
|
||||
offset="0"
|
||||
stop-color="#737b80"
|
||||
id="stop16" />
|
||||
<stop
|
||||
offset=".473"
|
||||
stop-color="#686f74"
|
||||
id="stop17" />
|
||||
<stop
|
||||
offset="1"
|
||||
stop-color="#575c61"
|
||||
id="stop18" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="CUS1GTjxW93JoLSxxDmIFf"
|
||||
x1="7.0999999"
|
||||
x2="14.823"
|
||||
y1="44.000999"
|
||||
y2="4.1739998"
|
||||
gradientTransform="matrix(0,1,1,0,0.61,-0.5)"
|
||||
gradientUnits="userSpaceOnUse">
|
||||
<stop
|
||||
offset="0"
|
||||
stop-color="#737b80"
|
||||
id="stop19" />
|
||||
<stop
|
||||
offset=".473"
|
||||
stop-color="#686f74"
|
||||
id="stop20" />
|
||||
<stop
|
||||
offset="1"
|
||||
stop-color="#575c61"
|
||||
id="stop21" />
|
||||
</linearGradient>
|
||||
<circle
|
||||
cx="25.687666"
|
||||
cy="-36.850342"
|
||||
fill="#575c61"
|
||||
id="circle22"
|
||||
r="1.2633328"
|
||||
transform="rotate(90)"
|
||||
style="stroke-width:0.842219" />
|
||||
<rect
|
||||
width="1.1542784"
|
||||
height="38.396271"
|
||||
x="22.083042"
|
||||
y="-44.210339"
|
||||
fill="url(#CUS1GTjxW93JoLSxxDmIFc)"
|
||||
id="rect8-9"
|
||||
style="fill:url(#linearGradient27);stroke-width:0.832164"
|
||||
transform="rotate(90)" />
|
||||
<circle
|
||||
cx="25.6982"
|
||||
cy="-40.617649"
|
||||
fill="#575c61"
|
||||
id="circle23"
|
||||
r="1.2633328"
|
||||
transform="rotate(90)"
|
||||
style="stroke-width:0.842219" />
|
||||
<circle
|
||||
cx="19.757195"
|
||||
cy="-36.848789"
|
||||
fill="#575c61"
|
||||
id="circle22-1"
|
||||
r="1.2633322"
|
||||
transform="rotate(90)"
|
||||
style="stroke-width:0.842219" />
|
||||
<circle
|
||||
cx="19.767731"
|
||||
cy="-40.616096"
|
||||
fill="#575c61"
|
||||
id="circle23-9"
|
||||
r="1.2633322"
|
||||
transform="rotate(90)"
|
||||
style="stroke-width:0.842219" />
|
||||
<g
|
||||
id="g31-7"
|
||||
transform="matrix(-1,0,0,1,49.311174,-17.162291)">
|
||||
<rect
|
||||
width="1.2185365"
|
||||
height="0.90627307"
|
||||
x="-35.111713"
|
||||
y="-45.090282"
|
||||
fill="url(#CUS1GTjxW93JoLSxxDmIFc)"
|
||||
id="rect8-5-0-27"
|
||||
style="fill:url(#linearGradient37);stroke-width:0.131358"
|
||||
transform="matrix(0,-1,-1,0,0,0)" />
|
||||
<rect
|
||||
width="1.2185365"
|
||||
height="0.90627307"
|
||||
x="-37.031265"
|
||||
y="-45.090282"
|
||||
fill="url(#CUS1GTjxW93JoLSxxDmIFc)"
|
||||
id="rect8-5-0-2-22"
|
||||
style="fill:url(#linearGradient38);stroke-width:0.131358"
|
||||
transform="matrix(0,-1,-1,0,0,0)" />
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 11 KiB |
31
lib/autoload_runtime.php
Normal file
31
lib/autoload_runtime.php
Normal file
@@ -0,0 +1,31 @@
|
||||
<?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()
|
||||
);
|
||||
@@ -960,6 +960,7 @@ return array(
|
||||
'IntervalExpression' => $baseDir . '/core/oql/expression.class.inc.php',
|
||||
'IntervalOqlExpression' => $baseDir . '/core/oql/oqlquery.class.inc.php',
|
||||
'IntlDateFormatter' => $vendorDir . '/symfony/polyfill-intl-icu/Resources/stubs/IntlDateFormatter.php',
|
||||
'IntlListFormatter' => $vendorDir . '/symfony/polyfill-intl-icu/Resources/stubs/IntlListFormatter.php',
|
||||
'Introspection' => $baseDir . '/core/introspection.class.inc.php',
|
||||
'InvalidConfigParamException' => $baseDir . '/application/exceptions/InvalidConfigParamException.php',
|
||||
'InvalidExternalKeyValueException' => $baseDir . '/application/exceptions/InvalidExternalKeyValueException.php',
|
||||
@@ -1606,6 +1607,11 @@ 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',
|
||||
@@ -1809,6 +1815,7 @@ return array(
|
||||
'Symfony\\Component\\Cache\\Traits\\Relay\\Relay121Trait' => $vendorDir . '/symfony/cache/Traits/Relay/Relay121Trait.php',
|
||||
'Symfony\\Component\\Cache\\Traits\\Relay\\Relay12Trait' => $vendorDir . '/symfony/cache/Traits/Relay/Relay12Trait.php',
|
||||
'Symfony\\Component\\Cache\\Traits\\Relay\\Relay20Trait' => $vendorDir . '/symfony/cache/Traits/Relay/Relay20Trait.php',
|
||||
'Symfony\\Component\\Cache\\Traits\\Relay\\Relay21Trait' => $vendorDir . '/symfony/cache/Traits/Relay/Relay21Trait.php',
|
||||
'Symfony\\Component\\Cache\\Traits\\Relay\\SwapdbTrait' => $vendorDir . '/symfony/cache/Traits/Relay/SwapdbTrait.php',
|
||||
'Symfony\\Component\\Config\\Builder\\ClassBuilder' => $vendorDir . '/symfony/config/Builder/ClassBuilder.php',
|
||||
'Symfony\\Component\\Config\\Builder\\ConfigBuilderGenerator' => $vendorDir . '/symfony/config/Builder/ConfigBuilderGenerator.php',
|
||||
@@ -2257,6 +2264,7 @@ return array(
|
||||
'Symfony\\Component\\Dotenv\\Exception\\FormatException' => $vendorDir . '/symfony/dotenv/Exception/FormatException.php',
|
||||
'Symfony\\Component\\Dotenv\\Exception\\FormatExceptionContext' => $vendorDir . '/symfony/dotenv/Exception/FormatExceptionContext.php',
|
||||
'Symfony\\Component\\Dotenv\\Exception\\PathException' => $vendorDir . '/symfony/dotenv/Exception/PathException.php',
|
||||
'Symfony\\Component\\Dotenv\\Exception\\VariableCircularReferenceException' => $vendorDir . '/symfony/dotenv/Exception/VariableCircularReferenceException.php',
|
||||
'Symfony\\Component\\ErrorHandler\\BufferingLogger' => $vendorDir . '/symfony/error-handler/BufferingLogger.php',
|
||||
'Symfony\\Component\\ErrorHandler\\Debug' => $vendorDir . '/symfony/error-handler/Debug.php',
|
||||
'Symfony\\Component\\ErrorHandler\\DebugClassLoader' => $vendorDir . '/symfony/error-handler/DebugClassLoader.php',
|
||||
@@ -3074,6 +3082,21 @@ 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',
|
||||
@@ -3565,6 +3588,7 @@ return array(
|
||||
'Symfony\\Polyfill\\Intl\\Icu\\Exception\\RuntimeException' => $vendorDir . '/symfony/polyfill-intl-icu/Exception/RuntimeException.php',
|
||||
'Symfony\\Polyfill\\Intl\\Icu\\Icu' => $vendorDir . '/symfony/polyfill-intl-icu/Icu.php',
|
||||
'Symfony\\Polyfill\\Intl\\Icu\\IntlDateFormatter' => $vendorDir . '/symfony/polyfill-intl-icu/IntlDateFormatter.php',
|
||||
'Symfony\\Polyfill\\Intl\\Icu\\IntlListFormatter' => $vendorDir . '/symfony/polyfill-intl-icu/IntlListFormatter.php',
|
||||
'Symfony\\Polyfill\\Intl\\Icu\\Locale' => $vendorDir . '/symfony/polyfill-intl-icu/Locale.php',
|
||||
'Symfony\\Polyfill\\Intl\\Icu\\NumberFormatter' => $vendorDir . '/symfony/polyfill-intl-icu/NumberFormatter.php',
|
||||
'Symfony\\Polyfill\\Intl\\Idn\\Idn' => $vendorDir . '/symfony/polyfill-intl-idn/Idn.php',
|
||||
@@ -3574,6 +3598,13 @@ 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',
|
||||
|
||||
@@ -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',
|
||||
'e69f7f6ee287b969198c3c9d6777bd38' => $vendorDir . '/symfony/polyfill-intl-normalizer/bootstrap.php',
|
||||
'667aeda72477189d0494fecd327c3641' => $vendorDir . '/symfony/var-dumper/Resources/functions/dump.php',
|
||||
'e69f7f6ee287b969198c3c9d6777bd38' => $vendorDir . '/symfony/polyfill-intl-normalizer/bootstrap.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',
|
||||
|
||||
@@ -8,6 +8,7 @@ $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'),
|
||||
@@ -27,6 +28,7 @@ return array(
|
||||
'Symfony\\Component\\Stopwatch\\' => array($vendorDir . '/symfony/stopwatch'),
|
||||
'Symfony\\Component\\Security\\Csrf\\' => array($vendorDir . '/symfony/security-csrf'),
|
||||
'Symfony\\Component\\Security\\Core\\' => array($vendorDir . '/symfony/security-core'),
|
||||
'Symfony\\Component\\Runtime\\' => array($vendorDir . '/symfony/runtime'),
|
||||
'Symfony\\Component\\Routing\\' => array($vendorDir . '/symfony/routing'),
|
||||
'Symfony\\Component\\PropertyInfo\\' => array($vendorDir . '/symfony/property-info'),
|
||||
'Symfony\\Component\\PropertyAccess\\' => array($vendorDir . '/symfony/property-access'),
|
||||
@@ -50,6 +52,7 @@ 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'),
|
||||
|
||||
@@ -11,8 +11,8 @@ class ComposerStaticInitfc0e9e9dea11dcbb6272414776c30685
|
||||
'0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => __DIR__ . '/..' . '/symfony/polyfill-mbstring/bootstrap.php',
|
||||
'320cde22f66dd4f5d3fd621d3e88b98f' => __DIR__ . '/..' . '/symfony/polyfill-ctype/bootstrap.php',
|
||||
'662a729f963d39afe703c9d9b7ab4a8c' => __DIR__ . '/..' . '/symfony/polyfill-php83/bootstrap.php',
|
||||
'e69f7f6ee287b969198c3c9d6777bd38' => __DIR__ . '/..' . '/symfony/polyfill-intl-normalizer/bootstrap.php',
|
||||
'667aeda72477189d0494fecd327c3641' => __DIR__ . '/..' . '/symfony/var-dumper/Resources/functions/dump.php',
|
||||
'e69f7f6ee287b969198c3c9d6777bd38' => __DIR__ . '/..' . '/symfony/polyfill-intl-normalizer/bootstrap.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,6 +35,7 @@ class ComposerStaticInitfc0e9e9dea11dcbb6272414776c30685
|
||||
),
|
||||
'S' =>
|
||||
array (
|
||||
'Symfony\\Runtime\\Symfony\\Component\\' => 34,
|
||||
'Symfony\\Polyfill\\Php83\\' => 23,
|
||||
'Symfony\\Polyfill\\Mbstring\\' => 26,
|
||||
'Symfony\\Polyfill\\Intl\\Normalizer\\' => 33,
|
||||
@@ -54,6 +55,7 @@ class ComposerStaticInitfc0e9e9dea11dcbb6272414776c30685
|
||||
'Symfony\\Component\\Stopwatch\\' => 28,
|
||||
'Symfony\\Component\\Security\\Csrf\\' => 32,
|
||||
'Symfony\\Component\\Security\\Core\\' => 32,
|
||||
'Symfony\\Component\\Runtime\\' => 26,
|
||||
'Symfony\\Component\\Routing\\' => 26,
|
||||
'Symfony\\Component\\PropertyInfo\\' => 31,
|
||||
'Symfony\\Component\\PropertyAccess\\' => 33,
|
||||
@@ -77,6 +79,7 @@ class ComposerStaticInitfc0e9e9dea11dcbb6272414776c30685
|
||||
'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,
|
||||
@@ -126,6 +129,10 @@ class ComposerStaticInitfc0e9e9dea11dcbb6272414776c30685
|
||||
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',
|
||||
@@ -202,6 +209,10 @@ class ComposerStaticInitfc0e9e9dea11dcbb6272414776c30685
|
||||
array (
|
||||
0 => __DIR__ . '/..' . '/symfony/security-core',
|
||||
),
|
||||
'Symfony\\Component\\Runtime\\' =>
|
||||
array (
|
||||
0 => __DIR__ . '/..' . '/symfony/runtime',
|
||||
),
|
||||
'Symfony\\Component\\Routing\\' =>
|
||||
array (
|
||||
0 => __DIR__ . '/..' . '/symfony/routing',
|
||||
@@ -294,6 +305,10 @@ class ComposerStaticInitfc0e9e9dea11dcbb6272414776c30685
|
||||
array (
|
||||
0 => __DIR__ . '/..' . '/symfony/framework-bundle',
|
||||
),
|
||||
'Symfony\\Bundle\\DebugBundle\\' =>
|
||||
array (
|
||||
0 => __DIR__ . '/..' . '/symfony/debug-bundle',
|
||||
),
|
||||
'Symfony\\Bridge\\Twig\\' =>
|
||||
array (
|
||||
0 => __DIR__ . '/..' . '/symfony/twig-bridge',
|
||||
@@ -1346,6 +1361,7 @@ class ComposerStaticInitfc0e9e9dea11dcbb6272414776c30685
|
||||
'IntervalExpression' => __DIR__ . '/../..' . '/core/oql/expression.class.inc.php',
|
||||
'IntervalOqlExpression' => __DIR__ . '/../..' . '/core/oql/oqlquery.class.inc.php',
|
||||
'IntlDateFormatter' => __DIR__ . '/..' . '/symfony/polyfill-intl-icu/Resources/stubs/IntlDateFormatter.php',
|
||||
'IntlListFormatter' => __DIR__ . '/..' . '/symfony/polyfill-intl-icu/Resources/stubs/IntlListFormatter.php',
|
||||
'Introspection' => __DIR__ . '/../..' . '/core/introspection.class.inc.php',
|
||||
'InvalidConfigParamException' => __DIR__ . '/../..' . '/application/exceptions/InvalidConfigParamException.php',
|
||||
'InvalidExternalKeyValueException' => __DIR__ . '/../..' . '/application/exceptions/InvalidExternalKeyValueException.php',
|
||||
@@ -1992,6 +2008,11 @@ class ComposerStaticInitfc0e9e9dea11dcbb6272414776c30685
|
||||
'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',
|
||||
@@ -2195,6 +2216,7 @@ class ComposerStaticInitfc0e9e9dea11dcbb6272414776c30685
|
||||
'Symfony\\Component\\Cache\\Traits\\Relay\\Relay121Trait' => __DIR__ . '/..' . '/symfony/cache/Traits/Relay/Relay121Trait.php',
|
||||
'Symfony\\Component\\Cache\\Traits\\Relay\\Relay12Trait' => __DIR__ . '/..' . '/symfony/cache/Traits/Relay/Relay12Trait.php',
|
||||
'Symfony\\Component\\Cache\\Traits\\Relay\\Relay20Trait' => __DIR__ . '/..' . '/symfony/cache/Traits/Relay/Relay20Trait.php',
|
||||
'Symfony\\Component\\Cache\\Traits\\Relay\\Relay21Trait' => __DIR__ . '/..' . '/symfony/cache/Traits/Relay/Relay21Trait.php',
|
||||
'Symfony\\Component\\Cache\\Traits\\Relay\\SwapdbTrait' => __DIR__ . '/..' . '/symfony/cache/Traits/Relay/SwapdbTrait.php',
|
||||
'Symfony\\Component\\Config\\Builder\\ClassBuilder' => __DIR__ . '/..' . '/symfony/config/Builder/ClassBuilder.php',
|
||||
'Symfony\\Component\\Config\\Builder\\ConfigBuilderGenerator' => __DIR__ . '/..' . '/symfony/config/Builder/ConfigBuilderGenerator.php',
|
||||
@@ -2643,6 +2665,7 @@ class ComposerStaticInitfc0e9e9dea11dcbb6272414776c30685
|
||||
'Symfony\\Component\\Dotenv\\Exception\\FormatException' => __DIR__ . '/..' . '/symfony/dotenv/Exception/FormatException.php',
|
||||
'Symfony\\Component\\Dotenv\\Exception\\FormatExceptionContext' => __DIR__ . '/..' . '/symfony/dotenv/Exception/FormatExceptionContext.php',
|
||||
'Symfony\\Component\\Dotenv\\Exception\\PathException' => __DIR__ . '/..' . '/symfony/dotenv/Exception/PathException.php',
|
||||
'Symfony\\Component\\Dotenv\\Exception\\VariableCircularReferenceException' => __DIR__ . '/..' . '/symfony/dotenv/Exception/VariableCircularReferenceException.php',
|
||||
'Symfony\\Component\\ErrorHandler\\BufferingLogger' => __DIR__ . '/..' . '/symfony/error-handler/BufferingLogger.php',
|
||||
'Symfony\\Component\\ErrorHandler\\Debug' => __DIR__ . '/..' . '/symfony/error-handler/Debug.php',
|
||||
'Symfony\\Component\\ErrorHandler\\DebugClassLoader' => __DIR__ . '/..' . '/symfony/error-handler/DebugClassLoader.php',
|
||||
@@ -3460,6 +3483,21 @@ class ComposerStaticInitfc0e9e9dea11dcbb6272414776c30685
|
||||
'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',
|
||||
@@ -3951,6 +3989,7 @@ class ComposerStaticInitfc0e9e9dea11dcbb6272414776c30685
|
||||
'Symfony\\Polyfill\\Intl\\Icu\\Exception\\RuntimeException' => __DIR__ . '/..' . '/symfony/polyfill-intl-icu/Exception/RuntimeException.php',
|
||||
'Symfony\\Polyfill\\Intl\\Icu\\Icu' => __DIR__ . '/..' . '/symfony/polyfill-intl-icu/Icu.php',
|
||||
'Symfony\\Polyfill\\Intl\\Icu\\IntlDateFormatter' => __DIR__ . '/..' . '/symfony/polyfill-intl-icu/IntlDateFormatter.php',
|
||||
'Symfony\\Polyfill\\Intl\\Icu\\IntlListFormatter' => __DIR__ . '/..' . '/symfony/polyfill-intl-icu/IntlListFormatter.php',
|
||||
'Symfony\\Polyfill\\Intl\\Icu\\Locale' => __DIR__ . '/..' . '/symfony/polyfill-intl-icu/Locale.php',
|
||||
'Symfony\\Polyfill\\Intl\\Icu\\NumberFormatter' => __DIR__ . '/..' . '/symfony/polyfill-intl-icu/NumberFormatter.php',
|
||||
'Symfony\\Polyfill\\Intl\\Idn\\Idn' => __DIR__ . '/..' . '/symfony/polyfill-intl-idn/Idn.php',
|
||||
@@ -3960,6 +3999,13 @@ class ComposerStaticInitfc0e9e9dea11dcbb6272414776c30685
|
||||
'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',
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,9 +1,9 @@
|
||||
<?php return array(
|
||||
'root' => array(
|
||||
'name' => 'combodo/itop',
|
||||
'pretty_version' => '1.0.0+no-version-set',
|
||||
'version' => '1.0.0.0',
|
||||
'reference' => null,
|
||||
'pretty_version' => 'dev-develop',
|
||||
'version' => 'dev-develop',
|
||||
'reference' => '3ccbfb2b130419fec9d1158836395a13baa0ec4b',
|
||||
'type' => 'project',
|
||||
'install_path' => __DIR__ . '/../../',
|
||||
'aliases' => array(),
|
||||
@@ -22,9 +22,9 @@
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'combodo/itop' => array(
|
||||
'pretty_version' => '1.0.0+no-version-set',
|
||||
'version' => '1.0.0.0',
|
||||
'reference' => null,
|
||||
'pretty_version' => 'dev-develop',
|
||||
'version' => 'dev-develop',
|
||||
'reference' => '3ccbfb2b130419fec9d1158836395a13baa0ec4b',
|
||||
'type' => 'project',
|
||||
'install_path' => __DIR__ . '/../../',
|
||||
'aliases' => array(),
|
||||
@@ -49,9 +49,9 @@
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'firebase/php-jwt' => array(
|
||||
'pretty_version' => 'v7.0.3',
|
||||
'version' => '7.0.3.0',
|
||||
'reference' => '28aa0694bcfdfa5e2959c394d5a1ee7a5083629e',
|
||||
'pretty_version' => 'v7.0.5',
|
||||
'version' => '7.0.5.0',
|
||||
'reference' => '47ad26bab5e7c70ae8a6f08ed25ff83631121380',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../firebase/php-jwt',
|
||||
'aliases' => array(),
|
||||
@@ -76,9 +76,9 @@
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'guzzlehttp/psr7' => array(
|
||||
'pretty_version' => '2.8.0',
|
||||
'version' => '2.8.0.0',
|
||||
'reference' => '21dc724a0583619cd1652f673303492272778051',
|
||||
'pretty_version' => '2.9.0',
|
||||
'version' => '2.9.0.0',
|
||||
'reference' => '7d0ed42f28e42d61352a7a79de682e5e67fec884',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../guzzlehttp/psr7',
|
||||
'aliases' => array(),
|
||||
@@ -94,9 +94,9 @@
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'league/oauth2-google' => array(
|
||||
'pretty_version' => '4.1.0',
|
||||
'version' => '4.1.0.0',
|
||||
'reference' => '8b9bb43740ac6d994aca881a35f7bacbe98c0ffb',
|
||||
'pretty_version' => '4.2.0',
|
||||
'version' => '4.2.0.0',
|
||||
'reference' => '72be69505f890ea8b6d4e716f619b3c10a1f5010',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../league/oauth2-google',
|
||||
'aliases' => array(),
|
||||
@@ -105,7 +105,7 @@
|
||||
'nikic/php-parser' => array(
|
||||
'pretty_version' => 'dev-master',
|
||||
'version' => 'dev-master',
|
||||
'reference' => 'b2cd0735eb27788d5d41fa3c2cfaa01a593fd7fb',
|
||||
'reference' => 'b27e577f70d2114b8ba96105e403017919a8611b',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../nikic/php-parser',
|
||||
'aliases' => array(
|
||||
@@ -312,9 +312,9 @@
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'symfony/cache' => array(
|
||||
'pretty_version' => 'v6.4.34',
|
||||
'version' => '6.4.34.0',
|
||||
'reference' => 'a0a1690543329685c044362c873b78c6de9d4faa',
|
||||
'pretty_version' => 'v6.4.36',
|
||||
'version' => '6.4.36.0',
|
||||
'reference' => '5b94fba945d1f9e7929cffd50e7a17f1ac36f10b',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../symfony/cache',
|
||||
'aliases' => array(),
|
||||
@@ -345,9 +345,9 @@
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'symfony/console' => array(
|
||||
'pretty_version' => 'v6.4.34',
|
||||
'version' => '6.4.34.0',
|
||||
'reference' => '7b1f1c37eff5910ddda2831345467e593a5120ad',
|
||||
'pretty_version' => 'v6.4.36',
|
||||
'version' => '6.4.36.0',
|
||||
'reference' => '9f481cfb580db8bcecc9b2d4c63f3e13df022ad5',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../symfony/console',
|
||||
'aliases' => array(),
|
||||
@@ -362,10 +362,19 @@
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'symfony/debug-bundle' => array(
|
||||
'pretty_version' => 'v6.4.35',
|
||||
'version' => '6.4.35.0',
|
||||
'reference' => 'eb79084c2c9778559b21f61cb1507cbd580cc6e1',
|
||||
'type' => 'symfony-bundle',
|
||||
'install_path' => __DIR__ . '/../symfony/debug-bundle',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => true,
|
||||
),
|
||||
'symfony/dependency-injection' => array(
|
||||
'pretty_version' => 'v6.4.34',
|
||||
'version' => '6.4.34.0',
|
||||
'reference' => '91e49958b8a6092e48e4711894a1aeb1b151c62a',
|
||||
'pretty_version' => 'v6.4.36',
|
||||
'version' => '6.4.36.0',
|
||||
'reference' => 'cd7881a6dc84b780411199cd0584e1a53a3b9ba7',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../symfony/dependency-injection',
|
||||
'aliases' => array(),
|
||||
@@ -381,27 +390,27 @@
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'symfony/dotenv' => array(
|
||||
'pretty_version' => 'v6.4.30',
|
||||
'version' => '6.4.30.0',
|
||||
'reference' => '924edbc9631b75302def0258ed1697948b17baf6',
|
||||
'pretty_version' => 'v6.4.36',
|
||||
'version' => '6.4.36.0',
|
||||
'reference' => 'cae019cc92a46fe9e498ea011107f26bdf5d897f',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../symfony/dotenv',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'symfony/error-handler' => array(
|
||||
'pretty_version' => 'v6.4.32',
|
||||
'version' => '6.4.32.0',
|
||||
'reference' => '8c18400784fcb014dc73c8d5601a9576af7f8ad4',
|
||||
'pretty_version' => 'v6.4.36',
|
||||
'version' => '6.4.36.0',
|
||||
'reference' => '2ea68f0e1835ad6a126f93bbc14cd236c10ab361',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../symfony/error-handler',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'symfony/event-dispatcher' => array(
|
||||
'pretty_version' => 'v6.4.32',
|
||||
'version' => '6.4.32.0',
|
||||
'reference' => '99d7e101826e6610606b9433248f80c1997cd20b',
|
||||
'pretty_version' => 'v6.4.36',
|
||||
'version' => '6.4.36.0',
|
||||
'reference' => 'fc828863e26ceec86e2513b5e46aa0b149d76b69',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../symfony/event-dispatcher',
|
||||
'aliases' => array(),
|
||||
@@ -441,36 +450,36 @@
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'symfony/form' => array(
|
||||
'pretty_version' => 'v6.4.34',
|
||||
'version' => '6.4.34.0',
|
||||
'reference' => 'ed9275a133809bb48d949ba6dfdc808a819ebea2',
|
||||
'pretty_version' => 'v6.4.36',
|
||||
'version' => '6.4.36.0',
|
||||
'reference' => '3a38a81150400f0a486f8963e21a195311b30b27',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../symfony/form',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'symfony/framework-bundle' => array(
|
||||
'pretty_version' => 'v6.4.34',
|
||||
'version' => '6.4.34.0',
|
||||
'reference' => '5b5d19473f22d699811a41b01cef2462bc42b238',
|
||||
'pretty_version' => 'v6.4.36',
|
||||
'version' => '6.4.36.0',
|
||||
'reference' => '147b02cfa45dcc74a290462551f5ee5c7fa8ab17',
|
||||
'type' => 'symfony-bundle',
|
||||
'install_path' => __DIR__ . '/../symfony/framework-bundle',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'symfony/http-foundation' => array(
|
||||
'pretty_version' => 'v6.4.34',
|
||||
'version' => '6.4.34.0',
|
||||
'reference' => '5bb346d1b4b2a616e5c3d99b3ee4d5810735c535',
|
||||
'pretty_version' => 'v6.4.35',
|
||||
'version' => '6.4.35.0',
|
||||
'reference' => 'cffffd0a2c037117b742b4f8b379a22a2a33f6d2',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../symfony/http-foundation',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'symfony/http-kernel' => array(
|
||||
'pretty_version' => 'v6.4.34',
|
||||
'version' => '6.4.34.0',
|
||||
'reference' => '006a49fc4f41ee21a6ca61e69caed1c30b29f07c',
|
||||
'pretty_version' => 'v6.4.36',
|
||||
'version' => '6.4.36.0',
|
||||
'reference' => '4087ec02119de450e9ebb60806d69c6bb8c6e468',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../symfony/http-kernel',
|
||||
'aliases' => array(),
|
||||
@@ -486,9 +495,9 @@
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'symfony/mime' => array(
|
||||
'pretty_version' => 'v6.4.34',
|
||||
'version' => '6.4.34.0',
|
||||
'reference' => '2b32fbbe10b36a8379efab6e702ad8b917151839',
|
||||
'pretty_version' => 'v6.4.36',
|
||||
'version' => '6.4.36.0',
|
||||
'reference' => '9c31726137c70798f815fb98293ffb8a2a47694c',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../symfony/mime',
|
||||
'aliases' => array(),
|
||||
@@ -513,35 +522,35 @@
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'symfony/polyfill-ctype' => array(
|
||||
'pretty_version' => 'v1.33.0',
|
||||
'version' => '1.33.0.0',
|
||||
'reference' => 'a3cc8b044a6ea513310cbd48ef7333b384945638',
|
||||
'pretty_version' => 'v1.36.0',
|
||||
'version' => '1.36.0.0',
|
||||
'reference' => '141046a8f9477948ff284fa65be2095baafb94f2',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../symfony/polyfill-ctype',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'symfony/polyfill-intl-grapheme' => array(
|
||||
'pretty_version' => 'v1.33.0',
|
||||
'version' => '1.33.0.0',
|
||||
'reference' => '380872130d3a5dd3ace2f4010d95125fde5d5c70',
|
||||
'pretty_version' => 'v1.36.0',
|
||||
'version' => '1.36.0.0',
|
||||
'reference' => 'ad1b7b9092976d6c948b8a187cec9faaea9ec1df',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../symfony/polyfill-intl-grapheme',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'symfony/polyfill-intl-icu' => array(
|
||||
'pretty_version' => 'v1.33.0',
|
||||
'version' => '1.33.0.0',
|
||||
'reference' => 'bfc8fa13dbaf21d69114b0efcd72ab700fb04d0c',
|
||||
'pretty_version' => 'v1.36.0',
|
||||
'version' => '1.36.0.0',
|
||||
'reference' => '3510b63d07376b04e57e27e82607d468bb134f78',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../symfony/polyfill-intl-icu',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'symfony/polyfill-intl-idn' => array(
|
||||
'pretty_version' => 'v1.33.0',
|
||||
'version' => '1.33.0.0',
|
||||
'pretty_version' => 'v1.36.0',
|
||||
'version' => '1.36.0.0',
|
||||
'reference' => '9614ac4d8061dc257ecc64cba1b140873dce8ad3',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../symfony/polyfill-intl-idn',
|
||||
@@ -549,8 +558,8 @@
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'symfony/polyfill-intl-normalizer' => array(
|
||||
'pretty_version' => 'v1.33.0',
|
||||
'version' => '1.33.0.0',
|
||||
'pretty_version' => 'v1.36.0',
|
||||
'version' => '1.36.0.0',
|
||||
'reference' => '3833d7255cc303546435cb650316bff708a1c75c',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../symfony/polyfill-intl-normalizer',
|
||||
@@ -558,18 +567,18 @@
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'symfony/polyfill-mbstring' => array(
|
||||
'pretty_version' => 'v1.33.0',
|
||||
'version' => '1.33.0.0',
|
||||
'reference' => '6d857f4d76bd4b343eac26d6b539585d2bc56493',
|
||||
'pretty_version' => 'v1.36.0',
|
||||
'version' => '1.36.0.0',
|
||||
'reference' => '6a21eb99c6973357967f6ce3708cd55a6bec6315',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../symfony/polyfill-mbstring',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'symfony/polyfill-php83' => array(
|
||||
'pretty_version' => 'v1.33.0',
|
||||
'version' => '1.33.0.0',
|
||||
'reference' => '17f6f9a6b1735c0f163024d959f700cfbc5155e5',
|
||||
'pretty_version' => 'v1.36.0',
|
||||
'version' => '1.36.0.0',
|
||||
'reference' => '3600c2cb22399e25bb226e4a135ce91eeb2a6149',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../symfony/polyfill-php83',
|
||||
'aliases' => array(),
|
||||
@@ -602,10 +611,19 @@
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'symfony/runtime' => array(
|
||||
'pretty_version' => 'v6.4.30',
|
||||
'version' => '6.4.30.0',
|
||||
'reference' => 'fb3149ee85d3b639dd3e49ea9dda05656f0537e3',
|
||||
'type' => 'composer-plugin',
|
||||
'install_path' => __DIR__ . '/../symfony/runtime',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'symfony/security-core' => array(
|
||||
'pretty_version' => 'v6.4.31',
|
||||
'version' => '6.4.31.0',
|
||||
'reference' => 'fa269ad61a021cc54329dc96e57bed78ba720bfe',
|
||||
'pretty_version' => 'v6.4.36',
|
||||
'version' => '6.4.36.0',
|
||||
'reference' => '1b7db28bcc3655543abfe58764025aef563705cd',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../symfony/security-core',
|
||||
'aliases' => array(),
|
||||
@@ -663,9 +681,9 @@
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'symfony/twig-bridge' => array(
|
||||
'pretty_version' => 'v6.4.34',
|
||||
'version' => '6.4.34.0',
|
||||
'reference' => '5169074f4a88dfb02eeccddaba78edfdf212a9b2',
|
||||
'pretty_version' => 'v6.4.36',
|
||||
'version' => '6.4.36.0',
|
||||
'reference' => '3ae963a108fd6fc14d09a7fe5e41fe64d8ac11ba',
|
||||
'type' => 'symfony-bridge',
|
||||
'install_path' => __DIR__ . '/../symfony/twig-bridge',
|
||||
'aliases' => array(),
|
||||
@@ -681,36 +699,36 @@
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'symfony/validator' => array(
|
||||
'pretty_version' => 'v6.4.34',
|
||||
'version' => '6.4.34.0',
|
||||
'reference' => '7c3897b7f739d4ab913481e680405ca82d08084d',
|
||||
'pretty_version' => 'v6.4.36',
|
||||
'version' => '6.4.36.0',
|
||||
'reference' => '14921e87b2bd69dfbd9757cdb1c6974a1316aac5',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../symfony/validator',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'symfony/var-dumper' => array(
|
||||
'pretty_version' => 'v6.4.32',
|
||||
'version' => '6.4.32.0',
|
||||
'reference' => '131fc9915e0343052af5ed5040401b481ca192aa',
|
||||
'pretty_version' => 'v6.4.36',
|
||||
'version' => '6.4.36.0',
|
||||
'reference' => '7c8ad9ce4faf6c8a99948e70ce02b601a0439782',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../symfony/var-dumper',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'symfony/var-exporter' => array(
|
||||
'pretty_version' => 'v6.4.26',
|
||||
'version' => '6.4.26.0',
|
||||
'reference' => '466fcac5fa2e871f83d31173f80e9c2684743bfc',
|
||||
'pretty_version' => 'v6.4.36',
|
||||
'version' => '6.4.36.0',
|
||||
'reference' => 'f9c4a9695a9e2bbc65c920e147d8d7ae28f8d79a',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../symfony/var-exporter',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'symfony/web-profiler-bundle' => array(
|
||||
'pretty_version' => 'v6.4.34',
|
||||
'version' => '6.4.34.0',
|
||||
'reference' => '848bc5d5745500f855bb201d57ae066fd7e67448',
|
||||
'pretty_version' => 'v6.4.36',
|
||||
'version' => '6.4.36.0',
|
||||
'reference' => '6f75b4c748886c8e04a3674225d00eaa51f3842d',
|
||||
'type' => 'symfony-bundle',
|
||||
'install_path' => __DIR__ . '/../symfony/web-profiler-bundle',
|
||||
'aliases' => array(),
|
||||
@@ -726,9 +744,9 @@
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'tecnickcom/tcpdf' => array(
|
||||
'pretty_version' => '6.11.0',
|
||||
'version' => '6.11.0.0',
|
||||
'reference' => '81172e58edb1cfae4019ef150ccbdc0e9a8c85c9',
|
||||
'pretty_version' => '6.11.2',
|
||||
'version' => '6.11.2.0',
|
||||
'reference' => 'e1e2ade18e574e963473f53271591edd8c0033ec',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../tecnickcom/tcpdf',
|
||||
'aliases' => array(),
|
||||
@@ -744,9 +762,9 @@
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'twig/twig' => array(
|
||||
'pretty_version' => 'v3.23.0',
|
||||
'version' => '3.23.0.0',
|
||||
'reference' => 'a64dc5d2cc7d6cafb9347f6cd802d0d06d0351c9',
|
||||
'pretty_version' => 'v3.24.0',
|
||||
'version' => '3.24.0.0',
|
||||
'reference' => 'a6769aefb305efef849dc25c9fd1653358c148f0',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../twig/twig',
|
||||
'aliases' => array(),
|
||||
|
||||
@@ -4,8 +4,8 @@
|
||||
|
||||
$issues = array();
|
||||
|
||||
if (!(PHP_VERSION_ID >= 80100)) {
|
||||
$issues[] = 'Your Composer dependencies require a PHP version ">= 8.1.0". You are running ' . PHP_VERSION . '.';
|
||||
if (!(PHP_VERSION_ID >= 80200)) {
|
||||
$issues[] = 'Your Composer dependencies require a PHP version ">= 8.2.0". You are running ' . PHP_VERSION . '.';
|
||||
}
|
||||
|
||||
$missingExtensions = array();
|
||||
|
||||
@@ -1,5 +1,20 @@
|
||||
# Changelog
|
||||
|
||||
## [7.0.5](https://github.com/firebase/php-jwt/compare/v7.0.4...v7.0.5) (2026-03-31)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* RSA from JWK sometimes returns empty Instance ([#628](https://github.com/firebase/php-jwt/issues/628)) ([b4c78aa](https://github.com/firebase/php-jwt/commit/b4c78aa731664122198ad36c0033aa29e807397a))
|
||||
|
||||
## [7.0.4](https://github.com/firebase/php-jwt/compare/v7.0.3...v7.0.4) (2026-03-27)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* readme examples, add tests for all examples ([#626](https://github.com/firebase/php-jwt/issues/626)) ([510a00c](https://github.com/firebase/php-jwt/commit/510a00c0e6353bc7d68412fab67e57a13954cb46))
|
||||
* use urlsafeB64Decode everywhere ([#627](https://github.com/firebase/php-jwt/issues/627)) ([b889495](https://github.com/firebase/php-jwt/commit/b889495c83ddc3f3885ca3f0b65b41b1cb37a3b1))
|
||||
|
||||
## [7.0.3](https://github.com/firebase/php-jwt/compare/v7.0.2...v7.0.3) (2026-02-18)
|
||||
|
||||
|
||||
|
||||
@@ -23,16 +23,16 @@ php env does not have libsodium installed:
|
||||
composer require paragonie/sodium_compat
|
||||
```
|
||||
|
||||
Example
|
||||
-------
|
||||
## Example
|
||||
|
||||
```php
|
||||
use Firebase\JWT\JWT;
|
||||
use Firebase\JWT\Key;
|
||||
|
||||
$key = 'example_key';
|
||||
$key = 'example_key_of_sufficient_length';
|
||||
$payload = [
|
||||
'iss' => 'http://example.org',
|
||||
'aud' => 'http://example.com',
|
||||
'iss' => 'example.org',
|
||||
'aud' => 'example.com',
|
||||
'iat' => 1356999524,
|
||||
'nbf' => 1357000000
|
||||
];
|
||||
@@ -69,8 +69,9 @@ $decoded_array = (array) $decoded;
|
||||
JWT::$leeway = 60; // $leeway in seconds
|
||||
$decoded = JWT::decode($jwt, new Key($key, 'HS256'));
|
||||
```
|
||||
Example encode/decode headers
|
||||
-------
|
||||
|
||||
## Example encode/decode headers
|
||||
|
||||
Decoding the JWT headers without verifying the JWT first is NOT recommended, and is not supported by
|
||||
this library. This is because without verifying the JWT, the header values could have been tampered with.
|
||||
Any value pulled from an unverified header should be treated as if it could be any string sent in from an
|
||||
@@ -80,10 +81,10 @@ header part:
|
||||
```php
|
||||
use Firebase\JWT\JWT;
|
||||
|
||||
$key = 'example_key';
|
||||
$key = 'example_key_of_sufficient_length';
|
||||
$payload = [
|
||||
'iss' => 'http://example.org',
|
||||
'aud' => 'http://example.com',
|
||||
'iss' => 'example.org',
|
||||
'aud' => 'example.com',
|
||||
'iat' => 1356999524,
|
||||
'nbf' => 1357000000
|
||||
];
|
||||
@@ -103,8 +104,9 @@ $decoded = json_decode(base64_decode($headersB64), true);
|
||||
|
||||
print_r($decoded);
|
||||
```
|
||||
Example with RS256 (openssl)
|
||||
----------------------------
|
||||
|
||||
## Example with RS256 (openssl)
|
||||
|
||||
```php
|
||||
use Firebase\JWT\JWT;
|
||||
use Firebase\JWT\Key;
|
||||
@@ -172,8 +174,7 @@ $decoded_array = (array) $decoded;
|
||||
echo "Decode:\n" . print_r($decoded_array, true) . "\n";
|
||||
```
|
||||
|
||||
Example with a passphrase
|
||||
-------------------------
|
||||
## Example with a passphrase
|
||||
|
||||
```php
|
||||
use Firebase\JWT\JWT;
|
||||
@@ -209,8 +210,8 @@ $decoded = JWT::decode($jwt, new Key($publicKey, 'RS256'));
|
||||
echo "Decode:\n" . print_r((array) $decoded, true) . "\n";
|
||||
```
|
||||
|
||||
Example with EdDSA (libsodium and Ed25519 signature)
|
||||
----------------------------
|
||||
## Example with EdDSA (libsodium and Ed25519 signature)
|
||||
|
||||
```php
|
||||
use Firebase\JWT\JWT;
|
||||
use Firebase\JWT\Key;
|
||||
@@ -238,21 +239,21 @@ echo "Encode:\n" . print_r($jwt, true) . "\n";
|
||||
|
||||
$decoded = JWT::decode($jwt, new Key($publicKey, 'EdDSA'));
|
||||
echo "Decode:\n" . print_r((array) $decoded, true) . "\n";
|
||||
````
|
||||
```
|
||||
|
||||
## Example with multiple keys
|
||||
|
||||
Example with multiple keys
|
||||
--------------------------
|
||||
```php
|
||||
use Firebase\JWT\JWT;
|
||||
use Firebase\JWT\Key;
|
||||
|
||||
// Example RSA keys from previous example
|
||||
// $privateKey1 = '...';
|
||||
// $publicKey1 = '...';
|
||||
// $privateRsKey = '...';
|
||||
// $publicRsKey = '...';
|
||||
|
||||
// Example EdDSA keys from previous example
|
||||
// $privateKey2 = '...';
|
||||
// $publicKey2 = '...';
|
||||
// $privateEcKey = '...';
|
||||
// $publicEcKey = '...';
|
||||
|
||||
$payload = [
|
||||
'iss' => 'example.org',
|
||||
@@ -261,14 +262,14 @@ $payload = [
|
||||
'nbf' => 1357000000
|
||||
];
|
||||
|
||||
$jwt1 = JWT::encode($payload, $privateKey1, 'RS256', 'kid1');
|
||||
$jwt2 = JWT::encode($payload, $privateKey2, 'EdDSA', 'kid2');
|
||||
$jwt1 = JWT::encode($payload, $privateRsKey, 'RS256', 'kid1');
|
||||
$jwt2 = JWT::encode($payload, $privateEcKey, 'EdDSA', 'kid2');
|
||||
echo "Encode 1:\n" . print_r($jwt1, true) . "\n";
|
||||
echo "Encode 2:\n" . print_r($jwt2, true) . "\n";
|
||||
|
||||
$keys = [
|
||||
'kid1' => new Key($publicKey1, 'RS256'),
|
||||
'kid2' => new Key($publicKey2, 'EdDSA'),
|
||||
'kid1' => new Key($publicRsKey, 'RS256'),
|
||||
'kid2' => new Key($publicEcKey, 'EdDSA'),
|
||||
];
|
||||
|
||||
$decoded1 = JWT::decode($jwt1, $keys);
|
||||
@@ -278,8 +279,7 @@ echo "Decode 1:\n" . print_r((array) $decoded1, true) . "\n";
|
||||
echo "Decode 2:\n" . print_r((array) $decoded2, true) . "\n";
|
||||
```
|
||||
|
||||
Using JWKs
|
||||
----------
|
||||
## Using JWKs
|
||||
|
||||
```php
|
||||
use Firebase\JWT\JWK;
|
||||
@@ -291,11 +291,11 @@ $jwks = ['keys' => []];
|
||||
|
||||
// JWK::parseKeySet($jwks) returns an associative array of **kid** to Firebase\JWT\Key
|
||||
// objects. Pass this as the second parameter to JWT::decode.
|
||||
JWT::decode($jwt, JWK::parseKeySet($jwks));
|
||||
$decoded = JWT::decode($jwt, JWK::parseKeySet($jwks));
|
||||
print_r($decoded);
|
||||
```
|
||||
|
||||
Using Cached Key Sets
|
||||
---------------------
|
||||
## Using Cached Key Sets
|
||||
|
||||
The `CachedKeySet` class can be used to fetch and cache JWKS (JSON Web Key Sets) from a public URI.
|
||||
This has the following advantages:
|
||||
@@ -315,7 +315,7 @@ $jwksUri = 'https://www.gstatic.com/iap/verify/public_key-jwk';
|
||||
$httpClient = new GuzzleHttp\Client();
|
||||
|
||||
// Create an HTTP request factory (can be any PSR-17 compatible HTTP request factory)
|
||||
$httpFactory = new GuzzleHttp\Psr\HttpFactory();
|
||||
$httpFactory = new GuzzleHttp\Psr7\HttpFactory();
|
||||
|
||||
// Create a cache item pool (can be any PSR-6 compatible cache item pool)
|
||||
$cacheItemPool = Phpfastcache\CacheManager::getInstance('files');
|
||||
@@ -406,8 +406,8 @@ Tests
|
||||
Run the tests using phpunit:
|
||||
|
||||
```bash
|
||||
$ pear install PHPUnit
|
||||
$ phpunit --configuration phpunit.xml.dist
|
||||
$ composer update
|
||||
$ vendor/bin/phpunit -c phpunit.xml.dist
|
||||
PHPUnit 3.7.10 by Sebastian Bergmann.
|
||||
.....
|
||||
Time: 0 seconds, Memory: 2.50Mb
|
||||
|
||||
@@ -37,6 +37,7 @@
|
||||
"phpunit/phpunit": "^9.5",
|
||||
"psr/cache": "^2.0||^3.0",
|
||||
"psr/http-client": "^1.0",
|
||||
"psr/http-factory": "^1.0"
|
||||
"psr/http-factory": "^1.0",
|
||||
"phpfastcache/phpfastcache": "^9.2"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -180,7 +180,8 @@ class CachedKeySet implements ArrayAccess
|
||||
$jwksResponse = $this->httpClient->sendRequest($request);
|
||||
if ($jwksResponse->getStatusCode() !== 200) {
|
||||
throw new UnexpectedValueException(
|
||||
\sprintf('HTTP Error: %d %s for URI "%s"',
|
||||
\sprintf(
|
||||
'HTTP Error: %d %s for URI "%s"',
|
||||
$jwksResponse->getStatusCode(),
|
||||
$jwksResponse->getReasonPhrase(),
|
||||
$this->jwksUri,
|
||||
|
||||
@@ -240,6 +240,14 @@ class JWK
|
||||
): string {
|
||||
$mod = JWT::urlsafeB64Decode($n);
|
||||
$exp = JWT::urlsafeB64Decode($e);
|
||||
// Correct encoding for ASN1, as ints are represented as unsigned in jwk
|
||||
// but signed in ASN1. Prepending null byte makes it unsigned.
|
||||
if (\strlen($mod) > 0 && \ord($mod[0]) >= 128) {
|
||||
$mod = \chr(0) . $mod;
|
||||
}
|
||||
if (\strlen($exp) > 0 && \ord($exp[0]) >= 128) {
|
||||
$exp = \chr(0) . $exp;
|
||||
}
|
||||
|
||||
$modulus = \pack('Ca*a*', 2, self::encodeLength(\strlen($mod)), $mod);
|
||||
$publicExponent = \pack('Ca*a*', 2, self::encodeLength(\strlen($exp)), $exp);
|
||||
|
||||
@@ -31,7 +31,7 @@ class JWT
|
||||
private const ASN1_SEQUENCE = 0x10;
|
||||
private const ASN1_BIT_STRING = 0x03;
|
||||
|
||||
private const RSA_KEY_MIN_LENGTH=2048;
|
||||
private const RSA_KEY_MIN_LENGTH = 2048;
|
||||
|
||||
/**
|
||||
* When checking nbf, iat or expiration times,
|
||||
@@ -284,20 +284,8 @@ class JWT
|
||||
}
|
||||
return $signature;
|
||||
case 'sodium_crypto':
|
||||
if (!\function_exists('sodium_crypto_sign_detached')) {
|
||||
throw new DomainException('libsodium is not available');
|
||||
}
|
||||
if (!\is_string($key)) {
|
||||
throw new InvalidArgumentException('key must be a string when using EdDSA');
|
||||
}
|
||||
try {
|
||||
// The last non-empty line is used as the key.
|
||||
$lines = array_filter(explode("\n", $key));
|
||||
$key = base64_decode((string) end($lines));
|
||||
if (\strlen($key) === 0) {
|
||||
throw new DomainException('Key cannot be empty string');
|
||||
}
|
||||
return sodium_crypto_sign_detached($msg, $key);
|
||||
return sodium_crypto_sign_detached($msg, self::validateEdDSAKey($key));
|
||||
} catch (Exception $e) {
|
||||
throw new DomainException($e->getMessage(), 0, $e);
|
||||
}
|
||||
@@ -352,19 +340,8 @@ class JWT
|
||||
'OpenSSL error: ' . \openssl_error_string()
|
||||
);
|
||||
case 'sodium_crypto':
|
||||
if (!\function_exists('sodium_crypto_sign_verify_detached')) {
|
||||
throw new DomainException('libsodium is not available');
|
||||
}
|
||||
if (!\is_string($keyMaterial)) {
|
||||
throw new InvalidArgumentException('key must be a string when using EdDSA');
|
||||
}
|
||||
try {
|
||||
// The last non-empty line is used as the key.
|
||||
$lines = array_filter(explode("\n", $keyMaterial));
|
||||
$key = base64_decode((string) end($lines));
|
||||
if (\strlen($key) === 0) {
|
||||
throw new DomainException('Key cannot be empty string');
|
||||
}
|
||||
$key = self::validateEdDSAKey($keyMaterial);
|
||||
if (\strlen($signature) === 0) {
|
||||
throw new DomainException('Signature cannot be empty string');
|
||||
}
|
||||
@@ -473,7 +450,6 @@ class JWT
|
||||
return \str_replace('=', '', \strtr(\base64_encode($input), '+/', '-_'));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Determine if an algorithm has been provided for each Key
|
||||
*
|
||||
@@ -745,4 +721,25 @@ class JWT
|
||||
throw new DomainException('Provided key is too short');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string|OpenSSLAsymmetricKey|OpenSSLCertificate $keyMaterial
|
||||
* @return non-empty-string
|
||||
*/
|
||||
private static function validateEdDSAKey(#[\SensitiveParameter] $keyMaterial): string
|
||||
{
|
||||
if (!\function_exists('sodium_crypto_sign_verify_detached')) {
|
||||
throw new DomainException('libsodium is not available');
|
||||
}
|
||||
if (!\is_string($keyMaterial)) {
|
||||
throw new InvalidArgumentException('key must be a string when using EdDSA');
|
||||
}
|
||||
// The last non-empty line is used as the key.
|
||||
$lines = array_filter(explode("\n", $keyMaterial));
|
||||
$key = self::urlsafeB64Decode((string) end($lines));
|
||||
if (\strlen($key) === 0) {
|
||||
throw new DomainException('Key cannot be empty string');
|
||||
}
|
||||
return $key;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,6 +5,23 @@ All notable changes to this project will be documented in this file.
|
||||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
|
||||
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||
|
||||
## 2.9.0 - 2026-03-10
|
||||
|
||||
### Added
|
||||
|
||||
- Added nested array expansion support to `MultipartStream`
|
||||
- Added `@return static` to `MessageTrait` methods
|
||||
|
||||
### Changed
|
||||
|
||||
- Updated MIME type mappings
|
||||
|
||||
## 2.8.1 - 2026-03-10
|
||||
|
||||
### Fixed
|
||||
|
||||
- Encode `+` signs in `Uri::withQueryValue()` and `Uri::withQueryValues()` to prevent them being interpreted as spaces
|
||||
|
||||
## 2.8.0 - 2025-08-23
|
||||
|
||||
### Added
|
||||
|
||||
@@ -49,6 +49,19 @@
|
||||
"homepage": "https://sagikazarmark.hu"
|
||||
}
|
||||
],
|
||||
"repositories": [
|
||||
{
|
||||
"type": "package",
|
||||
"package": {
|
||||
"name": "jshttp/mime-db",
|
||||
"version": "1.54.0.1",
|
||||
"dist": {
|
||||
"url": "https://codeload.github.com/jshttp/mime-db/zip/0a9fd0bfbc87a725ff638495839114e7807b7177",
|
||||
"type": "zip"
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"require": {
|
||||
"php": "^7.2.5 || ^8.0",
|
||||
"psr/http-factory": "^1.0",
|
||||
@@ -62,6 +75,7 @@
|
||||
"require-dev": {
|
||||
"bamarni/composer-bin-plugin": "^1.8.2",
|
||||
"http-interop/http-factory-tests": "0.9.0",
|
||||
"jshttp/mime-db": "1.54.0.1",
|
||||
"phpunit/phpunit": "^8.5.44 || ^9.6.25"
|
||||
},
|
||||
"suggest": {
|
||||
|
||||
@@ -63,9 +63,9 @@ final class LimitStream implements StreamInterface
|
||||
return null;
|
||||
} elseif ($this->limit === -1) {
|
||||
return $length - $this->offset;
|
||||
} else {
|
||||
return min($this->limit, $length - $this->offset);
|
||||
}
|
||||
|
||||
return min($this->limit, $length - $this->offset);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -29,6 +29,9 @@ trait MessageTrait
|
||||
return $this->protocol;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return static
|
||||
*/
|
||||
public function withProtocolVersion($version): MessageInterface
|
||||
{
|
||||
if ($this->protocol === $version) {
|
||||
@@ -69,6 +72,9 @@ trait MessageTrait
|
||||
return implode(', ', $this->getHeader($header));
|
||||
}
|
||||
|
||||
/**
|
||||
* @return static
|
||||
*/
|
||||
public function withHeader($header, $value): MessageInterface
|
||||
{
|
||||
$this->assertHeader($header);
|
||||
@@ -85,6 +91,9 @@ trait MessageTrait
|
||||
return $new;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return static
|
||||
*/
|
||||
public function withAddedHeader($header, $value): MessageInterface
|
||||
{
|
||||
$this->assertHeader($header);
|
||||
@@ -103,6 +112,9 @@ trait MessageTrait
|
||||
return $new;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return static
|
||||
*/
|
||||
public function withoutHeader($header): MessageInterface
|
||||
{
|
||||
$normalized = strtolower($header);
|
||||
@@ -128,6 +140,9 @@ trait MessageTrait
|
||||
return $this->stream;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return static
|
||||
*/
|
||||
public function withBody(StreamInterface $body): MessageInterface
|
||||
{
|
||||
if ($body === $this->stream) {
|
||||
|
||||
@@ -7,22 +7,23 @@ namespace GuzzleHttp\Psr7;
|
||||
final class MimeType
|
||||
{
|
||||
private const MIME_TYPES = [
|
||||
'123' => 'application/vnd.lotus-1-2-3',
|
||||
'1km' => 'application/vnd.1000minds.decision-model+xml',
|
||||
'210' => 'model/step',
|
||||
'3dml' => 'text/vnd.in3d.3dml',
|
||||
'3ds' => 'image/x-3ds',
|
||||
'3g2' => 'video/3gpp2',
|
||||
'3gp' => 'video/3gp',
|
||||
'3gp' => 'video/3gpp',
|
||||
'3gpp' => 'video/3gpp',
|
||||
'3mf' => 'model/3mf',
|
||||
'7z' => 'application/x-7z-compressed',
|
||||
'7zip' => 'application/x-7z-compressed',
|
||||
'123' => 'application/vnd.lotus-1-2-3',
|
||||
'aab' => 'application/x-authorware-bin',
|
||||
'aac' => 'audio/aac',
|
||||
'aam' => 'application/x-authorware-map',
|
||||
'aas' => 'application/x-authorware-seg',
|
||||
'abw' => 'application/x-abiword',
|
||||
'ac' => 'application/vnd.nokia.n-gage.ac+xml',
|
||||
'ac' => 'application/pkix-attr-cert',
|
||||
'ac3' => 'audio/ac3',
|
||||
'acc' => 'application/vnd.americandynamics.acc',
|
||||
'ace' => 'application/x-ace-compressed',
|
||||
@@ -35,7 +36,7 @@ final class MimeType
|
||||
'afp' => 'application/vnd.ibm.modcap',
|
||||
'age' => 'application/vnd.age',
|
||||
'ahead' => 'application/vnd.ahead.space',
|
||||
'ai' => 'application/pdf',
|
||||
'ai' => 'application/postscript',
|
||||
'aif' => 'audio/x-aiff',
|
||||
'aifc' => 'audio/x-aiff',
|
||||
'aiff' => 'audio/x-aiff',
|
||||
@@ -55,7 +56,7 @@ final class MimeType
|
||||
'apr' => 'application/vnd.lotus-approach',
|
||||
'arc' => 'application/x-freearc',
|
||||
'arj' => 'application/x-arj',
|
||||
'asc' => 'application/pgp-signature',
|
||||
'asc' => 'application/pgp-keys',
|
||||
'asf' => 'video/x-ms-asf',
|
||||
'asm' => 'text/x-asm',
|
||||
'aso' => 'application/vnd.accpac.simply.aso',
|
||||
@@ -66,7 +67,7 @@ final class MimeType
|
||||
'atomdeleted' => 'application/atomdeleted+xml',
|
||||
'atomsvc' => 'application/atomsvc+xml',
|
||||
'atx' => 'application/vnd.antix.game-component',
|
||||
'au' => 'audio/x-au',
|
||||
'au' => 'audio/basic',
|
||||
'avci' => 'image/avci',
|
||||
'avcs' => 'image/avcs',
|
||||
'avi' => 'video/x-msvideo',
|
||||
@@ -77,15 +78,18 @@ final class MimeType
|
||||
'azv' => 'image/vnd.airzip.accelerator.azv',
|
||||
'azw' => 'application/vnd.amazon.ebook',
|
||||
'b16' => 'image/vnd.pco.b16',
|
||||
'bary' => 'model/vnd.bary',
|
||||
'bat' => 'application/x-msdownload',
|
||||
'bcpio' => 'application/x-bcpio',
|
||||
'bdf' => 'application/x-font-bdf',
|
||||
'bdm' => 'application/vnd.syncml.dm+wbxml',
|
||||
'bdoc' => 'application/x-bdoc',
|
||||
'bdo' => 'application/vnd.nato.bindingdataobject+xml',
|
||||
'bdoc' => 'application/bdoc',
|
||||
'bed' => 'application/vnd.realvnc.bed',
|
||||
'bh2' => 'application/vnd.fujitsu.oasysprs',
|
||||
'bin' => 'application/octet-stream',
|
||||
'blb' => 'application/x-blorb',
|
||||
'blend' => 'application/x-blender',
|
||||
'blorb' => 'application/x-blorb',
|
||||
'bmi' => 'application/vnd.bmi',
|
||||
'bmml' => 'application/vnd.balsamiq.bmml+xml',
|
||||
@@ -95,6 +99,8 @@ final class MimeType
|
||||
'boz' => 'application/x-bzip2',
|
||||
'bpk' => 'application/octet-stream',
|
||||
'bpmn' => 'application/octet-stream',
|
||||
'brush' => 'application/vnd.procreate.brush',
|
||||
'brushset' => 'application/vnd.procreate.brushset',
|
||||
'bsp' => 'model/vnd.valve.source.compiled-map',
|
||||
'btf' => 'image/prs.btif',
|
||||
'btif' => 'image/prs.btif',
|
||||
@@ -102,13 +108,13 @@ final class MimeType
|
||||
'bz' => 'application/x-bzip',
|
||||
'bz2' => 'application/x-bzip2',
|
||||
'c' => 'text/x-c',
|
||||
'c11amc' => 'application/vnd.cluetrust.cartomobile-config',
|
||||
'c11amz' => 'application/vnd.cluetrust.cartomobile-config-pkg',
|
||||
'c4d' => 'application/vnd.clonk.c4group',
|
||||
'c4f' => 'application/vnd.clonk.c4group',
|
||||
'c4g' => 'application/vnd.clonk.c4group',
|
||||
'c4p' => 'application/vnd.clonk.c4group',
|
||||
'c4u' => 'application/vnd.clonk.c4group',
|
||||
'c11amc' => 'application/vnd.cluetrust.cartomobile-config',
|
||||
'c11amz' => 'application/vnd.cluetrust.cartomobile-config-pkg',
|
||||
'cab' => 'application/vnd.ms-cab-compressed',
|
||||
'caf' => 'audio/x-caf',
|
||||
'cap' => 'application/vnd.tcpdump.pcap',
|
||||
@@ -132,7 +138,6 @@ final class MimeType
|
||||
'cdmid' => 'application/cdmi-domain',
|
||||
'cdmio' => 'application/cdmi-object',
|
||||
'cdmiq' => 'application/cdmi-queue',
|
||||
'cdr' => 'application/cdr',
|
||||
'cdx' => 'chemical/x-cdx',
|
||||
'cdxml' => 'application/vnd.chemdraw+xml',
|
||||
'cdy' => 'application/vnd.cinderella',
|
||||
@@ -147,7 +152,7 @@ final class MimeType
|
||||
'cil' => 'application/vnd.ms-artgalry',
|
||||
'cjs' => 'application/node',
|
||||
'cla' => 'application/vnd.claymore',
|
||||
'class' => 'application/octet-stream',
|
||||
'class' => 'application/java-vm',
|
||||
'cld' => 'model/vnd.cld',
|
||||
'clkk' => 'application/vnd.crick.clicker.keyboard',
|
||||
'clkp' => 'application/vnd.crick.clicker.palette',
|
||||
@@ -194,6 +199,8 @@ final class MimeType
|
||||
'davmount' => 'application/davmount+xml',
|
||||
'dbf' => 'application/vnd.dbf',
|
||||
'dbk' => 'application/docbook+xml',
|
||||
'dcm' => 'application/dicom',
|
||||
'dcmp' => 'application/vnd.dcmp+xml',
|
||||
'dcr' => 'application/x-director',
|
||||
'dcurl' => 'text/vnd.curl.dcurl',
|
||||
'dd2' => 'application/vnd.oma.dd2+xml',
|
||||
@@ -221,19 +228,22 @@ final class MimeType
|
||||
'dmp' => 'application/vnd.tcpdump.pcap',
|
||||
'dms' => 'application/octet-stream',
|
||||
'dna' => 'application/vnd.dna',
|
||||
'dng' => 'image/x-adobe-dng',
|
||||
'doc' => 'application/msword',
|
||||
'docm' => 'application/vnd.ms-word.template.macroEnabled.12',
|
||||
'docm' => 'application/vnd.ms-word.document.macroenabled.12',
|
||||
'docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
|
||||
'dot' => 'application/msword',
|
||||
'dotm' => 'application/vnd.ms-word.template.macroEnabled.12',
|
||||
'dotm' => 'application/vnd.ms-word.template.macroenabled.12',
|
||||
'dotx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.template',
|
||||
'dp' => 'application/vnd.osgi.dp',
|
||||
'dpg' => 'application/vnd.dpgraph',
|
||||
'dpx' => 'image/dpx',
|
||||
'dra' => 'audio/vnd.dra',
|
||||
'drle' => 'image/dicom-rle',
|
||||
'drm' => 'application/vnd.procreate.dream',
|
||||
'dsc' => 'text/prs.lines.tag',
|
||||
'dssc' => 'application/dssc+der',
|
||||
'dst' => 'application/octet-stream',
|
||||
'dtb' => 'application/x-dtbook+xml',
|
||||
'dtd' => 'application/xml-dtd',
|
||||
'dts' => 'audio/vnd.dts',
|
||||
@@ -285,10 +295,12 @@ final class MimeType
|
||||
'f4v' => 'video/mp4',
|
||||
'f77' => 'text/x-fortran',
|
||||
'f90' => 'text/x-fortran',
|
||||
'facti' => 'image/vnd.blockfact.facti',
|
||||
'fbs' => 'image/vnd.fastbidsheet',
|
||||
'fbx' => 'application/vnd.autodesk.fbx',
|
||||
'fcdt' => 'application/vnd.adobe.formscentral.fcdt',
|
||||
'fcs' => 'application/vnd.isac.fcs',
|
||||
'fdf' => 'application/vnd.fdf',
|
||||
'fdf' => 'application/fdf',
|
||||
'fdt' => 'application/fdt+xml',
|
||||
'fe_launch' => 'application/vnd.denovo.fcselayout-link',
|
||||
'fg5' => 'application/vnd.fujitsu.oasysgp',
|
||||
@@ -330,21 +342,25 @@ final class MimeType
|
||||
'gca' => 'application/x-gca-compressed',
|
||||
'gdl' => 'model/vnd.gdl',
|
||||
'gdoc' => 'application/vnd.google-apps.document',
|
||||
'gdraw' => 'application/vnd.google-apps.drawing',
|
||||
'ged' => 'text/vnd.familysearch.gedcom',
|
||||
'geo' => 'application/vnd.dynageo',
|
||||
'geojson' => 'application/geo+json',
|
||||
'gex' => 'application/vnd.geometry-explorer',
|
||||
'gform' => 'application/vnd.google-apps.form',
|
||||
'ggb' => 'application/vnd.geogebra.file',
|
||||
'ggs' => 'application/vnd.geogebra.slides',
|
||||
'ggt' => 'application/vnd.geogebra.tool',
|
||||
'ghf' => 'application/vnd.groove-help',
|
||||
'gif' => 'image/gif',
|
||||
'gim' => 'application/vnd.groove-identity-message',
|
||||
'gjam' => 'application/vnd.google-apps.jam',
|
||||
'glb' => 'model/gltf-binary',
|
||||
'gltf' => 'model/gltf+json',
|
||||
'gmap' => 'application/vnd.google-apps.map',
|
||||
'gml' => 'application/gml+xml',
|
||||
'gmx' => 'application/vnd.gmx',
|
||||
'gnumeric' => 'application/x-gnumeric',
|
||||
'gpg' => 'application/gpg-keys',
|
||||
'gph' => 'application/vnd.flographit',
|
||||
'gpx' => 'application/gpx+xml',
|
||||
'gqf' => 'application/vnd.grafeq',
|
||||
@@ -354,8 +370,10 @@ final class MimeType
|
||||
'gre' => 'application/vnd.geometry-explorer',
|
||||
'grv' => 'application/vnd.groove-injector',
|
||||
'grxml' => 'application/srgs+xml',
|
||||
'gscript' => 'application/vnd.google-apps.script',
|
||||
'gsf' => 'application/x-font-ghostscript',
|
||||
'gsheet' => 'application/vnd.google-apps.spreadsheet',
|
||||
'gsite' => 'application/vnd.google-apps.site',
|
||||
'gslides' => 'application/vnd.google-apps.presentation',
|
||||
'gtar' => 'application/x-gtar',
|
||||
'gtm' => 'application/vnd.groove-tool-message',
|
||||
@@ -387,7 +405,6 @@ final class MimeType
|
||||
'hpid' => 'application/vnd.hp-hpid',
|
||||
'hps' => 'application/vnd.hp-hps',
|
||||
'hqx' => 'application/mac-binhex40',
|
||||
'hsj2' => 'image/hsj2',
|
||||
'htc' => 'text/x-component',
|
||||
'htke' => 'application/vnd.kenameaapp',
|
||||
'htm' => 'text/html',
|
||||
@@ -399,7 +416,7 @@ final class MimeType
|
||||
'icc' => 'application/vnd.iccprofile',
|
||||
'ice' => 'x-conference/x-cooltalk',
|
||||
'icm' => 'application/vnd.iccprofile',
|
||||
'ico' => 'image/x-icon',
|
||||
'ico' => 'image/vnd.microsoft.icon',
|
||||
'ics' => 'text/calendar',
|
||||
'ief' => 'image/ief',
|
||||
'ifb' => 'text/calendar',
|
||||
@@ -414,6 +431,7 @@ final class MimeType
|
||||
'imp' => 'application/vnd.accpac.simply.imp',
|
||||
'ims' => 'application/vnd.ms-ims',
|
||||
'in' => 'text/plain',
|
||||
'indd' => 'application/x-indesign',
|
||||
'ini' => 'text/plain',
|
||||
'ink' => 'application/inkml+xml',
|
||||
'inkml' => 'application/inkml+xml',
|
||||
@@ -421,6 +439,7 @@ final class MimeType
|
||||
'iota' => 'application/vnd.astraea-software.iota',
|
||||
'ipfix' => 'application/ipfix',
|
||||
'ipk' => 'application/vnd.shana.informed.package',
|
||||
'ipynb' => 'application/x-ipynb+json',
|
||||
'irm' => 'application/vnd.ibm.rights-management',
|
||||
'irp' => 'application/vnd.irepository.package+xml',
|
||||
'iso' => 'application/x-iso9660-image',
|
||||
@@ -430,10 +449,13 @@ final class MimeType
|
||||
'ivu' => 'application/vnd.immervision-ivu',
|
||||
'jad' => 'text/vnd.sun.j2me.app-descriptor',
|
||||
'jade' => 'text/jade',
|
||||
'jaii' => 'image/jaii',
|
||||
'jais' => 'image/jais',
|
||||
'jam' => 'application/vnd.jam',
|
||||
'jar' => 'application/java-archive',
|
||||
'jardiff' => 'application/x-java-archive-diff',
|
||||
'java' => 'text/x-java-source',
|
||||
'jfif' => 'image/jpeg',
|
||||
'jhc' => 'image/jphc',
|
||||
'jisp' => 'application/vnd.jisp',
|
||||
'jls' => 'image/jls',
|
||||
@@ -447,18 +469,19 @@ final class MimeType
|
||||
'jpf' => 'image/jpx',
|
||||
'jpg' => 'image/jpeg',
|
||||
'jpg2' => 'image/jp2',
|
||||
'jpgm' => 'video/jpm',
|
||||
'jpgm' => 'image/jpm',
|
||||
'jpgv' => 'video/jpeg',
|
||||
'jph' => 'image/jph',
|
||||
'jpm' => 'video/jpm',
|
||||
'jpm' => 'image/jpm',
|
||||
'jpx' => 'image/jpx',
|
||||
'js' => 'application/javascript',
|
||||
'js' => 'text/javascript',
|
||||
'json' => 'application/json',
|
||||
'json5' => 'application/json5',
|
||||
'jsonld' => 'application/ld+json',
|
||||
'jsonml' => 'application/jsonml+json',
|
||||
'jsx' => 'text/jsx',
|
||||
'jt' => 'model/jt',
|
||||
'jxl' => 'image/jxl',
|
||||
'jxr' => 'image/jxr',
|
||||
'jxra' => 'image/jxra',
|
||||
'jxrs' => 'image/jxrs',
|
||||
@@ -468,9 +491,10 @@ final class MimeType
|
||||
'jxss' => 'image/jxss',
|
||||
'kar' => 'audio/midi',
|
||||
'karbon' => 'application/vnd.kde.karbon',
|
||||
'kbl' => 'application/kbl+xml',
|
||||
'kdb' => 'application/octet-stream',
|
||||
'kdbx' => 'application/x-keepass2',
|
||||
'key' => 'application/x-iwork-keynote-sffkey',
|
||||
'key' => 'application/vnd.apple.keynote',
|
||||
'kfo' => 'application/vnd.kde.kformula',
|
||||
'kia' => 'application/vnd.kidspiration',
|
||||
'kml' => 'application/vnd.google-earth.kml+xml',
|
||||
@@ -495,7 +519,7 @@ final class MimeType
|
||||
'les' => 'application/vnd.hhe.lesson-player',
|
||||
'less' => 'text/less',
|
||||
'lgr' => 'application/lgr+xml',
|
||||
'lha' => 'application/octet-stream',
|
||||
'lha' => 'application/x-lzh-compressed',
|
||||
'link66' => 'application/vnd.route66.link66+xml',
|
||||
'list' => 'text/plain',
|
||||
'list3820' => 'application/vnd.ibm.modcap',
|
||||
@@ -504,6 +528,7 @@ final class MimeType
|
||||
'lnk' => 'application/x-ms-shortcut',
|
||||
'log' => 'text/plain',
|
||||
'lostxml' => 'application/lost+xml',
|
||||
'lottie' => 'application/zip+dotlottie',
|
||||
'lrf' => 'application/octet-stream',
|
||||
'lrm' => 'application/vnd.ms-lrm',
|
||||
'ltf' => 'application/vnd.frogans.ltf',
|
||||
@@ -511,21 +536,24 @@ final class MimeType
|
||||
'luac' => 'application/x-lua-bytecode',
|
||||
'lvp' => 'audio/vnd.lucent.voice',
|
||||
'lwp' => 'application/vnd.lotus-wordpro',
|
||||
'lzh' => 'application/octet-stream',
|
||||
'm1v' => 'video/mpeg',
|
||||
'm2a' => 'audio/mpeg',
|
||||
'm2v' => 'video/mpeg',
|
||||
'm3a' => 'audio/mpeg',
|
||||
'm3u' => 'text/plain',
|
||||
'm3u8' => 'application/vnd.apple.mpegurl',
|
||||
'm4a' => 'audio/x-m4a',
|
||||
'm4p' => 'application/mp4',
|
||||
'm4s' => 'video/iso.segment',
|
||||
'm4u' => 'application/vnd.mpegurl',
|
||||
'm4v' => 'video/x-m4v',
|
||||
'lzh' => 'application/x-lzh-compressed',
|
||||
'm13' => 'application/x-msmediaview',
|
||||
'm14' => 'application/x-msmediaview',
|
||||
'm1v' => 'video/mpeg',
|
||||
'm21' => 'application/mp21',
|
||||
'm2a' => 'audio/mpeg',
|
||||
'm2t' => 'video/mp2t',
|
||||
'm2ts' => 'video/mp2t',
|
||||
'm2v' => 'video/mpeg',
|
||||
'm3a' => 'audio/mpeg',
|
||||
'm3u' => 'audio/x-mpegurl',
|
||||
'm3u8' => 'application/vnd.apple.mpegurl',
|
||||
'm4a' => 'audio/mp4',
|
||||
'm4b' => 'audio/mp4',
|
||||
'm4p' => 'application/mp4',
|
||||
'm4s' => 'video/iso.segment',
|
||||
'm4u' => 'video/vnd.mpegurl',
|
||||
'm4v' => 'video/x-m4v',
|
||||
'ma' => 'application/mathematica',
|
||||
'mads' => 'application/mads+xml',
|
||||
'maei' => 'application/mmt-aei+xml',
|
||||
@@ -556,6 +584,8 @@ final class MimeType
|
||||
'mft' => 'application/rpki-manifest',
|
||||
'mgp' => 'application/vnd.osgeo.mapguide.package',
|
||||
'mgz' => 'application/vnd.proteus.magazine',
|
||||
'mht' => 'message/rfc822',
|
||||
'mhtml' => 'message/rfc822',
|
||||
'mid' => 'audio/midi',
|
||||
'midi' => 'audio/midi',
|
||||
'mie' => 'application/x-mie',
|
||||
@@ -564,11 +594,11 @@ final class MimeType
|
||||
'mj2' => 'video/mj2',
|
||||
'mjp2' => 'video/mj2',
|
||||
'mjs' => 'text/javascript',
|
||||
'mk3d' => 'video/x-matroska',
|
||||
'mka' => 'audio/x-matroska',
|
||||
'mk3d' => 'video/matroska-3d',
|
||||
'mka' => 'audio/matroska',
|
||||
'mkd' => 'text/x-markdown',
|
||||
'mks' => 'video/x-matroska',
|
||||
'mkv' => 'video/x-matroska',
|
||||
'mkv' => 'video/matroska',
|
||||
'mlp' => 'application/vnd.dolby.mlp',
|
||||
'mmd' => 'application/vnd.chipnuts.karaoke-mmd',
|
||||
'mmf' => 'application/vnd.smaf',
|
||||
@@ -581,13 +611,13 @@ final class MimeType
|
||||
'mov' => 'video/quicktime',
|
||||
'movie' => 'video/x-sgi-movie',
|
||||
'mp2' => 'audio/mpeg',
|
||||
'mp21' => 'application/mp21',
|
||||
'mp2a' => 'audio/mpeg',
|
||||
'mp3' => 'audio/mpeg',
|
||||
'mp4' => 'video/mp4',
|
||||
'mp4a' => 'audio/mp4',
|
||||
'mp4s' => 'application/mp4',
|
||||
'mp4v' => 'video/mp4',
|
||||
'mp21' => 'application/mp21',
|
||||
'mpc' => 'application/vnd.mophun.certificate',
|
||||
'mpd' => 'application/dash+xml',
|
||||
'mpe' => 'video/mpeg',
|
||||
@@ -612,7 +642,7 @@ final class MimeType
|
||||
'msf' => 'application/vnd.epson.msf',
|
||||
'msg' => 'application/vnd.ms-outlook',
|
||||
'msh' => 'model/mesh',
|
||||
'msi' => 'application/x-msdownload',
|
||||
'msi' => 'application/octet-stream',
|
||||
'msix' => 'application/msix',
|
||||
'msixbundle' => 'application/msixbundle',
|
||||
'msl' => 'application/vnd.mobius.msl',
|
||||
@@ -620,7 +650,7 @@ final class MimeType
|
||||
'msp' => 'application/octet-stream',
|
||||
'msty' => 'application/vnd.muvee.style',
|
||||
'mtl' => 'model/mtl',
|
||||
'mts' => 'model/vnd.mts',
|
||||
'mts' => 'video/mp2t',
|
||||
'mus' => 'application/vnd.musician',
|
||||
'musd' => 'application/mmt-usd+xml',
|
||||
'musicxml' => 'application/vnd.recordare.musicxml+xml',
|
||||
@@ -639,6 +669,7 @@ final class MimeType
|
||||
'nbp' => 'application/vnd.wolfram.player',
|
||||
'nc' => 'application/x-netcdf',
|
||||
'ncx' => 'application/x-dtbncx+xml',
|
||||
'ndjson' => 'application/x-ndjson',
|
||||
'nfo' => 'text/x-nfo',
|
||||
'ngdat' => 'application/vnd.nokia.n-gage.data',
|
||||
'nitf' => 'application/vnd.nitf',
|
||||
@@ -653,7 +684,7 @@ final class MimeType
|
||||
'nsf' => 'application/vnd.lotus-notes',
|
||||
'nt' => 'application/n-triples',
|
||||
'ntf' => 'application/vnd.nitf',
|
||||
'numbers' => 'application/x-iwork-numbers-sffnumbers',
|
||||
'numbers' => 'application/vnd.apple.numbers',
|
||||
'nzb' => 'application/x-nzb',
|
||||
'oa2' => 'application/vnd.fujitsu.oasys2',
|
||||
'oa3' => 'application/vnd.fujitsu.oasys3',
|
||||
@@ -678,6 +709,8 @@ final class MimeType
|
||||
'ogv' => 'video/ogg',
|
||||
'ogx' => 'application/ogg',
|
||||
'omdoc' => 'application/omdoc+xml',
|
||||
'one' => 'application/onenote',
|
||||
'onea' => 'application/onenote',
|
||||
'onepkg' => 'application/onenote',
|
||||
'onetmp' => 'application/onenote',
|
||||
'onetoc' => 'application/onenote',
|
||||
@@ -686,7 +719,7 @@ final class MimeType
|
||||
'opml' => 'text/x-opml',
|
||||
'oprc' => 'application/vnd.palm',
|
||||
'opus' => 'audio/ogg',
|
||||
'org' => 'text/x-org',
|
||||
'org' => 'application/vnd.lotus-organizer',
|
||||
'osf' => 'application/vnd.yamaha.openscoreformat',
|
||||
'osfpvg' => 'application/vnd.yamaha.openscoreformat.osfpvg+xml',
|
||||
'osm' => 'application/vnd.openstreetmap.data+xml',
|
||||
@@ -704,17 +737,20 @@ final class MimeType
|
||||
'oxps' => 'application/oxps',
|
||||
'oxt' => 'application/vnd.openofficeorg.extension',
|
||||
'p' => 'text/x-pascal',
|
||||
'p10' => 'application/pkcs10',
|
||||
'p12' => 'application/x-pkcs12',
|
||||
'p21' => 'model/step',
|
||||
'p7a' => 'application/x-pkcs7-signature',
|
||||
'p7b' => 'application/x-pkcs7-certificates',
|
||||
'p7c' => 'application/pkcs7-mime',
|
||||
'p7e' => 'application/pkcs7-mime',
|
||||
'p7m' => 'application/pkcs7-mime',
|
||||
'p7r' => 'application/x-pkcs7-certreqresp',
|
||||
'p7s' => 'application/pkcs7-signature',
|
||||
'p8' => 'application/pkcs8',
|
||||
'p10' => 'application/x-pkcs10',
|
||||
'p12' => 'application/x-pkcs12',
|
||||
'pac' => 'application/x-ns-proxy-autoconfig',
|
||||
'pages' => 'application/x-iwork-pages-sffpages',
|
||||
'pages' => 'application/vnd.apple.pages',
|
||||
'parquet' => 'application/vnd.apache.parquet',
|
||||
'pas' => 'text/x-pascal',
|
||||
'paw' => 'application/vnd.pawaafile',
|
||||
'pbd' => 'application/vnd.powerbuilder6',
|
||||
@@ -725,8 +761,8 @@ final class MimeType
|
||||
'pclxl' => 'application/vnd.hp-pclxl',
|
||||
'pct' => 'image/x-pict',
|
||||
'pcurl' => 'application/vnd.curl.pcurl',
|
||||
'pcx' => 'image/x-pcx',
|
||||
'pdb' => 'application/x-pilot',
|
||||
'pcx' => 'image/vnd.zbrush.pcx',
|
||||
'pdb' => 'application/vnd.palm',
|
||||
'pde' => 'text/x-processing',
|
||||
'pdf' => 'application/pdf',
|
||||
'pem' => 'application/x-x509-user-cert',
|
||||
@@ -737,7 +773,7 @@ final class MimeType
|
||||
'pfx' => 'application/x-pkcs12',
|
||||
'pgm' => 'image/x-portable-graymap',
|
||||
'pgn' => 'application/x-chess-pgn',
|
||||
'pgp' => 'application/pgp',
|
||||
'pgp' => 'application/pgp-encrypted',
|
||||
'phar' => 'application/octet-stream',
|
||||
'php' => 'application/x-httpd-php',
|
||||
'php3' => 'application/x-httpd-php',
|
||||
@@ -760,17 +796,17 @@ final class MimeType
|
||||
'pnm' => 'image/x-portable-anymap',
|
||||
'portpkg' => 'application/vnd.macports.portpkg',
|
||||
'pot' => 'application/vnd.ms-powerpoint',
|
||||
'potm' => 'application/vnd.ms-powerpoint.presentation.macroEnabled.12',
|
||||
'potm' => 'application/vnd.ms-powerpoint.template.macroenabled.12',
|
||||
'potx' => 'application/vnd.openxmlformats-officedocument.presentationml.template',
|
||||
'ppa' => 'application/vnd.ms-powerpoint',
|
||||
'ppam' => 'application/vnd.ms-powerpoint.addin.macroEnabled.12',
|
||||
'ppam' => 'application/vnd.ms-powerpoint.addin.macroenabled.12',
|
||||
'ppd' => 'application/vnd.cups-ppd',
|
||||
'ppm' => 'image/x-portable-pixmap',
|
||||
'pps' => 'application/vnd.ms-powerpoint',
|
||||
'ppsm' => 'application/vnd.ms-powerpoint.slideshow.macroEnabled.12',
|
||||
'ppsm' => 'application/vnd.ms-powerpoint.slideshow.macroenabled.12',
|
||||
'ppsx' => 'application/vnd.openxmlformats-officedocument.presentationml.slideshow',
|
||||
'ppt' => 'application/powerpoint',
|
||||
'pptm' => 'application/vnd.ms-powerpoint.presentation.macroEnabled.12',
|
||||
'ppt' => 'application/vnd.ms-powerpoint',
|
||||
'pptm' => 'application/vnd.ms-powerpoint.presentation.macroenabled.12',
|
||||
'pptx' => 'application/vnd.openxmlformats-officedocument.presentationml.presentation',
|
||||
'pqa' => 'application/vnd.palm',
|
||||
'prc' => 'model/prc',
|
||||
@@ -779,14 +815,16 @@ final class MimeType
|
||||
'provx' => 'application/provenance+xml',
|
||||
'ps' => 'application/postscript',
|
||||
'psb' => 'application/vnd.3gpp.pic-bw-small',
|
||||
'psd' => 'application/x-photoshop',
|
||||
'psd' => 'image/vnd.adobe.photoshop',
|
||||
'psf' => 'application/x-font-linux-psf',
|
||||
'pskcxml' => 'application/pskc+xml',
|
||||
'pti' => 'image/prs.pti',
|
||||
'ptid' => 'application/vnd.pvi.ptid1',
|
||||
'pub' => 'application/x-mspublisher',
|
||||
'pv' => 'application/octet-stream',
|
||||
'pvb' => 'application/vnd.3gpp.pic-bw-var',
|
||||
'pwn' => 'application/vnd.3m.post-it-notes',
|
||||
'pxf' => 'application/octet-stream',
|
||||
'pya' => 'audio/vnd.ms-playready.media.pya',
|
||||
'pyo' => 'model/vnd.pytha.pyox',
|
||||
'pyox' => 'model/vnd.pytha.pyox',
|
||||
@@ -806,7 +844,7 @@ final class MimeType
|
||||
'ram' => 'audio/x-pn-realaudio',
|
||||
'raml' => 'application/raml+yaml',
|
||||
'rapd' => 'application/route-apd+xml',
|
||||
'rar' => 'application/x-rar',
|
||||
'rar' => 'application/vnd.rar',
|
||||
'ras' => 'image/x-cmu-raster',
|
||||
'rcprofile' => 'application/vnd.ipunplugged.rcprofile',
|
||||
'rdf' => 'application/rdf+xml',
|
||||
@@ -821,7 +859,7 @@ final class MimeType
|
||||
'rl' => 'application/resource-lists+xml',
|
||||
'rlc' => 'image/vnd.fujixerox.edmics-rlc',
|
||||
'rld' => 'application/resource-lists-diff+xml',
|
||||
'rm' => 'audio/x-pn-realaudio',
|
||||
'rm' => 'application/vnd.rn-realmedia',
|
||||
'rmi' => 'audio/midi',
|
||||
'rmp' => 'audio/x-pn-realaudio-plugin',
|
||||
'rms' => 'application/vnd.jcp.javame.midlet-rms',
|
||||
@@ -831,7 +869,7 @@ final class MimeType
|
||||
'roa' => 'application/rpki-roa',
|
||||
'roff' => 'text/troff',
|
||||
'rp9' => 'application/vnd.cloanto.rp9',
|
||||
'rpm' => 'audio/x-pn-realaudio-plugin',
|
||||
'rpm' => 'application/x-redhat-package-manager',
|
||||
'rpss' => 'application/vnd.nokia.radio-presets',
|
||||
'rpst' => 'application/vnd.nokia.radio-preset',
|
||||
'rq' => 'application/sparql-query',
|
||||
@@ -865,7 +903,7 @@ final class MimeType
|
||||
'sdkm' => 'application/vnd.solent.sdkm+xml',
|
||||
'sdp' => 'application/sdp',
|
||||
'sdw' => 'application/vnd.stardivision.writer',
|
||||
'sea' => 'application/octet-stream',
|
||||
'sea' => 'application/x-sea',
|
||||
'see' => 'application/vnd.seemail',
|
||||
'seed' => 'application/vnd.fdsn.seed',
|
||||
'sema' => 'application/vnd.sema',
|
||||
@@ -910,8 +948,8 @@ final class MimeType
|
||||
'slt' => 'application/vnd.epson.salt',
|
||||
'sm' => 'application/vnd.stepmania.stepchart',
|
||||
'smf' => 'application/vnd.stardivision.math',
|
||||
'smi' => 'application/smil',
|
||||
'smil' => 'application/smil',
|
||||
'smi' => 'application/smil+xml',
|
||||
'smil' => 'application/smil+xml',
|
||||
'smv' => 'video/x-smv',
|
||||
'smzip' => 'application/vnd.stepmania.package',
|
||||
'snd' => 'audio/basic',
|
||||
@@ -925,7 +963,9 @@ final class MimeType
|
||||
'spp' => 'application/scvp-vp-response',
|
||||
'spq' => 'application/scvp-vp-request',
|
||||
'spx' => 'audio/ogg',
|
||||
'sql' => 'application/x-sql',
|
||||
'sql' => 'application/sql',
|
||||
'sqlite' => 'application/vnd.sqlite3',
|
||||
'sqlite3' => 'application/vnd.sqlite3',
|
||||
'src' => 'application/x-wais-source',
|
||||
'srt' => 'application/x-subrip',
|
||||
'sru' => 'application/sru+xml',
|
||||
@@ -938,12 +978,13 @@ final class MimeType
|
||||
'st' => 'application/vnd.sailingtracker.track',
|
||||
'stc' => 'application/vnd.sun.xml.calc.template',
|
||||
'std' => 'application/vnd.sun.xml.draw.template',
|
||||
'step' => 'application/STEP',
|
||||
'step' => 'model/step',
|
||||
'stf' => 'application/vnd.wt.stf',
|
||||
'sti' => 'application/vnd.sun.xml.impress.template',
|
||||
'stk' => 'application/hyperstudio',
|
||||
'stl' => 'model/stl',
|
||||
'stp' => 'application/STEP',
|
||||
'stp' => 'model/step',
|
||||
'stpnc' => 'model/step',
|
||||
'stpx' => 'model/step+xml',
|
||||
'stpxz' => 'model/step-xml+zip',
|
||||
'stpz' => 'model/step+zip',
|
||||
@@ -951,7 +992,7 @@ final class MimeType
|
||||
'stw' => 'application/vnd.sun.xml.writer.template',
|
||||
'styl' => 'text/stylus',
|
||||
'stylus' => 'text/stylus',
|
||||
'sub' => 'text/vnd.dvb.subtitle',
|
||||
'sub' => 'image/vnd.dvb.subtitle',
|
||||
'sus' => 'application/vnd.sus-calendar',
|
||||
'susp' => 'application/vnd.sus-calendar',
|
||||
'sv4cpio' => 'application/x-sv4cpio',
|
||||
@@ -970,6 +1011,7 @@ final class MimeType
|
||||
'sxi' => 'application/vnd.sun.xml.impress',
|
||||
'sxm' => 'application/vnd.sun.xml.math',
|
||||
'sxw' => 'application/vnd.sun.xml.writer',
|
||||
'systemverify' => 'application/vnd.pp.systemverify+xml',
|
||||
't' => 'text/troff',
|
||||
't3' => 'application/x-t3vm-image',
|
||||
't38' => 'image/t38',
|
||||
@@ -991,7 +1033,7 @@ final class MimeType
|
||||
'tfm' => 'application/x-tex-tfm',
|
||||
'tfx' => 'image/tiff-fx',
|
||||
'tga' => 'image/x-tga',
|
||||
'tgz' => 'application/x-tar',
|
||||
'tgz' => 'application/gzip',
|
||||
'thmx' => 'application/vnd.ms-officetheme',
|
||||
'tif' => 'image/tiff',
|
||||
'tiff' => 'image/tiff',
|
||||
@@ -1017,12 +1059,12 @@ final class MimeType
|
||||
'txd' => 'application/vnd.genomatix.tuxedo',
|
||||
'txf' => 'application/vnd.mobius.txf',
|
||||
'txt' => 'text/plain',
|
||||
'u32' => 'application/x-authorware-bin',
|
||||
'u3d' => 'model/u3d',
|
||||
'u8dsn' => 'message/global-delivery-status',
|
||||
'u8hdr' => 'message/global-headers',
|
||||
'u8mdn' => 'message/global-disposition-notification',
|
||||
'u8msg' => 'message/global',
|
||||
'u32' => 'application/x-authorware-bin',
|
||||
'ubj' => 'application/ubjson',
|
||||
'udeb' => 'application/x-debian-package',
|
||||
'ufd' => 'application/vnd.ufdl',
|
||||
@@ -1078,16 +1120,18 @@ final class MimeType
|
||||
'vcx' => 'application/vnd.vcx',
|
||||
'vdi' => 'application/x-virtualbox-vdi',
|
||||
'vds' => 'model/vnd.sap.vds',
|
||||
'vdx' => 'application/vnd.ms-visio.viewer',
|
||||
'vec' => 'application/vec+xml',
|
||||
'vhd' => 'application/x-virtualbox-vhd',
|
||||
'vis' => 'application/vnd.visionary',
|
||||
'viv' => 'video/vnd.vivo',
|
||||
'vlc' => 'application/videolan',
|
||||
'vmdk' => 'application/x-virtualbox-vmdk',
|
||||
'vob' => 'video/x-ms-vob',
|
||||
'vor' => 'application/vnd.stardivision.writer',
|
||||
'vox' => 'application/x-authorware-bin',
|
||||
'vrml' => 'model/vrml',
|
||||
'vsd' => 'application/vnd.visio',
|
||||
'vsdx' => 'application/vnd.visio',
|
||||
'vsf' => 'application/vnd.vsf',
|
||||
'vss' => 'application/vnd.visio',
|
||||
'vst' => 'application/vnd.visio',
|
||||
@@ -1095,17 +1139,18 @@ final class MimeType
|
||||
'vtf' => 'image/vnd.valve.source.texture',
|
||||
'vtt' => 'text/vtt',
|
||||
'vtu' => 'model/vnd.vtu',
|
||||
'vtx' => 'application/vnd.visio',
|
||||
'vxml' => 'application/voicexml+xml',
|
||||
'w3d' => 'application/x-director',
|
||||
'wad' => 'application/x-doom',
|
||||
'wadl' => 'application/vnd.sun.wadl+xml',
|
||||
'war' => 'application/java-archive',
|
||||
'wasm' => 'application/wasm',
|
||||
'wav' => 'audio/x-wav',
|
||||
'wav' => 'audio/wav',
|
||||
'wax' => 'audio/x-ms-wax',
|
||||
'wbmp' => 'image/vnd.wap.wbmp',
|
||||
'wbs' => 'application/vnd.criticaltools.wbs+xml',
|
||||
'wbxml' => 'application/wbxml',
|
||||
'wbxml' => 'application/vnd.wap.wbxml',
|
||||
'wcm' => 'application/vnd.ms-works',
|
||||
'wdb' => 'application/vnd.ms-works',
|
||||
'wdp' => 'image/vnd.ms-photo',
|
||||
@@ -1124,12 +1169,12 @@ final class MimeType
|
||||
'wmd' => 'application/x-ms-wmd',
|
||||
'wmf' => 'image/wmf',
|
||||
'wml' => 'text/vnd.wap.wml',
|
||||
'wmlc' => 'application/wmlc',
|
||||
'wmlc' => 'application/vnd.wap.wmlc',
|
||||
'wmls' => 'text/vnd.wap.wmlscript',
|
||||
'wmlsc' => 'application/vnd.wap.wmlscriptc',
|
||||
'wmv' => 'video/x-ms-wmv',
|
||||
'wmx' => 'video/x-ms-wmx',
|
||||
'wmz' => 'application/x-msmetafile',
|
||||
'wmz' => 'application/x-ms-wmz',
|
||||
'woff' => 'font/woff',
|
||||
'woff2' => 'font/woff2',
|
||||
'word' => 'application/msword',
|
||||
@@ -1144,13 +1189,13 @@ final class MimeType
|
||||
'wspolicy' => 'application/wspolicy+xml',
|
||||
'wtb' => 'application/vnd.webturbo',
|
||||
'wvx' => 'video/x-ms-wvx',
|
||||
'x32' => 'application/x-authorware-bin',
|
||||
'x3d' => 'model/x3d+xml',
|
||||
'x3db' => 'model/x3d+fastinfoset',
|
||||
'x3dbz' => 'model/x3d+binary',
|
||||
'x3dv' => 'model/x3d-vrml',
|
||||
'x3dvz' => 'model/x3d+vrml',
|
||||
'x3dz' => 'model/x3d+xml',
|
||||
'x32' => 'application/x-authorware-bin',
|
||||
'x_b' => 'model/vnd.parasolid.transmit.binary',
|
||||
'x_t' => 'model/vnd.parasolid.transmit.text',
|
||||
'xaml' => 'application/xaml+xml',
|
||||
@@ -1162,6 +1207,7 @@ final class MimeType
|
||||
'xbm' => 'image/x-xbitmap',
|
||||
'xca' => 'application/xcap-caps+xml',
|
||||
'xcs' => 'application/calendar+xml',
|
||||
'xdcf' => 'application/vnd.gov.sk.xmldatacontainer+xml',
|
||||
'xdf' => 'application/xcap-diff+xml',
|
||||
'xdm' => 'application/vnd.syncml.dm+xml',
|
||||
'xdp' => 'application/vnd.adobe.xdp+xml',
|
||||
@@ -1177,18 +1223,18 @@ final class MimeType
|
||||
'xhtml' => 'application/xhtml+xml',
|
||||
'xhvml' => 'application/xv+xml',
|
||||
'xif' => 'image/vnd.xiff',
|
||||
'xl' => 'application/excel',
|
||||
'xl' => 'application/vnd.ms-excel',
|
||||
'xla' => 'application/vnd.ms-excel',
|
||||
'xlam' => 'application/vnd.ms-excel.addin.macroEnabled.12',
|
||||
'xlam' => 'application/vnd.ms-excel.addin.macroenabled.12',
|
||||
'xlc' => 'application/vnd.ms-excel',
|
||||
'xlf' => 'application/xliff+xml',
|
||||
'xlm' => 'application/vnd.ms-excel',
|
||||
'xls' => 'application/vnd.ms-excel',
|
||||
'xlsb' => 'application/vnd.ms-excel.sheet.binary.macroEnabled.12',
|
||||
'xlsm' => 'application/vnd.ms-excel.sheet.macroEnabled.12',
|
||||
'xlsb' => 'application/vnd.ms-excel.sheet.binary.macroenabled.12',
|
||||
'xlsm' => 'application/vnd.ms-excel.sheet.macroenabled.12',
|
||||
'xlsx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
|
||||
'xlt' => 'application/vnd.ms-excel',
|
||||
'xltm' => 'application/vnd.ms-excel.template.macroEnabled.12',
|
||||
'xltm' => 'application/vnd.ms-excel.template.macroenabled.12',
|
||||
'xltx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.template',
|
||||
'xlw' => 'application/vnd.ms-excel',
|
||||
'xm' => 'audio/xm',
|
||||
@@ -1205,7 +1251,7 @@ final class MimeType
|
||||
'xpx' => 'application/vnd.intercon.formnet',
|
||||
'xsd' => 'application/xml',
|
||||
'xsf' => 'application/prs.xsf+xml',
|
||||
'xsl' => 'application/xml',
|
||||
'xsl' => 'application/xslt+xml',
|
||||
'xslt' => 'application/xslt+xml',
|
||||
'xsm' => 'application/vnd.syncml+xml',
|
||||
'xspf' => 'application/xspf+xml',
|
||||
|
||||
@@ -23,11 +23,18 @@ final class MultipartStream implements StreamInterface
|
||||
/**
|
||||
* @param array $elements Array of associative arrays, each containing a
|
||||
* required "name" key mapping to the form field,
|
||||
* name, a required "contents" key mapping to a
|
||||
* StreamInterface/resource/string, an optional
|
||||
* "headers" associative array of custom headers,
|
||||
* and an optional "filename" key mapping to a
|
||||
* string to send as the filename in the part.
|
||||
* name, a required "contents" key mapping to any
|
||||
* value accepted by Utils::streamFor() (scalar,
|
||||
* null, resource, StreamInterface, Iterator, or
|
||||
* callable), or an array for nested expansion.
|
||||
* Optional keys include "headers" (associative
|
||||
* array of custom headers) and "filename" (string
|
||||
* to send as the filename in the part).
|
||||
* When "contents" is an array, it is recursively
|
||||
* expanded into multiple fields using bracket notation
|
||||
* (e.g., name[0][key]). Empty arrays produce no fields.
|
||||
* The "filename" and "headers" options cannot be used
|
||||
* with array contents.
|
||||
* @param string $boundary You can optionally provide a specific boundary
|
||||
*
|
||||
* @throws \InvalidArgumentException
|
||||
@@ -91,6 +98,22 @@ final class MultipartStream implements StreamInterface
|
||||
}
|
||||
}
|
||||
|
||||
if (!is_string($element['name']) && !is_int($element['name'])) {
|
||||
throw new \InvalidArgumentException("The 'name' key must be a string or integer");
|
||||
}
|
||||
|
||||
if (is_array($element['contents'])) {
|
||||
if (array_key_exists('filename', $element) || array_key_exists('headers', $element)) {
|
||||
throw new \InvalidArgumentException(
|
||||
"The 'filename' and 'headers' options cannot be used when 'contents' is an array"
|
||||
);
|
||||
}
|
||||
|
||||
$this->addNestedElements($stream, $element['contents'], (string) $element['name']);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
$element['contents'] = Utils::streamFor($element['contents']);
|
||||
|
||||
if (empty($element['filename'])) {
|
||||
@@ -101,7 +124,7 @@ final class MultipartStream implements StreamInterface
|
||||
}
|
||||
|
||||
[$body, $headers] = $this->createElement(
|
||||
$element['name'],
|
||||
(string) $element['name'],
|
||||
$element['contents'],
|
||||
$element['filename'] ?? null,
|
||||
$element['headers'] ?? []
|
||||
@@ -112,6 +135,24 @@ final class MultipartStream implements StreamInterface
|
||||
$stream->addStream(Utils::streamFor("\r\n"));
|
||||
}
|
||||
|
||||
/**
|
||||
* Recursively expand array contents into multiple form fields.
|
||||
*
|
||||
* @param array<array-key, mixed> $contents
|
||||
*/
|
||||
private function addNestedElements(AppendStream $stream, array $contents, string $root): void
|
||||
{
|
||||
foreach ($contents as $key => $value) {
|
||||
$fieldName = $root === '' ? sprintf('[%s]', (string) $key) : sprintf('%s[%s]', $root, (string) $key);
|
||||
|
||||
if (is_array($value)) {
|
||||
$this->addNestedElements($stream, $value, $fieldName);
|
||||
} else {
|
||||
$this->addElement($stream, ['name' => $fieldName, 'contents' => $value]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string[] $headers
|
||||
*
|
||||
|
||||
@@ -40,7 +40,7 @@ class Request implements RequestInterface
|
||||
string $version = '1.1'
|
||||
) {
|
||||
$this->assertMethod($method);
|
||||
if (!($uri instanceof UriInterface)) {
|
||||
if (!$uri instanceof UriInterface) {
|
||||
$uri = new Uri($uri);
|
||||
}
|
||||
|
||||
|
||||
@@ -51,7 +51,7 @@ class Uri implements UriInterface, \JsonSerializable
|
||||
* @see https://datatracker.ietf.org/doc/html/rfc3986#section-2.2
|
||||
*/
|
||||
private const CHAR_SUB_DELIMS = '!\$&\'\(\)\*\+,;=';
|
||||
private const QUERY_SEPARATORS_REPLACEMENT = ['=' => '%3D', '&' => '%26'];
|
||||
private const QUERY_SEPARATORS_REPLACEMENT = ['=' => '%3D', '&' => '%26', '+' => '%2B'];
|
||||
|
||||
/** @var string Uri scheme. */
|
||||
private $scheme = '';
|
||||
@@ -661,7 +661,8 @@ class Uri implements UriInterface, \JsonSerializable
|
||||
|
||||
private static function generateQueryString(string $key, ?string $value): string
|
||||
{
|
||||
// Query string separators ("=", "&") within the key or value need to be encoded
|
||||
// Query string separators ("=", "&") and literal plus signs ("+") within the
|
||||
// key or value need to be encoded
|
||||
// (while preventing double-encoding) before setting the query string. All other
|
||||
// chars that need percent-encoding will be encoded by withQuery().
|
||||
$queryString = strtr($key, self::QUERY_SEPARATORS_REPLACEMENT);
|
||||
|
||||
@@ -1,6 +1,12 @@
|
||||
OAuth 2.0 Google Provider Changelog
|
||||
|
||||
|
||||
## 4.2.0 - 2026-03-09
|
||||
|
||||
### Added
|
||||
|
||||
- Allow `oauth2-client` version 2 or 3, #140 by @garak
|
||||
|
||||
## 4.1.0 - 2025-12-15
|
||||
|
||||
### Added
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
"minimum-stability": "stable",
|
||||
"require": {
|
||||
"php": "^7.3 || ^8.0",
|
||||
"league/oauth2-client": "^2.0"
|
||||
"league/oauth2-client": "^2.0 || ^3.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"eloquent/phony-phpunit": "^6.0 || ^7.1",
|
||||
|
||||
@@ -192,8 +192,7 @@ abstract class AbstractTagAwareAdapter implements TagAwareAdapterInterface, TagA
|
||||
if (\is_array($e) || 1 === \count($values)) {
|
||||
foreach (\is_array($e) ? $e : array_keys($values) as $id) {
|
||||
$ok = false;
|
||||
$v = $values[$id];
|
||||
$type = get_debug_type($v);
|
||||
$type = \array_key_exists($id, $values) ? get_debug_type($values[$id]) : 'unknown';
|
||||
$message = \sprintf('Failed to save key "{key}" of type %s%s', $type, $e instanceof \Exception ? ': '.$e->getMessage() : '.');
|
||||
CacheItem::log($this->logger, $message, ['key' => substr($id, \strlen($this->namespace)), 'exception' => $e instanceof \Exception ? $e : null, 'cache-adapter' => get_debug_type($this)]);
|
||||
}
|
||||
|
||||
24
lib/symfony/cache/Adapter/ArrayAdapter.php
vendored
24
lib/symfony/cache/Adapter/ArrayAdapter.php
vendored
@@ -34,6 +34,7 @@ class ArrayAdapter implements AdapterInterface, CacheInterface, LoggerAwareInter
|
||||
private array $values = [];
|
||||
private array $tags = [];
|
||||
private array $expiries = [];
|
||||
private array $explicitExpiries = [];
|
||||
private int $defaultLifetime;
|
||||
private float $maxLifetime;
|
||||
private int $maxItems;
|
||||
@@ -58,7 +59,7 @@ class ArrayAdapter implements AdapterInterface, CacheInterface, LoggerAwareInter
|
||||
$this->maxLifetime = $maxLifetime;
|
||||
$this->maxItems = $maxItems;
|
||||
self::$createCacheItem ??= \Closure::bind(
|
||||
static function ($key, $value, $isHit, $tags) {
|
||||
static function ($key, $value, $isHit, $tags, $expiry = null) {
|
||||
$item = new CacheItem();
|
||||
$item->key = $key;
|
||||
$item->value = $value;
|
||||
@@ -66,6 +67,9 @@ class ArrayAdapter implements AdapterInterface, CacheInterface, LoggerAwareInter
|
||||
if (null !== $tags) {
|
||||
$item->metadata[CacheItem::METADATA_TAGS] = $tags;
|
||||
}
|
||||
if (null !== $expiry) {
|
||||
$item->metadata[CacheItem::METADATA_EXPIRY] = $expiry;
|
||||
}
|
||||
|
||||
return $item;
|
||||
},
|
||||
@@ -126,7 +130,7 @@ class ArrayAdapter implements AdapterInterface, CacheInterface, LoggerAwareInter
|
||||
$value = $this->storeSerialized ? $this->unfreeze($key, $isHit) : $this->values[$key];
|
||||
}
|
||||
|
||||
return (self::$createCacheItem)($key, $value, $isHit, $this->tags[$key] ?? null);
|
||||
return (self::$createCacheItem)($key, $value, $isHit, $this->tags[$key] ?? null, $this->explicitExpiries[$key] ?? null);
|
||||
}
|
||||
|
||||
public function getItems(array $keys = []): iterable
|
||||
@@ -139,7 +143,7 @@ class ArrayAdapter implements AdapterInterface, CacheInterface, LoggerAwareInter
|
||||
public function deleteItem(mixed $key): bool
|
||||
{
|
||||
\assert('' !== CacheItem::validateKey($key));
|
||||
unset($this->values[$key], $this->tags[$key], $this->expiries[$key]);
|
||||
unset($this->values[$key], $this->tags[$key], $this->expiries[$key], $this->explicitExpiries[$key]);
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -193,13 +197,19 @@ class ArrayAdapter implements AdapterInterface, CacheInterface, LoggerAwareInter
|
||||
break;
|
||||
}
|
||||
|
||||
unset($this->values[$k], $this->tags[$k], $this->expiries[$k]);
|
||||
unset($this->values[$k], $this->tags[$k], $this->expiries[$k], $this->explicitExpiries[$k]);
|
||||
}
|
||||
}
|
||||
|
||||
$this->values[$key] = $value;
|
||||
$this->expiries[$key] = $expiry ?? \PHP_INT_MAX;
|
||||
|
||||
if (null !== $item["\0*\0expiry"] && \PHP_INT_MAX !== $this->expiries[$key]) {
|
||||
$this->explicitExpiries[$key] = $this->expiries[$key];
|
||||
} else {
|
||||
unset($this->explicitExpiries[$key]);
|
||||
}
|
||||
|
||||
if (null === $this->tags[$key] = $item["\0*\0newMetadata"][CacheItem::METADATA_TAGS] ?? null) {
|
||||
unset($this->tags[$key]);
|
||||
}
|
||||
@@ -224,7 +234,7 @@ class ArrayAdapter implements AdapterInterface, CacheInterface, LoggerAwareInter
|
||||
|
||||
foreach ($this->values as $key => $value) {
|
||||
if (!isset($this->expiries[$key]) || $this->expiries[$key] <= $now || str_starts_with($key, $prefix)) {
|
||||
unset($this->values[$key], $this->tags[$key], $this->expiries[$key]);
|
||||
unset($this->values[$key], $this->tags[$key], $this->expiries[$key], $this->explicitExpiries[$key]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -233,7 +243,7 @@ class ArrayAdapter implements AdapterInterface, CacheInterface, LoggerAwareInter
|
||||
}
|
||||
}
|
||||
|
||||
$this->values = $this->tags = $this->expiries = [];
|
||||
$this->values = $this->tags = $this->expiries = $this->explicitExpiries = [];
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -290,7 +300,7 @@ class ArrayAdapter implements AdapterInterface, CacheInterface, LoggerAwareInter
|
||||
}
|
||||
unset($keys[$i]);
|
||||
|
||||
yield $key => $f($key, $value, $isHit, $this->tags[$key] ?? null);
|
||||
yield $key => $f($key, $value, $isHit, $this->tags[$key] ?? null, $this->explicitExpiries[$key] ?? null);
|
||||
}
|
||||
|
||||
foreach ($keys as $key) {
|
||||
|
||||
1
lib/symfony/cache/Adapter/ChainAdapter.php
vendored
1
lib/symfony/cache/Adapter/ChainAdapter.php
vendored
@@ -79,6 +79,7 @@ class ChainAdapter implements AdapterInterface, CacheInterface, PruneableInterfa
|
||||
$item->expiresAt(\DateTimeImmutable::createFromFormat('U.u', \sprintf('%.6F', $item->metadata[CacheItem::METADATA_EXPIRY])));
|
||||
} elseif (0 < $defaultLifetime) {
|
||||
$item->expiresAfter($defaultLifetime);
|
||||
$item->newMetadata[CacheItem::METADATA_EXPIRY] = $item->expiry;
|
||||
}
|
||||
|
||||
return $item;
|
||||
|
||||
4
lib/symfony/cache/CacheItem.php
vendored
4
lib/symfony/cache/CacheItem.php
vendored
@@ -170,6 +170,10 @@ final class CacheItem implements ItemInterface
|
||||
}
|
||||
$valueWrapper = self::VALUE_WRAPPER;
|
||||
|
||||
if ($this->value instanceof $valueWrapper) {
|
||||
return new $valueWrapper($this->value->value, $m + ['expiry' => $this->expiry] + $this->value->metadata);
|
||||
}
|
||||
|
||||
return new $valueWrapper($this->value, $m + ['expiry' => $this->expiry]);
|
||||
}
|
||||
|
||||
|
||||
31
lib/symfony/cache/LockRegistry.php
vendored
31
lib/symfony/cache/LockRegistry.php
vendored
@@ -65,12 +65,14 @@ final class LockRegistry
|
||||
/**
|
||||
* Defines a set of existing files that will be used as keys to acquire locks.
|
||||
*
|
||||
* @return array The previously defined set of files
|
||||
* @param list<string> $files A list of existing files
|
||||
*
|
||||
* @return list<string> The previously defined set of files
|
||||
*/
|
||||
public static function setFiles(array $files): array
|
||||
{
|
||||
$previousFiles = self::$files;
|
||||
self::$files = $files;
|
||||
self::$files = array_values($files);
|
||||
|
||||
foreach (self::$openedFiles as $file) {
|
||||
if ($file) {
|
||||
@@ -97,7 +99,7 @@ final class LockRegistry
|
||||
}
|
||||
|
||||
self::$signalingException ??= unserialize("O:9:\"Exception\":1:{s:16:\"\0Exception\0trace\";a:0:{}}");
|
||||
self::$signalingCallback ??= fn () => throw self::$signalingException;
|
||||
self::$signalingCallback ??= static fn () => throw self::$signalingException;
|
||||
|
||||
while (true) {
|
||||
try {
|
||||
@@ -123,14 +125,33 @@ final class LockRegistry
|
||||
}
|
||||
// if we failed the race, retry locking in blocking mode to wait for the winner
|
||||
$logger?->info('Item "{key}" is locked, waiting for it to be released', ['key' => $item->getKey()]);
|
||||
flock($lock, \LOCK_SH);
|
||||
|
||||
$deadline = microtime(true) + 30.0;
|
||||
$acquired = false;
|
||||
do {
|
||||
if ($acquired = flock($lock, \LOCK_SH | \LOCK_NB)) {
|
||||
break;
|
||||
}
|
||||
usleep(100_000);
|
||||
} while (microtime(true) < $deadline);
|
||||
|
||||
if (!$acquired) {
|
||||
$logger?->warning('Lock on item "{key}" timed out, evicting slot', ['key' => $item->getKey()]);
|
||||
unset(self::$files[$key]);
|
||||
self::setFiles(self::$files);
|
||||
$lock = null;
|
||||
|
||||
return self::compute($callback, $item, $save, $pool, $setMetadata, $logger, $beta);
|
||||
}
|
||||
|
||||
if (\INF === $beta) {
|
||||
$logger?->info('Force-recomputing item "{key}"', ['key' => $item->getKey()]);
|
||||
continue;
|
||||
}
|
||||
} finally {
|
||||
flock($lock, \LOCK_UN);
|
||||
if ($lock) {
|
||||
flock($lock, \LOCK_UN);
|
||||
}
|
||||
unset(self::$lockedFiles[$key]);
|
||||
}
|
||||
|
||||
|
||||
7
lib/symfony/cache/Psr16Cache.php
vendored
7
lib/symfony/cache/Psr16Cache.php
vendored
@@ -18,6 +18,7 @@ use Psr\SimpleCache\CacheInterface;
|
||||
use Symfony\Component\Cache\Adapter\AdapterInterface;
|
||||
use Symfony\Component\Cache\Exception\InvalidArgumentException;
|
||||
use Symfony\Component\Cache\Traits\ProxyTrait;
|
||||
use Symfony\Contracts\Cache\ItemInterface;
|
||||
|
||||
/**
|
||||
* Turns a PSR-6 cache into a PSR-16 one.
|
||||
@@ -68,6 +69,12 @@ class Psr16Cache implements CacheInterface, PruneableInterface, ResettableInterf
|
||||
};
|
||||
self::$packCacheItem ??= \Closure::bind(
|
||||
static function (CacheItem $item) {
|
||||
// Only re-pack if there's timing metadata (for Psr16Adapter compatibility)
|
||||
// Don't re-pack if only tags metadata exists (TagAwareAdapter direct use case)
|
||||
if (!isset($item->metadata[ItemInterface::METADATA_CTIME]) && !isset($item->metadata[ItemInterface::METADATA_EXPIRY])) {
|
||||
return $item->value;
|
||||
}
|
||||
|
||||
$item->newMetadata = $item->metadata;
|
||||
|
||||
return $item->pack();
|
||||
|
||||
37
lib/symfony/cache/Traits/Relay/Relay21Trait.php
vendored
Normal file
37
lib/symfony/cache/Traits/Relay/Relay21Trait.php
vendored
Normal 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\Cache\Traits\Relay;
|
||||
|
||||
if (version_compare(phpversion('relay'), '0.21.0', '>=')) {
|
||||
/**
|
||||
* @internal
|
||||
*/
|
||||
trait Relay21Trait
|
||||
{
|
||||
public function gcra($key, $maxBurst, $requestsPerPeriod, $period, $numRequests = 0): \Relay\Relay|array|false
|
||||
{
|
||||
return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->gcra(...\func_get_args());
|
||||
}
|
||||
|
||||
public function hotkeys($subcmd, $args = null): \Relay\Relay|array|bool
|
||||
{
|
||||
return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->hotkeys(...\func_get_args());
|
||||
}
|
||||
}
|
||||
} else {
|
||||
/**
|
||||
* @internal
|
||||
*/
|
||||
trait Relay21Trait
|
||||
{
|
||||
}
|
||||
}
|
||||
2
lib/symfony/cache/Traits/RelayProxy.php
vendored
2
lib/symfony/cache/Traits/RelayProxy.php
vendored
@@ -26,6 +26,7 @@ use Symfony\Component\Cache\Traits\Relay\Relay11Trait;
|
||||
use Symfony\Component\Cache\Traits\Relay\Relay121Trait;
|
||||
use Symfony\Component\Cache\Traits\Relay\Relay12Trait;
|
||||
use Symfony\Component\Cache\Traits\Relay\Relay20Trait;
|
||||
use Symfony\Component\Cache\Traits\Relay\Relay21Trait;
|
||||
use Symfony\Component\Cache\Traits\Relay\SwapdbTrait;
|
||||
use Symfony\Component\VarExporter\LazyObjectInterface;
|
||||
use Symfony\Component\VarExporter\LazyProxyTrait;
|
||||
@@ -60,6 +61,7 @@ class RelayProxy extends \Relay\Relay implements ResetInterface, LazyObjectInter
|
||||
use Relay12Trait;
|
||||
use Relay121Trait;
|
||||
use Relay20Trait;
|
||||
use Relay21Trait;
|
||||
use SwapdbTrait;
|
||||
|
||||
private const LAZY_OBJECT_PROPERTY_SCOPES = [];
|
||||
|
||||
@@ -133,6 +133,10 @@ class OutputFormatter implements WrappableOutputFormatterInterface
|
||||
return '';
|
||||
}
|
||||
|
||||
// For ASCII-only strings, byte positions equal character positions,
|
||||
// so we can use native strlen/substr which is much faster than Helper::length/substr.
|
||||
$isAscii = !preg_match('/[\x80-\xFF]/', $message);
|
||||
|
||||
$offset = 0;
|
||||
$output = '';
|
||||
$openTagRegex = '[a-z](?:[^\\\\<>]*+ | \\\\.)*';
|
||||
@@ -147,11 +151,17 @@ class OutputFormatter implements WrappableOutputFormatterInterface
|
||||
continue;
|
||||
}
|
||||
|
||||
// convert byte position to character position.
|
||||
$pos = Helper::length(substr($message, 0, $pos));
|
||||
// add the text up to the next tag
|
||||
$output .= $this->applyCurrentStyle(Helper::substr($message, $offset, $pos - $offset), $output, $width, $currentLineLength);
|
||||
$offset = $pos + Helper::length($text);
|
||||
if ($isAscii) {
|
||||
// For ASCII, byte position = character position, no conversion needed
|
||||
$output .= $this->applyCurrentStyle(substr($message, $offset, $pos - $offset), $output, $width, $currentLineLength);
|
||||
$offset = $pos + \strlen($text);
|
||||
} else {
|
||||
// convert byte position to character position.
|
||||
$pos = Helper::length(substr($message, 0, $pos));
|
||||
// add the text up to the next tag
|
||||
$output .= $this->applyCurrentStyle(Helper::substr($message, $offset, $pos - $offset), $output, $width, $currentLineLength);
|
||||
$offset = $pos + Helper::length($text);
|
||||
}
|
||||
|
||||
// opening tag?
|
||||
if ($open = '/' !== $text[1]) {
|
||||
@@ -172,7 +182,7 @@ class OutputFormatter implements WrappableOutputFormatterInterface
|
||||
}
|
||||
}
|
||||
|
||||
$output .= $this->applyCurrentStyle(Helper::substr($message, $offset), $output, $width, $currentLineLength);
|
||||
$output .= $this->applyCurrentStyle($isAscii ? substr($message, $offset) : Helper::substr($message, $offset), $output, $width, $currentLineLength);
|
||||
|
||||
return strtr($output, ["\0" => '\\', '\\<' => '<', '\\>' => '>']);
|
||||
}
|
||||
|
||||
@@ -142,12 +142,27 @@ class ConsoleOutput extends StreamOutput implements ConsoleOutputInterface
|
||||
*/
|
||||
private function openOutputStream()
|
||||
{
|
||||
static $stdout;
|
||||
|
||||
if ($stdout) {
|
||||
return $stdout;
|
||||
}
|
||||
|
||||
if (!$this->hasStdoutSupport()) {
|
||||
return fopen('php://output', 'w');
|
||||
return $stdout = fopen('php://output', 'w');
|
||||
}
|
||||
|
||||
// Use STDOUT when possible to prevent from opening too many file descriptors
|
||||
return \defined('STDOUT') ? \STDOUT : (@fopen('php://stdout', 'w') ?: fopen('php://output', 'w'));
|
||||
if (!\defined('STDOUT')) {
|
||||
return $stdout = @fopen('php://stdout', 'w') ?: fopen('php://output', 'w');
|
||||
}
|
||||
|
||||
// On Windows, STDOUT is opened in text mode; reopen in binary mode to prevent \n to \r\n conversion
|
||||
if ('\\' === \DIRECTORY_SEPARATOR) {
|
||||
return $stdout = @fopen('php://stdout', 'w') ?: \STDOUT;
|
||||
}
|
||||
|
||||
return $stdout = \STDOUT;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -155,11 +170,26 @@ class ConsoleOutput extends StreamOutput implements ConsoleOutputInterface
|
||||
*/
|
||||
private function openErrorStream()
|
||||
{
|
||||
static $stderr;
|
||||
|
||||
if ($stderr) {
|
||||
return $stderr;
|
||||
}
|
||||
|
||||
if (!$this->hasStderrSupport()) {
|
||||
return fopen('php://output', 'w');
|
||||
return $stderr = fopen('php://output', 'w');
|
||||
}
|
||||
|
||||
// Use STDERR when possible to prevent from opening too many file descriptors
|
||||
return \defined('STDERR') ? \STDERR : (@fopen('php://stderr', 'w') ?: fopen('php://output', 'w'));
|
||||
if (!\defined('STDERR')) {
|
||||
return $stderr = @fopen('php://stderr', 'w') ?: fopen('php://output', 'w');
|
||||
}
|
||||
|
||||
// On Windows, STDERR is opened in text mode; reopen in binary mode to prevent \n → \r\n conversion
|
||||
if ('\\' === \DIRECTORY_SEPARATOR) {
|
||||
return $stderr = @fopen('php://stderr', 'w') ?: \STDERR;
|
||||
}
|
||||
|
||||
return $stderr ??= \STDERR;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -49,7 +49,7 @@ class ApplicationTester
|
||||
*/
|
||||
public function run(array $input, array $options = []): int
|
||||
{
|
||||
$prevShellVerbosity = getenv('SHELL_VERBOSITY');
|
||||
$prevShellVerbosity = [getenv('SHELL_VERBOSITY'), $_ENV['SHELL_VERBOSITY'] ?? false, $_SERVER['SHELL_VERBOSITY'] ?? false];
|
||||
|
||||
try {
|
||||
$this->input = new ArrayInput($input);
|
||||
@@ -63,22 +63,35 @@ class ApplicationTester
|
||||
|
||||
$this->initOutput($options);
|
||||
|
||||
// Temporarily clear SHELL_VERBOSITY to prevent Application::configureIO
|
||||
// from overriding the interactive and verbosity settings set above
|
||||
if (\function_exists('putenv')) {
|
||||
@putenv('SHELL_VERBOSITY');
|
||||
}
|
||||
unset($_ENV['SHELL_VERBOSITY'], $_SERVER['SHELL_VERBOSITY']);
|
||||
|
||||
return $this->statusCode = $this->application->run($this->input, $this->output);
|
||||
} finally {
|
||||
// SHELL_VERBOSITY is set by Application::configureIO so we need to unset/reset it
|
||||
// to its previous value to avoid one test's verbosity to spread to the following tests
|
||||
if (false === $prevShellVerbosity) {
|
||||
if (false === $prevShellVerbosity[0]) {
|
||||
if (\function_exists('putenv')) {
|
||||
@putenv('SHELL_VERBOSITY');
|
||||
}
|
||||
unset($_ENV['SHELL_VERBOSITY']);
|
||||
unset($_SERVER['SHELL_VERBOSITY']);
|
||||
} else {
|
||||
if (\function_exists('putenv')) {
|
||||
@putenv('SHELL_VERBOSITY='.$prevShellVerbosity);
|
||||
@putenv('SHELL_VERBOSITY='.$prevShellVerbosity[0]);
|
||||
}
|
||||
$_ENV['SHELL_VERBOSITY'] = $prevShellVerbosity;
|
||||
$_SERVER['SHELL_VERBOSITY'] = $prevShellVerbosity;
|
||||
}
|
||||
if (false === $prevShellVerbosity[1]) {
|
||||
unset($_ENV['SHELL_VERBOSITY']);
|
||||
} else {
|
||||
$_ENV['SHELL_VERBOSITY'] = $prevShellVerbosity[1];
|
||||
}
|
||||
if (false === $prevShellVerbosity[2]) {
|
||||
unset($_SERVER['SHELL_VERBOSITY']);
|
||||
} else {
|
||||
$_SERVER['SHELL_VERBOSITY'] = $prevShellVerbosity[2];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
8
lib/symfony/debug-bundle/CHANGELOG.md
Normal file
8
lib/symfony/debug-bundle/CHANGELOG.md
Normal file
@@ -0,0 +1,8 @@
|
||||
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
|
||||
@@ -0,0 +1,54 @@
|
||||
<?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;
|
||||
}
|
||||
}
|
||||
72
lib/symfony/debug-bundle/DebugBundle.php
Normal file
72
lib/symfony/debug-bundle/DebugBundle.php
Normal file
@@ -0,0 +1,72 @@
|
||||
<?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
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
<?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);
|
||||
}
|
||||
|
||||
if (!$container->hasParameter('kernel.runtime_mode.web')) {
|
||||
$definition->replaceArgument(5, null);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,60 @@
|
||||
<?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;
|
||||
}
|
||||
}
|
||||
102
lib/symfony/debug-bundle/DependencyInjection/DebugExtension.php
Normal file
102
lib/symfony/debug-bundle/DependencyInjection/DebugExtension.php
Normal file
@@ -0,0 +1,102 @@
|
||||
<?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';
|
||||
}
|
||||
}
|
||||
19
lib/symfony/debug-bundle/LICENSE
Normal file
19
lib/symfony/debug-bundle/LICENSE
Normal file
@@ -0,0 +1,19 @@
|
||||
Copyright (c) 2014-present Fabien Potencier
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is furnished
|
||||
to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
13
lib/symfony/debug-bundle/README.md
Normal file
13
lib/symfony/debug-bundle/README.md
Normal file
@@ -0,0 +1,13 @@
|
||||
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)
|
||||
@@ -0,0 +1,15 @@
|
||||
<?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>
|
||||
141
lib/symfony/debug-bundle/Resources/config/services.php
Normal file
141
lib/symfony/debug-bundle/Resources/config/services.php
Normal file
@@ -0,0 +1,141 @@
|
||||
<?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
|
||||
param('kernel.runtime_mode.web'),
|
||||
])
|
||||
->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');
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,83 @@
|
||||
{% 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 %}
|
||||
@@ -0,0 +1,9 @@
|
||||
<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>
|
||||
|
After Width: | Height: | Size: 586 B |
41
lib/symfony/debug-bundle/composer.json
Normal file
41
lib/symfony/debug-bundle/composer.json
Normal file
@@ -0,0 +1,41 @@
|
||||
{
|
||||
"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"
|
||||
}
|
||||
@@ -1295,16 +1295,9 @@ EOF;
|
||||
}
|
||||
}
|
||||
|
||||
if (Container::class !== $this->baseClass) {
|
||||
$r = $this->container->getReflectionClass($this->baseClass, false);
|
||||
if (null !== $r
|
||||
&& (null !== $constructor = $r->getConstructor())
|
||||
&& 0 === $constructor->getNumberOfRequiredParameters()
|
||||
&& Container::class !== $constructor->getDeclaringClass()->name
|
||||
) {
|
||||
$code .= " parent::__construct();\n";
|
||||
$code .= " \$this->parameterBag = null;\n\n";
|
||||
}
|
||||
if ($this->needsUnsetParameterBag()) {
|
||||
$code .= " parent::__construct();\n";
|
||||
$code .= " unset(\$this->parameterBag);\n\n";
|
||||
}
|
||||
|
||||
if ($this->container->getParameterBag()->all()) {
|
||||
@@ -1582,9 +1575,22 @@ EOF;
|
||||
return $code ? \sprintf("\n \$this->privates['service_container'] = static function (\$container) {%s\n };\n", $code) : '';
|
||||
}
|
||||
|
||||
private function needsUnsetParameterBag(): bool
|
||||
{
|
||||
if (Container::class === $this->baseClass) {
|
||||
return false;
|
||||
}
|
||||
$r = $this->container->getReflectionClass($this->baseClass, false);
|
||||
|
||||
return null !== $r
|
||||
&& (null !== $constructor = $r->getConstructor())
|
||||
&& 0 === $constructor->getNumberOfRequiredParameters()
|
||||
&& Container::class !== $constructor->getDeclaringClass()->name;
|
||||
}
|
||||
|
||||
private function addDefaultParametersMethod(): string
|
||||
{
|
||||
if (!$this->container->getParameterBag()->all()) {
|
||||
if (!$this->container->getParameterBag()->all() && !$this->needsUnsetParameterBag()) {
|
||||
return '';
|
||||
}
|
||||
|
||||
|
||||
@@ -77,6 +77,18 @@ abstract class AbstractConfigurator
|
||||
$value = (self::$valuePreProcessor)($value, $allowServices);
|
||||
}
|
||||
|
||||
if ($value instanceof ParamConfigurator) {
|
||||
return (string) $value;
|
||||
}
|
||||
|
||||
if (\is_scalar($value ?? '') || $value instanceof \UnitEnum) {
|
||||
return $value;
|
||||
}
|
||||
|
||||
if (!$allowServices) {
|
||||
throw new InvalidArgumentException(\sprintf('Cannot use values of type "%s" in service configuration files.', get_debug_type($value)));
|
||||
}
|
||||
|
||||
if ($value instanceof ReferenceConfigurator) {
|
||||
$reference = new Reference($value->id, $value->invalidBehavior);
|
||||
|
||||
@@ -90,29 +102,18 @@ abstract class AbstractConfigurator
|
||||
return $def;
|
||||
}
|
||||
|
||||
if ($value instanceof ParamConfigurator) {
|
||||
return (string) $value;
|
||||
}
|
||||
|
||||
if ($value instanceof self) {
|
||||
throw new InvalidArgumentException(\sprintf('"%s()" can be used only at the root of service configuration files.', $value::FACTORY));
|
||||
}
|
||||
|
||||
switch (true) {
|
||||
case null === $value:
|
||||
case \is_scalar($value):
|
||||
case $value instanceof \UnitEnum:
|
||||
return $value;
|
||||
|
||||
case $value instanceof ArgumentInterface:
|
||||
case $value instanceof Definition:
|
||||
case $value instanceof Expression:
|
||||
case $value instanceof Parameter:
|
||||
case $value instanceof AbstractArgument:
|
||||
case $value instanceof Reference:
|
||||
if ($allowServices) {
|
||||
return $value;
|
||||
}
|
||||
return $value;
|
||||
}
|
||||
|
||||
throw new InvalidArgumentException(\sprintf('Cannot use values of type "%s" in service configuration files.', get_debug_type($value)));
|
||||
|
||||
@@ -14,6 +14,7 @@ namespace Symfony\Component\Dotenv;
|
||||
use Symfony\Component\Dotenv\Exception\FormatException;
|
||||
use Symfony\Component\Dotenv\Exception\FormatExceptionContext;
|
||||
use Symfony\Component\Dotenv\Exception\PathException;
|
||||
use Symfony\Component\Dotenv\Exception\VariableCircularReferenceException;
|
||||
use Symfony\Component\Process\Exception\ExceptionInterface as ProcessException;
|
||||
use Symfony\Component\Process\Process;
|
||||
|
||||
@@ -81,6 +82,7 @@ final class Dotenv
|
||||
public function load(string $path, string ...$extraPaths): void
|
||||
{
|
||||
$this->doLoad(false, \func_get_args());
|
||||
$this->resolveLoadedVars();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -100,33 +102,42 @@ final class Dotenv
|
||||
*/
|
||||
public function loadEnv(string $path, ?string $envKey = null, string $defaultEnv = 'dev', array $testEnvs = ['test'], bool $overrideExistingVars = false): void
|
||||
{
|
||||
$k = $envKey ?? $this->envKey;
|
||||
try {
|
||||
$k = $envKey ?? $this->envKey;
|
||||
|
||||
if (is_file($path) || !is_file($p = "$path.dist")) {
|
||||
$this->doLoad($overrideExistingVars, [$path]);
|
||||
} else {
|
||||
$this->doLoad($overrideExistingVars, [$p]);
|
||||
}
|
||||
if (is_file($path) || !is_file($p = "$path.dist")) {
|
||||
$this->doLoad($overrideExistingVars, [$path]);
|
||||
} else {
|
||||
$this->doLoad($overrideExistingVars, [$p]);
|
||||
}
|
||||
|
||||
if (null === $env = $_SERVER[$k] ?? $_ENV[$k] ?? null) {
|
||||
$this->populate([$k => $env = $defaultEnv], $overrideExistingVars);
|
||||
}
|
||||
if (null === $env = $_SERVER[$k] ?? $_ENV[$k] ?? null) {
|
||||
$this->populate([$k => $env = $defaultEnv], $overrideExistingVars);
|
||||
} elseif (str_contains($env, '$') || str_contains($env, "\x00") || str_contains($env, '\\')) {
|
||||
$env = $this->resolveEnvKey($env, $k);
|
||||
}
|
||||
|
||||
if (!\in_array($env, $testEnvs, true) && is_file($p = "$path.local")) {
|
||||
$this->doLoad($overrideExistingVars, [$p]);
|
||||
$env = $_SERVER[$k] ?? $_ENV[$k] ?? $env;
|
||||
}
|
||||
if (!\in_array($env, $testEnvs, true) && is_file($p = "$path.local")) {
|
||||
$this->doLoad($overrideExistingVars, [$p]);
|
||||
$env = $_SERVER[$k] ?? $_ENV[$k] ?? $env;
|
||||
if (str_contains($env, '$') || str_contains($env, "\x00") || str_contains($env, '\\')) {
|
||||
$env = $this->resolveEnvKey($env, $k);
|
||||
}
|
||||
}
|
||||
|
||||
if ('local' === $env) {
|
||||
return;
|
||||
}
|
||||
if ('local' === $env) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (is_file($p = "$path.$env")) {
|
||||
$this->doLoad($overrideExistingVars, [$p]);
|
||||
}
|
||||
if (is_file($p = "$path.$env")) {
|
||||
$this->doLoad($overrideExistingVars, [$p]);
|
||||
}
|
||||
|
||||
if (is_file($p = "$path.$env.local")) {
|
||||
$this->doLoad($overrideExistingVars, [$p]);
|
||||
if (is_file($p = "$path.$env.local")) {
|
||||
$this->doLoad($overrideExistingVars, [$p]);
|
||||
}
|
||||
} finally {
|
||||
$this->resolveLoadedVars();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -168,6 +179,7 @@ final class Dotenv
|
||||
public function overload(string $path, string ...$extraPaths): void
|
||||
{
|
||||
$this->doLoad(true, \func_get_args());
|
||||
$this->resolveLoadedVars();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -236,6 +248,48 @@ final class Dotenv
|
||||
$this->values = [];
|
||||
$name = '';
|
||||
|
||||
$loadedVars = array_flip(explode(',', $_SERVER['SYMFONY_DOTENV_VARS'] ?? $_ENV['SYMFONY_DOTENV_VARS'] ?? ''));
|
||||
unset($loadedVars['']);
|
||||
|
||||
$this->skipEmptyLines();
|
||||
|
||||
while ($this->cursor < $this->end) {
|
||||
switch ($state) {
|
||||
case self::STATE_VARNAME:
|
||||
$name = $this->lexVarname();
|
||||
$state = self::STATE_VALUE;
|
||||
break;
|
||||
|
||||
case self::STATE_VALUE:
|
||||
$this->values[$name] = $this->resolveValue($this->lexValue(), $loadedVars);
|
||||
$state = self::STATE_VARNAME;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (self::STATE_VALUE === $state) {
|
||||
$this->values[$name] = '';
|
||||
}
|
||||
|
||||
try {
|
||||
return $this->values;
|
||||
} finally {
|
||||
$this->values = [];
|
||||
unset($this->path, $this->cursor, $this->lineno, $this->data, $this->end);
|
||||
}
|
||||
}
|
||||
|
||||
private function parseRaw(string $data, string $path = '.env'): array
|
||||
{
|
||||
$this->path = $path;
|
||||
$this->data = str_replace(["\r\n", "\r"], "\n", $data);
|
||||
$this->lineno = 1;
|
||||
$this->cursor = 0;
|
||||
$this->end = \strlen($this->data);
|
||||
$state = self::STATE_VARNAME;
|
||||
$this->values = [];
|
||||
$name = '';
|
||||
|
||||
$this->skipEmptyLines();
|
||||
|
||||
while ($this->cursor < $this->end) {
|
||||
@@ -260,10 +314,22 @@ final class Dotenv
|
||||
return $this->values;
|
||||
} finally {
|
||||
$this->values = [];
|
||||
unset($this->path, $this->cursor, $this->lineno, $this->data, $this->end);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Resolves a raw value by expanding commands, variables, backslash escapes,
|
||||
* and restoring literal $ markers.
|
||||
*/
|
||||
private function resolveValue(string $value, array $loadedVars): string
|
||||
{
|
||||
$resolved = $this->resolveCommands($value, $loadedVars);
|
||||
$resolved = $this->resolveVariables($resolved, $loadedVars);
|
||||
$resolved = str_replace('\\\\', '\\', $resolved);
|
||||
|
||||
return str_replace("\x00", '$', $resolved);
|
||||
}
|
||||
|
||||
private function lexVarname(): string
|
||||
{
|
||||
// var name + optional export
|
||||
@@ -305,8 +371,6 @@ final class Dotenv
|
||||
throw $this->createFormatException('Whitespace are not supported before the value');
|
||||
}
|
||||
|
||||
$loadedVars = array_flip(explode(',', $_SERVER['SYMFONY_DOTENV_VARS'] ?? $_ENV['SYMFONY_DOTENV_VARS'] ?? ''));
|
||||
unset($loadedVars['']);
|
||||
$v = '';
|
||||
|
||||
do {
|
||||
@@ -321,7 +385,10 @@ final class Dotenv
|
||||
}
|
||||
} while ("'" !== $this->data[$this->cursor + $len]);
|
||||
|
||||
$v .= substr($this->data, 1 + $this->cursor, $len - 1);
|
||||
// In single-quoted strings, $ is literal and \ has no special meaning.
|
||||
// Double backslashes so they survive the unescape in resolveValue(),
|
||||
// and mark $ as \x00 so it's not treated as a variable reference.
|
||||
$v .= str_replace(['\\', '$'], ['\\\\', "\x00"], substr($this->data, 1 + $this->cursor, $len - 1));
|
||||
$this->cursor += 1 + $len;
|
||||
} elseif ('"' === $this->data[$this->cursor]) {
|
||||
$value = '';
|
||||
@@ -340,11 +407,8 @@ final class Dotenv
|
||||
}
|
||||
++$this->cursor;
|
||||
$value = str_replace(['\\"', '\r', '\n'], ['"', "\r", "\n"], $value);
|
||||
$resolvedValue = $value;
|
||||
$resolvedValue = $this->resolveCommands($resolvedValue, $loadedVars);
|
||||
$resolvedValue = $this->resolveVariables($resolvedValue, $loadedVars);
|
||||
$resolvedValue = str_replace('\\\\', '\\', $resolvedValue);
|
||||
$v .= $resolvedValue;
|
||||
// Mark escaped $ (\$) as \x00 so it's treated as literal
|
||||
$v .= $this->protectEscapedDollars($value);
|
||||
} else {
|
||||
$value = '';
|
||||
$prevChr = $this->data[$this->cursor - 1];
|
||||
@@ -363,12 +427,9 @@ final class Dotenv
|
||||
++$this->cursor;
|
||||
}
|
||||
$value = rtrim($value);
|
||||
$resolvedValue = $value;
|
||||
$resolvedValue = $this->resolveCommands($resolvedValue, $loadedVars);
|
||||
$resolvedValue = $this->resolveVariables($resolvedValue, $loadedVars);
|
||||
$resolvedValue = str_replace('\\\\', '\\', $resolvedValue);
|
||||
$resolvedValue = $this->protectEscapedDollars($value);
|
||||
|
||||
if ($resolvedValue === $value && preg_match('/\s+/', $value)) {
|
||||
if ($resolvedValue === $value && preg_match('/\s+/', $value) && !str_contains($value, '$')) {
|
||||
throw $this->createFormatException('A value containing spaces must be surrounded by quotes');
|
||||
}
|
||||
|
||||
@@ -385,6 +446,26 @@ final class Dotenv
|
||||
return $v;
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts \$ (escaped dollar) to \x00 (literal marker), handling
|
||||
* even/odd backslash counts correctly: \$ → \x00, \\$ → \\$ (unchanged).
|
||||
*/
|
||||
private function protectEscapedDollars(string $value): string
|
||||
{
|
||||
if (!str_contains($value, '$')) {
|
||||
return $value;
|
||||
}
|
||||
|
||||
return preg_replace_callback('/\\\\+\$/', static function ($m) {
|
||||
$bs = substr($m[0], 0, -1);
|
||||
if (1 === \strlen($bs) % 2) {
|
||||
return substr($bs, 0, -1)."\x00";
|
||||
}
|
||||
|
||||
return $m[0];
|
||||
}, $value);
|
||||
}
|
||||
|
||||
private function lexNestedExpression(): string
|
||||
{
|
||||
++$this->cursor;
|
||||
@@ -559,7 +640,148 @@ final class Dotenv
|
||||
throw new FormatException('Loading files starting with a byte-order-mark (BOM) is not supported.', new FormatExceptionContext($data, $path, 1, 0));
|
||||
}
|
||||
|
||||
$this->populate($this->parse($data, $path), $overrideExistingVars);
|
||||
if (str_contains($data, "\0")) {
|
||||
throw new FormatException('Loading files containing NUL bytes is not supported.', new FormatExceptionContext($data, $path, 1, 0));
|
||||
}
|
||||
|
||||
$this->populate($this->parseRaw($data, $path), $overrideExistingVars);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Eagerly resolves a raw env key value so that loadEnv() can determine
|
||||
* which additional .env files to load before full deferred resolution.
|
||||
*/
|
||||
private function resolveEnvKey(string $value, string $name): string
|
||||
{
|
||||
$loadedVars = array_flip(explode(',', $_SERVER['SYMFONY_DOTENV_VARS'] ?? $_ENV['SYMFONY_DOTENV_VARS'] ?? ''));
|
||||
unset($loadedVars['']);
|
||||
|
||||
// Save and clear own value so self-referencing defaults work
|
||||
$envBackup = $_ENV[$name] ?? null;
|
||||
$serverBackup = $_SERVER[$name] ?? null;
|
||||
unset($_ENV[$name], $_SERVER[$name]);
|
||||
if ($this->usePutenv) {
|
||||
$getenvBackup = (string) getenv($name);
|
||||
putenv($name);
|
||||
}
|
||||
|
||||
$this->values = [];
|
||||
$this->path = '';
|
||||
$this->data = '';
|
||||
$this->lineno = 0;
|
||||
$this->cursor = 0;
|
||||
$this->end = 0;
|
||||
|
||||
$resolved = $this->resolveCommands($value, $loadedVars);
|
||||
$resolved = $this->resolveVariables($resolved, $loadedVars);
|
||||
$resolved = str_replace(["\x00", '\\\\'], ['$', '\\'], $resolved);
|
||||
|
||||
if (null !== $envBackup) {
|
||||
$_ENV[$name] = $envBackup;
|
||||
}
|
||||
if (null !== $serverBackup) {
|
||||
$_SERVER[$name] = $serverBackup;
|
||||
}
|
||||
if ($this->usePutenv) {
|
||||
putenv("$name=$getenvBackup");
|
||||
}
|
||||
|
||||
$this->values = [];
|
||||
|
||||
return $resolved;
|
||||
}
|
||||
|
||||
private function resolveLoadedVars(): void
|
||||
{
|
||||
$loadedVars = array_flip(explode(',', $_SERVER['SYMFONY_DOTENV_VARS'] ?? $_ENV['SYMFONY_DOTENV_VARS'] ?? ''));
|
||||
unset($loadedVars['']);
|
||||
|
||||
$this->values = [];
|
||||
$this->path = '';
|
||||
$this->data = '';
|
||||
$this->lineno = 0;
|
||||
$this->cursor = 0;
|
||||
$this->end = 0;
|
||||
|
||||
// Detect variables that were originally defined as self-referencing
|
||||
// (e.g. MY_VAR="${MY_VAR:-default}") so their own raw value is hidden
|
||||
// during resolution, allowing the default to trigger correctly.
|
||||
$selfReferencingVars = [];
|
||||
foreach ($loadedVars as $name => $_) {
|
||||
if ('SYMFONY_DOTENV_VARS' === $name) {
|
||||
continue;
|
||||
}
|
||||
$value = $_ENV[$name] ?? '';
|
||||
if (str_contains($value, '$') && preg_match('/\$\{?'.preg_quote($name, '/').'(?![A-Za-z0-9_])/', $value)) {
|
||||
$selfReferencingVars[$name] = true;
|
||||
}
|
||||
}
|
||||
|
||||
for ($pass = 0; $pass < 5; ++$pass) {
|
||||
$resolved = [];
|
||||
foreach ($loadedVars as $name => $_) {
|
||||
if ('SYMFONY_DOTENV_VARS' === $name) {
|
||||
continue;
|
||||
}
|
||||
if (!str_contains($value = $_ENV[$name] ?? '', '$')) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (isset($selfReferencingVars[$name])) {
|
||||
$envBackup = $_ENV[$name] ?? null;
|
||||
$serverBackup = $_SERVER[$name] ?? null;
|
||||
unset($_ENV[$name], $_SERVER[$name]);
|
||||
if ($this->usePutenv) {
|
||||
$getenvBackup = $this->usePutenv ? (string) getenv($name) : null;
|
||||
putenv($name);
|
||||
}
|
||||
}
|
||||
|
||||
$resolvedValue = $this->resolveCommands($value, $loadedVars);
|
||||
$resolvedValue = $this->resolveVariables($resolvedValue, $loadedVars);
|
||||
|
||||
if (isset($selfReferencingVars[$name])) {
|
||||
if (null !== $envBackup) {
|
||||
$_ENV[$name] = $envBackup;
|
||||
}
|
||||
if (null !== $serverBackup) {
|
||||
$_SERVER[$name] = $serverBackup;
|
||||
}
|
||||
if ($this->usePutenv) {
|
||||
putenv("$name=$getenvBackup");
|
||||
}
|
||||
}
|
||||
|
||||
if ($value !== $resolvedValue) {
|
||||
$resolved[$name] = $resolvedValue;
|
||||
}
|
||||
}
|
||||
if (!$resolved) {
|
||||
break;
|
||||
}
|
||||
$this->populate($resolved, true);
|
||||
}
|
||||
if (5 === $pass && $resolved) {
|
||||
throw new VariableCircularReferenceException('Too many levels of variable indirection in env vars: '.implode(', ', array_keys($resolved)).'.');
|
||||
}
|
||||
|
||||
// Restore literal $ signs and unescape backslashes
|
||||
$restored = [];
|
||||
foreach ($loadedVars as $name => $_) {
|
||||
if ('SYMFONY_DOTENV_VARS' === $name) {
|
||||
continue;
|
||||
}
|
||||
$value = $_ENV[$name] ?? '';
|
||||
if ($value !== $newValue = str_replace(["\x00", '\\\\'], ['$', '\\'], $value)) {
|
||||
$restored[$name] = $newValue;
|
||||
}
|
||||
}
|
||||
if ($restored) {
|
||||
$this->populate($restored, true);
|
||||
}
|
||||
|
||||
$this->values = [];
|
||||
unset($this->path, $this->data, $this->lineno, $this->cursor, $this->end);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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\Dotenv\Exception;
|
||||
|
||||
/**
|
||||
* Thrown when there are too many levels of variable indirection in env vars.
|
||||
*
|
||||
* @author Pascal CESCON <pascal.cescon@gmail.com>
|
||||
*/
|
||||
final class VariableCircularReferenceException extends \LogicException implements ExceptionInterface
|
||||
{
|
||||
}
|
||||
@@ -127,6 +127,21 @@ class DebugClassLoader
|
||||
private static array $internalMethods = [];
|
||||
private static array $annotatedParameters = [];
|
||||
private static array $darwinCache = ['/' => ['/', []]];
|
||||
/**
|
||||
* @var array<string, list<array{0: string, 1: bool, 2: string, 3: string, 4: string|null}>>
|
||||
*
|
||||
* Maps an interface FQCN (or an abstract class accumulating entries from its interfaces) to the list of
|
||||
* "@method" annotations declared on it. For interfaces, the entry is populated directly by parsing the
|
||||
* annotations from the interface's docblock. For abstract classes, the information from all implemented
|
||||
* interfaces is merged together, so that the check can later be applied to the first concrete subclass.
|
||||
*
|
||||
* Each entry is a tuple of:
|
||||
* [0] string $interface - FQCN of the interface that carries the "@method" annotation
|
||||
* [1] bool $static - whether the method is declared static
|
||||
* [2] string $returnType - return type from the annotation, or '' if absent
|
||||
* [3] string $name - method name plus its parameter signature, e.g. "foo($arg, int $n)"
|
||||
* [4] string|null $description - description text (period-normalised), or null if absent
|
||||
*/
|
||||
private static array $method = [];
|
||||
private static array $returnTypes = [];
|
||||
private static array $methodTraits = [];
|
||||
@@ -398,6 +413,14 @@ class DebugClassLoader
|
||||
|
||||
if ($refl->isInterface() && isset($doc['method'])) {
|
||||
foreach ($doc['method'] as $name => [$static, $returnType, $signature, $description]) {
|
||||
if ($refl->hasMethod($static ? '__callStatic' : '__call')) {
|
||||
// When the interface has "virtual" @method declarations but at the same time contains a __call/__callStatic magic method,
|
||||
// do not trigger a deprecation notice. This is to address special use cases like in Predis' ClientInterface where the
|
||||
// "@method" annotations never intend to actually add the method to the interface, but are used to document the "virtual"
|
||||
// API provided by the interface through the technical implementation of magic calls. This might cause false negatives
|
||||
// (missing notices) in the case that such interfaces are later amended with actual (real) methods.
|
||||
continue;
|
||||
}
|
||||
self::$method[$class][] = [$class, $static, $returnType, $name.$signature, $description];
|
||||
|
||||
if ('' !== $returnType) {
|
||||
@@ -420,6 +443,15 @@ class DebugClassLoader
|
||||
}
|
||||
}
|
||||
|
||||
// When the parent is a concrete class, we will trigger deprecation notices to make it aware that it needs
|
||||
// to add the new methods announced with @method. The parent will have to provide all those methods.
|
||||
// For child classes this means they will not need to deal with @method coming from any of the interfaces
|
||||
// the parent implements.
|
||||
// Put those interfaces that we can ignore into $parentInterfaces.
|
||||
// The ternary makes use of the fact that abstract parent classes will accumulate the methods in self::$method,
|
||||
// so !isset(self::$method[$parent]) indicates a concrete parent class.
|
||||
$parentInterfaces = ($parent && !isset(self::$method[$parent])) ? class_implements($parent, false) : [];
|
||||
|
||||
// Detect if the parent is annotated
|
||||
foreach ($parentAndOwnInterfaces + class_uses($class, false) as $use) {
|
||||
if (!isset(self::$checkedClasses[$use])) {
|
||||
@@ -435,13 +467,15 @@ class DebugClassLoader
|
||||
$deprecations[] = \sprintf('The "%s" %s is considered internal%s It may change without further notice. You should not use it from "%s".', $use, class_exists($use, false) ? 'class' : (interface_exists($use, false) ? 'interface' : 'trait'), self::$internal[$use], $className);
|
||||
}
|
||||
if (isset(self::$method[$use])) {
|
||||
if ($refl->isAbstract()) {
|
||||
if ($refl->isAbstract() || $refl->isInterface()) {
|
||||
// Abstract classes and interfaces inherit @method from interfaces they
|
||||
// implement directly or through inheritance.
|
||||
if (isset(self::$method[$class])) {
|
||||
self::$method[$class] = array_merge(self::$method[$class], self::$method[$use]);
|
||||
} else {
|
||||
self::$method[$class] = self::$method[$use];
|
||||
}
|
||||
} elseif (!$refl->isInterface()) {
|
||||
} else {
|
||||
if (!strncmp($vendor, str_replace('_', '\\', $use), $vendorLen)
|
||||
&& str_starts_with($className, 'Symfony\\')
|
||||
&& (!class_exists(InstalledVersions::class)
|
||||
@@ -450,14 +484,14 @@ class DebugClassLoader
|
||||
// skip "same vendor" @method deprecations for Symfony\* classes unless symfony/symfony is being tested
|
||||
continue;
|
||||
}
|
||||
$hasCall = $refl->hasMethod('__call');
|
||||
$hasStaticCall = $refl->hasMethod('__callStatic');
|
||||
foreach (self::$method[$use] as [$interface, $static, $returnType, $name, $description]) {
|
||||
if ($static ? $hasStaticCall : $hasCall) {
|
||||
if (isset($parentInterfaces[$interface])) {
|
||||
// The @method annotation comes from an interface that has already been implemented by a concrete parent class,
|
||||
// so we can ignore it here.
|
||||
continue;
|
||||
}
|
||||
$realName = substr($name, 0, strpos($name, '('));
|
||||
if (!$refl->hasMethod($realName) || !($methodRefl = $refl->getMethod($realName))->isPublic() || ($static && !$methodRefl->isStatic()) || (!$static && $methodRefl->isStatic())) {
|
||||
if (!$refl->hasMethod($realName) || !($methodRefl = $refl->getMethod($realName))->isPublic() || ($static xor $methodRefl->isStatic())) {
|
||||
$deprecations[] = \sprintf('Class "%s" should implement method "%s::%s%s"%s', $className, ($static ? 'static ' : '').$interface, $name, $returnType ? ': '.$returnType : '', null === $description ? '.' : ': '.$description);
|
||||
}
|
||||
}
|
||||
|
||||
0
lib/symfony/error-handler/Resources/bin/extract-tentative-return-types.php
Normal file → Executable file
0
lib/symfony/error-handler/Resources/bin/extract-tentative-return-types.php
Normal file → Executable file
@@ -40,6 +40,9 @@ class TraceableEventDispatcher implements EventDispatcherInterface, ResetInterfa
|
||||
private EventDispatcherInterface $dispatcher;
|
||||
private array $wrappedListeners = [];
|
||||
private array $orphanedEvents = [];
|
||||
private array $dispatchDepth = [];
|
||||
private array $calledListenerInfos = [];
|
||||
private array $calledOriginalListeners = [];
|
||||
private ?RequestStack $requestStack;
|
||||
private string $currentRequestHash = '';
|
||||
|
||||
@@ -155,20 +158,20 @@ class TraceableEventDispatcher implements EventDispatcherInterface, ResetInterfa
|
||||
|
||||
public function getCalledListeners(?Request $request = null): array
|
||||
{
|
||||
if (null === $this->callStack) {
|
||||
if (!$this->calledListenerInfos) {
|
||||
return [];
|
||||
}
|
||||
|
||||
$hash = $request ? spl_object_hash($request) : null;
|
||||
$called = [];
|
||||
foreach ($this->callStack as $listener) {
|
||||
[$eventName, $requestHash] = $this->callStack->getInfo();
|
||||
|
||||
foreach ($this->calledListenerInfos as $requestHash => $infos) {
|
||||
if (null === $hash || $hash === $requestHash) {
|
||||
$called[] = $listener->getInfo($eventName);
|
||||
$called[] = $infos;
|
||||
}
|
||||
}
|
||||
|
||||
return $called;
|
||||
return $called ? array_merge(...$called) : [];
|
||||
}
|
||||
|
||||
public function getNotCalledListeners(?Request $request = null): array
|
||||
@@ -185,16 +188,14 @@ class TraceableEventDispatcher implements EventDispatcherInterface, ResetInterfa
|
||||
$hash = $request ? spl_object_hash($request) : null;
|
||||
$calledListeners = [];
|
||||
|
||||
if (null !== $this->callStack) {
|
||||
foreach ($this->callStack as $calledListener) {
|
||||
[, $requestHash] = $this->callStack->getInfo();
|
||||
|
||||
if (null === $hash || $hash === $requestHash) {
|
||||
$calledListeners[] = $calledListener->getWrappedListener();
|
||||
}
|
||||
foreach ($this->calledOriginalListeners as $requestHash => $eventListeners) {
|
||||
if (null === $hash || $hash === $requestHash) {
|
||||
$calledListeners[] = array_merge(...array_values($eventListeners));
|
||||
}
|
||||
}
|
||||
|
||||
$calledListeners = $calledListeners ? array_merge(...$calledListeners) : [];
|
||||
|
||||
$notCalled = [];
|
||||
|
||||
foreach ($allListeners as $eventName => $listeners) {
|
||||
@@ -234,6 +235,9 @@ class TraceableEventDispatcher implements EventDispatcherInterface, ResetInterfa
|
||||
$this->callStack = null;
|
||||
$this->orphanedEvents = [];
|
||||
$this->currentRequestHash = '';
|
||||
$this->dispatchDepth = [];
|
||||
$this->calledListenerInfos = [];
|
||||
$this->calledOriginalListeners = [];
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -267,6 +271,8 @@ class TraceableEventDispatcher implements EventDispatcherInterface, ResetInterfa
|
||||
|
||||
private function preProcess(string $eventName): void
|
||||
{
|
||||
$this->dispatchDepth[$eventName] = ($this->dispatchDepth[$eventName] ?? 0) + 1;
|
||||
|
||||
if (!$this->dispatcher->hasListeners($eventName)) {
|
||||
$this->orphanedEvents[$this->currentRequestHash][] = $eventName;
|
||||
|
||||
@@ -285,6 +291,8 @@ class TraceableEventDispatcher implements EventDispatcherInterface, ResetInterfa
|
||||
|
||||
private function postProcess(string $eventName): void
|
||||
{
|
||||
--$this->dispatchDepth[$eventName];
|
||||
|
||||
unset($this->wrappedListeners[$eventName]);
|
||||
$skipped = false;
|
||||
foreach ($this->dispatcher->getListeners($eventName) as $listener) {
|
||||
@@ -302,10 +310,16 @@ class TraceableEventDispatcher implements EventDispatcherInterface, ResetInterfa
|
||||
|
||||
if ($listener->wasCalled()) {
|
||||
$this->logger?->debug('Notified event "{event}" to listener "{listener}".', $context);
|
||||
} else {
|
||||
unset($this->callStack[$listener]);
|
||||
|
||||
$original = $listener->getWrappedListener();
|
||||
if (!\in_array($original, $this->calledOriginalListeners[$this->currentRequestHash][$eventName] ?? [], true)) {
|
||||
$this->calledOriginalListeners[$this->currentRequestHash][$eventName][] = $original;
|
||||
$this->calledListenerInfos[$this->currentRequestHash][] = $listener->getInfo($eventName);
|
||||
}
|
||||
}
|
||||
|
||||
unset($this->callStack[$listener]);
|
||||
|
||||
if (null !== $this->logger && $skipped) {
|
||||
$this->logger->debug('Listener "{listener}" was not called for event "{event}".', $context);
|
||||
}
|
||||
@@ -316,6 +330,28 @@ class TraceableEventDispatcher implements EventDispatcherInterface, ResetInterfa
|
||||
$skipped = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (0 < $this->dispatchDepth[$eventName]) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Clean up stale callStack entries left by nested same-event dispatches
|
||||
$stale = [];
|
||||
foreach ($this->callStack as $listener) {
|
||||
if ($this->callStack->getInfo()[0] === $eventName) {
|
||||
$stale[] = $listener;
|
||||
}
|
||||
}
|
||||
foreach ($stale as $listener) {
|
||||
if ($listener->wasCalled()) {
|
||||
$original = $listener->getWrappedListener();
|
||||
if (!\in_array($original, $this->calledOriginalListeners[$this->currentRequestHash][$eventName] ?? [], true)) {
|
||||
$this->calledOriginalListeners[$this->currentRequestHash][$eventName][] = $original;
|
||||
$this->calledListenerInfos[$this->currentRequestHash][] = $listener->getInfo($eventName);
|
||||
}
|
||||
}
|
||||
unset($this->callStack[$listener]);
|
||||
}
|
||||
}
|
||||
|
||||
private function sortNotCalledListeners(array $a, array $b): int
|
||||
|
||||
@@ -39,17 +39,23 @@ class ValidatorExtension extends AbstractExtension
|
||||
/** @var ClassMetadata $metadata */
|
||||
$metadata = $validator->getMetadataFor(\Symfony\Component\Form\Form::class);
|
||||
|
||||
$this->validator = $validator;
|
||||
$this->formRenderer = $formRenderer;
|
||||
$this->translator = $translator;
|
||||
|
||||
// Register the form constraints in the validator programmatically.
|
||||
// This functionality is required when using the Form component without
|
||||
// the DIC, where the XML file is loaded automatically. Thus the following
|
||||
// code must be kept synchronized with validation.xml
|
||||
|
||||
foreach ($metadata->getConstraints() as $constraint) {
|
||||
if ($constraint instanceof Form) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
$metadata->addConstraint(new Form());
|
||||
$metadata->addConstraint(new Traverse(false));
|
||||
|
||||
$this->validator = $validator;
|
||||
$this->formRenderer = $formRenderer;
|
||||
$this->translator = $translator;
|
||||
}
|
||||
|
||||
public function loadTypeGuesser(): ?FormTypeGuesserInterface
|
||||
|
||||
@@ -1233,8 +1233,7 @@ class FrameworkExtension extends Extension
|
||||
$container->setParameter('request_listener.https_port', $config['https_port']);
|
||||
|
||||
if (null !== $config['default_uri']) {
|
||||
$container->getDefinition('router.request_context')
|
||||
->replaceArgument(0, $config['default_uri']);
|
||||
$container->setParameter('router.request_context.base_url', $config['default_uri']);
|
||||
}
|
||||
|
||||
if ($this->isInitializedConfigEnabled('annotations') && (new \ReflectionClass(AttributeClassLoader::class))->hasProperty('reader')) {
|
||||
@@ -1265,6 +1264,7 @@ class FrameworkExtension extends Extension
|
||||
}
|
||||
|
||||
$container->setParameter('session.storage.options', $options);
|
||||
$container->setParameter('session.metadata.cookie_lifetime', $options['cookie_lifetime'] ?? null);
|
||||
|
||||
// session handler (the internal callback registered with PHP session management)
|
||||
if (null === $config['handler_id']) {
|
||||
|
||||
@@ -43,6 +43,7 @@ return static function (ContainerConfigurator $container) {
|
||||
->args([
|
||||
param('session.metadata.storage_key'),
|
||||
param('session.metadata.update_threshold'),
|
||||
param('session.metadata.cookie_lifetime'),
|
||||
]),
|
||||
false,
|
||||
])
|
||||
@@ -53,6 +54,7 @@ return static function (ContainerConfigurator $container) {
|
||||
->args([
|
||||
param('session.metadata.storage_key'),
|
||||
param('session.metadata.update_threshold'),
|
||||
param('session.metadata.cookie_lifetime'),
|
||||
]),
|
||||
false,
|
||||
])
|
||||
@@ -64,6 +66,7 @@ return static function (ContainerConfigurator $container) {
|
||||
->args([
|
||||
param('session.metadata.storage_key'),
|
||||
param('session.metadata.update_threshold'),
|
||||
param('session.metadata.cookie_lifetime'),
|
||||
]),
|
||||
])
|
||||
|
||||
|
||||
@@ -12,10 +12,12 @@
|
||||
namespace Symfony\Bundle\FrameworkBundle\Test;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Symfony\Component\Config\Resource\SelfCheckingResourceChecker;
|
||||
use Symfony\Component\DependencyInjection\Container;
|
||||
use Symfony\Component\DependencyInjection\ContainerInterface;
|
||||
use Symfony\Component\DependencyInjection\Exception\ServiceNotFoundException;
|
||||
use Symfony\Component\Filesystem\Filesystem;
|
||||
use Symfony\Component\HttpKernel\Kernel;
|
||||
use Symfony\Component\HttpKernel\KernelInterface;
|
||||
use Symfony\Contracts\Service\ResetInterface;
|
||||
|
||||
@@ -38,6 +40,8 @@ abstract class KernelTestCase extends TestCase
|
||||
|
||||
protected static $booted = false;
|
||||
|
||||
private static bool $kernelHasBeenRebooted = false;
|
||||
|
||||
protected function tearDown(): void
|
||||
{
|
||||
static::ensureKernelShutdown();
|
||||
@@ -88,6 +92,7 @@ abstract class KernelTestCase extends TestCase
|
||||
// reboot a fresh one.
|
||||
if ($kernel->getContainer()->initialized('cache_warmer')) {
|
||||
static::ensureKernelShutdown();
|
||||
self::$kernelHasBeenRebooted = true;
|
||||
|
||||
$kernel = static::createKernel($options);
|
||||
$kernel->boot();
|
||||
@@ -161,6 +166,20 @@ abstract class KernelTestCase extends TestCase
|
||||
static::$kernel->shutdown();
|
||||
static::$booted = false;
|
||||
|
||||
if (self::$kernelHasBeenRebooted) {
|
||||
self::$kernelHasBeenRebooted = false;
|
||||
try {
|
||||
(new \ReflectionProperty(Kernel::class, 'freshCache'))->setValue(null, []);
|
||||
} catch (\ReflectionException) {
|
||||
// ignore if the property doesn't exist
|
||||
}
|
||||
try {
|
||||
(new \ReflectionProperty(SelfCheckingResourceChecker::class, 'cache'))->setValue(null, []);
|
||||
} catch (\ReflectionException) {
|
||||
// ignore if the property doesn't exist
|
||||
}
|
||||
}
|
||||
|
||||
if ($container instanceof ResetInterface) {
|
||||
$container->reset();
|
||||
}
|
||||
|
||||
@@ -41,14 +41,18 @@ class MetadataBag implements SessionBagInterface
|
||||
|
||||
private int $updateThreshold;
|
||||
|
||||
private ?int $cookieLifetime;
|
||||
|
||||
/**
|
||||
* @param string $storageKey The key used to store bag in the session
|
||||
* @param int $updateThreshold The time to wait between two UPDATED updates
|
||||
* @param string $storageKey The key used to store bag in the session
|
||||
* @param int $updateThreshold The time to wait between two UPDATED updates
|
||||
* @param int|null $cookieLifetime The configured cookie lifetime; null to read from php.ini
|
||||
*/
|
||||
public function __construct(string $storageKey = '_sf2_meta', int $updateThreshold = 0)
|
||||
public function __construct(string $storageKey = '_sf2_meta', int $updateThreshold = 0, ?int $cookieLifetime = null)
|
||||
{
|
||||
$this->storageKey = $storageKey;
|
||||
$this->updateThreshold = $updateThreshold;
|
||||
$this->cookieLifetime = $cookieLifetime;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -143,6 +147,6 @@ class MetadataBag implements SessionBagInterface
|
||||
{
|
||||
$timeStamp = time();
|
||||
$this->meta[self::CREATED] = $this->meta[self::UPDATED] = $this->lastUsed = $timeStamp;
|
||||
$this->meta[self::LIFETIME] = $lifetime ?? (int) \ini_get('session.cookie_lifetime');
|
||||
$this->meta[self::LIFETIME] = $lifetime ?? $this->cookieLifetime ?? (int) \ini_get('session.cookie_lifetime');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -105,7 +105,7 @@ class RequestPayloadValueResolver implements ValueResolverInterface, EventSubscr
|
||||
try {
|
||||
$payload = $this->$payloadMapper($request, $type, $argument);
|
||||
} catch (PartialDenormalizationException $e) {
|
||||
$trans = $this->translator ? $this->translator->trans(...) : fn ($m, $p) => strtr($m, $p);
|
||||
$trans = $this->translator ? $this->translator->trans(...) : static fn ($m, $p) => strtr($m, $p);
|
||||
foreach ($e->getErrors() as $error) {
|
||||
$parameters = [];
|
||||
$template = 'This value was of an unexpected type.';
|
||||
@@ -187,7 +187,7 @@ class RequestPayloadValueResolver implements ValueResolverInterface, EventSubscr
|
||||
}
|
||||
|
||||
if (\is_array($data)) {
|
||||
return $this->serializer->denormalize($data, $type, 'csv', $attribute->serializationContext + self::CONTEXT_DENORMALIZE);
|
||||
return $this->serializer->denormalize($data, $type, self::hasNonStringScalar($data) ? $format : 'csv', $attribute->serializationContext + self::CONTEXT_DENORMALIZE);
|
||||
}
|
||||
|
||||
if ('form' === $format) {
|
||||
@@ -202,4 +202,21 @@ class RequestPayloadValueResolver implements ValueResolverInterface, EventSubscr
|
||||
throw new HttpException(Response::HTTP_BAD_REQUEST, \sprintf('Request payload contains invalid "%s" data.', $format), $e);
|
||||
}
|
||||
}
|
||||
|
||||
private static function hasNonStringScalar(array $data): bool
|
||||
{
|
||||
$stack = [$data];
|
||||
|
||||
while ($stack) {
|
||||
foreach (array_pop($stack) as $v) {
|
||||
if (\is_array($v)) {
|
||||
$stack[] = $v;
|
||||
} elseif (!\is_string($v)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -171,6 +171,7 @@ class RegisterControllerArgumentLocatorsPass implements CompilerPassInterface
|
||||
}
|
||||
|
||||
if ($autowireAttributes) {
|
||||
$invalidBehavior = ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE;
|
||||
$attribute = $autowireAttributes[0]->newInstance();
|
||||
$value = $parameterBag->resolveValue($attribute->value);
|
||||
|
||||
|
||||
@@ -47,6 +47,7 @@ class LocaleListener implements EventSubscriberInterface
|
||||
public function setDefaultLocale(KernelEvent $event): void
|
||||
{
|
||||
$event->getRequest()->setDefaultLocale($this->defaultLocale);
|
||||
$this->setRouterLocale($this->defaultLocale);
|
||||
}
|
||||
|
||||
public function onKernelRequest(RequestEvent $event): void
|
||||
@@ -54,14 +55,12 @@ class LocaleListener implements EventSubscriberInterface
|
||||
$request = $event->getRequest();
|
||||
|
||||
$this->setLocale($request);
|
||||
$this->setRouterContext($request);
|
||||
$this->setRouterLocale($request->getLocale());
|
||||
}
|
||||
|
||||
public function onKernelFinishRequest(FinishRequestEvent $event): void
|
||||
{
|
||||
if (null !== $parentRequest = $this->requestStack->getParentRequest()) {
|
||||
$this->setRouterContext($parentRequest);
|
||||
}
|
||||
$this->setRouterLocale($this->requestStack->getParentRequest()?->getLocale() ?? $this->defaultLocale);
|
||||
}
|
||||
|
||||
private function setLocale(Request $request): void
|
||||
@@ -76,9 +75,9 @@ class LocaleListener implements EventSubscriberInterface
|
||||
}
|
||||
}
|
||||
|
||||
private function setRouterContext(Request $request): void
|
||||
private function setRouterLocale(string $locale): void
|
||||
{
|
||||
$this->router?->getContext()->setParameter('_locale', $request->getLocale());
|
||||
$this->router?->getContext()->setParameter('_locale', $locale);
|
||||
}
|
||||
|
||||
public static function getSubscribedEvents(): array
|
||||
|
||||
@@ -77,11 +77,11 @@ abstract class Kernel implements KernelInterface, RebootableInterface, Terminabl
|
||||
*/
|
||||
private static array $freshCache = [];
|
||||
|
||||
public const VERSION = '6.4.34';
|
||||
public const VERSION_ID = 60434;
|
||||
public const VERSION = '6.4.36';
|
||||
public const VERSION_ID = 60436;
|
||||
public const MAJOR_VERSION = 6;
|
||||
public const MINOR_VERSION = 4;
|
||||
public const RELEASE_VERSION = 34;
|
||||
public const RELEASE_VERSION = 36;
|
||||
public const EXTRA_VERSION = '';
|
||||
|
||||
public const END_OF_MAINTENANCE = '11/2026';
|
||||
|
||||
@@ -44,15 +44,11 @@ class FileBinaryMimeTypeGuesser implements MimeTypeGuesserInterface
|
||||
return $supported;
|
||||
}
|
||||
|
||||
if ('\\' === \DIRECTORY_SEPARATOR || !\function_exists('passthru') || !\function_exists('escapeshellarg')) {
|
||||
if ('\\' === \DIRECTORY_SEPARATOR || !\function_exists('shell_exec') || !\function_exists('escapeshellarg')) {
|
||||
return $supported = false;
|
||||
}
|
||||
|
||||
ob_start();
|
||||
passthru('command -v file', $exitStatus);
|
||||
$binPath = trim(ob_get_clean());
|
||||
|
||||
return $supported = 0 === $exitStatus && '' !== $binPath;
|
||||
return $supported = '' !== trim(shell_exec('command -v file') ?: '');
|
||||
}
|
||||
|
||||
public function guessMimeType(string $path): ?string
|
||||
@@ -65,17 +61,8 @@ class FileBinaryMimeTypeGuesser implements MimeTypeGuesserInterface
|
||||
throw new LogicException(\sprintf('The "%s" guesser is not supported.', __CLASS__));
|
||||
}
|
||||
|
||||
ob_start();
|
||||
|
||||
// need to use --mime instead of -i. see #6641
|
||||
passthru(\sprintf($this->cmd, escapeshellarg((str_starts_with($path, '-') ? './' : '').$path)), $return);
|
||||
if ($return > 0) {
|
||||
ob_end_clean();
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
$type = trim(ob_get_clean());
|
||||
$type = trim(shell_exec(\sprintf($this->cmd, escapeshellarg((str_starts_with($path, '-') ? './' : '').$path))) ?: '');
|
||||
|
||||
if (!preg_match('#^([a-z0-9\-]+/[a-z0-9\-\+\.]+)#i', $type, $match)) {
|
||||
// it's not a type, but an error message
|
||||
|
||||
@@ -141,7 +141,7 @@ class DataPart extends TextPart
|
||||
}
|
||||
$this->_headers = $this->getHeaders();
|
||||
|
||||
return ['_headers', '_parent', 'filename', 'mediaType'];
|
||||
return ['_headers', '_parent', 'filename', 'mediaType', 'cid'];
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -211,6 +211,10 @@ final class Ctype
|
||||
*/
|
||||
private static function convert_int_to_char_for_ctype($int, $function)
|
||||
{
|
||||
if (\PHP_VERSION_ID >= 80100 && !\is_string($int)) {
|
||||
@trigger_error($function.'(): Argument of type '.get_debug_type($int).' will be interpreted as string in the future', \E_USER_DEPRECATED);
|
||||
}
|
||||
|
||||
if (!\is_int($int)) {
|
||||
return $int;
|
||||
}
|
||||
@@ -219,10 +223,6 @@ final class Ctype
|
||||
return (string) $int;
|
||||
}
|
||||
|
||||
if (\PHP_VERSION_ID >= 80100) {
|
||||
@trigger_error($function.'(): Argument of type int will be interpreted as string in the future', \E_USER_DEPRECATED);
|
||||
}
|
||||
|
||||
if ($int < 0) {
|
||||
$int += 256;
|
||||
}
|
||||
|
||||
@@ -27,6 +27,7 @@ namespace Symfony\Polyfill\Intl\Grapheme;
|
||||
* - grapheme_strstr - Returns part of haystack string from the first occurrence of needle to the end of haystack
|
||||
* - grapheme_substr - Return part of a string
|
||||
* - grapheme_str_split - Splits a string into an array of individual or chunks of graphemes
|
||||
* - grapheme_levenshtein - Calculate the grapheme-unit Levenshtein distance between two strings
|
||||
*
|
||||
* @author Nicolas Grekas <p@tchwork.com>
|
||||
*
|
||||
@@ -51,7 +52,7 @@ final class Grapheme
|
||||
|
||||
if (!\is_scalar($s)) {
|
||||
$hasError = false;
|
||||
set_error_handler(function () use (&$hasError) { $hasError = true; });
|
||||
set_error_handler(static function () use (&$hasError) { $hasError = true; });
|
||||
$next = substr($s, $start);
|
||||
restore_error_handler();
|
||||
if ($hasError) {
|
||||
@@ -223,6 +224,54 @@ final class Grapheme
|
||||
return $chunks;
|
||||
}
|
||||
|
||||
public static function grapheme_levenshtein($s1, $s2, $insertion_cost = 1, $replacement_cost = 1, $deletion_cost = 1)
|
||||
{
|
||||
if (!preg_match('//u', $s1) || !preg_match('//u', $s2)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (0 > $insertion_cost || 0 > $replacement_cost || 0 > $deletion_cost) {
|
||||
if (80000 > \PHP_VERSION_ID) {
|
||||
return false;
|
||||
}
|
||||
|
||||
throw new \ValueError('grapheme_levenshtein(): Argument #3 ($insertion_cost), #4 ($replacement_cost), and #5 ($deletion_cost) must be greater than or equal to 0');
|
||||
}
|
||||
|
||||
preg_match_all('/'.SYMFONY_GRAPHEME_CLUSTER_RX.'/u', $s1, $s1);
|
||||
preg_match_all('/'.SYMFONY_GRAPHEME_CLUSTER_RX.'/u', $s2, $s2);
|
||||
|
||||
$s1 = $s1[0];
|
||||
$s2 = $s2[0];
|
||||
$l1 = \count($s1);
|
||||
$l2 = \count($s2);
|
||||
|
||||
if (0 === $l1) {
|
||||
return $l2 * $insertion_cost;
|
||||
}
|
||||
if (0 === $l2) {
|
||||
return $l1 * $deletion_cost;
|
||||
}
|
||||
|
||||
$dp = array_fill(0, $l1 + 1, array_fill(0, $l2 + 1, 0));
|
||||
|
||||
for ($i = 1; $i <= $l1; ++$i) {
|
||||
$dp[$i][0] = $dp[$i - 1][0] + $deletion_cost;
|
||||
}
|
||||
for ($j = 1; $j <= $l2; ++$j) {
|
||||
$dp[0][$j] = $dp[0][$j - 1] + $insertion_cost;
|
||||
}
|
||||
|
||||
for ($i = 1; $i <= $l1; ++$i) {
|
||||
for ($j = 1; $j <= $l2; ++$j) {
|
||||
$cost = ($s1[$i - 1] === $s2[$j - 1]) ? 0 : $replacement_cost;
|
||||
$dp[$i][$j] = min($dp[$i - 1][$j] + $deletion_cost, $dp[$i][$j - 1] + $insertion_cost, $dp[$i - 1][$j - 1] + $cost);
|
||||
}
|
||||
}
|
||||
|
||||
return $dp[$l1][$l2];
|
||||
}
|
||||
|
||||
private static function grapheme_position($s, $needle, $offset, $mode)
|
||||
{
|
||||
$needle = (string) $needle;
|
||||
|
||||
@@ -53,5 +53,8 @@ if (!function_exists('grapheme_substr')) {
|
||||
function grapheme_substr($string, $offset, $length = null) { return p\Grapheme::grapheme_substr($string, $offset, $length); }
|
||||
}
|
||||
if (!function_exists('grapheme_str_split')) {
|
||||
function grapheme_str_split($string, $length = 1) { return p\Grapheme::grapheme_str_split($string, $length); }
|
||||
function grapheme_str_split(string $string, int $length = 1) { return p\Grapheme::grapheme_str_split($string, $length); }
|
||||
}
|
||||
if (!function_exists('grapheme_levenshtein')) {
|
||||
function grapheme_levenshtein(string $string1, string $string2, int $insertion_cost = 1, int $replacement_cost = 1, int $deletion_cost = 1, string $locale = '') { return p\Php85::grapheme_levenshtein($string1, $string2, $insertion_cost, $replacement_cost, $deletion_cost); }
|
||||
}
|
||||
|
||||
@@ -14,6 +14,9 @@ use Symfony\Polyfill\Intl\Grapheme as p;
|
||||
if (!function_exists('grapheme_str_split')) {
|
||||
function grapheme_str_split(string $string, int $length = 1): array|false { return p\Grapheme::grapheme_str_split($string, $length); }
|
||||
}
|
||||
if (!function_exists('grapheme_levenshtein')) {
|
||||
function grapheme_levenshtein(string $string1, string $string2, int $insertion_cost = 1, int $replacement_cost = 1, int $deletion_cost = 1, string $locale = ''): int|false { return p\Grapheme::grapheme_levenshtein($string1, $string2, $insertion_cost, $replacement_cost, $deletion_cost); }
|
||||
}
|
||||
|
||||
if (extension_loaded('intl')) {
|
||||
return;
|
||||
|
||||
@@ -118,17 +118,15 @@ abstract class Collator
|
||||
}
|
||||
|
||||
/**
|
||||
* Not supported. Compare two Unicode strings.
|
||||
* Compare two Unicode strings.
|
||||
*
|
||||
* @return int|false
|
||||
*
|
||||
* @see https://php.net/collator.compare
|
||||
*
|
||||
* @throws MethodNotImplementedException
|
||||
*/
|
||||
public function compare(string $string1, string $string2)
|
||||
{
|
||||
throw new MethodNotImplementedException(__METHOD__);
|
||||
return strcasecmp($string1, $string2) ?: $string2 <=> $string1;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -104,7 +104,7 @@ class FullTransformer
|
||||
|
||||
// handle unimplemented characters
|
||||
if (false !== strpos($this->notImplementedChars, $dateChars[0])) {
|
||||
throw new NotImplementedException(sprintf('Unimplemented date character "%s" in format "%s".', $dateChars[0], $this->pattern));
|
||||
throw new NotImplementedException(\sprintf('Unimplemented date character "%s" in format "%s".', $dateChars[0], $this->pattern));
|
||||
}
|
||||
|
||||
return '';
|
||||
@@ -212,7 +212,7 @@ class FullTransformer
|
||||
{
|
||||
$specialCharsArray = str_split($specialChars);
|
||||
|
||||
$specialCharsMatch = implode('|', array_map(function ($char) {
|
||||
$specialCharsMatch = implode('|', array_map(static function ($char) {
|
||||
return $char.'+';
|
||||
}, $specialCharsArray));
|
||||
|
||||
|
||||
@@ -53,7 +53,7 @@ class MonthTransformer extends Transformer
|
||||
public function __construct()
|
||||
{
|
||||
if (0 === \count(self::$shortMonths)) {
|
||||
self::$shortMonths = array_map(function ($month) {
|
||||
self::$shortMonths = array_map(static function ($month) {
|
||||
return substr($month, 0, 3);
|
||||
}, self::$months);
|
||||
|
||||
|
||||
@@ -39,9 +39,9 @@ class QuarterTransformer extends Transformer
|
||||
$map = [1 => '1st quarter', 2 => '2nd quarter', 3 => '3rd quarter', 4 => '4th quarter'];
|
||||
|
||||
return $map[$quarter];
|
||||
} else {
|
||||
return $quarter;
|
||||
}
|
||||
|
||||
return $quarter;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user