# -- # Copyright (C) 2001-2019 OTRS AG, https://otrs.com/ # -- # This software comes with ABSOLUTELY NO WARRANTY. For details, see # the enclosed file COPYING for license information (GPL). If you # did not receive this file, see https://www.gnu.org/licenses/gpl-3.0.txt. # -- package Kernel::System::DynamicField::Driver::ProcessManagement::ProcessID; use strict; use warnings; use Kernel::System::VariableCheck qw(:all); use parent qw(Kernel::System::DynamicField::Driver::BaseText); our @ObjectDependencies = ( 'Kernel::Config', 'Kernel::System::DynamicFieldValue', 'Kernel::System::Main', 'Kernel::System::ProcessManagement::Process', 'Kernel::System::ProcessManagement::DB::Process', 'Kernel::System::Ticket::ColumnFilter', ); =head1 NAME Kernel::System::DynamicField::Driver::ProcessManagement::ProcessID =head1 DESCRIPTION DynamicFields Text Driver delegate =head1 PUBLIC INTERFACE This module implements the public interface of L. Please look there for a detailed reference of the functions. =head2 new() usually, you want to create an instance of this by using Kernel::System::DynamicField::Backend->new(); =cut sub new { my ( $Type, %Param ) = @_; # allocate new hash for object my $Self = {}; bless( $Self, $Type ); # set field behaviors $Self->{Behaviors} = { 'IsACLReducible' => 0, 'IsNotificationEventCondition' => 1, 'IsSortable' => 1, 'IsFiltrable' => 1, 'IsStatsCondition' => 1, 'IsCustomerInterfaceCapable' => 1, }; # get the Dynamic Field Backend custom extensions my $DynamicFieldDriverExtensions = $Kernel::OM->Get('Kernel::Config')->Get('DynamicFields::Extension::Driver::Text'); EXTENSION: for my $ExtensionKey ( sort keys %{$DynamicFieldDriverExtensions} ) { # skip invalid extensions next EXTENSION if !IsHashRefWithData( $DynamicFieldDriverExtensions->{$ExtensionKey} ); # create a extension config shortcut my $Extension = $DynamicFieldDriverExtensions->{$ExtensionKey}; # check if extension has a new module if ( $Extension->{Module} ) { # check if module can be loaded if ( !$Kernel::OM->Get('Kernel::System::Main')->RequireBaseClass( $Extension->{Module} ) ) { die "Can't load dynamic fields backend module" . " $Extension->{Module}! $@"; } } # check if extension contains more behaviors if ( IsHashRefWithData( $Extension->{Behaviors} ) ) { %{ $Self->{Behaviors} } = ( %{ $Self->{Behaviors} }, %{ $Extension->{Behaviors} } ); } } return $Self; } sub DisplayValueRender { my ( $Self, %Param ) = @_; # set HTMLOutput as default if not specified if ( !defined $Param{HTMLOutput} ) { $Param{HTMLOutput} = 1; } # get raw Title and Value strings from field value # convert the ProcessEntityID to the Process name my $Process; if ( $Param{Value} ) { $Process = $Kernel::OM->Get('Kernel::System::ProcessManagement::Process')->ProcessGet( ProcessEntityID => $Param{Value}, ); } my $Value = $Process->{Name} // ''; my $Title = $Value; # HTMLOutput transformations if ( $Param{HTMLOutput} ) { $Value = $Param{LayoutObject}->Ascii2Html( Text => $Value, Max => $Param{ValueMaxChars} || '', ); $Title = $Param{LayoutObject}->Ascii2Html( Text => $Title, Max => $Param{TitleMaxChars} || '', ); } else { if ( $Param{ValueMaxChars} && length($Value) > $Param{ValueMaxChars} ) { $Value = substr( $Value, 0, $Param{ValueMaxChars} ) . '...'; } if ( $Param{TitleMaxChars} && length($Title) > $Param{TitleMaxChars} ) { $Title = substr( $Title, 0, $Param{TitleMaxChars} ) . '...'; } } # set field link form config my $Link = $Param{DynamicFieldConfig}->{Config}->{Link} || ''; # create return structure my $Data = { Value => $Value, Title => $Title, Link => $Link, }; return $Data; } sub ColumnFilterValuesGet { my ( $Self, %Param ) = @_; # take config from field config my $FieldConfig = $Param{DynamicFieldConfig}->{Config}; # set PossibleValues my $SelectionData = $Kernel::OM->Get('Kernel::System::ProcessManagement::Process')->ProcessList( ProcessState => [ 'Active', 'FadeAway', 'Inactive' ], Interface => 'all', ); # get column filter values from database my $ColumnFilterValues = $Kernel::OM->Get('Kernel::System::Ticket::ColumnFilter')->DynamicFieldFilterValuesGet( TicketIDs => $Param{TicketIDs}, FieldID => $Param{DynamicFieldConfig}->{ID}, ValueType => 'Text', ); # get the display value if still exist in dynamic field configuration for my $Key ( sort keys %{$ColumnFilterValues} ) { if ( $SelectionData->{$Key} ) { $ColumnFilterValues->{$Key} = $SelectionData->{$Key}; } } return $ColumnFilterValues; } sub SearchFieldParameterBuild { my ( $Self, %Param ) = @_; # Get field value. my $Value = $Self->SearchFieldValueGet(%Param); # Set operator. my $Operator = 'Equals'; # Search for a wild card in the value. if ( $Value && ( $Value =~ m{\*} || $Value =~ m{\|\|} ) ) { # Change operator. $Operator = 'Like'; } if ( $Param{DynamicFieldConfig}->{Name} eq 'ProcessManagementProcessID' && $Value ) { my $ProcessEntityIDs = $Kernel::OM->Get('Kernel::System::ProcessManagement::DB::Process')->ProcessSearch( ProcessName => $Value, ); if ( IsArrayRefWithData($ProcessEntityIDs) ) { # Add search term from input field. push @{$ProcessEntityIDs}, $Value; # Return search parameter structure. return { Parameter => { $Operator => $ProcessEntityIDs, }, Display => $Value, }; } } # Return search parameter structure. return { Parameter => { $Operator => $Value, }, Display => $Value, }; } sub StatsSearchFieldParameterBuild { my ( $Self, %Param ) = @_; my $Value = $Param{Value}; # set operator my $Operator = 'Equals'; # search for a wild card in the value if ( $Value && $Value =~ m{\*} ) { # change operator $Operator = 'Like'; } if ( $Param{DynamicFieldConfig}->{Name} eq 'ProcessManagementProcessID' && $Value ) { my $ProcessEntityIDs = $Kernel::OM->Get('Kernel::System::ProcessManagement::DB::Process')->ProcessSearch( ProcessName => $Value, ); if ( IsArrayRefWithData($ProcessEntityIDs) ) { # Add search term from input field. push @{$ProcessEntityIDs}, $Value; # Return search parameter structure. return { $Operator => $ProcessEntityIDs, }; } } return { $Operator => $Value, }; } 1; =head1 TERMS AND CONDITIONS This software is part of the OTRS project (L). This software comes with ABSOLUTELY NO WARRANTY. For details, see the enclosed file COPYING for license information (GPL). If you did not receive this file, see L. =cut