1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104
|
# --
# Copyright (C) 2021 Znuny GmbH, https://znuny.org/
# --
# This software comes with ABSOLUTELY NO WARRANTY. For details, see
# the enclosed file COPYING for license information (AGPL). If you
# did not receive this file, see http://www.gnu.org/licenses/agpl.txt.
# --
package Kernel::Output::HTML::ToolBar::TicketProcess;
use parent 'Kernel::Output::HTML::Base';
use strict;
use warnings;
use Kernel::System::VariableCheck qw(:all);
our @ObjectDependencies = (
'Kernel::Config',
'Kernel::Output::HTML::Layout',
'Kernel::System::Log',
'Kernel::System::ProcessManagement::Process',
'Kernel::System::Ticket',
);
sub Run {
my ( $Self, %Param ) = @_;
my $ConfigObject = $Kernel::OM->Get('Kernel::Config');
my $LayoutObject = $Kernel::OM->Get('Kernel::Output::HTML::Layout');
my $LogObject = $Kernel::OM->Get('Kernel::System::Log');
my $TicketObject = $Kernel::OM->Get('Kernel::System::Ticket');
my $ProcessObject = $Kernel::OM->Get('Kernel::System::ProcessManagement::Process');
for my $Needed (qw(Config)) {
if ( !$Param{$Needed} ) {
$LogObject->Log(
Priority => 'error',
Message => "Need $Needed!"
);
return;
}
}
# check if frontend module is used
my $Action = $Param{Config}->{Action};
if ($Action) {
return if !$ConfigObject->Get('Frontend::Module')->{$Action};
}
my $ProcessList = $ProcessObject->ProcessList(
ProcessState => ['Active'],
Interface => ['AgentInterface'],
Silent => 1,
);
# prepare process list for ACLs, use only entities instead of names, convert from
# P1 => Name to P1 => P1. As ACLs should work only against entities
my %ProcessListACL = map { $_ => $_ } sort keys %{$ProcessList};
# validate the ProcessList with stored ACLs
my $ACL = $TicketObject->TicketAcl(
ReturnType => 'Process',
ReturnSubType => '-',
Data => \%ProcessListACL,
Action => $Self->{Action},
UserID => $Self->{UserID},
);
if ( IsHashRefWithData($ProcessList) && $ACL ) {
# get ACL results
my %ACLData = $TicketObject->TicketAclData();
# recover process names
my %ReducedProcessList = map { $_ => $ProcessList->{$_} } sort keys %ACLData;
# replace original process list with the reduced one
$ProcessList = \%ReducedProcessList;
}
return if ( !IsHashRefWithData($ProcessList) );
# get item definition
my $Text = $LayoutObject->{LanguageObject}->Translate( $Param{Config}->{Name} );
my $URL = $LayoutObject->{Baselink} . $Param{Config}->{Link};
my $Priority = $Param{Config}->{Priority};
my $AccessKey = $Param{Config}->{AccessKey};
my $CssClass = $Param{Config}->{CssClass};
my $Icon = $Param{Config}->{Icon};
my %Return;
$Return{$Priority} = {
Block => 'ToolBarItem',
Description => $Text,
Class => $CssClass,
Icon => $Icon,
Link => $URL,
AccessKey => $AccessKey,
};
return %Return;
}
1;
|