Skip to content

Commit

Permalink
Improved rendering of dynamic fields on AdminGenericAgent, AdminNotif…
Browse files Browse the repository at this point in the history
…icationEvent, AdminACL and AdminDynamicFieldScreenConfiguration.
  • Loading branch information
NiklasSchmitt committed Jul 4, 2024
1 parent 8e6dc19 commit 5126ebd
Show file tree
Hide file tree
Showing 10 changed files with 439 additions and 99 deletions.
1 change: 1 addition & 0 deletions CHANGES.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
# 7.1.1 2024-??-??
- 2024-07-04 Improved rendering of dynamic fields on AdminGenericAgent, AdminNotificationEvent, AdminACL and AdminDynamicFieldScreenConfiguration.
- 2024-07-02 Updated required minimum database versions. Refactored database version checks and added them to the installer.
- 2024-06-21 Added functionality to use user fullname for mention label.
- 2024-06-20 Fixed output of last mention date in dashboard widget "Last mentions".
Expand Down
28 changes: 20 additions & 8 deletions Kernel/Modules/AdminACL.pm
Original file line number Diff line number Diff line change
Expand Up @@ -757,16 +757,28 @@ sub _ShowEdit {
AutoComplete => 'off',
);

# get list of all possible dynamic fields
my $DynamicFieldList = $Kernel::OM->Get('Kernel::System::DynamicField')->DynamicFieldList(
ObjectType => 'Ticket',
ResultType => 'HASH',
);
my %DynamicFieldNames = reverse %{$DynamicFieldList};
my %DynamicFields;
for my $DynamicFieldName ( sort keys %DynamicFieldNames ) {
$DynamicFields{ 'DynamicField_' . $DynamicFieldName } = $DynamicFieldName;
my $DynamicFieldList = $Kernel::OM->Get('Kernel::System::DynamicField')->DynamicFieldListGet(
Valid => 1,
ObjectType => ['Ticket'],
);

DYNAMICFIELDCONFIG:
for my $DynamicFieldConfig ( @{$DynamicFieldList} ) {
next DYNAMICFIELDCONFIG if !IsHashRefWithData($DynamicFieldConfig);

my $TranslatedLabel = $LayoutObject->{LanguageObject}->Translate( $DynamicFieldConfig->{Label} );
my $CombinedLabel = (
$TranslatedLabel eq $DynamicFieldConfig->{Name}
? $TranslatedLabel
: $TranslatedLabel . ' (' . $DynamicFieldConfig->{Name} . ')'
);

$DynamicFields{ 'DynamicField_' . $DynamicFieldConfig->{Name} } = $CombinedLabel;
}

%DynamicFields = map { $_ => $DynamicFields{$_} } sort keys %DynamicFields;

$Param{ACLKeysLevel3DynamicFields} = $LayoutObject->BuildSelection(
Data => \%DynamicFields,
Name => 'NewDataKeyDropdown',
Expand Down
19 changes: 17 additions & 2 deletions Kernel/Modules/AdminDynamicFieldScreenConfiguration.pm
Original file line number Diff line number Diff line change
Expand Up @@ -313,12 +313,27 @@ sub _ShowOverview {
);
}
else {

# Get all dynamic fields and translate the name.
my @DynamicFields;
for my $DynamicField ( sort keys %DynamicFields ) {
my $Name = $LayoutObject->{LanguageObject}->Translate( $DynamicFields{$DynamicField} );
push @DynamicFields, {
Name => $Name,
DynamicField => $DynamicField,
};
}

# Sort by translated name.
my @SortedDynamicFields = sort { $a->{Name} cmp $b->{Name} } @DynamicFields;

# Show dynamic fields orderd by translated name on overview.
for my $DynamicField (@SortedDynamicFields) {
$LayoutObject->Block(
Name => 'DynamicFieldOverviewRow',
Data => {
DynamicField => $DynamicField,
Name => $DynamicFields{$DynamicField},
DynamicField => $DynamicField->{DynamicField},
Name => $DynamicField->{Name},
},
);
}
Expand Down
74 changes: 57 additions & 17 deletions Kernel/Modules/AdminGenericAgent.pm
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ package Kernel::Modules::AdminGenericAgent;

use strict;
use warnings;
use utf8;

use Kernel::System::VariableCheck qw(:all);
use Kernel::Language qw(Translatable);
Expand Down Expand Up @@ -391,8 +392,9 @@ sub Run {
if ( $Widget eq 'Select' ) {
$DynamicFieldHTML = $DynamicFieldBackendObject->SearchFieldRender(
DynamicFieldConfig => $DynamicFieldConfig,
Profile => \%JobData,
LayoutObject => $LayoutObject,
DefaultValue => $DynamicFieldConfig->{Config}->{DefaultValue},
Profile => \%JobData,
Type => $Type,
);
}
Expand Down Expand Up @@ -438,6 +440,7 @@ sub Run {
}
}
}

$DynamicFieldHTML = $DynamicFieldBackendObject->EditFieldRender(
DynamicFieldConfig => $DynamicFieldConfig,
PossibleValuesFilter => $PossibleValuesFilter,
Expand All @@ -452,7 +455,26 @@ sub Run {
);
}

$DynamicFieldHTML->{ID} = $SelectedValue;
my $HTMLLabel = $DynamicFieldHTML->{Label};
my $TranslatedLabel = $LayoutObject->{LanguageObject}->Translate( $DynamicFieldConfig->{Label} );
my $CombinedLabel = (
$TranslatedLabel eq $DynamicFieldConfig->{Name}
? $TranslatedLabel
: $TranslatedLabel . ' (' . $DynamicFieldConfig->{Name} . ')'
);

$HTMLLabel =~ s{(.+)\Q$TranslatedLabel\E(.+)}{$1 $CombinedLabel $2}smx;

$DynamicFieldHTML->{Label} = $HTMLLabel;
$DynamicFieldHTML->{ID} = $SelectedValue;
$DynamicFieldHTML->{Type} = $DynamicFieldConfig->{FieldType};

if ( $DynamicFieldConfig->{Config}->{DateRestriction} ) {
$DynamicFieldHTML->{ValidateDateInFuture}
= ( $DynamicFieldConfig->{Config}->{DateRestriction} eq 'DisablePastDates' ? 'true' : 'false' );
$DynamicFieldHTML->{ValidateDateNotInFuture}
= ( $DynamicFieldConfig->{Config}->{DateRestriction} eq 'DisableFutureDates' ? 'true' : 'false' );
}

my $Output = $LayoutObject->JSONEncode(
Data => $DynamicFieldHTML,
Expand Down Expand Up @@ -1134,9 +1156,7 @@ sub _MaskUpdate {
next DYNAMICFIELD if !IsArrayRefWithData($SearchFieldPreferences);

# Translate dynamic field label.
my $TranslatedDynamicFieldLabel = $LayoutObject->{LanguageObject}->Translate(
$DynamicFieldConfig->{Label},
);
my $TranslatedLabel = $LayoutObject->{LanguageObject}->Translate( $DynamicFieldConfig->{Label} );

PREFERENCE:
for my $Preference ( @{$SearchFieldPreferences} ) {
Expand All @@ -1150,14 +1170,18 @@ sub _MaskUpdate {
$TranslatedSuffix = ' (' . $TranslatedSuffix . ')';
}

my $Key = 'Search_DynamicField_' . $DynamicFieldConfig->{Name} . $Preference->{Type};
my $Text = $TranslatedDynamicFieldLabel . $TranslatedSuffix;
my $Key = 'Search_DynamicField_' . $DynamicFieldConfig->{Name} . $Preference->{Type};
my $CombinedLabel = (
$TranslatedLabel eq $DynamicFieldConfig->{Name}
? $TranslatedLabel . $TranslatedSuffix
: $TranslatedLabel . $TranslatedSuffix . ' (' . $DynamicFieldConfig->{Name} . ')'
);

# Save all dynamic fields for JS.
$DynamicFieldsJS{$Key} = {
ID => $DynamicFieldConfig->{ID},
Type => $Preference->{Type},
Text => $Text,
Text => $CombinedLabel,
};

# Decide if dynamic field go to add fields dropdown or selected fields area.
Expand All @@ -1166,19 +1190,21 @@ sub _MaskUpdate {
# Get field HTML.
my $DynamicFieldHTML = $DynamicFieldBackendObject->SearchFieldRender(
DynamicFieldConfig => $DynamicFieldConfig,
LayoutObject => $LayoutObject,
Profile => \%JobData,
DefaultValue =>
$Self->{Config}->{Defaults}->{DynamicField}->{ $DynamicFieldConfig->{Name} },
LayoutObject => $LayoutObject,
Type => $Preference->{Type},
Type => $Preference->{Type},
);

next PREFERENCE if !IsHashRefWithData($DynamicFieldHTML);

my $HTMLLabel = $DynamicFieldHTML->{Label};
my $Search = $TranslatedLabel . $TranslatedSuffix;
$HTMLLabel =~ s{(.+)\Q$Search\E(.+)}{$1 $CombinedLabel $2}smx;

$LayoutObject->Block(
Name => 'SelectedDynamicFields',
Data => {
Label => $DynamicFieldHTML->{Label},
Label => $HTMLLabel,
Field => $DynamicFieldHTML->{Field},
ID => $Key,
},
Expand All @@ -1187,12 +1213,14 @@ sub _MaskUpdate {
else {
push @AddDynamicFields, {
Key => $Key,
Value => $Text,
Value => $CombinedLabel,
};
}
}
}

@AddDynamicFields = sort { $a->{Value} cmp $b->{Value} } @AddDynamicFields;

my $DynamicFieldsStrg = $LayoutObject->BuildSelection(
PossibleNone => 1,
Data => \@AddDynamicFields,
Expand Down Expand Up @@ -1278,10 +1306,17 @@ sub _MaskUpdate {
$Used = 1;
}

my $TranslatedLabel = $LayoutObject->{LanguageObject}->Translate( $DynamicFieldConfig->{Label} );
my $CombinedLabel = (
$TranslatedLabel eq $DynamicFieldConfig->{Name}
? $TranslatedLabel
: $TranslatedLabel . ' (' . $DynamicFieldConfig->{Name} . ')'
);

# Save all new dynamic fields for JS.
$DynamicFieldsJS{$Key} = {
ID => $DynamicFieldConfig->{ID},
Text => $DynamicFieldConfig->{Name},
Text => $CombinedLabel,
};

# Decide if dynamic field go to add fields dropdown or selected fields area.
Expand Down Expand Up @@ -1321,10 +1356,13 @@ sub _MaskUpdate {

next DYNAMICFIELD if !IsHashRefWithData($DynamicFieldHTML);

my $HTMLLabel = $DynamicFieldHTML->{Label};
$HTMLLabel =~ s{(.+)\Q$TranslatedLabel\E(.+)}{$1 $CombinedLabel $2}smx;

$LayoutObject->Block(
Name => 'SelectedNewDynamicFields',
Data => {
Label => $DynamicFieldHTML->{Label},
Label => $HTMLLabel,
Field => $DynamicFieldHTML->{Field},
ID => $Key,
},
Expand All @@ -1333,11 +1371,13 @@ sub _MaskUpdate {
else {
push @AddNewDynamicFields, {
Key => $Key,
Value => $DynamicFieldConfig->{Name},
Value => $CombinedLabel,
};
}
}

@AddNewDynamicFields = sort { $a->{Value} cmp $b->{Value} } @AddNewDynamicFields;

my $NewDynamicFieldsStrg = $LayoutObject->BuildSelection(
PossibleNone => 1,
Data => \@AddNewDynamicFields,
Expand Down
Loading

0 comments on commit 5126ebd

Please sign in to comment.