Merge branch 'support/3.2' into develop

# Conflicts:
#	addons/userrights/userrightsprofile.db.class.inc.php
#	addons/userrights/userrightsprojection.class.inc.php
#	datamodels/2.x/combodo-backoffice-darkmoon-theme/scss/scss-variables.scss
This commit is contained in:
Stephen Abello
2025-10-27 16:00:08 +01:00
33 changed files with 319 additions and 179 deletions

View File

@@ -94,15 +94,15 @@ class URP_Profiles extends UserRightsBaseClassGUI
$bGrant = $oUserRights->GetProfileActionGrant($this->GetKey(), $sClass, $sAction);
if (is_null($bGrant))
{
return '<span style="background-color: #ffdddd;">'.Dict::S('UI:UserManagement:ActionAllowed:No').'</span>';
return '<span class="ibo-user-rights ibo-is-failure">'.Dict::S('UI:UserManagement:ActionAllowed:No').'</span>';
}
elseif ($bGrant)
{
return '<span style="background-color: #ddffdd;">'.Dict::S('UI:UserManagement:ActionAllowed:Yes').'</span>';
return '<span class="ibo-user-rights ibo-is-success">'.Dict::S('UI:UserManagement:ActionAllowed:Yes').'</span>';
}
else
{
return '<span style="background-color: #ffdddd;">'.Dict::S('UI:UserManagement:ActionAllowed:No').'</span>';
return '<span class="ibo-user-rights ibo-is-failure">'.Dict::S('UI:UserManagement:ActionAllowed:No').'</span>';
}
}

View File

@@ -542,9 +542,9 @@ abstract class User extends cmdbAbstractObject
function GetGrantAsHtml($sClass, $iAction)
{
if (UserRights::IsActionAllowed($sClass, $iAction, null, $this)) {
return '<span style="background-color: #ddffdd;">'.Dict::S('UI:UserManagement:ActionAllowed:Yes').'</span>';
return '<span class="ibo-user-rights ibo-is-success">'.Dict::S('UI:UserManagement:ActionAllowed:Yes').'</span>';
} else {
return '<span style="background-color: #ffdddd;">'.Dict::S('UI:UserManagement:ActionAllowed:No').'</span>';
return '<span class="ibo-user-rights ibo-is-failure">'.Dict::S('UI:UserManagement:ActionAllowed:No').'</span>';
}
}

View File

@@ -8,3 +8,4 @@
@import "linked-set/all";
@import "tabular-fields/all";
@import "welcome-popup/all";
@import "user-rights";

View File

@@ -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;
}
}

View File

@@ -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;
}

View File

@@ -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;
@@ -311,3 +313,11 @@ $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;
$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;

View File

@@ -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;
@@ -65,3 +70,11 @@ $ibo-panel-colors: ('primary': $ibo-color-primary-800,'secondary': $ibo-color-se
$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-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;

View File

@@ -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} {
@@ -147,3 +151,16 @@ $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;
}
}

View File

@@ -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;

View File

@@ -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;
}
}

View File

@@ -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;

View File

@@ -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;
}
}

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -337,7 +337,18 @@ class ObjectFormHandlerHelper
);
}
} else {
throw new HttpException(Response::HTTP_INTERNAL_SERVER_ERROR, implode('<br/>', $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;

View File

@@ -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');

View File

@@ -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();