1# -- 2# Copyright (C) 2001-2020 OTRS AG, https://otrs.com/ 3# -- 4# This software comes with ABSOLUTELY NO WARRANTY. For details, see 5# the enclosed file COPYING for license information (GPL). If you 6# did not receive this file, see https://www.gnu.org/licenses/gpl-3.0.txt. 7# -- 8 9package Kernel::Output::HTML::TicketMenu::Responsible; 10 11use parent 'Kernel::Output::HTML::Base'; 12 13use strict; 14use warnings; 15 16our @ObjectDependencies = ( 17 'Kernel::System::Log', 18 'Kernel::Config', 19 'Kernel::System::Ticket', 20 'Kernel::System::Group', 21); 22 23sub Run { 24 my ( $Self, %Param ) = @_; 25 26 # get log object 27 my $LogObject = $Kernel::OM->Get('Kernel::System::Log'); 28 29 # check needed stuff 30 if ( !$Param{Ticket} ) { 31 $LogObject->Log( 32 Priority => 'error', 33 Message => 'Need Ticket!' 34 ); 35 return; 36 } 37 38 # get config object 39 my $ConfigObject = $Kernel::OM->Get('Kernel::Config'); 40 41 # check if feature is enabled 42 return if !$ConfigObject->Get('Ticket::Responsible'); 43 44 # check if frontend module registered, if not, do not show action 45 if ( $Param{Config}->{Action} ) { 46 my $Module = $ConfigObject->Get('Frontend::Module')->{ $Param{Config}->{Action} }; 47 return if !$Module; 48 } 49 50 # check permission 51 my $Config = $ConfigObject->Get("Ticket::Frontend::$Param{Config}->{Action}"); 52 if ($Config) { 53 54 # get ticket object 55 my $TicketObject = $Kernel::OM->Get('Kernel::System::Ticket'); 56 57 if ( $Config->{Permission} ) { 58 59 my $AccessOk = $TicketObject->TicketPermission( 60 Type => $Config->{Permission}, 61 TicketID => $Param{Ticket}->{TicketID}, 62 UserID => $Self->{UserID}, 63 LogNo => 1, 64 ); 65 return if !$AccessOk; 66 } 67 if ( $Config->{RequiredLock} ) { 68 if ( 69 $TicketObject->TicketLockGet( TicketID => $Param{Ticket}->{TicketID} ) 70 ) 71 { 72 my $AccessOk = $TicketObject->OwnerCheck( 73 TicketID => $Param{Ticket}->{TicketID}, 74 OwnerID => $Self->{UserID}, 75 ); 76 return if !$AccessOk; 77 } 78 } 79 } 80 81 # group check 82 if ( $Param{Config}->{Group} ) { 83 84 my @Items = split /;/, $Param{Config}->{Group}; 85 86 my $AccessOk; 87 ITEM: 88 for my $Item (@Items) { 89 90 my ( $Permission, $Name ) = split /:/, $Item; 91 92 if ( !$Permission || !$Name ) { 93 $LogObject->Log( 94 Priority => 'error', 95 Message => "Invalid config for Key Group: '$Item'! " 96 . "Need something like '\$Permission:\$Group;'", 97 ); 98 } 99 100 my %Groups = $Kernel::OM->Get('Kernel::System::Group')->PermissionUserGet( 101 UserID => $Self->{UserID}, 102 Type => $Permission, 103 ); 104 105 next ITEM if !%Groups; 106 107 my %GroupsReverse = reverse %Groups; 108 109 next ITEM if !$GroupsReverse{$Name}; 110 111 $AccessOk = 1; 112 113 last ITEM; 114 } 115 116 return if !$AccessOk; 117 } 118 119 # check acl 120 my %ACLLookup = reverse( %{ $Param{ACL} || {} } ); 121 return if ( !$ACLLookup{ $Param{Config}->{Action} } ); 122 123 # return item 124 return { %{ $Param{Config} }, %{ $Param{Ticket} }, %Param }; 125} 126 1271; 128