Skip to content

Commit

Permalink
Issue #2251: Transferring changes from BaseSelect to BaseDatabase and…
Browse files Browse the repository at this point in the history
… BaseText.
  • Loading branch information
stefanhaerter committed Apr 14, 2023
1 parent d131f1e commit 9088366
Show file tree
Hide file tree
Showing 2 changed files with 74 additions and 93 deletions.
47 changes: 27 additions & 20 deletions Kernel/System/DynamicField/Driver/BaseDatabase.pm
Original file line number Diff line number Diff line change
Expand Up @@ -386,47 +386,54 @@ sub EditFieldRender {
$FieldTemplateFile = 'DynamicField/Customer/BaseDatabase';
}

my %ResultHTML;
my $Index = 0;
if ( $FieldConfig->{MultiValue} ) {
if ( @Values ) {
for my $MultiValue ( @Values ) {
if ( $Index > 0 ) {
$FieldTemplateData{FieldID} = $FieldTemplateData{FieldName} . '_' . $Index;
}
$FieldTemplateData{Value} = $MultiValue;
$ResultHTML{$Index} = $Param{LayoutObject}->Output(
'TemplateFile' => $FieldTemplateFile,
'Data' => \%FieldTemplateData,
);
$Index++;
my @ResultHTML;
if ( $FieldConfig->{MultiValue} && @Values ) {
for my $ValueIndex (0 .. $#Values ) {
if ( $ValueIndex ) {
$FieldTemplateData{FieldID} = $FieldTemplateData{FieldName} . '_' . $ValueIndex;
}
}
else {
$FieldTemplateData{Value} = '';
$ResultHTML{$Index} = $Param{LayoutObject}->Output(
$FieldTemplateData{Value} = $Values[$ValueIndex];
push @ResultHTML, $Param{LayoutObject}->Output(
'TemplateFile' => $FieldTemplateFile,
'Data' => \%FieldTemplateData,
);
}
}
else {
$ResultHTML{$Index} = $Param{LayoutObject}->Output(
push @ResultHTML, $Param{LayoutObject}->Output(
'TemplateFile' => $FieldTemplateFile,
'Data' => \%FieldTemplateData,
);
}

my $TemplateHTML;
if ( $FieldConfig->{MultiValue} && !$Param{ReadOnly} ) {
$TemplateHTML = $Param{LayoutObject}->Output(
'TemplateFile' => $FieldTemplateFile,
'Data' => {
%FieldTemplateData,
FieldName => $FieldTemplateData{FieldName} . '_Template',
}
);
}

$Param{LayoutObject}->AddJSData(
Key => 'ActiveAutoComplete',
Value => $ActiveAutoComplete,
);

my $Data = {
HTML => \%ResultHTML,
Label => $LabelString,
};

if ( $FieldConfig->{MultiValue} ) {
$Data->{MultiValue} = \@ResultHTML,
$Data->{MultiValueTemplate} = $TemplateHTML,
}
else {
$Data->{Field} = $ResultHTML[0];
}

return $Data;
}

Expand Down
120 changes: 47 additions & 73 deletions Kernel/System/DynamicField/Driver/BaseText.pm
Original file line number Diff line number Diff line change
Expand Up @@ -268,19 +268,18 @@ sub EditFieldRender {
);

# set values from ParamObject if present
if ( IsArrayRefWithData( $FieldValue ) ) {
$Value = $FieldValue;
if ( $FieldConfig->{MultiValue} ) {
if ( $FieldValue->@* ) {
$Value = $FieldValue;
}
}
elsif ( ref $FieldValue ne 'ARRAY' && $FieldValue ) {
$Value = [ $FieldValue ];
elsif ( defined $FieldValue ) {
$Value = $FieldValue;
}

if ( ref $Value ne 'ARRAY' && $Value ) {
if ( !ref $Value ) {
$Value = [ $Value ];
}
elsif ( !$Value ) {
undef $Value;
}

# check and set class if necessary
my $FieldClass = 'DynamicFieldText W50pc';
Expand All @@ -298,64 +297,56 @@ sub EditFieldRender {
$FieldClass .= ' ServerError';
}

my $ValueEscaped = $Param{LayoutObject}->Ascii2Html(
Text => '',
);

my $FieldLabelEscaped = $Param{LayoutObject}->Ascii2Html(
Text => $FieldLabel,
);

my @FieldTemplateData;
if ( !IsArrayRefWithData($Value) ) {
push @FieldTemplateData, {
'FieldClass' => $FieldClass,
'FieldName' => $FieldName,
'FieldLabelEscaped' => $FieldLabelEscaped,
'ValueEscaped' => $ValueEscaped,
'DivID' => $FieldName,
'MultiValue' => $FieldConfig->{MultiValue} || 0,
'ReadOnly' => $Param{ReadOnly},
};
my %FieldTemplateData = (
'FieldClass' => $FieldClass,
'FieldName' => $FieldName,
'FieldLabelEscaped' => $FieldLabelEscaped,
'DivID' => $FieldName,
'MultiValue' => $FieldConfig->{MultiValue} || 0,
'ReadOnly' => $Param{ReadOnly},
);

my $TemplateFile = 'DynamicField/Agent/BaseText';
if ( $Param{CustomerInterface} ) {
$TemplateFile = 'DynamicField/Customer/BaseText';
}

if ( IsArrayRefWithData($Value) ) {
for my $ValueItem (@{ $Value }) {
# set values from ParamObject if present
if ( defined $ValueItem ) {
$Value = $ValueItem;
}
my @ResultHTML;
for my $ValueIndex ( 0 .. $#{ $Value } ) {
my $ValueItem = $Value->[$ValueIndex];
$FieldTemplateData{FieldID} = $FieldTemplateData{FieldName} . ( $ValueIndex ? '_' . $ValueIndex : '' );

my $ValueEscaped = $Param{LayoutObject}->Ascii2Html(
Text => $ValueItem,
);
# set values from ParamObject if present
if ( defined $ValueItem ) {
$Value = $ValueItem;
}

my %FieldTemplateInfo = (
'FieldClass' => $FieldClass,
'FieldName' => $FieldName,
'FieldLabelEscaped' => $FieldLabelEscaped,
'ValueEscaped' => $ValueEscaped,
'DivID' => $FieldName,
'MultiValue' => $FieldConfig->{MultiValue} || 0,
'ReadOnly' => $Param{ReadOnly},
);
my $ValueEscaped = $Param{LayoutObject}->Ascii2Html(
Text => $ValueItem,
);

if ( $Param{Mandatory} ) {
$FieldTemplateInfo{DivIDMandatory} = $FieldName . 'Error';
$FieldTemplateData{ValueEscaped} = $ValueEscaped;

$FieldTemplateInfo{FieldRequiredMessage} = Translatable("This field is required.");
push @ResultHTML, $Param{LayoutObject}->Output(
'TemplateFile' => $TemplateFile,
'Data' => \%FieldTemplateData,
);
}

$FieldTemplateInfo{Mandatory} = $Param{Mandatory};
}
my $TemplateHTML;
if ( $FieldConfig->{MultiValue} && !$Param{ReadOnly} ) {

if ( $Param{ServerError} ) {
$FieldTemplateInfo{ErrorMessage} = Translatable( $Param{ErrorMessage} || 'This field is required.' );
$FieldTemplateInfo{DivIDServerError} = $FieldName . 'ServerError';
$FieldTemplateInfo{ServerError} = $Param{ServerError};
}
$FieldTemplateData{FieldID} = $FieldTemplateData{FieldName} . '_Template';

$TemplateHTML = $Param{LayoutObject}->Output(
'TemplateFile' => $TemplateFile,
'Data' => \%FieldTemplateData,
);

push @FieldTemplateData, \%FieldTemplateInfo;
}
}

# call EditLabelRender on the common Driver
Expand All @@ -365,33 +356,16 @@ sub EditFieldRender {
FieldName => $FieldName,
);

my $FieldTemplateFile = 'DynamicField/Agent/BaseText';
if ( $Param{CustomerInterface} ) {
$FieldTemplateFile = 'DynamicField/Customer/BaseText';
}

my %ResultHTML;
my $Index = 0;
for my $FieldTemplateInfo (@FieldTemplateData) {
if ( $FieldConfig->{MultiValue} && $Index > 0 ) {
$FieldTemplateInfo->{FieldID} = $FieldTemplateInfo->{FieldName} . '_' . $Index;
}
$ResultHTML{$Index} = $Param{LayoutObject}->Output(
'TemplateFile' => $FieldTemplateFile,
'Data' => $FieldTemplateInfo,
);
$Index++;
}

my $Data = {
Label => $LabelString,
};

if ( $FieldConfig->{MultiValue} ) {
$Data->{HTML} = \%ResultHTML;
$Data->{MultiValue} = \@ResultHTML;
$Data->{MultiValueTemplate} = $TemplateHTML;
}
else {
$Data->{Field} = $ResultHTML{"0"};
$Data->{Field} = $ResultHTML[0];
}

return $Data;
Expand Down

0 comments on commit 9088366

Please sign in to comment.