# -- # 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::Output::HTML::TicketMenu::Move; use parent 'Kernel::Output::HTML::Base'; use strict; use warnings; our @ObjectDependencies = ( 'Kernel::System::Log', 'Kernel::Config', 'Kernel::System::Ticket', 'Kernel::System::Group', 'Kernel::Output::HTML::Layout', ); sub Run { my ( $Self, %Param ) = @_; # get log object my $LogObject = $Kernel::OM->Get('Kernel::System::Log'); # check needed stuff if ( !$Param{Ticket} ) { $LogObject->Log( Priority => 'error', Message => 'Need Ticket!' ); return; } # get config object my $ConfigObject = $Kernel::OM->Get('Kernel::Config'); # check if frontend module registered, if not, do not show action if ( $Param{Config}->{Action} ) { my $Module = $ConfigObject->Get('Frontend::Module')->{ $Param{Config}->{Action} }; return if !$Module; } # get ticket object my $TicketObject = $Kernel::OM->Get('Kernel::System::Ticket'); # check permission my $Config = $ConfigObject->Get("Ticket::Frontend::$Param{Config}->{Action}"); if ($Config) { if ( $Config->{Permission} ) { my $AccessOk = $TicketObject->Permission( Type => $Config->{Permission}, TicketID => $Param{Ticket}->{TicketID}, UserID => $Self->{UserID}, LogNo => 1, ); return if !$AccessOk; } } # group check if ( $Param{Config}->{Group} ) { my @Items = split /;/, $Param{Config}->{Group}; my $AccessOk; ITEM: for my $Item (@Items) { my ( $Permission, $Name ) = split /:/, $Item; if ( !$Permission || !$Name ) { $LogObject->Log( Priority => 'error', Message => "Invalid config for Key Group: '$Item'! " . "Need something like '\$Permission:\$Group;'", ); } my %Groups = $Kernel::OM->Get('Kernel::System::Group')->PermissionUserGet( UserID => $Self->{UserID}, Type => $Permission, ); next ITEM if !%Groups; my %GroupsReverse = reverse %Groups; next ITEM if !$GroupsReverse{$Name}; $AccessOk = 1; last ITEM; } return if !$AccessOk; } # check acl my %ACLLookup = reverse( %{ $Param{ACL} || {} } ); return if ( !$ACLLookup{ $Param{Config}->{Action} } ); $Param{Link} = 'Action=AgentTicketMove;TicketID=[% Data.TicketID | uri %];'; if ( $ConfigObject->Get('Ticket::Frontend::MoveType') =~ /^form$/i ) { $Param{Target} = ''; $Param{Block} = 'DocumentMenuItemMoveForm'; # get layout object my $LayoutObject = $Kernel::OM->Get('Kernel::Output::HTML::Layout'); # get move queues my %MoveQueues = $TicketObject->MoveList( TicketID => $Param{Ticket}->{TicketID}, UserID => $Self->{UserID}, Action => $LayoutObject->{Action}, Type => 'move_into', ); $MoveQueues{0} = '- ' . $LayoutObject->{LanguageObject}->Translate('Move') . ' -'; $Param{MoveQueuesStrg} = $LayoutObject->AgentQueueListOption( Name => 'DestQueueID', Data => \%MoveQueues, Class => 'Modernize', ); } else { $Param{PopupType} = 'TicketAction'; } # return item return { %{ $Param{Config} }, %{ $Param{Ticket} }, %Param }; } 1;