diff --git a/addons/userrights/userrightsprofile.class.inc.php b/addons/userrights/userrightsprofile.class.inc.php index 9463da203..366630510 100644 --- a/addons/userrights/userrightsprofile.class.inc.php +++ b/addons/userrights/userrightsprofile.class.inc.php @@ -94,15 +94,15 @@ class URP_Profiles extends UserRightsBaseClassGUI $bGrant = $oUserRights->GetProfileActionGrant($this->GetKey(), $sClass, $sAction); if (is_null($bGrant)) { - return ''.Dict::S('UI:UserManagement:ActionAllowed:No').''; + return ''.Dict::S('UI:UserManagement:ActionAllowed:No').''; } elseif ($bGrant) { - return ''.Dict::S('UI:UserManagement:ActionAllowed:Yes').''; + return ''.Dict::S('UI:UserManagement:ActionAllowed:Yes').''; } else { - return ''.Dict::S('UI:UserManagement:ActionAllowed:No').''; + return ''.Dict::S('UI:UserManagement:ActionAllowed:No').''; } } diff --git a/core/userrights.class.inc.php b/core/userrights.class.inc.php index 3dae6815e..735c440a1 100644 --- a/core/userrights.class.inc.php +++ b/core/userrights.class.inc.php @@ -542,9 +542,9 @@ abstract class User extends cmdbAbstractObject function GetGrantAsHtml($sClass, $iAction) { if (UserRights::IsActionAllowed($sClass, $iAction, null, $this)) { - return ''.Dict::S('UI:UserManagement:ActionAllowed:Yes').''; + return ''.Dict::S('UI:UserManagement:ActionAllowed:Yes').''; } else { - return ''.Dict::S('UI:UserManagement:ActionAllowed:No').''; + return ''.Dict::S('UI:UserManagement:ActionAllowed:No').''; } } diff --git a/css/backoffice/application/_all.scss b/css/backoffice/application/_all.scss index 8ce2a44b6..398ed8615 100644 --- a/css/backoffice/application/_all.scss +++ b/css/backoffice/application/_all.scss @@ -7,4 +7,5 @@ @import "display-block/all"; @import "linked-set/all"; @import "tabular-fields/all"; -@import "welcome-popup/all"; \ No newline at end of file +@import "welcome-popup/all"; +@import "user-rights"; \ No newline at end of file diff --git a/css/backoffice/application/_user-rights.scss b/css/backoffice/application/_user-rights.scss new file mode 100644 index 000000000..3e2f311d2 --- /dev/null +++ b/css/backoffice/application/_user-rights.scss @@ -0,0 +1,33 @@ +/* + * @copyright Copyright (C) 2010-2025 Combodo SAS + * @license http://opensource.org/licenses/AGPL-3.0 + */ + +$ibo-user-rights--padding-x: $ibo-spacing-400 !default; +$ibo-user-rights--padding-y: $ibo-spacing-200 !default; +$ibo-user-rights--border-radius: $ibo-border-radius-400 !default; + +$ibo-user-rights--is-success--background-color: $ibo-color-success-100 !default; +$ibo-user-rights--is-success--color: $ibo-color-success-950 !default; +$ibo-user-rights--is-success--border-color: $ibo-color-success-500 !default; +$ibo-user-rights--is-success--border: 1px solid $ibo-user-rights--is-success--border-color !default; + +$ibo-user-rights--is-failure--background-color: $ibo-color-danger-100 !default; +$ibo-user-rights--is-failure--color: $ibo-color-danger-950 !default; +$ibo-user-rights--is-failure--border-color: $ibo-color-danger-500 !default; +$ibo-user-rights--is-failure--border: 1px solid $ibo-user-rights--is-failure--border-color !default; + +.ibo-user-rights { + padding: $ibo-user-rights--padding-y $ibo-user-rights--padding-x; + border-radius: $ibo-user-rights--border-radius; + &.ibo-is-success { + background-color: $ibo-user-rights--is-success--background-color; + color: $ibo-user-rights--is-success--color; + border: $ibo-user-rights--is-success--border; + } + &.ibo-is-failure { + background-color: $ibo-user-rights--is-failure--background-color; + color: $ibo-user-rights--is-failure--color; + border: $ibo-user-rights--is-failure--border; + } +} \ No newline at end of file diff --git a/css/backoffice/vendors/_selectize.scss b/css/backoffice/vendors/_selectize.scss index e66053f4c..67c5b834a 100644 --- a/css/backoffice/vendors/_selectize.scss +++ b/css/backoffice/vendors/_selectize.scss @@ -34,6 +34,10 @@ $ibo-vendors-selectize--dropdown--color: $ibo-vendors-selectize-input--color!de $ibo-vendors-selectize--header--padding-x: 8px !default; $ibo-vendors-selectize--header--padding-y: 5px !default; +.selectize-dropdown, .selectize-input, .selectize-input input { + color: $ibo-vendors-selectize-input--color; +} + .selectize-control.single .selectize-input { box-shadow: unset; background-color: $ibo-vendors-selectize-input--background-color; @@ -66,6 +70,7 @@ $ibo-vendors-selectize--header--padding-y: 5px !default; display: inline-flex; } + .selectize-control.single .selectize-input, .selectize-dropdown.single { border-color: $ibo-vendors-selectize--input--border-color; } diff --git a/data/.compilation-symlinks b/data/.compilation-symlinks deleted file mode 100644 index e69de29bb..000000000 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 c5b66e61a..a4379d5ff 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 @@ -1,73 +1,73 @@ -$ibo-color-grey-950: darken($nord0, 15%); -$ibo-color-grey-900: darken($nord0, 10%); -$ibo-color-grey-850: darken($nord0, 5%); -$ibo-color-grey-800: $nord0 ; -$ibo-color-grey-700: $nord1; -$ibo-color-grey-600: $nord2; -$ibo-color-grey-500: $nord3; -$ibo-color-grey-400: lighten($ibo-color-grey-500, 10%); -$ibo-color-grey-300: lighten($ibo-color-grey-400, 10%); -$ibo-color-grey-250: lighten($ibo-color-grey-300, 15%); -$ibo-color-grey-200: $nord4; -$ibo-color-grey-100: $nord5; -$ibo-color-grey-50: $nord6; +$ibo-color-grey-950: darken($nord0, 15%) !default; +$ibo-color-grey-900: darken($nord0, 10%) !default; +$ibo-color-grey-850: darken($nord0, 5%) !default; +$ibo-color-grey-800: $nord0 !default; +$ibo-color-grey-700: $nord1 !default; +$ibo-color-grey-600: $nord2 !default; +$ibo-color-grey-500: $nord3 !default; +$ibo-color-grey-400: lighten($ibo-color-grey-500, 10%) !default; +$ibo-color-grey-300: lighten($ibo-color-grey-400, 10%) !default; +$ibo-color-grey-250: lighten($ibo-color-grey-300, 15%) !default; +$ibo-color-grey-200: $nord4 !default; +$ibo-color-grey-100: $nord5 !default; +$ibo-color-grey-50: $nord6 !default; -$ibo-color-red-100: lighten($nord11, 40%); -$ibo-color-red-200: lighten($nord11, 35%); -$ibo-color-red-300: lighten($nord11, 22%); -$ibo-color-red-400: lighten($nord11, 15%); -$ibo-color-red-500: lighten($nord11, 7%); -$ibo-color-red-600: $nord11; -$ibo-color-red-700: darken($nord11, 7%); -$ibo-color-red-800: darken($nord11, 15%); -$ibo-color-red-900: darken($nord11, 22%); -$ibo-color-red-950: darken($nord11, 25%); +$ibo-color-red-100: lighten($nord11, 40%) !default; +$ibo-color-red-200: lighten($nord11, 35%) !default; +$ibo-color-red-300: lighten($nord11, 22%) !default; +$ibo-color-red-400: lighten($nord11, 15%) !default; +$ibo-color-red-500: lighten($nord11, 7%) !default; +$ibo-color-red-600: $nord11 !default; +$ibo-color-red-700: darken($nord11, 7%) !default; +$ibo-color-red-800: darken($nord11, 15%) !default; +$ibo-color-red-900: darken($nord11, 22%) !default; +$ibo-color-red-950: darken($nord11, 25%) !default; -$ibo-color-error-100: $ibo-color-red-100; -$ibo-color-error-200: $ibo-color-red-200; -$ibo-color-error-300: $ibo-color-red-300; -$ibo-color-error-400: $ibo-color-red-400; -$ibo-color-error-500: $ibo-color-red-500; -$ibo-color-error-600: $ibo-color-red-600; -$ibo-color-error-700: $ibo-color-red-700; -$ibo-color-error-800: $ibo-color-red-800; -$ibo-color-error-900: $ibo-color-red-900; -$ibo-color-error-950: $ibo-color-red-950; +$ibo-color-error-100: $ibo-color-red-100 !default; +$ibo-color-error-200: $ibo-color-red-200 !default; +$ibo-color-error-300: $ibo-color-red-300 !default; +$ibo-color-error-400: $ibo-color-red-400 !default; +$ibo-color-error-500: $ibo-color-red-500 !default; +$ibo-color-error-600: $ibo-color-red-600 !default; +$ibo-color-error-700: $ibo-color-red-700 !default; +$ibo-color-error-800: $ibo-color-red-800 !default; +$ibo-color-error-900: $ibo-color-red-900 !default; +$ibo-color-error-950: $ibo-color-red-950 !default; -$ibo-color-danger-100: $ibo-color-red-100; -$ibo-color-danger-200: $ibo-color-red-200; -$ibo-color-danger-300: $ibo-color-red-300; -$ibo-color-danger-400: $ibo-color-red-400; -$ibo-color-danger-500: $ibo-color-red-500; -$ibo-color-danger-600: $ibo-color-red-600; -$ibo-color-danger-700: $ibo-color-red-700; -$ibo-color-danger-800: $ibo-color-red-800; -$ibo-color-danger-900: $ibo-color-red-900; -$ibo-color-danger-950: $ibo-color-red-950; +$ibo-color-danger-100: $ibo-color-red-100 !default; +$ibo-color-danger-200: $ibo-color-red-200 !default; +$ibo-color-danger-300: $ibo-color-red-300 !default; +$ibo-color-danger-400: $ibo-color-red-400 !default; +$ibo-color-danger-500: $ibo-color-red-500 !default; +$ibo-color-danger-600: $ibo-color-red-600 !default; +$ibo-color-danger-700: $ibo-color-red-700 !default; +$ibo-color-danger-800: $ibo-color-red-800 !default; +$ibo-color-danger-900: $ibo-color-red-900 !default; +$ibo-color-danger-950: $ibo-color-red-950 !default; -$ibo-color-primary-100: lighten($nord8, 15%); -$ibo-color-primary-200: darken($ibo-color-primary-100, 7%); -$ibo-color-primary-300: $nord8; -$ibo-color-primary-400: darken($ibo-color-primary-300, 7%); -$ibo-color-primary-500: $nord9; -$ibo-color-primary-600: darken($ibo-color-primary-500, 7%); -$ibo-color-primary-700: lighten($nord10, 7%); -$ibo-color-primary-800: $nord10; -$ibo-color-primary-900: darken($ibo-color-primary-800, 20%); -$ibo-color-primary-950: darken($ibo-color-primary-900, 10%); +$ibo-color-primary-100: lighten($nord8, 15%) !default; +$ibo-color-primary-200: darken($ibo-color-primary-100, 7%) !default; +$ibo-color-primary-300: $nord8 !default; +$ibo-color-primary-400: darken($ibo-color-primary-300, 7%) !default; +$ibo-color-primary-500: $nord9 !default; +$ibo-color-primary-600: darken($ibo-color-primary-500, 7%) !default; +$ibo-color-primary-700: lighten($nord10, 7%) !default; +$ibo-color-primary-800: $nord10 !default; +$ibo-color-primary-900: darken($ibo-color-primary-800, 20%) !default; +$ibo-color-primary-950: darken($ibo-color-primary-900, 10%) !default; /* - Secondary color of the brand */ -$ibo-color-secondary-100: $ibo-color-grey-100; -$ibo-color-secondary-200: $ibo-color-grey-200; -$ibo-color-secondary-300: $ibo-color-grey-300; -$ibo-color-secondary-400: $ibo-color-grey-400; -$ibo-color-secondary-500: $ibo-color-grey-500; -$ibo-color-secondary-600: $ibo-color-grey-600; -$ibo-color-secondary-700: $ibo-color-grey-700; -$ibo-color-secondary-800: $ibo-color-grey-800; -$ibo-color-secondary-850: $ibo-color-grey-850; -$ibo-color-secondary-900: $ibo-color-grey-900; -$ibo-color-secondary-950: $ibo-color-grey-950; +$ibo-color-secondary-100: $ibo-color-grey-100 !default; +$ibo-color-secondary-200: $ibo-color-grey-200 !default; +$ibo-color-secondary-300: $ibo-color-grey-300 !default; +$ibo-color-secondary-400: $ibo-color-grey-400 !default; +$ibo-color-secondary-500: $ibo-color-grey-500 !default; +$ibo-color-secondary-600: $ibo-color-grey-600 !default; +$ibo-color-secondary-700: $ibo-color-grey-700 !default; +$ibo-color-secondary-800: $ibo-color-grey-800 !default; +$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; @@ -112,7 +112,7 @@ $ibo-field--fullscreen-toggler--background-color--on-hover: $ibo-color-grey-500; $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-200; +$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; @@ -198,11 +198,13 @@ $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-popover-menu--item-separator--background-color: $ibo-color-grey-500; $ibo-popover-menu--item--text-color: $ibo-color-grey-200; @@ -310,4 +312,12 @@ $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-vendors-ckeditor--ck-content--text-color: $ibo-color-grey-900; \ No newline at end of file +$ibo-vendors-ckeditor--ck-content--text-color: $ibo-color-grey-900; + +$ibo-user-rights--is-success--background-color: $ibo-color-success-950 !default; +$ibo-user-rights--is-success--color: $ibo-color-success-100 !default; +$ibo-user-rights--is-success--border-color: $ibo-color-success-950 !default; + +$ibo-user-rights--is-failure--background-color: $ibo-color-danger-950 !default; +$ibo-user-rights--is-failure--color: $ibo-color-danger-100 !default; +$ibo-user-rights--is-failure--border-color: $ibo-color-danger-950 !default; \ No newline at end of file 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 b4f660aa0..3501cb5da 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 @@ -1,3 +1,8 @@ +$ibo-color-success-50: common-adjust-lightness($ibo-color-success-100, $ibo-color-base-lightness-100) !default; +$ibo-color-danger-50: common-adjust-lightness($ibo-color-success-100, $ibo-color-danger-100) !default; +$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; @@ -64,4 +69,12 @@ $ibo-button-colors: ( 'regular': ( /* Semantics */ $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-welcome-popup--stack-item--border-color: $ibo-color-grey-950; -$ibo-welcome-popup--stack-item--is-active--border-color: $ibo-color-grey-900; \ No newline at end of file +$ibo-welcome-popup--stack-item--is-active--border-color: $ibo-color-grey-900; + +$ibo-user-rights--is-success--background-color: $ibo-color-success-50 !default; +$ibo-user-rights--is-success--color: $ibo-color-success-950 !default; +$ibo-user-rights--is-success--border-color: $ibo-color-success-950 !default; + +$ibo-user-rights--is-failure--background-color: $ibo-color-danger-100 !default; +$ibo-user-rights--is-failure--color: $ibo-color-danger-950 !default; +$ibo-user-rights--is-failure--border-color: $ibo-color-danger-950 !default; \ No newline at end of file diff --git a/datamodels/2.x/combodo-backoffice-fullmoon-high-contrast-theme/scss/stylesheet.scss b/datamodels/2.x/combodo-backoffice-fullmoon-high-contrast-theme/scss/stylesheet.scss index 366647266..cbba7c9f0 100644 --- a/datamodels/2.x/combodo-backoffice-fullmoon-high-contrast-theme/scss/stylesheet.scss +++ b/datamodels/2.x/combodo-backoffice-fullmoon-high-contrast-theme/scss/stylesheet.scss @@ -18,6 +18,10 @@ $ibo-toast--icon--font-size: 2rem !default; $ibo-toast--icon--top: calc(50% - #{$ibo-toast--icon--font-size} / 2) !default; $ibo-toast--icon--left: $ibo-spacing-400 !default; +$ibo-user-rights--icon--margin-right: $ibo-spacing-200 !default; +$ibo-user-rights--is-success--icon: '\f00c' !default; +$ibo-user-rights--is-failure--icon: '\f00d' !default; + @each $sName, $sIcon in $ibo-alert--icons { %ibo-alert-#{$sName}, .ibo-alert.ibo-is-#{$sName} { @@ -146,4 +150,17 @@ $ibo-toast--icon--left: $ibo-spacing-400 !default; .ibo-welcome-popup--stack-item.ibo-is-active { border-width: 2px; +} + +.ibo-user-rights { + &.ibo-is-success::before { + content: $ibo-user-rights--is-success--icon; + @extend %fa-solid-base; + margin-right: $ibo-user-rights--icon--margin-right; + } + &.ibo-is-failure::before { + content: $ibo-user-rights--is-failure--icon; + @extend %fa-solid-base; + margin-right: $ibo-user-rights--icon--margin-right; + } } \ No newline at end of file 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 11f9fbb06..96d658834 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 @@ -1,71 +1,71 @@ -$ibo-color-primary-100: $ibo-color-blue-100; -$ibo-color-primary-200: $ibo-color-blue-200; -$ibo-color-primary-300: $ibo-color-blue-300; -$ibo-color-primary-400: $ibo-color-blue-400; -$ibo-color-primary-500: $ibo-color-blue-500; -$ibo-color-primary-600: $ibo-color-blue-600; -$ibo-color-primary-700: $ibo-color-blue-700; -$ibo-color-primary-800: $ibo-color-blue-800; -$ibo-color-primary-900: $ibo-color-blue-900; -$ibo-color-primary-950: $ibo-color-blue-950; +$ibo-color-primary-100: $ibo-color-blue-100 !default; +$ibo-color-primary-200: $ibo-color-blue-200 !default; +$ibo-color-primary-300: $ibo-color-blue-300 !default; +$ibo-color-primary-400: $ibo-color-blue-400 !default; +$ibo-color-primary-500: $ibo-color-blue-500 !default; +$ibo-color-primary-600: $ibo-color-blue-600 !default; +$ibo-color-primary-700: $ibo-color-blue-700 !default; +$ibo-color-primary-800: $ibo-color-blue-800 !default; +$ibo-color-primary-900: $ibo-color-blue-900 !default; +$ibo-color-primary-950: $ibo-color-blue-950 !default; -$ibo-color-danger-100: $ibo-color-orange-100; -$ibo-color-danger-200: $ibo-color-orange-200; -$ibo-color-danger-300: $ibo-color-orange-300; -$ibo-color-danger-400: $ibo-color-orange-400; -$ibo-color-danger-500: $ibo-color-orange-500; -$ibo-color-danger-600: $ibo-color-orange-600; -$ibo-color-danger-700: $ibo-color-orange-700; -$ibo-color-danger-800: $ibo-color-orange-800; -$ibo-color-danger-900: $ibo-color-orange-900; -$ibo-color-danger-950: $ibo-color-orange-950; +$ibo-color-danger-100: $ibo-color-orange-100 !default; +$ibo-color-danger-200: $ibo-color-orange-200 !default; +$ibo-color-danger-300: $ibo-color-orange-300 !default; +$ibo-color-danger-400: $ibo-color-orange-400 !default; +$ibo-color-danger-500: $ibo-color-orange-500 !default; +$ibo-color-danger-600: $ibo-color-orange-600 !default; +$ibo-color-danger-700: $ibo-color-orange-700 !default; +$ibo-color-danger-800: $ibo-color-orange-800 !default; +$ibo-color-danger-900: $ibo-color-orange-900 !default; +$ibo-color-danger-950: $ibo-color-orange-950 !default; -$ibo-color-yellow-100: #fefce8; -$ibo-color-yellow-200: #fef9c3; -$ibo-color-yellow-300: #fef08a; -$ibo-color-yellow-400: #fde047; -$ibo-color-yellow-500: #facc15; -$ibo-color-yellow-600: #eab308; -$ibo-color-yellow-700: #ca8a04; -$ibo-color-yellow-800: #a16207; -$ibo-color-yellow-900: #854d0e; -$ibo-color-yellow-950: #713f12; +$ibo-color-yellow-100: #fefce8 !default; +$ibo-color-yellow-200: #fef9c3 !default; +$ibo-color-yellow-300: #fef08a !default; +$ibo-color-yellow-400: #fde047 !default; +$ibo-color-yellow-500: #facc15 !default; +$ibo-color-yellow-600: #eab308 !default; +$ibo-color-yellow-700: #ca8a04 !default; +$ibo-color-yellow-800: #a16207 !default; +$ibo-color-yellow-900: #854d0e !default; +$ibo-color-yellow-950: #713f12 !default; -$ibo-color-warning-100: $ibo-color-yellow-100; -$ibo-color-warning-200: $ibo-color-yellow-200; -$ibo-color-warning-300: $ibo-color-yellow-300; -$ibo-color-warning-400: $ibo-color-yellow-400; -$ibo-color-warning-500: $ibo-color-yellow-500; -$ibo-color-warning-600: $ibo-color-yellow-600; -$ibo-color-warning-700: $ibo-color-yellow-700; -$ibo-color-warning-800: $ibo-color-yellow-800; -$ibo-color-warning-900: $ibo-color-yellow-900; -$ibo-color-warning-950: $ibo-color-yellow-950; +$ibo-color-warning-100: $ibo-color-yellow-100 !default; +$ibo-color-warning-200: $ibo-color-yellow-200 !default; +$ibo-color-warning-300: $ibo-color-yellow-300 !default; +$ibo-color-warning-400: $ibo-color-yellow-400 !default; +$ibo-color-warning-500: $ibo-color-yellow-500 !default; +$ibo-color-warning-600: $ibo-color-yellow-600 !default; +$ibo-color-warning-700: $ibo-color-yellow-700 !default; +$ibo-color-warning-800: $ibo-color-yellow-800 !default; +$ibo-color-warning-900: $ibo-color-yellow-900 !default; +$ibo-color-warning-950: $ibo-color-yellow-950 !default; -$ibo-color-success-100: $ibo-color-blue-100; -$ibo-color-success-200: $ibo-color-blue-200; -$ibo-color-success-300: $ibo-color-blue-300; -$ibo-color-success-400: $ibo-color-blue-400; -$ibo-color-success-500: $ibo-color-blue-500; -$ibo-color-success-600: $ibo-color-blue-600; -$ibo-color-success-700: $ibo-color-blue-700; -$ibo-color-success-800: $ibo-color-blue-800; -$ibo-color-success-900: $ibo-color-blue-900; -$ibo-color-success-950: $ibo-color-blue-950; +$ibo-color-success-100: $ibo-color-blue-100 !default; +$ibo-color-success-200: $ibo-color-blue-200 !default; +$ibo-color-success-300: $ibo-color-blue-300 !default; +$ibo-color-success-400: $ibo-color-blue-400 !default; +$ibo-color-success-500: $ibo-color-blue-500 !default; +$ibo-color-success-600: $ibo-color-blue-600 !default; +$ibo-color-success-700: $ibo-color-blue-700 !default; +$ibo-color-success-800: $ibo-color-blue-800 !default; +$ibo-color-success-900: $ibo-color-blue-900 !default; +$ibo-color-success-950: $ibo-color-blue-950 !default; -$ibo-color-information-100: #f1f5f9; -$ibo-color-information-200: #e2e8f0; -$ibo-color-information-300: #cbd5e1; -$ibo-color-information-400: #94a3b8; -$ibo-color-information-500: #64748b; -$ibo-color-information-600: #475569; -$ibo-color-information-700: #334155; -$ibo-color-information-800: #1e293b; -$ibo-color-information-900: #0f172a; -$ibo-color-information-950: #020617; +$ibo-color-information-100: #f1f5f9 !default; +$ibo-color-information-200: #e2e8f0 !default; +$ibo-color-information-300: #cbd5e1 !default; +$ibo-color-information-400: #94a3b8 !default; +$ibo-color-information-500: #64748b !default; +$ibo-color-information-600: #475569 !default; +$ibo-color-information-700: #334155 !default; +$ibo-color-information-800: #1e293b !default; +$ibo-color-information-900: #0f172a !default; +$ibo-color-information-950: #020617 !default; $ibo-lifecycle-new-state-primary-color: $ibo-color-information-600; diff --git a/datamodels/2.x/combodo-backoffice-fullmoon-protanopia-deuteranopia-theme/scss/stylesheet.scss b/datamodels/2.x/combodo-backoffice-fullmoon-protanopia-deuteranopia-theme/scss/stylesheet.scss index 1cb7d1878..859cd5335 100644 --- a/datamodels/2.x/combodo-backoffice-fullmoon-protanopia-deuteranopia-theme/scss/stylesheet.scss +++ b/datamodels/2.x/combodo-backoffice-fullmoon-protanopia-deuteranopia-theme/scss/stylesheet.scss @@ -15,6 +15,10 @@ $ibo-toast--icon--font-size: 2rem !default; $ibo-toast--icon--top: calc(50% - #{$ibo-toast--icon--font-size} / 2) !default; $ibo-toast--icon--left: $ibo-spacing-400 !default; +$ibo-user-rights--icon--margin-right: $ibo-spacing-200 !default; +$ibo-user-rights--is-success--icon: '\f00c' !default; +$ibo-user-rights--is-failure--icon: '\f00d' !default; + @each $sName, $sIcon in $ibo-alert--icons { %ibo-alert-#{$sName}, .ibo-alert.ibo-is-#{$sName} { @@ -71,3 +75,16 @@ $ibo-toast--icon--left: $ibo-spacing-400 !default; } } +.ibo-user-rights { + &.ibo-is-success::before { + content: $ibo-user-rights--is-success--icon; + @extend %fa-solid-base; + margin-right: $ibo-user-rights--icon--margin-right; + } + &.ibo-is-failure::before { + content: $ibo-user-rights--is-failure--icon; + @extend %fa-solid-base; + margin-right: $ibo-user-rights--icon--margin-right; + } +} + 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 c759fe044..86af2fcf0 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 @@ -1,35 +1,35 @@ -$ibo-color-yellow-100: #fefce8; -$ibo-color-yellow-200: #fef9c3; -$ibo-color-yellow-300: #fef08a; -$ibo-color-yellow-400: #fde047; -$ibo-color-yellow-500: #facc15; -$ibo-color-yellow-600: #eab308; -$ibo-color-yellow-700: #ca8a04; -$ibo-color-yellow-800: #a16207; -$ibo-color-yellow-900: #854d0e; -$ibo-color-yellow-950: #713f12; +$ibo-color-yellow-100: #fefce8 !default; +$ibo-color-yellow-200: #fef9c3 !default; +$ibo-color-yellow-300: #fef08a !default; +$ibo-color-yellow-400: #fde047 !default; +$ibo-color-yellow-500: #facc15 !default; +$ibo-color-yellow-600: #eab308 !default; +$ibo-color-yellow-700: #ca8a04 !default; +$ibo-color-yellow-800: #a16207 !default; +$ibo-color-yellow-900: #854d0e !default; +$ibo-color-yellow-950: #713f12 !default; -$ibo-color-success-100: $ibo-color-blue-100; -$ibo-color-success-200: $ibo-color-blue-200; -$ibo-color-success-300: $ibo-color-blue-300; -$ibo-color-success-400: $ibo-color-blue-400; -$ibo-color-success-500: $ibo-color-blue-500; -$ibo-color-success-600: $ibo-color-blue-600; -$ibo-color-success-700: $ibo-color-blue-700; -$ibo-color-success-800: $ibo-color-blue-800; -$ibo-color-success-900: $ibo-color-blue-900; -$ibo-color-success-950: $ibo-color-blue-950; +$ibo-color-success-100: $ibo-color-blue-100 !default; +$ibo-color-success-200: $ibo-color-blue-200 !default; +$ibo-color-success-300: $ibo-color-blue-300 !default; +$ibo-color-success-400: $ibo-color-blue-400 !default; +$ibo-color-success-500: $ibo-color-blue-500 !default; +$ibo-color-success-600: $ibo-color-blue-600 !default; +$ibo-color-success-700: $ibo-color-blue-700 !default; +$ibo-color-success-800: $ibo-color-blue-800 !default; +$ibo-color-success-900: $ibo-color-blue-900 !default; +$ibo-color-success-950: $ibo-color-blue-950 !default; -$ibo-color-information-100: #f1f5f9; -$ibo-color-information-200: #e2e8f0; -$ibo-color-information-300: #cbd5e1; -$ibo-color-information-400: #94a3b8; -$ibo-color-information-500: #64748b; -$ibo-color-information-600: #475569; -$ibo-color-information-700: #334155; -$ibo-color-information-800: #1e293b; -$ibo-color-information-900: #0f172a; -$ibo-color-information-950: #020617; +$ibo-color-information-100: #f1f5f9 !default; +$ibo-color-information-200: #e2e8f0 !default; +$ibo-color-information-300: #cbd5e1 !default; +$ibo-color-information-400: #94a3b8 !default; +$ibo-color-information-500: #64748b !default; +$ibo-color-information-600: #475569 !default; +$ibo-color-information-700: #334155 !default; +$ibo-color-information-800: #1e293b !default; +$ibo-color-information-900: #0f172a !default; +$ibo-color-information-950: #020617 !default; $ibo-lifecycle-new-state-primary-color: $ibo-color-information-600; diff --git a/datamodels/2.x/combodo-backoffice-fullmoon-tritanopia-theme/scss/stylesheet.scss b/datamodels/2.x/combodo-backoffice-fullmoon-tritanopia-theme/scss/stylesheet.scss index cada49df5..13ab47f96 100644 --- a/datamodels/2.x/combodo-backoffice-fullmoon-tritanopia-theme/scss/stylesheet.scss +++ b/datamodels/2.x/combodo-backoffice-fullmoon-tritanopia-theme/scss/stylesheet.scss @@ -15,6 +15,10 @@ $ibo-toast--icon--font-size: 2rem !default; $ibo-toast--icon--top: calc(50% - #{$ibo-toast--icon--font-size} / 2) !default; $ibo-toast--icon--left: $ibo-spacing-400 !default; +$ibo-user-rights--icon--margin-right: $ibo-spacing-200 !default; +$ibo-user-rights--is-success--icon: '\f00c' !default; +$ibo-user-rights--is-failure--icon: '\f00d' !default; + @each $sName, $sIcon in $ibo-alert--icons { %ibo-alert-#{$sName}, .ibo-alert.ibo-is-#{$sName} { @@ -71,3 +75,15 @@ $ibo-toast--icon--left: $ibo-spacing-400 !default; } } +.ibo-user-rights { + &.ibo-is-success::before { + content: $ibo-user-rights--is-success--icon; + @extend %fa-solid-base; + margin-right: $ibo-user-rights--icon--margin-right; + } + &.ibo-is-failure::before { + content: $ibo-user-rights--is-failure--icon; + @extend %fa-solid-base; + margin-right: $ibo-user-rights--icon--margin-right; + } +} \ No newline at end of file diff --git a/datamodels/2.x/itop-portal-base/dictionaries/cs.dict.itop-portal-base.php b/datamodels/2.x/itop-portal-base/dictionaries/cs.dict.itop-portal-base.php index 2b54bd015..1f41b3dd8 100644 --- a/datamodels/2.x/itop-portal-base/dictionaries/cs.dict.itop-portal-base.php +++ b/datamodels/2.x/itop-portal-base/dictionaries/cs.dict.itop-portal-base.php @@ -61,6 +61,7 @@ Dict::Add('CS CZ', 'Czech', 'Čeština', array( 'Portal:Form:Close:Warning' => 'Opravdu chcete opustit tento formulář? Data vložená do formuláře budou ztracena ', 'Portal:Error:ObjectCannotBeCreated' => 'Chyba: objekt nelze vytvořit. Před opětovným odesláním tohoto formuláře zkontrolujte související objekty a přílohy.', 'Portal:Error:ObjectCannotBeUpdated' => 'Chyba: objekt nelze vytvořit. Před opětovným odesláním tohoto formuláře zkontrolujte související objekty a přílohy.', + 'Portal:Error:CheckToWriteFailed' => 'Error during validation of field \'%1$s\': %2$s~~', )); // UserProfile brick diff --git a/datamodels/2.x/itop-portal-base/dictionaries/da.dict.itop-portal-base.php b/datamodels/2.x/itop-portal-base/dictionaries/da.dict.itop-portal-base.php index 592d269a0..2e1dc286c 100644 --- a/datamodels/2.x/itop-portal-base/dictionaries/da.dict.itop-portal-base.php +++ b/datamodels/2.x/itop-portal-base/dictionaries/da.dict.itop-portal-base.php @@ -61,6 +61,7 @@ Dict::Add('DA DA', 'Danish', 'Dansk', array( 'Portal:Form:Close:Warning' => 'Do you want to leave this form? Data entered may be lost~~', 'Portal:Error:ObjectCannotBeCreated' => 'Error: object cannot be created. Check associated objects and attachments before submitting this form again.~~', 'Portal:Error:ObjectCannotBeUpdated' => 'Error: object cannot be updated. Check associated objects and attachments before submitting this form again.~~', + 'Portal:Error:CheckToWriteFailed' => 'Error during validation of field \'%1$s\': %2$s~~', )); // UserProfile brick diff --git a/datamodels/2.x/itop-portal-base/dictionaries/de.dict.itop-portal-base.php b/datamodels/2.x/itop-portal-base/dictionaries/de.dict.itop-portal-base.php index 749cf02d2..b972bcd2a 100644 --- a/datamodels/2.x/itop-portal-base/dictionaries/de.dict.itop-portal-base.php +++ b/datamodels/2.x/itop-portal-base/dictionaries/de.dict.itop-portal-base.php @@ -61,6 +61,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', array( 'Portal:Form:Close:Warning' => 'Soll diese Eingabemaske verlassen werden? Eingegebene Daten werden nicht gespeichert.', 'Portal:Error:ObjectCannotBeCreated' => 'Error: Objekt kann nicht erzeugt werden. Prüfen Sie verknüpfte Objekte und Anhänge bevor Sie dieses Formular erneut abschicken.', 'Portal:Error:ObjectCannotBeUpdated' => 'Error: Objekt kann nicht geupdated werden. Prüfen Sie verknüpfte Objekte und Anhänge bevor Sie dieses Formular erneut abschicken.', + 'Portal:Error:CheckToWriteFailed' => 'Error during validation of field \'%1$s\': %2$s~~', )); // UserProfile brick diff --git a/datamodels/2.x/itop-portal-base/dictionaries/en.dict.itop-portal-base.php b/datamodels/2.x/itop-portal-base/dictionaries/en.dict.itop-portal-base.php index 175503471..8d04efa5c 100644 --- a/datamodels/2.x/itop-portal-base/dictionaries/en.dict.itop-portal-base.php +++ b/datamodels/2.x/itop-portal-base/dictionaries/en.dict.itop-portal-base.php @@ -70,6 +70,7 @@ Dict::Add('EN US', 'English', 'English', array( 'Portal:Form:Close:Warning' => 'Do you want to leave this form? Data entered may be lost', 'Portal:Error:ObjectCannotBeCreated' => 'Error: object cannot be created. Check associated objects and attachments before submitting this form again.', 'Portal:Error:ObjectCannotBeUpdated' => 'Error: object cannot be updated. Check associated objects and attachments before submitting this form again.', + 'Portal:Error:CheckToWriteFailed' => 'Error during validation of field \'%1$s\': %2$s', )); // UserProfile brick diff --git a/datamodels/2.x/itop-portal-base/dictionaries/en_gb.dict.itop-portal-base.php b/datamodels/2.x/itop-portal-base/dictionaries/en_gb.dict.itop-portal-base.php index 7d5dfa0ef..fc667fdc3 100644 --- a/datamodels/2.x/itop-portal-base/dictionaries/en_gb.dict.itop-portal-base.php +++ b/datamodels/2.x/itop-portal-base/dictionaries/en_gb.dict.itop-portal-base.php @@ -57,6 +57,7 @@ Dict::Add('EN GB', 'British English', 'British English', array( 'Portal:Form:Close:Warning' => 'Do you want to leave this form? Data entered may be lost', 'Portal:Error:ObjectCannotBeCreated' => 'Error: object cannot be created. Check associated objects and attachments before submitting this form again.', 'Portal:Error:ObjectCannotBeUpdated' => 'Error: object cannot be updated. Check associated objects and attachments before submitting this form again.', + 'Portal:Error:CheckToWriteFailed' => 'Error during validation of field \'%1$s\': %2$s', )); // UserProfile brick diff --git a/datamodels/2.x/itop-portal-base/dictionaries/es_cr.dict.itop-portal-base.php b/datamodels/2.x/itop-portal-base/dictionaries/es_cr.dict.itop-portal-base.php index 6af90a588..1a8533c4b 100644 --- a/datamodels/2.x/itop-portal-base/dictionaries/es_cr.dict.itop-portal-base.php +++ b/datamodels/2.x/itop-portal-base/dictionaries/es_cr.dict.itop-portal-base.php @@ -59,6 +59,7 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', array( 'Portal:Form:Close:Warning' => '¿Desea abandorar este formulario? Datos modificados se perderan', 'Portal:Error:ObjectCannotBeCreated' => 'Error: no se puede crear el objeto. Verifique los objetos asociados y archivos adjuntos antes de enviar nuevamente este formulario.', 'Portal:Error:ObjectCannotBeUpdated' => 'Error: no se puede actualizar el objeto. Verifique los objetos asociados y archivos adjuntos antes de enviar nuevamente este formulario.', + 'Portal:Error:CheckToWriteFailed' => 'Error during validation of field \'%1$s\': %2$s~~', )); // UserProfile brick diff --git a/datamodels/2.x/itop-portal-base/dictionaries/fr.dict.itop-portal-base.php b/datamodels/2.x/itop-portal-base/dictionaries/fr.dict.itop-portal-base.php index 48264d129..ee538a13e 100644 --- a/datamodels/2.x/itop-portal-base/dictionaries/fr.dict.itop-portal-base.php +++ b/datamodels/2.x/itop-portal-base/dictionaries/fr.dict.itop-portal-base.php @@ -61,6 +61,7 @@ Dict::Add('FR FR', 'French', 'Français', array( 'Portal:Form:Close:Warning' => 'Voulez-vous quitter ce formulaire ? Les données saisies seront perdues', 'Portal:Error:ObjectCannotBeCreated' => 'Erreur: L\'objet n\'a pas été créé. Vérifiez les objets liés et les attachements avant de soumettre à nouveau le formulaire.', 'Portal:Error:ObjectCannotBeUpdated' => 'Erreur: L\'objet n\'a pas été modifié. Vérifiez les objets liés et les attachements avant de soumettre à nouveau le formulaire.', + 'Portal:Error:CheckToWriteFailed' => 'Erreur durant la validation du champ \'%1$s\' : %2$s', )); // UserProfile brick diff --git a/datamodels/2.x/itop-portal-base/dictionaries/hu.dict.itop-portal-base.php b/datamodels/2.x/itop-portal-base/dictionaries/hu.dict.itop-portal-base.php index 5d38f2274..f3f2d4721 100644 --- a/datamodels/2.x/itop-portal-base/dictionaries/hu.dict.itop-portal-base.php +++ b/datamodels/2.x/itop-portal-base/dictionaries/hu.dict.itop-portal-base.php @@ -61,6 +61,7 @@ Dict::Add('HU HU', 'Hungarian', 'Magyar', array( 'Portal:Form:Close:Warning' => 'Szeretné elhagyni ezt az űrlapot? A megadott adatok elveszhetnek', 'Portal:Error:ObjectCannotBeCreated' => 'Hiba: az objektum nem hozható létre. Ellenőrizze a kapcsolódó objektumokat és mellékleteket, mielőtt újra elküldi ezt az űrlapot.', 'Portal:Error:ObjectCannotBeUpdated' => 'Hiba: az objektum nem frissíthető. Ellenőrizze a kapcsolódó objektumokat és mellékleteket, mielőtt újra elküldi ezt az űrlapot.', + 'Portal:Error:CheckToWriteFailed' => 'Error during validation of field \'%1$s\': %2$s~~', )); // UserProfile brick diff --git a/datamodels/2.x/itop-portal-base/dictionaries/it.dict.itop-portal-base.php b/datamodels/2.x/itop-portal-base/dictionaries/it.dict.itop-portal-base.php index b97724d35..21bcff0a4 100644 --- a/datamodels/2.x/itop-portal-base/dictionaries/it.dict.itop-portal-base.php +++ b/datamodels/2.x/itop-portal-base/dictionaries/it.dict.itop-portal-base.php @@ -61,6 +61,7 @@ Dict::Add('IT IT', 'Italian', 'Italiano', array( 'Portal:Form:Close:Warning' => 'Do you want to leave this form? Data entered may be lost~~', 'Portal:Error:ObjectCannotBeCreated' => 'Error: object cannot be created. Check associated objects and attachments before submitting this form again.~~', 'Portal:Error:ObjectCannotBeUpdated' => 'Error: object cannot be updated. Check associated objects and attachments before submitting this form again.~~', + 'Portal:Error:CheckToWriteFailed' => 'Error during validation of field \'%1$s\': %2$s~~', )); // UserProfile brick diff --git a/datamodels/2.x/itop-portal-base/dictionaries/ja.dict.itop-portal-base.php b/datamodels/2.x/itop-portal-base/dictionaries/ja.dict.itop-portal-base.php index 8fcdf3991..db8627a7b 100644 --- a/datamodels/2.x/itop-portal-base/dictionaries/ja.dict.itop-portal-base.php +++ b/datamodels/2.x/itop-portal-base/dictionaries/ja.dict.itop-portal-base.php @@ -61,6 +61,7 @@ Dict::Add('JA JP', 'Japanese', '日本語', array( 'Portal:Form:Close:Warning' => 'Do you want to leave this form? Data entered may be lost~~', 'Portal:Error:ObjectCannotBeCreated' => 'Error: object cannot be created. Check associated objects and attachments before submitting this form again.~~', 'Portal:Error:ObjectCannotBeUpdated' => 'Error: object cannot be updated. Check associated objects and attachments before submitting this form again.~~', + 'Portal:Error:CheckToWriteFailed' => 'Error during validation of field \'%1$s\': %2$s~~', )); // UserProfile brick diff --git a/datamodels/2.x/itop-portal-base/dictionaries/nl.dict.itop-portal-base.php b/datamodels/2.x/itop-portal-base/dictionaries/nl.dict.itop-portal-base.php index 1771b4ea3..9ba61f147 100644 --- a/datamodels/2.x/itop-portal-base/dictionaries/nl.dict.itop-portal-base.php +++ b/datamodels/2.x/itop-portal-base/dictionaries/nl.dict.itop-portal-base.php @@ -62,6 +62,7 @@ Dict::Add('NL NL', 'Dutch', 'Nederlands', array( 'Portal:Form:Close:Warning' => 'Ben je zeker dat je dit venster wil sluiten? Ingevoerde gegevens kunnen verloren gaan.', 'Portal:Error:ObjectCannotBeCreated' => 'Fout: object kan niet worden aangemaakt. Kijk verwante objecten en bijlagen na vooraleer dit formulier opnieuw te versturen.', 'Portal:Error:ObjectCannotBeUpdated' => 'Fout: object kan niet worden aangepast. Kijk verwante objecten en bijlagen na vooraleer dit formulier opnieuw te versturen.', + 'Portal:Error:CheckToWriteFailed' => 'Error during validation of field \'%1$s\': %2$s~~', )); // UserProfile brick diff --git a/datamodels/2.x/itop-portal-base/dictionaries/pl.dict.itop-portal-base.php b/datamodels/2.x/itop-portal-base/dictionaries/pl.dict.itop-portal-base.php index 23ebdf69d..512c1a048 100644 --- a/datamodels/2.x/itop-portal-base/dictionaries/pl.dict.itop-portal-base.php +++ b/datamodels/2.x/itop-portal-base/dictionaries/pl.dict.itop-portal-base.php @@ -61,6 +61,7 @@ Dict::Add('PL PL', 'Polish', 'Polski', array( 'Portal:Form:Close:Warning' => 'Chcesz opuścić ten formularz? Wprowadzone dane mogą zostać utracone', 'Portal:Error:ObjectCannotBeCreated' => 'Błąd: nie można utworzyć obiektu. Sprawdź powiązane obiekty i załączniki przed ponownym przesłaniem tego formularza.', 'Portal:Error:ObjectCannotBeUpdated' => 'Błąd: nie można zaktualizować obiektu. Sprawdź powiązane obiekty i załączniki przed ponownym przesłaniem tego formularza.', + 'Portal:Error:CheckToWriteFailed' => 'Error during validation of field \'%1$s\': %2$s~~', )); // UserProfile brick diff --git a/datamodels/2.x/itop-portal-base/dictionaries/pt_br.dict.itop-portal-base.php b/datamodels/2.x/itop-portal-base/dictionaries/pt_br.dict.itop-portal-base.php index 0d1fb6892..630926603 100644 --- a/datamodels/2.x/itop-portal-base/dictionaries/pt_br.dict.itop-portal-base.php +++ b/datamodels/2.x/itop-portal-base/dictionaries/pt_br.dict.itop-portal-base.php @@ -61,6 +61,7 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array( 'Portal:Form:Close:Warning' => 'Você deseja abandonar esta página? Os dados digitados podem ser perdidos', 'Portal:Error:ObjectCannotBeCreated' => 'Erro: objeto não pode ser criado. Verifique os objetos e anexos associados antes de enviar novamente este formulário', 'Portal:Error:ObjectCannotBeUpdated' => 'Erro: objeto não pode ser atualizado. Verifique os objetos e anexos associados antes de enviar novamente este formulário', + 'Portal:Error:CheckToWriteFailed' => 'Error during validation of field \'%1$s\': %2$s~~', )); // UserProfile brick diff --git a/datamodels/2.x/itop-portal-base/dictionaries/ru.dict.itop-portal-base.php b/datamodels/2.x/itop-portal-base/dictionaries/ru.dict.itop-portal-base.php index 1fb9966f3..cc7b677dd 100644 --- a/datamodels/2.x/itop-portal-base/dictionaries/ru.dict.itop-portal-base.php +++ b/datamodels/2.x/itop-portal-base/dictionaries/ru.dict.itop-portal-base.php @@ -62,6 +62,7 @@ Dict::Add('RU RU', 'Russian', 'Русский', array( 'Portal:Form:Close:Warning' => 'Вы действительно хотите закрыть эту форму? Введённые данные могут быть утеряны.', 'Portal:Error:ObjectCannotBeCreated' => 'Error: object cannot be created. Check associated objects and attachments before submitting this form again.~~', 'Portal:Error:ObjectCannotBeUpdated' => 'Error: object cannot be updated. Check associated objects and attachments before submitting this form again.~~', + 'Portal:Error:CheckToWriteFailed' => 'Error during validation of field \'%1$s\': %2$s~~', )); // UserProfile brick diff --git a/datamodels/2.x/itop-portal-base/dictionaries/sk.dict.itop-portal-base.php b/datamodels/2.x/itop-portal-base/dictionaries/sk.dict.itop-portal-base.php index 00c86fed0..b4a0df5be 100644 --- a/datamodels/2.x/itop-portal-base/dictionaries/sk.dict.itop-portal-base.php +++ b/datamodels/2.x/itop-portal-base/dictionaries/sk.dict.itop-portal-base.php @@ -61,6 +61,7 @@ Dict::Add('SK SK', 'Slovak', 'Slovenčina', array( 'Portal:Form:Close:Warning' => 'Do you want to leave this form? Data entered may be lost~~', 'Portal:Error:ObjectCannotBeCreated' => 'Error: object cannot be created. Check associated objects and attachments before submitting this form again.~~', 'Portal:Error:ObjectCannotBeUpdated' => 'Error: object cannot be updated. Check associated objects and attachments before submitting this form again.~~', + 'Portal:Error:CheckToWriteFailed' => 'Error during validation of field \'%1$s\': %2$s~~', )); // UserProfile brick diff --git a/datamodels/2.x/itop-portal-base/dictionaries/tr.dict.itop-portal-base.php b/datamodels/2.x/itop-portal-base/dictionaries/tr.dict.itop-portal-base.php index 236711e5a..a85fd6c81 100644 --- a/datamodels/2.x/itop-portal-base/dictionaries/tr.dict.itop-portal-base.php +++ b/datamodels/2.x/itop-portal-base/dictionaries/tr.dict.itop-portal-base.php @@ -61,6 +61,7 @@ Dict::Add('TR TR', 'Turkish', 'Türkçe', array( 'Portal:Form:Close:Warning' => 'Do you want to leave this form? Data entered may be lost~~', 'Portal:Error:ObjectCannotBeCreated' => 'Error: object cannot be created. Check associated objects and attachments before submitting this form again.~~', 'Portal:Error:ObjectCannotBeUpdated' => 'Error: object cannot be updated. Check associated objects and attachments before submitting this form again.~~', + 'Portal:Error:CheckToWriteFailed' => 'Error during validation of field \'%1$s\': %2$s~~', )); // UserProfile brick diff --git a/datamodels/2.x/itop-portal-base/dictionaries/zh_cn.dict.itop-portal-base.php b/datamodels/2.x/itop-portal-base/dictionaries/zh_cn.dict.itop-portal-base.php index df68467fb..9f2a05a97 100644 --- a/datamodels/2.x/itop-portal-base/dictionaries/zh_cn.dict.itop-portal-base.php +++ b/datamodels/2.x/itop-portal-base/dictionaries/zh_cn.dict.itop-portal-base.php @@ -70,6 +70,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array( 'Portal:Form:Close:Warning' => '确定要离开表单吗? 已输入数据会丢失', 'Portal:Error:ObjectCannotBeCreated' => '错误: 无法创建对象. 请在再次提交表单前检查相关对象和附件.', 'Portal:Error:ObjectCannotBeUpdated' => '错误: 无法更新对象. 请在再次提交表单前检查相关对象和附件.', + 'Portal:Error:CheckToWriteFailed' => 'Error during validation of field \'%1$s\': %2$s~~', )); // UserProfile brick diff --git a/datamodels/2.x/itop-portal-base/portal/src/Helper/ObjectFormHandlerHelper.php b/datamodels/2.x/itop-portal-base/portal/src/Helper/ObjectFormHandlerHelper.php index 44f9b2ea2..15103692d 100644 --- a/datamodels/2.x/itop-portal-base/portal/src/Helper/ObjectFormHandlerHelper.php +++ b/datamodels/2.x/itop-portal-base/portal/src/Helper/ObjectFormHandlerHelper.php @@ -337,7 +337,18 @@ class ObjectFormHandlerHelper ); } } else { - throw new HttpException(Response::HTTP_INTERNAL_SERVER_ERROR, implode('
', $aFormData['validation']['messages']['error']['_main'])); + $sErrorMessages = ''; + foreach ($aFormData['validation']['messages']['error'] as $sFieldId => $aMessages) { + if ($sFieldId == '_main') { + $sErrorMessages .= implode(' - ', $aFormData['validation']['messages']['error']['_main']); + } else { + $oObj = $oFormManager->GetObject(); + $sLabel = $oObj->GetLabel($sFieldId); + $sErrorMessages .= Dict::Format('Portal:Error:CheckToWriteFailed', $sLabel, (is_array($aMessages) ? implode(' - ', $aMessages) : $aMessages)); + } + } + + throw new HttpException(Response::HTTP_INTERNAL_SERVER_ERROR, $sErrorMessages); } break; diff --git a/sources/Application/UI/Base/Component/Input/Set/SetUIBlockFactory.php b/sources/Application/UI/Base/Component/Input/Set/SetUIBlockFactory.php index 8e815fbcf..736562884 100644 --- a/sources/Application/UI/Base/Component/Input/Set/SetUIBlockFactory.php +++ b/sources/Application/UI/Base/Component/Input/Set/SetUIBlockFactory.php @@ -53,13 +53,15 @@ class SetUIBlockFactory extends AbstractUIBlockFactory * @param string $sValueField Field used for option value * @param array $aSearchFields Fields used for searching * @param string|null $sGroupField Field used for grouping + * @param string $sName Field name * * @return \Combodo\iTop\Application\UI\Base\Component\Input\Set\Set */ - public static function MakeForSimple(string $sId, array $aOptions, string $sLabelFields, string $sValueField, array $aSearchFields, ?string $sGroupField = null, ?string $sTooltipField = null): Set + public static function MakeForSimple(string $sId, array $aOptions, string $sLabelFields, string $sValueField, array $aSearchFields, ?string $sGroupField = null, ?string $sTooltipField = null, string $sName = ''): Set { // Create set ui block $oSetUIBlock = new Set($sId); + $oSetUIBlock->SetName($sName); // Simple data provider $oDataProvider = new SimpleDataProvider($aOptions); @@ -91,13 +93,15 @@ class SetUIBlockFactory extends AbstractUIBlockFactory * @param string $sValueField Field used for value * @param array $aSearchFields Fields used for search * @param string|null $sGroupField Field used for grouping + * @param string $sName Field name * * @return \Combodo\iTop\Application\UI\Base\Component\Input\Set\Set */ - public static function MakeForAjax(string $sId, string $sAjaxRoute, array $aAjaxRouteParams, string $sLabelFields, string $sValueField, array $aSearchFields, ?string $sGroupField = null): Set + public static function MakeForAjax(string $sId, string $sAjaxRoute, array $aAjaxRouteParams, string $sLabelFields, string $sValueField, array $aSearchFields, ?string $sGroupField = null, string $sName = ''): Set { // Create set ui block $oSetUIBlock = new Set($sId); + $oSetUIBlock->SetName($sName); // Ajax data provider $oDataProvider = new AjaxDataProvider($sAjaxRoute, $aAjaxRouteParams); @@ -129,13 +133,15 @@ class SetUIBlockFactory extends AbstractUIBlockFactory * @param string|null $sWizardHelperJsVarName Wizard helper name * @param array $aFieldsToLoad Additional fields to load on objects * @param string|null $sGroupField Field used for grouping + * @param string $sName Field name * * @return \Combodo\iTop\Application\UI\Base\Component\Input\Set\Set */ - public static function MakeForOQL(string $sId, string $sObjectClass, string $sOql, string $sWizardHelperJsVarName = null, array $aFieldsToLoad = [], ?string $sGroupField = null): Set + public static function MakeForOQL(string $sId, string $sObjectClass, string $sOql, string $sWizardHelperJsVarName = null, array $aFieldsToLoad = [], ?string $sGroupField = null, string $sName = ''): Set { // Create set ui block $oSetUIBlock = new Set($sId); + $oSetUIBlock->SetName($sName); // Renderers $oSetUIBlock->SetOptionsTemplate('application/object/set/option_renderer.html.twig'); diff --git a/tests/manual-visual-tests/Backoffice/RenderAllUiBlocks.php b/tests/manual-visual-tests/Backoffice/RenderAllUiBlocks.php index 7ca3a7db0..91e3f7946 100644 --- a/tests/manual-visual-tests/Backoffice/RenderAllUiBlocks.php +++ b/tests/manual-visual-tests/Backoffice/RenderAllUiBlocks.php @@ -548,39 +548,33 @@ $aOptions = [ ]; $oPage->add_style('.demo_set{color:red;}'); -$oSimpleSetBlock = SetUIBlockFactory::MakeForSimple('SetSimple', $aOptions, 'label', 'value', ['label']); -$oSimpleSetBlock->SetName('SimpleSetBlock'); +$oSimpleSetBlock = SetUIBlockFactory::MakeForSimple('SetSimple', $aOptions, 'label', 'value', ['label'], null, null, 'SimpleSetBlock'); $oPage->AddUiBlock($oSimpleSetBlock); $oPage->AddUiBlock(TitleUIBlockFactory::MakeNeutral('Add Option Button', 3)); -$oSimpleAddSetBlock = SetUIBlockFactory::MakeForSimple('SetWithAddOption', $aOptions, 'label', 'value', ['label']); -$oSimpleAddSetBlock->SetName('SetWithAddOption'); +$oSimpleAddSetBlock = SetUIBlockFactory::MakeForSimple('SetWithAddOption', $aOptions, 'label', 'value', ['label'], null, null, 'SetWithAddOption'); $oSimpleAddSetBlock->SetHasAddOptionButton(true); $oPage->AddUiBlock($oSimpleAddSetBlock); $oPage->AddUiBlock(TitleUIBlockFactory::MakeNeutral('Renderer', 3)); -$oSimpleSetBlockRenderer = SetUIBlockFactory::MakeForSimple('SetRenderer', $aOptions, 'label', 'value', ['label']); -$oSimpleSetBlockRenderer->SetName('SimpleSetBlockWithRenderer'); +$oSimpleSetBlockRenderer = SetUIBlockFactory::MakeForSimple('SetRenderer', $aOptions, 'label', 'value', ['label'], null, null, 'SimpleSetBlockWithRenderer'); $oSimpleSetBlockRenderer->SetOptionsTemplate('base/components/input/set/simple_option_renderer.html.twig'); $oSimpleSetBlockRenderer->SetItemsTemplate('base/components/input/set/simple_option_renderer.html.twig'); $oPage->AddUiBlock($oSimpleSetBlockRenderer); $oPage->AddUiBlock(TitleUIBlockFactory::MakeNeutral('Grouping', 3)); -$oSimpleSetBlockGroup = SetUIBlockFactory::MakeForSimple('SetGroup', $aOptions, 'label', 'value', ['label'], 'group'); -$oSimpleSetBlockGroup->SetName('SimpleSetBlockWithGroup'); +$oSimpleSetBlockGroup = SetUIBlockFactory::MakeForSimple('SetGroup', $aOptions, 'label', 'value', ['label'], 'group', null, 'SimpleSetBlockWithGroup'); $oPage->AddUiBlock($oSimpleSetBlockGroup); $oPage->AddUiBlock(TitleUIBlockFactory::MakeNeutral('OQL', 3)); -$oSimpleSetBlockOql = SetUIBlockFactory::MakeForOQL('SetOql', 'Person', 'SELECT Person'); -$oSimpleSetBlockOql->SetName('OqlSet'); +$oSimpleSetBlockOql = SetUIBlockFactory::MakeForOQL('SetOql', 'Person', 'SELECT Person', null, [], null, 'OqlSet'); $oPage->AddUiBlock($oSimpleSetBlockOql); -$oSimpleSetBlockOql2 = SetUIBlockFactory::MakeForOQL('SetOql2', 'Location', 'SELECT Location'); -$oSimpleSetBlockOql2->SetName('OqlSet2'); +$oSimpleSetBlockOql2 = SetUIBlockFactory::MakeForOQL('SetOql2', 'Location', 'SELECT Location', null, [], null, 'OqlSet2'); $oPage->AddUiBlock($oSimpleSetBlockOql2); $oPage->output();