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::ToolBar::TicketWatcher; 10 11use parent 'Kernel::Output::HTML::Base'; 12 13use strict; 14use warnings; 15 16use Kernel::Language qw(Translatable); 17 18our @ObjectDependencies = ( 19 'Kernel::Config', 20 'Kernel::Output::HTML::Layout', 21 'Kernel::System::Group', 22 'Kernel::System::Log', 23 'Kernel::System::Ticket', 24); 25 26sub Run { 27 my ( $Self, %Param ) = @_; 28 29 # get config object 30 my $ConfigObject = $Kernel::OM->Get('Kernel::Config'); 31 32 # check if feature is active 33 return if !$ConfigObject->Get('Ticket::Watcher'); 34 35 # check needed stuff 36 for (qw(Config)) { 37 if ( !$Param{$_} ) { 38 $Kernel::OM->Get('Kernel::System::Log')->Log( 39 Priority => 'error', 40 Message => "Need $_!" 41 ); 42 return; 43 } 44 } 45 46 return if !$ConfigObject->Get('Frontend::Module')->{AgentTicketWatchView}; 47 48 # get layout object 49 my $LayoutObject = $Kernel::OM->Get('Kernel::Output::HTML::Layout'); 50 51 # check access 52 my @Groups; 53 if ( $ConfigObject->Get('Ticket::WatcherGroup') ) { 54 @Groups = @{ $ConfigObject->Get('Ticket::WatcherGroup') }; 55 } 56 if (@Groups) { 57 my $Access = 0; 58 my $GroupObject = $Kernel::OM->Get('Kernel::System::Group'); 59 GROUP: 60 for my $Group (@Groups) { 61 my $HasPermission = $GroupObject->PermissionCheck( 62 UserID => $Self->{UserID}, 63 GroupName => $Group, 64 Type => 'rw', 65 ); 66 if ($HasPermission) { 67 $Access = 1; 68 last GROUP; 69 } 70 } 71 72 # return on no access 73 return if !$Access; 74 } 75 76 # get ticket object 77 my $TicketObject = $Kernel::OM->Get('Kernel::System::Ticket'); 78 79 # find watched tickets 80 my $Count = $TicketObject->TicketSearch( 81 Result => 'COUNT', 82 WatchUserIDs => [ $Self->{UserID} ], 83 UserID => 1, 84 Permission => 'ro', 85 ) || 0; 86 my $CountNew = $TicketObject->TicketSearch( 87 Result => 'COUNT', 88 WatchUserIDs => [ $Self->{UserID} ], 89 TicketFlag => { 90 Seen => 1, 91 }, 92 TicketFlagUserID => $Self->{UserID}, 93 UserID => 1, 94 Permission => 'ro', 95 ) || 0; 96 $CountNew = $Count - $CountNew; 97 98 my $CountReached = $TicketObject->TicketSearch( 99 Result => 'COUNT', 100 StateType => ['pending reminder'], 101 WatchUserIDs => [ $Self->{UserID} ], 102 TicketPendingTimeOlderMinutes => 1, 103 UserID => 1, 104 Permission => 'ro', 105 ) || 0; 106 107 my $Class = $Param{Config}->{CssClass}; 108 my $ClassNew = $Param{Config}->{CssClassNew}; 109 my $ClassReached = $Param{Config}->{CssClassReached}; 110 111 my $Icon = $Param{Config}->{Icon}; 112 my $IconNew = $Param{Config}->{IconNew}; 113 my $IconReached = $Param{Config}->{IconReached}; 114 115 my $URL = $LayoutObject->{Baselink}; 116 my %Return; 117 my $Priority = $Param{Config}->{Priority}; 118 if ($CountNew) { 119 $Return{ $Priority++ } = { 120 Block => 'ToolBarItem', 121 Description => Translatable('Watched Tickets New'), 122 Count => $CountNew, 123 Class => $ClassNew, 124 Icon => $IconNew, 125 Link => $URL . 'Action=AgentTicketWatchView;Filter=New', 126 AccessKey => $Param{Config}->{AccessKeyNew} || '', 127 }; 128 } 129 if ($CountReached) { 130 $Return{ $Priority++ } = { 131 Block => 'ToolBarItem', 132 Description => Translatable('Watched Tickets Reminder Reached'), 133 Count => $CountReached, 134 Class => $ClassReached, 135 Icon => $IconReached, 136 Link => $URL . 'Action=AgentTicketWatchView;Filter=ReminderReached', 137 AccessKey => $Param{Config}->{AccessKeyReached} || '', 138 }; 139 } 140 if ($Count) { 141 $Return{ $Priority++ } = { 142 Block => 'ToolBarItem', 143 Description => Translatable('Watched Tickets Total'), 144 Count => $Count, 145 Class => $Class, 146 Icon => $Icon, 147 Link => $URL . 'Action=AgentTicketWatchView', 148 AccessKey => $Param{Config}->{AccessKey} || '', 149 }; 150 } 151 return %Return; 152} 153 1541; 155