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::Move; 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 'Kernel::Output::HTML::Layout', 22); 23 24sub Run { 25 my ( $Self, %Param ) = @_; 26 27 # get log object 28 my $LogObject = $Kernel::OM->Get('Kernel::System::Log'); 29 30 # check needed stuff 31 if ( !$Param{Ticket} ) { 32 $LogObject->Log( 33 Priority => 'error', 34 Message => 'Need Ticket!' 35 ); 36 return; 37 } 38 39 # get config object 40 my $ConfigObject = $Kernel::OM->Get('Kernel::Config'); 41 42 # check if frontend module registered, if not, do not show action 43 if ( $Param{Config}->{Action} ) { 44 my $Module = $ConfigObject->Get('Frontend::Module')->{ $Param{Config}->{Action} }; 45 return if !$Module; 46 } 47 48 # get ticket object 49 my $TicketObject = $Kernel::OM->Get('Kernel::System::Ticket'); 50 51 # check permission 52 my $Config = $ConfigObject->Get("Ticket::Frontend::$Param{Config}->{Action}"); 53 if ($Config) { 54 if ( $Config->{Permission} ) { 55 my $AccessOk = $TicketObject->Permission( 56 Type => $Config->{Permission}, 57 TicketID => $Param{Ticket}->{TicketID}, 58 UserID => $Self->{UserID}, 59 LogNo => 1, 60 ); 61 return if !$AccessOk; 62 } 63 } 64 65 # group check 66 if ( $Param{Config}->{Group} ) { 67 68 my @Items = split /;/, $Param{Config}->{Group}; 69 70 my $AccessOk; 71 ITEM: 72 for my $Item (@Items) { 73 74 my ( $Permission, $Name ) = split /:/, $Item; 75 76 if ( !$Permission || !$Name ) { 77 $LogObject->Log( 78 Priority => 'error', 79 Message => "Invalid config for Key Group: '$Item'! " 80 . "Need something like '\$Permission:\$Group;'", 81 ); 82 } 83 84 my %Groups = $Kernel::OM->Get('Kernel::System::Group')->PermissionUserGet( 85 UserID => $Self->{UserID}, 86 Type => $Permission, 87 ); 88 89 next ITEM if !%Groups; 90 91 my %GroupsReverse = reverse %Groups; 92 93 next ITEM if !$GroupsReverse{$Name}; 94 95 $AccessOk = 1; 96 97 last ITEM; 98 } 99 100 return if !$AccessOk; 101 } 102 103 # check acl 104 my %ACLLookup = reverse( %{ $Param{ACL} || {} } ); 105 return if ( !$ACLLookup{ $Param{Config}->{Action} } ); 106 107 $Param{Link} = 'Action=AgentTicketMove;TicketID=[% Data.TicketID | uri %];'; 108 109 if ( $ConfigObject->Get('Ticket::Frontend::MoveType') =~ /^form$/i ) { 110 $Param{Target} = ''; 111 $Param{Block} = 'DocumentMenuItemMoveForm'; 112 113 # get layout object 114 my $LayoutObject = $Kernel::OM->Get('Kernel::Output::HTML::Layout'); 115 116 # get move queues 117 my %MoveQueues = $TicketObject->MoveList( 118 TicketID => $Param{Ticket}->{TicketID}, 119 UserID => $Self->{UserID}, 120 Action => $LayoutObject->{Action}, 121 Type => 'move_into', 122 ); 123 $MoveQueues{0} = '- ' . $LayoutObject->{LanguageObject}->Translate('Move') . ' -'; 124 $Param{MoveQueuesStrg} = $LayoutObject->AgentQueueListOption( 125 Name => 'DestQueueID', 126 Data => \%MoveQueues, 127 Class => 'Modernize', 128 ); 129 } 130 else { 131 $Param{PopupType} = 'TicketAction'; 132 } 133 134 # return item 135 return { %{ $Param{Config} }, %{ $Param{Ticket} }, %Param }; 136} 137 1381; 139