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