Skip to content

Commit

Permalink
Issue #2763: Enabled SearchObjects functions of df reference drivers …
Browse files Browse the repository at this point in the history
…to fetch values from ParamObject.
  • Loading branch information
stefanhaerter committed Dec 11, 2023
1 parent 0ce94c8 commit 9b47dfe
Show file tree
Hide file tree
Showing 8 changed files with 126 additions and 13 deletions.
1 change: 1 addition & 0 deletions Kernel/Modules/AgentReferenceSearch.pm
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,7 @@ sub Run {
Term => $Term,
MaxResults => $MaxResults,
UserID => 1, # TODO: what about Permission check
ParamObject => $ParamObject,
);

my @Results;
Expand Down
1 change: 1 addition & 0 deletions Kernel/System/DynamicField/Backend.pm
Original file line number Diff line number Diff line change
Expand Up @@ -3017,6 +3017,7 @@ This is used in auto completion when searching for possible object IDs.
Term => $Term,
MaxResults => $MaxResults,
UserID => 1,
ParamObject => $ParamObject,
);
=cut
Expand Down
31 changes: 29 additions & 2 deletions Kernel/System/DynamicField/Driver/Agent.pm
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@

package Kernel::System::DynamicField::Driver::Agent;

## nofilter(TidyAll::Plugin::OTOBO::Perl::ParamObject)

use v5.24;
use strict;
use warnings;
Expand All @@ -30,9 +32,11 @@ use parent qw(Kernel::System::DynamicField::Driver::BaseReference);

# OTOBO modules
use Kernel::Language qw(Translatable);
use Kernel::System::VariableCheck qw(IsArrayRefWithData);
use Kernel::System::VariableCheck qw(IsArrayRefWithData IsHashRefWithData);

our @ObjectDependencies = (
'Kernel::System::DynamicField',
'Kernel::System::DynamicField::Backend',
'Kernel::System::Group',
'Kernel::System::Log',
'Kernel::System::User',
Expand Down Expand Up @@ -215,6 +219,10 @@ This is used in auto completion when searching for possible object IDs.
Term => $Term,
MaxResults => $MaxResults,
UserID => 1,
Object => {
%Data,
},
ParamObject => $ParamObject,
);
=cut
Expand All @@ -241,7 +249,26 @@ sub SearchObjects {
if ( $FilterItem->{EqualsObjectAttribute} ) {

# don't perform search if object attribute to search for is empty
my $EqualsObjectAttribute = $Param{Object}{DynamicField}{ $FilterItem->{EqualsObjectAttribute} } // $Param{Object}{ $FilterItem->{EqualsObjectAttribute} };
my $EqualsObjectAttribute;
if ( IsHashRefWithData( $Param{Object} ) ) {
$EqualsObjectAttribute = $Param{Object}{DynamicField}{ $FilterItem->{EqualsObjectAttribute} } // $Param{Object}{ $FilterItem->{EqualsObjectAttribute} };
}
elsif ( defined $Param{ParamObject} ) {
if ( $FilterItem->{EqualsObjectAttribute} =~ /^DynamicField_(?<DFName>\S+)/ ) {
my $FilterItemDFConfig = $Kernel::OM->Get('Kernel::System::DynamicField')->DynamicFieldGet(
Name => $+{DFName},
);
next FILTERITEM unless IsHashRefWithData($FilterItemDFConfig);
$EqualsObjectAttribute = $Kernel::OM->Get('Kernel::System::DynamicField::Backend')->EditFieldValueGet(
ParamObject => $Param{ParamObject},
DynamicFieldConfig => $FilterItemDFConfig,
TransformDates => 0,
);
}
else {
$EqualsObjectAttribute = $Param{ParamObject}->GetParam( Param => $FilterItem->{EqualsObjectAttribute} );
}
}
return unless $EqualsObjectAttribute;
return if ( ref $EqualsObjectAttribute eq 'ARRAY' && !$EqualsObjectAttribute->@* );

Expand Down
3 changes: 2 additions & 1 deletion Kernel/System/DynamicField/Driver/BaseReference.pm
Original file line number Diff line number Diff line change
Expand Up @@ -915,6 +915,7 @@ A wrapper for SearchObjects method.
Object => { # optional
%TicketData,
},
ParamObject => $ParamObject, # optional
);
=cut
Expand All @@ -938,7 +939,7 @@ sub PossibleValuesGet {
%PossibleValues = ( '' => '-' );
}

# passing $Param{Object} to SearchObjects()
# passing $Param{ParamObject} or $Param{Object} to SearchObjects()
my @SearchResult = $Self->SearchObjects(
%Param,
);
Expand Down
30 changes: 29 additions & 1 deletion Kernel/System/DynamicField/Driver/CustomerCompany.pm
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@

package Kernel::System::DynamicField::Driver::CustomerCompany;

## nofilter(TidyAll::Plugin::OTOBO::Perl::ParamObject)

use v5.24;
use strict;
use warnings;
Expand All @@ -30,8 +32,11 @@ use parent qw(Kernel::System::DynamicField::Driver::BaseReference);

# OTOBO modules
use Kernel::Language qw(Translatable);
use Kernel::System::VariableCheck qw(IsHashRefWithData);

our @ObjectDependencies = (
'Kernel::System::DynamicField',
'Kernel::System::DynamicField::Backend',
'Kernel::System::Log',
'Kernel::System::CustomerCompany',
);
Expand Down Expand Up @@ -196,6 +201,10 @@ This is used in auto completion when searching for possible object IDs.
Term => $Term,
MaxResults => $MaxResults,
UserID => 1,
Object => {
%Data,
},
ParamObject => $ParamObject,
);
=cut
Expand All @@ -222,7 +231,26 @@ sub SearchObjects {
if ( $FilterItem->{EqualsObjectAttribute} ) {

# don't perform search if object attribute to search for is empty
my $EqualsObjectAttribute = $Param{Object}{DynamicField}{ $FilterItem->{EqualsObjectAttribute} } // $Param{Object}{ $FilterItem->{EqualsObjectAttribute} };
my $EqualsObjectAttribute;
if ( IsHashRefWithData( $Param{Object} ) ) {
$EqualsObjectAttribute = $Param{Object}{DynamicField}{ $FilterItem->{EqualsObjectAttribute} } // $Param{Object}{ $FilterItem->{EqualsObjectAttribute} };
}
elsif ( defined $Param{ParamObject} ) {
if ( $FilterItem->{EqualsObjectAttribute} =~ /^DynamicField_(?<DFName>\S+)/ ) {
my $FilterItemDFConfig = $Kernel::OM->Get('Kernel::System::DynamicField')->DynamicFieldGet(
Name => $+{DFName},
);
next FILTERITEM unless IsHashRefWithData($FilterItemDFConfig);
$EqualsObjectAttribute = $Kernel::OM->Get('Kernel::System::DynamicField::Backend')->EditFieldValueGet(
ParamObject => $Param{ParamObject},
DynamicFieldConfig => $FilterItemDFConfig,
TransformDates => 0,
);
}
else {
$EqualsObjectAttribute = $Param{ParamObject}->GetParam( Param => $FilterItem->{EqualsObjectAttribute} );
}
}
return unless $EqualsObjectAttribute;
return if ( ref $EqualsObjectAttribute eq 'ARRAY' && !$EqualsObjectAttribute->@* );

Expand Down
30 changes: 29 additions & 1 deletion Kernel/System/DynamicField/Driver/CustomerUser.pm
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@

package Kernel::System::DynamicField::Driver::CustomerUser;

## nofilter(TidyAll::Plugin::OTOBO::Perl::ParamObject)

use v5.24;
use strict;
use warnings;
Expand All @@ -29,10 +31,13 @@ use parent qw(Kernel::System::DynamicField::Driver::BaseReference);
# CPAN modules

# OTOBO modules
use Kernel::System::VariableCheck qw(IsHashRefWithData);
use Kernel::Language qw(Translatable);

our @ObjectDependencies = (
'Kernel::System::CustomerUser',
'Kernel::System::DynamicField',
'Kernel::System::DynamicField::Backend',
'Kernel::System::Log',
);

Expand Down Expand Up @@ -195,6 +200,10 @@ This is used in auto completion when searching for possible object IDs.
Term => $Term,
MaxResults => $MaxResults,
UserID => 1,
Object => {
%Data,
},
ParamObject => $ParamObject,
);
=cut
Expand All @@ -221,7 +230,26 @@ sub SearchObjects {
if ( $FilterItem->{EqualsObjectAttribute} ) {

# don't perform search if object attribute to search for is empty
my $EqualsObjectAttribute = $Param{Object}{DynamicField}{ $FilterItem->{EqualsObjectAttribute} } // $Param{Object}{ $FilterItem->{EqualsObjectAttribute} };
my $EqualsObjectAttribute;
if ( IsHashRefWithData( $Param{Object} ) ) {
$EqualsObjectAttribute = $Param{Object}{DynamicField}{ $FilterItem->{EqualsObjectAttribute} } // $Param{Object}{ $FilterItem->{EqualsObjectAttribute} };
}
elsif ( defined $Param{ParamObject} ) {
if ( $FilterItem->{EqualsObjectAttribute} =~ /^DynamicField_(?<DFName>\S+)/ ) {
my $FilterItemDFConfig = $Kernel::OM->Get('Kernel::System::DynamicField')->DynamicFieldGet(
Name => $+{DFName},
);
next FILTERITEM unless IsHashRefWithData($FilterItemDFConfig);
$EqualsObjectAttribute = $Kernel::OM->Get('Kernel::System::DynamicField::Backend')->EditFieldValueGet(
ParamObject => $Param{ParamObject},
DynamicFieldConfig => $FilterItemDFConfig,
TransformDates => 0,
);
}
else {
$EqualsObjectAttribute = $Param{ParamObject}->GetParam( Param => $FilterItem->{EqualsObjectAttribute} );
}
}
return unless $EqualsObjectAttribute;
return if ( ref $EqualsObjectAttribute eq 'ARRAY' && !$EqualsObjectAttribute->@* );

Expand Down
30 changes: 29 additions & 1 deletion Kernel/System/DynamicField/Driver/Ticket.pm
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@

package Kernel::System::DynamicField::Driver::Ticket;

## nofilter(TidyAll::Plugin::OTOBO::Perl::ParamObject)

use v5.24;
use strict;
use warnings;
Expand All @@ -30,9 +32,12 @@ use parent qw(Kernel::System::DynamicField::Driver::BaseReference);

# OTOBO modules
use Kernel::Language qw(Translatable);
use Kernel::System::VariableCheck qw(IsHashRefWithData);

our @ObjectDependencies = (
'Kernel::Config',
'Kernel::System::DynamicField',
'Kernel::System::DynamicField::Backend',
'Kernel::System::Log',
'Kernel::System::Ticket',
'Kernel::System::Type',
Expand Down Expand Up @@ -232,6 +237,10 @@ This is used in auto completion when searching for possible object IDs.
Term => $Term,
MaxResults => $MaxResults,
UserID => 1,
Object => {
%Data,
},
ParamObject => $ParamObject,
);
=cut
Expand Down Expand Up @@ -264,7 +273,26 @@ sub SearchObjects {
if ( $FilterItem->{EqualsObjectAttribute} ) {

# don't perform search if object attribute to search for is empty
my $EqualsObjectAttribute = $Param{Object}{DynamicField}{ $FilterItem->{EqualsObjectAttribute} } // $Param{Object}{ $FilterItem->{EqualsObjectAttribute} };
my $EqualsObjectAttribute;
if ( IsHashRefWithData( $Param{Object} ) ) {
$EqualsObjectAttribute = $Param{Object}{DynamicField}{ $FilterItem->{EqualsObjectAttribute} } // $Param{Object}{ $FilterItem->{EqualsObjectAttribute} };
}
elsif ( defined $Param{ParamObject} ) {
if ( $FilterItem->{EqualsObjectAttribute} =~ /^DynamicField_(?<DFName>\S+)/ ) {
my $FilterItemDFConfig = $Kernel::OM->Get('Kernel::System::DynamicField')->DynamicFieldGet(
Name => $+{DFName},
);
next FILTERITEM unless IsHashRefWithData($FilterItemDFConfig);
$EqualsObjectAttribute = $Kernel::OM->Get('Kernel::System::DynamicField::Backend')->EditFieldValueGet(
ParamObject => $Param{ParamObject},
DynamicFieldConfig => $FilterItemDFConfig,
TransformDates => 0,
);
}
else {
$EqualsObjectAttribute = $Param{ParamObject}->GetParam( Param => $FilterItem->{EqualsObjectAttribute} );
}
}
return unless $EqualsObjectAttribute;
return if ( ref $EqualsObjectAttribute eq 'ARRAY' && !$EqualsObjectAttribute->@* );

Expand Down
13 changes: 6 additions & 7 deletions var/httpd/htdocs/js/Core.Agent.DynamicFieldReferenceSearch.js
Original file line number Diff line number Diff line change
Expand Up @@ -111,12 +111,11 @@ Core.Agent.DynamicFieldReferenceSearch = (function(TargetNS) {
source: function(Request, Response) {

var URL = Core.Config.Get('Baselink'),
Data = {
Action: 'AgentReferenceSearch',
Term: Request.term,
Field: $Element.attr('id'),
MaxResults: AutoCompleteConfig.MaxResultsDisplayed
};
QueryString = "Action=AgentReferenceSearch;Term=" + Request.term
+ ";Field=" + $Element.attr('id')
+ ";MaxResults=" + AutoCompleteConfig.MaxResultsDisplayed + ";";

QueryString += Core.AJAX.SerializeForm($Element.closest('form'), {'Action': 1, 'Subaction': 1, 'Term': 1, 'Field': 1, 'MaxResults': 1});

// If an old ajax request is already running, stop the old request and start the new one.
if($Element.data('AutoCompleteXHR')) {
Expand All @@ -126,7 +125,7 @@ Core.Agent.DynamicFieldReferenceSearch = (function(TargetNS) {
Response({});
}

$Element.data('AutoCompleteXHR', Core.AJAX.FunctionCall(URL, Data, function(Result) {
$Element.data('AutoCompleteXHR', Core.AJAX.FunctionCall(URL, QueryString, function(Result) {
var ValueData = [];
$Element.removeData('AutoCompleteXHR');
$.each(Result, function() {
Expand Down

0 comments on commit 9b47dfe

Please sign in to comment.