# -- # 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::TicketWatcher; use parent 'Kernel::Output::HTML::Base'; use strict; use warnings; use Kernel::Language qw(Translatable); our @ObjectDependencies = ( 'Kernel::System::Log', 'Kernel::Config', 'Kernel::System::Group', 'Kernel::System::Ticket', 'Kernel::Output::HTML::Layout', ); sub Run { my ( $Self, %Param ) = @_; # check needed stuff if ( !$Param{Ticket} ) { $Kernel::OM->Get('Kernel::System::Log')->Log( Priority => 'error', Message => 'Need Ticket!' ); return; } # get config object my $ConfigObject = $Kernel::OM->Get('Kernel::Config'); # check if feature is active return if !$ConfigObject->Get('Ticket::Watcher'); # 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; } # check acl my %ACLLookup = reverse( %{ $Param{ACL} || {} } ); return if ( !$ACLLookup{ $Param{Config}->{Action} } ); # check access my @Groups; if ( $ConfigObject->Get('Ticket::WatcherGroup') ) { @Groups = @{ $ConfigObject->Get('Ticket::WatcherGroup') }; } my $Access = 1; if (@Groups) { $Access = 0; my $GroupObject = $Kernel::OM->Get('Kernel::System::Group'); GROUP: for my $Group (@Groups) { my $HasPermission = $GroupObject->PermissionCheck( UserID => $Self->{UserID}, GroupName => $Group, Type => 'rw', ); if ($HasPermission) { $Access = 1; last GROUP; } } } return if !$Access; # check if ticket get's watched right now my %Watch = $Kernel::OM->Get('Kernel::System::Ticket')->TicketWatchGet( TicketID => $Param{Ticket}->{TicketID}, ); # show subscribe action if ( $Watch{ $Self->{UserID} } ) { return { %{ $Param{Config} }, %{ $Param{Ticket} }, %Param, Name => Translatable('Unwatch'), Description => Translatable('Remove from list of watched tickets'), Link => 'Action=AgentTicketWatcher;Subaction=Unsubscribe;TicketID=[% Data.TicketID | uri %];[% Env("ChallengeTokenParam") | html %]', }; } # show unsubscribe action return { %{ $Param{Config} }, %{ $Param{Ticket} }, %Param, Name => Translatable('Watch'), Description => Translatable('Add to list of watched tickets'), Link => 'Action=AgentTicketWatcher;Subaction=Subscribe;TicketID=[% Data.TicketID | uri %];[% Env("ChallengeTokenParam") | html %]', }; } 1;