Skip to content

Commit

Permalink
Issue #2842: Copied code for DF Set ACLs to other masks which use Get…
Browse files Browse the repository at this point in the history
…FieldStates().

Fixed minor bug in CustomerTicketProcess.
  • Loading branch information
stefanhaerter authored and svenoe committed Feb 15, 2024
1 parent d23bd80 commit fd432c4
Show file tree
Hide file tree
Showing 6 changed files with 363 additions and 1 deletion.
62 changes: 62 additions & 0 deletions Kernel/Modules/AgentTicketActionCommon.pm
Original file line number Diff line number Diff line change
Expand Up @@ -1413,6 +1413,7 @@ sub Run {
my %DynFieldStates = (
Visibility => {},
Fields => {},
Sets => {},
);

until ( $Convergence{Fields} ) {
Expand Down Expand Up @@ -1578,6 +1579,10 @@ sub Run {
%{ $DynFieldStates{Visibility} },
%{ $CurFieldStates{Visibility} },
};
$DynFieldStates{Sets} = {
%{ $DynFieldStates{Sets} },
%{ $CurFieldStates{Sets} },
};

# store new values
$GetParam{DynamicField} = {
Expand Down Expand Up @@ -1652,6 +1657,63 @@ sub Run {
};
}

for my $SetField ( values $DynFieldStates{Sets}->%* ) {
my $DynamicFieldConfig = $SetField->{DynamicFieldConfig};

# the frontend name is the name of the inner field including its index or the '_Template' suffix
DYNAMICFIELD:
for my $FrontendName ( keys $SetField->{FieldStates}->%* ) {

if ( $DynamicFieldConfig->{Config}{MultiValue} && ref $SetField->{Values}{$FrontendName} eq 'ARRAY' ) {
for my $i ( 0 .. $#{ $SetField->{Values}{$FrontendName} } ) {
my $DataValues = $SetField->{FieldStates}{$FrontendName}{NotACLReducible}
? $SetField->{Values}{$FrontendName}[$i]
:
(
$DynamicFieldBackendObject->BuildSelectionDataGet(
DynamicFieldConfig => $DynamicFieldConfig,
PossibleValues => $SetField->{FieldStates}{$FrontendName}{PossibleValues},
Value => [ $SetField->{Values}{$FrontendName}[$i] ],
)
|| $SetField->{FieldStates}{$FrontendName}{PossibleValues}
);

# add dynamic field to the list of fields to update
push @DynamicFieldAJAX, {
Name => 'DynamicField_' . $FrontendName . "_$i",
Data => $DataValues,
SelectedID => $SetField->{Values}{$FrontendName}[$i],
Translation => $DynamicFieldConfig->{Config}->{TranslatableValues} || 0,
Max => 100,
};
}

next DYNAMICFIELD;
}

my $DataValues = $SetField->{FieldStates}{$FrontendName}{NotACLReducible}
? $SetField->{Values}{$FrontendName}
:
(
$DynamicFieldBackendObject->BuildSelectionDataGet(
DynamicFieldConfig => $DynamicFieldConfig,
PossibleValues => $SetField->{FieldStates}{$FrontendName}{PossibleValues},
Value => $SetField->{Values}{$FrontendName},
)
|| $SetField->{FieldStates}{$FrontendName}{PossibleValues}
);

# add dynamic field to the list of fields to update
push @DynamicFieldAJAX, {
Name => 'DynamicField_' . $FrontendName,
Data => $DataValues,
SelectedID => $SetField->{Values}{$FrontendName},
Translation => $DynamicFieldConfig->{Config}->{TranslatableValues} || 0,
Max => 100,
};
}
}

if ( IsHashRefWithData( $DynFieldStates{Visibility} ) ) {
push @DynamicFieldAJAX, {
Name => 'Restrictions_Visibility',
Expand Down
62 changes: 62 additions & 0 deletions Kernel/Modules/AgentTicketEmail.pm
Original file line number Diff line number Diff line change
Expand Up @@ -2234,6 +2234,7 @@ sub Run {
my %DynFieldStates = (
Visibility => {},
Fields => {},
Sets => {},
);

until ( $Convergence{Fields} ) {
Expand Down Expand Up @@ -2408,6 +2409,10 @@ sub Run {
%{ $DynFieldStates{Visibility} },
%{ $CurFieldStates{Visibility} },
};
$DynFieldStates{Sets} = {
%{ $DynFieldStates{Sets} },
%{ $CurFieldStates{Sets} },
};

# store new values
$GetParam{DynamicField} = {
Expand Down Expand Up @@ -2492,6 +2497,63 @@ sub Run {
};
}

for my $SetField ( values $DynFieldStates{Sets}->%* ) {
my $DynamicFieldConfig = $SetField->{DynamicFieldConfig};

# the frontend name is the name of the inner field including its index or the '_Template' suffix
DYNAMICFIELD:
for my $FrontendName ( keys $SetField->{FieldStates}->%* ) {

if ( $DynamicFieldConfig->{Config}{MultiValue} && ref $SetField->{Values}{$FrontendName} eq 'ARRAY' ) {
for my $i ( 0 .. $#{ $SetField->{Values}{$FrontendName} } ) {
my $DataValues = $SetField->{FieldStates}{$FrontendName}{NotACLReducible}
? $SetField->{Values}{$FrontendName}[$i]
:
(
$DynamicFieldBackendObject->BuildSelectionDataGet(
DynamicFieldConfig => $DynamicFieldConfig,
PossibleValues => $SetField->{FieldStates}{$FrontendName}{PossibleValues},
Value => [ $SetField->{Values}{$FrontendName}[$i] ],
)
|| $SetField->{FieldStates}{$FrontendName}{PossibleValues}
);

# add dynamic field to the list of fields to update
push @DynamicFieldAJAX, {
Name => 'DynamicField_' . $FrontendName . "_$i",
Data => $DataValues,
SelectedID => $SetField->{Values}{$FrontendName}[$i],
Translation => $DynamicFieldConfig->{Config}->{TranslatableValues} || 0,
Max => 100,
};
}

next DYNAMICFIELD;
}

my $DataValues = $SetField->{FieldStates}{$FrontendName}{NotACLReducible}
? $SetField->{Values}{$FrontendName}
:
(
$DynamicFieldBackendObject->BuildSelectionDataGet(
DynamicFieldConfig => $DynamicFieldConfig,
PossibleValues => $SetField->{FieldStates}{$FrontendName}{PossibleValues},
Value => $SetField->{Values}{$FrontendName},
)
|| $SetField->{FieldStates}{$FrontendName}{PossibleValues}
);

# add dynamic field to the list of fields to update
push @DynamicFieldAJAX, {
Name => 'DynamicField_' . $FrontendName,
Data => $DataValues,
SelectedID => $SetField->{Values}{$FrontendName},
Translation => $DynamicFieldConfig->{Config}->{TranslatableValues} || 0,
Max => 100,
};
}
}

if ( IsHashRefWithData( $DynFieldStates{Visibility} ) ) {
push @DynamicFieldAJAX, {
Name => 'Restrictions_Visibility',
Expand Down
57 changes: 57 additions & 0 deletions Kernel/Modules/AgentTicketProcess.pm
Original file line number Diff line number Diff line change
Expand Up @@ -847,6 +847,63 @@ sub _RenderAjax {
};
}

for my $SetField ( values $DynFieldStates{Sets}->%* ) {
my $DynamicFieldConfig = $SetField->{DynamicFieldConfig};

# the frontend name is the name of the inner field including its index or the '_Template' suffix
DYNAMICFIELD:
for my $FrontendName ( keys $SetField->{FieldStates}->%* ) {

if ( $DynamicFieldConfig->{Config}{MultiValue} && ref $SetField->{Values}{$FrontendName} eq 'ARRAY' ) {
for my $i ( 0 .. $#{ $SetField->{Values}{$FrontendName} } ) {
my $DataValues = $SetField->{FieldStates}{$FrontendName}{NotACLReducible}
? $SetField->{Values}{$FrontendName}[$i]
:
(
$DynamicFieldBackendObject->BuildSelectionDataGet(
DynamicFieldConfig => $DynamicFieldConfig,
PossibleValues => $SetField->{FieldStates}{$FrontendName}{PossibleValues},
Value => [ $SetField->{Values}{$FrontendName}[$i] ],
)
|| $SetField->{FieldStates}{$FrontendName}{PossibleValues}
);

# add dynamic field to the list of fields to update
push @JSONCollector, {
Name => 'DynamicField_' . $FrontendName . "_$i",
Data => $DataValues,
SelectedID => $SetField->{Values}{$FrontendName}[$i],
Translation => $DynamicFieldConfig->{Config}->{TranslatableValues} || 0,
Max => 100,
};
}

next DYNAMICFIELD;
}

my $DataValues = $SetField->{FieldStates}{$FrontendName}{NotACLReducible}
? $SetField->{Values}{$FrontendName}
:
(
$DynamicFieldBackendObject->BuildSelectionDataGet(
DynamicFieldConfig => $DynamicFieldConfig,
PossibleValues => $SetField->{FieldStates}{$FrontendName}{PossibleValues},
Value => $SetField->{Values}{$FrontendName},
)
|| $SetField->{FieldStates}{$FrontendName}{PossibleValues}
);

# add dynamic field to the list of fields to update
push @JSONCollector, {
Name => 'DynamicField_' . $FrontendName,
Data => $DataValues,
SelectedID => $SetField->{Values}{$FrontendName},
Translation => $DynamicFieldConfig->{Config}->{TranslatableValues} || 0,
Max => 100,
};
}
}

my $JSON = $LayoutObject->BuildSelectionJSON( [@JSONCollector] );

return $LayoutObject->Attachment(
Expand Down
62 changes: 62 additions & 0 deletions Kernel/Modules/CustomerTicketMessage.pm
Original file line number Diff line number Diff line change
Expand Up @@ -1136,6 +1136,7 @@ sub Run {
my %DynFieldStates = (
Visibility => {},
Fields => {},
Sets => {},
);

until ( $Convergence{Fields} ) {
Expand Down Expand Up @@ -1305,6 +1306,10 @@ sub Run {
%{ $DynFieldStates{Visibility} },
%{ $CurFieldStates{Visibility} },
};
$DynFieldStates{Sets} = {
%{ $DynFieldStates{Sets} },
%{ $CurFieldStates{Sets} },
};

# store new values
$GetParam{DynamicField} = {
Expand Down Expand Up @@ -1381,6 +1386,63 @@ sub Run {
};
}

for my $SetField ( values $DynFieldStates{Sets}->%* ) {
my $DynamicFieldConfig = $SetField->{DynamicFieldConfig};

# the frontend name is the name of the inner field including its index or the '_Template' suffix
DYNAMICFIELD:
for my $FrontendName ( keys $SetField->{FieldStates}->%* ) {

if ( $DynamicFieldConfig->{Config}{MultiValue} && ref $SetField->{Values}{$FrontendName} eq 'ARRAY' ) {
for my $i ( 0 .. $#{ $SetField->{Values}{$FrontendName} } ) {
my $DataValues = $SetField->{FieldStates}{$FrontendName}{NotACLReducible}
? $SetField->{Values}{$FrontendName}[$i]
:
(
$BackendObject->BuildSelectionDataGet(
DynamicFieldConfig => $DynamicFieldConfig,
PossibleValues => $SetField->{FieldStates}{$FrontendName}{PossibleValues},
Value => [ $SetField->{Values}{$FrontendName}[$i] ],
)
|| $SetField->{FieldStates}{$FrontendName}{PossibleValues}
);

# add dynamic field to the list of fields to update
push @DynamicFieldAJAX, {
Name => 'DynamicField_' . $FrontendName . "_$i",
Data => $DataValues,
SelectedID => $SetField->{Values}{$FrontendName}[$i],
Translation => $DynamicFieldConfig->{Config}->{TranslatableValues} || 0,
Max => 100,
};
}

next DYNAMICFIELD;
}

my $DataValues = $SetField->{FieldStates}{$FrontendName}{NotACLReducible}
? $SetField->{Values}{$FrontendName}
:
(
$BackendObject->BuildSelectionDataGet(
DynamicFieldConfig => $DynamicFieldConfig,
PossibleValues => $SetField->{FieldStates}{$FrontendName}{PossibleValues},
Value => $SetField->{Values}{$FrontendName},
)
|| $SetField->{FieldStates}{$FrontendName}{PossibleValues}
);

# add dynamic field to the list of fields to update
push @DynamicFieldAJAX, {
Name => 'DynamicField_' . $FrontendName,
Data => $DataValues,
SelectedID => $SetField->{Values}{$FrontendName},
Translation => $DynamicFieldConfig->{Config}->{TranslatableValues} || 0,
Max => 100,
};
}
}

if ( IsHashRefWithData( $DynFieldStates{Visibility} ) ) {
push @DynamicFieldAJAX, {
Name => 'Restrictions_Visibility',
Expand Down
59 changes: 58 additions & 1 deletion Kernel/Modules/CustomerTicketProcess.pm
Original file line number Diff line number Diff line change
Expand Up @@ -476,6 +476,63 @@ sub _RenderAjax {
$DynFieldStates{NewValues}->%*,
};

for my $SetField ( values $DynFieldStates{Sets}->%* ) {
my $DynamicFieldConfig = $SetField->{DynamicFieldConfig};

# the frontend name is the name of the inner field including its index or the '_Template' suffix
DYNAMICFIELD:
for my $FrontendName ( keys $SetField->{FieldStates}->%* ) {

if ( $DynamicFieldConfig->{Config}{MultiValue} && ref $SetField->{Values}{$FrontendName} eq 'ARRAY' ) {
for my $i ( 0 .. $#{ $SetField->{Values}{$FrontendName} } ) {
my $DataValues = $SetField->{FieldStates}{$FrontendName}{NotACLReducible}
? $SetField->{Values}{$FrontendName}[$i]
:
(
$DynamicFieldBackendObject->BuildSelectionDataGet(
DynamicFieldConfig => $DynamicFieldConfig,
PossibleValues => $SetField->{FieldStates}{$FrontendName}{PossibleValues},
Value => [ $SetField->{Values}{$FrontendName}[$i] ],
)
|| $SetField->{FieldStates}{$FrontendName}{PossibleValues}
);

# add dynamic field to the list of fields to update
push @JSONCollector, {
Name => 'DynamicField_' . $FrontendName . "_$i",
Data => $DataValues,
SelectedID => $SetField->{Values}{$FrontendName}[$i],
Translation => $DynamicFieldConfig->{Config}->{TranslatableValues} || 0,
Max => 100,
};
}

next DYNAMICFIELD;
}

my $DataValues = $SetField->{FieldStates}{$FrontendName}{NotACLReducible}
? $SetField->{Values}{$FrontendName}
:
(
$DynamicFieldBackendObject->BuildSelectionDataGet(
DynamicFieldConfig => $DynamicFieldConfig,
PossibleValues => $SetField->{FieldStates}{$FrontendName}{PossibleValues},
Value => $SetField->{Values}{$FrontendName},
)
|| $SetField->{FieldStates}{$FrontendName}{PossibleValues}
);

# add dynamic field to the list of fields to update
push @JSONCollector, {
Name => 'DynamicField_' . $FrontendName,
Data => $DataValues,
SelectedID => $SetField->{Values}{$FrontendName},
Translation => $DynamicFieldConfig->{Config}->{TranslatableValues} || 0,
Max => 100,
};
}
}

# attach process suffix to dynamic field names in visibility hash
my %VisibilitySuffixed = map { $_ . $Self->{IDSuffix} => $DynFieldStates{Visibility}{$_} } keys $DynFieldStates{Visibility}->%*;

Expand Down Expand Up @@ -3158,7 +3215,7 @@ sub _StoreActivityDialog {
}

# skip fields which are hidden by ACLs
elsif ( !$Visibility{ 'DynamicField_' . $DynamicFieldConfig->{Name} } ) {
elsif ( !$Visibility{ 'DynamicField_' . $DynamicFieldName } ) {
next DYNAMICFIELD;
}

Expand Down
Loading

0 comments on commit fd432c4

Please sign in to comment.