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::Modules::AdminQueueAutoResponse; 10 11use strict; 12use warnings; 13 14use Kernel::Language qw(Translatable); 15 16our $ObjectManagerDisabled = 1; 17 18sub new { 19 my ( $Type, %Param ) = @_; 20 21 # allocate new hash for object 22 my $Self = {%Param}; 23 bless( $Self, $Type ); 24 25 return $Self; 26} 27 28sub Run { 29 my ( $Self, %Param ) = @_; 30 31 my $ParamObject = $Kernel::OM->Get('Kernel::System::Web::Request'); 32 my $Output = ''; 33 $Param{ID} = $ParamObject->GetParam( Param => 'ID' ) || ''; 34 $Param{Action} = $ParamObject->GetParam( Param => 'Action' ) 35 || 'AdminQueueAutoResponse'; 36 $Param{Filter} = $ParamObject->GetParam( Param => 'Filter' ) || ''; 37 38 my $LayoutObject = $Kernel::OM->Get('Kernel::Output::HTML::Layout'); 39 my $QueueObject = $Kernel::OM->Get('Kernel::System::Queue'); 40 my $AutoResponseObject = $Kernel::OM->Get('Kernel::System::AutoResponse'); 41 42 if ( $Self->{Subaction} eq 'Change' ) { 43 $Output .= $LayoutObject->Header(); 44 $Output .= $LayoutObject->NavigationBar(); 45 46 # get Type Auto Responses data 47 my %TypeResponsesData = $AutoResponseObject->AutoResponseTypeList(); 48 49 # get queue data 50 my %QueueData = $QueueObject->QueueGet( 51 ID => $Param{ID}, 52 ); 53 54 $LayoutObject->Block( 55 Name => 'Overview', 56 Data => { 57 Subaction => $Self->{Subaction}, 58 QueueName => $QueueData{Name}, 59 }, 60 ); 61 $LayoutObject->Block( Name => 'ActionList' ); 62 $LayoutObject->Block( Name => 'ActionOverview' ); 63 64 $LayoutObject->Block( 65 Name => 'Selection', 66 Data => { 67 Queue => $QueueData{Name}, 68 %QueueData, 69 %Param, 70 ActionHome => 'AdminQueue', 71 }, 72 ); 73 for my $TypeID ( sort keys %TypeResponsesData ) { 74 75 # get all valid Auto Responses data for appropriate Auto Responses type 76 my %AutoResponseListByType = $AutoResponseObject->AutoResponseList( 77 TypeID => $TypeID, 78 ); 79 80 # get selected Auto Responses for appropriate Auto Responses type and Queue 81 my %AutoResponseData = $AutoResponseObject->AutoResponseGetByTypeQueueID( 82 QueueID => $Param{ID}, 83 Type => $TypeResponsesData{$TypeID}, 84 ); 85 86 $Param{DataStrg} = $LayoutObject->BuildSelection( 87 Name => "IDs_$TypeID", 88 SelectedID => $AutoResponseData{AutoResponseID} || '', 89 Data => \%AutoResponseListByType, 90 Size => 1, 91 PossibleNone => 1, 92 Class => 'Modernize W50pc', 93 ); 94 $LayoutObject->Block( 95 Name => 'ChangeItemList', 96 Data => { 97 Type => $TypeResponsesData{$TypeID}, 98 TypeID => $TypeID, 99 %Param, 100 }, 101 ); 102 } 103 $Output .= $LayoutObject->Output( 104 TemplateFile => 'AdminQueueAutoResponse', 105 Data => \%Param, 106 ); 107 $Output .= $LayoutObject->Footer(); 108 } 109 110 # queues to queue_auto_responses 111 elsif ( $Self->{Subaction} eq 'ChangeAction' ) { 112 113 # challenge token check for write action 114 $LayoutObject->ChallengeTokenCheck(); 115 116 my @NewIDs = (); 117 118 # get Type Auto Responses data 119 my %TypeResponsesData = $AutoResponseObject->AutoResponseTypeList(); 120 121 # set Auto Responses IDs for this queue. 122 for my $TypeID ( sort keys %TypeResponsesData ) { 123 push( @NewIDs, $ParamObject->GetParam( Param => "IDs_$TypeID" ) ); 124 } 125 126 $AutoResponseObject->AutoResponseQueue( 127 QueueID => $Param{ID}, 128 AutoResponseIDs => \@NewIDs, 129 UserID => $Self->{UserID}, 130 ); 131 132 # if the user would like to continue editing the queue - auto response relation, just redirect to the edit screen 133 # otherwise return to overview 134 if ( 135 defined $ParamObject->GetParam( Param => 'ContinueAfterSave' ) 136 && ( $ParamObject->GetParam( Param => 'ContinueAfterSave' ) eq '1' ) 137 ) 138 { 139 return $LayoutObject->Redirect( OP => "Action=$Self->{Action};Subaction=Change;ID=$Param{ID}" ); 140 } 141 else { 142 return $LayoutObject->Redirect( OP => "Action=$Self->{Action}" ); 143 } 144 } 145 146 # else ! print form 147 else { 148 $Output .= $LayoutObject->Header(); 149 $Output .= $LayoutObject->NavigationBar(); 150 151 # get queue data 152 my %QueueData; 153 my $QueueHeader; 154 155 # filter queues without auto responses 156 if ( $Param{Filter} eq 'QueuesWithoutAutoResponses' ) { 157 158 %QueueData = $AutoResponseObject->AutoResponseWithoutQueue(); 159 160 # use appropriate header 161 $QueueHeader = Translatable('Queues ( without auto responses )'); 162 163 } 164 else { 165 %QueueData = $QueueObject->QueueList( Valid => 1 ); 166 $QueueHeader = Translatable('Queues'); 167 } 168 169 $LayoutObject->Block( 170 Name => 'Overview', 171 Data => { %QueueData, %Param, } 172 ); 173 174 $LayoutObject->Block( Name => 'FilterQueues' ); 175 $LayoutObject->Block( Name => 'FilterAutoResponses' ); 176 $LayoutObject->Block( Name => 'ActionList' ); 177 178 if ( $Param{Filter} eq 'QueuesWithoutAutoResponses' ) { 179 $LayoutObject->Block( Name => 'ShowAllQueues' ); 180 } 181 else { 182 $LayoutObject->Block( Name => 'QueuesWithoutAutoResponses' ); 183 } 184 185 $LayoutObject->Block( 186 Name => 'OverviewResult', 187 Data => { 188 QueueHeader => $QueueHeader, 189 }, 190 ); 191 192 # if there are any queues, they are shown 193 if (%QueueData) { 194 for ( sort { $QueueData{$a} cmp $QueueData{$b} } keys %QueueData ) { 195 $LayoutObject->Block( 196 Name => 'Item', 197 Data => { 198 Queue => $QueueData{$_}, 199 QueueID => $_, 200 %QueueData, 201 %Param, 202 }, 203 ); 204 } 205 } 206 207 # otherwise a no data found message is displayed 208 else { 209 $LayoutObject->Block( 210 Name => 'NoQueuesFoundMsg', 211 Data => {}, 212 ); 213 } 214 215 # get valid Auto Response IDs 216 my %AutoResponseList = $AutoResponseObject->AutoResponseList(); 217 218 # if there are any auto responses, they are shown 219 if ( keys %AutoResponseList ) { 220 for my $AutoResponseID ( sort keys %AutoResponseList ) { 221 222 my %Data = $AutoResponseObject->AutoResponseGet( 223 ID => $AutoResponseID, 224 ); 225 226 my %ResponseDataItem = ( 227 ID => $Data{ID}, 228 Type => $Data{Type}, 229 Name => $Data{Name}, 230 ); 231 232 $LayoutObject->Block( 233 Name => 'ItemList', 234 Data => \%ResponseDataItem, 235 ); 236 } 237 } 238 239 # otherwise a no data found message is displayed 240 else { 241 $LayoutObject->Block( 242 Name => 'NoAutoResponsesFoundMsg', 243 Data => {}, 244 ); 245 } 246 247 $Output .= $LayoutObject->Output( 248 TemplateFile => 'AdminQueueAutoResponse', 249 Data => \%Param, 250 ); 251 $Output .= $LayoutObject->Footer(); 252 } 253 return $Output; 254} 255 2561; 257