# -- # 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::ProcessManagement::Activity; use strict; use warnings; use Kernel::System::VariableCheck qw(:all); our @ObjectDependencies = ( 'Kernel::Config', 'Kernel::System::Log', ); =head1 NAME Kernel::System::ProcessManagement::Activity - Activities lib =head1 DESCRIPTION All Process Management Activity functions. =head1 PUBLIC INTERFACE =head2 new() Don't use the constructor directly, use the ObjectManager instead: my $ActivityObject = $Kernel::OM->Get('Kernel::System::ProcessManagement::Activity'); =cut sub new { my ( $Type, %Param ) = @_; # allocate new hash for object my $Self = {}; bless( $Self, $Type ); return $Self; } =head2 ActivityGet() Get Activity info Returned activity dialogs are limited to given interface my $Activity = $ActivityObject->ActivityGet( ActivityEntityID => 'A1', Interface => ['AgentInterface'], # ['AgentInterface'] or ['CustomerInterface'] or ['AgentInterface', 'CustomerInterface'] or 'all' ); Returns: $Activity = { 'Name' => 'Activity 3' 'CreateTime' => '08-02-2012 13:37:00', 'ChangeBy' => '2', 'ChangeTime' => '09-02-2012 13:37:00', 'CreateBy' => '3', 'ActivityDialog' => { '1' => 'AD5', '3' => 'AD7', '2' => 'AD6', }, }; =cut sub ActivityGet { my ( $Self, %Param ) = @_; for my $Needed (qw(ActivityEntityID Interface)) { if ( !defined $Param{$Needed} ) { $Kernel::OM->Get('Kernel::System::Log')->Log( Priority => 'error', Message => "Need $Needed!" ); return; } } # get config object my $ConfigObject = $Kernel::OM->Get('Kernel::Config'); my $Activity = $ConfigObject->Get('Process::Activity'); if ( !IsHashRefWithData($Activity) ) { $Kernel::OM->Get('Kernel::System::Log')->Log( Priority => 'error', Message => 'Need Activity config!' ); return; } my $ActivityEntity = $Activity->{ $Param{ActivityEntityID} }; if ( !IsHashRefWithData($ActivityEntity) ) { $Kernel::OM->Get('Kernel::System::Log')->Log( Priority => 'error', Message => "No data for Activity '$Param{ActivityEntityID}' found!" ); return; } # limit activity dialogs by interface return $ActivityEntity if ref $Param{Interface} ne 'ARRAY' && $Param{Interface} eq 'all'; if ( ref $Param{Interface} ne 'ARRAY' && $Param{Interface} ne 'all' ) { $Param{Interface} = [ $Param{Interface} ]; } # get activity dialogs my $ActivityDialogs = $ConfigObject->Get('Process::ActivityDialog'); if ( IsHashRefWithData( $ActivityEntity->{ActivityDialog} ) ) { # filter activity dialogs ACTIVITYDIALOG: for my $ActivityDialogID ( sort keys %{ $ActivityEntity->{ActivityDialog} } ) { my $ActivityDialog = $ActivityEntity->{ActivityDialog}->{$ActivityDialogID}; if ( IsHashRefWithData($ActivityDialog) ) { $ActivityDialog = $ActivityDialog->{ActivityDialogEntityID}; } for my $Interface ( @{ $Param{Interface} } ) { # keep activity dialog if interface is included in activity dialog configuration if ( grep { $_ eq $Interface } @{ $ActivityDialogs->{$ActivityDialog}->{Interface} } ) { next ACTIVITYDIALOG; } } # remove activity dialog if no match could be found delete $ActivityEntity->{ActivityDialog}->{$ActivityDialogID}; } } return $ActivityEntity; } =head2 ActivityList() Get a list of all Activities my $Activities = $ActivityObject->ActivityList(); Returns: $ActivityList = { 'A1' => 'Activity 1', 'A2' => 'Activity 2', 'A3' => '', }; =cut sub ActivityList { my ( $Self, %Param ) = @_; my $Activities = $Kernel::OM->Get('Kernel::Config')->Get('Process::Activity'); if ( !IsHashRefWithData($Activities) ) { $Kernel::OM->Get('Kernel::System::Log')->Log( Priority => 'error', Message => 'Need Activity config!' ); return; } my %ActivityList = map { $_ => $Activities->{$_}->{Name} || '' } keys %{$Activities}; return \%ActivityList; } 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