diff --git a/application/cmdbabstract.class.inc.php b/application/cmdbabstract.class.inc.php index 8345cab30..08354b187 100644 --- a/application/cmdbabstract.class.inc.php +++ b/application/cmdbabstract.class.inc.php @@ -819,6 +819,7 @@ HTML foreach ($aNotificationClasses as $sNotifClass) { $aNotifSearches[$sNotifClass] = DBObjectSearch::FromOQL("SELECT $sNotifClass AS Ev WHERE Ev.object_id = :id AND Ev.object_class = :class"); $aNotifSearches[$sNotifClass]->SetInternalParams($aParams); + $aNotifSearches[$sNotifClass]->AllowAllData(); $oNotifSet = new DBObjectSet($aNotifSearches[$sNotifClass], []); $iNotifsCount += $oNotifSet->Count(); } @@ -832,6 +833,7 @@ HTML 'menu' => false, 'panel_title' => MetaModel::GetName($sNotifClass), 'panel_icon' => MetaModel::GetClassIcon($sNotifClass, false), + 'display_unauthorized_objects' => true, ]); } } diff --git a/application/displayblock.class.inc.php b/application/displayblock.class.inc.php index aa139d892..ca2fe6857 100644 --- a/application/displayblock.class.inc.php +++ b/application/displayblock.class.inc.php @@ -726,6 +726,10 @@ class DisplayBlock } } + if (!$this->m_oFilter->IsAllDataAllowed() && ($aExtraParams['display_unauthorized_objects'] ?? false) === true) { + $this->m_oFilter->AllowAllData(); + } + $aExtraParams['query_params'] = $this->m_oFilter->GetInternalParams(); $this->m_oSet = new CMDBObjectSet($this->m_oFilter, $aOrderBy, $aQueryParams); } @@ -1379,7 +1383,10 @@ JS // Check the classes that can be read (i.e authorized) by this user... foreach ($aClasses as $sAlias => $sClassName) { - if (UserRights::IsActionAllowed($sClassName, UR_ACTION_READ, $this->m_oSet) != UR_ALLOWED_NO) { + if ( + (UserRights::IsActionAllowed($sClassName, UR_ACTION_READ, $this->m_oSet) !== UR_ALLOWED_NO) + || ($aExtraParams['display_unauthorized_objects'] ?? false) === true + ) { $aAuthorizedClasses[$sAlias] = $sClassName; } } diff --git a/application/loginexternal.class.inc.php b/application/loginexternal.class.inc.php index d07869595..23e0c7850 100644 --- a/application/loginexternal.class.inc.php +++ b/application/loginexternal.class.inc.php @@ -75,13 +75,10 @@ class LoginExternal extends AbstractLoginFSMExtension } /** - * @return bool + * @return bool|mixed */ private function GetAuthUser() { - $sExtAuthVar = MetaModel::GetConfig()->GetExternalAuthenticationVariable(); // In which variable is the info passed ? - eval('$sAuthUser = isset('.$sExtAuthVar.') ? '.$sExtAuthVar.' : false;'); // Retrieve the value - /** @var string $sAuthUser */ - return $sAuthUser; // Retrieve the value + return MetaModel::GetConfig()->GetExternalAuthenticationVariable(); } } diff --git a/application/themehandler.class.inc.php b/application/themehandler.class.inc.php index ada5819ba..0118c2857 100644 --- a/application/themehandler.class.inc.php +++ b/application/themehandler.class.inc.php @@ -924,11 +924,6 @@ CSS; public static function CloneThemeParameterAndIncludeVersion($aThemeParameters, $bSetupCompilationTimestamp, $aImportsPaths) { $aThemeParametersVariable = []; - if (array_key_exists('variables', $aThemeParameters)) { - if (is_array($aThemeParameters['variables'])) { - $aThemeParametersVariable = array_merge([], $aThemeParameters['variables']); - } - } if (array_key_exists('variable_imports', $aThemeParameters)) { if (is_array($aThemeParameters['variable_imports'])) { @@ -936,6 +931,14 @@ CSS; } } + // Variables defined in theme XML have the priority over variables defined in XML imports files + // They're defined after so they overwrite previous parameters + if (array_key_exists('variables', $aThemeParameters)) { + if (is_array($aThemeParameters['variables'])) { + $aThemeParametersVariable = array_merge($aThemeParametersVariable, $aThemeParameters['variables']); + } + } + $aThemeParametersVariable['$version'] = $bSetupCompilationTimestamp; return $aThemeParametersVariable; } diff --git a/application/ui.linksdirectwidget.class.inc.php b/application/ui.linksdirectwidget.class.inc.php index aebb5d710..1dd95da23 100644 --- a/application/ui.linksdirectwidget.class.inc.php +++ b/application/ui.linksdirectwidget.class.inc.php @@ -228,7 +228,7 @@ JS <<
-

{$sEmptyList}

+

{$sEmptyList}

diff --git a/application/ui.searchformforeignkeys.class.inc.php b/application/ui.searchformforeignkeys.class.inc.php index 4be179c3e..cdc75a633 100644 --- a/application/ui.searchformforeignkeys.class.inc.php +++ b/application/ui.searchformforeignkeys.class.inc.php @@ -27,6 +27,9 @@ require_once(APPROOT.'/application/displayblock.class.inc.php'); class UISearchFormForeignKeys { + private $m_sRemoteClass; + private $m_iInputId; + public function __construct($sTargetClass, $iInputId = null) { $this->m_sRemoteClass = $sTargetClass; @@ -40,7 +43,7 @@ class UISearchFormForeignKeys * * @throws \Exception */ - public function ShowModalSearchForeignKeys($oPage, $sTitle) + public function ShowModalSearchForeignKeys($oPage) { $oFilter = new DBObjectSearch($this->m_sRemoteClass); @@ -60,52 +63,17 @@ class UISearchFormForeignKeys ] )); $sEmptyList = Dict::S('UI:Message:EmptyList:UseSearchForm'); - $sCancel = Dict::S('UI:Button:Cancel'); - $sAdd = Dict::S('UI:Button:Add'); $oPage->add( <<
-

{$sEmptyList}

+

{$sEmptyList}

HTML ); - - $oPage->add_ready_script( - <<m_iInputId}').dialog({ - width: $(window).width()*0.8, - height: $(window).height()*0.8, - autoOpen: false, - modal: true, - resizeStop: oForeignKeysWidget{$this->m_iInputId}.UpdateSizes, - buttons: [ - { - text: Dict.S('UI:Button:Cancel'), - class: "cancel ibo-is-alternative ibo-is-neutral", - click: function() { - $('#dlg_{$this->m_iInputId}').dialog('close'); - } - }, - { - text: Dict.S('UI:Button:Add'), - id: 'btn_ok_{$this->m_iInputId}', - class: "ok ibo-is-regular ibo-is-primary", - click: function() { - oForeignKeysWidget{$this->m_iInputId}.DoAddObjects(this.id); - } - }, - ], - - }); -$('#dlg_{$this->m_iInputId}').dialog('option', {title:'$sTitle'}); -$('#SearchFormToAdd_{$this->m_iInputId} form').on('submit.uilinksWizard', oForeignKeysWidget{$this->m_iInputId}.SearchObjectsToAdd); -$('#SearchFormToAdd_{$this->m_iInputId}').on('resize', oForeignKeysWidget{$this->m_iInputId}.UpdateSizes); -JS - ); } public function GetFullListForeignKeysFromSelection($oPage, $oFullSetFilter) @@ -119,31 +87,4 @@ JS IssueLog::Error($e->getMessage()."\nDebug trace:\n".$e->getTraceAsString()); } } - - /** - * Search for objects to be linked to the current object (i.e "remote" objects) - * - * @param WebPage $oP The page used for the output (usually an AjaxWebPage) - * @param string $sRemoteClass Name of the "remote" class to perform the search on, must be a derived class of m_sRemoteClass - * - * @throws \Exception - */ - public function ListResultsSearchForeignKeys(WebPage $oP, $sRemoteClass = '') - { - if ($sRemoteClass != '') { - // assert(MetaModel::IsParentClass($this->m_sRemoteClass, $sRemoteClass)); - $oFilter = new DBObjectSearch($sRemoteClass); - } else { - // No remote class specified use the one defined in the linkedset - $oFilter = new DBObjectSearch($this->m_sRemoteClass); - } - - $oBlock = new DisplayBlock($oFilter, 'list', false); - $oBlock->Display( - $oP, - "ResultsToAdd_{$this->m_iInputId}", - ['menu' => false, 'cssCount' => "#count_{$this->m_iInputId}", 'selection_mode' => true, 'table_id' => "add_{$this->m_iInputId}"] - ); - } - } diff --git a/application/utils.inc.php b/application/utils.inc.php index f284c5439..d824fb01c 100644 --- a/application/utils.inc.php +++ b/application/utils.inc.php @@ -122,6 +122,11 @@ class utils * @since 3.0.0 */ public const ENUM_SANITIZATION_FILTER_VARIABLE_NAME = 'variable_name'; + /** + * @var string For module codes (e.g. `itop-portal-base`, `combodo-webhook-integration`, `some-module-code-x.y`, ...) + * @since 3.2.3 3.3.0 N°8554 + */ + public const ENUM_SANITIZATION_FILTER_MODULE_CODE = 'module_code'; /** * @var string * @since 2.7.10 3.0.0 @@ -393,6 +398,7 @@ class utils * @since 2.7.10 N°6606 use the utils::ENUM_SANITIZATION_* const * @since 2.7.10 N°6606 new case for ENUM_SANITIZATION_FILTER_PHP_CLASS * @since 3.2.1-1 N°8242 Allow value to be an array for every filter + * @since 3.2.3 3.3.0 N°8554 new case for ENUM_SANITIZATION_FILTER_MODULE_CODE * * @link https://www.php.net/manual/en/filter.filters.sanitize.php PHP sanitization filters */ @@ -480,7 +486,7 @@ class utils ); break; - // For XML / HTML node id selector + // For XML / HTML node selector case static::ENUM_SANITIZATION_FILTER_ELEMENT_SELECTOR: $retValue = filter_var( $value, @@ -493,6 +499,15 @@ class utils $retValue = preg_replace('/[^a-zA-Z0-9_]/', '', $value); break; + case static::ENUM_SANITIZATION_FILTER_MODULE_CODE: + // Module codes allow all alphabets letters, numbers, dash and dot characters + $retValue = filter_var( + $value, + FILTER_VALIDATE_REGEXP, + ['options' => ['regexp' => '/^[\p{L}\d.-]+$/u']] + ); + break; + // For URL case static::ENUM_SANITIZATION_FILTER_URL: $retValue = filter_var($value, FILTER_SANITIZE_URL); @@ -1440,6 +1455,12 @@ class utils case iPopupMenuExtension::MENU_OBJLIST_TOOLKIT: /** @var \DBObjectSet $param */ + + // Check if the user has the right to read the objects of this list, otherwise do not propose any action (eg. configure this list, export, etc.) + if (UserRights::IsActionAllowed($param->GetFilter()->GetClass(), UR_ACTION_READ, $param) !== UR_ALLOWED_YES) { + break; + } + $oAppContext = new ApplicationContext(); $sContext = $oAppContext->GetForLink(true); $sDataTableId = is_null($sDataTableId) ? '' : $sDataTableId; diff --git a/composer.json b/composer.json index 720359f78..c4e22c199 100644 --- a/composer.json +++ b/composer.json @@ -15,38 +15,38 @@ "apereo/phpcas": "dev-master", "guzzlehttp/guzzle": "^7.5.1", "league/oauth2-google": "^4.0.1", - "nikic/php-parser": "dev-master", + "nikic/php-parser": "^4.14.0", "pear/archive_tar": "~1.4.14", "pelago/emogrifier": "^7.2.0", "psr/log": "^3.0.0", - "scssphp/scssphp": "^1.12.1", - "soundasleep/html2text": "~2.1", + "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/mailer": "^6.4", - "symfony/security-csrf": "^6.4", + "symfony/runtime": "~6.4.0", "symfony/twig-bundle": "~6.4.0", - "symfony/validator" : "^6.4", + "symfony/var-dumper": "~6.4.0", "symfony/yaml": "~6.4.0", + "symfony/mailer": "~6.4.0", "tecnickcom/tcpdf": "^6.6.0", - "thenetworg/oauth2-azure": "^2.0" + "thenetworg/oauth2-azure": "^2.0", + "soundasleep/html2text": "~2.1" }, "require-dev": { + "symfony/debug-bundle": "~6.4.0", "symfony/stopwatch": "~6.4.0", "symfony/web-profiler-bundle": "~6.4.0" }, "repositories": [ { "type": "vcs", - "url": "https://github.com/Combodo/PHP-Parser" + "url": "https://github.com/EsupPortail/phpCAS" }, { "type": "vcs", - "url": "https://github.com/EsupPortail/phpCAS" + "url": "https://github.com/combodo-itop-libs/scssphp" } ], "suggest": { @@ -68,7 +68,10 @@ }, "sort-packages": true, "classmap-authoritative": true, - "platform-check": true + "platform-check": true, + "allow-plugins": { + "symfony/runtime": true + } }, "autoload": { "classmap": [ @@ -77,6 +80,7 @@ "sources" ], "exclude-from-classmap": [ + "application/twigextension.class.inc.php", "core/oql/build/PHP/", "core/apc-emulation.php", "application/startup.inc.php", @@ -96,7 +100,7 @@ "extra": { "symfony": { "allow-contrib": false, - "require": "6.4.*" + "require": "3.4.*" }, "runtime": { "dotenv_path": "resources/symfony/.env" diff --git a/composer.lock b/composer.lock index 07b88c2a1..6a95f3e03 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "fc0e9e9dea11dcbb6272414776c30685", + "content-hash": "eebbdc6c10a479b0e62fc18d88496f5c", "packages": [ { "name": "apereo/phpcas", @@ -236,16 +236,16 @@ }, { "name": "firebase/php-jwt", - "version": "v7.0.3", + "version": "v7.0.2", "source": { "type": "git", "url": "https://github.com/firebase/php-jwt.git", - "reference": "28aa0694bcfdfa5e2959c394d5a1ee7a5083629e" + "reference": "5645b43af647b6947daac1d0f659dd1fbe8d3b65" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/firebase/php-jwt/zipball/28aa0694bcfdfa5e2959c394d5a1ee7a5083629e", - "reference": "28aa0694bcfdfa5e2959c394d5a1ee7a5083629e", + "url": "https://api.github.com/repos/firebase/php-jwt/zipball/5645b43af647b6947daac1d0f659dd1fbe8d3b65", + "reference": "5645b43af647b6947daac1d0f659dd1fbe8d3b65", "shasum": "" }, "require": { @@ -293,9 +293,9 @@ ], "support": { "issues": "https://github.com/firebase/php-jwt/issues", - "source": "https://github.com/firebase/php-jwt/tree/v7.0.3" + "source": "https://github.com/firebase/php-jwt/tree/v7.0.2" }, - "time": "2026-02-25T22:16:40+00:00" + "time": "2025-12-16T22:17:28+00:00" }, { "name": "guzzlehttp/guzzle", @@ -744,48 +744,36 @@ }, { "name": "nikic/php-parser", - "version": "dev-master", + "version": "v4.19.5", "source": { "type": "git", - "url": "https://github.com/Combodo/PHP-Parser.git", - "reference": "b2cd0735eb27788d5d41fa3c2cfaa01a593fd7fb" + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "51bd93cc741b7fc3d63d20b6bdcd99fdaa359837" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Combodo/PHP-Parser/zipball/b2cd0735eb27788d5d41fa3c2cfaa01a593fd7fb", - "reference": "b2cd0735eb27788d5d41fa3c2cfaa01a593fd7fb", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/51bd93cc741b7fc3d63d20b6bdcd99fdaa359837", + "reference": "51bd93cc741b7fc3d63d20b6bdcd99fdaa359837", "shasum": "" }, "require": { - "ext-ctype": "*", - "ext-json": "*", "ext-tokenizer": "*", - "php": ">=7.4" + "php": ">=7.1" }, "require-dev": { "ircmaxell/php-yacc": "^0.0.7", - "phpunit/phpunit": "^9.0" + "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" }, - "default-branch": true, "bin": [ "bin/php-parse" ], "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.x-dev" - } - }, "autoload": { "psr-4": { "PhpParser\\": "lib/PhpParser" } }, - "autoload-dev": { - "psr-4": { - "PhpParser\\": "test/PhpParser/" - } - }, + "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], @@ -800,9 +788,10 @@ "php" ], "support": { - "source": "https://github.com/Combodo/PHP-Parser/tree/master" + "issues": "https://github.com/nikic/PHP-Parser/issues", + "source": "https://github.com/nikic/PHP-Parser/tree/v4.19.5" }, - "time": "2025-09-18T12:29:15+00:00" + "time": "2025-12-06T11:45:25+00:00" }, { "name": "pear/archive_tar", @@ -1599,16 +1588,16 @@ }, { "name": "scssphp/scssphp", - "version": "v1.13.0", + "version": "dev-combodo/1.x", "source": { "type": "git", - "url": "https://github.com/scssphp/scssphp.git", - "reference": "63d1157457e5554edf00b0c1fabab4c1511d2520" + "url": "https://github.com/combodo-itop-libs/scssphp.git", + "reference": "dde81c0a39d02e8e6fc81b70269747734e16d526" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/scssphp/scssphp/zipball/63d1157457e5554edf00b0c1fabab4c1511d2520", - "reference": "63d1157457e5554edf00b0c1fabab4c1511d2520", + "url": "https://api.github.com/repos/combodo-itop-libs/scssphp/zipball/dde81c0a39d02e8e6fc81b70269747734e16d526", + "reference": "dde81c0a39d02e8e6fc81b70269747734e16d526", "shasum": "" }, "require": { @@ -1637,8 +1626,8 @@ "type": "library", "extra": { "bamarni-bin": { - "bin-links": false, - "forward-command": false + "forward-command": false, + "bin-links": false } }, "autoload": { @@ -1646,7 +1635,11 @@ "ScssPhp\\ScssPhp\\": "src/" } }, - "notification-url": "https://packagist.org/downloads/", + "autoload-dev": { + "psr-4": { + "ScssPhp\\ScssPhp\\Tests\\": "tests/" + } + }, "license": [ "MIT" ], @@ -1672,10 +1665,9 @@ "stylesheet" ], "support": { - "issues": "https://github.com/scssphp/scssphp/issues", - "source": "https://github.com/scssphp/scssphp/tree/v1.13.0" + "source": "https://github.com/combodo-itop-libs/scssphp/tree/combodo/1.x" }, - "time": "2024-08-17T21:02:11+00:00" + "time": "2026-03-23T15:26:59+00:00" }, { "name": "soundasleep/html2text", @@ -1734,16 +1726,16 @@ }, { "name": "symfony/cache", - "version": "v6.4.34", + "version": "v6.4.33", "source": { "type": "git", "url": "https://github.com/symfony/cache.git", - "reference": "a0a1690543329685c044362c873b78c6de9d4faa" + "reference": "5b088fa41eb9568748dc255c45e4054c387ba73b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache/zipball/a0a1690543329685c044362c873b78c6de9d4faa", - "reference": "a0a1690543329685c044362c873b78c6de9d4faa", + "url": "https://api.github.com/repos/symfony/cache/zipball/5b088fa41eb9568748dc255c45e4054c387ba73b", + "reference": "5b088fa41eb9568748dc255c45e4054c387ba73b", "shasum": "" }, "require": { @@ -1810,7 +1802,7 @@ "psr6" ], "support": { - "source": "https://github.com/symfony/cache/tree/v6.4.34" + "source": "https://github.com/symfony/cache/tree/v6.4.33" }, "funding": [ { @@ -1830,7 +1822,7 @@ "type": "tidelift" } ], - "time": "2026-02-20T15:06:30+00:00" + "time": "2026-01-27T15:05:20+00:00" }, { "name": "symfony/cache-contracts", @@ -1910,16 +1902,16 @@ }, { "name": "symfony/config", - "version": "v6.4.34", + "version": "v6.4.32", "source": { "type": "git", "url": "https://github.com/symfony/config.git", - "reference": "ce9cb0c0d281aaf188b802d4968e42bfb60701e9" + "reference": "d445badf0ad2c2a492e38c0378c39997a56ef97b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/ce9cb0c0d281aaf188b802d4968e42bfb60701e9", - "reference": "ce9cb0c0d281aaf188b802d4968e42bfb60701e9", + "url": "https://api.github.com/repos/symfony/config/zipball/d445badf0ad2c2a492e38c0378c39997a56ef97b", + "reference": "d445badf0ad2c2a492e38c0378c39997a56ef97b", "shasum": "" }, "require": { @@ -1965,7 +1957,7 @@ "description": "Helps you find, load, combine, autofill and validate configuration values of any kind", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/config/tree/v6.4.34" + "source": "https://github.com/symfony/config/tree/v6.4.32" }, "funding": [ { @@ -1985,20 +1977,20 @@ "type": "tidelift" } ], - "time": "2026-02-24T17:34:50+00:00" + "time": "2026-01-13T08:40:30+00:00" }, { "name": "symfony/console", - "version": "v6.4.34", + "version": "v6.4.32", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "7b1f1c37eff5910ddda2831345467e593a5120ad" + "reference": "0bc2199c6c1f05276b05956f1ddc63f6d7eb5fc3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/7b1f1c37eff5910ddda2831345467e593a5120ad", - "reference": "7b1f1c37eff5910ddda2831345467e593a5120ad", + "url": "https://api.github.com/repos/symfony/console/zipball/0bc2199c6c1f05276b05956f1ddc63f6d7eb5fc3", + "reference": "0bc2199c6c1f05276b05956f1ddc63f6d7eb5fc3", "shasum": "" }, "require": { @@ -2063,7 +2055,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v6.4.34" + "source": "https://github.com/symfony/console/tree/v6.4.32" }, "funding": [ { @@ -2083,20 +2075,20 @@ "type": "tidelift" } ], - "time": "2026-02-23T15:42:15+00:00" + "time": "2026-01-13T08:45:59+00:00" }, { "name": "symfony/css-selector", - "version": "v6.4.34", + "version": "v6.4.24", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "b0314c186f1464de048cce58979ff1625ca88bbb" + "reference": "9b784413143701aa3c94ac1869a159a9e53e8761" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/b0314c186f1464de048cce58979ff1625ca88bbb", - "reference": "b0314c186f1464de048cce58979ff1625ca88bbb", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/9b784413143701aa3c94ac1869a159a9e53e8761", + "reference": "9b784413143701aa3c94ac1869a159a9e53e8761", "shasum": "" }, "require": { @@ -2132,7 +2124,7 @@ "description": "Converts CSS selectors to XPath expressions", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/css-selector/tree/v6.4.34" + "source": "https://github.com/symfony/css-selector/tree/v6.4.24" }, "funding": [ { @@ -2152,20 +2144,20 @@ "type": "tidelift" } ], - "time": "2026-02-16T08:37:21+00:00" + "time": "2025-07-10T08:14:14+00:00" }, { "name": "symfony/dependency-injection", - "version": "v6.4.34", + "version": "v6.4.32", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "91e49958b8a6092e48e4711894a1aeb1b151c62a" + "reference": "b17882e933c4c606620247b6708ab53aa3b88753" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/91e49958b8a6092e48e4711894a1aeb1b151c62a", - "reference": "91e49958b8a6092e48e4711894a1aeb1b151c62a", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/b17882e933c4c606620247b6708ab53aa3b88753", + "reference": "b17882e933c4c606620247b6708ab53aa3b88753", "shasum": "" }, "require": { @@ -2217,7 +2209,7 @@ "description": "Allows you to standardize and centralize the way objects are constructed in your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/dependency-injection/tree/v6.4.34" + "source": "https://github.com/symfony/dependency-injection/tree/v6.4.32" }, "funding": [ { @@ -2237,7 +2229,7 @@ "type": "tidelift" } ], - "time": "2026-02-24T15:33:38+00:00" + "time": "2026-01-23T10:54:33+00:00" }, { "name": "symfony/deprecation-contracts", @@ -2625,16 +2617,16 @@ }, { "name": "symfony/filesystem", - "version": "v6.4.34", + "version": "v6.4.30", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "01ffe0411b842f93c571e5c391f289c3fdd498c3" + "reference": "441c6b69f7222aadae7cbf5df588496d5ee37789" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/01ffe0411b842f93c571e5c391f289c3fdd498c3", - "reference": "01ffe0411b842f93c571e5c391f289c3fdd498c3", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/441c6b69f7222aadae7cbf5df588496d5ee37789", + "reference": "441c6b69f7222aadae7cbf5df588496d5ee37789", "shasum": "" }, "require": { @@ -2671,7 +2663,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v6.4.34" + "source": "https://github.com/symfony/filesystem/tree/v6.4.30" }, "funding": [ { @@ -2691,20 +2683,20 @@ "type": "tidelift" } ], - "time": "2026-02-24T17:51:06+00:00" + "time": "2025-11-26T14:43:45+00:00" }, { "name": "symfony/finder", - "version": "v6.4.34", + "version": "v6.4.33", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "9590e86be1d1c57bfbb16d0dd040345378c20896" + "reference": "24965ca011dac87431729640feef8bcf7b5523e0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/9590e86be1d1c57bfbb16d0dd040345378c20896", - "reference": "9590e86be1d1c57bfbb16d0dd040345378c20896", + "url": "https://api.github.com/repos/symfony/finder/zipball/24965ca011dac87431729640feef8bcf7b5523e0", + "reference": "24965ca011dac87431729640feef8bcf7b5523e0", "shasum": "" }, "require": { @@ -2739,7 +2731,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v6.4.34" + "source": "https://github.com/symfony/finder/tree/v6.4.33" }, "funding": [ { @@ -2759,121 +2751,20 @@ "type": "tidelift" } ], - "time": "2026-01-28T15:16:37+00:00" - }, - { - "name": "symfony/form", - "version": "v6.4.34", - "source": { - "type": "git", - "url": "https://github.com/symfony/form.git", - "reference": "ed9275a133809bb48d949ba6dfdc808a819ebea2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/form/zipball/ed9275a133809bb48d949ba6dfdc808a819ebea2", - "reference": "ed9275a133809bb48d949ba6dfdc808a819ebea2", - "shasum": "" - }, - "require": { - "php": ">=8.1", - "symfony/deprecation-contracts": "^2.5|^3", - "symfony/event-dispatcher": "^5.4|^6.0|^7.0", - "symfony/options-resolver": "^5.4|^6.0|^7.0", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-intl-icu": "^1.21", - "symfony/polyfill-mbstring": "~1.0", - "symfony/property-access": "^5.4|^6.0|^7.0", - "symfony/service-contracts": "^2.5|^3" - }, - "conflict": { - "symfony/console": "<5.4", - "symfony/dependency-injection": "<5.4", - "symfony/doctrine-bridge": "<5.4.21|>=6,<6.2.7", - "symfony/error-handler": "<5.4", - "symfony/framework-bundle": "<5.4", - "symfony/http-kernel": "<5.4", - "symfony/translation": "<5.4.35|>=6.0,<6.3.12|>=6.4,<6.4.3|>=7.0,<7.0.3", - "symfony/translation-contracts": "<2.5", - "symfony/twig-bridge": "<6.3" - }, - "require-dev": { - "doctrine/collections": "^1.0|^2.0", - "symfony/config": "^5.4|^6.0|^7.0", - "symfony/console": "^5.4|^6.0|^7.0", - "symfony/dependency-injection": "^5.4|^6.0|^7.0", - "symfony/expression-language": "^5.4|^6.0|^7.0", - "symfony/html-sanitizer": "^6.1|^7.0", - "symfony/http-foundation": "^5.4|^6.0|^7.0", - "symfony/http-kernel": "^5.4|^6.0|^7.0", - "symfony/intl": "^5.4|^6.0|^7.0", - "symfony/security-core": "^6.2|^7.0", - "symfony/security-csrf": "^5.4|^6.0|^7.0", - "symfony/translation": "^5.4.35|~6.3.12|^6.4.3|^7.0.3", - "symfony/uid": "^5.4|^6.0|^7.0", - "symfony/validator": "^5.4|^6.0|^7.0", - "symfony/var-dumper": "^5.4|^6.0|^7.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Form\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Allows to easily create, process and reuse HTML forms", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/form/tree/v6.4.34" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://github.com/nicolas-grekas", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2026-02-23T17:59:52+00:00" + "time": "2026-01-26T13:03:48+00:00" }, { "name": "symfony/framework-bundle", - "version": "v6.4.34", + "version": "v6.4.33", "source": { "type": "git", "url": "https://github.com/symfony/framework-bundle.git", - "reference": "5b5d19473f22d699811a41b01cef2462bc42b238" + "reference": "9ef2d0b63b9e855ba351e770a603d89699115801" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/5b5d19473f22d699811a41b01cef2462bc42b238", - "reference": "5b5d19473f22d699811a41b01cef2462bc42b238", + "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/9ef2d0b63b9e855ba351e770a603d89699115801", + "reference": "9ef2d0b63b9e855ba351e770a603d89699115801", "shasum": "" }, "require": { @@ -2993,7 +2884,7 @@ "description": "Provides a tight integration between Symfony components and the Symfony full-stack framework", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/framework-bundle/tree/v6.4.34" + "source": "https://github.com/symfony/framework-bundle/tree/v6.4.33" }, "funding": [ { @@ -3013,20 +2904,20 @@ "type": "tidelift" } ], - "time": "2026-02-24T16:00:52+00:00" + "time": "2026-01-26T14:46:41+00:00" }, { "name": "symfony/http-foundation", - "version": "v6.4.34", + "version": "v6.4.33", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "5bb346d1b4b2a616e5c3d99b3ee4d5810735c535" + "reference": "f1a490cc9d595ba7ebe684220e625d1e472ad278" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/5bb346d1b4b2a616e5c3d99b3ee4d5810735c535", - "reference": "5bb346d1b4b2a616e5c3d99b3ee4d5810735c535", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/f1a490cc9d595ba7ebe684220e625d1e472ad278", + "reference": "f1a490cc9d595ba7ebe684220e625d1e472ad278", "shasum": "" }, "require": { @@ -3074,7 +2965,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v6.4.34" + "source": "https://github.com/symfony/http-foundation/tree/v6.4.33" }, "funding": [ { @@ -3094,20 +2985,20 @@ "type": "tidelift" } ], - "time": "2026-02-21T15:48:41+00:00" + "time": "2026-01-27T15:04:55+00:00" }, { "name": "symfony/http-kernel", - "version": "v6.4.34", + "version": "v6.4.33", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "006a49fc4f41ee21a6ca61e69caed1c30b29f07c" + "reference": "73fa5c999d7f741ca544a97d3c791cc97890ae4d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/006a49fc4f41ee21a6ca61e69caed1c30b29f07c", - "reference": "006a49fc4f41ee21a6ca61e69caed1c30b29f07c", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/73fa5c999d7f741ca544a97d3c791cc97890ae4d", + "reference": "73fa5c999d7f741ca544a97d3c791cc97890ae4d", "shasum": "" }, "require": { @@ -3148,7 +3039,7 @@ "symfony/config": "^6.1|^7.0", "symfony/console": "^5.4|^6.0|^7.0", "symfony/css-selector": "^5.4|^6.0|^7.0", - "symfony/dependency-injection": "^6.4.1|^7.0.1", + "symfony/dependency-injection": "^6.4|^7.0", "symfony/dom-crawler": "^5.4|^6.0|^7.0", "symfony/expression-language": "^5.4|^6.0|^7.0", "symfony/finder": "^5.4|^6.0|^7.0", @@ -3192,7 +3083,7 @@ "description": "Provides a structured process for converting a Request into a Response", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-kernel/tree/v6.4.34" + "source": "https://github.com/symfony/http-kernel/tree/v6.4.33" }, "funding": [ { @@ -3212,20 +3103,20 @@ "type": "tidelift" } ], - "time": "2026-02-26T08:27:11+00:00" + "time": "2026-01-28T10:02:13+00:00" }, { "name": "symfony/mailer", - "version": "v6.4.34", + "version": "v6.4.31", "source": { "type": "git", "url": "https://github.com/symfony/mailer.git", - "reference": "01b846f48e53ee4096692a383637a1fa4d577301" + "reference": "8835f93333474780fda1b987cae37e33c3e026ca" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mailer/zipball/01b846f48e53ee4096692a383637a1fa4d577301", - "reference": "01b846f48e53ee4096692a383637a1fa4d577301", + "url": "https://api.github.com/repos/symfony/mailer/zipball/8835f93333474780fda1b987cae37e33c3e026ca", + "reference": "8835f93333474780fda1b987cae37e33c3e026ca", "shasum": "" }, "require": { @@ -3276,7 +3167,7 @@ "description": "Helps sending emails", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/mailer/tree/v6.4.34" + "source": "https://github.com/symfony/mailer/tree/v6.4.31" }, "funding": [ { @@ -3296,20 +3187,20 @@ "type": "tidelift" } ], - "time": "2026-02-24T09:34:36+00:00" + "time": "2025-12-12T07:33:25+00:00" }, { "name": "symfony/mime", - "version": "v6.4.34", + "version": "v6.4.32", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "2b32fbbe10b36a8379efab6e702ad8b917151839" + "reference": "7409686879ca36c09fc970a5fa8ff6e93504dba4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/2b32fbbe10b36a8379efab6e702ad8b917151839", - "reference": "2b32fbbe10b36a8379efab6e702ad8b917151839", + "url": "https://api.github.com/repos/symfony/mime/zipball/7409686879ca36c09fc970a5fa8ff6e93504dba4", + "reference": "7409686879ca36c09fc970a5fa8ff6e93504dba4", "shasum": "" }, "require": { @@ -3365,7 +3256,7 @@ "mime-type" ], "support": { - "source": "https://github.com/symfony/mime/tree/v6.4.34" + "source": "https://github.com/symfony/mime/tree/v6.4.32" }, "funding": [ { @@ -3385,154 +3276,7 @@ "type": "tidelift" } ], - "time": "2026-02-02T17:01:23+00:00" - }, - { - "name": "symfony/options-resolver", - "version": "v6.4.30", - "source": { - "type": "git", - "url": "https://github.com/symfony/options-resolver.git", - "reference": "eeaa8cabe54c7b3516938c72a4a161c0cc80a34f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/eeaa8cabe54c7b3516938c72a4a161c0cc80a34f", - "reference": "eeaa8cabe54c7b3516938c72a4a161c0cc80a34f", - "shasum": "" - }, - "require": { - "php": ">=8.1", - "symfony/deprecation-contracts": "^2.5|^3" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\OptionsResolver\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides an improved replacement for the array_replace PHP function", - "homepage": "https://symfony.com", - "keywords": [ - "config", - "configuration", - "options" - ], - "support": { - "source": "https://github.com/symfony/options-resolver/tree/v6.4.30" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://github.com/nicolas-grekas", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2025-11-12T13:06:53+00:00" - }, - { - "name": "symfony/password-hasher", - "version": "v6.4.32", - "source": { - "type": "git", - "url": "https://github.com/symfony/password-hasher.git", - "reference": "fbdfa5a2ca218ec8bb9029517426df2d780bdba9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/password-hasher/zipball/fbdfa5a2ca218ec8bb9029517426df2d780bdba9", - "reference": "fbdfa5a2ca218ec8bb9029517426df2d780bdba9", - "shasum": "" - }, - "require": { - "php": ">=8.1" - }, - "conflict": { - "symfony/security-core": "<5.4" - }, - "require-dev": { - "symfony/console": "^5.4|^6.0|^7.0", - "symfony/security-core": "^5.4|^6.0|^7.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\PasswordHasher\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Robin Chalas", - "email": "robin.chalas@gmail.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides password hashing utilities", - "homepage": "https://symfony.com", - "keywords": [ - "hashing", - "password" - ], - "support": { - "source": "https://github.com/symfony/password-hasher/tree/v6.4.32" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://github.com/nicolas-grekas", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2026-01-01T21:24:53+00:00" + "time": "2026-01-04T11:53:14+00:00" }, { "name": "symfony/polyfill-ctype", @@ -3699,94 +3443,6 @@ ], "time": "2025-06-27T09:58:17+00:00" }, - { - "name": "symfony/polyfill-intl-icu", - "version": "v1.33.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-intl-icu.git", - "reference": "bfc8fa13dbaf21d69114b0efcd72ab700fb04d0c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-icu/zipball/bfc8fa13dbaf21d69114b0efcd72ab700fb04d0c", - "reference": "bfc8fa13dbaf21d69114b0efcd72ab700fb04d0c", - "shasum": "" - }, - "require": { - "php": ">=7.2" - }, - "suggest": { - "ext-intl": "For best performance and support of other locales than \"en\"" - }, - "type": "library", - "extra": { - "thanks": { - "url": "https://github.com/symfony/polyfill", - "name": "symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Intl\\Icu\\": "" - }, - "classmap": [ - "Resources/stubs" - ], - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for intl's ICU-related data and classes", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "icu", - "intl", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-intl-icu/tree/v1.33.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://github.com/nicolas-grekas", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2025-06-20T22:24:30+00:00" - }, { "name": "symfony/polyfill-intl-idn", "version": "v1.33.0", @@ -4125,188 +3781,17 @@ "time": "2025-07-08T02:45:35+00:00" }, { - "name": "symfony/property-access", + "name": "symfony/routing", "version": "v6.4.32", - "source": { - "type": "git", - "url": "https://github.com/symfony/property-access.git", - "reference": "6dfa655ac9e9860c05cabb287f34da86b18c237e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/property-access/zipball/6dfa655ac9e9860c05cabb287f34da86b18c237e", - "reference": "6dfa655ac9e9860c05cabb287f34da86b18c237e", - "shasum": "" - }, - "require": { - "php": ">=8.1", - "symfony/deprecation-contracts": "^2.5|^3", - "symfony/property-info": "^6.4.32|~7.3.10|^7.4.4" - }, - "require-dev": { - "symfony/cache": "^5.4|^6.0|^7.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\PropertyAccess\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides functions to read and write from/to an object or array using a simple string notation", - "homepage": "https://symfony.com", - "keywords": [ - "access", - "array", - "extraction", - "index", - "injection", - "object", - "property", - "property-path", - "reflection" - ], - "support": { - "source": "https://github.com/symfony/property-access/tree/v6.4.32" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://github.com/nicolas-grekas", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2026-01-05T08:25:17+00:00" - }, - { - "name": "symfony/property-info", - "version": "v6.4.34", - "source": { - "type": "git", - "url": "https://github.com/symfony/property-info.git", - "reference": "916455e4c9dcddbebfd101f29d7983841c3564e0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/property-info/zipball/916455e4c9dcddbebfd101f29d7983841c3564e0", - "reference": "916455e4c9dcddbebfd101f29d7983841c3564e0", - "shasum": "" - }, - "require": { - "php": ">=8.1", - "symfony/string": "^5.4|^6.0|^7.0" - }, - "conflict": { - "doctrine/annotations": "<1.12", - "phpdocumentor/reflection-docblock": "<5.2|>=6", - "phpdocumentor/type-resolver": "<1.5.1", - "symfony/cache": "<5.4", - "symfony/dependency-injection": "<5.4|>=6.0,<6.4", - "symfony/serializer": "<5.4" - }, - "require-dev": { - "doctrine/annotations": "^1.12|^2", - "phpdocumentor/reflection-docblock": "^5.2", - "phpstan/phpdoc-parser": "^1.0|^2.0", - "symfony/cache": "^5.4|^6.0|^7.0", - "symfony/dependency-injection": "^5.4|^6.0|^7.0", - "symfony/serializer": "^5.4|^6.4|^7.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\PropertyInfo\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Kévin Dunglas", - "email": "dunglas@gmail.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Extracts information about PHP class' properties using metadata of popular sources", - "homepage": "https://symfony.com", - "keywords": [ - "doctrine", - "phpdoc", - "property", - "symfony", - "type", - "validator" - ], - "support": { - "source": "https://github.com/symfony/property-info/tree/v6.4.34" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://github.com/nicolas-grekas", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2026-02-13T09:42:46+00:00" - }, - { - "name": "symfony/routing", - "version": "v6.4.34", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "5ab3a3e1a03535ec5ca6ce2d39e4369a1096ae47" + "reference": "0dc6253e864e71b486e8ba4970a56ab849106ebe" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/5ab3a3e1a03535ec5ca6ce2d39e4369a1096ae47", - "reference": "5ab3a3e1a03535ec5ca6ce2d39e4369a1096ae47", + "url": "https://api.github.com/repos/symfony/routing/zipball/0dc6253e864e71b486e8ba4970a56ab849106ebe", + "reference": "0dc6253e864e71b486e8ba4970a56ab849106ebe", "shasum": "" }, "require": { @@ -4360,7 +3845,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v6.4.34" + "source": "https://github.com/symfony/routing/tree/v6.4.32" }, "funding": [ { @@ -4380,54 +3865,44 @@ "type": "tidelift" } ], - "time": "2026-02-24T17:34:50+00:00" + "time": "2026-01-12T08:31:19+00:00" }, { - "name": "symfony/security-core", - "version": "v6.4.31", + "name": "symfony/runtime", + "version": "v6.4.30", "source": { "type": "git", - "url": "https://github.com/symfony/security-core.git", - "reference": "fa269ad61a021cc54329dc96e57bed78ba720bfe" + "url": "https://github.com/symfony/runtime.git", + "reference": "fb3149ee85d3b639dd3e49ea9dda05656f0537e3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/security-core/zipball/fa269ad61a021cc54329dc96e57bed78ba720bfe", - "reference": "fa269ad61a021cc54329dc96e57bed78ba720bfe", + "url": "https://api.github.com/repos/symfony/runtime/zipball/fb3149ee85d3b639dd3e49ea9dda05656f0537e3", + "reference": "fb3149ee85d3b639dd3e49ea9dda05656f0537e3", "shasum": "" }, "require": { - "php": ">=8.1", - "symfony/deprecation-contracts": "^2.5|^3", - "symfony/event-dispatcher-contracts": "^2.5|^3", - "symfony/password-hasher": "^5.4|^6.0|^7.0", - "symfony/service-contracts": "^2.5|^3" + "composer-plugin-api": "^1.0|^2.0", + "php": ">=8.1" }, "conflict": { - "symfony/event-dispatcher": "<5.4", - "symfony/http-foundation": "<5.4", - "symfony/ldap": "<5.4", - "symfony/security-guard": "<5.4", - "symfony/translation": "<5.4.35|>=6.0,<6.3.12|>=6.4,<6.4.3|>=7.0,<7.0.3", - "symfony/validator": "<5.4" + "symfony/dotenv": "<5.4" }, "require-dev": { - "psr/cache": "^1.0|^2.0|^3.0", - "psr/container": "^1.1|^2.0", - "psr/log": "^1|^2|^3", - "symfony/cache": "^5.4|^6.0|^7.0", - "symfony/event-dispatcher": "^5.4|^6.0|^7.0", - "symfony/expression-language": "^5.4|^6.0|^7.0", + "composer/composer": "^1.0.2|^2.0", + "symfony/console": "^5.4.9|^6.0.9|^7.0", + "symfony/dotenv": "^5.4|^6.0|^7.0", "symfony/http-foundation": "^5.4|^6.0|^7.0", - "symfony/ldap": "^5.4|^6.0|^7.0", - "symfony/string": "^5.4|^6.0|^7.0", - "symfony/translation": "^5.4.35|~6.3.12|^6.4.3|^7.0.3", - "symfony/validator": "^6.4|^7.0" + "symfony/http-kernel": "^5.4|^6.0|^7.0" + }, + "type": "composer-plugin", + "extra": { + "class": "Symfony\\Component\\Runtime\\Internal\\ComposerPlugin" }, - "type": "library", "autoload": { "psr-4": { - "Symfony\\Component\\Security\\Core\\": "" + "Symfony\\Component\\Runtime\\": "", + "Symfony\\Runtime\\Symfony\\Component\\": "Internal/" }, "exclude-from-classmap": [ "/Tests/" @@ -4439,18 +3914,21 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Security Component - Core Library", + "description": "Enables decoupling PHP applications from global state", "homepage": "https://symfony.com", + "keywords": [ + "runtime" + ], "support": { - "source": "https://github.com/symfony/security-core/tree/v6.4.31" + "source": "https://github.com/symfony/runtime/tree/v6.4.30" }, "funding": [ { @@ -4470,79 +3948,7 @@ "type": "tidelift" } ], - "time": "2025-12-17T22:32:13+00:00" - }, - { - "name": "symfony/security-csrf", - "version": "v6.4.31", - "source": { - "type": "git", - "url": "https://github.com/symfony/security-csrf.git", - "reference": "52f62836fcb19cd351ef3a2aa9cf61a489e8990f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/security-csrf/zipball/52f62836fcb19cd351ef3a2aa9cf61a489e8990f", - "reference": "52f62836fcb19cd351ef3a2aa9cf61a489e8990f", - "shasum": "" - }, - "require": { - "php": ">=8.1", - "symfony/security-core": "^5.4|^6.0|^7.0" - }, - "conflict": { - "symfony/http-foundation": "<5.4" - }, - "require-dev": { - "symfony/http-foundation": "^5.4|^6.0|^7.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Security\\Csrf\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony Security Component - CSRF Library", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/security-csrf/tree/v6.4.31" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://github.com/nicolas-grekas", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2025-12-17T22:32:13+00:00" + "time": "2025-12-05T10:55:13+00:00" }, { "name": "symfony/service-contracts", @@ -4633,16 +4039,16 @@ }, { "name": "symfony/string", - "version": "v6.4.34", + "version": "v6.4.30", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "2adaf4106f2ef4c67271971bde6d3fe0a6936432" + "reference": "50590a057841fa6bf69d12eceffce3465b9e32cb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/2adaf4106f2ef4c67271971bde6d3fe0a6936432", - "reference": "2adaf4106f2ef4c67271971bde6d3fe0a6936432", + "url": "https://api.github.com/repos/symfony/string/zipball/50590a057841fa6bf69d12eceffce3465b9e32cb", + "reference": "50590a057841fa6bf69d12eceffce3465b9e32cb", "shasum": "" }, "require": { @@ -4698,7 +4104,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v6.4.34" + "source": "https://github.com/symfony/string/tree/v6.4.30" }, "funding": [ { @@ -4718,7 +4124,7 @@ "type": "tidelift" } ], - "time": "2026-02-08T20:44:54+00:00" + "time": "2025-11-21T18:03:05+00:00" }, { "name": "symfony/translation-contracts", @@ -4804,16 +4210,16 @@ }, { "name": "symfony/twig-bridge", - "version": "v6.4.34", + "version": "v6.4.32", "source": { "type": "git", "url": "https://github.com/symfony/twig-bridge.git", - "reference": "5169074f4a88dfb02eeccddaba78edfdf212a9b2" + "reference": "1dcf980dd4f79885b986befdeb1c1bc0d6aedfc8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/5169074f4a88dfb02eeccddaba78edfdf212a9b2", - "reference": "5169074f4a88dfb02eeccddaba78edfdf212a9b2", + "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/1dcf980dd4f79885b986befdeb1c1bc0d6aedfc8", + "reference": "1dcf980dd4f79885b986befdeb1c1bc0d6aedfc8", "shasum": "" }, "require": { @@ -4893,7 +4299,7 @@ "description": "Provides integration for Twig with various Symfony components", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/twig-bridge/tree/v6.4.34" + "source": "https://github.com/symfony/twig-bridge/tree/v6.4.32" }, "funding": [ { @@ -4913,7 +4319,7 @@ "type": "tidelift" } ], - "time": "2026-02-23T18:17:33+00:00" + "time": "2026-01-03T23:03:08+00:00" }, { "name": "symfony/twig-bundle", @@ -5003,107 +4409,6 @@ ], "time": "2026-01-05T12:44:39+00:00" }, - { - "name": "symfony/validator", - "version": "v6.4.34", - "source": { - "type": "git", - "url": "https://github.com/symfony/validator.git", - "reference": "7c3897b7f739d4ab913481e680405ca82d08084d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/validator/zipball/7c3897b7f739d4ab913481e680405ca82d08084d", - "reference": "7c3897b7f739d4ab913481e680405ca82d08084d", - "shasum": "" - }, - "require": { - "php": ">=8.1", - "symfony/deprecation-contracts": "^2.5|^3", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php83": "^1.27", - "symfony/translation-contracts": "^2.5|^3" - }, - "conflict": { - "doctrine/annotations": "<1.13", - "doctrine/lexer": "<1.1", - "symfony/dependency-injection": "<5.4", - "symfony/expression-language": "<5.4", - "symfony/http-kernel": "<5.4", - "symfony/intl": "<5.4", - "symfony/property-info": "<5.4", - "symfony/translation": "<5.4.35|>=6.0,<6.3.12|>=6.4,<6.4.3|>=7.0,<7.0.3", - "symfony/yaml": "<5.4" - }, - "require-dev": { - "doctrine/annotations": "^1.13|^2", - "egulias/email-validator": "^2.1.10|^3|^4", - "symfony/cache": "^5.4|^6.0|^7.0", - "symfony/config": "^5.4|^6.0|^7.0", - "symfony/console": "^5.4|^6.0|^7.0", - "symfony/dependency-injection": "^5.4|^6.0|^7.0", - "symfony/expression-language": "^5.4|^6.0|^7.0", - "symfony/finder": "^5.4|^6.0|^7.0", - "symfony/http-client": "^5.4|^6.0|^7.0", - "symfony/http-foundation": "^5.4|^6.0|^7.0", - "symfony/http-kernel": "^5.4|^6.0|^7.0", - "symfony/intl": "^5.4|^6.0|^7.0", - "symfony/mime": "^5.4|^6.0|^7.0", - "symfony/property-access": "^5.4|^6.0|^7.0", - "symfony/property-info": "^5.4|^6.0|^7.0", - "symfony/translation": "^5.4.35|~6.3.12|^6.4.3|^7.0.3", - "symfony/yaml": "^5.4|^6.0|^7.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Validator\\": "" - }, - "exclude-from-classmap": [ - "/Tests/", - "/Resources/bin/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides tools to validate values", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/validator/tree/v6.4.34" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://github.com/nicolas-grekas", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2026-02-23T17:49:24+00:00" - }, { "name": "symfony/var-dumper", "version": "v6.4.32", @@ -5275,16 +4580,16 @@ }, { "name": "symfony/yaml", - "version": "v6.4.34", + "version": "v6.4.30", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "7bca30dabed7900a08c5ad4f1d6483f881a64d0f" + "reference": "8207ae83da19ee3748d6d4f567b4d9a7c656e331" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/7bca30dabed7900a08c5ad4f1d6483f881a64d0f", - "reference": "7bca30dabed7900a08c5ad4f1d6483f881a64d0f", + "url": "https://api.github.com/repos/symfony/yaml/zipball/8207ae83da19ee3748d6d4f567b4d9a7c656e331", + "reference": "8207ae83da19ee3748d6d4f567b4d9a7c656e331", "shasum": "" }, "require": { @@ -5327,7 +4632,7 @@ "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/yaml/tree/v6.4.34" + "source": "https://github.com/symfony/yaml/tree/v6.4.30" }, "funding": [ { @@ -5347,20 +4652,20 @@ "type": "tidelift" } ], - "time": "2026-02-06T18:32:11+00:00" + "time": "2025-12-02T11:50:18+00:00" }, { "name": "tecnickcom/tcpdf", - "version": "6.11.0", + "version": "6.10.1", "source": { "type": "git", "url": "https://github.com/tecnickcom/TCPDF.git", - "reference": "81172e58edb1cfae4019ef150ccbdc0e9a8c85c9" + "reference": "7a2701251e5d52fc3d508fd71704683eb54f5939" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/tecnickcom/TCPDF/zipball/81172e58edb1cfae4019ef150ccbdc0e9a8c85c9", - "reference": "81172e58edb1cfae4019ef150ccbdc0e9a8c85c9", + "url": "https://api.github.com/repos/tecnickcom/TCPDF/zipball/7a2701251e5d52fc3d508fd71704683eb54f5939", + "reference": "7a2701251e5d52fc3d508fd71704683eb54f5939", "shasum": "" }, "require": { @@ -5410,7 +4715,7 @@ ], "support": { "issues": "https://github.com/tecnickcom/TCPDF/issues", - "source": "https://github.com/tecnickcom/TCPDF/tree/6.11.0" + "source": "https://github.com/tecnickcom/TCPDF/tree/6.10.1" }, "funding": [ { @@ -5418,20 +4723,20 @@ "type": "custom" } ], - "time": "2026-03-01T09:35:25+00:00" + "time": "2025-11-21T10:58:21+00:00" }, { "name": "thenetworg/oauth2-azure", - "version": "v2.2.5", + "version": "v2.2.4", "source": { "type": "git", "url": "https://github.com/TheNetworg/oauth2-azure.git", - "reference": "06f1aa023e18cc3ea80df6410c7c2dc5502a3655" + "reference": "a897d60b6b127daa2f27b1b4e62e7af40829d02f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/TheNetworg/oauth2-azure/zipball/06f1aa023e18cc3ea80df6410c7c2dc5502a3655", - "reference": "06f1aa023e18cc3ea80df6410c7c2dc5502a3655", + "url": "https://api.github.com/repos/TheNetworg/oauth2-azure/zipball/a897d60b6b127daa2f27b1b4e62e7af40829d02f", + "reference": "a897d60b6b127daa2f27b1b4e62e7af40829d02f", "shasum": "" }, "require": { @@ -5476,9 +4781,9 @@ ], "support": { "issues": "https://github.com/TheNetworg/oauth2-azure/issues", - "source": "https://github.com/TheNetworg/oauth2-azure/tree/v2.2.5" + "source": "https://github.com/TheNetworg/oauth2-azure/tree/v2.2.4" }, - "time": "2026-02-26T08:05:57+00:00" + "time": "2026-01-29T12:43:59+00:00" }, { "name": "twig/twig", @@ -5561,6 +4866,84 @@ } ], "packages-dev": [ + { + "name": "symfony/debug-bundle", + "version": "v6.4.27", + "source": { + "type": "git", + "url": "https://github.com/symfony/debug-bundle.git", + "reference": "21a61c55192d558a6b81cdb12e8c010fc9474fe0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/debug-bundle/zipball/21a61c55192d558a6b81cdb12e8c010fc9474fe0", + "reference": "21a61c55192d558a6b81cdb12e8c010fc9474fe0", + "shasum": "" + }, + "require": { + "ext-xml": "*", + "php": ">=8.1", + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/http-kernel": "^5.4|^6.0|^7.0", + "symfony/twig-bridge": "^5.4|^6.0|^7.0", + "symfony/var-dumper": "^5.4|^6.0|^7.0" + }, + "conflict": { + "symfony/config": "<5.4", + "symfony/dependency-injection": "<5.4" + }, + "require-dev": { + "symfony/config": "^5.4|^6.0|^7.0", + "symfony/web-profiler-bundle": "^5.4|^6.0|^7.0" + }, + "type": "symfony-bundle", + "autoload": { + "psr-4": { + "Symfony\\Bundle\\DebugBundle\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides a tight integration of the Symfony VarDumper component and the ServerLogCommand from MonologBridge into the Symfony full-stack framework", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/debug-bundle/tree/v6.4.27" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-10-11T17:35:31+00:00" + }, { "name": "symfony/stopwatch", "version": "v6.4.24", @@ -5629,16 +5012,16 @@ }, { "name": "symfony/web-profiler-bundle", - "version": "v6.4.34", + "version": "v6.4.32", "source": { "type": "git", "url": "https://github.com/symfony/web-profiler-bundle.git", - "reference": "848bc5d5745500f855bb201d57ae066fd7e67448" + "reference": "011f59e3f3d20f60d11b4e78b8dc63504f56e145" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/web-profiler-bundle/zipball/848bc5d5745500f855bb201d57ae066fd7e67448", - "reference": "848bc5d5745500f855bb201d57ae066fd7e67448", + "url": "https://api.github.com/repos/symfony/web-profiler-bundle/zipball/011f59e3f3d20f60d11b4e78b8dc63504f56e145", + "reference": "011f59e3f3d20f60d11b4e78b8dc63504f56e145", "shasum": "" }, "require": { @@ -5691,7 +5074,7 @@ "dev" ], "support": { - "source": "https://github.com/symfony/web-profiler-bundle/tree/v6.4.34" + "source": "https://github.com/symfony/web-profiler-bundle/tree/v6.4.32" }, "funding": [ { @@ -5711,14 +5094,14 @@ "type": "tidelift" } ], - "time": "2026-02-05T15:19:06+00:00" + "time": "2026-01-06T09:13:42+00:00" } ], "aliases": [], "minimum-stability": "stable", "stability-flags": { "apereo/phpcas": 20, - "nikic/php-parser": 20 + "scssphp/scssphp": 20 }, "prefer-stable": false, "prefer-lowest": false, diff --git a/core/action.class.inc.php b/core/action.class.inc.php index 74820bcf9..f0c6dd92e 100644 --- a/core/action.class.inc.php +++ b/core/action.class.inc.php @@ -234,10 +234,11 @@ abstract class Action extends cmdbAbstractObject } $oActionFilter = DBObjectSearch::FromOQL($sActionQueryOql, $aActionQueryParams); + $oActionFilter->AllowAllData(); $oSet = new DBObjectSet($oActionFilter, ['date' => false]); $sPanelTitle = Dict::Format('Action:last_executions_tab_panel_title', $sActionQueryLimit); - $oExecutionsListBlock = DataTableUIBlockFactory::MakeForResult($oPage, 'action_executions_list', $oSet, ['panel_title' => $sPanelTitle]); + $oExecutionsListBlock = DataTableUIBlockFactory::MakeForResult($oPage, 'action_executions_list', $oSet, ['panel_title' => $sPanelTitle, 'display_unauthorized_objects' => true]); $oPage->AddUiBlock($oExecutionsListBlock); } diff --git a/core/config.class.inc.php b/core/config.class.inc.php index f99e19d07..fae11cc15 100644 --- a/core/config.class.inc.php +++ b/core/config.class.inc.php @@ -75,6 +75,7 @@ define('DEFAULT_EXT_AUTH_VARIABLE', '$_SERVER[\'REMOTE_USER\']'); define('DEFAULT_ENCRYPTION_KEY', '@iT0pEncr1pti0n!'); // We'll use a random generated key later (if possible) define('DEFAULT_ENCRYPTION_LIB', 'Mcrypt'); // We'll define the best encryption available later define('DEFAULT_HASH_ALGO', PASSWORD_DEFAULT); + /** * Config * configuration data (this class cannot not be localized, because it is responsible for loading the dictionaries) @@ -868,6 +869,14 @@ class Config 'source_of_value' => '', 'show_in_conf_sample' => false, ], + 'ext_auth_variable' => [ + 'type' => 'string', + 'description' => 'External authentication expression (allowed: $_SERVER[\'key\'], $_COOKIE[\'key\'], $_REQUEST[\'key\'], getallheaders()[\'Header-Name\'])', + 'default' => '$_SERVER[\'REMOTE_USER\']', + 'value' => '$_SERVER[\'REMOTE_USER\']', + 'source_of_value' => '', + 'show_in_conf_sample' => false, + ], 'login_debug' => [ 'type' => 'bool', 'description' => 'Activate the login FSM debug', @@ -1610,7 +1619,7 @@ class Config 'show_in_conf_sample' => false, ], 'search_manual_submit' => [ - 'type' => 'array', + 'type' => 'bool', 'description' => 'Force manual submit of search all requests', 'default' => false, 'value' => true, @@ -1737,6 +1746,14 @@ class Config 'source_of_value' => '', 'show_in_conf_sample' => false, ], + 'security.disable_joined_classes_filter' => [ + 'type' => 'bool', + 'description' => 'If true, scope filters aren\'t applied to joined classes or union classes not directly listed in the SELECT clause.', + 'default' => true, + 'value' => true, + 'source_of_value' => '', + 'show_in_conf_sample' => false, + ], 'security.hide_administrators' => [ 'type' => 'bool', 'description' => 'If true, non-administrator users will not be able to see the administrator accounts, the Administrator profile and the links between the administrator accounts and their profiles.', @@ -1745,11 +1762,11 @@ class Config 'source_of_value' => '', 'show_in_conf_sample' => false, ], - 'security.force_login_when_no_delegated_authentication_endpoints_list' => [ + 'security.disable_exec_forced_login_for_all_enpoints' => [ 'type' => 'bool', - 'description' => 'If true, when no execution policy is defined, the user will be forced to log in (instead of being automatically logged in with the default profile)', - 'default' => false, - 'value' => false, + 'description' => 'If true, when no delegated authentication module is defined, no login will be forced on modules exec endpoints', + 'default' => true, + 'value' => true, 'source_of_value' => '', 'show_in_conf_sample' => false, ], @@ -1959,11 +1976,6 @@ class Config */ protected $m_sDefaultLanguage; - /** - * @var string Name of the PHP variable in which external authentication information is passed by the web server - */ - protected $m_sExtAuthVariable; - /** * @var string Encryption key used for all attributes of type "encrypted string". Can be set to a random value * unless you want to import a database from another iTop instance, in which case you must use @@ -2032,7 +2044,6 @@ class Config $this->m_iFastReloadInterval = DEFAULT_FAST_RELOAD_INTERVAL; $this->m_bSecureConnectionRequired = DEFAULT_SECURE_CONNECTION_REQUIRED; $this->m_sDefaultLanguage = 'EN US'; - $this->m_sExtAuthVariable = DEFAULT_EXT_AUTH_VARIABLE; $this->m_aCharsets = []; $this->m_bQueryCacheEnabled = DEFAULT_QUERY_CACHE_ENABLED; $this->m_iPasswordHashAlgo = DEFAULT_HASH_ALGO; @@ -2178,7 +2189,6 @@ class Config $this->m_aModuleSettings = isset($MyModuleSettings) ? $MyModuleSettings : []; $this->m_sDefaultLanguage = isset($MySettings['default_language']) ? trim($MySettings['default_language']) : 'EN US'; - $this->m_sExtAuthVariable = isset($MySettings['ext_auth_variable']) ? trim($MySettings['ext_auth_variable']) : DEFAULT_EXT_AUTH_VARIABLE; $this->m_sEncryptionKey = isset($MySettings['encryption_key']) ? trim($MySettings['encryption_key']) : $this->m_sEncryptionKey; $this->m_sEncryptionLibrary = isset($MySettings['encryption_library']) ? trim($MySettings['encryption_library']) : $this->m_sEncryptionLibrary; $this->m_aCharsets = isset($MySettings['csv_import_charsets']) ? $MySettings['csv_import_charsets'] : []; @@ -2340,9 +2350,73 @@ class Config return explode('|', $this->m_aSettings['allowed_login_types']['value']); } + /** + * @return bool|mixed + * @since 3.2.3 return the parsed value instead of an unsecured variable name + */ public function GetExternalAuthenticationVariable() { - return $this->m_sExtAuthVariable; + $sExpression = $this->Get('ext_auth_variable'); + $aParsed = $this->ParseExternalAuthVariableExpression($sExpression); + if ($aParsed === null) { + return false; + } + + $sKey = $aParsed['key']; + switch ($aParsed['type']) { + case 'server': + return $_SERVER[$sKey] ?? false; + case 'cookie': + return $_COOKIE[$sKey] ?? false; + case 'request': + return $_REQUEST[$sKey] ?? false; + case 'header': + if (!function_exists('getallheaders')) { + return false; + } + $aHeaders = getallheaders(); + if (!is_array($aHeaders)) { + return false; + } + return $aHeaders[$sKey] ?? false; + } + return false; + } + + /** + * @param $sExpression + * @return array|null + */ + private function ParseExternalAuthVariableExpression($sExpression) + { + // If it's a configuration parameter it's probably already trimmed, but just in case + $sExpression = trim((string) $sExpression); + if ($sExpression === '') { + return null; + } + + // Match $_SERVER/$_COOKIE/$_REQUEST['key'] with optional whitespace and single/double quotes. + if (preg_match('/^\$_(SERVER|COOKIE|REQUEST)\s*\[\s*(["\'])\s*([^"\']+)\2\s*\]\s*$/', $sExpression, $aMatches) === 1) { + $sContext = strtoupper($aMatches[1]); + $sKey = $aMatches[3]; + return [ + 'type' => strtolower($sContext), + 'key' => $sKey, + 'normalized' => '$_'.$sContext.'[\''.$sKey.'\']', + ]; + } + + // Match getallheaders()['Header-Name'] in a case-insensitive way. + if (preg_match('/^getallheaders\(\)\s*\[\s*(["\'])\s*([^"\']+)\1\s*\]\s*$/i', $sExpression, $aMatches) === 1) { + $sKey = $aMatches[2]; + return [ + 'type' => 'header', + 'key' => $sKey, + 'normalized' => 'getallheaders()[\''.$sKey.'\']', + ]; + } + + return null; } public function GetCSVImportCharsets() @@ -2438,7 +2512,7 @@ class Config public function SetExternalAuthenticationVariable($sExtAuthVariable) { - $this->m_sExtAuthVariable = $sExtAuthVariable; + $this->Set('ext_auth_variable', $sExtAuthVariable); } public function SetEncryptionKey($sKey) @@ -2492,7 +2566,6 @@ class Config $aSettings['fast_reload_interval'] = $this->m_iFastReloadInterval; $aSettings['secure_connection_required'] = $this->m_bSecureConnectionRequired; $aSettings['default_language'] = $this->m_sDefaultLanguage; - $aSettings['ext_auth_variable'] = $this->m_sExtAuthVariable; $aSettings['encryption_key'] = $this->m_sEncryptionKey; $aSettings['encryption_library'] = $this->m_sEncryptionLibrary; $aSettings['csv_import_charsets'] = $this->m_aCharsets; @@ -2595,7 +2668,6 @@ class Config // Old fashioned remaining values $aOtherValues = [ 'default_language' => $this->m_sDefaultLanguage, - 'ext_auth_variable' => $this->m_sExtAuthVariable, 'encryption_key' => $this->m_sEncryptionKey, 'encryption_library' => $this->m_sEncryptionLibrary, 'csv_import_charsets' => $this->m_aCharsets, diff --git a/core/datamodel.core.xml b/core/datamodel.core.xml index 872b4cef8..389da6384 100644 --- a/core/datamodel.core.xml +++ b/core/datamodel.core.xml @@ -425,7 +425,7 @@ cmdbAbstractObject - core/cmdb,view_in_gui + core/cmdb,grant_by_profile,silo false autoincrement priv_event_newsroom @@ -904,7 +904,7 @@ Event - core/cmdb,view_in_gui + core/cmdb,grant_by_profile,silo diff --git a/core/dbobjectsearch.class.php b/core/dbobjectsearch.class.php index 7e1ae9d8f..ad5e0c6e5 100644 --- a/core/dbobjectsearch.class.php +++ b/core/dbobjectsearch.class.php @@ -1932,4 +1932,37 @@ class DBObjectSearch extends DBSearch { return $this->GetCriteria()->ListParameters(); } + + /** + * @inheritDoc + * @return DBObjectSearch + */ + protected function ApplyDataFilters(): DBObjectSearch + { + if ($this->IsAllDataAllowed() || $this->IsDataFiltered()) { + return $this; + } + + $oSearch = $this; + $aClassesToFilter = $this->GetSelectedClasses(); + + // Opt-in for joined classes filtering, otherwise only filter the selected class(es) + if (MetaModel::GetConfig()->Get('security.disable_joined_classes_filter') === false) { + $aClassesToFilter = $this->GetJoinedClasses(); + } + + // Apply filter (this is similar to the one in DBSearch but the factorization could make it less readable) + foreach ($aClassesToFilter as $sClassAlias => $sClass) { + $oVisibleObjects = UserRights::GetSelectFilter($sClass, $this->GetModifierProperties('UserRightsGetSelectFilter')); + if ($oVisibleObjects === false) { + $oVisibleObjects = DBObjectSearch::FromEmptySet($sClass); + } + if (is_object($oVisibleObjects)) { + $oVisibleObjects->AllowAllData(); + $oSearch = $oSearch->Filter($sClassAlias, $oVisibleObjects); + $oSearch->SetDataFiltered(); + } + } + return $oSearch; + } } diff --git a/core/dbsearch.class.php b/core/dbsearch.class.php index bcaf58236..64a755c3c 100644 --- a/core/dbsearch.class.php +++ b/core/dbsearch.class.php @@ -1048,21 +1048,7 @@ abstract class DBSearch */ protected function GetSQLQuery($aOrderBy, $aArgs, $aAttToLoad, $aExtendedDataSpec, $iLimitCount, $iLimitStart, $bGetCount, $aGroupByExpr = null, $aSelectExpr = null) { - $oSearch = $this; - if (!$this->IsAllDataAllowed() && !$this->IsDataFiltered()) { - foreach ($this->GetSelectedClasses() as $sClassAlias => $sClass) { - $oVisibleObjects = UserRights::GetSelectFilter($sClass, $this->GetModifierProperties('UserRightsGetSelectFilter')); - if ($oVisibleObjects === false) { - // Make sure this is a valid search object, saying NO for all - $oVisibleObjects = DBObjectSearch::FromEmptySet($sClass); - } - if (is_object($oVisibleObjects)) { - $oVisibleObjects->AllowAllData(); - $oSearch = $oSearch->Filter($sClassAlias, $oVisibleObjects); - $oSearch->SetDataFiltered(); - } - } - } + $oSearch = $this->ApplyDataFilters(); if (is_array($aGroupByExpr)) { foreach ($aGroupByExpr as $sAlias => $oGroupByExp) { @@ -1524,4 +1510,33 @@ abstract class DBSearch * @return array{\VariableExpression} */ abstract public function GetExpectedArguments(): array; + + /** + * Apply data filters to the search, if needed + * + * @return DBSearch + * @throws CoreException + */ + protected function ApplyDataFilters(): DBSearch + { + if ($this->IsAllDataAllowed() || $this->IsDataFiltered()) { + return $this; + } + + $oSearch = $this; + $aClassesToFilter = $this->GetSelectedClasses(); + + foreach ($aClassesToFilter as $sClassAlias => $sClass) { + $oVisibleObjects = UserRights::GetSelectFilter($sClass, $this->GetModifierProperties('UserRightsGetSelectFilter')); + if ($oVisibleObjects === false) { + $oVisibleObjects = DBObjectSearch::FromEmptySet($sClass); + } + if (is_object($oVisibleObjects)) { + $oVisibleObjects->AllowAllData(); + $oSearch = $oSearch->Filter($sClassAlias, $oVisibleObjects); + $oSearch->SetDataFiltered(); + } + } + return $oSearch; + } } diff --git a/core/dbunionsearch.class.php b/core/dbunionsearch.class.php index 0d300674b..5be4a4d7e 100644 --- a/core/dbunionsearch.class.php +++ b/core/dbunionsearch.class.php @@ -673,4 +673,30 @@ class DBUnionSearch extends DBSearch return $aVariableCriteria; } + + /** + * @inheritDoc + * @return DBUnionSearch + */ + protected function ApplyDataFilters(): DBUnionSearch + { + if ($this->IsAllDataAllowed() || $this->IsDataFiltered()) { + return $this; + } + + // Opt-in for joined classes filtering, otherwise fallback on DBSearch filtering + if (MetaModel::GetConfig()->Get('security.disable_joined_classes_filter') === true) { + return parent::ApplyDataFilters(); + } + + // Apply filters per sub-search + $aFilteredSearches = []; + foreach ($this->GetSearches() as $oSubSearch) { + // Recursively call ApplyDataFilters on sub-searches + $aFilteredSearches[] = $oSubSearch->ApplyDataFilters(); + } + + $oSearch = new DBUnionSearch($aFilteredSearches); + return $oSearch; + } } diff --git a/core/event.class.inc.php b/core/event.class.inc.php index d87a40e91..0e45ffffe 100644 --- a/core/event.class.inc.php +++ b/core/event.class.inc.php @@ -26,7 +26,7 @@ class Event extends DBObject implements iDisplay { $aParams = [ - "category" => "core/cmdb,view_in_gui", + "category" => "core/cmdb,grant_by_profile,silo", "key_type" => "autoincrement", "name_attcode" => "", "state_attcode" => "", @@ -120,7 +120,7 @@ class EventNotification extends Event { $aParams = [ - "category" => "core/cmdb,view_in_gui", + "category" => "core/cmdb,grant_by_profile,silo", "key_type" => "autoincrement", "name_attcode" => "", "state_attcode" => "", @@ -156,7 +156,7 @@ class EventNotificationEmail extends EventNotification { $aParams = [ - "category" => "core/cmdb,view_in_gui", + "category" => "core/cmdb,grant_by_profile,silo", "key_type" => "autoincrement", "name_attcode" => "", "state_attcode" => "", @@ -192,7 +192,7 @@ class EventIssue extends Event { $aParams = [ - "category" => "core/cmdb,view_in_gui", + "category" => "core/cmdb,grant_by_profile,silo", "key_type" => "autoincrement", "name_attcode" => "", "state_attcode" => "", @@ -286,7 +286,7 @@ class EventWebService extends Event { $aParams = [ - "category" => "core/cmdb,view_in_gui", + "category" => "core/cmdb,grant_by_profile,silo", "key_type" => "autoincrement", "name_attcode" => "", "state_attcode" => "", @@ -321,7 +321,7 @@ class EventRestService extends Event { $aParams = [ - "category" => "core/cmdb,view_in_gui", + "category" => "core/cmdb,grant_by_profile,silo", "key_type" => "autoincrement", "name_attcode" => "", "state_attcode" => "", @@ -356,7 +356,7 @@ class EventLoginUsage extends Event { $aParams = [ - "category" => "core/cmdb,view_in_gui", + "category" => "core/cmdb,grant_by_profile,silo", "key_type" => "autoincrement", "name_attcode" => "", "state_attcode" => "", @@ -394,7 +394,7 @@ class EventOnObject extends Event { $aParams = [ - "category" => "core/cmdb,view_in_gui", + "category" => "core/cmdb,grant_by_profile,silo", "key_type" => "autoincrement", "name_attcode" => "", "state_attcode" => "", diff --git a/core/log.class.inc.php b/core/log.class.inc.php index 0e4962c43..deb434975 100644 --- a/core/log.class.inc.php +++ b/core/log.class.inc.php @@ -691,7 +691,7 @@ abstract class LogAPI static::$m_oMockMetaModelConfig = $oMetaModelConfig; } - public static function Exception(string $sMessage, throwable $oException, string $sChannel = null, array $aContext = []): void + public static function Exception(string $sMessage, throwable $oException, ?string $sChannel = null, array $aContext = []): void { $aErrorLogs = []; $aErrorLogs[] = static::PrepareErrorLog($sMessage, $oException, $aContext); diff --git a/core/ormdocument.class.inc.php b/core/ormdocument.class.inc.php index 3efe00dbd..645cdb402 100644 --- a/core/ormdocument.class.inc.php +++ b/core/ormdocument.class.inc.php @@ -350,15 +350,18 @@ class ormDocument if (!is_object($oObj)) { // If access to the document is not granted, check if the access to the host object is allowed $oObj = MetaModel::GetObject($sClass, $id, false, true); + $bHasHostRights = false; if ($oObj instanceof Attachment) { $sItemClass = $oObj->Get('item_class'); $sItemId = $oObj->Get('item_id'); $oHost = MetaModel::GetObject($sItemClass, $sItemId, false, false); - if (!is_object($oHost)) { - $oObj = null; + if (is_object($oHost)) { + $bHasHostRights = true; } } - if (!is_object($oObj)) { + + // We could neither read the object nor get a host object matching our rights + if ($bHasHostRights !== true) { throw new Exception("Invalid id ($id) for class '$sClass' - the object does not exist or you are not allowed to view it"); } } diff --git a/core/ormlinkset.class.inc.php b/core/ormlinkset.class.inc.php index 3e7f80771..7a90a0c00 100644 --- a/core/ormlinkset.class.inc.php +++ b/core/ormlinkset.class.inc.php @@ -470,17 +470,6 @@ class ormLinkSet implements iDBObjectSetIterator, Iterator, SeekableIterator || ($this->oOriginalSet->GetFilter()->ToOQL() == $oFellow->oOriginalSet->GetFilter()->ToOQL())) { $bUpdateFromDelta = true; } - } else { - //@since 3.2.2 N°2364 - API : remove old linkedset persistance - /* Goo pattern to use: - * $oCISet = $oTicket->Get(‘functioncis_list’); - * $oCISet->AddItem(MetaModel::NewObject(‘lnkFunctionCIToTicket’, array(‘ci_id’=> 12345)); - * $oCISet->RemoveItem(123456); - * $oTicket->Set(‘functionalcis_list’, $oCISet); - */ - if (!ContextTag::Check(ContextTag::TAG_SETUP)) { - DeprecatedCallsLog::NotifyDeprecatedPhpMethod('old pattern - please get previous value of the linked set, modify it and set it back to the host object'); - } } if ($bUpdateFromDelta) { diff --git a/css/backoffice/components/_search-form.scss b/css/backoffice/components/_search-form.scss index 55af12889..9bbf52397 100644 --- a/css/backoffice/components/_search-form.scss +++ b/css/backoffice/components/_search-form.scss @@ -21,6 +21,8 @@ $ibo-search-form-panel--more-criteria--color: $ibo-color-blue-grey-800 !default; $ibo-search-form-panel--more-criteria--background-color: $ibo-color-white-100 !default; $ibo-search-form-panel--more-criteria--icon--color: $ibo-color-primary-600 !default; $ibo-search-form-panel--more-criteria--border-color: $ibo-search-form-panel--criteria--border-color !default; +// calc is redundant but avoid SCSS min() from being used instead of CSS min() +$ibo-search-form-panel--criteria--max-height: calc(min(#{$ibo-size-750}, 50vh)) !default; $ibo-search-form-panel--items--hover--color: $ibo-color-grey-200 !default; @@ -278,9 +280,10 @@ $ibo-search-results-area--datatable-scrollhead--border--is-sticking: $ibo-search } .sfc_form_group { - display: block; - margin-top: -1px; - z-index: -1; + display: flex; + flex-direction: column; + margin-top: -1px; + z-index: -1; } } @@ -346,11 +349,15 @@ $ibo-search-results-area--datatable-scrollhead--border--is-sticking: $ibo-search display: none; max-width: 450px; width: max-content; - max-height: 520px; + max-height: $ibo-search-form-panel--criteria--max-height; overflow-x: auto; overflow-y: hidden; .sfc_fg_operators { + display: flex; + flex-direction: column; + overflow: auto; + min-height: 0; font-size: 12px; .sfc_fg_operator { @@ -387,6 +394,9 @@ $ibo-search-results-area--datatable-scrollhead--border--is-sticking: $ibo-search } .sfc_opc_multichoices { + display: flex; + flex-direction: column; + height: 100%; label > input { vertical-align: text-top; margin-left: $ibo-spacing-0; @@ -398,7 +408,6 @@ $ibo-search-results-area--datatable-scrollhead--border--is-sticking: $ibo-search } .sfc_opc_mc_items_wrapper { - max-height: 415px; /* Must be less than .sfc_form_group:max-height - .sfc_opc_mc_toggler:height - .sfc_opc_mc_filter:height */ overflow-y: auto; margin: $ibo-spacing-0 -8px; /* Compensate .sfc_opc_multichoices side padding so the hover style can take the full with */ @@ -560,8 +569,14 @@ $ibo-search-results-area--datatable-scrollhead--border--is-sticking: $ibo-search &.search_form_criteria_enum { .sfc_form_group { .sfc_fg_operator_in { + display: flex; + flex-direction: column; + height: 100%; + min-height: 0; > label { - display: inline-block; + display: flex; + height: 100%; + min-height: 0; width: 100%; line-height: initial; white-space: nowrap; diff --git a/datamodels/2.x/combodo-backoffice-darkmoon-theme/scss/scss-variables.scss b/datamodels/2.x/combodo-backoffice-darkmoon-theme/scss/scss-variables.scss index a4379d5ff..02967672f 100644 --- a/datamodels/2.x/combodo-backoffice-darkmoon-theme/scss/scss-variables.scss +++ b/datamodels/2.x/combodo-backoffice-darkmoon-theme/scss/scss-variables.scss @@ -69,250 +69,249 @@ $ibo-color-secondary-850: $ibo-color-grey-850 !default; $ibo-color-secondary-900: $ibo-color-grey-900 !default; $ibo-color-secondary-950: $ibo-color-grey-950 !default; -$text : $ibo-color-grey-100; -$text-invert: $ibo-color-grey-800; -$text-light : $ibo-color-grey-200; -$text-strong: inherit; -$code: $ibo-color-primary-400; -$code-background: $ibo-color-grey-700; -$pre-background: $ibo-color-grey-600; +$text : $ibo-color-grey-100 !default; +$text-invert: $ibo-color-grey-800 !default; +$text-light : $ibo-color-grey-200 !default; +$text-strong: inherit !default; +$code: $ibo-color-primary-400 !default; +$code-background: $ibo-color-grey-700 !default; +$pre-background: $ibo-color-grey-600 !default; -$ibo-scrollbar--scrollbar-track-background-color: $ibo-color-grey-700; -$ibo-scrollbar--scrollbar-thumb-background-color: $ibo-color-grey-900; +$ibo-scrollbar--scrollbar-track-background-color: $ibo-color-grey-700 !default; +$ibo-scrollbar--scrollbar-thumb-background-color: $ibo-color-grey-900 !default; -$ibo-navigation-menu--body--background-color: $ibo-color-grey-900; -$ibo-navigation-menu--bottom-part--background-color: $ibo-color-grey-850; +$ibo-navigation-menu--body--background-color: $ibo-color-grey-900 !default; +$ibo-navigation-menu--bottom-part--background-color: $ibo-color-grey-850 !default; -$ibo-top-bar--background-color: $ibo-color-grey-700; +$ibo-top-bar--background-color: $ibo-color-grey-700 !default; -$ibo-content-block--background-color: $ibo-color-grey-800; -$ibo-content-block--border: 1px solid $ibo-color-grey-900; +$ibo-content-block--background-color: $ibo-color-grey-800 !default; +$ibo-content-block--border: 1px solid $ibo-color-grey-900 !default; -$ibo-body-text-color: $text; -$ibo-body-background-color: $ibo-color-grey-800; +$ibo-body-text-color: $text !default; +$ibo-body-background-color: $ibo-color-grey-800 !default; -$ibo-dashlet-badge--background-color: $ibo-color-grey-700; -$ibo-dashlet-badge--border: 1px solid $ibo-color-grey-850; -$ibo-dashlet-header-static--body--text-color: $ibo-color-grey-200; +$ibo-dashlet-badge--background-color: $ibo-color-grey-700 !default; +$ibo-dashlet-badge--border: 1px solid $ibo-color-grey-850 !default; +$ibo-dashlet-header-static--body--text-color: $ibo-color-grey-200 !default; -$ibo-input--color: $ibo-color-grey-200; -$ibo-input--background-color: $ibo-color-grey-600; -$ibo-input--border-color: $ibo-color-grey-900; -$ibo-input--focus--border-color: $ibo-color-primary-300; -$ibo-input--placeholder--color: $ibo-color-grey-400; -$ibo-input--disabled--background-color: $ibo-color-grey-500; -$ibo-input--placeholder--color: $ibo-color-grey-200; +$ibo-input--color: $ibo-color-grey-200 !default; +$ibo-input--background-color: $ibo-color-grey-600 !default; +$ibo-input--border-color: $ibo-color-grey-900 !default; +$ibo-input--focus--border-color: $ibo-color-primary-300 !default; +$ibo-input--disabled--background-color: $ibo-color-grey-500 !default; +$ibo-input--placeholder--color: $ibo-color-grey-200 !default; -$ibo-is-code--background-color: $ibo-color-grey-800; +$ibo-is-code--background-color: $ibo-color-grey-800 !default; -$ibo-field--label--description--color: $ibo-color-grey-300; +$ibo-field--label--description--color: $ibo-color-grey-300 !default; -$ibo-field--fullscreen-toggler--background-color--on-hover: $ibo-color-grey-500; +$ibo-field--fullscreen-toggler--background-color--on-hover: $ibo-color-grey-500 !default; -$ibo-input-wrapper--is-error--background-color: $ibo-color-red-800; -$ibo-input-wrapper--is-error--border-color: $ibo-color-red-700; -$ibo-field-validation: $ibo-color-red-300; -$ibo-field--background-color--is-fullscreen: $ibo-color-grey-700; -$ibo-field--label--background-color--is-fullscreen: $ibo-color-grey-800; +$ibo-input-wrapper--is-error--background-color: $ibo-color-red-800 !default; +$ibo-input-wrapper--is-error--border-color: $ibo-color-red-700 !default; +$ibo-field-validation: $ibo-color-red-300 !default; +$ibo-field--background-color--is-fullscreen: $ibo-color-grey-700 !default; +$ibo-field--label--background-color--is-fullscreen: $ibo-color-grey-800 !default; -$ibo-navigation-menu--menu-filter-input--placeholder-color: $ibo-input--placeholder--color; -$ibo-navigation-menu--menu-filter-input--text-color: $ibo-input--color; -$ibo-navigation-menu--menu-filter-input--background-color: $ibo-input--background-color; -$ibo-navigation-menu--menu-filter-input--border: 1px solid $ibo-input--focus--border-color; -$ibo-navigation-menu--menu-filter-hotkey--border: 1px solid $ibo-color-grey-300; +$ibo-navigation-menu--menu-filter-input--placeholder-color: $ibo-input--placeholder--color !default; +$ibo-navigation-menu--menu-filter-input--text-color: $ibo-input--color !default; +$ibo-navigation-menu--menu-filter-input--background-color: $ibo-input--background-color !default; +$ibo-navigation-menu--menu-filter-input--border: 1px solid $ibo-input--focus--border-color !default; +$ibo-navigation-menu--menu-filter-hotkey--border: 1px solid $ibo-color-grey-300 !default; -$ibo-panel--icon--background-color--as-medallion: $ibo-color-grey-600; -$ibo-panel--icon--border--as-medallion: 2px solid $ibo-color-grey-700; -$ibo-panel--title--color: $ibo-color-grey-200; -$ibo-panel--subtitle--color: $ibo-color-grey-250; -$ibo-panel--body--background-color: $ibo-color-grey-700; -$ibo-panel--body--border-color: $ibo-color-grey-900; -$ibo-panel--collapsible-toggler--color: $ibo-color-grey-400; +$ibo-panel--icon--background-color--as-medallion: $ibo-color-grey-600 !default; +$ibo-panel--icon--border--as-medallion: 2px solid $ibo-color-grey-700 !default; +$ibo-panel--title--color: $ibo-color-grey-200 !default; +$ibo-panel--subtitle--color: $ibo-color-grey-250 !default; +$ibo-panel--body--background-color: $ibo-color-grey-700 !default; +$ibo-panel--body--border-color: $ibo-color-grey-900 !default; +$ibo-panel--collapsible-toggler--color: $ibo-color-grey-400 !default; -$ibo-global-search--head--background-color: $ibo-top-bar--background-color; -$ibo-global-search--drawer--background-color: $ibo-global-search--head--background-color; -$ibo-global-search--compartment-title--text-color: $ibo-color-grey-300; -$ibo-global-search--compartment-content--text-color: $ibo-color-grey-200; -$ibo-global-search--compartment--placeholder-hint--text-color: $ibo-color-grey-100; -$ibo-global-search--input--placeholder-color: $ibo-color-grey-200; -$ibo-global-search--input--text-color: $ibo-color-grey-100; +$ibo-global-search--head--background-color: $ibo-top-bar--background-color !default; +$ibo-global-search--drawer--background-color: $ibo-global-search--head--background-color !default; +$ibo-global-search--compartment-title--text-color: $ibo-color-grey-300 !default; +$ibo-global-search--compartment-content--text-color: $ibo-color-grey-200 !default; +$ibo-global-search--compartment--placeholder-hint--text-color: $ibo-color-grey-100 !default; +$ibo-global-search--input--placeholder-color: $ibo-color-grey-200 !default; +$ibo-global-search--input--text-color: $ibo-color-grey-100 !default; -$ibo-quick-create--head--background-color: $ibo-top-bar--background-color; -$ibo-quick-create--drawer--background-color: $ibo-quick-create--head--background-color; -$ibo-quick-create--compartment-title--text-color: $ibo-color-grey-300; -$ibo-quick-create--compartment-content--text-color: $ibo-color-grey-200; -$ibo-quick-create--compartment--placeholder-hint--text-color: $ibo-color-grey-200; -$ibo-quick-create--input--text-color: $ibo-color-grey-100; -$ibo-quick-create--input--placeholder-color: $ibo-color-grey-200; -$ibo-quick-create--compartment-element--background-color--is-active: $ibo-color-grey-500; +$ibo-quick-create--head--background-color: $ibo-top-bar--background-color !default; +$ibo-quick-create--drawer--background-color: $ibo-quick-create--head--background-color !default; +$ibo-quick-create--compartment-title--text-color: $ibo-color-grey-300 !default; +$ibo-quick-create--compartment-content--text-color: $ibo-color-grey-200 !default; +$ibo-quick-create--compartment--placeholder-hint--text-color: $ibo-color-grey-200 !default; +$ibo-quick-create--input--text-color: $ibo-color-grey-100 !default; +$ibo-quick-create--input--placeholder-color: $ibo-color-grey-200 !default; +$ibo-quick-create--compartment-element--background-color--is-active: $ibo-color-grey-500 !default; -$ibo-datatable--toolbar--text-color: $ibo-color-grey-300; -$ibo-vendors-datatables--pagination-button--background-color--on-hover: $ibo-color-grey-700; -$ibo-vendors-datatables--pagination-button--text-color--is-active: $ibo-color-grey-200; -$ibo-vendors-datatables--pagination-button--background-color--is-active: $ibo-color-grey-900; -$ibo-vendors-datatables--pagination-button--box-shadow--is-active: inset 0px 1px 0px rgba(0, 0, 0, 0.15); -$ibo-vendors-datatables--pagination-button--text-color--is-disabled: $ibo-color-grey-600; +$ibo-datatable--toolbar--text-color: $ibo-color-grey-300 !default; +$ibo-vendors-datatables--pagination-button--background-color--on-hover: $ibo-color-grey-700 !default; +$ibo-vendors-datatables--pagination-button--text-color--is-active: $ibo-color-grey-200 !default; +$ibo-vendors-datatables--pagination-button--background-color--is-active: $ibo-color-grey-900 !default; +$ibo-vendors-datatables--pagination-button--box-shadow--is-active: inset 0px 1px 0px rgba(0, 0, 0, 0.15) !default; +$ibo-vendors-datatables--pagination-button--text-color--is-disabled: $ibo-color-grey-600 !default; -$ibo-vendors-datatables--page-length-selector--text-color: $ibo-color-grey-100; -$ibo-vendors-datatables--page-length-selector--background-color: $ibo-color-grey-600; -$ibo-vendors-datatables--page-length-selector--border-color: $ibo-color-grey-800; -$ibo-vendors-datatables--page-length-selector--border-color--on-focus: $ibo-color-primary-300; +$ibo-vendors-datatables--page-length-selector--text-color: $ibo-color-grey-100 !default; +$ibo-vendors-datatables--page-length-selector--background-color: $ibo-color-grey-600 !default; +$ibo-vendors-datatables--page-length-selector--border-color: $ibo-color-grey-800 !default; +$ibo-vendors-datatables--page-length-selector--border-color--on-focus: $ibo-color-primary-300 !default; -$ibo-vendors-datatables--columns-header--border-bottom: 1px solid $ibo-color-grey-400; -$ibo-vendors-datatables--row--background-color--is-odd: $ibo-color-grey-700; -$ibo-vendors-datatables--row--background-color--is-even: $ibo-color-grey-800; +$ibo-vendors-datatables--columns-header--border-bottom: 1px solid $ibo-color-grey-400 !default; +$ibo-vendors-datatables--row--background-color--is-odd: $ibo-color-grey-700 !default; +$ibo-vendors-datatables--row--background-color--is-even: $ibo-color-grey-800 !default; -$ibo-datatable--row--background-color--is-hover: $ibo-color-blue-900; -$ibo-datatable--row--background-color--is-selected: $ibo-color-blue-700; +$ibo-datatable--row--background-color--is-hover: $ibo-color-blue-900 !default; +$ibo-datatable--row--background-color--is-selected: $ibo-color-blue-700 !default; -$ibo-fieldsorter--selected--background-color: $ibo-color-blue-800; +$ibo-fieldsorter--selected--background-color: $ibo-color-blue-800 !default; -$ibo-table-preview--header-cell--background-color: $ibo-color-grey-500; +$ibo-table-preview--header-cell--background-color: $ibo-color-grey-500 !default; -$ibo-field--value--color: $ibo-body-text-color; -$ibo-title--text-color: $ibo-body-text-color; +$ibo-field--value--color: $ibo-body-text-color !default; +$ibo-title--text-color: $ibo-body-text-color !default; -$ibo-hyperlink-color: $ibo-color-primary-200; -$ibo-hyperlink-color--on-hover: $ibo-color-primary-400; -$ibo-hyperlink-color--on-active: $ibo-color-primary-500; +$ibo-hyperlink-color: $ibo-color-primary-200 !default; +$ibo-hyperlink-color--on-hover: $ibo-color-primary-400 !default; +$ibo-hyperlink-color--on-active: $ibo-color-primary-500 !default; -$ibo-breadcrumbs--item--text-color: $ibo-color-primary-200; -$ibo-breadcrumbs--item-icon--text-color: $ibo-color-primary-400; +$ibo-breadcrumbs--item--text-color: $ibo-color-primary-200 !default; +$ibo-breadcrumbs--item-icon--text-color: $ibo-color-primary-400 !default; -$ibo-navigation-menu--menu-group--background-color--is-active: $ibo-color-primary-950; -$ibo-navigation-menu--menu-node--text-color: $ibo-body-text-color; -$ibo-navigation-menu--menu-filter-hint--text-color: $ibo-color-grey-100; -$ibo-navigation-menu--body--text-color: $ibo-color-grey-200; -$ibo-navigation-menu--menu-group-title--text-color--is-active: $ibo-color-primary-200; +$ibo-navigation-menu--menu-group--background-color--is-active: $ibo-color-primary-950 !default; +$ibo-navigation-menu--menu-node--text-color: $ibo-body-text-color !default; +$ibo-navigation-menu--menu-filter-hint--text-color: $ibo-color-grey-100 !default; +$ibo-navigation-menu--body--text-color: $ibo-color-grey-200 !default; +$ibo-navigation-menu--menu-group-title--text-color--is-active: $ibo-color-primary-200 !default; -$ibo-navigation-menu--menu-node--background-color: $ibo-color-primary-600; -$ibo-navigation-menu--menu-node-counter--background-color: $ibo-color-primary-600; +$ibo-navigation-menu--menu-node--background-color: $ibo-color-primary-600 !default; +$ibo-navigation-menu--menu-node-counter--background-color: $ibo-color-primary-600 !default; -$ibo-datatable-header--text-color: $ibo-color-secondary-200; -$ibo-vendors-datatables--pagination--color: $ibo-color-secondary-200; +$ibo-datatable-header--text-color: $ibo-color-secondary-200 !default; +$ibo-vendors-datatables--pagination--color: $ibo-color-secondary-200 !default; -$ibo-input-select-wrapper--after--color: $ibo-color-secondary-300; -$ibo-input-select--action-button--color: $ibo-input-select-wrapper--after--color; -$ibo-input-select-selectize--item--active--text-color: $ibo-color-grey-100; -$ibo-input-select-selectize--item--active--background-color: $ibo-color-grey-500; -$ibo-input-select--autocomplete-item-image--background-color: $ibo-color-grey-800; -$ibo-vendors-selectize-input--color: $ibo-body-text-color; -$ibo-vendors-selectize-input--background-color: $ibo-input--background-color; -$ibo-vendors-selectize--input--border-color: $ibo-input--border-color; -$ibo-vendors-selectize--element--active--background: $ibo-color-grey-400; -$ibo-vendors-selectize--element--active--color: $ibo-body-text-color; -$ibo-vendors-selectize-control--plugin-add-button--add-option--color: $ibo-input-select--action-button--color; +$ibo-input-select-wrapper--after--color: $ibo-color-secondary-300 !default; +$ibo-input-select--action-button--color: $ibo-input-select-wrapper--after--color !default; +$ibo-input-select-selectize--item--active--text-color: $ibo-color-grey-100 !default; +$ibo-input-select-selectize--item--active--background-color: $ibo-color-grey-500 !default; +$ibo-input-select--autocomplete-item-image--background-color: $ibo-color-grey-800 !default; +$ibo-vendors-selectize-input--color: $ibo-body-text-color !default; +$ibo-vendors-selectize-input--background-color: $ibo-input--background-color !default; +$ibo-vendors-selectize--input--border-color: $ibo-input--border-color !default; +$ibo-vendors-selectize--element--active--background: $ibo-color-grey-400 !default; +$ibo-vendors-selectize--element--active--color: $ibo-body-text-color !default; +$ibo-vendors-selectize-control--plugin-add-button--add-option--color: $ibo-input-select--action-button--color !default; -$ibo-popover-menu--item-separator--background-color: $ibo-color-grey-500; -$ibo-popover-menu--item--text-color: $ibo-color-grey-200; -$ibo-popover-menu--item--icon--color: $ibo-color-grey-300; -$ibo-popover-menu--background-color: $ibo-color-grey-700; -$ibo-popover-menu--item--hover-background-color: $ibo-color-grey-500; +$ibo-popover-menu--item-separator--background-color: $ibo-color-grey-500 !default; +$ibo-popover-menu--item--text-color: $ibo-color-grey-200 !default; +$ibo-popover-menu--item--icon--color: $ibo-color-grey-300 !default; +$ibo-popover-menu--background-color: $ibo-color-grey-700 !default; +$ibo-popover-menu--item--hover-background-color: $ibo-color-grey-500 !default; -$ibo-tab-container--tab-container--label--text-color: $ibo-color-grey-200; -$ibo-tab-container--tabs-list--background-color: $ibo-color-grey-500; -$ibo-tab-container--tab-header--text-color--is-active: $ibo-color-blue-300; -$ibo-tab-container--tab-header--text-color--on-hover: $ibo-color-blue-200; -$ibo-tab-container--tab-header--background-color--on-hover: $ibo-color-grey-400; +$ibo-tab-container--tab-container--label--text-color: $ibo-color-grey-200 !default; +$ibo-tab-container--tabs-list--background-color: $ibo-color-grey-500 !default; +$ibo-tab-container--tab-header--text-color--is-active: $ibo-color-blue-300 !default; +$ibo-tab-container--tab-header--text-color--on-hover: $ibo-color-blue-200 !default; +$ibo-tab-container--tab-header--background-color--on-hover: $ibo-color-grey-400 !default; $ibo-tab-container--extra-tab-toggler--text-color: $ibo-color-blue-100 !default; $ibo-tab-container--extra-tab-toggler--text-color--on-hover: $ibo-color-blue-200 !default; $ibo-tab-container--extra-tab-toggler--background-color--on-hover: $ibo-color-grey-500 !default; -$ibo-activity-panel--header--background-color: $ibo-color-grey-400; -$ibo-activity-panel--tab-toggler--is-active--background-color: $ibo-color-grey-200; -$ibo-activity-panel--tab-toolbar--background-color: $ibo-activity-panel--tab-toggler--is-active--background-color; -$ibo-activity-panel--load-entries-button--background-color: $ibo-color-grey-500; -$ibo-caselog-entry-form--background-color: $ibo-activity-panel--tab-toolbar--background-color; -$ibo-object-details--tag--separator--background-color: $ibo-color-grey-300; +$ibo-activity-panel--header--background-color: $ibo-color-grey-400 !default; +$ibo-activity-panel--tab-toggler--is-active--background-color: $ibo-color-grey-200 !default; +$ibo-activity-panel--tab-toolbar--background-color: $ibo-activity-panel--tab-toggler--is-active--background-color !default; +$ibo-activity-panel--load-entries-button--background-color: $ibo-color-grey-500 !default; +$ibo-caselog-entry-form--background-color: $ibo-activity-panel--tab-toolbar--background-color !default; +$ibo-object-details--tag--separator--background-color: $ibo-color-grey-300 !default; -$ibo-skeleton-start-color: $ibo-color-grey-500; -$ibo-skeleton-stop-color: $ibo-color-grey-400; +$ibo-skeleton-start-color: $ibo-color-grey-500 !default; +$ibo-skeleton-stop-color: $ibo-color-grey-400 !default; -$ibo-tab--temporary-remote-content--button--color: $ibo-color-grey-200; -$ibo-tab--temporary-remote-content--button--hover--color: $ibo-color-grey-200; -$ibo-tab--temporary-remote-content--button--hover--background-color: $ibo-color-grey-800; +$ibo-tab--temporary-remote-content--button--color: $ibo-color-grey-200 !default; +$ibo-tab--temporary-remote-content--button--hover--color: $ibo-color-grey-200 !default; +$ibo-tab--temporary-remote-content--button--hover--background-color: $ibo-color-grey-800 !default; -$ibo-activity-panel--tab-toolbar--text-color: $ibo-color-grey-800; -$ibo-activity-panel--tab-toolbar-action--color: $ibo-color-grey-800; +$ibo-activity-panel--tab-toolbar--text-color: $ibo-color-grey-800 !default; +$ibo-activity-panel--tab-toolbar-action--color: $ibo-color-grey-800 !default; -$ibo-panel--body--border: 1px solid $ibo-color-grey-850; -$ibo-panel--header--background-color--is-sticking: $ibo-color-grey-700; +$ibo-panel--body--border: 1px solid $ibo-color-grey-850 !default; +$ibo-panel--header--background-color--is-sticking: $ibo-color-grey-700 !default; -$ibo-tab-container--tab-header--text-color: $ibo-color-grey-50; +$ibo-tab-container--tab-header--text-color: $ibo-color-grey-50 !default; -$ibo-vendors-datatables--row-highlight--colors:('red': ($ibo-color-red-700),'danger': ($ibo-color-red-700),'alert': ($ibo-color-red-700),'orange': ($ibo-color-orange-700),'warning': (#d08770),'blue': (#5e81ac),'info': (#5e81ac),); +$ibo-vendors-datatables--row-highlight--colors:('red': ($ibo-color-red-700),'danger': ($ibo-color-red-700),'alert': ($ibo-color-red-700),'orange': ($ibo-color-orange-700),'warning': (#d08770),'blue': (#5e81ac),'info': (#5e81ac),) !default; -$ibo-vendors-jqueryui--ui-dialog--background-color: $ibo-color-grey-800; -$ibo-vendors-jqueryui--ui-dialog-titlebar--border-bottom: solid 1px $ibo-color-grey-500; +$ibo-vendors-jqueryui--ui-dialog--background-color: $ibo-color-grey-800 !default; +$ibo-vendors-jqueryui--ui-dialog-titlebar--border-bottom: solid 1px $ibo-color-grey-500 !default; -$ibo-vendors-blockui--blockoverlay--background-color: $ibo-color-grey-800; -$ibo-vendors-blockui--blockoverlay--within--datatable--background-color: $ibo-vendors-blockui--blockoverlay--background-color; -$ibo-vendors-blockui--blockmsg--color: $ibo-color-grey-200; +$ibo-vendors-blockui--blockoverlay--background-color: $ibo-color-grey-800 !default; +$ibo-vendors-blockui--blockoverlay--within--datatable--background-color: $ibo-vendors-blockui--blockoverlay--background-color !default; +$ibo-vendors-blockui--blockmsg--color: $ibo-color-grey-200 !default; -$ibo-search-form-panel--criteria--background-color: $ibo-color-grey-800; -$ibo-search-form-panel--criteria--color: $ibo-color-grey-100; -$ibo-search-form-panel--more-criteria--background-color: $ibo-color-grey-800; -$ibo-search-form-panel--more-criteria--color: $ibo-color-grey-100; -$ibo-search-form-panel--more-criteria--icon--color: $ibo-color-primary-500; -$ibo-search-form-panel--criteria--border-color: $ibo-color-grey-900; -$ibo-search-form-panel--multiple-choice--hover--color: $ibo-color-grey-500; -$ibo-search-form-panel--items--hover--color: $ibo-search-form-panel--multiple-choice--hover--color; +$ibo-search-form-panel--criteria--background-color: $ibo-color-grey-800 !default; +$ibo-search-form-panel--criteria--color: $ibo-color-grey-100 !default; +$ibo-search-form-panel--more-criteria--background-color: $ibo-color-grey-800 !default; +$ibo-search-form-panel--more-criteria--color: $ibo-color-grey-100 !default; +$ibo-search-form-panel--more-criteria--icon--color: $ibo-color-primary-500 !default; +$ibo-search-form-panel--criteria--border-color: $ibo-color-grey-900 !default; +$ibo-search-form-panel--multiple-choice--hover--color: $ibo-color-grey-500 !default; +$ibo-search-form-panel--items--hover--color: $ibo-search-form-panel--multiple-choice--hover--color !default; -$ibo-activity-entry--main-information--background-color: $ibo-color-grey-200; -$ibo-activity-entry--main-information--is-current-user--background-color: $ibo-color-primary-200; -$ibo-activity-entry--sub-information--text-color: $ibo-color-grey-200; -$ibo-activity-panel--body--placeholder-hint--color: $ibo-color-grey-200; +$ibo-activity-entry--main-information--background-color: $ibo-color-grey-200 !default; +$ibo-activity-entry--main-information--is-current-user--background-color: $ibo-color-primary-200 !default; +$ibo-activity-entry--sub-information--text-color: $ibo-color-grey-200 !default; +$ibo-activity-panel--body--placeholder-hint--color: $ibo-color-grey-200 !default; -$ibo-wizard-container--background-color: $ibo-color-blue-900; +$ibo-wizard-container--background-color: $ibo-color-blue-900 !default; -$ibo-keyboard-shortcut--input--background-color: $ibo-input--background-color; -$ibo-keyboard-shortcut--input--color: $ibo-input--color; +$ibo-keyboard-shortcut--input--background-color: $ibo-input--background-color !default; +$ibo-keyboard-shortcut--input--color: $ibo-input--color !default; -$ibo-button-colors: ('regular': ('neutral': ('': ($ibo-color-secondary-600, $ibo-color-grey-200, $ibo-button--box-shadow-bottom $ibo-color-secondary-400, $ibo-color-secondary-300, ), ':hover': ( $ibo-color-secondary-500, $ibo-color-grey-100, $ibo-button--box-shadow-bottom $ibo-color-secondary-400, $ibo-color-secondary-300, ), ':active': ( $ibo-color-secondary-500, $ibo-color-grey-200, $ibo-button--box-shadow-top $ibo-color-secondary-400 #{','} $ibo-button--box-shadow-bottom $ibo-color-secondary-500, $ibo-color-secondary-300, ), ':disabled': ($ibo-color-grey-300,$ibo-color-grey-700,$ibo-button--box-shadow-top $ibo-color-grey-300,$ibo-color-grey-500, ), ), 'primary': ( '': ( $ibo-color-primary-700, $ibo-color-white-100, $ibo-button--box-shadow-bottom $ibo-color-primary-400, $ibo-color-primary-300, ), ':hover': ( $ibo-color-primary-600, $ibo-color-white-100, $ibo-button--box-shadow-bottom $ibo-color-primary-400, $ibo-color-primary-300, ), ':active': ( $ibo-color-primary-600, $ibo-color-white-100, $ibo-button--box-shadow-top $ibo-color-primary-400 #{','} $ibo-button--box-shadow-bottom $ibo-color-primary-600, $ibo-color-primary-800, ), ':disabled': ( $ibo-color-grey-300, $ibo-color-grey-700, $ibo-button--box-shadow-top $ibo-color-grey-300, $ibo-color-grey-500, ), ), 'secondary': ( '': ( $ibo-color-secondary-600, $ibo-color-grey-200, $ibo-button--box-shadow-bottom $ibo-color-secondary-400, $ibo-color-secondary-300, ), ':hover': ( $ibo-color-secondary-500, $ibo-color-grey-100, $ibo-button--box-shadow-bottom $ibo-color-secondary-400, $ibo-color-secondary-300, ), ':active': ( $ibo-color-secondary-500, $ibo-color-grey-200, $ibo-button--box-shadow-top $ibo-color-secondary-400 #{','} $ibo-button--box-shadow-bottom $ibo-color-secondary-500, $ibo-color-secondary-200, ), ':disabled': ( $ibo-color-grey-300, $ibo-color-grey-700, $ibo-button--box-shadow-top $ibo-color-grey-300, $ibo-color-grey-500, ), ), 'danger': ( '': ( $ibo-color-danger-700, $ibo-color-white-100, $ibo-button--box-shadow-bottom $ibo-color-danger-500, $ibo-color-danger-700, ), ':hover': ( $ibo-color-danger-600, $ibo-color-white-100, $ibo-button--box-shadow-bottom $ibo-color-danger-500, $ibo-color-danger-700, ), ':active': ( $ibo-color-danger-600, $ibo-color-white-100, $ibo-button--box-shadow-top $ibo-color-danger-500 #{','} $ibo-button--box-shadow-bottom $ibo-color-danger-600, $ibo-color-danger-700, ), ':disabled': ( $ibo-color-grey-300, $ibo-color-grey-700, $ibo-button--box-shadow-top $ibo-color-grey-300, $ibo-color-grey-500, ), ), 'success': ( '': ( $ibo-color-success-700, $ibo-color-white-100, $ibo-button--box-shadow-bottom $ibo-color-success-900, $ibo-color-success-800, ), ':hover': ( $ibo-color-success-800, $ibo-color-white-100, $ibo-button--box-shadow-bottom $ibo-color-success-900, $ibo-color-success-800, ), ':active': ($ibo-color-success-800,$ibo-color-white-100,$ibo-button--box-shadow-top $ibo-color-success-900 #{','} $ibo-button--box-shadow-bottom $ibo-color-success-800,$ibo-color-success-800, ), ':disabled': ($ibo-color-grey-300,$ibo-color-grey-700,$ibo-button--box-shadow-top $ibo-color-grey-300,$ibo-color-grey-500, ), ), 'red': ( '': ($ibo-color-red-700,$ibo-color-white-100,$ibo-button--box-shadow-bottom $ibo-color-red-500,$ibo-color-red-700, ), ':hover': ($ibo-color-red-600,$ibo-color-white-100,$ibo-button--box-shadow-bottom $ibo-color-red-500,$ibo-color-red-700, ), ':active': ($ibo-color-red-600,$ibo-color-white-100,$ibo-button--box-shadow-top $ibo-color-red-500 #{','} $ibo-button--box-shadow-bottom $ibo-color-red-600,$ibo-color-red-700, ), ':disabled': ($ibo-color-grey-300,$ibo-color-grey-700,$ibo-button--box-shadow-top $ibo-color-grey-300,$ibo-color-grey-500, ), ), 'green': ( '': ($ibo-color-green-700,$ibo-color-white-100,$ibo-button--box-shadow-bottom $ibo-color-green-900,$ibo-color-green-800, ), ':hover': ($ibo-color-green-800,$ibo-color-white-100,$ibo-button--box-shadow-bottom $ibo-color-green-900,$ibo-color-green-800, ), ':active': ($ibo-color-green-800,$ibo-color-white-100,$ibo-button--box-shadow-top $ibo-color-green-900 #{','} $ibo-button--box-shadow-bottom $ibo-color-green-800,$ibo-color-green-800, ), ':disabled': ($ibo-color-grey-300,$ibo-color-grey-700,$ibo-button--box-shadow-top $ibo-color-grey-300,$ibo-color-grey-500, ), ), 'cyan': ( '': ($ibo-color-cyan-500,$ibo-color-white-100,$ibo-button--box-shadow-bottom $ibo-color-cyan-900,$ibo-color-cyan-900, ), ':hover': ($ibo-color-cyan-700,$ibo-color-white-100,$ibo-button--box-shadow-bottom $ibo-color-cyan-900,$ibo-color-cyan-900, ), ':active': ($ibo-color-cyan-700,$ibo-color-white-100,$ibo-button--box-shadow-top $ibo-color-cyan-900 #{','} $ibo-button--box-shadow-bottom $ibo-color-cyan-700,$ibo-color-cyan-700, ), ':disabled': ($ibo-color-grey-300,$ibo-color-grey-700,$ibo-button--box-shadow-top $ibo-color-grey-300,$ibo-color-grey-500, ), ) ), 'alternative': ( 'neutral': ( '': (transparent,$ibo-color-grey-300,$ibo-button--box-shadow-bottom transparent,$ibo-color-grey-800, ), ':hover': ($ibo-color-secondary-700,$ibo-color-grey-300,$ibo-button--box-shadow-bottom $ibo-color-secondary-700,$ibo-color-grey-800, ), ':active': ($ibo-color-secondary-700,$ibo-color-grey-300,$ibo-button--box-shadow-top $ibo-color-secondary-700 #{','} $ibo-button--box-shadow-bottom $ibo-color-secondary-700,$ibo-color-grey-800, ), ':disabled': (transparent,$ibo-color-grey-600,$ibo-button--box-shadow-top transparent,$ibo-color-grey-500, ), ), 'primary': ( '': (transparent,$ibo-color-primary-300,$ibo-button--box-shadow-bottom transparent,$ibo-color-cyan-700, ), ':hover': ($ibo-color-primary-900,$ibo-color-primary-300,$ibo-button--box-shadow-bottom $ibo-color-primary-900,$ibo-color-grey-800, ), ':active': ($ibo-color-primary-900,$ibo-color-primary-300,$ibo-button--box-shadow-top $ibo-color-primary-900 #{','} $ibo-button--box-shadow-bottom $ibo-color-primary-900,$ibo-color-grey-800, ), ':disabled': (transparent,$ibo-color-grey-600,$ibo-button--box-shadow-top transparent,$ibo-color-grey-500, ), ), 'secondary': ( '': (transparent,$ibo-color-grey-300,$ibo-button--box-shadow-bottom transparent,$ibo-color-grey-800, ), ':hover': ($ibo-color-secondary-100,$ibo-color-grey-900,$ibo-button--box-shadow-bottom $ibo-color-secondary-100,$ibo-color-grey-800, ), ':active': ($ibo-color-secondary-100,$ibo-color-grey-900,$ibo-button--box-shadow-top $ibo-color-secondary-200 #{','} $ibo-button--box-shadow-bottom $ibo-color-secondary-100,$ibo-color-grey-800, ), ':disabled': (transparent,$ibo-color-grey-600,$ibo-button--box-shadow-top transparent,$ibo-color-grey-500, ), ), 'danger': ( '': (transparent,$ibo-color-danger-700,$ibo-button--box-shadow-bottom transparent,$ibo-color-danger-600, ), ':hover': ($ibo-color-danger-200,$ibo-color-danger-900,$ibo-button--box-shadow-bottom $ibo-color-danger-200,$ibo-color-danger-800, ), ':active': ($ibo-color-danger-200,$ibo-color-danger-900,$ibo-button--box-shadow-top $ibo-color-danger-700 #{','} $ibo-button--box-shadow-bottom $ibo-color-danger-200,$ibo-color-danger-800, ), ':disabled': (transparent,$ibo-color-grey-600,$ibo-button--box-shadow-top transparent,$ibo-color-grey-500, ), ), 'success': ( '': (transparent,$ibo-color-success-900,$ibo-button--box-shadow-bottom transparent,$ibo-color-success-800, ), ':hover': ($ibo-color-success-100,$ibo-color-success-900,$ibo-button--box-shadow-bottom $ibo-color-success-100,$ibo-color-success-800, ), ':active': ($ibo-color-success-100,$ibo-color-success-900,$ibo-button--box-shadow-top $ibo-color-success-700 #{','} $ibo-button--box-shadow-bottom $ibo-color-success-100,$ibo-color-success-800, ), ':disabled': (transparent,$ibo-color-grey-600,$ibo-button--box-shadow-top transparent,$ibo-color-grey-500, ), ), 'red': ( '': (transparent,$ibo-color-red-700,$ibo-button--box-shadow-bottom transparent,$ibo-color-red-600, ), ':hover': ($ibo-color-red-200,$ibo-color-red-900,$ibo-button--box-shadow-bottom $ibo-color-red-200,$ibo-color-red-800, ), ':active': ($ibo-color-red-200,$ibo-color-red-900,$ibo-button--box-shadow-top $ibo-color-red-700 #{','} $ibo-button--box-shadow-bottom $ibo-color-red-200,$ibo-color-red-800, ), ':disabled': (transparent,$ibo-color-grey-600,$ibo-button--box-shadow-top transparent,$ibo-color-grey-500, ), ), 'green': ( '': (transparent,$ibo-color-green-900,$ibo-button--box-shadow-bottom transparent,$ibo-color-green-800, ), ':hover': ($ibo-color-green-100,$ibo-color-green-900,$ibo-button--box-shadow-bottom $ibo-color-green-100,$ibo-color-green-800, ), ':active': ($ibo-color-green-100,$ibo-color-green-900,$ibo-button--box-shadow-top $ibo-color-green-700 #{','} $ibo-button--box-shadow-bottom $ibo-color-green-100,$ibo-color-green-800, ), ':disabled': (transparent,$ibo-color-grey-600,$ibo-button--box-shadow-top transparent,$ibo-color-grey-500, ), ), 'cyan': ( '': (transparent,$ibo-color-cyan-900,$ibo-button--box-shadow-bottom transparent,$ibo-color-cyan-800, ), ':hover': ($ibo-color-cyan-100,$ibo-color-cyan-900,$ibo-button--box-shadow-bottom $ibo-color-cyan-100,$ibo-color-cyan-800, ), ':active': ($ibo-color-cyan-100,$ibo-color-cyan-900,$ibo-button--box-shadow-top $ibo-color-cyan-800 #{','} $ibo-button--box-shadow-bottom $ibo-color-cyan-100,$ibo-color-cyan-800, ), ':disabled': (transparent,$ibo-color-grey-600,$ibo-button--box-shadow-top transparent,$ibo-color-grey-500, ), ), )); +$ibo-button-colors: ('regular': ('neutral': ('': ($ibo-color-secondary-600, $ibo-color-grey-200, $ibo-button--box-shadow-bottom $ibo-color-secondary-400, $ibo-color-secondary-300, ), ':hover': ( $ibo-color-secondary-500, $ibo-color-grey-100, $ibo-button--box-shadow-bottom $ibo-color-secondary-400, $ibo-color-secondary-300, ), ':active': ( $ibo-color-secondary-500, $ibo-color-grey-200, $ibo-button--box-shadow-top $ibo-color-secondary-400 #{','} $ibo-button--box-shadow-bottom $ibo-color-secondary-500, $ibo-color-secondary-300, ), ':disabled': ($ibo-color-grey-300,$ibo-color-grey-700,$ibo-button--box-shadow-top $ibo-color-grey-300,$ibo-color-grey-500, ), ), 'primary': ( '': ( $ibo-color-primary-700, $ibo-color-white-100, $ibo-button--box-shadow-bottom $ibo-color-primary-400, $ibo-color-primary-300, ), ':hover': ( $ibo-color-primary-600, $ibo-color-white-100, $ibo-button--box-shadow-bottom $ibo-color-primary-400, $ibo-color-primary-300, ), ':active': ( $ibo-color-primary-600, $ibo-color-white-100, $ibo-button--box-shadow-top $ibo-color-primary-400 #{','} $ibo-button--box-shadow-bottom $ibo-color-primary-600, $ibo-color-primary-800, ), ':disabled': ( $ibo-color-grey-300, $ibo-color-grey-700, $ibo-button--box-shadow-top $ibo-color-grey-300, $ibo-color-grey-500, ), ), 'secondary': ( '': ( $ibo-color-secondary-600, $ibo-color-grey-200, $ibo-button--box-shadow-bottom $ibo-color-secondary-400, $ibo-color-secondary-300, ), ':hover': ( $ibo-color-secondary-500, $ibo-color-grey-100, $ibo-button--box-shadow-bottom $ibo-color-secondary-400, $ibo-color-secondary-300, ), ':active': ( $ibo-color-secondary-500, $ibo-color-grey-200, $ibo-button--box-shadow-top $ibo-color-secondary-400 #{','} $ibo-button--box-shadow-bottom $ibo-color-secondary-500, $ibo-color-secondary-200, ), ':disabled': ( $ibo-color-grey-300, $ibo-color-grey-700, $ibo-button--box-shadow-top $ibo-color-grey-300, $ibo-color-grey-500, ), ), 'danger': ( '': ( $ibo-color-danger-700, $ibo-color-white-100, $ibo-button--box-shadow-bottom $ibo-color-danger-500, $ibo-color-danger-700, ), ':hover': ( $ibo-color-danger-600, $ibo-color-white-100, $ibo-button--box-shadow-bottom $ibo-color-danger-500, $ibo-color-danger-700, ), ':active': ( $ibo-color-danger-600, $ibo-color-white-100, $ibo-button--box-shadow-top $ibo-color-danger-500 #{','} $ibo-button--box-shadow-bottom $ibo-color-danger-600, $ibo-color-danger-700, ), ':disabled': ( $ibo-color-grey-300, $ibo-color-grey-700, $ibo-button--box-shadow-top $ibo-color-grey-300, $ibo-color-grey-500, ), ), 'success': ( '': ( $ibo-color-success-700, $ibo-color-white-100, $ibo-button--box-shadow-bottom $ibo-color-success-900, $ibo-color-success-800, ), ':hover': ( $ibo-color-success-800, $ibo-color-white-100, $ibo-button--box-shadow-bottom $ibo-color-success-900, $ibo-color-success-800, ), ':active': ($ibo-color-success-800,$ibo-color-white-100,$ibo-button--box-shadow-top $ibo-color-success-900 #{','} $ibo-button--box-shadow-bottom $ibo-color-success-800,$ibo-color-success-800, ), ':disabled': ($ibo-color-grey-300,$ibo-color-grey-700,$ibo-button--box-shadow-top $ibo-color-grey-300,$ibo-color-grey-500, ), ), 'red': ( '': ($ibo-color-red-700,$ibo-color-white-100,$ibo-button--box-shadow-bottom $ibo-color-red-500,$ibo-color-red-700, ), ':hover': ($ibo-color-red-600,$ibo-color-white-100,$ibo-button--box-shadow-bottom $ibo-color-red-500,$ibo-color-red-700, ), ':active': ($ibo-color-red-600,$ibo-color-white-100,$ibo-button--box-shadow-top $ibo-color-red-500 #{','} $ibo-button--box-shadow-bottom $ibo-color-red-600,$ibo-color-red-700, ), ':disabled': ($ibo-color-grey-300,$ibo-color-grey-700,$ibo-button--box-shadow-top $ibo-color-grey-300,$ibo-color-grey-500, ), ), 'green': ( '': ($ibo-color-green-700,$ibo-color-white-100,$ibo-button--box-shadow-bottom $ibo-color-green-900,$ibo-color-green-800, ), ':hover': ($ibo-color-green-800,$ibo-color-white-100,$ibo-button--box-shadow-bottom $ibo-color-green-900,$ibo-color-green-800, ), ':active': ($ibo-color-green-800,$ibo-color-white-100,$ibo-button--box-shadow-top $ibo-color-green-900 #{','} $ibo-button--box-shadow-bottom $ibo-color-green-800,$ibo-color-green-800, ), ':disabled': ($ibo-color-grey-300,$ibo-color-grey-700,$ibo-button--box-shadow-top $ibo-color-grey-300,$ibo-color-grey-500, ), ), 'cyan': ( '': ($ibo-color-cyan-500,$ibo-color-white-100,$ibo-button--box-shadow-bottom $ibo-color-cyan-900,$ibo-color-cyan-900, ), ':hover': ($ibo-color-cyan-700,$ibo-color-white-100,$ibo-button--box-shadow-bottom $ibo-color-cyan-900,$ibo-color-cyan-900, ), ':active': ($ibo-color-cyan-700,$ibo-color-white-100,$ibo-button--box-shadow-top $ibo-color-cyan-900 #{','} $ibo-button--box-shadow-bottom $ibo-color-cyan-700,$ibo-color-cyan-700, ), ':disabled': ($ibo-color-grey-300,$ibo-color-grey-700,$ibo-button--box-shadow-top $ibo-color-grey-300,$ibo-color-grey-500, ), ) ), 'alternative': ( 'neutral': ( '': (transparent,$ibo-color-grey-300,$ibo-button--box-shadow-bottom transparent,$ibo-color-grey-800, ), ':hover': ($ibo-color-secondary-700,$ibo-color-grey-300,$ibo-button--box-shadow-bottom $ibo-color-secondary-700,$ibo-color-grey-800, ), ':active': ($ibo-color-secondary-700,$ibo-color-grey-300,$ibo-button--box-shadow-top $ibo-color-secondary-700 #{','} $ibo-button--box-shadow-bottom $ibo-color-secondary-700,$ibo-color-grey-800, ), ':disabled': (transparent,$ibo-color-grey-600,$ibo-button--box-shadow-top transparent,$ibo-color-grey-500, ), ), 'primary': ( '': (transparent,$ibo-color-primary-300,$ibo-button--box-shadow-bottom transparent,$ibo-color-cyan-700, ), ':hover': ($ibo-color-primary-900,$ibo-color-primary-300,$ibo-button--box-shadow-bottom $ibo-color-primary-900,$ibo-color-grey-800, ), ':active': ($ibo-color-primary-900,$ibo-color-primary-300,$ibo-button--box-shadow-top $ibo-color-primary-900 #{','} $ibo-button--box-shadow-bottom $ibo-color-primary-900,$ibo-color-grey-800, ), ':disabled': (transparent,$ibo-color-grey-600,$ibo-button--box-shadow-top transparent,$ibo-color-grey-500, ), ), 'secondary': ( '': (transparent,$ibo-color-grey-300,$ibo-button--box-shadow-bottom transparent,$ibo-color-grey-800, ), ':hover': ($ibo-color-secondary-100,$ibo-color-grey-900,$ibo-button--box-shadow-bottom $ibo-color-secondary-100,$ibo-color-grey-800, ), ':active': ($ibo-color-secondary-100,$ibo-color-grey-900,$ibo-button--box-shadow-top $ibo-color-secondary-200 #{','} $ibo-button--box-shadow-bottom $ibo-color-secondary-100,$ibo-color-grey-800, ), ':disabled': (transparent,$ibo-color-grey-600,$ibo-button--box-shadow-top transparent,$ibo-color-grey-500, ), ), 'danger': ( '': (transparent,$ibo-color-danger-700,$ibo-button--box-shadow-bottom transparent,$ibo-color-danger-600, ), ':hover': ($ibo-color-danger-200,$ibo-color-danger-900,$ibo-button--box-shadow-bottom $ibo-color-danger-200,$ibo-color-danger-800, ), ':active': ($ibo-color-danger-200,$ibo-color-danger-900,$ibo-button--box-shadow-top $ibo-color-danger-700 #{','} $ibo-button--box-shadow-bottom $ibo-color-danger-200,$ibo-color-danger-800, ), ':disabled': (transparent,$ibo-color-grey-600,$ibo-button--box-shadow-top transparent,$ibo-color-grey-500, ), ), 'success': ( '': (transparent,$ibo-color-success-900,$ibo-button--box-shadow-bottom transparent,$ibo-color-success-800, ), ':hover': ($ibo-color-success-100,$ibo-color-success-900,$ibo-button--box-shadow-bottom $ibo-color-success-100,$ibo-color-success-800, ), ':active': ($ibo-color-success-100,$ibo-color-success-900,$ibo-button--box-shadow-top $ibo-color-success-700 #{','} $ibo-button--box-shadow-bottom $ibo-color-success-100,$ibo-color-success-800, ), ':disabled': (transparent,$ibo-color-grey-600,$ibo-button--box-shadow-top transparent,$ibo-color-grey-500, ), ), 'red': ( '': (transparent,$ibo-color-red-700,$ibo-button--box-shadow-bottom transparent,$ibo-color-red-600, ), ':hover': ($ibo-color-red-200,$ibo-color-red-900,$ibo-button--box-shadow-bottom $ibo-color-red-200,$ibo-color-red-800, ), ':active': ($ibo-color-red-200,$ibo-color-red-900,$ibo-button--box-shadow-top $ibo-color-red-700 #{','} $ibo-button--box-shadow-bottom $ibo-color-red-200,$ibo-color-red-800, ), ':disabled': (transparent,$ibo-color-grey-600,$ibo-button--box-shadow-top transparent,$ibo-color-grey-500, ), ), 'green': ( '': (transparent,$ibo-color-green-900,$ibo-button--box-shadow-bottom transparent,$ibo-color-green-800, ), ':hover': ($ibo-color-green-100,$ibo-color-green-900,$ibo-button--box-shadow-bottom $ibo-color-green-100,$ibo-color-green-800, ), ':active': ($ibo-color-green-100,$ibo-color-green-900,$ibo-button--box-shadow-top $ibo-color-green-700 #{','} $ibo-button--box-shadow-bottom $ibo-color-green-100,$ibo-color-green-800, ), ':disabled': (transparent,$ibo-color-grey-600,$ibo-button--box-shadow-top transparent,$ibo-color-grey-500, ), ), 'cyan': ( '': (transparent,$ibo-color-cyan-900,$ibo-button--box-shadow-bottom transparent,$ibo-color-cyan-800, ), ':hover': ($ibo-color-cyan-100,$ibo-color-cyan-900,$ibo-button--box-shadow-bottom $ibo-color-cyan-100,$ibo-color-cyan-800, ), ':active': ($ibo-color-cyan-100,$ibo-color-cyan-900,$ibo-button--box-shadow-top $ibo-color-cyan-800 #{','} $ibo-button--box-shadow-bottom $ibo-color-cyan-100,$ibo-color-cyan-800, ), ':disabled': (transparent,$ibo-color-grey-600,$ibo-button--box-shadow-top transparent,$ibo-color-grey-500, ), ), )) !default; -$ibo-alert-colors: ('primary': ($ibo-color-primary-900, $ibo-color-primary-700, $ibo-color-primary-200), 'secondary': ($ibo-color-secondary-900, $ibo-color-secondary-700, $ibo-color-secondary-200),'neutral': ($ibo-color-secondary-900, $ibo-color-secondary-700, $ibo-color-secondary-200),'information': ($ibo-color-information-900, $ibo-color-information-700, $ibo-color-information-200),'success': ($ibo-color-success-900, $ibo-color-success-700, $ibo-color-success-100),'failure': ($ibo-color-danger-900, $ibo-color-danger-700, $ibo-color-danger-200),'warning': ($ibo-color-warning-900, $ibo-color-warning-700, $ibo-color-warning-200),'danger': ($ibo-color-danger-900, $ibo-color-danger-700, $ibo-color-danger-200),'grey' : ($ibo-color-grey-900, $ibo-color-grey-700, $ibo-color-grey-200),'blue-grey': ($ibo-color-blue-grey-900, $ibo-color-blue-grey-700, $ibo-color-blue-grey-200),'blue': ($ibo-color-blue-900, $ibo-color-blue-700, $ibo-color-blue-200),'cyan': ($ibo-color-cyan-900, $ibo-color-blue-700, $ibo-color-cyan-100),'green': ($ibo-color-green-900, $ibo-color-green-700, $ibo-color-green-100),'orange' : ($ibo-color-orange-900, $ibo-color-orange-700, $ibo-color-orange-200),'red': ($ibo-color-red-900, $ibo-color-red-700, $ibo-color-red-200),'pink': ($ibo-color-pink-900, $ibo-color-pink-700, $ibo-color-pink-200),); +$ibo-alert-colors: ('primary': ($ibo-color-primary-900, $ibo-color-primary-700, $ibo-color-primary-200), 'secondary': ($ibo-color-secondary-900, $ibo-color-secondary-700, $ibo-color-secondary-200),'neutral': ($ibo-color-secondary-900, $ibo-color-secondary-700, $ibo-color-secondary-200),'information': ($ibo-color-information-900, $ibo-color-information-700, $ibo-color-information-200),'success': ($ibo-color-success-900, $ibo-color-success-700, $ibo-color-success-100),'failure': ($ibo-color-danger-900, $ibo-color-danger-700, $ibo-color-danger-200),'warning': ($ibo-color-warning-900, $ibo-color-warning-700, $ibo-color-warning-200),'danger': ($ibo-color-danger-900, $ibo-color-danger-700, $ibo-color-danger-200),'grey' : ($ibo-color-grey-900, $ibo-color-grey-700, $ibo-color-grey-200),'blue-grey': ($ibo-color-blue-grey-900, $ibo-color-blue-grey-700, $ibo-color-blue-grey-200),'blue': ($ibo-color-blue-900, $ibo-color-blue-700, $ibo-color-blue-200),'cyan': ($ibo-color-cyan-900, $ibo-color-blue-700, $ibo-color-cyan-100),'green': ($ibo-color-green-900, $ibo-color-green-700, $ibo-color-green-100),'orange' : ($ibo-color-orange-900, $ibo-color-orange-700, $ibo-color-orange-200),'red': ($ibo-color-red-900, $ibo-color-red-700, $ibo-color-red-200),'pink': ($ibo-color-pink-900, $ibo-color-pink-700, $ibo-color-pink-200),) !default; -$ibo-color-base-lightness-100: 23%; -$ibo-color-base-lightness-900: 93%; +$ibo-color-base-lightness-100: 23% !default; +$ibo-color-base-lightness-900: 93% !default; -$ibo-color-base-opacity-for-lightness-100: 1; -$ibo-color-base-opacity-for-lightness-900: 1; +$ibo-color-base-opacity-for-lightness-100: 1 !default; +$ibo-color-base-opacity-for-lightness-900: 1 !default; -$ibo-vendors-c3--path--color: $ibo-color-grey-300; -$ibo-vendors-c3--tooltip--background-color: $ibo-color-grey-600; -$ibo-vendors-c3--tooltip-th--background-color: $ibo-color-grey-600; -$ibo-vendors-c3--tooltip-th--color: $ibo-body-text-color; -$ibo-vendors-c3--tooltip-td--background-color: $ibo-color-grey-600; -$ibo-vendors-c3--legend--fill: $ibo-color-white-200; -$ibo-vendors-c3--legend--background-color: $ibo-color-white-100; -$ibo-vendors-c3--legend-item--fill: $ibo-color-grey-100; -$ibo-vendors-c3--axis--fill: $ibo-color-grey-200; +$ibo-vendors-c3--path--color: $ibo-color-grey-300 !default; +$ibo-vendors-c3--tooltip--background-color: $ibo-color-grey-600 !default; +$ibo-vendors-c3--tooltip-th--background-color: $ibo-color-grey-600 !default; +$ibo-vendors-c3--tooltip-th--color: $ibo-body-text-color !default; +$ibo-vendors-c3--tooltip-td--background-color: $ibo-color-grey-600 !default; +$ibo-vendors-c3--legend--fill: $ibo-color-white-200 !default; +$ibo-vendors-c3--legend--background-color: $ibo-color-white-100 !default; +$ibo-vendors-c3--legend-item--fill: $ibo-color-grey-100 !default; +$ibo-vendors-c3--axis--fill: $ibo-color-grey-200 !default; -$ibo-run-query--highlight--background-color: $ibo-color-primary-700; +$ibo-run-query--highlight--background-color: $ibo-color-primary-700 !default; -$ibo-datamodel-viewer--classes-list--selectize-input--background-color: $ibo-color-grey-700; -$ibo-datamodel-viewer--classes-list--selectize-input--border-color: $ibo-color-grey-500; -$ibo-datamodel-viewer--classes-list--selectize-input--color: $ibo-color-grey-200; -$ibo-datamodel-viewer--lifecycle--code--color: $ibo-color-grey-300; -$ibo-datamodel-viewer--lifecycle--stimuli--color: $ibo-color-blue-300; -$ibo-datamodel-viewer--lifecycle--attribute-option--color: $ibo-color-pink-300; -$ibo-datamodel-viewer--schema--tooltip--fill: $ibo-color-grey-600; +$ibo-datamodel-viewer--classes-list--selectize-input--background-color: $ibo-color-grey-700 !default; +$ibo-datamodel-viewer--classes-list--selectize-input--border-color: $ibo-color-grey-500 !default; +$ibo-datamodel-viewer--classes-list--selectize-input--color: $ibo-color-grey-200 !default; +$ibo-datamodel-viewer--lifecycle--code--color: $ibo-color-grey-300 !default; +$ibo-datamodel-viewer--lifecycle--stimuli--color: $ibo-color-blue-300 !default; +$ibo-datamodel-viewer--lifecycle--attribute-option--color: $ibo-color-pink-300 !default; +$ibo-datamodel-viewer--schema--tooltip--fill: $ibo-color-grey-600 !default; -$ibo-csv-import--row-error--background-color: $ibo-color-red-950; -$ibo-csv-import--cell-error--color: $ibo-color-red-500; -$ibo-csv-import--cell-modified--color: $ibo-color-blue-500; +$ibo-csv-import--row-error--background-color: $ibo-color-red-950 !default; +$ibo-csv-import--cell-error--color: $ibo-color-red-500 !default; +$ibo-csv-import--cell-modified--color: $ibo-color-blue-500 !default; -$ibo-welcome-popup--messages-stack--background-color: $ibo-color-grey-700; -$ibo-welcome-popup--stack-item--background-color: $ibo-color-grey-600; -$ibo-welcome-popup--stack-item--border-color: $ibo-color-grey-800; -$ibo-welcome-popup--stack-item--is-active--border-color: $ibo-color-grey-900; +$ibo-welcome-popup--messages-stack--background-color: $ibo-color-grey-700 !default; +$ibo-welcome-popup--stack-item--background-color: $ibo-color-grey-600 !default; +$ibo-welcome-popup--stack-item--border-color: $ibo-color-grey-800 !default; +$ibo-welcome-popup--stack-item--is-active--border-color: $ibo-color-grey-900 !default; -$ibo-vendors-ckeditor--ck-content--text-color: $ibo-color-grey-900; +$ibo-vendors-ckeditor--ck-content--text-color: $ibo-color-grey-900 !default; $ibo-user-rights--is-success--background-color: $ibo-color-success-950 !default; $ibo-user-rights--is-success--color: $ibo-color-success-100 !default; diff --git a/datamodels/2.x/combodo-backoffice-fullmoon-high-contrast-theme/scss/scss-variables.scss b/datamodels/2.x/combodo-backoffice-fullmoon-high-contrast-theme/scss/scss-variables.scss index 3501cb5da..4eca94746 100644 --- a/datamodels/2.x/combodo-backoffice-fullmoon-high-contrast-theme/scss/scss-variables.scss +++ b/datamodels/2.x/combodo-backoffice-fullmoon-high-contrast-theme/scss/scss-variables.scss @@ -3,73 +3,73 @@ $ibo-color-danger-50: common-adjust-lightness($ibo-color-success-100, $ibo-color $ibo-color-information-50: common-adjust-lightness($ibo-color-success-100, $ibo-color-information-100) !default; $ibo-color-warning-50: common-adjust-lightness($ibo-color-success-100, $ibo-color-warning-100) !default; -$ibo-navigation-menu--menu-group-title--text-color--is-active: $ibo-color-blue-grey-900; -$ibo-navigation-menu--menu-group--background-color--is-active: $ibo-color-white-100; -$ibo-navigation-menu--menu-node--background-color: $ibo-color-grey-100; -$ibo-navigation-menu--drawer--border-right: 2px solid $ibo-color-grey-900; -$ibo-navigation-menu--bottom-part--background-color: $ibo-color-blue-grey-800; -$ibo-navigation-menu--body--text-color: $ibo-color-white-100; +$ibo-navigation-menu--menu-group-title--text-color--is-active: $ibo-color-blue-grey-900 !default; +$ibo-navigation-menu--menu-group--background-color--is-active: $ibo-color-white-100 !default; +$ibo-navigation-menu--menu-node--background-color: $ibo-color-grey-100 !default; +$ibo-navigation-menu--drawer--border-right: 2px solid $ibo-color-grey-900 !default; +$ibo-navigation-menu--bottom-part--background-color: $ibo-color-blue-grey-800 !default; +$ibo-navigation-menu--body--text-color: $ibo-color-white-100 !default; -$ibo-navigation-menu--menu-filter-input--text-color: $ibo-color-blue-grey-900; -$ibo-navigation-menu--menu-filter-input--border: 1px solid $ibo-color-grey-800; -$ibo-navigation-menu--menu-filter-hotkey--border: 1px solid $ibo-color-grey-900; -$ibo-navigation-menu--menu-filter-input--placeholder-color: $ibo-color-blue-grey-900; -$ibo-navigation-menu--menu-filter-hint--text-color: $ibo-color-blue-grey-900; +$ibo-navigation-menu--menu-filter-input--text-color: $ibo-color-blue-grey-900 !default; +$ibo-navigation-menu--menu-filter-input--border: 1px solid $ibo-color-grey-800 !default; +$ibo-navigation-menu--menu-filter-hotkey--border: 1px solid $ibo-color-grey-900 !default; +$ibo-navigation-menu--menu-filter-input--placeholder-color: $ibo-color-blue-grey-900 !default; +$ibo-navigation-menu--menu-filter-hint--text-color: $ibo-color-blue-grey-900 !default; -$ibo-navigation-menu--notifications-toggler--color: $ibo-color-white-200; -$ibo-navigation-menu--notifications-toggler--color--is-loaded: $ibo-color-white-200; -$ibo-navigation-menu--notifications-toggler--new-messages--background-color: $ibo-color-red-400; +$ibo-navigation-menu--notifications-toggler--color: $ibo-color-white-200 !default; +$ibo-navigation-menu--notifications-toggler--color--is-loaded: $ibo-color-white-200 !default; +$ibo-navigation-menu--notifications-toggler--new-messages--background-color: $ibo-color-red-400 !default; -$ibo-body-background-color: $ibo-color-white-100; -$ibo-content-block--border: 2px solid $ibo-color-grey-900; +$ibo-body-background-color: $ibo-color-white-100 !default; +$ibo-content-block--border: 2px solid $ibo-color-grey-900 !default; -$ibo-global-search--icon--color: $ibo-color-primary-800; -$ibo-quick-create--icon--color: $ibo-color-primary-800; -$ibo-hyperlink-color: $ibo-color-primary-900; +$ibo-global-search--icon--color: $ibo-color-primary-800 !default; +$ibo-quick-create--icon--color: $ibo-color-primary-800 !default; +$ibo-hyperlink-color: $ibo-color-primary-900 !default; -$ibo-breadcrumbs--item--text-color: $ibo-color-grey-900; -$ibo-breadcrumbs--item-icon--text-color: $ibo-color-grey-800; +$ibo-breadcrumbs--item--text-color: $ibo-color-grey-900 !default; +$ibo-breadcrumbs--item-icon--text-color: $ibo-color-grey-800 !default; -$ibo-dashlet-header-static--body--separator--border: 2px solid $ibo-color-grey-800; -$ibo-dashlet-badge--border: 1px solid $ibo-color-grey-900; +$ibo-dashlet-header-static--body--separator--border: 2px solid $ibo-color-grey-800 !default; +$ibo-dashlet-badge--border: 1px solid $ibo-color-grey-900 !default; -$ibo-panel--base-border-color: $ibo-color-grey-800; -$ibo-panel--subtitle--color: $ibo-color-grey-800; -$ibo-panel--icon--background-color--as-medallion: $ibo-color-white-100; -$ibo-panel--icon--border--as-medallion: 2px solid $ibo-color-grey-900; -$ibo-tab-container--tab-header--text-color: $ibo-color-grey-900; -$ibo-tab-container--tabs-list--background-color: $ibo-color-grey-100; -$ibo-tab-container--extra-tab-toggler--text-color: $ibo-color-grey-900; -$ibo-toolbar-vertical-separator--border-color: $ibo-color-grey-900; +$ibo-panel--base-border-color: $ibo-color-grey-800 !default; +$ibo-panel--subtitle--color: $ibo-color-grey-800 !default; +$ibo-panel--icon--background-color--as-medallion: $ibo-color-white-100 !default; +$ibo-panel--icon--border--as-medallion: 2px solid $ibo-color-grey-900 !default; +$ibo-tab-container--tab-header--text-color: $ibo-color-grey-900 !default; +$ibo-tab-container--tabs-list--background-color: $ibo-color-grey-100 !default; +$ibo-tab-container--extra-tab-toggler--text-color: $ibo-color-grey-900 !default; +$ibo-toolbar-vertical-separator--border-color: $ibo-color-grey-900 !default; -$ibo-input--border-color: $ibo-color-grey-900; -$ibo-field--value--color: $ibo-color-grey-900; -$ibo-fieldset--legend--border-bottom-color: $ibo-color-grey-900; -$ibo-input-select--action-button--color: $ibo-color-grey-900; +$ibo-input--border-color: $ibo-color-grey-900 !default; +$ibo-field--value--color: $ibo-color-grey-900 !default; +$ibo-fieldset--legend--border-bottom-color: $ibo-color-grey-900 !default; +$ibo-input-select--action-button--color: $ibo-color-grey-900 !default; -$ibo-vendors-datatables--row--background-color--is-even: $ibo-color-grey-100; +$ibo-vendors-datatables--row--background-color--is-even: $ibo-color-grey-100 !default; -$ibo-activity-panel--tab-toggler--is-active--background-color: $ibo-color-grey-100; -$ibo-activity-panel--header--background-color: $ibo-color-grey-100; -$ibo-activity-entry--main-information--background-color: $ibo-color-grey-100; -$ibo-activity-entry--sub-information--text-color: $ibo-color-grey-900; -$ibo-activity-entry--main-information-icon--text-color: $ibo-color-grey-900; -$ibo-activity-entry--main-information--text-color: $ibo-color-grey-900; -$ibo-activity-entry--main-information--is-current-user--background-color: $ibo-color-white-100; +$ibo-activity-panel--tab-toggler--is-active--background-color: $ibo-color-grey-100 !default; +$ibo-activity-panel--header--background-color: $ibo-color-grey-100 !default; +$ibo-activity-entry--main-information--background-color: $ibo-color-grey-100 !default; +$ibo-activity-entry--sub-information--text-color: $ibo-color-grey-900 !default; +$ibo-activity-entry--main-information-icon--text-color: $ibo-color-grey-900 !default; +$ibo-activity-entry--main-information--text-color: $ibo-color-grey-900 !default; +$ibo-activity-entry--main-information--is-current-user--background-color: $ibo-color-white-100 !default; -$ibo-search-form-panel--criteria--border-color: $ibo-color-grey-900; -$ibo-search-form-panel--more-criteria--border-color: $ibo-color-grey-900; -$ibo-search-form-panel--criteria--background-color: $ibo-color-white-100; +$ibo-search-form-panel--criteria--border-color: $ibo-color-grey-900 !default; +$ibo-search-form-panel--more-criteria--border-color: $ibo-color-grey-900 !default; +$ibo-search-form-panel--criteria--background-color: $ibo-color-white-100 !default; -$ibo-popover-menu--item-separator--background-color: $ibo-color-grey-900; +$ibo-popover-menu--item-separator--background-color: $ibo-color-grey-900 !default; -$ibo-alert-colors: ('primary': ($ibo-color-primary-100, $ibo-color-primary-900, $ibo-color-primary-900),'secondary': ($ibo-color-secondary-100, $ibo-color-secondary-900, $ibo-color-secondary-900),'neutral': ($ibo-color-secondary-100, $ibo-color-secondary-900, $ibo-color-secondary-900),'information': ($ibo-color-information-100, $ibo-color-information-950, $ibo-color-information-950),'success': ($ibo-color-success-100, $ibo-color-success-950, $ibo-color-success-950),'failure': ($ibo-color-danger-100, $ibo-color-danger-950, $ibo-color-danger-950),'warning': ($ibo-color-warning-100, $ibo-color-warning-950, $ibo-color-warning-950),'danger': ($ibo-color-danger-100, $ibo-color-danger-950, $ibo-color-danger-950),'grey' : ($ibo-color-grey-100, $ibo-color-grey-900, $ibo-color-grey-900),'blue-grey': ($ibo-color-blue-grey-100, $ibo-color-blue-grey-900, $ibo-color-blue-grey-900),'blue': ($ibo-color-blue-100, $ibo-color-blue-950, $ibo-color-blue-950),'cyan': ($ibo-color-cyan-100, $ibo-color-blue-950, $ibo-color-cyan-900),'green': ($ibo-color-green-100, $ibo-color-green-950, $ibo-color-green-950),'orange' : ($ibo-color-orange-100, $ibo-color-orange-900, $ibo-color-orange-900),'red': ($ibo-color-red-100, $ibo-color-red-950, $ibo-color-red-950),'pink': ($ibo-color-pink-100, $ibo-color-pink-900, $ibo-color-pink-900),); +$ibo-alert-colors: ('primary': ($ibo-color-primary-100, $ibo-color-primary-900, $ibo-color-primary-900),'secondary': ($ibo-color-secondary-100, $ibo-color-secondary-900, $ibo-color-secondary-900),'neutral': ($ibo-color-secondary-100, $ibo-color-secondary-900, $ibo-color-secondary-900),'information': ($ibo-color-information-100, $ibo-color-information-950, $ibo-color-information-950),'success': ($ibo-color-success-100, $ibo-color-success-950, $ibo-color-success-950),'failure': ($ibo-color-danger-100, $ibo-color-danger-950, $ibo-color-danger-950),'warning': ($ibo-color-warning-100, $ibo-color-warning-950, $ibo-color-warning-950),'danger': ($ibo-color-danger-100, $ibo-color-danger-950, $ibo-color-danger-950),'grey' : ($ibo-color-grey-100, $ibo-color-grey-900, $ibo-color-grey-900),'blue-grey': ($ibo-color-blue-grey-100, $ibo-color-blue-grey-900, $ibo-color-blue-grey-900),'blue': ($ibo-color-blue-100, $ibo-color-blue-950, $ibo-color-blue-950),'cyan': ($ibo-color-cyan-100, $ibo-color-blue-950, $ibo-color-cyan-900),'green': ($ibo-color-green-100, $ibo-color-green-950, $ibo-color-green-950),'orange' : ($ibo-color-orange-100, $ibo-color-orange-900, $ibo-color-orange-900),'red': ($ibo-color-red-100, $ibo-color-red-950, $ibo-color-red-950),'pink': ($ibo-color-pink-100, $ibo-color-pink-900, $ibo-color-pink-900),) !default; $ibo-button-colors: ( 'regular': ( /* Semantics */ 'neutral': ( '': ( $ibo-color-secondary-100, $ibo-color-grey-900, $ibo-button--box-shadow-bottom $ibo-color-secondary-200, $ibo-color-secondary-200, ), ':hover': ( $ibo-color-secondary-200, $ibo-color-grey-900, $ibo-button--box-shadow-bottom $ibo-color-secondary-300, $ibo-color-secondary-300, ), ':active': ( $ibo-color-secondary-200, $ibo-color-grey-900, $ibo-button--box-shadow-top $ibo-color-secondary-300 #{','} $ibo-button--box-shadow-bottom $ibo-color-secondary-200, $ibo-color-secondary-200, ), ':disabled': ( $ibo-color-grey-300, $ibo-color-grey-700, $ibo-button--box-shadow-top $ibo-color-grey-300, $ibo-color-grey-500, ), ), /* Primary action does not have the colors from the primary brand color, at least not for now */ 'primary': ( '': ( $ibo-color-cyan-900, $ibo-color-white-100, $ibo-button--box-shadow-bottom $ibo-color-cyan-950, $ibo-color-cyan-900, ), ':hover': ( $ibo-color-cyan-950, $ibo-color-white-100, $ibo-button--box-shadow-bottom $ibo-color-cyan-900, $ibo-color-cyan-950, ), ':active': ( $ibo-color-cyan-950, $ibo-color-white-100, $ibo-button--box-shadow-top $ibo-color-cyan-900 #{','} $ibo-button--box-shadow-bottom $ibo-color-cyan-950, $ibo-color-cyan-950, ), ':disabled': ( $ibo-color-grey-300, $ibo-color-grey-700, $ibo-button--box-shadow-top $ibo-color-grey-300, $ibo-color-grey-500, ), ), 'secondary': ( '': ( $ibo-color-secondary-100, $ibo-color-grey-900, $ibo-button--box-shadow-bottom $ibo-color-secondary-200, $ibo-color-secondary-200, ), ':hover': ( $ibo-color-secondary-200, $ibo-color-grey-900, $ibo-button--box-shadow-bottom $ibo-color-secondary-300, $ibo-color-secondary-300, ), ':active': ( $ibo-color-secondary-200, $ibo-color-grey-900, $ibo-button--box-shadow-top $ibo-color-secondary-300 #{','} $ibo-button--box-shadow-bottom $ibo-color-secondary-200, $ibo-color-secondary-200, ), ':disabled': ( $ibo-color-grey-300, $ibo-color-grey-700, $ibo-button--box-shadow-top $ibo-color-grey-300, $ibo-color-grey-500, ), ), 'danger': ( '': ( $ibo-color-danger-900, $ibo-color-white-100, $ibo-button--box-shadow-bottom $ibo-color-danger-950, $ibo-color-danger-950, ), ':hover': ( $ibo-color-danger-950, $ibo-color-white-100, $ibo-button--box-shadow-bottom $ibo-color-danger-900, $ibo-color-danger-900, ), ':active': ( $ibo-color-danger-950, $ibo-color-white-100, $ibo-button--box-shadow-top $ibo-color-danger-950 #{','} $ibo-button--box-shadow-bottom $ibo-color-danger-900, $ibo-color-danger-900, ), ':disabled': ( $ibo-color-grey-300, $ibo-color-grey-700, $ibo-button--box-shadow-top $ibo-color-grey-300, $ibo-color-grey-500, ), ), 'success': ( '': ( $ibo-color-success-900, $ibo-color-white-100, $ibo-button--box-shadow-bottom $ibo-color-success-950, $ibo-color-success-900, ), ':hover': ( $ibo-color-success-950, $ibo-color-white-100, $ibo-button--box-shadow-bottom $ibo-color-success-900, $ibo-color-success-950, ), ':active': ( $ibo-color-success-950, $ibo-color-white-100, $ibo-button--box-shadow-top $ibo-color-success-900 #{','} $ibo-button--box-shadow-bottom $ibo-color-success-950, $ibo-color-success-950, ), ':disabled': ( $ibo-color-grey-300, $ibo-color-grey-700, $ibo-button--box-shadow-top $ibo-color-grey-300, $ibo-color-grey-500, ), ), /* Colors */ 'red': ( '': ( $ibo-color-red-900, $ibo-color-white-100, $ibo-button--box-shadow-bottom $ibo-color-red-900, $ibo-color-red-950, ), ':hover': ( $ibo-color-red-950, $ibo-color-white-100, $ibo-button--box-shadow-bottom $ibo-color-red-900, $ibo-color-red-950, ), ':active': ( $ibo-color-red-950, $ibo-color-white-100, $ibo-button--box-shadow-top $ibo-color-red-900 #{','} $ibo-button--box-shadow-bottom $ibo-color-red-950, $ibo-color-red-950, ), ':disabled': ( $ibo-color-grey-300, $ibo-color-grey-700, $ibo-button--box-shadow-top $ibo-color-grey-300, $ibo-color-grey-500, ), ), 'green': ( '': ( $ibo-color-green-900, $ibo-color-white-100, $ibo-button--box-shadow-bottom $ibo-color-green-950, $ibo-color-green-950, ), ':hover': ( $ibo-color-green-950, $ibo-color-white-100, $ibo-button--box-shadow-bottom $ibo-color-green-950, $ibo-color-green-950, ), ':active': ( $ibo-color-green-950, $ibo-color-white-100, $ibo-button--box-shadow-top $ibo-color-green-950 #{','} $ibo-button--box-shadow-bottom $ibo-color-green-950, $ibo-color-green-950, ), ':disabled': ( $ibo-color-grey-300, $ibo-color-grey-700, $ibo-button--box-shadow-top $ibo-color-grey-300, $ibo-color-grey-500, ), ), 'cyan': ( '': ( $ibo-color-cyan-900, $ibo-color-white-100, $ibo-button--box-shadow-bottom $ibo-color-cyan-950, $ibo-color-cyan-950, ), ':hover': ( $ibo-color-cyan-950, $ibo-color-white-100, $ibo-button--box-shadow-bottom $ibo-color-cyan-950, $ibo-color-cyan-950, ), ':active': ( $ibo-color-cyan-950, $ibo-color-white-100, $ibo-button--box-shadow-top $ibo-color-cyan-950 #{','} $ibo-button--box-shadow-bottom $ibo-color-cyan-950, $ibo-color-cyan-950, ), ':disabled': ( $ibo-color-grey-300, $ibo-color-grey-700, $ibo-button--box-shadow-top $ibo-color-grey-300, $ibo-color-grey-500, ), ) ), 'alternative': ( /* Semantics */ 'neutral': ( '': ( transparent, $ibo-color-grey-900, $ibo-button--box-shadow-bottom transparent, $ibo-color-grey-800, ), ':hover': ( $ibo-color-secondary-100, $ibo-color-grey-900, $ibo-button--box-shadow-bottom $ibo-color-secondary-100, $ibo-color-grey-800, ), ':active': ( $ibo-color-secondary-100, $ibo-color-grey-900, $ibo-button--box-shadow-top $ibo-color-secondary-200 #{','} $ibo-button--box-shadow-bottom $ibo-color-secondary-100, $ibo-color-grey-800, ), ':disabled': ( transparent, $ibo-color-grey-600, $ibo-button--box-shadow-top transparent, $ibo-color-grey-500, ), ), /* Primary action does not have the colors from the primary brand color, at least not for now */ 'primary': ( '': ( transparent, $ibo-color-cyan-950, $ibo-button--box-shadow-bottom transparent, $ibo-color-cyan-900, ), ':hover': ( $ibo-color-white-100, $ibo-color-grey-900, $ibo-button--box-shadow-bottom $ibo-color-white-100, $ibo-color-grey-800, ), ':active': ( $ibo-color-white-100, $ibo-color-grey-900, $ibo-button--box-shadow-top $ibo-color-white-100 #{','} $ibo-button--box-shadow-bottom $ibo-color-white-100, $ibo-color-grey-800, ), ':disabled': ( transparent, $ibo-color-grey-600, $ibo-button--box-shadow-top transparent, $ibo-color-grey-500, ), ), 'secondary': ( '': ( transparent, $ibo-color-grey-900, $ibo-button--box-shadow-bottom transparent, $ibo-color-grey-800, ), ':hover': ( $ibo-color-secondary-100, $ibo-color-grey-900, $ibo-button--box-shadow-bottom $ibo-color-secondary-100, $ibo-color-grey-800, ), ':active': ( $ibo-color-secondary-100, $ibo-color-grey-900, $ibo-button--box-shadow-top $ibo-color-secondary-200 #{','} $ibo-button--box-shadow-bottom $ibo-color-secondary-100, $ibo-color-grey-800, ), ':disabled': ( transparent, $ibo-color-grey-600, $ibo-button--box-shadow-top transparent, $ibo-color-grey-500, ), ), 'danger': ( '': ( transparent, $ibo-color-danger-950, $ibo-button--box-shadow-bottom transparent, $ibo-color-danger-600, ), ':hover': ( $ibo-color-danger-100, $ibo-color-danger-950, $ibo-button--box-shadow-bottom $ibo-color-danger-200, $ibo-color-danger-800, ), ':active': ( $ibo-color-danger-200, $ibo-color-danger-900, $ibo-button--box-shadow-top $ibo-color-danger-950 #{','} $ibo-button--box-shadow-bottom $ibo-color-danger-200, $ibo-color-danger-800, ), ':disabled': ( transparent, $ibo-color-grey-600, $ibo-button--box-shadow-top transparent, $ibo-color-grey-500, ), ), 'success': ( '': ( transparent, $ibo-color-success-950, $ibo-button--box-shadow-bottom transparent, $ibo-color-success-800, ), ':hover': ( $ibo-color-success-100, $ibo-color-success-950, $ibo-button--box-shadow-bottom $ibo-color-success-100, $ibo-color-success-950, ), ':active': ( $ibo-color-success-100, $ibo-color-success-900, $ibo-button--box-shadow-top $ibo-color-success-700 #{','} $ibo-button--box-shadow-bottom $ibo-color-success-100, $ibo-color-success-800, ), ':disabled': ( transparent, $ibo-color-grey-600, $ibo-button--box-shadow-top transparent, $ibo-color-grey-500, ), ), /* Colors */ 'red': ( '': ( transparent, $ibo-color-red-900, $ibo-button--box-shadow-bottom transparent, $ibo-color-red-600, ), ':hover': ( $ibo-color-red-200, $ibo-color-red-900, $ibo-button--box-shadow-bottom $ibo-color-red-200, $ibo-color-red-950, ), ':active': ( $ibo-color-red-200, $ibo-color-red-900, $ibo-button--box-shadow-top $ibo-color-red-900 #{','} $ibo-button--box-shadow-bottom $ibo-color-red-200, $ibo-color-red-950, ), ':disabled': ( transparent, $ibo-color-grey-600, $ibo-button--box-shadow-top transparent, $ibo-color-grey-500, ), ), 'green': ( '': ( transparent, $ibo-color-green-950, $ibo-button--box-shadow-bottom transparent, $ibo-color-green-900, ), ':hover': ( $ibo-color-green-100, $ibo-color-green-950, $ibo-button--box-shadow-bottom $ibo-color-green-100, $ibo-color-green-900, ), ':active': ( $ibo-color-green-100, $ibo-color-green-950, $ibo-button--box-shadow-top $ibo-color-green-700 #{','} $ibo-button--box-shadow-bottom $ibo-color-green-100, $ibo-color-green-900, ), ':disabled': ( transparent, $ibo-color-grey-600, $ibo-button--box-shadow-top transparent, $ibo-color-grey-500, ), ), 'cyan': ( '': ( transparent, $ibo-color-cyan-950, $ibo-button--box-shadow-bottom transparent, $ibo-color-cyan-900, ), ':hover': ( $ibo-color-cyan-100, $ibo-color-cyan-950, $ibo-button--box-shadow-bottom $ibo-color-cyan-100, $ibo-color-cyan-900, ), ':active': ( $ibo-color-cyan-100, $ibo-color-cyan-950, $ibo-button--box-shadow-top $ibo-color-cyan-900 #{','} $ibo-button--box-shadow-bottom $ibo-color-cyan-100, $ibo-color-cyan-900, ), ':disabled': ( transparent, $ibo-color-grey-600, $ibo-button--box-shadow-top transparent, $ibo-color-grey-500, ), ), )) !default; -$ibo-panel-colors: ('primary': $ibo-color-primary-800,'secondary': $ibo-color-secondary-800,'neutral': $ibo-color-grey-800,'information': $ibo-color-information-800,'success': $ibo-color-success-800,'failure': $ibo-color-danger-800,'warning': $ibo-color-warning-800,'danger': $ibo-color-danger-800,'grey' : $ibo-color-grey-800,'blue-grey': $ibo-color-blue-grey-800,'blue': $ibo-color-blue-800,'cyan': $ibo-color-cyan-800,'green': $ibo-color-green-800,'orange' : $ibo-color-orange-800,'red': $ibo-color-red-800,'pink': $ibo-color-pink-800,); +$ibo-panel-colors: ('primary': $ibo-color-primary-800,'secondary': $ibo-color-secondary-800,'neutral': $ibo-color-grey-800,'information': $ibo-color-information-800,'success': $ibo-color-success-800,'failure': $ibo-color-danger-800,'warning': $ibo-color-warning-800,'danger': $ibo-color-danger-800,'grey' : $ibo-color-grey-800,'blue-grey': $ibo-color-blue-grey-800,'blue': $ibo-color-blue-800,'cyan': $ibo-color-cyan-800,'green': $ibo-color-green-800,'orange' : $ibo-color-orange-800,'red': $ibo-color-red-800,'pink': $ibo-color-pink-800,) !default; -$ibo-welcome-popup--stack-item--border-color: $ibo-color-grey-950; -$ibo-welcome-popup--stack-item--is-active--border-color: $ibo-color-grey-900; +$ibo-welcome-popup--stack-item--border-color: $ibo-color-grey-950 !default; +$ibo-welcome-popup--stack-item--is-active--border-color: $ibo-color-grey-900 !default; $ibo-user-rights--is-success--background-color: $ibo-color-success-50 !default; $ibo-user-rights--is-success--color: $ibo-color-success-950 !default; diff --git a/datamodels/2.x/combodo-backoffice-fullmoon-protanopia-deuteranopia-theme/scss/scss-variables.scss b/datamodels/2.x/combodo-backoffice-fullmoon-protanopia-deuteranopia-theme/scss/scss-variables.scss index 96d658834..075c192fd 100644 --- a/datamodels/2.x/combodo-backoffice-fullmoon-protanopia-deuteranopia-theme/scss/scss-variables.scss +++ b/datamodels/2.x/combodo-backoffice-fullmoon-protanopia-deuteranopia-theme/scss/scss-variables.scss @@ -68,47 +68,47 @@ $ibo-color-information-900: #0f172a !default; $ibo-color-information-950: #020617 !default; -$ibo-lifecycle-new-state-primary-color: $ibo-color-information-600; -$ibo-lifecycle-new-state-secondary-color: $ibo-color-white-100; -$ibo-lifecycle-neutral-state-primary-color: $ibo-color-information-600; -$ibo-lifecycle-neutral-state-secondary-color: $ibo-color-white-100; -$ibo-lifecycle-waiting-state-primary-color: $ibo-color-yellow-700; -$ibo-lifecycle-waiting-state-secondary-color: $ibo-color-white-100; -$ibo-lifecycle-success-state-primary-color: $ibo-color-blue-700; -$ibo-lifecycle-success-state-secondary-color: $ibo-color-white-100; -$ibo-lifecycle-failure-state-primary-color: $ibo-color-orange-800; -$ibo-lifecycle-failure-state-secondary-color: $ibo-color-white-100; -$ibo-lifecycle-frozen-state-primary-color: $ibo-color-information-200; -$ibo-lifecycle-frozen-state-secondary-color: $ibo-color-information-700; +$ibo-lifecycle-new-state-primary-color: $ibo-color-information-600 !default; +$ibo-lifecycle-new-state-secondary-color: $ibo-color-white-100 !default; +$ibo-lifecycle-neutral-state-primary-color: $ibo-color-information-600 !default; +$ibo-lifecycle-neutral-state-secondary-color: $ibo-color-white-100 !default; +$ibo-lifecycle-waiting-state-primary-color: $ibo-color-yellow-700 !default; +$ibo-lifecycle-waiting-state-secondary-color: $ibo-color-white-100 !default; +$ibo-lifecycle-success-state-primary-color: $ibo-color-blue-700 !default; +$ibo-lifecycle-success-state-secondary-color: $ibo-color-white-100 !default; +$ibo-lifecycle-failure-state-primary-color: $ibo-color-orange-800 !default; +$ibo-lifecycle-failure-state-secondary-color: $ibo-color-white-100 !default; +$ibo-lifecycle-frozen-state-primary-color: $ibo-color-information-200 !default; +$ibo-lifecycle-frozen-state-secondary-color: $ibo-color-information-700 !default; -$ibo-lifecycle-active-state-primary-color: $ibo-color-blue-700; -$ibo-lifecycle-active-state-secondary-color: $ibo-color-white-100; -$ibo-lifecycle-inactive-state-primary-color: $ibo-color-yellow-700; -$ibo-lifecycle-inactive-state-secondary-color: $ibo-color-white-100; +$ibo-lifecycle-active-state-primary-color: $ibo-color-blue-700 !default; +$ibo-lifecycle-active-state-secondary-color: $ibo-color-white-100 !default; +$ibo-lifecycle-inactive-state-primary-color: $ibo-color-yellow-700 !default; +$ibo-lifecycle-inactive-state-secondary-color: $ibo-color-white-100 !default; -$ibo-caselog-highlight-color-1: $ibo-color-blue-700; -$ibo-caselog-highlight-color-2: $ibo-color-yellow-700; -$ibo-caselog-highlight-color-3: $ibo-color-information-600; -$ibo-caselog-highlight-color-4: $ibo-color-yellow-500; -$ibo-caselog-highlight-color-5: $ibo-color-blue-500; -$ibo-caselog-highlight-color-6: $ibo-color-yellow-300; -$ibo-caselog-highlight-color-7: $ibo-color-blue-300; +$ibo-caselog-highlight-color-1: $ibo-color-blue-700 !default; +$ibo-caselog-highlight-color-2: $ibo-color-yellow-700 !default; +$ibo-caselog-highlight-color-3: $ibo-color-information-600 !default; +$ibo-caselog-highlight-color-4: $ibo-color-yellow-500 !default; +$ibo-caselog-highlight-color-5: $ibo-color-blue-500 !default; +$ibo-caselog-highlight-color-6: $ibo-color-yellow-300 !default; +$ibo-caselog-highlight-color-7: $ibo-color-blue-300 !default; -$ibo-input-wrapper--is-error--border-color: $ibo-color-warning-700; -$ibo-field-validation: $ibo-color-warning-800; +$ibo-input-wrapper--is-error--border-color: $ibo-color-warning-700 !default; +$ibo-field-validation: $ibo-color-warning-800 !default; -$ibo-navigation-menu--visual-hint--background-color: $ibo-color-blue-400; +$ibo-navigation-menu--visual-hint--background-color: $ibo-color-blue-400 !default; -$ibo-wizard-container--background-color: $ibo-color-information-200; -$ibo-wizard-container--border-color: $ibo-color-information-600; +$ibo-wizard-container--background-color: $ibo-color-information-200 !default; +$ibo-wizard-container--border-color: $ibo-color-information-600 !default; -$ibo-navigation-menu--notifications--item--new-message-indicator--background-color: $ibo-color-white-100; -$ibo-navigation-menu--notifications--item--new-message-indicator--border: solid 2px $ibo-color-grey-500; -$ibo-navigation-menu--notifications--item--new-message-indicator--is-priority-1--background-color: $ibo-color-danger-100; -$ibo-navigation-menu--notifications--item--new-message-indicator--is-priority-1--border: solid 2px $ibo-color-danger-500; -$ibo-navigation-menu--notifications--item--new-message-indicator--is-priority-2--background-color: $ibo-color-warning-100; -$ibo-navigation-menu--notifications--item--new-message-indicator--is-priority-2--border: solid 2px $ibo-color-warning-500; -$ibo-navigation-menu--notifications--item--new-message-indicator--is-priority-3--background-color: $ibo-color-success-100; -$ibo-navigation-menu--notifications--item--new-message-indicator--is-priority-3--border: solid 2px $ibo-color-success-500; +$ibo-navigation-menu--notifications--item--new-message-indicator--background-color: $ibo-color-white-100 !default; +$ibo-navigation-menu--notifications--item--new-message-indicator--border: solid 2px $ibo-color-grey-500 !default; +$ibo-navigation-menu--notifications--item--new-message-indicator--is-priority-1--background-color: $ibo-color-danger-100 !default; +$ibo-navigation-menu--notifications--item--new-message-indicator--is-priority-1--border: solid 2px $ibo-color-danger-500 !default; +$ibo-navigation-menu--notifications--item--new-message-indicator--is-priority-2--background-color: $ibo-color-warning-100 !default; +$ibo-navigation-menu--notifications--item--new-message-indicator--is-priority-2--border: solid 2px $ibo-color-warning-500 !default; +$ibo-navigation-menu--notifications--item--new-message-indicator--is-priority-3--background-color: $ibo-color-success-100 !default; +$ibo-navigation-menu--notifications--item--new-message-indicator--is-priority-3--border: solid 2px $ibo-color-success-500 !default; -$ibo-notifications--view-all--item--unread--highlight--background-color: $ibo-color-blue-600; \ No newline at end of file +$ibo-notifications--view-all--item--unread--highlight--background-color: $ibo-color-blue-600 !default; \ No newline at end of file diff --git a/datamodels/2.x/combodo-backoffice-fullmoon-tritanopia-theme/scss/scss-variables.scss b/datamodels/2.x/combodo-backoffice-fullmoon-tritanopia-theme/scss/scss-variables.scss index 86af2fcf0..d0a1c4c57 100644 --- a/datamodels/2.x/combodo-backoffice-fullmoon-tritanopia-theme/scss/scss-variables.scss +++ b/datamodels/2.x/combodo-backoffice-fullmoon-tritanopia-theme/scss/scss-variables.scss @@ -32,47 +32,47 @@ $ibo-color-information-900: #0f172a !default; $ibo-color-information-950: #020617 !default; -$ibo-lifecycle-new-state-primary-color: $ibo-color-information-600; -$ibo-lifecycle-new-state-secondary-color: $ibo-color-white-100; -$ibo-lifecycle-neutral-state-primary-color: $ibo-color-information-600; -$ibo-lifecycle-neutral-state-secondary-color: $ibo-color-white-100; -$ibo-lifecycle-waiting-state-primary-color: $ibo-color-red-200; -$ibo-lifecycle-waiting-state-secondary-color: $ibo-color-red-800; -$ibo-lifecycle-success-state-primary-color: $ibo-color-blue-700; -$ibo-lifecycle-success-state-secondary-color: $ibo-color-white-100; -$ibo-lifecycle-failure-state-primary-color: $ibo-color-red-800; -$ibo-lifecycle-failure-state-secondary-color: $ibo-color-white-100; -$ibo-lifecycle-frozen-state-primary-color: $ibo-color-information-200; -$ibo-lifecycle-frozen-state-secondary-color: $ibo-color-information-700; +$ibo-lifecycle-new-state-primary-color: $ibo-color-information-600 !default; +$ibo-lifecycle-new-state-secondary-color: $ibo-color-white-100 !default; +$ibo-lifecycle-neutral-state-primary-color: $ibo-color-information-600 !default; +$ibo-lifecycle-neutral-state-secondary-color: $ibo-color-white-100 !default; +$ibo-lifecycle-waiting-state-primary-color: $ibo-color-red-200 !default; +$ibo-lifecycle-waiting-state-secondary-color: $ibo-color-red-800 !default; +$ibo-lifecycle-success-state-primary-color: $ibo-color-blue-700 !default; +$ibo-lifecycle-success-state-secondary-color: $ibo-color-white-100 !default; +$ibo-lifecycle-failure-state-primary-color: $ibo-color-red-800 !default; +$ibo-lifecycle-failure-state-secondary-color: $ibo-color-white-100 !default; +$ibo-lifecycle-frozen-state-primary-color: $ibo-color-information-200 !default; +$ibo-lifecycle-frozen-state-secondary-color: $ibo-color-information-700 !default; -$ibo-lifecycle-active-state-primary-color: $ibo-color-blue-700; -$ibo-lifecycle-active-state-secondary-color: $ibo-color-white-100; -$ibo-lifecycle-inactive-state-primary-color: $ibo-color-red-700; -$ibo-lifecycle-inactive-state-secondary-color: $ibo-color-white-100; +$ibo-lifecycle-active-state-primary-color: $ibo-color-blue-700 !default; +$ibo-lifecycle-active-state-secondary-color: $ibo-color-white-100 !default; +$ibo-lifecycle-inactive-state-primary-color: $ibo-color-red-700 !default; +$ibo-lifecycle-inactive-state-secondary-color: $ibo-color-white-100 !default; -$ibo-caselog-highlight-color-1: $ibo-color-blue-700; -$ibo-caselog-highlight-color-2: $ibo-color-red-700; -$ibo-caselog-highlight-color-3: $ibo-color-information-600; -$ibo-caselog-highlight-color-4: $ibo-color-red-500; -$ibo-caselog-highlight-color-5: $ibo-color-blue-500; -$ibo-caselog-highlight-color-6: $ibo-color-red-300; -$ibo-caselog-highlight-color-7: $ibo-color-blue-300; +$ibo-caselog-highlight-color-1: $ibo-color-blue-700 !default; +$ibo-caselog-highlight-color-2: $ibo-color-red-700 !default; +$ibo-caselog-highlight-color-3: $ibo-color-information-600 !default; +$ibo-caselog-highlight-color-4: $ibo-color-red-500 !default; +$ibo-caselog-highlight-color-5: $ibo-color-blue-500 !default; +$ibo-caselog-highlight-color-6: $ibo-color-red-300 !default; +$ibo-caselog-highlight-color-7: $ibo-color-blue-300 !default; -$ibo-input-wrapper--is-error--border-color: $ibo-color-pink-700; -$ibo-field-validation: $ibo-color-pink-800; +$ibo-input-wrapper--is-error--border-color: $ibo-color-pink-700 !default; +$ibo-field-validation: $ibo-color-pink-800 !default; -$ibo-navigation-menu--visual-hint--background-color: $ibo-color-pink-600; +$ibo-navigation-menu--visual-hint--background-color: $ibo-color-pink-600 !default; -$ibo-wizard-container--background-color: $ibo-color-information-200; -$ibo-wizard-container--border-color: $ibo-color-information-600; +$ibo-wizard-container--background-color: $ibo-color-information-200 !default; +$ibo-wizard-container--border-color: $ibo-color-information-600 !default; -$ibo-navigation-menu--notifications--item--new-message-indicator--background-color: $ibo-color-white-100; -$ibo-navigation-menu--notifications--item--new-message-indicator--border: solid 2px $ibo-color-grey-500; -$ibo-navigation-menu--notifications--item--new-message-indicator--is-priority-1--background-color: $ibo-color-pink-100; -$ibo-navigation-menu--notifications--item--new-message-indicator--is-priority-1--border: solid 2px $ibo-color-pink-600; -$ibo-navigation-menu--notifications--item--new-message-indicator--is-priority-2--background-color: $ibo-color-warning-100; -$ibo-navigation-menu--notifications--item--new-message-indicator--is-priority-2--border: solid 2px $ibo-color-warning-400; -$ibo-navigation-menu--notifications--item--new-message-indicator--is-priority-3--background-color: $ibo-color-success-100; -$ibo-navigation-menu--notifications--item--new-message-indicator--is-priority-3--border: solid 2px $ibo-color-success-500; +$ibo-navigation-menu--notifications--item--new-message-indicator--background-color: $ibo-color-white-100 !default; +$ibo-navigation-menu--notifications--item--new-message-indicator--border: solid 2px $ibo-color-grey-500 !default; +$ibo-navigation-menu--notifications--item--new-message-indicator--is-priority-1--background-color: $ibo-color-pink-100 !default; +$ibo-navigation-menu--notifications--item--new-message-indicator--is-priority-1--border: solid 2px $ibo-color-pink-600 !default; +$ibo-navigation-menu--notifications--item--new-message-indicator--is-priority-2--background-color: $ibo-color-warning-100 !default; +$ibo-navigation-menu--notifications--item--new-message-indicator--is-priority-2--border: solid 2px $ibo-color-warning-400 !default; +$ibo-navigation-menu--notifications--item--new-message-indicator--is-priority-3--background-color: $ibo-color-success-100 !default; +$ibo-navigation-menu--notifications--item--new-message-indicator--is-priority-3--border: solid 2px $ibo-color-success-500 !default; -$ibo-notifications--view-all--item--unread--highlight--background-color: $ibo-color-pink-500; \ No newline at end of file +$ibo-notifications--view-all--item--unread--highlight--background-color: $ibo-color-pink-500 !default; \ No newline at end of file diff --git a/datamodels/2.x/itop-attachments/dictionaries/en.dict.itop-attachments.php b/datamodels/2.x/itop-attachments/dictionaries/en.dict.itop-attachments.php index 3263ab53c..22ed209b8 100644 --- a/datamodels/2.x/itop-attachments/dictionaries/en.dict.itop-attachments.php +++ b/datamodels/2.x/itop-attachments/dictionaries/en.dict.itop-attachments.php @@ -47,7 +47,7 @@ or ask your '.ITOP_APPLICATION_SHORT.' administrator if the '.ITOP_APPLICATION_S Dict::Add('EN US', 'English', 'English', [ 'Class:Attachment' => 'Attachment', - 'Class:Attachment+' => '', + 'Class:Attachment+' => 'File: text or image, linked to a single object. It can\'t be modified, only deleted. Attachment can\'t be created outside of its object edition.', 'Class:Attachment/Attribute:expire' => 'Expire', 'Class:Attachment/Attribute:expire+' => '', 'Class:Attachment/Attribute:temp_id' => 'Temporary id', diff --git a/datamodels/2.x/itop-attachments/dictionaries/fr.dict.itop-attachments.php b/datamodels/2.x/itop-attachments/dictionaries/fr.dict.itop-attachments.php index 016362763..20895560a 100644 --- a/datamodels/2.x/itop-attachments/dictionaries/fr.dict.itop-attachments.php +++ b/datamodels/2.x/itop-attachments/dictionaries/fr.dict.itop-attachments.php @@ -38,8 +38,8 @@ Soit demandez à votre administrateur système s\'il reste de la place disque di // Dict::Add('FR FR', 'French', 'Français', [ - 'Class:Attachment' => 'Attachement', - 'Class:Attachment+' => '', + 'Class:Attachment' => 'Pièce jointe', + 'Class:Attachment+' => 'Fichier : texte ou image, associé à un et un seul object, supprimable mais non modifiable, non créable en dehors d\'un objet', 'Class:Attachment/Attribute:expire' => 'Expire', 'Class:Attachment/Attribute:expire+' => '', 'Class:Attachment/Attribute:temp_id' => 'Id Temporaire', @@ -82,12 +82,12 @@ Dict::Add('FR FR', 'French', 'Français', [ Dict::Add('FR FR', 'French', 'Français', [ 'Class:TriggerOnAttachmentDownload' => 'Déclencheur sur le téléchargement d\'une pièce jointe d\'un objet', - 'Class:TriggerOnAttachmentDownload+' => '', + 'Class:TriggerOnAttachmentDownload+' => 'Déclencheur sur le téléchargement d\'une pièce jointe depuis un objet de la classe donnée ou d\'une classe enfant.', 'Class:TriggerOnAttachmentCreate' => 'Déclencheur sur la création d\'une pièce jointe', - 'Class:TriggerOnAttachmentCreate+' => '', + 'Class:TriggerOnAttachmentCreate+' => 'Déclencheur sur la création d\'une pièce jointe d\'un objet', 'Class:TriggerOnAttachmentCreate/Attribute:file_in_email' => 'Ajoute le fichier dans l\'email', 'Class:TriggerOnAttachmentCreate/Attribute:file_in_email+' => 'Si coché, le fichier sera automatiquement attaché à l\'email quand l\'action email est lancée', 'Class:TriggerOnAttachmentDelete' => 'Déclencheur sur la suppression d\'une pièce jointe', - 'Class:TriggerOnAttachmentDelete+' => '', + 'Class:TriggerOnAttachmentDelete+' => 'Déclencheur sur la suppression d\'une pièce jointe d\'un objet', 'Class:TriggerOnObject:TriggerClassAttachment/ReadOnlyMessage' => 'Les Triggers sur les objets ne sont pas autorisés sur la classe Attachement. Veuillez utiliser les triggers spécifiques pour cette classe', ]); diff --git a/datamodels/2.x/itop-bridge-cmdb-services/dictionaries/en.dict.itop-bridge-cmdb-services.php b/datamodels/2.x/itop-bridge-cmdb-services/dictionaries/en.dict.itop-bridge-cmdb-services.php index b0dae014c..34674516c 100644 --- a/datamodels/2.x/itop-bridge-cmdb-services/dictionaries/en.dict.itop-bridge-cmdb-services.php +++ b/datamodels/2.x/itop-bridge-cmdb-services/dictionaries/en.dict.itop-bridge-cmdb-services.php @@ -35,7 +35,7 @@ Dict::Add('EN US', 'English', 'English', [ 'Class:lnkFunctionalCIToProviderContract' => 'Link FunctionalCI / ProviderContract', - 'Class:lnkFunctionalCIToProviderContract+' => '', + 'Class:lnkFunctionalCIToProviderContract+' => 'This link models the functional CIs that are supported by an external company through a provider contract.', 'Class:lnkFunctionalCIToProviderContract/Name' => '%1$s / %2$s', 'Class:lnkFunctionalCIToProviderContract/Attribute:providercontract_id' => 'Provider contract', 'Class:lnkFunctionalCIToProviderContract/Attribute:providercontract_id+' => '', @@ -53,7 +53,7 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:lnkFunctionalCIToService' => 'Link FunctionalCI / Service', - 'Class:lnkFunctionalCIToService+' => '', + 'Class:lnkFunctionalCIToService+' => 'This link models the functional CIs that are required to deliver a Service and whose malfunction would affect the quality of the Service.', 'Class:lnkFunctionalCIToService/Name' => '%1$s / %2$s', 'Class:lnkFunctionalCIToService/Attribute:service_id' => 'Service', 'Class:lnkFunctionalCIToService/Attribute:service_id+' => '', diff --git a/datamodels/2.x/itop-bridge-cmdb-services/dictionaries/fr.dict.itop-bridge-cmdb-services.php b/datamodels/2.x/itop-bridge-cmdb-services/dictionaries/fr.dict.itop-bridge-cmdb-services.php index 165798d72..521610379 100644 --- a/datamodels/2.x/itop-bridge-cmdb-services/dictionaries/fr.dict.itop-bridge-cmdb-services.php +++ b/datamodels/2.x/itop-bridge-cmdb-services/dictionaries/fr.dict.itop-bridge-cmdb-services.php @@ -12,8 +12,8 @@ * */ Dict::Add('FR FR', 'French', 'Français', [ - 'Class:lnkFunctionalCIToProviderContract' => 'Lien CI / Contrat fournisseur', - 'Class:lnkFunctionalCIToProviderContract+' => '', + 'Class:lnkFunctionalCIToProviderContract' => 'Lien CI fonctionnel / Contrat fournisseur', + 'Class:lnkFunctionalCIToProviderContract+' => 'Ce lien modélise les équipments (CI fonctionnel) qui sont supportés par une société externe à travers un Contrat fournisseur.', 'Class:lnkFunctionalCIToProviderContract/Name' => '%1$s / %2$s', 'Class:lnkFunctionalCIToProviderContract/Attribute:providercontract_id' => 'Contrat fournisseur', 'Class:lnkFunctionalCIToProviderContract/Attribute:providercontract_id+' => '', @@ -30,8 +30,8 @@ Dict::Add('FR FR', 'French', 'Français', [ // Dict::Add('FR FR', 'French', 'Français', [ - 'Class:lnkFunctionalCIToService' => 'Lien CI / Service', - 'Class:lnkFunctionalCIToService+' => '', + 'Class:lnkFunctionalCIToService' => 'Lien CI fonctionnel / Service', + 'Class:lnkFunctionalCIToService+' => 'Ce lien modélise les équipments (CI fonctionnel) qui sont nécessaires pour délivrer un Service et dont le dysfonctionnement affecterait la qualité du Service en question.', 'Class:lnkFunctionalCIToService/Name' => '%1$s / %2$s', 'Class:lnkFunctionalCIToService/Attribute:service_id' => 'Service', 'Class:lnkFunctionalCIToService/Attribute:service_id+' => '', diff --git a/datamodels/2.x/itop-bridge-cmdb-ticket/dictionaries/en.dict.itop-bridge-cmdb-ticket.php b/datamodels/2.x/itop-bridge-cmdb-ticket/dictionaries/en.dict.itop-bridge-cmdb-ticket.php index 076cd5bf4..45c6c5103 100644 --- a/datamodels/2.x/itop-bridge-cmdb-ticket/dictionaries/en.dict.itop-bridge-cmdb-ticket.php +++ b/datamodels/2.x/itop-bridge-cmdb-ticket/dictionaries/en.dict.itop-bridge-cmdb-ticket.php @@ -36,7 +36,7 @@ Dict::Add('EN US', 'English', 'English', [ 'Class:lnkFunctionalCIToTicket' => 'Link FunctionalCI / Ticket', - 'Class:lnkFunctionalCIToTicket+' => '', + 'Class:lnkFunctionalCIToTicket+' => 'This link models the functional CIs that are concerned by a Ticket (such as a User Request, an Incident, a Change, ...)', 'Class:lnkFunctionalCIToTicket/Name' => '%1$s / %2$s', 'Class:lnkFunctionalCIToTicket/Attribute:ticket_id' => 'Ticket', 'Class:lnkFunctionalCIToTicket/Attribute:ticket_id+' => '', diff --git a/datamodels/2.x/itop-bridge-cmdb-ticket/dictionaries/fr.dict.itop-bridge-cmdb-ticket.php b/datamodels/2.x/itop-bridge-cmdb-ticket/dictionaries/fr.dict.itop-bridge-cmdb-ticket.php index 2a6d179a8..ebaf89770 100644 --- a/datamodels/2.x/itop-bridge-cmdb-ticket/dictionaries/fr.dict.itop-bridge-cmdb-ticket.php +++ b/datamodels/2.x/itop-bridge-cmdb-ticket/dictionaries/fr.dict.itop-bridge-cmdb-ticket.php @@ -12,8 +12,8 @@ * */ Dict::Add('FR FR', 'French', 'Français', [ - 'Class:lnkFunctionalCIToTicket' => 'Lien CI / Ticket', - 'Class:lnkFunctionalCIToTicket+' => '', + 'Class:lnkFunctionalCIToTicket' => 'Lien CI fonctionnel / Ticket', + 'Class:lnkFunctionalCIToTicket+' => 'Ce lien modélise les équipments (CI fonctionnel) qui sont concernés par un Ticket (comme une Demande utilisateur, un Incident, un Changement,...)', 'Class:lnkFunctionalCIToTicket/Name' => '%1$s / %2$s', 'Class:lnkFunctionalCIToTicket/Attribute:ticket_id' => 'Ticket', 'Class:lnkFunctionalCIToTicket/Attribute:ticket_id+' => '', diff --git a/datamodels/2.x/itop-change-mgmt-itil/dictionaries/en.dict.itop-change-mgmt-itil.php b/datamodels/2.x/itop-change-mgmt-itil/dictionaries/en.dict.itop-change-mgmt-itil.php index d8b464bae..1c7dc2ee2 100644 --- a/datamodels/2.x/itop-change-mgmt-itil/dictionaries/en.dict.itop-change-mgmt-itil.php +++ b/datamodels/2.x/itop-change-mgmt-itil/dictionaries/en.dict.itop-change-mgmt-itil.php @@ -64,7 +64,7 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:Change' => 'Change', - 'Class:Change+' => '', + 'Class:Change+' => 'Abstract class. A type of Ticket to handle Change which has an effect on delivered Services.', 'Class:Change/Attribute:status' => 'Status', 'Class:Change/Attribute:status+' => '', 'Class:Change/Attribute:status/Value:new' => 'New', @@ -167,7 +167,7 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:RoutineChange' => 'Routine Change', - 'Class:RoutineChange+' => '', + 'Class:RoutineChange+' => 'Standard change with low risk, without the need for additional authorization, and for which a validated procedure exists and must be applied.', 'Class:RoutineChange/Stimulus:ev_validate' => 'Validate', 'Class:RoutineChange/Stimulus:ev_validate+' => '', 'Class:RoutineChange/Stimulus:ev_reject' => 'Reject', @@ -197,8 +197,8 @@ Dict::Add('EN US', 'English', 'English', [ // Dict::Add('EN US', 'English', 'English', [ - 'Class:ApprovedChange' => 'Approved Changes', - 'Class:ApprovedChange+' => '', + 'Class:ApprovedChange' => 'Change To Approve', + 'Class:ApprovedChange+' => 'Abstract class. Normal Change and Emergency Change which requires an approval.', 'Class:ApprovedChange/Attribute:approval_date' => 'Approval Date', 'Class:ApprovedChange/Attribute:approval_date+' => '', 'Class:ApprovedChange/Attribute:approval_comment' => 'Approval comment', @@ -233,7 +233,7 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:NormalChange' => 'Normal Change', - 'Class:NormalChange+' => '', + 'Class:NormalChange+' => 'Type of Change', 'Class:NormalChange/Attribute:acceptance_date' => 'Acceptance date', 'Class:NormalChange/Attribute:acceptance_date+' => '', 'Class:NormalChange/Attribute:acceptance_comment' => 'Acceptance comment', @@ -268,7 +268,7 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:EmergencyChange' => 'Emergency Change', - 'Class:EmergencyChange+' => '', + 'Class:EmergencyChange+' => 'Change Ticket to manage emergency situations (malfunctions, security). The approval process is accelerated. The Emergency Change is implemented as soon as possible.', 'Class:EmergencyChange/Stimulus:ev_validate' => 'Validate', 'Class:EmergencyChange/Stimulus:ev_validate+' => '', 'Class:EmergencyChange/Stimulus:ev_reject' => 'Reject', diff --git a/datamodels/2.x/itop-change-mgmt-itil/dictionaries/fr.dict.itop-change-mgmt-itil.php b/datamodels/2.x/itop-change-mgmt-itil/dictionaries/fr.dict.itop-change-mgmt-itil.php index 024c85fb1..5b6837222 100644 --- a/datamodels/2.x/itop-change-mgmt-itil/dictionaries/fr.dict.itop-change-mgmt-itil.php +++ b/datamodels/2.x/itop-change-mgmt-itil/dictionaries/fr.dict.itop-change-mgmt-itil.php @@ -51,8 +51,8 @@ Dict::Add('FR FR', 'French', 'Français', [ // Dict::Add('FR FR', 'French', 'Français', [ - 'Class:Change' => 'Ticket de Changement', - 'Class:Change+' => '', + 'Class:Change' => 'Ticket de changement', + 'Class:Change+' => 'Classe abstraite. Une catégorie de Ticket pour gérer les Changements qui peuvent avoir un effet sur les Services délivrés.', 'Class:Change/Attribute:status' => 'Etat', 'Class:Change/Attribute:status+' => '', 'Class:Change/Attribute:status/Value:new' => 'Nouveau', @@ -178,8 +178,8 @@ Dict::Add('FR FR', 'French', 'Français', [ // Dict::Add('FR FR', 'French', 'Français', [ - 'Class:RoutineChange' => 'Changement de Routine', - 'Class:RoutineChange+' => '', + 'Class:RoutineChange' => 'Changement de routine', + 'Class:RoutineChange+' => 'Changement standard à faible risque, sans nécessité d\'autorisation supplémentaire, et pour lequel une procédure validée existe et doit être appliquée.', 'Class:RoutineChange/Stimulus:ev_validate' => 'Valider', 'Class:RoutineChange/Stimulus:ev_validate+' => '', 'Class:RoutineChange/Stimulus:ev_reject' => 'Refuser', @@ -209,8 +209,8 @@ Dict::Add('FR FR', 'French', 'Français', [ // Dict::Add('FR FR', 'French', 'Français', [ - 'Class:ApprovedChange' => 'Changement pré-approuvé', - 'Class:ApprovedChange+' => '', + 'Class:ApprovedChange' => 'Changement à approuver', + 'Class:ApprovedChange+' => 'Classe abstraite. Changement normal ou Changement urgent qui nécessite une approbation.', 'Class:ApprovedChange/Attribute:approval_date' => 'Date d\'approbation', 'Class:ApprovedChange/Attribute:approval_date+' => '', 'Class:ApprovedChange/Attribute:approval_comment' => 'Commentaire sur l\'approbation', @@ -244,8 +244,8 @@ Dict::Add('FR FR', 'French', 'Français', [ // Dict::Add('FR FR', 'French', 'Français', [ - 'Class:NormalChange' => 'Changement Normal', - 'Class:NormalChange+' => '', + 'Class:NormalChange' => 'Changement normal', + 'Class:NormalChange+' => 'Type de Changement. A planifier, à évaluer et à autoriser avant son déploiement. Utilisé pour les changements à risque moyen ou fort, non standardisé et non urgent', 'Class:NormalChange/Attribute:acceptance_date' => 'Date d\'acceptation', 'Class:NormalChange/Attribute:acceptance_date+' => '', 'Class:NormalChange/Attribute:acceptance_comment' => 'Commentaire sur l\'acceptation', @@ -280,7 +280,7 @@ Dict::Add('FR FR', 'French', 'Français', [ Dict::Add('FR FR', 'French', 'Français', [ 'Class:EmergencyChange' => 'Changement urgent', - 'Class:EmergencyChange+' => '', + 'Class:EmergencyChange+' => 'Ticket de Changement pour gérer les cas d\'urgence (dysfonctionnement, sécurité). Le processus d\'approbation est accéléré. Le Changement urgent est effectué dès que possible.', 'Class:EmergencyChange/Stimulus:ev_validate' => 'Valider', 'Class:EmergencyChange/Stimulus:ev_validate+' => '', 'Class:EmergencyChange/Stimulus:ev_reject' => 'Rejeter', diff --git a/datamodels/2.x/itop-change-mgmt-itil/dictionaries/sk.dict.itop-change-mgmt-itil.php b/datamodels/2.x/itop-change-mgmt-itil/dictionaries/sk.dict.itop-change-mgmt-itil.php index 3c3dd1ee0..b5d4d30a6 100644 --- a/datamodels/2.x/itop-change-mgmt-itil/dictionaries/sk.dict.itop-change-mgmt-itil.php +++ b/datamodels/2.x/itop-change-mgmt-itil/dictionaries/sk.dict.itop-change-mgmt-itil.php @@ -185,7 +185,7 @@ Dict::Add('SK SK', 'Slovak', 'Slovenčina', [ // Dict::Add('SK SK', 'Slovak', 'Slovenčina', [ - 'Class:ApprovedChange' => 'Approved Changes~~', + 'Class:ApprovedChange' => 'Change To Approve~~', 'Class:ApprovedChange+' => '~~', 'Class:ApprovedChange/Attribute:approval_date' => 'Approval Date~~', 'Class:ApprovedChange/Attribute:approval_date+' => '~~', diff --git a/datamodels/2.x/itop-change-mgmt/dictionaries/en.dict.itop-change-mgmt.php b/datamodels/2.x/itop-change-mgmt/dictionaries/en.dict.itop-change-mgmt.php index 9324d8b04..d52d47995 100644 --- a/datamodels/2.x/itop-change-mgmt/dictionaries/en.dict.itop-change-mgmt.php +++ b/datamodels/2.x/itop-change-mgmt/dictionaries/en.dict.itop-change-mgmt.php @@ -64,7 +64,7 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:Change' => 'Change', - 'Class:Change+' => '', + 'Class:Change+' => 'A type of Ticket to handle Change which has an effect on delivered Services.', 'Class:Change/Attribute:status' => 'Status', 'Class:Change/Attribute:status+' => '', 'Class:Change/Attribute:status/Value:new' => 'New', diff --git a/datamodels/2.x/itop-change-mgmt/dictionaries/fr.dict.itop-change-mgmt.php b/datamodels/2.x/itop-change-mgmt/dictionaries/fr.dict.itop-change-mgmt.php index 37c27f977..79a4013d1 100644 --- a/datamodels/2.x/itop-change-mgmt/dictionaries/fr.dict.itop-change-mgmt.php +++ b/datamodels/2.x/itop-change-mgmt/dictionaries/fr.dict.itop-change-mgmt.php @@ -51,8 +51,8 @@ Dict::Add('FR FR', 'French', 'Français', [ // Dict::Add('FR FR', 'French', 'Français', [ - 'Class:Change' => 'Ticket de Changement', - 'Class:Change+' => '', + 'Class:Change' => 'Ticket de changement', + 'Class:Change+' => 'Une catégorie de Ticket pour gérer les Changements qui peuvent avoir un effet sur les Services délivrés.', 'Class:Change/Attribute:status' => 'Etat', 'Class:Change/Attribute:status+' => '', 'Class:Change/Attribute:status/Value:new' => 'Nouveau', diff --git a/datamodels/2.x/itop-config-mgmt/assets/img/icon-acer.svg b/datamodels/2.x/itop-config-mgmt/assets/img/icon-acer.svg new file mode 100644 index 000000000..b719b696d --- /dev/null +++ b/datamodels/2.x/itop-config-mgmt/assets/img/icon-acer.svg @@ -0,0 +1,43 @@ + + + + diff --git a/datamodels/2.x/itop-config-mgmt/assets/img/icon-cisco.svg b/datamodels/2.x/itop-config-mgmt/assets/img/icon-cisco.svg new file mode 100644 index 000000000..704a5f1ac --- /dev/null +++ b/datamodels/2.x/itop-config-mgmt/assets/img/icon-cisco.svg @@ -0,0 +1,124 @@ + + + + + + Cisco.com France + + + + + + + + + + + + + + + + + + + + + + + + Cisco.com France + + + + diff --git a/datamodels/2.x/itop-config-mgmt/assets/img/icon-hpe.svg b/datamodels/2.x/itop-config-mgmt/assets/img/icon-hpe.svg new file mode 100644 index 000000000..46749147b --- /dev/null +++ b/datamodels/2.x/itop-config-mgmt/assets/img/icon-hpe.svg @@ -0,0 +1,56 @@ + + + + + + + + diff --git a/datamodels/2.x/itop-config-mgmt/assets/img/icon-oracle-linux.svg b/datamodels/2.x/itop-config-mgmt/assets/img/icon-oracle-linux.svg new file mode 100644 index 000000000..29e667f55 --- /dev/null +++ b/datamodels/2.x/itop-config-mgmt/assets/img/icon-oracle-linux.svg @@ -0,0 +1,56 @@ + + diff --git a/datamodels/2.x/itop-config-mgmt/assets/img/icon-sony.svg b/datamodels/2.x/itop-config-mgmt/assets/img/icon-sony.svg new file mode 100644 index 000000000..47fcccd68 --- /dev/null +++ b/datamodels/2.x/itop-config-mgmt/assets/img/icon-sony.svg @@ -0,0 +1,52 @@ + + + + + + + + + + + + diff --git a/datamodels/2.x/itop-config-mgmt/assets/img/icons8-acess-point.svg b/datamodels/2.x/itop-config-mgmt/assets/img/icons8-acess-point.svg new file mode 100644 index 000000000..370cd7680 --- /dev/null +++ b/datamodels/2.x/itop-config-mgmt/assets/img/icons8-acess-point.svg @@ -0,0 +1,281 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/datamodels/2.x/itop-config-mgmt/assets/img/icons8-arch-linux.svg b/datamodels/2.x/itop-config-mgmt/assets/img/icons8-arch-linux.svg new file mode 100644 index 000000000..410545037 --- /dev/null +++ b/datamodels/2.x/itop-config-mgmt/assets/img/icons8-arch-linux.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/datamodels/2.x/itop-config-mgmt/assets/img/icons8-asus.svg b/datamodels/2.x/itop-config-mgmt/assets/img/icons8-asus.svg new file mode 100644 index 000000000..9e4cd6a26 --- /dev/null +++ b/datamodels/2.x/itop-config-mgmt/assets/img/icons8-asus.svg @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/datamodels/2.x/itop-config-mgmt/assets/img/icons8-debian.svg b/datamodels/2.x/itop-config-mgmt/assets/img/icons8-debian.svg new file mode 100644 index 000000000..3abbc6c75 --- /dev/null +++ b/datamodels/2.x/itop-config-mgmt/assets/img/icons8-debian.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/datamodels/2.x/itop-config-mgmt/assets/img/icons8-dell.svg b/datamodels/2.x/itop-config-mgmt/assets/img/icons8-dell.svg new file mode 100644 index 000000000..d19e5cbda --- /dev/null +++ b/datamodels/2.x/itop-config-mgmt/assets/img/icons8-dell.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/datamodels/2.x/itop-config-mgmt/assets/img/icons8-firewall.svg b/datamodels/2.x/itop-config-mgmt/assets/img/icons8-firewall.svg new file mode 100644 index 000000000..6090d5fb4 --- /dev/null +++ b/datamodels/2.x/itop-config-mgmt/assets/img/icons8-firewall.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/datamodels/2.x/itop-config-mgmt/assets/img/icons8-hp.svg b/datamodels/2.x/itop-config-mgmt/assets/img/icons8-hp.svg new file mode 100644 index 000000000..02446d694 --- /dev/null +++ b/datamodels/2.x/itop-config-mgmt/assets/img/icons8-hp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/datamodels/2.x/itop-config-mgmt/assets/img/icons8-ibm.svg b/datamodels/2.x/itop-config-mgmt/assets/img/icons8-ibm.svg new file mode 100644 index 000000000..0572dc08d --- /dev/null +++ b/datamodels/2.x/itop-config-mgmt/assets/img/icons8-ibm.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/datamodels/2.x/itop-config-mgmt/assets/img/icons8-lenovo.svg b/datamodels/2.x/itop-config-mgmt/assets/img/icons8-lenovo.svg new file mode 100644 index 000000000..2001ca4f3 --- /dev/null +++ b/datamodels/2.x/itop-config-mgmt/assets/img/icons8-lenovo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/datamodels/2.x/itop-config-mgmt/assets/img/icons8-loadbalancer.svg b/datamodels/2.x/itop-config-mgmt/assets/img/icons8-loadbalancer.svg new file mode 100644 index 000000000..eb284ddd3 --- /dev/null +++ b/datamodels/2.x/itop-config-mgmt/assets/img/icons8-loadbalancer.svg @@ -0,0 +1,395 @@ + + diff --git a/datamodels/2.x/itop-config-mgmt/assets/img/icons8-mac-os.svg b/datamodels/2.x/itop-config-mgmt/assets/img/icons8-mac-os.svg new file mode 100644 index 000000000..dc86107db --- /dev/null +++ b/datamodels/2.x/itop-config-mgmt/assets/img/icons8-mac-os.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/datamodels/2.x/itop-config-mgmt/assets/img/icons8-razer.svg b/datamodels/2.x/itop-config-mgmt/assets/img/icons8-razer.svg new file mode 100644 index 000000000..7903dd0b1 --- /dev/null +++ b/datamodels/2.x/itop-config-mgmt/assets/img/icons8-razer.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/datamodels/2.x/itop-config-mgmt/assets/img/icons8-red-hat.svg b/datamodels/2.x/itop-config-mgmt/assets/img/icons8-red-hat.svg new file mode 100644 index 000000000..44b7708d3 --- /dev/null +++ b/datamodels/2.x/itop-config-mgmt/assets/img/icons8-red-hat.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/datamodels/2.x/itop-config-mgmt/assets/img/icons8-router-4g.svg b/datamodels/2.x/itop-config-mgmt/assets/img/icons8-router-4g.svg new file mode 100644 index 000000000..ada871d20 --- /dev/null +++ b/datamodels/2.x/itop-config-mgmt/assets/img/icons8-router-4g.svg @@ -0,0 +1,309 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/datamodels/2.x/itop-config-mgmt/assets/img/icons8-router.svg b/datamodels/2.x/itop-config-mgmt/assets/img/icons8-router.svg new file mode 100644 index 000000000..7f777a267 --- /dev/null +++ b/datamodels/2.x/itop-config-mgmt/assets/img/icons8-router.svg @@ -0,0 +1,284 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/datamodels/2.x/itop-config-mgmt/assets/img/icons8-samsung.svg b/datamodels/2.x/itop-config-mgmt/assets/img/icons8-samsung.svg new file mode 100644 index 000000000..6dbdacc03 --- /dev/null +++ b/datamodels/2.x/itop-config-mgmt/assets/img/icons8-samsung.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/datamodels/2.x/itop-config-mgmt/assets/img/icons8-ubuntu.svg b/datamodels/2.x/itop-config-mgmt/assets/img/icons8-ubuntu.svg new file mode 100644 index 000000000..7e37db4cb --- /dev/null +++ b/datamodels/2.x/itop-config-mgmt/assets/img/icons8-ubuntu.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/datamodels/2.x/itop-config-mgmt/assets/img/icons8-windows-server.svg b/datamodels/2.x/itop-config-mgmt/assets/img/icons8-windows-server.svg new file mode 100644 index 000000000..eb962316b --- /dev/null +++ b/datamodels/2.x/itop-config-mgmt/assets/img/icons8-windows-server.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/datamodels/2.x/itop-config-mgmt/assets/img/icons8-windows.svg b/datamodels/2.x/itop-config-mgmt/assets/img/icons8-windows.svg new file mode 100644 index 000000000..c92202534 --- /dev/null +++ b/datamodels/2.x/itop-config-mgmt/assets/img/icons8-windows.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/datamodels/2.x/itop-config-mgmt/assets/img/logo-toshiba.svg b/datamodels/2.x/itop-config-mgmt/assets/img/logo-toshiba.svg new file mode 100644 index 000000000..8b4065ab1 --- /dev/null +++ b/datamodels/2.x/itop-config-mgmt/assets/img/logo-toshiba.svg @@ -0,0 +1,40 @@ + + + + diff --git a/datamodels/2.x/itop-config-mgmt/data.sample.applications.xml b/datamodels/2.x/itop-config-mgmt/data/data.sample.applications.xml old mode 100755 new mode 100644 similarity index 100% rename from datamodels/2.x/itop-config-mgmt/data.sample.applications.xml rename to datamodels/2.x/itop-config-mgmt/data/data.sample.applications.xml diff --git a/datamodels/2.x/itop-config-mgmt/data.sample.applicationsolutionci.xml b/datamodels/2.x/itop-config-mgmt/data/data.sample.applicationsolutionci.xml old mode 100755 new mode 100644 similarity index 100% rename from datamodels/2.x/itop-config-mgmt/data.sample.applicationsolutionci.xml rename to datamodels/2.x/itop-config-mgmt/data/data.sample.applicationsolutionci.xml diff --git a/datamodels/2.x/itop-config-mgmt/data.sample.dbschema.xml b/datamodels/2.x/itop-config-mgmt/data/data.sample.dbschema.xml old mode 100755 new mode 100644 similarity index 100% rename from datamodels/2.x/itop-config-mgmt/data.sample.dbschema.xml rename to datamodels/2.x/itop-config-mgmt/data/data.sample.dbschema.xml diff --git a/datamodels/2.x/itop-config-mgmt/data.sample.dbserver.xml b/datamodels/2.x/itop-config-mgmt/data/data.sample.dbserver.xml old mode 100755 new mode 100644 similarity index 100% rename from datamodels/2.x/itop-config-mgmt/data.sample.dbserver.xml rename to datamodels/2.x/itop-config-mgmt/data/data.sample.dbserver.xml diff --git a/datamodels/2.x/itop-config-mgmt/data.sample.model.xml b/datamodels/2.x/itop-config-mgmt/data/data.sample.model.xml old mode 100755 new mode 100644 similarity index 100% rename from datamodels/2.x/itop-config-mgmt/data.sample.model.xml rename to datamodels/2.x/itop-config-mgmt/data/data.sample.model.xml diff --git a/datamodels/2.x/itop-config-mgmt/data.sample.networkdevicetype.xml b/datamodels/2.x/itop-config-mgmt/data/data.sample.networkdevicetype.xml old mode 100755 new mode 100644 similarity index 100% rename from datamodels/2.x/itop-config-mgmt/data.sample.networkdevicetype.xml rename to datamodels/2.x/itop-config-mgmt/data/data.sample.networkdevicetype.xml diff --git a/datamodels/2.x/itop-config-mgmt/data.sample.nw-devices.xml b/datamodels/2.x/itop-config-mgmt/data/data.sample.nw-devices.xml old mode 100755 new mode 100644 similarity index 98% rename from datamodels/2.x/itop-config-mgmt/data.sample.nw-devices.xml rename to datamodels/2.x/itop-config-mgmt/data/data.sample.nw-devices.xml index 44a9a3a19..1830bd2d2 --- a/datamodels/2.x/itop-config-mgmt/data.sample.nw-devices.xml +++ b/datamodels/2.x/itop-config-mgmt/data/data.sample.nw-devices.xml @@ -10,7 +10,7 @@ 1 production 10 -0 +5 diff --git a/datamodels/2.x/itop-config-mgmt/data.sample.servers.xml b/datamodels/2.x/itop-config-mgmt/data/data.sample.servers.xml old mode 100755 new mode 100644 similarity index 100% rename from datamodels/2.x/itop-config-mgmt/data.sample.servers.xml rename to datamodels/2.x/itop-config-mgmt/data/data.sample.servers.xml diff --git a/datamodels/2.x/itop-config-mgmt/data.sample.software.xml b/datamodels/2.x/itop-config-mgmt/data/data.sample.software.xml old mode 100755 new mode 100644 similarity index 100% rename from datamodels/2.x/itop-config-mgmt/data.sample.software.xml rename to datamodels/2.x/itop-config-mgmt/data/data.sample.software.xml diff --git a/datamodels/2.x/itop-config-mgmt/data.sample.webapp.xml b/datamodels/2.x/itop-config-mgmt/data/data.sample.webapp.xml old mode 100755 new mode 100644 similarity index 100% rename from datamodels/2.x/itop-config-mgmt/data.sample.webapp.xml rename to datamodels/2.x/itop-config-mgmt/data/data.sample.webapp.xml diff --git a/datamodels/2.x/itop-config-mgmt/data.sample.webserver.xml b/datamodels/2.x/itop-config-mgmt/data/data.sample.webserver.xml old mode 100755 new mode 100644 similarity index 100% rename from datamodels/2.x/itop-config-mgmt/data.sample.webserver.xml rename to datamodels/2.x/itop-config-mgmt/data/data.sample.webserver.xml diff --git a/datamodels/2.x/itop-config-mgmt/data/en_us.data.itop-brand.xml b/datamodels/2.x/itop-config-mgmt/data/en_us.data.itop-brand.xml index 0518c0690..58c5690b6 100755 --- a/datamodels/2.x/itop-config-mgmt/data/en_us.data.itop-brand.xml +++ b/datamodels/2.x/itop-config-mgmt/data/en_us.data.itop-brand.xml @@ -1,6 +1,6 @@ - + Acer image/svg+xmlicon-acer.svgPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cjxzdmc6c3ZnIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIiB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiIHhtbG5zOnN2Zz0iaH R0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgaWQ9ImFjZXIiIHg9IjBweCIgeT0iMHB4IiB3aWR0aD0iODMiIGhlaWdodD0iODMiIHZpZXdCb3g9IjAgMCA4MyA4MyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIgc29kaXBvZGk6ZG9jbmFtZT0iaWNvbi1hY2VyLnN2ZyIgaW5rc2NhcGU6dmVyc2lvbj0iMS40LjMgKDBkMTVmNzUwNDIsIDIwMjUtMTItMjUpIj48c3ZnOmRlZnMgaWQ9ImRlZnMxIi8+PHNvZGlwb2RpOm5hbWVkdmlldyBpZD0ibmFtZWR2 @@ -45,7 +45,7 @@ Brand Asus - + Cisco image/svg+xmlicon-cisco.svgPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiIHhtbG5zOnNvZGlwb2RpPSJodHRwOi8vc29kaXBvZGkuc291cmNlZm9yZ2UubmV0L0RURC9zb2RpcG9kaS0wLmR0ZCIgeG1sbnM9Imh0dHA6Ly93d 3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgd2lkdGg9IjEwOCIgaGVpZ2h0PSIxMDgiIHZpZXdCb3g9IjAgMCAxMDggMTA4IiByb2xlPSJpbWciIHZlcnNpb24 @@ -74,7 +74,7 @@ Brand Dell - + HP Inc image/svg+xmlicons8-hp.svgPD94bWwgdmVyc2lvbj0iMS4wIj8+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgNDggNDgiIHdpZHRoPSI0OHB4IiBoZWlnaHQ9IjQ4cHgiPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik0yNCA0QTIwIDIwIDAgMSAwIDI0IDQ0QTIwIDIwIDAgMSAwIDI0IDRaIi8+PHBhdGggZmlsbD0iIzE5NzZkMiIgZD0iTTI0LDQzLj k5N2MtMC4xOTksMC0wLjY1MiwwLjAwNi0wLjg1LDBsNC0xMC45OTloNS42MjVjMC45ODcsMCwyLjA3MS0wLjc1OSwyLjQwOS0xLjY4Nmw0Ljc0OC0xMi42ODdjMC43MjUtMS45OTUtMC40MTctMy42MjYtMi41MzktMy42MjZoLTcuODA0bC02LjUxOCwxOC4yNTdoLTAuMDAybC0zLjcxMiwxMC4xOThDMTAuNTUsNDEuMzYxLDQsMzMuNDQ1LDQsMjMuOTk5YzAtOS4xNzQsNi4xNzgtMTYuOTA1LDE0LjYtMTkuMjYxbC0zLjgzLDEwLjUyNmgtMC4wMDFMOC4xNSwzMi45OTho @@ -82,7 +82,7 @@ Brand HP Inc - + HPE image/svg+xmlicon-hpe.svgPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiIHhtbG5zOnNvZGlwb2RpPSJodHRwOi8vc29kaXBvZGkuc291cmNlZm9yZ2UubmV0L0RURC9zb2RpcG9kaS0wLmR0ZCIgeG1sbnM9Imh0dHA6Ly93d3c udzMub3JnLzIwMDAvc3ZnIiB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjAiIGlkPSJrYXRtYW5fMSIgeD0iMHB4IiB5PSIwcHgiIHZpZXdCb3g9IjAgMCA2MzAgNjMwIiB4bWw6c3BhY2U9InByZXNlcnZlIiBzb2RpcG9kaTpkb2NuYW1lPSJpY29uLWhwZS5zdmciIHdpZHRoPSI2MzAiIGhlaWdodD0iNjMwIiBpbmtzY2FwZTp2ZXJzaW9uPSIxLjQuMyAoMGQxNWY3NTA0MiwgMjAyNS0xMi0yNSkiPjxkZWZzIGlkPSJkZWZzM @@ -117,7 +117,7 @@ Brand Lenovo - + Razer image/svg+xmlicons8-razer.svgPD94bWwgdmVyc2lvbj0iMS4wIj8+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgNDggNDgiIHdpZHRoPSI0OHB4IiBoZWlnaHQ9IjQ4cHgiPjxwYXRoIGZpbGw9IiM2NGRkMTciIGQ9Ik0yNiwyMGMwLjEsMCwwLjIsMCwwLjMsMGMwLjMtMC4xLDAuNS0wLjMsMC42LTAuNWMwLjEtMC4yLDAuMS0wLjUsMC4xLTA uOGMtMC4yLTAuNi0xLTEuOC0yLTIuNCBjMCwwLjcsMCwxLjMsMCwxLjljMCwwLjUsMCwxLDAsMS4yYzAuMSwwLjIsMC4zLDAuNCwwLjUsMC42QzI1LjcsMjAsMjUuOCwyMCwyNiwyMCBNMjkuNCwyM2MwLjcsMCwxLjYtMC4xLDIuMy0wLjUgYy0wLjUtMC4zLTEtMC42LTEuNS0wLjljLTAuNC0wLjMtMC45LTAuNi0xLjEtMC42YzAsMC0wLjEsMC0wLjEsMGMtMC4yLDAtMC40LDAuMS0wLjYsMC4yYy0wLjIsMC4xLTAuNCwwLjQtMC40LDAuNiBjLTAuMSwwLjUsMC4zLDEuM diff --git a/datamodels/2.x/itop-config-mgmt/data/en_us.data.itop-networkdevicetype.xml b/datamodels/2.x/itop-config-mgmt/data/en_us.data.itop-networkdevicetype.xml new file mode 100644 index 000000000..59ebc1192 --- /dev/null +++ b/datamodels/2.x/itop-config-mgmt/data/en_us.data.itop-networkdevicetype.xml @@ -0,0 +1,256 @@ + + + + Firewall + image/pngfirewall.pngiVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAAABmJLR0QA/wD/AP+gvaeTAAAIdUlEQVR4nO2bXWwc1RXH/3f2a3bXiXHiJM4HCVRqBXEqHG8SlGRJtgGS2okLJjhNRHmoWvJQJKQgtahVK0VVRamqqlVppSK1AlW8IJ6gUkMlxEsAKbHBJHZQCyLB2EqMwd71bryza+/e04dknV3veHbufOzswv1J98E7c885c/537tx7ZgxIJBKJRCKRSCQSiUQikUi+LjCvAxAh3ff9hxixfwA0xoj+HI3Qy+zVV4tex2UHxesARGCcngbx1SDqJuCl61l2Pn34+B6v47JDUwlAHCkioKx1g/jb6Z5jz9Hp0011LSWaKmgGXAYISxoDo2cyg5f+lXz44du8jVCcphKAg1+uzv/NxtGr5ANvpftOtHsZoyhNJYAClseSOai8MaLtrLDwxlRioMXrWM3SVAIQaKX+8L/ViCimqvRPapIVXlMJAM7bDG6Askb96UNHn/Q6XDM0lQAEutdE9kvtd8neR7Z4HXMtmkYA6ukJETGRNX9EKeA51wJyiKYRIFMM9TCisMAdABAdSx88epfXsRvRNAIQZ0+L5R4ggsI5nfI6diOaYqUw80B/XAGdtdh9tjWQX8fOnMk7GpRDNPwdQImEX6HiX0SHfllrzcyrD3p9HcvR8AKkfa2/ALF7aiz/DVuR6JAXsZvB73UARqQO9B0gol/ZtcMY7XAiHjdo2GdA8kDvFpB/EMAau7YYkGttD7U04ruDhrwD0om+ds5xhkC2kw8ABKhzM/l2AJ87Yc9JGu4ZMN3Ts7IIeoNAd1ue9HXaAucdJR+p/UeeSCaOTM7u79tZvyvTp6EEuJJIqErW9xoIMQdzDxDAimx1mat+ENZx0MvjuwfC9bk6fRpGAEok/K08+goRJYgIjjeFeMkXJ7rn5u/figayv/byuhtCAMJpJUnRFwF8zz0frAAAqX19dwLYUHboVCrR69kqqSEESO47/zw4/cDGZqt2TaLANQDgVHx0yTEf53iePFoRer4Mnbmv91kAP3fbT8GH9X7/vIZ8cBTApqXHGfDDtrP/fsntOJbi6R0wEz/8DASTrz5wGa1/+A8ij10E/Lx2hxvk13wRnaH5wIvQST4AEPDs1VhfRCQWJ/BMgJl47wkw+q1ov+DecbBQEcHdE2h56hxYdN5Mt3Sybe5NRqzf4Jz1oSj/iWg8dvFkCkrdd6ibk3IWgPCIa/npu/BvmV38uzixEtf/dC8o58ie8ssiBb6x5p3XM04YM0Pd74DZ3YdWcVJeg4Xk6+HblEb0yUGwoCNVhnaFFZ5wwpBZ6i5A0af8FcvMw2ZgrfmqfZbvzhTCj404Eh8DPUUDAz5HjJmgrgJM7+09RsBxqxtatkqDcltO13Ygdg3BfWNObJq3TF/NPOT4xS9D3QS4kkioYPR7OzYCsWuGmQv3/7fi+WAVprAf2TZikroJsGIhcgrAZqv9mVpA6DufGp/k5wg/fkFkeaoP4eDknoNr7RkxR10EuBrrizAUf2ZnJ6v2fAylJV9z/vCtnYP64Cd2d87+oKI8Wo/c1EWAoLowADDLXy77N88iFB8DOEw19f7L8HVctxUzEQ7bMmCSugjAAMtzKgsVoD5+EaSQ+QHs4wgd+chu2PupcyBo10gtXBdgKtHbASButX/4+Ch8q+dMj/5SC2ydgu+OlJ3Qo8m2zC47BszgugC++UIcRMzKXBzaO4bAtyeFk784FX33I1vPAiq6/zLf9XfCnGMPAwn3890+i1DP/0AF6759d8xA2ZhCcbzVUn/GcLd17+ZwXQBGfLtwJ4Wg9n8IAgdsCAAAwV3j0D5bYakvJ2y15702rgtAnITX08H4GJQ1GVujv4SvcxJ4/ZtWi3Xr7UdgjPufpXBaJXI6i84jGL8CMlVlNhUA/Fs/x8LQhtqnVmNt7hLA/TugWGgTOT/Q/RmIiiAHP6VVNn8JOmdpY/tVEECsTKzcNQXu2Oi/aXNjCsQLAAm//nD9Szr3BSgUMwBCZs5VVmmgYA7FrNNRFMBWZ8Ano6IdXX8xIzwk3nrn3GGAXgCw0clACpnreHd4BBNT0xW/b1y/Dju3b0M4rArbNFz80o2j83NZXBi6gE+mkxWHN3SsXfRrZhFNwISP8ZP3x+NnRGK0sBGjv8Hh5AOAf0ULYju7qn7f0SWe/FJtTv8gLSYfAILRCDp36fjdvg2qyeQDACPaxDl7QShQWJuCLL/NMoIARMLVXwlGIuaTb2bE66Hn17TolXZvN9fpFp5/Hb0YvkGCTNvQPWjdrrFTZ+x6JoATia+wU3XAvF2hCAzsWrmSugsgE19J3QSQidfH/X1AxR8uzPNNmvgSrgrQSA9YJ5LmxuPcFQGcmm6Wd9D8iS8hvBHLZvU/jALKNkBLNjumbWuasT8Bu4absSofOn61nJANqwgLcO79i1Ui2E08AMxpGs6/V/154eDwyI0EuZB4ECGb1TA0PFrt9 + 4NRaNryg80phGtBPz71S7cHRVPz9z/+RiinDfEvSl9npAAeIwXwGOFl6Imj5r7Yy2ZzOD88gmuTUxW/b1ha3xd4uJryq+UwNDyCa5NfVPrtWIsdXZ1QLbxXuBUELRuLpuUw9MElYZOu3QGRiIqd3duqfl+s7wsuKU37VUPY0VXtN + 2Yn+WWxLhdLOKwi1tUpbNrVjZhufT8cciXx5TYjOom28kat3KaZWPT81sJRAZxanzpVs7EXhPGIdwpHBGikxNuOpU6JL2FbgK9MlbLOiS9hWQCZeGcQFkAm3lnsPwMEH4IihTLbNgzsep34EvYEcGMF4nLibdtxGPGNGGHC7CZKt + 75vVOI1WNmIJE3Ph1af+v64aAdhARjDSQATtc6b0zQMvl9dZx8aHq1O0DKCWklYVsvhPd36/iW36/vjxOmkmw4kEolEIpFIJBKJRCKRSCTNzf8B9DlMYsFrhfAAAAAASUVORK5CYII=0 + + + Load Balancer + image/svg+xmlicons8-loadbalancer-6.svgPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cjxzdmcg + eG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiIHhtbG5zOnNvZGlwb2RpPSJodHRwOi8vc29kaXBvZGkuc291cmNlZm9yZ2UubmV0L0RURC9zb2RpcG9kaS0wLmR0ZCIg + eG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAw + IDk2IDk2IiB3aWR0aD0iOTYiIGhlaWdodD0iOTYiIHZlcnNpb249IjEuMSIgaWQ9InN2ZzE2IiBzb2RpcG9kaTpkb2NuYW1lPSJpY29uczgtbG9hZGJhbGFuY2VyLTYuc3ZnIiB4bWw6c3BhY2U9InByZXNlcnZlIiBpbmtzY2Fw + ZTp2ZXJzaW9uPSIxLjQuMyAoMGQxNWY3NTA0MiwgMjAyNS0xMi0yNSkiPjxkZWZzIGlkPSJkZWZzMTYiPjxsaW5lYXJHcmFkaWVudCBpZD0icmd0eWJSNWZEVThSNElnSUZrT1A1YiIgeDE9IjE5LjM4OCIgeDI9IjI4LjQxMyIg + eTE9Ii05Ljk0NDk5OTciIHkyPSI1Mi4wOTg5OTkiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMCwtMC40OTMxMTUxMywtMC40OTMxMTUxMywwLDQ2LjAxOTQ5NCw0My45OTUwMjUpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3Bh + Y2VPblVzZSI+PHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjMWVhMmU0IiBpZD0ic3RvcDctNiIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iIzMyYmRlZiIgaWQ9InN0b3A4LTIiLz48L2xpbmVhckdyYWRpZW50 + PjxsaW5lYXJHcmFkaWVudCBpZD0icmd0eWJSNWZEVThSNElnSUZrT1A1YSIgeDE9IjQ3Ny4xNzg5OSIgeDI9IjQ3Mi43NzIiIHkxPSI1MjIuMTg3MDEiIHkyPSI1MjIuMTg3MDEiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgo + LTAuMzQ4Njg1MDUsMC4zNDg2ODUwNSwwLjM0ODY4NTA1LDAuMzQ4Njg1MDUsMjMuNzgzMDkxLC0zMDYuNjYwNDQpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHN0b3Agb2Zmc2V0PSIuMzY1IiBzdG9wLWNvbG9y + PSIjMTk5YWUwIiBpZD0ic3RvcDEiLz48c3RvcCBvZmZzZXQ9Ii42OTkiIHN0b3AtY29sb3I9IiMxODk4ZGUiIGlkPSJzdG9wMiIvPjxzdG9wIG9mZnNldD0iLjgxOSIgc3RvcC1jb2xvcj0iIzE2OTFkOCIgaWQ9InN0b3AzLTki + Lz48c3RvcCBvZmZzZXQ9Ii45MDUiIHN0b3AtY29sb3I9IiMxMTg2Y2MiIGlkPSJzdG9wNC0xIi8+PHN0b3Agb2Zmc2V0PSIuOTc0IiBzdG9wLWNvbG9yPSIjMGE3NWJjIiBpZD0ic3RvcDUtMiIvPjxzdG9wIG9mZnNldD0iMSIg + c3RvcC1jb2xvcj0iIzA3NmNiMyIgaWQ9InN0b3A2LTciLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD0iQXJ0RFlaMmxUNzV2a2FiUkVzVERFYiIgeDE9IjEwLjQ0MyIgeDI9IjM0Ljg5NDAwMSIgeTE9IjM1 + Ljk4NTAwMSIgeTI9IjExLjUzMyIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMC43MzI5NTMwMywwLDAsMC43MzI5NTMwMyw2MC40MDkwOTQsMjkuOTkxODEyKSI+PHN0 + b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjMzJiZGVmIiBpZD0ic3RvcDctMyIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iIzFlYTJlNCIgaWQ9InN0b3A4LTciLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFk + aWVudCBpZD0iQXJ0RFlaMmxUNzV2a2FiUkVzVERFYSIgeDE9IjM3IiB4Mj0iMzciIHkxPSI0MS41NTUiIHkyPSIyOC4wMzAwMDEiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiBncmFkaWVudFRyYW5zZm9ybT0ibWF0 + cml4KDAuNzMyOTUzMDMsMCwwLDAuNzMyOTUzMDMsNjAuNDA5MDk0LDI5Ljk5MTgxMikiPjxzdG9wIG9mZnNldD0iLjM2NSIgc3RvcC1jb2xvcj0iIzE5OWFlMCIgaWQ9InN0b3AxLTUiLz48c3RvcCBvZmZzZXQ9Ii42OTkiIHN0 + b3AtY29sb3I9IiMxODk4ZGUiIGlkPSJzdG9wMi05Ii8+PHN0b3Agb2Zmc2V0PSIuODE5IiBzdG9wLWNvbG9yPSIjMTY5MWQ4IiBpZD0ic3RvcDMtMiIvPjxzdG9wIG9mZnNldD0iLjkwNSIgc3RvcC1jb2xvcj0iIzExODZjYyIg + aWQ9InN0b3A0LTIiLz48c3RvcCBvZmZzZXQ9Ii45NzQiIHN0b3AtY29sb3I9IiMwYTc1YmMiIGlkPSJzdG9wNS04Ii8+PHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjMDc2Y2IzIiBpZD0ic3RvcDYtOSIvPjwvbGluZWFy + R3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSI5MDFSSUhjTHl6NmRaUEdTdlNmMVhjIiB4MT0iMzMuNDM2MDAxIiB4Mj0iMzguMTU3MDAxIiB5MT0iMjEuNTYzOTk5IiB5Mj0iMTYuODQzIiBncmFkaWVudFRyYW5zZm9ybT0i + bWF0cml4KC0xLDAsMCwxLDEyMS43MTIxOSwxNy4zNjgxMjkpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjYWU0Y2Q1IiBpZD0ic3RvcDUtNiIvPjxzdG9wIG9m + ZnNldD0iMSIgc3RvcC1jb2xvcj0iI2FjNGFkNSIgaWQ9InN0b3A2LTEiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD0iOTAxUklIY0x5ejZkWlBHU3ZTZjFYYiIgeDE9IjY5NC45NzYwMSIgeDI9IjcxNy43 + MTgwMiIgeTE9IjM1LjcwOSIgeTI9IjEyLjk2NyIgZ3JhZGllbnRUcmFuc2Zvcm09InRyYW5zbGF0ZSgtNjA2LjI4NzgyLDE3LjM2ODEyOSkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj48c3RvcCBvZmZzZXQ9IjAi + IHN0b3AtY29sb3I9IiNhZTRjZDUiIGlkPSJzdG9wMy0yOSIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI2FjNGFkNSIgaWQ9InN0b3A0LTMiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD0iOTAx + UklIY0x5ejZkWlBHU3ZTZjFYYSIgeDE9IjM2LjI1IiB4Mj0iMzYuMjUiIHkxPSIzOC4wNDI5OTkiIHkyPSIyMy4wMDYwMDEiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLTEsMCwwLDEsMTIxLjcxMjE5LDE3LjM2ODEyOSki + IGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj48c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiM5MTJmYmQiIGlkPSJzdG9wMS0xIi8+PHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjOTMzMmJmIiBpZD0ic3Rv + cDItOTQiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiIHhsaW5rOmhyZWY9IiNBcnREWVoybFQ3NXZrYWJSRXNUREVhIiBpZD0ibGluZWFyR3JhZGllbnQyNCIgZ3Jh + ZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMCwwLjczMjk1MzAzLC0wLjczMjk1MzAzLDAsNjUuNjM1NTkyLDYwLjE1MzUxNSkiIHgxPSIzNyIgeTE9IjQxLjU1NSIgeDI9IjM3 + IiB5Mj0iMjguMDMwMDAxIi8+PGxpbmVhckdyYWRpZW50IGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIgeGxpbms6aHJlZj0iI0FydERZWjJsVDc1dmthYlJFc1RERWIiIGlkPSJsaW5lYXJHcmFkaWVudDI1IiBncmFkaWVudFVu + aXRzPSJ1c2VyU3BhY2VPblVzZSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgwLDAuNzMyOTUzMDMsLTAuNzMyOTUzMDMsMCw2NS42MzU1OTIsNjAuMTUzNTE1KSIgeDE9IjEwLjQ0MyIgeTE9IjM1Ljk4NTAwMSIgeDI9IjM0 + Ljg5NDAwMSIgeTI9IjExLjUzMyIvPjxsaW5lYXJHcmFkaWVudCBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiIHhsaW5rOmhyZWY9IiNBcnREWVoybFQ3NXZrYWJSRXNUREViIiBpZD0ibGluZWFyR3JhZGllbnQyNiIgZ3JhZGll + bnRVbml0cz0idXNlclNwYWNlT25Vc2UiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMC41MTgyNzYwNiwwLjUxODI3NjA2LC0wLjUxODI3NjA2LDAuNTE4Mjc2MDYsNjUuMDk5NTg5LDM4LjI4MzI5NSkiIHgxPSIxMC40NDMi + IHkxPSIzNS45ODUwMDEiIHgyPSIzNC44OTQwMDEiIHkyPSIxMS41MzMiLz48bGluZWFyR3JhZGllbnQgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIiB4bGluazpocmVmPSIjQXJ0RFlaMmxUNzV2a2FiUkVzVERFYSIgaWQ9Imxp + bmVhckdyYWRpZW50MjciIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDAuNTE4Mjc2MDYsMC41MTgyNzYwNiwtMC41MTgyNzYwNiwwLjUxODI3NjA2LDY1LjA5OTU4OSwz + OC4yODMyOTUpIiB4MT0iMzciIHkxPSI0MS41NTUiIHgyPSIzNyIgeTI9IjI4LjAzMDAwMSIvPjxsaW5lYXJHcmFkaWVudCBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiIHhsaW5rOmhyZWY9IiNBcnREWVoybFQ3NXZrYWJSRXNU + REVhIiBpZD0ibGluZWFyR3JhZGllbnQyOCIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLTAuNTE4Mjc2MDYsMC41MTgyNzYwNiwwLjUxODI3NjA2LDAuNTE4Mjc2MDYs + MzEuMDYzOTkzLDM4LjIzOTEwMSkiIHgxPSIzNyIgeTE9IjQxLjU1NSIgeDI9IjM3IiB5Mj0iMjguMDMwMDAxIi8+PGxpbmVhckdyYWRpZW50IGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIgeGxpbms6aHJlZj0iI0FydERZWjJs + VDc1dmthYlJFc1RERWIiIGlkPSJsaW5lYXJHcmFkaWVudDI5IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgtMC41MTgyNzYwNiwwLjUxODI3NjA2LDAuNTE4Mjc2MDYs + MC41MTgyNzYwNiwzMS4wNjM5OTMsMzguMjM5MTAxKSIgeDE9IjEwLjQ0MyIgeTE9IjM1Ljk4NTAwMSIgeDI9IjM0Ljg5NDAwMSIgeTI9IjExLjUzMyIvPjxsaW5lYXJHcmFkaWVudCBpZD0iOTAxUklIY0x5ejZkWlBHU3ZTZjFY + Yy04IiB4MT0iMzMuNDM2MDAxIiB4Mj0iMzguMTU3MDAxIiB5MT0iMjEuNTYzOTk5IiB5Mj0iMTYuODQzIiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDAsMC43ODYzOTQyMiwwLjc4NjM5NDIyLDAsMjguNzA4NjE1LC0xLjEx + MzM1MzMpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjYWU0Y2Q1IiBpZD0ic3RvcDUtODQiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNhYzRhZDUi + IGlkPSJzdG9wNi0zIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9IjkwMVJJSGNMeXo2ZFpQR1N2U2YxWGItMSIgeDE9IjY5NC45NzYwMSIgeDI9IjcxNy43MTgwMiIgeTE9IjM1LjcwOSIgeTI9IjEyLjk2 + NyIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgwLC0wLjc4NjM5NDIyLDAuNzg2Mzk0MjIsMCwyOC43MDg2MTUsNTcxLjM4MTY1KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIG9mZnNldD0iMCIgc3Rv + cC1jb2xvcj0iI2FlNGNkNSIgaWQ9InN0b3AzLTQiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNhYzRhZDUiIGlkPSJzdG9wNC05Ii8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9IjkwMVJJSGNM + eXo2ZFpQR1N2U2YxWGEtMiIgeDE9IjM2LjI1IiB4Mj0iMzYuMjUiIHkxPSIzOC4wNDI5OTkiIHkyPSIyMy4wMDYwMDEiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMCwwLjc4NjM5NDIyLDAuNzg2Mzk0MjIsMCwyOC43MDg2 + MTUsLTEuMTEzMzUzMykiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj48c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiM5MTJmYmQiIGlkPSJzdG9wMS0wIi8+PHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIj + OTMzMmJmIiBpZD0ic3RvcDItNiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxzb2RpcG9kaTpuYW1lZHZpZXcgaWQ9Im5hbWVkdmlldzE2IiBwYWdlY29sb3I9IiNmZmZmZmYiIGJvcmRlcmNvbG9yPSIjMDAwMDAwIiBib3Jk + ZXJvcGFjaXR5PSIwLjI1IiBpbmtzY2FwZTpzaG93cGFnZXNoYWRvdz0iMiIgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAuMCIgaW5rc2NhcGU6cGFnZWNoZWNrZXJib2FyZD0iMCIgaW5rc2NhcGU6ZGVza2NvbG9yPSIjZDFkMWQx + IiBzaG93Z3VpZGVzPSJ0cnVlIiBpbmtzY2FwZTp6b29tPSI1LjY1Njg1NDMiIGlua3NjYXBlOmN4PSI0NS4zNDMyMjIiIGlua3NjYXBlOmN5PSIzMC40MDU1OTIiIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMjU2MCIgaW5rc2Nh + cGU6d2luZG93LWhlaWdodD0iMTM2MCIgaW5rc2NhcGU6d2luZG93LXg9IjAiIGlua3NjYXBlOndpbmRvdy15PSIwIiBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIxIiBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJzdmcxNiI+ + PHNvZGlwb2RpOmd1aWRlIHBvc2l0aW9uPSIxOS41NTk3ODksMTQzLjczODM0IiBvcmllbnRhdGlvbj0iMSwwIiBpZD0iZ3VpZGUxNyIgaW5rc2NhcGU6bG9ja2VkPSJmYWxzZSIvPjxzb2RpcG9kaTpndWlkZSBwb3NpdGlvbj0i + MjQuMDg0NDY5LDk4LjIyNDIxMiIgb3JpZW50YXRpb249IjAsLTEiIGlkPSJndWlkZTE4IiBpbmtzY2FwZTpsb2NrZWQ9ImZhbHNlIi8+PHNvZGlwb2RpOmd1aWRlIHBvc2l0aW9uPSIxOS44NDUxNjksMTE2LjQzOTYyIiBvcmll + bnRhdGlvbj0iMCwtMSIgaWQ9Imd1aWRlMTkiIGlua3NjYXBlOmxvY2tlZD0iZmFsc2UiLz48c29kaXBvZGk6Z3VpZGUgcG9zaXRpb249IjQ4LjA0MTUwNCw4My40NjU4MiIgb3JpZW50YXRpb249IjEsMCIgaWQ9Imd1aWRlMjAi + IGlua3NjYXBlOmxvY2tlZD0iZmFsc2UiLz48c29kaXBvZGk6Z3VpZGUgcG9zaXRpb249Ijc4LjI1LDQ3Ljc1IiBvcmllbnRhdGlvbj0iMCwtMSIgaWQ9Imd1aWRlMjEiIGlua3NjYXBlOmxvY2tlZD0iZmFsc2UiLz48c29kaXBv + ZGk6Z3VpZGUgcG9zaXRpb249IjUwLjM5NDQ1Nyw2NS4zMTY0NjgiIG9yaWVudGF0aW9uPSIwLC0xIiBpZD0iZ3VpZGUyOSIgaW5rc2NhcGU6bG9ja2VkPSJmYWxzZSIvPjxzb2RpcG9kaTpndWlkZSBwb3NpdGlvbj0iNjcuNjA1 + MzQ3LDIxLjA2MDgzNyIgb3JpZW50YXRpb249IjAsLTEiIGlkPSJndWlkZTMwIiBpbmtzY2FwZTpsb2NrZWQ9ImZhbHNlIi8+PC9zb2RpcG9kaTpuYW1lZHZpZXc+PGxpbmVhckdyYWRpZW50IGlkPSI2ZlNPVVBhfkNQOHRjc0l4 + X1d2dWZhIiB4MT0iMjIuMDExIiB4Mj0iMjYuMjEyIiB5MT0iNzg1Ljc5MTAyIiB5Mj0iNzg5Ljk5Mjk4IiBncmFkaWVudFRyYW5zZm9ybT0idHJhbnNsYXRlKDAsLTc4MS43OCkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9u + VXNlIj48c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiMzM2JlZjAiIGlkPSJzdG9wMyIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iIzBhODVkOSIgaWQ9InN0b3A0Ii8+PC9saW5lYXJHcmFkaWVudD48bGluZWFy + R3JhZGllbnQgaWQ9IjZmU09VUGF+Q1A4dGNzSXhfV3Z1ZmIiIHgxPSI2LjAxMTAwMDIiIHgyPSIxMC4yMTMiIHkxPSI3OTQuNzkxMDIiIHkyPSI3OTguOTkyIiBncmFkaWVudFRyYW5zZm9ybT0idHJhbnNsYXRlKDAsLTc4MS43 + OCkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj48c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiMzM2JlZjAiIGlkPSJzdG9wNSIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iIzBhODVkOSIgaWQ9InN0 + b3A2Ii8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9IjZmU09VUGF+Q1A4dGNzSXhfV3Z1ZmMiIHgxPSI2LjAxMTAwMDIiIHgyPSIxMC4yMTMiIHkxPSI4MTIuNzkxMDIiIHkyPSI4MTYuOTkyIiBncmFkaWVu + dFRyYW5zZm9ybT0idHJhbnNsYXRlKDAsLTc4MS43OCkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj48c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiMzM2JlZjAiIGlkPSJzdG9wNyIvPjxzdG9wIG9mZnNldD0i + MSIgc3RvcC1jb2xvcj0iIzBhODVkOSIgaWQ9InN0b3A4Ii8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9IjZmU09VUGF+Q1A4dGNzSXhfV3Z1ZmQiIHgxPSIzOC4wMTEwMDIiIHgyPSI0Mi4yMTIwMDIiIHkx + PSI3OTQuNzkxMDIiIHkyPSI3OTguOTkyIiBncmFkaWVudFRyYW5zZm9ybT0idHJhbnNsYXRlKDAsLTc4MS43OCkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj48c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiMz + M2JlZjAiIGlkPSJzdG9wOSIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iIzBhODVkOSIgaWQ9InN0b3AxMCIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSI2ZlNPVVBhfkNQOHRjc0l4X1d2dWZl + IiB4MT0iMzguMDExMDAyIiB4Mj0iNDIuMjEyMDAyIiB5MT0iODEyLjc5MTAyIiB5Mj0iODE2Ljk5MiIgZ3JhZGllbnRUcmFuc2Zvcm09InRyYW5zbGF0ZSgwLC03ODEuNzgpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVz + ZSI+PHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjMzNiZWYwIiBpZD0ic3RvcDExIi8+PHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjMGE4NWQ5IiBpZD0ic3RvcDEyIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFy + R3JhZGllbnQgaWQ9IjZmU09VUGF+Q1A4dGNzSXhfV3Z1ZmYiIHgxPSIyMi4wMTEiIHgyPSIyNi4yMTIiIHkxPSI4MjEuNzkxMDIiIHkyPSI4MjUuOTkyIiBncmFkaWVudFRyYW5zZm9ybT0idHJhbnNsYXRlKDAsLTc4MS43OCki + IGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj48c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiMzM2JlZjAiIGlkPSJzdG9wMTMiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiMwYTg1ZDkiIGlkPSJzdG9w + MTQiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD0iNmZTT1VQYX5DUDh0Y3NJeF9XdnVmZyIgeDE9IjIyLjM4OTk5OSIgeDI9IjI1LjUxIiB5MT0iMjcuODQxIiB5Mj0iMjAuMTg0IiBncmFkaWVudFRyYW5z + Zm9ybT0ibWF0cml4KDIuMjc1MDY0OSwwLDAsLTIuMjc1MDY0OSwtNi40NzA0OTc2LDcxLjA3ODY1OSkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj48c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiMyYWE0ZjQi + IGlkPSJzdG9wMTUiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiMwMDdhZDkiIGlkPSJzdG9wMTYiLz48L2xpbmVhckdyYWRpZW50PjxjaXJjbGUgY3g9IjQ4LjEzMTA1IiBjeT0iMTYuNzI3MzU2IiBmaWxsPSJ1cmwo + IzZmU09VUGF+Q1A4dGNzSXhfV3Z1ZmcpIiBpZD0iY2lyY2xlMTYiIHN0eWxlPSJmaWxsOnVybCgjNmZTT1VQYX5DUDh0Y3NJeF9XdnVmZyk7c3Ryb2tlLXdpZHRoOjIuMjc1MDYiIHI9IjExLjM3NTMyNCIvPjxwYXRoIGZpbGw9 + InVybCgjQXJ0RFlaMmxUNzV2a2FiUkVzVERFYSkiIGQ9Im0gNzYuODU2MTY0LDczLjcwNjQyNiB2IC0zLjQ3MTQxMyBjIDEwZS03LC0wLjY2ODU3NiAtMC41NDE1OTgsLTEuMjEwMTc1IC0xLjIxMDE3NSwtMS4yMTAxNzUgbCAt + MTAuMDI4MTIzLC0yLjIzNjM2MSAtNi42MzM0MTUsNi42MzM0MTYgYyAtMC41NTE5NjQsMC41NTE5NjQgLTAuMTYxMTg1LDEuNDk1MjI2IDAuNjE5MzQsMS40OTUyMjYgaCAxNi4wNDE2OCBjIDAuNjY4NTc3LDAgMS4yMTA2OTQs + LTAuNTQyMTE3IDEuMjEwNjkzLC0xLjIxMDY5MyB6IiBpZD0icGF0aDYtNyIgc3R5bGU9ImZpbGw6dXJsKCNsaW5lYXJHcmFkaWVudDI3KTtzdHJva2Utd2lkdGg6MC43MzI5NTMiLz48cGF0aCBmaWxsPSJ1cmwoI0FydERZWjJs + VDc1dmthYlJFc1RERWIpIiBkPSJtIDc2Ljg1NjE2NCw3My43MDY0MjYgdiAtMTYuMDQxNjggYyAwLC0wLjc4MDUyNSAtMC45NDMyNjIsLTEuMTcxMzA0IC0xLjQ5NTIyNiwtMC42MTkzNCBMIDY5Ljc2NDA3NCw2Mi42NDIyNjkg + NTEuNzk0MTk5LDQ1LjE3MjM5MyBjIC0wLjU4MDcxNywtMC41NjQ1NTkgLTEuODkzMDk3LDAuNjY1MTkgLTEuNzkxODU0LDEuNDY4NzUgbCAwLjcwMjg0Myw1LjU3ODQwNyBjIDAuMTAxMjQzLDAuODAzNTYgLTAuMTU5ODQyLDEu + MDg3NjMxIDAuNDA2MjUsMS42NjY4NTQgbCAyMC4yMDc0NjUsMjAuNjc2MjE0IGMgMC4yMTY3MDIsMC4yMjE3MjkgMC41MjEzODUsMC4zNTQ1MDEgMC44NTU2NzMsMC4zNTM5ODIgaCAzLjQ3MTQxMyBjIDAuNjY4MDU5LDUuMTll + LTQgMS4yMTAxNzYsLTAuNTQxNTk4IDEuMjEwMTc1LC0xLjIxMDE3NCB6IiBpZD0icGF0aDgtMyIgc3R5bGU9ImZpbGw6dXJsKCNsaW5lYXJHcmFkaWVudDI2KTtzdHJva2Utd2lkdGg6MC43MzI5NTMiIHNvZGlwb2RpOm5vZGV0 + eXBlcz0iY3NzY3Nzc3NzY2NjIi8+PHBhdGggZmlsbD0idXJsKCNBcnREWVoybFQ3NXZrYWJSRXNUREVhKSIgZD0ibSAxOS4zMDc0MTgsNzMuNjYyMjMyIHYgLTMuNDcxNDEzIGMgLTEwZS03LC0wLjY2ODU3NiAwLjU0MTU5OCwt + MS4yMTAxNzUgMS4yMTAxNzUsLTEuMjEwMTc1IGwgMTAuMDI4MTIzLC0yLjIzNjM2MSA2LjYzMzQxNSw2LjYzMzQxNiBjIDAuNTUxOTY0LDAuNTUxOTY0IDAuMTYxMTg1LDEuNDk1MjI2IC0wLjYxOTM0LDEuNDk1MjI2IGggLTE2 + LjA0MTY4IGMgLTAuNjY4NTc3LDAgLTEuMjEwNjk0LC0wLjU0MjExNyAtMS4yMTA2OTMsLTEuMjEwNjkzIHoiIGlkPSJwYXRoNi03LTgiIHN0eWxlPSJmaWxsOnVybCgjbGluZWFyR3JhZGllbnQyOCk7c3Ryb2tlLXdpZHRoOjAu + NzMyOTUzIiBzb2RpcG9kaTpub2RldHlwZXM9InNzY2Nzc3NzIi8+PHBhdGggZmlsbD0idXJsKCNBcnREWVoybFQ3NXZrYWJSRXNUREViKSIgZD0ibSAxOS4zMDc0MTgsNzMuNjYyMjMyIHYgLTE2LjA0MTY4IGMgMCwtMC43ODA1 + MjUgMC45NDMyNjIsLTEuMTcxMzA0IDEuNDk1MjI2LC0wLjYxOTM0IGwgNS41OTY4NjQsNS41OTY4NjMgMTkuMjE5ODc1LC0xOS4wMzIzNzYgYyAwLjU3NTQ5NSwtMC41Njk4ODEgMC41MzQ1OTcsMS4yOTI0NDEgMC40MTY4NTQs + Mi4wOTM3NSBsIC0wLjk1Mjg0Myw2LjQ4NDY1NyBjIC0wLjExNzc0MywwLjgwMTMwOSAwLjUwNzA5OSwxLjQwMzU4IC0wLjA2MjUsMS45NzkzNTQgTCAyNC44NDQ2NzksNzQuNTE4NDI0IGMgLTAuMjE4MDQ1LDAuMjIwNDA5IC0w + LjUyMTM4NSwwLjM1NDUwMSAtMC44NTU2NzMsMC4zNTM5ODIgaCAtMy40NzE0MTMgYyAtMC42NjgwNTksNS4xOWUtNCAtMS4yMTAxNzYsLTAuNTQxNTk4IC0xLjIxMDE3NSwtMS4yMTAxNzQgeiIgaWQ9InBhdGg4LTMtNiIgc3R5 + bGU9ImZpbGw6dXJsKCNsaW5lYXJHcmFkaWVudDI5KTtzdHJva2Utd2lkdGg6MC43MzI5NTMiIHNvZGlwb2RpOm5vZGV0eXBlcz0iY3NzY3Nzc3NzY2NjIi8+PHBhdGggZmlsbD0idXJsKCNBcnREWVoybFQ3NXZrYWJSRXNUREVh + KSIgZD0ibSA0OC45MDA4MDksOTMuNTE0NjA1IDIuNDU0NjYsLTIuNDU0NjYgYyAwLjQ3Mjc1NSwtMC40NzI3NTQgMC40NzI3NTUsLTEuMjM4NjkgMCwtMS43MTE0NDUgbCAtNS41MDk2MDgsLTguNjcyMyBoIC05LjM4MTA2NiBj + IC0wLjc4MDU5NSwwIC0xLjE3MTI1OSwwLjk0MzMxIC0wLjYxOTM0NSwxLjQ5NTIyNCBsIDExLjM0MzE4MSwxMS4zNDMxODEgYyAwLjQ3Mjc1NSwwLjQ3Mjc1NSAxLjIzOTQyNCwwLjQ3Mjc1NSAxLjcxMjE3OCwwIHoiIGlkPSJw + YXRoNi03LTQiIHN0eWxlPSJmaWxsOnVybCgjbGluZWFyR3JhZGllbnQyNCk7c3Ryb2tlLXdpZHRoOjAuNzMyOTUzIi8+PHBhdGggZmlsbD0idXJsKCNBcnREWVoybFQ3NXZrYWJSRXNUREViKSIgZD0iTSA0OC45MDA4MDksOTMu + NTE0NjA1IDYwLjI0Mzk5LDgyLjE3MTQyNCBDIDYwLjc5NTkwNCw4MS42MTk1MSA2MC40MDUyNCw4MC42NzYyIDU5LjYyNDY0NSw4MC42NzYyIGggLTcuOTE1MTYgbCAwLjAyMTE1LC01MC4xMDMwNTIgQyA1MS43MzA5NzcsMjku + NzYzMjM1IDUxLjI0MDExMiwyOS4zMDEzNjUgNTAuNDMwMiwyOS4zMDIyMyBsIC00LjM5NjgzOCwwLjAwNDcgYyAtMC44MDk5MTIsOC42NGUtNCAtMS42NDk0NDcsMC40NTI4NjkgLTEuNjQ5NSwxLjI2Mjc4MSBsIC0wLjAwMzks + NTkuNjM0ODg3IGMgLTJlLTUsMC4zMTAwMzkgMC4xMTgwMDUsMC42MTkzNDUgMC4zNTQ3NDksMC44NTUzNTYgbCAyLjQ1NDY2LDIuNDU0NjYgYyAwLjQ3MjAyMiwwLjQ3Mjc1NSAxLjIzODY5MSwwLjQ3Mjc1NSAxLjcxMTQ0NSww + IHoiIGlkPSJwYXRoOC0zLTUiIHN0eWxlPSJmaWxsOnVybCgjbGluZWFyR3JhZGllbnQyNSk7c3Ryb2tlLXdpZHRoOjAuNzMyOTUzIiBzb2RpcG9kaTpub2RldHlwZXM9InNzc2Nzc3Nzc2NjcyIvPjwvc3ZnPgo=0 + + + Router + image/pngicons8-collect-96.pngiVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAAACXBIWXMAAAsTAAALEwEAmpwYAAAFoklEQVR4nO1c + y27bRhQlcul8jLM0lZWCGl3FyKJB2yRrR/JLEh/9i6bpD7RetXZaoKvKjpM6ji1SEkUVyDJA06YpGjt7k6a0FKYYynEcVxJJkZyhyXuAAwgCgbn3HHKoGR1SEBAIBAKBSDlA694CtfsOtC6ZTOsIVGuBd72ZA1BhfcU/pWod8q43 + cwDNImHIu97MAdAANCDXALwC0IBcA9QOCUPe9WYOgAagAbkG4BWABmQSoLYfgdIegGoSphyOuSHkHaCYh8zF/8C3Qt4hyp1PQDF77K8As0fH5t1/KiAqrSIobReUNmHDVh9q5qe8+06hCS0XlBZJls0+1AwUf6wJctMFuUmSoYHi + +18JjSLIhguyQeKljuIHno4qjSLUdBdqOomHDRSfnwkNFD+SCdUDF6oNMiX7UNvHG25kE9b2XagckJDswyqKHwvEyl4R1vZcqDwnAYnixw1xea8IK89cWN0jPuzD6i5OO4mZsPybCyu7ZAxR/KQhLj8pwtITF5afkgvsQ3kHz3xm + JpQfu7C0QzyWd/IrPqjWIxoFFL9ivLO4+OsslLe+o6SfWQ5Ne6U9g9rdFHgDVGtwmsfsgWrNCxkHqNa81+uw50EaUsvnk8l90LqZnQpExSqC1nXP95zCxFonkyaInviWm7oQ8OjIYLZMEMeIn2IDsmOCOEH8lBsQvwmzL8lVybDv + SYbzU0G3XxUMp+dRt1+dfneXHsNK/EtgQHwmSMbxFwXdeVMwHOLDvyX9+POo44la94af+OkwIFBizeyDNt2f4Hd+ISAZ9rcBhP+Yuv1QIOTKNGOKWvsGqB33UoSAg0cGpzNBmkb8U0qG/SBJ8RMxADTzFijmu7BZzED08j/BF2sS + nXamFP89rzdPbodaZHk1JtC7agZ7enN4YBIFhDNh9iW5SufzqAZIuvNPkBtzsuKf9e7/9GaiBYSYjiTDvhdV/LOrQLfvxDntRGEAA1jFA9sTTSjozs9xGSDpzuZk8U2XVd8pMmBogiA3R+5kSob9V1wG0HXCqDFmtNY170Rg2HPK + DDDpvPj9qDoKhuPGZoDhuCN7Vcx11v0GMKBNmFJpJW6ApDvOaANa66z79Tcg8XDsx0FZYdwUpNt/xncF2H+MnYJoWJdhzykyYHJK2dvbie8esME/lR3UgMSSyeFSygXdvhuXAXPN4y/5prI/0N+AqnEENYMkxqrRg2rDdyE294LM + FAzndfSz33kTaCFWbcx7tSXZe00PsBCr6QtQ1Y/iSyafY1UPJP570F3NyGe/cfKZEBBDE/ReIr3XGodQadwU4kbSQdmCbj+c+teP4XyddCBY4A2oHpAAnD6lTMiVgm5/E158+8HU29GeCftukN4E3mCVUr7ePLkd8J7wOsy0EzWV + LfAGy5Ty3AsyQzfW6N4O/W1/ulhz6Wf6Hf21Q49hmcoWeANWn5ExzERQVvRS2bvuuD551yfkIaUsTkhl865NyEtKWRyTyuZdl3CWUM5BSlm8mMpe2kmBAaXtAZS3CZS3elDazn44t7Q97/VKey5tpyCcW6pvQqn+r7i4xTSePqP9 + fg3U7jol/cxybNor3K+/hVL9RyGPEL3Q1PmUcrZT2SkXv4smsBXfcrMeCE4lxIBZTTSBq/gWmsBffAtNiDWfr0ZJrE2fys49xMjiowkcz/wOmpAe8Ts4HfEXv4Mm+IvfKrJJKU9OZecSIjPx0YT/iy/jq4u5AuT2IbtXFl+g3MaX + d4Pc2gC5OWCbym7RnOYA5OYPfE+/SwSIOwSLCGtAuFcVo74xA0KGYdGAuA2ohntrLhrAJwRMUhOazRqgsk/CkHe9mQOs7ZEw5F1v5gCruyQMedebOcDKUxKGvOvNHOB8BjUAedebOUBp62iYQQ1E/6cRESENWNxagPv1IyjViQ8PoVSP/2lEBAKBQCCEePEfD3q/JRB0b7YAAAAASUVORK5CYII=0 + + + Router 4G + image/svg+xmlicons8-router-4g.svgPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcgeG1sb + nM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiIHhtbG5zOnNvZGlwb2RpPSJodHRwOi8vc29kaXBvZGkuc291cmNlZm9yZ2UubmV0L0RURC9zb2RpcG9kaS0wLmR0ZCIgeG1sb + nM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgOTYgOTYiIHdpZHRoPSI5NiIgaGVpZ2h0PSI5NiIgdmVyc2lvbj0iMS4xIiBpZ + D0ic3ZnMjUiIHNvZGlwb2RpOmRvY25hbWU9Imljb25zOC1yb3V0ZXItNGcuc3ZnIiBpbmtzY2FwZTp2ZXJzaW9uPSIxLjQuMyAoMGQxNWY3NTA0MiwgMjAyNS0xMi0yNSkiPjxkZWZzIGlkPSJkZWZzMjUiPjxsaW5lYXJHcmFka + WVudCBpZD0iZXd3NmZTSFhMRzNoNFllQXFnOXVfYSIgeDE9IjE3LjU5IiB4Mj0iMzIuMDciIHkxPSIyNS45MzQ5OTkiIHkyPSI0OC4yMzA5OTkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiBncmFkaWVudFRyYW5zZ + m9ybT0ibWF0cml4KDEuMTYxODcxNywwLDAsMS4xNjE4NzE3LDIwLjUwNzI1NCwyLjE5MTYwNDkpIj48c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiM4NTkyOWUiIGlkPSJzdG9wMS0zIi8+PHN0b3Agb2Zmc2V0PSIxIiBzd + G9wLWNvbG9yPSIjNmQ3ODgyIiBpZD0ic3RvcDItNiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxzb2RpcG9kaTpuYW1lZHZpZXcgaWQ9Im5hbWVkdmlldzI1IiBwYWdlY29sb3I9IiNmZmZmZmYiIGJvcmRlcmNvbG9yPSIjM + DAwMDAwIiBib3JkZXJvcGFjaXR5PSIwLjI1IiBpbmtzY2FwZTpzaG93cGFnZXNoYWRvdz0iMiIgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAuMCIgaW5rc2NhcGU6cGFnZWNoZWNrZXJib2FyZD0iMCIgaW5rc2NhcGU6ZGVza2Nvb + G9yPSIjZDFkMWQxIiBpbmtzY2FwZTp6b29tPSI4LjEwMjI2NTIiIGlua3NjYXBlOmN4PSIyMS40MTM3NjUiIGlua3NjYXBlOmN5PSIzNy4zOTY5NDkiIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMjU2MCIgaW5rc2NhcGU6d2luZ + G93LWhlaWdodD0iMTM2MCIgaW5rc2NhcGU6d2luZG93LXg9IjAiIGlua3NjYXBlOndpbmRvdy15PSIwIiBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIxIiBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJzdmcyNSIgc2hvd2d1a + WRlcz0idHJ1ZSI+PHNvZGlwb2RpOmd1aWRlIHBvc2l0aW9uPSI5LjgxNzg1NjIsMzAuMTQwNzE4IiBvcmllbnRhdGlvbj0iMSwwIiBpZD0iZ3VpZGUxIiBpbmtzY2FwZTpsb2NrZWQ9ImZhbHNlIi8+PHNvZGlwb2RpOmd1aWRlI + HBvc2l0aW9uPSI4Ni40NzA4MDIsMzguMTgxOTY4IiBvcmllbnRhdGlvbj0iMSwwIiBpZD0iZ3VpZGUyIiBpbmtzY2FwZTpsb2NrZWQ9ImZhbHNlIi8+PHNvZGlwb2RpOmd1aWRlIHBvc2l0aW9uPSI0Ni4yNTg2MzYsOS40ODEwM + jMyIiBvcmllbnRhdGlvbj0iMCwtMSIgaWQ9Imd1aWRlMyIgaW5rc2NhcGU6bG9ja2VkPSJmYWxzZSIvPjxzb2RpcG9kaTpndWlkZSBwb3NpdGlvbj0iNTMuNjQxNDQyLDEwMS4yOTgiIG9yaWVudGF0aW9uPSIwLC0xIiBpZD0iZ + 3VpZGU0IiBpbmtzY2FwZTpsb2NrZWQ9ImZhbHNlIi8+PC9zb2RpcG9kaTpuYW1lZHZpZXc+PGxpbmVhckdyYWRpZW50IGlkPSJzUXk3T3ZQWEgwdDJtS2ZxazdYdVhhIiB4MT0iMzQuMTE3MDAxIiB4Mj0iMzMuOTA5IiB5MT0iM + zAuNDUxIiB5Mj0iMTEuODI2IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDIuMDE1MTEyMSwwLDAsLTIuMDE1MTEyMSwtMC4yODI4MzI5NSw5OC4xNzI2OTQpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHN0b + 3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjNzM3YjgwIiBpZD0ic3RvcDEiLz48c3RvcCBvZmZzZXQ9Ii43MTQiIHN0b3AtY29sb3I9IiM3MzdiODAiIGlkPSJzdG9wMiIvPjxzdG9wIG9mZnNldD0iLjc1NiIgc3RvcC1jb2xvc + j0iIzczN2I4MCIgaWQ9InN0b3AzIi8+PHN0b3Agb2Zmc2V0PSIuODYzIiBzdG9wLWNvbG9yPSIjNjU2YzcxIiBpZD0ic3RvcDQiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiM1NzVjNjEiIGlkPSJzdG9wNSIvPjwvb + GluZWFyR3JhZGllbnQ+PHBhdGggZmlsbD0idXJsKCNzUXk3T3ZQWEgwdDJtS2ZxazdYdVhhKSIgZD0ibSA2Mi4xODU2NDEsODAuMjU4MzQ4IGMgLTAuMTkxNDM1LDAgLTAuMzg2OTAyLC0wLjAyODIxIC0wLjU4MDM1MiwtMC4wO + DQ2MyAtMS4wNjU5OTMsLTAuMzIwNCAtMS42NzI1NDMsLTEuNDQyODIgLTEuMzUyMTQsLTIuNTA4ODE3IEwgNzIuMzQzODIzLDM3LjM2MjY1OSBjIDAuMzIwNDA0LC0xLjA2NTk5NCAxLjQ0NDgzNCwtMS42NzI1NDMgMi41MDg4M + TUsLTEuMzUyMTQgMS4wNjU5OSwwLjMyMDQwMiAxLjY3MjUzOSwxLjQ0MjgyMSAxLjM1MjE0MSwyLjUwODgxNCBMIDY0LjExNDEwNCw3OC44MjE1NzggYyAtMC4yNTk5NSwwLjg3NDU1NSAtMS4wNTk5NSwxLjQzNjc3IC0xLjkyO + DQ2MywxLjQzNjc3IHoiIGlkPSJwYXRoNSIgc3R5bGU9ImZpbGw6dXJsKCNzUXk3T3ZQWEgwdDJtS2ZxazdYdVhhKTtzdHJva2Utd2lkdGg6Mi4wMTUxMSIvPjxsaW5lYXJHcmFkaWVudCBpZD0ic1F5N092UFhIMHQybUtmcWs3W + HVYYiIgeDE9IjE0LjEyMSIgeDI9IjEzLjkxMyIgeTE9IjMwLjcxOSIgeTI9IjEyLjA5NCIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgyLjAxNTExMjEsMCwwLC0yLjAxNTExMjEsLTAuMjgyODMyOTUsOTguMTcyNjk0KSIgZ + 3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iIzczN2I4MCIgaWQ9InN0b3A2Ii8+PHN0b3Agb2Zmc2V0PSIuNzczIiBzdG9wLWNvbG9yPSIjNzM3YjgwIiBpZD0ic3Rvc + DciLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiM1NzVjNjEiIGlkPSJzdG9wOCIvPjwvbGluZWFyR3JhZGllbnQ+PHBhdGggZmlsbD0idXJsKCNzUXk3T3ZQWEgwdDJtS2ZxazdYdVhiKSIgZD0ibSAzMy45NzQwNzEsO + DAuMjU4MzQ4IGMgLTAuODY2NDk3LDAgLTEuNjY2NDk4LC0wLjU2NDIzMSAtMS45MzA0NzUsLTEuNDM2NzcgTCAxOS45NTI5MjIsMzguNTE5MzMzIGMgLTAuMzIwNDA0LC0xLjA2NTk5MyAwLjI4NjE0NiwtMi4xODg0MTIgMS4zN + TIxNDEsLTIuNTA4ODE0IDEuMDYzOTc5LC0wLjMxNDM1NyAyLjE4ODQxMSwwLjI4NjE0NiAyLjUwODgxNSwxLjM1MjE0IGwgMTIuMDkwNjcxLDQwLjMwMjIzOSBjIDAuMzIwNDAyLDEuMDY1OTk2IC0wLjI4NjE0NiwyLjE4ODQxN + yAtMS4zNTIxMzksMi41MDg4MTUgLTAuMTkzNDUyLDAuMDU2NDMgLTAuMzg2OTAyLDAuMDg0NjMgLTAuNTc4MzM5LDAuMDg0NjMgeiIgaWQ9InBhdGg4IiBzdHlsZT0iZmlsbDp1cmwoI3NReTdPdlBYSDB0Mm1LZnFrN1h1WGIpO + 3N0cm9rZS13aWR0aDoyLjAxNTExIi8+PGxpbmVhckdyYWRpZW50IGlkPSJzUXk3T3ZQWEgwdDJtS2ZxazdYdVhjIiB4MT0iMjQiIHgyPSIyNCIgeTE9IjE0LjYxNCIgeTI9Ii0yLjA3MTAwMDEiIGdyYWRpZW50VHJhbnNmb3JtP + SJtYXRyaXgoMi4wMTUxMTIxLDAsMCwtMi4wMTUxMTIxLC0wLjI4MjgzMjk1LDk4LjE3MjY5NCkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj48c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiM4OTkxOTgiIGlkP + SJzdG9wOSIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iIzc4N2U4NSIgaWQ9InN0b3AxMCIvPjwvbGluZWFyR3JhZGllbnQ+PHBhdGggZmlsbD0idXJsKCNzUXk3T3ZQWEgwdDJtS2ZxazdYdVhjKSIgZD0iTSA4Mi4zM + zY3NjUsODYuMzAzNjg5IEggMTMuODIyOTUxIGMgLTIuMjI2Njk4LDAgLTQuMDMwMjIzNywtMS44MDM1MzEgLTQuMDMwMjIzNywtNC4wMzAyMjcgViA2OC4xNjc2NzggYyAwLC0yLjIyNjY5OSAxLjgwMzUyNTcsLTQuMDMwMjI1I + DQuMDMwMjIzNywtNC4wMzAyMjUgaCA2OC41MTM4MTQgYyAyLjIyNjY5NiwwIDQuMDMwMjIxLDEuODAzNTI2IDQuMDMwMjIxLDQuMDMwMjI1IHYgMTQuMTA1Nzg0IGMgMCwyLjIyNjY5NiAtMS44MDM1MjUsNC4wMzAyMjcgLTQuM + DMwMjIxLDQuMDMwMjI3IHoiIGlkPSJwYXRoMTAiIHN0eWxlPSJmaWxsOnVybCgjc1F5N092UFhIMHQybUtmcWs3WHVYYyk7c3Ryb2tlLXdpZHRoOjIuMDE1MTEiLz48cmVjdCB3aWR0aD0iNjguNTEzODA5IiBoZWlnaHQ9IjE0L + jEwNTc4NSIgeD0iMTMuODIyOTUyIiB5PSI2OC4xNjc2NzEiIGZpbGw9IiM3MzdiODAiIGlkPSJyZWN0MTAiIHN0eWxlPSJzdHJva2Utd2lkdGg6Mi4wMTUxMSIvPjxyYWRpYWxHcmFkaWVudCBpZD0ic1F5N092UFhIMHQybUtmc + Ws3WHVYZCIgY3g9IjM2LjUiIGN5PSIxMS4zOSIgcj0iMi41IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDIuMDE1MTEyMSwwLDAsLTIuMDE1MTEyMSwtMC4yODI4MzI5NSw5OC4xNzI2OTQpIiBncmFkaWVudFVuaXRzPSJ1c + 2VyU3BhY2VPblVzZSI+PHN0b3Agb2Zmc2V0PSIuNTgyIiBzdG9wLW9wYWNpdHk9Ii4yIiBpZD0ic3RvcDExIi8+PHN0b3Agb2Zmc2V0PSIxIiBzdG9wLW9wYWNpdHk9IjAiIGlkPSJzdG9wMTIiLz48L3JhZGlhbEdyYWRpZW50P + jxjaXJjbGUgY3g9IjczLjI2ODc1MyIgY3k9Ijc1LjIyMDU3MyIgZmlsbD0idXJsKCNzUXk3T3ZQWEgwdDJtS2ZxazdYdVhkKSIgaWQ9ImNpcmNsZTEyIiBzdHlsZT0iZmlsbDp1cmwoI3NReTdPdlBYSDB0Mm1LZnFrN1h1WGQpO + 3N0cm9rZS13aWR0aDoyLjAxNTExIiByPSI1LjAzNzc4MDMiLz48cmFkaWFsR3JhZGllbnQgaWQ9InNReTdPdlBYSDB0Mm1LZnFrN1h1WGUiIGN4PSIzMC41IiBjeT0iMTEuMzkiIHI9IjIuNSIgZ3JhZGllbnRUcmFuc2Zvcm09I + m1hdHJpeCgyLjAxNTExMjEsMCwwLC0yLjAxNTExMjEsLTAuMjgyODMyOTUsOTguMTcyNjk0KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIG9mZnNldD0iLjU4MiIgc3RvcC1vcGFjaXR5PSIuMiIgaWQ9I + nN0b3AxMyIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1vcGFjaXR5PSIwIiBpZD0ic3RvcDE0Ii8+PC9yYWRpYWxHcmFkaWVudD48Y2lyY2xlIGN4PSI2MS4xNzgwODIiIGN5PSI3NS4yMjA1NzMiIGZpbGw9InVybCgjc1F5N092U + FhIMHQybUtmcWs3WHVYZSkiIGlkPSJjaXJjbGUxNCIgc3R5bGU9ImZpbGw6dXJsKCNzUXk3T3ZQWEgwdDJtS2ZxazdYdVhlKTtzdHJva2Utd2lkdGg6Mi4wMTUxMSIgcj0iNS4wMzc3ODAzIi8+PHJhZGlhbEdyYWRpZW50IGlkP + SJzUXk3T3ZQWEgwdDJtS2ZxazdYdVhmIiBjeD0iMjQuNSIgY3k9IjExLjM5IiByPSIyLjUiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMi4wMTUxMTIxLDAsMCwtMi4wMTUxMTIxLC0wLjI4MjgzMjk1LDk4LjE3MjY5NCkiI + GdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj48c3RvcCBvZmZzZXQ9Ii41ODIiIHN0b3Atb3BhY2l0eT0iLjIiIGlkPSJzdG9wMTUiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3Atb3BhY2l0eT0iMCIgaWQ9InN0b3AxNiIvP + jwvcmFkaWFsR3JhZGllbnQ+PGNpcmNsZSBjeD0iNDkuMDg3NDE0IiBjeT0iNzUuMjIwNTczIiBmaWxsPSJ1cmwoI3NReTdPdlBYSDB0Mm1LZnFrN1h1WGYpIiBpZD0iY2lyY2xlMTYiIHN0eWxlPSJmaWxsOnVybCgjc1F5N092U + FhIMHQybUtmcWs3WHVYZik7c3Ryb2tlLXdpZHRoOjIuMDE1MTEiIHI9IjUuMDM3NzgwMyIvPjxyYWRpYWxHcmFkaWVudCBpZD0ic1F5N092UFhIMHQybUtmcWs3WHVYZyIgY3g9IjExLjUiIGN5PSIxMS4zOSIgcj0iMi41IiBnc + mFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDIuMDE1MTEyMSwwLDAsLTIuMDE1MTEyMSwtMC4yODI4MzI5NSw5OC4xNzI2OTQpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHN0b3Agb2Zmc2V0PSIuNTgyIiBzdG9wL + W9wYWNpdHk9Ii4yIiBpZD0ic3RvcDE3Ii8+PHN0b3Agb2Zmc2V0PSIxIiBzdG9wLW9wYWNpdHk9IjAiIGlkPSJzdG9wMTgiLz48L3JhZGlhbEdyYWRpZW50PjxjaXJjbGUgY3g9IjIyLjg5MDk1OSIgY3k9Ijc1LjIyMDU3MyIgZ + mlsbD0idXJsKCNzUXk3T3ZQWEgwdDJtS2ZxazdYdVhnKSIgaWQ9ImNpcmNsZTE4IiBzdHlsZT0iZmlsbDp1cmwoI3NReTdPdlBYSDB0Mm1LZnFrN1h1WGcpO3N0cm9rZS13aWR0aDoyLjAxNTExIiByPSI1LjAzNzc4MDMiLz48Y + 2lyY2xlIGN4PSI3My4yNjg3NTMiIGN5PSI3NS4yMjA1NzMiIGZpbGw9IiM1MGU2ZmYiIGlkPSJjaXJjbGUxOSIgc3R5bGU9InN0cm9rZS13aWR0aDoyLjAxNTExIiByPSIzLjAyMjY2ODQiLz48Y2lyY2xlIGN4PSI2MS4xNzgwO + DIiIGN5PSI3NS4yMjA1NzMiIGZpbGw9IiM1MGU2ZmYiIGlkPSJjaXJjbGUyMCIgc3R5bGU9InN0cm9rZS13aWR0aDoyLjAxNTExIiByPSIzLjAyMjY2ODQiLz48Y2lyY2xlIGN4PSI0OS4wODc0MTQiIGN5PSI3NS4yMjA1NzMiI + GZpbGw9IiM1MGU2ZmYiIGlkPSJjaXJjbGUyMSIgc3R5bGU9InN0cm9rZS13aWR0aDoyLjAxNTExIiByPSIzLjAyMjY2ODQiLz48Y2lyY2xlIGN4PSIyMi44OTA5NTkiIGN5PSI3NS4yMjA1NzMiIGZpbGw9IiM1MGU2ZmYiIGlkP + SJjaXJjbGUyMiIgc3R5bGU9InN0cm9rZS13aWR0aDoyLjAxNTExIiByPSIzLjAyMjY2ODQiLz48cGF0aCBmaWxsPSJ1cmwoI2V3dzZmU0hYTEczaDRZZUFxZzl1X2EpIiBkPSJtIDQzLjExMTQ2NywzMy42NzAxOTcgdiAxMy4wN + zgwMjYgaCAyLjQ4ODcyOSB2IDMuNDE0NzQxIGggLTIuNDg4NzI5IHYgNC4yNTI0NTEgSCAzOC45NDQ5OTQgViA1MC4xNjI5NjQgSCAyOS45MDMzMSB2IC0zLjU3MzkxNyBjIDAuODAwNTI5LC0wLjg5NTgwNSAxLjYzMDEwNSwtM + S44Nzc1ODQgMi40ODg3MjcsLTIuOTQzMDIxIDAuODU4NjI0LC0xLjA2NTQzNiAxLjY4ODIwMSwtMi4xNjIyNDMgMi40ODg3MzEsLTMuMjkxNTgyIDAuODAwNTMsLTEuMTI5MzM5IDEuNTQ1Mjg4LC0yLjI2MzMyNiAyLjIzNTQ0L + C0zLjQwNzc3IDAuNjkwMTUyLC0xLjE0MjEyIDEuMjc1NzM2LC0yLjIzNTQ0MSAxLjc1NzkxMywtMy4yNzY0NzcgeiBtIC05LjExMzcyMiwxMy4wNzgwMjYgaCA0Ljk0NzI0OSBWIDM5LjUwMTYzIGMgLTAuMzM4MTA1LDAuNjI2M + jQ4IC0wLjcwNDA5MywxLjI2MDYzIC0xLjA5OTEzLDEuOTAxOTg0IC0wLjM5NjE5OCwwLjY0MjUxNCAtMC44MDk4MjYsMS4yNzM0MTIgLTEuMjQ0MzY0LDEuODk2MTc0IC0wLjQzMzM3NywwLjYyMTYwMiAtMC44NzI1NjYsMS4yM + jQ2MTQgLTEuMzE2NDAxLDEuODA3ODcxIC0wLjQ0MzgzNSwwLjU4MjEgLTAuODcyNTY1LDEuMTI5MzQgLTEuMjg3MzU0LDEuNjQwNTY0IHogbSAzMS43ODMwMDEsNi4yNzg3NTQgYyAtMi4wMjUxNDIsMS4xNjc2ODIgLTQuNTQyO + TE5LDEuNzUwOTQzIC03LjU1MjE2NiwxLjc1MDk0MyAtMy4zMzY4OTUsMCAtNS45NjczNzQsLTAuOTIzNjg4IC03Ljg5MTQzMywtMi43NzEwNjQgLTEuOTI0MDU5LC0xLjg0NjIxNyAtMi44ODQ5MjcsLTQuMzg5NTUzIC0yLjg4N + DkyNywtNy42MzAwMTMgMCwtMy4yNjAyMTIgMS4wNTAzMzIsLTUuOTE3NDEzIDMuMTUzMzIsLTcuOTcxNjAyIDIuMTAyOTg3LC0yLjA1NDE4OSA0Ljg5OTYxMiwtMy4wODEyODMgOC4zOTEwMzcsLTMuMDgxMjgzIDIuMTk5NDIzL + DAgNC4xMzc0MjQsMC4zMDQ0MTEgNS44MTYzMjksMC45MTIwNyB2IDQuMzgyNTggYyAtMS42MDIyMTksLTAuOTI2MDEzIC0zLjU1ODgxMiwtMS4zODg0MzkgLTUuODc0NDIyLC0xLjM4ODQzOSAtMS45MzkxNjUsMCAtMy41MTY5O + DQsMC42Mjk3MzYgLTQuNzM4MTE0LDEuODg4MDQ0IC0xLjIxOTk2NCwxLjI1ODMwNiAtMS44Mjk5NDcsMi45MzgzNzEgLTEuODI5OTQ3LDUuMDQxMzYgMCwyLjEzMjAzNiAwLjU0ODQwNCwzLjc4MDczIDEuNjQyODg3LDQuOTQ4N + DEzIDEuMDkzMzIxLDEuMTY2NTE4IDIuNTcyMzg0LDEuNzUwOTM4IDQuNDMzNzAyLDEuNzUwOTM4IDEuMTE3NzIsMCAyLjAwNTM5MiwtMC4xNjAzNDEgMi42NjE4NDgsLTAuNDc3NTI5IHYgLTQuMDUwMjgzIGggLTQuMTUzNjkyI + HYgLTMuNzMzMDk1IGggOC44MjU1NzggeiIgaWQ9InBhdGgyIiBzdHlsZT0iZmlsbDp1cmwoI2V3dzZmU0hYTEczaDRZZUFxZzl1X2EpO3N0cm9rZS13aWR0aDoxLjE2MTg3Ii8+PHBhdGggZmlsbD0iIzUwZTZmZiIgZD0ibSA1N + y4yNTcyNTUsMjYuODQ2NTIzIC03LjY0MDQ2OCw0Ljc5MDM5NiBjIC0wLjc1NTIxOSwwLjQ3NDA0MyAtMS43MTYwODYsMC40NzI4ODMgLTIuNDcxMzAyLC0wLjAwMTIgbCAtNy42MTgzOTMsLTQuNzg5MjM3IGMgMS45MDU0NywtM + y4wMjA4NjYgNS4yOTgxMzUsLTQuOTAzMDk4IDguODY1MDgxLC00LjkwMzA5OCAzLjU2Njk0NywwIDYuOTU5NjEzLDEuODgyMjMyIDguODY1MDgyLDQuOTAzMDk4IHoiIGlkPSJwYXRoMyIgc3R5bGU9InN0cm9rZS13aWR0aDoxL + jE2MTg3Ii8+PHBhdGggZmlsbD0iIzE5OWJlMiIgZD0ibSA2Ny4wOTk0NywyMC42ODI3OTIgLTYuODg5ODk3LDQuMzIxMDAyIGMgLTUuNTY2NTI4LC04LjgxNjI4NCAtMTguMjU1MzMsLTguNDg1MTQ4IC0yMy42MzQ3OTgsMCBsI + C0zLjkzNzU4MSwtMi40Njg5NzcgLTIuOTUzNDc5LC0xLjg1MjAyNSB2IC0wLjAwMTIgQyAzOC4zMTUyNiw2Ljk0MzU5MDEgNTguNDI5NTg0LDYuODk3MTE1NCA2Ny4wOTk0NywyMC42ODI3OTIgWiIgaWQ9InBhdGg0IiBzdHlsZ + T0ic3Ryb2tlLXdpZHRoOjEuMTYxODciLz48cGF0aCBmaWxsPSIjMDA3OGQ0IiBkPSJtIDcwLjIxNzkzNSwxNi45ODY4NzkgYyAwLjQ3MDU1NywwLjY2MzQzIDAuMzA2NzMzLDEuNTgyNDcgLTAuMzgyMjU2LDIuMDEzNTI1IGwgL + TMuNzA2MzcxLDIuMzIxNDE4IHYgLTAuMDAxMiBjIC04LjAzMzE4MiwtMTIuNzgxNzQ5NyAtMjcuMDYzNDc5LC0xMy4zNTMzOTA1IC0zNS40NzA3ODIsMCB2IDAuMDAxMiBMIDI2Ljk1MjE1NSwxOS4wMDA0MDQgQyAyNi4yNjMxN + jUsMTguNTY5MzQ5IDI2LjA5OTM0MywxNy42NTAzMDkgMjYuNTY4NzM5LDE2Ljk4Njg3OSAzMS41MzkyMjQsOS45NzQ5ODM1IDM5Ljc2NzYsNS42NzcyMiA0OC4zOTIxNzMsNS42NzcyMiBjIDguNjI0NTc2LDAgMTYuODUyOTUsN + C4yOTc3NjM1IDIxLjgyNTc2MiwxMS4zMDk2NTkgeiIgaWQ9InBhdGg1LTciIHN0eWxlPSJzdHJva2Utd2lkdGg6MS4xNjE4NyIvPjxwYXRoIGZpbGw9IiMzNWMxZjEiIGQ9Im0gNjEuMTkzNjc3LDI0LjM4Njg0MSAtNC45MjE2O + DksMy4wODU5MyBjIC0zLjc1MDUyMSwtNS45MTc0MTMgLTEyLjE3NTI1NSwtNS42MjQ2MjEgLTE1Ljc1OTYyOSwwIGwgLTQuOTIxNjg3LC0zLjA4NTkzIDAuMDAyNCwtMC4wMDM0IGMgNS44MTA1MjEsLTkuMjExMzIgMTkuNTMxMDY0LC05LjU2OTE3NiAyNS41OTYwMzQsLTAuMDAzNCB6IiBpZD0icGF0aDYiIHN0eWxlPSJzdHJva2Utd2lkdGg6MS4xNjE4NyIvPjwvc3ZnPgo=0 + + + Switch + image/svg+xmlicons8-switch.svgPD94bWwgdmVyc2lvbj0iMS4wIj8+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3 + Qm94PSIwIDAgNDggNDgiIHdpZHRoPSIyNDBweCIgaGVpZ2h0PSIyNDBweCI+PGxpbmVhckdyYWRpZW50IGlkPSJGcnRMVXlMNHo1VUU5blBZQV9HelFhIiB4MT0iMTEuMjM1IiB4Mj0iNDIuNzIxIiB5MT0iNDEuMjk3IiB5Mj0i + LTEuNjM5IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEgMCAwIC0xIDAgNDcuODkpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjMjFhZDY0Ii8+PHN0b3Ag + b2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjMDg4MjQyIi8+PC9saW5lYXJHcmFkaWVudD48cGF0aCBmaWxsPSJ1cmwoI0ZydExVeUw0ejVVRTluUFlBX0d6UWEpIiBkPSJNMzgsNDJIMTBjLTIuMiwwLTQtMS44LTQtNFYxMGMwLTIu + MiwxLjgtNCw0LTRoMjhjMi4yLDAsNCwxLjgsNCw0djI4QzQyLDQwLjIsNDAuMiw0MiwzOCw0MnoiLz48cGF0aCBkPSJNMTQuOTMsMjZjLTAuNDE5LDAtMC44MTUtMC4xNjItMS4xMTctMC40NTVMOS42MzIsMjEuNDkgQzkuMjI1 + LDIxLjA5Myw5LDIwLjU2NCw5LDIwczAuMjI1LTEuMDkzLDAuNjMyLTEuNDg5bDQuMTgxLTQuMDU3QzE0LjExNSwxNC4xNjEsMTQuNTEyLDE0LDE0LjkzLDE0YzAuODg1LDAsMS42MDQsMC43MSwxLjYwNCwxLjU4MyBWMTdoNC43 + MTZjMC45NjUsMCwxLjc1LDAuNzc1LDEuNzUsMS43Mjh2Mi41NDVDMjMsMjIuMjI1LDIyLjIxNSwyMywyMS4yNSwyM2gtNC43MTZ2MS40MTdjMCwwLjQ0OS0wLjE4MywwLjg2Mi0wLjUxNSwxLjE2NCBDMTUuNzIxLDI1Ljg1MSwx + NS4zMzQsMjYsMTQuOTMsMjZ6IiBvcGFjaXR5PSIuMDUiLz48cGF0aCBkPSJNMTQuOTMsMjUuNWMtMC4yODcsMC0wLjU2MS0wLjExMS0wLjc2OS0wLjMxM0w5Ljk4LDIxLjEzMSBDOS42NzEsMjAuODMsOS41LDIwLjQyOCw5LjUs + MjBzMC4xNzEtMC44MywwLjQ4LTEuMTNsNC4xODEtNC4wNTdjMC4yMDgtMC4yMDIsMC40ODEtMC4zMTMsMC43NjktMC4zMTMgYzAuNjA5LDAsMS4xMDQsMC40ODYsMS4xMDQsMS4wODNWMTcuNWg1LjIxNmMwLjY4OSwwLDEuMjUs + MC41NTEsMS4yNSwxLjIyOHYyLjU0NWMwLDAuNjc3LTAuNTYxLDEuMjI4LTEuMjUsMS4yMjhoLTUuMjE2djEuOTE3IGMwLDAuMzA3LTAuMTI1LDAuNTg5LTAuMzUxLDAuNzk0QzE1LjQ3OCwyNS4zOTcsMTUuMjEsMjUuNSwxNC45 + MywyNS41TDE0LjkzLDI1LjV6IiBvcGFjaXR5PSIuMDciLz48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMTUuNTM0LDI0LjQxN1YyMmg1LjcxNmMwLjQxNCwwLDAuNzUtMC4zMjYsMC43NS0wLjcyOHYtMi41NDRDMjIsMTguMzI2LDIx + LjY2NCwxOCwyMS4yNSwxOGgtNS43MTYgdi0yLjQxN2MwLTAuNTE5LTAuNjQ2LTAuNzc4LTEuMDI0LTAuNDEybC00LjE4LDQuMDU2Yy0wLjQzOSwwLjQyNi0wLjQzOSwxLjExOCwwLDEuNTQ0bDQuMTgsNC4wNTYgQzE0Ljg4OCwy + NS4xOTUsMTUuNTM0LDI0LjkzNSwxNS41MzQsMjQuNDE3eiIvPjxwYXRoIGQ9Ik0xNC45MywzOWMtMC40MTksMC0wLjgxNS0wLjE2Mi0xLjExNy0wLjQ1NUw5LjYzMiwzNC40OSBDOS4yMjUsMzQuMDkzLDksMzMuNTY0LDksMzNz + MC4yMjUtMS4wOTMsMC42MzItMS40ODlsNC4xODEtNC4wNTdDMTQuMTE1LDI3LjE2MSwxNC41MTIsMjcsMTQuOTMsMjdjMC44ODUsMCwxLjYwNCwwLjcxLDEuNjA0LDEuNTgzIFYzMGg0LjcxNmMwLjk2NSwwLDEuNzUsMC43NzUs + MS43NSwxLjcyOHYyLjU0NUMyMywzNS4yMjUsMjIuMjE1LDM2LDIxLjI1LDM2aC00LjcxNnYxLjQxN2MwLDAuNDQ5LTAuMTgzLDAuODYyLTAuNTE1LDEuMTY0IEMxNS43MjEsMzguODUxLDE1LjMzNCwzOSwxNC45MywzOXoiIG9w + YWNpdHk9Ii4wNSIvPjxwYXRoIGQ9Ik0xNC45MywzOC41Yy0wLjI4NywwLTAuNTYxLTAuMTExLTAuNzY5LTAuMzEzTDkuOTgsMzQuMTMxIEM5LjY3MSwzMy44Myw5LjUsMzMuNDI4LDkuNSwzM3MwLjE3MS0wLjgzLDAuNDgtMS4x + M2w0LjE4MS00LjA1N2MwLjIwOC0wLjIwMiwwLjQ4MS0wLjMxMywwLjc2OS0wLjMxMyBjMC42MDksMCwxLjEwNCwwLjQ4NiwxLjEwNCwxLjA4M1YzMC41aDUuMjE2YzAuNjg5LDAsMS4yNSwwLjU1MSwxLjI1LDEuMjI4djIuNTQ1 + YzAsMC42NzctMC41NjEsMS4yMjgtMS4yNSwxLjIyOGgtNS4yMTZ2MS45MTcgYzAsMC4zMDctMC4xMjUsMC41ODktMC4zNTEsMC43OTRDMTUuNDc4LDM4LjM5NywxNS4yMSwzOC41LDE0LjkzLDM4LjVMMTQuOTMsMzguNXoiIG9w + YWNpdHk9Ii4wNyIvPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik0xNS41MzQsMzcuNDE3VjM1aDUuNzE2YzAuNDE0LDAsMC43NS0wLjMyNiwwLjc1LTAuNzI4di0yLjU0NEMyMiwzMS4zMjYsMjEuNjY0LDMxLDIxLjI1LDMxaC01Ljcx + NiB2LTIuNDE3YzAtMC41MTktMC42NDYtMC43NzgtMS4wMjQtMC40MTJsLTQuMTgsNC4wNTZjLTAuNDM5LDAuNDI2LTAuNDM5LDEuMTE4LDAsMS41NDRsNC4xOCw0LjA1NiBDMTQuODg4LDM4LjE5NSwxNS41MzQsMzcuOTM1LDE1 + LjUzNCwzNy40MTd6Ii8+PHBhdGggZD0iTTMzLjA3LDM0Yy0wLjg4NSwwLTEuNjA0LTAuNzEtMS42MDQtMS41ODNWMzFIMjYuNzUgQzI1Ljc4NSwzMSwyNSwzMC4yMjUsMjUsMjkuMjcydi0yLjU0NUMyNSwyNS43NzUsMjUuNzg1 + LDI1LDI2Ljc1LDI1aDQuNzE2di0xLjQxN2MwLTAuODczLDAuNzItMS41ODMsMS42MDQtMS41ODMgYzAuNDE5LDAsMC44MTUsMC4xNjIsMS4xMTcsMC40NTVsNC4xODEsNC4wNTVDMzguNzc1LDI2LjkwNywzOSwyNy40MzYsMzks + MjhzLTAuMjI1LDEuMDkzLTAuNjMyLDEuNDg5bC00LjE4MSw0LjA1NyBDMzMuODg1LDMzLjgzOSwzMy40ODgsMzQsMzMuMDcsMzR6IiBvcGFjaXR5PSIuMDUiLz48cGF0aCBkPSJNMzMuMDcsMzMuNWMtMC42MDksMC0xLjEwNC0w + LjQ4Ni0xLjEwNC0xLjA4M1YzMC41SDI2Ljc1IGMtMC42ODksMC0xLjI1LTAuNTUxLTEuMjUtMS4yMjh2LTIuNTQ1YzAtMC42NzcsMC41NjEtMS4yMjgsMS4yNS0xLjIyOGg1LjIxNnYtMS45MTdjMC0wLjU5OCwwLjQ5NS0xLjA4 + MywxLjEwNC0xLjA4MyBjMC4yODcsMCwwLjU2MSwwLjExMSwwLjc2OSwwLjMxM2w0LjE4MSw0LjA1NmMwLjMxLDAuMzAxLDAuNDgsMC43MDMsMC40OCwxLjEzMXMtMC4xNzEsMC44My0wLjQ4LDEuMTNsLTQuMTgxLDQuMDU3IEMz + My42MzEsMzMuMzg5LDMzLjM1NywzMy41LDMzLjA3LDMzLjVMMzMuMDcsMzMuNXoiIG9wYWNpdHk9Ii4wNyIvPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik0zMi40NjYsMjMuNTgzVjI2SDI2Ljc1QzI2LjMzNiwyNiwyNiwyNi4zMjYs + MjYsMjYuNzI4djIuNTQ0QzI2LDI5LjY3NCwyNi4zMzYsMzAsMjYuNzUsMzBoNS43MTYgdjIuNDE3YzAsMC41MTksMC42NDYsMC43NzgsMS4wMjQsMC40MTJsNC4xOC00LjA1NmMwLjQzOS0wLjQyNiwwLjQzOS0xLjExOCwwLTEu + NTQ0bC00LjE4LTQuMDU2IEMzMy4xMTIsMjIuODA1LDMyLjQ2NiwyMy4wNjUsMzIuNDY2LDIzLjU4M3oiLz48cGF0aCBkPSJNMzMuMDcsMjFjLTAuODg1LDAtMS42MDQtMC43MS0xLjYwNC0xLjU4M1YxOEgyNi43NSBDMjUuNzg1 + LDE4LDI1LDE3LjIyNSwyNSwxNi4yNzJ2LTIuNTQ1QzI1LDEyLjc3NSwyNS43ODUsMTIsMjYuNzUsMTJoNC43MTZ2LTEuNDE3QzMxLjQ2Niw5LjcxLDMyLjE4Niw5LDMzLjA3LDkgYzAuNDE5LDAsMC44MTUsMC4xNjIsMS4xMTcs + MC40NTVsNC4xODEsNC4wNTVDMzguNzc1LDEzLjkwNywzOSwxNC40MzYsMzksMTVzLTAuMjI1LDEuMDkzLTAuNjMyLDEuNDg5bC00LjE4MSw0LjA1NyBDMzMuODg1LDIwLjgzOSwzMy40ODgsMjEsMzMuMDcsMjF6IiBvcGFjaXR5 + PSIuMDUiLz48cGF0aCBkPSJNMzMuMDcsMjAuNWMtMC42MDksMC0xLjEwNC0wLjQ4Ni0xLjEwNC0xLjA4M1YxNy41SDI2Ljc1IGMtMC42ODksMC0xLjI1LTAuNTUxLTEuMjUtMS4yMjh2LTIuNTQ1YzAtMC42NzcsMC41NjEtMS4y + MjgsMS4yNS0xLjIyOGg1LjIxNnYtMS45MTdjMC0wLjU5OCwwLjQ5NS0xLjA4MywxLjEwNC0xLjA4MyBjMC4yODcsMCwwLjU2MSwwLjExMSwwLjc2OSwwLjMxM2w0LjE4MSw0LjA1NmMwLjMxLDAuMzAxLDAuNDgsMC43MDMsMC40 + OCwxLjEzMXMtMC4xNzEsMC44My0wLjQ4LDEuMTNsLTQuMTgxLDQuMDU3IEMzMy42MzEsMjAuMzg5LDMzLjM1NywyMC41LDMzLjA3LDIwLjVMMzMuMDcsMjAuNXoiIG9wYWNpdHk9Ii4wNyIvPjxwYXRoIGZpbGw9IiNmZmYiIGQ9 + Ik0zMi40NjYsMTAuNTgzVjEzSDI2Ljc1QzI2LjMzNiwxMywyNiwxMy4zMjYsMjYsMTMuNzI4djIuNTQ0QzI2LDE2LjY3NCwyNi4zMzYsMTcsMjYuNzUsMTdoNS43MTYgdjIuNDE3YzAsMC41MTksMC42NDYsMC43NzgsMS4wMjQs + MC40MTJsNC4xOC00LjA1NmMwLjQzOS0wLjQyNiwwLjQzOS0xLjExOCwwLTEuNTQ0bC00LjE4LTQuMDU2IEMzMy4xMTIsOS44MDUsMzIuNDY2LDEwLjA2NSwzMi40NjYsMTAuNTgzeiIvPjwvc3ZnPgo=0 + + + Wireless Access Point + image/pngicons8-wi-fi-router-96.pngiVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAAACXBIWXMAAAsTAAALEwEAmpwYAAAIXUlEQVR + 4nO1af3ATVR5/WBR1bkA5HWJrmdO7Ob3zZA4snbkRb+6PE8VqkxbK6D/3D3OcowKXhutuEmA3FGkibZOg2NCCDtzNKYwO6nj+GKu0OKMz/vinuwntAf2RJqlQ2iTciW2B+968xcBm+yO7yW7S3b7PzGemk7zse+/zee/78nkNQgQ + EBAQEBAQEBAQEBAQEslFztAghmCf/AwTKBa7jyxHd9SyieC+i+Y8QxfUgij+HaP4ionn4kRcRzQ0jmu9GNPcBorlmVMf/BTlCKxADNxDZlcDetQTR/AuI5t9DNJ8QiZwtRxHFHRNMpEM/JWZMhY3f3IjquKcRxf0LUfwlFUSfmhQ + 3jijuXWTn1yHm+HxixqZ/L0AU9ydEcac0E31acn2I4rYg6xe3zD0jcF0WSgJ/Nv/CTzJiCNn5P8+dswIfjDT3ZeGF56Xl6VtEd/0OGRa45tJcA6K4KwUXm57WhCvCGA13Pji5UkRzn6st2Dx7EObZtTCC/wrRXfciQ4DiVyGaG8l + aZEcQFtR3w088p+B2by/cua8fluwfgLvaMMMCTa1hWBIYgDte6YPbvGeEtgt2dudoDjcijF3XoIJmSWCSvbJv3d0Di/f2CeKmhFZKU+sALPb3wi0v9gjPzMKIi8getCBdguafQTR/WcmEi7aFYFHTaTAJKzysKvGuWdh4GoqcIaU + m4Dk8g3QHiv9O7iRvcAZhUePpnFa7kl2xcM8poU8FZ0IE6Q4U3ytncjfv6hbqt9bCT9oRgX64ub5brgkhpDvUcY8J0X+GVb/Y15t34aXEhzY+6Gc8ByjuD0iXqAuuQTQ3Jp3U/O0huHNfX8HFTxF/s8Lnz9R3R10VSNegg0+ITbj + JdRJM+9URruTgIJQcVK8k3cicTBef5p5EhgBeRTQ3dhOLxe//n1Jxig+G4Z43huBX7wzDsg9H4KHPErCyM5nGFZ/Ghffuf+cc3PPPGBQfGFRsAh6bYMLVW9OnkJFQtJ1ba2od+I8SQX729yg88P4wlHVMFjwTy44n4dfvDcPSwxF + lJrSGR4scIZ2XnWlg2j+49q628EQmEZYejsCDH4woFn06/ub981B6KLMRptbweHHbgLFWvhSmtsHq6UwoPhCGX759NqsVn3FHdCSEZxfPZfFTWHKgv8LUFh4TC3D3axFY9vGo6sJLiXcWPrznrPhTmVB6KALL2+Oai5/ibz8ZhZL + XI3NXfLEJJa8Nji9vj0/kS/wUl7fHL5YcHJyYs+Kn8NCnIzUrOxKKDSjH/PyCwKzOhM7ED8s+HjWe+DaHq6LWwfTbnEzE5nCtkfOZss74WjkmrPr6e3j05Dg82X8FLFEAS+wqzVGAir4r8GhoHB7+6r+yxF95PPG4/PmwUWFOMud + TUAjCO1m4SiZWI/x6LTcTHvnme0HglOCZWNF7GVZNY4QgfmfiMTljwmOvdbBD1+bjYMJotgOLft0AFmqdjOz/KpV1xKvFJpSfSMLq7gnZwkv5x9C4UKquG5AYW3kiKft64W921yPiueC5odmOWgdzOG3QDtaj5PNlP5qAa/uaM5e + zFj/FNacvCUZi8cs7k4oSrs3B7kk3gD2EZjtsdmZ9ugGM4rv0so549RO9l6O5ip/i46cmBso7E6sVz8XJnkzfza4aNNuxiWEW1jrYcfHArTTzC6XPscSg2hyFCRUMGKsaAsV3O1ud9T+XlJ+JLQxzG9IDbE6mPW3lbGO3ZPMcyxC + st0ThUrbim2PwgyUKq7OawzbWmjYHB/sJ0guw4JLV057tsypjsC6bnWCOwbhlCLK+z7c5mc8kpXQz0gv+SjP3qrl9K2OwTslOwOKbI5B1yKIo9yI85lzLaEFR62SDaSbYmfW5PK9Spgm5io9hszNPpx++bBDpDfjrZ3oNZQ7n+sz + KDCZg8SsjUJn72Jl/SLKMG+kNOIBJ8sAIwzDztTLBrJL4Qvp1MufFY99qdz2M9AY8EZuDHc42FSsxQThwo2BGKsDmZH4vGfN5udcphkvFM8EcBYs5BoOWKPRWxUDWxZph06+WqTjf0GX61ToV5wu6Tr9ap+J8QNfpNx+pWGvoOv3 + mKxVrBUOk33ylYi1giPSbz1SsNgyRfvOditWCYdJvIVKxGjBU+i1EKs4Vhkq/ekzFNiOlX72l4q1GTL96SsU2I6ZfPaVim57Sb2PjvlK3P/CW299yweMPAGHgmgZYE7e/5ZjH++p9GorfMkJED8y88HyBUayV6gbglU/ED8ja9W5 + /y1ENDCBlxyPXAF8gqboB0k4kwWXO0yPRR30DfC0gJhGdTdNAqo/qBrh9LSDmTAZY7dthc51DoNW+QzOzrAr70bK9VB/VDWjwvgpiTj0QBp63UbBxkxU2PLdZIP4bv4bfU098RmE/Wrdn07TBLIgBeIAbNllh/ZGPoKonAVU9ceH + vDdcGr44BzyvsR+v2eTFgd/M+EHOq7YpXCR6o9Fdr+DX8nhrlyKqwH63bpyjVJ+8G4DqJtypeMdKBV/Ukhfdwm1wN2KywH63b582AF5teATGnFyY+aeDV3XENDIjL6kfr9ilK9VHfgMaXQczJpWHHtFu35s0PVSxBOxT1o3X7awZ + I9FHdgF2NL4OYU4mTfnjF83QIxxUequq3x5Tqo74Be/aCmFOLM3e/hu6S6KO6AfV79oKYmcpEfoLYDoXBSrv2Un3UN+AlP4iplag2nVKqj+oG7HzJD2IWesK2WUapPqob4HL7Luz0+IDQl1EDl8eXUN+AhuZjLrcXCL0ZNWAbvEd + UN2Cnx3sf624eJQZ4Zxbf3XyecfvvRlqgvr6xlGloPso2NCXZhmYgbBZp0JRkdzcd0Ux8AgICAgICAgICAgICAgICAgKkd/wfA+F5ouAmxqQAAAAASUVORK5CYII=0 + + diff --git a/datamodels/2.x/itop-config-mgmt/datamodel.itop-config-mgmt.xml b/datamodels/2.x/itop-config-mgmt/datamodel.itop-config-mgmt.xml index 27f43a136..b3f381390 100755 --- a/datamodels/2.x/itop-config-mgmt/datamodel.itop-config-mgmt.xml +++ b/datamodels/2.x/itop-config-mgmt/datamodel.itop-config-mgmt.xml @@ -1068,7 +1068,7 @@ 10 - + 10 @@ -1131,7 +1131,7 @@ 20 - + 10 @@ -1159,7 +1159,7 @@ - + 30 @@ -1283,7 +1283,39 @@ - + + + /** + * Overrides the GetIcon method to return the logo of the associated NetworkDeviceType if any, otherwise the default icon of the class will be returned + * + */ + false + public + Custom + Get($sExtKeyCode); + if ($iObj > 0) { + $oObj = MetaModel::GetObject($sIconClass, $iObj, true, true); + $oImage = $oObj->Get($sIconAttCode); + $sIconUrl = $oImage->IsEmpty() ? '' : $oImage->GetDisplayURL($sIconClass, $iObj, $sIconAttCode); + if (strlen($sIconUrl) > 0) { + if ($bImgTag) { + return ""; + } else { + return $sIconUrl; + } + } + } + // Return the default image + return parent::GetIcon($bImgTag); + }]]> + + @@ -1419,7 +1451,7 @@ 120 - + 10 @@ -1488,7 +1520,7 @@ 130 - + 10 @@ -1516,7 +1548,7 @@ - + 30 @@ -1646,6 +1678,7 @@ status + logo @@ -3113,6 +3213,13 @@ middleware_id name +
@@ -3133,7 +3240,7 @@ 10 - + 30 @@ -3146,17 +3253,25 @@ - + - 50 - - - 60 + 10 10 + + + + 10 + + + + 20 + 20 @@ -3295,7 +3410,7 @@ 10 - + 10 @@ -3308,17 +3423,22 @@ - + - 50 - - - 60 + 10 10 + + + + 10 + + + 20 + 20 @@ -3412,6 +3532,9 @@ + + logo + @@ -3443,6 +3566,13 @@ true _blank +
@@ -3479,17 +3609,25 @@ - + - 60 - - - 70 + 10 10 + + + + 10 + + + + 20 + 20 @@ -3593,6 +3731,9 @@ + + logo + @@ -3652,6 +3793,13 @@ true list + SoftwareInstance software_id @@ -3678,30 +3826,58 @@
- + + + + + + 10 + + + 20 + + + 10 + + + + + 30 + + + 40 + + + 20 + + 10 - + + + + + + + 10 + + 20 - - 30 - - - 40 - - 50 - - 60 - + 70 - + 80 + + 90 +
@@ -3809,13 +3985,33 @@
- + + + + + + 10 + + + 10 + + 10 - + + + + + + 10 + + + 10 + + 20 - + 30 @@ -3899,21 +4095,46 @@
- + + + + + + 10 + + + 10 + + + + + 10 + + + 20 + + 10 - + + + + + + 10 + + + 10 + + 20 - + 30 - + 40 - - 50 -
@@ -4001,18 +4222,43 @@
- + + + + + + 10 + + + 10 + + + + + 10 + + + 20 + + 10 - + + + + + + 10 + + + 10 + + 20 - + 30 - - 40 - 50 @@ -4366,20 +4612,25 @@ - + - 70 + 10 - 80 - - - 90 + 20 10 + + + + 10 + + + 20 + 20 @@ -4542,7 +4793,7 @@ - + 70 @@ -4550,12 +4801,17 @@ 80 - - 90 - 10 + + + + 10 + + + 20 + 20 @@ -4749,6 +5005,17 @@ + + + + + + + + false + true + + @@ -4826,6 +5093,16 @@ + + + + + + + false + true + +
@@ -5228,7 +5515,7 @@ - + @@ -5260,6 +5547,15 @@ + + + + + + + true + + @@ -6003,21 +6299,46 @@
- + + + + + + 10 + + + 30 + + + 10 + + + + + 10 + + + 20 + + + 20 + + 10 - + + + + + + 10 + + + 10 + + 20 - - 25 - - - 30 - - - 40 - 50 @@ -6165,15 +6486,35 @@
- + + + + + + 10 + + + 20 + + + 10 + + 10 - + + + + + + 10 + + + 10 + + 20 - - 30 - 40 @@ -6639,10 +6980,10 @@ - + - 60 + 10 10 @@ -7455,10 +7796,10 @@ - + - 50 + 10 10 diff --git a/datamodels/2.x/itop-config-mgmt/dictionaries/cs.dict.itop-config-mgmt.php b/datamodels/2.x/itop-config-mgmt/dictionaries/cs.dict.itop-config-mgmt.php index 1bb28bf76..79f09d68e 100644 --- a/datamodels/2.x/itop-config-mgmt/dictionaries/cs.dict.itop-config-mgmt.php +++ b/datamodels/2.x/itop-config-mgmt/dictionaries/cs.dict.itop-config-mgmt.php @@ -494,6 +494,8 @@ Dict::Add('CS CZ', 'Czech', 'Čeština', [ 'Class:ApplicationSolution/Attribute:functionalcis_list+' => 'Všechny konfigurační položky, které tvoří toto aplikační řešení', 'Class:ApplicationSolution/Attribute:businessprocess_list' => 'Obchodní procesy', 'Class:ApplicationSolution/Attribute:businessprocess_list+' => 'Všechny obchodní procesy závisející na tomto aplikačním řešení', + 'Class:ApplicationSolution/Attribute:logo' => 'Logo~~', + 'Class:ApplicationSolution/Attribute:logo+' => 'Used as object icon when displayed within impact analysis graphs~~', 'Class:ApplicationSolution/Attribute:status' => 'Stav', 'Class:ApplicationSolution/Attribute:status+' => '', 'Class:ApplicationSolution/Attribute:status/Value:active' => 'aktivní', @@ -515,6 +517,8 @@ Dict::Add('CS CZ', 'Czech', 'Čeština', [ 'Class:BusinessProcess+' => '', 'Class:BusinessProcess/Attribute:applicationsolutions_list' => 'Aplikační řešení', 'Class:BusinessProcess/Attribute:applicationsolutions_list+' => 'Všechna aplikační řešení, která ovlivňují tento proces', + 'Class:BusinessProcess/Attribute:logo' => 'Logo~~', + 'Class:BusinessProcess/Attribute:logo+' => 'Used as object icon when displayed within impact analysis graphs~~', 'Class:BusinessProcess/Attribute:status' => 'Stav', 'Class:BusinessProcess/Attribute:status+' => '', 'Class:BusinessProcess/Attribute:status/Value:active' => 'aktivní', @@ -579,7 +583,7 @@ Dict::Add('CS CZ', 'Czech', 'Čeština', [ // Dict::Add('CS CZ', 'Czech', 'Čeština', [ - 'Class:WebServer' => 'Web server', + 'Class:WebServer' => 'Web Server', 'Class:WebServer+' => '', 'Class:WebServer/Attribute:webapp_list' => 'Web aplikace', 'Class:WebServer/Attribute:webapp_list+' => 'Všechny webové aplikace dostupné na tomto web serveru', @@ -611,6 +615,8 @@ Dict::Add('CS CZ', 'Czech', 'Čeština', [ 'Class:MiddlewareInstance' => 'Instance middlewaru', 'Class:MiddlewareInstance+' => '', 'Class:MiddlewareInstance/ComplementaryName' => '%1$s - %2$s', + 'Class:MiddlewareInstance/Attribute:logo' => 'Logo~~', + 'Class:MiddlewareInstance/Attribute:logo+' => 'Used as object icon when displayed within impact analysis graphs~~', 'Class:MiddlewareInstance/Attribute:middleware_id' => 'Middleware', 'Class:MiddlewareInstance/Attribute:middleware_id+' => '', 'Class:MiddlewareInstance/Attribute:middleware_name' => 'Název middlewaru', @@ -643,6 +649,8 @@ Dict::Add('CS CZ', 'Czech', 'Čeština', [ 'Class:WebApplication/Attribute:webserver_id+' => '', 'Class:WebApplication/Attribute:webserver_name' => 'Název web serveru', 'Class:WebApplication/Attribute:webserver_name+' => '', + 'Class:WebApplication/Attribute:logo' => 'Logo~~', + 'Class:WebApplication/Attribute:logo+' => 'Used as object icon when displayed within impact analysis graphs~~', 'Class:WebApplication/Attribute:url' => 'URL', 'Class:WebApplication/Attribute:url+' => '', ]); @@ -840,7 +848,7 @@ Dict::Add('CS CZ', 'Czech', 'Čeština', [ Dict::Add('CS CZ', 'Czech', 'Čeština', [ 'Class:Tape' => 'Páska', - 'Class:Tape+' => '', + 'Class:Tape+' => 'A Tape (or cartridge) within '.ITOP_APPLICATION_SHORT.' is a removable piece of storage part of a Tape Library~~', 'Class:Tape/Attribute:name' => 'Název', 'Class:Tape/Attribute:name+' => '', 'Class:Tape/Attribute:description' => 'Popis', @@ -890,6 +898,8 @@ Dict::Add('CS CZ', 'Czech', 'Čeština', [ 'Class:Software/Attribute:version+' => '', 'Class:Software/Attribute:documents_list' => 'Dokumenty', 'Class:Software/Attribute:documents_list+' => 'Všechny dokumenty spojené s tímto software', + 'Class:Software/Attribute:logo' => 'Logo~~', + 'Class:Software/Attribute:logo+' => 'Used as icon for all Software Instance objects using this Software, when displayed within impact analysis graphs~~', 'Class:Software/Attribute:type' => 'Typ', 'Class:Software/Attribute:type+' => '', 'Class:Software/Attribute:type/Value:DBServer' => 'DB Server', @@ -1055,6 +1065,8 @@ Dict::Add('CS CZ', 'Czech', 'Čeština', [ 'Class:OSVersion/Attribute:osfamily_id+' => '', 'Class:OSVersion/Attribute:osfamily_name' => 'Název rodiny OS', 'Class:OSVersion/Attribute:osfamily_name+' => '', + 'Class:OSVersion/UniquenessRule:name_osfamily+' => 'Name must be unique in the OS family~~', + 'Class:OSVersion/UniquenessRule:name_osfamily' => 'this OS version already exists within the OS family~~', ]); // @@ -1064,6 +1076,8 @@ Dict::Add('CS CZ', 'Czech', 'Čeština', [ Dict::Add('CS CZ', 'Czech', 'Čeština', [ 'Class:OSFamily' => 'Rodina OS', 'Class:OSFamily+' => '', + 'Class:OSFamily/UniquenessRule:name+' => 'Name must be unique~~', + 'Class:OSFamily/UniquenessRule:name' => 'this OS family already exists~~', ]); // @@ -1146,6 +1160,8 @@ Dict::Add('CS CZ', 'Czech', 'Čeština', [ Dict::Add('CS CZ', 'Czech', 'Čeština', [ 'Class:NetworkDeviceType' => 'Typ síťového zařízení', 'Class:NetworkDeviceType+' => '', + 'Class:NetworkDeviceType/Attribute:logo' => 'Logo~~', + 'Class:NetworkDeviceType/Attribute:logo+' => 'Used as icon for all Network Device of this type, when displayed in console (details, summary card and impact analysis graphs)~~', 'Class:NetworkDeviceType/Attribute:networkdevicesdevices_list' => 'Síťová zařízení', 'Class:NetworkDeviceType/Attribute:networkdevicesdevices_list+' => 'Všechna síťová zařízení odpovídající tomuto typu', ]); @@ -1161,6 +1177,8 @@ Dict::Add('CS CZ', 'Czech', 'Čeština', [ 'Class:IOSVersion/Attribute:brand_id+' => '', 'Class:IOSVersion/Attribute:brand_name' => 'Název výrobce', 'Class:IOSVersion/Attribute:brand_name+' => '', + 'Class:IOSVersion/UniquenessRule:name_brand+' => 'Name must be unique in the brand~~', + 'Class:IOSVersion/UniquenessRule:name_brand' => 'this IOS version already exists for this brand~~', ]); // @@ -1531,7 +1549,8 @@ Dict::Add('CS CZ', 'Czech', 'Čeština', [ 'ConfigMgmt:baseinfo' => 'General~~', 'ConfigMgmt:moreinfo' => 'CI specifics~~', 'Storage:moreinfo' => 'Storage specifics~~', - 'ConfigMgmt:otherinfo' => 'Dates and description~~', + 'ConfigMgmt:otherinfo' => 'Description~~', + 'ConfigMgmt:dates' => 'Dates~~', 'Software:moreinfo' => 'Software specifics~~', 'Phone:moreinfo' => 'Phone specifics~~', 'Server:baseinfo' => 'Obecné informace', @@ -1622,8 +1641,8 @@ Dict::Add('CS CZ', 'Czech', 'Čeština', [ // Dict::Add('CS CZ', 'Czech', 'Čeština', [ - 'Class:PhysicalInterface/Attribute:org_id' => 'Org id~~', + 'Class:PhysicalInterface/Attribute:org_id' => 'Organization~~', 'Class:PhysicalInterface/Attribute:org_id+' => '~~', - 'Class:PhysicalInterface/Attribute:location_id' => 'Location id~~', + 'Class:PhysicalInterface/Attribute:location_id' => 'Location~~', 'Class:PhysicalInterface/Attribute:location_id+' => '~~', ]); diff --git a/datamodels/2.x/itop-config-mgmt/dictionaries/da.dict.itop-config-mgmt.php b/datamodels/2.x/itop-config-mgmt/dictionaries/da.dict.itop-config-mgmt.php index 43ee573ac..0d689f7c9 100644 --- a/datamodels/2.x/itop-config-mgmt/dictionaries/da.dict.itop-config-mgmt.php +++ b/datamodels/2.x/itop-config-mgmt/dictionaries/da.dict.itop-config-mgmt.php @@ -493,6 +493,8 @@ Dict::Add('DA DA', 'Danish', 'Dansk', [ 'Class:ApplicationSolution/Attribute:functionalcis_list+' => 'All the configuration items that compose this application solution~~', 'Class:ApplicationSolution/Attribute:businessprocess_list' => 'Forretningsprocesser', 'Class:ApplicationSolution/Attribute:businessprocess_list+' => 'All the business processes depending on this application solution~~', + 'Class:ApplicationSolution/Attribute:logo' => 'Logo~~', + 'Class:ApplicationSolution/Attribute:logo+' => 'Used as object icon when displayed within impact analysis graphs~~', 'Class:ApplicationSolution/Attribute:status' => 'Status', 'Class:ApplicationSolution/Attribute:status+' => '', 'Class:ApplicationSolution/Attribute:status/Value:active' => 'Aktiv', @@ -514,6 +516,8 @@ Dict::Add('DA DA', 'Danish', 'Dansk', [ 'Class:BusinessProcess+' => '', 'Class:BusinessProcess/Attribute:applicationsolutions_list' => 'Anvendelsområder', 'Class:BusinessProcess/Attribute:applicationsolutions_list+' => 'Liste over applikations løsninger', + 'Class:BusinessProcess/Attribute:logo' => 'Logo~~', + 'Class:BusinessProcess/Attribute:logo+' => 'Used as object icon when displayed within impact analysis graphs~~', 'Class:BusinessProcess/Attribute:status' => 'Status', 'Class:BusinessProcess/Attribute:status+' => '', 'Class:BusinessProcess/Attribute:status/Value:active' => 'Aktiv', @@ -610,6 +614,8 @@ Dict::Add('DA DA', 'Danish', 'Dansk', [ 'Class:MiddlewareInstance' => 'Middleware instans', 'Class:MiddlewareInstance+' => '', 'Class:MiddlewareInstance/ComplementaryName' => '%1$s - %2$s~~', + 'Class:MiddlewareInstance/Attribute:logo' => 'Logo~~', + 'Class:MiddlewareInstance/Attribute:logo+' => 'Used as object icon when displayed within impact analysis graphs~~', 'Class:MiddlewareInstance/Attribute:middleware_id' => 'Middleware', 'Class:MiddlewareInstance/Attribute:middleware_id+' => '', 'Class:MiddlewareInstance/Attribute:middleware_name' => 'Middleware navn', @@ -642,6 +648,8 @@ Dict::Add('DA DA', 'Danish', 'Dansk', [ 'Class:WebApplication/Attribute:webserver_id+' => '', 'Class:WebApplication/Attribute:webserver_name' => 'Web servernavn', 'Class:WebApplication/Attribute:webserver_name+' => '', + 'Class:WebApplication/Attribute:logo' => 'Logo~~', + 'Class:WebApplication/Attribute:logo+' => 'Used as object icon when displayed within impact analysis graphs~~', 'Class:WebApplication/Attribute:url' => 'URL', 'Class:WebApplication/Attribute:url+' => '', ]); @@ -839,7 +847,7 @@ Dict::Add('DA DA', 'Danish', 'Dansk', [ Dict::Add('DA DA', 'Danish', 'Dansk', [ 'Class:Tape' => 'Bånd', - 'Class:Tape+' => '', + 'Class:Tape+' => 'A Tape (or cartridge) within '.ITOP_APPLICATION_SHORT.' is a removable piece of storage part of a Tape Library~~', 'Class:Tape/Attribute:name' => 'Navn', 'Class:Tape/Attribute:name+' => '', 'Class:Tape/Attribute:description' => 'Beskrivelse', @@ -889,6 +897,8 @@ Dict::Add('DA DA', 'Danish', 'Dansk', [ 'Class:Software/Attribute:version+' => '', 'Class:Software/Attribute:documents_list' => 'Dokument', 'Class:Software/Attribute:documents_list+' => 'All the documents linked to this software~~', + 'Class:Software/Attribute:logo' => 'Logo~~', + 'Class:Software/Attribute:logo+' => 'Used as icon for all Software Instance objects using this Software, when displayed within impact analysis graphs~~', 'Class:Software/Attribute:type' => 'Type', 'Class:Software/Attribute:type+' => '', 'Class:Software/Attribute:type/Value:DBServer' => 'DB Server', @@ -1054,6 +1064,8 @@ Dict::Add('DA DA', 'Danish', 'Dansk', [ 'Class:OSVersion/Attribute:osfamily_id+' => '', 'Class:OSVersion/Attribute:osfamily_name' => 'OS familienavn', 'Class:OSVersion/Attribute:osfamily_name+' => '', + 'Class:OSVersion/UniquenessRule:name_osfamily+' => 'Name must be unique in the OS family~~', + 'Class:OSVersion/UniquenessRule:name_osfamily' => 'this OS version already exists within the OS family~~', ]); // @@ -1063,6 +1075,8 @@ Dict::Add('DA DA', 'Danish', 'Dansk', [ Dict::Add('DA DA', 'Danish', 'Dansk', [ 'Class:OSFamily' => 'OS-Familie', 'Class:OSFamily+' => '', + 'Class:OSFamily/UniquenessRule:name+' => 'Name must be unique~~', + 'Class:OSFamily/UniquenessRule:name' => 'this OS family already exists~~', ]); // @@ -1145,6 +1159,8 @@ Dict::Add('DA DA', 'Danish', 'Dansk', [ Dict::Add('DA DA', 'Danish', 'Dansk', [ 'Class:NetworkDeviceType' => 'Netværksenhed type', 'Class:NetworkDeviceType+' => '', + 'Class:NetworkDeviceType/Attribute:logo' => 'Logo~~', + 'Class:NetworkDeviceType/Attribute:logo+' => 'Used as icon for all Network Device of this type, when displayed in console (details, summary card and impact analysis graphs)~~', 'Class:NetworkDeviceType/Attribute:networkdevicesdevices_list' => 'Netværks enheder', 'Class:NetworkDeviceType/Attribute:networkdevicesdevices_list+' => 'All the network devices corresponding to this type~~', ]); @@ -1160,6 +1176,8 @@ Dict::Add('DA DA', 'Danish', 'Dansk', [ 'Class:IOSVersion/Attribute:brand_id+' => '', 'Class:IOSVersion/Attribute:brand_name' => 'Mærkenavn', 'Class:IOSVersion/Attribute:brand_name+' => '', + 'Class:IOSVersion/UniquenessRule:name_brand+' => 'Name must be unique in the brand~~', + 'Class:IOSVersion/UniquenessRule:name_brand' => 'this IOS version already exists for this brand~~', ]); // @@ -1530,7 +1548,8 @@ Dict::Add('DA DA', 'Danish', 'Dansk', [ 'ConfigMgmt:baseinfo' => 'General~~', 'ConfigMgmt:moreinfo' => 'CI specifics~~', 'Storage:moreinfo' => 'Storage specifics~~', - 'ConfigMgmt:otherinfo' => 'Dates and description~~', + 'ConfigMgmt:otherinfo' => 'Description~~', + 'ConfigMgmt:dates' => 'Dates~~', 'Software:moreinfo' => 'Software specifics~~', 'Phone:moreinfo' => 'Phone specifics~~', 'Server:baseinfo' => 'Almindelig Informationen', @@ -1621,8 +1640,8 @@ Dict::Add('DA DA', 'Danish', 'Dansk', [ // Dict::Add('DA DA', 'Danish', 'Dansk', [ - 'Class:PhysicalInterface/Attribute:org_id' => 'Org id~~', + 'Class:PhysicalInterface/Attribute:org_id' => 'Organization~~', 'Class:PhysicalInterface/Attribute:org_id+' => '~~', - 'Class:PhysicalInterface/Attribute:location_id' => 'Location id~~', + 'Class:PhysicalInterface/Attribute:location_id' => 'Location~~', 'Class:PhysicalInterface/Attribute:location_id+' => '~~', ]); diff --git a/datamodels/2.x/itop-config-mgmt/dictionaries/de.dict.itop-config-mgmt.php b/datamodels/2.x/itop-config-mgmt/dictionaries/de.dict.itop-config-mgmt.php index b5e35c0bd..5111c8add 100644 --- a/datamodels/2.x/itop-config-mgmt/dictionaries/de.dict.itop-config-mgmt.php +++ b/datamodels/2.x/itop-config-mgmt/dictionaries/de.dict.itop-config-mgmt.php @@ -493,6 +493,8 @@ Dict::Add('DE DE', 'German', 'Deutsch', [ 'Class:ApplicationSolution/Attribute:functionalcis_list+' => 'Alle CIs, aus denen diese Anwendungslösung besteht', 'Class:ApplicationSolution/Attribute:businessprocess_list' => 'Business-Prozesse', 'Class:ApplicationSolution/Attribute:businessprocess_list+' => 'Alle Geschäftsprozesse, die von dieser Anwendungslösung abhängen', + 'Class:ApplicationSolution/Attribute:logo' => 'Logo~~', + 'Class:ApplicationSolution/Attribute:logo+' => 'Used as object icon when displayed within impact analysis graphs~~', 'Class:ApplicationSolution/Attribute:status' => 'Status', 'Class:ApplicationSolution/Attribute:status+' => '', 'Class:ApplicationSolution/Attribute:status/Value:active' => 'aktiv', @@ -514,6 +516,8 @@ Dict::Add('DE DE', 'German', 'Deutsch', [ 'Class:BusinessProcess+' => '', 'Class:BusinessProcess/Attribute:applicationsolutions_list' => 'Anwendungslösungen', 'Class:BusinessProcess/Attribute:applicationsolutions_list+' => 'Alle Anwendungslösungen, die sich auf diesen Geschäftsprozess auswirken', + 'Class:BusinessProcess/Attribute:logo' => 'Logo~~', + 'Class:BusinessProcess/Attribute:logo+' => 'Used as object icon when displayed within impact analysis graphs~~', 'Class:BusinessProcess/Attribute:status' => 'Status', 'Class:BusinessProcess/Attribute:status+' => '', 'Class:BusinessProcess/Attribute:status/Value:active' => 'aktiv', @@ -610,6 +614,8 @@ Dict::Add('DE DE', 'German', 'Deutsch', [ 'Class:MiddlewareInstance' => 'Middleware-Instanz', 'Class:MiddlewareInstance+' => '', 'Class:MiddlewareInstance/ComplementaryName' => '%1$s - %2$s', + 'Class:MiddlewareInstance/Attribute:logo' => 'Logo~~', + 'Class:MiddlewareInstance/Attribute:logo+' => 'Used as object icon when displayed within impact analysis graphs~~', 'Class:MiddlewareInstance/Attribute:middleware_id' => 'Middleware', 'Class:MiddlewareInstance/Attribute:middleware_id+' => '', 'Class:MiddlewareInstance/Attribute:middleware_name' => 'Middleware-Name', @@ -642,6 +648,8 @@ Dict::Add('DE DE', 'German', 'Deutsch', [ 'Class:WebApplication/Attribute:webserver_id+' => '', 'Class:WebApplication/Attribute:webserver_name' => 'Webservername', 'Class:WebApplication/Attribute:webserver_name+' => '', + 'Class:WebApplication/Attribute:logo' => 'Logo~~', + 'Class:WebApplication/Attribute:logo+' => 'Used as object icon when displayed within impact analysis graphs~~', 'Class:WebApplication/Attribute:url' => 'URL', 'Class:WebApplication/Attribute:url+' => '', ]); @@ -839,7 +847,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', [ Dict::Add('DE DE', 'German', 'Deutsch', [ 'Class:Tape' => 'Tape', - 'Class:Tape+' => '', + 'Class:Tape+' => 'A Tape (or cartridge) within '.ITOP_APPLICATION_SHORT.' is a removable piece of storage part of a Tape Library~~', 'Class:Tape/Attribute:name' => 'Name', 'Class:Tape/Attribute:name+' => '', 'Class:Tape/Attribute:description' => 'Beschreibung', @@ -889,6 +897,8 @@ Dict::Add('DE DE', 'German', 'Deutsch', [ 'Class:Software/Attribute:version+' => '', 'Class:Software/Attribute:documents_list' => 'Dokumente', 'Class:Software/Attribute:documents_list+' => 'Alle mit dieser Software verknüpften Dokumente', + 'Class:Software/Attribute:logo' => 'Logo~~', + 'Class:Software/Attribute:logo+' => 'Used as icon for all Software Instance objects using this Software, when displayed within impact analysis graphs~~', 'Class:Software/Attribute:type' => 'Typ', 'Class:Software/Attribute:type+' => '', 'Class:Software/Attribute:type/Value:DBServer' => 'DB-Server', @@ -1054,6 +1064,8 @@ Dict::Add('DE DE', 'German', 'Deutsch', [ 'Class:OSVersion/Attribute:osfamily_id+' => '', 'Class:OSVersion/Attribute:osfamily_name' => 'OS-Familienname', 'Class:OSVersion/Attribute:osfamily_name+' => '', + 'Class:OSVersion/UniquenessRule:name_osfamily+' => 'Name must be unique in the OS family~~', + 'Class:OSVersion/UniquenessRule:name_osfamily' => 'this OS version already exists within the OS family~~', ]); // @@ -1063,6 +1075,8 @@ Dict::Add('DE DE', 'German', 'Deutsch', [ Dict::Add('DE DE', 'German', 'Deutsch', [ 'Class:OSFamily' => 'OS-Familie', 'Class:OSFamily+' => '', + 'Class:OSFamily/UniquenessRule:name+' => 'Name must be unique~~', + 'Class:OSFamily/UniquenessRule:name' => 'this OS family already exists~~', ]); // @@ -1145,6 +1159,8 @@ Dict::Add('DE DE', 'German', 'Deutsch', [ Dict::Add('DE DE', 'German', 'Deutsch', [ 'Class:NetworkDeviceType' => 'Netzwerkgerätetyp', 'Class:NetworkDeviceType+' => '', + 'Class:NetworkDeviceType/Attribute:logo' => 'Logo~~', + 'Class:NetworkDeviceType/Attribute:logo+' => 'Used as icon for all Network Device of this type, when displayed in console (details, summary card and impact analysis graphs)~~', 'Class:NetworkDeviceType/Attribute:networkdevicesdevices_list' => 'Netzwerkgeräte', 'Class:NetworkDeviceType/Attribute:networkdevicesdevices_list+' => 'Alle Netzwerkgeräte, die diesem Typ entsprechen', ]); @@ -1160,6 +1176,8 @@ Dict::Add('DE DE', 'German', 'Deutsch', [ 'Class:IOSVersion/Attribute:brand_id+' => '', 'Class:IOSVersion/Attribute:brand_name' => 'Markenname', 'Class:IOSVersion/Attribute:brand_name+' => '', + 'Class:IOSVersion/UniquenessRule:name_brand+' => 'Name must be unique in the brand~~', + 'Class:IOSVersion/UniquenessRule:name_brand' => 'this IOS version already exists for this brand~~', ]); // @@ -1530,7 +1548,8 @@ Dict::Add('DE DE', 'German', 'Deutsch', [ 'ConfigMgmt:baseinfo' => 'General~~', 'ConfigMgmt:moreinfo' => 'CI specifics~~', 'Storage:moreinfo' => 'Storage specifics~~', - 'ConfigMgmt:otherinfo' => 'Dates and description~~', + 'ConfigMgmt:otherinfo' => 'Description~~', + 'ConfigMgmt:dates' => 'Dates~~', 'Software:moreinfo' => 'Software specifics~~', 'Phone:moreinfo' => 'Phone specifics~~', 'Server:baseinfo' => 'Allgemeine Informationen', @@ -1621,8 +1640,8 @@ Dict::Add('DE DE', 'German', 'Deutsch', [ // Dict::Add('DE DE', 'German', 'Deutsch', [ - 'Class:PhysicalInterface/Attribute:org_id' => 'Org id~~', + 'Class:PhysicalInterface/Attribute:org_id' => 'Organization~~', 'Class:PhysicalInterface/Attribute:org_id+' => '~~', - 'Class:PhysicalInterface/Attribute:location_id' => 'Location id~~', + 'Class:PhysicalInterface/Attribute:location_id' => 'Location~~', 'Class:PhysicalInterface/Attribute:location_id+' => '~~', ]); diff --git a/datamodels/2.x/itop-config-mgmt/dictionaries/en.dict.itop-config-mgmt.php b/datamodels/2.x/itop-config-mgmt/dictionaries/en.dict.itop-config-mgmt.php index fe77073ca..d77c8a9f4 100644 --- a/datamodels/2.x/itop-config-mgmt/dictionaries/en.dict.itop-config-mgmt.php +++ b/datamodels/2.x/itop-config-mgmt/dictionaries/en.dict.itop-config-mgmt.php @@ -66,7 +66,7 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:lnkContactToFunctionalCI' => 'Link Contact / FunctionalCI', - 'Class:lnkContactToFunctionalCI+' => '', + 'Class:lnkContactToFunctionalCI+' => 'Manages Contacts linked to Functional CIs. This can be a team responsible for the equipment, to assign related Tickets, or the person to whom an individual device such as a PC or phone is assigned, to manage the inventory.', 'Class:lnkContactToFunctionalCI/Name' => '%1$s / %2$s', 'Class:lnkContactToFunctionalCI/Attribute:functionalci_id' => 'Functionalci', 'Class:lnkContactToFunctionalCI/Attribute:functionalci_id+' => '', @@ -84,7 +84,7 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:FunctionalCI' => 'Functional CI', - 'Class:FunctionalCI+' => '', + 'Class:FunctionalCI+' => 'Abstract class grouping most Configuration Items types used for CMDB.', 'Class:FunctionalCI/Attribute:name' => 'Name', 'Class:FunctionalCI/Attribute:name+' => '', 'Class:FunctionalCI/Attribute:description' => 'Description', @@ -123,7 +123,7 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:PhysicalDevice' => 'Physical Device', - 'Class:PhysicalDevice+' => '', + 'Class:PhysicalDevice+' => 'Abstract class grouping physical types of Configuration Items. A Physical Device can be located. It has usually a Brand and Model.', 'Class:PhysicalDevice/ComplementaryName' => '%1$s - %2$s', 'Class:PhysicalDevice/Attribute:serialnumber' => 'Serial number', 'Class:PhysicalDevice/Attribute:serialnumber+' => '', @@ -163,7 +163,7 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:Rack' => 'Rack', - 'Class:Rack+' => '', + 'Class:Rack+' => 'A physical cabinet for Datacenter Devices and Chassis.', 'Class:Rack/ComplementaryName' => '%1$s - %2$s', 'Class:Rack/Attribute:nb_u' => 'Rack units', 'Class:Rack/Attribute:nb_u+' => '', @@ -179,7 +179,7 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:TelephonyCI' => 'Telephony CI', - 'Class:TelephonyCI+' => '', + 'Class:TelephonyCI+' => 'Abstract class grouping telephony devices', 'Class:TelephonyCI/Attribute:phonenumber' => 'Phone number', 'Class:TelephonyCI/Attribute:phonenumber+' => '', ]); @@ -190,7 +190,7 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:Phone' => 'Phone', - 'Class:Phone+' => '', + 'Class:Phone+' => 'End User device. Plain wired phone', ]); // @@ -199,7 +199,7 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:MobilePhone' => 'Mobile Phone', - 'Class:MobilePhone+' => '', + 'Class:MobilePhone+' => 'End User device. Wireless phone', 'Class:MobilePhone/Attribute:imei' => 'IMEI', 'Class:MobilePhone/Attribute:imei+' => '', 'Class:MobilePhone/Attribute:hw_pin' => 'Hardware PIN', @@ -212,7 +212,7 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:IPPhone' => 'IP Phone', - 'Class:IPPhone+' => '', + 'Class:IPPhone+' => 'Physical device dedicated to phone calls, connected to a network', ]); // @@ -221,7 +221,7 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:Tablet' => 'Tablet', - 'Class:Tablet+' => '', + 'Class:Tablet+' => 'End User device. For example iPad, Galaxy Note/Tab Nexus, Kindle...', ]); // @@ -230,7 +230,7 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:ConnectableCI' => 'Connectable CI', - 'Class:ConnectableCI+' => 'Physical CI', + 'Class:ConnectableCI+' => 'Physical Device which can be connected to a network.', 'Class:ConnectableCI/ComplementaryName' => '%1$s - %2$s', 'Class:ConnectableCI/Attribute:networkdevice_list' => 'Network devices', 'Class:ConnectableCI/Attribute:networkdevice_list+' => 'All network devices connected to this device', @@ -244,7 +244,7 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:DatacenterDevice' => 'Datacenter Device', - 'Class:DatacenterDevice+' => '', + 'Class:DatacenterDevice+' => 'A physical equipment, connected to the network and installed in a data center, usually in a Rack or an Enclosure. This can include Servers, Network Devices, Storage Systems, SAN Switches, Tape Libraries, NAS Devices, etc.', 'Class:DatacenterDevice/ComplementaryName' => '%1$s - %2$s', 'Class:DatacenterDevice/Attribute:rack_id' => 'Rack', 'Class:DatacenterDevice/Attribute:rack_id+' => '', @@ -283,7 +283,7 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:NetworkDevice' => 'Network Device', - 'Class:NetworkDevice+' => '', + 'Class:NetworkDevice+' => 'Any type of network device: router, switch, hub, load balancer, firewall…', 'Class:NetworkDevice/ComplementaryName' => '%1$s - %2$s', 'Class:NetworkDevice/Attribute:networkdevicetype_id' => 'Network type', 'Class:NetworkDevice/Attribute:networkdevicetype_id+' => '', @@ -305,7 +305,7 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:Server' => 'Server', - 'Class:Server+' => '', + 'Class:Server+' => 'Datacenter Device managing access to centralized resources or services. It contains an OS Version executing Software Instances.', 'Class:Server/ComplementaryName' => '%1$s - %2$s', 'Class:Server/Attribute:osfamily_id' => 'OS family', 'Class:Server/Attribute:osfamily_id+' => '', @@ -333,7 +333,7 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:StorageSystem' => 'Storage System', - 'Class:StorageSystem+' => '', + 'Class:StorageSystem+' => 'Storage system that can be attached either to a SAN or to an Ethernet network. The logical unit of storage managed by a Storage System is a Logical Volume.', 'Class:StorageSystem/ComplementaryName' => '%1$s - %2$s', 'Class:StorageSystem/Attribute:logicalvolume_list' => 'Logical volumes', 'Class:StorageSystem/Attribute:logicalvolume_list+' => 'All the logical volumes in this storage system', @@ -345,7 +345,7 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:SANSwitch' => 'SAN Switch', - 'Class:SANSwitch+' => '', + 'Class:SANSwitch+' => 'A SAN Switch is a network switch compatible with the Fibre Channel protocol used by storage networks. It is a Datacenter Device.', 'Class:SANSwitch/ComplementaryName' => '%1$s - %2$s', 'Class:SANSwitch/Attribute:datacenterdevice_list' => 'Devices', 'Class:SANSwitch/Attribute:datacenterdevice_list+' => 'All the devices connected to this SAN switch', @@ -357,7 +357,7 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:TapeLibrary' => 'Tape Library', - 'Class:TapeLibrary+' => '', + 'Class:TapeLibrary+' => 'Datacenter Device which hosts multiple magnetic Tapes (or cartridge). Tape Libraries are used for data backup or archiving.', 'Class:TapeLibrary/ComplementaryName' => '%1$s - %2$s', 'Class:TapeLibrary/Attribute:tapes_list' => 'Tapes', 'Class:TapeLibrary/Attribute:tapes_list+' => 'All the tapes in the tape library', @@ -369,7 +369,7 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:NAS' => 'NAS', - 'Class:NAS+' => '', + 'Class:NAS+' => 'High-capacity storage device racked in a datacenter and connected to a network. In '.ITOP_APPLICATION_SHORT.' a NAS (Network-attached storage) is hosting NAS File Systems.', 'Class:NAS/ComplementaryName' => '%1$s - %2$s', 'Class:NAS/Attribute:nasfilesystem_list' => 'Filesystems', 'Class:NAS/Attribute:nasfilesystem_list+' => 'All the file systems in this NAS', @@ -381,7 +381,7 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:PC' => 'PC', - 'Class:PC+' => '', + 'Class:PC+' => 'Connectable CI. A Personal Computer (PC) is a Physical Device, Desktop or Laptop, running an operating system and designed to execute Software Instances.', 'Class:PC/ComplementaryName' => '%1$s - %2$s', 'Class:PC/Attribute:osfamily_id' => 'OS family', 'Class:PC/Attribute:osfamily_id+' => '', @@ -409,7 +409,7 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:Printer' => 'Printer', - 'Class:Printer+' => '', + 'Class:Printer+' => 'Connectable CI. Physical Device connected either to the network or to a PC.', 'Class:Printer/ComplementaryName' => '%1$s - %2$s', ]); @@ -419,7 +419,7 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:PowerConnection' => 'Power Connection', - 'Class:PowerConnection+' => '', + 'Class:PowerConnection+' => 'Abstract class grouping physical devices used for electrical power supply.', 'Class:PowerConnection/ComplementaryName' => '%1$s - %2$s', ]); @@ -429,7 +429,7 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:PowerSource' => 'Power Source', - 'Class:PowerSource+' => '', + 'Class:PowerSource+' => 'Physical Power Connection. Used in a datacenter to document any kind of power source (main power inlet, breaker…) that is not a PDU.', 'Class:PowerSource/ComplementaryName' => '%1$s - %2$s', 'Class:PowerSource/Attribute:pdus_list' => 'PDUs', 'Class:PowerSource/Attribute:pdus_list+' => 'All the PDUs using this power source', @@ -441,7 +441,7 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:PDU' => 'PDU', - 'Class:PDU+' => '', + 'Class:PDU+' => 'Power Connection. PDU (Power Distribution Unit) is a device fitted with multiple outputs designed to distribute electric power, especially to racks of computers and networking equipment located within a datacenter.', 'Class:PDU/ComplementaryName' => '%1$s - %2$s - %3$s - %4$s', 'Class:PDU/Attribute:rack_id' => 'Rack', 'Class:PDU/Attribute:rack_id+' => '', @@ -459,7 +459,8 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:Peripheral' => 'Peripheral', - 'Class:Peripheral+' => '', + 'Class:Peripheral+' => 'Physical device, used to document any kind of computer peripheral. +For example: external hard drives, scanners, input devices (trackballs, bar code scanners), etc…', 'Class:Peripheral/ComplementaryName' => '%1$s - %2$s', ]); @@ -469,7 +470,7 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:Enclosure' => 'Enclosure', - 'Class:Enclosure+' => '', + 'Class:Enclosure+' => 'An open-frame chassis mounted inside a Rack, in which to mount IT equipment such as Blade Servers, Network Device...', 'Class:Enclosure/ComplementaryName' => '%1$s - %2$s - %3$s', 'Class:Enclosure/Attribute:rack_id' => 'Rack', 'Class:Enclosure/Attribute:rack_id+' => '', @@ -487,11 +488,13 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:ApplicationSolution' => 'Application Solution', - 'Class:ApplicationSolution+' => '', + 'Class:ApplicationSolution+' => 'Application Solutions describe complex applications that are made of (or depend on) several basic components. The main information conveyed by an Application Solution is its list of relationships.', 'Class:ApplicationSolution/Attribute:functionalcis_list' => 'CIs', 'Class:ApplicationSolution/Attribute:functionalcis_list+' => 'All the configuration items that compose this application solution', 'Class:ApplicationSolution/Attribute:businessprocess_list' => 'Business processes', 'Class:ApplicationSolution/Attribute:businessprocess_list+' => 'All the business processes depending on this application solution', + 'Class:ApplicationSolution/Attribute:logo' => 'Logo', + 'Class:ApplicationSolution/Attribute:logo+' => 'Used as object icon when displayed within impact analysis graphs', 'Class:ApplicationSolution/Attribute:status' => 'Status', 'Class:ApplicationSolution/Attribute:status+' => '', 'Class:ApplicationSolution/Attribute:status/Value:active' => 'active', @@ -510,9 +513,11 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:BusinessProcess' => 'Business Process', - 'Class:BusinessProcess+' => '', + 'Class:BusinessProcess+' => 'A Business Process is used to document a high-level process or an important application for the operations. It is quite similar to an Application Solution but for describing higher level applications or whole processes in the organization.', 'Class:BusinessProcess/Attribute:applicationsolutions_list' => 'Application solutions', 'Class:BusinessProcess/Attribute:applicationsolutions_list+' => 'All the application solutions that impact this business process', + 'Class:BusinessProcess/Attribute:logo' => 'Logo', + 'Class:BusinessProcess/Attribute:logo+' => 'Used as object icon when displayed within impact analysis graphs', 'Class:BusinessProcess/Attribute:status' => 'Status', 'Class:BusinessProcess/Attribute:status+' => '', 'Class:BusinessProcess/Attribute:status/Value:active' => 'active', @@ -521,13 +526,51 @@ Dict::Add('EN US', 'English', 'English', [ 'Class:BusinessProcess/Attribute:status/Value:inactive+' => 'inactive', ]); +// +// Class: Software +// + +Dict::Add('EN US', 'English', 'English', [ + 'Class:Software' => 'Software', + 'Class:Software+' => 'Software is a generic item in the software catalog. It has a particular version. In '.ITOP_APPLICATION_SHORT.' a Software has a category amongst: DB Server, Middleware, PC Software, Web Server and Other Software.', + 'Class:Software/ComplementaryName' => '%1$s - %2$s', + 'Class:Software/Attribute:name' => 'Name', + 'Class:Software/Attribute:name+' => '', + 'Class:Software/Attribute:vendor' => 'Vendor', + 'Class:Software/Attribute:vendor+' => '', + 'Class:Software/Attribute:version' => 'Version', + 'Class:Software/Attribute:version+' => '', + 'Class:Software/Attribute:documents_list' => 'Documents', + 'Class:Software/Attribute:documents_list+' => 'All the documents linked to this software', + 'Class:Software/Attribute:logo' => 'Logo', + 'Class:Software/Attribute:logo+' => 'Used as icon for all Software Instance objects using this Software, when displayed within impact analysis graphs', + 'Class:Software/Attribute:type' => 'Type', + 'Class:Software/Attribute:type+' => '', + 'Class:Software/Attribute:type/Value:DBServer' => 'DB Server', + 'Class:Software/Attribute:type/Value:DBServer+' => 'DB Server', + 'Class:Software/Attribute:type/Value:Middleware' => 'Middleware', + 'Class:Software/Attribute:type/Value:Middleware+' => 'Middleware', + 'Class:Software/Attribute:type/Value:OtherSoftware' => 'Other Software', + 'Class:Software/Attribute:type/Value:OtherSoftware+' => 'Other Software', + 'Class:Software/Attribute:type/Value:PCSoftware' => 'PC Software', + 'Class:Software/Attribute:type/Value:PCSoftware+' => 'PC Software', + 'Class:Software/Attribute:type/Value:WebServer' => 'Web Server', + 'Class:Software/Attribute:type/Value:WebServer+' => 'Web Server', + 'Class:Software/Attribute:softwareinstance_list' => 'Software Instances', + 'Class:Software/Attribute:softwareinstance_list+' => 'All the software instances for this software', + 'Class:Software/Attribute:softwarepatch_list' => 'Software Patches', + 'Class:Software/Attribute:softwarepatch_list+' => 'All the patchs for this software', + 'Class:Software/Attribute:softwarelicence_list' => 'Software Licenses', + 'Class:Software/Attribute:softwarelicence_list+' => 'All the licenses for this software', +]); + // // Class: SoftwareInstance // Dict::Add('EN US', 'English', 'English', [ 'Class:SoftwareInstance' => 'Software Instance', - 'Class:SoftwareInstance+' => '', + 'Class:SoftwareInstance+' => 'Abstract class representing the deployment of a Software on a device (Server, PC, VirtualMachine). In '.ITOP_APPLICATION_SHORT.' there are different types of Software Instance: DB Server, Middleware, PC Software, Web Server and Other Software', 'Class:SoftwareInstance/Attribute:system_id' => 'System', 'Class:SoftwareInstance/Attribute:system_id+' => 'The system can be a Server, a Virtual Machine, a PC, ...', 'Class:SoftwareInstance/Attribute:system_name' => 'System name', @@ -556,7 +599,7 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:Middleware' => 'Middleware', - 'Class:Middleware+' => '', + 'Class:Middleware+' => 'Software Instance offering services to other software (like: Tomcat, JBoss, Talend, Microsoft BizTalk, IBM Websphere or Lotus Domino) installed on a specific system (PC, Server or Virtual Machine).', 'Class:Middleware/Attribute:middlewareinstance_list' => 'Middleware instances', 'Class:Middleware/Attribute:middlewareinstance_list+' => 'All the middleware instances provided by this middleware', ]); @@ -567,7 +610,7 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:DBServer' => 'DB Server', - 'Class:DBServer+' => '', + 'Class:DBServer+' => 'Software Instance offering database services (MySQL 8.0, Oracle, SQL Server, DB2…) installed on a specific system (PC, Server or Virtual Machine).', 'Class:DBServer/Attribute:dbschema_list' => 'DB schemas', 'Class:DBServer/Attribute:dbschema_list+' => 'All the database schemas for this DB server', ]); @@ -577,8 +620,8 @@ Dict::Add('EN US', 'English', 'English', [ // Dict::Add('EN US', 'English', 'English', [ - 'Class:WebServer' => 'Web server', - 'Class:WebServer+' => '', + 'Class:WebServer' => 'Web Server', + 'Class:WebServer+' => 'It is a Software Instance, offering Web services (like Apache 2.4, Nginx 1.29.4, IIS 7.0) installed on a specific system (PC, Server or Virtual Machine).', 'Class:WebServer/Attribute:webapp_list' => 'Web applications', 'Class:WebServer/Attribute:webapp_list+' => 'All the web applications available on this web server', ]); @@ -589,7 +632,7 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:PCSoftware' => 'PC Software', - 'Class:PCSoftware+' => '', + 'Class:PCSoftware+' => 'Software Instance for software (like MS Office, Adobe Photoshop or Filezilla) installed on a PC.', ]); // @@ -598,7 +641,7 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:OtherSoftware' => 'Other Software', - 'Class:OtherSoftware+' => '', + 'Class:OtherSoftware+' => 'Any type of Software Instance that do not fit in the other categories: PC Software, Middleware, DB server or Web Server.', ]); // @@ -607,8 +650,10 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:MiddlewareInstance' => 'Middleware Instance', - 'Class:MiddlewareInstance+' => '', + 'Class:MiddlewareInstance+' => 'Functional CI representing a service delivered by a Middleware.', 'Class:MiddlewareInstance/ComplementaryName' => '%1$s - %2$s', + 'Class:MiddlewareInstance/Attribute:logo' => 'Logo', + 'Class:MiddlewareInstance/Attribute:logo+' => 'Used as object icon when displayed within impact analysis graphs', 'Class:MiddlewareInstance/Attribute:middleware_id' => 'Middleware', 'Class:MiddlewareInstance/Attribute:middleware_id+' => '', 'Class:MiddlewareInstance/Attribute:middleware_name' => 'Middleware name', @@ -621,7 +666,7 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:DatabaseSchema' => 'Database Schema', - 'Class:DatabaseSchema+' => '', + 'Class:DatabaseSchema+' => 'Dabatase instance running of a specific DB server.', 'Class:DatabaseSchema/ComplementaryName' => '%1$s - %2$s', 'Class:DatabaseSchema/Attribute:dbserver_id' => 'DB server', 'Class:DatabaseSchema/Attribute:dbserver_id+' => '', @@ -635,12 +680,14 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:WebApplication' => 'Web Application', - 'Class:WebApplication+' => '', + 'Class:WebApplication+' => 'Instance of an application accessible using a web browser and that runs on a given Web Server instance. For eg. this iTop that you\'re looking at.', 'Class:WebApplication/ComplementaryName' => '%1$s - %2$s', 'Class:WebApplication/Attribute:webserver_id' => 'Web server', 'Class:WebApplication/Attribute:webserver_id+' => '', 'Class:WebApplication/Attribute:webserver_name' => 'Web server name', 'Class:WebApplication/Attribute:webserver_name+' => '', + 'Class:WebApplication/Attribute:logo' => 'Logo', + 'Class:WebApplication/Attribute:logo+' => 'Used as object icon when displayed within impact analysis graphs', 'Class:WebApplication/Attribute:url' => 'URL', 'Class:WebApplication/Attribute:url+' => '', ]); @@ -651,7 +698,7 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:VirtualDevice' => 'Virtual Device', - 'Class:VirtualDevice+' => '', + 'Class:VirtualDevice+' => 'Abstract class used for server virtualization (Virtual Host and Virtual Machine).', 'Class:VirtualDevice/Attribute:status' => 'Status', 'Class:VirtualDevice/Attribute:status+' => '', 'Class:VirtualDevice/Attribute:status/Value:implementation' => 'implementation', @@ -672,7 +719,7 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:VirtualHost' => 'Virtual Host', - 'Class:VirtualHost+' => '', + 'Class:VirtualHost+' => 'Abstract class used for Virtual Devices (Hypervisor, Farm,...) hosting Virtual Machines.', 'Class:VirtualHost/Attribute:virtualmachine_list' => 'Virtual machines', 'Class:VirtualHost/Attribute:virtualmachine_list+' => 'All the virtual machines hosted by this host', ]); @@ -683,7 +730,7 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:Hypervisor' => 'Hypervisor', - 'Class:Hypervisor+' => '', + 'Class:Hypervisor+' => 'Virtual Host. Virtualization software (MS Hyper-V, VMWare ESX, Xen, etc.), running on a physical Server and supporting the creation of Virtual Machines.', 'Class:Hypervisor/Attribute:farm_id' => 'Farm', 'Class:Hypervisor/Attribute:farm_id+' => '', 'Class:Hypervisor/Attribute:farm_name' => 'Farm name', @@ -700,7 +747,7 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:Farm' => 'Farm', - 'Class:Farm+' => '', + 'Class:Farm+' => 'Virtual Host. A Farm (or cluster) is a group of Hypervisors pooled together and sharing storage resources to provide an overall fault tolerant system for hosting Virtual Machines.', 'Class:Farm/Attribute:hypervisor_list' => 'Hypervisors', 'Class:Farm/Attribute:hypervisor_list+' => 'All the hypervisors that compose this farm', 'Class:Farm/Attribute:redundancy' => 'High availability', @@ -715,7 +762,7 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:VirtualMachine' => 'Virtual Machine', - 'Class:VirtualMachine+' => '', + 'Class:VirtualMachine+' => 'Virtual Device equivalent to a Server, it is hosted either on an Hypervisor or on a Farm.', 'Class:VirtualMachine/ComplementaryName' => '%1$s - %2$s', 'Class:VirtualMachine/Attribute:virtualhost_id' => 'Virtual host', 'Class:VirtualMachine/Attribute:virtualhost_id+' => '', @@ -749,7 +796,7 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:LogicalVolume' => 'Logical Volume', - 'Class:LogicalVolume+' => '', + 'Class:LogicalVolume+' => 'The unit of storage managed inside a Storage System. It can be accessed by multiple Servers and Virtual Devices.', 'Class:LogicalVolume/Attribute:name' => 'Name', 'Class:LogicalVolume/Attribute:name+' => '', 'Class:LogicalVolume/Attribute:lun_id' => 'LUN ID', @@ -775,8 +822,8 @@ Dict::Add('EN US', 'English', 'English', [ // Dict::Add('EN US', 'English', 'English', [ - 'Class:lnkServerToVolume' => 'Link Server / Volume', - 'Class:lnkServerToVolume+' => '', + 'Class:lnkServerToVolume' => 'Link Server / LogicalVolume', + 'Class:lnkServerToVolume+' => 'This many-to-many link indicates that a Server uses a Logical Volume (a storage unit managed inside a Storage System). Several Servers can use the same Logical Volume.', 'Class:lnkServerToVolume/Name' => '%1$s / %2$s', 'Class:lnkServerToVolume/Attribute:volume_id' => 'Volume', 'Class:lnkServerToVolume/Attribute:volume_id+' => '', @@ -795,8 +842,8 @@ Dict::Add('EN US', 'English', 'English', [ // Dict::Add('EN US', 'English', 'English', [ - 'Class:lnkVirtualDeviceToVolume' => 'Link Virtual Device / Volume', - 'Class:lnkVirtualDeviceToVolume+' => '', + 'Class:lnkVirtualDeviceToVolume' => 'Link VirtualDevice / LogicalVolume', + 'Class:lnkVirtualDeviceToVolume+' => 'This many-to-many link indicates that a Virtual Device uses a Logical Volume (a storage unit managed inside a Storage System). Several Virtual Devices can use the same Logical Volume.', 'Class:lnkVirtualDeviceToVolume/Name' => '%1$s / %2$s', 'Class:lnkVirtualDeviceToVolume/Attribute:volume_id' => 'Volume', 'Class:lnkVirtualDeviceToVolume/Attribute:volume_id+' => '', @@ -815,8 +862,8 @@ Dict::Add('EN US', 'English', 'English', [ // Dict::Add('EN US', 'English', 'English', [ - 'Class:lnkSanToDatacenterDevice' => 'Link SAN / Datacenter Device', - 'Class:lnkSanToDatacenterDevice+' => '', + 'Class:lnkSanToDatacenterDevice' => 'Link SANSwitch / DatacenterDevice', + 'Class:lnkSanToDatacenterDevice+' => 'This many-to-many link models the network connection between a SAN Switch and a Datacenter Device (a Server, a Network Device, etc.).', 'Class:lnkSanToDatacenterDevice/Name' => '%1$s / %2$s', 'Class:lnkSanToDatacenterDevice/Attribute:san_id' => 'SAN switch', 'Class:lnkSanToDatacenterDevice/Attribute:san_id+' => '', @@ -838,7 +885,7 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:Tape' => 'Tape', - 'Class:Tape+' => '', + 'Class:Tape+' => 'A Tape (or cartridge) within '.ITOP_APPLICATION_SHORT.' is a removable piece of storage part of a Tape Library', 'Class:Tape/Attribute:name' => 'Name', 'Class:Tape/Attribute:name+' => '', 'Class:Tape/Attribute:description' => 'Description', @@ -857,7 +904,7 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:NASFileSystem' => 'NAS File System', - 'Class:NASFileSystem+' => '', + 'Class:NASFileSystem+' => 'Represents a shared file system hosted inside a given NAS (Network Attached Storage).', 'Class:NASFileSystem/Attribute:name' => 'Name', 'Class:NASFileSystem/Attribute:name+' => '', 'Class:NASFileSystem/Attribute:description' => 'Description', @@ -872,49 +919,13 @@ Dict::Add('EN US', 'English', 'English', [ 'Class:NASFileSystem/Attribute:nas_name+' => '', ]); -// -// Class: Software -// - -Dict::Add('EN US', 'English', 'English', [ - 'Class:Software' => 'Software', - 'Class:Software+' => '', - 'Class:Software/ComplementaryName' => '%1$s - %2$s', - 'Class:Software/Attribute:name' => 'Name', - 'Class:Software/Attribute:name+' => '', - 'Class:Software/Attribute:vendor' => 'Vendor', - 'Class:Software/Attribute:vendor+' => '', - 'Class:Software/Attribute:version' => 'Version', - 'Class:Software/Attribute:version+' => '', - 'Class:Software/Attribute:documents_list' => 'Documents', - 'Class:Software/Attribute:documents_list+' => 'All the documents linked to this software', - 'Class:Software/Attribute:type' => 'Type', - 'Class:Software/Attribute:type+' => '', - 'Class:Software/Attribute:type/Value:DBServer' => 'DB Server', - 'Class:Software/Attribute:type/Value:DBServer+' => 'DB Server', - 'Class:Software/Attribute:type/Value:Middleware' => 'Middleware', - 'Class:Software/Attribute:type/Value:Middleware+' => 'Middleware', - 'Class:Software/Attribute:type/Value:OtherSoftware' => 'Other Software', - 'Class:Software/Attribute:type/Value:OtherSoftware+' => 'Other Software', - 'Class:Software/Attribute:type/Value:PCSoftware' => 'PC Software', - 'Class:Software/Attribute:type/Value:PCSoftware+' => 'PC Software', - 'Class:Software/Attribute:type/Value:WebServer' => 'Web Server', - 'Class:Software/Attribute:type/Value:WebServer+' => 'Web Server', - 'Class:Software/Attribute:softwareinstance_list' => 'Software Instances', - 'Class:Software/Attribute:softwareinstance_list+' => 'All the software instances for this software', - 'Class:Software/Attribute:softwarepatch_list' => 'Software Patches', - 'Class:Software/Attribute:softwarepatch_list+' => 'All the patchs for this software', - 'Class:Software/Attribute:softwarelicence_list' => 'Software Licenses', - 'Class:Software/Attribute:softwarelicence_list+' => 'All the licenses for this software', -]); - // // Class: Patch // Dict::Add('EN US', 'English', 'English', [ 'Class:Patch' => 'Patch', - 'Class:Patch+' => '', + 'Class:Patch+' => 'Abstract class, for patch, hotfix, security fix or service pack for an OS or a Software.', 'Class:Patch/Attribute:name' => 'Name', 'Class:Patch/Attribute:name+' => '', 'Class:Patch/Attribute:documents_list' => 'Documents', @@ -931,7 +942,7 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:OSPatch' => 'OS Patch', - 'Class:OSPatch+' => '', + 'Class:OSPatch+' => 'Patch, hotfix, security fix or service pack for a given operating system.', 'Class:OSPatch/Attribute:functionalcis_list' => 'Devices', 'Class:OSPatch/Attribute:functionalcis_list+' => 'All the systems where this patch is installed', 'Class:OSPatch/Attribute:osversion_id' => 'OS version', @@ -946,7 +957,7 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:SoftwarePatch' => 'Software Patch', - 'Class:SoftwarePatch+' => '', + 'Class:SoftwarePatch+' => 'Patch, hotfix, security fix or service pack for a given software.', 'Class:SoftwarePatch/Attribute:software_id' => 'Software', 'Class:SoftwarePatch/Attribute:software_id+' => '', 'Class:SoftwarePatch/Attribute:software_name' => 'Software name', @@ -961,8 +972,7 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:Licence' => 'License', - 'Class:Licence+' => '', - + 'Class:Licence+' => 'Abstract class. A license contract for a particular OS version or Software', 'Class:Licence/Attribute:name' => 'Name', 'Class:Licence/Attribute:name+' => '', 'Class:Licence/Attribute:documents_list' => 'Documents', @@ -997,7 +1007,7 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:OSLicence' => 'OS License', - 'Class:OSLicence+' => '', + 'Class:OSLicence+' => 'A license contract for a particular operating system. The license is related to one operating system (for example Windows 2008 R2) and can be associated with several servers or virtual machines.', 'Class:OSLicence/ComplementaryName' => '%1$s - %2$s', 'Class:OSLicence/Attribute:osversion_id' => 'OS version', 'Class:OSLicence/Attribute:osversion_id+' => '', @@ -1015,7 +1025,7 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:SoftwareLicence' => 'Software License', - 'Class:SoftwareLicence+' => '', + 'Class:SoftwareLicence+' => 'A license contract for a particular software. The license is related to one software (for example MS Office 2010) and can be associated with several instances of this software.', 'Class:SoftwareLicence/ComplementaryName' => '%1$s - %2$s', 'Class:SoftwareLicence/Attribute:software_id' => 'Software', 'Class:SoftwareLicence/Attribute:software_id+' => '', @@ -1031,7 +1041,7 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:lnkDocumentToLicence' => 'Link Document / License', - 'Class:lnkDocumentToLicence+' => '', + 'Class:lnkDocumentToLicence+' => 'Link used when a Document is applicable to a License.', 'Class:lnkDocumentToLicence/Name' => '%1$s / %2$s', 'Class:lnkDocumentToLicence/Attribute:licence_id' => 'License', 'Class:lnkDocumentToLicence/Attribute:licence_id+' => '', @@ -1049,13 +1059,15 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:OSVersion' => 'OS Version', - 'Class:OSVersion+' => '', + 'Class:OSVersion+' => 'Typology. List of the possible values for the "OS Version" of a computer (Server, Virtual Machine or PC). The OS Versions are organized per OS Family.', 'Class:OSVersion/Attribute:osfamily_id' => 'OS family', 'Class:OSVersion/Attribute:osfamily_id+' => '', 'Class:OSVersion/Attribute:osfamily_name' => 'OS family name', 'Class:OSVersion/Attribute:osfamily_name+' => '', 'Class:OSVersion/Attribute:ospatches_list' => 'OS patches', 'Class:OSVersion/Attribute:ospatches_list+' => 'All the OS patches for this OS version', + 'Class:OSVersion/UniquenessRule:name_osfamily+' => 'Name must be unique in the OS family', + 'Class:OSVersion/UniquenessRule:name_osfamily' => 'this OS version already exists within the OS family', ]); // @@ -1064,9 +1076,11 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:OSFamily' => 'OS Family', - 'Class:OSFamily+' => '', + 'Class:OSFamily+' => 'Typology. List of the possible values for the "OS Family" attribute of Servers, Virtual Machines and PCs.', 'Class:OSFamily/Attribute:osversions_list' => 'OS versions', 'Class:OSFamily/Attribute:osversions_list+' => 'All the OS versions for this OS family', + 'Class:OSFamily/UniquenessRule:name+' => 'Name must be unique', + 'Class:OSFamily/UniquenessRule:name' => 'this OS family already exists', ]); // @@ -1075,7 +1089,7 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:Brand' => 'Brand', - 'Class:Brand+' => '', + 'Class:Brand+' => 'Typology. List of the possible values for the "Brand" attribute of Physical Device.', 'Class:Brand/Attribute:iosversions_list' => 'IOS versions', 'Class:Brand/Attribute:iosversions_list+' => 'All the IOS versions from this brand', 'Class:Brand/Attribute:logo' => 'Logo', @@ -1094,7 +1108,7 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:Model' => 'Device Model', - 'Class:Model+' => '', + 'Class:Model+' => 'Typology. List the possible values for the Model attribute of a Physical Device. Each Model belongs to a single Brand, and usually applies to a single type of Physical Device.', 'Class:Model/ComplementaryName' => '%1$s - %2$s', 'Class:Model/Attribute:brand_id' => 'Brand', 'Class:Model/Attribute:brand_id+' => '', @@ -1152,7 +1166,9 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:NetworkDeviceType' => 'Network Device Type', - 'Class:NetworkDeviceType+' => '', + 'Class:NetworkDeviceType+' => 'Typology. The possible values for the "Type" of a Network Device (e.g. Router, Switch, Firewall, etc.).', + 'Class:NetworkDeviceType/Attribute:logo' => 'Logo', + 'Class:NetworkDeviceType/Attribute:logo+' => 'Used as icon for all Network Device of this type, when displayed in console (details, summary card and impact analysis graphs)', 'Class:NetworkDeviceType/Attribute:networkdevicesdevices_list' => 'Network devices', 'Class:NetworkDeviceType/Attribute:networkdevicesdevices_list+' => 'All the network devices corresponding to this type', ]); @@ -1163,13 +1179,15 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:IOSVersion' => 'IOS Version', - 'Class:IOSVersion+' => '', + 'Class:IOSVersion+' => 'Typology. Possible values for the versions of operating system for network devices (IOS from Cisco\'s Internetwork Operating System).', 'Class:IOSVersion/Attribute:brand_id' => 'Brand', 'Class:IOSVersion/Attribute:brand_id+' => '', 'Class:IOSVersion/Attribute:brand_name' => 'Brand name', 'Class:IOSVersion/Attribute:brand_name+' => '', 'Class:IOSVersion/Attribute:networkdevices_list' => 'Network devices', 'Class:IOSVersion/Attribute:networkdevices_list+' => 'All the network devices running this IOS version', + 'Class:IOSVersion/UniquenessRule:name_brand+' => 'Name must be unique in the brand', + 'Class:IOSVersion/UniquenessRule:name_brand' => 'this IOS version already exists for this brand', ]); // @@ -1178,7 +1196,7 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:lnkDocumentToPatch' => 'Link Document / Patch', - 'Class:lnkDocumentToPatch+' => '', + 'Class:lnkDocumentToPatch+' => 'Link used when a Document is applicable to a Patch.', 'Class:lnkDocumentToPatch/Name' => '%1$s / %2$s', 'Class:lnkDocumentToPatch/Attribute:patch_id' => 'Patch', 'Class:lnkDocumentToPatch/Attribute:patch_id+' => '', @@ -1196,7 +1214,7 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:lnkSoftwareInstanceToSoftwarePatch' => 'Link Software Instance / Software Patch', - 'Class:lnkSoftwareInstanceToSoftwarePatch+' => '', + 'Class:lnkSoftwareInstanceToSoftwarePatch+' => 'This link indicates that a software patch has been applied to a software instance.', 'Class:lnkSoftwareInstanceToSoftwarePatch/Name' => '%1$s / %2$s', 'Class:lnkSoftwareInstanceToSoftwarePatch/Attribute:softwarepatch_id' => 'Software patch', 'Class:lnkSoftwareInstanceToSoftwarePatch/Attribute:softwarepatch_id+' => '', @@ -1214,7 +1232,7 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:lnkFunctionalCIToOSPatch' => 'Link FunctionalCI / OS patch', - 'Class:lnkFunctionalCIToOSPatch+' => '', + 'Class:lnkFunctionalCIToOSPatch+' => 'Models the deployment of an OS Patch on a device.', 'Class:lnkFunctionalCIToOSPatch/Name' => '%1$s / %2$s', 'Class:lnkFunctionalCIToOSPatch/Attribute:ospatch_id' => 'OS patch', 'Class:lnkFunctionalCIToOSPatch/Attribute:ospatch_id+' => '', @@ -1232,7 +1250,7 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:lnkDocumentToSoftware' => 'Link Document / Software', - 'Class:lnkDocumentToSoftware+' => '', + 'Class:lnkDocumentToSoftware+' => 'Link used when a Document is applicable to Software.', 'Class:lnkDocumentToSoftware/Name' => '%1$s / %2$s', 'Class:lnkDocumentToSoftware/Attribute:software_id' => 'Software', 'Class:lnkDocumentToSoftware/Attribute:software_id+' => '', @@ -1250,7 +1268,7 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:Subnet' => 'Subnet', - 'Class:Subnet+' => '', + 'Class:Subnet+' => 'Segment of an IP network, defined by an IP address and a mask', 'Class:Subnet/Name' => '%1$s/%2$s', 'Class:Subnet/ComplementaryName' => '%1$s - %2$s', 'Class:Subnet/Attribute:description' => 'Description', @@ -1275,7 +1293,7 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:VLAN' => 'VLAN', - 'Class:VLAN+' => '', + 'Class:VLAN+' => 'A Virtual LAN is used to group together in a logical way networks Subnets and Physical Interfaces that participate in the same VLAN.', 'Class:VLAN/Attribute:vlan_tag' => 'VLAN Tag', 'Class:VLAN/Attribute:vlan_tag+' => '', 'Class:VLAN/Attribute:description' => 'Description', @@ -1296,7 +1314,7 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:lnkSubnetToVLAN' => 'Link Subnet / VLAN', - 'Class:lnkSubnetToVLAN+' => '', + 'Class:lnkSubnetToVLAN+' => 'This many-to-many link indicates that a VLAN is present on a Subnet. Several VLANs can be present on the same Subnet and a VLAN can span several Subnets.', 'Class:lnkSubnetToVLAN/Name' => '%1$s / %2$s', 'Class:lnkSubnetToVLAN/Attribute:subnet_id' => 'Subnet', 'Class:lnkSubnetToVLAN/Attribute:subnet_id+' => '', @@ -1316,7 +1334,7 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:NetworkInterface' => 'Network Interface', - 'Class:NetworkInterface+' => '', + 'Class:NetworkInterface+' => 'Abstract class for all types of network interfaces.', 'Class:NetworkInterface/Attribute:name' => 'Name', 'Class:NetworkInterface/Attribute:name+' => '', 'Class:NetworkInterface/Attribute:finalclass' => 'NetworkInterface sub-class', @@ -1329,7 +1347,7 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:IPInterface' => 'IP Interface', - 'Class:IPInterface+' => '', + 'Class:IPInterface+' => 'Abstract class. A type of Network Interface with an IP address', 'Class:IPInterface/Attribute:ipaddress' => 'IP address', 'Class:IPInterface/Attribute:ipaddress+' => '', @@ -1351,12 +1369,16 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:PhysicalInterface' => 'Physical Interface', - 'Class:PhysicalInterface+' => '', + 'Class:PhysicalInterface+' => 'A type of IP Interface that represents a physical network interface (e.g. an Ethernet card).', 'Class:PhysicalInterface/Name' => '%2$s %1$s', 'Class:PhysicalInterface/Attribute:connectableci_id' => 'Device', 'Class:PhysicalInterface/Attribute:connectableci_id+' => '', 'Class:PhysicalInterface/Attribute:connectableci_name' => 'Device name', 'Class:PhysicalInterface/Attribute:connectableci_name+' => '', + 'Class:PhysicalInterface/Attribute:org_id' => 'Organization', + 'Class:PhysicalInterface/Attribute:org_id+' => '', + 'Class:PhysicalInterface/Attribute:location_id' => 'Location', + 'Class:PhysicalInterface/Attribute:location_id+' => '', 'Class:PhysicalInterface/Attribute:vlans_list' => 'VLANs', 'Class:PhysicalInterface/Attribute:vlans_list+' => '', ]); @@ -1367,7 +1389,7 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:lnkPhysicalInterfaceToVLAN' => 'Link PhysicalInterface / VLAN', - 'Class:lnkPhysicalInterfaceToVLAN+' => '', + 'Class:lnkPhysicalInterfaceToVLAN+' => 'This link indicates when a network interface is part of a VLAN (Virtual Local Area Network).', 'Class:lnkPhysicalInterfaceToVLAN/Name' => '%1$s %2$s / %3$s', 'Class:lnkPhysicalInterfaceToVLAN/Attribute:physicalinterface_id' => 'Physical Interface', 'Class:lnkPhysicalInterfaceToVLAN/Attribute:physicalinterface_id+' => '', @@ -1389,7 +1411,7 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:LogicalInterface' => 'Logical Interface', - 'Class:LogicalInterface+' => '', + 'Class:LogicalInterface+' => 'IP Interface which is not associated permanently with a particular physical port, the association is dynamic. It can be used for Virtual Machine.', 'Class:LogicalInterface/Attribute:virtualmachine_id' => 'Virtual machine', 'Class:LogicalInterface/Attribute:virtualmachine_id+' => '', 'Class:LogicalInterface/Attribute:virtualmachine_name' => 'Virtual machine name', @@ -1402,7 +1424,7 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:FiberChannelInterface' => 'Fiber Channel Interface', - 'Class:FiberChannelInterface+' => '', + 'Class:FiberChannelInterface+' => 'Network Interface to a high-speed network technology primarily used for connecting Storage Systems.', 'Class:FiberChannelInterface/Attribute:speed' => 'Speed', 'Class:FiberChannelInterface/Attribute:speed+' => '', 'Class:FiberChannelInterface/Attribute:topology' => 'Topology', @@ -1421,7 +1443,7 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:lnkConnectableCIToNetworkDevice' => 'Link ConnectableCI / NetworkDevice', - 'Class:lnkConnectableCIToNetworkDevice+' => '', + 'Class:lnkConnectableCIToNetworkDevice+' => 'Defines on which network equipment a device is connected.', 'Class:lnkConnectableCIToNetworkDevice/Name' => '%1$s / %2$s', 'Class:lnkConnectableCIToNetworkDevice/Attribute:networkdevice_id' => 'Network device', 'Class:lnkConnectableCIToNetworkDevice/Attribute:networkdevice_id+' => '', @@ -1449,7 +1471,7 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:lnkApplicationSolutionToFunctionalCI' => 'Link ApplicationSolution / FunctionalCI', - 'Class:lnkApplicationSolutionToFunctionalCI+' => '', + 'Class:lnkApplicationSolutionToFunctionalCI+' => 'Models the membership of a device to an Application Solution. The meaning of this relationship varies depending on the types of Application Solution.', 'Class:lnkApplicationSolutionToFunctionalCI/Name' => '%1$s / %2$s', 'Class:lnkApplicationSolutionToFunctionalCI/Attribute:applicationsolution_id' => 'Application solution', 'Class:lnkApplicationSolutionToFunctionalCI/Attribute:applicationsolution_id+' => '', @@ -1467,7 +1489,7 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:lnkApplicationSolutionToBusinessProcess' => 'Link ApplicationSolution / BusinessProcess', - 'Class:lnkApplicationSolutionToBusinessProcess+' => '', + 'Class:lnkApplicationSolutionToBusinessProcess+' => 'Models the relationship between an Application Solution and a Business Process.', 'Class:lnkApplicationSolutionToBusinessProcess/Name' => '%1$s / %2$s', 'Class:lnkApplicationSolutionToBusinessProcess/Attribute:businessprocess_id' => 'Business process', 'Class:lnkApplicationSolutionToBusinessProcess/Attribute:businessprocess_id+' => '', @@ -1485,7 +1507,7 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:Group' => 'Group', - 'Class:Group+' => '', + 'Class:Group+' => 'Group is designed to define explicit sets of configurations items for any project purpose. In contrast to Application Solution, a Group is not impacted by any of its component and does not impact them. For example when doing an OS migration, Group can be convenient to gather “Servers to be migrated”. Migrated servers being removed from the group as the migration progresses.', 'Class:Group/ComplementaryName' => '%1$s - %2$s', 'Class:Group/Attribute:name' => 'Name', 'Class:Group/Attribute:name+' => '', @@ -1506,7 +1528,6 @@ Dict::Add('EN US', 'English', 'English', [ 'Class:Group/Attribute:type' => 'Type', 'Class:Group/Attribute:type+' => '', 'Class:Group/Attribute:parent_id' => 'Parent Group', - 'Class:Group/Attribute:parent_id+' => '', 'Class:Group/Attribute:parent_name' => 'Name', 'Class:Group/Attribute:parent_name+' => '', @@ -1516,24 +1537,13 @@ Dict::Add('EN US', 'English', 'English', [ 'Class:Group/Attribute:parent_id_friendlyname+' => '', ]); -// -// Class: PhysicalInterface -// - -Dict::Add('EN US', 'English', 'English', [ - 'Class:PhysicalInterface/Attribute:org_id' => 'Org id', - 'Class:PhysicalInterface/Attribute:org_id+' => '', - 'Class:PhysicalInterface/Attribute:location_id' => 'Location id', - 'Class:PhysicalInterface/Attribute:location_id+' => '', -]); - // // Class: lnkGroupToCI // Dict::Add('EN US', 'English', 'English', [ - 'Class:lnkGroupToCI' => 'Link Group / CI', - 'Class:lnkGroupToCI+' => '', + 'Class:lnkGroupToCI' => 'Link Group / FunctionalCI', + 'Class:lnkGroupToCI+' => 'This link indicates when a Functional CI is part of a Group.', 'Class:lnkGroupToCI/Name' => '%1$s / %2$s', 'Class:lnkGroupToCI/Attribute:group_id' => 'Group', 'Class:lnkGroupToCI/Attribute:group_id+' => '', @@ -1553,7 +1563,7 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:lnkDocumentToFunctionalCI' => 'Link Document / FunctionalCI', - 'Class:lnkDocumentToFunctionalCI+' => '', + 'Class:lnkDocumentToFunctionalCI+' => 'Link used when a Document is applicable to a Functional CI.', 'Class:lnkDocumentToFunctionalCI/Name' => '%1$s / %2$s', 'Class:lnkDocumentToFunctionalCI/Attribute:functionalci_id' => 'Functionalci', 'Class:lnkDocumentToFunctionalCI/Attribute:functionalci_id+' => '', @@ -1570,7 +1580,8 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'ConfigMgmt:baseinfo' => 'General', 'ConfigMgmt:moreinfo' => 'CI specifics', - 'ConfigMgmt:otherinfo' => 'Dates and description', + 'ConfigMgmt:otherinfo' => 'Description', + 'ConfigMgmt:dates' => 'Dates', 'Storage:moreinfo' => 'Storage specifics', 'Software:moreinfo' => 'Software specifics', 'Phone:moreinfo' => 'Phone specifics', diff --git a/datamodels/2.x/itop-config-mgmt/dictionaries/en_gb.dict.itop-config-mgmt.php b/datamodels/2.x/itop-config-mgmt/dictionaries/en_gb.dict.itop-config-mgmt.php index bdd65aa4c..609e8c3fa 100644 --- a/datamodels/2.x/itop-config-mgmt/dictionaries/en_gb.dict.itop-config-mgmt.php +++ b/datamodels/2.x/itop-config-mgmt/dictionaries/en_gb.dict.itop-config-mgmt.php @@ -491,6 +491,8 @@ Dict::Add('EN GB', 'British English', 'British English', [ 'Class:ApplicationSolution/Attribute:functionalcis_list+' => 'All the configuration items that compose this application solution', 'Class:ApplicationSolution/Attribute:businessprocess_list' => 'Business processes', 'Class:ApplicationSolution/Attribute:businessprocess_list+' => 'All the business processes depending on this application solution', + 'Class:ApplicationSolution/Attribute:logo' => 'Logo~~', + 'Class:ApplicationSolution/Attribute:logo+' => 'Used as object icon when displayed within impact analysis graphs~~', 'Class:ApplicationSolution/Attribute:status' => 'Status', 'Class:ApplicationSolution/Attribute:status+' => '', 'Class:ApplicationSolution/Attribute:status/Value:active' => 'active', @@ -512,6 +514,8 @@ Dict::Add('EN GB', 'British English', 'British English', [ 'Class:BusinessProcess+' => '', 'Class:BusinessProcess/Attribute:applicationsolutions_list' => 'Application solutions', 'Class:BusinessProcess/Attribute:applicationsolutions_list+' => 'All the application solutions that impact this business process', + 'Class:BusinessProcess/Attribute:logo' => 'Logo~~', + 'Class:BusinessProcess/Attribute:logo+' => 'Used as object icon when displayed within impact analysis graphs~~', 'Class:BusinessProcess/Attribute:status' => 'Status', 'Class:BusinessProcess/Attribute:status+' => '', 'Class:BusinessProcess/Attribute:status/Value:active' => 'active', @@ -576,7 +580,7 @@ Dict::Add('EN GB', 'British English', 'British English', [ // Dict::Add('EN GB', 'British English', 'British English', [ - 'Class:WebServer' => 'Web server', + 'Class:WebServer' => 'Web Server', 'Class:WebServer+' => '', 'Class:WebServer/Attribute:webapp_list' => 'Web applications', 'Class:WebServer/Attribute:webapp_list+' => 'All the web applications available on this web server', @@ -608,6 +612,8 @@ Dict::Add('EN GB', 'British English', 'British English', [ 'Class:MiddlewareInstance' => 'Middleware Instance', 'Class:MiddlewareInstance+' => '', 'Class:MiddlewareInstance/ComplementaryName' => '%1$s - %2$s', + 'Class:MiddlewareInstance/Attribute:logo' => 'Logo~~', + 'Class:MiddlewareInstance/Attribute:logo+' => 'Used as object icon when displayed within impact analysis graphs~~', 'Class:MiddlewareInstance/Attribute:middleware_id' => 'Middleware', 'Class:MiddlewareInstance/Attribute:middleware_id+' => '', 'Class:MiddlewareInstance/Attribute:middleware_name' => 'Middleware name', @@ -640,6 +646,8 @@ Dict::Add('EN GB', 'British English', 'British English', [ 'Class:WebApplication/Attribute:webserver_id+' => '', 'Class:WebApplication/Attribute:webserver_name' => 'Web server name', 'Class:WebApplication/Attribute:webserver_name+' => '', + 'Class:WebApplication/Attribute:logo' => 'Logo~~', + 'Class:WebApplication/Attribute:logo+' => 'Used as object icon when displayed within impact analysis graphs~~', 'Class:WebApplication/Attribute:url' => 'URL', 'Class:WebApplication/Attribute:url+' => '', ]); @@ -837,7 +845,7 @@ Dict::Add('EN GB', 'British English', 'British English', [ Dict::Add('EN GB', 'British English', 'British English', [ 'Class:Tape' => 'Tape', - 'Class:Tape+' => '', + 'Class:Tape+' => 'A Tape (or cartridge) within '.ITOP_APPLICATION_SHORT.' is a removable piece of storage part of a Tape Library~~', 'Class:Tape/Attribute:name' => 'Name', 'Class:Tape/Attribute:name+' => '', 'Class:Tape/Attribute:description' => 'Description', @@ -887,6 +895,8 @@ Dict::Add('EN GB', 'British English', 'British English', [ 'Class:Software/Attribute:version+' => '', 'Class:Software/Attribute:documents_list' => 'Documents', 'Class:Software/Attribute:documents_list+' => 'All the documents linked to this software', + 'Class:Software/Attribute:logo' => 'Logo~~', + 'Class:Software/Attribute:logo+' => 'Used as icon for all Software Instance objects using this Software, when displayed within impact analysis graphs~~', 'Class:Software/Attribute:type' => 'Type', 'Class:Software/Attribute:type+' => '', 'Class:Software/Attribute:type/Value:DBServer' => 'DB Server', @@ -1053,6 +1063,8 @@ Dict::Add('EN GB', 'British English', 'British English', [ 'Class:OSVersion/Attribute:osfamily_id+' => '', 'Class:OSVersion/Attribute:osfamily_name' => 'OS family name', 'Class:OSVersion/Attribute:osfamily_name+' => '', + 'Class:OSVersion/UniquenessRule:name_osfamily+' => 'Name must be unique in the OS family~~', + 'Class:OSVersion/UniquenessRule:name_osfamily' => 'this OS version already exists within the OS family~~', ]); // @@ -1062,6 +1074,8 @@ Dict::Add('EN GB', 'British English', 'British English', [ Dict::Add('EN GB', 'British English', 'British English', [ 'Class:OSFamily' => 'OS Family', 'Class:OSFamily+' => '', + 'Class:OSFamily/UniquenessRule:name+' => 'Name must be unique~~', + 'Class:OSFamily/UniquenessRule:name' => 'this OS family already exists~~', ]); // @@ -1144,6 +1158,8 @@ Dict::Add('EN GB', 'British English', 'British English', [ Dict::Add('EN GB', 'British English', 'British English', [ 'Class:NetworkDeviceType' => 'Network Device Type', 'Class:NetworkDeviceType+' => '', + 'Class:NetworkDeviceType/Attribute:logo' => 'Logo~~', + 'Class:NetworkDeviceType/Attribute:logo+' => 'Used as icon for all Network Device of this type, when displayed in console (details, summary card and impact analysis graphs)~~', 'Class:NetworkDeviceType/Attribute:networkdevicesdevices_list' => 'Network devices', 'Class:NetworkDeviceType/Attribute:networkdevicesdevices_list+' => 'All the network devices corresponding to this type', ]); @@ -1159,6 +1175,8 @@ Dict::Add('EN GB', 'British English', 'British English', [ 'Class:IOSVersion/Attribute:brand_id+' => '', 'Class:IOSVersion/Attribute:brand_name' => 'Brand name', 'Class:IOSVersion/Attribute:brand_name+' => '', + 'Class:IOSVersion/UniquenessRule:name_brand+' => 'Name must be unique in the brand~~', + 'Class:IOSVersion/UniquenessRule:name_brand' => 'this IOS version already exists for this brand~~', ]); // @@ -1346,6 +1364,10 @@ Dict::Add('EN GB', 'British English', 'British English', [ 'Class:PhysicalInterface/Attribute:connectableci_id+' => '', 'Class:PhysicalInterface/Attribute:connectableci_name' => 'Device name', 'Class:PhysicalInterface/Attribute:connectableci_name+' => '', + 'Class:PhysicalInterface/Attribute:org_id' => 'Organization', + 'Class:PhysicalInterface/Attribute:org_id+' => '', + 'Class:PhysicalInterface/Attribute:location_id' => 'Location', + 'Class:PhysicalInterface/Attribute:location_id+' => '', 'Class:PhysicalInterface/Attribute:vlans_list' => 'VLANs', 'Class:PhysicalInterface/Attribute:vlans_list+' => '', ]); @@ -1530,7 +1552,8 @@ Dict::Add('EN GB', 'British English', 'British English', [ Dict::Add('EN GB', 'British English', 'British English', [ 'ConfigMgmt:baseinfo' => 'General', 'ConfigMgmt:moreinfo' => 'CI specifics', - 'ConfigMgmt:otherinfo' => 'Dates and description', + 'ConfigMgmt:otherinfo' => 'Description', + 'ConfigMgmt:dates' => 'Dates', 'Storage:moreinfo' => 'Storage specifics', 'Software:moreinfo' => 'Software specifics~~', 'Phone:moreinfo' => 'Phone specifics~~', diff --git a/datamodels/2.x/itop-config-mgmt/dictionaries/es_cr.dict.itop-config-mgmt.php b/datamodels/2.x/itop-config-mgmt/dictionaries/es_cr.dict.itop-config-mgmt.php index c3e6e47b8..9023a2a9f 100644 --- a/datamodels/2.x/itop-config-mgmt/dictionaries/es_cr.dict.itop-config-mgmt.php +++ b/datamodels/2.x/itop-config-mgmt/dictionaries/es_cr.dict.itop-config-mgmt.php @@ -122,7 +122,7 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ 'Class:PhysicalDevice' => 'Dispositivo Físico', - 'Class:PhysicalDevice+' => 'Dispositivo Físico', + 'Class:PhysicalDevice+' => '', 'Class:PhysicalDevice/ComplementaryName' => '%1$s - %2$s', 'Class:PhysicalDevice/Attribute:serialnumber' => 'Número de Serie', 'Class:PhysicalDevice/Attribute:serialnumber+' => 'Número de Serie', @@ -178,7 +178,7 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ 'Class:TelephonyCI' => 'EC Telefónico', - 'Class:TelephonyCI+' => 'EC Telefónico', + 'Class:TelephonyCI+' => '', 'Class:TelephonyCI/Attribute:phonenumber' => 'Número Telefónico', 'Class:TelephonyCI/Attribute:phonenumber+' => 'Número Telefónico', ]); @@ -189,7 +189,7 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ 'Class:Phone' => 'Teléfono', - 'Class:Phone+' => 'Teléfono', + 'Class:Phone+' => '', ]); // @@ -198,7 +198,7 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ 'Class:MobilePhone' => 'Teléfono Móvil', - 'Class:MobilePhone+' => 'Teléfono Móvil', + 'Class:MobilePhone+' => '', 'Class:MobilePhone/Attribute:imei' => 'IMEI', 'Class:MobilePhone/Attribute:imei+' => 'IMEI', 'Class:MobilePhone/Attribute:hw_pin' => 'PIN', @@ -211,7 +211,7 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ 'Class:IPPhone' => 'Teléfono IP', - 'Class:IPPhone+' => 'Teléfono IP', + 'Class:IPPhone+' => '', ]); // @@ -243,7 +243,7 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ 'Class:DatacenterDevice' => 'Dispositivos de Centro de Datos', - 'Class:DatacenterDevice+' => 'Dispositivos de Centro de Datos', + 'Class:DatacenterDevice+' => '', 'Class:DatacenterDevice/ComplementaryName' => '%1$s - %2$s', 'Class:DatacenterDevice/Attribute:rack_id' => 'Rack', 'Class:DatacenterDevice/Attribute:rack_id+' => 'Rack', @@ -281,7 +281,7 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ 'Class:NetworkDevice' => 'Dispositivo de Red', - 'Class:NetworkDevice+' => 'Dispositivo de Red', + 'Class:NetworkDevice+' => '', 'Class:NetworkDevice/ComplementaryName' => '%1$s - %2$s', 'Class:NetworkDevice/Attribute:networkdevicetype_id' => 'Tipo de Red', 'Class:NetworkDevice/Attribute:networkdevicetype_id+' => 'Tipo de Red', @@ -303,7 +303,7 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ 'Class:Server' => 'Servidor', - 'Class:Server+' => 'Servidor', + 'Class:Server+' => '', 'Class:Server/ComplementaryName' => '%1$s - %2$s', 'Class:Server/Attribute:osfamily_id' => 'Familia de SO', 'Class:Server/Attribute:osfamily_id+' => 'Familia de SO', @@ -331,7 +331,7 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ 'Class:StorageSystem' => 'Sistema de Almacenamiento', - 'Class:StorageSystem+' => 'Sistema de Almacenamiento', + 'Class:StorageSystem+' => '', 'Class:StorageSystem/ComplementaryName' => '%1$s - %2$s', 'Class:StorageSystem/Attribute:logicalvolume_list' => 'Volumenes Lógicos', 'Class:StorageSystem/Attribute:logicalvolume_list+' => 'Volumenes Lógicos', @@ -343,7 +343,7 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ 'Class:SANSwitch' => 'Switch de SAN', - 'Class:SANSwitch+' => 'Switch de SAN', + 'Class:SANSwitch+' => '', 'Class:SANSwitch/ComplementaryName' => '%1$s - %2$s', 'Class:SANSwitch/Attribute:datacenterdevice_list' => 'Dispositivos', 'Class:SANSwitch/Attribute:datacenterdevice_list+' => 'Dispositivos', @@ -355,7 +355,7 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ 'Class:TapeLibrary' => 'Libreria de Cintas', - 'Class:TapeLibrary+' => 'Libreria de Cintas', + 'Class:TapeLibrary+' => '', 'Class:TapeLibrary/ComplementaryName' => '%1$s - %2$s', 'Class:TapeLibrary/Attribute:tapes_list' => 'Cintas', 'Class:TapeLibrary/Attribute:tapes_list+' => 'Cintas', @@ -367,10 +367,10 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ 'Class:NAS' => 'NAS', - 'Class:NAS+' => 'NAS', + 'Class:NAS+' => '', 'Class:NAS/ComplementaryName' => '%1$s - %2$s', 'Class:NAS/Attribute:nasfilesystem_list' => 'Filesystems', - 'Class:NAS/Attribute:nasfilesystem_list+' => 'Filesystems', + 'Class:NAS/Attribute:nasfilesystem_list+' => '', ]); // @@ -379,7 +379,7 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ 'Class:PC' => 'PC/Laptop', - 'Class:PC+' => 'PC/Laptop', + 'Class:PC+' => '', 'Class:PC/ComplementaryName' => '%1$s - %2$s', 'Class:PC/Attribute:osfamily_id' => 'Familia de SO', 'Class:PC/Attribute:osfamily_id+' => 'Familia de SO', @@ -407,7 +407,7 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ 'Class:Printer' => 'Impresora', - 'Class:Printer+' => 'Impresora', + 'Class:Printer+' => '', 'Class:Printer/ComplementaryName' => '%1$s - %2$s', ]); @@ -417,7 +417,7 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ 'Class:PowerConnection' => 'Conexión Eléctrica', - 'Class:PowerConnection+' => 'Conexión Eléctrica', + 'Class:PowerConnection+' => '', 'Class:PowerConnection/ComplementaryName' => '%1$s - %2$s', ]); @@ -427,7 +427,7 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ 'Class:PowerSource' => 'Fuente de Poder', - 'Class:PowerSource+' => 'Fuente de Poder', + 'Class:PowerSource+' => '', 'Class:PowerSource/ComplementaryName' => '%1$s - %2$s', 'Class:PowerSource/Attribute:pdus_list' => 'PDUs', 'Class:PowerSource/Attribute:pdus_list+' => 'PDUs', @@ -439,7 +439,7 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ 'Class:PDU' => 'PDU', - 'Class:PDU+' => 'PDU', + 'Class:PDU+' => '', 'Class:PDU/ComplementaryName' => '%1$s - %2$s - %3$s - %4$s', 'Class:PDU/Attribute:rack_id' => 'Rack', 'Class:PDU/Attribute:rack_id+' => 'Rack', @@ -457,7 +457,7 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ 'Class:Peripheral' => 'Periférico', - 'Class:Peripheral+' => 'Periférico', + 'Class:Peripheral+' => '', 'Class:Peripheral/ComplementaryName' => '%1$s - %2$s', ]); @@ -467,7 +467,7 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ 'Class:Enclosure' => 'Enclosure', - 'Class:Enclosure+' => 'Enclosure', + 'Class:Enclosure+' => '', 'Class:Enclosure/ComplementaryName' => '%1$s - %2$s - %3$s', 'Class:Enclosure/Attribute:rack_id' => 'Rack', 'Class:Enclosure/Attribute:rack_id+' => 'Rack', @@ -485,11 +485,13 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ 'Class:ApplicationSolution' => 'Solución Aplicativa', - 'Class:ApplicationSolution+' => 'Solución Aplicativa', + 'Class:ApplicationSolution+' => '', 'Class:ApplicationSolution/Attribute:functionalcis_list' => 'ECs', 'Class:ApplicationSolution/Attribute:functionalcis_list+' => 'ECs', 'Class:ApplicationSolution/Attribute:businessprocess_list' => 'Procesos de Negocio', 'Class:ApplicationSolution/Attribute:businessprocess_list+' => 'Procesos de Negocio', + 'Class:ApplicationSolution/Attribute:logo' => 'Logo~~', + 'Class:ApplicationSolution/Attribute:logo+' => 'Used as object icon when displayed within impact analysis graphs~~', 'Class:ApplicationSolution/Attribute:status' => 'Estatus', 'Class:ApplicationSolution/Attribute:status+' => 'Estatus', 'Class:ApplicationSolution/Attribute:status/Value:active' => 'Activo', @@ -508,9 +510,11 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ 'Class:BusinessProcess' => 'Proceso de Negocio', - 'Class:BusinessProcess+' => 'Proceso de Negocio', + 'Class:BusinessProcess+' => '', 'Class:BusinessProcess/Attribute:applicationsolutions_list' => 'Soluciones Aplicativas', 'Class:BusinessProcess/Attribute:applicationsolutions_list+' => 'Soluciones Aplicativas', + 'Class:BusinessProcess/Attribute:logo' => 'Logo~~', + 'Class:BusinessProcess/Attribute:logo+' => 'Used as object icon when displayed within impact analysis graphs~~', 'Class:BusinessProcess/Attribute:status' => 'Estatus', 'Class:BusinessProcess/Attribute:status+' => 'Estatus', 'Class:BusinessProcess/Attribute:status/Value:active' => 'Activo', @@ -525,7 +529,7 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ 'Class:SoftwareInstance' => 'Instalación de Software', - 'Class:SoftwareInstance+' => 'Instalación de Software', + 'Class:SoftwareInstance+' => '', 'Class:SoftwareInstance/Attribute:system_id' => 'Sistema', 'Class:SoftwareInstance/Attribute:system_id+' => 'Sistema', 'Class:SoftwareInstance/Attribute:system_name' => 'Sistema', @@ -554,7 +558,7 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ 'Class:Middleware' => 'Middleware', - 'Class:Middleware+' => 'Middleware', + 'Class:Middleware+' => '', 'Class:Middleware/Attribute:middlewareinstance_list' => 'Instalaciones de Middleware', 'Class:Middleware/Attribute:middlewareinstance_list+' => 'Instalaciones de Middleware', ]); @@ -565,7 +569,7 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ 'Class:DBServer' => 'Servidor de Base de Datos', - 'Class:DBServer+' => 'Servidor de Base de Datos', + 'Class:DBServer+' => '', 'Class:DBServer/Attribute:dbschema_list' => 'Esquema de BD', 'Class:DBServer/Attribute:dbschema_list+' => 'Esquema de BD', ]); @@ -576,7 +580,7 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ 'Class:WebServer' => 'Servidor Web', - 'Class:WebServer+' => 'Servidor Web', + 'Class:WebServer+' => '', 'Class:WebServer/Attribute:webapp_list' => 'Aplicaciones Web', 'Class:WebServer/Attribute:webapp_list+' => 'Aplicaciones Web', ]); @@ -587,7 +591,7 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ 'Class:PCSoftware' => 'Software de PC', - 'Class:PCSoftware+' => 'Software de PC', + 'Class:PCSoftware+' => '', ]); // @@ -596,7 +600,7 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ 'Class:OtherSoftware' => 'Otro Software', - 'Class:OtherSoftware+' => 'Otro Software', + 'Class:OtherSoftware+' => '', ]); // @@ -605,8 +609,10 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ 'Class:MiddlewareInstance' => 'Instalación de Middleware', - 'Class:MiddlewareInstance+' => 'Instalación de Middleware', + 'Class:MiddlewareInstance+' => '', 'Class:MiddlewareInstance/ComplementaryName' => '%1$s - %2$s', + 'Class:MiddlewareInstance/Attribute:logo' => 'Logo~~', + 'Class:MiddlewareInstance/Attribute:logo+' => 'Used as object icon when displayed within impact analysis graphs~~', 'Class:MiddlewareInstance/Attribute:middleware_id' => 'Middleware', 'Class:MiddlewareInstance/Attribute:middleware_id+' => 'Middleware', 'Class:MiddlewareInstance/Attribute:middleware_name' => 'Middleware', @@ -619,7 +625,7 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ 'Class:DatabaseSchema' => 'Esquema de Base de Datos', - 'Class:DatabaseSchema+' => 'Esquema de Base de Datos', + 'Class:DatabaseSchema+' => '', 'Class:DatabaseSchema/ComplementaryName' => '%1$s - %2$s', 'Class:DatabaseSchema/Attribute:dbserver_id' => 'Servidor de Base de Datos', 'Class:DatabaseSchema/Attribute:dbserver_id+' => 'Servidor de Base de Datos', @@ -633,12 +639,14 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ 'Class:WebApplication' => 'Aplicación Web', - 'Class:WebApplication+' => 'Aplicación Web', + 'Class:WebApplication+' => '', 'Class:WebApplication/ComplementaryName' => '%1$s - %2$s', 'Class:WebApplication/Attribute:webserver_id' => 'Servidor Web', 'Class:WebApplication/Attribute:webserver_id+' => 'Servidor Web', 'Class:WebApplication/Attribute:webserver_name' => 'Servidor Web', 'Class:WebApplication/Attribute:webserver_name+' => 'Servidor Web', + 'Class:WebApplication/Attribute:logo' => 'Logo~~', + 'Class:WebApplication/Attribute:logo+' => 'Used as object icon when displayed within impact analysis graphs~~', 'Class:WebApplication/Attribute:url' => 'URL', 'Class:WebApplication/Attribute:url+' => 'URL de Uso', ]); @@ -649,7 +657,7 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ 'Class:VirtualDevice' => 'Dispositivo Virtual', - 'Class:VirtualDevice+' => 'Dispositivo Virtual', + 'Class:VirtualDevice+' => '', 'Class:VirtualDevice/Attribute:status' => 'Estatus', 'Class:VirtualDevice/Attribute:status+' => 'Estatus', 'Class:VirtualDevice/Attribute:status/Value:implementation' => 'No Productivo', @@ -670,7 +678,7 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ 'Class:VirtualHost' => 'Host Virtual', - 'Class:VirtualHost+' => 'Host Virtual', + 'Class:VirtualHost+' => '', 'Class:VirtualHost/Attribute:virtualmachine_list' => 'Máquinas Virtuales', 'Class:VirtualHost/Attribute:virtualmachine_list+' => 'Máquinas Virtuales', ]); @@ -681,7 +689,7 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ 'Class:Hypervisor' => 'Hypervisor', - 'Class:Hypervisor+' => 'Hypervisor', + 'Class:Hypervisor+' => '', 'Class:Hypervisor/Attribute:farm_id' => 'Granja', 'Class:Hypervisor/Attribute:farm_id+' => 'Granja', 'Class:Hypervisor/Attribute:farm_name' => 'Granja', @@ -698,7 +706,7 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ 'Class:Farm' => 'Granja', - 'Class:Farm+' => 'Granja', + 'Class:Farm+' => '', 'Class:Farm/Attribute:hypervisor_list' => 'Hypervisores', 'Class:Farm/Attribute:hypervisor_list+' => 'Hypervisores', 'Class:Farm/Attribute:redundancy' => 'Alta Disponibilidad', @@ -713,7 +721,7 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ 'Class:VirtualMachine' => 'Máquina Virtual', - 'Class:VirtualMachine+' => 'Máquina Virtual', + 'Class:VirtualMachine+' => '', 'Class:VirtualMachine/ComplementaryName' => '%1$s - %2$s', 'Class:VirtualMachine/Attribute:virtualhost_id' => 'Host Virtual', 'Class:VirtualMachine/Attribute:virtualhost_id+' => 'Host Virtual', @@ -747,7 +755,7 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ 'Class:LogicalVolume' => 'Volumen Lógico', - 'Class:LogicalVolume+' => 'Volumen Lógico', + 'Class:LogicalVolume+' => '', 'Class:LogicalVolume/Attribute:name' => 'Nombre', 'Class:LogicalVolume/Attribute:name+' => 'Nombre del Volumen Lógico', 'Class:LogicalVolume/Attribute:lun_id' => 'LUN', @@ -774,7 +782,7 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ 'Class:lnkServerToVolume' => 'Relación Servidor y Volumen', - 'Class:lnkServerToVolume+' => 'Relación Servidor y Volumen', + 'Class:lnkServerToVolume+' => '', 'Class:lnkServerToVolume/Name' => '%1$s / %2$s', 'Class:lnkServerToVolume/Attribute:volume_id' => 'Volumen', 'Class:lnkServerToVolume/Attribute:volume_id+' => 'Volumen', @@ -794,7 +802,7 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ 'Class:lnkVirtualDeviceToVolume' => 'Relación Dispositivo Virtual y Volumen', - 'Class:lnkVirtualDeviceToVolume+' => 'Relación Dispositivo Virtual y Volumen', + 'Class:lnkVirtualDeviceToVolume+' => '', 'Class:lnkVirtualDeviceToVolume/Name' => '%1$s / %2$s', 'Class:lnkVirtualDeviceToVolume/Attribute:volume_id' => 'Volumen', 'Class:lnkVirtualDeviceToVolume/Attribute:volume_id+' => 'Volumen', @@ -814,7 +822,7 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ 'Class:lnkSanToDatacenterDevice' => 'Relación SAN y Dispositivo del Centro de Datos', - 'Class:lnkSanToDatacenterDevice+' => 'Relación SAN y Dispositivo del Centro de Datos', + 'Class:lnkSanToDatacenterDevice+' => '', 'Class:lnkSanToDatacenterDevice/Name' => '%1$s / %2$s', 'Class:lnkSanToDatacenterDevice/Attribute:san_id' => 'Switch de SAN', 'Class:lnkSanToDatacenterDevice/Attribute:san_id+' => 'Switch de SAN', @@ -836,7 +844,7 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ 'Class:Tape' => 'Cinta', - 'Class:Tape+' => 'Cinta', + 'Class:Tape+' => 'A Tape (or cartridge) within '.ITOP_APPLICATION_SHORT.' is a removable piece of storage part of a Tape Library~~', 'Class:Tape/Attribute:name' => 'Nombre', 'Class:Tape/Attribute:name+' => 'Nombre de la Cinta', 'Class:Tape/Attribute:description' => 'Descripción', @@ -855,7 +863,7 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ 'Class:NASFileSystem' => 'Filesysten en NAS', - 'Class:NASFileSystem+' => 'Filesysten en NAS', + 'Class:NASFileSystem+' => '', 'Class:NASFileSystem/Attribute:name' => 'Nombre', 'Class:NASFileSystem/Attribute:name+' => 'Nombre del Filesystem de Red', 'Class:NASFileSystem/Attribute:description' => 'Descripción', @@ -876,7 +884,7 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ 'Class:Software' => 'Software', - 'Class:Software+' => 'Software', + 'Class:Software+' => '', 'Class:Software/ComplementaryName' => '%1$s - %2$s', 'Class:Software/Attribute:name' => 'Nombre', 'Class:Software/Attribute:name+' => 'Nombre del Software', @@ -886,6 +894,8 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ 'Class:Software/Attribute:version+' => 'Versión', 'Class:Software/Attribute:documents_list' => 'Documentos', 'Class:Software/Attribute:documents_list+' => 'Documentos', + 'Class:Software/Attribute:logo' => 'Logo~~', + 'Class:Software/Attribute:logo+' => 'Used as icon for all Software Instance objects using this Software, when displayed within impact analysis graphs~~', 'Class:Software/Attribute:type' => 'Tipo', 'Class:Software/Attribute:type+' => 'Tipo', 'Class:Software/Attribute:type/Value:DBServer' => 'Servidor de BD', @@ -912,7 +922,7 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ 'Class:Patch' => 'Parche', - 'Class:Patch+' => 'Parche', + 'Class:Patch+' => '', 'Class:Patch/Attribute:name' => 'Nombre', 'Class:Patch/Attribute:name+' => 'Nombre del Parche', 'Class:Patch/Attribute:documents_list' => 'Documentos', @@ -929,7 +939,7 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ 'Class:OSPatch' => 'Parche de SO', - 'Class:OSPatch+' => 'Parche de SO', + 'Class:OSPatch+' => '', 'Class:OSPatch/Attribute:functionalcis_list' => 'Dispositivos', 'Class:OSPatch/Attribute:functionalcis_list+' => 'Dispositivos', 'Class:OSPatch/Attribute:osversion_id' => 'Versión de SO', @@ -944,7 +954,7 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ 'Class:SoftwarePatch' => 'Parche de Software', - 'Class:SoftwarePatch+' => 'Parche de Software', + 'Class:SoftwarePatch+' => '', 'Class:SoftwarePatch/Attribute:software_id' => 'Software', 'Class:SoftwarePatch/Attribute:software_id+' => 'Software', 'Class:SoftwarePatch/Attribute:software_name' => 'Software', @@ -959,7 +969,7 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ 'Class:Licence' => 'Licencia', - 'Class:Licence+' => 'Licencia', + 'Class:Licence+' => '', 'Class:Licence/Attribute:name' => 'Nombre', 'Class:Licence/Attribute:name+' => 'Nombre de la Licencia', 'Class:Licence/Attribute:documents_list' => 'Documentos', @@ -994,7 +1004,7 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ 'Class:OSLicence' => 'Licencia de SO', - 'Class:OSLicence+' => 'Licencia de SO', + 'Class:OSLicence+' => '', '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', @@ -1012,7 +1022,7 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ 'Class:SoftwareLicence' => 'Licencia de Software', - 'Class:SoftwareLicence+' => 'Licencia de Software', + 'Class:SoftwareLicence+' => '', 'Class:SoftwareLicence/ComplementaryName' => '%1$s - %2$s', 'Class:SoftwareLicence/Attribute:software_id' => 'Software', 'Class:SoftwareLicence/Attribute:software_id+' => 'Software', @@ -1028,7 +1038,7 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ 'Class:lnkDocumentToLicence' => 'Relación Documento y Licencia', - 'Class:lnkDocumentToLicence+' => 'Relación Documento y Licencia', + 'Class:lnkDocumentToLicence+' => '', 'Class:lnkDocumentToLicence/Name' => '%1$s / %2$s', 'Class:lnkDocumentToLicence/Attribute:licence_id' => 'Licencia', 'Class:lnkDocumentToLicence/Attribute:licence_id+' => 'Licencia', @@ -1046,11 +1056,13 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ 'Class:OSVersion' => 'Versión de SO', - 'Class:OSVersion+' => 'Versión de SO', + 'Class:OSVersion+' => '', 'Class:OSVersion/Attribute:osfamily_id' => 'Familia de SO', 'Class:OSVersion/Attribute:osfamily_id+' => 'Familia de SO', 'Class:OSVersion/Attribute:osfamily_name' => 'Familia de SO', 'Class:OSVersion/Attribute:osfamily_name+' => 'Familia de SO', + 'Class:OSVersion/UniquenessRule:name_osfamily+' => 'Name must be unique in the OS family~~', + 'Class:OSVersion/UniquenessRule:name_osfamily' => 'this OS version already exists within the OS family~~', ]); // @@ -1059,7 +1071,9 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ 'Class:OSFamily' => 'Familia de SO', - 'Class:OSFamily+' => 'Familia de SO', + 'Class:OSFamily+' => '', + 'Class:OSFamily/UniquenessRule:name+' => 'Name must be unique~~', + 'Class:OSFamily/UniquenessRule:name' => 'this OS family already exists~~', ]); // @@ -1068,7 +1082,7 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ 'Class:Brand' => 'Marca', - 'Class:Brand+' => 'Marca', + 'Class:Brand+' => '', 'Class:Brand/Attribute:logo' => 'Logo~~', 'Class:Brand/Attribute:logo+' => '~~', 'Class:Brand/Attribute:physicaldevices_list' => 'Dispositivo Físico', @@ -1083,7 +1097,7 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ 'Class:Model' => 'Modelo', - 'Class:Model+' => 'Modelo', + 'Class:Model+' => '', 'Class:Model/ComplementaryName' => '%1$s - %2$s', 'Class:Model/Attribute:brand_id' => 'Marca', 'Class:Model/Attribute:brand_id+' => 'Marca', @@ -1141,7 +1155,9 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ 'Class:NetworkDeviceType' => 'Tipo Dispositivo de Red', - 'Class:NetworkDeviceType+' => 'Tipo de Dispositivo de Red', + 'Class:NetworkDeviceType+' => '', + 'Class:NetworkDeviceType/Attribute:logo' => 'Logo~~', + 'Class:NetworkDeviceType/Attribute:logo+' => 'Used as icon for all Network Device of this type, when displayed in console (details, summary card and impact analysis graphs)~~', 'Class:NetworkDeviceType/Attribute:networkdevicesdevices_list' => 'Dispositivos de Red', 'Class:NetworkDeviceType/Attribute:networkdevicesdevices_list+' => 'Dispositivos de Red', ]); @@ -1152,11 +1168,13 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ 'Class:IOSVersion' => 'Versión de IOS', - 'Class:IOSVersion+' => 'Versión de IOS', + 'Class:IOSVersion+' => '', 'Class:IOSVersion/Attribute:brand_id' => 'Marca', 'Class:IOSVersion/Attribute:brand_id+' => 'Marca', 'Class:IOSVersion/Attribute:brand_name' => 'Marca', 'Class:IOSVersion/Attribute:brand_name+' => 'Marca', + 'Class:IOSVersion/UniquenessRule:name_brand+' => 'Name must be unique in the brand~~', + 'Class:IOSVersion/UniquenessRule:name_brand' => 'this IOS version already exists for this brand~~', ]); // @@ -1165,7 +1183,7 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ 'Class:lnkDocumentToPatch' => 'Relación Documentos y Parche', - 'Class:lnkDocumentToPatch+' => 'Relación Documentos y Parche', + 'Class:lnkDocumentToPatch+' => '', 'Class:lnkDocumentToPatch/Name' => '%1$s / %2$s', 'Class:lnkDocumentToPatch/Attribute:patch_id' => 'Parche', 'Class:lnkDocumentToPatch/Attribute:patch_id+' => 'Parche', @@ -1183,7 +1201,7 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ 'Class:lnkSoftwareInstanceToSoftwarePatch' => 'Relación Instalación de Software y Parche de Software', - 'Class:lnkSoftwareInstanceToSoftwarePatch+' => 'Relación Instalación de Software y Parche de Software', + 'Class:lnkSoftwareInstanceToSoftwarePatch+' => '', 'Class:lnkSoftwareInstanceToSoftwarePatch/Name' => '%1$s / %2$s', 'Class:lnkSoftwareInstanceToSoftwarePatch/Attribute:softwarepatch_id' => 'Parche de Software', 'Class:lnkSoftwareInstanceToSoftwarePatch/Attribute:softwarepatch_id+' => 'Parche de Software', @@ -1201,7 +1219,7 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ 'Class:lnkFunctionalCIToOSPatch' => 'Relación EC Funcional y Parche de SO', - 'Class:lnkFunctionalCIToOSPatch+' => 'Relación EC Funcional y Parche de SO', + 'Class:lnkFunctionalCIToOSPatch+' => '', 'Class:lnkFunctionalCIToOSPatch/Name' => '%1$s / %2$s', 'Class:lnkFunctionalCIToOSPatch/Attribute:ospatch_id' => 'Parche de SO', 'Class:lnkFunctionalCIToOSPatch/Attribute:ospatch_id+' => 'Parche de SO', @@ -1219,7 +1237,7 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ 'Class:lnkDocumentToSoftware' => 'Relación Documento y Software', - 'Class:lnkDocumentToSoftware+' => 'Relación Documento y Software', + 'Class:lnkDocumentToSoftware+' => '', 'Class:lnkDocumentToSoftware/Name' => '%1$s / %2$s', 'Class:lnkDocumentToSoftware/Attribute:software_id' => 'Software', 'Class:lnkDocumentToSoftware/Attribute:software_id+' => 'Software', @@ -1237,7 +1255,7 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ 'Class:Subnet' => 'SubRed', - 'Class:Subnet+' => 'SubRed', + 'Class:Subnet+' => '', 'Class:Subnet/Name' => '%1$s/%2$s', 'Class:Subnet/ComplementaryName' => '%1$s - %2$s', 'Class:Subnet/Attribute:description' => 'Descripción', @@ -1283,7 +1301,7 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ 'Class:lnkSubnetToVLAN' => 'Relación Subred / vLAN', - 'Class:lnkSubnetToVLAN+' => 'Relación Subred / vLAN', + 'Class:lnkSubnetToVLAN+' => '', 'Class:lnkSubnetToVLAN/Name' => '%1$s / %2$s', 'Class:lnkSubnetToVLAN/Attribute:subnet_id' => 'Subred', 'Class:lnkSubnetToVLAN/Attribute:subnet_id+' => 'Subred', @@ -1303,7 +1321,7 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ 'Class:NetworkInterface' => 'Interfaz de Red', - 'Class:NetworkInterface+' => 'Interfaz de Red', + 'Class:NetworkInterface+' => '', 'Class:NetworkInterface/Attribute:name' => 'Nombre', 'Class:NetworkInterface/Attribute:name+' => 'Nombre de la Interfaz de Red', 'Class:NetworkInterface/Attribute:finalclass' => 'Clase', @@ -1316,7 +1334,7 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ 'Class:IPInterface' => 'Interfaz IP', - 'Class:IPInterface+' => 'Interfaz IP', + 'Class:IPInterface+' => '', 'Class:IPInterface/Attribute:ipaddress' => 'Dirección IP', 'Class:IPInterface/Attribute:ipaddress+' => 'Dirección IP', 'Class:IPInterface/Attribute:macaddress' => 'Dirección MAC', @@ -1337,7 +1355,7 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ 'Class:PhysicalInterface' => 'Interfaz Física', - 'Class:PhysicalInterface+' => 'Interfaz Física', + 'Class:PhysicalInterface+' => '', 'Class:PhysicalInterface/Name' => '%2$s %1$s', 'Class:PhysicalInterface/Attribute:connectableci_id' => 'Dispositivo', 'Class:PhysicalInterface/Attribute:connectableci_id+' => 'Dispositivo', @@ -1375,7 +1393,7 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ 'Class:LogicalInterface' => 'Interfaz Lógica', - 'Class:LogicalInterface+' => 'Interfaz Lógica', + 'Class:LogicalInterface+' => '', 'Class:LogicalInterface/Attribute:virtualmachine_id' => 'Máquina Virtual', 'Class:LogicalInterface/Attribute:virtualmachine_id+' => 'Máquina Virtual', 'Class:LogicalInterface/Attribute:virtualmachine_name' => 'Máquina Virtual', @@ -1388,7 +1406,7 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ 'Class:FiberChannelInterface' => 'Intefaz de Fibra Óptica', - 'Class:FiberChannelInterface+' => 'Intefaz de Fibra Óptica', + 'Class:FiberChannelInterface+' => '', 'Class:FiberChannelInterface/Attribute:speed' => 'Velocidad', 'Class:FiberChannelInterface/Attribute:speed+' => 'Velocidad', 'Class:FiberChannelInterface/Attribute:topology' => 'Topología', @@ -1471,7 +1489,7 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ 'Class:Group' => 'Grupo', - 'Class:Group+' => 'Grupo', + 'Class:Group+' => '', 'Class:Group/ComplementaryName' => '%1$s - %2$s', 'Class:Group/Attribute:name' => 'Nombre', 'Class:Group/Attribute:name+' => 'Nombre del Grupo', @@ -1527,7 +1545,8 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ 'ConfigMgmt:baseinfo' => 'General~~', 'ConfigMgmt:moreinfo' => 'CI specifics~~', 'Storage:moreinfo' => 'Storage specifics~~', - 'ConfigMgmt:otherinfo' => 'Dates and description~~', + 'ConfigMgmt:otherinfo' => 'Description~~', + 'ConfigMgmt:dates' => 'Dates~~', 'Software:moreinfo' => 'Software specifics~~', 'Phone:moreinfo' => 'Phone specifics~~', 'Server:baseinfo' => 'Información General', @@ -1618,8 +1637,8 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ // Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ - 'Class:PhysicalInterface/Attribute:org_id' => 'Org id~~', + 'Class:PhysicalInterface/Attribute:org_id' => 'Organization~~', 'Class:PhysicalInterface/Attribute:org_id+' => '~~', - 'Class:PhysicalInterface/Attribute:location_id' => 'Location id~~', + 'Class:PhysicalInterface/Attribute:location_id' => 'Location~~', 'Class:PhysicalInterface/Attribute:location_id+' => '~~', ]); diff --git a/datamodels/2.x/itop-config-mgmt/dictionaries/fr.dict.itop-config-mgmt.php b/datamodels/2.x/itop-config-mgmt/dictionaries/fr.dict.itop-config-mgmt.php index 8f8310bdb..63ac04e40 100644 --- a/datamodels/2.x/itop-config-mgmt/dictionaries/fr.dict.itop-config-mgmt.php +++ b/datamodels/2.x/itop-config-mgmt/dictionaries/fr.dict.itop-config-mgmt.php @@ -49,8 +49,8 @@ Dict::Add('FR FR', 'French', 'Français', [ // Dict::Add('FR FR', 'French', 'Français', [ - 'Class:lnkContactToFunctionalCI' => 'Lien Contact / CI Fonctionnel', - 'Class:lnkContactToFunctionalCI+' => '', + 'Class:lnkContactToFunctionalCI' => 'Lien Contact / CI fonctionnel', + 'Class:lnkContactToFunctionalCI+' => 'Gère les Contacts liés à des CI Fonctionnels. Ca peut être une équipe responsable de l\'équipment, de façon à lui affecter les Tickets liés à cet équipment ou la personne à laquelle un équipment individuel comme un PC ou un téléphone est affecté, de façon à gérer le parc.', 'Class:lnkContactToFunctionalCI/Name' => '%1$s / %2$s', 'Class:lnkContactToFunctionalCI/Attribute:functionalci_id' => 'CI', 'Class:lnkContactToFunctionalCI/Attribute:functionalci_id+' => '', @@ -67,8 +67,8 @@ Dict::Add('FR FR', 'French', 'Français', [ // Dict::Add('FR FR', 'French', 'Français', [ - 'Class:FunctionalCI' => 'CI Fonctionnel', - 'Class:FunctionalCI+' => '', + 'Class:FunctionalCI' => 'CI fonctionnel', + 'Class:FunctionalCI+' => 'Classe abstraite regroupant la plupart des types d’éléments de configuration de la CMDB.', 'Class:FunctionalCI/Attribute:name' => 'Nom', 'Class:FunctionalCI/Attribute:name+' => '', 'Class:FunctionalCI/Attribute:description' => 'Description', @@ -117,7 +117,7 @@ Dict::Add('FR FR', 'French', 'Français', [ Dict::Add('FR FR', 'French', 'Français', [ 'Class:PhysicalDevice' => 'Matériel physique', - 'Class:PhysicalDevice+' => '', + 'Class:PhysicalDevice+' => 'Classe abstraite regroupant les types physiques d’éléments de configuration. Un Matériel physique peut être localisé. Il possède généralement une Marque et un Modèle.', 'Class:PhysicalDevice/ComplementaryName' => '%1$s - %2$s', 'Class:PhysicalDevice/Attribute:serialnumber' => 'Numéro de série', 'Class:PhysicalDevice/Attribute:serialnumber+' => '', @@ -156,8 +156,8 @@ Dict::Add('FR FR', 'French', 'Français', [ // Dict::Add('FR FR', 'French', 'Français', [ - 'Class:Rack' => 'Rack', - 'Class:Rack+' => '', + 'Class:Rack' => 'Baie', + 'Class:Rack+' => 'Conteneur physique pour Matériel de datacenter et Châssis.', 'Class:Rack/ComplementaryName' => '%1$s - %2$s', 'Class:Rack/Attribute:nb_u' => 'NB Unité', 'Class:Rack/Attribute:nb_u+' => '', @@ -170,7 +170,7 @@ Dict::Add('FR FR', 'French', 'Français', [ 'Class:Rack/Attribute:device_list/UI:Links:Remove:Button+' => 'Retirer ce %4$s', 'Class:Rack/Attribute:device_list/UI:Links:Remove:Modal:Title' => 'Retirer ce %4$s de son %1$s', 'Class:Rack/Attribute:enclosure_list' => 'Chassis', - 'Class:Rack/Attribute:enclosure_list+' => 'Tous les chassis dans ce rack', + 'Class:Rack/Attribute:enclosure_list+' => 'Tous les chassis dans cette Baie', 'Class:Rack/Attribute:enclosure_list/UI:Links:Create:Button+' => 'Créer un %4$s', 'Class:Rack/Attribute:enclosure_list/UI:Links:Create:Modal:Title' => 'Ajouter un %4$s à %2$s', 'Class:Rack/Attribute:enclosure_list/UI:Links:Delete:Button+' => 'Supprimer ce %4$s', @@ -184,8 +184,8 @@ Dict::Add('FR FR', 'French', 'Français', [ // Dict::Add('FR FR', 'French', 'Français', [ - 'Class:TelephonyCI' => 'CI Téléphonie', - 'Class:TelephonyCI+' => '', + 'Class:TelephonyCI' => 'Équipement de téléphonie', + 'Class:TelephonyCI+' => 'Classe abstraite regroupant les équipements de téléphonie.', 'Class:TelephonyCI/Attribute:phonenumber' => 'Numéro', 'Class:TelephonyCI/Attribute:phonenumber+' => '', ]); @@ -196,7 +196,7 @@ Dict::Add('FR FR', 'French', 'Français', [ Dict::Add('FR FR', 'French', 'Français', [ 'Class:Phone' => 'Téléphone', - 'Class:Phone+' => '', + 'Class:Phone+' => 'Équipement individuel. Téléphone filaire classique.', ]); // @@ -205,7 +205,7 @@ Dict::Add('FR FR', 'French', 'Français', [ Dict::Add('FR FR', 'French', 'Français', [ 'Class:MobilePhone' => 'Téléphone mobile', - 'Class:MobilePhone+' => '', + 'Class:MobilePhone+' => 'Équipement individuel. Téléphone portable.', 'Class:MobilePhone/Attribute:imei' => 'IMEI', 'Class:MobilePhone/Attribute:imei+' => '', 'Class:MobilePhone/Attribute:hw_pin' => 'PIN', @@ -218,7 +218,7 @@ Dict::Add('FR FR', 'French', 'Français', [ Dict::Add('FR FR', 'French', 'Français', [ 'Class:IPPhone' => 'Téléphone IP', - 'Class:IPPhone+' => '', + 'Class:IPPhone+' => 'Équipement individuel. Équipement physique dédié aux appels téléphoniques, connecté à un réseau.', ]); // @@ -227,7 +227,7 @@ Dict::Add('FR FR', 'French', 'Français', [ Dict::Add('FR FR', 'French', 'Français', [ 'Class:Tablet' => 'Tablette', - 'Class:Tablet+' => '', + 'Class:Tablet+' => 'Équipement individuel. Par exemple iPad, Galaxy Note/Tab Nexus, Kindle...', ]); // @@ -235,8 +235,8 @@ Dict::Add('FR FR', 'French', 'Français', [ // Dict::Add('FR FR', 'French', 'Français', [ - 'Class:ConnectableCI' => 'CI connecté', - 'Class:ConnectableCI+' => '', + 'Class:ConnectableCI' => 'Matériel connecté', + 'Class:ConnectableCI+' => 'Matériel physique pouvant être connecté à un réseau.', 'Class:ConnectableCI/ComplementaryName' => '%1$s - %2$s', 'Class:ConnectableCI/Attribute:networkdevice_list' => 'Equipements réseaux', 'Class:ConnectableCI/Attribute:networkdevice_list+' => 'Tous les équipements réseaux connectés à ce matériel', @@ -255,10 +255,10 @@ Dict::Add('FR FR', 'French', 'Français', [ // Dict::Add('FR FR', 'French', 'Français', [ - 'Class:DatacenterDevice' => 'Matériel Datacenter', - 'Class:DatacenterDevice+' => '', + 'Class:DatacenterDevice' => 'Matériel de datacenter', + 'Class:DatacenterDevice+' => 'Un équipement physique, connecté au réseau et installé dans un datacenter, généralement dans une Baie ou un Châssis. Il peut s’agir de Serveurs, d\'Équipement réseau, de Systèmes de Stockage, de Switchs SAN, de Bandothèques, de NAS…', 'Class:DatacenterDevice/ComplementaryName' => '%1$s - %2$s', - 'Class:DatacenterDevice/Attribute:rack_id' => 'Rack', + 'Class:DatacenterDevice/Attribute:rack_id' => 'Baie', 'Class:DatacenterDevice/Attribute:rack_id+' => '', 'Class:DatacenterDevice/Attribute:rack_name' => 'Nom Rack', 'Class:DatacenterDevice/Attribute:rack_name+' => '', @@ -299,8 +299,8 @@ Dict::Add('FR FR', 'French', 'Français', [ // Dict::Add('FR FR', 'French', 'Français', [ - 'Class:NetworkDevice' => 'Equipement réseau', - 'Class:NetworkDevice+' => '', + 'Class:NetworkDevice' => 'Équipement réseau', + 'Class:NetworkDevice+' => 'Tout type d’équipement réseau : routeur, switch, hub, load balancer, firewall…', 'Class:NetworkDevice/ComplementaryName' => '%1$s - %2$s', 'Class:NetworkDevice/Attribute:networkdevicetype_id' => 'Type', 'Class:NetworkDevice/Attribute:networkdevicetype_id+' => '', @@ -322,7 +322,7 @@ Dict::Add('FR FR', 'French', 'Français', [ Dict::Add('FR FR', 'French', 'Français', [ 'Class:Server' => 'Serveur', - 'Class:Server+' => '', + 'Class:Server+' => 'Matériel de Datacenter qui fournit des ressources de calcul, de stockage ou de connectivité. Il tourne sous une Version d\'OS et héberge des Applications Logicielles.', 'Class:Server/ComplementaryName' => '%1$s - %2$s', 'Class:Server/Attribute:osfamily_id' => 'Famille OS', 'Class:Server/Attribute:osfamily_id+' => '', @@ -350,7 +350,7 @@ Dict::Add('FR FR', 'French', 'Français', [ Dict::Add('FR FR', 'French', 'Français', [ 'Class:StorageSystem' => 'Système de stockage', - 'Class:StorageSystem+' => '', + 'Class:StorageSystem+' => 'Système de stockage pouvant être connecté à un SAN ou à un réseau Ethernet. L\'unité logique de stockage gérée par un Système de stockage est un Volume logique.', 'Class:StorageSystem/ComplementaryName' => '%1$s - %2$s', 'Class:StorageSystem/Attribute:logicalvolume_list' => 'Volumes logiques', 'Class:StorageSystem/Attribute:logicalvolume_list+' => 'Tous les volumes logiques dans ce système de stockage', @@ -368,7 +368,7 @@ Dict::Add('FR FR', 'French', 'Français', [ Dict::Add('FR FR', 'French', 'Français', [ 'Class:SANSwitch' => 'Switch SAN', - 'Class:SANSwitch+' => '', + 'Class:SANSwitch+' => 'Matériel de Datacenter. C\'est un switch utilisé par les réseaux de stockage (Storage Area Network). Il supporte le protocole Fibre Channel.', 'Class:SANSwitch/ComplementaryName' => '%1$s - %2$s', 'Class:SANSwitch/Attribute:datacenterdevice_list' => 'Matériels connectés', 'Class:SANSwitch/Attribute:datacenterdevice_list+' => 'Tous les matériels connectés à ce switch SAN', @@ -380,7 +380,7 @@ Dict::Add('FR FR', 'French', 'Français', [ Dict::Add('FR FR', 'French', 'Français', [ 'Class:TapeLibrary' => 'Bandothèque', - 'Class:TapeLibrary+' => '', + 'Class:TapeLibrary+' => 'Matériel connecté et rackable hébergeant plusieurs bandes magnétiques (ou cartouches). Utilisé pour la sauvegarde ou l’archivage.', 'Class:TapeLibrary/ComplementaryName' => '%1$s - %2$s', 'Class:TapeLibrary/Attribute:tapes_list' => 'Bandes', 'Class:TapeLibrary/Attribute:tapes_list+' => 'Toutes les bandes dans cette bandothèque', @@ -398,7 +398,7 @@ Dict::Add('FR FR', 'French', 'Français', [ Dict::Add('FR FR', 'French', 'Français', [ 'Class:NAS' => 'NAS', - 'Class:NAS+' => '', + 'Class:NAS+' => 'Matériel connecté et rackable fournissant un stockage de haute capacité. Dans '.ITOP_APPLICATION_SHORT.', un NAS (Network-attached storage) contient des Systèmes de fichiers NAS.', 'Class:NAS/ComplementaryName' => '%1$s - %2$s', 'Class:NAS/Attribute:nasfilesystem_list' => 'Systèmes de fichier NAS', 'Class:NAS/Attribute:nasfilesystem_list+' => 'Tous les systèmes de fichier dans ce NAS', @@ -416,7 +416,7 @@ Dict::Add('FR FR', 'French', 'Français', [ Dict::Add('FR FR', 'French', 'Français', [ 'Class:PC' => 'PC', - 'Class:PC+' => '', + 'Class:PC+' => 'Elément de configuration (CI), un ordinateur personnel (PC) est un matériel physique, de bureau ou portable, tournant avec une version d\'OS et conçu pour exécuter des instances logicielles.', 'Class:PC/ComplementaryName' => '%1$s - %2$s', 'Class:PC/Attribute:osfamily_id' => 'Famille OS', 'Class:PC/Attribute:osfamily_id+' => '', @@ -444,7 +444,7 @@ Dict::Add('FR FR', 'French', 'Français', [ Dict::Add('FR FR', 'French', 'Français', [ 'Class:Printer' => 'Imprimante', - 'Class:Printer+' => '', + 'Class:Printer+' => 'Elément de configuration (CI) connectable. Matériel physique connecté au réseau ou à un PC.', 'Class:Printer/ComplementaryName' => '%1$s - %2$s', ]); @@ -454,7 +454,7 @@ Dict::Add('FR FR', 'French', 'Français', [ Dict::Add('FR FR', 'French', 'Français', [ 'Class:PowerConnection' => 'Connexion électrique', - 'Class:PowerConnection+' => '', + 'Class:PowerConnection+' => 'Classe abstraite regroupant les équipements physiques utilisés pour l\'alimentation électrique.', 'Class:PowerConnection/ComplementaryName' => '%1$s - %2$s', ]); @@ -464,7 +464,7 @@ Dict::Add('FR FR', 'French', 'Français', [ Dict::Add('FR FR', 'French', 'Français', [ 'Class:PowerSource' => 'Arrivée électrique', - 'Class:PowerSource+' => '', + 'Class:PowerSource+' => 'Connexion électrique physique. Utilisée dans un datacenter pour documenter toute source d\'alimentation (arrivée principale, disjoncteur…) qui n\'est pas une PDU.', 'Class:PowerSource/ComplementaryName' => '%1$s - %2$s', 'Class:PowerSource/Attribute:pdus_list' => 'PDUs', 'Class:PowerSource/Attribute:pdus_list+' => 'Toutes les PDUs de cette arrivée électrique', @@ -482,9 +482,9 @@ Dict::Add('FR FR', 'French', 'Français', [ Dict::Add('FR FR', 'French', 'Français', [ 'Class:PDU' => 'PDU', - 'Class:PDU+' => '', + 'Class:PDU+' => 'Connexion électrique. Une PDU (Power Distribution Unit) est un équipement doté de multiples sorties conçu pour distribuer l\'alimentation électrique, notamment vers les racks d\'ordinateurs et équipements réseau d\'un datacenter.', 'Class:PDU/ComplementaryName' => '%1$s - %2$s - %3$s - %4$s', - 'Class:PDU/Attribute:rack_id' => 'Rack', + 'Class:PDU/Attribute:rack_id' => 'Baie', 'Class:PDU/Attribute:rack_id+' => '', 'Class:PDU/Attribute:rack_name' => 'Nom rack', 'Class:PDU/Attribute:rack_name+' => '', @@ -500,7 +500,8 @@ Dict::Add('FR FR', 'French', 'Français', [ Dict::Add('FR FR', 'French', 'Français', [ 'Class:Peripheral' => 'Périphérique', - 'Class:Peripheral+' => '', + 'Class:Peripheral+' => 'Périphérique physique, utilisé pour documenter tout type de périphérique informatique. +Par exemple : disques durs externes, scanners, dispositifs d\'entrée (trackballs, lecteurs de codes-barres), etc…', 'Class:Peripheral/ComplementaryName' => '%1$s - %2$s', ]); @@ -509,10 +510,10 @@ Dict::Add('FR FR', 'French', 'Français', [ // Dict::Add('FR FR', 'French', 'Français', [ - 'Class:Enclosure' => 'Chassis', - 'Class:Enclosure+' => '', + 'Class:Enclosure' => 'Châssis', + 'Class:Enclosure+' => 'Un châssis montée à l\'intérieur d\'une Baie qui permet d\'installer des équipements informatiques, comme des Serveurs lames ou des équipements réseau.', 'Class:Enclosure/ComplementaryName' => '%1$s - %2$s - %3$s', - 'Class:Enclosure/Attribute:rack_id' => 'Rack', + 'Class:Enclosure/Attribute:rack_id' => 'Baie', 'Class:Enclosure/Attribute:rack_id+' => '', 'Class:Enclosure/Attribute:rack_name' => 'Nom rack', 'Class:Enclosure/Attribute:rack_name+' => '', @@ -534,11 +535,13 @@ Dict::Add('FR FR', 'French', 'Français', [ Dict::Add('FR FR', 'French', 'Français', [ 'Class:ApplicationSolution' => 'Solution applicative', - 'Class:ApplicationSolution+' => '', + 'Class:ApplicationSolution+' => 'Les solutions applicatives décrivent des applications complexes composées de plusieurs composants de base. L’information principale est la liste de ses relations. Elle peut aussi être utilisée pour modéliser la relation entre un ou plusieurs controlleurs et les équipements qu\'il(s) gérent (par exemple des applicatifs de supervision, de gestion de configuration ou d\'analyse de performance).', 'Class:ApplicationSolution/Attribute:functionalcis_list' => 'CIs', 'Class:ApplicationSolution/Attribute:functionalcis_list+' => 'Tous les éléments de configuration qui composent cette solution applicative', 'Class:ApplicationSolution/Attribute:businessprocess_list' => 'Processus métiers', 'Class:ApplicationSolution/Attribute:businessprocess_list+' => 'Tous les processus métiers dépendants de cette solution applicative', + 'Class:ApplicationSolution/Attribute:logo' => 'Logo', + 'Class:ApplicationSolution/Attribute:logo+' => 'Utilisé comme icône de l\'objet dans les graphes d\'analyse d\'impact', 'Class:ApplicationSolution/Attribute:status' => 'Etat', 'Class:ApplicationSolution/Attribute:status+' => '', 'Class:ApplicationSolution/Attribute:status/Value:active' => 'Actif', @@ -546,7 +549,7 @@ Dict::Add('FR FR', 'French', 'Français', [ 'Class:ApplicationSolution/Attribute:status/Value:inactive' => 'Inactif', 'Class:ApplicationSolution/Attribute:status/Value:inactive+' => '', 'Class:ApplicationSolution/Attribute:redundancy' => 'Analyse d\'impact : configuration de la redondance', - 'Class:ApplicationSolution/Attribute:redundancy/disabled' => 'La solution est opérationelle si tous les CIs qui la composent sont opérationnels', + 'Class:ApplicationSolution/Attribute:redundancy/disabled' => 'La solution est opérationnelle si tous les CIs qui la composent sont opérationnels', 'Class:ApplicationSolution/Attribute:redundancy/count' => 'Nombre minimal de CIs pour que la solution soit opérationnelle : %1$s', 'Class:ApplicationSolution/Attribute:redundancy/percent' => 'Pourcentage minimal de CIs pour que la solution soit opérationnelle : %1$s %%', ]); @@ -557,13 +560,15 @@ Dict::Add('FR FR', 'French', 'Français', [ Dict::Add('FR FR', 'French', 'Français', [ 'Class:BusinessProcess' => 'Processus métier', - 'Class:BusinessProcess+' => '', + 'Class:BusinessProcess+' => 'Un processus métier sert à documenter un processus de haut niveau ou une application importante pour les opérations. Similaire à une solution applicative mais pour des applications ou processus d’organisation de plus haut niveau.', 'Class:BusinessProcess/Attribute:applicationsolutions_list' => 'Solutions applicatives', 'Class:BusinessProcess/Attribute:applicationsolutions_list+' => 'Toutes les solutions applicatives qui impactent ce processus métier', 'Class:BusinessProcess/Attribute:applicationsolutions_list/UI:Links:Add:Button+' => 'Ajouter une %4$s', 'Class:BusinessProcess/Attribute:applicationsolutions_list/UI:Links:Add:Modal:Title' => 'Ajouter une %4$s à %2$s', 'Class:BusinessProcess/Attribute:applicationsolutions_list/UI:Links:Remove:Button+' => 'Retirer cette %4$s', 'Class:BusinessProcess/Attribute:applicationsolutions_list/UI:Links:Remove:Modal:Title' => 'Retirer une %4$s', + 'Class:BusinessProcess/Attribute:logo' => 'Logo', + 'Class:BusinessProcess/Attribute:logo+' => 'Utilisé comme icône de l\'objet dans les graphes d\'analyse d\'impact', 'Class:BusinessProcess/Attribute:status' => 'Etat', 'Class:BusinessProcess/Attribute:status+' => '', 'Class:BusinessProcess/Attribute:status/Value:active' => 'Actif', @@ -578,7 +583,7 @@ Dict::Add('FR FR', 'French', 'Français', [ Dict::Add('FR FR', 'French', 'Français', [ 'Class:SoftwareInstance' => 'Instance logiciel', - 'Class:SoftwareInstance+' => '', + 'Class:SoftwareInstance+' => 'Classe abstraite représentant le déploiement d’un Logiciel sur un équipement (Serveur, PC, Machine virtuelle). Dans '.ITOP_APPLICATION_SHORT.', il existe différents types d’instances logicielles : Serveur de base de données, Middleware, Logiciel PC, Serveur web ou Autre logiciel.', 'Class:SoftwareInstance/Attribute:system_id' => 'Système', 'Class:SoftwareInstance/Attribute:system_id+' => '', 'Class:SoftwareInstance/Attribute:system_name' => 'Nom du système', @@ -607,7 +612,7 @@ Dict::Add('FR FR', 'French', 'Français', [ Dict::Add('FR FR', 'French', 'Français', [ 'Class:Middleware' => 'Middleware', - 'Class:Middleware+' => '', + 'Class:Middleware+' => 'Instance logicielle offrant des services à d\'autres logiciels (ex : Tomcat, JBoss, Talend, Microsoft BizTalk, IBM Websphere ou Lotus Domino) installée sur un système spécifique (PC, Serveur ou Machine virtuelle).', 'Class:Middleware/Attribute:middlewareinstance_list' => 'Instance Middleware', 'Class:Middleware/Attribute:middlewareinstance_list+' => 'Toutes les instances de middleware fournies par ce middleware', 'Class:Middleware/Attribute:middlewareinstance_list/UI:Links:Create:Button+' => 'Créer une %4$s', @@ -624,7 +629,7 @@ Dict::Add('FR FR', 'French', 'Français', [ Dict::Add('FR FR', 'French', 'Français', [ 'Class:DBServer' => 'Serveur de base de données', - 'Class:DBServer+' => '', + 'Class:DBServer+' => 'Instance logicielle offrant des services de base de données (comme MySQL 8.0, Oracle, SQL Server, DB2…) installée sur un système spécifique (PC, Serveur ou Machine virtuelle).', 'Class:DBServer/Attribute:dbschema_list' => 'Instances de base de données', 'Class:DBServer/Attribute:dbschema_list+' => 'Toutes les instances de base de données pour ce serveur', 'Class:DBServer/Attribute:dbschema_list/UI:Links:Create:Button+' => 'Créer une %4$s', @@ -640,8 +645,8 @@ Dict::Add('FR FR', 'French', 'Français', [ // Dict::Add('FR FR', 'French', 'Français', [ - 'Class:WebServer' => 'Serveur Web', - 'Class:WebServer+' => '', + 'Class:WebServer' => 'Serveur web', + 'Class:WebServer+' => 'Instance logicielle offrant des services Web (comme Apache 2.4, Nginx 1.29.4, IIS 7.0) installée sur un système spécifique (PC, Serveur ou Machine virtuelle).', 'Class:WebServer/Attribute:webapp_list' => 'Application Web', 'Class:WebServer/Attribute:webapp_list+' => 'Toutes les applications Web disponibles sur ce serveur', 'Class:WebServer/Attribute:webapp_list/UI:Links:Create:Button+' => 'Créer une %4$s', @@ -658,7 +663,7 @@ Dict::Add('FR FR', 'French', 'Français', [ Dict::Add('FR FR', 'French', 'Français', [ 'Class:PCSoftware' => 'Logiciel PC', - 'Class:PCSoftware+' => 'Application logicielle sur PC', + 'Class:PCSoftware+' => 'Instance logicielle pour des logiciels (ex : MS Office, Photoshop, Filezilla) installés sur un PC.', ]); // @@ -667,7 +672,7 @@ Dict::Add('FR FR', 'French', 'Français', [ Dict::Add('FR FR', 'French', 'Français', [ 'Class:OtherSoftware' => 'Autre logiciel', - 'Class:OtherSoftware+' => '', + 'Class:OtherSoftware+' => 'Tout type d\'instance logicielle qui ne rentre pas dans les autres catégories : Logiciel PC, Middleware, Serveur de base de données ou Serveur Web.', ]); // @@ -675,9 +680,11 @@ Dict::Add('FR FR', 'French', 'Français', [ // Dict::Add('FR FR', 'French', 'Français', [ - 'Class:MiddlewareInstance' => 'Instance Middleware', - 'Class:MiddlewareInstance+' => '', + 'Class:MiddlewareInstance' => 'Instance de middleware', + 'Class:MiddlewareInstance+' => 'CI fonctionnel représentant un service délivré par un Middleware.', 'Class:MiddlewareInstance/ComplementaryName' => '%1$s - %2$s', + 'Class:MiddlewareInstance/Attribute:logo' => 'Logo', + 'Class:MiddlewareInstance/Attribute:logo+' => 'Utilisé comme icône de l\'objet dans les graphes d\'analyse d\'impact', 'Class:MiddlewareInstance/Attribute:middleware_id' => 'Middleware', 'Class:MiddlewareInstance/Attribute:middleware_id+' => '', 'Class:MiddlewareInstance/Attribute:middleware_name' => 'Nom Middleware', @@ -690,7 +697,7 @@ Dict::Add('FR FR', 'French', 'Français', [ Dict::Add('FR FR', 'French', 'Français', [ 'Class:DatabaseSchema' => 'Instance de base de données', - 'Class:DatabaseSchema+' => '', + 'Class:DatabaseSchema+' => 'Instance de base de données géré par un Serveur de base de données.', 'Class:DatabaseSchema/ComplementaryName' => '%1$s - %2$s', 'Class:DatabaseSchema/Attribute:dbserver_id' => 'Serveur de base de données', 'Class:DatabaseSchema/Attribute:dbserver_id+' => '', @@ -703,13 +710,15 @@ Dict::Add('FR FR', 'French', 'Français', [ // Dict::Add('FR FR', 'French', 'Français', [ - 'Class:WebApplication' => 'Application Web', - 'Class:WebApplication+' => '', + 'Class:WebApplication' => 'Application web', + 'Class:WebApplication+' => 'Instance d’une application accessible via un navigateur web et s’exécutant sur un Serveur web donné. Par exemple cet iTop.', 'Class:WebApplication/ComplementaryName' => '%1$s - %2$s', 'Class:WebApplication/Attribute:webserver_id' => 'Serveur Web', 'Class:WebApplication/Attribute:webserver_id+' => '', 'Class:WebApplication/Attribute:webserver_name' => 'Nom Serveur Web', 'Class:WebApplication/Attribute:webserver_name+' => '', + 'Class:WebApplication/Attribute:logo' => 'Logo', + 'Class:WebApplication/Attribute:logo+' => 'Utilisé comme icône de l\'objet dans les graphes d\'analyse d\'impact', 'Class:WebApplication/Attribute:url' => 'URL', 'Class:WebApplication/Attribute:url+' => '', ]); @@ -719,8 +728,8 @@ Dict::Add('FR FR', 'French', 'Français', [ // Dict::Add('FR FR', 'French', 'Français', [ - 'Class:VirtualDevice' => 'Equipement Virtuel', - 'Class:VirtualDevice+' => '', + 'Class:VirtualDevice' => 'Équipement virtuel', + 'Class:VirtualDevice+' => 'Classe abstraite utilisée pour la virtualisation de serveurs (Hôte virtuel et Machine virtuelle).', 'Class:VirtualDevice/Attribute:status' => 'Etat', 'Class:VirtualDevice/Attribute:status+' => '', 'Class:VirtualDevice/Attribute:status/Value:implementation' => 'Implémentation', @@ -740,8 +749,8 @@ Dict::Add('FR FR', 'French', 'Français', [ // Dict::Add('FR FR', 'French', 'Français', [ - 'Class:VirtualHost' => 'Hôte Virtuel', - 'Class:VirtualHost+' => '', + 'Class:VirtualHost' => 'Hôte virtuel', + 'Class:VirtualHost+' => 'Classe abstraite pour les Équipements virtuels (Hyperviseur, vCluster,...) hébergeant des Machines virtuelles.', 'Class:VirtualHost/Attribute:virtualmachine_list' => 'Machines virtuelles', 'Class:VirtualHost/Attribute:virtualmachine_list+' => 'Toutes les machiens virtuelles hébergées par cet hôte', 'Class:VirtualHost/Attribute:virtualmachine_list/UI:Links:Create:Button+' => 'Créer une %4$s', @@ -758,7 +767,7 @@ Dict::Add('FR FR', 'French', 'Français', [ Dict::Add('FR FR', 'French', 'Français', [ 'Class:Hypervisor' => 'Hyperviseur', - 'Class:Hypervisor+' => '', + 'Class:Hypervisor+' => 'Hôte virtuel. Logiciel de virtualisation (MS Hyper-V, VMWare ESX, Xen, etc.) s\'exécutant sur un serveur physique et permettant la création de machines virtuelles.', 'Class:Hypervisor/Attribute:farm_id' => 'vCluster', 'Class:Hypervisor/Attribute:farm_id+' => '', 'Class:Hypervisor/Attribute:farm_name' => 'Nom vCluster', @@ -775,7 +784,7 @@ Dict::Add('FR FR', 'French', 'Français', [ Dict::Add('FR FR', 'French', 'Français', [ 'Class:Farm' => 'vCluster', - 'Class:Farm+' => '', + 'Class:Farm+' => 'Hôte virtuel. Une ferme (ou vCluster) est un groupe d\'hyperviseurs mutualisés partageant des ressources de stockage afin de fournir un système tolérant aux pannes pour héberger des Machines virtuelles.', 'Class:Farm/Attribute:hypervisor_list' => 'Hyperviseurs', 'Class:Farm/Attribute:hypervisor_list+' => 'Tous les hyperviseurs qui composent ce vCluster', 'Class:Farm/Attribute:hypervisor_list/UI:Links:Create:Button+' => 'Créer un %4$s', @@ -796,7 +805,7 @@ Dict::Add('FR FR', 'French', 'Français', [ Dict::Add('FR FR', 'French', 'Français', [ 'Class:VirtualMachine' => 'Machine virtuelle', - 'Class:VirtualMachine+' => '', + 'Class:VirtualMachine+' => 'Équivalent virtuel d\'un serveur, hébergé soit sur un Hyperviseur soit sur une ferme (ou vCluster).', 'Class:VirtualMachine/ComplementaryName' => '%1$s - %2$s', 'Class:VirtualMachine/Attribute:virtualhost_id' => 'vCluster / Hyperviseur', 'Class:VirtualMachine/Attribute:virtualhost_id+' => '', @@ -836,7 +845,7 @@ Dict::Add('FR FR', 'French', 'Français', [ Dict::Add('FR FR', 'French', 'Français', [ 'Class:LogicalVolume' => 'Volume logique', - 'Class:LogicalVolume+' => '', + 'Class:LogicalVolume+' => 'Unité de stockage gérée à l’intérieur d’un Système de stockage. Elle peut être utilisée par plusieurs Serveurs et Équipement virtuels.', 'Class:LogicalVolume/Attribute:name' => 'Nom', 'Class:LogicalVolume/Attribute:name+' => '', 'Class:LogicalVolume/Attribute:lun_id' => 'LUN ID', @@ -862,8 +871,8 @@ Dict::Add('FR FR', 'French', 'Français', [ // Dict::Add('FR FR', 'French', 'Français', [ - 'Class:lnkServerToVolume' => 'Lien Serveur / Volume', - 'Class:lnkServerToVolume+' => '', + 'Class:lnkServerToVolume' => 'Lien Serveur / Volume logique', + 'Class:lnkServerToVolume+' => 'Ce lien n:n indique qu\'un Serveur utilise un Volume logique (une unité de stockage gérée à l’intérieur d’un Système de stockage). Plusieurs Serveurs peuvent utiliser le même Volume logique.', 'Class:lnkServerToVolume/Name' => '%1$s / %2$s', 'Class:lnkServerToVolume/Attribute:volume_id' => 'Volume logique', 'Class:lnkServerToVolume/Attribute:volume_id+' => '', @@ -882,8 +891,8 @@ Dict::Add('FR FR', 'French', 'Français', [ // Dict::Add('FR FR', 'French', 'Français', [ - 'Class:lnkVirtualDeviceToVolume' => 'Lien Device virtuel / Volume', - 'Class:lnkVirtualDeviceToVolume+' => '', + 'Class:lnkVirtualDeviceToVolume' => 'Lien Équipement virtuel / Volume logique', + 'Class:lnkVirtualDeviceToVolume+' => 'Ce lien n:n indique qu\'un Équipement virtuel utilise un Volume logique (une unité de stockage gérée à l’intérieur d’un Système de stockage). Plusieurs Équipements virtuels peuvent utiliser le même Volume logique.', 'Class:lnkVirtualDeviceToVolume/Name' => '%1$s / %2$s', 'Class:lnkVirtualDeviceToVolume/Attribute:volume_id' => 'Volume logique', 'Class:lnkVirtualDeviceToVolume/Attribute:volume_id+' => '', @@ -902,8 +911,8 @@ Dict::Add('FR FR', 'French', 'Français', [ // Dict::Add('FR FR', 'French', 'Français', [ - 'Class:lnkSanToDatacenterDevice' => 'Lien San / Device', - 'Class:lnkSanToDatacenterDevice+' => '', + 'Class:lnkSanToDatacenterDevice' => 'Lien Switch SAN / Matériel de datacenter', + 'Class:lnkSanToDatacenterDevice+' => 'Ce lien n:n modélise la connection réseau entre un Switch SAN et un Matériel de datacenter (un Serveur, un Équipement réseau, etc..).', 'Class:lnkSanToDatacenterDevice/Name' => '%1$s / %2$s', 'Class:lnkSanToDatacenterDevice/Attribute:san_id' => 'Switch SAN', 'Class:lnkSanToDatacenterDevice/Attribute:san_id+' => '', @@ -925,7 +934,7 @@ Dict::Add('FR FR', 'French', 'Français', [ Dict::Add('FR FR', 'French', 'Français', [ 'Class:Tape' => 'Bande', - 'Class:Tape+' => '', + 'Class:Tape+' => 'Une Bande (ou cartouche) dans '.ITOP_APPLICATION_SHORT.' est un élément de stockage amovible au sein d\'une Bandothèque.', 'Class:Tape/Attribute:name' => 'Nom', 'Class:Tape/Attribute:name+' => '', 'Class:Tape/Attribute:description' => 'Description', @@ -944,7 +953,7 @@ Dict::Add('FR FR', 'French', 'Français', [ Dict::Add('FR FR', 'French', 'Français', [ 'Class:NASFileSystem' => 'Système de fichier NAS', - 'Class:NASFileSystem+' => '', + 'Class:NASFileSystem+' => 'Représente un système de fichiers partagé hébergé dans un NAS donné (Network Attached Storage).', 'Class:NASFileSystem/Attribute:name' => 'Nom', 'Class:NASFileSystem/Attribute:name+' => '', 'Class:NASFileSystem/Attribute:description' => 'Description', @@ -965,7 +974,7 @@ Dict::Add('FR FR', 'French', 'Français', [ Dict::Add('FR FR', 'French', 'Français', [ 'Class:Software' => 'Logiciel', - 'Class:Software+' => '', + 'Class:Software+' => 'Un logiciel est un élément générique du catalogue logiciel. Il possède une version particulière. Dans '.ITOP_APPLICATION_SHORT.', un logiciel appartient à une catégorie : Serveur de BDD, Middleware, Logiciel PC, Serveur web ou autre.', 'Class:Software/ComplementaryName' => '%1$s - %2$s', 'Class:Software/Attribute:name' => 'Nom', 'Class:Software/Attribute:name+' => '', @@ -975,6 +984,8 @@ Dict::Add('FR FR', 'French', 'Français', [ 'Class:Software/Attribute:version+' => '', 'Class:Software/Attribute:documents_list' => 'Documents', 'Class:Software/Attribute:documents_list+' => 'Tous les documents liés à ce logiciel', + 'Class:Software/Attribute:logo' => 'Logo', + 'Class:Software/Attribute:logo+' => 'Utilisé comme icône des Instances qui utilisent ce Logiciel, lors de leur affichage dans les graphes d\'analyse d\'impact', 'Class:Software/Attribute:type' => 'Type', 'Class:Software/Attribute:type+' => '', 'Class:Software/Attribute:type/Value:DBServer' => 'Serveur de base de données', @@ -1019,7 +1030,7 @@ Dict::Add('FR FR', 'French', 'Français', [ Dict::Add('FR FR', 'French', 'Français', [ 'Class:Patch' => 'Patch', - 'Class:Patch+' => '', + 'Class:Patch+' => 'Classe abstraite pour les patchs, hotfixes, correctifs de sécurité ou service packs pour un OS ou un logiciel.', 'Class:Patch/Attribute:name' => 'Nom', 'Class:Patch/Attribute:name+' => '', 'Class:Patch/Attribute:documents_list' => 'Documents', @@ -1036,7 +1047,7 @@ Dict::Add('FR FR', 'French', 'Français', [ Dict::Add('FR FR', 'French', 'Français', [ 'Class:OSPatch' => 'Patch OS', - 'Class:OSPatch+' => '', + 'Class:OSPatch+' => 'Patch, hotfix, correctif de sécurité ou pack de services pour un système d\'exploitation donné.', 'Class:OSPatch/Attribute:functionalcis_list' => 'Systèmes', 'Class:OSPatch/Attribute:functionalcis_list+' => 'Tous les systèmes où ce patch est installé', 'Class:OSPatch/Attribute:osversion_id' => 'Version OS', @@ -1050,8 +1061,8 @@ Dict::Add('FR FR', 'French', 'Français', [ // Dict::Add('FR FR', 'French', 'Français', [ - 'Class:SoftwarePatch' => 'Patch Logiciel', - 'Class:SoftwarePatch+' => '', + 'Class:SoftwarePatch' => 'Patch logiciel', + 'Class:SoftwarePatch+' => 'Patch, hotfix, correctif de sécurité ou pack de services pour un logiciel donné.', 'Class:SoftwarePatch/Attribute:software_id' => 'Logiciel', 'Class:SoftwarePatch/Attribute:software_id+' => '', 'Class:SoftwarePatch/Attribute:software_name' => 'Nom logiciel', @@ -1069,8 +1080,8 @@ Dict::Add('FR FR', 'French', 'Français', [ // Dict::Add('FR FR', 'French', 'Français', [ - 'Class:Licence' => 'License', - 'Class:Licence+' => '', + 'Class:Licence' => 'Licence', + 'Class:Licence+' => 'Classe abstraite. Contrat de licence pour une version d\'OS ou un logiciel particulier.', 'Class:Licence/Attribute:name' => 'Nom', 'Class:Licence/Attribute:name+' => '', 'Class:Licence/Attribute:documents_list' => 'Documents', @@ -1101,7 +1112,7 @@ Dict::Add('FR FR', 'French', 'Français', [ 'Class:Licence/Attribute:perpetual/Value:no+' => 'non', 'Class:Licence/Attribute:perpetual/Value:yes' => 'oui', 'Class:Licence/Attribute:perpetual/Value:yes+' => 'oui', - 'Class:Licence/Attribute:finalclass' => 'Sous-classe de License', + 'Class:Licence/Attribute:finalclass' => 'Sous-classe de Licence', 'Class:Licence/Attribute:finalclass+' => 'Nom de la classe instanciable', ]); @@ -1111,7 +1122,7 @@ Dict::Add('FR FR', 'French', 'Français', [ Dict::Add('FR FR', 'French', 'Français', [ 'Class:OSLicence' => 'Licence OS', - 'Class:OSLicence+' => '', + 'Class:OSLicence+' => 'Contrat de licence pour un système d’exploitation particulier. Le contrat peut couvrir le système d\'exploitation de plusieurs serveurs et machines virtuelles.', 'Class:OSLicence/ComplementaryName' => '%1$s - %2$s', 'Class:OSLicence/Attribute:osversion_id' => 'Version OS', 'Class:OSLicence/Attribute:osversion_id+' => '', @@ -1140,8 +1151,8 @@ Dict::Add('FR FR', 'French', 'Français', [ // Dict::Add('FR FR', 'French', 'Français', [ - 'Class:SoftwareLicence' => 'Licence Logiciel', - 'Class:SoftwareLicence+' => '', + 'Class:SoftwareLicence' => 'Licence logiciel', + 'Class:SoftwareLicence+' => 'Contrat de licence pour un logiciel particulier. La licence est liée à un logiciel (par exemple MS Office 2010) et peut être associée à plusieurs instances de ce logiciel.', 'Class:SoftwareLicence/ComplementaryName' => '%1$s - %2$s', 'Class:SoftwareLicence/Attribute:software_id' => 'Logiciel', 'Class:SoftwareLicence/Attribute:software_id+' => '', @@ -1163,7 +1174,7 @@ Dict::Add('FR FR', 'French', 'Français', [ Dict::Add('FR FR', 'French', 'Français', [ 'Class:lnkDocumentToLicence' => 'Lien Document / Licence', - 'Class:lnkDocumentToLicence+' => '', + 'Class:lnkDocumentToLicence+' => 'Lien utilisé lorsqu\'un Document est applicable à une Licence.', 'Class:lnkDocumentToLicence/Name' => '%1$s / %2$s', 'Class:lnkDocumentToLicence/Attribute:licence_id' => 'Licence', 'Class:lnkDocumentToLicence/Attribute:licence_id+' => '', @@ -1180,12 +1191,14 @@ Dict::Add('FR FR', 'French', 'Français', [ // Dict::Add('FR FR', 'French', 'Français', [ - 'Class:OSVersion' => 'Version OS', - 'Class:OSVersion+' => '', + 'Class:OSVersion' => 'Version d\'OS', + 'Class:OSVersion+' => 'Typologie. Liste des valeurs possibles pour la « Version d\'OS » d\'un ordinateur (serveur, machine virtuelle ou PC). Les versions d\'OS sont organisées par famille d\'OS.', 'Class:OSVersion/Attribute:osfamily_id' => 'Famille OS', 'Class:OSVersion/Attribute:osfamily_id+' => '', 'Class:OSVersion/Attribute:osfamily_name' => 'Nom Famille OS', 'Class:OSVersion/Attribute:osfamily_name+' => '', + 'Class:OSVersion/UniquenessRule:name_osfamily+' => 'Le nom doit être unique au sein de cette famille d\'OS', + 'Class:OSVersion/UniquenessRule:name_osfamily' => 'cette version d\'OS existe déjà dans cette famille', 'Class:OSVersion/Attribute:ospatches_list' => 'Patchs OS', 'Class:OSVersion/Attribute:ospatches_list+' => 'Tous les patchs de cette version OS', ]); @@ -1195,10 +1208,12 @@ Dict::Add('FR FR', 'French', 'Français', [ // Dict::Add('FR FR', 'French', 'Français', [ - 'Class:OSFamily' => 'Famille OS', - 'Class:OSFamily+' => '', + 'Class:OSFamily' => 'Famille d\'OS', + 'Class:OSFamily+' => 'Typologie. Liste des valeurs possibles pour l\'attribut "Famille d\'OS" des serveurs, machines virtuelles et PC.', 'Class:OSFamily/Attribute:osversions_list' => 'Versions OS', 'Class:OSFamily/Attribute:osversions_list+' => 'Toutes les versions OS pour cette famille', + 'Class:OSFamily/UniquenessRule:name+' => 'Le nom doit être unique', + 'Class:OSFamily/UniquenessRule:name' => 'cette famille d\'OS existe déjà', ]); // @@ -1207,7 +1222,7 @@ Dict::Add('FR FR', 'French', 'Français', [ Dict::Add('FR FR', 'French', 'Français', [ 'Class:Brand' => 'Marque', - 'Class:Brand+' => '', + 'Class:Brand+' => 'Typologie. Liste des valeurs possibles pour l\'attribut « Marque » d\'un matériel physique.', 'Class:Brand/Attribute:iosversions_list' => 'Versions IOS', 'Class:Brand/Attribute:iosversions_list+' => 'Toutes les versions IOS pour cette marque', 'Class:Brand/Attribute:logo' => 'Logo', @@ -1232,7 +1247,7 @@ Dict::Add('FR FR', 'French', 'Français', [ Dict::Add('FR FR', 'French', 'Français', [ 'Class:Model' => 'Modèle de matériel', - 'Class:Model+' => '', + 'Class:Model+' => 'Typologie. Liste des valeurs possibles pour le modèle d\'un matériel physique. Chaque Modèle appartient à une seule Marque et s\'applique généralement à un seul type de Matériel physique.', 'Class:Model/ComplementaryName' => '%1$s - %2$s', 'Class:Model/Attribute:brand_id' => 'Marque', 'Class:Model/Attribute:brand_id+' => '', @@ -1296,7 +1311,9 @@ Dict::Add('FR FR', 'French', 'Français', [ Dict::Add('FR FR', 'French', 'Français', [ 'Class:NetworkDeviceType' => 'Type d\'équipement réseau', - 'Class:NetworkDeviceType+' => '', + 'Class:NetworkDeviceType+' => 'Typologie. Valeurs possibles pour le type d’un équipement réseau (ex : Routeur, Switch, Firewall, etc.).', + 'Class:NetworkDeviceType/Attribute:logo' => 'Logo', + 'Class:NetworkDeviceType/Attribute:logo+' => 'Utilisé comme icône pour les équipement réseau de ce Type lors de leur affichage (détails, aperçu et graphe d\'analyse d\'impact)', 'Class:NetworkDeviceType/Attribute:networkdevicesdevices_list' => 'Equipements réseaux', 'Class:NetworkDeviceType/Attribute:networkdevicesdevices_list+' => 'Tous les équipements réseaux correspondant à ce type', 'Class:NetworkDeviceType/Attribute:networkdevicesdevices_list/UI:Links:Create:Button+' => 'Créer un %4$s', @@ -1312,12 +1329,14 @@ Dict::Add('FR FR', 'French', 'Français', [ // Dict::Add('FR FR', 'French', 'Français', [ - 'Class:IOSVersion' => 'Version IOS', - 'Class:IOSVersion+' => '', + 'Class:IOSVersion' => 'Version d\'IOS', + 'Class:IOSVersion+' => 'Typologie. Valeurs possibles des versions de systèmes d’exploitation pour équipements réseau.', 'Class:IOSVersion/Attribute:brand_id' => 'Marque', 'Class:IOSVersion/Attribute:brand_id+' => '', 'Class:IOSVersion/Attribute:brand_name' => 'Nom Marque', 'Class:IOSVersion/Attribute:brand_name+' => '', + 'Class:IOSVersion/UniquenessRule:name_brand+' => 'Le nom doit être unique pour cette marque', + 'Class:IOSVersion/UniquenessRule:name_brand' => 'cette version d\'IOS existe déja sur cette marque', 'Class:IOSVersion/Attribute:networkdevices_list' => 'Equipements réseaux', 'Class:IOSVersion/Attribute:networkdevices_list+' => 'Tous les équipements réseaux utilisant cette version IOS', ]); @@ -1328,7 +1347,7 @@ Dict::Add('FR FR', 'French', 'Français', [ Dict::Add('FR FR', 'French', 'Français', [ 'Class:lnkDocumentToPatch' => 'Lien Document / Patch', - 'Class:lnkDocumentToPatch+' => '', + 'Class:lnkDocumentToPatch+' => 'Lien utilisé lorsqu\'un Document est applicable à un Patch', 'Class:lnkDocumentToPatch/Name' => '%1$s / %2$s', 'Class:lnkDocumentToPatch/Attribute:patch_id' => 'Patch', 'Class:lnkDocumentToPatch/Attribute:patch_id+' => '', @@ -1346,7 +1365,7 @@ Dict::Add('FR FR', 'French', 'Français', [ Dict::Add('FR FR', 'French', 'Français', [ 'Class:lnkSoftwareInstanceToSoftwarePatch' => 'Lien Instance logiciel / Patch logiciel', - 'Class:lnkSoftwareInstanceToSoftwarePatch+' => '', + 'Class:lnkSoftwareInstanceToSoftwarePatch+' => 'Ce lien indique qu\'un Patch logiciel a été appliqué sur une Instance logiciel', 'Class:lnkSoftwareInstanceToSoftwarePatch/Name' => '%1$s / %2$s', 'Class:lnkSoftwareInstanceToSoftwarePatch/Attribute:softwarepatch_id' => 'Patch logiciel', 'Class:lnkSoftwareInstanceToSoftwarePatch/Attribute:softwarepatch_id+' => '', @@ -1363,8 +1382,8 @@ Dict::Add('FR FR', 'French', 'Français', [ // Dict::Add('FR FR', 'French', 'Français', [ - 'Class:lnkFunctionalCIToOSPatch' => 'Lien CI Fonctionnel / Patch OS', - 'Class:lnkFunctionalCIToOSPatch+' => '', + 'Class:lnkFunctionalCIToOSPatch' => 'Lien CI fonctionnel / Patch OS', + 'Class:lnkFunctionalCIToOSPatch+' => 'Modélise le déploiement d\'un Patch d\'OS sur un équipment', 'Class:lnkFunctionalCIToOSPatch/Name' => '%1$s / %2$s', 'Class:lnkFunctionalCIToOSPatch/Attribute:ospatch_id' => 'Patch OS', 'Class:lnkFunctionalCIToOSPatch/Attribute:ospatch_id+' => '', @@ -1382,7 +1401,7 @@ Dict::Add('FR FR', 'French', 'Français', [ Dict::Add('FR FR', 'French', 'Français', [ 'Class:lnkDocumentToSoftware' => 'Lien Document / Logiciel', - 'Class:lnkDocumentToSoftware+' => '', + 'Class:lnkDocumentToSoftware+' => 'Lien utilisé lorsqu\'un Document est applicable à un Logiciel.', 'Class:lnkDocumentToSoftware/Name' => '%1$s / %2$s', 'Class:lnkDocumentToSoftware/Attribute:software_id' => 'Logiciel', 'Class:lnkDocumentToSoftware/Attribute:software_id+' => '', @@ -1400,7 +1419,7 @@ Dict::Add('FR FR', 'French', 'Français', [ Dict::Add('FR FR', 'French', 'Français', [ 'Class:Subnet' => 'Subnet', - 'Class:Subnet+' => '', + 'Class:Subnet+' => 'Segment d\'un réseau IP, défini par une adresse IP et un masque.', 'Class:Subnet/Name' => '%1$s/%2$s', 'Class:Subnet/ComplementaryName' => '%1$s - %2$s', 'Class:Subnet/Attribute:description' => 'Description', @@ -1425,7 +1444,7 @@ Dict::Add('FR FR', 'French', 'Français', [ Dict::Add('FR FR', 'French', 'Français', [ 'Class:VLAN' => 'VLAN', - 'Class:VLAN+' => '', + 'Class:VLAN+' => 'Un VLAN est utilisé pour regrouper de manière logique des réseaux, sous-réseaux et interfaces physiques participant au même VLAN.', 'Class:VLAN/Attribute:vlan_tag' => 'VLAN Tag', 'Class:VLAN/Attribute:vlan_tag+' => '', 'Class:VLAN/Attribute:description' => 'Description', @@ -1450,7 +1469,7 @@ Dict::Add('FR FR', 'French', 'Français', [ Dict::Add('FR FR', 'French', 'Français', [ 'Class:lnkSubnetToVLAN' => 'Lien Subnet / VLAN', - 'Class:lnkSubnetToVLAN+' => '', + 'Class:lnkSubnetToVLAN+' => 'Ce lien n:n indique qu\'un VLAN est présent sur un Subnet. Plusieurs VLAN peuvent être présents sur le même Subnet et un VLAN peut s\'étendre sur plusieurs Subnets.', 'Class:lnkSubnetToVLAN/Name' => '%1$s / %2$s', 'Class:lnkSubnetToVLAN/Attribute:subnet_id' => 'Subnet', 'Class:lnkSubnetToVLAN/Attribute:subnet_id+' => '', @@ -1469,8 +1488,8 @@ Dict::Add('FR FR', 'French', 'Français', [ // Dict::Add('FR FR', 'French', 'Français', [ - 'Class:NetworkInterface' => 'Interface Réseau', - 'Class:NetworkInterface+' => '', + 'Class:NetworkInterface' => 'Interface réseau', + 'Class:NetworkInterface+' => 'Classe abstraite pour tous les types d\'interfaces réseau.', 'Class:NetworkInterface/Attribute:name' => 'Nom', 'Class:NetworkInterface/Attribute:name+' => '', 'Class:NetworkInterface/Attribute:finalclass' => 'Sous-classe d\'Interface Réseau', @@ -1483,7 +1502,7 @@ Dict::Add('FR FR', 'French', 'Français', [ Dict::Add('FR FR', 'French', 'Français', [ 'Class:IPInterface' => 'Interface IP', - 'Class:IPInterface+' => '', + 'Class:IPInterface+' => 'Classe abstraite. Type d’interface réseau avec une adresse IP.', 'Class:IPInterface/Attribute:ipaddress' => 'Adresse IP', 'Class:IPInterface/Attribute:ipaddress+' => '', 'Class:IPInterface/Attribute:macaddress' => 'Adresse MAC', @@ -1504,12 +1523,16 @@ Dict::Add('FR FR', 'French', 'Français', [ Dict::Add('FR FR', 'French', 'Français', [ 'Class:PhysicalInterface' => 'Interface physique', - 'Class:PhysicalInterface+' => '', + 'Class:PhysicalInterface+' => 'Type d’interface IP représentant une interface réseau physique (ex : carte Ethernet).', 'Class:PhysicalInterface/Name' => '%2$s %1$s', 'Class:PhysicalInterface/Attribute:connectableci_id' => 'Matériel', 'Class:PhysicalInterface/Attribute:connectableci_id+' => '', 'Class:PhysicalInterface/Attribute:connectableci_name' => 'Nom matériel', 'Class:PhysicalInterface/Attribute:connectableci_name+' => '', + 'Class:PhysicalInterface/Attribute:org_id' => 'Organisation', + 'Class:PhysicalInterface/Attribute:org_id+' => '', + 'Class:PhysicalInterface/Attribute:location_id' => 'Site', + 'Class:PhysicalInterface/Attribute:location_id+' => '', 'Class:PhysicalInterface/Attribute:vlans_list' => 'VLANs', 'Class:PhysicalInterface/Attribute:vlans_list+' => '', ]); @@ -1519,8 +1542,8 @@ Dict::Add('FR FR', 'French', 'Français', [ // Dict::Add('FR FR', 'French', 'Français', [ - 'Class:lnkPhysicalInterfaceToVLAN' => 'Lien Interface réseau / VLAN', - 'Class:lnkPhysicalInterfaceToVLAN+' => '', + 'Class:lnkPhysicalInterfaceToVLAN' => 'Lien Interface physique / VLAN', + 'Class:lnkPhysicalInterfaceToVLAN+' => 'Ce lien indique lorsqu\'une Interface réseau fait partie d\'un VLAN (Virtual Local Area Network).', 'Class:lnkPhysicalInterfaceToVLAN/Name' => '%1$s %2$s / %3$s', 'Class:lnkPhysicalInterfaceToVLAN/Attribute:physicalinterface_id' => 'Interface réseau', 'Class:lnkPhysicalInterfaceToVLAN/Attribute:physicalinterface_id+' => '', @@ -1542,7 +1565,7 @@ Dict::Add('FR FR', 'French', 'Français', [ Dict::Add('FR FR', 'French', 'Français', [ 'Class:LogicalInterface' => 'Interface logique', - 'Class:LogicalInterface+' => '', + 'Class:LogicalInterface+' => 'Interface IP qui n\'est pas associée de façon permanente à un port physique, l\'association est dynamique. Elle peut être utilisée pour une machine virtuelle.', 'Class:LogicalInterface/Attribute:virtualmachine_id' => 'Machine virtuelle', 'Class:LogicalInterface/Attribute:virtualmachine_id+' => '', 'Class:LogicalInterface/Attribute:virtualmachine_name' => 'Nom Machine virtuelle', @@ -1554,8 +1577,8 @@ Dict::Add('FR FR', 'French', 'Français', [ // Dict::Add('FR FR', 'French', 'Français', [ - 'Class:FiberChannelInterface' => 'Interface Fibre', - 'Class:FiberChannelInterface+' => '', + 'Class:FiberChannelInterface' => 'Interface fibre', + 'Class:FiberChannelInterface+' => 'Interface réseau vers une technologie haut débit principalement utilisée pour connecter des systèmes de stockage.', 'Class:FiberChannelInterface/Attribute:speed' => 'Vitesse', 'Class:FiberChannelInterface/Attribute:speed+' => '', 'Class:FiberChannelInterface/Attribute:topology' => 'Topologie', @@ -1573,8 +1596,8 @@ Dict::Add('FR FR', 'French', 'Français', [ // Dict::Add('FR FR', 'French', 'Français', [ - 'Class:lnkConnectableCIToNetworkDevice' => 'Lien Device / Equipement réseau', - 'Class:lnkConnectableCIToNetworkDevice+' => '', + 'Class:lnkConnectableCIToNetworkDevice' => 'Lien Device / Équipement réseau', + 'Class:lnkConnectableCIToNetworkDevice+' => 'Définit sur quel équipment réseau un matériel est connecté. ', 'Class:lnkConnectableCIToNetworkDevice/Name' => '%1$s / %2$s', 'Class:lnkConnectableCIToNetworkDevice/Attribute:networkdevice_id' => 'Equipement réseau', 'Class:lnkConnectableCIToNetworkDevice/Attribute:networkdevice_id+' => '', @@ -1601,8 +1624,8 @@ Dict::Add('FR FR', 'French', 'Français', [ // Dict::Add('FR FR', 'French', 'Français', [ - 'Class:lnkApplicationSolutionToFunctionalCI' => 'Lien Solution Applicative / CI Fonctionnel', - 'Class:lnkApplicationSolutionToFunctionalCI+' => '', + 'Class:lnkApplicationSolutionToFunctionalCI' => 'Lien Solution applicative / CI fonctionnel', + 'Class:lnkApplicationSolutionToFunctionalCI+' => 'Modélise l\'appartenance d\'un équipment à une Solution Applicative. La signification de cette relation varie suivant les types de Solution applicative.', 'Class:lnkApplicationSolutionToFunctionalCI/Name' => '%1$s / %2$s', 'Class:lnkApplicationSolutionToFunctionalCI/Attribute:applicationsolution_id' => 'Solution applicative', 'Class:lnkApplicationSolutionToFunctionalCI/Attribute:applicationsolution_id+' => '', @@ -1619,8 +1642,8 @@ Dict::Add('FR FR', 'French', 'Français', [ // Dict::Add('FR FR', 'French', 'Français', [ - 'Class:lnkApplicationSolutionToBusinessProcess' => 'Lien Solution Applicative / Processus métier', - 'Class:lnkApplicationSolutionToBusinessProcess+' => '', + 'Class:lnkApplicationSolutionToBusinessProcess' => 'Lien Solution applicative / Processus métier', + 'Class:lnkApplicationSolutionToBusinessProcess+' => 'Modélise la relation entre une Solution applicative et un Processus Métier.', 'Class:lnkApplicationSolutionToBusinessProcess/Name' => '%1$s / %2$s', 'Class:lnkApplicationSolutionToBusinessProcess/Attribute:businessprocess_id' => 'Processus métier', 'Class:lnkApplicationSolutionToBusinessProcess/Attribute:businessprocess_id+' => '', @@ -1638,7 +1661,7 @@ Dict::Add('FR FR', 'French', 'Français', [ Dict::Add('FR FR', 'French', 'Français', [ 'Class:Group' => 'Groupe', - 'Class:Group+' => '', + 'Class:Group+' => 'Le groupe est conçu pour définir des ensembles explicites d\'éléments de configuration pour tout projet. Contrairement à une solution applicative, un groupe n\'est impacté par aucun de ses composants et ne les impacte pas. Par exemple, lors d\'une migration d\'OS, un groupe peut être pratique pour rassembler les « serveurs à migrer ». Les serveurs migrés sont retirés du groupe au fur et à mesure de la migration.', 'Class:Group/ComplementaryName' => '%1$s - %2$s', 'Class:Group/Attribute:name' => 'Nom', 'Class:Group/Attribute:name+' => '', @@ -1668,24 +1691,13 @@ Dict::Add('FR FR', 'French', 'Français', [ 'Class:Group/Attribute:parent_id_friendlyname+' => '', ]); -// -// Class: PhysicalInterface -// - -Dict::Add('FR FR', 'French', 'Français', [ - 'Class:PhysicalInterface/Attribute:org_id' => 'Organisation', - 'Class:PhysicalInterface/Attribute:org_id+' => '', - 'Class:PhysicalInterface/Attribute:location_id' => 'Site', - 'Class:PhysicalInterface/Attribute:location_id+' => '', -]); - // // Class: lnkGroupToCI // Dict::Add('FR FR', 'French', 'Français', [ - 'Class:lnkGroupToCI' => 'Lien Groupe / CI', - 'Class:lnkGroupToCI+' => '', + 'Class:lnkGroupToCI' => 'Lien Groupe / CI fonctionnel', + 'Class:lnkGroupToCI+' => 'Ce lien indique lorsqu\'un équipment (CI fonctionnel) fait partie d\'un Groupe.', 'Class:lnkGroupToCI/Name' => '%1$s / %2$s', 'Class:lnkGroupToCI/Attribute:group_id' => 'Groupe', 'Class:lnkGroupToCI/Attribute:group_id+' => '', @@ -1704,8 +1716,8 @@ Dict::Add('FR FR', 'French', 'Français', [ // Dict::Add('FR FR', 'French', 'Français', [ - 'Class:lnkDocumentToFunctionalCI' => 'Lien Document / CI Fonctionnel', - 'Class:lnkDocumentToFunctionalCI+' => '', + 'Class:lnkDocumentToFunctionalCI' => 'Lien Document / CI fonctionnel', + 'Class:lnkDocumentToFunctionalCI+' => 'Lien utilisé lorsqu\'un Document est applicable à un CI fonctionnel.', 'Class:lnkDocumentToFunctionalCI/Name' => '%1$s / %2$s', 'Class:lnkDocumentToFunctionalCI/Attribute:functionalci_id' => 'CI', 'Class:lnkDocumentToFunctionalCI/Attribute:functionalci_id+' => '', @@ -1727,7 +1739,8 @@ Dict::Add('FR FR', 'French', 'Français', [ 'Storage:moreinfo' => 'Stockage spécifique', 'Software:moreinfo' => 'Logiciel spécifique', 'Phone:moreinfo' => 'Téléphone spécifique', - 'ConfigMgmt:otherinfo' => 'Dates et description', + 'ConfigMgmt:otherinfo' => 'Description', + 'ConfigMgmt:dates' => 'Dates', 'Server:Date' => 'Dates', 'Server:otherinfo' => 'Description', 'Server:power' => 'Alimentation électrique', diff --git a/datamodels/2.x/itop-config-mgmt/dictionaries/hu.dict.itop-config-mgmt.php b/datamodels/2.x/itop-config-mgmt/dictionaries/hu.dict.itop-config-mgmt.php index 181e114d7..4671b23f0 100644 --- a/datamodels/2.x/itop-config-mgmt/dictionaries/hu.dict.itop-config-mgmt.php +++ b/datamodels/2.x/itop-config-mgmt/dictionaries/hu.dict.itop-config-mgmt.php @@ -492,6 +492,8 @@ Dict::Add('HU HU', 'Hungarian', 'Magyar', [ 'Class:ApplicationSolution/Attribute:functionalcis_list+' => 'Konfigurációs elemek, melyek ezt az alkalmazásmegoldást alkotják', 'Class:ApplicationSolution/Attribute:businessprocess_list' => 'Üzleti folyamatok', 'Class:ApplicationSolution/Attribute:businessprocess_list+' => 'Üzleti folyamatok, melyek ettől az alkalmazásmegoldástól függenek', + 'Class:ApplicationSolution/Attribute:logo' => 'Logo~~', + 'Class:ApplicationSolution/Attribute:logo+' => 'Used as object icon when displayed within impact analysis graphs~~', 'Class:ApplicationSolution/Attribute:status' => 'Állapot', 'Class:ApplicationSolution/Attribute:status+' => '', 'Class:ApplicationSolution/Attribute:status/Value:active' => 'Aktív', @@ -513,6 +515,8 @@ Dict::Add('HU HU', 'Hungarian', 'Magyar', [ 'Class:BusinessProcess+' => 'Személyek, szolgáltatások és CI-k értékteremtő kombinációja', 'Class:BusinessProcess/Attribute:applicationsolutions_list' => 'Alkalmazásmegoldások', 'Class:BusinessProcess/Attribute:applicationsolutions_list+' => 'Alkalmazásmegoldások melyek hatással vannak erre az üzleti folyamatra', + 'Class:BusinessProcess/Attribute:logo' => 'Logo~~', + 'Class:BusinessProcess/Attribute:logo+' => 'Used as object icon when displayed within impact analysis graphs~~', 'Class:BusinessProcess/Attribute:status' => 'Állapot', 'Class:BusinessProcess/Attribute:status+' => '', 'Class:BusinessProcess/Attribute:status/Value:active' => 'Aktív', @@ -609,6 +613,8 @@ Dict::Add('HU HU', 'Hungarian', 'Magyar', [ 'Class:MiddlewareInstance' => 'Middleware Példány', 'Class:MiddlewareInstance+' => '~~', 'Class:MiddlewareInstance/ComplementaryName' => '%1$s - %2$s~~', + 'Class:MiddlewareInstance/Attribute:logo' => 'Logo~~', + 'Class:MiddlewareInstance/Attribute:logo+' => 'Used as object icon when displayed within impact analysis graphs~~', 'Class:MiddlewareInstance/Attribute:middleware_id' => 'Middleware', 'Class:MiddlewareInstance/Attribute:middleware_id+' => '~~', 'Class:MiddlewareInstance/Attribute:middleware_name' => 'Middleware név', @@ -641,6 +647,8 @@ Dict::Add('HU HU', 'Hungarian', 'Magyar', [ 'Class:WebApplication/Attribute:webserver_id+' => '~~', 'Class:WebApplication/Attribute:webserver_name' => 'Webszerver név', 'Class:WebApplication/Attribute:webserver_name+' => '~~', + 'Class:WebApplication/Attribute:logo' => 'Logo~~', + 'Class:WebApplication/Attribute:logo+' => 'Used as object icon when displayed within impact analysis graphs~~', 'Class:WebApplication/Attribute:url' => 'URL~~', 'Class:WebApplication/Attribute:url+' => '~~', ]); @@ -838,7 +846,7 @@ Dict::Add('HU HU', 'Hungarian', 'Magyar', [ Dict::Add('HU HU', 'Hungarian', 'Magyar', [ 'Class:Tape' => 'Szalag', - 'Class:Tape+' => '~~', + 'Class:Tape+' => 'A Tape (or cartridge) within '.ITOP_APPLICATION_SHORT.' is a removable piece of storage part of a Tape Library~~', 'Class:Tape/Attribute:name' => 'Szalag név', 'Class:Tape/Attribute:name+' => '~~', 'Class:Tape/Attribute:description' => 'Leírás', @@ -888,6 +896,8 @@ Dict::Add('HU HU', 'Hungarian', 'Magyar', [ 'Class:Software/Attribute:version+' => '~~', 'Class:Software/Attribute:documents_list' => 'Dokumentumok', 'Class:Software/Attribute:documents_list+' => 'A szoftver dokumentumai', + 'Class:Software/Attribute:logo' => 'Logo~~', + 'Class:Software/Attribute:logo+' => 'Used as icon for all Software Instance objects using this Software, when displayed within impact analysis graphs~~', 'Class:Software/Attribute:type' => 'Típus', 'Class:Software/Attribute:type+' => '~~', 'Class:Software/Attribute:type/Value:DBServer' => 'DB Szerver', @@ -1052,7 +1062,9 @@ Dict::Add('HU HU', 'Hungarian', 'Magyar', [ 'Class:OSVersion/Attribute:osfamily_id' => 'OS család', 'Class:OSVersion/Attribute:osfamily_id+' => '~~', 'Class:OSVersion/Attribute:osfamily_name' => 'OS család név', - 'Class:OSVersion/Attribute:osfamily_name+' => '~~', + 'Class:OSVersion/Attribute:osfamily_name+' => '', + 'Class:OSVersion/UniquenessRule:name_osfamily+' => 'Name must be unique in the OS family~~', + 'Class:OSVersion/UniquenessRule:name_osfamily' => 'this OS version already exists within the OS family~~', ]); // @@ -1061,7 +1073,9 @@ Dict::Add('HU HU', 'Hungarian', 'Magyar', [ Dict::Add('HU HU', 'Hungarian', 'Magyar', [ 'Class:OSFamily' => 'OS család', - 'Class:OSFamily+' => '~~', + 'Class:OSFamily+' => '', + 'Class:OSFamily/UniquenessRule:name+' => 'Name must be unique~~', + 'Class:OSFamily/UniquenessRule:name' => 'this OS family already exists~~', ]); // @@ -1144,6 +1158,8 @@ Dict::Add('HU HU', 'Hungarian', 'Magyar', [ Dict::Add('HU HU', 'Hungarian', 'Magyar', [ 'Class:NetworkDeviceType' => 'Hálózati eszköz típus', 'Class:NetworkDeviceType+' => '~~', + 'Class:NetworkDeviceType/Attribute:logo' => 'Logo~~', + 'Class:NetworkDeviceType/Attribute:logo+' => 'Used as icon for all Network Device of this type, when displayed in console (details, summary card and impact analysis graphs)~~', 'Class:NetworkDeviceType/Attribute:networkdevicesdevices_list' => 'Hálózati eszközök', 'Class:NetworkDeviceType/Attribute:networkdevicesdevices_list+' => 'Ilyen típusú hálózati eszközök', ]); @@ -1159,6 +1175,8 @@ Dict::Add('HU HU', 'Hungarian', 'Magyar', [ 'Class:IOSVersion/Attribute:brand_id+' => '~~', 'Class:IOSVersion/Attribute:brand_name' => 'Gyártó név', 'Class:IOSVersion/Attribute:brand_name+' => '~~', + 'Class:IOSVersion/UniquenessRule:name_brand+' => 'Name must be unique in the brand~~', + 'Class:IOSVersion/UniquenessRule:name_brand' => 'this IOS version already exists for this brand~~', ]); // @@ -1529,7 +1547,8 @@ Dict::Add('HU HU', 'Hungarian', 'Magyar', [ 'ConfigMgmt:baseinfo' => 'General~~', 'ConfigMgmt:moreinfo' => 'CI specifics~~', 'Storage:moreinfo' => 'Storage specifics~~', - 'ConfigMgmt:otherinfo' => 'Dates and description~~', + 'ConfigMgmt:otherinfo' => 'Description~~', + 'ConfigMgmt:dates' => 'Dates~~', 'Software:moreinfo' => 'Software specifics~~', 'Phone:moreinfo' => 'Phone specifics~~', 'Server:baseinfo' => 'Általános információ', @@ -1620,8 +1639,8 @@ Dict::Add('HU HU', 'Hungarian', 'Magyar', [ // Dict::Add('HU HU', 'Hungarian', 'Magyar', [ - 'Class:PhysicalInterface/Attribute:org_id' => 'Org id~~', + 'Class:PhysicalInterface/Attribute:org_id' => 'Organization~~', 'Class:PhysicalInterface/Attribute:org_id+' => '~~', - 'Class:PhysicalInterface/Attribute:location_id' => 'Location id~~', + 'Class:PhysicalInterface/Attribute:location_id' => 'Location~~', 'Class:PhysicalInterface/Attribute:location_id+' => '~~', ]); diff --git a/datamodels/2.x/itop-config-mgmt/dictionaries/it.dict.itop-config-mgmt.php b/datamodels/2.x/itop-config-mgmt/dictionaries/it.dict.itop-config-mgmt.php index 5d25bc989..239057ae7 100644 --- a/datamodels/2.x/itop-config-mgmt/dictionaries/it.dict.itop-config-mgmt.php +++ b/datamodels/2.x/itop-config-mgmt/dictionaries/it.dict.itop-config-mgmt.php @@ -492,6 +492,8 @@ Dict::Add('IT IT', 'Italian', 'Italiano', [ 'Class:ApplicationSolution/Attribute:functionalcis_list+' => 'Tutti gli elementi di configurazione che compongono questa soluzione applicativa', 'Class:ApplicationSolution/Attribute:businessprocess_list' => 'Processi aziendali', 'Class:ApplicationSolution/Attribute:businessprocess_list+' => 'Tutti i processi aziendali dipendenti da questa soluzione applicativa', + 'Class:ApplicationSolution/Attribute:logo' => 'Logo~~', + 'Class:ApplicationSolution/Attribute:logo+' => 'Used as object icon when displayed within impact analysis graphs~~', 'Class:ApplicationSolution/Attribute:status' => 'Stato', 'Class:ApplicationSolution/Attribute:status+' => '~~', 'Class:ApplicationSolution/Attribute:status/Value:active' => 'attivo', @@ -513,6 +515,8 @@ Dict::Add('IT IT', 'Italian', 'Italiano', [ 'Class:BusinessProcess+' => '', 'Class:BusinessProcess/Attribute:applicationsolutions_list' => 'Soluzioni applicative', 'Class:BusinessProcess/Attribute:applicationsolutions_list+' => 'Tutte le soluzioni applicative che influenzano questo processo aziendale', + 'Class:BusinessProcess/Attribute:logo' => 'Logo~~', + 'Class:BusinessProcess/Attribute:logo+' => 'Used as object icon when displayed within impact analysis graphs~~', 'Class:BusinessProcess/Attribute:status' => 'Stato', 'Class:BusinessProcess/Attribute:status+' => '~~', 'Class:BusinessProcess/Attribute:status/Value:active' => 'attivo', @@ -577,7 +581,7 @@ Dict::Add('IT IT', 'Italian', 'Italiano', [ // Dict::Add('IT IT', 'Italian', 'Italiano', [ - 'Class:WebServer' => 'Web server', + 'Class:WebServer' => 'Web Server', 'Class:WebServer+' => '~~', 'Class:WebServer/Attribute:webapp_list' => 'Applicazioni web', 'Class:WebServer/Attribute:webapp_list+' => 'Tutte le applicazioni web disponibili su questo server web', @@ -609,6 +613,8 @@ Dict::Add('IT IT', 'Italian', 'Italiano', [ 'Class:MiddlewareInstance' => 'Istanza Middleware', 'Class:MiddlewareInstance+' => '~~', 'Class:MiddlewareInstance/ComplementaryName' => '%1$s - %2$s', + 'Class:MiddlewareInstance/Attribute:logo' => 'Logo~~', + 'Class:MiddlewareInstance/Attribute:logo+' => 'Used as object icon when displayed within impact analysis graphs~~', 'Class:MiddlewareInstance/Attribute:middleware_id' => 'Middleware', 'Class:MiddlewareInstance/Attribute:middleware_id+' => '~~', 'Class:MiddlewareInstance/Attribute:middleware_name' => 'Nome Middleware', @@ -641,6 +647,8 @@ Dict::Add('IT IT', 'Italian', 'Italiano', [ 'Class:WebApplication/Attribute:webserver_id+' => '~~', 'Class:WebApplication/Attribute:webserver_name' => 'Nome del web server', 'Class:WebApplication/Attribute:webserver_name+' => '~~', + 'Class:WebApplication/Attribute:logo' => 'Logo~~', + 'Class:WebApplication/Attribute:logo+' => 'Used as object icon when displayed within impact analysis graphs~~', 'Class:WebApplication/Attribute:url' => 'URL', 'Class:WebApplication/Attribute:url+' => '~~', ]); @@ -838,7 +846,7 @@ Dict::Add('IT IT', 'Italian', 'Italiano', [ Dict::Add('IT IT', 'Italian', 'Italiano', [ 'Class:Tape' => 'Nastro', - 'Class:Tape+' => '~~', + 'Class:Tape+' => 'A Tape (or cartridge) within '.ITOP_APPLICATION_SHORT.' is a removable piece of storage part of a Tape Library~~', 'Class:Tape/Attribute:name' => 'Nome', 'Class:Tape/Attribute:name+' => '~~', 'Class:Tape/Attribute:description' => 'Descrizione', @@ -888,6 +896,8 @@ Dict::Add('IT IT', 'Italian', 'Italiano', [ 'Class:Software/Attribute:version+' => '~~', 'Class:Software/Attribute:documents_list' => 'Documenti', 'Class:Software/Attribute:documents_list+' => 'Tutti i documenti collegati a questo software', + 'Class:Software/Attribute:logo' => 'Logo~~', + 'Class:Software/Attribute:logo+' => 'Used as icon for all Software Instance objects using this Software, when displayed within impact analysis graphs~~', 'Class:Software/Attribute:type' => 'Tipo', 'Class:Software/Attribute:type+' => '~~', 'Class:Software/Attribute:type/Value:DBServer' => 'DB Server', @@ -1052,7 +1062,9 @@ Dict::Add('IT IT', 'Italian', 'Italiano', [ 'Class:OSVersion/Attribute:osfamily_id' => 'Famiglia del Sistema Operativo', 'Class:OSVersion/Attribute:osfamily_id+' => '~~', 'Class:OSVersion/Attribute:osfamily_name' => 'Nome della Famiglia del Sistema Operativo', - 'Class:OSVersion/Attribute:osfamily_name+' => '~~', + 'Class:OSVersion/Attribute:osfamily_name+' => '', + 'Class:OSVersion/UniquenessRule:name_osfamily+' => 'Name must be unique in the OS family~~', + 'Class:OSVersion/UniquenessRule:name_osfamily' => 'this OS version already exists within the OS family~~', ]); // @@ -1061,7 +1073,9 @@ Dict::Add('IT IT', 'Italian', 'Italiano', [ Dict::Add('IT IT', 'Italian', 'Italiano', [ 'Class:OSFamily' => 'Famiglia del Sistema Operativo', - 'Class:OSFamily+' => '~~', + 'Class:OSFamily+' => '', + 'Class:OSFamily/UniquenessRule:name+' => 'Name must be unique~~', + 'Class:OSFamily/UniquenessRule:name' => 'this OS family already exists~~', ]); // @@ -1165,6 +1179,8 @@ Dict::Add('IT IT', 'Italian', 'Italiano', [ Dict::Add('IT IT', 'Italian', 'Italiano', [ 'Class:NetworkDeviceType' => 'Tipo di Dispositivo di Rete', 'Class:NetworkDeviceType+' => '~~', + 'Class:NetworkDeviceType/Attribute:logo' => 'Logo~~', + 'Class:NetworkDeviceType/Attribute:logo+' => 'Used as icon for all Network Device of this type, when displayed in console (details, summary card and impact analysis graphs)~~', 'Class:NetworkDeviceType/Attribute:networkdevicesdevices_list' => 'Dispositivi di Rete', 'Class:NetworkDeviceType/Attribute:networkdevicesdevices_list+' => 'Tutti i dispositivi di rete corrispondenti a questo tipo', ]); @@ -1180,6 +1196,8 @@ Dict::Add('IT IT', 'Italian', 'Italiano', [ 'Class:IOSVersion/Attribute:brand_id+' => '~~', 'Class:IOSVersion/Attribute:brand_name' => 'Nome della marca', 'Class:IOSVersion/Attribute:brand_name+' => '~~', + 'Class:IOSVersion/UniquenessRule:name_brand+' => 'Name must be unique in the brand~~', + 'Class:IOSVersion/UniquenessRule:name_brand' => 'this IOS version already exists for this brand~~', ]); // @@ -1550,7 +1568,8 @@ Dict::Add('IT IT', 'Italian', 'Italiano', [ 'ConfigMgmt:baseinfo' => 'General~~', 'ConfigMgmt:moreinfo' => 'CI specifics~~', 'Storage:moreinfo' => 'Storage specifics~~', - 'ConfigMgmt:otherinfo' => 'Dates and description~~', + 'ConfigMgmt:otherinfo' => 'Description~~', + 'ConfigMgmt:dates' => 'Dates~~', 'Software:moreinfo' => 'Software specifics~~', 'Phone:moreinfo' => 'Phone specifics~~', 'Server:baseinfo' => 'Informazioni generali', diff --git a/datamodels/2.x/itop-config-mgmt/dictionaries/ja.dict.itop-config-mgmt.php b/datamodels/2.x/itop-config-mgmt/dictionaries/ja.dict.itop-config-mgmt.php index 407310cda..4178fec44 100644 --- a/datamodels/2.x/itop-config-mgmt/dictionaries/ja.dict.itop-config-mgmt.php +++ b/datamodels/2.x/itop-config-mgmt/dictionaries/ja.dict.itop-config-mgmt.php @@ -492,6 +492,8 @@ Dict::Add('JA JP', 'Japanese', '日本語', [ 'Class:ApplicationSolution/Attribute:functionalcis_list+' => 'All the configuration items that compose this application solution~~', 'Class:ApplicationSolution/Attribute:businessprocess_list' => 'ビジネスプロセス', 'Class:ApplicationSolution/Attribute:businessprocess_list+' => 'All the business processes depending on this application solution~~', + 'Class:ApplicationSolution/Attribute:logo' => 'Logo~~', + 'Class:ApplicationSolution/Attribute:logo+' => 'Used as object icon when displayed within impact analysis graphs~~', 'Class:ApplicationSolution/Attribute:status' => '状態', 'Class:ApplicationSolution/Attribute:status+' => '', 'Class:ApplicationSolution/Attribute:status/Value:active' => 'アクティブ', @@ -513,6 +515,8 @@ Dict::Add('JA JP', 'Japanese', '日本語', [ 'Class:BusinessProcess+' => '', 'Class:BusinessProcess/Attribute:applicationsolutions_list' => 'アプリケーションソリューション', 'Class:BusinessProcess/Attribute:applicationsolutions_list+' => 'All the application solutions that impact this business process~~', + 'Class:BusinessProcess/Attribute:logo' => 'Logo~~', + 'Class:BusinessProcess/Attribute:logo+' => 'Used as object icon when displayed within impact analysis graphs~~', 'Class:BusinessProcess/Attribute:status' => '状態', 'Class:BusinessProcess/Attribute:status+' => '', 'Class:BusinessProcess/Attribute:status/Value:active' => 'アクティブ', @@ -609,6 +613,8 @@ Dict::Add('JA JP', 'Japanese', '日本語', [ 'Class:MiddlewareInstance' => 'ミドルウエアインスタンス', 'Class:MiddlewareInstance+' => '', 'Class:MiddlewareInstance/ComplementaryName' => '%1$s - %2$s~~', + 'Class:MiddlewareInstance/Attribute:logo' => 'Logo~~', + 'Class:MiddlewareInstance/Attribute:logo+' => 'Used as object icon when displayed within impact analysis graphs~~', 'Class:MiddlewareInstance/Attribute:middleware_id' => 'ミドルウエア', 'Class:MiddlewareInstance/Attribute:middleware_id+' => '', 'Class:MiddlewareInstance/Attribute:middleware_name' => 'ミドルウエア名', @@ -641,6 +647,8 @@ Dict::Add('JA JP', 'Japanese', '日本語', [ 'Class:WebApplication/Attribute:webserver_id+' => '', 'Class:WebApplication/Attribute:webserver_name' => 'Webサーバ名', 'Class:WebApplication/Attribute:webserver_name+' => '', + 'Class:WebApplication/Attribute:logo' => 'Logo~~', + 'Class:WebApplication/Attribute:logo+' => 'Used as object icon when displayed within impact analysis graphs~~', 'Class:WebApplication/Attribute:url' => 'URL', 'Class:WebApplication/Attribute:url+' => '', ]); @@ -838,7 +846,7 @@ Dict::Add('JA JP', 'Japanese', '日本語', [ Dict::Add('JA JP', 'Japanese', '日本語', [ 'Class:Tape' => 'テープ', - 'Class:Tape+' => '', + 'Class:Tape+' => 'A Tape (or cartridge) within '.ITOP_APPLICATION_SHORT.' is a removable piece of storage part of a Tape Library~~', 'Class:Tape/Attribute:name' => '名前', 'Class:Tape/Attribute:name+' => '', 'Class:Tape/Attribute:description' => '説明', @@ -888,6 +896,8 @@ Dict::Add('JA JP', 'Japanese', '日本語', [ 'Class:Software/Attribute:version+' => '', 'Class:Software/Attribute:documents_list' => '文書', 'Class:Software/Attribute:documents_list+' => 'All the documents linked to this software~~', + 'Class:Software/Attribute:logo' => 'Logo~~', + 'Class:Software/Attribute:logo+' => 'Used as icon for all Software Instance objects using this Software, when displayed within impact analysis graphs~~', 'Class:Software/Attribute:type' => 'タイプ', 'Class:Software/Attribute:type+' => '', 'Class:Software/Attribute:type/Value:DBServer' => 'DBサーバ', @@ -1053,6 +1063,8 @@ Dict::Add('JA JP', 'Japanese', '日本語', [ 'Class:OSVersion/Attribute:osfamily_id+' => '', 'Class:OSVersion/Attribute:osfamily_name' => 'OSファミリ名', 'Class:OSVersion/Attribute:osfamily_name+' => '', + 'Class:OSVersion/UniquenessRule:name_osfamily+' => 'Name must be unique in the OS family~~', + 'Class:OSVersion/UniquenessRule:name_osfamily' => 'this OS version already exists within the OS family~~', ]); // @@ -1062,6 +1074,8 @@ Dict::Add('JA JP', 'Japanese', '日本語', [ Dict::Add('JA JP', 'Japanese', '日本語', [ 'Class:OSFamily' => 'OSファミリ', 'Class:OSFamily+' => '', + 'Class:OSFamily/UniquenessRule:name+' => 'Name must be unique~~', + 'Class:OSFamily/UniquenessRule:name' => 'this OS family already exists~~', ]); // @@ -1144,6 +1158,8 @@ Dict::Add('JA JP', 'Japanese', '日本語', [ Dict::Add('JA JP', 'Japanese', '日本語', [ 'Class:NetworkDeviceType' => 'ネットワークデバイスタイプ', 'Class:NetworkDeviceType+' => '', + 'Class:NetworkDeviceType/Attribute:logo' => 'Logo~~', + 'Class:NetworkDeviceType/Attribute:logo+' => 'Used as icon for all Network Device of this type, when displayed in console (details, summary card and impact analysis graphs)~~', 'Class:NetworkDeviceType/Attribute:networkdevicesdevices_list' => 'ネットワークデバイス', 'Class:NetworkDeviceType/Attribute:networkdevicesdevices_list+' => 'All the network devices corresponding to this type~~', ]); @@ -1159,6 +1175,8 @@ Dict::Add('JA JP', 'Japanese', '日本語', [ 'Class:IOSVersion/Attribute:brand_id+' => '', 'Class:IOSVersion/Attribute:brand_name' => 'ブランド名', 'Class:IOSVersion/Attribute:brand_name+' => '', + 'Class:IOSVersion/UniquenessRule:name_brand+' => 'Name must be unique in the brand~~', + 'Class:IOSVersion/UniquenessRule:name_brand' => 'this IOS version already exists for this brand~~', ]); // @@ -1529,7 +1547,8 @@ Dict::Add('JA JP', 'Japanese', '日本語', [ 'ConfigMgmt:baseinfo' => 'General~~', 'ConfigMgmt:moreinfo' => 'CI specifics~~', 'Storage:moreinfo' => 'Storage specifics~~', - 'ConfigMgmt:otherinfo' => 'Dates and description~~', + 'ConfigMgmt:otherinfo' => 'Description~~', + 'ConfigMgmt:dates' => 'Dates~~', 'Software:moreinfo' => 'Software specifics~~', 'Phone:moreinfo' => 'Phone specifics~~', 'Server:baseinfo' => '基本情報', @@ -1620,8 +1639,8 @@ Dict::Add('JA JP', 'Japanese', '日本語', [ // Dict::Add('JA JP', 'Japanese', '日本語', [ - 'Class:PhysicalInterface/Attribute:org_id' => 'Org id~~', + 'Class:PhysicalInterface/Attribute:org_id' => 'Organization~~', 'Class:PhysicalInterface/Attribute:org_id+' => '~~', - 'Class:PhysicalInterface/Attribute:location_id' => 'Location id~~', + 'Class:PhysicalInterface/Attribute:location_id' => 'Location~~', 'Class:PhysicalInterface/Attribute:location_id+' => '~~', ]); diff --git a/datamodels/2.x/itop-config-mgmt/dictionaries/nl.dict.itop-config-mgmt.php b/datamodels/2.x/itop-config-mgmt/dictionaries/nl.dict.itop-config-mgmt.php index 52c7df5e4..7cabf9dbb 100644 --- a/datamodels/2.x/itop-config-mgmt/dictionaries/nl.dict.itop-config-mgmt.php +++ b/datamodels/2.x/itop-config-mgmt/dictionaries/nl.dict.itop-config-mgmt.php @@ -494,6 +494,8 @@ Dict::Add('NL NL', 'Dutch', 'Nederlands', [ 'Class:ApplicationSolution/Attribute:functionalcis_list+' => 'Alle configuratie-items die deze applicatie-oplossing tot stand brengen', 'Class:ApplicationSolution/Attribute:businessprocess_list' => 'Bedrijfsprocessen', 'Class:ApplicationSolution/Attribute:businessprocess_list+' => 'Alle bedrijfsprocessen die afhankelijk zijn van deze applicatie-oplossing', + 'Class:ApplicationSolution/Attribute:logo' => 'Logo~~', + 'Class:ApplicationSolution/Attribute:logo+' => 'Used as object icon when displayed within impact analysis graphs~~', 'Class:ApplicationSolution/Attribute:status' => 'Status', 'Class:ApplicationSolution/Attribute:status+' => '', 'Class:ApplicationSolution/Attribute:status/Value:active' => 'Actief', @@ -515,6 +517,8 @@ Dict::Add('NL NL', 'Dutch', 'Nederlands', [ 'Class:BusinessProcess+' => '', 'Class:BusinessProcess/Attribute:applicationsolutions_list' => 'Applicatie-oplossing', 'Class:BusinessProcess/Attribute:applicationsolutions_list+' => 'Alle applicatie-oplossingen die impact hebben op dit bedrijfsproces', + 'Class:BusinessProcess/Attribute:logo' => 'Logo~~', + 'Class:BusinessProcess/Attribute:logo+' => 'Used as object icon when displayed within impact analysis graphs~~', 'Class:BusinessProcess/Attribute:status' => 'Status', 'Class:BusinessProcess/Attribute:status+' => '', 'Class:BusinessProcess/Attribute:status/Value:active' => 'Actief', @@ -611,6 +615,8 @@ Dict::Add('NL NL', 'Dutch', 'Nederlands', [ 'Class:MiddlewareInstance' => 'Middleware-instantie', 'Class:MiddlewareInstance+' => '', 'Class:MiddlewareInstance/ComplementaryName' => '%1$s - %2$s', + 'Class:MiddlewareInstance/Attribute:logo' => 'Logo~~', + 'Class:MiddlewareInstance/Attribute:logo+' => 'Used as object icon when displayed within impact analysis graphs~~', 'Class:MiddlewareInstance/Attribute:middleware_id' => 'Middleware', 'Class:MiddlewareInstance/Attribute:middleware_id+' => '', 'Class:MiddlewareInstance/Attribute:middleware_name' => 'Naam middleware', @@ -643,6 +649,8 @@ Dict::Add('NL NL', 'Dutch', 'Nederlands', [ 'Class:WebApplication/Attribute:webserver_id+' => '', 'Class:WebApplication/Attribute:webserver_name' => 'Naam webserver', 'Class:WebApplication/Attribute:webserver_name+' => '', + 'Class:WebApplication/Attribute:logo' => 'Logo~~', + 'Class:WebApplication/Attribute:logo+' => 'Used as object icon when displayed within impact analysis graphs~~', 'Class:WebApplication/Attribute:url' => 'Link (URL)', 'Class:WebApplication/Attribute:url+' => '', ]); @@ -840,7 +848,7 @@ Dict::Add('NL NL', 'Dutch', 'Nederlands', [ Dict::Add('NL NL', 'Dutch', 'Nederlands', [ 'Class:Tape' => 'Tape', - 'Class:Tape+' => '', + 'Class:Tape+' => 'A Tape (or cartridge) within '.ITOP_APPLICATION_SHORT.' is a removable piece of storage part of a Tape Library~~', 'Class:Tape/Attribute:name' => 'Naam', 'Class:Tape/Attribute:name+' => '', 'Class:Tape/Attribute:description' => 'Omschrijving', @@ -890,6 +898,8 @@ Dict::Add('NL NL', 'Dutch', 'Nederlands', [ 'Class:Software/Attribute:version+' => '', 'Class:Software/Attribute:documents_list' => 'Documenten', 'Class:Software/Attribute:documents_list+' => 'Alle documenten gelinkt aan deze software', + 'Class:Software/Attribute:logo' => 'Logo~~', + 'Class:Software/Attribute:logo+' => 'Used as icon for all Software Instance objects using this Software, when displayed within impact analysis graphs~~', 'Class:Software/Attribute:type' => 'Type', 'Class:Software/Attribute:type+' => '', 'Class:Software/Attribute:type/Value:DBServer' => 'Databaseserver', @@ -1055,6 +1065,8 @@ Dict::Add('NL NL', 'Dutch', 'Nederlands', [ 'Class:OSVersion/Attribute:osfamily_id+' => '', 'Class:OSVersion/Attribute:osfamily_name' => 'Naam soort besturingssysteem', 'Class:OSVersion/Attribute:osfamily_name+' => '', + 'Class:OSVersion/UniquenessRule:name_osfamily+' => 'Name must be unique in the OS family~~', + 'Class:OSVersion/UniquenessRule:name_osfamily' => 'this OS version already exists within the OS family~~', ]); // @@ -1064,6 +1076,8 @@ Dict::Add('NL NL', 'Dutch', 'Nederlands', [ Dict::Add('NL NL', 'Dutch', 'Nederlands', [ 'Class:OSFamily' => 'Soort Besturingssysteem', 'Class:OSFamily+' => '', + 'Class:OSFamily/UniquenessRule:name+' => 'Name must be unique~~', + 'Class:OSFamily/UniquenessRule:name' => 'this OS family already exists~~', ]); // @@ -1146,6 +1160,8 @@ Dict::Add('NL NL', 'Dutch', 'Nederlands', [ Dict::Add('NL NL', 'Dutch', 'Nederlands', [ 'Class:NetworkDeviceType' => 'Soort netwerkapparaat', 'Class:NetworkDeviceType+' => '', + 'Class:NetworkDeviceType/Attribute:logo' => 'Logo~~', + 'Class:NetworkDeviceType/Attribute:logo+' => 'Used as icon for all Network Device of this type, when displayed in console (details, summary card and impact analysis graphs)~~', 'Class:NetworkDeviceType/Attribute:networkdevicesdevices_list' => 'Netwerkapparaten', 'Class:NetworkDeviceType/Attribute:networkdevicesdevices_list+' => 'Alle netwerkapparaten van deze soort', ]); @@ -1161,6 +1177,8 @@ Dict::Add('NL NL', 'Dutch', 'Nederlands', [ 'Class:IOSVersion/Attribute:brand_id+' => '', 'Class:IOSVersion/Attribute:brand_name' => 'Naam merk', 'Class:IOSVersion/Attribute:brand_name+' => '', + 'Class:IOSVersion/UniquenessRule:name_brand+' => 'Name must be unique in the brand~~', + 'Class:IOSVersion/UniquenessRule:name_brand' => 'this IOS version already exists for this brand~~', ]); // @@ -1531,7 +1549,8 @@ Dict::Add('NL NL', 'Dutch', 'Nederlands', [ 'ConfigMgmt:baseinfo' => 'General~~', 'ConfigMgmt:moreinfo' => 'CI specifics~~', 'Storage:moreinfo' => 'Storage specifics~~', - 'ConfigMgmt:otherinfo' => 'Dates and description~~', + 'ConfigMgmt:otherinfo' => 'Description~~', + 'ConfigMgmt:dates' => 'Dates~~', 'Software:moreinfo' => 'Software specifics~~', 'Phone:moreinfo' => 'Phone specifics~~', 'Server:baseinfo' => 'Globale informatie', @@ -1622,8 +1641,8 @@ Dict::Add('NL NL', 'Dutch', 'Nederlands', [ // Dict::Add('NL NL', 'Dutch', 'Nederlands', [ - 'Class:PhysicalInterface/Attribute:org_id' => 'Org id~~', + 'Class:PhysicalInterface/Attribute:org_id' => 'Organization~~', 'Class:PhysicalInterface/Attribute:org_id+' => '~~', - 'Class:PhysicalInterface/Attribute:location_id' => 'Location id~~', + 'Class:PhysicalInterface/Attribute:location_id' => 'Location~~', 'Class:PhysicalInterface/Attribute:location_id+' => '~~', ]); diff --git a/datamodels/2.x/itop-config-mgmt/dictionaries/pl.dict.itop-config-mgmt.php b/datamodels/2.x/itop-config-mgmt/dictionaries/pl.dict.itop-config-mgmt.php index 9844ca33a..ea484725f 100644 --- a/datamodels/2.x/itop-config-mgmt/dictionaries/pl.dict.itop-config-mgmt.php +++ b/datamodels/2.x/itop-config-mgmt/dictionaries/pl.dict.itop-config-mgmt.php @@ -492,6 +492,8 @@ Dict::Add('PL PL', 'Polish', 'Polski', [ 'Class:ApplicationSolution/Attribute:functionalcis_list+' => 'Wszystkie elementy konfiguracji, które składają się na to rozwiązanie', 'Class:ApplicationSolution/Attribute:businessprocess_list' => 'Procesy biznesowe', 'Class:ApplicationSolution/Attribute:businessprocess_list+' => 'Wszystkie procesy biznesowe w zależności od tego rozwiązania', + 'Class:ApplicationSolution/Attribute:logo' => 'Logo~~', + 'Class:ApplicationSolution/Attribute:logo+' => 'Used as object icon when displayed within impact analysis graphs~~', 'Class:ApplicationSolution/Attribute:status' => 'Status', 'Class:ApplicationSolution/Attribute:status+' => '', 'Class:ApplicationSolution/Attribute:status/Value:active' => 'aktywne', @@ -513,6 +515,8 @@ Dict::Add('PL PL', 'Polish', 'Polski', [ 'Class:BusinessProcess+' => '', 'Class:BusinessProcess/Attribute:applicationsolutions_list' => 'Rozwiązania aplikacyjne', 'Class:BusinessProcess/Attribute:applicationsolutions_list+' => 'Wszystkie rozwiązania aplikacyjne, które mają wpływ na ten proces biznesowy', + 'Class:BusinessProcess/Attribute:logo' => 'Logo~~', + 'Class:BusinessProcess/Attribute:logo+' => 'Used as object icon when displayed within impact analysis graphs~~', 'Class:BusinessProcess/Attribute:status' => 'Status', 'Class:BusinessProcess/Attribute:status+' => '', 'Class:BusinessProcess/Attribute:status/Value:active' => 'aktywny', @@ -609,6 +613,8 @@ Dict::Add('PL PL', 'Polish', 'Polski', [ 'Class:MiddlewareInstance' => 'Instancja oprogramowania pośredniczącego', 'Class:MiddlewareInstance+' => '', 'Class:MiddlewareInstance/ComplementaryName' => '%1$s - %2$s', + 'Class:MiddlewareInstance/Attribute:logo' => 'Logo~~', + 'Class:MiddlewareInstance/Attribute:logo+' => 'Used as object icon when displayed within impact analysis graphs~~', 'Class:MiddlewareInstance/Attribute:middleware_id' => 'Oprogramowanie pośredniczące', 'Class:MiddlewareInstance/Attribute:middleware_id+' => '', 'Class:MiddlewareInstance/Attribute:middleware_name' => 'Nazwa oprogramowania pośredniczącego', @@ -641,6 +647,8 @@ Dict::Add('PL PL', 'Polish', 'Polski', [ 'Class:WebApplication/Attribute:webserver_id+' => '', 'Class:WebApplication/Attribute:webserver_name' => 'Nazwa serwera WWW', 'Class:WebApplication/Attribute:webserver_name+' => '', + 'Class:WebApplication/Attribute:logo' => 'Logo~~', + 'Class:WebApplication/Attribute:logo+' => 'Used as object icon when displayed within impact analysis graphs~~', 'Class:WebApplication/Attribute:url' => 'URL', 'Class:WebApplication/Attribute:url+' => '', ]); @@ -838,7 +846,7 @@ Dict::Add('PL PL', 'Polish', 'Polski', [ Dict::Add('PL PL', 'Polish', 'Polski', [ 'Class:Tape' => 'Taśma', - 'Class:Tape+' => '', + 'Class:Tape+' => 'A Tape (or cartridge) within '.ITOP_APPLICATION_SHORT.' is a removable piece of storage part of a Tape Library~~', 'Class:Tape/Attribute:name' => 'Nazwa', 'Class:Tape/Attribute:name+' => '', 'Class:Tape/Attribute:description' => 'Opis', @@ -888,6 +896,8 @@ Dict::Add('PL PL', 'Polish', 'Polski', [ 'Class:Software/Attribute:version+' => '', 'Class:Software/Attribute:documents_list' => 'Dokumenty', 'Class:Software/Attribute:documents_list+' => 'Wszystkie dokumenty powiązane z tym oprogramowaniem', + 'Class:Software/Attribute:logo' => 'Logo~~', + 'Class:Software/Attribute:logo+' => 'Used as icon for all Software Instance objects using this Software, when displayed within impact analysis graphs~~', 'Class:Software/Attribute:type' => 'Typ', 'Class:Software/Attribute:type+' => '', 'Class:Software/Attribute:type/Value:DBServer' => 'Serwer bazy danych', @@ -1053,6 +1063,8 @@ Dict::Add('PL PL', 'Polish', 'Polski', [ 'Class:OSVersion/Attribute:osfamily_id+' => '', 'Class:OSVersion/Attribute:osfamily_name' => 'Nazwa rodziny OS', 'Class:OSVersion/Attribute:osfamily_name+' => '', + 'Class:OSVersion/UniquenessRule:name_osfamily+' => 'Name must be unique in the OS family~~', + 'Class:OSVersion/UniquenessRule:name_osfamily' => 'this OS version already exists within the OS family~~', ]); // @@ -1062,6 +1074,8 @@ Dict::Add('PL PL', 'Polish', 'Polski', [ Dict::Add('PL PL', 'Polish', 'Polski', [ 'Class:OSFamily' => 'Rodzina OS', 'Class:OSFamily+' => '', + 'Class:OSFamily/UniquenessRule:name+' => 'Name must be unique~~', + 'Class:OSFamily/UniquenessRule:name' => 'this OS family already exists~~', ]); // @@ -1144,6 +1158,8 @@ Dict::Add('PL PL', 'Polish', 'Polski', [ Dict::Add('PL PL', 'Polish', 'Polski', [ 'Class:NetworkDeviceType' => 'Typ urządzenia sieciowego', 'Class:NetworkDeviceType+' => '', + 'Class:NetworkDeviceType/Attribute:logo' => 'Logo~~', + 'Class:NetworkDeviceType/Attribute:logo+' => 'Used as icon for all Network Device of this type, when displayed in console (details, summary card and impact analysis graphs)~~', 'Class:NetworkDeviceType/Attribute:networkdevicesdevices_list' => 'Urządzenia sieciowe', 'Class:NetworkDeviceType/Attribute:networkdevicesdevices_list+' => 'Wszystkie urządzenia sieciowe odpowiadające temu typowi', ]); @@ -1159,6 +1175,8 @@ Dict::Add('PL PL', 'Polish', 'Polski', [ 'Class:IOSVersion/Attribute:brand_id+' => '', 'Class:IOSVersion/Attribute:brand_name' => 'Nazwa marki', 'Class:IOSVersion/Attribute:brand_name+' => '', + 'Class:IOSVersion/UniquenessRule:name_brand+' => 'Name must be unique in the brand~~', + 'Class:IOSVersion/UniquenessRule:name_brand' => 'this IOS version already exists for this brand~~', ]); // @@ -1529,7 +1547,8 @@ Dict::Add('PL PL', 'Polish', 'Polski', [ 'ConfigMgmt:baseinfo' => 'General~~', 'ConfigMgmt:moreinfo' => 'CI specifics~~', 'Storage:moreinfo' => 'Storage specifics~~', - 'ConfigMgmt:otherinfo' => 'Dates and description~~', + 'ConfigMgmt:otherinfo' => 'Description~~', + 'ConfigMgmt:dates' => 'Dates~~', 'Software:moreinfo' => 'Software specifics~~', 'Phone:moreinfo' => 'Phone specifics~~', 'Server:baseinfo' => 'Informacje ogólne', @@ -1620,8 +1639,8 @@ Dict::Add('PL PL', 'Polish', 'Polski', [ // Dict::Add('PL PL', 'Polish', 'Polski', [ - 'Class:PhysicalInterface/Attribute:org_id' => 'Org id~~', + 'Class:PhysicalInterface/Attribute:org_id' => 'Organization~~', 'Class:PhysicalInterface/Attribute:org_id+' => '~~', - 'Class:PhysicalInterface/Attribute:location_id' => 'Location id~~', + 'Class:PhysicalInterface/Attribute:location_id' => 'Location~~', 'Class:PhysicalInterface/Attribute:location_id+' => '~~', ]); diff --git a/datamodels/2.x/itop-config-mgmt/dictionaries/pt_br.dict.itop-config-mgmt.php b/datamodels/2.x/itop-config-mgmt/dictionaries/pt_br.dict.itop-config-mgmt.php index 7bade5c06..c1c2218a5 100644 --- a/datamodels/2.x/itop-config-mgmt/dictionaries/pt_br.dict.itop-config-mgmt.php +++ b/datamodels/2.x/itop-config-mgmt/dictionaries/pt_br.dict.itop-config-mgmt.php @@ -492,6 +492,8 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', [ 'Class:ApplicationSolution/Attribute:functionalcis_list+' => 'Todos os Itens de configuração (IC) que compõem esta Solução de aplicação', 'Class:ApplicationSolution/Attribute:businessprocess_list' => 'Processos de negócio', 'Class:ApplicationSolution/Attribute:businessprocess_list+' => 'Todos os Processos de negócio dependentes desta Solução de aplicação', + 'Class:ApplicationSolution/Attribute:logo' => 'Logo~~', + 'Class:ApplicationSolution/Attribute:logo+' => 'Used as object icon when displayed within impact analysis graphs~~', 'Class:ApplicationSolution/Attribute:status' => 'Status', 'Class:ApplicationSolution/Attribute:status+' => '', 'Class:ApplicationSolution/Attribute:status/Value:active' => 'Ativo', @@ -513,6 +515,8 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', [ 'Class:BusinessProcess+' => '', 'Class:BusinessProcess/Attribute:applicationsolutions_list' => 'Soluções de aplicação', 'Class:BusinessProcess/Attribute:applicationsolutions_list+' => 'Todas as soluções de aplicação que impactam este processo de negócio', + 'Class:BusinessProcess/Attribute:logo' => 'Logo~~', + 'Class:BusinessProcess/Attribute:logo+' => 'Used as object icon when displayed within impact analysis graphs~~', 'Class:BusinessProcess/Attribute:status' => 'Status', 'Class:BusinessProcess/Attribute:status+' => '', 'Class:BusinessProcess/Attribute:status/Value:active' => 'Ativo', @@ -609,6 +613,8 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', [ 'Class:MiddlewareInstance' => 'Instância Middleware', 'Class:MiddlewareInstance+' => '', 'Class:MiddlewareInstance/ComplementaryName' => '%1$s - %2$s~~', + 'Class:MiddlewareInstance/Attribute:logo' => 'Logo~~', + 'Class:MiddlewareInstance/Attribute:logo+' => 'Used as object icon when displayed within impact analysis graphs~~', 'Class:MiddlewareInstance/Attribute:middleware_id' => 'Middleware', 'Class:MiddlewareInstance/Attribute:middleware_id+' => '', 'Class:MiddlewareInstance/Attribute:middleware_name' => 'Nome do middleware', @@ -641,6 +647,8 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', [ 'Class:WebApplication/Attribute:webserver_id+' => '', 'Class:WebApplication/Attribute:webserver_name' => 'Nome do servidor Web', 'Class:WebApplication/Attribute:webserver_name+' => '', + 'Class:WebApplication/Attribute:logo' => 'Logo~~', + 'Class:WebApplication/Attribute:logo+' => 'Used as object icon when displayed within impact analysis graphs~~', 'Class:WebApplication/Attribute:url' => 'URL', 'Class:WebApplication/Attribute:url+' => '', ]); @@ -838,7 +846,7 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', [ Dict::Add('PT BR', 'Brazilian', 'Brazilian', [ 'Class:Tape' => 'Fita', - 'Class:Tape+' => '', + 'Class:Tape+' => 'A Tape (or cartridge) within '.ITOP_APPLICATION_SHORT.' is a removable piece of storage part of a Tape Library~~', 'Class:Tape/Attribute:name' => 'Nome', 'Class:Tape/Attribute:name+' => '', 'Class:Tape/Attribute:description' => 'Descrição', @@ -888,6 +896,8 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', [ 'Class:Software/Attribute:version+' => '', 'Class:Software/Attribute:documents_list' => 'Documentos', 'Class:Software/Attribute:documents_list+' => 'Todos os Documentos associados a este Software', + 'Class:Software/Attribute:logo' => 'Logo~~', + 'Class:Software/Attribute:logo+' => 'Used as icon for all Software Instance objects using this Software, when displayed within impact analysis graphs~~', 'Class:Software/Attribute:type' => 'Tipo', 'Class:Software/Attribute:type+' => '', 'Class:Software/Attribute:type/Value:DBServer' => 'Servidor de DB', @@ -1053,6 +1063,8 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', [ 'Class:OSVersion/Attribute:osfamily_id+' => '', 'Class:OSVersion/Attribute:osfamily_name' => 'Nome da família do SO', 'Class:OSVersion/Attribute:osfamily_name+' => '', + 'Class:OSVersion/UniquenessRule:name_osfamily+' => 'Name must be unique in the OS family~~', + 'Class:OSVersion/UniquenessRule:name_osfamily' => 'this OS version already exists within the OS family~~', ]); // @@ -1062,6 +1074,8 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', [ Dict::Add('PT BR', 'Brazilian', 'Brazilian', [ 'Class:OSFamily' => 'Família do OS', 'Class:OSFamily+' => '', + 'Class:OSFamily/UniquenessRule:name+' => 'Name must be unique~~', + 'Class:OSFamily/UniquenessRule:name' => 'this OS family already exists~~', ]); // @@ -1144,6 +1158,8 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', [ Dict::Add('PT BR', 'Brazilian', 'Brazilian', [ 'Class:NetworkDeviceType' => 'Tipo de dispositivo de rede', 'Class:NetworkDeviceType+' => '', + 'Class:NetworkDeviceType/Attribute:logo' => 'Logo~~', + 'Class:NetworkDeviceType/Attribute:logo+' => 'Used as icon for all Network Device of this type, when displayed in console (details, summary card and impact analysis graphs)~~', 'Class:NetworkDeviceType/Attribute:networkdevicesdevices_list' => 'Dispositivos de rede', 'Class:NetworkDeviceType/Attribute:networkdevicesdevices_list+' => 'Todos os Dispositivos de rede correspondentes a este Tipo', ]); @@ -1159,6 +1175,8 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', [ 'Class:IOSVersion/Attribute:brand_id+' => '', 'Class:IOSVersion/Attribute:brand_name' => 'Nome do fabricante', 'Class:IOSVersion/Attribute:brand_name+' => '', + 'Class:IOSVersion/UniquenessRule:name_brand+' => 'Name must be unique in the brand~~', + 'Class:IOSVersion/UniquenessRule:name_brand' => 'this IOS version already exists for this brand~~', ]); // @@ -1529,7 +1547,8 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', [ 'ConfigMgmt:baseinfo' => 'General~~', 'ConfigMgmt:moreinfo' => 'CI specifics~~', 'Storage:moreinfo' => 'Storage specifics~~', - 'ConfigMgmt:otherinfo' => 'Dates and description~~', + 'ConfigMgmt:otherinfo' => 'Description~~', + 'ConfigMgmt:dates' => 'Dates~~', 'Software:moreinfo' => 'Software specifics~~', 'Phone:moreinfo' => 'Phone specifics~~', 'Server:baseinfo' => 'Informações gerais', @@ -1620,8 +1639,8 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', [ // Dict::Add('PT BR', 'Brazilian', 'Brazilian', [ - 'Class:PhysicalInterface/Attribute:org_id' => 'Org id~~', + 'Class:PhysicalInterface/Attribute:org_id' => 'Organization~~', 'Class:PhysicalInterface/Attribute:org_id+' => '~~', - 'Class:PhysicalInterface/Attribute:location_id' => 'Location id~~', + 'Class:PhysicalInterface/Attribute:location_id' => 'Location~~', 'Class:PhysicalInterface/Attribute:location_id+' => '~~', ]); diff --git a/datamodels/2.x/itop-config-mgmt/dictionaries/ru.dict.itop-config-mgmt.php b/datamodels/2.x/itop-config-mgmt/dictionaries/ru.dict.itop-config-mgmt.php index 01ecdad6d..a4e422cbe 100644 --- a/datamodels/2.x/itop-config-mgmt/dictionaries/ru.dict.itop-config-mgmt.php +++ b/datamodels/2.x/itop-config-mgmt/dictionaries/ru.dict.itop-config-mgmt.php @@ -493,6 +493,8 @@ Dict::Add('RU RU', 'Russian', 'Русский', [ 'Class:ApplicationSolution/Attribute:functionalcis_list+' => 'Конфигурационные единицы в составе прикладного решения', 'Class:ApplicationSolution/Attribute:businessprocess_list' => 'Бизнес-процессы', 'Class:ApplicationSolution/Attribute:businessprocess_list+' => 'Бизнес-процессы, зависящие от прикладного решения', + 'Class:ApplicationSolution/Attribute:logo' => 'Logo~~', + 'Class:ApplicationSolution/Attribute:logo+' => 'Used as object icon when displayed within impact analysis graphs~~', 'Class:ApplicationSolution/Attribute:status' => 'Статус', 'Class:ApplicationSolution/Attribute:status+' => '', 'Class:ApplicationSolution/Attribute:status/Value:active' => 'Активный', @@ -514,6 +516,8 @@ Dict::Add('RU RU', 'Russian', 'Русский', [ 'Class:BusinessProcess+' => '', 'Class:BusinessProcess/Attribute:applicationsolutions_list' => 'Прикладные решения', 'Class:BusinessProcess/Attribute:applicationsolutions_list+' => 'Прикладные решения, влияющие на бизнес-процесс', + 'Class:BusinessProcess/Attribute:logo' => 'Logo~~', + 'Class:BusinessProcess/Attribute:logo+' => 'Used as object icon when displayed within impact analysis graphs~~', 'Class:BusinessProcess/Attribute:status' => 'Статус', 'Class:BusinessProcess/Attribute:status+' => '', 'Class:BusinessProcess/Attribute:status/Value:active' => 'Активный', @@ -610,6 +614,8 @@ Dict::Add('RU RU', 'Russian', 'Русский', [ 'Class:MiddlewareInstance' => 'Экземпляр промежуточного ПО', 'Class:MiddlewareInstance+' => 'Экземпляр промежуточного ПО', 'Class:MiddlewareInstance/ComplementaryName' => '%1$s - %2$s~~', + 'Class:MiddlewareInstance/Attribute:logo' => 'Logo~~', + 'Class:MiddlewareInstance/Attribute:logo+' => 'Used as object icon when displayed within impact analysis graphs~~', 'Class:MiddlewareInstance/Attribute:middleware_id' => 'Промежуточное ПО', 'Class:MiddlewareInstance/Attribute:middleware_id+' => '', 'Class:MiddlewareInstance/Attribute:middleware_name' => 'Промежуточное ПО', @@ -642,6 +648,8 @@ Dict::Add('RU RU', 'Russian', 'Русский', [ 'Class:WebApplication/Attribute:webserver_id+' => '', 'Class:WebApplication/Attribute:webserver_name' => 'Веб-сервер', 'Class:WebApplication/Attribute:webserver_name+' => '', + 'Class:WebApplication/Attribute:logo' => 'Logo~~', + 'Class:WebApplication/Attribute:logo+' => 'Used as object icon when displayed within impact analysis graphs~~', 'Class:WebApplication/Attribute:url' => 'URL', 'Class:WebApplication/Attribute:url+' => '', ]); @@ -839,7 +847,7 @@ Dict::Add('RU RU', 'Russian', 'Русский', [ Dict::Add('RU RU', 'Russian', 'Русский', [ 'Class:Tape' => 'Лента', - 'Class:Tape+' => 'Лента', + 'Class:Tape+' => 'A Tape (or cartridge) within '.ITOP_APPLICATION_SHORT.' is a removable piece of storage part of a Tape Library~~', 'Class:Tape/Attribute:name' => 'Название', 'Class:Tape/Attribute:name+' => '', 'Class:Tape/Attribute:description' => 'Описание', @@ -889,6 +897,8 @@ Dict::Add('RU RU', 'Russian', 'Русский', [ 'Class:Software/Attribute:version+' => '', 'Class:Software/Attribute:documents_list' => 'Документы', 'Class:Software/Attribute:documents_list+' => 'Все документы, связанные с этим ПО', + 'Class:Software/Attribute:logo' => 'Logo~~', + 'Class:Software/Attribute:logo+' => 'Used as icon for all Software Instance objects using this Software, when displayed within impact analysis graphs~~', 'Class:Software/Attribute:type' => 'Тип', 'Class:Software/Attribute:type+' => '', 'Class:Software/Attribute:type/Value:DBServer' => 'Сервер БД', @@ -1054,6 +1064,8 @@ Dict::Add('RU RU', 'Russian', 'Русский', [ 'Class:OSVersion/Attribute:osfamily_id+' => '', 'Class:OSVersion/Attribute:osfamily_name' => 'Семейство ОС', 'Class:OSVersion/Attribute:osfamily_name+' => '', + 'Class:OSVersion/UniquenessRule:name_osfamily+' => 'Name must be unique in the OS family~~', + 'Class:OSVersion/UniquenessRule:name_osfamily' => 'this OS version already exists within the OS family~~', ]); // @@ -1063,6 +1075,8 @@ Dict::Add('RU RU', 'Russian', 'Русский', [ Dict::Add('RU RU', 'Russian', 'Русский', [ 'Class:OSFamily' => 'Семейство ОС', 'Class:OSFamily+' => '', + 'Class:OSFamily/UniquenessRule:name+' => 'Name must be unique~~', + 'Class:OSFamily/UniquenessRule:name' => 'this OS family already exists~~', ]); // @@ -1145,6 +1159,8 @@ Dict::Add('RU RU', 'Russian', 'Русский', [ Dict::Add('RU RU', 'Russian', 'Русский', [ 'Class:NetworkDeviceType' => 'Тип сетевого устройства', 'Class:NetworkDeviceType+' => '', + 'Class:NetworkDeviceType/Attribute:logo' => 'Logo~~', + 'Class:NetworkDeviceType/Attribute:logo+' => 'Used as icon for all Network Device of this type, when displayed in console (details, summary card and impact analysis graphs)~~', 'Class:NetworkDeviceType/Attribute:networkdevicesdevices_list' => 'Устройства', 'Class:NetworkDeviceType/Attribute:networkdevicesdevices_list+' => 'Все сетевые устройства этого типа', ]); @@ -1160,6 +1176,8 @@ Dict::Add('RU RU', 'Russian', 'Русский', [ 'Class:IOSVersion/Attribute:brand_id+' => '', 'Class:IOSVersion/Attribute:brand_name' => 'Бренд', 'Class:IOSVersion/Attribute:brand_name+' => '', + 'Class:IOSVersion/UniquenessRule:name_brand+' => 'Name must be unique in the brand~~', + 'Class:IOSVersion/UniquenessRule:name_brand' => 'this IOS version already exists for this brand~~', ]); // @@ -1530,7 +1548,8 @@ Dict::Add('RU RU', 'Russian', 'Русский', [ 'ConfigMgmt:baseinfo' => 'General~~', 'ConfigMgmt:moreinfo' => 'CI specifics~~', 'Storage:moreinfo' => 'Storage specifics~~', - 'ConfigMgmt:otherinfo' => 'Dates and description~~', + 'ConfigMgmt:otherinfo' => 'Description~~', + 'ConfigMgmt:dates' => 'Dates~~', 'Software:moreinfo' => 'Software specifics~~', 'Phone:moreinfo' => 'Phone specifics~~', 'Server:baseinfo' => 'Основное', @@ -1621,8 +1640,8 @@ Dict::Add('RU RU', 'Russian', 'Русский', [ // Dict::Add('RU RU', 'Russian', 'Русский', [ - 'Class:PhysicalInterface/Attribute:org_id' => 'Org id~~', + 'Class:PhysicalInterface/Attribute:org_id' => 'Organization~~', 'Class:PhysicalInterface/Attribute:org_id+' => '~~', - 'Class:PhysicalInterface/Attribute:location_id' => 'Location id~~', + 'Class:PhysicalInterface/Attribute:location_id' => 'Location~~', 'Class:PhysicalInterface/Attribute:location_id+' => '~~', ]); diff --git a/datamodels/2.x/itop-config-mgmt/dictionaries/sk.dict.itop-config-mgmt.php b/datamodels/2.x/itop-config-mgmt/dictionaries/sk.dict.itop-config-mgmt.php index d1319feda..cf5c88377 100644 --- a/datamodels/2.x/itop-config-mgmt/dictionaries/sk.dict.itop-config-mgmt.php +++ b/datamodels/2.x/itop-config-mgmt/dictionaries/sk.dict.itop-config-mgmt.php @@ -231,7 +231,7 @@ Dict::Add('SK SK', 'Slovak', 'Slovenčina', [ Dict::Add('SK SK', 'Slovak', 'Slovenčina', [ 'Class:ConnectableCI' => 'Pripojiteľné zariadenie', - 'Class:ConnectableCI+' => 'Physical CI~~', + 'Class:ConnectableCI+' => 'Physical Device which can be connected to a network.~~', 'Class:ConnectableCI/ComplementaryName' => '%1$s - %2$s~~', 'Class:ConnectableCI/Attribute:networkdevice_list' => 'Sieťové zariadenia', 'Class:ConnectableCI/Attribute:networkdevice_list+' => 'All network devices connected to this device~~', @@ -492,6 +492,8 @@ Dict::Add('SK SK', 'Slovak', 'Slovenčina', [ 'Class:ApplicationSolution/Attribute:functionalcis_list+' => 'All the configuration items that compose this application solution~~', 'Class:ApplicationSolution/Attribute:businessprocess_list' => 'Biznis procesy', 'Class:ApplicationSolution/Attribute:businessprocess_list+' => 'All the business processes depending on this application solution~~', + 'Class:ApplicationSolution/Attribute:logo' => 'Logo~~', + 'Class:ApplicationSolution/Attribute:logo+' => 'Used as object icon when displayed within impact analysis graphs~~', 'Class:ApplicationSolution/Attribute:status' => 'Stav', 'Class:ApplicationSolution/Attribute:status+' => '~~', 'Class:ApplicationSolution/Attribute:status/Value:active' => 'Aktívne', @@ -513,6 +515,8 @@ Dict::Add('SK SK', 'Slovak', 'Slovenčina', [ 'Class:BusinessProcess+' => '~~', 'Class:BusinessProcess/Attribute:applicationsolutions_list' => 'Aplikačné riešenia', 'Class:BusinessProcess/Attribute:applicationsolutions_list+' => 'All the application solutions that impact this business process~~', + 'Class:BusinessProcess/Attribute:logo' => 'Logo~~', + 'Class:BusinessProcess/Attribute:logo+' => 'Used as object icon when displayed within impact analysis graphs~~', 'Class:BusinessProcess/Attribute:status' => 'Stav', 'Class:BusinessProcess/Attribute:status+' => '~~', 'Class:BusinessProcess/Attribute:status/Value:active' => 'Aktívny', @@ -577,7 +581,7 @@ Dict::Add('SK SK', 'Slovak', 'Slovenčina', [ // Dict::Add('SK SK', 'Slovak', 'Slovenčina', [ - 'Class:WebServer' => 'Web server', + 'Class:WebServer' => 'Web Server', 'Class:WebServer+' => '~~', 'Class:WebServer/Attribute:webapp_list' => 'Webové aplikácie', 'Class:WebServer/Attribute:webapp_list+' => 'All the web applications available on this web server~~', @@ -609,6 +613,8 @@ Dict::Add('SK SK', 'Slovak', 'Slovenčina', [ 'Class:MiddlewareInstance' => 'Middleware inštancia', 'Class:MiddlewareInstance+' => '~~', 'Class:MiddlewareInstance/ComplementaryName' => '%1$s - %2$s~~', + 'Class:MiddlewareInstance/Attribute:logo' => 'Logo~~', + 'Class:MiddlewareInstance/Attribute:logo+' => 'Used as object icon when displayed within impact analysis graphs~~', 'Class:MiddlewareInstance/Attribute:middleware_id' => 'Middleware', 'Class:MiddlewareInstance/Attribute:middleware_id+' => '~~', 'Class:MiddlewareInstance/Attribute:middleware_name' => 'Názov Middleware-u', @@ -641,6 +647,8 @@ Dict::Add('SK SK', 'Slovak', 'Slovenčina', [ 'Class:WebApplication/Attribute:webserver_id+' => '~~', 'Class:WebApplication/Attribute:webserver_name' => 'Názov Web serveru', 'Class:WebApplication/Attribute:webserver_name+' => '~~', + 'Class:WebApplication/Attribute:logo' => 'Logo~~', + 'Class:WebApplication/Attribute:logo+' => 'Used as object icon when displayed within impact analysis graphs~~', 'Class:WebApplication/Attribute:url' => 'URL', 'Class:WebApplication/Attribute:url+' => '~~', ]); @@ -838,7 +846,7 @@ Dict::Add('SK SK', 'Slovak', 'Slovenčina', [ Dict::Add('SK SK', 'Slovak', 'Slovenčina', [ 'Class:Tape' => 'Páska', - 'Class:Tape+' => '~~', + 'Class:Tape+' => 'A Tape (or cartridge) within '.ITOP_APPLICATION_SHORT.' is a removable piece of storage part of a Tape Library~~', 'Class:Tape/Attribute:name' => 'Názov', 'Class:Tape/Attribute:name+' => '~~', 'Class:Tape/Attribute:description' => 'Popis', @@ -888,6 +896,8 @@ Dict::Add('SK SK', 'Slovak', 'Slovenčina', [ 'Class:Software/Attribute:version+' => '~~', 'Class:Software/Attribute:documents_list' => 'Dokumenty', 'Class:Software/Attribute:documents_list+' => 'All the documents linked to this software~~', + 'Class:Software/Attribute:logo' => 'Logo~~', + 'Class:Software/Attribute:logo+' => 'Used as icon for all Software Instance objects using this Software, when displayed within impact analysis graphs~~', 'Class:Software/Attribute:type' => 'Typ', 'Class:Software/Attribute:type+' => '~~', 'Class:Software/Attribute:type/Value:DBServer' => 'DB Server', @@ -1053,6 +1063,8 @@ Dict::Add('SK SK', 'Slovak', 'Slovenčina', [ 'Class:OSVersion/Attribute:osfamily_id+' => '~~', 'Class:OSVersion/Attribute:osfamily_name' => 'Názov kategórie OS', 'Class:OSVersion/Attribute:osfamily_name+' => '~~', + 'Class:OSVersion/UniquenessRule:name_osfamily+' => 'Name must be unique in the OS family~~', + 'Class:OSVersion/UniquenessRule:name_osfamily' => 'this OS version already exists within the OS family~~', ]); // @@ -1062,6 +1074,8 @@ Dict::Add('SK SK', 'Slovak', 'Slovenčina', [ Dict::Add('SK SK', 'Slovak', 'Slovenčina', [ 'Class:OSFamily' => 'Kategória OS', 'Class:OSFamily+' => '~~', + 'Class:OSFamily/UniquenessRule:name+' => 'Name must be unique~~', + 'Class:OSFamily/UniquenessRule:name' => 'this OS family already exists~~', ]); // @@ -1144,6 +1158,8 @@ Dict::Add('SK SK', 'Slovak', 'Slovenčina', [ Dict::Add('SK SK', 'Slovak', 'Slovenčina', [ 'Class:NetworkDeviceType' => 'Typ sieťového zariadenia', 'Class:NetworkDeviceType+' => '~~', + 'Class:NetworkDeviceType/Attribute:logo' => 'Logo~~', + 'Class:NetworkDeviceType/Attribute:logo+' => 'Used as icon for all Network Device of this type, when displayed in console (details, summary card and impact analysis graphs)~~', 'Class:NetworkDeviceType/Attribute:networkdevicesdevices_list' => 'Sieťové zariadenia', 'Class:NetworkDeviceType/Attribute:networkdevicesdevices_list+' => 'All the network devices corresponding to this type~~', ]); @@ -1159,6 +1175,8 @@ Dict::Add('SK SK', 'Slovak', 'Slovenčina', [ 'Class:IOSVersion/Attribute:brand_id+' => '~~', 'Class:IOSVersion/Attribute:brand_name' => 'Názov značky', 'Class:IOSVersion/Attribute:brand_name+' => '~~', + 'Class:IOSVersion/UniquenessRule:name_brand+' => 'Name must be unique in the brand~~', + 'Class:IOSVersion/UniquenessRule:name_brand' => 'this IOS version already exists for this brand~~', ]); // @@ -1529,7 +1547,8 @@ Dict::Add('SK SK', 'Slovak', 'Slovenčina', [ 'ConfigMgmt:baseinfo' => 'General~~', 'ConfigMgmt:moreinfo' => 'CI specifics~~', 'Storage:moreinfo' => 'Storage specifics~~', - 'ConfigMgmt:otherinfo' => 'Dates and description~~', + 'ConfigMgmt:otherinfo' => 'Description~~', + 'ConfigMgmt:dates' => 'Dates~~', 'Software:moreinfo' => 'Software specifics~~', 'Phone:moreinfo' => 'Phone specifics~~', 'Server:baseinfo' => 'Všeobecné informácie', @@ -1620,8 +1639,8 @@ Dict::Add('SK SK', 'Slovak', 'Slovenčina', [ // Dict::Add('SK SK', 'Slovak', 'Slovenčina', [ - 'Class:PhysicalInterface/Attribute:org_id' => 'Org id~~', + 'Class:PhysicalInterface/Attribute:org_id' => 'Organization~~', 'Class:PhysicalInterface/Attribute:org_id+' => '~~', - 'Class:PhysicalInterface/Attribute:location_id' => 'Location id~~', + 'Class:PhysicalInterface/Attribute:location_id' => 'Location~~', 'Class:PhysicalInterface/Attribute:location_id+' => '~~', ]); diff --git a/datamodels/2.x/itop-config-mgmt/dictionaries/tr.dict.itop-config-mgmt.php b/datamodels/2.x/itop-config-mgmt/dictionaries/tr.dict.itop-config-mgmt.php index 3ea5fcd62..0757c47f7 100644 --- a/datamodels/2.x/itop-config-mgmt/dictionaries/tr.dict.itop-config-mgmt.php +++ b/datamodels/2.x/itop-config-mgmt/dictionaries/tr.dict.itop-config-mgmt.php @@ -493,6 +493,8 @@ Dict::Add('TR TR', 'Turkish', 'Türkçe', [ 'Class:ApplicationSolution/Attribute:functionalcis_list+' => 'Bu uygulama sistemü oluşturan tüm yapılandırma öğeleri', 'Class:ApplicationSolution/Attribute:businessprocess_list' => 'İş Süreçleri', 'Class:ApplicationSolution/Attribute:businessprocess_list+' => 'Bu uygulama sistemüne bağlı tüm iş süreçleri', + 'Class:ApplicationSolution/Attribute:logo' => 'Logo~~', + 'Class:ApplicationSolution/Attribute:logo+' => 'Used as object icon when displayed within impact analysis graphs~~', 'Class:ApplicationSolution/Attribute:status' => 'Durum', 'Class:ApplicationSolution/Attribute:status+' => '~~', 'Class:ApplicationSolution/Attribute:status/Value:active' => 'Aktif', @@ -514,6 +516,8 @@ Dict::Add('TR TR', 'Turkish', 'Türkçe', [ 'Class:BusinessProcess+' => '', 'Class:BusinessProcess/Attribute:applicationsolutions_list' => 'Uygulama sistemleri', 'Class:BusinessProcess/Attribute:applicationsolutions_list+' => 'Bu iş sürecini etkileyen tüm uygulama çözümleri', + 'Class:BusinessProcess/Attribute:logo' => 'Logo~~', + 'Class:BusinessProcess/Attribute:logo+' => 'Used as object icon when displayed within impact analysis graphs~~', 'Class:BusinessProcess/Attribute:status' => 'Durum', 'Class:BusinessProcess/Attribute:status+' => '~~', 'Class:BusinessProcess/Attribute:status/Value:active' => 'Aktif', @@ -610,6 +614,8 @@ Dict::Add('TR TR', 'Turkish', 'Türkçe', [ 'Class:MiddlewareInstance' => 'Ara katman yazılımı olayı', 'Class:MiddlewareInstance+' => '~~', 'Class:MiddlewareInstance/ComplementaryName' => '%1$s - %2$s~~', + 'Class:MiddlewareInstance/Attribute:logo' => 'Logo~~', + 'Class:MiddlewareInstance/Attribute:logo+' => 'Used as object icon when displayed within impact analysis graphs~~', 'Class:MiddlewareInstance/Attribute:middleware_id' => 'Ara katman yazılımı', 'Class:MiddlewareInstance/Attribute:middleware_id+' => '~~', 'Class:MiddlewareInstance/Attribute:middleware_name' => 'Ara katman yazılımı adı', @@ -642,6 +648,8 @@ Dict::Add('TR TR', 'Turkish', 'Türkçe', [ 'Class:WebApplication/Attribute:webserver_id+' => '~~', 'Class:WebApplication/Attribute:webserver_name' => 'Web Sunucusu Adı', 'Class:WebApplication/Attribute:webserver_name+' => '~~', + 'Class:WebApplication/Attribute:logo' => 'Logo~~', + 'Class:WebApplication/Attribute:logo+' => 'Used as object icon when displayed within impact analysis graphs~~', 'Class:WebApplication/Attribute:url' => 'URL', 'Class:WebApplication/Attribute:url+' => '~~', ]); @@ -839,7 +847,7 @@ Dict::Add('TR TR', 'Turkish', 'Türkçe', [ Dict::Add('TR TR', 'Turkish', 'Türkçe', [ 'Class:Tape' => 'Teyp', - 'Class:Tape+' => '~~', + 'Class:Tape+' => 'A Tape (or cartridge) within '.ITOP_APPLICATION_SHORT.' is a removable piece of storage part of a Tape Library~~', 'Class:Tape/Attribute:name' => 'İsim', 'Class:Tape/Attribute:name+' => '~~', 'Class:Tape/Attribute:description' => 'Açıklama', @@ -889,6 +897,8 @@ Dict::Add('TR TR', 'Turkish', 'Türkçe', [ 'Class:Software/Attribute:version+' => '~~', 'Class:Software/Attribute:documents_list' => 'Belgeler', 'Class:Software/Attribute:documents_list+' => 'Bu yazılımla bağlantılı tüm belgeler', + 'Class:Software/Attribute:logo' => 'Logo~~', + 'Class:Software/Attribute:logo+' => 'Used as icon for all Software Instance objects using this Software, when displayed within impact analysis graphs~~', 'Class:Software/Attribute:type' => 'Tip', 'Class:Software/Attribute:type+' => '~~', 'Class:Software/Attribute:type/Value:DBServer' => 'Veritabanı Sunucusu', @@ -1054,6 +1064,8 @@ Dict::Add('TR TR', 'Turkish', 'Türkçe', [ 'Class:OSVersion/Attribute:osfamily_id+' => '~~', 'Class:OSVersion/Attribute:osfamily_name' => 'OS Aile Adı', 'Class:OSVersion/Attribute:osfamily_name+' => '~~', + 'Class:OSVersion/UniquenessRule:name_osfamily+' => 'Name must be unique in the OS family~~', + 'Class:OSVersion/UniquenessRule:name_osfamily' => 'this OS version already exists within the OS family~~', ]); // @@ -1063,6 +1075,8 @@ Dict::Add('TR TR', 'Turkish', 'Türkçe', [ Dict::Add('TR TR', 'Turkish', 'Türkçe', [ 'Class:OSFamily' => 'OS ailesi', 'Class:OSFamily+' => '~~', + 'Class:OSFamily/UniquenessRule:name+' => 'Name must be unique~~', + 'Class:OSFamily/UniquenessRule:name' => 'this OS family already exists~~', ]); // @@ -1145,6 +1159,8 @@ Dict::Add('TR TR', 'Turkish', 'Türkçe', [ Dict::Add('TR TR', 'Turkish', 'Türkçe', [ 'Class:NetworkDeviceType' => 'Ağ Cihazı Tipi', 'Class:NetworkDeviceType+' => '~~', + 'Class:NetworkDeviceType/Attribute:logo' => 'Logo~~', + 'Class:NetworkDeviceType/Attribute:logo+' => 'Used as icon for all Network Device of this type, when displayed in console (details, summary card and impact analysis graphs)~~', 'Class:NetworkDeviceType/Attribute:networkdevicesdevices_list' => 'Ağ Aygıtları', 'Class:NetworkDeviceType/Attribute:networkdevicesdevices_list+' => 'Bu türde karşılık gelen tüm ağ aygıtları', ]); @@ -1160,6 +1176,8 @@ Dict::Add('TR TR', 'Turkish', 'Türkçe', [ 'Class:IOSVersion/Attribute:brand_id+' => '~~', 'Class:IOSVersion/Attribute:brand_name' => 'Marka Adı', 'Class:IOSVersion/Attribute:brand_name+' => '~~', + 'Class:IOSVersion/UniquenessRule:name_brand+' => 'Name must be unique in the brand~~', + 'Class:IOSVersion/UniquenessRule:name_brand' => 'this IOS version already exists for this brand~~', ]); // @@ -1530,7 +1548,8 @@ Dict::Add('TR TR', 'Turkish', 'Türkçe', [ 'ConfigMgmt:baseinfo' => 'General~~', 'ConfigMgmt:moreinfo' => 'CI specifics~~', 'Storage:moreinfo' => 'Storage specifics~~', - 'ConfigMgmt:otherinfo' => 'Dates and description~~', + 'ConfigMgmt:otherinfo' => 'Description~~', + 'ConfigMgmt:dates' => 'Dates~~', 'Software:moreinfo' => 'Software specifics~~', 'Phone:moreinfo' => 'Phone specifics~~', 'Server:baseinfo' => 'Genel Bilgi', @@ -1621,8 +1640,8 @@ Dict::Add('TR TR', 'Turkish', 'Türkçe', [ // Dict::Add('TR TR', 'Turkish', 'Türkçe', [ - 'Class:PhysicalInterface/Attribute:org_id' => 'Org id~~', + 'Class:PhysicalInterface/Attribute:org_id' => 'Organization~~', 'Class:PhysicalInterface/Attribute:org_id+' => '~~', - 'Class:PhysicalInterface/Attribute:location_id' => 'Location id~~', + 'Class:PhysicalInterface/Attribute:location_id' => 'Location~~', 'Class:PhysicalInterface/Attribute:location_id+' => '~~', ]); diff --git a/datamodels/2.x/itop-config-mgmt/dictionaries/zh_cn.dict.itop-config-mgmt.php b/datamodels/2.x/itop-config-mgmt/dictionaries/zh_cn.dict.itop-config-mgmt.php index e330c6139..48c17bfa0 100644 --- a/datamodels/2.x/itop-config-mgmt/dictionaries/zh_cn.dict.itop-config-mgmt.php +++ b/datamodels/2.x/itop-config-mgmt/dictionaries/zh_cn.dict.itop-config-mgmt.php @@ -509,6 +509,8 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', [ 'Class:ApplicationSolution/Attribute:functionalcis_list+' => '此应用方案包含的所有配置项', 'Class:ApplicationSolution/Attribute:businessprocess_list' => '业务流程', 'Class:ApplicationSolution/Attribute:businessprocess_list+' => '所有依赖此应用方案的业务流程', + 'Class:ApplicationSolution/Attribute:logo' => 'Logo~~', + 'Class:ApplicationSolution/Attribute:logo+' => 'Used as object icon when displayed within impact analysis graphs~~', 'Class:ApplicationSolution/Attribute:status' => '状态', 'Class:ApplicationSolution/Attribute:status+' => '', 'Class:ApplicationSolution/Attribute:status/Value:active' => '启用', @@ -530,6 +532,8 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', [ 'Class:BusinessProcess+' => '', 'Class:BusinessProcess/Attribute:applicationsolutions_list' => '应用方案', 'Class:BusinessProcess/Attribute:applicationsolutions_list+' => '所有影响此业务流程的应用方案', + 'Class:BusinessProcess/Attribute:logo' => 'Logo~~', + 'Class:BusinessProcess/Attribute:logo+' => 'Used as object icon when displayed within impact analysis graphs~~', 'Class:BusinessProcess/Attribute:status' => '状态', 'Class:BusinessProcess/Attribute:status+' => '', 'Class:BusinessProcess/Attribute:status/Value:active' => '启用', @@ -626,6 +630,8 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', [ 'Class:MiddlewareInstance' => '中间件实例', 'Class:MiddlewareInstance+' => '', 'Class:MiddlewareInstance/ComplementaryName' => '%1$s - %2$s', + 'Class:MiddlewareInstance/Attribute:logo' => 'Logo~~', + 'Class:MiddlewareInstance/Attribute:logo+' => 'Used as object icon when displayed within impact analysis graphs~~', 'Class:MiddlewareInstance/Attribute:middleware_id' => '中间件', 'Class:MiddlewareInstance/Attribute:middleware_id+' => '', 'Class:MiddlewareInstance/Attribute:middleware_name' => '名称', @@ -658,6 +664,8 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', [ 'Class:WebApplication/Attribute:webserver_id+' => '', 'Class:WebApplication/Attribute:webserver_name' => '名称', 'Class:WebApplication/Attribute:webserver_name+' => '', + 'Class:WebApplication/Attribute:logo' => 'Logo~~', + 'Class:WebApplication/Attribute:logo+' => 'Used as object icon when displayed within impact analysis graphs~~', 'Class:WebApplication/Attribute:url' => 'URL', 'Class:WebApplication/Attribute:url+' => '', ]); @@ -855,7 +863,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', [ Dict::Add('ZH CN', 'Chinese', '简体中文', [ 'Class:Tape' => '磁带', - 'Class:Tape+' => '', + 'Class:Tape+' => 'A Tape (or cartridge) within '.ITOP_APPLICATION_SHORT.' is a removable piece of storage part of a Tape Library~~', 'Class:Tape/Attribute:name' => '名称', 'Class:Tape/Attribute:name+' => '', 'Class:Tape/Attribute:description' => '描述', @@ -905,6 +913,8 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', [ 'Class:Software/Attribute:version+' => '', 'Class:Software/Attribute:documents_list' => '文档', 'Class:Software/Attribute:documents_list+' => '此软件的所有文档', + 'Class:Software/Attribute:logo' => 'Logo~~', + 'Class:Software/Attribute:logo+' => 'Used as icon for all Software Instance objects using this Software, when displayed within impact analysis graphs~~', 'Class:Software/Attribute:type' => '类型', 'Class:Software/Attribute:type+' => '', 'Class:Software/Attribute:type/Value:DBServer' => '数据库服务器', @@ -1070,6 +1080,8 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', [ 'Class:OSVersion/Attribute:osfamily_id+' => '', 'Class:OSVersion/Attribute:osfamily_name' => '名称', 'Class:OSVersion/Attribute:osfamily_name+' => '', + 'Class:OSVersion/UniquenessRule:name_osfamily+' => 'Name must be unique in the OS family~~', + 'Class:OSVersion/UniquenessRule:name_osfamily' => 'this OS version already exists within the OS family~~', ]); // @@ -1079,6 +1091,8 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', [ Dict::Add('ZH CN', 'Chinese', '简体中文', [ 'Class:OSFamily' => '操作系统家族', 'Class:OSFamily+' => '', + 'Class:OSFamily/UniquenessRule:name+' => 'Name must be unique~~', + 'Class:OSFamily/UniquenessRule:name' => 'this OS family already exists~~', ]); // @@ -1161,6 +1175,8 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', [ Dict::Add('ZH CN', 'Chinese', '简体中文', [ 'Class:NetworkDeviceType' => '网络设备类型', 'Class:NetworkDeviceType+' => '', + 'Class:NetworkDeviceType/Attribute:logo' => 'Logo~~', + 'Class:NetworkDeviceType/Attribute:logo+' => 'Used as icon for all Network Device of this type, when displayed in console (details, summary card and impact analysis graphs)~~', 'Class:NetworkDeviceType/Attribute:networkdevicesdevices_list' => '网络设备', 'Class:NetworkDeviceType/Attribute:networkdevicesdevices_list+' => '此类型的所有网络设备', ]); @@ -1176,6 +1192,8 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', [ 'Class:IOSVersion/Attribute:brand_id+' => '', 'Class:IOSVersion/Attribute:brand_name' => '名称', 'Class:IOSVersion/Attribute:brand_name+' => '', + 'Class:IOSVersion/UniquenessRule:name_brand+' => 'Name must be unique in the brand~~', + 'Class:IOSVersion/UniquenessRule:name_brand' => 'this IOS version already exists for this brand~~', ]); // @@ -1546,7 +1564,8 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', [ 'ConfigMgmt:baseinfo' => 'General~~', 'ConfigMgmt:moreinfo' => 'CI specifics~~', 'Storage:moreinfo' => 'Storage specifics~~', - 'ConfigMgmt:otherinfo' => 'Dates and description~~', + 'ConfigMgmt:otherinfo' => 'Description~~', + 'ConfigMgmt:dates' => 'Dates~~', 'Software:moreinfo' => 'Software specifics~~', 'Phone:moreinfo' => 'Phone specifics~~', 'Server:baseinfo' => '基本信息', @@ -1637,8 +1656,8 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', [ // Dict::Add('ZH CN', 'Chinese', '简体中文', [ - 'Class:PhysicalInterface/Attribute:org_id' => 'Org id~~', + 'Class:PhysicalInterface/Attribute:org_id' => 'Organization~~', 'Class:PhysicalInterface/Attribute:org_id+' => '~~', - 'Class:PhysicalInterface/Attribute:location_id' => 'Location id~~', + 'Class:PhysicalInterface/Attribute:location_id' => 'Location~~', 'Class:PhysicalInterface/Attribute:location_id+' => '~~', ]); diff --git a/datamodels/2.x/itop-config-mgmt/module.itop-config-mgmt.php b/datamodels/2.x/itop-config-mgmt/module.itop-config-mgmt.php index 9632bafae..12bea24bd 100755 --- a/datamodels/2.x/itop-config-mgmt/module.itop-config-mgmt.php +++ b/datamodels/2.x/itop-config-mgmt/module.itop-config-mgmt.php @@ -26,21 +26,22 @@ SetupWebPage::AddModule( ], 'data.struct' => [ 'data/en_us.data.itop-brand.xml', + 'data/en_us.data.itop-networkdevicetype.xml', 'data/en_us.data.itop-osfamily.xml', 'data/en_us.data.itop-osversion.xml', ], 'data.sample' => [ - 'data.sample.model.xml', - 'data.sample.networkdevicetype.xml', - 'data.sample.servers.xml', - 'data.sample.nw-devices.xml', - 'data.sample.software.xml', - 'data.sample.dbserver.xml', - 'data.sample.dbschema.xml', - 'data.sample.webserver.xml', - 'data.sample.webapp.xml', - 'data.sample.applications.xml', - 'data.sample.applicationsolutionci.xml', + 'data/data.sample.model.xml', + 'data/data.sample.networkdevicetype.xml', + 'data/data.sample.servers.xml', + 'data/data.sample.nw-devices.xml', + 'data/data.sample.software.xml', + 'data/data.sample.dbserver.xml', + 'data/data.sample.dbschema.xml', + 'data/data.sample.webserver.xml', + 'data/data.sample.webapp.xml', + 'data/data.sample.applications.xml', + 'data/data.sample.applicationsolutionci.xml', ], // Documentation diff --git a/datamodels/2.x/itop-container-mgmt/datamodel.itop-container-mgmt.xml b/datamodels/2.x/itop-container-mgmt/datamodel.itop-container-mgmt.xml index 21f92024b..d654e81ec 100644 --- a/datamodels/2.x/itop-container-mgmt/datamodel.itop-container-mgmt.xml +++ b/datamodels/2.x/itop-container-mgmt/datamodel.itop-container-mgmt.xml @@ -92,7 +92,40 @@ - + + + /** + * Overrides the GetIcon method to return the logo of the associated Software if any, otherwise the default icon of the class will be returned + * + */ + false + public + Custom + Get($sExtKeyCode); + if ($iObj > 0) { + $oObj = MetaModel::GetObject($sIconClass, $iObj, true, true); + $oImage = $oObj->Get($sIconAttCode); + $sIconUrl = $oImage->IsEmpty() ? '' : $oImage->GetDisplayURL($sIconClass, $iObj, $sIconAttCode); + if (strlen($sIconUrl) > 0) { + if ($bImgTag) { + return ""; + } else { + return $sIconUrl; + } + } + } + // Return the default image + return parent::GetIcon($bImgTag); + }]]> + + @@ -129,11 +162,27 @@ + + + + 10 + + + 20 + + + 30 + + + 40 + + +
- + 10 @@ -144,7 +193,7 @@ 10 - + 10 @@ -166,10 +215,10 @@ - + - 60 + 10 10 @@ -228,6 +277,10 @@ + + status + logo + @@ -235,9 +288,6 @@ - - status - @@ -255,6 +305,13 @@ DEL_AUTO all + lnkContainerApplicationToImage containerapplication_id @@ -315,11 +372,27 @@ + + + + 10 + + + 20 + + + 30 + + + 40 + + +
- + 10 @@ -352,17 +425,25 @@ - + - 50 - - - 60 + 10 10 + + + + 10 + + + + 20 + 20 @@ -740,6 +821,9 @@ ContainerCluster DEL_MANUAL all + + + role @@ -761,9 +845,6 @@ standalone false radio_horizontal - - - all @@ -834,11 +915,33 @@ + + + + 10 + + + 20 + + + 30 + + + 40 + + + 50 + + + 60 + + +
- + 10 @@ -877,17 +980,22 @@ - + - 50 - - - 60 + 10 10 + + + + 10 + + + 20 + 20 @@ -1025,11 +1133,27 @@ + + + + 10 + + + 20 + + + 30 + + + 40 + + +
- + 10 @@ -1059,17 +1183,22 @@ - + - 50 - - - 60 + 10 10 + + + + 10 + + + 20 + 20 @@ -1228,6 +1357,92 @@ + + + + ContainerHost + system_id + list + + false + false + + + + +
+ + + 140 + + +
+
+ + + + + containerhosts_list + both + + + + +
+ + + + ContainerImage + software_id + list + add_only + false + false + + + + +
+ + + 150 + + +
+
+
+ + + + ContainerHost + system_id + list + + false + false + + + + +
+ + + 140 + + +
+
+ + + + + containerhosts_list + both + + + + +
diff --git a/datamodels/2.x/itop-container-mgmt/dictionaries/en.dict.itop-container-mgmt.php b/datamodels/2.x/itop-container-mgmt/dictionaries/en.dict.itop-container-mgmt.php index cd17eb63d..93773a944 100644 --- a/datamodels/2.x/itop-container-mgmt/dictionaries/en.dict.itop-container-mgmt.php +++ b/datamodels/2.x/itop-container-mgmt/dictionaries/en.dict.itop-container-mgmt.php @@ -57,6 +57,8 @@ Dict::Add('EN US', 'English', 'English', [ 'Class:ContainerApplication/Attribute:descriptor+' => 'File describing how to deploy the application on the container platform (e.g., Docker Compose, Helm Chart, etc.)', 'Class:ContainerApplication/Attribute:containervirtualhost_id' => 'Container Host', 'Class:ContainerApplication/Attribute:containervirtualhost_id+' => 'Container Platform on which the application is running', + 'Class:ContainerApplication/Attribute:logo' => 'Logo', + 'Class:ContainerApplication/Attribute:logo+' => 'Used as object icon when this ContainerApplication is displayed within impact analysis graphs', 'Class:ContainerApplication/Attribute:containertype_id' => 'Container type', 'Class:ContainerApplication/Attribute:containertype_id+' => 'Technology used for containerization', 'Class:ContainerApplication/Attribute:containerimages_list' => 'Container images', @@ -154,3 +156,18 @@ Dict::Add('EN US', 'English', 'English', [ 'Class:ContainerImageType' => 'Container Image Type', 'Class:ContainerImageType+' => 'Typology of container images', ]); + +// +// Class Cloud, Server and Virtual Machine +// + +Dict::Add('EN US', 'English', 'English', [ + 'Class:Cloud/Attribute:containerhosts_list' => 'Container Hosts', + 'Class:Cloud/Attribute:containerhosts_list+' => 'List of container hosts running in this cloud', + 'Class:Server/Attribute:containerhosts_list' => 'Container Hosts', + 'Class:Server/Attribute:containerhosts_list+' => 'List of container hosts running on this server', + 'Class:VirtualMachine/Attribute:containerhosts_list' => 'Container Hosts', + 'Class:VirtualMachine/Attribute:containerhosts_list+' => 'List of container hosts running on this virtual machine', + 'Class:Software/Attribute:containerimages_list' => 'Container Images', + 'Class:Software/Attribute:containerimages_list+' => 'List of container images running this Software', +]); diff --git a/datamodels/2.x/itop-container-mgmt/dictionaries/fr.dict.itop-container-mgmt.php b/datamodels/2.x/itop-container-mgmt/dictionaries/fr.dict.itop-container-mgmt.php index 3352216c0..b645749a1 100644 --- a/datamodels/2.x/itop-container-mgmt/dictionaries/fr.dict.itop-container-mgmt.php +++ b/datamodels/2.x/itop-container-mgmt/dictionaries/fr.dict.itop-container-mgmt.php @@ -24,8 +24,8 @@ Dict::Add('FR FR', 'French', 'Français', [ Dict::Add('FR FR', 'French', 'Français', [ 'Class:ContainerImage/Name' => '%1$s %2$s', 'Class:ContainerImage/ComplementaryName' => '%1$s - %2$s', - 'Class:ContainerImage' => 'Image pour Conteneur', - 'Class:ContainerImage+' => 'L\'image d\'un logiciel, constituant d\'une Application Conteneurisée', + 'Class:ContainerImage' => 'Image pour conteneur', + 'Class:ContainerImage+' => 'L\'image d\'un logiciel, constituant d\'une Application conteneurisée', 'Class:ContainerImage/Attribute:name' => 'Nom', 'Class:ContainerImage/Attribute:name+' => '', 'Class:ContainerImage/Attribute:version' => 'Version', @@ -33,15 +33,21 @@ Dict::Add('FR FR', 'French', 'Français', [ 'Class:ContainerImage/Attribute:description' => 'Description', 'Class:ContainerImage/Attribute:description+' => '', 'Class:ContainerImage/Attribute:publisher' => 'Editeur', - 'Class:ContainerImage/Attribute:publisher+' => 'Fournisseur de l\image', + 'Class:ContainerImage/Attribute:publisher+' => 'Fournisseur de l\'image', 'Class:ContainerImage/Attribute:image' => 'Image', 'Class:ContainerImage/Attribute:image+' => 'Détail permettant de récupérer l\'image sur la plateforme d\'hébergement appropriée', 'Class:ContainerImage/Attribute:type_id' => 'Type', - 'Class:ContainerImage/Attribute:type_id+' => 'Type d\image', + 'Class:ContainerImage/Attribute:type_id+' => 'Type d\'image', 'Class:ContainerImage/Attribute:software_id' => 'Logiciel', 'Class:ContainerImage/Attribute:software_id+' => '', 'Class:ContainerImage/Attribute:containerapplications_list' => 'Applications conteneurisées', 'Class:ContainerImage/Attribute:containerapplications_list+' => 'Les applications qui utilisent cette image', + 'Class:ContainerImage/Attribute:containerapplications_list/UI:Links:Create:Button+' => 'Créer une %4$s', + 'Class:ContainerImage/Attribute:containerapplications_list/UI:Links:Create:Modal:Title' => 'Ajouter %2$s à une nouvelle %4$s', + 'Class:ContainerImage/Attribute:containerapplications_list/UI:Links:Delete:Button+' => 'Supprimer cette %4$s', + 'Class:ContainerImage/Attribute:containerapplications_list/UI:Links:Delete:Modal:Title' => 'Supprimer une %4$s', + 'Class:ContainerImage/Attribute:containerapplications_list/UI:Links:Remove:Button+' => 'Retirer %2$s de cette %4$s', + 'Class:ContainerImage/Attribute:containerapplications_list/UI:Links:Remove:Modal:Title' => 'Retirer %1$s de cette %4$s', ]); // @@ -51,16 +57,24 @@ Dict::Add('FR FR', 'French', 'Français', [ Dict::Add('FR FR', 'French', 'Français', [ 'Class:ContainerApplication/Name' => '%1$s', 'Class:ContainerApplication/ComplementaryName' => '%1$s', - 'Class:ContainerApplication' => 'Application Conteneurisée', - 'Class:ContainerApplication+' => 'Une application déployée sur une Plateforme de Conteneurisation', + 'Class:ContainerApplication' => 'Application conteneurisée', + 'Class:ContainerApplication+' => 'Une application déployée sur une Plateforme de conteneurisation', 'Class:ContainerApplication/Attribute:descriptor' => 'Fichier de déploiement', 'Class:ContainerApplication/Attribute:descriptor+' => 'Fichier décrivant la manière de déployer l\'application sur la plateforme de conteneurisation (par exemple, Docker Compose, Helm Chart, etc.)', 'Class:ContainerApplication/Attribute:containervirtualhost_id' => 'Hôte', 'Class:ContainerApplication/Attribute:containervirtualhost_id+' => 'Plateforme de conteneurisation sur laquelle cette application est déployée', + 'Class:ContainerApplication/Attribute:logo' => 'Logo', + 'Class:ContainerApplication/Attribute:logo+' => 'Utilisé comme icône de l\'objet dans les graphes d\'analyse d\'impact', 'Class:ContainerApplication/Attribute:containertype_id' => 'Type de conteneur', 'Class:ContainerApplication/Attribute:containertype_id+' => 'Typologie de plateforme de conteneurisation', 'Class:ContainerApplication/Attribute:containerimages_list' => 'Images', 'Class:ContainerApplication/Attribute:containerimages_list+' => 'Images des conteneurs constitutifs de cette application', + 'Class:ContainerApplication/Attribute:containerimages_list/UI:Links:Create:Button+' => 'Créer une %4$s', + 'Class:ContainerApplication/Attribute:containerimages_list/UI:Links:Create:Modal:Title' => 'Ajouter une %4$s à %2$s', + 'Class:ContainerApplication/Attribute:containerimages_list/UI:Links:Delete:Button+' => 'Supprimer cette %4$s', + 'Class:ContainerApplication/Attribute:containerimages_list/UI:Links:Delete:Modal:Title' => 'Supprimer une %4$s', + 'Class:ContainerApplication/Attribute:containerimages_list/UI:Links:Remove:Button+' => 'Retirer cette %4$s', + 'Class:ContainerApplication/Attribute:containerimages_list/UI:Links:Remove:Modal:Title' => 'Retirer cette %4$s de son %1$s', ]); // @@ -68,7 +82,7 @@ Dict::Add('FR FR', 'French', 'Français', [ // Dict::Add('FR FR', 'French', 'Français', [ - 'Class:lnkContainerApplicationToImage' => 'Lien Application / Image pour Conteneur', + 'Class:lnkContainerApplicationToImage' => 'Lien Application conteneurisée / Image pour conteneur', 'Class:lnkContainerApplicationToImage+' => '', 'Class:lnkContainerApplicationToImage/Name' => '%1$s / %2$s', 'Class:lnkContainerApplicationToImage/Name+' => '', @@ -85,7 +99,7 @@ Dict::Add('FR FR', 'French', 'Français', [ Dict::Add('FR FR', 'French', 'Français', [ 'Class:ContainerVirtualHost/Name' => '%1$s', 'Class:ContainerVirtualHost/ComplementaryName' => '', - 'Class:ContainerVirtualHost' => 'Plateforme de Conteneurisation', + 'Class:ContainerVirtualHost' => 'Plateforme de conteneurisation', 'Class:ContainerVirtualHost+' => 'Plateforme sur laquelle des applications s\'exécutent dans des conteneurs', 'Class:ContainerVirtualHost/Attribute:containertype_id' => 'Type de plateforme', 'Class:ContainerVirtualHost/Attribute:containertype_id+' => 'Technologie de conteneurisation utilisée', @@ -93,6 +107,13 @@ Dict::Add('FR FR', 'French', 'Français', [ 'Class:ContainerVirtualHost/Attribute:status+' => 'État de la plateforme de conteneurisation', 'Class:ContainerVirtualHost/Attribute:containerapplications_list' => 'Applications', 'Class:ContainerVirtualHost/Attribute:containerapplications_list+' => 'Applications qui sont déployées sur cette plateforme', + 'Class:ContainerVirtualHost/Attribute:containerapplications_list/UI:Links:Create:Button+' => 'Créer une %4$s', + 'Class:ContainerVirtualHost/Attribute:containerapplications_list/UI:Links:Create:Modal:Title' => 'Ajouter une %4$s à %2$s', + 'Class:ContainerVirtualHost/Attribute:containerapplications_list/UI:Links:Delete:Button+' => 'Supprimer cette %4$s', + 'Class:ContainerVirtualHost/Attribute:containerapplications_list/UI:Links:Delete:Modal:Title' => 'Supprimer une %4$s', + 'Class:ContainerVirtualHost/Attribute:containerapplications_list/UI:Links:Remove:Button+' => 'Retirer cette %4$s', + 'Class:ContainerVirtualHost/Attribute:containerapplications_list/UI:Links:Remove:Modal:Title' => 'Retirer cette %4$s de sa %1$s', + 'ContainerVirtualHost:baseinfo' => 'Informations générales', 'ContainerVirtualHost:moreinfo' => 'Spécificités de la conteneurisation', ]); @@ -104,8 +125,8 @@ Dict::Add('FR FR', 'French', 'Français', [ Dict::Add('FR FR', 'French', 'Français', [ 'Class:ContainerHost/Name' => '%1$s', 'Class:ContainerHost/ComplementaryName' => '%1$s-%2$s', - 'Class:ContainerHost' => 'Hôte pour Conteneurs', - 'Class:ContainerHost+' => 'Logiciel hôte dédié à l\'exécution de conteneurs. C\'est l\'élément de base d\'une Plateforme de Conteneurisation', + 'Class:ContainerHost' => 'Hôte pour conteneurs', + 'Class:ContainerHost+' => 'Logiciel hôte dédié à l\'exécution de conteneurs. C\'est l\'élément de base d\'une Plateforme de conteneurisation', 'Class:ContainerHost/Attribute:containercluster_id' => 'Grappe pour conteneurs', 'Class:ContainerHost/Attribute:containercluster_id+' => 'Grappe d\'hôtes pour conteneurs', 'Class:ContainerHost/Attribute:role' => 'Rôle', @@ -114,7 +135,7 @@ Dict::Add('FR FR', 'French', 'Français', [ 'Class:ContainerHost/Attribute:role/Value:worker' => 'Esclave', 'Class:ContainerHost/Attribute:role/Value:standalone' => 'Autonome', 'Class:ContainerHost/Attribute:system_id' => 'Système', - 'Class:ContainerHost/Attribute:system_id+' => 'Le système sur lequel cet hôte tourne. Cela peut être un Serveur, une Machine Virtuelle ou un Nuage', + 'Class:ContainerHost/Attribute:system_id+' => 'Le système sur lequel cet hôte tourne. Cela peut être un Serveur, une Machine virtuelle ou un Nuage', ]); // @@ -124,8 +145,8 @@ Dict::Add('FR FR', 'French', 'Français', [ Dict::Add('FR FR', 'French', 'Français', [ 'Class:ContainerCluster/Name' => '%1$s', 'Class:ContainerCluster/ComplementaryName' => '', - 'Class:ContainerCluster' => 'Grappe pour Conteneurs', - 'Class:ContainerCluster+' => 'Plateforme de Conteneurisation constitué d\'une grappe d\'Hôtes pour Conteneurs', + 'Class:ContainerCluster' => 'Grappe pour conteneurs', + 'Class:ContainerCluster+' => 'Plateforme de conteneurisation constituée d\'une grappe d\'Hôtes pour conteneurs', 'Class:ContainerCluster/Attribute:redundancy' => 'Configuration de la redondance', 'Class:ContainerCluster/Attribute:redundancy/disabled' => 'La grappe est opérationnelle si tous les hôtes qui la composent sont opérationnels', 'Class:ContainerCluster/Attribute:redundancy/count' => 'Nombre minimal d\'hôtes pour que la grappe soit opérationnelle : %1$s', @@ -155,3 +176,44 @@ Dict::Add('FR FR', 'French', 'Français', [ 'Class:ContainerImageType' => 'Type d\'image', 'Class:ContainerImageType+' => 'Typologie d\'images pour container', ]); + +// +// Class Cloud, Server and Virtual Machine +// + +Dict::Add('FR FR', 'French', 'Français', [ + 'Class:Cloud/Attribute:containerhosts_list' => 'Hôtes pour conteneurs', + 'Class:Cloud/Attribute:containerhosts_list+' => 'Liste des hôtes hébergés dans ce nuage', + 'Class:Cloud/Attribute:containerhosts_list/UI:Links:Create:Button+' => 'Créer un %4$s', + 'Class:Cloud/Attribute:containerhosts_list/UI:Links:Create:Modal:Title' => 'Ajouter un %4$s à %2$s', + 'Class:Cloud/Attribute:containerhosts_list/UI:Links:Delete:Button+' => 'Supprimer ce %4$s', + 'Class:Cloud/Attribute:containerhosts_list/UI:Links:Delete:Modal:Title' => 'Supprimer un %4$s', + 'Class:Cloud/Attribute:containerhosts_list/UI:Links:Remove:Button+' => 'Retirer ce %4$s', + 'Class:Cloud/Attribute:containerhosts_list/UI:Links:Remove:Modal:Title' => 'Retirer ce %4$s de son %1$s', + + 'Class:Server/Attribute:containerhosts_list' => 'Hôtes pour conteneurs', + 'Class:Server/Attribute:containerhosts_list+' => 'Liste des hôtes pour conteneurs hébergés sur ce serveur', + 'Class:Server/Attribute:containerhosts_list/UI:Links:Create:Button+' => 'Créer un %4$s', + 'Class:Server/Attribute:containerhosts_list/UI:Links:Create:Modal:Title' => 'Ajouter un %4$s à %2$s', + 'Class:Server/Attribute:containerhosts_list/UI:Links:Delete:Button+' => 'Supprimer ce %4$s', + 'Class:Server/Attribute:containerhosts_list/UI:Links:Delete:Modal:Title' => 'Supprimer un %4$s', + 'Class:Server/Attribute:containerhosts_list/UI:Links:Remove:Button+' => 'Retirer ce %4$s', + 'Class:Server/Attribute:containerhosts_list/UI:Links:Remove:Modal:Title' => 'Retirer ce %4$s de son %1$s', + + 'Class:VirtualMachine/Attribute:containerhosts_list' => 'Hôtes pour conteneurs', + 'Class:VirtualMachine/Attribute:containerhosts_list+' => 'Liste des hôtes pour conteneurs hébergés sur cette machine virtuelle', + 'Class:VirtualMachine/Attribute:containerhosts_list/UI:Links:Create:Button+' => 'Créer un %4$s', + 'Class:VirtualMachine/Attribute:containerhosts_list/UI:Links:Create:Modal:Title' => 'Ajouter un %4$s à %2$s', + 'Class:VirtualMachine/Attribute:containerhosts_list/UI:Links:Delete:Button+' => 'Supprimer ce %4$s', + 'Class:VirtualMachine/Attribute:containerhosts_list/UI:Links:Delete:Modal:Title' => 'Supprimer un %4$s', + 'Class:VirtualMachine/Attribute:containerhosts_list/UI:Links:Remove:Button+' => 'Retirer ce %4$s', + 'Class:VirtualMachine/Attribute:containerhosts_list/UI:Links:Remove:Modal:Title' => 'Retirer ce %4$s de sa %1$s', + + 'Class:Software/Attribute:containerimages_list' => 'Images pour conteneurs', + 'Class:Software/Attribute:containerimages_list+' => 'Liste des images pour conteneurs qui tournent ce Logiciel', + 'Class:Software/Attribute:containerimages_list/UI:Links:Create:Modal:Title' => 'Ajouter une %4$s à %2$s', + 'Class:Software/Attribute:containerimages_list/UI:Links:Delete:Button+' => 'Supprimer cette %4$s', + 'Class:Software/Attribute:containerimages_list/UI:Links:Delete:Modal:Title' => 'Supprimer une %4$s', + 'Class:Software/Attribute:containerimages_list/UI:Links:Remove:Button+' => 'Retirer cette %4$s', + 'Class:Software/Attribute:containerimages_list/UI:Links:Remove:Modal:Title' => 'Retirer cette %4$s de son %1$s', +]); diff --git a/datamodels/2.x/itop-datacenter-mgmt/data.sample.racks.xml b/datamodels/2.x/itop-datacenter-mgmt/data/data.sample.racks.xml old mode 100755 new mode 100644 similarity index 100% rename from datamodels/2.x/itop-datacenter-mgmt/data.sample.racks.xml rename to datamodels/2.x/itop-datacenter-mgmt/data/data.sample.racks.xml diff --git a/datamodels/2.x/itop-datacenter-mgmt/datamodel.itop-datacenter-mgmt.xml b/datamodels/2.x/itop-datacenter-mgmt/datamodel.itop-datacenter-mgmt.xml index e3d2323cf..be9652e86 100755 --- a/datamodels/2.x/itop-datacenter-mgmt/datamodel.itop-datacenter-mgmt.xml +++ b/datamodels/2.x/itop-datacenter-mgmt/datamodel.itop-datacenter-mgmt.xml @@ -20,7 +20,7 @@ @@ -105,7 +105,7 @@ 20 - + 10 @@ -249,7 +249,7 @@ @@ -290,7 +290,7 @@ 10 - + 10 @@ -338,25 +338,25 @@ 20 - + 10 - 120 + 10 - 130 + 20 - 140 + 30 - + 20 - 150 + 10 @@ -503,7 +503,7 @@ 10 - + 10 @@ -545,25 +545,25 @@ 20 - + 10 - 100 + 10 - 110 + 20 - 120 + 30 - + 20 - 130 + 10 @@ -706,7 +706,7 @@ 10 - + 10 @@ -748,25 +748,25 @@ 20 - + 10 - 100 + 10 - 110 + 20 - 120 + 30 - + 20 - 130 + 10 @@ -929,7 +929,7 @@ 10 - + 10 @@ -977,25 +977,25 @@ 20 - + 10 - 120 + 10 - 130 + 20 - 140 + 30 - + 20 - 150 + 10 diff --git a/datamodels/2.x/itop-datacenter-mgmt/module.itop-datacenter-mgmt.php b/datamodels/2.x/itop-datacenter-mgmt/module.itop-datacenter-mgmt.php index 30d29a8c9..7d37bbe2a 100755 --- a/datamodels/2.x/itop-datacenter-mgmt/module.itop-datacenter-mgmt.php +++ b/datamodels/2.x/itop-datacenter-mgmt/module.itop-datacenter-mgmt.php @@ -45,7 +45,7 @@ SetupWebPage::AddModule( ], 'data.sample' => [ // add your sample data XML files here, - 'data.sample.racks.xml', + 'data/data.sample.racks.xml', ], // Documentation diff --git a/datamodels/2.x/itop-endusers-devices/datamodel.itop-endusers-devices.xml b/datamodels/2.x/itop-endusers-devices/datamodel.itop-endusers-devices.xml index 2014ea758..5fa8387ba 100755 --- a/datamodels/2.x/itop-endusers-devices/datamodel.itop-endusers-devices.xml +++ b/datamodels/2.x/itop-endusers-devices/datamodel.itop-endusers-devices.xml @@ -196,7 +196,7 @@ 10 - + 10 @@ -241,25 +241,25 @@ 20 - + 10 - 110 + 10 - 120 + 20 - 130 + 30 - + 20 - 140 + 10 @@ -407,7 +407,7 @@ 10 - + 10 @@ -458,25 +458,25 @@ 20 - + 10 - 130 + 10 - 140 + 20 - 150 + 30 - + 20 - 160 + 10 @@ -616,7 +616,7 @@ 10 - + 10 @@ -661,25 +661,25 @@ 20 - + 10 - 110 + 10 - 120 + 20 - 130 + 30 - + 20 - 140 + 10 @@ -815,7 +815,7 @@ 10 - + 10 @@ -857,25 +857,25 @@ 20 - + 10 - 100 + 10 - 110 + 20 - 120 + 30 - + 20 - 130 + 10 @@ -1061,7 +1061,7 @@ 10 - + 10 @@ -1118,7 +1118,7 @@ 20 - + 10 @@ -1132,7 +1132,7 @@ - + 20 @@ -1282,7 +1282,7 @@ 10 - + 10 @@ -1324,7 +1324,7 @@ 20 - + 10 @@ -1338,7 +1338,7 @@ - + 20 @@ -1482,7 +1482,7 @@ 10 - + 10 @@ -1524,25 +1524,25 @@ 20 - + 10 - 100 + 10 - 110 + 20 - 120 + 30 - + 20 - 130 + 10 diff --git a/datamodels/2.x/itop-faq-light/data.sample.faq-domains.xml b/datamodels/2.x/itop-faq-light/data/data.sample.faq-domains.xml similarity index 100% rename from datamodels/2.x/itop-faq-light/data.sample.faq-domains.xml rename to datamodels/2.x/itop-faq-light/data/data.sample.faq-domains.xml diff --git a/datamodels/2.x/itop-faq-light/dictionaries/en.dict.itop-faq-light.php b/datamodels/2.x/itop-faq-light/dictionaries/en.dict.itop-faq-light.php index 1eb79cc9d..0335f9399 100644 --- a/datamodels/2.x/itop-faq-light/dictionaries/en.dict.itop-faq-light.php +++ b/datamodels/2.x/itop-faq-light/dictionaries/en.dict.itop-faq-light.php @@ -77,7 +77,7 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:FAQCategory' => 'FAQ Category', - 'Class:FAQCategory+' => 'Category for FAQ', + 'Class:FAQCategory+' => 'Typology for Frequently Asked Questions (FAQ)', 'Class:FAQCategory/Attribute:name' => 'Name', 'Class:FAQCategory/Attribute:name+' => '', 'Class:FAQCategory/Attribute:faq_list' => 'FAQs', diff --git a/datamodels/2.x/itop-faq-light/dictionaries/fr.dict.itop-faq-light.php b/datamodels/2.x/itop-faq-light/dictionaries/fr.dict.itop-faq-light.php index f795b6cdc..717cb25bc 100644 --- a/datamodels/2.x/itop-faq-light/dictionaries/fr.dict.itop-faq-light.php +++ b/datamodels/2.x/itop-faq-light/dictionaries/fr.dict.itop-faq-light.php @@ -36,7 +36,7 @@ Dict::Add('FR FR', 'French', 'Français', [ Dict::Add('FR FR', 'French', 'Français', [ 'Class:FAQCategory' => 'Catégorie de FAQ', - 'Class:FAQCategory+' => 'Catégorie de FAQ', + 'Class:FAQCategory+' => 'Typologie. Segmentation des Questions fréquement posées (FAQ)', 'Class:FAQCategory/Attribute:name' => 'Nom', 'Class:FAQCategory/Attribute:name+' => '', 'Class:FAQCategory/Attribute:faq_list' => 'FAQs', diff --git a/datamodels/2.x/itop-faq-light/dictionaries/sk.dict.itop-faq-light.php b/datamodels/2.x/itop-faq-light/dictionaries/sk.dict.itop-faq-light.php index eb2138a0d..84ac7470e 100644 --- a/datamodels/2.x/itop-faq-light/dictionaries/sk.dict.itop-faq-light.php +++ b/datamodels/2.x/itop-faq-light/dictionaries/sk.dict.itop-faq-light.php @@ -36,7 +36,7 @@ Dict::Add('SK SK', 'Slovak', 'Slovenčina', [ Dict::Add('SK SK', 'Slovak', 'Slovenčina', [ 'Class:FAQCategory' => 'FAQ Category~~', - 'Class:FAQCategory+' => 'Category for FAQ~~', + 'Class:FAQCategory+' => 'Typology for Frequently Asked Questions (FAQ)~~', 'Class:FAQCategory/Attribute:name' => 'Name~~', 'Class:FAQCategory/Attribute:name+' => '~~', 'Class:FAQCategory/Attribute:faq_list' => 'FAQs~~', diff --git a/datamodels/2.x/itop-faq-light/module.itop-faq-light.php b/datamodels/2.x/itop-faq-light/module.itop-faq-light.php index 476a797f3..a342b2e4e 100755 --- a/datamodels/2.x/itop-faq-light/module.itop-faq-light.php +++ b/datamodels/2.x/itop-faq-light/module.itop-faq-light.php @@ -26,7 +26,7 @@ SetupWebPage::AddModule( //'data.struct.itop-knownerror-mgmt.xml', ], 'data.sample' => [ - 'data.sample.faq-domains.xml', + 'data/data.sample.faq-domains.xml', ], // Documentation diff --git a/datamodels/2.x/itop-full-itil/datamodel.itop-full-itil.xml b/datamodels/2.x/itop-full-itil/datamodel.itop-full-itil.xml index 3ec34fbd2..bd40d7a6b 100644 --- a/datamodels/2.x/itop-full-itil/datamodel.itop-full-itil.xml +++ b/datamodels/2.x/itop-full-itil/datamodel.itop-full-itil.xml @@ -64,7 +64,7 @@ - + diff --git a/datamodels/2.x/itop-incident-mgmt-itil/datamodel.itop-incident-mgmt-itil.xml b/datamodels/2.x/itop-incident-mgmt-itil/datamodel.itop-incident-mgmt-itil.xml index 9fd558c82..3be94a74b 100755 --- a/datamodels/2.x/itop-incident-mgmt-itil/datamodel.itop-incident-mgmt-itil.xml +++ b/datamodels/2.x/itop-incident-mgmt-itil/datamodel.itop-incident-mgmt-itil.xml @@ -698,6 +698,29 @@ + + resolved + + + SetCurrentDate + + resolution_date + + + + SetElapsedTime + + time_spent + start_date + DefaultWorkingTimeComputer + + + + ResolveChildTickets + + + + @@ -1029,29 +1052,6 @@ - - resolved - - - SetCurrentDate - - resolution_date - - - - SetElapsedTime - - time_spent - start_date - DefaultWorkingTimeComputer - - - - ResolveChildTickets - - - - @@ -1862,7 +1862,7 @@ - + diff --git a/datamodels/2.x/itop-incident-mgmt-itil/dictionaries/en.dict.itop-incident-mgmt-itil.php b/datamodels/2.x/itop-incident-mgmt-itil/dictionaries/en.dict.itop-incident-mgmt-itil.php index 288126e53..2966031a0 100644 --- a/datamodels/2.x/itop-incident-mgmt-itil/dictionaries/en.dict.itop-incident-mgmt-itil.php +++ b/datamodels/2.x/itop-incident-mgmt-itil/dictionaries/en.dict.itop-incident-mgmt-itil.php @@ -62,7 +62,7 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:Incident' => 'Incident', - 'Class:Incident+' => '', + 'Class:Incident+' => 'Ticket type for managing malfunctions of a service or configuration elements', 'Class:Incident/Attribute:status' => 'Status', 'Class:Incident/Attribute:status+' => '', 'Class:Incident/Attribute:status/Value:new' => 'New', diff --git a/datamodels/2.x/itop-incident-mgmt-itil/dictionaries/fr.dict.itop-incident-mgmt-itil.php b/datamodels/2.x/itop-incident-mgmt-itil/dictionaries/fr.dict.itop-incident-mgmt-itil.php index 521edc4ea..c7672c702 100644 --- a/datamodels/2.x/itop-incident-mgmt-itil/dictionaries/fr.dict.itop-incident-mgmt-itil.php +++ b/datamodels/2.x/itop-incident-mgmt-itil/dictionaries/fr.dict.itop-incident-mgmt-itil.php @@ -50,7 +50,7 @@ Dict::Add('FR FR', 'French', 'Français', [ Dict::Add('FR FR', 'French', 'Français', [ 'Class:Incident' => 'Incident', - 'Class:Incident+' => '', + 'Class:Incident+' => 'Type de Ticket pour gérer les dysfonctionnements d\'un service ou d\'éléments de configuration', 'Class:Incident/Attribute:status' => 'Etat', 'Class:Incident/Attribute:status+' => '', 'Class:Incident/Attribute:status/Value:new' => 'Nouveau', @@ -115,9 +115,9 @@ Dict::Add('FR FR', 'French', 'Français', [ 'Class:Incident/Attribute:service_id+' => '', 'Class:Incident/Attribute:service_name' => 'Nom du service', 'Class:Incident/Attribute:service_name+' => '', - 'Class:Incident/Attribute:servicesubcategory_id' => 'Sous catégorie de service', + 'Class:Incident/Attribute:servicesubcategory_id' => 'Sous-catégorie de service', 'Class:Incident/Attribute:servicesubcategory_id+' => '', - 'Class:Incident/Attribute:servicesubcategory_name' => 'Nom Sous catégorie de service', + 'Class:Incident/Attribute:servicesubcategory_name' => 'Nom Sous-catégorie de service', 'Class:Incident/Attribute:servicesubcategory_name+' => '', 'Class:Incident/Attribute:escalation_flag' => 'Ticket à surveiller', 'Class:Incident/Attribute:escalation_flag+' => '', diff --git a/datamodels/2.x/itop-knownerror-mgmt/dictionaries/en.dict.itop-knownerror-mgmt.php b/datamodels/2.x/itop-knownerror-mgmt/dictionaries/en.dict.itop-knownerror-mgmt.php index b318e6b4b..1a73802a9 100644 --- a/datamodels/2.x/itop-knownerror-mgmt/dictionaries/en.dict.itop-knownerror-mgmt.php +++ b/datamodels/2.x/itop-knownerror-mgmt/dictionaries/en.dict.itop-knownerror-mgmt.php @@ -53,7 +53,7 @@ Dict::Add('EN US', 'English', 'English', [ 'Class:KnownError' => 'Known Error', - 'Class:KnownError+' => 'Error documented for a known issue', + 'Class:KnownError+' => 'Error with multiple occurrences, documented during a Problem management, to ease troubleshooting.', 'Class:KnownError/Attribute:name' => 'Name', 'Class:KnownError/Attribute:name+' => 'This is expected to be a unique identifier within the Known Errors of this organization', 'Class:KnownError/Attribute:org_id' => 'Organization', @@ -101,7 +101,7 @@ Dict::Add('EN US', 'English', 'English', [ // Dict::Add('EN US', 'English', 'English', [ - 'Class:lnkErrorToFunctionalCI' => 'Link Error / FunctionalCI', + 'Class:lnkErrorToFunctionalCI' => 'Link KnownError / FunctionalCI', 'Class:lnkErrorToFunctionalCI+' => 'Infra related to a known error', 'Class:lnkErrorToFunctionalCI/Name' => '%1$s / %2$s', 'Class:lnkErrorToFunctionalCI/Attribute:functionalci_id' => 'CI', @@ -121,8 +121,8 @@ Dict::Add('EN US', 'English', 'English', [ // Dict::Add('EN US', 'English', 'English', [ - 'Class:lnkDocumentToError' => 'Link Documents / Errors', - 'Class:lnkDocumentToError+' => 'A link between a document and a known error', + 'Class:lnkDocumentToError' => 'Link Document / Known Error', + 'Class:lnkDocumentToError+' => 'Used when a Document is pertinent for a Known Error', 'Class:lnkDocumentToError/Name' => '%1$s / %2$s', 'Class:lnkDocumentToError/Attribute:document_id' => 'Document', 'Class:lnkDocumentToError/Attribute:document_id+' => '', diff --git a/datamodels/2.x/itop-knownerror-mgmt/dictionaries/fr.dict.itop-knownerror-mgmt.php b/datamodels/2.x/itop-knownerror-mgmt/dictionaries/fr.dict.itop-knownerror-mgmt.php index 32c1ffd62..3571cd9f6 100644 --- a/datamodels/2.x/itop-knownerror-mgmt/dictionaries/fr.dict.itop-knownerror-mgmt.php +++ b/datamodels/2.x/itop-knownerror-mgmt/dictionaries/fr.dict.itop-knownerror-mgmt.php @@ -11,8 +11,8 @@ * */ Dict::Add('FR FR', 'French', 'Français', [ - 'Class:KnownError' => 'Erreur Connue', - 'Class:KnownError+' => 'Erreur documenté pour un problème connu', + 'Class:KnownError' => 'Erreur connue', + 'Class:KnownError+' => 'Erreur aux multiples occurrences, documentée suite à un Problème, pour faciliter le support.', 'Class:KnownError/Attribute:name' => 'Nom', 'Class:KnownError/Attribute:name+' => 'Ce nom devrait être unique parmi les erreurs connues de cette organisation', 'Class:KnownError/Attribute:org_id' => 'Organisation', @@ -60,7 +60,7 @@ Dict::Add('FR FR', 'French', 'Français', [ // Dict::Add('FR FR', 'French', 'Français', [ - 'Class:lnkErrorToFunctionalCI' => 'Lien Erreur / CI', + 'Class:lnkErrorToFunctionalCI' => 'Lien Erreur connue / CI fonctionnel', 'Class:lnkErrorToFunctionalCI+' => 'Lien entre une erreur et un ci', 'Class:lnkErrorToFunctionalCI/Name' => '%1$s / %2$s', 'Class:lnkErrorToFunctionalCI/Attribute:functionalci_id' => 'CI', @@ -80,8 +80,8 @@ Dict::Add('FR FR', 'French', 'Français', [ // Dict::Add('FR FR', 'French', 'Français', [ - 'Class:lnkDocumentToError' => 'Lien Documents / Errors', - 'Class:lnkDocumentToError+' => 'Lien entre un document et une erreur', + 'Class:lnkDocumentToError' => 'Lien Document / Erreur connue', + 'Class:lnkDocumentToError+' => 'Lien utilisé lorsqu\'un Document est applicable à une Erreur connue', 'Class:lnkDocumentToError/Name' => '%1$s / %2$s', 'Class:lnkDocumentToError/Attribute:document_id' => 'Document', 'Class:lnkDocumentToError/Attribute:document_id+' => '', diff --git a/datamodels/2.x/itop-knownerror-mgmt/dictionaries/sk.dict.itop-knownerror-mgmt.php b/datamodels/2.x/itop-knownerror-mgmt/dictionaries/sk.dict.itop-knownerror-mgmt.php index f7c870a16..a2582f6f1 100644 --- a/datamodels/2.x/itop-knownerror-mgmt/dictionaries/sk.dict.itop-knownerror-mgmt.php +++ b/datamodels/2.x/itop-knownerror-mgmt/dictionaries/sk.dict.itop-knownerror-mgmt.php @@ -12,7 +12,7 @@ */ Dict::Add('SK SK', 'Slovak', 'Slovenčina', [ 'Class:KnownError' => 'Known Error~~', - 'Class:KnownError+' => 'Error documented for a known issue~~', + 'Class:KnownError+' => 'Error with multiple occurrences, documented during a Problem management, to ease troubleshooting.~~', 'Class:KnownError/Attribute:name' => 'Name~~', 'Class:KnownError/Attribute:name+' => 'This is expected to be a unique identifier within the Known Errors of this organization~~', 'Class:KnownError/Attribute:org_id' => 'Organization~~', @@ -60,7 +60,7 @@ Dict::Add('SK SK', 'Slovak', 'Slovenčina', [ // Dict::Add('SK SK', 'Slovak', 'Slovenčina', [ - 'Class:lnkErrorToFunctionalCI' => 'Link Error / FunctionalCI~~', + 'Class:lnkErrorToFunctionalCI' => 'Link KnownError / FunctionalCI~~', 'Class:lnkErrorToFunctionalCI+' => 'Infra related to a known error~~', 'Class:lnkErrorToFunctionalCI/Name' => '%1$s / %2$s~~', 'Class:lnkErrorToFunctionalCI/Attribute:functionalci_id' => 'CI~~', @@ -80,8 +80,8 @@ Dict::Add('SK SK', 'Slovak', 'Slovenčina', [ // Dict::Add('SK SK', 'Slovak', 'Slovenčina', [ - 'Class:lnkDocumentToError' => 'Link Documents / Errors~~', - 'Class:lnkDocumentToError+' => 'A link between a document and a known error~~', + 'Class:lnkDocumentToError' => 'Link Document / Known Error~~', + 'Class:lnkDocumentToError+' => 'Used when a Document is pertinent for a Known Error~~', 'Class:lnkDocumentToError/Name' => '%1$s / %2$s~~', 'Class:lnkDocumentToError/Attribute:document_id' => 'Document~~', 'Class:lnkDocumentToError/Attribute:document_id+' => '~~', diff --git a/datamodels/2.x/itop-oauth-client/dictionaries/fr.dict.itop-oauth-client.php b/datamodels/2.x/itop-oauth-client/dictionaries/fr.dict.itop-oauth-client.php index 0030dbda9..f30377574 100644 --- a/datamodels/2.x/itop-oauth-client/dictionaries/fr.dict.itop-oauth-client.php +++ b/datamodels/2.x/itop-oauth-client/dictionaries/fr.dict.itop-oauth-client.php @@ -35,7 +35,7 @@ Dict::Add('FR FR', 'French', 'Français', [ // Dict::Add('FR FR', 'French', 'Français', [ - 'Class:OAuthClient' => 'Client OAuth pour l\'Accès Mail', + 'Class:OAuthClient' => 'Client OAuth pour l\'accès mail', 'Class:OAuthClient/Attribute:provider' => 'Fournisseur', 'Class:OAuthClient/Attribute:provider+' => '', 'Class:OAuthClient/Attribute:name' => 'Login', diff --git a/datamodels/2.x/itop-portal-base/portal/src/Controller/ObjectController.php b/datamodels/2.x/itop-portal-base/portal/src/Controller/ObjectController.php index 747530824..5ccf29f7a 100644 --- a/datamodels/2.x/itop-portal-base/portal/src/Controller/ObjectController.php +++ b/datamodels/2.x/itop-portal-base/portal/src/Controller/ObjectController.php @@ -1377,19 +1377,27 @@ class ObjectController extends BrickController if ($oField instanceof DateTimeField) { $oField->SetDateTimePickerWidgetParent($sDateTimePickerWidgetParent); } - $sFieldRendererClass = BsLinkedSetFieldRenderer::GetFieldRendererClass($oField); + + // View data $sValue = $oAttDef->GetAsHTML($oNewLink->Get($sAttCode)); + $aObjectData['attributes']['lnk__'.$sAttCode] = [ + 'object_class' => $sLinkClass, + 'object_id' => $oNewLink->GetKey(), + 'prefix' => 'lnk__', + 'attribute_code' => $sAttCode, + 'attribute_type' => get_class($oAttDef), + 'value_html' => $sValue, + ]; + + // If the field has a renderer we adjust view data + $sFieldRendererClass = BsLinkedSetFieldRenderer::GetFieldRendererClass($oField); if ($sFieldRendererClass !== null) { $oFieldRenderer = new $sFieldRendererClass($oField); $oFieldOutput = $oFieldRenderer->Render(); - $sValue = $oFieldOutput->GetHtml(); + $aObjectData['attributes']['lnk__'.$sAttCode]['value_html'] = $oFieldOutput->GetHtml(); + $aObjectData['attributes']['lnk__'.$sAttCode]['css_inline'] = $oFieldOutput->GetCss(); + $aObjectData['attributes']['lnk__'.$sAttCode]['js_inline'] = $oFieldOutput->GetJs(); } - $aObjectData['attributes']['lnk__'.$sAttCode] = [ - 'att_code' => $sAttCode, - 'value' => $sValue, - 'css_inline' => $oFieldOutput->GetCss(), - 'js_inline' => $oFieldOutput->GetJs(), - ]; } $aData['items'][] = $aObjectData; diff --git a/datamodels/2.x/itop-problem-mgmt/dictionaries/en.dict.itop-problem-mgmt.php b/datamodels/2.x/itop-problem-mgmt/dictionaries/en.dict.itop-problem-mgmt.php index ddc242392..38a6859ff 100644 --- a/datamodels/2.x/itop-problem-mgmt/dictionaries/en.dict.itop-problem-mgmt.php +++ b/datamodels/2.x/itop-problem-mgmt/dictionaries/en.dict.itop-problem-mgmt.php @@ -77,7 +77,7 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:Problem' => 'Problem', - 'Class:Problem+' => '', + 'Class:Problem+' => 'An incident becomes a Problem when it is not resolved in a timely manner or when it recurs frequently', 'Class:Problem/Attribute:status' => 'Status', 'Class:Problem/Attribute:status+' => '', 'Class:Problem/Attribute:status/Value:new' => 'New', diff --git a/datamodels/2.x/itop-problem-mgmt/dictionaries/fr.dict.itop-problem-mgmt.php b/datamodels/2.x/itop-problem-mgmt/dictionaries/fr.dict.itop-problem-mgmt.php index e8b8e041f..6727ac5f9 100644 --- a/datamodels/2.x/itop-problem-mgmt/dictionaries/fr.dict.itop-problem-mgmt.php +++ b/datamodels/2.x/itop-problem-mgmt/dictionaries/fr.dict.itop-problem-mgmt.php @@ -40,7 +40,7 @@ Dict::Add('FR FR', 'French', 'Français', [ Dict::Add('FR FR', 'French', 'Français', [ 'Class:Problem' => 'Problème', - 'Class:Problem+' => '', + 'Class:Problem+' => 'Un incident devient un problème lorsqu\'il n\'est pas résolu dans un délai raisonnable ou lorsqu\'il se répète fréquemment.', 'Class:Problem/Attribute:status' => 'Etat', 'Class:Problem/Attribute:status+' => '', 'Class:Problem/Attribute:status/Value:new' => 'Nouveau', @@ -55,9 +55,9 @@ Dict::Add('FR FR', 'French', 'Français', [ 'Class:Problem/Attribute:service_id+' => '', 'Class:Problem/Attribute:service_name' => 'Nom du service', 'Class:Problem/Attribute:service_name+' => '', - 'Class:Problem/Attribute:servicesubcategory_id' => 'Sous catégorie de service', + 'Class:Problem/Attribute:servicesubcategory_id' => 'Sous-catégorie de service', 'Class:Problem/Attribute:servicesubcategory_id+' => '', - 'Class:Problem/Attribute:servicesubcategory_name' => 'Nom sous catégorie de service', + 'Class:Problem/Attribute:servicesubcategory_name' => 'Nom sous-catégorie de service', 'Class:Problem/Attribute:servicesubcategory_name+' => '', 'Class:Problem/Attribute:product' => 'Produit', 'Class:Problem/Attribute:product+' => '', diff --git a/datamodels/2.x/itop-profiles-itil/datamodel.itop-profiles-itil.xml b/datamodels/2.x/itop-profiles-itil/datamodel.itop-profiles-itil.xml index 56e04651f..c3ce5d71e 100755 --- a/datamodels/2.x/itop-profiles-itil/datamodel.itop-profiles-itil.xml +++ b/datamodels/2.x/itop-profiles-itil/datamodel.itop-profiles-itil.xml @@ -30,6 +30,8 @@ + + @@ -186,6 +188,7 @@ + @@ -195,6 +198,11 @@ + + + + + @@ -290,6 +298,16 @@ allow + + + allow + allow + allow + allow + allow + allow + + diff --git a/datamodels/2.x/itop-request-mgmt-itil/datamodel.itop-request-mgmt-itil.xml b/datamodels/2.x/itop-request-mgmt-itil/datamodel.itop-request-mgmt-itil.xml index 07d438808..fa3bfa29a 100755 --- a/datamodels/2.x/itop-request-mgmt-itil/datamodel.itop-request-mgmt-itil.xml +++ b/datamodels/2.x/itop-request-mgmt-itil/datamodel.itop-request-mgmt-itil.xml @@ -764,6 +764,29 @@ + + resolved + + + SetCurrentDate + + resolution_date + + + + SetElapsedTime + + time_spent + start_date + DefaultWorkingTimeComputer + + + + ResolveChildTickets + + + + @@ -964,6 +987,29 @@ rejected + + resolved + + + SetCurrentDate + + resolution_date + + + + SetElapsedTime + + time_spent + start_date + DefaultWorkingTimeComputer + + + + ResolveChildTickets + + + + @@ -1173,29 +1219,6 @@ - - resolved - - - SetCurrentDate - - resolution_date - - - - SetElapsedTime - - time_spent - start_date - DefaultWorkingTimeComputer - - - - ResolveChildTickets - - - - @@ -2022,7 +2045,7 @@ - + diff --git a/datamodels/2.x/itop-request-mgmt-itil/dictionaries/en.dict.itop-request-mgmt-itil.php b/datamodels/2.x/itop-request-mgmt-itil/dictionaries/en.dict.itop-request-mgmt-itil.php index 6d95f2330..a2d2fe186 100644 --- a/datamodels/2.x/itop-request-mgmt-itil/dictionaries/en.dict.itop-request-mgmt-itil.php +++ b/datamodels/2.x/itop-request-mgmt-itil/dictionaries/en.dict.itop-request-mgmt-itil.php @@ -55,7 +55,7 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:UserRequest' => 'User Request', - 'Class:UserRequest+' => '', + 'Class:UserRequest+' => 'Ticket type to handle only service requests and not Incidents.', 'Class:UserRequest/Attribute:status' => 'Status', 'Class:UserRequest/Attribute:status+' => '', 'Class:UserRequest/Attribute:status/Value:new' => 'New', diff --git a/datamodels/2.x/itop-request-mgmt-itil/dictionaries/fr.dict.itop-request-mgmt-itil.php b/datamodels/2.x/itop-request-mgmt-itil/dictionaries/fr.dict.itop-request-mgmt-itil.php index c0cd172cb..b61397a8f 100644 --- a/datamodels/2.x/itop-request-mgmt-itil/dictionaries/fr.dict.itop-request-mgmt-itil.php +++ b/datamodels/2.x/itop-request-mgmt-itil/dictionaries/fr.dict.itop-request-mgmt-itil.php @@ -59,8 +59,8 @@ Dict::Add('FR FR', 'French', 'Français', [ // Dict::Add('FR FR', 'French', 'Français', [ - 'Class:UserRequest' => 'Demande Utilisateur', - 'Class:UserRequest+' => '', + 'Class:UserRequest' => 'Demande utilisateur', + 'Class:UserRequest+' => 'Type de Ticket pour gérer uniquement les requêtes de type demande de service et pas les Incidents.', 'Class:UserRequest/Attribute:status' => 'Etat', 'Class:UserRequest/Attribute:status+' => '', 'Class:UserRequest/Attribute:status/Value:new' => 'Nouveau', @@ -137,9 +137,9 @@ Dict::Add('FR FR', 'French', 'Français', [ 'Class:UserRequest/Attribute:service_id+' => '', 'Class:UserRequest/Attribute:service_name' => 'Nom du service', 'Class:UserRequest/Attribute:service_name+' => '', - 'Class:UserRequest/Attribute:servicesubcategory_id' => 'Sous catégorie de service', + 'Class:UserRequest/Attribute:servicesubcategory_id' => 'Sous-catégorie de service', 'Class:UserRequest/Attribute:servicesubcategory_id+' => '', - 'Class:UserRequest/Attribute:servicesubcategory_name' => 'Nom Sous catégorie de service', + 'Class:UserRequest/Attribute:servicesubcategory_name' => 'Nom Sous-catégorie de service', 'Class:UserRequest/Attribute:servicesubcategory_name+' => '', 'Class:UserRequest/Attribute:escalation_flag' => 'Ticket à surveiller', 'Class:UserRequest/Attribute:escalation_flag+' => '', diff --git a/datamodels/2.x/itop-request-mgmt/datamodel.itop-request-mgmt.xml b/datamodels/2.x/itop-request-mgmt/datamodel.itop-request-mgmt.xml index 8bda8690e..eb576942a 100755 --- a/datamodels/2.x/itop-request-mgmt/datamodel.itop-request-mgmt.xml +++ b/datamodels/2.x/itop-request-mgmt/datamodel.itop-request-mgmt.xml @@ -767,6 +767,29 @@ + + resolved + + + SetCurrentDate + + resolution_date + + + + SetElapsedTime + + time_spent + start_date + DefaultWorkingTimeComputer + + + + ResolveChildTickets + + + + @@ -970,6 +993,29 @@ rejected + + resolved + + + SetCurrentDate + + resolution_date + + + + SetElapsedTime + + time_spent + start_date + DefaultWorkingTimeComputer + + + + ResolveChildTickets + + + + @@ -1182,29 +1228,6 @@ - - resolved - - - SetCurrentDate - - resolution_date - - - - SetElapsedTime - - time_spent - start_date - DefaultWorkingTimeComputer - - - - ResolveChildTickets - - - - diff --git a/datamodels/2.x/itop-request-mgmt/dictionaries/en.dict.itop-request-mgmt.php b/datamodels/2.x/itop-request-mgmt/dictionaries/en.dict.itop-request-mgmt.php index 88f2d9712..1aeaac083 100644 --- a/datamodels/2.x/itop-request-mgmt/dictionaries/en.dict.itop-request-mgmt.php +++ b/datamodels/2.x/itop-request-mgmt/dictionaries/en.dict.itop-request-mgmt.php @@ -59,7 +59,7 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:UserRequest' => 'User Request', - 'Class:UserRequest+' => '', + 'Class:UserRequest+' => 'Ticket type that covers incidents and service requests.', 'Class:UserRequest/Attribute:status' => 'Status', 'Class:UserRequest/Attribute:status+' => '', 'Class:UserRequest/Attribute:status/Value:new' => 'New', diff --git a/datamodels/2.x/itop-request-mgmt/dictionaries/fr.dict.itop-request-mgmt.php b/datamodels/2.x/itop-request-mgmt/dictionaries/fr.dict.itop-request-mgmt.php index 07a4cc5d5..802d264f0 100644 --- a/datamodels/2.x/itop-request-mgmt/dictionaries/fr.dict.itop-request-mgmt.php +++ b/datamodels/2.x/itop-request-mgmt/dictionaries/fr.dict.itop-request-mgmt.php @@ -63,8 +63,8 @@ Dict::Add('FR FR', 'French', 'Français', [ // Dict::Add('FR FR', 'French', 'Français', [ - 'Class:UserRequest' => 'Demande Utilisateur', - 'Class:UserRequest+' => '', + 'Class:UserRequest' => 'Demande utilisateur', + 'Class:UserRequest+' => 'Type de Ticket qui couvre les incidents et les demandes de service.', 'Class:UserRequest/Attribute:status' => 'Etat', 'Class:UserRequest/Attribute:status+' => '', 'Class:UserRequest/Attribute:status/Value:new' => 'Nouveau', @@ -143,9 +143,9 @@ Dict::Add('FR FR', 'French', 'Français', [ 'Class:UserRequest/Attribute:service_id+' => '', 'Class:UserRequest/Attribute:service_name' => 'Nom du service', 'Class:UserRequest/Attribute:service_name+' => '', - 'Class:UserRequest/Attribute:servicesubcategory_id' => 'Sous catégorie de service', + 'Class:UserRequest/Attribute:servicesubcategory_id' => 'Sous-catégorie de service', 'Class:UserRequest/Attribute:servicesubcategory_id+' => '', - 'Class:UserRequest/Attribute:servicesubcategory_name' => 'Nom Sous catégorie de service', + 'Class:UserRequest/Attribute:servicesubcategory_name' => 'Nom Sous-catégorie de service', 'Class:UserRequest/Attribute:servicesubcategory_name+' => '', 'Class:UserRequest/Attribute:escalation_flag' => 'Ticket à surveiller', 'Class:UserRequest/Attribute:escalation_flag+' => '', diff --git a/datamodels/2.x/itop-service-mgmt-provider/data.sample.contracts.xml b/datamodels/2.x/itop-service-mgmt-provider/data/data.sample.contracts.xml old mode 100755 new mode 100644 similarity index 100% rename from datamodels/2.x/itop-service-mgmt-provider/data.sample.contracts.xml rename to datamodels/2.x/itop-service-mgmt-provider/data/data.sample.contracts.xml diff --git a/datamodels/2.x/itop-service-mgmt-provider/data.sample.contractservice.xml b/datamodels/2.x/itop-service-mgmt-provider/data/data.sample.contractservice.xml old mode 100755 new mode 100644 similarity index 100% rename from datamodels/2.x/itop-service-mgmt-provider/data.sample.contractservice.xml rename to datamodels/2.x/itop-service-mgmt-provider/data/data.sample.contractservice.xml diff --git a/datamodels/2.x/itop-service-mgmt-provider/data.sample.deliverymodel.xml b/datamodels/2.x/itop-service-mgmt-provider/data/data.sample.deliverymodel.xml old mode 100755 new mode 100644 similarity index 100% rename from datamodels/2.x/itop-service-mgmt-provider/data.sample.deliverymodel.xml rename to datamodels/2.x/itop-service-mgmt-provider/data/data.sample.deliverymodel.xml diff --git a/datamodels/2.x/itop-service-mgmt-provider/data.sample.deliverymodelcontact.xml b/datamodels/2.x/itop-service-mgmt-provider/data/data.sample.deliverymodelcontact.xml old mode 100755 new mode 100644 similarity index 100% rename from datamodels/2.x/itop-service-mgmt-provider/data.sample.deliverymodelcontact.xml rename to datamodels/2.x/itop-service-mgmt-provider/data/data.sample.deliverymodelcontact.xml diff --git a/datamodels/2.x/itop-service-mgmt-provider/data.sample.organizations.xml b/datamodels/2.x/itop-service-mgmt-provider/data/data.sample.organizations.xml old mode 100755 new mode 100644 similarity index 100% rename from datamodels/2.x/itop-service-mgmt-provider/data.sample.organizations.xml rename to datamodels/2.x/itop-service-mgmt-provider/data/data.sample.organizations.xml diff --git a/datamodels/2.x/itop-service-mgmt-provider/data.sample.serviceelements.xml b/datamodels/2.x/itop-service-mgmt-provider/data/data.sample.serviceelements.xml old mode 100755 new mode 100644 similarity index 100% rename from datamodels/2.x/itop-service-mgmt-provider/data.sample.serviceelements.xml rename to datamodels/2.x/itop-service-mgmt-provider/data/data.sample.serviceelements.xml diff --git a/datamodels/2.x/itop-service-mgmt-provider/data.sample.servicefamilies.xml b/datamodels/2.x/itop-service-mgmt-provider/data/data.sample.servicefamilies.xml similarity index 100% rename from datamodels/2.x/itop-service-mgmt-provider/data.sample.servicefamilies.xml rename to datamodels/2.x/itop-service-mgmt-provider/data/data.sample.servicefamilies.xml diff --git a/datamodels/2.x/itop-service-mgmt-provider/data.sample.services.xml b/datamodels/2.x/itop-service-mgmt-provider/data/data.sample.services.xml old mode 100755 new mode 100644 similarity index 100% rename from datamodels/2.x/itop-service-mgmt-provider/data.sample.services.xml rename to datamodels/2.x/itop-service-mgmt-provider/data/data.sample.services.xml diff --git a/datamodels/2.x/itop-service-mgmt-provider/data.sample.sla.xml b/datamodels/2.x/itop-service-mgmt-provider/data/data.sample.sla.xml old mode 100755 new mode 100644 similarity index 100% rename from datamodels/2.x/itop-service-mgmt-provider/data.sample.sla.xml rename to datamodels/2.x/itop-service-mgmt-provider/data/data.sample.sla.xml diff --git a/datamodels/2.x/itop-service-mgmt-provider/data.sample.slt.xml b/datamodels/2.x/itop-service-mgmt-provider/data/data.sample.slt.xml old mode 100755 new mode 100644 similarity index 100% rename from datamodels/2.x/itop-service-mgmt-provider/data.sample.slt.xml rename to datamodels/2.x/itop-service-mgmt-provider/data/data.sample.slt.xml diff --git a/datamodels/2.x/itop-service-mgmt-provider/data.sample.sltsla.xml b/datamodels/2.x/itop-service-mgmt-provider/data/data.sample.sltsla.xml old mode 100755 new mode 100644 similarity index 100% rename from datamodels/2.x/itop-service-mgmt-provider/data.sample.sltsla.xml rename to datamodels/2.x/itop-service-mgmt-provider/data/data.sample.sltsla.xml diff --git a/datamodels/2.x/itop-service-mgmt-provider/datamodel.itop-service-mgmt-provider.xml b/datamodels/2.x/itop-service-mgmt-provider/datamodel.itop-service-mgmt-provider.xml index 8038e750e..597fa03e6 100755 --- a/datamodels/2.x/itop-service-mgmt-provider/datamodel.itop-service-mgmt-provider.xml +++ b/datamodels/2.x/itop-service-mgmt-provider/datamodel.itop-service-mgmt-provider.xml @@ -1980,6 +1980,22 @@ public function PrefillSearchForm(&$aContextParam)
+ + + + 10 + + + 20 + + + 30 + + + 40 + + + @@ -2827,8 +2843,8 @@ public function PrefillSearchForm(&$aContextParam) 1 Class:Service - /icons8-service.svg - UI-ServiceCatalogMenu-ObsoleteNotInPortal + ../images/icons/icons8-service.svg + UI-ServiceCatalogMenu-OnlyProductionInPortal SELECT Service status implementation,obsolete,production @@ -2836,8 +2852,8 @@ public function PrefillSearchForm(&$aContextParam) 2 Class:ServiceSubcategory - /icons8-services.svg - UI-ServiceCatalogMenu-ObsoleteNotInPortal + ../images/icons/icons8-services.svg + UI-ServiceCatalogMenu-OnlyProductionInPortal SELECT ServiceSubcategory status implementation,obsolete,production diff --git a/datamodels/2.x/itop-service-mgmt-provider/dictionaries/cs.dict.itop-service-mgmt-provider.php b/datamodels/2.x/itop-service-mgmt-provider/dictionaries/cs.dict.itop-service-mgmt-provider.php index ebc847c44..f8e10a30d 100644 --- a/datamodels/2.x/itop-service-mgmt-provider/dictionaries/cs.dict.itop-service-mgmt-provider.php +++ b/datamodels/2.x/itop-service-mgmt-provider/dictionaries/cs.dict.itop-service-mgmt-provider.php @@ -251,7 +251,7 @@ Dict::Add('CS CZ', 'Czech', 'Čeština', [ 'Class:Service/Attribute:contacts_list' => 'Kontakty', 'Class:Service/Attribute:contacts_list+' => 'Všechny kontakty pro tuto službu', 'Class:Service/Attribute:status' => 'Stav', - 'Class:Service/Attribute:status+' => '', + 'Class:Service/Attribute:status+' => 'By default only Service in production are visible by Portal users~~', 'Class:Service/Attribute:status/Value:implementation' => 'implementace', 'Class:Service/Attribute:status/Value:implementation+' => '', 'Class:Service/Attribute:status/Value:obsolete' => 'zastaralá', @@ -327,7 +327,7 @@ Dict::Add('CS CZ', 'Czech', 'Čeština', [ 'Class:ServiceSubcategory/Attribute:status/Value:production' => 'v produkci', 'Class:ServiceSubcategory/Attribute:status/Value:production+' => '', 'Class:ServiceSubcategory/Attribute:request_type' => 'Typ požadavku', - 'Class:ServiceSubcategory/Attribute:request_type+' => '', + 'Class:ServiceSubcategory/Attribute:request_type+' => 'Define the type of Ticket (Incident or Service Request) that will be created when a Portal user selects this service subcategory.~~', 'Class:ServiceSubcategory/Attribute:request_type/Value:incident' => 'incident', 'Class:ServiceSubcategory/Attribute:request_type/Value:incident+' => '', 'Class:ServiceSubcategory/Attribute:request_type/Value:service_request' => 'požadavek na službu', @@ -447,6 +447,8 @@ Dict::Add('CS CZ', 'Czech', 'Čeština', [ 'Class:lnkCustomerContractToService/Attribute:sla_id+' => '', 'Class:lnkCustomerContractToService/Attribute:sla_name' => 'Název SLA', 'Class:lnkCustomerContractToService/Attribute:sla_name+' => '', + 'Class:lnkCustomerContractToService/Attribute:provider_id' => 'Provider~~', + 'Class:lnkCustomerContractToService/Attribute:provider_id+' => '~~', ]); // @@ -549,12 +551,3 @@ Dict::Add('CS CZ', 'Czech', 'Čeština', [ 'Class:lnkContractToDocument/Attribute:provider_id' => 'Provider id~~', 'Class:lnkContractToDocument/Attribute:provider_id+' => '~~', ]); - -// -// Class: lnkCustomerContractToService -// - -Dict::Add('CS CZ', 'Czech', 'Čeština', [ - 'Class:lnkCustomerContractToService/Attribute:provider_id' => 'Provider id~~', - 'Class:lnkCustomerContractToService/Attribute:provider_id+' => '~~', -]); diff --git a/datamodels/2.x/itop-service-mgmt-provider/dictionaries/da.dict.itop-service-mgmt-provider.php b/datamodels/2.x/itop-service-mgmt-provider/dictionaries/da.dict.itop-service-mgmt-provider.php index 2dc69fd6d..642cc9846 100644 --- a/datamodels/2.x/itop-service-mgmt-provider/dictionaries/da.dict.itop-service-mgmt-provider.php +++ b/datamodels/2.x/itop-service-mgmt-provider/dictionaries/da.dict.itop-service-mgmt-provider.php @@ -250,7 +250,7 @@ Dict::Add('DA DA', 'Danish', 'Dansk', [ 'Class:Service/Attribute:contacts_list' => 'Kontakt', 'Class:Service/Attribute:contacts_list+' => 'All the contacts for this service~~', 'Class:Service/Attribute:status' => 'Status', - 'Class:Service/Attribute:status+' => '', + 'Class:Service/Attribute:status+' => 'By default only Service in production are visible by Portal users~~', 'Class:Service/Attribute:status/Value:implementation' => 'Implementering', 'Class:Service/Attribute:status/Value:implementation+' => '', 'Class:Service/Attribute:status/Value:obsolete' => 'Forældet', @@ -326,7 +326,7 @@ Dict::Add('DA DA', 'Danish', 'Dansk', [ 'Class:ServiceSubcategory/Attribute:status/Value:production' => 'Produktion', 'Class:ServiceSubcategory/Attribute:status/Value:production+' => '', 'Class:ServiceSubcategory/Attribute:request_type' => 'Anmodnings type', - 'Class:ServiceSubcategory/Attribute:request_type+' => '', + 'Class:ServiceSubcategory/Attribute:request_type+' => 'Define the type of Ticket (Incident or Service Request) that will be created when a Portal user selects this service subcategory.~~', 'Class:ServiceSubcategory/Attribute:request_type/Value:incident' => 'Incident', 'Class:ServiceSubcategory/Attribute:request_type/Value:incident+' => '', 'Class:ServiceSubcategory/Attribute:request_type/Value:service_request' => 'Service Anmodning', @@ -446,6 +446,8 @@ Dict::Add('DA DA', 'Danish', 'Dansk', [ 'Class:lnkCustomerContractToService/Attribute:sla_id+' => '', 'Class:lnkCustomerContractToService/Attribute:sla_name' => 'SLA-Navn', 'Class:lnkCustomerContractToService/Attribute:sla_name+' => '', + 'Class:lnkCustomerContractToService/Attribute:provider_id' => 'Provider~~', + 'Class:lnkCustomerContractToService/Attribute:provider_id+' => '~~', ]); // @@ -548,12 +550,3 @@ Dict::Add('DA DA', 'Danish', 'Dansk', [ 'Class:lnkContractToDocument/Attribute:provider_id' => 'Provider id~~', 'Class:lnkContractToDocument/Attribute:provider_id+' => '~~', ]); - -// -// Class: lnkCustomerContractToService -// - -Dict::Add('DA DA', 'Danish', 'Dansk', [ - 'Class:lnkCustomerContractToService/Attribute:provider_id' => 'Provider id~~', - 'Class:lnkCustomerContractToService/Attribute:provider_id+' => '~~', -]); diff --git a/datamodels/2.x/itop-service-mgmt-provider/dictionaries/de.dict.itop-service-mgmt-provider.php b/datamodels/2.x/itop-service-mgmt-provider/dictionaries/de.dict.itop-service-mgmt-provider.php index 4af11c2b1..9ee2b4f96 100644 --- a/datamodels/2.x/itop-service-mgmt-provider/dictionaries/de.dict.itop-service-mgmt-provider.php +++ b/datamodels/2.x/itop-service-mgmt-provider/dictionaries/de.dict.itop-service-mgmt-provider.php @@ -250,7 +250,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', [ 'Class:Service/Attribute:contacts_list' => 'Kontakte', 'Class:Service/Attribute:contacts_list+' => 'Alle mit dem Service verknüpften Kontakte', 'Class:Service/Attribute:status' => 'Status', - 'Class:Service/Attribute:status+' => '', + 'Class:Service/Attribute:status+' => 'By default only Service in production are visible by Portal users~~', 'Class:Service/Attribute:status/Value:implementation' => 'Implementierung', 'Class:Service/Attribute:status/Value:implementation+' => '', 'Class:Service/Attribute:status/Value:obsolete' => 'Obsolet (Veraltet)', @@ -326,7 +326,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', [ 'Class:ServiceSubcategory/Attribute:status/Value:production' => 'Produktion', 'Class:ServiceSubcategory/Attribute:status/Value:production+' => '', 'Class:ServiceSubcategory/Attribute:request_type' => 'Request-Typ', - 'Class:ServiceSubcategory/Attribute:request_type+' => '', + 'Class:ServiceSubcategory/Attribute:request_type+' => 'Define the type of Ticket (Incident or Service Request) that will be created when a Portal user selects this service subcategory.~~', 'Class:ServiceSubcategory/Attribute:request_type/Value:incident' => 'Incident', 'Class:ServiceSubcategory/Attribute:request_type/Value:incident+' => '', 'Class:ServiceSubcategory/Attribute:request_type/Value:service_request' => 'Service-Request', @@ -446,6 +446,8 @@ Dict::Add('DE DE', 'German', 'Deutsch', [ 'Class:lnkCustomerContractToService/Attribute:sla_id+' => '', 'Class:lnkCustomerContractToService/Attribute:sla_name' => 'SLA-Name', 'Class:lnkCustomerContractToService/Attribute:sla_name+' => '', + 'Class:lnkCustomerContractToService/Attribute:provider_id' => 'Provider~~', + 'Class:lnkCustomerContractToService/Attribute:provider_id+' => '~~', ]); // @@ -548,12 +550,3 @@ Dict::Add('DE DE', 'German', 'Deutsch', [ 'Class:lnkContractToDocument/Attribute:provider_id' => 'Provider id~~', 'Class:lnkContractToDocument/Attribute:provider_id+' => '~~', ]); - -// -// Class: lnkCustomerContractToService -// - -Dict::Add('DE DE', 'German', 'Deutsch', [ - 'Class:lnkCustomerContractToService/Attribute:provider_id' => 'Provider id~~', - 'Class:lnkCustomerContractToService/Attribute:provider_id+' => '~~', -]); diff --git a/datamodels/2.x/itop-service-mgmt-provider/dictionaries/en.dict.itop-service-mgmt-provider.php b/datamodels/2.x/itop-service-mgmt-provider/dictionaries/en.dict.itop-service-mgmt-provider.php index c483e3f98..8f6daba4d 100644 --- a/datamodels/2.x/itop-service-mgmt-provider/dictionaries/en.dict.itop-service-mgmt-provider.php +++ b/datamodels/2.x/itop-service-mgmt-provider/dictionaries/en.dict.itop-service-mgmt-provider.php @@ -93,7 +93,7 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:ContractType' => 'Contract Type', - 'Class:ContractType+' => '', + 'Class:ContractType+' => 'Typology for categorizing Customer and Provider Contracts.', ]); // @@ -102,7 +102,7 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:Contract' => 'Contract', - 'Class:Contract+' => '', + 'Class:Contract+' => 'Abstract class to handle fields common to the different contract types.', 'Class:Contract/Attribute:name' => 'Name', 'Class:Contract/Attribute:name+' => '', 'Class:Contract/Attribute:org_id' => 'Organization', @@ -136,11 +136,11 @@ Dict::Add('EN US', 'English', 'English', [ 'Class:Contract/Attribute:cost_unit' => 'Cost unit', 'Class:Contract/Attribute:cost_unit+' => '', 'Class:Contract/Attribute:provider_id' => 'Provider', - 'Class:Contract/Attribute:provider_id+' => '', + 'Class:Contract/Attribute:provider_id+' => 'Provider organization for this contract. Can be different from the provider of the associated services.', 'Class:Contract/Attribute:provider_name' => 'Provider Name', 'Class:Contract/Attribute:provider_name+' => '', 'Class:Contract/Attribute:status' => 'Status', - 'Class:Contract/Attribute:status+' => '', + 'Class:Contract/Attribute:status+' => 'The status is not computed based on start and end dates. It must be set manually.', 'Class:Contract/Attribute:status/Value:implementation' => 'implementation', 'Class:Contract/Attribute:status/Value:implementation+' => 'implementation', 'Class:Contract/Attribute:status/Value:obsolete' => 'obsolete', @@ -157,7 +157,7 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:CustomerContract' => 'Customer Contract', - 'Class:CustomerContract+' => '', + 'Class:CustomerContract+' => 'Agreement between a client and a provider for the delivery of services with an optional level of commitment (SLA, Coverage Window).', 'Class:CustomerContract/Attribute:services_list' => 'Services', 'Class:CustomerContract/Attribute:services_list+' => 'All the services purchased for this contract', 'Class:CustomerContract/Attribute:functionalcis_list' => 'CIs', @@ -172,13 +172,13 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:ProviderContract' => 'Provider Contract', - 'Class:ProviderContract+' => '', + 'Class:ProviderContract+' => 'Agreement between an external provider and an internal organization.', 'Class:ProviderContract/Attribute:functionalcis_list' => 'CIs', 'Class:ProviderContract/Attribute:functionalcis_list+' => 'All the configuration items covered by this contract', 'Class:ProviderContract/Attribute:sla' => 'SLA', 'Class:ProviderContract/Attribute:sla+' => 'Service Level Agreement', 'Class:ProviderContract/Attribute:coverage' => 'Service hours', - 'Class:ProviderContract/Attribute:coverage+' => '', + 'Class:ProviderContract/Attribute:coverage+' => 'Temporal coverage of the contract, e.g. 24x7, 9x5, etc.', ]); // @@ -187,7 +187,7 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:lnkContactToContract' => 'Link Contact / Contract', - 'Class:lnkContactToContract+' => '', + 'Class:lnkContactToContract+' => 'Manages key contacts on each Customer or Provider Contract.', 'Class:lnkContactToContract/Name' => '%1$s / %2$s', 'Class:lnkContactToContract/Attribute:contract_id' => 'Contract', 'Class:lnkContactToContract/Attribute:contract_id+' => '', @@ -205,7 +205,7 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:lnkContractToDocument' => 'Link Contract / Document', - 'Class:lnkContractToDocument+' => '', + 'Class:lnkContractToDocument+' => 'Link used when a Document is applicable to a Contract.', 'Class:lnkContractToDocument/Name' => '%1$s / %2$s', 'Class:lnkContractToDocument/Attribute:contract_id' => 'Contract', 'Class:lnkContractToDocument/Attribute:contract_id+' => '', @@ -223,7 +223,7 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:lnkFunctionalCIToProviderContract' => 'Link FunctionalCI / ProviderContract', - 'Class:lnkFunctionalCIToProviderContract+' => '', + 'Class:lnkFunctionalCIToProviderContract+' => 'This link models the Functional CIs that are supported by an external company through a Provider Contract.', 'Class:lnkFunctionalCIToProviderContract/Name' => '%1$s / %2$s', 'Class:lnkFunctionalCIToProviderContract/Attribute:providercontract_id' => 'Provider contract', 'Class:lnkFunctionalCIToProviderContract/Attribute:providercontract_id+' => '', @@ -241,7 +241,7 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:ServiceFamily' => 'Service Family', - 'Class:ServiceFamily+' => '', + 'Class:ServiceFamily+' => 'Top level of Service hierarchy. Required for Services to be proposed in User Portal', 'Class:ServiceFamily/Attribute:name' => 'Name', 'Class:ServiceFamily/Attribute:name+' => '', 'Class:ServiceFamily/Attribute:icon' => 'Icon', @@ -256,7 +256,7 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:Service' => 'Service', - 'Class:Service+' => '', + 'Class:Service+' => 'A Service is delivered by an organization and subscribed to through a Contract Client. It must contain at least one Service Subcategory.', 'Class:Service/ComplementaryName' => '%1$s - %2$s', 'Class:Service/Attribute:name' => 'Name', 'Class:Service/Attribute:name+' => '', @@ -275,7 +275,7 @@ Dict::Add('EN US', 'English', 'English', [ 'Class:Service/Attribute:contacts_list' => 'Contacts', 'Class:Service/Attribute:contacts_list+' => 'All the contacts for this service', 'Class:Service/Attribute:status' => 'Status', - 'Class:Service/Attribute:status+' => '', + 'Class:Service/Attribute:status+' => 'By default only Service in production are visible by Portal users', 'Class:Service/Attribute:status/Value:implementation' => 'implementation', 'Class:Service/Attribute:status/Value:implementation+' => 'implementation', 'Class:Service/Attribute:status/Value:obsolete' => 'obsolete', @@ -296,7 +296,7 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:lnkDocumentToService' => 'Link Document / Service', - 'Class:lnkDocumentToService+' => '', + 'Class:lnkDocumentToService+' => 'Link used when a Document is applicable to a Service.', 'Class:lnkDocumentToService/Name' => '%1$s / %2$s', 'Class:lnkDocumentToService/Attribute:service_id' => 'Service', 'Class:lnkDocumentToService/Attribute:service_id+' => '', @@ -314,7 +314,7 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:lnkContactToService' => 'Link Contact / Service', - 'Class:lnkContactToService+' => '', + 'Class:lnkContactToService+' => 'Ideal for defining the Team to which Tickets created on the related Service will be assigned (automatically or manually).', 'Class:lnkContactToService/Name' => '%1$s / %2$s', 'Class:lnkContactToService/Attribute:service_id' => 'Service', 'Class:lnkContactToService/Attribute:service_id+' => '', @@ -332,7 +332,7 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:ServiceSubcategory' => 'Service Subcategory', - 'Class:ServiceSubcategory+' => '', + 'Class:ServiceSubcategory+' => 'Lowest level in Service hierarchy. User Request are usually associated to one Service Subcategory.', 'Class:ServiceSubcategory/ComplementaryName' => '%1$s - %2$s', 'Class:ServiceSubcategory/Attribute:name' => 'Name', 'Class:ServiceSubcategory/Attribute:name+' => '', @@ -343,7 +343,7 @@ Dict::Add('EN US', 'English', 'English', [ 'Class:ServiceSubcategory/Attribute:service_name' => 'Service Name', 'Class:ServiceSubcategory/Attribute:service_name+' => '', 'Class:ServiceSubcategory/Attribute:status' => 'Status', - 'Class:ServiceSubcategory/Attribute:status+' => '', + 'Class:ServiceSubcategory/Attribute:status+' => 'Service subcategory status has usually an impact on User Portal visibility.', 'Class:ServiceSubcategory/Attribute:status/Value:implementation' => 'implementation', 'Class:ServiceSubcategory/Attribute:status/Value:implementation+' => 'implementation', 'Class:ServiceSubcategory/Attribute:status/Value:obsolete' => 'obsolete', @@ -351,7 +351,7 @@ Dict::Add('EN US', 'English', 'English', [ 'Class:ServiceSubcategory/Attribute:status/Value:production' => 'production', 'Class:ServiceSubcategory/Attribute:status/Value:production+' => 'production', 'Class:ServiceSubcategory/Attribute:request_type' => 'Request type', - 'Class:ServiceSubcategory/Attribute:request_type+' => '', + 'Class:ServiceSubcategory/Attribute:request_type+' => 'Define the type of Ticket (Incident or Service Request) that will be created when a Portal user selects this service subcategory.', 'Class:ServiceSubcategory/Attribute:request_type/Value:incident' => 'incident', 'Class:ServiceSubcategory/Attribute:request_type/Value:incident+' => 'incident', 'Class:ServiceSubcategory/Attribute:request_type/Value:service_request' => 'service request', @@ -366,7 +366,7 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:SLA' => 'SLA', - 'Class:SLA+' => '', + 'Class:SLA+' => 'Service Level Agreement (SLA) applicable to a Service subscribed by a customer and measured using SLTs.', 'Class:SLA/Attribute:name' => 'Name', 'Class:SLA/Attribute:name+' => '', 'Class:SLA/Attribute:description' => 'description', @@ -388,11 +388,11 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:SLT' => 'SLT', - 'Class:SLT+' => '', + 'Class:SLT+' => 'Service Level Target under a Service Level Agreement (SLA). Defines a maximum time for a metric (TTO or TTR), a request type (Incident or Request) and a priority.', 'Class:SLT/Attribute:name' => 'Name', 'Class:SLT/Attribute:name+' => '', 'Class:SLT/Attribute:priority' => 'Priority', - 'Class:SLT/Attribute:priority+' => '', + 'Class:SLT/Attribute:priority+' => 'Ticket priority to which this SLT applies. Only tickets with this priority must comply with this SLT.', 'Class:SLT/Attribute:priority/Value:1' => 'critical', 'Class:SLT/Attribute:priority/Value:1+' => 'critical', 'Class:SLT/Attribute:priority/Value:2' => 'high', @@ -402,21 +402,21 @@ Dict::Add('EN US', 'English', 'English', [ 'Class:SLT/Attribute:priority/Value:4' => 'low', 'Class:SLT/Attribute:priority/Value:4+' => 'low', 'Class:SLT/Attribute:request_type' => 'Request type', - 'Class:SLT/Attribute:request_type+' => '', + 'Class:SLT/Attribute:request_type+' => 'Request type to which this SLT applies. Only tickets with this request type must comply with this SLT.', 'Class:SLT/Attribute:request_type/Value:incident' => 'incident', 'Class:SLT/Attribute:request_type/Value:incident+' => 'incident', 'Class:SLT/Attribute:request_type/Value:service_request' => 'service request', 'Class:SLT/Attribute:request_type/Value:service_request+' => 'service request', 'Class:SLT/Attribute:metric' => 'Metric', - 'Class:SLT/Attribute:metric+' => '', + 'Class:SLT/Attribute:metric+' => 'Delay type to which this SLT applies. TTO (Time To Own) or TTR (Time To Resolve).', 'Class:SLT/Attribute:metric/Value:tto' => 'TTO', 'Class:SLT/Attribute:metric/Value:tto+' => 'TTO', 'Class:SLT/Attribute:metric/Value:ttr' => 'TTR', 'Class:SLT/Attribute:metric/Value:ttr+' => 'TTR', 'Class:SLT/Attribute:value' => 'Value', - 'Class:SLT/Attribute:value+' => '', + 'Class:SLT/Attribute:value+' => 'Delay value which must not be exceeded to be compliant with the target. The unit is defined in the "unit" attribute.', 'Class:SLT/Attribute:unit' => 'Unit', - 'Class:SLT/Attribute:unit+' => '', + 'Class:SLT/Attribute:unit+' => 'Unit for the delay value.', 'Class:SLT/Attribute:unit/Value:hours' => 'hours', 'Class:SLT/Attribute:unit/Value:hours+' => 'hours', 'Class:SLT/Attribute:unit/Value:minutes' => 'minutes', @@ -429,7 +429,7 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:lnkSLAToSLT' => 'Link SLA / SLT', - 'Class:lnkSLAToSLT+' => '', + 'Class:lnkSLAToSLT+' => 'This link indicates that an SLT is included in the Service Level Agreement (SLA). An SLA usually contains several SLTs. An SLT can be reused as is by several SLAs (seldom).', 'Class:lnkSLAToSLT/Name' => '%1$s / %2$s', 'Class:lnkSLAToSLT/Attribute:sla_id' => 'SLA', 'Class:lnkSLAToSLT/Attribute:sla_id+' => '', @@ -457,20 +457,22 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:lnkCustomerContractToService' => 'Link Customer Contract / Service', - 'Class:lnkCustomerContractToService+' => '', + 'Class:lnkCustomerContractToService+' => 'A single line of a Customer Contract, specifying the Service provided and, for this service, the subscribed commitment levels (Service Level Agreement and Coverage Window).', 'Class:lnkCustomerContractToService/Name' => '%1$s / %2$s', 'Class:lnkCustomerContractToService/Attribute:customercontract_id' => 'Customer contract', 'Class:lnkCustomerContractToService/Attribute:customercontract_id+' => '', 'Class:lnkCustomerContractToService/Attribute:customercontract_name' => 'Customer contract Name', 'Class:lnkCustomerContractToService/Attribute:customercontract_name+' => '', 'Class:lnkCustomerContractToService/Attribute:service_id' => 'Service', - 'Class:lnkCustomerContractToService/Attribute:service_id+' => '', + 'Class:lnkCustomerContractToService/Attribute:service_id+' => 'All service subcategories linked to this service are also included by the contract.', 'Class:lnkCustomerContractToService/Attribute:service_name' => 'Service Name', 'Class:lnkCustomerContractToService/Attribute:service_name+' => '', 'Class:lnkCustomerContractToService/Attribute:sla_id' => 'SLA', - 'Class:lnkCustomerContractToService/Attribute:sla_id+' => '', + 'Class:lnkCustomerContractToService/Attribute:sla_id+' => 'Service Level Agreement applicable to this service for this customer contract.', 'Class:lnkCustomerContractToService/Attribute:sla_name' => 'SLA Name', 'Class:lnkCustomerContractToService/Attribute:sla_name+' => '', + 'Class:lnkCustomerContractToService/Attribute:provider_id' => 'Provider', + 'Class:lnkCustomerContractToService/Attribute:provider_id+' => '', ]); // @@ -479,7 +481,7 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:lnkCustomerContractToProviderContract' => 'Link Customer Contract / Provider Contract', - 'Class:lnkCustomerContractToProviderContract+' => '', + 'Class:lnkCustomerContractToProviderContract+' => 'This link models when a Provider Contract contributes to the delivery of a Customer Contract.', 'Class:lnkCustomerContractToProviderContract/Name' => '%1$s / %2$s', 'Class:lnkCustomerContractToProviderContract/Attribute:customercontract_id' => 'Customer contract', 'Class:lnkCustomerContractToProviderContract/Attribute:customercontract_id+' => '', @@ -497,7 +499,7 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:lnkCustomerContractToFunctionalCI' => 'Link Customer Contract / FunctionalCI', - 'Class:lnkCustomerContractToFunctionalCI+' => '', + 'Class:lnkCustomerContractToFunctionalCI+' => 'This link models the equipment (Functional CI) covered by a Customer Contract.', 'Class:lnkCustomerContractToFunctionalCI/Name' => '%1$s / %2$s', 'Class:lnkCustomerContractToFunctionalCI/Attribute:customercontract_id' => 'Customer contract', 'Class:lnkCustomerContractToFunctionalCI/Attribute:customercontract_id+' => '', @@ -515,7 +517,8 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:DeliveryModel' => 'Delivery Model', - 'Class:DeliveryModel+' => '', + 'Class:DeliveryModel+' => 'The Delivery Model specifies the Teams that can be assigned to Tickets; it must contain at least one Team in the Contacts tab. +Each client Organization must have a defined Delivery Model.', 'Class:DeliveryModel/Attribute:name' => 'Name', 'Class:DeliveryModel/Attribute:name+' => '', 'Class:DeliveryModel/Attribute:org_id' => 'Organization', @@ -536,7 +539,7 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:lnkDeliveryModelToContact' => 'Link DeliveryModel / Contact', - 'Class:lnkDeliveryModelToContact+' => '', + 'Class:lnkDeliveryModelToContact+' => 'This link specifies the role of a Team (more rarely a Person) within a Delivery Model.', 'Class:lnkDeliveryModelToContact/Name' => '%1$s / %2$s', 'Class:lnkDeliveryModelToContact/Attribute:deliverymodel_id' => 'Delivery model', 'Class:lnkDeliveryModelToContact/Attribute:deliverymodel_id+' => '', @@ -573,12 +576,3 @@ Dict::Add('EN US', 'English', 'English', [ 'Class:lnkContractToDocument/Attribute:provider_id' => 'Provider id', 'Class:lnkContractToDocument/Attribute:provider_id+' => '', ]); - -// -// Class: lnkCustomerContractToService -// - -Dict::Add('EN US', 'English', 'English', [ - 'Class:lnkCustomerContractToService/Attribute:provider_id' => 'Provider id', - 'Class:lnkCustomerContractToService/Attribute:provider_id+' => '', -]); diff --git a/datamodels/2.x/itop-service-mgmt-provider/dictionaries/en_gb.dict.itop-service-mgmt-provider.php b/datamodels/2.x/itop-service-mgmt-provider/dictionaries/en_gb.dict.itop-service-mgmt-provider.php index 51d61bddd..aa50b8e7f 100644 --- a/datamodels/2.x/itop-service-mgmt-provider/dictionaries/en_gb.dict.itop-service-mgmt-provider.php +++ b/datamodels/2.x/itop-service-mgmt-provider/dictionaries/en_gb.dict.itop-service-mgmt-provider.php @@ -275,7 +275,7 @@ Dict::Add('EN GB', 'British English', 'British English', [ 'Class:Service/Attribute:contacts_list' => 'Contacts', 'Class:Service/Attribute:contacts_list+' => 'All the contacts for this service', 'Class:Service/Attribute:status' => 'Status', - 'Class:Service/Attribute:status+' => '', + 'Class:Service/Attribute:status+' => 'By default only Service in production are visible by Portal users~~', 'Class:Service/Attribute:status/Value:implementation' => 'implementation', 'Class:Service/Attribute:status/Value:implementation+' => 'implementation', 'Class:Service/Attribute:status/Value:obsolete' => 'obsolete', @@ -351,7 +351,7 @@ Dict::Add('EN GB', 'British English', 'British English', [ 'Class:ServiceSubcategory/Attribute:status/Value:production' => 'production', 'Class:ServiceSubcategory/Attribute:status/Value:production+' => 'production', 'Class:ServiceSubcategory/Attribute:request_type' => 'Request type', - 'Class:ServiceSubcategory/Attribute:request_type+' => '', + 'Class:ServiceSubcategory/Attribute:request_type+' => 'Define the type of Ticket (Incident or Service Request) that will be created when a Portal user selects this service subcategory.~~', 'Class:ServiceSubcategory/Attribute:request_type/Value:incident' => 'incident', 'Class:ServiceSubcategory/Attribute:request_type/Value:incident+' => 'incident', 'Class:ServiceSubcategory/Attribute:request_type/Value:service_request' => 'service request', @@ -471,6 +471,8 @@ Dict::Add('EN GB', 'British English', 'British English', [ 'Class:lnkCustomerContractToService/Attribute:sla_id+' => '', 'Class:lnkCustomerContractToService/Attribute:sla_name' => 'SLA Name', 'Class:lnkCustomerContractToService/Attribute:sla_name+' => '', + 'Class:lnkCustomerContractToService/Attribute:provider_id' => 'Provider~~', + 'Class:lnkCustomerContractToService/Attribute:provider_id+' => '~~', ]); // diff --git a/datamodels/2.x/itop-service-mgmt-provider/dictionaries/es_cr.dict.itop-service-mgmt-provider.php b/datamodels/2.x/itop-service-mgmt-provider/dictionaries/es_cr.dict.itop-service-mgmt-provider.php index 15fe63d48..ba5aca236 100644 --- a/datamodels/2.x/itop-service-mgmt-provider/dictionaries/es_cr.dict.itop-service-mgmt-provider.php +++ b/datamodels/2.x/itop-service-mgmt-provider/dictionaries/es_cr.dict.itop-service-mgmt-provider.php @@ -213,13 +213,13 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ 'Class:ServiceFamily' => 'Familia de Servicios', - 'Class:ServiceFamily+' => 'Familia de Servicios', + 'Class:ServiceFamily+' => '', 'Class:ServiceFamily/Attribute:name' => 'Nombre', 'Class:ServiceFamily/Attribute:name+' => 'Nombre de la Familia de Servicios', 'Class:ServiceFamily/Attribute:icon' => 'Icono', 'Class:ServiceFamily/Attribute:icon+' => '', 'Class:ServiceFamily/Attribute:services_list' => 'Servicios', - 'Class:ServiceFamily/Attribute:services_list+' => 'Servicios', + 'Class:ServiceFamily/Attribute:services_list+' => '', ]); // @@ -228,16 +228,16 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ 'Class:Service' => 'Servicio', - 'Class:Service+' => 'Servicio', + 'Class:Service+' => '', 'Class:Service/ComplementaryName' => '%1$s - %2$s', 'Class:Service/Attribute:name' => 'Nombre', 'Class:Service/Attribute:name+' => 'Nombre del Servicio', 'Class:Service/Attribute:org_id' => 'Proveedor', - 'Class:Service/Attribute:org_id+' => 'Proveedor', + 'Class:Service/Attribute:org_id+' => '', 'Class:Service/Attribute:organization_name' => 'Proveedor', 'Class:Service/Attribute:organization_name+' => 'Proveedor', 'Class:Service/Attribute:description' => 'Descripción', - 'Class:Service/Attribute:description+' => 'Descripción', + 'Class:Service/Attribute:description+' => '', 'Class:Service/Attribute:servicefamily_id' => 'Familia de Servicios', 'Class:Service/Attribute:servicefamily_id+' => 'Required for this service to be visible on User Portal~~', 'Class:Service/Attribute:servicefamily_name' => 'Familia de Servicios', @@ -247,7 +247,7 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ 'Class:Service/Attribute:contacts_list' => 'Contactos', 'Class:Service/Attribute:contacts_list+' => 'Contactos', 'Class:Service/Attribute:status' => 'Estatus', - 'Class:Service/Attribute:status+' => 'Estatus', + 'Class:Service/Attribute:status+' => 'By default only Service in production are visible by Portal users~~', 'Class:Service/Attribute:status/Value:implementation' => 'No Productivo', 'Class:Service/Attribute:status/Value:implementation+' => 'No Productivo', 'Class:Service/Attribute:status/Value:obsolete' => 'Obsoleto', @@ -255,11 +255,11 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ 'Class:Service/Attribute:status/Value:production' => 'Productivo', 'Class:Service/Attribute:status/Value:production+' => 'Productivo', 'Class:Service/Attribute:icon' => 'Icono', - 'Class:Service/Attribute:icon+' => 'Icono', + 'Class:Service/Attribute:icon+' => '', 'Class:Service/Attribute:customercontracts_list' => 'Acuerdos con Clientes', 'Class:Service/Attribute:customercontracts_list+' => 'Acuerdos con Clientes', 'Class:Service/Attribute:servicesubcategories_list' => 'Subcategorias de Servicio', - 'Class:Service/Attribute:servicesubcategories_list+' => 'Subcategorias de Servicio', + 'Class:Service/Attribute:servicesubcategories_list+' => '', ]); // @@ -309,13 +309,13 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ 'Class:ServiceSubcategory/Attribute:name' => 'Nombre', 'Class:ServiceSubcategory/Attribute:name+' => 'Nombre de Subcategoría', 'Class:ServiceSubcategory/Attribute:description' => 'Descripción', - 'Class:ServiceSubcategory/Attribute:description+' => 'Descripción', + 'Class:ServiceSubcategory/Attribute:description+' => '', 'Class:ServiceSubcategory/Attribute:service_id' => 'Servicio', - 'Class:ServiceSubcategory/Attribute:service_id+' => 'Servicio', + 'Class:ServiceSubcategory/Attribute:service_id+' => '', 'Class:ServiceSubcategory/Attribute:service_name' => 'Servicio', 'Class:ServiceSubcategory/Attribute:service_name+' => 'Servicio', 'Class:ServiceSubcategory/Attribute:status' => 'Estatus', - 'Class:ServiceSubcategory/Attribute:status+' => 'Estatus', + 'Class:ServiceSubcategory/Attribute:status+' => '', 'Class:ServiceSubcategory/Attribute:status/Value:implementation' => 'No Productivo', 'Class:ServiceSubcategory/Attribute:status/Value:implementation+' => 'No Productivo', 'Class:ServiceSubcategory/Attribute:status/Value:obsolete' => 'Obsoleto', @@ -323,7 +323,7 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ 'Class:ServiceSubcategory/Attribute:status/Value:production' => 'Productivo', 'Class:ServiceSubcategory/Attribute:status/Value:production+' => 'Productivo', 'Class:ServiceSubcategory/Attribute:request_type' => 'Tipo de Reporte', - 'Class:ServiceSubcategory/Attribute:request_type+' => 'Tipo de Reporte', + 'Class:ServiceSubcategory/Attribute:request_type+' => 'Define the type of Ticket (Incident or Service Request) that will be created when a Portal user selects this service subcategory.~~', 'Class:ServiceSubcategory/Attribute:request_type/Value:incident' => 'Incidente', 'Class:ServiceSubcategory/Attribute:request_type/Value:incident+' => 'Incidente', 'Class:ServiceSubcategory/Attribute:request_type/Value:service_request' => 'Requerimiento de Servicio', @@ -338,19 +338,19 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ 'Class:SLA' => 'SLA - Acuerdo de Nivel de Servicio', - 'Class:SLA+' => 'SLA - Acuerdo de Nivel de Servicio', + 'Class:SLA+' => '', 'Class:SLA/Attribute:name' => 'Nombre', 'Class:SLA/Attribute:name+' => 'Nombre de SLA', 'Class:SLA/Attribute:description' => 'Descripción', - 'Class:SLA/Attribute:description+' => 'Descripción', + 'Class:SLA/Attribute:description+' => '', 'Class:SLA/Attribute:org_id' => 'Proveedor', - 'Class:SLA/Attribute:org_id+' => 'Proveedor', + 'Class:SLA/Attribute:org_id+' => '', 'Class:SLA/Attribute:organization_name' => 'Proveedor', 'Class:SLA/Attribute:organization_name+' => 'Proveedor', 'Class:SLA/Attribute:slts_list' => 'SLTs - Objetivos de Nivel de Servicio', - 'Class:SLA/Attribute:slts_list+' => 'Objetivos de Nivel de Servicio', + 'Class:SLA/Attribute:slts_list+' => '', 'Class:SLA/Attribute:customercontracts_list' => 'Acuerdos con Clientes', - 'Class:SLA/Attribute:customercontracts_list+' => 'Acuerdos con Clientes', + 'Class:SLA/Attribute:customercontracts_list+' => '', 'Class:SLA/Error:UniqueLnkCustomerContractToService' => 'No se puede guardar la relación entre Acuerdo con Cliente %1$s y Servicio %2$s : El SLA ya existe', ]); @@ -360,11 +360,11 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ 'Class:SLT' => 'SLT - Objetivos de Nivel de Servicio', - 'Class:SLT+' => 'SLT - Objetivos de Nivel de Servicio', + 'Class:SLT+' => '', 'Class:SLT/Attribute:name' => 'Nombre', 'Class:SLT/Attribute:name+' => 'Nombre de SLT', 'Class:SLT/Attribute:priority' => 'Prioridad', - 'Class:SLT/Attribute:priority+' => 'Prioridad', + 'Class:SLT/Attribute:priority+' => '', 'Class:SLT/Attribute:priority/Value:1' => 'Crítico', 'Class:SLT/Attribute:priority/Value:1+' => 'Crítico', 'Class:SLT/Attribute:priority/Value:2' => 'Alto', @@ -374,21 +374,21 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ 'Class:SLT/Attribute:priority/Value:4' => 'Bajo', 'Class:SLT/Attribute:priority/Value:4+' => 'Bajo', 'Class:SLT/Attribute:request_type' => 'Tipo de Reporte', - 'Class:SLT/Attribute:request_type+' => 'Tipo de Reporte', + 'Class:SLT/Attribute:request_type+' => '', 'Class:SLT/Attribute:request_type/Value:incident' => 'Incidente', 'Class:SLT/Attribute:request_type/Value:incident+' => 'Incidente', 'Class:SLT/Attribute:request_type/Value:service_request' => 'Requerimiento de Servicio', 'Class:SLT/Attribute:request_type/Value:service_request+' => 'Requerimiento de Servicio', 'Class:SLT/Attribute:metric' => 'Métrica', - 'Class:SLT/Attribute:metric+' => 'Métrica', + 'Class:SLT/Attribute:metric+' => '', 'Class:SLT/Attribute:metric/Value:tto' => 'TDA - Tiempo de Asignación', 'Class:SLT/Attribute:metric/Value:tto+' => 'Tiempo de Asignación', 'Class:SLT/Attribute:metric/Value:ttr' => 'TDS - Tiempo de Solución', 'Class:SLT/Attribute:metric/Value:ttr+' => 'Tiempo de Solución', 'Class:SLT/Attribute:value' => 'Valor', - 'Class:SLT/Attribute:value+' => 'Valor', + 'Class:SLT/Attribute:value+' => '', 'Class:SLT/Attribute:unit' => 'Unidad', - 'Class:SLT/Attribute:unit+' => 'Unidad', + 'Class:SLT/Attribute:unit+' => '', 'Class:SLT/Attribute:unit/Value:hours' => 'Horas', 'Class:SLT/Attribute:unit/Value:hours+' => 'Horas', 'Class:SLT/Attribute:unit/Value:minutes' => 'Minutos', @@ -443,6 +443,8 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ 'Class:lnkCustomerContractToService/Attribute:sla_id+' => 'SLA', 'Class:lnkCustomerContractToService/Attribute:sla_name' => 'SLA', 'Class:lnkCustomerContractToService/Attribute:sla_name+' => 'SLA', + 'Class:lnkCustomerContractToService/Attribute:provider_id' => 'Provider~~', + 'Class:lnkCustomerContractToService/Attribute:provider_id+' => '~~', ]); // @@ -545,12 +547,3 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ 'Class:lnkContractToDocument/Attribute:provider_id' => 'Provider id~~', 'Class:lnkContractToDocument/Attribute:provider_id+' => '~~', ]); - -// -// Class: lnkCustomerContractToService -// - -Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ - 'Class:lnkCustomerContractToService/Attribute:provider_id' => 'Provider id~~', - 'Class:lnkCustomerContractToService/Attribute:provider_id+' => '~~', -]); diff --git a/datamodels/2.x/itop-service-mgmt-provider/dictionaries/fr.dict.itop-service-mgmt-provider.php b/datamodels/2.x/itop-service-mgmt-provider/dictionaries/fr.dict.itop-service-mgmt-provider.php index fbc75fd7d..655064744 100644 --- a/datamodels/2.x/itop-service-mgmt-provider/dictionaries/fr.dict.itop-service-mgmt-provider.php +++ b/datamodels/2.x/itop-service-mgmt-provider/dictionaries/fr.dict.itop-service-mgmt-provider.php @@ -22,7 +22,7 @@ Dict::Add('FR FR', 'French', 'Français', [ 'Menu:ProviderContract+' => 'Ce que votre société achète', 'Menu:CustomerContract' => 'Contrats clients', 'Menu:CustomerContract+' => 'Souscriptions à des services', - 'Menu:ServiceSubcategory' => 'Sous catégories de service', + 'Menu:ServiceSubcategory' => 'Sous-catégories de service', 'Menu:ServiceSubcategory+' => 'Dernier niveau dans la hiérarchie des services', 'Menu:Service' => 'Services', 'Menu:Service+' => 'Second niveau dans la hiérarchie des services', @@ -67,7 +67,7 @@ Dict::Add('FR FR', 'French', 'Français', [ Dict::Add('FR FR', 'French', 'Français', [ 'Class:ContractType' => 'Type de contrat', - 'Class:ContractType+' => '', + 'Class:ContractType+' => 'Typologie pour catégoriser les Contrats Client et Fournisseur.', ]); // @@ -76,7 +76,7 @@ Dict::Add('FR FR', 'French', 'Français', [ Dict::Add('FR FR', 'French', 'Français', [ 'Class:Contract' => 'Contrat', - 'Class:Contract+' => '', + 'Class:Contract+' => 'Classe abstraite qui gére les caractéristiques communes aux différents types de contrat.', 'Class:Contract/Attribute:name' => 'Nom', 'Class:Contract/Attribute:name+' => '', 'Class:Contract/Attribute:org_id' => 'Client', @@ -110,11 +110,11 @@ Dict::Add('FR FR', 'French', 'Français', [ 'Class:Contract/Attribute:cost_unit' => 'Unité de coût', 'Class:Contract/Attribute:cost_unit+' => '', 'Class:Contract/Attribute:provider_id' => 'Fournisseur', - 'Class:Contract/Attribute:provider_id+' => '', + 'Class:Contract/Attribute:provider_id+' => 'Fournisseur du contrat. Parfois différent du fournisseur des services liés à ce contrat', 'Class:Contract/Attribute:provider_name' => 'Nom Fournisseur', 'Class:Contract/Attribute:provider_name+' => '', 'Class:Contract/Attribute:status' => 'Etat', - 'Class:Contract/Attribute:status+' => '', + 'Class:Contract/Attribute:status+' => 'L\'état du contrat n\'est pas calculé en fonction des dates de début et de fin. Il doit être mis à jour indépendamment.', 'Class:Contract/Attribute:status/Value:implementation' => 'Implémentation', 'Class:Contract/Attribute:status/Value:implementation+' => '', 'Class:Contract/Attribute:status/Value:obsolete' => 'Obsolète', @@ -131,7 +131,7 @@ Dict::Add('FR FR', 'French', 'Français', [ Dict::Add('FR FR', 'French', 'Français', [ 'Class:CustomerContract' => 'Contrat client', - 'Class:CustomerContract+' => '', + 'Class:CustomerContract+' => 'Accord entre un client et un fournisseur pour la délivrance de Services associés éventuellement à des niveaux d\'engagement (Niveau de service, Fenêtre de couverture).', 'Class:CustomerContract/Attribute:services_list' => 'Services', 'Class:CustomerContract/Attribute:services_list+' => 'Tous les services achetés pour ce contrat', 'Class:CustomerContract/Attribute:functionalcis_list' => 'CIs', @@ -146,13 +146,13 @@ Dict::Add('FR FR', 'French', 'Français', [ Dict::Add('FR FR', 'French', 'Français', [ 'Class:ProviderContract' => 'Contrat fournisseur', - 'Class:ProviderContract+' => '', + 'Class:ProviderContract+' => 'Accord entre un fournisseur externe et une organisation interne.', 'Class:ProviderContract/Attribute:functionalcis_list' => 'CIs', 'Class:ProviderContract/Attribute:functionalcis_list+' => 'Tous les éléments de configuration couverts par ce contrat fournisseur', 'Class:ProviderContract/Attribute:sla' => 'Niveau de service', 'Class:ProviderContract/Attribute:sla+' => 'Accord de niveau de service (SLA)', 'Class:ProviderContract/Attribute:coverage' => 'Couverture', - 'Class:ProviderContract/Attribute:coverage+' => '', + 'Class:ProviderContract/Attribute:coverage+' => 'Fenêtre de couverture temporelle pour ce contrat fournisseur', ]); // @@ -161,7 +161,7 @@ Dict::Add('FR FR', 'French', 'Français', [ Dict::Add('FR FR', 'French', 'Français', [ 'Class:lnkContactToContract' => 'Lien Contact / Contrat', - 'Class:lnkContactToContract+' => '', + 'Class:lnkContactToContract+' => 'Gère les contacts clés sur chaque contract client ou fournisseur.', 'Class:lnkContactToContract/Name' => '%1$s / %2$s', 'Class:lnkContactToContract/Attribute:contract_id' => 'Contrat', 'Class:lnkContactToContract/Attribute:contract_id+' => '', @@ -179,7 +179,7 @@ Dict::Add('FR FR', 'French', 'Français', [ Dict::Add('FR FR', 'French', 'Français', [ 'Class:lnkContractToDocument' => 'Lien Contract / Document', - 'Class:lnkContractToDocument+' => '', + 'Class:lnkContractToDocument+' => 'Lien utilisé lorsqu\'un Document est applicable à un Contract.', 'Class:lnkContractToDocument/Name' => '%1$s / %2$s', 'Class:lnkContractToDocument/Attribute:contract_id' => 'Contrat', 'Class:lnkContractToDocument/Attribute:contract_id+' => '', @@ -196,8 +196,8 @@ Dict::Add('FR FR', 'French', 'Français', [ // Dict::Add('FR FR', 'French', 'Français', [ - 'Class:lnkFunctionalCIToProviderContract' => 'Lien CI / Contrat fournisseur', - 'Class:lnkFunctionalCIToProviderContract+' => '', + 'Class:lnkFunctionalCIToProviderContract' => 'Lien CI fonctionnel / Contrat fournisseur', + 'Class:lnkFunctionalCIToProviderContract+' => 'Ce lien modélise les équipments (CI fonctionnel) qui sont supportés par une société externe à travers un Contrat fournisseur.', 'Class:lnkFunctionalCIToProviderContract/Name' => '%1$s / %2$s', 'Class:lnkFunctionalCIToProviderContract/Attribute:providercontract_id' => 'Contrat fournisseur', 'Class:lnkFunctionalCIToProviderContract/Attribute:providercontract_id+' => '', @@ -214,8 +214,8 @@ Dict::Add('FR FR', 'French', 'Français', [ // Dict::Add('FR FR', 'French', 'Français', [ - 'Class:ServiceFamily' => 'Famille de service', - 'Class:ServiceFamily+' => '', + 'Class:ServiceFamily' => 'Famille de services', + 'Class:ServiceFamily+' => 'Premier niveau dans la hiérarchie des Services. Obligatoire pour qu\'un Service soit proposé dans le Portail Utilisateur.', 'Class:ServiceFamily/Attribute:name' => 'Nom', 'Class:ServiceFamily/Attribute:name+' => '', 'Class:ServiceFamily/Attribute:icon' => 'Icône', @@ -236,7 +236,7 @@ Dict::Add('FR FR', 'French', 'Français', [ Dict::Add('FR FR', 'French', 'Français', [ 'Class:Service' => 'Service', - 'Class:Service+' => '', + 'Class:Service+' => 'Un Service est délivré par une organisation et souscrit par le biais de Contract Client. Il doit au moins contenir une Sous catégorie de Service.', 'Class:Service/ComplementaryName' => '%1$s - %2$s', 'Class:Service/Attribute:name' => 'Nom', 'Class:Service/Attribute:name+' => '', @@ -255,7 +255,7 @@ Dict::Add('FR FR', 'French', 'Français', [ 'Class:Service/Attribute:contacts_list' => 'Contacts', 'Class:Service/Attribute:contacts_list+' => 'Tous les contacts pour ce service', 'Class:Service/Attribute:status' => 'Etat', - 'Class:Service/Attribute:status+' => '', + 'Class:Service/Attribute:status+' => 'Seuls les services en production sont visibles des utilisateurs du portail.', 'Class:Service/Attribute:status/Value:implementation' => 'Implémentation', 'Class:Service/Attribute:status/Value:implementation+' => '', 'Class:Service/Attribute:status/Value:obsolete' => 'Obsolète', @@ -266,8 +266,8 @@ Dict::Add('FR FR', 'French', 'Français', [ 'Class:Service/Attribute:icon+' => '', 'Class:Service/Attribute:customercontracts_list' => 'Contrats client', 'Class:Service/Attribute:customercontracts_list+' => 'Tous les contrats clients qui ont acquis ce service', - 'Class:Service/Attribute:servicesubcategories_list' => 'Sous catégories de service', - 'Class:Service/Attribute:servicesubcategories_list+' => 'Toutes les sous catégories de service pour ce service', + 'Class:Service/Attribute:servicesubcategories_list' => 'Sous-catégories de service', + 'Class:Service/Attribute:servicesubcategories_list+' => 'Toutes les sous-catégories de service pour ce service', 'Class:Service/Attribute:servicesubcategories_list/UI:Links:Create:Button+' => 'Créer un %4$s', 'Class:Service/Attribute:servicesubcategories_list/UI:Links:Create:Modal:Title' => 'Ajouter un %4$s à %2$s', 'Class:Service/Attribute:servicesubcategories_list/UI:Links:Delete:Button+' => 'Supprimer ce %4$s', @@ -282,7 +282,7 @@ Dict::Add('FR FR', 'French', 'Français', [ Dict::Add('FR FR', 'French', 'Français', [ 'Class:lnkDocumentToService' => 'Lien Document / Service', - 'Class:lnkDocumentToService+' => '', + 'Class:lnkDocumentToService+' => 'Lien utilisé lorsqu\'un Document est applicable à un Service.', 'Class:lnkDocumentToService/Name' => '%1$s / %2$s', 'Class:lnkDocumentToService/Attribute:service_id' => 'Service', 'Class:lnkDocumentToService/Attribute:service_id+' => '', @@ -300,7 +300,7 @@ Dict::Add('FR FR', 'French', 'Français', [ Dict::Add('FR FR', 'French', 'Français', [ 'Class:lnkContactToService' => 'Lien Contact / Service', - 'Class:lnkContactToService+' => '', + 'Class:lnkContactToService+' => 'Idéal pour définir l\'équipe à laquelle on affectera (automatiquement ou manuellement) les Tickets créés sur le Service lié.', 'Class:lnkContactToService/Name' => '%1$s / %2$s', 'Class:lnkContactToService/Attribute:service_id' => 'Service', 'Class:lnkContactToService/Attribute:service_id+' => '', @@ -317,8 +317,8 @@ Dict::Add('FR FR', 'French', 'Français', [ // Dict::Add('FR FR', 'French', 'Français', [ - 'Class:ServiceSubcategory' => 'Sous catégorie de service', - 'Class:ServiceSubcategory+' => '', + 'Class:ServiceSubcategory' => 'Sous-catégorie de service', + 'Class:ServiceSubcategory+' => 'Dernier niveau dans la hiérarchie des Services. Chaque Demande utilisateur se réfère à une Sous-catégorie de service.', 'Class:ServiceSubcategory/ComplementaryName' => '%1$s - %2$s', 'Class:ServiceSubcategory/Attribute:name' => 'Nom', 'Class:ServiceSubcategory/Attribute:name+' => '', @@ -329,7 +329,7 @@ Dict::Add('FR FR', 'French', 'Français', [ 'Class:ServiceSubcategory/Attribute:service_name' => 'Nom Service', 'Class:ServiceSubcategory/Attribute:service_name+' => '', 'Class:ServiceSubcategory/Attribute:status' => 'Etat', - 'Class:ServiceSubcategory/Attribute:status+' => '', + 'Class:ServiceSubcategory/Attribute:status+' => 'L\'état d\'une sous-catégorie de service conditionne sa visibilité dans le portail utilisateur.', 'Class:ServiceSubcategory/Attribute:status/Value:implementation' => 'Implémentation', 'Class:ServiceSubcategory/Attribute:status/Value:implementation+' => '', 'Class:ServiceSubcategory/Attribute:status/Value:obsolete' => 'Obsolète', @@ -337,7 +337,7 @@ Dict::Add('FR FR', 'French', 'Français', [ 'Class:ServiceSubcategory/Attribute:status/Value:production' => 'Production', 'Class:ServiceSubcategory/Attribute:status/Value:production+' => '', 'Class:ServiceSubcategory/Attribute:request_type' => 'Type de requête', - 'Class:ServiceSubcategory/Attribute:request_type+' => '', + 'Class:ServiceSubcategory/Attribute:request_type+' => 'Définit le type de Ticket (Incident ou Demande de service) qui sera créé lorsqu\'un utilisateur du Portail sélectionne cette sous-catégorie de service', 'Class:ServiceSubcategory/Attribute:request_type/Value:incident' => 'incident', 'Class:ServiceSubcategory/Attribute:request_type/Value:incident+' => '', 'Class:ServiceSubcategory/Attribute:request_type/Value:service_request' => 'demande de service', @@ -352,7 +352,7 @@ Dict::Add('FR FR', 'French', 'Français', [ Dict::Add('FR FR', 'French', 'Français', [ 'Class:SLA' => 'Niveau de service', - 'Class:SLA+' => '', + 'Class:SLA+' => 'Accord de niveau de service (SLA) applicable à un Service souscrit par un client et mesuré à l\'aide de SLTs.', 'Class:SLA/Attribute:name' => 'Nom', 'Class:SLA/Attribute:name+' => '', 'Class:SLA/Attribute:description' => 'Description', @@ -374,39 +374,39 @@ Dict::Add('FR FR', 'French', 'Français', [ Dict::Add('FR FR', 'French', 'Français', [ 'Class:SLT' => 'SLT', - 'Class:SLT+' => 'Objectif de niveau de service (SLT)', + 'Class:SLT+' => 'Objectif mesurable au sein d\'un Niveau de service (SLA). Défini un délai maximum pour une métrique (TTO ou TTR), un type de requête (Incident ou Demande) et une priorité.', 'Class:SLT/Attribute:name' => 'Nom', 'Class:SLT/Attribute:name+' => '', 'Class:SLT/Attribute:priority' => 'Priorité', - 'Class:SLT/Attribute:priority+' => '', + 'Class:SLT/Attribute:priority+' => 'Priorité du ticket pour laquelle cet objectif est applicable', 'Class:SLT/Attribute:priority/Value:1' => 'critique', - 'Class:SLT/Attribute:priority/Value:1+' => 'critique', + 'Class:SLT/Attribute:priority/Value:1+' => '', 'Class:SLT/Attribute:priority/Value:2' => 'haute', - 'Class:SLT/Attribute:priority/Value:2+' => 'haute', + 'Class:SLT/Attribute:priority/Value:2+' => '', 'Class:SLT/Attribute:priority/Value:3' => 'moyenne', - 'Class:SLT/Attribute:priority/Value:3+' => 'moyenne', + 'Class:SLT/Attribute:priority/Value:3+' => '', 'Class:SLT/Attribute:priority/Value:4' => 'basse', - 'Class:SLT/Attribute:priority/Value:4+' => 'basse', + 'Class:SLT/Attribute:priority/Value:4+' => '', 'Class:SLT/Attribute:request_type' => 'Type de requête', - 'Class:SLT/Attribute:request_type+' => '', + 'Class:SLT/Attribute:request_type+' => 'Type de requête pour laquelle cet objectif est applicable', 'Class:SLT/Attribute:request_type/Value:incident' => 'incident', - 'Class:SLT/Attribute:request_type/Value:incident+' => 'incident', + 'Class:SLT/Attribute:request_type/Value:incident+' => '', 'Class:SLT/Attribute:request_type/Value:service_request' => 'demande de service', - 'Class:SLT/Attribute:request_type/Value:service_request+' => 'demande de service', + 'Class:SLT/Attribute:request_type/Value:service_request+' => '', 'Class:SLT/Attribute:metric' => 'Métrique', - 'Class:SLT/Attribute:metric+' => '', + 'Class:SLT/Attribute:metric+' => 'Délai contrôlé par cet objectif (temps de prise en charge ou temps de résolution)', 'Class:SLT/Attribute:metric/Value:tto' => 'TTO', - 'Class:SLT/Attribute:metric/Value:tto+' => 'TTO', + 'Class:SLT/Attribute:metric/Value:tto+' => 'Délai de prise en charge', 'Class:SLT/Attribute:metric/Value:ttr' => 'TTR', - 'Class:SLT/Attribute:metric/Value:ttr+' => 'TTR', + 'Class:SLT/Attribute:metric/Value:ttr+' => 'Délai de résolution', 'Class:SLT/Attribute:value' => 'Valeur', - 'Class:SLT/Attribute:value+' => '', + 'Class:SLT/Attribute:value+' => 'Valeur à ne pas dépasser pour la métrique et le type de requête définis dans cet objectif', 'Class:SLT/Attribute:unit' => 'Unité', - 'Class:SLT/Attribute:unit+' => '', + 'Class:SLT/Attribute:unit+' => 'Unité à appliquer à la valeur', 'Class:SLT/Attribute:unit/Value:hours' => 'heures', - 'Class:SLT/Attribute:unit/Value:hours+' => 'heures', + 'Class:SLT/Attribute:unit/Value:hours+' => '', 'Class:SLT/Attribute:unit/Value:minutes' => 'minutes', - 'Class:SLT/Attribute:unit/Value:minutes+' => 'minutes', + 'Class:SLT/Attribute:unit/Value:minutes+' => '', ]); // @@ -415,7 +415,7 @@ Dict::Add('FR FR', 'French', 'Français', [ Dict::Add('FR FR', 'French', 'Français', [ 'Class:lnkSLAToSLT' => 'Lien SLA / SLT', - 'Class:lnkSLAToSLT+' => '', + 'Class:lnkSLAToSLT+' => 'Ce lien indique qu\'un SLT est inclus dans le Niveau de service (SLA). Un SLA contient le plus souvent plusieurs SLTs. Un SLT peut être réutilisé à l\'identique par plusieurs Niveau de service (rare).', 'Class:lnkSLAToSLT/Name' => '%1$s / %2$s', 'Class:lnkSLAToSLT/Attribute:sla_id' => 'SLA', 'Class:lnkSLAToSLT/Attribute:sla_id+' => '', @@ -443,20 +443,22 @@ Dict::Add('FR FR', 'French', 'Français', [ Dict::Add('FR FR', 'French', 'Français', [ 'Class:lnkCustomerContractToService' => 'Lien Contrat client / Service', - 'Class:lnkCustomerContractToService+' => '', + 'Class:lnkCustomerContractToService+' => 'Un ligne unitaire d\'un Contract client, qui spécifie le Service fourni et pour ce service les niveaux d\'engagement souscrits (Niveau de service et fenêtre de couverture).', 'Class:lnkCustomerContractToService/Name' => '%1$s / %2$s', 'Class:lnkCustomerContractToService/Attribute:customercontract_id' => 'Contrat client', 'Class:lnkCustomerContractToService/Attribute:customercontract_id+' => '', 'Class:lnkCustomerContractToService/Attribute:customercontract_name' => 'Nom contrat client', 'Class:lnkCustomerContractToService/Attribute:customercontract_name+' => '', 'Class:lnkCustomerContractToService/Attribute:service_id' => 'Service', - 'Class:lnkCustomerContractToService/Attribute:service_id+' => '', + 'Class:lnkCustomerContractToService/Attribute:service_id+' => 'Toutes les sous-catégories de service liées à ce service sont aussi incluses dans ce contrat client', 'Class:lnkCustomerContractToService/Attribute:service_name' => 'Nom service', 'Class:lnkCustomerContractToService/Attribute:service_name+' => '', 'Class:lnkCustomerContractToService/Attribute:sla_id' => 'SLA', - 'Class:lnkCustomerContractToService/Attribute:sla_id+' => '', + 'Class:lnkCustomerContractToService/Attribute:sla_id+' => 'Niveau d\'engagement pour ce service dans le cadre de ce contrat client', 'Class:lnkCustomerContractToService/Attribute:sla_name' => 'Nom SLA', 'Class:lnkCustomerContractToService/Attribute:sla_name+' => '', + 'Class:lnkCustomerContractToService/Attribute:provider_id' => 'Fournisseur', + 'Class:lnkCustomerContractToService/Attribute:provider_id+' => '', ]); // @@ -465,7 +467,7 @@ Dict::Add('FR FR', 'French', 'Français', [ Dict::Add('FR FR', 'French', 'Français', [ 'Class:lnkCustomerContractToProviderContract' => 'Lien Contrat client / Contrat fournisseur', - 'Class:lnkCustomerContractToProviderContract+' => '', + 'Class:lnkCustomerContractToProviderContract+' => 'Ce lien permet de modéliser lorsqu\'un Contrat fournisseur contribue à la délivrance d\'un Contrat client.', 'Class:lnkCustomerContractToProviderContract/Name' => '%1$s / %2$s', 'Class:lnkCustomerContractToProviderContract/Attribute:customercontract_id' => 'Contrat client', 'Class:lnkCustomerContractToProviderContract/Attribute:customercontract_id+' => '', @@ -482,8 +484,8 @@ Dict::Add('FR FR', 'French', 'Français', [ // Dict::Add('FR FR', 'French', 'Français', [ - 'Class:lnkCustomerContractToFunctionalCI' => 'Lien Contrat client / CI', - 'Class:lnkCustomerContractToFunctionalCI+' => '', + 'Class:lnkCustomerContractToFunctionalCI' => 'Lien Contrat client / CI fonctionnel', + 'Class:lnkCustomerContractToFunctionalCI+' => 'Ce lien permet de modéliser les équipments (CI fonctionnel) qui sont couverts par un Contrat client.', 'Class:lnkCustomerContractToFunctionalCI/Name' => '%1$s / %2$s', 'Class:lnkCustomerContractToFunctionalCI/Attribute:customercontract_id' => 'Contrat client', 'Class:lnkCustomerContractToFunctionalCI/Attribute:customercontract_id+' => '', @@ -501,7 +503,8 @@ Dict::Add('FR FR', 'French', 'Français', [ Dict::Add('FR FR', 'French', 'Français', [ 'Class:DeliveryModel' => 'Modèle de support', - 'Class:DeliveryModel+' => '', + 'Class:DeliveryModel+' => 'Le Modèle de support spécifie les équipes pouvant être affectées aux Tickets, il doit contenir au minimum une Équipe dans l\'onglet Contacts. + Chaque Organisation cliente doit avoir un Modèle de support défini.', 'Class:DeliveryModel/Attribute:name' => 'Nom Modèle de support', 'Class:DeliveryModel/Attribute:name+' => '', 'Class:DeliveryModel/Attribute:org_id' => 'Organisation', @@ -528,7 +531,7 @@ Dict::Add('FR FR', 'French', 'Français', [ Dict::Add('FR FR', 'French', 'Français', [ 'Class:lnkDeliveryModelToContact' => 'Lien Modèle de support / Contact', - 'Class:lnkDeliveryModelToContact+' => '', + 'Class:lnkDeliveryModelToContact+' => 'Ce lien spécifie le rôle d\'une équipe (plus rarement d\'une Personne) dans le cadre d\'un Modèle de support.', 'Class:lnkDeliveryModelToContact/Name' => '%1$s / %2$s', 'Class:lnkDeliveryModelToContact/Attribute:deliverymodel_id' => 'Modèle de support', 'Class:lnkDeliveryModelToContact/Attribute:deliverymodel_id+' => '', @@ -565,12 +568,3 @@ Dict::Add('FR FR', 'French', 'Français', [ 'Class:lnkContractToDocument/Attribute:provider_id' => 'Fournisseur', 'Class:lnkContractToDocument/Attribute:provider_id+' => '', ]); - -// -// Class: lnkCustomerContractToService -// - -Dict::Add('FR FR', 'French', 'Français', [ - 'Class:lnkCustomerContractToService/Attribute:provider_id' => 'Fournisseur', - 'Class:lnkCustomerContractToService/Attribute:provider_id+' => '', -]); diff --git a/datamodels/2.x/itop-service-mgmt-provider/dictionaries/hu.dict.itop-service-mgmt-provider.php b/datamodels/2.x/itop-service-mgmt-provider/dictionaries/hu.dict.itop-service-mgmt-provider.php index c8dd81d1f..7aec4340c 100644 --- a/datamodels/2.x/itop-service-mgmt-provider/dictionaries/hu.dict.itop-service-mgmt-provider.php +++ b/datamodels/2.x/itop-service-mgmt-provider/dictionaries/hu.dict.itop-service-mgmt-provider.php @@ -325,7 +325,7 @@ Dict::Add('HU HU', 'Hungarian', 'Magyar', [ 'Class:ServiceSubcategory/Attribute:status/Value:production' => 'Bevezetve', 'Class:ServiceSubcategory/Attribute:status/Value:production+' => 'production~~', 'Class:ServiceSubcategory/Attribute:request_type' => 'Kérelem típus', - 'Class:ServiceSubcategory/Attribute:request_type+' => '~~', + 'Class:ServiceSubcategory/Attribute:request_type+' => 'Define the type of Ticket (Incident or Service Request) that will be created when a Portal user selects this service subcategory.~~', 'Class:ServiceSubcategory/Attribute:request_type/Value:incident' => 'Incidens', 'Class:ServiceSubcategory/Attribute:request_type/Value:incident+' => '', 'Class:ServiceSubcategory/Attribute:request_type/Value:service_request' => 'Szolgáltatáskérés', @@ -445,6 +445,8 @@ Dict::Add('HU HU', 'Hungarian', 'Magyar', [ 'Class:lnkCustomerContractToService/Attribute:sla_id+' => '~~', 'Class:lnkCustomerContractToService/Attribute:sla_name' => 'SLA név', 'Class:lnkCustomerContractToService/Attribute:sla_name+' => '~~', + 'Class:lnkCustomerContractToService/Attribute:provider_id' => 'Provider~~', + 'Class:lnkCustomerContractToService/Attribute:provider_id+' => '~~', ]); // @@ -547,12 +549,3 @@ Dict::Add('HU HU', 'Hungarian', 'Magyar', [ 'Class:lnkContractToDocument/Attribute:provider_id' => 'Provider id~~', 'Class:lnkContractToDocument/Attribute:provider_id+' => '~~', ]); - -// -// Class: lnkCustomerContractToService -// - -Dict::Add('HU HU', 'Hungarian', 'Magyar', [ - 'Class:lnkCustomerContractToService/Attribute:provider_id' => 'Provider id~~', - 'Class:lnkCustomerContractToService/Attribute:provider_id+' => '~~', -]); diff --git a/datamodels/2.x/itop-service-mgmt-provider/dictionaries/it.dict.itop-service-mgmt-provider.php b/datamodels/2.x/itop-service-mgmt-provider/dictionaries/it.dict.itop-service-mgmt-provider.php index ba41feaa9..1db00d65f 100644 --- a/datamodels/2.x/itop-service-mgmt-provider/dictionaries/it.dict.itop-service-mgmt-provider.php +++ b/datamodels/2.x/itop-service-mgmt-provider/dictionaries/it.dict.itop-service-mgmt-provider.php @@ -249,7 +249,7 @@ Dict::Add('IT IT', 'Italian', 'Italiano', [ 'Class:Service/Attribute:contacts_list' => 'Contatti', 'Class:Service/Attribute:contacts_list+' => 'Tutti i contatti per questo servizio', 'Class:Service/Attribute:status' => 'Stato', - 'Class:Service/Attribute:status+' => '', + 'Class:Service/Attribute:status+' => 'By default only Service in production are visible by Portal users~~', 'Class:Service/Attribute:status/Value:implementation' => 'implementazione', 'Class:Service/Attribute:status/Value:implementation+' => 'implementazione', 'Class:Service/Attribute:status/Value:obsolete' => 'Obsoleto', @@ -325,7 +325,7 @@ Dict::Add('IT IT', 'Italian', 'Italiano', [ 'Class:ServiceSubcategory/Attribute:status/Value:production' => 'Produzione', 'Class:ServiceSubcategory/Attribute:status/Value:production+' => 'production~~', 'Class:ServiceSubcategory/Attribute:request_type' => 'Tipo di Richiesta', - 'Class:ServiceSubcategory/Attribute:request_type+' => '~~', + 'Class:ServiceSubcategory/Attribute:request_type+' => 'Define the type of Ticket (Incident or Service Request) that will be created when a Portal user selects this service subcategory.~~', 'Class:ServiceSubcategory/Attribute:request_type/Value:incident' => 'Incidente', 'Class:ServiceSubcategory/Attribute:request_type/Value:incident+' => 'incident~~', 'Class:ServiceSubcategory/Attribute:request_type/Value:service_request' => 'Richiesta di Servizio', @@ -445,6 +445,8 @@ Dict::Add('IT IT', 'Italian', 'Italiano', [ 'Class:lnkCustomerContractToService/Attribute:sla_id+' => '~~', 'Class:lnkCustomerContractToService/Attribute:sla_name' => 'Nome SLA', 'Class:lnkCustomerContractToService/Attribute:sla_name+' => '~~', + 'Class:lnkCustomerContractToService/Attribute:provider_id' => 'Provider~~', + 'Class:lnkCustomerContractToService/Attribute:provider_id+' => '~~', ]); // @@ -547,12 +549,3 @@ Dict::Add('IT IT', 'Italian', 'Italiano', [ 'Class:lnkContractToDocument/Attribute:provider_id' => 'Provider id~~', 'Class:lnkContractToDocument/Attribute:provider_id+' => '~~', ]); - -// -// Class: lnkCustomerContractToService -// - -Dict::Add('IT IT', 'Italian', 'Italiano', [ - 'Class:lnkCustomerContractToService/Attribute:provider_id' => 'Provider id~~', - 'Class:lnkCustomerContractToService/Attribute:provider_id+' => '~~', -]); diff --git a/datamodels/2.x/itop-service-mgmt-provider/dictionaries/ja.dict.itop-service-mgmt-provider.php b/datamodels/2.x/itop-service-mgmt-provider/dictionaries/ja.dict.itop-service-mgmt-provider.php index 771b7bb74..9e7b56701 100644 --- a/datamodels/2.x/itop-service-mgmt-provider/dictionaries/ja.dict.itop-service-mgmt-provider.php +++ b/datamodels/2.x/itop-service-mgmt-provider/dictionaries/ja.dict.itop-service-mgmt-provider.php @@ -249,7 +249,7 @@ Dict::Add('JA JP', 'Japanese', '日本語', [ 'Class:Service/Attribute:contacts_list' => '連絡先', 'Class:Service/Attribute:contacts_list+' => 'All the contacts for this service~~', 'Class:Service/Attribute:status' => '状態', - 'Class:Service/Attribute:status+' => '', + 'Class:Service/Attribute:status+' => 'By default only Service in production are visible by Portal users~~', 'Class:Service/Attribute:status/Value:implementation' => '実装', 'Class:Service/Attribute:status/Value:implementation+' => '', 'Class:Service/Attribute:status/Value:obsolete' => '廃止', @@ -325,7 +325,7 @@ Dict::Add('JA JP', 'Japanese', '日本語', [ 'Class:ServiceSubcategory/Attribute:status/Value:production' => '稼働', 'Class:ServiceSubcategory/Attribute:status/Value:production+' => '', 'Class:ServiceSubcategory/Attribute:request_type' => '要求タイプ', - 'Class:ServiceSubcategory/Attribute:request_type+' => '', + 'Class:ServiceSubcategory/Attribute:request_type+' => 'Define the type of Ticket (Incident or Service Request) that will be created when a Portal user selects this service subcategory.~~', 'Class:ServiceSubcategory/Attribute:request_type/Value:incident' => 'インシデント', 'Class:ServiceSubcategory/Attribute:request_type/Value:incident+' => '', 'Class:ServiceSubcategory/Attribute:request_type/Value:service_request' => 'サービス要求', @@ -445,6 +445,8 @@ Dict::Add('JA JP', 'Japanese', '日本語', [ 'Class:lnkCustomerContractToService/Attribute:sla_id+' => '', 'Class:lnkCustomerContractToService/Attribute:sla_name' => 'SLA名', 'Class:lnkCustomerContractToService/Attribute:sla_name+' => '', + 'Class:lnkCustomerContractToService/Attribute:provider_id' => 'Provider~~', + 'Class:lnkCustomerContractToService/Attribute:provider_id+' => '~~', ]); // @@ -547,12 +549,3 @@ Dict::Add('JA JP', 'Japanese', '日本語', [ 'Class:lnkContractToDocument/Attribute:provider_id' => 'Provider id~~', 'Class:lnkContractToDocument/Attribute:provider_id+' => '~~', ]); - -// -// Class: lnkCustomerContractToService -// - -Dict::Add('JA JP', 'Japanese', '日本語', [ - 'Class:lnkCustomerContractToService/Attribute:provider_id' => 'Provider id~~', - 'Class:lnkCustomerContractToService/Attribute:provider_id+' => '~~', -]); diff --git a/datamodels/2.x/itop-service-mgmt-provider/dictionaries/nl.dict.itop-service-mgmt-provider.php b/datamodels/2.x/itop-service-mgmt-provider/dictionaries/nl.dict.itop-service-mgmt-provider.php index f9a90a837..9ec2474a1 100644 --- a/datamodels/2.x/itop-service-mgmt-provider/dictionaries/nl.dict.itop-service-mgmt-provider.php +++ b/datamodels/2.x/itop-service-mgmt-provider/dictionaries/nl.dict.itop-service-mgmt-provider.php @@ -251,7 +251,7 @@ Dict::Add('NL NL', 'Dutch', 'Nederlands', [ 'Class:Service/Attribute:contacts_list' => 'Contacten', 'Class:Service/Attribute:contacts_list+' => 'Alle contacten voor deze service', 'Class:Service/Attribute:status' => 'Status', - 'Class:Service/Attribute:status+' => '', + 'Class:Service/Attribute:status+' => 'By default only Service in production are visible by Portal users~~', 'Class:Service/Attribute:status/Value:implementation' => 'Implementatie', 'Class:Service/Attribute:status/Value:implementation+' => 'Implementatie', 'Class:Service/Attribute:status/Value:obsolete' => 'Buiten gebruik', @@ -327,7 +327,7 @@ Dict::Add('NL NL', 'Dutch', 'Nederlands', [ 'Class:ServiceSubcategory/Attribute:status/Value:production' => 'Productie', 'Class:ServiceSubcategory/Attribute:status/Value:production+' => 'Productie', 'Class:ServiceSubcategory/Attribute:request_type' => 'Soort verzoek', - 'Class:ServiceSubcategory/Attribute:request_type+' => '', + 'Class:ServiceSubcategory/Attribute:request_type+' => 'Define the type of Ticket (Incident or Service Request) that will be created when a Portal user selects this service subcategory.~~', 'Class:ServiceSubcategory/Attribute:request_type/Value:incident' => 'Incident', 'Class:ServiceSubcategory/Attribute:request_type/Value:incident+' => 'Incident', 'Class:ServiceSubcategory/Attribute:request_type/Value:service_request' => 'Serviceverzoek', @@ -447,6 +447,8 @@ Dict::Add('NL NL', 'Dutch', 'Nederlands', [ 'Class:lnkCustomerContractToService/Attribute:sla_id+' => '', 'Class:lnkCustomerContractToService/Attribute:sla_name' => 'Naam SLA', 'Class:lnkCustomerContractToService/Attribute:sla_name+' => '', + 'Class:lnkCustomerContractToService/Attribute:provider_id' => 'Provider~~', + 'Class:lnkCustomerContractToService/Attribute:provider_id+' => '~~', ]); // @@ -549,12 +551,3 @@ Dict::Add('NL NL', 'Dutch', 'Nederlands', [ 'Class:lnkContractToDocument/Attribute:provider_id' => 'Provider id~~', 'Class:lnkContractToDocument/Attribute:provider_id+' => '~~', ]); - -// -// Class: lnkCustomerContractToService -// - -Dict::Add('NL NL', 'Dutch', 'Nederlands', [ - 'Class:lnkCustomerContractToService/Attribute:provider_id' => 'Provider id~~', - 'Class:lnkCustomerContractToService/Attribute:provider_id+' => '~~', -]); diff --git a/datamodels/2.x/itop-service-mgmt-provider/dictionaries/pl.dict.itop-service-mgmt-provider.php b/datamodels/2.x/itop-service-mgmt-provider/dictionaries/pl.dict.itop-service-mgmt-provider.php index 534959859..6637494ea 100644 --- a/datamodels/2.x/itop-service-mgmt-provider/dictionaries/pl.dict.itop-service-mgmt-provider.php +++ b/datamodels/2.x/itop-service-mgmt-provider/dictionaries/pl.dict.itop-service-mgmt-provider.php @@ -249,7 +249,7 @@ Dict::Add('PL PL', 'Polish', 'Polski', [ 'Class:Service/Attribute:contacts_list' => 'Kontakty', 'Class:Service/Attribute:contacts_list+' => 'Wszystkie kontakty do tej usługi', 'Class:Service/Attribute:status' => 'Status', - 'Class:Service/Attribute:status+' => '', + 'Class:Service/Attribute:status+' => 'By default only Service in production are visible by Portal users~~', 'Class:Service/Attribute:status/Value:implementation' => 'wdrażane', 'Class:Service/Attribute:status/Value:implementation+' => 'wdrażane', 'Class:Service/Attribute:status/Value:obsolete' => 'wycofane', @@ -325,7 +325,7 @@ Dict::Add('PL PL', 'Polish', 'Polski', [ 'Class:ServiceSubcategory/Attribute:status/Value:production' => 'użytkowane', 'Class:ServiceSubcategory/Attribute:status/Value:production+' => 'użytkowane', 'Class:ServiceSubcategory/Attribute:request_type' => 'Typ zgłoszenia', - 'Class:ServiceSubcategory/Attribute:request_type+' => '', + 'Class:ServiceSubcategory/Attribute:request_type+' => 'Define the type of Ticket (Incident or Service Request) that will be created when a Portal user selects this service subcategory.~~', 'Class:ServiceSubcategory/Attribute:request_type/Value:incident' => 'incydent', 'Class:ServiceSubcategory/Attribute:request_type/Value:incident+' => 'incydent', 'Class:ServiceSubcategory/Attribute:request_type/Value:service_request' => 'zgłoszenie serwisowe', @@ -445,6 +445,8 @@ Dict::Add('PL PL', 'Polish', 'Polski', [ 'Class:lnkCustomerContractToService/Attribute:sla_id+' => '', 'Class:lnkCustomerContractToService/Attribute:sla_name' => 'Nazwa umowy SLA', 'Class:lnkCustomerContractToService/Attribute:sla_name+' => '', + 'Class:lnkCustomerContractToService/Attribute:provider_id' => 'Provider~~', + 'Class:lnkCustomerContractToService/Attribute:provider_id+' => '~~', ]); // @@ -547,12 +549,3 @@ Dict::Add('PL PL', 'Polish', 'Polski', [ 'Class:lnkContractToDocument/Attribute:provider_id' => 'Provider id~~', 'Class:lnkContractToDocument/Attribute:provider_id+' => '~~', ]); - -// -// Class: lnkCustomerContractToService -// - -Dict::Add('PL PL', 'Polish', 'Polski', [ - 'Class:lnkCustomerContractToService/Attribute:provider_id' => 'Provider id~~', - 'Class:lnkCustomerContractToService/Attribute:provider_id+' => '~~', -]); diff --git a/datamodels/2.x/itop-service-mgmt-provider/dictionaries/pt_br.dict.itop-service-mgmt-provider.php b/datamodels/2.x/itop-service-mgmt-provider/dictionaries/pt_br.dict.itop-service-mgmt-provider.php index 7dd4da62d..b7ef3154f 100644 --- a/datamodels/2.x/itop-service-mgmt-provider/dictionaries/pt_br.dict.itop-service-mgmt-provider.php +++ b/datamodels/2.x/itop-service-mgmt-provider/dictionaries/pt_br.dict.itop-service-mgmt-provider.php @@ -249,7 +249,7 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', [ 'Class:Service/Attribute:contacts_list' => 'Contatos', 'Class:Service/Attribute:contacts_list+' => 'Todos os Contatos associados à este Serviço', 'Class:Service/Attribute:status' => 'Status', - 'Class:Service/Attribute:status+' => '', + 'Class:Service/Attribute:status+' => 'By default only Service in production are visible by Portal users~~', 'Class:Service/Attribute:status/Value:implementation' => 'Em homologação', 'Class:Service/Attribute:status/Value:implementation+' => '', 'Class:Service/Attribute:status/Value:obsolete' => 'Obsoleto', @@ -325,7 +325,7 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', [ 'Class:ServiceSubcategory/Attribute:status/Value:production' => 'Em produção', 'Class:ServiceSubcategory/Attribute:status/Value:production+' => '', 'Class:ServiceSubcategory/Attribute:request_type' => 'Tipo de solicitação', - 'Class:ServiceSubcategory/Attribute:request_type+' => '', + 'Class:ServiceSubcategory/Attribute:request_type+' => 'Define the type of Ticket (Incident or Service Request) that will be created when a Portal user selects this service subcategory.~~', 'Class:ServiceSubcategory/Attribute:request_type/Value:incident' => 'Incidente', 'Class:ServiceSubcategory/Attribute:request_type/Value:incident+' => '', 'Class:ServiceSubcategory/Attribute:request_type/Value:service_request' => 'Solicitação de serviço', @@ -445,6 +445,8 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', [ 'Class:lnkCustomerContractToService/Attribute:sla_id+' => '', 'Class:lnkCustomerContractToService/Attribute:sla_name' => 'Nome do SLA', 'Class:lnkCustomerContractToService/Attribute:sla_name+' => '', + 'Class:lnkCustomerContractToService/Attribute:provider_id' => 'Provider~~', + 'Class:lnkCustomerContractToService/Attribute:provider_id+' => '~~', ]); // @@ -547,12 +549,3 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', [ 'Class:lnkContractToDocument/Attribute:provider_id' => 'Provider id~~', 'Class:lnkContractToDocument/Attribute:provider_id+' => '~~', ]); - -// -// Class: lnkCustomerContractToService -// - -Dict::Add('PT BR', 'Brazilian', 'Brazilian', [ - 'Class:lnkCustomerContractToService/Attribute:provider_id' => 'Provider id~~', - 'Class:lnkCustomerContractToService/Attribute:provider_id+' => '~~', -]); diff --git a/datamodels/2.x/itop-service-mgmt-provider/dictionaries/ru.dict.itop-service-mgmt-provider.php b/datamodels/2.x/itop-service-mgmt-provider/dictionaries/ru.dict.itop-service-mgmt-provider.php index 10a254378..97a946b9e 100644 --- a/datamodels/2.x/itop-service-mgmt-provider/dictionaries/ru.dict.itop-service-mgmt-provider.php +++ b/datamodels/2.x/itop-service-mgmt-provider/dictionaries/ru.dict.itop-service-mgmt-provider.php @@ -250,7 +250,7 @@ Dict::Add('RU RU', 'Russian', 'Русский', [ 'Class:Service/Attribute:contacts_list' => 'Контакты', 'Class:Service/Attribute:contacts_list+' => 'Связанные контакты', 'Class:Service/Attribute:status' => 'Статус', - 'Class:Service/Attribute:status+' => '', + 'Class:Service/Attribute:status+' => 'By default only Service in production are visible by Portal users~~', 'Class:Service/Attribute:status/Value:implementation' => 'Внедрение', 'Class:Service/Attribute:status/Value:implementation+' => 'Внедрение', 'Class:Service/Attribute:status/Value:obsolete' => 'Устаревший', @@ -326,7 +326,7 @@ Dict::Add('RU RU', 'Russian', 'Русский', [ 'Class:ServiceSubcategory/Attribute:status/Value:production' => 'Эксплуатация', 'Class:ServiceSubcategory/Attribute:status/Value:production+' => 'Эксплуатация', 'Class:ServiceSubcategory/Attribute:request_type' => 'Тип запроса', - 'Class:ServiceSubcategory/Attribute:request_type+' => '', + 'Class:ServiceSubcategory/Attribute:request_type+' => 'Define the type of Ticket (Incident or Service Request) that will be created when a Portal user selects this service subcategory.~~', 'Class:ServiceSubcategory/Attribute:request_type/Value:incident' => 'Инцидент', 'Class:ServiceSubcategory/Attribute:request_type/Value:incident+' => 'Инцидент', 'Class:ServiceSubcategory/Attribute:request_type/Value:service_request' => 'Запрос на обслуживание', @@ -446,6 +446,8 @@ Dict::Add('RU RU', 'Russian', 'Русский', [ 'Class:lnkCustomerContractToService/Attribute:sla_id+' => '', 'Class:lnkCustomerContractToService/Attribute:sla_name' => 'SLA', 'Class:lnkCustomerContractToService/Attribute:sla_name+' => '', + 'Class:lnkCustomerContractToService/Attribute:provider_id' => 'Provider~~', + 'Class:lnkCustomerContractToService/Attribute:provider_id+' => '~~', ]); // @@ -548,12 +550,3 @@ Dict::Add('RU RU', 'Russian', 'Русский', [ 'Class:lnkContractToDocument/Attribute:provider_id' => 'Provider id~~', 'Class:lnkContractToDocument/Attribute:provider_id+' => '~~', ]); - -// -// Class: lnkCustomerContractToService -// - -Dict::Add('RU RU', 'Russian', 'Русский', [ - 'Class:lnkCustomerContractToService/Attribute:provider_id' => 'Provider id~~', - 'Class:lnkCustomerContractToService/Attribute:provider_id+' => '~~', -]); diff --git a/datamodels/2.x/itop-service-mgmt-provider/dictionaries/sk.dict.itop-service-mgmt-provider.php b/datamodels/2.x/itop-service-mgmt-provider/dictionaries/sk.dict.itop-service-mgmt-provider.php index 945ad9949..5ba82ebe3 100644 --- a/datamodels/2.x/itop-service-mgmt-provider/dictionaries/sk.dict.itop-service-mgmt-provider.php +++ b/datamodels/2.x/itop-service-mgmt-provider/dictionaries/sk.dict.itop-service-mgmt-provider.php @@ -325,7 +325,7 @@ Dict::Add('SK SK', 'Slovak', 'Slovenčina', [ 'Class:ServiceSubcategory/Attribute:status/Value:production' => 'Produkcia', 'Class:ServiceSubcategory/Attribute:status/Value:production+' => 'production~~', 'Class:ServiceSubcategory/Attribute:request_type' => 'Typ požiadavky', - 'Class:ServiceSubcategory/Attribute:request_type+' => '~~', + 'Class:ServiceSubcategory/Attribute:request_type+' => 'Define the type of Ticket (Incident or Service Request) that will be created when a Portal user selects this service subcategory.~~', 'Class:ServiceSubcategory/Attribute:request_type/Value:incident' => 'Incident', 'Class:ServiceSubcategory/Attribute:request_type/Value:incident+' => 'incident~~', 'Class:ServiceSubcategory/Attribute:request_type/Value:service_request' => 'Požiadavka', @@ -445,6 +445,8 @@ Dict::Add('SK SK', 'Slovak', 'Slovenčina', [ 'Class:lnkCustomerContractToService/Attribute:sla_id+' => '~~', 'Class:lnkCustomerContractToService/Attribute:sla_name' => 'SLA Názov', 'Class:lnkCustomerContractToService/Attribute:sla_name+' => '~~', + 'Class:lnkCustomerContractToService/Attribute:provider_id' => 'Provider~~', + 'Class:lnkCustomerContractToService/Attribute:provider_id+' => '~~', ]); // @@ -547,12 +549,3 @@ Dict::Add('SK SK', 'Slovak', 'Slovenčina', [ 'Class:lnkContractToDocument/Attribute:provider_id' => 'Provider id~~', 'Class:lnkContractToDocument/Attribute:provider_id+' => '~~', ]); - -// -// Class: lnkCustomerContractToService -// - -Dict::Add('SK SK', 'Slovak', 'Slovenčina', [ - 'Class:lnkCustomerContractToService/Attribute:provider_id' => 'Provider id~~', - 'Class:lnkCustomerContractToService/Attribute:provider_id+' => '~~', -]); diff --git a/datamodels/2.x/itop-service-mgmt-provider/dictionaries/tr.dict.itop-service-mgmt-provider.php b/datamodels/2.x/itop-service-mgmt-provider/dictionaries/tr.dict.itop-service-mgmt-provider.php index df017bf01..b5b81971c 100644 --- a/datamodels/2.x/itop-service-mgmt-provider/dictionaries/tr.dict.itop-service-mgmt-provider.php +++ b/datamodels/2.x/itop-service-mgmt-provider/dictionaries/tr.dict.itop-service-mgmt-provider.php @@ -249,7 +249,7 @@ Dict::Add('TR TR', 'Turkish', 'Türkçe', [ 'Class:Service/Attribute:contacts_list' => 'Contacts~~', 'Class:Service/Attribute:contacts_list+' => 'All the contacts for this service~~', 'Class:Service/Attribute:status' => 'Durum', - 'Class:Service/Attribute:status+' => '', + 'Class:Service/Attribute:status+' => 'By default only Service in production are visible by Portal users~~', 'Class:Service/Attribute:status/Value:implementation' => 'implementation~~', 'Class:Service/Attribute:status/Value:implementation+' => 'implementation~~', 'Class:Service/Attribute:status/Value:obsolete' => 'Üretimden Kalkan', @@ -325,7 +325,7 @@ Dict::Add('TR TR', 'Turkish', 'Türkçe', [ 'Class:ServiceSubcategory/Attribute:status/Value:production' => 'production~~', 'Class:ServiceSubcategory/Attribute:status/Value:production+' => 'production~~', 'Class:ServiceSubcategory/Attribute:request_type' => 'Request type~~', - 'Class:ServiceSubcategory/Attribute:request_type+' => '~~', + 'Class:ServiceSubcategory/Attribute:request_type+' => 'Define the type of Ticket (Incident or Service Request) that will be created when a Portal user selects this service subcategory.~~', 'Class:ServiceSubcategory/Attribute:request_type/Value:incident' => 'incident~~', 'Class:ServiceSubcategory/Attribute:request_type/Value:incident+' => 'incident~~', 'Class:ServiceSubcategory/Attribute:request_type/Value:service_request' => 'service request~~', @@ -445,6 +445,8 @@ Dict::Add('TR TR', 'Turkish', 'Türkçe', [ 'Class:lnkCustomerContractToService/Attribute:sla_id+' => '~~', 'Class:lnkCustomerContractToService/Attribute:sla_name' => 'SLA Name~~', 'Class:lnkCustomerContractToService/Attribute:sla_name+' => '~~', + 'Class:lnkCustomerContractToService/Attribute:provider_id' => 'Provider~~', + 'Class:lnkCustomerContractToService/Attribute:provider_id+' => '~~', ]); // @@ -547,12 +549,3 @@ Dict::Add('TR TR', 'Turkish', 'Türkçe', [ 'Class:lnkContractToDocument/Attribute:provider_id' => 'Provider id~~', 'Class:lnkContractToDocument/Attribute:provider_id+' => '~~', ]); - -// -// Class: lnkCustomerContractToService -// - -Dict::Add('TR TR', 'Turkish', 'Türkçe', [ - 'Class:lnkCustomerContractToService/Attribute:provider_id' => 'Provider id~~', - 'Class:lnkCustomerContractToService/Attribute:provider_id+' => '~~', -]); diff --git a/datamodels/2.x/itop-service-mgmt-provider/dictionaries/zh_cn.dict.itop-service-mgmt-provider.php b/datamodels/2.x/itop-service-mgmt-provider/dictionaries/zh_cn.dict.itop-service-mgmt-provider.php index fb95f714c..d4461e97e 100644 --- a/datamodels/2.x/itop-service-mgmt-provider/dictionaries/zh_cn.dict.itop-service-mgmt-provider.php +++ b/datamodels/2.x/itop-service-mgmt-provider/dictionaries/zh_cn.dict.itop-service-mgmt-provider.php @@ -272,7 +272,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', [ 'Class:Service/Attribute:contacts_list' => '联系人', 'Class:Service/Attribute:contacts_list+' => '此服务相关的所有联系人', 'Class:Service/Attribute:status' => '状态', - 'Class:Service/Attribute:status+' => '', + 'Class:Service/Attribute:status+' => 'By default only Service in production are visible by Portal users~~', 'Class:Service/Attribute:status/Value:implementation' => '启用', 'Class:Service/Attribute:status/Value:implementation+' => '启用', 'Class:Service/Attribute:status/Value:obsolete' => '废弃', @@ -348,7 +348,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', [ 'Class:ServiceSubcategory/Attribute:status/Value:production' => '生产', 'Class:ServiceSubcategory/Attribute:status/Value:production+' => '生产', 'Class:ServiceSubcategory/Attribute:request_type' => '需求类型', - 'Class:ServiceSubcategory/Attribute:request_type+' => '', + 'Class:ServiceSubcategory/Attribute:request_type+' => 'Define the type of Ticket (Incident or Service Request) that will be created when a Portal user selects this service subcategory.~~', 'Class:ServiceSubcategory/Attribute:request_type/Value:incident' => '事件', 'Class:ServiceSubcategory/Attribute:request_type/Value:incident+' => '事件', 'Class:ServiceSubcategory/Attribute:request_type/Value:service_request' => '服务需求', @@ -468,6 +468,8 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', [ 'Class:lnkCustomerContractToService/Attribute:sla_id+' => '', 'Class:lnkCustomerContractToService/Attribute:sla_name' => 'SLA名称', 'Class:lnkCustomerContractToService/Attribute:sla_name+' => '', + 'Class:lnkCustomerContractToService/Attribute:provider_id' => 'Provider~~', + 'Class:lnkCustomerContractToService/Attribute:provider_id+' => '~~', ]); // @@ -570,12 +572,3 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', [ 'Class:lnkContractToDocument/Attribute:provider_id' => 'Provider id~~', 'Class:lnkContractToDocument/Attribute:provider_id+' => '~~', ]); - -// -// Class: lnkCustomerContractToService -// - -Dict::Add('ZH CN', 'Chinese', '简体中文', [ - 'Class:lnkCustomerContractToService/Attribute:provider_id' => 'Provider id~~', - 'Class:lnkCustomerContractToService/Attribute:provider_id+' => '~~', -]); diff --git a/datamodels/2.x/itop-service-mgmt-provider/module.itop-service-mgmt-provider.php b/datamodels/2.x/itop-service-mgmt-provider/module.itop-service-mgmt-provider.php index 3356b8448..7e92b5da2 100755 --- a/datamodels/2.x/itop-service-mgmt-provider/module.itop-service-mgmt-provider.php +++ b/datamodels/2.x/itop-service-mgmt-provider/module.itop-service-mgmt-provider.php @@ -26,18 +26,18 @@ SetupWebPage::AddModule( //'data.struct.itop-service-mgmt.xml', ], 'data.sample' => [ - 'data.sample.organizations.xml', - 'data.sample.contracts.xml', - 'data.sample.servicefamilies.xml', - 'data.sample.services.xml', - 'data.sample.serviceelements.xml', - 'data.sample.sla.xml', - 'data.sample.slt.xml', - 'data.sample.sltsla.xml', - // 'data.sample.coveragewindows.xml', - 'data.sample.contractservice.xml', - // 'data.sample.deliverymodel.xml', - 'data.sample.deliverymodelcontact.xml', + 'data/data.sample.organizations.xml', + 'data/data.sample.contracts.xml', + 'data/data.sample.servicefamilies.xml', + 'data/data.sample.services.xml', + 'data/data.sample.serviceelements.xml', + 'data/data.sample.sla.xml', + 'data/data.sample.slt.xml', + 'data/data.sample.sltsla.xml', + // 'data/data.sample.coveragewindows.xml', + 'data/data.sample.contractservice.xml', + // 'data/data.sample.deliverymodel.xml', + 'data/data.sample.deliverymodelcontact.xml', ], // Documentation diff --git a/datamodels/2.x/itop-service-mgmt/data.sample.contracts.xml b/datamodels/2.x/itop-service-mgmt/data/data.sample.contracts.xml old mode 100755 new mode 100644 similarity index 100% rename from datamodels/2.x/itop-service-mgmt/data.sample.contracts.xml rename to datamodels/2.x/itop-service-mgmt/data/data.sample.contracts.xml diff --git a/datamodels/2.x/itop-service-mgmt/data.sample.contractservice.xml b/datamodels/2.x/itop-service-mgmt/data/data.sample.contractservice.xml old mode 100755 new mode 100644 similarity index 100% rename from datamodels/2.x/itop-service-mgmt/data.sample.contractservice.xml rename to datamodels/2.x/itop-service-mgmt/data/data.sample.contractservice.xml diff --git a/datamodels/2.x/itop-service-mgmt/data.sample.coveragewindows.xml b/datamodels/2.x/itop-service-mgmt/data/data.sample.coveragewindows.xml old mode 100755 new mode 100644 similarity index 100% rename from datamodels/2.x/itop-service-mgmt/data.sample.coveragewindows.xml rename to datamodels/2.x/itop-service-mgmt/data/data.sample.coveragewindows.xml diff --git a/datamodels/2.x/itop-service-mgmt/data.sample.deliverymodel.xml b/datamodels/2.x/itop-service-mgmt/data/data.sample.deliverymodel.xml old mode 100755 new mode 100644 similarity index 100% rename from datamodels/2.x/itop-service-mgmt/data.sample.deliverymodel.xml rename to datamodels/2.x/itop-service-mgmt/data/data.sample.deliverymodel.xml diff --git a/datamodels/2.x/itop-service-mgmt/data.sample.deliverymodelcontact.xml b/datamodels/2.x/itop-service-mgmt/data/data.sample.deliverymodelcontact.xml old mode 100755 new mode 100644 similarity index 100% rename from datamodels/2.x/itop-service-mgmt/data.sample.deliverymodelcontact.xml rename to datamodels/2.x/itop-service-mgmt/data/data.sample.deliverymodelcontact.xml diff --git a/datamodels/2.x/itop-service-mgmt/data.sample.organizations.xml b/datamodels/2.x/itop-service-mgmt/data/data.sample.organizations.xml old mode 100755 new mode 100644 similarity index 100% rename from datamodels/2.x/itop-service-mgmt/data.sample.organizations.xml rename to datamodels/2.x/itop-service-mgmt/data/data.sample.organizations.xml diff --git a/datamodels/2.x/itop-service-mgmt/data.sample.serviceelements.xml b/datamodels/2.x/itop-service-mgmt/data/data.sample.serviceelements.xml old mode 100755 new mode 100644 similarity index 100% rename from datamodels/2.x/itop-service-mgmt/data.sample.serviceelements.xml rename to datamodels/2.x/itop-service-mgmt/data/data.sample.serviceelements.xml diff --git a/datamodels/2.x/itop-service-mgmt/data.sample.servicefamilies.xml b/datamodels/2.x/itop-service-mgmt/data/data.sample.servicefamilies.xml similarity index 100% rename from datamodels/2.x/itop-service-mgmt/data.sample.servicefamilies.xml rename to datamodels/2.x/itop-service-mgmt/data/data.sample.servicefamilies.xml diff --git a/datamodels/2.x/itop-service-mgmt/data.sample.services.xml b/datamodels/2.x/itop-service-mgmt/data/data.sample.services.xml old mode 100755 new mode 100644 similarity index 100% rename from datamodels/2.x/itop-service-mgmt/data.sample.services.xml rename to datamodels/2.x/itop-service-mgmt/data/data.sample.services.xml diff --git a/datamodels/2.x/itop-service-mgmt/data.sample.sla.xml b/datamodels/2.x/itop-service-mgmt/data/data.sample.sla.xml old mode 100755 new mode 100644 similarity index 100% rename from datamodels/2.x/itop-service-mgmt/data.sample.sla.xml rename to datamodels/2.x/itop-service-mgmt/data/data.sample.sla.xml diff --git a/datamodels/2.x/itop-service-mgmt/data.sample.slt.xml b/datamodels/2.x/itop-service-mgmt/data/data.sample.slt.xml old mode 100755 new mode 100644 similarity index 100% rename from datamodels/2.x/itop-service-mgmt/data.sample.slt.xml rename to datamodels/2.x/itop-service-mgmt/data/data.sample.slt.xml diff --git a/datamodels/2.x/itop-service-mgmt/data.sample.sltsla.xml b/datamodels/2.x/itop-service-mgmt/data/data.sample.sltsla.xml old mode 100755 new mode 100644 similarity index 100% rename from datamodels/2.x/itop-service-mgmt/data.sample.sltsla.xml rename to datamodels/2.x/itop-service-mgmt/data/data.sample.sltsla.xml diff --git a/datamodels/2.x/itop-service-mgmt/datamodel.itop-service-mgmt.xml b/datamodels/2.x/itop-service-mgmt/datamodel.itop-service-mgmt.xml index a0a94d527..42fcd043d 100755 --- a/datamodels/2.x/itop-service-mgmt/datamodel.itop-service-mgmt.xml +++ b/datamodels/2.x/itop-service-mgmt/datamodel.itop-service-mgmt.xml @@ -2806,8 +2806,8 @@ public function PrefillSearchForm(&$aContextParam) 1 Class:Service - /icons8-service.svg - UI-ServiceCatalogMenu-ObsoleteNotInPortal + ../images/icons/icons8-service.svg + UI-ServiceCatalogMenu-OnlyProductionInPortal SELECT Service status implementation,obsolete,production @@ -2815,8 +2815,8 @@ public function PrefillSearchForm(&$aContextParam) 2 Class:ServiceSubcategory - /icons8-services.svg - UI-ServiceCatalogMenu-ObsoleteNotInPortal + ../images/icons/icons8-services.svg + UI-ServiceCatalogMenu-OnlyProductionInPortal SELECT ServiceSubcategory status implementation,obsolete,production diff --git a/datamodels/2.x/itop-service-mgmt/dictionaries/cs.dict.itop-service-mgmt.php b/datamodels/2.x/itop-service-mgmt/dictionaries/cs.dict.itop-service-mgmt.php index bd90aee63..0b6437832 100644 --- a/datamodels/2.x/itop-service-mgmt/dictionaries/cs.dict.itop-service-mgmt.php +++ b/datamodels/2.x/itop-service-mgmt/dictionaries/cs.dict.itop-service-mgmt.php @@ -237,7 +237,7 @@ Dict::Add('CS CZ', 'Czech', 'Čeština', [ 'Class:Service/Attribute:contacts_list' => 'Kontakty', 'Class:Service/Attribute:contacts_list+' => 'Všechny kontakty pro tuto službu', 'Class:Service/Attribute:status' => 'Stav', - 'Class:Service/Attribute:status+' => '', + 'Class:Service/Attribute:status+' => 'By default only Service in production are visible by Portal users~~', 'Class:Service/Attribute:status/Value:implementation' => 'implementace', 'Class:Service/Attribute:status/Value:implementation+' => '', 'Class:Service/Attribute:status/Value:obsolete' => 'zastaralá', @@ -309,7 +309,7 @@ Dict::Add('CS CZ', 'Czech', 'Čeština', [ 'Class:ServiceSubcategory/Attribute:service_name' => 'Název služby', 'Class:ServiceSubcategory/Attribute:service_name+' => '', 'Class:ServiceSubcategory/Attribute:request_type' => 'Typ požadavku', - 'Class:ServiceSubcategory/Attribute:request_type+' => '', + 'Class:ServiceSubcategory/Attribute:request_type+' => 'Define the type of Ticket (Incident or Service Request) that will be created when a Portal user selects this service subcategory.~~', 'Class:ServiceSubcategory/Attribute:request_type/Value:incident' => 'incident', 'Class:ServiceSubcategory/Attribute:request_type/Value:incident+' => '', 'Class:ServiceSubcategory/Attribute:request_type/Value:service_request' => 'požadavek na službu', diff --git a/datamodels/2.x/itop-service-mgmt/dictionaries/da.dict.itop-service-mgmt.php b/datamodels/2.x/itop-service-mgmt/dictionaries/da.dict.itop-service-mgmt.php index cc03b3419..7cd51db4e 100644 --- a/datamodels/2.x/itop-service-mgmt/dictionaries/da.dict.itop-service-mgmt.php +++ b/datamodels/2.x/itop-service-mgmt/dictionaries/da.dict.itop-service-mgmt.php @@ -236,7 +236,7 @@ Dict::Add('DA DA', 'Danish', 'Dansk', [ 'Class:Service/Attribute:contacts_list' => 'Kontakter', 'Class:Service/Attribute:contacts_list+' => 'All the contacts for this service~~', 'Class:Service/Attribute:status' => 'Status', - 'Class:Service/Attribute:status+' => '', + 'Class:Service/Attribute:status+' => 'By default only Service in production are visible by Portal users~~', 'Class:Service/Attribute:status/Value:implementation' => 'Implementering', 'Class:Service/Attribute:status/Value:implementation+' => '', 'Class:Service/Attribute:status/Value:obsolete' => 'Forældet', @@ -308,7 +308,7 @@ Dict::Add('DA DA', 'Danish', 'Dansk', [ 'Class:ServiceSubcategory/Attribute:service_name' => 'Ydelse', 'Class:ServiceSubcategory/Attribute:service_name+' => '', 'Class:ServiceSubcategory/Attribute:request_type' => 'Anmodnings type', - 'Class:ServiceSubcategory/Attribute:request_type+' => '', + 'Class:ServiceSubcategory/Attribute:request_type+' => 'Define the type of Ticket (Incident or Service Request) that will be created when a Portal user selects this service subcategory.~~', 'Class:ServiceSubcategory/Attribute:request_type/Value:incident' => 'Incident', 'Class:ServiceSubcategory/Attribute:request_type/Value:incident+' => '', 'Class:ServiceSubcategory/Attribute:request_type/Value:service_request' => 'Service Anmodning', diff --git a/datamodels/2.x/itop-service-mgmt/dictionaries/de.dict.itop-service-mgmt.php b/datamodels/2.x/itop-service-mgmt/dictionaries/de.dict.itop-service-mgmt.php index fca27eca3..40e24fdb3 100644 --- a/datamodels/2.x/itop-service-mgmt/dictionaries/de.dict.itop-service-mgmt.php +++ b/datamodels/2.x/itop-service-mgmt/dictionaries/de.dict.itop-service-mgmt.php @@ -236,7 +236,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', [ 'Class:Service/Attribute:contacts_list' => 'Kontakte', 'Class:Service/Attribute:contacts_list+' => 'Alle mit dem Service verknüpften Kontakte', 'Class:Service/Attribute:status' => 'Status', - 'Class:Service/Attribute:status+' => '', + 'Class:Service/Attribute:status+' => 'By default only Service in production are visible by Portal users~~', 'Class:Service/Attribute:status/Value:implementation' => 'Implementation', 'Class:Service/Attribute:status/Value:implementation+' => '', 'Class:Service/Attribute:status/Value:obsolete' => 'Obsolet (Veraltet)', @@ -308,7 +308,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', [ 'Class:ServiceSubcategory/Attribute:service_name' => 'Service', 'Class:ServiceSubcategory/Attribute:service_name+' => '', 'Class:ServiceSubcategory/Attribute:request_type' => 'Request-Typ', - 'Class:ServiceSubcategory/Attribute:request_type+' => '', + 'Class:ServiceSubcategory/Attribute:request_type+' => 'Define the type of Ticket (Incident or Service Request) that will be created when a Portal user selects this service subcategory.~~', 'Class:ServiceSubcategory/Attribute:request_type/Value:incident' => 'Incident', 'Class:ServiceSubcategory/Attribute:request_type/Value:incident+' => '', 'Class:ServiceSubcategory/Attribute:request_type/Value:service_request' => 'Service-Request', diff --git a/datamodels/2.x/itop-service-mgmt/dictionaries/en.dict.itop-service-mgmt.php b/datamodels/2.x/itop-service-mgmt/dictionaries/en.dict.itop-service-mgmt.php index 02d7c29bb..03fb1abd5 100644 --- a/datamodels/2.x/itop-service-mgmt/dictionaries/en.dict.itop-service-mgmt.php +++ b/datamodels/2.x/itop-service-mgmt/dictionaries/en.dict.itop-service-mgmt.php @@ -95,7 +95,7 @@ The delivery model specifies the teams to which tickets can be assigned.', Dict::Add('EN US', 'English', 'English', [ 'Class:ContractType' => 'Contract Type', - 'Class:ContractType+' => '', + 'Class:ContractType+' => 'Typology for categorizing Customer and Provider Contracts.', ]); // @@ -104,7 +104,7 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:Contract' => 'Contract', - 'Class:Contract+' => '', + 'Class:Contract+' => 'Abstract class to handle fields common to the different contract sub-classes.', 'Class:Contract/Attribute:name' => 'Name', 'Class:Contract/Attribute:name+' => '', 'Class:Contract/Attribute:org_id' => 'Customer', @@ -138,11 +138,11 @@ Dict::Add('EN US', 'English', 'English', [ 'Class:Contract/Attribute:cost_unit' => 'Cost unit', 'Class:Contract/Attribute:cost_unit+' => '', 'Class:Contract/Attribute:provider_id' => 'Provider', - 'Class:Contract/Attribute:provider_id+' => '', + 'Class:Contract/Attribute:provider_id+' => 'Provider organization for this contract. Can be different from the provider of the associated services.', 'Class:Contract/Attribute:provider_name' => 'Provider Name', 'Class:Contract/Attribute:provider_name+' => 'Common name', 'Class:Contract/Attribute:status' => 'Status', - 'Class:Contract/Attribute:status+' => '', + 'Class:Contract/Attribute:status+' => 'The status is not computed based on start and end dates. It must be set manually.', 'Class:Contract/Attribute:status/Value:implementation' => 'implementation', 'Class:Contract/Attribute:status/Value:implementation+' => 'implementation', 'Class:Contract/Attribute:status/Value:obsolete' => 'obsolete', @@ -158,7 +158,7 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:CustomerContract' => 'Customer Contract', - 'Class:CustomerContract+' => '', + 'Class:CustomerContract+' => 'Agreement between a client and a provider for the delivery of services with an optional level of commitment (SLA, Coverage Window).', 'Class:CustomerContract/Attribute:services_list' => 'Services', 'Class:CustomerContract/Attribute:services_list+' => 'All the services purchased for this contract', ]); @@ -169,13 +169,13 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:ProviderContract' => 'Provider Contract', - 'Class:ProviderContract+' => '', + 'Class:ProviderContract+' => 'Agreement between an external provider and an internal organization.', 'Class:ProviderContract/Attribute:functionalcis_list' => 'CIs', 'Class:ProviderContract/Attribute:functionalcis_list+' => 'All the configuration items covered by this provider contract', 'Class:ProviderContract/Attribute:sla' => 'SLA', 'Class:ProviderContract/Attribute:sla+' => 'Service Level Agreement', 'Class:ProviderContract/Attribute:coverage' => 'Service hours', - 'Class:ProviderContract/Attribute:coverage+' => '', + 'Class:ProviderContract/Attribute:coverage+' => 'Temporal coverage of the contract, e.g. 24x7, 9x5, etc.', 'Class:ProviderContract/Attribute:contracttype_id' => 'Contract type', 'Class:ProviderContract/Attribute:contracttype_id+' => '', 'Class:ProviderContract/Attribute:contracttype_name' => 'Contract type name', @@ -190,7 +190,7 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:lnkContactToContract' => 'Link Contact / Contract', - 'Class:lnkContactToContract+' => '', + 'Class:lnkContactToContract+' => 'Manages key contacts on each customer or provider contract.', 'Class:lnkContactToContract/Name' => '%1$s / %2$s', 'Class:lnkContactToContract/Attribute:contract_id' => 'Contract', 'Class:lnkContactToContract/Attribute:contract_id+' => '', @@ -208,7 +208,7 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:lnkContractToDocument' => 'Link Contract / Document', - 'Class:lnkContractToDocument+' => '', + 'Class:lnkContractToDocument+' => 'Link used when a Document is applicable to a Contract.', 'Class:lnkContractToDocument/Name' => '%1$s / %2$s', 'Class:lnkContractToDocument/Attribute:contract_id' => 'Contract', 'Class:lnkContractToDocument/Attribute:contract_id+' => '', @@ -226,7 +226,7 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:ServiceFamily' => 'Service Family', - 'Class:ServiceFamily+' => '', + 'Class:ServiceFamily+' => 'Top level of Service hierarchy. Required for Services to be proposed in User Portal.', 'Class:ServiceFamily/Attribute:name' => 'Name', 'Class:ServiceFamily/Attribute:name+' => '', 'Class:ServiceFamily/Attribute:icon' => 'Icon', @@ -241,7 +241,7 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:Service' => 'Service', - 'Class:Service+' => '', + 'Class:Service+' => 'A Service is delivered by an organization and subscribed to through a Contract Client. It must contain at least one Service Subcategory.', 'Class:Service/ComplementaryName' => '%1$s - %2$s', 'Class:Service/Attribute:name' => 'Name', 'Class:Service/Attribute:name+' => '', @@ -260,7 +260,7 @@ Dict::Add('EN US', 'English', 'English', [ 'Class:Service/Attribute:contacts_list' => 'Contacts', 'Class:Service/Attribute:contacts_list+' => 'All the contacts for this service', 'Class:Service/Attribute:status' => 'Status', - 'Class:Service/Attribute:status+' => '', + 'Class:Service/Attribute:status+' => 'By default only Service in production are visible by Portal users', 'Class:Service/Attribute:status/Value:implementation' => 'implementation', 'Class:Service/Attribute:status/Value:implementation+' => 'implementation', 'Class:Service/Attribute:status/Value:obsolete' => 'obsolete', @@ -285,7 +285,7 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:lnkDocumentToService' => 'Link Document / Service', - 'Class:lnkDocumentToService+' => '', + 'Class:lnkDocumentToService+' => 'Link used when a Document is applicable to a Service.', 'Class:lnkDocumentToService/Name' => '%1$s / %2$s', 'Class:lnkDocumentToService/Attribute:service_id' => 'Service', 'Class:lnkDocumentToService/Attribute:service_id+' => '', @@ -303,7 +303,7 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:lnkContactToService' => 'Link Contact / Service', - 'Class:lnkContactToService+' => '', + 'Class:lnkContactToService+' => 'Ideal for defining the team to which Tickets created on the related Service will be assigned (automatically or manually).', 'Class:lnkContactToService/Name' => '%1$s / %2$s', 'Class:lnkContactToService/Attribute:service_id' => 'Service', 'Class:lnkContactToService/Attribute:service_id+' => '', @@ -321,7 +321,7 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:ServiceSubcategory' => 'Service Subcategory', - 'Class:ServiceSubcategory+' => '', + 'Class:ServiceSubcategory+' => 'Lowest level in Service hierarchy. User Request are usually associated to one Service Subcategory.', 'Class:ServiceSubcategory/ComplementaryName' => '%1$s - %2$s', 'Class:ServiceSubcategory/Attribute:name' => 'Name', 'Class:ServiceSubcategory/Attribute:name+' => '', @@ -332,13 +332,13 @@ Dict::Add('EN US', 'English', 'English', [ 'Class:ServiceSubcategory/Attribute:service_name' => 'Service name', 'Class:ServiceSubcategory/Attribute:service_name+' => '', 'Class:ServiceSubcategory/Attribute:request_type' => 'Request type', - 'Class:ServiceSubcategory/Attribute:request_type+' => '', + 'Class:ServiceSubcategory/Attribute:request_type+' => 'Define the type of Ticket (Incident or Service Request) that will be created when a Portal user selects this service subcategory.', 'Class:ServiceSubcategory/Attribute:request_type/Value:incident' => 'incident', 'Class:ServiceSubcategory/Attribute:request_type/Value:incident+' => 'incident', 'Class:ServiceSubcategory/Attribute:request_type/Value:service_request' => 'service request', 'Class:ServiceSubcategory/Attribute:request_type/Value:service_request+' => 'service request', 'Class:ServiceSubcategory/Attribute:status' => 'Status', - 'Class:ServiceSubcategory/Attribute:status+' => '', + 'Class:ServiceSubcategory/Attribute:status+' => 'Service subcategory status has usually an impact on User Portal visibility.', 'Class:ServiceSubcategory/Attribute:status/Value:implementation' => 'implementation', 'Class:ServiceSubcategory/Attribute:status/Value:implementation+' => 'implementation', 'Class:ServiceSubcategory/Attribute:status/Value:obsolete' => 'obsolete', @@ -353,7 +353,7 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:SLA' => 'SLA', - 'Class:SLA+' => '', + 'Class:SLA+' => 'Service Level Agreement (SLA) applicable to a Service subscribed by a customer and measured using SLTs.', 'Class:SLA/Attribute:name' => 'Name', 'Class:SLA/Attribute:name+' => '', 'Class:SLA/Attribute:description' => 'description', @@ -375,11 +375,11 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:SLT' => 'SLT', - 'Class:SLT+' => '', + 'Class:SLT+' => 'Service Level Target under a Service Level Agreement (SLA). Defines a maximum time for a metric (TTO or TTR), a request type (Incident or Request) and a priority.', 'Class:SLT/Attribute:name' => 'Name', 'Class:SLT/Attribute:name+' => '', 'Class:SLT/Attribute:priority' => 'Priority', - 'Class:SLT/Attribute:priority+' => '', + 'Class:SLT/Attribute:priority+' => 'Ticket priority to which this SLT applies. Only tickets with this priority must comply with this SLT.', 'Class:SLT/Attribute:priority/Value:1' => 'critical', 'Class:SLT/Attribute:priority/Value:1+' => 'critical', 'Class:SLT/Attribute:priority/Value:2' => 'high', @@ -389,21 +389,21 @@ Dict::Add('EN US', 'English', 'English', [ 'Class:SLT/Attribute:priority/Value:4' => 'low', 'Class:SLT/Attribute:priority/Value:4+' => 'low', 'Class:SLT/Attribute:request_type' => 'Request type', - 'Class:SLT/Attribute:request_type+' => '', + 'Class:SLT/Attribute:request_type+' => 'Request type to which this SLT applies. Only tickets with this request type must comply with this SLT.', 'Class:SLT/Attribute:request_type/Value:incident' => 'incident', 'Class:SLT/Attribute:request_type/Value:incident+' => 'incident', 'Class:SLT/Attribute:request_type/Value:service_request' => 'service request', 'Class:SLT/Attribute:request_type/Value:service_request+' => 'service request', 'Class:SLT/Attribute:metric' => 'Metric', - 'Class:SLT/Attribute:metric+' => '', + 'Class:SLT/Attribute:metric+' => 'Delay type to which this SLT applies. TTO (Time To Own) or TTR (Time To Resolve).', 'Class:SLT/Attribute:metric/Value:tto' => 'TTO', 'Class:SLT/Attribute:metric/Value:tto+' => 'TTO', 'Class:SLT/Attribute:metric/Value:ttr' => 'TTR', 'Class:SLT/Attribute:metric/Value:ttr+' => 'TTR', 'Class:SLT/Attribute:value' => 'Value', - 'Class:SLT/Attribute:value+' => '', + 'Class:SLT/Attribute:value+' => 'Delay value which must not be exceeded to be compliant with the target. The unit is defined in the "unit" attribute.', 'Class:SLT/Attribute:unit' => 'Unit', - 'Class:SLT/Attribute:unit+' => '', + 'Class:SLT/Attribute:unit+' => 'Unit for the delay value.', 'Class:SLT/Attribute:unit/Value:hours' => 'hours', 'Class:SLT/Attribute:unit/Value:hours+' => 'hours', 'Class:SLT/Attribute:unit/Value:minutes' => 'minutes', @@ -418,7 +418,7 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:lnkSLAToSLT' => 'Link SLA / SLT', - 'Class:lnkSLAToSLT+' => '', + 'Class:lnkSLAToSLT+' => 'This link indicates that an SLT is included in the Service Level Agreement (SLA). An SLA usually contains several SLTs. An SLT can be reused as is by several SLAs (seldom).', 'Class:lnkSLAToSLT/Name' => '%1$s / %2$s', 'Class:lnkSLAToSLT/Attribute:sla_id' => 'SLA', 'Class:lnkSLAToSLT/Attribute:sla_id+' => '', @@ -446,20 +446,22 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:lnkCustomerContractToService' => 'Link Customer Contract / Service', - 'Class:lnkCustomerContractToService+' => '', + 'Class:lnkCustomerContractToService+' => 'A single line of a customer contract, specifying the Service provided and, for this service, the subscribed commitment levels (Service Level Aggrement and Coverage Window).', 'Class:lnkCustomerContractToService/Name' => '%1$s / %2$s', 'Class:lnkCustomerContractToService/Attribute:customercontract_id' => 'Customer contract', 'Class:lnkCustomerContractToService/Attribute:customercontract_id+' => '', 'Class:lnkCustomerContractToService/Attribute:customercontract_name' => 'Customer contract Name', 'Class:lnkCustomerContractToService/Attribute:customercontract_name+' => '', 'Class:lnkCustomerContractToService/Attribute:service_id' => 'Service', - 'Class:lnkCustomerContractToService/Attribute:service_id+' => '', + 'Class:lnkCustomerContractToService/Attribute:service_id+' => 'All service subcategories linked to this service are also included by the contract.', 'Class:lnkCustomerContractToService/Attribute:service_name' => 'Service Name', 'Class:lnkCustomerContractToService/Attribute:service_name+' => '', 'Class:lnkCustomerContractToService/Attribute:sla_id' => 'SLA', - 'Class:lnkCustomerContractToService/Attribute:sla_id+' => '', + 'Class:lnkCustomerContractToService/Attribute:sla_id+' => 'Service Level Agreement applicable to this service for this customer contract.', 'Class:lnkCustomerContractToService/Attribute:sla_name' => 'SLA Name', 'Class:lnkCustomerContractToService/Attribute:sla_name+' => '', + 'Class:lnkCustomerContractToService/Attribute:provider_id' => 'Provider id', + 'Class:lnkCustomerContractToService/Attribute:provider_id+' => '', ]); // @@ -467,8 +469,8 @@ Dict::Add('EN US', 'English', 'English', [ // Dict::Add('EN US', 'English', 'English', [ - 'Class:lnkProviderContractToService' => 'Link Provider Contract / Service', - 'Class:lnkProviderContractToService+' => '', + 'Class:lnkProviderContractToService' => 'Link ProviderContract / Service', + 'Class:lnkProviderContractToService+' => 'This link can model that a provider contract enables the delivery of a Service.', 'Class:lnkProviderContractToService/Name' => '%1$s / %2$s', 'Class:lnkProviderContractToService/Attribute:service_id' => 'Service', 'Class:lnkProviderContractToService/Attribute:service_id+' => '', @@ -478,6 +480,8 @@ Dict::Add('EN US', 'English', 'English', [ 'Class:lnkProviderContractToService/Attribute:providercontract_id+' => '', 'Class:lnkProviderContractToService/Attribute:providercontract_name' => 'Provider contract Name', 'Class:lnkProviderContractToService/Attribute:providercontract_name+' => '', + 'Class:lnkProviderContractToService/Attribute:provider_id' => 'Provider id', + 'Class:lnkProviderContractToService/Attribute:provider_id+' => '', ]); // @@ -486,7 +490,8 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:DeliveryModel' => 'Delivery Model', - 'Class:DeliveryModel+' => '', + 'Class:DeliveryModel+' => 'The Delivery Model specifies the Teams that can be assigned to Tickets; it must contain at least one Team in the Contacts tab. +Each client Organization must have a defined Delivery Model.', 'Class:DeliveryModel/Attribute:name' => 'Name', 'Class:DeliveryModel/Attribute:name+' => 'Don\'t forget to add teams to this delivery model', 'Class:DeliveryModel/Attribute:org_id' => 'Organization', @@ -506,8 +511,8 @@ Dict::Add('EN US', 'English', 'English', [ // Dict::Add('EN US', 'English', 'English', [ - 'Class:lnkDeliveryModelToContact' => 'Link Delivery Model / Contact', - 'Class:lnkDeliveryModelToContact+' => '', + 'Class:lnkDeliveryModelToContact' => 'Link DeliveryModel / Contact', + 'Class:lnkDeliveryModelToContact+' => 'This link specifies the role of a Team (more rarely a Person) within a Delivery Model.', 'Class:lnkDeliveryModelToContact/Name' => '%1$s / %2$s', 'Class:lnkDeliveryModelToContact/Attribute:deliverymodel_id' => 'Delivery model', 'Class:lnkDeliveryModelToContact/Attribute:deliverymodel_id+' => '', @@ -544,21 +549,3 @@ Dict::Add('EN US', 'English', 'English', [ 'Class:lnkContractToDocument/Attribute:provider_id' => 'Provider id', 'Class:lnkContractToDocument/Attribute:provider_id+' => '', ]); - -// -// Class: lnkCustomerContractToService -// - -Dict::Add('EN US', 'English', 'English', [ - 'Class:lnkCustomerContractToService/Attribute:provider_id' => 'Provider id', - 'Class:lnkCustomerContractToService/Attribute:provider_id+' => '', -]); - -// -// Class: lnkProviderContractToService -// - -Dict::Add('EN US', 'English', 'English', [ - 'Class:lnkProviderContractToService/Attribute:provider_id' => 'Provider id', - 'Class:lnkProviderContractToService/Attribute:provider_id+' => '', -]); diff --git a/datamodels/2.x/itop-service-mgmt/dictionaries/en_gb.dict.itop-service-mgmt.php b/datamodels/2.x/itop-service-mgmt/dictionaries/en_gb.dict.itop-service-mgmt.php index 99885aeec..b7be803c8 100644 --- a/datamodels/2.x/itop-service-mgmt/dictionaries/en_gb.dict.itop-service-mgmt.php +++ b/datamodels/2.x/itop-service-mgmt/dictionaries/en_gb.dict.itop-service-mgmt.php @@ -258,7 +258,7 @@ Dict::Add('EN GB', 'British English', 'British English', [ 'Class:Service/Attribute:contacts_list' => 'Contacts', 'Class:Service/Attribute:contacts_list+' => 'All the contacts for this service', 'Class:Service/Attribute:status' => 'Status', - 'Class:Service/Attribute:status+' => '', + 'Class:Service/Attribute:status+' => 'By default only Service in production are visible by Portal users~~', 'Class:Service/Attribute:status/Value:implementation' => 'implementation', 'Class:Service/Attribute:status/Value:implementation+' => 'implementation', 'Class:Service/Attribute:status/Value:obsolete' => 'obsolete', @@ -330,7 +330,7 @@ Dict::Add('EN GB', 'British English', 'British English', [ 'Class:ServiceSubcategory/Attribute:service_name' => 'Service name', 'Class:ServiceSubcategory/Attribute:service_name+' => '', 'Class:ServiceSubcategory/Attribute:request_type' => 'Request type', - 'Class:ServiceSubcategory/Attribute:request_type+' => '', + 'Class:ServiceSubcategory/Attribute:request_type+' => 'Define the type of Ticket (Incident or Service Request) that will be created when a Portal user selects this service subcategory.~~', 'Class:ServiceSubcategory/Attribute:request_type/Value:incident' => 'incident', 'Class:ServiceSubcategory/Attribute:request_type/Value:incident+' => 'incident', 'Class:ServiceSubcategory/Attribute:request_type/Value:service_request' => 'service request', diff --git a/datamodels/2.x/itop-service-mgmt/dictionaries/es_cr.dict.itop-service-mgmt.php b/datamodels/2.x/itop-service-mgmt/dictionaries/es_cr.dict.itop-service-mgmt.php index e8606b42d..9db2d9ea9 100644 --- a/datamodels/2.x/itop-service-mgmt/dictionaries/es_cr.dict.itop-service-mgmt.php +++ b/datamodels/2.x/itop-service-mgmt/dictionaries/es_cr.dict.itop-service-mgmt.php @@ -199,13 +199,13 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ 'Class:ServiceFamily' => 'Familia de Servicios', - 'Class:ServiceFamily+' => 'Familia de Servicios', + 'Class:ServiceFamily+' => '', 'Class:ServiceFamily/Attribute:name' => 'Nombre', 'Class:ServiceFamily/Attribute:name+' => 'Nombre de la Familia de Servicios', 'Class:ServiceFamily/Attribute:icon' => 'Icono', 'Class:ServiceFamily/Attribute:icon+' => '', 'Class:ServiceFamily/Attribute:services_list' => 'Servicios', - 'Class:ServiceFamily/Attribute:services_list+' => 'Servicios', + 'Class:ServiceFamily/Attribute:services_list+' => '', ]); // @@ -214,7 +214,7 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ 'Class:Service' => 'Servicio', - 'Class:Service+' => 'Servicio', + 'Class:Service+' => '', 'Class:Service/ComplementaryName' => '%1$s - %2$s', 'Class:Service/Attribute:name' => 'Nombre', 'Class:Service/Attribute:name+' => 'Nombre del Servicio', @@ -233,7 +233,7 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ 'Class:Service/Attribute:contacts_list' => 'Contactos', 'Class:Service/Attribute:contacts_list+' => 'Contactos', 'Class:Service/Attribute:status' => 'Estatus', - 'Class:Service/Attribute:status+' => 'Estatus', + 'Class:Service/Attribute:status+' => 'By default only Service in production are visible by Portal users~~', 'Class:Service/Attribute:status/Value:implementation' => 'No Productivo', 'Class:Service/Attribute:status/Value:implementation+' => 'No Productivo', 'Class:Service/Attribute:status/Value:obsolete' => 'Obsoleto', @@ -241,7 +241,7 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ 'Class:Service/Attribute:status/Value:production' => 'Productivo', 'Class:Service/Attribute:status/Value:production+' => 'Productivo', 'Class:Service/Attribute:icon' => 'Icono', - 'Class:Service/Attribute:icon+' => 'Icono', + 'Class:Service/Attribute:icon+' => '', 'Class:Service/Attribute:customercontracts_list' => 'Acuerdos con Clientes', 'Class:Service/Attribute:customercontracts_list+' => 'Acuerdos con Clientes', 'Class:Service/Attribute:providercontracts_list' => 'Contratos con Proveedores', @@ -299,19 +299,19 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ 'Class:ServiceSubcategory/Attribute:name' => 'Nombre', 'Class:ServiceSubcategory/Attribute:name+' => 'Nombre de la Subcategoria', 'Class:ServiceSubcategory/Attribute:description' => 'Descripción', - 'Class:ServiceSubcategory/Attribute:description+' => 'Descripción', + 'Class:ServiceSubcategory/Attribute:description+' => '', 'Class:ServiceSubcategory/Attribute:service_id' => 'Servicio', - 'Class:ServiceSubcategory/Attribute:service_id+' => 'Servicio', + 'Class:ServiceSubcategory/Attribute:service_id+' => '', 'Class:ServiceSubcategory/Attribute:service_name' => 'Servicio', 'Class:ServiceSubcategory/Attribute:service_name+' => 'Servicio', 'Class:ServiceSubcategory/Attribute:request_type' => 'Tipo de Reporte', - 'Class:ServiceSubcategory/Attribute:request_type+' => 'Tipo de Reporte', + 'Class:ServiceSubcategory/Attribute:request_type+' => 'Define the type of Ticket (Incident or Service Request) that will be created when a Portal user selects this service subcategory.~~', 'Class:ServiceSubcategory/Attribute:request_type/Value:incident' => 'Incidente', 'Class:ServiceSubcategory/Attribute:request_type/Value:incident+' => 'Incidente', 'Class:ServiceSubcategory/Attribute:request_type/Value:service_request' => 'Requerimiento de Servicio', 'Class:ServiceSubcategory/Attribute:request_type/Value:service_request+' => 'Requerimiento de Servicio', 'Class:ServiceSubcategory/Attribute:status' => 'Estatus', - 'Class:ServiceSubcategory/Attribute:status+' => 'Estatus', + 'Class:ServiceSubcategory/Attribute:status+' => '', 'Class:ServiceSubcategory/Attribute:status/Value:implementation' => 'No Productivo', 'Class:ServiceSubcategory/Attribute:status/Value:implementation+' => 'No Productivo', 'Class:ServiceSubcategory/Attribute:status/Value:obsolete' => 'Obsoleto', @@ -326,19 +326,19 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ 'Class:SLA' => 'SLA - Acuerdo de Nivel de Servicio', - 'Class:SLA+' => 'SLA - Acuerdo de Nivel de Servicio', + 'Class:SLA+' => '', 'Class:SLA/Attribute:name' => 'Nombre', 'Class:SLA/Attribute:name+' => 'Nombre del SLA', 'Class:SLA/Attribute:description' => 'Descripción', - 'Class:SLA/Attribute:description+' => 'Descripción', + 'Class:SLA/Attribute:description+' => '', 'Class:SLA/Attribute:org_id' => 'Proveedor', - 'Class:SLA/Attribute:org_id+' => 'Proveedor', + 'Class:SLA/Attribute:org_id+' => '', 'Class:SLA/Attribute:organization_name' => 'Proveedor', 'Class:SLA/Attribute:organization_name+' => 'Proveedor', 'Class:SLA/Attribute:slts_list' => 'SLTs - Objetivos de Nivel de Servicio', 'Class:SLA/Attribute:slts_list+' => 'Objetivos de Nivel de Servicio', 'Class:SLA/Attribute:customercontracts_list' => 'Acuerdos con Clientes', - 'Class:SLA/Attribute:customercontracts_list+' => 'Acuerdos con Clientes', + 'Class:SLA/Attribute:customercontracts_list+' => '', 'Class:SLA/Error:UniqueLnkCustomerContractToService' => 'No se puede guardar relación de Acuerco con Cliente %1$s con Servicio %2$s : El SLA ya existe', ]); @@ -348,11 +348,11 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ 'Class:SLT' => 'SLT - Objetivos de Nivel de Servicio', - 'Class:SLT+' => 'SLT - Objetivos de Nivel de Servicio', + 'Class:SLT+' => '', 'Class:SLT/Attribute:name' => 'Nombre', 'Class:SLT/Attribute:name+' => 'Nombre del SLT', 'Class:SLT/Attribute:priority' => 'Prioridad', - 'Class:SLT/Attribute:priority+' => 'Prioridad', + 'Class:SLT/Attribute:priority+' => '', 'Class:SLT/Attribute:priority/Value:1' => 'Crítico', 'Class:SLT/Attribute:priority/Value:1+' => 'Crítico', 'Class:SLT/Attribute:priority/Value:2' => 'Alto', @@ -362,21 +362,21 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ 'Class:SLT/Attribute:priority/Value:4' => 'Bajo', 'Class:SLT/Attribute:priority/Value:4+' => 'Bajo', 'Class:SLT/Attribute:request_type' => 'Tipo de Reporte', - 'Class:SLT/Attribute:request_type+' => 'Tipo de Reporte', + 'Class:SLT/Attribute:request_type+' => '', 'Class:SLT/Attribute:request_type/Value:incident' => 'Incidente', 'Class:SLT/Attribute:request_type/Value:incident+' => 'Incidente', 'Class:SLT/Attribute:request_type/Value:service_request' => 'Requerimiento de Servicio', 'Class:SLT/Attribute:request_type/Value:service_request+' => 'Requerimiento de Servicio', 'Class:SLT/Attribute:metric' => 'Métrica', - 'Class:SLT/Attribute:metric+' => 'Métrica', + 'Class:SLT/Attribute:metric+' => '', 'Class:SLT/Attribute:metric/Value:tto' => 'TDA - Tiempo de Asignación', 'Class:SLT/Attribute:metric/Value:tto+' => 'Tiempo de Asignación', 'Class:SLT/Attribute:metric/Value:ttr' => 'TDS - Tiempo de Solución', 'Class:SLT/Attribute:metric/Value:ttr+' => 'Tiempo de Solución', 'Class:SLT/Attribute:value' => 'Valor', - 'Class:SLT/Attribute:value+' => 'Valor', + 'Class:SLT/Attribute:value+' => '', 'Class:SLT/Attribute:unit' => 'Unidad', - 'Class:SLT/Attribute:unit+' => 'Unidad', + 'Class:SLT/Attribute:unit+' => '', 'Class:SLT/Attribute:unit/Value:hours' => 'Horas', 'Class:SLT/Attribute:unit/Value:hours+' => 'Horas', 'Class:SLT/Attribute:unit/Value:minutes' => 'Minutos', @@ -459,19 +459,19 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ 'Class:DeliveryModel' => 'Modelo de Entrega', - 'Class:DeliveryModel+' => 'Modelo de Entrega', + 'Class:DeliveryModel+' => '', 'Class:DeliveryModel/Attribute:name' => 'Nombre', 'Class:DeliveryModel/Attribute:name+' => 'Nombre del Modelo de Entrega', 'Class:DeliveryModel/Attribute:org_id' => 'Organización', - 'Class:DeliveryModel/Attribute:org_id+' => 'Organización', + 'Class:DeliveryModel/Attribute:org_id+' => '', 'Class:DeliveryModel/Attribute:organization_name' => 'Organización', 'Class:DeliveryModel/Attribute:organization_name+' => 'Organización', 'Class:DeliveryModel/Attribute:description' => 'Descripción', - 'Class:DeliveryModel/Attribute:description+' => 'Descripción', + 'Class:DeliveryModel/Attribute:description+' => '', 'Class:DeliveryModel/Attribute:contacts_list' => 'Contactos', - 'Class:DeliveryModel/Attribute:contacts_list+' => 'Contactos', + 'Class:DeliveryModel/Attribute:contacts_list+' => '', 'Class:DeliveryModel/Attribute:customers_list' => 'Clientes', - 'Class:DeliveryModel/Attribute:customers_list+' => 'Clientes', + 'Class:DeliveryModel/Attribute:customers_list+' => '', ]); // diff --git a/datamodels/2.x/itop-service-mgmt/dictionaries/fr.dict.itop-service-mgmt.php b/datamodels/2.x/itop-service-mgmt/dictionaries/fr.dict.itop-service-mgmt.php index 5eb887469..651904c96 100644 --- a/datamodels/2.x/itop-service-mgmt/dictionaries/fr.dict.itop-service-mgmt.php +++ b/datamodels/2.x/itop-service-mgmt/dictionaries/fr.dict.itop-service-mgmt.php @@ -22,7 +22,7 @@ Dict::Add('FR FR', 'French', 'Français', [ 'Menu:ProviderContract+' => 'Ce qui est acheté à des sociétés externes', 'Menu:CustomerContract' => 'Contrats clients', 'Menu:CustomerContract+' => 'Qui achète quels services', - 'Menu:ServiceSubcategory' => 'Sous catégories de service', + 'Menu:ServiceSubcategory' => 'Sous-catégories de service', 'Menu:ServiceSubcategory+' => 'Dernier niveau dans la hiérarchie des services', 'Menu:Service' => 'Services', 'Menu:Service+' => 'Second niveau dans la hiérarchie des services', @@ -68,7 +68,7 @@ Dict::Add('FR FR', 'French', 'Français', [ Dict::Add('FR FR', 'French', 'Français', [ 'Class:ContractType' => 'Type de contrat', - 'Class:ContractType+' => '', + 'Class:ContractType+' => 'Typologie pour catégoriser les Contrats Client et Fournisseur.', ]); // @@ -77,7 +77,7 @@ Dict::Add('FR FR', 'French', 'Français', [ Dict::Add('FR FR', 'French', 'Français', [ 'Class:Contract' => 'Contrat', - 'Class:Contract+' => '', + 'Class:Contract+' => 'Classe abstraite qui gére les caractéristiques communes aux différents types de contrat.', 'Class:Contract/Attribute:name' => 'Nom', 'Class:Contract/Attribute:name+' => '', 'Class:Contract/Attribute:org_id' => 'Client', @@ -111,11 +111,11 @@ Dict::Add('FR FR', 'French', 'Français', [ 'Class:Contract/Attribute:cost_unit' => 'Unité de coût', 'Class:Contract/Attribute:cost_unit+' => '', 'Class:Contract/Attribute:provider_id' => 'Fournisseur', - 'Class:Contract/Attribute:provider_id+' => '', + 'Class:Contract/Attribute:provider_id+' => 'Fournisseur du contrat. Parfois différent du fournisseur des services liés à ce contrat.', 'Class:Contract/Attribute:provider_name' => 'Nom Fournisseur', 'Class:Contract/Attribute:provider_name+' => '', 'Class:Contract/Attribute:status' => 'Etat', - 'Class:Contract/Attribute:status+' => '', + 'Class:Contract/Attribute:status+' => 'L\'état du contrat n\'est pas calculé en fonction des dates de début et de fin. Il doit être mis à jour indépendamment.', 'Class:Contract/Attribute:status/Value:implementation' => 'Implémentation', 'Class:Contract/Attribute:status/Value:implementation+' => '', 'Class:Contract/Attribute:status/Value:obsolete' => 'Obsolète', @@ -131,7 +131,7 @@ Dict::Add('FR FR', 'French', 'Français', [ Dict::Add('FR FR', 'French', 'Français', [ 'Class:CustomerContract' => 'Contrat client', - 'Class:CustomerContract+' => '', + 'Class:CustomerContract+' => 'Accord entre un client et un fournisseur pour la délivrance de Services associés éventuellement à des niveaux d\'engagement (Niveau de service, Fenêtre de couverture).', 'Class:CustomerContract/Attribute:services_list' => 'Services', 'Class:CustomerContract/Attribute:services_list+' => 'Tous les services achetés pour ce contrat', ]); @@ -142,13 +142,13 @@ Dict::Add('FR FR', 'French', 'Français', [ Dict::Add('FR FR', 'French', 'Français', [ 'Class:ProviderContract' => 'Contrat fournisseur', - 'Class:ProviderContract+' => '', + 'Class:ProviderContract+' => 'Accord entre un fournisseur externe et une organisation interne.', 'Class:ProviderContract/Attribute:functionalcis_list' => 'CIs', 'Class:ProviderContract/Attribute:functionalcis_list+' => 'Tous les éléments de configuration couverts par ce contrat fournisseur', 'Class:ProviderContract/Attribute:sla' => 'Niveau de service', 'Class:ProviderContract/Attribute:sla+' => 'Accord de niveau de service (SLA)', 'Class:ProviderContract/Attribute:coverage' => 'Couverture', - 'Class:ProviderContract/Attribute:coverage+' => '', + 'Class:ProviderContract/Attribute:coverage+' => 'Fenêtre de couverture temporelle pour ce contrat fournisseur', 'Class:ProviderContract/Attribute:contracttype_id' => 'Type de contrat', 'Class:ProviderContract/Attribute:contracttype_id+' => '', 'Class:ProviderContract/Attribute:contracttype_name' => 'Nom Type de contrat', @@ -163,7 +163,7 @@ Dict::Add('FR FR', 'French', 'Français', [ Dict::Add('FR FR', 'French', 'Français', [ 'Class:lnkContactToContract' => 'Lien Contact / Contrat', - 'Class:lnkContactToContract+' => '', + 'Class:lnkContactToContract+' => 'Gère les contacts clés sur chaque contract client ou fournisseur.', 'Class:lnkContactToContract/Name' => '%1$s / %2$s', 'Class:lnkContactToContract/Attribute:contract_id' => 'Contrat', 'Class:lnkContactToContract/Attribute:contract_id+' => '', @@ -181,7 +181,7 @@ Dict::Add('FR FR', 'French', 'Français', [ Dict::Add('FR FR', 'French', 'Français', [ 'Class:lnkContractToDocument' => 'Lien Contrat / Document', - 'Class:lnkContractToDocument+' => '', + 'Class:lnkContractToDocument+' => 'Lien utilisé lorsqu\'un Document est applicable à un Contract.', 'Class:lnkContractToDocument/Name' => '%1$s / %2$s', 'Class:lnkContractToDocument/Attribute:contract_id' => 'Contrat', 'Class:lnkContractToDocument/Attribute:contract_id+' => '', @@ -198,8 +198,8 @@ Dict::Add('FR FR', 'French', 'Français', [ // Dict::Add('FR FR', 'French', 'Français', [ - 'Class:ServiceFamily' => 'Famille de service', - 'Class:ServiceFamily+' => '', + 'Class:ServiceFamily' => 'Famille de services', + 'Class:ServiceFamily+' => 'Premier niveau dans la hiérarchie des Services. Obligatoire pour qu\'un Service soit proposé dans le Portail Utilisateur.', 'Class:ServiceFamily/Attribute:name' => 'Nom', 'Class:ServiceFamily/Attribute:name+' => '', 'Class:ServiceFamily/Attribute:icon' => 'Icône', @@ -214,7 +214,7 @@ Dict::Add('FR FR', 'French', 'Français', [ Dict::Add('FR FR', 'French', 'Français', [ 'Class:Service' => 'Service', - 'Class:Service+' => '', + 'Class:Service+' => 'Un Service est délivré par une organisation et souscrit par le biais de Contract Client. Il doit au moins contenir une Sous catégorie de Service.', 'Class:Service/ComplementaryName' => '%1$s - %2$s', 'Class:Service/Attribute:name' => 'Nom', 'Class:Service/Attribute:name+' => '', @@ -239,7 +239,7 @@ Dict::Add('FR FR', 'French', 'Français', [ 'Class:Service/Attribute:contacts_list' => 'Contacts', 'Class:Service/Attribute:contacts_list+' => 'Tous les contacts liés à ce service', 'Class:Service/Attribute:status' => 'Etat', - 'Class:Service/Attribute:status+' => '', + 'Class:Service/Attribute:status+' => 'Seuls les services en production sont visibles des utilisateurs du portail.', 'Class:Service/Attribute:status/Value:implementation' => 'Implémentation', 'Class:Service/Attribute:status/Value:implementation+' => '', 'Class:Service/Attribute:status/Value:obsolete' => 'Obsolète', @@ -253,9 +253,9 @@ Dict::Add('FR FR', 'French', 'Français', [ 'Class:Service/Attribute:providercontracts_list' => 'Contrats fournisseur', 'Class:Service/Attribute:providercontracts_list+' => 'Tous les contrats fournisseurs qui offrent du support pour ce service', 'Class:Service/Attribute:functionalcis_list' => 'CIs', - 'Class:Service/Attribute:functionalcis_list+' => 'Tous les éléments de configuration utilsiés pour fournir ce service', - 'Class:Service/Attribute:servicesubcategories_list' => 'Sous catégories de service', - 'Class:Service/Attribute:servicesubcategories_list+' => 'Toutes les sous catégories de service pour ce service', + 'Class:Service/Attribute:functionalcis_list+' => 'Tous les éléments de configuration utilisés pour fournir ce service', + 'Class:Service/Attribute:servicesubcategories_list' => 'Sous-catégories de service', + 'Class:Service/Attribute:servicesubcategories_list+' => 'Toutes les sous-catégories de service pour ce service', 'Class:Service/Attribute:servicesubcategories_list/UI:Links:Create:Button+' => 'Créer une %4$s', 'Class:Service/Attribute:servicesubcategories_list/UI:Links:Create:Modal:Title' => 'Ajouter une %4$s à %2$s', 'Class:Service/Attribute:servicesubcategories_list/UI:Links:Delete:Button+' => 'Supprimer cette %4$s', @@ -270,7 +270,7 @@ Dict::Add('FR FR', 'French', 'Français', [ Dict::Add('FR FR', 'French', 'Français', [ 'Class:lnkDocumentToService' => 'Lien Document / Service', - 'Class:lnkDocumentToService+' => '', + 'Class:lnkDocumentToService+' => 'Lien utilisé lorsqu\'un Document est applicable à un Service.', 'Class:lnkDocumentToService/Name' => '%1$s / %2$s', 'Class:lnkDocumentToService/Attribute:service_id' => 'Service', 'Class:lnkDocumentToService/Attribute:service_id+' => '', @@ -288,7 +288,7 @@ Dict::Add('FR FR', 'French', 'Français', [ Dict::Add('FR FR', 'French', 'Français', [ 'Class:lnkContactToService' => 'Lien Contact / Service', - 'Class:lnkContactToService+' => '', + 'Class:lnkContactToService+' => 'Idéal pour définir l\'équipe à laquelle on affectera (automatiquement ou manuellement) les Tickets créés sur le Service lié.', 'Class:lnkContactToService/Name' => '%1$s / %2$s', 'Class:lnkContactToService/Attribute:service_id' => 'Service', 'Class:lnkContactToService/Attribute:service_id+' => '', @@ -305,8 +305,8 @@ Dict::Add('FR FR', 'French', 'Français', [ // Dict::Add('FR FR', 'French', 'Français', [ - 'Class:ServiceSubcategory' => 'Sous catégorie de service', - 'Class:ServiceSubcategory+' => '', + 'Class:ServiceSubcategory' => 'Sous-catégorie de service', + 'Class:ServiceSubcategory+' => 'Dernier niveau dans la hiérarchie des Services. Chaque Demande utilisateur se réfère à une Sous-catégorie de service.', 'Class:ServiceSubcategory/ComplementaryName' => '%1$s - %2$s', 'Class:ServiceSubcategory/Attribute:name' => 'Nom', 'Class:ServiceSubcategory/Attribute:name+' => '', @@ -317,13 +317,13 @@ Dict::Add('FR FR', 'French', 'Français', [ 'Class:ServiceSubcategory/Attribute:service_name' => 'Nom Service', 'Class:ServiceSubcategory/Attribute:service_name+' => '', 'Class:ServiceSubcategory/Attribute:request_type' => 'Type de requête', - 'Class:ServiceSubcategory/Attribute:request_type+' => '', + 'Class:ServiceSubcategory/Attribute:request_type+' => 'Définit le type de Ticket (Incident ou Demande de service) qui sera créé lorsqu\'un utilisateur du Portail sélectionne cette sous-catégorie de service', 'Class:ServiceSubcategory/Attribute:request_type/Value:incident' => 'incident', - 'Class:ServiceSubcategory/Attribute:request_type/Value:incident+' => 'incident', + 'Class:ServiceSubcategory/Attribute:request_type/Value:incident+' => '', 'Class:ServiceSubcategory/Attribute:request_type/Value:service_request' => 'demande de service', - 'Class:ServiceSubcategory/Attribute:request_type/Value:service_request+' => 'demande de service', + 'Class:ServiceSubcategory/Attribute:request_type/Value:service_request+' => '', 'Class:ServiceSubcategory/Attribute:status' => 'Etat', - 'Class:ServiceSubcategory/Attribute:status+' => '', + 'Class:ServiceSubcategory/Attribute:status+' => 'L\'état d\'une sous-catégorie de service conditionne sa visibilité dans le portail utilisateur.', 'Class:ServiceSubcategory/Attribute:status/Value:implementation' => 'Implémentation', 'Class:ServiceSubcategory/Attribute:status/Value:implementation+' => '', 'Class:ServiceSubcategory/Attribute:status/Value:obsolete' => 'Obsolète', @@ -338,7 +338,7 @@ Dict::Add('FR FR', 'French', 'Français', [ Dict::Add('FR FR', 'French', 'Français', [ 'Class:SLA' => 'Niveau de service', - 'Class:SLA+' => '', + 'Class:SLA+' => 'Accord de niveau de service (SLA) applicable à un Service souscrit par un client et mesuré à l\'aide de SLTs.', 'Class:SLA/Attribute:name' => 'Nom', 'Class:SLA/Attribute:name+' => '', 'Class:SLA/Attribute:description' => 'Description', @@ -366,39 +366,39 @@ Dict::Add('FR FR', 'French', 'Français', [ Dict::Add('FR FR', 'French', 'Français', [ 'Class:SLT' => 'SLT', - 'Class:SLT+' => 'Objectif de niveau de service (SLT)', + 'Class:SLT+' => 'Objectif mesurable au sein d\'un Niveau de service (SLA). Défini un délai maximum pour une métrique (TTO ou TTR), un type de requête (Incident ou Demande) et une priorité.', 'Class:SLT/Attribute:name' => 'Nom', 'Class:SLT/Attribute:name+' => '', 'Class:SLT/Attribute:priority' => 'Priorité', - 'Class:SLT/Attribute:priority+' => '', + 'Class:SLT/Attribute:priority+' => 'Priorité du ticket pour laquelle cet objectif est applicable', 'Class:SLT/Attribute:priority/Value:1' => 'critique', - 'Class:SLT/Attribute:priority/Value:1+' => 'critique', + 'Class:SLT/Attribute:priority/Value:1+' => '', 'Class:SLT/Attribute:priority/Value:2' => 'haute', - 'Class:SLT/Attribute:priority/Value:2+' => 'haute', + 'Class:SLT/Attribute:priority/Value:2+' => '', 'Class:SLT/Attribute:priority/Value:3' => 'moyenne', - 'Class:SLT/Attribute:priority/Value:3+' => 'moyenne', + 'Class:SLT/Attribute:priority/Value:3+' => '', 'Class:SLT/Attribute:priority/Value:4' => 'basse', - 'Class:SLT/Attribute:priority/Value:4+' => 'basse', + 'Class:SLT/Attribute:priority/Value:4+' => '', 'Class:SLT/Attribute:request_type' => 'Type de requête', - 'Class:SLT/Attribute:request_type+' => '', + 'Class:SLT/Attribute:request_type+' => 'Type de requête pour laquelle cet objectif est applicable', 'Class:SLT/Attribute:request_type/Value:incident' => 'incident', - 'Class:SLT/Attribute:request_type/Value:incident+' => 'incident', + 'Class:SLT/Attribute:request_type/Value:incident+' => '', 'Class:SLT/Attribute:request_type/Value:service_request' => 'demande de service', - 'Class:SLT/Attribute:request_type/Value:service_request+' => 'demande de service', + 'Class:SLT/Attribute:request_type/Value:service_request+' => '', 'Class:SLT/Attribute:metric' => 'Métrique', - 'Class:SLT/Attribute:metric+' => '', + 'Class:SLT/Attribute:metric+' => 'Délai contrôlé par cet objectif (temps de prise en charge ou temps de résolution)', 'Class:SLT/Attribute:metric/Value:tto' => 'TTO', - 'Class:SLT/Attribute:metric/Value:tto+' => 'TTO', + 'Class:SLT/Attribute:metric/Value:tto+' => 'Délai de prise en charge', 'Class:SLT/Attribute:metric/Value:ttr' => 'TTR', - 'Class:SLT/Attribute:metric/Value:ttr+' => 'TTR', + 'Class:SLT/Attribute:metric/Value:ttr+' => 'Délai de résolution', 'Class:SLT/Attribute:value' => 'Valeur', - 'Class:SLT/Attribute:value+' => '', + 'Class:SLT/Attribute:value+' => 'Valeur à ne pas dépasser pour la métrique et le type de requête définis', 'Class:SLT/Attribute:unit' => 'Unité', - 'Class:SLT/Attribute:unit+' => '', + 'Class:SLT/Attribute:unit+' => 'Unité à appliquer à la valeur', 'Class:SLT/Attribute:unit/Value:hours' => 'heures', - 'Class:SLT/Attribute:unit/Value:hours+' => 'heures', + 'Class:SLT/Attribute:unit/Value:hours+' => '', 'Class:SLT/Attribute:unit/Value:minutes' => 'minutes', - 'Class:SLT/Attribute:unit/Value:minutes+' => 'minutes', + 'Class:SLT/Attribute:unit/Value:minutes+' => '', 'Class:SLT/Attribute:slas_list' => 'SLAs', 'Class:SLT/Attribute:slas_list+' => 'Tous les niveaux de service utilisant cet objectif', ]); @@ -409,7 +409,7 @@ Dict::Add('FR FR', 'French', 'Français', [ Dict::Add('FR FR', 'French', 'Français', [ 'Class:lnkSLAToSLT' => 'Lien SLA / SLT', - 'Class:lnkSLAToSLT+' => '', + 'Class:lnkSLAToSLT+' => 'Ce lien indique qu\'un SLT est inclus dans le Niveau de service (SLA). Un SLA contient le plus souvent plusieurs SLTs. Un SLT peut être réutilisé à l\'identique par plusieurs Niveau de service (rare).', 'Class:lnkSLAToSLT/Name' => '%1$s / %2$s', 'Class:lnkSLAToSLT/Attribute:sla_id' => 'SLA', 'Class:lnkSLAToSLT/Attribute:sla_id+' => '', @@ -437,20 +437,22 @@ Dict::Add('FR FR', 'French', 'Français', [ Dict::Add('FR FR', 'French', 'Français', [ 'Class:lnkCustomerContractToService' => 'Lien Contrat client / Service', - 'Class:lnkCustomerContractToService+' => '', + 'Class:lnkCustomerContractToService+' => 'Un ligne unitaire d\'un Contract client, qui spécifie le Service fourni et pour ce service les niveaux d\'engagement souscrits (Niveau de service et fenêtre de couverture).', 'Class:lnkCustomerContractToService/Name' => '%1$s / %2$s', 'Class:lnkCustomerContractToService/Attribute:customercontract_id' => 'Contrat client', 'Class:lnkCustomerContractToService/Attribute:customercontract_id+' => '', 'Class:lnkCustomerContractToService/Attribute:customercontract_name' => 'Nom contrat client', 'Class:lnkCustomerContractToService/Attribute:customercontract_name+' => '', 'Class:lnkCustomerContractToService/Attribute:service_id' => 'Service', - 'Class:lnkCustomerContractToService/Attribute:service_id+' => '', + 'Class:lnkCustomerContractToService/Attribute:service_id+' => 'Toutes les sous-catégories de service liées à ce service sont aussi incluses dans ce contrat client', 'Class:lnkCustomerContractToService/Attribute:service_name' => 'Nom service', 'Class:lnkCustomerContractToService/Attribute:service_name+' => '', 'Class:lnkCustomerContractToService/Attribute:sla_id' => 'SLA', - 'Class:lnkCustomerContractToService/Attribute:sla_id+' => '', + 'Class:lnkCustomerContractToService/Attribute:sla_id+' => 'Niveau d\'engagement pour ce service dans le cadre de ce contrat client', 'Class:lnkCustomerContractToService/Attribute:sla_name' => 'Nom SLA', 'Class:lnkCustomerContractToService/Attribute:sla_name+' => '', + 'Class:lnkCustomerContractToService/Attribute:provider_id' => 'Fournisseur', + 'Class:lnkCustomerContractToService/Attribute:provider_id+' => '', ]); // @@ -459,7 +461,7 @@ Dict::Add('FR FR', 'French', 'Français', [ Dict::Add('FR FR', 'French', 'Français', [ 'Class:lnkProviderContractToService' => 'Lien Contrat fournisseur / Service', - 'Class:lnkProviderContractToService+' => '', + 'Class:lnkProviderContractToService+' => 'Ce lien peut modéliser qu\'un Contrat fournisseur permet la délivrance d\'un Service.', 'Class:lnkProviderContractToService/Name' => '%1$s / %2$s', 'Class:lnkProviderContractToService/Attribute:service_id' => 'Service', 'Class:lnkProviderContractToService/Attribute:service_id+' => '', @@ -469,6 +471,8 @@ Dict::Add('FR FR', 'French', 'Français', [ 'Class:lnkProviderContractToService/Attribute:providercontract_id+' => '', 'Class:lnkProviderContractToService/Attribute:providercontract_name' => 'Nom contrat fournisseur', 'Class:lnkProviderContractToService/Attribute:providercontract_name+' => '', + 'Class:lnkProviderContractToService/Attribute:provider_id' => 'Fournisseur', + 'Class:lnkProviderContractToService/Attribute:provider_id+' => '', ]); // @@ -477,7 +481,8 @@ Dict::Add('FR FR', 'French', 'Français', [ Dict::Add('FR FR', 'French', 'Français', [ 'Class:DeliveryModel' => 'Modèle de support', - 'Class:DeliveryModel+' => '', + 'Class:DeliveryModel+' => 'Le Modèle de support spécifie les équipes pouvant être affectées aux Tickets, il doit contenir au minimum une Équipe dans l\'onglet Contacts. + Chaque Organisation cliente doit avoir un Modèle de support défini.', 'Class:DeliveryModel/Attribute:name' => 'Nom du modèle de support', 'Class:DeliveryModel/Attribute:name+' => 'Attachez à ce modèle les équipes qui géreront les tickets', 'Class:DeliveryModel/Attribute:org_id' => 'Organisation', @@ -504,7 +509,7 @@ Dict::Add('FR FR', 'French', 'Français', [ Dict::Add('FR FR', 'French', 'Français', [ 'Class:lnkDeliveryModelToContact' => 'Lien Modèle de support / Contact', - 'Class:lnkDeliveryModelToContact+' => '', + 'Class:lnkDeliveryModelToContact+' => 'Ce lien spécifie le rôle d\'une équipe (plus rarement d\'une Personne) dans le cadre d\'un Modèle de support.', 'Class:lnkDeliveryModelToContact/Name' => '%1$s / %2$s', 'Class:lnkDeliveryModelToContact/Attribute:deliverymodel_id' => 'Modèle de support', 'Class:lnkDeliveryModelToContact/Attribute:deliverymodel_id+' => '', @@ -541,21 +546,3 @@ Dict::Add('FR FR', 'French', 'Français', [ 'Class:lnkContractToDocument/Attribute:provider_id' => 'Fournisseur', 'Class:lnkContractToDocument/Attribute:provider_id+' => '', ]); - -// -// Class: lnkCustomerContractToService -// - -Dict::Add('FR FR', 'French', 'Français', [ - 'Class:lnkCustomerContractToService/Attribute:provider_id' => 'Fournisseur', - 'Class:lnkCustomerContractToService/Attribute:provider_id+' => '', -]); - -// -// Class: lnkProviderContractToService -// - -Dict::Add('FR FR', 'French', 'Français', [ - 'Class:lnkProviderContractToService/Attribute:provider_id' => 'Fournisseur', - 'Class:lnkProviderContractToService/Attribute:provider_id+' => '', -]); diff --git a/datamodels/2.x/itop-service-mgmt/dictionaries/hu.dict.itop-service-mgmt.php b/datamodels/2.x/itop-service-mgmt/dictionaries/hu.dict.itop-service-mgmt.php index 47b444643..d31af980d 100644 --- a/datamodels/2.x/itop-service-mgmt/dictionaries/hu.dict.itop-service-mgmt.php +++ b/datamodels/2.x/itop-service-mgmt/dictionaries/hu.dict.itop-service-mgmt.php @@ -235,7 +235,7 @@ Dict::Add('HU HU', 'Hungarian', 'Magyar', [ 'Class:Service/Attribute:contacts_list' => 'Kapcsolattartók', 'Class:Service/Attribute:contacts_list+' => 'A szolgáltatás kapcsolattartói', 'Class:Service/Attribute:status' => 'Állapot', - 'Class:Service/Attribute:status+' => '', + 'Class:Service/Attribute:status+' => 'By default only Service in production are visible by Portal users~~', 'Class:Service/Attribute:status/Value:implementation' => 'Megvalósítás alatt', 'Class:Service/Attribute:status/Value:implementation+' => 'implementation~~', 'Class:Service/Attribute:status/Value:obsolete' => 'Elavult', @@ -307,7 +307,7 @@ Dict::Add('HU HU', 'Hungarian', 'Magyar', [ 'Class:ServiceSubcategory/Attribute:service_name' => 'Szolgáltatás', 'Class:ServiceSubcategory/Attribute:service_name+' => '', 'Class:ServiceSubcategory/Attribute:request_type' => 'Kérelem típus', - 'Class:ServiceSubcategory/Attribute:request_type+' => '', + 'Class:ServiceSubcategory/Attribute:request_type+' => 'Define the type of Ticket (Incident or Service Request) that will be created when a Portal user selects this service subcategory.~~', 'Class:ServiceSubcategory/Attribute:request_type/Value:incident' => 'Incidens', 'Class:ServiceSubcategory/Attribute:request_type/Value:incident+' => 'incident~~', 'Class:ServiceSubcategory/Attribute:request_type/Value:service_request' => 'Szolgáltatáskérelem', diff --git a/datamodels/2.x/itop-service-mgmt/dictionaries/it.dict.itop-service-mgmt.php b/datamodels/2.x/itop-service-mgmt/dictionaries/it.dict.itop-service-mgmt.php index f69aee39c..96e244a4e 100644 --- a/datamodels/2.x/itop-service-mgmt/dictionaries/it.dict.itop-service-mgmt.php +++ b/datamodels/2.x/itop-service-mgmt/dictionaries/it.dict.itop-service-mgmt.php @@ -306,7 +306,7 @@ Dict::Add('IT IT', 'Italian', 'Italiano', [ 'Class:ServiceSubcategory/Attribute:service_name' => 'Servizio', 'Class:ServiceSubcategory/Attribute:service_name+' => '~~', 'Class:ServiceSubcategory/Attribute:request_type' => 'Tipo di Richiesta', - 'Class:ServiceSubcategory/Attribute:request_type+' => '~~', + 'Class:ServiceSubcategory/Attribute:request_type+' => 'Define the type of Ticket (Incident or Service Request) that will be created when a Portal user selects this service subcategory.~~', 'Class:ServiceSubcategory/Attribute:request_type/Value:incident' => 'incidente', 'Class:ServiceSubcategory/Attribute:request_type/Value:incident+' => 'incident~~', 'Class:ServiceSubcategory/Attribute:request_type/Value:service_request' => 'richiesta di servizio', diff --git a/datamodels/2.x/itop-service-mgmt/dictionaries/ja.dict.itop-service-mgmt.php b/datamodels/2.x/itop-service-mgmt/dictionaries/ja.dict.itop-service-mgmt.php index 6681e492f..3cd17a1c3 100644 --- a/datamodels/2.x/itop-service-mgmt/dictionaries/ja.dict.itop-service-mgmt.php +++ b/datamodels/2.x/itop-service-mgmt/dictionaries/ja.dict.itop-service-mgmt.php @@ -234,7 +234,7 @@ Dict::Add('JA JP', 'Japanese', '日本語', [ 'Class:Service/Attribute:contacts_list' => '連絡先', 'Class:Service/Attribute:contacts_list+' => 'All the contacts for this service~~', 'Class:Service/Attribute:status' => '状態', - 'Class:Service/Attribute:status+' => '', + 'Class:Service/Attribute:status+' => 'By default only Service in production are visible by Portal users~~', 'Class:Service/Attribute:status/Value:implementation' => '実装中', 'Class:Service/Attribute:status/Value:implementation+' => '実装中', 'Class:Service/Attribute:status/Value:obsolete' => '廃止済み', @@ -306,7 +306,7 @@ Dict::Add('JA JP', 'Japanese', '日本語', [ 'Class:ServiceSubcategory/Attribute:service_name' => 'サービス名', 'Class:ServiceSubcategory/Attribute:service_name+' => '', 'Class:ServiceSubcategory/Attribute:request_type' => '要求タイプ', - 'Class:ServiceSubcategory/Attribute:request_type+' => '', + 'Class:ServiceSubcategory/Attribute:request_type+' => 'Define the type of Ticket (Incident or Service Request) that will be created when a Portal user selects this service subcategory.~~', 'Class:ServiceSubcategory/Attribute:request_type/Value:incident' => 'インシデント', 'Class:ServiceSubcategory/Attribute:request_type/Value:incident+' => 'インシデント', 'Class:ServiceSubcategory/Attribute:request_type/Value:service_request' => 'サービス要求', diff --git a/datamodels/2.x/itop-service-mgmt/dictionaries/nl.dict.itop-service-mgmt.php b/datamodels/2.x/itop-service-mgmt/dictionaries/nl.dict.itop-service-mgmt.php index 29a22e57c..7cadbfd27 100644 --- a/datamodels/2.x/itop-service-mgmt/dictionaries/nl.dict.itop-service-mgmt.php +++ b/datamodels/2.x/itop-service-mgmt/dictionaries/nl.dict.itop-service-mgmt.php @@ -236,7 +236,7 @@ Dict::Add('NL NL', 'Dutch', 'Nederlands', [ 'Class:Service/Attribute:contacts_list' => 'Contacten', 'Class:Service/Attribute:contacts_list+' => 'Alle contacten voor deze service', 'Class:Service/Attribute:status' => 'Status', - 'Class:Service/Attribute:status+' => '', + 'Class:Service/Attribute:status+' => 'By default only Service in production are visible by Portal users~~', 'Class:Service/Attribute:status/Value:implementation' => 'Implementatie', 'Class:Service/Attribute:status/Value:implementation+' => 'Implementatie', 'Class:Service/Attribute:status/Value:obsolete' => 'Buiten gebruik', @@ -308,7 +308,7 @@ Dict::Add('NL NL', 'Dutch', 'Nederlands', [ 'Class:ServiceSubcategory/Attribute:service_name' => 'Naam service', 'Class:ServiceSubcategory/Attribute:service_name+' => '', 'Class:ServiceSubcategory/Attribute:request_type' => 'Soort verzoek', - 'Class:ServiceSubcategory/Attribute:request_type+' => '', + 'Class:ServiceSubcategory/Attribute:request_type+' => 'Define the type of Ticket (Incident or Service Request) that will be created when a Portal user selects this service subcategory.~~', 'Class:ServiceSubcategory/Attribute:request_type/Value:incident' => 'Incident', 'Class:ServiceSubcategory/Attribute:request_type/Value:incident+' => 'Incident', 'Class:ServiceSubcategory/Attribute:request_type/Value:service_request' => 'Serviceverzoek', diff --git a/datamodels/2.x/itop-service-mgmt/dictionaries/pl.dict.itop-service-mgmt.php b/datamodels/2.x/itop-service-mgmt/dictionaries/pl.dict.itop-service-mgmt.php index 27cba5051..6c5dca37e 100644 --- a/datamodels/2.x/itop-service-mgmt/dictionaries/pl.dict.itop-service-mgmt.php +++ b/datamodels/2.x/itop-service-mgmt/dictionaries/pl.dict.itop-service-mgmt.php @@ -234,7 +234,7 @@ Dict::Add('PL PL', 'Polish', 'Polski', [ 'Class:Service/Attribute:contacts_list' => 'Kontakty', 'Class:Service/Attribute:contacts_list+' => 'Wszystkie kontakty do tej usługi', 'Class:Service/Attribute:status' => 'Status', - 'Class:Service/Attribute:status+' => '', + 'Class:Service/Attribute:status+' => 'By default only Service in production are visible by Portal users~~', 'Class:Service/Attribute:status/Value:implementation' => 'wdrażane', 'Class:Service/Attribute:status/Value:implementation+' => 'wdrażane', 'Class:Service/Attribute:status/Value:obsolete' => 'wycofane', @@ -306,7 +306,7 @@ Dict::Add('PL PL', 'Polish', 'Polski', [ 'Class:ServiceSubcategory/Attribute:service_name' => 'Nazwa usługi', 'Class:ServiceSubcategory/Attribute:service_name+' => '', 'Class:ServiceSubcategory/Attribute:request_type' => 'Typ zgłoszenia', - 'Class:ServiceSubcategory/Attribute:request_type+' => '', + 'Class:ServiceSubcategory/Attribute:request_type+' => 'Define the type of Ticket (Incident or Service Request) that will be created when a Portal user selects this service subcategory.~~', 'Class:ServiceSubcategory/Attribute:request_type/Value:incident' => 'incydent', 'Class:ServiceSubcategory/Attribute:request_type/Value:incident+' => 'incydent', 'Class:ServiceSubcategory/Attribute:request_type/Value:service_request' => 'zgłoszenie serwisowe', diff --git a/datamodels/2.x/itop-service-mgmt/dictionaries/pt_br.dict.itop-service-mgmt.php b/datamodels/2.x/itop-service-mgmt/dictionaries/pt_br.dict.itop-service-mgmt.php index c0dceb517..b5540ff06 100644 --- a/datamodels/2.x/itop-service-mgmt/dictionaries/pt_br.dict.itop-service-mgmt.php +++ b/datamodels/2.x/itop-service-mgmt/dictionaries/pt_br.dict.itop-service-mgmt.php @@ -234,7 +234,7 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', [ 'Class:Service/Attribute:contacts_list' => 'Contatos', 'Class:Service/Attribute:contacts_list+' => 'Todos os contatos associados à este serviço', 'Class:Service/Attribute:status' => 'Status', - 'Class:Service/Attribute:status+' => '', + 'Class:Service/Attribute:status+' => 'By default only Service in production are visible by Portal users~~', 'Class:Service/Attribute:status/Value:implementation' => 'Em homologação', 'Class:Service/Attribute:status/Value:implementation+' => '', 'Class:Service/Attribute:status/Value:obsolete' => 'Obsoleto', @@ -306,7 +306,7 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', [ 'Class:ServiceSubcategory/Attribute:service_name' => 'Nome do serviço', 'Class:ServiceSubcategory/Attribute:service_name+' => '', 'Class:ServiceSubcategory/Attribute:request_type' => 'Tipo de solicitação', - 'Class:ServiceSubcategory/Attribute:request_type+' => '', + 'Class:ServiceSubcategory/Attribute:request_type+' => 'Define the type of Ticket (Incident or Service Request) that will be created when a Portal user selects this service subcategory.~~', 'Class:ServiceSubcategory/Attribute:request_type/Value:incident' => 'Incidente', 'Class:ServiceSubcategory/Attribute:request_type/Value:incident+' => '', 'Class:ServiceSubcategory/Attribute:request_type/Value:service_request' => 'Solicitação de serviço', diff --git a/datamodels/2.x/itop-service-mgmt/dictionaries/ru.dict.itop-service-mgmt.php b/datamodels/2.x/itop-service-mgmt/dictionaries/ru.dict.itop-service-mgmt.php index b6f5255e0..04e9be29b 100644 --- a/datamodels/2.x/itop-service-mgmt/dictionaries/ru.dict.itop-service-mgmt.php +++ b/datamodels/2.x/itop-service-mgmt/dictionaries/ru.dict.itop-service-mgmt.php @@ -235,7 +235,7 @@ Dict::Add('RU RU', 'Russian', 'Русский', [ 'Class:Service/Attribute:contacts_list' => 'Контакты', 'Class:Service/Attribute:contacts_list+' => 'Связанные контакты', 'Class:Service/Attribute:status' => 'Статус', - 'Class:Service/Attribute:status+' => '', + 'Class:Service/Attribute:status+' => 'By default only Service in production are visible by Portal users~~', 'Class:Service/Attribute:status/Value:implementation' => 'Внедрение', 'Class:Service/Attribute:status/Value:implementation+' => 'Внедрение', 'Class:Service/Attribute:status/Value:obsolete' => 'Устаревший', @@ -307,7 +307,7 @@ Dict::Add('RU RU', 'Russian', 'Русский', [ 'Class:ServiceSubcategory/Attribute:service_name' => 'Услуга', 'Class:ServiceSubcategory/Attribute:service_name+' => '', 'Class:ServiceSubcategory/Attribute:request_type' => 'Тип запроса', - 'Class:ServiceSubcategory/Attribute:request_type+' => '', + 'Class:ServiceSubcategory/Attribute:request_type+' => 'Define the type of Ticket (Incident or Service Request) that will be created when a Portal user selects this service subcategory.~~', 'Class:ServiceSubcategory/Attribute:request_type/Value:incident' => 'Инцидент', 'Class:ServiceSubcategory/Attribute:request_type/Value:incident+' => 'Инцидент', 'Class:ServiceSubcategory/Attribute:request_type/Value:service_request' => 'Запрос на обслуживание', diff --git a/datamodels/2.x/itop-service-mgmt/dictionaries/sk.dict.itop-service-mgmt.php b/datamodels/2.x/itop-service-mgmt/dictionaries/sk.dict.itop-service-mgmt.php index 3992b6256..c1c9937fc 100644 --- a/datamodels/2.x/itop-service-mgmt/dictionaries/sk.dict.itop-service-mgmt.php +++ b/datamodels/2.x/itop-service-mgmt/dictionaries/sk.dict.itop-service-mgmt.php @@ -306,7 +306,7 @@ Dict::Add('SK SK', 'Slovak', 'Slovenčina', [ 'Class:ServiceSubcategory/Attribute:service_name' => 'Názov služby', 'Class:ServiceSubcategory/Attribute:service_name+' => '~~', 'Class:ServiceSubcategory/Attribute:request_type' => 'Typ požiadavky', - 'Class:ServiceSubcategory/Attribute:request_type+' => '~~', + 'Class:ServiceSubcategory/Attribute:request_type+' => 'Define the type of Ticket (Incident or Service Request) that will be created when a Portal user selects this service subcategory.~~', 'Class:ServiceSubcategory/Attribute:request_type/Value:incident' => 'Incident', 'Class:ServiceSubcategory/Attribute:request_type/Value:incident+' => 'incident~~', 'Class:ServiceSubcategory/Attribute:request_type/Value:service_request' => 'Požiadavka', diff --git a/datamodels/2.x/itop-service-mgmt/dictionaries/tr.dict.itop-service-mgmt.php b/datamodels/2.x/itop-service-mgmt/dictionaries/tr.dict.itop-service-mgmt.php index 42b0fd5bd..4e58cc4c4 100644 --- a/datamodels/2.x/itop-service-mgmt/dictionaries/tr.dict.itop-service-mgmt.php +++ b/datamodels/2.x/itop-service-mgmt/dictionaries/tr.dict.itop-service-mgmt.php @@ -235,7 +235,7 @@ Dict::Add('TR TR', 'Turkish', 'Türkçe', [ 'Class:Service/Attribute:contacts_list' => 'İletişim', 'Class:Service/Attribute:contacts_list+' => 'Bu hizmet için tüm kişiler', 'Class:Service/Attribute:status' => 'Durum', - 'Class:Service/Attribute:status+' => '', + 'Class:Service/Attribute:status+' => 'By default only Service in production are visible by Portal users~~', 'Class:Service/Attribute:status/Value:implementation' => 'Uygulama', 'Class:Service/Attribute:status/Value:implementation+' => 'Uygulama', 'Class:Service/Attribute:status/Value:obsolete' => 'Üretimden Kalkan', @@ -307,7 +307,7 @@ Dict::Add('TR TR', 'Turkish', 'Türkçe', [ 'Class:ServiceSubcategory/Attribute:service_name' => 'Hizmet', 'Class:ServiceSubcategory/Attribute:service_name+' => '', 'Class:ServiceSubcategory/Attribute:request_type' => 'İstek türü', - 'Class:ServiceSubcategory/Attribute:request_type+' => '~~', + 'Class:ServiceSubcategory/Attribute:request_type+' => 'Define the type of Ticket (Incident or Service Request) that will be created when a Portal user selects this service subcategory.~~', 'Class:ServiceSubcategory/Attribute:request_type/Value:incident' => 'Olay', 'Class:ServiceSubcategory/Attribute:request_type/Value:incident+' => 'Olay', 'Class:ServiceSubcategory/Attribute:request_type/Value:service_request' => 'Servis İsteği', diff --git a/datamodels/2.x/itop-service-mgmt/dictionaries/zh_cn.dict.itop-service-mgmt.php b/datamodels/2.x/itop-service-mgmt/dictionaries/zh_cn.dict.itop-service-mgmt.php index 92dbcf5b9..05d3883f2 100644 --- a/datamodels/2.x/itop-service-mgmt/dictionaries/zh_cn.dict.itop-service-mgmt.php +++ b/datamodels/2.x/itop-service-mgmt/dictionaries/zh_cn.dict.itop-service-mgmt.php @@ -255,7 +255,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', [ 'Class:Service/Attribute:contacts_list' => '联系人', 'Class:Service/Attribute:contacts_list+' => '此服务相关的所有联系人', 'Class:Service/Attribute:status' => '状态', - 'Class:Service/Attribute:status+' => '', + 'Class:Service/Attribute:status+' => 'By default only Service in production are visible by Portal users~~', 'Class:Service/Attribute:status/Value:implementation' => '启用', 'Class:Service/Attribute:status/Value:implementation+' => '启用', 'Class:Service/Attribute:status/Value:obsolete' => '废弃', @@ -327,7 +327,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', [ 'Class:ServiceSubcategory/Attribute:service_name' => '服务名称', 'Class:ServiceSubcategory/Attribute:service_name+' => '', 'Class:ServiceSubcategory/Attribute:request_type' => '需求类型', - 'Class:ServiceSubcategory/Attribute:request_type+' => '', + 'Class:ServiceSubcategory/Attribute:request_type+' => 'Define the type of Ticket (Incident or Service Request) that will be created when a Portal user selects this service subcategory.~~', 'Class:ServiceSubcategory/Attribute:request_type/Value:incident' => '事件', 'Class:ServiceSubcategory/Attribute:request_type/Value:incident+' => '事件', 'Class:ServiceSubcategory/Attribute:request_type/Value:service_request' => '服务需求', diff --git a/datamodels/2.x/itop-service-mgmt/module.itop-service-mgmt.php b/datamodels/2.x/itop-service-mgmt/module.itop-service-mgmt.php index c4253b91e..98103251e 100755 --- a/datamodels/2.x/itop-service-mgmt/module.itop-service-mgmt.php +++ b/datamodels/2.x/itop-service-mgmt/module.itop-service-mgmt.php @@ -26,18 +26,18 @@ SetupWebPage::AddModule( //'data.struct.itop-service-mgmt.xml', ], 'data.sample' => [ - 'data.sample.organizations.xml', - 'data.sample.contracts.xml', - 'data.sample.servicefamilies.xml', - 'data.sample.services.xml', - 'data.sample.serviceelements.xml', - 'data.sample.sla.xml', - 'data.sample.slt.xml', - 'data.sample.sltsla.xml', - // 'data.sample.coveragewindows.xml', - 'data.sample.contractservice.xml', - // 'data.sample.deliverymodel.xml', - 'data.sample.deliverymodelcontact.xml', + 'data/data.sample.organizations.xml', + 'data/data.sample.contracts.xml', + 'data/data.sample.servicefamilies.xml', + 'data/data.sample.services.xml', + 'data/data.sample.serviceelements.xml', + 'data/data.sample.sla.xml', + 'data/data.sample.slt.xml', + 'data/data.sample.sltsla.xml', + // 'data/data.sample.coveragewindows.xml', + 'data/data.sample.contractservice.xml', + // 'data/data.sample.deliverymodel.xml', + 'data/data.sample.deliverymodelcontact.xml', ], // Documentation diff --git a/datamodels/2.x/itop-storage-mgmt/datamodel.itop-storage-mgmt.xml b/datamodels/2.x/itop-storage-mgmt/datamodel.itop-storage-mgmt.xml index 6b23b3310..538b989bc 100644 --- a/datamodels/2.x/itop-storage-mgmt/datamodel.itop-storage-mgmt.xml +++ b/datamodels/2.x/itop-storage-mgmt/datamodel.itop-storage-mgmt.xml @@ -70,7 +70,7 @@ 110 - + 10 @@ -124,7 +124,7 @@ 120 - + 10 @@ -152,7 +152,7 @@ - + 30 @@ -329,7 +329,7 @@ 100 - + 10 @@ -383,7 +383,7 @@ 110 - + 10 @@ -411,7 +411,7 @@ - + 30 @@ -642,7 +642,7 @@ 110 - + 10 @@ -847,7 +847,7 @@ 100 - + 10 @@ -901,7 +901,7 @@ 110 - + 10 @@ -929,7 +929,7 @@ - + 30 @@ -1097,18 +1097,43 @@
- + + + + + + 10 + + + 10 + + + + + 30 + + + 40 + + + 20 + + 10 - + + + + + + 10 + + + 10 + + 20 - - 30 - - - 40 -
@@ -1215,7 +1240,7 @@ 10 - + 10 @@ -1248,7 +1273,7 @@ 20 - + 20 @@ -1378,7 +1403,7 @@ 10 - + 10 @@ -1600,7 +1625,7 @@ 20 - + 20 @@ -1958,6 +1983,18 @@ 3 LogicalVolume
+ + 1.3 + FiberChannelInterface + + + 3.3 + NASFileSystem + + + 3.5 + Tape + diff --git a/datamodels/2.x/itop-structure/data.sample.contactteam.xml b/datamodels/2.x/itop-structure/data/data.sample.contactteam.xml similarity index 100% rename from datamodels/2.x/itop-structure/data.sample.contactteam.xml rename to datamodels/2.x/itop-structure/data/data.sample.contactteam.xml diff --git a/datamodels/2.x/itop-structure/data.sample.contacttype.xml b/datamodels/2.x/itop-structure/data/data.sample.contacttype.xml similarity index 100% rename from datamodels/2.x/itop-structure/data.sample.contacttype.xml rename to datamodels/2.x/itop-structure/data/data.sample.contacttype.xml diff --git a/datamodels/2.x/itop-structure/data.sample.locations.xml b/datamodels/2.x/itop-structure/data/data.sample.locations.xml similarity index 100% rename from datamodels/2.x/itop-structure/data.sample.locations.xml rename to datamodels/2.x/itop-structure/data/data.sample.locations.xml diff --git a/datamodels/2.x/itop-structure/data.sample.organizations.xml b/datamodels/2.x/itop-structure/data/data.sample.organizations.xml similarity index 100% rename from datamodels/2.x/itop-structure/data.sample.organizations.xml rename to datamodels/2.x/itop-structure/data/data.sample.organizations.xml diff --git a/datamodels/2.x/itop-structure/data.sample.persons.xml b/datamodels/2.x/itop-structure/data/data.sample.persons.xml similarity index 100% rename from datamodels/2.x/itop-structure/data.sample.persons.xml rename to datamodels/2.x/itop-structure/data/data.sample.persons.xml diff --git a/datamodels/2.x/itop-structure/data.sample.teams.xml b/datamodels/2.x/itop-structure/data/data.sample.teams.xml similarity index 100% rename from datamodels/2.x/itop-structure/data.sample.teams.xml rename to datamodels/2.x/itop-structure/data/data.sample.teams.xml diff --git a/datamodels/2.x/itop-structure/dictionaries/en.dict.itop-structure.php b/datamodels/2.x/itop-structure/dictionaries/en.dict.itop-structure.php index 7b2af60e4..7d4d8cf03 100644 --- a/datamodels/2.x/itop-structure/dictionaries/en.dict.itop-structure.php +++ b/datamodels/2.x/itop-structure/dictionaries/en.dict.itop-structure.php @@ -48,7 +48,7 @@ Dict::Add('EN US', 'English', 'English', [ 'Class:Organization' => 'Organization', - 'Class:Organization+' => '', + 'Class:Organization+' => 'It can be a customer, a provider, your company or departments within your company. Organizations can be structured hierarchically. Users can be limited to objects belonging to some organizations only.', 'Class:Organization/Attribute:name' => 'Name', 'Class:Organization/Attribute:name+' => 'Common name', 'Class:Organization/Attribute:code' => 'Code', @@ -81,7 +81,7 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:Location' => 'Location', - 'Class:Location+' => 'Any type of location: Region, Country, City, Site, Building, Floor, Room, Rack,...', + 'Class:Location+' => 'Any type of location: Region, Country, City, Site, Building, Floor, Room,...', 'Class:Location/Attribute:name' => 'Name', 'Class:Location/Attribute:name+' => '', 'Class:Location/Attribute:status' => 'Status', @@ -114,7 +114,7 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:Contact' => 'Contact', - 'Class:Contact+' => '', + 'Class:Contact+' => 'Abstract class. A Contact can be linked to Tickets and FunctionalCIs for different purposes, such as incident dispatching and notifications.', 'Class:Contact/ComplementaryName' => '%1$s - %2$s', 'Class:Contact/Attribute:name' => 'Name', 'Class:Contact/Attribute:name+' => '', @@ -152,7 +152,8 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:Person' => 'Person', - 'Class:Person+' => '', + 'Class:Person+' => 'A type of Contact used to describe physical persons. Persons can be grouped into Teams. Persons can be linked to other configuration items (eg. to describe who to contact in case of incident with an application). +Other usage: the caller of a User request is a Person as well as the agent assigned to resolve it.', 'Class:Person/ComplementaryName' => '%1$s - %2$s', 'Class:Person/Attribute:name' => 'Last Name', 'Class:Person/Attribute:name+' => '', @@ -174,6 +175,7 @@ Dict::Add('EN US', 'English', 'English', [ 'Class:Person/Attribute:team_list+' => 'All the teams this person belongs to', 'Class:Person/Attribute:tickets_list' => 'Tickets', 'Class:Person/Attribute:tickets_list+' => 'All the tickets this person is the caller', + 'Class:Person/Attribute:tickets_list/UI:Links:Create:Modal:Title' => 'Create a %4$s for %2$s', 'Class:Person/Attribute:user_list' => 'Users', 'Class:Person/Attribute:user_list+' => 'All the Users associated to this person', 'Class:Person/Attribute:manager_id_friendlyname' => 'Manager friendly name', @@ -193,7 +195,7 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:Team' => 'Team', - 'Class:Team+' => '', + 'Class:Team+' => 'A type of Contact. Often used to group Persons, but not only. Teams are expected to watch Tickets dispatched to them, and assign it to an agent, usually a member of that team.', 'Class:Team/ComplementaryName' => '%1$s - %2$s', 'Class:Team/Attribute:persons_list' => 'Members', 'Class:Team/Attribute:persons_list+' => 'All the people belonging to this team', @@ -214,7 +216,7 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:Document' => 'Document', - 'Class:Document+' => '', + 'Class:Document+' => 'Abstract class. A document that can be shared across multiple objects, making it easy and quick to retrieve from all relevant locations.', 'Class:Document/ComplementaryName' => '%1$s - %2$s - %3$s', 'Class:Document/Attribute:name' => 'Name', 'Class:Document/Attribute:name+' => '', @@ -250,7 +252,7 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:DocumentFile' => 'Document File', - 'Class:DocumentFile+' => '', + 'Class:DocumentFile+' => 'It\'s a type of Document which includes an uploaded file (in any format: Word, PDF, Spreadsheet, etc.).', 'Class:DocumentFile/Attribute:file' => 'File', 'Class:DocumentFile/Attribute:file+' => '', ]); @@ -261,7 +263,7 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:DocumentNote' => 'Document Note', - 'Class:DocumentNote+' => '', + 'Class:DocumentNote+' => 'Used to store a text document. HTML formatting is supported using the WYSIWYG editor. Search can be performed on its content.', 'Class:DocumentNote/Attribute:text' => 'Text', 'Class:DocumentNote/Attribute:text+' => '', ]); @@ -272,7 +274,7 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:DocumentWeb' => 'Document Web', - 'Class:DocumentWeb+' => '', + 'Class:DocumentWeb+' => 'Hyperlinks to external applications or documents, acting as pointers to external resources. You cannot search in their content from '.ITOP_APPLICATION_SHORT, 'Class:DocumentWeb/Attribute:url' => 'URL', 'Class:DocumentWeb/Attribute:url+' => '', ]); @@ -283,7 +285,7 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:Typology' => 'Typology', - 'Class:Typology+' => '', + 'Class:Typology+' => 'Abstract class. ExternalKeyAttribute to a Typology subclass are used in place of an EnumAttribute, to have more dynamic values.', 'Class:Typology/Attribute:name' => 'Name', 'Class:Typology/Attribute:name+' => '', 'Class:Typology/Attribute:finalclass' => 'Typology sub-class', @@ -296,7 +298,7 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:DocumentType' => 'Document Type', - 'Class:DocumentType+' => '', + 'Class:DocumentType+' => 'Typology. A classification system used to organize and logically group documents', ]); // @@ -305,7 +307,7 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:ContactType' => 'Contact Type', - 'Class:ContactType+' => '', + 'Class:ContactType+' => 'Typology to organize your Contacts and group them logically for you.', ]); // @@ -314,7 +316,7 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:lnkPersonToTeam' => 'Link Person / Team', - 'Class:lnkPersonToTeam+' => '', + 'Class:lnkPersonToTeam+' => 'This link indicates when a Person is a member of a Team.', 'Class:lnkPersonToTeam/Name' => '%1$s / %2$s', 'Class:lnkPersonToTeam/Name+' => '', 'Class:lnkPersonToTeam/Attribute:team_id' => 'Team', diff --git a/datamodels/2.x/itop-structure/dictionaries/fr.dict.itop-structure.php b/datamodels/2.x/itop-structure/dictionaries/fr.dict.itop-structure.php index 1d043d494..dfdb312ed 100644 --- a/datamodels/2.x/itop-structure/dictionaries/fr.dict.itop-structure.php +++ b/datamodels/2.x/itop-structure/dictionaries/fr.dict.itop-structure.php @@ -13,7 +13,7 @@ */ Dict::Add('FR FR', 'French', 'Français', [ 'Class:Organization' => 'Organisation', - 'Class:Organization+' => '', + 'Class:Organization+' => 'Un client, un fournisseur, votre entreprise ou des départements de votre entreprise. Les organisations peuvent être structurées hiérarchiquement. Les utilisateurs peuvent être limités aux objets appartenant à certaines organisations.', 'Class:Organization/Attribute:name' => 'Nom organisation', 'Class:Organization/Attribute:name+' => 'Nom commun', 'Class:Organization/Attribute:code' => 'Code', @@ -46,7 +46,7 @@ Dict::Add('FR FR', 'French', 'Français', [ Dict::Add('FR FR', 'French', 'Français', [ 'Class:Location' => 'Lieu', - 'Class:Location+' => 'Tout type de lieu: Région, Pays, Ville, Site, batiment, Bureau,...', + 'Class:Location+' => 'Tout type de lieu: Région, Pays, Ville, Site, Bâtiment, Étage, Bureau,...', 'Class:Location/Attribute:name' => 'Nom', 'Class:Location/Attribute:name+' => '', 'Class:Location/Attribute:status' => 'Etat', @@ -85,7 +85,7 @@ Dict::Add('FR FR', 'French', 'Français', [ Dict::Add('FR FR', 'French', 'Français', [ 'Class:Contact' => 'Contact', - 'Class:Contact+' => '', + 'Class:Contact+' => 'Classe abstraite. Un contact peut être lié à des Tickets et des CI fonctionnels pour divers usages, par exemple l\'affectation des Tickets ou les notifications.', 'Class:Contact/ComplementaryName' => '%1$s - %2$s', 'Class:Contact/Attribute:name' => 'Nom', 'Class:Contact/Attribute:name+' => '', @@ -123,7 +123,8 @@ Dict::Add('FR FR', 'French', 'Français', [ Dict::Add('FR FR', 'French', 'Français', [ 'Class:Person' => 'Personne', - 'Class:Person+' => '', + 'Class:Person+' => 'Type de contact utilisé pour décrire des personnes physiques. Les personnes peuvent être regroupées en équipes. Elles peuvent être liées à d\'autres éléments de configuration (par ex. pour décrire qui contacter en cas d\'incident sur une application). +Autre usage : l\'appelant d\'une demande utilisateur est une personne, tout comme l\'agent assigné pour la résoudre.', 'Class:Person/ComplementaryName' => '%1$s - %2$s', 'Class:Person/Attribute:name' => 'Nom', 'Class:Person/Attribute:name+' => '', @@ -149,6 +150,7 @@ Dict::Add('FR FR', 'French', 'Français', [ 'Class:Person/Attribute:team_list/UI:Links:Remove:Modal:Title' => 'Retirer une %4$s', 'Class:Person/Attribute:tickets_list' => 'Tickets', 'Class:Person/Attribute:tickets_list+' => 'Tous les tickets dont cette personne est le bénéficiaire', + 'Class:Person/Attribute:tickets_list/UI:Links:Create:Modal:Title' => 'Créer un %4$s pour %2$s', 'Class:Person/Attribute:user_list' => 'Utilisateurs', 'Class:Person/Attribute:user_list+' => 'Les comptes utilisateurs associés à cette personne', 'Class:Person/Attribute:user_list/UI:Links:Create:Button+' => 'Créer un %4$s', @@ -174,8 +176,8 @@ Dict::Add('FR FR', 'French', 'Français', [ // Dict::Add('FR FR', 'French', 'Français', [ - 'Class:Team' => 'Equipe', - 'Class:Team+' => '', + 'Class:Team' => 'Équipe', + 'Class:Team+' => 'Type de contact. Souvent utilisé pour regrouper des personnes, mais pas seulement. Les équipes sont censées suivre les tickets qui leur sont affectés et les assigner à un agent, généralement membre de cette équipe.', 'Class:Team/ComplementaryName' => '%1$s - %2$s', 'Class:Team/Attribute:persons_list' => 'Membres', 'Class:Team/Attribute:persons_list+' => 'Toutes les personnes appartenant à cette équipe', @@ -200,7 +202,7 @@ Dict::Add('FR FR', 'French', 'Français', [ Dict::Add('FR FR', 'French', 'Français', [ 'Class:Document' => 'Document', - 'Class:Document+' => '', + 'Class:Document+' => 'Classe abstraite. Document pouvant être partagé entre plusieurs objets, ce qui le rend facile et rapide à retrouver depuis différents points de vue.', 'Class:Document/ComplementaryName' => '%1$s - %2$s - %3$s', 'Class:Document/Attribute:name' => 'Nom', 'Class:Document/Attribute:name+' => '', @@ -235,8 +237,8 @@ Dict::Add('FR FR', 'French', 'Français', [ // Dict::Add('FR FR', 'French', 'Français', [ - 'Class:DocumentFile' => 'Document Fichier', - 'Class:DocumentFile+' => '', + 'Class:DocumentFile' => 'Document fichier', + 'Class:DocumentFile+' => 'Type de document qui inclut un fichier téléchargé (tout format : Word, PDF, tableur, etc.).', 'Class:DocumentFile/Attribute:file' => 'Fichier', 'Class:DocumentFile/Attribute:file+' => '', ]); @@ -246,8 +248,8 @@ Dict::Add('FR FR', 'French', 'Français', [ // Dict::Add('FR FR', 'French', 'Français', [ - 'Class:DocumentNote' => 'Document Note', - 'Class:DocumentNote+' => '', + 'Class:DocumentNote' => 'Document note', + 'Class:DocumentNote+' => 'Utilisé pour stocker un document texte. Le formatage HTML est pris en charge via l\'éditeur WYSIWYG. Une recherche peut être effectuer sur son contenu.', 'Class:DocumentNote/Attribute:text' => 'Texte', 'Class:DocumentNote/Attribute:text+' => '', ]); @@ -257,8 +259,8 @@ Dict::Add('FR FR', 'French', 'Français', [ // Dict::Add('FR FR', 'French', 'Français', [ - 'Class:DocumentWeb' => 'Document Web', - 'Class:DocumentWeb+' => '', + 'Class:DocumentWeb' => 'Document web', + 'Class:DocumentWeb+' => 'Hyperliens vers des applications ou des documents externes, servant de pointeurs vers des ressources externes. Vous ne pouvez pas effectuer de recherche sur leur contenu depuis '.ITOP_APPLICATION_SHORT, 'Class:DocumentWeb/Attribute:url' => 'URL', 'Class:DocumentWeb/Attribute:url+' => '', ]); @@ -269,7 +271,7 @@ Dict::Add('FR FR', 'French', 'Français', [ Dict::Add('FR FR', 'French', 'Français', [ 'Class:Typology' => 'Typologie', - 'Class:Typology+' => '', + 'Class:Typology+' => 'Classe abstraite. Les attributs ExternalKey vers une sous-classe de Typology sont utilisés à la place d\'un EnumAttribute pour disposer de valeurs plus dynamiques.', 'Class:Typology/Attribute:name' => 'Nom', 'Class:Typology/Attribute:name+' => '', 'Class:Typology/Attribute:finalclass' => 'Sous-classe de Typologie', @@ -282,7 +284,7 @@ Dict::Add('FR FR', 'French', 'Français', [ Dict::Add('FR FR', 'French', 'Français', [ 'Class:DocumentType' => 'Type de document', - 'Class:DocumentType+' => '', + 'Class:DocumentType+' => 'Typologie. Système de classification utilisé pour organiser et typer logiquement les documents.', ]); // @@ -291,7 +293,7 @@ Dict::Add('FR FR', 'French', 'Français', [ Dict::Add('FR FR', 'French', 'Français', [ 'Class:ContactType' => 'Type de contact', - 'Class:ContactType+' => '', + 'Class:ContactType+' => 'Typologie pour organiser vos contacts et les regrouper logiquement.', ]); // @@ -299,8 +301,8 @@ Dict::Add('FR FR', 'French', 'Français', [ // Dict::Add('FR FR', 'French', 'Français', [ - 'Class:lnkPersonToTeam' => 'Lien Personne / Equipe', - 'Class:lnkPersonToTeam+' => '', + 'Class:lnkPersonToTeam' => 'Lien Personne / Équipe', + 'Class:lnkPersonToTeam+' => 'Ce lien indique lorsqu\'une Personne est membre d\'une Équipe.', 'Class:lnkPersonToTeam/Name' => '%1$s / %2$s', 'Class:lnkPersonToTeam/Name+' => '', 'Class:lnkPersonToTeam/Attribute:team_id' => 'Equipe', diff --git a/datamodels/2.x/itop-structure/dictionaries/sk.dict.itop-structure.php b/datamodels/2.x/itop-structure/dictionaries/sk.dict.itop-structure.php index 39e238258..59a8d1137 100644 --- a/datamodels/2.x/itop-structure/dictionaries/sk.dict.itop-structure.php +++ b/datamodels/2.x/itop-structure/dictionaries/sk.dict.itop-structure.php @@ -46,7 +46,7 @@ Dict::Add('SK SK', 'Slovak', 'Slovenčina', [ Dict::Add('SK SK', 'Slovak', 'Slovenčina', [ 'Class:Location' => 'Poloha', - 'Class:Location+' => 'Any type of location: Region, Country, City, Site, Building, Floor, Room, Rack,...~~', + 'Class:Location+' => 'Any type of location: Region, Country, City, Site, Building, Floor, Room,...~~', 'Class:Location/Attribute:name' => 'Názov', 'Class:Location/Attribute:name+' => '~~', 'Class:Location/Attribute:status' => 'Stav', diff --git a/datamodels/2.x/itop-structure/module.itop-structure.php b/datamodels/2.x/itop-structure/module.itop-structure.php index 918b6b144..f1da9aeaf 100644 --- a/datamodels/2.x/itop-structure/module.itop-structure.php +++ b/datamodels/2.x/itop-structure/module.itop-structure.php @@ -25,12 +25,12 @@ SetupWebPage::AddModule( 'data.struct' => [ ], 'data.sample' => [ - 'data.sample.organizations.xml', - 'data.sample.locations.xml', - 'data.sample.persons.xml', - 'data.sample.teams.xml', - 'data.sample.contactteam.xml', - 'data.sample.contacttype.xml', + 'data/data.sample.organizations.xml', + 'data/data.sample.locations.xml', + 'data/data.sample.persons.xml', + 'data/data.sample.teams.xml', + 'data/data.sample.contactteam.xml', + 'data/data.sample.contacttype.xml', ], // Documentation diff --git a/datamodels/2.x/itop-tickets/dictionaries/en.dict.itop-tickets.php b/datamodels/2.x/itop-tickets/dictionaries/en.dict.itop-tickets.php index b084b14df..bf1ee72c3 100644 --- a/datamodels/2.x/itop-tickets/dictionaries/en.dict.itop-tickets.php +++ b/datamodels/2.x/itop-tickets/dictionaries/en.dict.itop-tickets.php @@ -38,7 +38,7 @@ Dict::Add('EN US', 'English', 'English', [ 'Class:Ticket' => 'Ticket', - 'Class:Ticket+' => '', + 'Class:Ticket+' => 'Abstract class', 'Class:Ticket/Attribute:ref' => 'Ref', 'Class:Ticket/Attribute:ref+' => '', 'Class:Ticket/Attribute:org_id' => 'Organization', @@ -96,7 +96,7 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:lnkContactToTicket' => 'Link Contact / Ticket', - 'Class:lnkContactToTicket+' => '', + 'Class:lnkContactToTicket+' => 'Allows linking several Contacts to notify them about the progress of Tickets, in addition to the requester and the agent.', 'Class:lnkContactToTicket/Name' => '%1$s / %2$s', 'Class:lnkContactToTicket/Attribute:ticket_id' => 'Ticket', 'Class:lnkContactToTicket/Attribute:ticket_id+' => '', @@ -122,7 +122,7 @@ Dict::Add('EN US', 'English', 'English', [ Dict::Add('EN US', 'English', 'English', [ 'Class:WorkOrder' => 'Work Order', - 'Class:WorkOrder+' => '', + 'Class:WorkOrder+' => 'A task required for the resolution of a Ticket, assigned to a Team or even an agent.', 'Class:WorkOrder/Attribute:name' => 'Name', 'Class:WorkOrder/Attribute:name+' => '', 'Class:WorkOrder/Attribute:status' => 'Status', diff --git a/datamodels/2.x/itop-tickets/dictionaries/fr.dict.itop-tickets.php b/datamodels/2.x/itop-tickets/dictionaries/fr.dict.itop-tickets.php index e315c767b..b9fe633ad 100644 --- a/datamodels/2.x/itop-tickets/dictionaries/fr.dict.itop-tickets.php +++ b/datamodels/2.x/itop-tickets/dictionaries/fr.dict.itop-tickets.php @@ -12,7 +12,7 @@ */ Dict::Add('FR FR', 'French', 'Français', [ 'Class:Ticket' => 'Ticket', - 'Class:Ticket+' => '', + 'Class:Ticket+' => 'Classe abstraite', 'Class:Ticket/Attribute:ref' => 'Référence', 'Class:Ticket/Attribute:ref+' => '', 'Class:Ticket/Attribute:org_id' => 'Client', @@ -76,7 +76,7 @@ Dict::Add('FR FR', 'French', 'Français', [ Dict::Add('FR FR', 'French', 'Français', [ 'Class:lnkContactToTicket' => 'Lien Contact / Ticket', - 'Class:lnkContactToTicket+' => '', + 'Class:lnkContactToTicket+' => 'Permet de lier plusieurs Contacts afin de les notifier sur l\'avancement des Tickets, en plus du demandeur et de l\'agent.', 'Class:lnkContactToTicket/Name' => '%1$s / %2$s', 'Class:lnkContactToTicket/Attribute:ticket_id' => 'Ticket', 'Class:lnkContactToTicket/Attribute:ticket_id+' => '', @@ -102,7 +102,7 @@ Dict::Add('FR FR', 'French', 'Français', [ Dict::Add('FR FR', 'French', 'Français', [ 'Class:WorkOrder' => 'Tâche', - 'Class:WorkOrder+' => '', + 'Class:WorkOrder+' => 'Tâche nécessaire à la résolution d\'un Ticket, affectée à une Équipe voire à un agent.', 'Class:WorkOrder/Attribute:name' => 'Nom', 'Class:WorkOrder/Attribute:name+' => '', 'Class:WorkOrder/Attribute:status' => 'Etat', diff --git a/datamodels/2.x/itop-virtualization-mgmt/datamodel.itop-virtualization-mgmt.xml b/datamodels/2.x/itop-virtualization-mgmt/datamodel.itop-virtualization-mgmt.xml index 517b46350..2633bee89 100644 --- a/datamodels/2.x/itop-virtualization-mgmt/datamodel.itop-virtualization-mgmt.xml +++ b/datamodels/2.x/itop-virtualization-mgmt/datamodel.itop-virtualization-mgmt.xml @@ -95,24 +95,49 @@
- + + + + + + 10 + + + 20 + + + 30 + + + 40 + + + 10 + + 10 - + + + + + + 10 + + + 10 + + + + + 10 + + + 20 + + 20 - - 30 - - - 40 - - - 50 - - - 60 - 70 @@ -348,30 +373,60 @@
- + + + + + + 10 + + + 20 + + + 30 + + + 40 + + + 10 + + + + + 10 + + + 20 + + + 20 + + 10 - + + + + + + 10 + + + 10 + + + + + 10 + + + 20 + + 20 - - 25 - - - 30 - - - 40 - - - 50 - - - 60 - - - 70 - 80 @@ -506,24 +561,49 @@
- + + + + + + 10 + + + 20 + + + 30 + + + 40 + + + 10 + + 10 - + + + + + + 10 + + + 10 + + + + + 10 + + + 20 + + 20 - - 25 - - - 30 - - - 40 - - - 50 - 60 @@ -722,7 +802,7 @@ 90 - + 10 @@ -737,14 +817,14 @@ 40 - - 50 - 20 + + 5 + 10 @@ -770,14 +850,19 @@ 100 - + 10 10 + + + + 20 + - 20 + 10 @@ -891,33 +976,58 @@
- + + + + + + 10 + + + 30 + + + 10 + + + + + 20 + + + 40 + + + 50 + + + 80 + + + 90 + + + 100 + + + 10 + + 10 - + + + + + + 20 + + + 20 + + 20 - - 40 - - - 50 - - - 60 - - - 70 - - - 80 - - - 90 - - - 100 -
@@ -994,6 +1104,9 @@ + + logo + @@ -1003,7 +1116,7 @@ @@ -1026,6 +1139,13 @@ DEL_MANUAL all + @@ -1064,11 +1184,30 @@
+ + + + 10 + + + 20 + + + 30 + + + 40 + + + 50 + + +
- + 10 @@ -1101,17 +1240,25 @@ - + - 50 - - - 60 + 10 10 + + + + 10 + + + + 20 + 20 diff --git a/datamodels/2.x/itop-virtualization-mgmt/dictionaries/cs.dict.itop-virtualization-mgmt.php b/datamodels/2.x/itop-virtualization-mgmt/dictionaries/cs.dict.itop-virtualization-mgmt.php index edb5bd596..c5ee83bf0 100644 --- a/datamodels/2.x/itop-virtualization-mgmt/dictionaries/cs.dict.itop-virtualization-mgmt.php +++ b/datamodels/2.x/itop-virtualization-mgmt/dictionaries/cs.dict.itop-virtualization-mgmt.php @@ -40,11 +40,11 @@ Dict::Add('CS CZ', 'Czech', 'Čeština', [ 'Class:Cloud/ComplementaryName' => '%1$s-%2$s', 'Class:Cloud' => 'Cloud~~', 'Class:Cloud+' => 'A Virtual Host operated by a Cloud provider. It can host Virtual Machines and Container Hosts.~~', + 'Class:Cloud/Attribute:logo' => 'Logo~~', + 'Class:Cloud/Attribute:logo+' => 'Used as object icon when this Cloud is displayed within impact analysis graphs~~', 'Class:Cloud/Attribute:provider_id+' => 'Who provides the cloud~~', 'Class:Cloud/Attribute:location_id' => 'Location~~', 'Class:Cloud/Attribute:location_id+' => 'Where is located the cloud~~', - 'Class:Cloud/Attribute:containerhosts_list' => 'Container Hosts~~', - 'Class:Cloud/Attribute:containerhosts_list+' => 'List of container hosts hosted in this cloud~~', ]); // diff --git a/datamodels/2.x/itop-virtualization-mgmt/dictionaries/da.dict.itop-virtualization-mgmt.php b/datamodels/2.x/itop-virtualization-mgmt/dictionaries/da.dict.itop-virtualization-mgmt.php index 9d2ec611d..41ff19ef9 100644 --- a/datamodels/2.x/itop-virtualization-mgmt/dictionaries/da.dict.itop-virtualization-mgmt.php +++ b/datamodels/2.x/itop-virtualization-mgmt/dictionaries/da.dict.itop-virtualization-mgmt.php @@ -41,11 +41,11 @@ Dict::Add('DA DA', 'Danish', 'Dansk', [ 'Class:Cloud/ComplementaryName' => '%1$s-%2$s', 'Class:Cloud' => 'Cloud~~', 'Class:Cloud+' => 'A Virtual Host operated by a Cloud provider. It can host Virtual Machines and Container Hosts.~~', + 'Class:Cloud/Attribute:logo' => 'Logo~~', + 'Class:Cloud/Attribute:logo+' => 'Used as object icon when this Cloud is displayed within impact analysis graphs~~', 'Class:Cloud/Attribute:provider_id+' => 'Who provides the cloud~~', 'Class:Cloud/Attribute:location_id' => 'Location~~', 'Class:Cloud/Attribute:location_id+' => 'Where is located the cloud~~', - 'Class:Cloud/Attribute:containerhosts_list' => 'Container Hosts~~', - 'Class:Cloud/Attribute:containerhosts_list+' => 'List of container hosts hosted in this cloud~~', ]); // diff --git a/datamodels/2.x/itop-virtualization-mgmt/dictionaries/de.dict.itop-virtualization-mgmt.php b/datamodels/2.x/itop-virtualization-mgmt/dictionaries/de.dict.itop-virtualization-mgmt.php index c9b57e5c1..735e28570 100644 --- a/datamodels/2.x/itop-virtualization-mgmt/dictionaries/de.dict.itop-virtualization-mgmt.php +++ b/datamodels/2.x/itop-virtualization-mgmt/dictionaries/de.dict.itop-virtualization-mgmt.php @@ -41,11 +41,11 @@ Dict::Add('DE DE', 'German', 'Deutsch', [ 'Class:Cloud/ComplementaryName' => '%1$s-%2$s', 'Class:Cloud' => 'Cloud~~', 'Class:Cloud+' => 'A Virtual Host operated by a Cloud provider. It can host Virtual Machines and Container Hosts.~~', + 'Class:Cloud/Attribute:logo' => 'Logo~~', + 'Class:Cloud/Attribute:logo+' => 'Used as object icon when this Cloud is displayed within impact analysis graphs~~', 'Class:Cloud/Attribute:provider_id+' => 'Who provides the cloud~~', 'Class:Cloud/Attribute:location_id' => 'Location~~', 'Class:Cloud/Attribute:location_id+' => 'Where is located the cloud~~', - 'Class:Cloud/Attribute:containerhosts_list' => 'Container Hosts~~', - 'Class:Cloud/Attribute:containerhosts_list+' => 'List of container hosts hosted in this cloud~~', ]); // diff --git a/datamodels/2.x/itop-virtualization-mgmt/dictionaries/en.dict.itop-virtualization-mgmt.php b/datamodels/2.x/itop-virtualization-mgmt/dictionaries/en.dict.itop-virtualization-mgmt.php index be3e80f15..b0adf809d 100644 --- a/datamodels/2.x/itop-virtualization-mgmt/dictionaries/en.dict.itop-virtualization-mgmt.php +++ b/datamodels/2.x/itop-virtualization-mgmt/dictionaries/en.dict.itop-virtualization-mgmt.php @@ -42,11 +42,11 @@ Dict::Add('EN US', 'English', 'English', [ 'Class:Cloud' => 'Cloud', 'Class:Cloud+' => 'A Virtual Host operated by a Cloud provider. It can host Virtual Machines and Container Hosts.', 'Class:Cloud/Attribute:provider_id' => 'Provider', + 'Class:Cloud/Attribute:logo' => 'Logo', + 'Class:Cloud/Attribute:logo+' => 'Used as object icon when this Cloud is displayed within impact analysis graphs', 'Class:Cloud/Attribute:provider_id+' => 'Who provides the cloud', 'Class:Cloud/Attribute:location_id' => 'Location', 'Class:Cloud/Attribute:location_id+' => 'Where is located the cloud', - 'Class:Cloud/Attribute:containerhosts_list' => 'Container Hosts', - 'Class:Cloud/Attribute:containerhosts_list+' => 'List of container hosts hosted in this cloud', ]); // diff --git a/datamodels/2.x/itop-virtualization-mgmt/dictionaries/en_gb.dict.itop-virtualization-mgmt.php b/datamodels/2.x/itop-virtualization-mgmt/dictionaries/en_gb.dict.itop-virtualization-mgmt.php index c91ef8057..169149802 100644 --- a/datamodels/2.x/itop-virtualization-mgmt/dictionaries/en_gb.dict.itop-virtualization-mgmt.php +++ b/datamodels/2.x/itop-virtualization-mgmt/dictionaries/en_gb.dict.itop-virtualization-mgmt.php @@ -41,11 +41,11 @@ Dict::Add('EN GB', 'British English', 'British English', [ 'Class:Cloud/ComplementaryName' => '%1$s-%2$s', 'Class:Cloud' => 'Cloud', 'Class:Cloud+' => 'A Virtual Host operated by a Cloud provider. It can host Virtual Machines and Container Hosts.~~', + 'Class:Cloud/Attribute:logo' => 'Logo~~', + 'Class:Cloud/Attribute:logo+' => 'Used as object icon when this Cloud is displayed within impact analysis graphs~~', 'Class:Cloud/Attribute:provider_id+' => 'Who provides the cloud~~', 'Class:Cloud/Attribute:location_id' => 'Location~~', 'Class:Cloud/Attribute:location_id+' => 'Where is located the cloud~~', - 'Class:Cloud/Attribute:containerhosts_list' => 'Container Hosts~~', - 'Class:Cloud/Attribute:containerhosts_list+' => 'List of container hosts hosted in this cloud~~', ]); // diff --git a/datamodels/2.x/itop-virtualization-mgmt/dictionaries/es_cr.dict.itop-virtualization-mgmt.php b/datamodels/2.x/itop-virtualization-mgmt/dictionaries/es_cr.dict.itop-virtualization-mgmt.php index 8b50c89d6..5ed5bf3b6 100644 --- a/datamodels/2.x/itop-virtualization-mgmt/dictionaries/es_cr.dict.itop-virtualization-mgmt.php +++ b/datamodels/2.x/itop-virtualization-mgmt/dictionaries/es_cr.dict.itop-virtualization-mgmt.php @@ -28,11 +28,11 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ 'Class:Cloud/ComplementaryName' => '%1$s-%2$s', 'Class:Cloud' => 'Cloud~~', 'Class:Cloud+' => 'A Virtual Host operated by a Cloud provider. It can host Virtual Machines and Container Hosts.~~', + 'Class:Cloud/Attribute:logo' => 'Logo~~', + 'Class:Cloud/Attribute:logo+' => 'Used as object icon when this Cloud is displayed within impact analysis graphs~~', 'Class:Cloud/Attribute:provider_id+' => 'Who provides the cloud~~', 'Class:Cloud/Attribute:location_id' => 'Location~~', 'Class:Cloud/Attribute:location_id+' => 'Where is located the cloud~~', - 'Class:Cloud/Attribute:containerhosts_list' => 'Container Hosts~~', - 'Class:Cloud/Attribute:containerhosts_list+' => 'List of container hosts hosted in this cloud~~', ]); // diff --git a/datamodels/2.x/itop-virtualization-mgmt/dictionaries/fr.dict.itop-virtualization-mgmt.php b/datamodels/2.x/itop-virtualization-mgmt/dictionaries/fr.dict.itop-virtualization-mgmt.php index e392e493f..414f01a22 100644 --- a/datamodels/2.x/itop-virtualization-mgmt/dictionaries/fr.dict.itop-virtualization-mgmt.php +++ b/datamodels/2.x/itop-virtualization-mgmt/dictionaries/fr.dict.itop-virtualization-mgmt.php @@ -42,11 +42,11 @@ Dict::Add('FR FR', 'French', 'Français', [ 'Class:Cloud' => 'Nuage', 'Class:Cloud+' => 'Hôte virtuel, opéré par un fournisseur de services Cloud, il peut héberger des Machines Virtuelles, des Hôtes pour Conteneurs, etc.', 'Class:Cloud/Attribute:provider_id' => 'Fournisseur', + 'Class:Cloud/Attribute:logo' => 'Logo', + 'Class:Cloud/Attribute:logo+' => 'Utilisé comme icône de l\'objet dans les graphes d\'analyse d\'impact', 'Class:Cloud/Attribute:provider_id+' => 'Organisation fournissant le nuage', 'Class:Cloud/Attribute:location_id' => 'Site', 'Class:Cloud/Attribute:location_id+' => 'Site du fournisseur, hébergeant le nuage', - 'Class:Cloud/Attribute:containerhosts_list' => 'Hôtes pour conteneurs', - 'Class:Cloud/Attribute:containerhosts_list+' => 'Liste des hôtes hébergés dans ce nuage', ]); // diff --git a/datamodels/2.x/itop-virtualization-mgmt/dictionaries/hu.dict.itop-virtualization-mgmt.php b/datamodels/2.x/itop-virtualization-mgmt/dictionaries/hu.dict.itop-virtualization-mgmt.php index 4702d90ae..e537f10e1 100644 --- a/datamodels/2.x/itop-virtualization-mgmt/dictionaries/hu.dict.itop-virtualization-mgmt.php +++ b/datamodels/2.x/itop-virtualization-mgmt/dictionaries/hu.dict.itop-virtualization-mgmt.php @@ -41,11 +41,11 @@ Dict::Add('HU HU', 'Hungarian', 'Magyar', [ 'Class:Cloud/ComplementaryName' => '%1$s-%2$s', 'Class:Cloud' => 'Cloud~~', 'Class:Cloud+' => 'A Virtual Host operated by a Cloud provider. It can host Virtual Machines and Container Hosts.~~', + 'Class:Cloud/Attribute:logo' => 'Logo~~', + 'Class:Cloud/Attribute:logo+' => 'Used as object icon when this Cloud is displayed within impact analysis graphs~~', 'Class:Cloud/Attribute:provider_id+' => 'Who provides the cloud~~', 'Class:Cloud/Attribute:location_id' => 'Location~~', 'Class:Cloud/Attribute:location_id+' => 'Where is located the cloud~~', - 'Class:Cloud/Attribute:containerhosts_list' => 'Container Hosts~~', - 'Class:Cloud/Attribute:containerhosts_list+' => 'List of container hosts hosted in this cloud~~', ]); // diff --git a/datamodels/2.x/itop-virtualization-mgmt/dictionaries/it.dict.itop-virtualization-mgmt.php b/datamodels/2.x/itop-virtualization-mgmt/dictionaries/it.dict.itop-virtualization-mgmt.php index ff75d31d6..28eb5cc68 100644 --- a/datamodels/2.x/itop-virtualization-mgmt/dictionaries/it.dict.itop-virtualization-mgmt.php +++ b/datamodels/2.x/itop-virtualization-mgmt/dictionaries/it.dict.itop-virtualization-mgmt.php @@ -40,11 +40,11 @@ Dict::Add('IT IT', 'Italian', 'Italiano', [ 'Class:Cloud/ComplementaryName' => '%1$s-%2$s', 'Class:Cloud' => 'Cloud~~', 'Class:Cloud+' => 'A Virtual Host operated by a Cloud provider. It can host Virtual Machines and Container Hosts.~~', + 'Class:Cloud/Attribute:logo' => 'Logo~~', + 'Class:Cloud/Attribute:logo+' => 'Used as object icon when this Cloud is displayed within impact analysis graphs~~', 'Class:Cloud/Attribute:provider_id+' => 'Who provides the cloud~~', 'Class:Cloud/Attribute:location_id' => 'Location~~', 'Class:Cloud/Attribute:location_id+' => 'Where is located the cloud~~', - 'Class:Cloud/Attribute:containerhosts_list' => 'Container Hosts~~', - 'Class:Cloud/Attribute:containerhosts_list+' => 'List of container hosts hosted in this cloud~~', ]); // diff --git a/datamodels/2.x/itop-virtualization-mgmt/dictionaries/ja.dict.itop-virtualization-mgmt.php b/datamodels/2.x/itop-virtualization-mgmt/dictionaries/ja.dict.itop-virtualization-mgmt.php index f3af5b96a..88e3c1a11 100644 --- a/datamodels/2.x/itop-virtualization-mgmt/dictionaries/ja.dict.itop-virtualization-mgmt.php +++ b/datamodels/2.x/itop-virtualization-mgmt/dictionaries/ja.dict.itop-virtualization-mgmt.php @@ -40,11 +40,11 @@ Dict::Add('JA JP', 'Japanese', '日本語', [ 'Class:Cloud/ComplementaryName' => '%1$s-%2$s', 'Class:Cloud' => 'Cloud~~', 'Class:Cloud+' => 'A Virtual Host operated by a Cloud provider. It can host Virtual Machines and Container Hosts.~~', + 'Class:Cloud/Attribute:logo' => 'Logo~~', + 'Class:Cloud/Attribute:logo+' => 'Used as object icon when this Cloud is displayed within impact analysis graphs~~', 'Class:Cloud/Attribute:provider_id+' => 'Who provides the cloud~~', 'Class:Cloud/Attribute:location_id' => 'Location~~', 'Class:Cloud/Attribute:location_id+' => 'Where is located the cloud~~', - 'Class:Cloud/Attribute:containerhosts_list' => 'Container Hosts~~', - 'Class:Cloud/Attribute:containerhosts_list+' => 'List of container hosts hosted in this cloud~~', ]); // diff --git a/datamodels/2.x/itop-virtualization-mgmt/dictionaries/nl.dict.itop-virtualization-mgmt.php b/datamodels/2.x/itop-virtualization-mgmt/dictionaries/nl.dict.itop-virtualization-mgmt.php index 347f2436e..430ecb83d 100644 --- a/datamodels/2.x/itop-virtualization-mgmt/dictionaries/nl.dict.itop-virtualization-mgmt.php +++ b/datamodels/2.x/itop-virtualization-mgmt/dictionaries/nl.dict.itop-virtualization-mgmt.php @@ -32,11 +32,11 @@ Dict::Add('NL NL', 'Dutch', 'Nederlands', [ 'Class:Cloud/ComplementaryName' => '%1$s-%2$s', 'Class:Cloud' => 'Cloud~~', 'Class:Cloud+' => 'A Virtual Host operated by a Cloud provider. It can host Virtual Machines and Container Hosts.~~', + 'Class:Cloud/Attribute:logo' => 'Logo~~', + 'Class:Cloud/Attribute:logo+' => 'Used as object icon when this Cloud is displayed within impact analysis graphs~~', 'Class:Cloud/Attribute:provider_id+' => 'Who provides the cloud~~', 'Class:Cloud/Attribute:location_id' => 'Location~~', 'Class:Cloud/Attribute:location_id+' => 'Where is located the cloud~~', - 'Class:Cloud/Attribute:containerhosts_list' => 'Container Hosts~~', - 'Class:Cloud/Attribute:containerhosts_list+' => 'List of container hosts hosted in this cloud~~', ]); // diff --git a/datamodels/2.x/itop-virtualization-mgmt/dictionaries/pl.dict.itop-virtualization-mgmt.php b/datamodels/2.x/itop-virtualization-mgmt/dictionaries/pl.dict.itop-virtualization-mgmt.php index cd7f4d282..95cc9011c 100644 --- a/datamodels/2.x/itop-virtualization-mgmt/dictionaries/pl.dict.itop-virtualization-mgmt.php +++ b/datamodels/2.x/itop-virtualization-mgmt/dictionaries/pl.dict.itop-virtualization-mgmt.php @@ -40,11 +40,11 @@ Dict::Add('PL PL', 'Polish', 'Polski', [ 'Class:Cloud/ComplementaryName' => '%1$s-%2$s', 'Class:Cloud' => 'Cloud~~', 'Class:Cloud+' => 'A Virtual Host operated by a Cloud provider. It can host Virtual Machines and Container Hosts.~~', + 'Class:Cloud/Attribute:logo' => 'Logo~~', + 'Class:Cloud/Attribute:logo+' => 'Used as object icon when this Cloud is displayed within impact analysis graphs~~', 'Class:Cloud/Attribute:provider_id+' => 'Who provides the cloud~~', 'Class:Cloud/Attribute:location_id' => 'Location~~', 'Class:Cloud/Attribute:location_id+' => 'Where is located the cloud~~', - 'Class:Cloud/Attribute:containerhosts_list' => 'Container Hosts~~', - 'Class:Cloud/Attribute:containerhosts_list+' => 'List of container hosts hosted in this cloud~~', ]); // diff --git a/datamodels/2.x/itop-virtualization-mgmt/dictionaries/pt_br.dict.itop-virtualization-mgmt.php b/datamodels/2.x/itop-virtualization-mgmt/dictionaries/pt_br.dict.itop-virtualization-mgmt.php index eee9072f0..3d9e4dafd 100644 --- a/datamodels/2.x/itop-virtualization-mgmt/dictionaries/pt_br.dict.itop-virtualization-mgmt.php +++ b/datamodels/2.x/itop-virtualization-mgmt/dictionaries/pt_br.dict.itop-virtualization-mgmt.php @@ -40,11 +40,11 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', [ 'Class:Cloud/ComplementaryName' => '%1$s-%2$s', 'Class:Cloud' => 'Cloud~~', 'Class:Cloud+' => 'A Virtual Host operated by a Cloud provider. It can host Virtual Machines and Container Hosts.~~', + 'Class:Cloud/Attribute:logo' => 'Logo~~', + 'Class:Cloud/Attribute:logo+' => 'Used as object icon when this Cloud is displayed within impact analysis graphs~~', 'Class:Cloud/Attribute:provider_id+' => 'Who provides the cloud~~', 'Class:Cloud/Attribute:location_id' => 'Location~~', 'Class:Cloud/Attribute:location_id+' => 'Where is located the cloud~~', - 'Class:Cloud/Attribute:containerhosts_list' => 'Container Hosts~~', - 'Class:Cloud/Attribute:containerhosts_list+' => 'List of container hosts hosted in this cloud~~', ]); // diff --git a/datamodels/2.x/itop-virtualization-mgmt/dictionaries/ru.dict.itop-virtualization-mgmt.php b/datamodels/2.x/itop-virtualization-mgmt/dictionaries/ru.dict.itop-virtualization-mgmt.php index 758ee5b9b..35800d27a 100644 --- a/datamodels/2.x/itop-virtualization-mgmt/dictionaries/ru.dict.itop-virtualization-mgmt.php +++ b/datamodels/2.x/itop-virtualization-mgmt/dictionaries/ru.dict.itop-virtualization-mgmt.php @@ -30,11 +30,11 @@ Dict::Add('RU RU', 'Russian', 'Русский', [ 'Class:Cloud/ComplementaryName' => '%1$s-%2$s', 'Class:Cloud' => 'Cloud~~', 'Class:Cloud+' => 'A Virtual Host operated by a Cloud provider. It can host Virtual Machines and Container Hosts.~~', + 'Class:Cloud/Attribute:logo' => 'Logo~~', + 'Class:Cloud/Attribute:logo+' => 'Used as object icon when this Cloud is displayed within impact analysis graphs~~', 'Class:Cloud/Attribute:provider_id+' => 'Who provides the cloud~~', 'Class:Cloud/Attribute:location_id' => 'Location~~', 'Class:Cloud/Attribute:location_id+' => 'Where is located the cloud~~', - 'Class:Cloud/Attribute:containerhosts_list' => 'Container Hosts~~', - 'Class:Cloud/Attribute:containerhosts_list+' => 'List of container hosts hosted in this cloud~~', ]); // diff --git a/datamodels/2.x/itop-virtualization-mgmt/dictionaries/sk.dict.itop-virtualization-mgmt.php b/datamodels/2.x/itop-virtualization-mgmt/dictionaries/sk.dict.itop-virtualization-mgmt.php index 40beda675..1fb66fd7c 100644 --- a/datamodels/2.x/itop-virtualization-mgmt/dictionaries/sk.dict.itop-virtualization-mgmt.php +++ b/datamodels/2.x/itop-virtualization-mgmt/dictionaries/sk.dict.itop-virtualization-mgmt.php @@ -40,11 +40,11 @@ Dict::Add('SK SK', 'Slovak', 'Slovenčina', [ 'Class:Cloud/ComplementaryName' => '%1$s-%2$s', 'Class:Cloud' => 'Cloud~~', 'Class:Cloud+' => 'A Virtual Host operated by a Cloud provider. It can host Virtual Machines and Container Hosts.~~', + 'Class:Cloud/Attribute:logo' => 'Logo~~', + 'Class:Cloud/Attribute:logo+' => 'Used as object icon when this Cloud is displayed within impact analysis graphs~~', 'Class:Cloud/Attribute:provider_id+' => 'Who provides the cloud~~', 'Class:Cloud/Attribute:location_id' => 'Location~~', 'Class:Cloud/Attribute:location_id+' => 'Where is located the cloud~~', - 'Class:Cloud/Attribute:containerhosts_list' => 'Container Hosts~~', - 'Class:Cloud/Attribute:containerhosts_list+' => 'List of container hosts hosted in this cloud~~', ]); // diff --git a/datamodels/2.x/itop-virtualization-mgmt/dictionaries/tr.dict.itop-virtualization-mgmt.php b/datamodels/2.x/itop-virtualization-mgmt/dictionaries/tr.dict.itop-virtualization-mgmt.php index 5a43e980f..ffe00563c 100644 --- a/datamodels/2.x/itop-virtualization-mgmt/dictionaries/tr.dict.itop-virtualization-mgmt.php +++ b/datamodels/2.x/itop-virtualization-mgmt/dictionaries/tr.dict.itop-virtualization-mgmt.php @@ -40,11 +40,11 @@ Dict::Add('TR TR', 'Turkish', 'Türkçe', [ 'Class:Cloud/ComplementaryName' => '%1$s-%2$s', 'Class:Cloud' => 'Cloud~~', 'Class:Cloud+' => 'A Virtual Host operated by a Cloud provider. It can host Virtual Machines and Container Hosts.~~', + 'Class:Cloud/Attribute:logo' => 'Logo~~', + 'Class:Cloud/Attribute:logo+' => 'Used as object icon when this Cloud is displayed within impact analysis graphs~~', 'Class:Cloud/Attribute:provider_id+' => 'Who provides the cloud~~', 'Class:Cloud/Attribute:location_id' => 'Location~~', 'Class:Cloud/Attribute:location_id+' => 'Where is located the cloud~~', - 'Class:Cloud/Attribute:containerhosts_list' => 'Container Hosts~~', - 'Class:Cloud/Attribute:containerhosts_list+' => 'List of container hosts hosted in this cloud~~', ]); // diff --git a/datamodels/2.x/itop-virtualization-mgmt/dictionaries/zh_cn.dict.itop-virtualization-mgmt.php b/datamodels/2.x/itop-virtualization-mgmt/dictionaries/zh_cn.dict.itop-virtualization-mgmt.php index e6f21ea96..4a9c70a89 100644 --- a/datamodels/2.x/itop-virtualization-mgmt/dictionaries/zh_cn.dict.itop-virtualization-mgmt.php +++ b/datamodels/2.x/itop-virtualization-mgmt/dictionaries/zh_cn.dict.itop-virtualization-mgmt.php @@ -40,11 +40,11 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', [ 'Class:Cloud/ComplementaryName' => '%1$s-%2$s', 'Class:Cloud' => 'Cloud~~', 'Class:Cloud+' => 'A Virtual Host operated by a Cloud provider. It can host Virtual Machines and Container Hosts.~~', + 'Class:Cloud/Attribute:logo' => 'Logo~~', + 'Class:Cloud/Attribute:logo+' => 'Used as object icon when this Cloud is displayed within impact analysis graphs~~', 'Class:Cloud/Attribute:provider_id+' => 'Who provides the cloud~~', 'Class:Cloud/Attribute:location_id' => 'Location~~', 'Class:Cloud/Attribute:location_id+' => 'Where is located the cloud~~', - 'Class:Cloud/Attribute:containerhosts_list' => 'Container Hosts~~', - 'Class:Cloud/Attribute:containerhosts_list+' => 'List of container hosts hosted in this cloud~~', ]); // diff --git a/datamodels/2.x/itop-container-mgmt/images/icons8-cloud.svg b/images/icons/icons8-cloud.svg similarity index 100% rename from datamodels/2.x/itop-container-mgmt/images/icons8-cloud.svg rename to images/icons/icons8-cloud.svg diff --git a/js/field_set.js b/js/field_set.js index 4a4fa5ece..2c2460c11 100644 --- a/js/field_set.js +++ b/js/field_set.js @@ -189,11 +189,14 @@ $(function() this.buildData.script_code = ''; this.buildData.style_code = ''; - for (var i in oData.updated_fields) + for (let i in oData.updated_fields) { - var oUpdatedField = oData.updated_fields[i]; - this.options.fields_list[oUpdatedField.id] = oUpdatedField; - this._prepareField(oUpdatedField.id); + const oUpdatedField = oData.updated_fields[i]; + const oPreviousField = this.options.fields_list[oUpdatedField.id]; + if (!oPreviousField || JSON.stringify(oPreviousField) !== JSON.stringify(oUpdatedField)) { + this.options.fields_list[oUpdatedField.id] = oUpdatedField; + this._prepareField(oUpdatedField.id); + } } // Adding code to the dom diff --git a/js/forms-json-utils.js b/js/forms-json-utils.js index ee45b79bd..e9ffd69c8 100644 --- a/js/forms-json-utils.js +++ b/js/forms-json-utils.js @@ -301,88 +301,112 @@ function ValidateField(sFieldId, sPattern, bMandatory, sFormId, nullValue, origi return true; // Do not stop propagation ?? } -function ValidateCKEditField(sFieldId, sPattern, bMandatory, sFormId, nullValue, originalValue) +function EvaluateCKEditorValidation(oOptions) { - let oField = $('#'+sFieldId); + let oField = $('#'+oOptions.sFieldId); if (oField.length === 0) { return false; } - let oCKEditor = CombodoCKEditorHandler.GetInstanceSynchronous('#'+sFieldId); + let oCKEditor = CombodoCKEditorHandler.GetInstanceSynchronous('#'+oOptions.sFieldId); + let bValid = true; + let sExplain = ''; + let sTextContent; + let sTextOriginalContents; - var bValid; - var sExplain = ''; if (oField.prop('disabled')) { bValid = true; // disabled fields are not checked } else { // If the CKEditor is not yet loaded, we need to wait for it to be ready // but as we need this function to be synchronous, we need to call it again when the CKEditor is ready if (oCKEditor === undefined){ - CombodoCKEditorHandler.GetInstance('#'+sFieldId).then((oCKEditor) => { - ValidateCKEditField(sFieldId, sPattern, bMandatory, sFormId, nullValue, originalValue); + CombodoCKEditorHandler.GetInstance('#'+oOptions.sFieldId).then((oCKEditor) => { + oOptions.onRetry(); }); - return; + return false; } - let sTextContent; - let sFormattedContent = oCKEditor.getData(); - // Get the contents without the tags - // Check if we have a formatted content that is HTML, otherwise we just have plain text, and we can use it directly + let sFormattedContent = oCKEditor.getData(); sTextContent = $(sFormattedContent).length > 0 ? $(sFormattedContent).text() : sFormattedContent; - if (sTextContent === '') { + if (sTextContent === '') + { // No plain text, maybe there is just an image - let oImg = $(sFormattedContent).find("img"); - if (oImg.length !== 0) { + let oImg = $(sFormattedContent).find('img'); + if (oImg.length !== 0) + { sTextContent = 'image'; } } - // Get the original value without the tags - let oFormattedOriginalContents = (originalValue !== undefined) ? $('
').html(originalValue) : undefined; - let sTextOriginalContents = (oFormattedOriginalContents !== undefined) ? oFormattedOriginalContents.text() : undefined; + let oFormattedOriginalContents = (oOptions.sOriginalValue !== undefined) ? $('
').html(oOptions.sOriginalValue) : undefined; + sTextOriginalContents = (oFormattedOriginalContents !== undefined) ? oFormattedOriginalContents.text() : undefined; - if (bMandatory && (sTextContent === nullValue)) { - bValid = false; - sExplain = Dict.S('UI:ValueMustBeSet'); - } else if ((sTextOriginalContents !== undefined) && (sTextContent === sTextOriginalContents)) { - bValid = false; - if (sTextOriginalContents === nullValue) { - sExplain = Dict.S('UI:ValueMustBeSet'); - } else { - // Note: value change check is not working well yet as the HTML to Text conversion is not exactly the same when done from the PHP value or the CKEditor value. - sExplain = Dict.S('UI:ValueMustBeChanged'); - } - } else { - bValid = true; + if (oOptions.validate !== undefined) { + let oValidation = oOptions.validate(sTextContent, sTextOriginalContents); + bValid = oValidation.bValid; + sExplain = oValidation.sExplain; } - - // Put and event to check the field when the content changes, remove the event right after as we'll call this same function again, and we don't want to call the event more than once (especially not ^2 times on each call) + + // Put an event to check the field when the content changes, remove the event right after as we'll call this same function again, and we don't want to call the event more than once (especially not ^2 times on each call) oCKEditor.model.document.once('change:data', (event) => { - ValidateCKEditField(sFieldId, sPattern, bMandatory, sFormId, nullValue, originalValue); + oOptions.onChange(); }); } - - ReportFieldValidationStatus(sFieldId, sFormId, bValid, sExplain); + + ReportFieldValidationStatus(oOptions.sFieldId, oOptions.sFormId, bValid, sExplain); return bValid; } +function ValidateCKEditField(sFieldId, sPattern, bMandatory, sFormId, nullValue, originalValue) +{ + return EvaluateCKEditorValidation({ + sFieldId: sFieldId, + sFormId: sFormId, + sOriginalValue: originalValue, + onRetry: function() { + ValidateCKEditField(sFieldId, sPattern, bMandatory, sFormId, nullValue, originalValue); + }, + onChange: function() { + ValidateCKEditField(sFieldId, sPattern, bMandatory, sFormId, nullValue, originalValue); + }, + validate: function(sTextContent, sTextOriginalContents) { + var bValid; + var sExplain = ''; + if (bMandatory && (sTextContent === nullValue)) { + bValid = false; + sExplain = Dict.S('UI:ValueMustBeSet'); + } else if ((sTextOriginalContents !== undefined) && (sTextContent === sTextOriginalContents)) { + bValid = false; + if (sTextOriginalContents === nullValue) { + sExplain = Dict.S('UI:ValueMustBeSet'); + } else { + // Note: value change check is not working well yet as the HTML to Text conversion is not exactly the same when done from the PHP value or the CKEditor value. + sExplain = Dict.S('UI:ValueMustBeChanged'); + } + } else { + bValid = true; + } + return {bValid: bValid, sExplain: sExplain}; + } + }); +} function ResetPwd(id) { - // Reset the values of the password fields - $('#'+id).val('*****'); - $('#'+id+'_confirm').val('*****'); - // And reset the flag, to tell it that the password remains unchanged - $('#'+id+'_changed').val(0); - // Visual feedback, None when it's Ok - $('#v_'+id).html(''); + // Reset the values of the password fields + $('#'+id).val('*****'); + $('#'+id+'_confirm').val('*****'); + // And reset the flag, to tell it that the password remains unchanged + $('#'+id+'_changed').val(0); + // Visual feedback, None when it's Ok + $('#v_'+id).html(''); } // Called whenever the content of a one way encrypted password changes function PasswordFieldChanged(id) { - // Set the flag, to tell that the password changed - $('#'+id+'_changed').val(1); + // Set the flag, to tell that the password changed + $('#'+id+'_changed').val(1); } // Special validation function for one way encrypted password fields @@ -415,37 +439,48 @@ function ValidatePasswordField(id, sFormId) // to determine if the field is empty or not function ValidateCaseLogField(sFieldId, bMandatory, sFormId, nullValue, originalValue) { - var bValid = true; - var sExplain = ''; - var sTextContent; - - if ($('#'+sFieldId).prop('disabled')) - { - bValid = true; // disabled fields are not checked - } - else - { - // Get the contents (with tags) - // Note: For CaseLog we can't retrieve the formatted contents from CKEditor (unlike in ValidateCKEditorField() method) because of the place holder. - sTextContent = $('#' + sFieldId).val(); - var count = $('#'+sFieldId+'_count').val(); + return EvaluateCKEditorValidation({ + sFieldId: sFieldId, + sFormId: sFormId, + sOriginalValue: originalValue, + onRetry: function() { + ValidateCaseLogField(sFieldId, bMandatory, sFormId, nullValue, originalValue); + }, + onChange: function() { + ValidateCaseLogField(sFieldId, bMandatory, sFormId, nullValue, originalValue); + }, + validate: function(sTextContent, sTextOriginalContents) { + var bValid; + var sExplain = ''; + // CaseLog is special: history count matters when deciding if the field is empty + var count = $('#'+sFieldId+'_count').val(); - if (bMandatory && (count == 0) && (sTextContent == nullValue)) - { - // No previous entry and no content typed - bValid = false; - sExplain = Dict.S('UI:ValueMustBeSet'); + if (bMandatory && (count == 0) && (sTextContent === nullValue)) + { + // No previous entry and no content typed + bValid = false; + sExplain = Dict.S('UI:ValueMustBeSet'); + } + else if ((sTextOriginalContents !== undefined) && (sTextContent === sTextOriginalContents)) + { + bValid = false; + if (sTextOriginalContents === nullValue) + { + sExplain = Dict.S('UI:ValueMustBeSet'); + } + else + { + // Note: value change check is not working well yet as the HTML to Text conversion is not exactly the same when done from the PHP value or the CKEditor value. + sExplain = Dict.S('UI:ValueMustBeChanged'); + } + } + else + { + bValid = true; + } + return {bValid: bValid, sExplain: sExplain}; } - else if ((originalValue != undefined) && (sTextContent == originalValue)) - { - bValid = false; - sExplain = Dict.S('UI:ValueMustBeChanged'); - } - } - ReportFieldValidationStatus(sFieldId, sFormId, bValid, '' /* sExplain */); - - // We need to check periodically as CKEditor doesn't trigger our events. More details in UIHTMLEditorWidget::Display() @ line 92 - setTimeout(function(){ValidateCaseLogField(sFieldId, bMandatory, sFormId, nullValue, originalValue);}, 500); + }); } // Validate the inputs depending on the current setting diff --git a/js/pages/backoffice/toolbox.js b/js/pages/backoffice/toolbox.js index 271229a0d..a4630ebd3 100644 --- a/js/pages/backoffice/toolbox.js +++ b/js/pages/backoffice/toolbox.js @@ -334,6 +334,12 @@ CombodoModal._ConvertButtonDefinition = function (aButtonsDefinitions) { class: typeof(element.classes) !== 'undefined' ? element.classes.join(' ') : '', click: element.callback_on_click } + + // id is optional, and we don't want to set it if not defined + if (typeof element.id !== 'undefined' && element.id !== null) { + aButton.id = element.id; + } + aConverted.push(aButton); } ); diff --git a/js/searchformforeignkeys.js b/js/searchformforeignkeys.js index 253d5cab8..c70f37138 100644 --- a/js/searchformforeignkeys.js +++ b/js/searchformforeignkeys.js @@ -35,116 +35,63 @@ function SearchFormForeignKeys(id, sTargetClass, sAttCode, oSearchWidgetElmt, sF this.sAttCode = sAttCode; this.oSearchWidgetElmt = oSearchWidgetElmt; this.emptyHtml = ''; // content to be displayed when the search results are empty (when opening the dialog) - this.emptyOnClose = true; // Workaround for the JQuery dialog being very slow when opening and closing if the content contains many INPUT tags - this.ajax_request = null; // this.bSelectMode = bSelectMode; // true if the edited field is a SELECT, false if it's an autocomplete // this.bSearchMode = bSearchMode; // true if selecting a value in the context of a search form var me = this; this.Init = function() { - // make sure that the form is clean - $('#linkedset_'+this.id+' .selection').each( function() { this.checked = false; }); - $('#'+this.id+'_btnRemove').prop('disabled', false); - - $('
').appendTo(document.body); - - // me.trace(dialog); - - //TODO : check and remove all unneded code bellow this line!! - - $('#'+this.id+'_linksToRemove').val(''); - - $('#linkedset_'+me.id).on('remove', function() { - // prevent having the dlg div twice - $('#dlg_'+me.id).remove(); - }); - - $('#'+this.iInputId).closest('form').on('submit', function() { - return me.OnFormSubmit(); - }); - }; - - this.StopPendingRequest = function() - { - if (me.ajax_request) - { - me.ajax_request.abort(); - me.ajax_request = null; - } }; this.ShowModalSearchForeignKeys = function() { - // // Query the server to get the form to search for target objects - // if (me.bSelectMode) - // { - // $('#fstatus_'+me.id).html(''); - // } - // else - // { - // $('#label_'+me.id).addClass('dlg_loading'); - // } - $('#label_'+me.id).addClass('dlg_loading'); - var theMap = { - sAttCode: me.sAttCode, - iInputId: me.id, - sTitle: me.sTitle, - sTargetClass: me.sTargetClass, - // bSearchMode: me.bSearchMode, - operation: 'ShowModalSearchForeignKeys' - }; + const oModalParams = { + content: { + endpoint: AddAppContext(GetAbsoluteUrlAppRoot()+'pages/ajax.render.php'), + data: { + sAttCode: me.sAttCode, + iInputId: me.id, + sTargetClass: me.sTargetClass, + operation: 'ShowModalSearchForeignKeys' + }, + }, + title: me.sTitle, + id: 'dlg_'+me.id, + size: 'lg', + buttons: [ + { + text: Dict.S('UI:Button:Cancel'), + callback_on_click: function() { + $(this).dialog("close"); + }, + classes: ['cancel', 'ibo-is-alternative', 'ibo-is-neutral'], + }, + { + text: Dict.S('UI:Button:Add'), + id: "btn_ok_"+me.id, + classes: ['ok', 'ibo-is-regular', 'ibo-is-primary'], + callback_on_click: function() { + me.DoAddObjects(); + } + } + ], + callback_on_content_loaded: function(oModalContentElement){ + // Update initial buttons state + me.UpdateButtons(); + }, + extra_options: { + callback_on_modal_close: function () { + $(this).remove(); // destroy then remove dialog object + } + } + } + const oModal = CombodoModal.OpenModal(oModalParams); - - // Make sure that we cancel any pending request before issuing another - // since responses may arrive in arbitrary order - me.StopPendingRequest(); - - // Run the query and get the result back directly in HTML - me.ajax_request = $.post( AddAppContext(GetAbsoluteUrlAppRoot()+'pages/ajax.render.php'), theMap, - function(data) - { - // $('#dlg_'+me.id).html(data); - $('#dlg_'+me.id).empty().append($(data)); // $(data).filter(':not(script)')); - $('#dlg_'+me.id).dialog('open'); - me.UpdateSizes(); - me.UpdateButtons(); - me.ajax_request = null; - me.ListResultsSearchForeignKeys(); - }, - 'html' - ); - }; - - this.UpdateSizes = function() - { - var dlg = $('#dlg_'+me.id); - // Adjust the dialog's size to fit into the screen - if (dlg.width() > ($(window).width()-40)) - { - dlg.width($(window).width()-40); - } - if (dlg.height() > ($(window).height()-70)) - { - dlg.height($(window).height()-70); - } - var searchForm = dlg.find('div.display_block').first(); // Top search form, enclosing display_block - var results = $('#SearchResultsToAdd_'+me.id); - var oPadding = {}; - var aKeys = ['top', 'right', 'bottom', 'left']; - for(k in aKeys) - { - oPadding[aKeys[k]] = 0; - if (dlg.css('padding-'+aKeys[k])) - { - oPadding[aKeys[k]] = parseInt(dlg.css('padding-'+aKeys[k]).replace('px', '')); - } - } - //var width = dlg.innerWidth() - oPadding['right'] - oPadding['left'] - 22; // 5 (margin-left) + 5 (padding-left) + 5 (padding-right) + 5 (margin-right) + 2 for rounding ! - var height = dlg.innerHeight()-oPadding['top']-oPadding['bottom']-22; - var form_height = searchForm.outerHeight(); - results.height(height - form_height - 40); // Leave some space for the buttons + // Bind events + oModal.on('change', '#count_'+me.id, function(){ + me.UpdateButtons(); + }); }; this.UpdateButtons = function() @@ -160,63 +107,6 @@ function SearchFormForeignKeys(id, sTargetClass, sAttCode, oSearchWidgetElmt, sF } }; - /** - * @return {boolean} - */ - this.ListResultsSearchForeignKeys = function () - { - var theMap = { - sTargetClass: me.sTargetClass, - iInputId: me.id, - sFilter: me.sfilter, - // bSearchMode: me.bSearchMode - }; - - // Gather the parameters from the search form - $('#fs_'+me.id+' :input').each( function() { - if (this.name !== '') - { - var val = $(this).val(); // supports multiselect as well - if (val !== null) - { - theMap[this.name] = val; - } - } - }); - - - - theMap['sRemoteClass'] = theMap['class']; // swap 'class' (defined in the form) and 'remoteClass' - theMap.operation = 'ListResultsSearchForeignKeys'; // Override what is defined in the form itself - theMap.sAttCode = me.sAttCode; - var sSearchAreaId = '#SearchResultsToAdd_'+me.id; - //$(sSearchAreaId).html('
'); - $(sSearchAreaId).block(); - me.UpdateButtons(); - - // Make sure that we cancel any pending request before issuing another - // since responses may arrive in arbitrary order - me.StopPendingRequest(); - - // Run the query and display the results - me.ajax_request = $.post(AddAppContext(GetAbsoluteUrlAppRoot()+'pages/ajax.render.php'), theMap, - function(data) - { - $(sSearchAreaId).html(data); - $('#fr_'+me.id+' input:radio').on('click', function() { me.UpdateButtons(); }); - me.UpdateButtons(); - me.ajax_request = null; - $('#count_'+me.id).on('change', function(){ - me.UpdateButtons(); - }); - me.UpdateSizes(); - }, - 'html' - ); - - return false; // Don't submit the form, stay in the current page ! - }; - /** * @return {boolean} */ @@ -286,56 +176,4 @@ function SearchFormForeignKeys(id, sTargetClass, sAttCode, oSearchWidgetElmt, sF return false; }; - - - // Workaround for a ui.jquery limitation: if the content of - // the dialog contains many INPUTs, closing and opening the - // dialog is very slow. So empty it each time. - this.OnClose = function() - { - me.StopPendingRequest(); - // called by the dialog, so in the context 'this' points to the jQueryObject - if (me.emptyOnClose) - { - $('#SearchResultsToAdd_'+me.id).html(me.emptyHtml); - } - $('#label_'+me.id).removeClass('dlg_loading'); - $('#label_'+me.id).trigger('focus'); - me.ajax_request = null; - }; - - this.DoSelectObjectClass = function() - { - // Retrieving selected value - var oSelectedClass = $('#ac_create_'+me.id+' select'); - if(oSelectedClass.length !== 1) return; - - // Setting new target class - me.sTargetClass = oSelectedClass.val(); - - // Opening real creation form - $('#ac_create_'+me.id).dialog('close'); - me.CreateObject(); - }; - - this.Update = function() - { - if ($('#'+me.id).prop('disabled')) - { - $('#v_'+me.id).html(''); - $('#label_'+me.id).prop('disabled', true); - $('#label_'+me.id).css({'background': 'transparent'}); - $('#mini_add_'+me.id).hide(); - $('#mini_tree_'+me.id).hide(); - $('#mini_search_'+me.id).hide(); - } - else - { - $('#label_'+me.id).prop('disabled', false); - $('#label_'+me.id).css({'background': '#fff url(../images/ac-background.gif) no-repeat right'}); - $('#mini_add_'+me.id).show(); - $('#mini_tree_'+me.id).show(); - $('#mini_search_'+me.id).show(); - } - }; } \ No newline at end of file diff --git a/lib/composer/autoload_classmap.php b/lib/composer/autoload_classmap.php index fe71e8e48..6a5d5a220 100644 --- a/lib/composer/autoload_classmap.php +++ b/lib/composer/autoload_classmap.php @@ -134,6 +134,7 @@ return array( 'Combodo\\iTop\\Application\\Helper\\CKEditorHelper' => $baseDir . '/sources/Application/Helper/CKEditorHelper.php', 'Combodo\\iTop\\Application\\Helper\\ExportHelper' => $baseDir . '/sources/Application/Helper/ExportHelper.php', 'Combodo\\iTop\\Application\\Helper\\FormHelper' => $baseDir . '/sources/Application/Helper/FormHelper.php', + 'Combodo\\iTop\\Application\\Helper\\SearchHelper' => $baseDir . '/sources/Application/Helper/SearchHelper.php', 'Combodo\\iTop\\Application\\Helper\\Session' => $baseDir . '/sources/Application/Helper/Session.php', 'Combodo\\iTop\\Application\\Helper\\WebResourcesHelper' => $baseDir . '/sources/Application/Helper/WebResourcesHelper.php', 'Combodo\\iTop\\Application\\Newsroom\\iTopNewsroomProvider' => $baseDir . '/sources/Application/Newsroom/iTopNewsroomProvider.php', diff --git a/lib/composer/autoload_static.php b/lib/composer/autoload_static.php index 48aa04b28..8007c561c 100644 --- a/lib/composer/autoload_static.php +++ b/lib/composer/autoload_static.php @@ -520,6 +520,7 @@ class ComposerStaticInitfc0e9e9dea11dcbb6272414776c30685 'Combodo\\iTop\\Application\\Helper\\CKEditorHelper' => __DIR__ . '/../..' . '/sources/Application/Helper/CKEditorHelper.php', 'Combodo\\iTop\\Application\\Helper\\ExportHelper' => __DIR__ . '/../..' . '/sources/Application/Helper/ExportHelper.php', 'Combodo\\iTop\\Application\\Helper\\FormHelper' => __DIR__ . '/../..' . '/sources/Application/Helper/FormHelper.php', + 'Combodo\\iTop\\Application\\Helper\\SearchHelper' => __DIR__ . '/../..' . '/sources/Application/Helper/SearchHelper.php', 'Combodo\\iTop\\Application\\Helper\\Session' => __DIR__ . '/../..' . '/sources/Application/Helper/Session.php', 'Combodo\\iTop\\Application\\Helper\\WebResourcesHelper' => __DIR__ . '/../..' . '/sources/Application/Helper/WebResourcesHelper.php', 'Combodo\\iTop\\Application\\Newsroom\\iTopNewsroomProvider' => __DIR__ . '/../..' . '/sources/Application/Newsroom/iTopNewsroomProvider.php', diff --git a/lib/composer/installed.json b/lib/composer/installed.json index 848a7992e..66435c1a1 100644 --- a/lib/composer/installed.json +++ b/lib/composer/installed.json @@ -1665,17 +1665,17 @@ }, { "name": "scssphp/scssphp", - "version": "v1.13.0", - "version_normalized": "1.13.0.0", + "version": "dev-combodo/1.x", + "version_normalized": "dev-combodo/1.x", "source": { "type": "git", - "url": "https://github.com/scssphp/scssphp.git", - "reference": "63d1157457e5554edf00b0c1fabab4c1511d2520" + "url": "https://github.com/combodo-itop-libs/scssphp.git", + "reference": "dde81c0a39d02e8e6fc81b70269747734e16d526" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/scssphp/scssphp/zipball/63d1157457e5554edf00b0c1fabab4c1511d2520", - "reference": "63d1157457e5554edf00b0c1fabab4c1511d2520", + "url": "https://api.github.com/repos/combodo-itop-libs/scssphp/zipball/dde81c0a39d02e8e6fc81b70269747734e16d526", + "reference": "dde81c0a39d02e8e6fc81b70269747734e16d526", "shasum": "" }, "require": { @@ -1698,15 +1698,15 @@ "ext-iconv": "Can be used as fallback when ext-mbstring is not available", "ext-mbstring": "For best performance, mbstring should be installed as it is faster than ext-iconv" }, - "time": "2024-08-17T21:02:11+00:00", + "time": "2026-03-23T15:26:59+00:00", "bin": [ "bin/pscss" ], "type": "library", "extra": { "bamarni-bin": { - "bin-links": false, - "forward-command": false + "forward-command": false, + "bin-links": false } }, "installation-source": "dist", @@ -1715,7 +1715,11 @@ "ScssPhp\\ScssPhp\\": "src/" } }, - "notification-url": "https://packagist.org/downloads/", + "autoload-dev": { + "psr-4": { + "ScssPhp\\ScssPhp\\Tests\\": "tests/" + } + }, "license": [ "MIT" ], @@ -1741,8 +1745,7 @@ "stylesheet" ], "support": { - "issues": "https://github.com/scssphp/scssphp/issues", - "source": "https://github.com/scssphp/scssphp/tree/v1.13.0" + "source": "https://github.com/combodo-itop-libs/scssphp/tree/combodo/1.x" }, "install-path": "../scssphp/scssphp" }, diff --git a/lib/composer/installed.php b/lib/composer/installed.php index 671486a68..80b9847a8 100644 --- a/lib/composer/installed.php +++ b/lib/composer/installed.php @@ -294,9 +294,9 @@ 'dev_requirement' => false, ), 'scssphp/scssphp' => array( - 'pretty_version' => 'v1.13.0', - 'version' => '1.13.0.0', - 'reference' => '63d1157457e5554edf00b0c1fabab4c1511d2520', + 'pretty_version' => 'dev-combodo/1.x', + 'version' => 'dev-combodo/1.x', + 'reference' => 'dde81c0a39d02e8e6fc81b70269747734e16d526', 'type' => 'library', 'install_path' => __DIR__ . '/../scssphp/scssphp', 'aliases' => array(), diff --git a/lib/scssphp/scssphp/src/Compiler.php b/lib/scssphp/scssphp/src/Compiler.php index d654ee6eb..c7c14435c 100644 --- a/lib/scssphp/scssphp/src/Compiler.php +++ b/lib/scssphp/scssphp/src/Compiler.php @@ -5052,7 +5052,7 @@ EOL; * * @return array */ - protected function multiplyMedia(Environment $env = null, $childQueries = null) + protected function multiplyMedia(?Environment $env = null, $childQueries = null) { if ( ! isset($env) || @@ -5144,7 +5144,7 @@ EOL; * * @return \ScssPhp\ScssPhp\Compiler\Environment */ - protected function pushEnv(Block $block = null) + protected function pushEnv(?Block $block = null) { $env = new Environment(); $env->parent = $this->env; @@ -5208,7 +5208,7 @@ EOL; * * @return void */ - protected function set($name, $value, $shadow = false, Environment $env = null, $valueUnreduced = null) + protected function set($name, $value, $shadow = false, ?Environment $env = null, $valueUnreduced = null) { $name = $this->normalizeName($name); @@ -5314,7 +5314,7 @@ EOL; * * @return mixed|null */ - public function get($name, $shouldThrow = true, Environment $env = null, $unreduced = false) + public function get($name, $shouldThrow = true, ?Environment $env = null, $unreduced = false) { $normalizedName = $this->normalizeName($name); $specialContentKey = static::$namespaces['special'] . 'content'; @@ -5379,7 +5379,7 @@ EOL; * * @return bool */ - protected function has($name, Environment $env = null) + protected function has($name, ?Environment $env = null) { return ! \is_null($this->get($name, false, $env)); } diff --git a/lib/scssphp/scssphp/src/Formatter.php b/lib/scssphp/scssphp/src/Formatter.php index 6137dc650..c477e6f99 100644 --- a/lib/scssphp/scssphp/src/Formatter.php +++ b/lib/scssphp/scssphp/src/Formatter.php @@ -272,7 +272,7 @@ abstract class Formatter * * @return string */ - public function format(OutputBlock $block, SourceMapGenerator $sourceMapGenerator = null) + public function format(OutputBlock $block, ?SourceMapGenerator $sourceMapGenerator = null) { $this->sourceMapGenerator = null; diff --git a/lib/scssphp/scssphp/src/Node/Number.php b/lib/scssphp/scssphp/src/Node/Number.php index 6c0445876..a38ba5f17 100644 --- a/lib/scssphp/scssphp/src/Node/Number.php +++ b/lib/scssphp/scssphp/src/Node/Number.php @@ -578,7 +578,7 @@ class Number extends Node implements \ArrayAccess, \JsonSerializable * * @return string */ - public function output(Compiler $compiler = null) + public function output(?Compiler $compiler = null) { $dimension = round($this->dimension, self::PRECISION); diff --git a/lib/scssphp/scssphp/src/Parser.php b/lib/scssphp/scssphp/src/Parser.php index e7cb2e8c1..674a08026 100644 --- a/lib/scssphp/scssphp/src/Parser.php +++ b/lib/scssphp/scssphp/src/Parser.php @@ -140,7 +140,7 @@ class Parser * @param bool $cssOnly * @param LoggerInterface|null $logger */ - public function __construct($sourceName, $sourceIndex = 0, $encoding = 'utf-8', Cache $cache = null, $cssOnly = false, LoggerInterface $logger = null) + public function __construct($sourceName, $sourceIndex = 0, $encoding = 'utf-8', ?Cache $cache = null, $cssOnly = false, ?LoggerInterface $logger = null) { $this->sourceName = $sourceName ?: '(stdin)'; $this->sourceIndex = $sourceIndex; diff --git a/lib/scssphp/scssphp/src/Warn.php b/lib/scssphp/scssphp/src/Warn.php index 592b44c70..7ad061520 100644 --- a/lib/scssphp/scssphp/src/Warn.php +++ b/lib/scssphp/scssphp/src/Warn.php @@ -59,7 +59,7 @@ final class Warn * * @internal */ - public static function setCallback(callable $callback = null) + public static function setCallback(?callable $callback = null) { $previousCallback = self::$callback; self::$callback = $callback; diff --git a/pages/UI.php b/pages/UI.php index 02f02738e..276191508 100644 --- a/pages/UI.php +++ b/pages/UI.php @@ -5,6 +5,7 @@ * @license http://opensource.org/licenses/AGPL-3.0 */ +use Combodo\iTop\Application\Helper\SearchHelper; use Combodo\iTop\Application\Helper\Session; use Combodo\iTop\Application\TwigBase\Twig\TwigHelper; use Combodo\iTop\Application\UI\Base\Component\Button\ButtonUIBlockFactory; @@ -126,72 +127,6 @@ function SetObjectBreadCrumbEntry(DBObject $oObj, WebPage $oPage) $oPage->SetBreadCrumbEntry("ui-details-$sClass-".$oObj->GetKey(), $oObj->Get('friendlyname'), MetaModel::GetName($sClass).': '.$oObj->Get('friendlyname'), '', $sIcon, $sIconType); } -/** - * Displays the result of a search request - * @param $oP WebPage Web page for the output - * @param $oFilter DBSearch The search of objects to display - * @param $bSearchForm boolean Whether or not to display the search form at the top the page - * @param $sBaseClass string The base class for the search (can be different from the actual class of the results) - * @param $sFormat string The format to use for the output: csv or html - * @param $bDoSearch bool True to display the search results below the search form - * @param $bSearchFormOpen bool True to display the search form fully expanded (only if $bSearchForm of course) - * @throws \CoreException - * @throws \DictExceptionMissingString - */ -function DisplaySearchSet($oP, $oFilter, $bSearchForm = true, $sBaseClass = '', $sFormat = '', $bDoSearch = true, $bSearchFormOpen = true, $aParams = []) -{ - //search block - $oBlockForm = null; - if ($bSearchForm) { - $aParams['open'] = $bSearchFormOpen; - if (false === isset($aParams['table_id'])) { - $aParams['table_id'] = 'result_1'; - } - if (!empty($sBaseClass)) { - $aParams['baseClass'] = $sBaseClass; - } - $oBlockForm = new DisplayBlock($oFilter, 'search', false /* Asynchronous */, $aParams); - - if (!$bDoSearch) { - $oBlockForm->Display($oP, 0); - } - } - if ($bDoSearch) { - if (strtolower($sFormat) == 'csv') { - $oBlock = new DisplayBlock($oFilter, 'csv', false); - // Adjust the size of the Textarea containing the CSV to fit almost all the remaining space - $oP->add_ready_script(" $('#1>textarea').height($('#1').parent().height() - $('#0').outerHeight() - 30).width( $('#1').parent().width() - 20);"); // adjust the size of the block - } else { - $oBlock = new DisplayBlock($oFilter, 'list', false); - - // Breadcrumb - //$iCount = $oBlock->GetDisplayedCount(); - $sPageId = "ui-search-".$oFilter->GetClass(); - $sLabel = MetaModel::GetName($oFilter->GetClass()); - $oP->SetBreadCrumbEntry($sPageId, $sLabel, '', '', 'fas fa-search', iTopWebPage::ENUM_BREADCRUMB_ENTRY_ICON_TYPE_CSS_CLASSES); - } - if ($bSearchForm) { - //add search block - $sTableId = utils::ReadParam('_table_id_', null, false, 'raw_data'); - if ($sTableId == '') { - $sTableId = 'result_1'; - } - $aExtraParams['table_id'] = $sTableId; - $aExtraParams['submit_on_load'] = false; - $oUIBlockForm = $oBlockForm->GetDisplay($oP, 'search_1', $aExtraParams); - //add result block - $oUIBlock = $oBlock->GetDisplay($oP, $sTableId); - $oUIBlock->AddCSSClasses(['display_block', 'sf_results_area']); - $oUIBlock->AddDataAttribute('target', 'search_results'); - //$oUIBlockForm->AddSubBlock($oUIBlock); - $oP->AddUiBlock($oUIBlockForm); - $oUIBlockForm->AddSubBlock($oUIBlock); - } else { - $oBlock->Display($oP, 1); - } - } -} - /** * Displays a form (checkboxes) to select the objects for which to apply a given action * Only the objects for which the action is valid can be checked. By default all valid objects are checked @@ -460,7 +395,7 @@ try { $sOQL = "SELECT $sOQLClass $sOQLClause"; try { $oFilter = DBObjectSearch::FromOQL($sOQL); - DisplaySearchSet($oP, $oFilter, $bSearchForm, $sBaseClass, $sFormat); + SearchHelper::DisplaySearchSet($oP, $oFilter, $bSearchForm, $sBaseClass, $sFormat); } catch (CoreException $e) { $oFilter = new DBObjectSearch($sOQLClass); $oSet = new DBObjectSet($oFilter); @@ -487,7 +422,7 @@ try { } $oP->set_title(Dict::S('UI:SearchResultsPageTitle')); $oFilter = new DBObjectSearch($sClass); - DisplaySearchSet($oP, $oFilter, $bSearchForm, '' /* sBaseClass */, $sFormat, $bDoSearch, true /* Search Form Expanded */); + SearchHelper::DisplaySearchSet($oP, $oFilter, $bSearchForm, '' /* sBaseClass */, $sFormat, $bDoSearch, true /* Search Form Expanded */); break; /////////////////////////////////////////////////////////////////////////////////////////// @@ -509,7 +444,7 @@ try { // $sParams = utils::ReadParam('aParams', '{}', false, \utils::ENUM_SANITIZATION_FILTER_RAW_DATA); // $aParams = json_decode($sParams, true); - DisplaySearchSet($oP, $oFilter, $bSearchForm, '' /* sBaseClass */, $sFormat); //, true, true, $aParams + SearchHelper::DisplaySearchSet($oP, $oFilter, $bSearchForm, '' /* sBaseClass */, $sFormat); //, true, true, $aParams break; /////////////////////////////////////////////////////////////////////////////////////////// diff --git a/pages/ajax.document.php b/pages/ajax.document.php index 69c9d0a03..3278d8e36 100644 --- a/pages/ajax.document.php +++ b/pages/ajax.document.php @@ -34,7 +34,6 @@ try { require_once(APPROOT.'/application/startup.inc.php'); require_once(APPROOT.'/application/loginwebpage.class.inc.php'); - LoginWebPage::DoLoginEx(); IssueLog::Trace('----- Request: '.utils::GetRequestUri(), LogChannels::WEB_REQUEST); @@ -45,6 +44,7 @@ try { switch ($operation) { case 'download_document': + LoginWebPage::DoLoginEx(); $id = utils::ReadParam('id', ''); $sField = utils::ReadParam('field', ''); if ($sClass == 'Attachment') { @@ -64,6 +64,7 @@ try { break; case 'download_inlineimage': + LoginWebPage::DoLoginEx(); $id = utils::ReadParam('id', ''); $sSecret = utils::ReadParam('s', ''); $iCacheSec = 31556926; // One year ahead: an inline image cannot change diff --git a/pages/ajax.render.php b/pages/ajax.render.php index 3e8888c86..2bdf1cea6 100644 --- a/pages/ajax.render.php +++ b/pages/ajax.render.php @@ -173,10 +173,9 @@ try { case 'ShowModalSearchForeignKeys': $oPage->SetContentType('text/html'); $iInputId = utils::ReadParam('iInputId', ''); - $sTitle = utils::ReadParam('sTitle', '', false, 'raw_data'); $sTargetClass = utils::ReadParam('sTargetClass', '', false, 'class'); $oWidget = new UISearchFormForeignKeys($sTargetClass, $iInputId); - $oWidget->ShowModalSearchForeignKeys($oPage, $sTitle); + $oWidget->ShowModalSearchForeignKeys($oPage); break; // ui.searchformforeignkeys @@ -187,16 +186,6 @@ try { $oWidget->GetFullListForeignKeysFromSelection($oPage, $oFullSetFilter); break; - // ui.searchformforeignkeys - case 'ListResultsSearchForeignKeys': - $oPage->SetContentType('text/html'); - $sTargetClass = utils::ReadParam('sTargetClass', '', false, 'class'); - $iInputId = utils::ReadParam('iInputId', ''); - $sRemoteClass = utils::ReadParam('sRemoteClass', '', false, 'class'); - $oWidget = new UISearchFormForeignKeys($sTargetClass, $iInputId); - $oWidget->ListResultsSearchForeignKeys($oPage, $sRemoteClass); - break; - // ui.linkswidget case 'addObjects': $oPage->SetContentType('text/html'); @@ -2387,8 +2376,7 @@ EOF $oKPI->ComputeAndReport('Data fetch and format'); $oPage->output(); } catch (Exception $e) { - // note: transform to cope with XSS attacks - echo utils::EscapeHtml($e->GetMessage()); + echo utils::EscapeHtml(Dict::S('UI:PageTitle:FatalError')); IssueLog::Error($e->getMessage()."\nDebug trace:\n".$e->getTraceAsString()); } diff --git a/pages/exec.php b/pages/exec.php index 5d982fa66..d0ef7cea1 100644 --- a/pages/exec.php +++ b/pages/exec.php @@ -103,20 +103,22 @@ if ($sTargetPage === false || $sModule === 'core' || $sModule === 'dictionaries' // force login if needed $aModuleDelegatedAuthenticationEndpointsList = GetModuleDelegatedAuthenticationEndpoints($sModule); +// If module doesn't have the delegated authentication endpoints list defined, we rely on the conf. param. to decide if we force login or not. if (is_null($aModuleDelegatedAuthenticationEndpointsList)) { - $bForceLoginWhenNoDelegatedAuthenticationEndpoints = utils::GetConfig()->Get('security.force_login_when_no_delegated_authentication_endpoints_list'); + $bForceLoginWhenNoDelegatedAuthenticationEndpoints = !utils::GetConfig()->Get('security.disable_exec_forced_login_for_all_enpoints'); if ($bForceLoginWhenNoDelegatedAuthenticationEndpoints) { require_once(APPROOT.'/application/startup.inc.php'); LoginWebPage::DoLoginEx(); } } +// If module defined a delegated authentication endpoints but not for the current page, we consider that the page is not allowed to be executed without login if (is_array($aModuleDelegatedAuthenticationEndpointsList) && !in_array($sPage, $aModuleDelegatedAuthenticationEndpointsList)) { - // if module defined a delegated authentication endpoints but not for the current page, we consider that the page is not allowed to be executed without login require_once(APPROOT.'/application/startup.inc.php'); LoginWebPage::DoLoginEx(); } +// If user is not logged in, log a warning in the log file as the page is executed without login, which is not recommended for security reason if (is_null($aModuleDelegatedAuthenticationEndpointsList) && !UserRights::IsLoggedIn()) { - // check if user is not logged in, if not log a warning in the log file as the page is executed without login, which is not recommended for security reason + require_once(APPROOT.'/application/startup.inc.php'); IssueLog::Debug("The '$sPage' page is executed without logging in. This call will be blocked in the future and will likely cause unwanted behaviour in the '$sModule' module. Please define a delegated authentication endpoint for the module, as described at https://www.itophub.io/wiki/page?id=latest:customization:new_extension#security."); } diff --git a/setup/modulediscovery/ModuleFileReaderException.php b/setup/modulediscovery/ModuleFileReaderException.php index 64fef5e7f..50b22c393 100644 --- a/setup/modulediscovery/ModuleFileReaderException.php +++ b/setup/modulediscovery/ModuleFileReaderException.php @@ -14,7 +14,7 @@ class ModuleFileReaderException extends Exception * @param int $iHttpCode * @param Exception|null $oPrevious */ - public function __construct($sMessage, $iHttpCode = 0, Exception $oPrevious = null, $sModuleFile = null) + public function __construct($sMessage, $iHttpCode = 0, ?Exception $oPrevious = null, $sModuleFile = null) { $e = new Exception(""); diff --git a/setup/moduleinstallation/moduleinstallation.class.inc.php b/setup/moduleinstallation/moduleinstallation.class.inc.php index 0927fe8b3..cc5a6ecc3 100644 --- a/setup/moduleinstallation/moduleinstallation.class.inc.php +++ b/setup/moduleinstallation/moduleinstallation.class.inc.php @@ -31,7 +31,7 @@ class ModuleInstallation extends DBObject { $aParams = [ - "category" => "core,view_in_gui", + "category" => "core,view_in_gui,grant_by_profile", "key_type" => "autoincrement", 'name_attcode' => ['name', 'version'], "state_attcode" => "", diff --git a/setup/setuppage.class.inc.php b/setup/setuppage.class.inc.php index 2beda5e1d..25985c97a 100644 --- a/setup/setuppage.class.inc.php +++ b/setup/setuppage.class.inc.php @@ -36,6 +36,8 @@ class SetupPage extends NiceWebPage { public const DEFAULT_PAGE_TEMPLATE_REL_PATH = 'pages/backoffice/setuppage/layout'; + public const BODY_DATA_GUI_TYPE = 'setup'; + public function __construct($sTitle) { parent::__construct($sTitle); diff --git a/sources/Application/Helper/SearchHelper.php b/sources/Application/Helper/SearchHelper.php new file mode 100644 index 000000000..055bba645 --- /dev/null +++ b/sources/Application/Helper/SearchHelper.php @@ -0,0 +1,88 @@ +Display($oP, 0); + } + } + if ($bDoSearch) { + if (strtolower($sFormat) == 'csv') { + $oBlock = new DisplayBlock($oFilter, 'csv', false); + // Adjust the size of the Textarea containing the CSV to fit almost all the remaining space + $oP->add_ready_script(" $('#1>textarea').height($('#1').parent().height() - $('#0').outerHeight() - 30).width( $('#1').parent().width() - 20);"); // adjust the size of the block + } else { + $oBlock = new DisplayBlock($oFilter, 'list', false); + + // Breadcrumb + //$iCount = $oBlock->GetDisplayedCount(); + $sPageId = "ui-search-".$oFilter->GetClass(); + $sLabel = MetaModel::GetName($oFilter->GetClass()); + $oP->SetBreadCrumbEntry($sPageId, $sLabel, '', '', 'fas fa-search', iTopWebPage::ENUM_BREADCRUMB_ENTRY_ICON_TYPE_CSS_CLASSES); + } + if ($bSearchForm) { + //add search block + $sTableId = utils::ReadParam('_table_id_', null, false, 'raw_data'); + if ($sTableId == '') { + $sTableId = 'result_1'; + } + $aExtraParams['table_id'] = $sTableId; + $aExtraParams['submit_on_load'] = false; + $oUIBlockForm = $oBlockForm->GetDisplay($oP, 'search_1', $aExtraParams); + + // If the class is not high cardinality, we can display the results directly in the same page + if (!utils::IsHighCardinality($oFilter->GetClass())) { + //add result block + $oUIBlock = $oBlock->GetDisplay($oP, $sTableId); + $oUIBlock->AddCSSClasses(['display_block', 'sf_results_area']); + $oUIBlock->AddDataAttribute('target', 'search_results'); + $oUIBlockForm->AddSubBlock($oUIBlock); + } + + $oP->AddUiBlock($oUIBlockForm); + } else { + $oBlock->Display($oP, 1); + } + } + } +} diff --git a/sources/Application/TwigBase/Controller/Controller.php b/sources/Application/TwigBase/Controller/Controller.php index c562283d7..7c8d87c46 100644 --- a/sources/Application/TwigBase/Controller/Controller.php +++ b/sources/Application/TwigBase/Controller/Controller.php @@ -738,7 +738,7 @@ abstract class Controller extends AbstractController * * @param string $sCode Code of the tab */ - public function AddAjaxTab(string $sCode, string $sURL, bool $bCache = true, string $sLabel = null): void + public function AddAjaxTab(string $sCode, string $sURL, bool $bCache = true, ?string $sLabel = null): void { if (is_null($sLabel)) { $sLabel = Dict::S($sCode); diff --git a/sources/Application/UI/Base/Component/DataTable/DataTableUIBlockFactory.php b/sources/Application/UI/Base/Component/DataTable/DataTableUIBlockFactory.php index 10e906cc6..01e1acab8 100644 --- a/sources/Application/UI/Base/Component/DataTable/DataTableUIBlockFactory.php +++ b/sources/Application/UI/Base/Component/DataTable/DataTableUIBlockFactory.php @@ -340,8 +340,10 @@ class DataTableUIBlockFactory extends AbstractUIBlockFactory $aClassAliases = $oSet->GetFilter()->GetSelectedClasses(); $aAuthorizedClasses = []; foreach ($aClassAliases as $sAlias => $sClassName) { - if ((UserRights::IsActionAllowed($sClassName, UR_ACTION_READ, $oSet) != UR_ALLOWED_NO) && - ((count($aDisplayAliases) == 0) || (in_array($sAlias, $aDisplayAliases)))) { + if ( + ((UserRights::IsActionAllowed($sClassName, UR_ACTION_READ, $oSet) !== UR_ALLOWED_NO) || ($aExtraParams['display_unauthorized_objects'] ?? false) === true) + && ((count($aDisplayAliases) == 0) || (in_array($sAlias, $aDisplayAliases))) + ) { $aAuthorizedClasses[$sAlias] = $sClassName; } } @@ -520,6 +522,14 @@ class DataTableUIBlockFactory extends AbstractUIBlockFactory if ($aData['checked']) { if ($sAttCode == '_key_') { if ($bViewLink) { + $sRenderLink = "return row['".$sClassAlias."/hyperlink'];"; + if ( + ($aExtraParams['display_unauthorized_objects'] ?? false) === true + && UserRights::IsActionAllowed($sClassName, UR_ACTION_READ) !== UR_ALLOWED_YES + ) { + $sRenderLink = "return row['".$sClassAlias."/friendlyname'];"; + } + $aColumnDefinition[] = [ 'description' => $aData['label'], 'object_class' => $sClassName, @@ -527,7 +537,7 @@ class DataTableUIBlockFactory extends AbstractUIBlockFactory 'attribute_code' => $sAttCode, 'attribute_type' => '_key_', 'attribute_label' => MetaModel::GetName($sClassName), - 'render' => "return row['".$sClassAlias."/hyperlink'];", + 'render' => $sRenderLink, ]; } @@ -952,6 +962,8 @@ JS; /** Handler to call when trying to create a new object in modal */ 'creation_disallowed', /** Don't provide the standard object creation feature */ + 'display_unauthorized_objects', + /** bool Display objects for which the user has no read rights */ ]; } } diff --git a/sources/Application/UI/Base/Component/TurboForm/TurboForm.php b/sources/Application/UI/Base/Component/TurboForm/TurboForm.php index 2b7bb563e..d09056508 100644 --- a/sources/Application/UI/Base/Component/TurboForm/TurboForm.php +++ b/sources/Application/UI/Base/Component/TurboForm/TurboForm.php @@ -22,7 +22,7 @@ class TurboForm extends UIContentBlock protected ?string $sAction; private FormView $oFormView; - public function __construct(FormView $oFormView, string $sId = null) + public function __construct(FormView $oFormView, ?string $sId = null) { parent::__construct($sId); $this->oFormView = $oFormView; diff --git a/sources/Application/UI/Base/Component/TurboForm/TurboFormUIBlockFactory.php b/sources/Application/UI/Base/Component/TurboForm/TurboFormUIBlockFactory.php index 414d28b0c..b5cb49072 100644 --- a/sources/Application/UI/Base/Component/TurboForm/TurboFormUIBlockFactory.php +++ b/sources/Application/UI/Base/Component/TurboForm/TurboFormUIBlockFactory.php @@ -36,7 +36,7 @@ class TurboFormUIBlockFactory extends AbstractUIBlockFactory * * @return \Combodo\iTop\Application\UI\Base\Component\TurboForm\TurboForm An HTML form in which you can add UIBlocks */ - public static function MakeStandard(FormView $oFormView, string $sAction = null, string $sId = null): TurboForm + public static function MakeStandard(FormView $oFormView, ?string $sAction = null, ?string $sId = null): TurboForm { $oTurboForm = new TurboForm($oFormView, $sId); if (!is_null($sAction)) { @@ -57,7 +57,7 @@ class TurboFormUIBlockFactory extends AbstractUIBlockFactory * @return \Combodo\iTop\Application\UI\Base\Component\TurboForm\TurboForm * @throws \Combodo\iTop\Forms\Block\FormBlockException */ - public static function MakeForDashletConfiguration(string $sDashletId, array $aData = [], string $sId = null): TurboForm + public static function MakeForDashletConfiguration(string $sDashletId, array $aData = [], ?string $sId = null): TurboForm { $oBlockForm = FormBlockService::GetInstance()->GetFormBlockById($sDashletId, 'Dashlet'); $oController = new FormsController(); diff --git a/sources/Application/UI/Base/Component/TurboStream/TurboStream.php b/sources/Application/UI/Base/Component/TurboStream/TurboStream.php index 877c080b5..5a7a310e9 100644 --- a/sources/Application/UI/Base/Component/TurboStream/TurboStream.php +++ b/sources/Application/UI/Base/Component/TurboStream/TurboStream.php @@ -16,7 +16,7 @@ class TurboStream extends UIContentBlock private string $sTarget; private string $sAction; - public function __construct(string $sTarget, string $sAction, string $sId = null) + public function __construct(string $sTarget, string $sAction, ?string $sId = null) { parent::__construct($sId); $this->sTarget = $sTarget; diff --git a/sources/Application/UI/Base/Component/TurboStream/TurboStreamUIBlockFactory.php b/sources/Application/UI/Base/Component/TurboStream/TurboStreamUIBlockFactory.php index 84f86b68d..fa8c76fb9 100644 --- a/sources/Application/UI/Base/Component/TurboStream/TurboStreamUIBlockFactory.php +++ b/sources/Application/UI/Base/Component/TurboStream/TurboStreamUIBlockFactory.php @@ -31,7 +31,7 @@ class TurboStreamUIBlockFactory extends AbstractUIBlockFactory * * @return \Combodo\iTop\Application\UI\Base\Component\TurboUpdate\TurboStream An HTML form in which you can add UIBlocks */ - public static function MakeUpdate(string $sTarget, string $sId = null): TurboStream + public static function MakeUpdate(string $sTarget, ?string $sId = null): TurboStream { return new TurboStream($sTarget, 'update', $sId); } @@ -44,7 +44,7 @@ class TurboStreamUIBlockFactory extends AbstractUIBlockFactory * * @return \Combodo\iTop\Application\UI\Base\Component\TurboUpdate\TurboStream An HTML form in which you can add UIBlocks */ - public static function MakeReplace(string $sTarget, string $sId = null): TurboStream + public static function MakeReplace(string $sTarget, ?string $sId = null): TurboStream { return new TurboStream($sTarget, 'replace', $sId); } @@ -57,7 +57,7 @@ class TurboStreamUIBlockFactory extends AbstractUIBlockFactory * * @return \Combodo\iTop\Application\UI\Base\Component\TurboUpdate\TurboStream An HTML form in which you can add UIBlocks */ - public static function MakePrepend(string $sTarget, string $sId = null): TurboStream + public static function MakePrepend(string $sTarget, ?string $sId = null): TurboStream { return new TurboStream($sTarget, 'prepend', $sId); } @@ -70,7 +70,7 @@ class TurboStreamUIBlockFactory extends AbstractUIBlockFactory * * @return \Combodo\iTop\Application\UI\Base\Component\TurboUpdate\TurboStream An HTML form in which you can add UIBlocks */ - public static function MakeAppend(string $sTarget, string $sId = null): TurboStream + public static function MakeAppend(string $sTarget, ?string $sId = null): TurboStream { return new TurboStream($sTarget, 'append', $sId); } diff --git a/sources/Application/UI/Base/Layout/ActivityPanel/ActivityPanelFactory.php b/sources/Application/UI/Base/Layout/ActivityPanel/ActivityPanelFactory.php index db9d8ea07..96c425af8 100644 --- a/sources/Application/UI/Base/Layout/ActivityPanel/ActivityPanelFactory.php +++ b/sources/Application/UI/Base/Layout/ActivityPanel/ActivityPanelFactory.php @@ -152,6 +152,7 @@ class ActivityPanelFactory if (false === empty($aRelatedTriggersIDs)) { // - Prepare query to retrieve events $oNotifEventsSearch = DBObjectSearch::FromOQL('SELECT EN FROM EventNotification AS EN JOIN Action AS A ON EN.action_id = A.id WHERE EN.trigger_id IN (:triggers_ids) AND EN.object_id = :object_id'); + $oNotifEventsSearch->AllowAllData(); $oNotifEventsSet = new DBObjectSet($oNotifEventsSearch, ['id' => false], ['triggers_ids' => $aRelatedTriggersIDs, 'object_id' => $sObjId]); $oNotifEventsSet->SetLimit(MetaModel::GetConfig()->Get('max_history_length')); diff --git a/sources/Application/WebPage/AjaxPage.php b/sources/Application/WebPage/AjaxPage.php index 9bec75ea7..fa6b70102 100644 --- a/sources/Application/WebPage/AjaxPage.php +++ b/sources/Application/WebPage/AjaxPage.php @@ -218,6 +218,7 @@ class AjaxPage extends WebPage implements iTabbedPage 'aJsInlineLive' => $this->a_scripts, 'aJsInlineOnDomReady' => $this->GetReadyScripts(), 'aJsInlineOnInit' => $this->a_init_scripts, + 'sBodyDataGuiType' => static::BODY_DATA_GUI_TYPE, 'bEscapeContent' => ($this->sContentType == 'text/html') && ($this->sContentDisposition == 'inline'), // TODO 3.0.0: TEMP, used while developping, remove it. 'sSanitizedContent' => utils::FilterXSS($this->s_content), diff --git a/sources/Application/WebPage/ErrorPage.php b/sources/Application/WebPage/ErrorPage.php index 0fec50b95..fd902cbc4 100644 --- a/sources/Application/WebPage/ErrorPage.php +++ b/sources/Application/WebPage/ErrorPage.php @@ -51,7 +51,7 @@ class ErrorPage extends NiceWebPage $this->log_warning($sText); } - public function error($sText, \Throwable $oException = null) + public function error($sText, ?\Throwable $oException = null) { $this->add("
$sText
"); if (utils::IsEasterEggAllowed()) { diff --git a/sources/Application/WebPage/UnauthenticatedWebPage.php b/sources/Application/WebPage/UnauthenticatedWebPage.php index 2794c63a2..f2cb4a996 100644 --- a/sources/Application/WebPage/UnauthenticatedWebPage.php +++ b/sources/Application/WebPage/UnauthenticatedWebPage.php @@ -172,6 +172,7 @@ class UnauthenticatedWebPage extends NiceWebPage 'aJsInlineLive' => $this->a_scripts, 'aJsInlineOnDomReady' => $this->GetReadyScripts(), 'aJsInlineOnInit' => $this->a_init_scripts, + 'sBodyDataGuiType' => static::BODY_DATA_GUI_TYPE, // TODO 3.0.0: TEMP, used while developing, remove it. 'sCapturedOutput' => utils::FilterXSS($s_captured_output), diff --git a/sources/Application/WebPage/WebPage.php b/sources/Application/WebPage/WebPage.php index 0b2c7179c..a5733efe3 100644 --- a/sources/Application/WebPage/WebPage.php +++ b/sources/Application/WebPage/WebPage.php @@ -152,6 +152,8 @@ class WebPage implements Page */ public const DEFAULT_PAGE_TEMPLATE_REL_PATH = 'pages/backoffice/webpage/layout'; + public const BODY_DATA_GUI_TYPE = 'backoffice'; + protected $s_title; protected $s_content; protected $s_deferred_content; @@ -1566,6 +1568,7 @@ JS; 'aJsInlineLive' => $this->a_scripts, 'aJsInlineOnDomReady' => $this->GetReadyScripts(), 'aJsInlineOnInit' => $this->a_init_scripts, + 'sBodyDataGuiType' => static::BODY_DATA_GUI_TYPE, // TODO 3.0.0: TEMP, used while developing, remove it. 'sCapturedOutput' => utils::FilterXSS($s_captured_output), diff --git a/sources/Application/WebPage/iTopWebPage.php b/sources/Application/WebPage/iTopWebPage.php index 9ea9e4362..607e017f8 100644 --- a/sources/Application/WebPage/iTopWebPage.php +++ b/sources/Application/WebPage/iTopWebPage.php @@ -929,6 +929,7 @@ HTML; 'aJsInlineOnInit' => $this->a_init_scripts, 'aJsInlineOnDomReady' => $this->GetReadyScripts(), 'aJsInlineLive' => $this->a_scripts, + 'sBodyDataGuiType' => static::BODY_DATA_GUI_TYPE, // TODO 3.0.0: TEMP, used while developping, remove it. 'sSanitizedContent' => utils::FilterXSS($this->s_content), 'sDeferredContent' => utils::FilterXSS($this->s_deferred_content), diff --git a/sources/Controller/AjaxRenderController.php b/sources/Controller/AjaxRenderController.php index adb2bcbbc..f4538713a 100644 --- a/sources/Controller/AjaxRenderController.php +++ b/sources/Controller/AjaxRenderController.php @@ -42,6 +42,7 @@ use RunTimeEnvironment; use ScalarExpression; use SetupUtils; use UILinksWidget; +use UserRights; use utils; use WizardHelper; @@ -71,6 +72,15 @@ class AjaxRenderController $bShowObsoleteData = utils::ShowObsoleteData(); } $oSet->SetShowObsoleteData($bShowObsoleteData); + + // N°8606 : Check user permissions on the main class + if ( + UserRights::IsActionAllowed($oSet->GetClass(), UR_ACTION_READ, $oSet) !== UR_ALLOWED_YES + && ($aExtraParams['display_unauthorized_objects'] ?? false) === false + ) { + throw new Exception(Dict::Format('UI:Error:ReadNotAllowedOn_Class', $oSet->GetClass())); + } + $iCount = 0; if (isset($aExtraParams['object_count'])) { $iCount = $aExtraParams['object_count']; @@ -101,6 +111,14 @@ class AjaxRenderController continue; } + // N°8606 : Check user permissions on the current class + if ( + UserRights::IsActionAllowed($sClass, UR_ACTION_READ, $oSet) !== UR_ALLOWED_YES + && ($aExtraParams['display_unauthorized_objects'] ?? false) === false + ) { + throw new Exception(Dict::Format('UI:Error:ReadNotAllowedOn_Class', $sClass)); + } + foreach ($aColumnsLoad[$sAlias] as $sAttCode) { $aObj[$sAlias."/".$sAttCode] = $aObject[$sAlias]->GetAsHTML($sAttCode); $bExcludeRawValue = false; diff --git a/sources/Controller/Newsroom/iTopNewsroomController.php b/sources/Controller/Newsroom/iTopNewsroomController.php index 8d0b1451d..7f0937793 100644 --- a/sources/Controller/Newsroom/iTopNewsroomController.php +++ b/sources/Controller/Newsroom/iTopNewsroomController.php @@ -26,6 +26,7 @@ use CoreException; use DBObjectSearch; use DBObjectSet; use Dict; +use EventNotificationNewsroom; use MetaModel; use SecurityException; use UserRights; @@ -361,6 +362,7 @@ JS // Search for all notifications for the current user $oSearch = DBObjectSearch::FromOQL('SELECT EventNotificationNewsroom'); $oSearch->AddCondition('contact_id', UserRights::GetContactId(), '='); + $oSearch->AllowAllData(); $oSet = new DBObjectSet($oSearch, ['read' => true, 'date' => false], []); // Add main content block @@ -529,6 +531,7 @@ JS if (utils::IsNotNullOrEmptyString($iContactId)) { $oSearch = DBObjectSearch::FromOQL('SELECT EventNotificationNewsroom WHERE contact_id = :contact_id AND read = "no"'); + $oSearch->AllowAllData(); $oSet = new DBObjectSet($oSearch, [], ['contact_id' => $iContactId]); while ($oMessage = $oSet->Fetch()) { @@ -542,7 +545,7 @@ $sMessage HTML; $sIcon = $oMessage->Get('icon') !== null ? - $oMessage->Get('icon')->GetDisplayURL('EventNotificationNewsroom', $oMessage->GetKey(), 'icon') : + $oMessage->Get('icon')->GetDisplayURL(EventNotificationNewsroom::class, $oMessage->GetKey(), 'icon') : Branding::GetCompactMainLogoAbsoluteUrl(); $aMessages[] = [ 'id' => $oMessage->GetKey(), @@ -579,6 +582,7 @@ HTML; if (utils::IsNotNullOrEmptyString($iContactId)) { $oSearch = DBObjectSearch::FromOQL('SELECT EventNotificationNewsroom WHERE contact_id = :contact_id AND read = "no"'); + $oSearch->AllowAllData(); $oSet = new DBObjectSet($oSearch, [], ['contact_id' => $iContactId]); while ($oEvent = $oSet->Fetch()) { @@ -608,7 +612,7 @@ HTML; $sEventId = utils::ReadParam('event_id', 0); if ($sEventId > 0) { try { - $oEvent = MetaModel::GetObject('EventNotificationNewsroom', $sEventId); + $oEvent = MetaModel::GetObject(EventNotificationNewsroom::class, $sEventId, true, true); if ($oEvent !== null && $oEvent->Get('contact_id') === UserRights::GetContactId()) { $oEvent->Set('read', 'yes'); $oEvent->SetCurrentDate('read_date'); diff --git a/sources/Core/AttributeDefinition/AttributeBlob.php b/sources/Core/AttributeDefinition/AttributeBlob.php index e3bc2bb2f..e8c97d394 100644 --- a/sources/Core/AttributeDefinition/AttributeBlob.php +++ b/sources/Core/AttributeDefinition/AttributeBlob.php @@ -67,12 +67,12 @@ class AttributeBlob extends AttributeDefinition return true; } - public function GetDefaultValue(DBObject $oHostObject = null) + public function GetDefaultValue(?DBObject $oHostObject = null) { return new ormDocument('', '', ''); } - public function IsNullAllowed(DBObject $oHostObject = null) + public function IsNullAllowed(?DBObject $oHostObject = null) { return $this->GetOptional("is_null_allowed", false); } diff --git a/sources/Core/AttributeDefinition/AttributeCaseLog.php b/sources/Core/AttributeDefinition/AttributeCaseLog.php index f812d656c..9dadebba5 100644 --- a/sources/Core/AttributeDefinition/AttributeCaseLog.php +++ b/sources/Core/AttributeDefinition/AttributeCaseLog.php @@ -121,7 +121,7 @@ class AttributeCaseLog extends AttributeLongText } } - public function GetDefaultValue(DBObject $oHostObject = null) + public function GetDefaultValue(?DBObject $oHostObject = null) { return new ormCaseLog(); } diff --git a/sources/Core/AttributeDefinition/AttributeClass.php b/sources/Core/AttributeDefinition/AttributeClass.php index b9fd7fb51..93b127044 100644 --- a/sources/Core/AttributeDefinition/AttributeClass.php +++ b/sources/Core/AttributeDefinition/AttributeClass.php @@ -32,7 +32,7 @@ class AttributeClass extends AttributeString parent::__construct($sCode, $aParams); } - public function GetDefaultValue(DBObject $oHostObject = null) + public function GetDefaultValue(?DBObject $oHostObject = null) { $sDefault = parent::GetDefaultValue($oHostObject); if (!$this->IsNullAllowed() && $this->IsNull($sDefault)) { diff --git a/sources/Core/AttributeDefinition/AttributeCustomFields.php b/sources/Core/AttributeDefinition/AttributeCustomFields.php index bdd75746c..6b173d0eb 100644 --- a/sources/Core/AttributeDefinition/AttributeCustomFields.php +++ b/sources/Core/AttributeDefinition/AttributeCustomFields.php @@ -61,7 +61,7 @@ class AttributeCustomFields extends AttributeDefinition return false; } // See ReadValue... - public function GetDefaultValue(DBObject $oHostObject = null) + public function GetDefaultValue(?DBObject $oHostObject = null) { return new ormCustomFieldsValue($oHostObject, $this->GetCode()); } diff --git a/sources/Core/AttributeDefinition/AttributeDBField.php b/sources/Core/AttributeDefinition/AttributeDBField.php index 23b27b184..81d79b29c 100644 --- a/sources/Core/AttributeDefinition/AttributeDBField.php +++ b/sources/Core/AttributeDefinition/AttributeDBField.php @@ -21,7 +21,7 @@ class AttributeDBField extends AttributeDBFieldVoid return array_merge(parent::ListExpectedParams(), ["default_value", "is_null_allowed"]); } - public function GetDefaultValue(DBObject $oHostObject = null) + public function GetDefaultValue(?DBObject $oHostObject = null) { return $this->MakeRealValue($this->Get("default_value"), $oHostObject); } diff --git a/sources/Core/AttributeDefinition/AttributeDBFieldVoid.php b/sources/Core/AttributeDefinition/AttributeDBFieldVoid.php index 5ebac10d0..4a7f08767 100644 --- a/sources/Core/AttributeDefinition/AttributeDBFieldVoid.php +++ b/sources/Core/AttributeDefinition/AttributeDBFieldVoid.php @@ -83,7 +83,7 @@ class AttributeDBFieldVoid extends AttributeDefinition return $this->Get("sql"); } - public function GetDefaultValue(DBObject $oHostObject = null) + public function GetDefaultValue(?DBObject $oHostObject = null) { return $this->MakeRealValue("", $oHostObject); } diff --git a/sources/Core/AttributeDefinition/AttributeDashboard.php b/sources/Core/AttributeDefinition/AttributeDashboard.php index b00d9277f..2918a4c91 100644 --- a/sources/Core/AttributeDefinition/AttributeDashboard.php +++ b/sources/Core/AttributeDefinition/AttributeDashboard.php @@ -63,7 +63,7 @@ class AttributeDashboard extends AttributeDefinition return ""; } - public function GetDefaultValue(DBObject $oHostObject = null) + public function GetDefaultValue(?DBObject $oHostObject = null) { return null; } diff --git a/sources/Core/AttributeDefinition/AttributeDateTime.php b/sources/Core/AttributeDefinition/AttributeDateTime.php index 535ee854f..82bde38e3 100644 --- a/sources/Core/AttributeDefinition/AttributeDateTime.php +++ b/sources/Core/AttributeDefinition/AttributeDateTime.php @@ -244,7 +244,7 @@ class AttributeDateTime extends AttributeDBField return $iUnixSeconds; } - public function GetDefaultValue(DBObject $oHostObject = null) + public function GetDefaultValue(?DBObject $oHostObject = null) { $sDefaultValue = $this->Get('default_value'); if (utils::IsNotNullOrEmptyString($sDefaultValue)) { diff --git a/sources/Core/AttributeDefinition/AttributeDefinition.php b/sources/Core/AttributeDefinition/AttributeDefinition.php index 76ca7234a..0d4699637 100644 --- a/sources/Core/AttributeDefinition/AttributeDefinition.php +++ b/sources/Core/AttributeDefinition/AttributeDefinition.php @@ -875,7 +875,7 @@ abstract class AttributeDefinition return null; } - abstract public function GetDefaultValue(DBObject $oHostObject = null); + abstract public function GetDefaultValue(?DBObject $oHostObject = null); // // To be overloaded in subclasses diff --git a/sources/Core/AttributeDefinition/AttributeExternalField.php b/sources/Core/AttributeDefinition/AttributeExternalField.php index ae6f2e158..bcdfaff7d 100644 --- a/sources/Core/AttributeDefinition/AttributeExternalField.php +++ b/sources/Core/AttributeDefinition/AttributeExternalField.php @@ -326,7 +326,7 @@ class AttributeExternalField extends AttributeDefinition return $oExtAttDef->GetSQLExpr(); } - public function GetDefaultValue(DBObject $oHostObject = null) + public function GetDefaultValue(?DBObject $oHostObject = null) { $oExtAttDef = $this->GetExtAttDef(); diff --git a/sources/Core/AttributeDefinition/AttributeExternalKey.php b/sources/Core/AttributeDefinition/AttributeExternalKey.php index 10783fffb..77c47bb8d 100644 --- a/sources/Core/AttributeDefinition/AttributeExternalKey.php +++ b/sources/Core/AttributeDefinition/AttributeExternalKey.php @@ -112,7 +112,7 @@ class AttributeExternalKey extends AttributeDBFieldVoid return $this->GetOptional('display_style', 'select'); } - public function GetDefaultValue(DBObject $oHostObject = null) + public function GetDefaultValue(?DBObject $oHostObject = null) { return 0; } diff --git a/sources/Core/AttributeDefinition/AttributeFinalClass.php b/sources/Core/AttributeDefinition/AttributeFinalClass.php index 281db08f3..0a0c37f54 100644 --- a/sources/Core/AttributeDefinition/AttributeFinalClass.php +++ b/sources/Core/AttributeDefinition/AttributeFinalClass.php @@ -50,7 +50,7 @@ class AttributeFinalClass extends AttributeString $this->m_sValue = $sValue; } - public function GetDefaultValue(DBObject $oHostObject = null) + public function GetDefaultValue(?DBObject $oHostObject = null) { return $this->m_sValue; } diff --git a/sources/Core/AttributeDefinition/AttributeFriendlyName.php b/sources/Core/AttributeDefinition/AttributeFriendlyName.php index de813f54a..dd24db428 100644 --- a/sources/Core/AttributeDefinition/AttributeFriendlyName.php +++ b/sources/Core/AttributeDefinition/AttributeFriendlyName.php @@ -133,7 +133,7 @@ class AttributeFriendlyName extends AttributeDefinition $this->m_sValue = $sValue; } - public function GetDefaultValue(DBObject $oHostObject = null) + public function GetDefaultValue(?DBObject $oHostObject = null) { return $this->m_sValue; } diff --git a/sources/Core/AttributeDefinition/AttributeImage.php b/sources/Core/AttributeDefinition/AttributeImage.php index f5e0f97a1..37e2c429b 100644 --- a/sources/Core/AttributeDefinition/AttributeImage.php +++ b/sources/Core/AttributeDefinition/AttributeImage.php @@ -74,7 +74,7 @@ class AttributeImage extends AttributeBlob return $oDoc; } - public function GetDefaultValue(DBObject $oHostObject = null) + public function GetDefaultValue(?DBObject $oHostObject = null) { return new ormDocument('', '', ''); } diff --git a/sources/Core/AttributeDefinition/AttributeLinkedSet.php b/sources/Core/AttributeDefinition/AttributeLinkedSet.php index 840c9eaea..e0b99b5a1 100644 --- a/sources/Core/AttributeDefinition/AttributeLinkedSet.php +++ b/sources/Core/AttributeDefinition/AttributeLinkedSet.php @@ -122,7 +122,7 @@ class AttributeLinkedSet extends AttributeDefinition * @throws CoreException * @throws CoreWarning */ - public function GetDefaultValue(DBObject $oHostObject = null) + public function GetDefaultValue(?DBObject $oHostObject = null) { if ($oHostObject === null) { return null; diff --git a/sources/Core/AttributeDefinition/AttributeObjectKey.php b/sources/Core/AttributeDefinition/AttributeObjectKey.php index 4c7643f01..122c48909 100644 --- a/sources/Core/AttributeDefinition/AttributeObjectKey.php +++ b/sources/Core/AttributeDefinition/AttributeObjectKey.php @@ -52,7 +52,7 @@ class AttributeObjectKey extends AttributeDBFieldVoid return "INT(11)".($bFullSpec ? " DEFAULT 0" : ""); } - public function GetDefaultValue(DBObject $oHostObject = null) + public function GetDefaultValue(?DBObject $oHostObject = null) { return 0; } diff --git a/sources/Core/AttributeDefinition/AttributeObsolescenceFlag.php b/sources/Core/AttributeDefinition/AttributeObsolescenceFlag.php index 8cea14cd6..d976bdd73 100644 --- a/sources/Core/AttributeDefinition/AttributeObsolescenceFlag.php +++ b/sources/Core/AttributeDefinition/AttributeObsolescenceFlag.php @@ -109,7 +109,7 @@ class AttributeObsolescenceFlag extends AttributeBoolean return null; } - public function GetDefaultValue(DBObject $oHostObject = null) + public function GetDefaultValue(?DBObject $oHostObject = null) { return $this->MakeRealValue(false, $oHostObject); } diff --git a/sources/Core/AttributeDefinition/AttributeOneWayPassword.php b/sources/Core/AttributeDefinition/AttributeOneWayPassword.php index 288404b77..38e72d716 100644 --- a/sources/Core/AttributeDefinition/AttributeOneWayPassword.php +++ b/sources/Core/AttributeDefinition/AttributeOneWayPassword.php @@ -64,7 +64,7 @@ class AttributeOneWayPassword extends AttributeDefinition implements iAttributeN return true; } - public function GetDefaultValue(DBObject $oHostObject = null) + public function GetDefaultValue(?DBObject $oHostObject = null) { return ""; } diff --git a/sources/Core/AttributeDefinition/AttributeRedundancySettings.php b/sources/Core/AttributeDefinition/AttributeRedundancySettings.php index 7778d7b2d..49d8420fc 100644 --- a/sources/Core/AttributeDefinition/AttributeRedundancySettings.php +++ b/sources/Core/AttributeDefinition/AttributeRedundancySettings.php @@ -93,7 +93,7 @@ class AttributeRedundancySettings extends AttributeDBField return 20; } - public function GetDefaultValue(DBObject $oHostObject = null) + public function GetDefaultValue(?DBObject $oHostObject = null) { $sRet = 'disabled'; if ($this->Get('enabled')) { diff --git a/sources/Core/AttributeDefinition/AttributeSet.php b/sources/Core/AttributeDefinition/AttributeSet.php index b485c1278..f70e82d73 100644 --- a/sources/Core/AttributeDefinition/AttributeSet.php +++ b/sources/Core/AttributeDefinition/AttributeSet.php @@ -131,7 +131,7 @@ abstract class AttributeSet extends AttributeDBFieldVoid return true; } - public function GetDefaultValue(DBObject $oHostObject = null) + public function GetDefaultValue(?DBObject $oHostObject = null) { return null; } diff --git a/sources/Core/AttributeDefinition/AttributeStopWatch.php b/sources/Core/AttributeDefinition/AttributeStopWatch.php index e22fd1bf2..9d53ee95c 100644 --- a/sources/Core/AttributeDefinition/AttributeStopWatch.php +++ b/sources/Core/AttributeDefinition/AttributeStopWatch.php @@ -72,7 +72,7 @@ class AttributeStopWatch extends AttributeDefinition return true; } - public function GetDefaultValue(DBObject $oHostObject = null) + public function GetDefaultValue(?DBObject $oHostObject = null) { return $this->NewStopWatch(); } @@ -578,7 +578,10 @@ class AttributeStopWatch extends AttributeDefinition switch ($sThresholdCode) { case 'deadline': if ($value) { - if (is_int($value)) { + if (is_numeric($value)) { + if (!is_int($value)) { + $value = intval($value); + } $sDate = date(AttributeDateTime::GetInternalFormat(), $value); $sRet = AttributeDeadline::FormatDeadline($sDate); } else { diff --git a/sources/Core/AttributeDefinition/AttributeSubItem.php b/sources/Core/AttributeDefinition/AttributeSubItem.php index fa0f18d08..2f9e5f63a 100644 --- a/sources/Core/AttributeDefinition/AttributeSubItem.php +++ b/sources/Core/AttributeDefinition/AttributeSubItem.php @@ -117,7 +117,7 @@ class AttributeSubItem extends AttributeDefinition return false; } - public function GetDefaultValue(DBObject $oHostObject = null) + public function GetDefaultValue(?DBObject $oHostObject = null) { return null; } diff --git a/sources/Core/AttributeDefinition/AttributeTagSet.php b/sources/Core/AttributeDefinition/AttributeTagSet.php index b547f17c3..1e4ed3c5f 100644 --- a/sources/Core/AttributeDefinition/AttributeTagSet.php +++ b/sources/Core/AttributeDefinition/AttributeTagSet.php @@ -276,7 +276,7 @@ class AttributeTagSet extends AttributeSet return new ormTagSet(MetaModel::GetAttributeOrigin($this->GetHostClass(), $this->GetCode()), $this->GetCode(), $this->GetMaxItems()); } - public function GetDefaultValue(DBObject $oHostObject = null) + public function GetDefaultValue(?DBObject $oHostObject = null) { $oTagSet = new ormTagSet(MetaModel::GetAttributeOrigin($this->GetHostClass(), $this->GetCode()), $this->GetCode(), $this->GetMaxItems()); $oTagSet->SetValues([]); diff --git a/sources/Forms/Block/AbstractFormBlock.php b/sources/Forms/Block/AbstractFormBlock.php index 67ecfd9a3..68fbbc7e0 100644 --- a/sources/Forms/Block/AbstractFormBlock.php +++ b/sources/Forms/Block/AbstractFormBlock.php @@ -253,7 +253,7 @@ abstract class AbstractFormBlock implements IFormBlock * @throws FormBlockIOException * @throws RegisterException */ - public function AddOutput(string $sName, string $sType, bool $bIsArray = false, AbstractConverter $oConverter = null): AbstractFormBlock + public function AddOutput(string $sName, string $sType, bool $bIsArray = false, ?AbstractConverter $oConverter = null): AbstractFormBlock { $this->oIORegister->AddOutput($sName, $sType, $bIsArray, $oConverter); return $this; @@ -413,7 +413,7 @@ abstract class AbstractFormBlock implements IFormBlock * * @return bool */ - public function IsInputsDataReady(string $sType = null): bool + public function IsInputsDataReady(?string $sType = null): bool { return $this->oIORegister->IsInputsDataReady($sType); } diff --git a/sources/Forms/Block/AbstractTypeFormBlock.php b/sources/Forms/Block/AbstractTypeFormBlock.php index 9e85e3686..31ce6a66c 100644 --- a/sources/Forms/Block/AbstractTypeFormBlock.php +++ b/sources/Forms/Block/AbstractTypeFormBlock.php @@ -53,7 +53,7 @@ abstract class AbstractTypeFormBlock extends AbstractFormBlock * @return bool * @throws FormBlockException */ - public function IsVisible(string $sEventType = null): bool + public function IsVisible(?string $sEventType = null): bool { $oInput = $this->GetInput(self::INPUT_VISIBLE); if (!$oInput->IsBound()) { @@ -68,7 +68,7 @@ abstract class AbstractTypeFormBlock extends AbstractFormBlock /** * @return true */ - public function AllowAdd(string $sEventType = null): bool + public function AllowAdd(?string $sEventType = null): bool { return true; } diff --git a/sources/Forms/Block/FormBlockService.php b/sources/Forms/Block/FormBlockService.php index 0e7430b7b..1c80605ec 100644 --- a/sources/Forms/Block/FormBlockService.php +++ b/sources/Forms/Block/FormBlockService.php @@ -20,12 +20,12 @@ class FormBlockService { private static FormBlockService $oInstance; - protected function __construct(ModelReflection $oModelReflection = null) + protected function __construct(?ModelReflection $oModelReflection = null) { ServiceLocator::GetInstance()->RegisterService('ModelReflection', $oModelReflection ?? new ModelReflectionRuntime()); } - final public static function GetInstance(ModelReflection $oModelReflection = null): FormBlockService + final public static function GetInstance(?ModelReflection $oModelReflection = null): FormBlockService { if (!isset(static::$oInstance)) { static::$oInstance = new FormBlockService($oModelReflection); diff --git a/sources/Forms/FormBuilder/DependencyHandler.php b/sources/Forms/FormBuilder/DependencyHandler.php index 92a16601f..0a3bb6fc4 100644 --- a/sources/Forms/FormBuilder/DependencyHandler.php +++ b/sources/Forms/FormBuilder/DependencyHandler.php @@ -161,7 +161,7 @@ class DependencyHandler * @return void * @throws FormBlockException */ - private function CheckDependencies(FormInterface|FormBuilderInterface $oForm, string $sOutputBlock = null, string $sEventType = null): void + private function CheckDependencies(FormInterface|FormBuilderInterface $oForm, ?string $sOutputBlock = null, ?string $sEventType = null): void { $aImpactedBlocks = $this->aDependentBlocks; if ($sOutputBlock !== null) { diff --git a/sources/Forms/FormBuilder/DependencyMap.php b/sources/Forms/FormBuilder/DependencyMap.php index 836c856f8..4503b593c 100644 --- a/sources/Forms/FormBuilder/DependencyMap.php +++ b/sources/Forms/FormBuilder/DependencyMap.php @@ -171,7 +171,7 @@ class DependencyMap * * @return array|null */ - public function GetBlocksImpactedBy(string $sBlockName, callable $oFilter = null): ?array + public function GetBlocksImpactedBy(string $sBlockName, ?callable $oFilter = null): ?array { if (!array_key_exists($sBlockName, $this->aBlocksImpactedBy)) { return null; diff --git a/sources/Forms/IO/AbstractFormIO.php b/sources/Forms/IO/AbstractFormIO.php index 49d50ae46..4a5ecdc58 100644 --- a/sources/Forms/IO/AbstractFormIO.php +++ b/sources/Forms/IO/AbstractFormIO.php @@ -164,7 +164,7 @@ class AbstractFormIO * * @return mixed */ - public function GetValue(string $sEventType = null): mixed + public function GetValue(?string $sEventType = null): mixed { if ($sEventType === null) { return $this->Value(); @@ -190,7 +190,7 @@ class AbstractFormIO * * @return bool */ - public function HasEventValue(string $sEventType = null): bool + public function HasEventValue(?string $sEventType = null): bool { if ($sEventType === null) { return $this->HasValue(); diff --git a/sources/Forms/IO/FormInput.php b/sources/Forms/IO/FormInput.php index 4bdbe0023..ac05839cf 100644 --- a/sources/Forms/IO/FormInput.php +++ b/sources/Forms/IO/FormInput.php @@ -28,7 +28,7 @@ class FormInput extends AbstractFormIO * * @return bool */ - public function IsEventDataReady(string $sEventType = null): bool + public function IsEventDataReady(?string $sEventType = null): bool { return $this->HasEventValue($sEventType); } diff --git a/sources/Forms/IO/FormOutput.php b/sources/Forms/IO/FormOutput.php index 361ec6929..d8a799772 100644 --- a/sources/Forms/IO/FormOutput.php +++ b/sources/Forms/IO/FormOutput.php @@ -34,7 +34,7 @@ class FormOutput extends AbstractFormIO * * @throws FormBlockIOException */ - public function __construct(string $sName, string $sType, bool $bIsArray = false, AbstractConverter $oConverter = null) + public function __construct(string $sName, string $sType, bool $bIsArray = false, ?AbstractConverter $oConverter = null) { parent::__construct($sName, $sType, $bIsArray); $this->oConverter = $oConverter; diff --git a/sources/Forms/Register/IORegister.php b/sources/Forms/Register/IORegister.php index 4d434ddbc..8caab57cf 100644 --- a/sources/Forms/Register/IORegister.php +++ b/sources/Forms/Register/IORegister.php @@ -135,7 +135,7 @@ class IORegister * @throws FormBlockIOException * @throws RegisterException */ - public function AddOutput(string $sName, string $sType, bool $bIsArray = false, AbstractConverter $oConverter = null): void + public function AddOutput(string $sName, string $sType, bool $bIsArray = false, ?AbstractConverter $oConverter = null): void { $oFormOutput = new FormOutput($sName, $sType, $bIsArray, $oConverter); $oFormOutput->SetOwnerBlock($this->oFormBlock); @@ -349,7 +349,7 @@ class IORegister * * @return bool */ - public function IsInputsDataReady(string $sType = null): bool + public function IsInputsDataReady(?string $sType = null): bool { foreach ($this->aInputs as $oFormInput) { if ($oFormInput->IsBound()) { diff --git a/sources/Forms/Validator/AttributeExist.php b/sources/Forms/Validator/AttributeExist.php index 001f94baf..a1a9a5f66 100644 --- a/sources/Forms/Validator/AttributeExist.php +++ b/sources/Forms/Validator/AttributeExist.php @@ -32,18 +32,14 @@ class AttributeExist extends Constraint /** * Constructor. * - * @param string|null $sOqlPropertyPath + * @param string $sOqlPropertyPath * @param string|null $sFilter * @param array $aOptions * @param array|null $aGroups * @param mixed|null $oPayload */ - public function __construct(string $sOqlPropertyPath = null, string $sFilter = null, array $aOptions = [], ?array $aGroups = null, mixed $oPayload = null) + public function __construct(string $sOqlPropertyPath, ?string $sFilter = null, array $aOptions = [], ?array $aGroups = null, mixed $oPayload = null) { - if ($sOqlPropertyPath === null) { - throw new InvalidArgumentException('The argument "sOqlPropertyPath" must be set.'); - } - // Merge argument into options array $aOptions = array_merge([ 'sOqlPropertyPath' => $sOqlPropertyPath, diff --git a/sources/PropertyType/PropertyTypeDesign.php b/sources/PropertyType/PropertyTypeDesign.php index 1b67b88a3..ac9d533b5 100644 --- a/sources/PropertyType/PropertyTypeDesign.php +++ b/sources/PropertyType/PropertyTypeDesign.php @@ -18,7 +18,7 @@ use utils; */ class PropertyTypeDesign extends DesignDocument { - public function __construct(string $sDesignSourceId = null, string $sType = 'Default') + public function __construct(?string $sDesignSourceId = null, string $sType = 'Default') { parent::__construct(); diff --git a/sources/Service/Notification/NotificationsRepository.php b/sources/Service/Notification/NotificationsRepository.php index c3c8a1f2d..8a989b5da 100644 --- a/sources/Service/Notification/NotificationsRepository.php +++ b/sources/Service/Notification/NotificationsRepository.php @@ -117,6 +117,7 @@ class NotificationsRepository protected function PrepareSearchForNotificationsByContact(int $iContactId, array $aNotificationIds = []): DBSearch { $oSearch = DBObjectSearch::FromOQL("SELECT EventNotificationNewsroom WHERE contact_id = :contact_id"); + $oSearch->AllowAllData(); $aParams = [ "contact_id" => $iContactId, ]; diff --git a/templates/application/links/direct/block-direct-linkset-edit-table/layout.js.twig b/templates/application/links/direct/block-direct-linkset-edit-table/layout.js.twig index 400cce7b7..c7149e147 100644 --- a/templates/application/links/direct/block-direct-linkset-edit-table/layout.js.twig +++ b/templates/application/links/direct/block-direct-linkset-edit-table/layout.js.twig @@ -7,6 +7,6 @@ oWidget{{ oUIBlock.oUILinksDirectWidget.GetInputId() }} = $('#{{ oUIBlock.oUILin input_name: '{{ oUIBlock.sInputName }}', submit_to: '{{ oUIBlock.sSubmitUrl }}', oWizardHelper: {{ oUIBlock.sWizHelper }}, - do_search: '{{ oUIBlock.sJSDoSearch }}' + do_search: {{ oUIBlock.sJSDoSearch }} }); {% endapply %} \ No newline at end of file diff --git a/templates/pages/backoffice/webpage/layout.html.twig b/templates/pages/backoffice/webpage/layout.html.twig index 597fedfa5..74a314f58 100644 --- a/templates/pages/backoffice/webpage/layout.html.twig +++ b/templates/pages/backoffice/webpage/layout.html.twig @@ -49,7 +49,7 @@ {% endfor %} {% endblock %} - + {% if aPage.isPrintable %}
{% endif %} {% block iboPageBodyHtml %}
diff --git a/tests/ci_description.ini b/tests/ci_description.ini index f96ce6755..8ba8dcf9c 100644 --- a/tests/ci_description.ini +++ b/tests/ci_description.ini @@ -1,6 +1,6 @@ [infra] ; STS version : testing greatest PHP version possible -php_version=8.3-apache +php_version=8.4-apache ; N°6629 perf bug on some tests on mariadb for now, so specifying MySQL db_version=latest-mariadb diff --git a/tests/php-unit-tests/integration-tests/login-tests/LoginWebPageTest.php b/tests/php-unit-tests/integration-tests/login-tests/LoginWebPageTest.php index 1afa57ab1..45ad48d6b 100644 --- a/tests/php-unit-tests/integration-tests/login-tests/LoginWebPageTest.php +++ b/tests/php-unit-tests/integration-tests/login-tests/LoginWebPageTest.php @@ -26,14 +26,14 @@ class LoginWebPageTest extends ItopDataTestCase $this->BackupConfiguration(); $sFolderPath = APPROOT.'env-production/extension-with-delegated-authentication-endpoints-list'; if (file_exists($sFolderPath)) { - throw new Exception("Folder $sFolderPath already exists, please remove it before running the test"); + $this->RecurseRmdir($sFolderPath); } mkdir($sFolderPath); $this->RecurseCopy(__DIR__.'/extension-with-delegated-authentication-endpoints-list', $sFolderPath); $sFolderPath = APPROOT.'env-production/extension-without-delegated-authentication-endpoints-list'; if (file_exists($sFolderPath)) { - throw new Exception("Folder $sFolderPath already exists, please remove it before running the test"); + $this->RecurseRmdir($sFolderPath); } mkdir($sFolderPath); $this->RecurseCopy(__DIR__.'/extension-without-delegated-authentication-endpoints-list', $sFolderPath); @@ -81,8 +81,7 @@ class LoginWebPageTest extends ItopDataTestCase public function testUserCanAccessAnyFile() { - // generate random login - $sUserLogin = 'user-'.date('YmdHis'); + $sUserLogin = 'user-'.uniqid(); $this->CreateUser($sUserLogin, self::$aURP_Profiles['Service Desk Agent'], self::PASSWORD); $this->GivenConfigFileAllowedLoginTypes(explode('|', 'form')); @@ -102,7 +101,7 @@ class LoginWebPageTest extends ItopDataTestCase public function testWithoutDelegatedAuthenticationEndpointsListWithForceLoginConf() { @chmod($this->oConfig->GetLoadedFile(), 0770); - $this->oConfig->Set('security.force_login_when_no_delegated_authentication_endpoints_list', true, 'AnythingButEmptyOrUnknownValue'); // 3rd param to write file even if show_in_conf_sample is false + $this->oConfig->Set('security.disable_exec_forced_login_for_all_enpoints', false, 'AnythingButEmptyOrUnknownValue'); // 3rd param to write file even if show_in_conf_sample is false $this->oConfig->WriteToFile(); @chmod($this->oConfig->GetLoadedFile(), 0444); $sPageContent = $this->CallItopUri( diff --git a/tests/php-unit-tests/src/BaseTestCase/ItopDataTestCase.php b/tests/php-unit-tests/src/BaseTestCase/ItopDataTestCase.php index 74d7d6d1f..9845dd929 100644 --- a/tests/php-unit-tests/src/BaseTestCase/ItopDataTestCase.php +++ b/tests/php-unit-tests/src/BaseTestCase/ItopDataTestCase.php @@ -1556,6 +1556,23 @@ abstract class ItopDataTestCase extends ItopTestCase @unlink($this->sConfigTmpBackupFile); } + protected function AddLoginModeAndSaveConfiguration(string $sLoginMode): void + { + $aAllowedLoginTypes = $this->oiTopConfig->GetAllowedLoginTypes(); + if (!in_array($sLoginMode, $aAllowedLoginTypes)) { + $aAllowedLoginTypes[] = $sLoginMode; + $this->oiTopConfig->SetAllowedLoginTypes($aAllowedLoginTypes); + $this->SaveItopConfFile(); + } + } + + protected function SaveItopConfFile(): void + { + @chmod($this->oiTopConfig->GetLoadedFile(), 0770); + $this->oiTopConfig->WriteToFile(); + @chmod($this->oiTopConfig->GetLoadedFile(), 0440); + } + public function AssertPreviousAndCurrentInstallationAreEquivalent() { $aPreviousInstallations = ModuleInstallationRepository::GetInstance()->GetPreviousModuleInstallationsByOffset(1); diff --git a/tests/php-unit-tests/src/BaseTestCase/ItopTestCase.php b/tests/php-unit-tests/src/BaseTestCase/ItopTestCase.php index c69d233dd..9d97f9362 100644 --- a/tests/php-unit-tests/src/BaseTestCase/ItopTestCase.php +++ b/tests/php-unit-tests/src/BaseTestCase/ItopTestCase.php @@ -687,7 +687,7 @@ abstract class ItopTestCase extends KernelTestCase } curl_setopt($ch, CURLOPT_URL, $sUrl); - curl_setopt($ch, CURLOPT_POST, 1);// set post data to true + curl_setopt($ch, CURLOPT_POST, $aCurlOptions[CURLOPT_POST] ?? 1);// set post data to true curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // Force disable of certificate check as most of dev / test env have a self-signed certificate curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); @@ -727,6 +727,16 @@ abstract class ItopTestCase extends KernelTestCase { $sUrl = \MetaModel::GetConfig()->Get('app_root_url')."/$sUri"; + // Add PHP version in header to be able to handle Docker dev environments with automatic PHP version detection (instead of hardcoding the PHP version in the app_root_url) + $sPhpVersion = PHP_VERSION; + $aPhpVersionParts = explode('.', $sPhpVersion); + $sPhpVersionHeaderValue = ($aPhpVersionParts[0] ?? '0').($aPhpVersionParts[1] ?? '0'); + $aCurlOptions = $aCurlOptions ?? []; + $aCurlOptions[CURLOPT_HTTPHEADER] = array_merge( + $aCurlOptions[CURLOPT_HTTPHEADER] ?? [], + ['X-PHP-Version: '.$sPhpVersionHeaderValue] + ); + return $this->CallUrl($sUrl, $aPostFields, $aCurlOptions, $bXDebugEnabled); } diff --git a/tests/php-unit-tests/unitary-tests/application/Helper/SearchHelperTest.php b/tests/php-unit-tests/unitary-tests/application/Helper/SearchHelperTest.php new file mode 100644 index 000000000..664b8da1b --- /dev/null +++ b/tests/php-unit-tests/unitary-tests/application/Helper/SearchHelperTest.php @@ -0,0 +1,88 @@ +Get('high_cardinality_classes'); + self::$bSearchManualSubmit = MetaModel::GetConfig()->Get('search_manual_submit'); + } + + protected function tearDown(): void + { + parent::tearDown(); + MetaModel::GetConfig()->Set('high_cardinality_classes', static::$aHighCardinalityClasses); + MetaModel::GetConfig()->Set('search_manual_submit', static::$bSearchManualSubmit); + } + + public function testDisplaySearchSetWithNoHighCardinalityClassesAddsResultSubBlock(): void + { + MetaModel::GetConfig()->Set('high_cardinality_classes', []); + MetaModel::GetConfig()->Set('search_manual_submit', false); + + $oP = new iTopWebPage('SearchHelperTest'); + $oFilter = DBSearch::FromOQL('SELECT UserRequest'); + SearchHelper::DisplaySearchSet($oP, $oFilter); + $oContentLayout = $oP->GetContentLayout(); + $this->assertTrue($oContentLayout->HasSubBlock('search_1')); + $oSearchBlock = $oContentLayout->getSubBlock('search_1'); + $this->assertTrue($oSearchBlock->HasSubBlock('result_1')); + + if (ob_get_level() > 0) { + ob_end_clean(); + } + } + + public function testDisplaySearchSetWithHighCardinalityClassesDoesNotAddResultSubBlock(): void + { + MetaModel::GetConfig()->Set('high_cardinality_classes', ['UserRequest']); + MetaModel::GetConfig()->Set('search_manual_submit', false); + + $oP = new iTopWebPage('SearchHelperTest'); + $oFilter = DBSearch::FromOQL('SELECT UserRequest'); + SearchHelper::DisplaySearchSet($oP, $oFilter); + $oContentLayout = $oP->GetContentLayout(); + $this->assertTrue($oContentLayout->HasSubBlock('search_1')); + $oSearchBlock = $oContentLayout->getSubBlock('search_1'); + $this->assertFalse($oSearchBlock->HasSubBlock('result_1')); + + if (ob_get_level() > 0) { + ob_end_clean(); + } + } + + public function testDisplaySearchSetWithSearchManualSubmitAndWithoutHighCardinalityClassesDoesNotAddResultSubBlock(): void + { + MetaModel::GetConfig()->Set('high_cardinality_classes', []); + MetaModel::GetConfig()->Set('search_manual_submit', true); + + $oP = new iTopWebPage('SearchHelperTest'); + $oFilter = DBSearch::FromOQL('SELECT UserRequest'); + SearchHelper::DisplaySearchSet($oP, $oFilter); + $oContentLayout = $oP->GetContentLayout(); + $this->assertTrue($oContentLayout->HasSubBlock('search_1')); + $oSearchBlock = $oContentLayout->getSubBlock('search_1'); + $this->assertFalse($oSearchBlock->HasSubBlock('result_1')); + + if (ob_get_level() > 0) { + ob_end_clean(); + } + } +} diff --git a/tests/php-unit-tests/unitary-tests/application/LoginExternalTest.php b/tests/php-unit-tests/unitary-tests/application/LoginExternalTest.php new file mode 100644 index 000000000..93f16d2b3 --- /dev/null +++ b/tests/php-unit-tests/unitary-tests/application/LoginExternalTest.php @@ -0,0 +1,95 @@ + + */ + +namespace Combodo\iTop\Test\UnitTest\Application; + +use Combodo\iTop\Test\UnitTest\ItopDataTestCase; +use utils; + +class LoginExternalTest extends ItopDataTestCase +{ + private $oConfig; + private $sOriginalExtAuthVariable; + + protected function setUp(): void + { + parent::setUp(); + require_once APPROOT.'application/loginexternal.class.inc.php'; + $this->oConfig = utils::GetConfig(); + $this->sOriginalExtAuthVariable = $this->oConfig->Get('ext_auth_variable'); + } + + protected function tearDown(): void + { + $this->oConfig->SetExternalAuthenticationVariable($this->sOriginalExtAuthVariable); + parent::tearDown(); + } + + private function CallGetAuthUser() + { + $oLoginExternal = new \LoginExternal(); + $oMethod = new \ReflectionMethod(\LoginExternal::class, 'GetAuthUser'); + $oMethod->setAccessible(true); + return $oMethod->invoke($oLoginExternal); + } + + public function testGetAuthUserFromServerVariable() + { + $_SERVER['REMOTE_USER'] = 'alice'; + $this->oConfig->SetExternalAuthenticationVariable('$_SERVER[\'REMOTE_USER\']'); + + $this->assertSame('alice', $this->CallGetAuthUser()); + } + + public function testGetAuthUserFromCookie() + { + $_COOKIE['auth_user'] = 'bob'; + $this->oConfig->SetExternalAuthenticationVariable('$_COOKIE[\'auth_user\']'); + + $this->assertSame('bob', $this->CallGetAuthUser()); + } + + public function testGetAuthUserFromRequest() + { + $_REQUEST['auth_user'] = 'carol'; + $this->oConfig->SetExternalAuthenticationVariable('$_REQUEST[\'auth_user\']'); + + $this->assertSame('carol', $this->CallGetAuthUser()); + } + + public function testInvalidExpressionReturnsFalse() + { + $this->oConfig->SetExternalAuthenticationVariable('$_SERVER[\'HTTP_X_CMD\']) ? print(\'x\') : false; //'); + + $this->assertFalse($this->CallGetAuthUser()); + } + + public function testGetAuthUserFromHeaderWithoutAllowlist() + { + if (!function_exists('getallheaders')) { + $this->markTestSkipped('getallheaders() not available'); + } + $_SERVER['HTTP_X_REMOTE_USER'] = 'CN=header-test'; + $this->oConfig->SetExternalAuthenticationVariable('getallheaders()[\'X-Remote-User\']'); + + $this->assertSame('CN=header-test', $this->CallGetAuthUser()); + } +} diff --git a/tests/php-unit-tests/unitary-tests/application/ThemeHandlerTest.php b/tests/php-unit-tests/unitary-tests/application/ThemeHandlerTest.php index 34ea625d9..d19a5d957 100644 --- a/tests/php-unit-tests/unitary-tests/application/ThemeHandlerTest.php +++ b/tests/php-unit-tests/unitary-tests/application/ThemeHandlerTest.php @@ -645,4 +645,54 @@ SCSS; [ '/var/www/html/iTop/css/ui-lightness/images/ui-icons_222222_256x240.png', '/var/www/html/iTop/env-production//branding/themes/light-grey//../../../../css/ui-lightness/images/ui-icons_222222_256x240.png' ], ]; } + + /** + * @param $aThemeParameters + * @param $bSetupCompilationTimestamp + * @param $aExpectedClonedParameters + * @dataProvider CloneParameterParameterOverloadProvider + */ + public function testCloneParameterParameterOverload($aThemeParameters, $bSetupCompilationTimestamp, $aExpectedClonedParameters) + { + $aClonedParameters = ThemeHandler::CloneThemeParameterAndIncludeVersion($aThemeParameters, $bSetupCompilationTimestamp, [APPROOT.'tests/php-unit-tests/unitary-tests/application/theme-handler/imports/']); + $this->assertEquals($aExpectedClonedParameters, $aClonedParameters); + } + + public function CloneParameterParameterOverloadProvider() + { + return [ + "empty parameters" => [ + 'parameters' => [], + 'timestamp' => '1', + 'expected' => [ + '$version' => '1', + ], + ], + "parameters without variables" => [ + 'parameters' => [ + 'variable_imports' => ['file1' => 'variable_imports.scss'], + 'utility_imports' => ['util1' => 'path2'], + 'stylesheets' => ['style1' => 'path3'], + ], + 'timestamp' => '2', + 'expected' => [ + 'var1' => 'value1', + 'var2' => 'value2', + '$version' => '2', + ], + ], + "parameters with variables overload" => [ + 'parameters' => [ + 'variables' => ['var1' => 'value2'], + 'variable_imports' => ['file1' => 'variable_imports.scss'], + ], + 'timestamp' => '3', + 'expected' => [ + 'var1' => 'value2', + 'var2' => 'value2', + '$version' => '3', + ], + ], + ]; + } } diff --git a/tests/php-unit-tests/unitary-tests/application/theme-handler/imports/variable_imports.scss b/tests/php-unit-tests/unitary-tests/application/theme-handler/imports/variable_imports.scss new file mode 100644 index 000000000..9a5db546c --- /dev/null +++ b/tests/php-unit-tests/unitary-tests/application/theme-handler/imports/variable_imports.scss @@ -0,0 +1,2 @@ +$var1: value1; +$var2: value2; \ No newline at end of file diff --git a/tests/php-unit-tests/unitary-tests/application/utilsTest.php b/tests/php-unit-tests/unitary-tests/application/utilsTest.php index 7f27d5f7c..b9b109e0a 100644 --- a/tests/php-unit-tests/unitary-tests/application/utilsTest.php +++ b/tests/php-unit-tests/unitary-tests/application/utilsTest.php @@ -774,6 +774,11 @@ class utilsTest extends ItopTestCase 'good element_identifier' => [utils::ENUM_SANITIZATION_FILTER_ELEMENT_IDENTIFIER, 'AD05nb', 'AD05nb'], 'bad element_identifier' => [utils::ENUM_SANITIZATION_FILTER_ELEMENT_IDENTIFIER, 'AD05nb+', 'AD05nb'], 'array' => [utils::ENUM_SANITIZATION_FILTER_ELEMENT_IDENTIFIER, ['AD05nb+','apply_modify'], ['AD05nb','apply_modify']], + 'good module code' => [utils::ENUM_SANITIZATION_FILTER_MODULE_CODE, 'some-module-code', 'some-module-code'], + 'good module code with capitalized letters' => [utils::ENUM_SANITIZATION_FILTER_MODULE_CODE, 'SOME-module-code', 'SOME-module-code'], + 'good module code with dot' => [utils::ENUM_SANITIZATION_FILTER_MODULE_CODE, 'some-module-code-for-3.2-version', 'some-module-code-for-3.2-version'], + 'bad module code with underscores' => [utils::ENUM_SANITIZATION_FILTER_MODULE_CODE, 'some_module_code', null], + 'bad module code with slashes' => [utils::ENUM_SANITIZATION_FILTER_MODULE_CODE, 'some-module/code', null], 'good url' => [utils::ENUM_SANITIZATION_FILTER_URL, 'https://www.w3schools.com', 'https://www.w3schools.com'], 'bad url' => [utils::ENUM_SANITIZATION_FILTER_URL, 'https//www.w3schools.com', null], 'url with injection' => [utils::ENUM_SANITIZATION_FILTER_URL, 'https://demo.combodo.com/simple/pages/UI.php?operation=full_text&text=', 'https://demo.combodo.com/simple/pages/UI.php?operation=full_text&text='], diff --git a/tests/php-unit-tests/unitary-tests/core/AttributeSubItemTest.php b/tests/php-unit-tests/unitary-tests/core/AttributeSubItemTest.php new file mode 100644 index 000000000..13c420ffa --- /dev/null +++ b/tests/php-unit-tests/unitary-tests/core/AttributeSubItemTest.php @@ -0,0 +1,44 @@ + "Test DisplayStopwatch", + ]; + $oUserRequest = $this->CreateUserRequest(456, $aUserRequestCustomParams); + + $iStartDate = time() - 200; + $oStopwatch = $oUserRequest->Get('ttr'); + $oStopwatch->DefineThreshold(100, $iStartDate); + $oUserRequest->Set('ttr', $oStopwatch); + + $sValue = $oUserRequest->Get('ttr_escalation_deadline'); + $oAttDef = MetaModel::GetAttributeDef(get_class($oUserRequest), 'ttr_escalation_deadline'); + + self::assertEquals('Missed by 3 min', $oAttDef->GetForTemplate($sValue, 'html', $oUserRequest)); + $oDateTime = new DateTime(); + $oDateTime->setTimestamp($iStartDate); + $sDate = $oDateTime->format(AttributeDateTime::GetFormat()); + self::assertEquals($sDate, $oAttDef->GetForTemplate($sValue, 'label', $oUserRequest), 'label() should render the date in the format specified in the configuration file, in parameter "date_and_time_format"'); + self::assertEquals('Missed by 3 min', $oAttDef->GetForTemplate($sValue, 'text', $oUserRequest), 'text() should render the deadline as specified in the configuration file, in parameter "deadline_format", and depending on the user language'); + self::assertEquals($iStartDate, $oAttDef->GetForTemplate($sValue, '', $oUserRequest)); + } +} diff --git a/tests/php-unit-tests/unitary-tests/core/DBObject/DBObjectTest.php b/tests/php-unit-tests/unitary-tests/core/DBObject/DBObjectTest.php index 09117e074..2f18e7ff2 100644 --- a/tests/php-unit-tests/unitary-tests/core/DBObject/DBObjectTest.php +++ b/tests/php-unit-tests/unitary-tests/core/DBObject/DBObjectTest.php @@ -1100,7 +1100,6 @@ class DBObjectTest extends ItopDataTestCase 'fixed', [ 'ev_reopen', - 'ev_autoresolve', 'ev_close', ], ], @@ -1122,7 +1121,6 @@ class DBObjectTest extends ItopDataTestCase 'resolved', 'relative', [ - 'ev_autoresolve', 'ev_close', 'ev_reopen', ], diff --git a/tests/php-unit-tests/unitary-tests/core/DBSearchFilterJoinTest.php b/tests/php-unit-tests/unitary-tests/core/DBSearchFilterJoinTest.php new file mode 100644 index 000000000..9ab1d5e31 --- /dev/null +++ b/tests/php-unit-tests/unitary-tests/core/DBSearchFilterJoinTest.php @@ -0,0 +1,193 @@ +RequireOnceItopFile('application/startup.inc.php'); + $this->aData = $this->CreateDBSearchFilterTestData(); + DBSearch::EnableQueryCache(false, false); + $this->LoginRestrictedUser($this->aData['allowed_org_id'], self::RESTRICTED_PROFILE); + + } + + protected function tearDown(): void + { + parent::tearDown(); + } + + /** + * @dataProvider JoinedAndNestedOqlProvider + */ + public function testDBSearchFilterAppliedToJoinsWhenEnabled(string $sOql, int $iExpectedCount): void + { + $this->EnableJoinFilterConfig(true); + + $oSearch = DBObjectSearch::FromOQL($sOql, ['denied_org' => $this->aData['denied_org_name'], 'allowed_org' => $this->aData['allowed_org_name']]); + $oSet = new \DBObjectSet($oSearch); + CMDBSource::TestQuery($oSearch->MakeSelectQuery()); + $this->assertEquals($iExpectedCount, $oSet->Count()); + } + + /** + * @dataProvider JoinedAndNestedOqlProvider + */ + public function testDBSearchFilterAppliedToJoinsWhenDisabled(string $sOql, int $iExpectedCount, int $iExpectedDisabledCount): void + { + $this->EnableJoinFilterConfig(false); + + $oSearch = DBObjectSearch::FromOQL($sOql, ['denied_org' => $this->aData['denied_org_name'], 'allowed_org' => $this->aData['allowed_org_name']]); + $oSet = new \DBObjectSet($oSearch); + CMDBSource::TestQuery($oSearch->MakeSelectQuery()); + $this->assertEquals($iExpectedDisabledCount, $oSet->Count()); + } + + /** + * @dataProvider JoinedAndNestedOqlProvider + */ + public function testAllowAllDataBypassesDBSearchFilterWhenEnabled(string $sOql, int $iExpectedCount, int $iExpectedDisabledCount): void + { + $this->EnableJoinFilterConfig(true); + + $oSearch = DBObjectSearch::FromOQL($sOql, ['denied_org' => $this->aData['denied_org_name'], 'allowed_org' => $this->aData['allowed_org_name']]); + $oSearch->AllowAllData(); + $oSet = new \DBObjectSet($oSearch); + CMDBSource::TestQuery($oSearch->MakeSelectQuery()); + $this->assertEquals($iExpectedDisabledCount, $oSet->Count()); + } + + /** + * @dataProvider JoinedAndNestedOqlProvider + */ + public function testAllowAllDataBypassesDBSearchFilterWhenDisabled(string $sOql, int $iExpectedCount, int $iExpectedDisabledCount): void + { + $this->EnableJoinFilterConfig(false); + + $oSearch = DBObjectSearch::FromOQL($sOql, ['denied_org' => $this->aData['denied_org_name'], 'allowed_org' => $this->aData['allowed_org_name']]); + $oSearch->AllowAllData(); + $oSet = new \DBObjectSet($oSearch); + CMDBSource::TestQuery($oSearch->MakeSelectQuery()); + $this->assertEquals($iExpectedDisabledCount, $oSet->Count()); + } + + public function JoinedAndNestedOqlProvider(): array + { + return [ + 'join-filter-on-org' => [ + 'oql' => "SELECT OSF FROM OSFamily AS OSF JOIN VirtualMachine AS VM ON VM.osfamily_id = OSF.id JOIN Organization AS O ON VM.org_id = O.id WHERE O.name = :denied_org", + 'expected_filtered_count' => 0, + 'expected_unfiltered_count' => 1, + ], + 'nested-in-select' => [ + 'oql' => "SELECT OSF FROM OSFamily AS OSF WHERE OSF.id IN (SELECT OSF1 FROM OSFamily AS OSF1 JOIN VirtualMachine AS VM ON VM.osfamily_id = OSF1.id JOIN Organization AS O ON VM.org_id = O.id WHERE O.name = :denied_org)", + 'expected_filtered_count' => 0, + 'expected_unfiltered_count' => 1, + + ], + 'userrequest-join-person-org' => [ + 'oql' => "SELECT OSF FROM OSFamily AS OSF JOIN VirtualMachine AS VM ON VM.osfamily_id = OSF.id JOIN lnkFunctionalCIToTicket AS L ON L.functionalci_id = VM.id JOIN UserRequest AS UR ON L.ticket_id = UR.id JOIN Person AS P ON UR.caller_id = P.id JOIN Organization AS O ON P.org_id = O.id WHERE O.name = :denied_org", + 'expected_filtered_count' => 0, + 'expected_unfiltered_count' => 1, + ], + 'union-join-filter-on-org' => [ + 'oql' => "SELECT OSF FROM OSFamily AS OSF JOIN VirtualMachine AS VM ON VM.osfamily_id = OSF.id JOIN Organization AS O ON VM.org_id = O.id WHERE O.name = :denied_org UNION SELECT OSF2 FROM OSFamily AS OSF2 JOIN VirtualMachine AS VM2 ON VM2.osfamily_id = OSF2.id JOIN Organization AS O2 ON VM2.org_id = O2.id WHERE O2.name = :allowed_org", + 'expected_filtered_count' => 1, + 'expected_unfiltered_count' => 2, + ], + ]; + } + + private function EnableJoinFilterConfig(bool $bEnabled): void + { + $oConfig = MetaModel::GetConfig(); + $oConfig->Set('security.disable_joined_classes_filter', !$bEnabled); + } + + private function CreateDBSearchFilterTestData(): array + { + $sSuffix = 'DBSearchFilterJoinTest'; + + $sAllowedOrgName = 'DBSearchFilterAllowedOrg-'.$sSuffix; + $iAllowedOrgId = $this->GivenObjectInDB('Organization', [ + 'name' => $sAllowedOrgName, + ]); + + $this->debug("Org allowed id: $iAllowedOrgId"); + $sDeniedOrgName = 'DBSearchFilterDeniedOrg-'.$sSuffix; + $iDeniedOrgId = $this->GivenObjectInDB('Organization', [ + 'name' => $sDeniedOrgName, + ]); + $this->debug("Org denied id: $iDeniedOrgId"); + + $iDeniedOsFamilyId = $this->GivenObjectInDB('OSFamily', [ + 'name' => 'DBSearchFilterOsFamilyDenied-'.$sSuffix, + ]); + + $iAllowedOsFamilyId = $this->GivenObjectInDB('OSFamily', [ + 'name' => 'DBSearchFilterOsFamilyAllowed-'.$sSuffix, + ]); + + $iDeniedVMId = $this->GivenObjectInDB('VirtualMachine', [ + 'name' => 'DBSearchFilterVmDenied-'.$sSuffix, + 'org_id' => $iDeniedOrgId, + 'osfamily_id' => $iDeniedOsFamilyId, + 'virtualhost_id' => 1, + ]); + + $iVirtualHostId = $this->GivenObjectInDB('Hypervisor', [ + 'name' => 'DBSearchFilterVHost-'.$sSuffix, + 'org_id' => $iAllowedOrgId, + ]); + + $this->GivenObjectInDB('VirtualMachine', [ + 'name' => 'DBSearchFilterVmAllowed-'.$sSuffix, + 'org_id' => $iAllowedOrgId, + 'osfamily_id' => $iAllowedOsFamilyId, + 'virtualhost_id' => $iVirtualHostId, + ]); + + $oDeniedPerson = $this->CreatePerson('Denied-'.$sSuffix, $iDeniedOrgId); + + $oUserRequest = $this->CreateUserRequest('Denied'.$sSuffix, [ + 'caller_id' => $oDeniedPerson->GetKey(), + 'org_id' => $iDeniedOrgId, + ]); + + // Add Virtual Machine to UserRequest lnk + $oLinkSet = new ormLinkSet(UserRequest::class, 'functionalcis_list', DBObjectSet::FromScratch(lnkFunctionalCIToTicket::class)); + + $oLink = MetaModel::NewObject(lnkFunctionalCIToTicket::class, ['functionalci_id' => $iDeniedVMId]); + $oLinkSet->AddItem($oLink); + + $oUserRequest->Set('functionalcis_list', $oLinkSet); + $oUserRequest->DBUpdate(); + + return [ + 'allowed_org_id' => $iAllowedOrgId, + 'allowed_org_name' => $sAllowedOrgName, + 'denied_org_name' => $sDeniedOrgName, + ]; + } + + private function LoginRestrictedUser(int $iAllowedOrgId, string $sProfileName): void + { + $sLogin = $this->GivenUserRestrictedToAnOrganizationInDB($iAllowedOrgId, self::$aURP_Profiles[$sProfileName]); + UserRights::Login($sLogin); + } +} diff --git a/tests/php-unit-tests/unitary-tests/core/UserRightsTest.php b/tests/php-unit-tests/unitary-tests/core/UserRightsTest.php index 8bdabd4f4..07e999a84 100644 --- a/tests/php-unit-tests/unitary-tests/core/UserRightsTest.php +++ b/tests/php-unit-tests/unitary-tests/core/UserRightsTest.php @@ -230,14 +230,14 @@ class UserRightsTest extends ItopDataTestCase 'User Portal UserRequest read' => [2, ['class' => 'UserRequest', 'action' => 1, 'res' => true]], 'User Portal URP_UserProfile read' => [2, ['class' => 'URP_UserProfile', 'action' => 1, 'res' => false]], 'User Portal UserLocal read' => [2, ['class' => 'UserLocal', 'action' => 1, 'res' => false]], - 'User Portal ModuleInstallation read' => [2, ['class' => 'ModuleInstallation', 'action' => 1, 'res' => true]], + 'User Portal ModuleInstallation read' => [2, ['class' => 'ModuleInstallation', 'action' => 1, 'res' => false]], /* Configuration manager (1 = UR_ACTION_READ) */ 'Configuration manager FunctionalCI read' => [3, ['class' => 'FunctionalCI', 'action' => 1, 'res' => true]], 'Configuration manager UserRequest read' => [3, ['class' => 'UserRequest', 'action' => 1, 'res' => true]], 'Configuration manager URP_UserProfile read' => [3, ['class' => 'URP_UserProfile', 'action' => 1, 'res' => false]], 'Configuration manager UserLocal read' => [3, ['class' => 'UserLocal', 'action' => 1, 'res' => false]], - 'Configuration manager ModuleInstallation read' => [3, ['class' => 'ModuleInstallation', 'action' => 1, 'res' => true]], + 'Configuration manager ModuleInstallation read' => [3, ['class' => 'ModuleInstallation', 'action' => 1, 'res' => false]], ]; } @@ -283,14 +283,14 @@ class UserRightsTest extends ItopDataTestCase 'User Portal UserRequest' => [2, ['class' => 'UserRequest', 'action' => 2, 'res' => true]], 'User Portal URP_UserProfile' => [2, ['class' => 'URP_UserProfile', 'action' => 2, 'res' => false]], 'User Portal UserLocal' => [2, ['class' => 'UserLocal', 'action' => 2, 'res' => false]], - 'User Portal ModuleInstallation' => [2, ['class' => 'ModuleInstallation', 'action' => 2, 'res' => true]], + 'User Portal ModuleInstallation' => [2, ['class' => 'ModuleInstallation', 'action' => 2, 'res' => false]], /* Configuration manager (2 = UR_ACTION_MODIFY) */ 'Configuration manager FunctionalCI' => [3, ['class' => 'FunctionalCI', 'action' => 2, 'res' => true]], 'Configuration manager UserRequest' => [3, ['class' => 'UserRequest', 'action' => 2, 'res' => false]], 'Configuration manager URP_UserProfile' => [3, ['class' => 'URP_UserProfile', 'action' => 2, 'res' => false]], 'Configuration manager UserLocal' => [3, ['class' => 'UserLocal', 'action' => 2, 'res' => false]], - 'Configuration manager ModuleInstallation' => [3, ['class' => 'ModuleInstallation', 'action' => 2, 'res' => true]], + 'Configuration manager ModuleInstallation' => [3, ['class' => 'ModuleInstallation', 'action' => 2, 'res' => false]], ]; } diff --git a/tests/php-unit-tests/unitary-tests/core/ormDocumentTest.php b/tests/php-unit-tests/unitary-tests/core/ormDocumentTest.php index be52ac079..6e3277862 100644 --- a/tests/php-unit-tests/unitary-tests/core/ormDocumentTest.php +++ b/tests/php-unit-tests/unitary-tests/core/ormDocumentTest.php @@ -7,14 +7,36 @@ namespace Combodo\iTop\Test\UnitTest\Core; +use Combodo\iTop\Application\WebPage\CaptureWebPage; use Combodo\iTop\Test\UnitTest\ItopDataTestCase; use ormDocument; +use UserRights; /** * Tests of the ormDocument class */ class ormDocumentTest extends ItopDataTestCase { + private const RESTRICTED_PROFILE = 'Configuration Manager'; + private int $iUserOrg; + private int $iOrgDifferentFromUser; + + protected function setUp(): void + { + parent::setUp(); + + $this->iUserOrg = $this->GivenObjectInDB('Organization', [ + 'name' => 'UserOrg', + ]); + + $this->iOrgDifferentFromUser = $this->GivenObjectInDB('Organization', [ + 'name' => 'OrgDifferentFromUser', + ]); + + $this->LoginRestrictedUser($this->iUserOrg, self::RESTRICTED_PROFILE); + $this->ResetMetaModelQueyCacheGetObject(); + } + /** * @inheritDoc */ @@ -248,4 +270,107 @@ class ormDocumentTest extends ItopDataTestCase $this->assertGreaterThanOrEqual($iMaxHeight, $aActualDimensions['height'], 'The new height should not be 0'); } + /** + * Test that DownloadDocument enforces rights for documents + * + * @dataProvider DownloadDocumentRightsProvider + */ + public function testDownloadDocumentDifferentOrg(string $sTargetClass, string $sAttCode, string $sData, string $sFileName, ?string $sHostClass) + { + $iDeniedDocumentId = $this->CreateDownloadTargetInOrg($sTargetClass, $sAttCode, $this->iOrgDifferentFromUser, $sData, $sFileName, $sHostClass); + + $oPageDenied = new CaptureWebPage(); + ormDocument::DownloadDocument($oPageDenied, $sTargetClass, $iDeniedDocumentId, $sAttCode); + $sDeniedHtml = (string) $oPageDenied->GetHtml(); + $this->assertStringContainsString( + 'the object does not exist or you are not allowed to view it', + $sDeniedHtml, + 'Expected error message when rights are missing.' + ); + $this->assertStringNotContainsString($sData, $sDeniedHtml, 'Unexpected file data present when rights are missing.'); + } + + /** + * Test that DownloadDocument allows to retrieve document with the same org (or host object org) + * + * @dataProvider DownloadDocumentRightsProvider + */ + public function testDownloadDocumentSameOrg(string $sTargetClass, string $sAttCode, string $sData, string $sFileName, ?string $sHostClass) + { + $iAllowedDocumentId = $this->CreateDownloadTargetInOrg($sTargetClass, $sAttCode, $this->iUserOrg, $sData, $sFileName, $sHostClass); + + $oPageAllowed = new CaptureWebPage(); + ormDocument::DownloadDocument($oPageAllowed, $sTargetClass, $iAllowedDocumentId, $sAttCode); + $sAllowedHtml = (string) $oPageAllowed->GetHtml(); + $this->assertStringContainsString($sData, $sAllowedHtml, 'Expected file data present when rights are sufficient.'); + $this->assertStringNotContainsString('the object does not exist or you are not allowed to view it', $sAllowedHtml, 'Unexpected error message when rights are sufficient.'); + } + + public function DownloadDocumentRightsProvider(): array + { + return [ + 'DocumentFile' => [ + 'class' => 'DocumentFile', + 'data_attribute_id' => 'file', + 'data' => 'document_data', + 'file_name' => 'document.txt', + 'host_class' => null], + 'Attachment' => [ + 'class' => 'Attachment', + 'data_attribute_id' => 'contents', + 'data' => 'attachment_data', + 'file_name' => 'attachment.txt', + 'host_class' => 'UserRequest'], + ]; + } + + /** + * Helper to avoid duplicating object creation in tests + * Created objects and host objects depending on the Document class + * @param string $sTargetClass + * @param string $sAttCode + * @param int $iOrgId + * @param string $sData + * @param string $sFileName + * @param string|null $sHostClass + * @return int + * @throws \Exception + */ + private function CreateDownloadTargetInOrg(string $sTargetClass, string $sAttCode, int $iOrgId, string $sData, string $sFileName, ?string $sHostClass): int + { + + if ($sTargetClass === 'DocumentFile') { + return $this->GivenObjectInDB($sTargetClass, [ + 'name' => 'UnitTestDocFile_'.uniqid(), + 'org_id' => $iOrgId, + $sAttCode => new ormDocument($sData, 'text/plain', $sFileName), + ]); + } + + if ($sTargetClass === 'Attachment') { + $iHostId = $this->GivenObjectInDB($sHostClass, [ + 'title' => 'UnitTestUserRequest_'.uniqid(), + 'org_id' => $iOrgId, + 'description' => 'A user request for testing attachment download rights', + ]); + + return $this->GivenObjectInDB('Attachment', [ + 'item_class' => $sHostClass, + 'item_id' => $iHostId, + 'item_org_id' => $iOrgId, + $sAttCode => new ormDocument($sData, 'text/plain', $sFileName), + ]); + } + + throw new \Exception("Unsupported target class: $sTargetClass"); + } + + private function LoginRestrictedUser(int $iAllowedOrgId, string $sProfileName): void + { + if (UserRights::IsLoggedIn()) { + UserRights::Logoff(); + } + $sLogin = $this->GivenUserRestrictedToAnOrganizationInDB($iAllowedOrgId, self::$aURP_Profiles[$sProfileName]); + UserRights::Login($sLogin); + } } diff --git a/tests/php-unit-tests/unitary-tests/pages/AjaxRenderTest.php b/tests/php-unit-tests/unitary-tests/pages/AjaxRenderTest.php new file mode 100644 index 000000000..3177261d3 --- /dev/null +++ b/tests/php-unit-tests/unitary-tests/pages/AjaxRenderTest.php @@ -0,0 +1,180 @@ +BackupConfiguration(); + $this->oiTopConfig->Set('log_level_min', 'Error'); + $this->oiTopConfig->Set('login_debug', true); + + $this->CreateTestOrganization(); + + // Add URL authentication mode + $this->AddLoginModeAndSaveConfiguration('url'); + + // Create ticket + $description = date('dmY H:i:s'); + $oTicket = $this->createObject('UserRequest', [ + 'org_id' => $this->getTestOrgId(), + "title" => "Houston, got a problem", + "description" => $description, + ]); + self::$iTicketId = $oTicket->GetKey(); + } + + // Test that if a user with the right permissions tries to acquire the lock on a ticket, it succeeds and returns the correct success message + public function testAcquireLockSuccess(): void + { + $sOutput = $this->CreateSupportAgentUserAndAcquireLock(); + $this->assertStringContainsString('"success":true', $sOutput); + } + + // Test that if a user tries to acquire the lock on an object that does not exist, it fails and logs the correct error message + public function testAcquireLockFailsIfObjectDoesNotExist(): void + { + // Create a user with Support Agent Profile + $this->CreateUserWithProfile(self::$aURP_Profiles['Support Agent']); + + // Try to acquire the lock on a non-existent object + $sOutput = $this->AcquireLockAsUser(self::$sLogin, 99999999); + + // The output should indicate a fatal error because we hide the existence of the object when it does not exist or is not accessible by the user + $this->assertEquals(Dict::S('UI:PageTitle:FatalError'), $sOutput); + + // Check that the error log contains the expected error message about the object not existing + $sLastErrorLogLines = $this->GetErrorLogLastLines(APPROOT.'log/error.log', 10); + $this->assertStringContainsString(Dict::S('UI:ObjectDoesNotExist'), $sLastErrorLogLines); + } + + // Test that if a user tries to acquire the lock on an object for which they don't have modification rights, it fails and logs the correct error message + public function testAcquireLockFailsIfUserHasNoModifyRights(): void + { + // Create a user with a profile without modification rights on UserRequest + $this->CreateUserWithProfile(self::$aURP_Profiles['Configuration Manager']); + + // Try to acquire the lock on the ticket + $sOutput = $this->AcquireLockAsUser(self::$sLogin, self::$iTicketId); + + // The output should indicate a fatal error because we hide the existence of the object when it does not exist or is not accessible by the user + $this->assertEquals(Dict::S('UI:PageTitle:FatalError'), $sOutput); + + // The user should not have the rights to acquire the lock, and an error should be logged + $sLastErrorLogLines = $this->GetErrorLogLastLines(APPROOT.'log/error.log', 10); + $this->assertStringContainsString(Dict::S('UI:ObjectDoesNotExist'), $sLastErrorLogLines); + } + + // Test that if a user tries to acquire the lock on an object that belongs to another organization, it fails and logs the correct error message + public function testAcquireLockFailsIfObjectInOtherOrg(): void + { + // Create an organization and a ticket in this organization + $iOtherOrgId = $this->createObject('Organization', ['name' => 'OtherOrg'])->GetKey(); + $oTicket = $this->createObject('UserRequest', [ + 'org_id' => $iOtherOrgId, + 'title' => 'Ticket autre org', + 'description' => 'Test', + ]); + + // Create a user who only has access to the main test organization + $oUser = $this->CreateUserWithProfile(self::$aURP_Profiles['Support Agent']); + $oAllowedOrgList = $oUser->Get('allowed_org_list'); + $oUserOrg = \MetaModel::NewObject('URP_UserOrg', ['allowed_org_id' => $this->getTestOrgId()]); + $oAllowedOrgList->AddItem($oUserOrg); + $oUser->Set('allowed_org_list', $oAllowedOrgList); + $oUser->DBWrite(); + + // Try to acquire the lock on the ticket of the other organization + $sOutput = $this->AcquireLockAsUser(self::$sLogin, $oTicket->GetKey()); + + // The output should indicate a fatal error because we hide the existence of the object when it does not exist or is not accessible by the user + $this->assertEquals(Dict::S('UI:PageTitle:FatalError'), $sOutput); + + // The user should not have access to the ticket of the other organization, so an error should be logged + $sLastErrorLogLines = $this->GetErrorLogLastLines(APPROOT.'log/error.log', 10); + $this->assertStringContainsString(Dict::S('UI:ObjectDoesNotExist'), $sLastErrorLogLines); + } + + // Test that if a user has already acquired the lock on an object, another user cannot acquire it and gets the correct error message + public function testAcquireLockFailsIfAlreadyLockedByAnotherUser(): void + { + // First, acquire the lock with a user (User A) + $this->CreateSupportAgentUserAndAcquireLock(); + $sUserALogin = self::$sLogin; + + // Create a second user (User B) who tries to acquire the lock + $sOutput = $this->CreateSupportAgentUserAndAcquireLock(); + + // The second user should not be able to acquire the lock, and the output should contain the correct error message indicating that the object is already locked by User A + $this->assertStringContainsString('"success":false', $sOutput); + $this->assertStringContainsString('"message":"'.Dict::Format('UI:CurrentObjectIsSoftLockedBy_User', $sUserALogin).'"', $sOutput); + } + + // Helper method to create a user with Support Agent profile and acquire the lock on the ticket + private function CreateSupportAgentUserAndAcquireLock(): string + { + // Create a user with Support Agent Profile + $this->CreateUserWithProfile(self::$aURP_Profiles['Support Agent']); + + return $this->AcquireLockAsUser(self::$sLogin, self::$iTicketId); + } + + // Helper method to create a user with a specific profile + private function CreateUserWithProfile(int $iProfileId): UserLocal + { + self::$sLogin = uniqid('AjaxRenderTest'); + return $this->CreateContactlessUser(self::$sLogin, $iProfileId, self::AUTHENTICATION_PASSWORD); + } + + // Helper method to acquire the lock on a ticket as a specific user + private function AcquireLockAsUser(string $sLogin, int $iTicketId): string + { + $aGetFields = [ + 'operation' => 'acquire_lock', + 'auth_user' => $sLogin, + 'auth_pwd' => self::AUTHENTICATION_PASSWORD, + 'obj_class' => UserRequest::class, + 'obj_key' => $iTicketId, + ]; + + return $this->CallItopUri( + "pages/ajax.render.php?".http_build_query($aGetFields), + [], + [ + CURLOPT_HTTPHEADER => ['X-Combodo-Ajax:1'], + CURLOPT_POST => 0, + ] + ); + } + + // Returns the last lines of the error log containing only errors (Error level) + private function GetErrorLogLastLines(string $sErrorLogPath, int $iLineNumbers = 1): string + { + if (!file_exists($sErrorLogPath)) { + return ''; + } + + $aLines = file($sErrorLogPath, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); + + // Keep only lines containing '| Error |' + $aErrorLines = array_filter($aLines, function ($line) { + return preg_match('/\|\s*Error\s*\|/', $line); + }); + + // Return the last requested lines + return implode("\n", array_slice($aErrorLines, -$iLineNumbers)); + } +}