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::Generic; 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 frontend module registered, if not, do not show action 42 if ( $Param{Config}->{Action} ) { 43 my $Module = $ConfigObject->Get('Frontend::Module')->{ $Param{Config}->{Action} }; 44 return if !$Module; 45 46 # get ticket object 47 my $TicketObject = $Kernel::OM->Get('Kernel::System::Ticket'); 48 49 # check permission 50 my $Config = $ConfigObject->Get("Ticket::Frontend::$Param{Config}->{Action}"); 51 52 if ( $Config->{Permission} ) { 53 my $AccessOk = $TicketObject->TicketPermission( 54 Type => $Config->{Permission}, 55 TicketID => $Param{Ticket}->{TicketID}, 56 UserID => $Self->{UserID}, 57 LogNo => 1, 58 ); 59 return if !$AccessOk; 60 } 61 if ( $Config->{RequiredLock} ) { 62 if ( 63 $TicketObject->TicketLockGet( TicketID => $Param{Ticket}->{TicketID} ) 64 ) 65 { 66 my $AccessOk = $TicketObject->OwnerCheck( 67 TicketID => $Param{Ticket}->{TicketID}, 68 OwnerID => $Self->{UserID}, 69 ); 70 return if !$AccessOk; 71 } 72 } 73 } 74 75 # group check 76 if ( $Param{Config}->{Group} ) { 77 78 my @Items = split /;/, $Param{Config}->{Group}; 79 80 my $AccessOk; 81 ITEM: 82 for my $Item (@Items) { 83 84 my ( $Permission, $Name ) = $Item =~ m{^([^:]+):(.*)$}; 85 86 if ( !$Permission || !$Name ) { 87 $LogObject->Log( 88 Priority => 'error', 89 Message => "Invalid config for Key Group: '$Item'! " 90 . "Need something like '\$Permission:\$Group;'", 91 ); 92 } 93 94 my %Groups = $Kernel::OM->Get('Kernel::System::Group')->PermissionUserGet( 95 UserID => $Self->{UserID}, 96 Type => $Permission, 97 ); 98 99 next ITEM if !%Groups; 100 101 my %GroupsReverse = reverse %Groups; 102 103 next ITEM if !$GroupsReverse{$Name}; 104 105 $AccessOk = 1; 106 107 last ITEM; 108 } 109 110 return if !$AccessOk; 111 } 112 113 # check acl 114 if ( $Param{Config}->{Action} ) { 115 my %ACLLookup = reverse( %{ $Param{ACL} || {} } ); 116 return if ( !$ACLLookup{ $Param{Config}->{Action} } ); 117 } 118 119 # return item 120 return { %{ $Param{Config} }, %{ $Param{Ticket} }, %Param }; 121} 122 1231; 124