Skip to content

Commit

Permalink
Issue #2842: Enabled DF Set ReadableValueRender to handle empty string.
Browse files Browse the repository at this point in the history
  • Loading branch information
stefanhaerter committed Feb 15, 2024
1 parent 62fd037 commit 98a54e7
Showing 1 changed file with 47 additions and 27 deletions.
74 changes: 47 additions & 27 deletions Kernel/System/DynamicField/Driver/Set.pm
Original file line number Diff line number Diff line change
Expand Up @@ -290,13 +290,14 @@ sub EditFieldRender {
}

my $DynamicFieldHTML = $Kernel::OM->Get('Kernel::Output::HTML::DynamicField::Mask')->EditSectionRender(
Content => $Include,
DynamicFields => $DynamicField,
UpdatableFields => $Param{UpdatableFields},
LayoutObject => $Param{LayoutObject},
ParamObject => $Param{ParamObject},
DynamicFieldValues => $SetValue[$SetIndex],
CustomerInterface => $Param{CustomerInterface},
Content => $Include,
DynamicFields => $DynamicField,
UpdatableFields => $Param{UpdatableFields},
LayoutObject => $Param{LayoutObject},
ParamObject => $Param{ParamObject},
DynamicFieldValues => $SetValue[$SetIndex],
CustomerInterface => $Param{CustomerInterface},

# can be set by preceding GetFieldState()
PossibleValuesFilter => $Self->{PossibleValuesFilter}{ $Param{DynamicFieldConfig}->{Name} }[$SetIndex] // {},

Expand Down Expand Up @@ -336,6 +337,7 @@ sub EditFieldRender {
ParamObject => $Param{ParamObject},
DynamicFieldValues => \%TemplateValues,
CustomerInterface => $Param{CustomerInterface},

# can be set by preceding GetFieldState()
PossibleValuesFilter => $Self->{PossibleValuesFilter}{ $Param{DynamicFieldConfig}->{Name} }[ $#SetValue + 1 ] // {},
);
Expand Down Expand Up @@ -460,7 +462,7 @@ sub EditFieldValueValidate {
for my $SetIndex ( 0 .. $IndexMax ) {
$DynamicFieldConfig->{Name} = $Name . '_' . $SetIndex;

$Result->{ $DynamicField->{Name} } = $BackendObject->EditFieldValueValidate(
$Result->{ $DynamicFieldConfig->{Name} } = $BackendObject->EditFieldValueValidate(
%Param,
DynamicFieldConfig => $DynamicFieldConfig,
);
Expand Down Expand Up @@ -503,7 +505,7 @@ sub DisplayValueRender {
Include => $Include,
);

for my $Name ( @FieldOrdered ) {
for my $Name (@FieldOrdered) {
my $DynamicFieldConfig = $DynamicField->{$Name};
my $Label;

Expand Down Expand Up @@ -568,6 +570,17 @@ sub DisplayValueRender {
sub ReadableValueRender {
my ( $Self, %Param ) = @_;

my $Value = '';

# check value
my @Values = ();
if ( ref $Param{Value} eq 'ARRAY' ) {
@Values = @{ $Param{Value} };
}
elsif ( $Param{Value} ) {
@Values = ( $Param{Value} );
}

my $DynamicFieldObject = $Kernel::OM->Get('Kernel::System::DynamicField');
my $BackendObject = $Kernel::OM->Get('Kernel::System::DynamicField::Backend');

Expand All @@ -588,17 +601,17 @@ sub ReadableValueRender {
Include => $Include,
);

for my $Name ( @FieldOrdered ) {
for my $Name (@FieldOrdered) {
my $DynamicFieldConfig = $DynamicField->{$Name};

VALUE:
for my $SetIndex ( 0 .. $#{ $Param{Value} } ) {
next VALUE if !defined $Param{Value}[$SetIndex]{$Name};
for my $SetIndex ( 0 .. @Values ) {
next VALUE if !defined $Values[$SetIndex]{$Name};

my $Element = $BackendObject->ReadableValueRender(
%Param,
DynamicFieldConfig => $DynamicFieldConfig,
Value => $Param{Value}[$SetIndex]{$Name},
Value => $Values[$SetIndex]{$Name},
);

$SetValue{Value}[$SetIndex] .= " $DynamicFieldConfig->{Label}: $Element->{Value};";
Expand Down Expand Up @@ -686,7 +699,7 @@ sub ValueLookup {
Include => $Include,
);

for my $Name ( @FieldOrdered ) {
for my $Name (@FieldOrdered) {
my $DynamicFieldConfig = $DynamicField->{$Name};

VALUE:
Expand Down Expand Up @@ -738,14 +751,14 @@ sub GetFieldState {

for my $SetIndex ( 0 .. $#SetValue ) {
for my $Name ( $DynamicField->%* ) {
$DFParam{ "DynamicField_$Name" } = $SetValue[ $SetIndex ]{ $Name };
$DFParam{"DynamicField_$Name"} = $SetValue[$SetIndex]{$Name};
}

my $LoopProtection = 100;
my %SetFieldStates = $Param{FieldRestrictionsObject}->GetFieldStates(
%Param,
DynamicFields => $DynamicField,
GetParam => {
DynamicFields => $DynamicField,
GetParam => {
%GetParam,
%DFParam,
DynamicField => \%DFParam,
Expand All @@ -755,11 +768,14 @@ sub GetFieldState {
);

for my $Name ( sort keys $SetFieldStates{Fields}->%* ) {

# prepare the return used by the frontend modules for AJAX updates
$Return{Set}{$Name}{DynamicFieldConfig} = $DynamicField->{$Name};
$Return{Set}{$Name}{FieldStates}{ $Name . '_' . $SetIndex } = $SetFieldStates{Fields}{$Name};
$Return{Set}{$Name}{Values}{ $Name . '_' . $SetIndex } = exists $SetFieldStates{NewValues}{$Name} ?
$SetFieldStates{NewValues}{$Name} : $DFParam{ "DynamicField_$Name" };
$Return{Set}{$Name}{Values}{ $Name . '_' . $SetIndex } = exists $SetFieldStates{NewValues}{$Name}
?
$SetFieldStates{NewValues}{$Name}
: $DFParam{"DynamicField_$Name"};

# set the new value of the set itself copied to GetParam in the frontend modules
if ( $SetFieldStates{NewValues}{ 'DynamicField_' . $Name } ) {
Expand All @@ -773,14 +789,14 @@ sub GetFieldState {

if ( $SetConfig->{MultiValue} ) {
for my $Name ( $DynamicField->%* ) {
$DFParam{ "DynamicField_$Name" } = undef;
$DFParam{"DynamicField_$Name"} = undef;
}

my $LoopProtection = 100;
my %SetFieldStates = $Param{FieldRestrictionsObject}->GetFieldStates(
%Param,
DynamicFields => $DynamicField,
GetParam => {
DynamicFields => $DynamicField,
GetParam => {
%GetParam,
%DFParam,
DynamicField => \%DFParam,
Expand All @@ -790,16 +806,21 @@ sub GetFieldState {
);

for my $Name ( sort keys $SetFieldStates{Fields}->%* ) {

# prepare the return used by the frontend modules for AJAX updates
$Return{Set}{$Name}{DynamicFieldConfig} = $DynamicField->{$Name};
$Return{Set}{$Name}{FieldStates}{ $Name . '_Template' } = $SetFieldStates{Fields}{$Name};
$Return{Set}{$Name}{Values}{ $Name . '_Template' } = exists $SetFieldStates{NewValues}{$Name} ?
$SetFieldStates{NewValues}{$Name} : $DFParam{ "DynamicField_$Name" };
$Return{Set}{$Name}{Values}{ $Name . '_Template' } = exists $SetFieldStates{NewValues}{$Name}
?
$SetFieldStates{NewValues}{$Name}
: $DFParam{"DynamicField_$Name"};

# store the reduced possible values in this object for a possible subsequent EditFieldRender
$Self->{PossibleValuesFilter}{ $SetConfig->{Name} }[ $#SetValue + 1 ]{$Name} = $SetFieldStates{Fields}{$Name};
$Self->{TemplateValues}{ $SetConfig->{Name} }{$Name} = exists $SetFieldStates{NewValues}{$Name} ?
$SetFieldStates{NewValues}{$Name} : $DFParam{ "DynamicField_$Name" };
$Self->{TemplateValues}{ $SetConfig->{Name} }{$Name} = exists $SetFieldStates{NewValues}{$Name}
?
$SetFieldStates{NewValues}{$Name}
: $DFParam{"DynamicField_$Name"};
}
}

Expand Down Expand Up @@ -918,5 +939,4 @@ sub _GetIncludedFieldOrdered {
return @Return;
}


1;

0 comments on commit 98a54e7

Please sign in to comment.